﻿/*jslint eqeqeq: true, browser: true */
/*global window, $, jQuery */
/*JP 17/07/09*/
/*  JS Linted*/
/* 1 Issues Left.... Line 330 MainMenuOutsideClickHdnlr() was used before it was defined. The function before it calls it but the MainMenuOutsideClickHdnlr function*/
/* calls that one! */
/*JP END*/
// JScript File
function HighlightFirstBox() {
	$('.btnNavLook').css('opacity', '0.5').mouseover(function () {
		$('.btnNavLook').css('opacity', '1');
	}).mouseout(function () {
		$('.btnNavLook').css('opacity', '0.5');
	});
	$('.btnNavWkng').css('opacity', '0.5').mouseover(function () {
		$('.btnNavWkng').css('opacity', '1');
	}).mouseout(function () {
		$('.btnNavWkng').css('opacity', '0.5');
	});
	$('.btnNavEmpl').css('opacity', '0.5').mouseover(function () {
		$('.btnNavEmpl').css('opacity', '1');
	}).mouseout(function () {
		$('.btnNavEmpl').css('opacity', '0.5');
	});
}

function VSWelcome_callback(res) {
	var result = res.value;

	if (result !== "") {
		var listTokens = result.split('|');

		if (listTokens[0] === '0')   {
		    alert(listTokens[1]);
		}
		else    {
		    //$("#" + listTokens[0]).html( listTokens[1]);
		    document.getElementById(listTokens[0]).innerHTML = listTokens[1];
		    setTimeout(function(){PulsateRankedEmployer();}, 200);
		    if ($('#rankTag').length === 1) {
		        $('#rankTag').get(0).scrollIntoView(true);
		    }
		}
	}
	$("#latestJobsBox").show();
	$(".spinline").hide();
	//document.getElementById("VResults").scrollIntoView();
}

function SetSearchDefaults(defaultSearch, defaultLoc, fromBack) {
	if ($("#SimplifiedSearch").val() === defaultSearch)  {
	    $("#SimplifiedSearch").addClass("watermarkOn");
	}
	if ($("#SimplifiedSearchLoc").val() === defaultLoc)  {
	    $("#SimplifiedSearchLoc").addClass("watermarkOn");
    }
    
	if ($("#SimplifiedSearch").val() !== "" || $("#SimplifiedSearchLoc").val() !== "" || fromBack === 'back') {
		$("#browseByBox").hide();
		$("#browseBox , #filterBox").show();
		VSWelcome_callback(EmployersControl.LoadPreviousResults());
	}
	AddWatermark("#SimplifiedSearch", defaultSearch);
	AddWatermark("#SimplifiedSearchLoc", defaultLoc);
	
}

function JumpToPage(strPage, maxpages, adjust) {

	var id = parseInt(strPage, 10);
	if (adjust === -1)  {
	    id = id - 1;
    }
    
	if (!isNaN(id) && id > -1 && id < maxpages) {
	    VSWelcome_callback(EmployersControl.ChangePage(id - 1));
	}
	else    {
	    alert('Page Not Found');
    }
}

function ClearSearch() {

    ReDirect(EmployersControl.ClearSearch());
    return false;
}

function SimplifiedSearchEmployers(startAtPage) {

	if (startAtPage !== 1) {
		startAtPage = 0;
	}
	$(".spinline").show();
	$("#latestJobsBox").hide();
	$("#filterResults").slideUp();
	//$("#browseByBox").hide();
	$("#browseBox , #filterBox").show();

	var sTitle = document.getElementById('SimplifiedSearch').value;
	if ($('#SimplifiedSearch.watermarkOn').length > 0)  {
	    sTitle = "";
    }
    
	var sLocation = document.getElementById('SimplifiedSearchLoc').value;
	if ($('#SimplifiedSearchLoc.watermarkOn').length > 0)   {
	    sLocation = "";
    }
    
	var sRefinementFilter = "";
	$('#filterBox li').each(function (i) {
		sRefinementFilter = sRefinementFilter + this.id + "~";
	});
	EmployersControl.SimpleSearchEmployers(sTitle, sLocation, sRefinementFilter, startAtPage, function (res) {
		VSWelcome_callback(res);
	});
}

