var localSearch;
var distances = [];

var main_point;

$(function(){
	localSearch = new GlocalSearch();
	mt = $("#mainTable");
	//initTable(); // -- no results on initial display
	$("#range_box").hide();
	$("#bypostcode").focus(function(){
		$("#range_box").show();

		});
	$("#bytown").focus(function(){
		if(!$("#bypostcode").val())
			$("#range_box").hide();
		});
		
	$(".afterPageLoad").show();
	
	// toggle + / -
	$('div.jobfunction a').click(function(){
		$(this).toggleClass("collapsed");		
		return false;	
	});
	
	});

function gPostcode(postcode, callbackFunction) {
  setStatus("Geocoding your postcode. Please wait ...");

  localSearch.setSearchCompleteCallback(null,
    function() {

      if (localSearch.results[0]) {
        var resultLat = localSearch.results[0].lat;
        var resultLng = localSearch.results[0].lng;
        var point = new GLatLng(resultLat,resultLng);
		main_point = point;
        callbackFunction(point);
      }else{
        alert("Postcode not found!");
		setStatus("");
      }
    });

  localSearch.execute(postcode + ", UK");
}



function searchPostCode(){
	var postcode = $("#bypostcode").val();
	
	var pattern =/[0-9]+/i;
	if(!pattern.test(postcode)){
		alert("Please insert a valid postcode.");	
		return false;	
		}
	
	$("#england_swf").show();
	$("#england_jpg").hide();
	search_type = "postcode";
	
	other_points_count = 0;
	gPostcode(postcode,getOtherPointsLngLat);
	return false;
	}

var other_points_count = 0;
function getOtherPointsLngLat(){
	var k 	 = other_points[other_points_count];
	var name = k.city;
	var lng  = k.lng;
	var lat  = k.lat;
	if(lng && lat){
		other_points[other_points_count].ll = true;
		other_points[other_points_count].glnglat = new GLatLng(lat,lng);
		other_points_count++;
		if(other_points_count != other_points.length)
				getOtherPointsLngLat();
			else
				gotOtherPoints();
		return;
		}

	localSearch.setSearchCompleteCallback(null,
	    function() {
			if(localSearch.results[0]) {
				other_points[other_points_count].ll = true;
				other_points[other_points_count].lng = localSearch.results[0].lng;
				other_points[other_points_count].lat = localSearch.results[0].lat;
				other_points[other_points_count].glnglat = new GLatLng(localSearch.results[0].lat,localSearch.results[0].lng);
				//saveLngLat(other_points[other_points_count].id,localSearch.results[0].lng,localSearch.results[0].lat);
		  	}else
				other_points[other_points_count].ll = false;
				
			other_points_count++;
			if(other_points_count != other_points.length)
				getOtherPointsLngLat();
			else
				gotOtherPoints();
			
		});
	name = prepName(name);
	localSearch.execute(name + ", UK");
	}

function prepName(name){
	var separators = [",","&amp;","&","-"]; //not used yet
	name = name.split(separators[0]);
	name = name[0];
	
	name = name.split(separators[1]);
	name = name[0];
	
	name = name.split(separators[2]);
	name = name[0];	
	
	name = name.split(separators[3]);
	name = name[0];	
	return name;
	}
function gotOtherPoints(){
	getDistances();
	}

var distances = [];
function getDistances(){
	distances = [];
	var i,dist;
	for(i=0;i<other_points.length;i++){
	
		if(other_points[i].ll)
			dist = Math.round(km2miles(main_point.distanceFrom(other_points[i].glnglat) / 1000));
		else
			dist = -1;

		other_points[i].dist = dist;
		var k = other_points[i];
		//console.log(k.city);
		if(search_type == "town"){
			//console.log(checkDuplicateCity(k.city, results));
			
			if(checkDuplicateCity(k.city, results))
				distances.push(k);
			else
				k.dist = -1;
		}else
			distances.push(k);
		}
	bubbleSortDistances();
	makeTableByPostcode(distances);
	}

function checkDuplicateCity(city, arr){
	for(j=0;j<arr.length;j++)
		if(city == arr[j].city)
			return false;
	
	return true;
	}

function km2miles(km){
	var u = 1.609344;//km = 1 mile
	return km / u;
	}
	
