﻿// 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 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(WelcomeVSControl.LoadPreviousResults());
       
    }
     AddWatermark( "#SimplifiedSearch",defaultSearch) ;
    AddWatermark( "#SimplifiedSearchLoc",defaultLoc) ;      
    
    
   
   
   
}



 function JumpToPage(strPage, maxpages, adjust)
   {
        
        var id = parseInt(strPage);
        if (adjust === -1 ) id = id -1;
        
        if (!isNaN(id) && id > -1 && id < maxpages)
                VSWelcome_callback(WelcomeVSControl.ChangePage(id-1));
        else alert('Page Not Found');
   }				

function ClearSearch()
{

    if (typeof WelcomeVSControl !== 'undefined')    {
        ReDirect(WelcomeVSControl.ClearSearch());
    }
    else    {
        ReDirect(VacancySearchControl.ClearSearch());
    }
    return false;
}

function SimplifiedSearchVacancies()
{
    $(".spinline").show();
    var range = GetRadioValue("within");
    $("#latestJobsBox").hide();
   
	//$("#filterResults").slideUp();  //uncomment to make filter box shrink every time there is a selection
	//$("#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 + "~";
        }
    );

//    var ids = jSalaryPicker.getSelectedVacancyIDs(window.catchAll); 
//    if (ids) {
//        var OidList  = ids.join('-');
        //        sRefinementFilter = sRefinementFilter + "p_AdvertisedSalaryFilter" + OidList + "~";
//        
//    }

    WelcomeVSControl.SimpleSearchVacancies(sTitle, sLocation, sRefinementFilter, range,
      function(res) {
          VSWelcome_callback(res);
      });
       
    
    
}


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];
	}
	$("#latestJobsBox").show();
    $(".spinline").hide();
    //document.getElementById("VResults").scrollIntoView();
  
}



function BuildBrowseByUL(field, field2,  ulLevelClass) {
    var myList = $("<ul></ul>");

    if (ulLevelClass == "") {

        var shrinkLink = $("<a href='#'>[Hide List]</a>").addClass('shrinkLink').click(function() {
            $("#filterResults").slideUp("");
        });
        $(myList).append(shrinkLink);

    }
    else {
        myList = $("<ul></ul>").addClass(ulLevelClass);
    }


    var jsonBrowseBy = JSON.parse(WelcomeVSControl.LoadBrowseBy(field, field2).value);
    
    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;


            return function() {

            var fieldClass = field.replace('.', '_');

            $("#filterBox li." + fieldClass).remove('');
            if (field2 == 'text') {
                ToggleFilter(field, srchTerm, srchTerm, true);

            }
            else {
                ToggleFilter(field, srchValue, srchTerm, true);
            }

                if (field.indexOf("p_EmployLocation") > -1) {


                    if (field == "p_EmployLocation.p_AreaName") {
                        $("#filterBox .p_EmployLocation_p_Locality, #filterBox .p_EmployLocation_p_Name").remove();
                        PutRefinementCriteriaIntoSession();
                        $(".sub1").remove();
                        var sublist = BuildBrowseByUL("p_EmployLocation.p_Locality", field2, "sub1");
                        //alert(sublist.html());
                        $(this).after(sublist);

                    }
                    else if (field == "p_EmployLocation.p_Locality") {
                        $("#filterBox .p_EmployLocation_p_Name").remove();
                        PutRefinementCriteriaIntoSession();
                        $(".sub2").remove();
                        var sublist2 = BuildBrowseByUL("p_EmployLocation.p_Name", field2, "sub2")
                        //alert(sublist2.html());
                        $(this).after(sublist2);
                    }
                    

                }
           

                $(this)[0].scrollIntoView();
                $("#browseBox")[0].scrollIntoView();
                SimplifiedSearchVacancies();                
                return false;
            };

        } (i));
        $(myList).append(myLI);

    }

    return myList;

}

function PutRefinementCriteriaIntoSession() {
    
    var sRefinementFilter = "";
    $('#filterBox li').each(function(i) {
        sRefinementFilter = sRefinementFilter + this.id + "~";
    });
    
    WelcomeVSControl.PutRefinementCriteriaIntoSession(sRefinementFilter);
    
}


