﻿$(document).ready(function()
{
	var lstIndustry = $('select[id$="lstIndustry"]');
	var hidPostcodeLat = $('input:hidden[id$="hidPostcodeLat"]');
	var hidPostcodeLong = $('input:hidden[id$="hidPostcodeLong"]');
	var hidPostcodeRadius = $('input:hidden[id$="hidPostcodeRadius"]');
	var divMapViewVacancyList = $('div.mapViewVacancyList');
	var btnSearchVacancies = $('#btnSearchVacancies');
	var divIndustries = $('#divIndustries');

	var lstIndustryDiv = lstIndustry.parent();

	var multiselectMinWidth = lstIndustry.attr('MinWidth');
	if (multiselectMinWidth === undefined || multiselectMinWidth.length === 0 || parseInt(multiselectMinWidth) === 0)
		multiselectMinWidth = 238;

	lstIndustry.multiSelect({minWidth:multiselectMinWidth, noneSelectedText: 'Select industry sectors', selectedList: 10});
	lstIndustryDiv.show();

	var txtPostcode = $('input:text[id$="txtPostcode"]');
	var txtKeywords = $('input:text[id$="txtKeywords"]');
	var txtMiles = $('input:text[id$="txtMiles"]');
	var btnSearchVacancies = $('input[id$="btnSearchVacancies"]');
	var ddlJobType = $('select[id$="ddlJobType"]');
	var vacancyBoxes = $(txtPostcode).add(txtKeywords).add(txtMiles);
	vacancyBoxes.keypress(function(e)
	{
		if (e.keyCode === 13)
		{
			btnSearchVacancies.click();
			e.preventDefault();
			return false;
		}
	});
	vacancyBoxes.placeholder();


	function HasNonPlaceholderValue(textBox)
	{
		return Common.Validation.HasValue(textBox.val()) && textBox.val() !== textBox.attr('placeholder');
	}
	
	if (hidPostcodeLat.val().length > 0 && hidPostcodeLong.val().length > 0)
	{
		var latLong = new google.maps.LatLng(parseFloat(hidPostcodeLat.val()), parseFloat(hidPostcodeLong.val())); 
		var myOptions = { 
			zoom: 8, 
			center: latLong, 
			mapTypeId: google.maps.MapTypeId.ROADMAP 
		}; 
		var map = new google.maps.Map(divMapViewVacancyList[0], myOptions); 

		drawCircle(map, latLong, parseInt(hidPostcodeRadius.val()));

	}
	else
	{
		var map;
		if (divMapViewVacancyList.length > 0)
			map = new google.maps.Map(divMapViewVacancyList[0], { zoom: 5, center: new google.maps.LatLng(55,-3.5), mapTypeId: google.maps.MapTypeId.ROADMAP }); 
	}

	function drawCircle(map, point, radius) {
		var d2r = Math.PI / 180;
		var circleLatLngs = new Array();
		var circleLat = radius * 0.014483;  // Convert statute miles into degrees latitude
		var circleLng = circleLat / Math.cos(point.lat() * d2r);
		var numPoints = 360;
 
		var latlngbounds = new google.maps.LatLngBounds( );
 
		// 2PI = 360 degrees, +1 so that the end points meet
		for (var i = 0; i < numPoints + 1; i++) { 
			var theta = Math.PI * (i / (numPoints / 2)); 
			var vertexLat = point.lat() + (circleLat * Math.sin(theta)); 
			var vertexLng = parseFloat(point.lng()) + parseFloat((circleLng * Math.cos(theta)));
			var vertextLatLng = new google.maps.LatLng(vertexLat, vertexLng);
			circleLatLngs.push(vertextLatLng);
			latlngbounds.extend(vertextLatLng);
		}
 
		var polygon = new google.maps.Polygon({
			paths: circleLatLngs
		});
 
		polygon.setMap(map);
		map.fitBounds(latlngbounds);
	}

	$('select[id$="ddlPageNumber"]').change(function(e)
	{
		var thisDDl = $(this);
		var querystring = window.location.search.length > 0 ? $.parseQuery() : {};
		var paging = {};
		paging.Page = thisDDl.val();
		$.extend(querystring, paging);
		location.href = location.pathname + '?' + $.param(querystring);
		e.preventDefault();
		return false;
	});
	$('select[id$="ddlPageSize"]').change(function(e)
	{
		var thisDDl = $(this);
		var querystring = window.location.search.length > 0 ? $.parseQuery() : {};
		var paging = {};
		paging.PageSize = thisDDl.val();
		$.extend(querystring, paging);
		location.href = location.pathname + '?' + $.param(querystring);
		e.preventDefault();
		return false;
	});
	$('a[id$="lnkPrev"]').click(function(e)
	{
		var thisLink = $(this);
		var pageNoDDL = thisLink.parents('table:first').find('select[id$="ddlPageNumber"]');
		var pageNo = parseInt(pageNoDDL.val());
		var querystring = window.location.search.length > 0 ? $.parseQuery() : {};
		var paging = {};
		paging.Page = pageNo - 1;
		$.extend(querystring, paging);
		location.href = location.pathname + '?' + $.param(querystring);
		e.preventDefault();
		return false;		
	});
	$('a[id$="lnkNext"]').click(function(e)
	{
		var thisLink = $(this);
		var pageNoDDL = thisLink.parents('table:first').find('select[id$="ddlPageNumber"]');
		var pageNo = parseInt(pageNoDDL.val());
		var querystring = window.location.search.length > 0 ? $.parseQuery() : {};
		var paging = {};
		paging.Page = pageNo + 1;
		$.extend(querystring, paging);
		location.href = location.pathname + '?' + $.param(querystring);
		e.preventDefault();
		return false;		
	});

		btnSearchVacancies.click(function(e)
		{
			e.preventDefault();
			var postCodeEntered = HasNonPlaceholderValue(txtPostcode);
			var milesEntered = HasNonPlaceholderValue(txtMiles);
			var keywordsEntered = HasNonPlaceholderValue(txtKeywords);
			var validateError = '';

			if (milesEntered)
			{
				if (!Common.Validation.ValidInt(txtMiles.val()))
					validateError += 'You must enter a valid number of miles\n';
				if (!postCodeEntered)
					validateError += 'If you enter a number of miles, you must also enter a postcode or place name\n';
			}
			if (postCodeEntered)
			{
				if (!milesEntered)
					validateError += 'If you enter a postcode or place name, you must also enter a number of miles\n';
			}

			if (validateError.length > 0)
			{
				alert(validateError);
			}
			else
			{
				var qs =	{
								keywords:	(keywordsEntered ? $.trim(txtKeywords.val()) : ''),
//								miles:		(milesEntered ? $.trim(txtMiles.val()) : ''),
//								postcode:	(postCodeEntered ? $.trim(txtPostcode.val()) : ''),
								industries:	$.map($('div.divVacancySearch input:checked'), function (n) { return $(n).val(); }).join(','),
								jobtype:	ddlJobType.length > 0 ? ddlJobType.val() : ''
							};
				if (milesEntered)
					qs.miles = $.trim(txtMiles.val());
				if (postCodeEntered)
					$.trim(txtPostcode.val());
				
				var currentQuerystring = window.location.search.length > 0 ? $.parseQuery() : {};
				$.extend(currentQuerystring, qs);

				if (milesEntered && postCodeEntered)
				{
					var geocoder = new google.maps.Geocoder(); 
					if (geocoder) 
					{ 
						// Lookup the location
						geocoder.geocode( { 'address': txtPostcode.val(), 'region': 'uk' },	function(results, status) 
																		{ 
																			if (status == google.maps.GeocoderStatus.OK) 
																			{ 
																				results[0].geometry.location 
																				qs.coords = results[0].geometry.location.lat() + ',' + results[0].geometry.location.lng();
																				location.href = 'Vacancies.aspx?' + $.param(qs, true);
																			} 
																			else 
																			{ 
																				alert("Geocode was not successful for the following reason: " + status); 
																			} 
																		}); 
					} 
				}
				else
				{
					location.href = 'Vacancies.aspx?' + $.param(qs, true);
				}
			}
			return false;
		});


});