function bubbleSortDistances(){
	inputArray = distances;
	start = 0;
	rest  = distances.length-1;
	for (var i = rest - 1; i >= start;  i--) {
		for (var j = start; j <= i; j++) {
			var c1 = inputArray[j+1].dist;
			var c2 = inputArray[j].dist;
			if (c1 < c2) {
				var tempValue = inputArray[j];
				inputArray[j] = inputArray[j+1];
				inputArray[j+1] = tempValue;
      			}
   			}
		}
	return inputArray;
	}

function saveLngLat(id,lng,lat){//this function has been deprecated
	$.get("ajax/save_data.php",{id:id,lng:lng,lat:lat});
	}

function setStatus(status){
	$("#status").html(status);
	}


//paginare
var current_page = 0;
var per_page	 = 10;
var max_page	 = 0;
var mt;

function clearDistances(){
	var l = other_points.length;
	for(i=0;i<l;i++){
		other_points[i].dist = -1;
		}
	}
var search_type;
function searchTown(){
	setStatus("");
	current_page = 0;
	clearCurrentPage();
	clearDistances();
	var search = $("#bytown").val();
	var proximity_match = 30; //miles
	other_points_count  = 0;

	var l = other_points.length;
	
	results = [];
	for(i=0;i<l;i++){
		k = other_points[i];
		if(k.city.toLowerCase().match(search.toLowerCase()) && checkSection(k, 'retail') && checkPosition(k)){
			results.push(k);
			}
		}

	max_page = Math.ceil(results.length / per_page);
	makePage(results);
	
	
	setStatus("Geocoding your town. Please wait ...");
	
	$.get("/ajax/get_postcode.php",{city:search},function(data){
		if(data != "false"){
				search = data;
		    }
			localSearch.setSearchCompleteCallback(null,
			function() {
			  if (localSearch.results[0]) {
				var resultLat = localSearch.results[0].lat;
				var resultLng = localSearch.results[0].lng;
				var point = new GLatLng(resultLat,resultLng);
				main_point = point;
	
				search_type = "town";
				getOtherPointsLngLat(main_point);
	
				return;
			  }else{
				  setStatus("");
				  }
			});

		  localSearch.execute(search + ", UK");
		
		});
	return false;
	}

function makeTableByPostcode(arr, range){
	//console.log(results);
	
	if(search_type != "town")
		results = [];
	
	var l = arr.length,k;
	if(search_type == "town")
		var range = 30;
	else
		var range = parseInt($("#range").val());
		
	for(i=0;i<l;i++){
		var k = arr[i];
		if(k.dist != -1 && k.dist <= range && checkSection(k, 'retail') && checkPosition(k)){
			results.push(k);
			}
		}

	current_page = 0;
	max_page = Math.ceil(results.length / per_page);
	clearCurrentPage();
	makePage(results);
	$(".total_results").html(results.length);
	if(results.length)
		setStatus("Found ("+results.length+") results.");
	else
		setStatus("Sorry, there are no jobs matching your criteria.");
	}

function initTable(){
	results = other_points;
	max_page = Math.ceil(other_points.length / per_page);
	getPage(0);
	}

function getPage(page){
	makePage(other_points);
	return;
	$.getJSON("ajax/get_page.php",{page:page},
	function(data){
		clearCurrentPage();
		makePage(data);
		});
	}

function clearCurrentPage(){
	$("#mainTable tbody").empty();
	$(".counter_count").text("0-0");
	$(".total_results").text("0");
	}

function makePage(data){
	
	//data = other_points;
	var l = data.length,i,row,k;
	for(i=current_page*per_page;(i<l && i<(current_page+1)*per_page);i++){
		k = data[i];
		var city = k.city;
		if(typeof(k.dist) != "undefined" && k.dist != -1)
			city +=" ("+k.dist+" miles)";

		row = "<tr>";
			row += '\t<td collspan="10"><div class="jobfunction">'+ resultsLink(k.title,k.id) +'</div><div class="joblocation">'+ city +'</div><div class="jobdate">Date: '+ k.date +'</div><div class="more" id="more_'+k.id+'" style="display: none;">Loading</div></td>';
			//row += "\t<td>" + k.id + "</td><td>" + k.date + "</td><td>" + thickboxLink(k.title,k.id) + "</td><td>" + city + "</td>";
		row+= "</tr>";

		$("#mainTable tbody").append(row);

		}
	updateCounter(i,data);
	zebra();
	if(l == 0)
		$("#mainTable tbody").append("<tr><td colspan='4' class='no_results'>No results found.</td></tr>");
	
	// Show / hide pager 
	
	if(l < per_page){
		$("#pager").hide();
	}else{
		$("#pager").show();
		}
		
	}