function ToggleFilter(filterType, pathwayID, pathwayName) {
	var existId = filterType + "Filter" + pathwayID;
	var klass = filterType.replace('.', '_');
	//if (pathwayName == 'From Map') existId = "FromMap";
	//var list = $("#filterBox ul"); 
	if ($("." + klass).length > 0) {
		$("." + klass).remove();
	}
	/*else
	{*/
		var this_token = $("<li><p>" + pathwayName + "</p> </li>").addClass('refinement').addClass(klass).attr('id', existId);
		$("#filterBox ul").append(this_token);
		$("<span>x</span>").appendTo(this_token).click(function () {
			$(this).parent().remove();
			SimplifiedSearchEmployers();
		});
	/*}*/
	SimplifiedSearchEmployers();
}

function BrowseBy(field, field2) {
	var jsonBrowseBy = JSON.parse(EmployersControl.LoadBrowseBy(field, field2).value);
	var myList = $("<ul></ul>");
	var shrinkLink = $("<a href='#'>[Hide List]</a>").addClass('shrinkLink').click(function () {
		$("#filterResults").slideUp("");
	});
	$(myList).append(shrinkLink);
	$("#filterResults").css("height", "120px");

	for (i = 0; i < jsonBrowseBy.length; i++) {
		var myLI = $("<li><a href='#'></a></li>");
		$("a", myLI).text(jsonBrowseBy[i].name + " (" + jsonBrowseBy[i].amount + ")").
		click(function(i) {
		    var srchTerm = jsonBrowseBy[i].name;
		    var srchValue = jsonBrowseBy[i].id;
		    //if (srchTerm != null && srchTerm.indexOf(' ') > 0 )
		    //  srchTerm = '"' + srchTerm + '"';
		    return function() {
		        var fieldClass = field.replace('.', '_');

		        $("#filterBox li." + fieldClass).remove('');
		        if (field2 === 'text') {
		            ToggleFilter(field, srchTerm, srchTerm);
		        }
		        else {
		            ToggleFilter(field, srchValue, srchTerm);
		        }
		        SimplifiedSearchEmployers();

		      
		        return false;
		    };
		} (i));
		$(myList).append(myLI);
	}
	$("#filterResults").slideDown("");
	//Place("#filterResults|" + myList);
	$("#filterResults").html(myList);
	//zyx=setTimeout(function() { MakeBoxScrollAtSizeWithReset("filterResults","160");$("#filterResults").slideDown("");}, 300);
	return false;
	//zyx=setTimeout(function() { MakeBoxScrollAtSizeWithReset("filterResults","160");}, 700);
}

var map = null,
    geocoder = null,
    lastLoc = null,
    lastlng = null;

function CreateMarker(mgr, lat, lng, title, loc, overtitle) {
	var tinyIcon = new GIcon();
	tinyIcon.image = "images/v3/pin.png";
	tinyIcon.shadow = "images/v3/pinshadow.png";

	tinyIcon.iconSize = new GSize(24, 24);
	tinyIcon.shadowSize = new GSize(24, 24);
	tinyIcon.iconAnchor = new GPoint(6, 16);
	tinyIcon.infoWindowAnchor = new GPoint(5, 1);

	var placename = title + "";
	if (overtitle !== "At this location") {
		placename = overtitle + "";
		tinyIcon.image = "images/v3/unknown.gif";
		tinyIcon.shadow = "";

	}
	var latlng = new GLatLng(lat, lng),
	    marker = new GMarker(latlng, {
		icon: tinyIcon
	});

	GEvent.addListener(marker, "click", function () {
		marker.openInfoWindowHtml("<h4>" + placename + "</h4>" + loc + "<br/>");
	});
	return marker;
}

function AddMarkersToMap(map) {

	var jsonMarkers = JSON.parse(EmployersControl.GetMarkerData().value);
	//var mgr = new MarkerManager(map);
	var batch = [];

	var bounds = new GLatLngBounds();
	var mgrOptions = {
		borderPadding: 20,
		maxZoom: 15,
		trackMarkers: false
	};
	var mgr = new MarkerManager(map, mgrOptions);
	
	for (var x = 0; x < jsonMarkers.length; x++) {
		//var marker = new GMarker(new GLatLng( jsonMarkers[x].lat,jsonMarkers[x].lng) );
		//map.addOverlay(marker);
		//   GEvent.addListener(marker, "click", function(x) {return function() {
		//   marker.openInfoWindowHtml(jsonMarkers[x].title + " <b>" + jsonMarkers[x].location + "</b>");}; }(x)   );
		batch.push(CreateMarker(mgr, jsonMarkers[x].lat, jsonMarkers[x].lng, jsonMarkers[x].title, jsonMarkers[x].location, jsonMarkers[x].oid));
		bounds.extend(new GLatLng(jsonMarkers[x].lat, jsonMarkers[x].lng));
	}
	
	mgr.addMarkers(batch, 3);
	map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
	map.setCenter(bounds.getCenter());
	mgr.refresh();
}