function BrowseBy(field, field2) {


    if (field == "p_AdvertisedSalary") {
        $("#filterResults").css("height", "200px");
        var htmlForList = WelcomeVSControl.GetSalaryPickerDisplay().value;
        $("#filterResults").slideDown("");
        $("#filterResults").html(htmlForList);
        jSalaryPicker.initSalaryPicker();
        
    }
    else {
        $("#filterResults").css("height", "120px");
        var htmlForList = BuildBrowseByUL(field, field2, "");
        $("#filterResults").slideDown("");
        $("#filterResults").html(htmlForList);
    }
     
    return false;

}

function runSalaryFilter(catchAll, formUI) {

    
    if (catchAll) {
        ToggleFilter("p_AdvertisedSalary", "CatchAll", "Salary Filter");
    }
    else {

        var ids = jSalaryPicker.getSelectedSalaryRange();
        if (ids) {
            //will shortly come throu as 3 array of 3 items:  min, max and type    
            var OidList = ids.join('-');
            ToggleFilter("p_AdvertisedSalary", OidList, "Salary Filter");
        }
    }    
    
    return false;
}



function ToggleFilter(filterType, pathwayID, pathwayName, noSearch)
{
    var existId = filterType + "Filter" + pathwayID;
    var klass = filterType.replace('.', '_');
  
     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(); $("#filterResults").slideUp(); SimplifiedSearchVacancies(); });

    }
     if (noSearch !== true)
        SimplifiedSearchVacancies();
     
}

var map = null;
var geocoder = null;
var lastLoc = null
var lastlng = null;


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); 
   });
}

/*Google Maps stuff */
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 vacancies on this map are approximations.  Exact locations may be different.</span> <a href='javascript:void();'>[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 AddMarkersToMap(map)
{
  
       
  var jsonMarkers = JSON.parse(WelcomeVSControl.GetMarkerData().value);  
  //var mgr = new MarkerManager(map);
  var batch = [];
  var bounds = new GLatLngBounds();
  for (var x = 0; x < jsonMarkers.length; 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));
  }
  
  var mgrOptions = { borderPadding: 20, maxZoom: 15, trackMarkers: false };
  var mgr = new MarkerManager(map, mgrOptions);
  mgr.addMarkers(batch, 3);
  if (map.getBoundsZoomLevel(bounds) > 2) {
    map.setZoom(map.getBoundsZoomLevel(bounds)-1); 
    map.setCenter(bounds.getCenter());
   }
   mgr.refresh();
  
   

}

function CreateMarker(mgr, lat, lng, title, loc, overtitle)
{
     var latlng = new GLatLng( lat,lng)
     
     var placename = overtitle;
     var tinyIcon = new GIcon();
        tinyIcon.image = "images/v3/pinOrange.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);
     //get location name of point
     if (overtitle == "At this location")
     {
         geocoder.getLocations(latlng, function (response) {if (!response || response.Status.code != 200) 
         { } 
         else {
            try{
            if (response.Placemark[0].AddressDetails.Country.AdministrativeArea.Locality != null)
                placename= response.Placemark[0].AddressDetails.Country.AdministrativeArea.Locality.LocalityName;
            else if (placename= response.Placemark[0].AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality == null)
            placename= response.Placemark[0].AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.SubAdministrativeAreaName;
            else
                placename = response.Placemark[0].AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;
            } catch (fail) {}
         }});
     }
     if (lat == "51.514084")
     {
        tinyIcon.image = "images/v3/unknown.gif";
       
     }
     var marker = new GMarker(latlng, {icon: tinyIcon} );
     //map.addOverlay(marker);
     GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml("<h4>" + placename + "</h4><b>" + title + "</b> " + loc + "<br/>"  );} );
    return marker;
}


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()
{
    WelcomeVSControl.ClearRefinements();
    $('.refinement').remove();
    $("#filterResults").slideUp("");
}