function updateCounter(last,data){
	if (last){ 
		$(".total_results").html(data.length);
		var str  = ((current_page*per_page)+1)+"-"+last;
		$(".counter_count").text(str);
			}
		else {
			$(".counter_count").parents("div").each(function(e){
				if(e==0) {
					$(this).text("");
				}
			});
		}
	}

function resultsLink(str,id){
	var ret;
	ret = "<a href='entry.php?id="+id+"' class='thickbox'>"+str+"</a>";//from former thickbox implementation
	ret = "<a href='javascript:void(0)' onclick='toggleMore("+id+")'>"+str+"</a>";
	return ret;
	}
	
function gup(name){
	name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	var regexS = "[\\?&]"+name+"=([^&#]*)";
	var regex = new RegExp( regexS );
	var results = regex.exec( window.location.href );
	if( results == null )
		return "";
	else
		return results[1];
	}

function toggleMore(id){
	var defaultText		= "Loading";
	var more_url    	= "ajax/job_details.php";//for ajax
	
	$("#more_"+id).toggle();
	if($("#more_"+id).text() == defaultText){
		$.getJSON(more_url, {id:id},function(data){
			var more_action   	= 'mypopUp("entry.php?id='+id+'&jtype='+(gup("search")!=="" ? "_"+gup("search") : '')+'")';//for popup
			var p = "<p>"+data.p+"<a href='javascript:void(0)' onclick='"+more_action+"'>» more...</a></p>";
			//console.log(p);
			var sal_min = "Min Salary: £"+data.sal_min;
			var sal_max = "Max Salary: £"+data.sal_max;
			var sal		= '<div class="salary">'+sal_min+"<br/>"+sal_max+"</div>";
			
			$("#more_"+id).html(p+sal);
			})
		}
	return;
	}	

function mypopUp(url) {
	var newwindow = window.open(url,'name','height=685,width=605,scrollbars=1');
	if (window.focus) {newwindow.focus()}
	return false;
}

	

function zebra(){
	$("#mainTable tbody tr:odd").addClass("odd");
	$("#mainTable tbody tr").hover(
		function(){
			$(this).addClass("hover");
			},
		function(){
			$(this).removeClass("hover");
			});


	}

function nextPage(){
	if(current_page == max_page-1)
		return;
	current_page++;
	clearCurrentPage();
	makePage(results);
	}
function prevPage(){
	if(current_page == 0)
		return;
	current_page--;
	clearCurrentPage();
	makePage(results);
	}
function lastPage(){
	current_page = max_page-1;
	clearCurrentPage();
	makePage(results);
	}
function firstPage(){
	current_page = 0;
	clearCurrentPage();
	makePage(results);
	}

//----------------------
$(function(){
	if(typeof(opened_search) == "undefined"  || !opened_search){
		openes_search = 'sbl';
		}

	$("#options_wrap").removeClass("relativeHidden");
	
	//console.log("!?@#");
	$("#scc_options,#sbl_options,#sho_options").hide();

	
	$("#"+opened_search+"_options").show();
	$("#"+opened_search).addClass("nu");
	var ti;
	
	switch(opened_search){
		case 'sbl':
			ti = "jobsearch-retail.gif";
		break;
		case 'scc':
			ti = "jobsearch-callcenter.gif";
		break
		case 'sho':
			ti = "jobsearch-headoffice.gif";
		break;
		}
	//$(".heading_image").attr("src","images/"+ti);
	});


function searchByLocation2(){
	var myID = "sbl";
	var title_img = "jobsearch-retail.gif";
	if(opened_search == myID)
		return;


	$("#"+myID+"_options").show();
	$("#"+opened_search+"_options").hide();

	$("#"+myID).addClass("nu");
	$("#"+opened_search).removeClass("nu");

	opened_search = myID;
	//$(".heading_image").attr("src","images/"+title_img);
	updateSIFR("Retail");
	
	updateMenu(myID);
	}

function searchCustomerCare(){// Call Center

	var myID = "scc";
	var title_img = "jobsearch-callcenter.gif";
	
	if(opened_search == myID)
		return;
		
	$("#"+myID+"_options").show();
	$("#"+opened_search+"_options").hide();

	$("#"+myID).addClass("nu");
	$("#"+opened_search).removeClass("nu");

	opened_search = myID;
	//$(".heading_image").attr("src","images/"+title_img);
	updateSIFR("Call centre");
	
	setStatus("");
	current_page = 0;
	clearCurrentPage();
	clearDistances();
	updateMenu(myID);
	}