function ShowTheMap(lat, lng) {

	if (GBrowserIsCompatible()) {
		if (geocoder === null) {
			geocoder = new GClientGeocoder();
		}
		var holder = $("<div></div>").attr("id", "map_canvas").css("height", "300px").css("width", "500px");
		var shrinkLink = $("<span>Locations of employers on this map are approximations.  Exact locations may be different.</span> <a href='#'>[Hide Map]</a>").addClass('shrinkLink').click(function () {
			$("#filterResults").slideUp("");
		});

		$("body").unbind().bind("unload", GUnload);

		$("#filterResults").html(holder).css("height", "340px");
		$(holder).after(shrinkLink);
		$("#filterResults").slideDown("");

		// Get basic location from either search In Box, or default it by checking user's IP
		var loc = $("#SimplifiedSearchLoc").val();
		if ($('#SimplifiedSearchLoc.watermarkOn').length > 0)   {
		    loc = "";
        }
        
		if (loc !== "") {
			//use Google Api to get Geocoded location coords from given location
			loc = loc + ', UK';
			geocoder.getLocations(loc, function (result) {
				map = new GMap2(document.getElementById("map_canvas"));
				if (result.Status.code === G_GEO_SUCCESS) {
					var p = result.Placemark[0].Point.coordinates;
					lat = p[1];
					lng = p[0];
					map.setCenter(new GLatLng(lat, lng), 8);
				}
				else {
					//alert("Can not find a place called. " + loc );
					lat = 51.547162;
					lng = -0.480824;
					map.setCenter(new GLatLng(lat, lng), 12);
				}
				map.setUIToDefault();
				AddMarkersToMap(map);
			});
		}
		else {
			map = new GMap2(document.getElementById("map_canvas"));
			map.setCenter(new GLatLng(lat, lng), 8);
			map.setUIToDefault();
			AddMarkersToMap(map);

		}
		// if it fails then fall back on the passed in coords
		//if (map == null)
	}
	else {
		$("#filterResults").text("Sorry, your browser in unable to display maps of this type");
	}
}

function ShowVMap(lat, lng) {
	$("#filterResults").show();
	$("#filterResults").html("<span class=\"spinline \">Please wait while we are loading the Maps Data<img src=\"images/ajax-loader.gif\" /></span>");

	if (geocoder === null) {
		lastLoc = lat;
		lastlng = lng;
		var my_API_key = $("#gmapskey").val();
		$.getScript("http://maps.google.co.uk/maps?file=api&v=2&async=2&sensor=false&callback=mapstage2&key=" + my_API_key);
	}
	else {
		ShowTheMap(lat, lng);
	}
}

function mapstage2() {
	$.getScript('http://gmaps-utility-library.googlecode.com/svn/trunk/markermanager/release/src/markermanager.js', function () {
		ShowTheMap(lastLoc, lastlng);
	});
}

function ToggleMainMenu() {
	if ($("#leftNav").is(":hidden")) {
		$("#btnNavMainMenu").addClass("on");
		$("#leftNav").slideDown("", function () {
			$().bind("click", MainMenuOutsideClickHdnlr);
		});
	}
	else {
		$("#btnNavMainMenu").removeClass("on");
		$("#leftNav").slideUp("fast", function () {
			$().unbind("click", MainMenuOutsideClickHdnlr);
		});
	}
}

function MainMenuOutsideClickHdnlr(e) {
	var resPos = $("#leftNav").offset();
	resPos.bottom = resPos.top + $("#leftNav").height();
	resPos.right = resPos.left + $("#leftNav").width();

	pageX = e.pageX;
	pageY = e.pageY;

	if (pageY < resPos.top || pageY > resPos.bottom || pageX < resPos.left || pageX > resPos.right) {
		ToggleMainMenu();
	}
}

function ClearRefinements() {
	EmployersControl.ClearRefinements();
	$('.refinement').remove();

}

function PulsateRankedEmployer(iPulsateForXTimes)    {
    if (typeof iPulsateForXTimes === 'undefined')   {
        iPulsateForXTimes = 4;
    }
    $('.isSearchedEmployer').fadeTo('slow', 0.4, function() {
        $('.isSearchedEmployer').fadeTo('slow', 1, function()  {
            iPulsateForXTimes--;
            if (iPulsateForXTimes !== 0)  {
                PulsateRankedEmployer(iPulsateForXTimes);
            }
        });
    });
}