function searchByLocation(){
	var myID = "sho";
	var title_img = "jobsearch-headoffice.gif";
	if(opened_search == myID)
		return;

	$("#"+myID+"_options").show();
	$("#"+opened_search+"_options").hide();

	$("#"+myID).addClass("nu");
	$("#"+opened_search).removeClass("nu");

	opened_search = myID;
	//$(".heading_image").attr("src","images/"+title_img);
	updateSIFR("Head office");
	updateMenu(myID);
	}
	
//SIFR
function updateSIFR(text){
	if(typeof sIFR == "function"){
			sIFR.rollback(named({sSelector:"h1.results"}));
			$("#heading_sirf").html(text);
			sIFR.replaceElement(named({sSelector:"h1.results", sFlashSrc:"siteware/flash/sifr/h1.swf", sColor:"#00A1CF", sEmColor:/*"#d8001d"*/ "#00A1CF", sStrongColor:"#FF0000", sSpanColor:"#d8001d", sLinkColor:"#d8001d", sBgColor:"#FFFFFF", sHoverColor:"#999999", sCase:"", sWmode:"transparent" }));
			}	
	}
function updateMenu(myID){
	$(".on").removeClass("on");
	$(".menu_"+myID).addClass('on');
	updateBreadCrum(myID);
	}
function updateBreadCrum(myID){
	var current = 'Retail';
	if(myID == 'sbl') current = 'Retail';
	if(myID == 'scc') current = 'Call centre';
	if(myID == 'sho') current = 'Head office & support functions';
	$(".current").text(current);
	}

function searchCC(){
	results = [];
	setStatus("");
	current_page = 0;
	clearCurrentPage();
	clearDistances();
	var l = other_points.length;
	var search = $("#cc_town").val();
	results = [];
	for(i=0;i<l;i++){
		k = other_points[i];
		if(k.city.toLowerCase().match(search.toLowerCase())){
			if(checkCCKeywords(k.title, 'call centre')){
				results.push(k);
				}
			}
		}
	max_page = Math.ceil(results.length / per_page);
	makePage(results);
	return false;
	}
	
// deprecated
function checkCCKeywords(search1){
	search1 = search1.toLowerCase();
	var i, ret = false,str;
	var l = cc_keywords.length;
	for(i=0;i<l;i++){
		str = cc_keywords[i];
		if(str.indexOf("*") > -1){
			str = str.replace(/\*/g, "");
			//console.log(str);
			if(search1.match(str.toLowerCase())){

				return true;
				}
		}else{
			if(search1.toLowerCase() == str.toLowerCase())
				return true;
			}
		}
	return false;
	}

function searchSHO(){

	setStatus("Please wait, searching...");
	var keywords   = $("#sho_keywords").val();
	var min_salary = Number($("#sho_salary").val());
	/*var city 	   = $("#sho_city").val();*/
	min_salary = Math.floor(min_salary / 2112);
	//console.log(min_salary);
	var type	   = $("#sho_type").val();
	$.getJSON("ajax/searchSHO.php",{keywords:keywords,min_salary:min_salary,type:type/*,city:city*/},function(data){
		data = shoPopulate(data);
		var l = data.length;
		if(l)
			setStatus('Results loaded. ('+l+' results)');
		else
			setStatus("Sorry, there are no jobs matching your criteria");
		
		//console.log(data);
		});
	}
function shoPopulate(data){
	results = [];
	//setStatus("");
	current_page = 0;
	clearCurrentPage();
	clearDistances();
	var l = other_points.length;
	results = [];
	for(i=0;i<l;i++){
		k = other_points[i];
		//console.log(k.id);
		if(in_array(data,k.id) && checkSection(k, 'head office')){
		//if(in_array(data, k.id)){
			results.push(k);
		}
	}
	max_page = Math.ceil(results.length / per_page);
	makePage(results);
	return results;
	}

function in_array(arr, needle){
	var i;
	var l = arr.length;
	for(i=0;i<l;i++) {
		if(arr[i] == needle) {
			return true;
		}
	}

	return false;
	}
	
function checkSection(item, target_section){
	var def = true;
	
	if(typeof(item.section) ==	"undefined")
		return def;
	
	if(item.section == '')
		return def;
	
	return (item.section == target_section);
	}
	
function checkPosition(k){
	return true;
	// waiting for start
	var selected_position = $("#retail_position").val();
	if(selected_position == "0")
		return true;
	if(k.position == selected_position)
		return true;
	
	return false;
	}