var localSearch = new GlocalSearch();
var locations = [];
var beingTransferred = false; //used to determine is postcode or list searching

/**
 * Add a location to the locations array
 */
function addLocation(storeLat, storeLng, storeAddress)
{
   var location = new Location();
   location.storeLat = storeLat;
   location.storeLng = storeLng;
   location.storeAddress = storeAddress;
   locations.push(location);
}

/**
 * Get a point from an inputted postcode.
 */
function getPointFromPostcode(postcode)
{
  if((postcode != 'Enter postcode' && postcode != '')&&(!beingTransferred))
  { 
    //the functionality for createcookie exists in LocationSearchWidget.xslt
    setCookie("LastLocationUrl","",-1);
    setCookie("changeCookie","",-1);
    beingTransferred = true;
    //Create a cookie to remember the postcode for 30 days
    setCookie("ExistingPostcode", postcode, 30);
    localSearch.setSearchCompleteCallback(null, 
      function() {
  
        if(localSearch.results[0])
        {
          var postcodeLat = localSearch.results[0].lat;
          var postcodeLng = localSearch.results[0].lng;
          var point = new google.maps.LatLng(postcodeLat, postcodeLng);
          locate(point);
        }
        else
        {
          alert("Postcode not found!");
        }
        beingTransferred = false;
      });
  
    localSearch.execute(postcode);
  }
  else
  {
    if(postcode.length == 0)
    {
      if(!beingTransferred)
      {
        alert("You must enter a valid UK postcode to find your nearest Bowl");
      }
    }
  }
}

/**
 * COMPARES ALL DISTANCES FOR THE CLOSEST BOWL
 */
function locate(point)
{
  var i = 0;
  var closestDistance = 0;
  var closestBowlUrl = "/";

  for(i = 0; i < locations.length; i++)
  {
    var distance = calculateDistance(point, locations[i].storeLat, locations[i].storeLng);
    if((i == 0) || (distance < closestDistance))
    {
      closestDistance = distance;
      closestBowlUrl = locations[i].storeAddress;
    }
  }

  window.location = closestBowlUrl;
}

/**
 * Calculate the distance
 */
function calculateDistance(point, storeLat, storeLng)
{
  var lat1 = point.lat();
  var lat2 = storeLat;
  var lng1 = point.lng();
  var lng2 = storeLng;
  var xd = lat2 - lat1;
  var yd = lng2 - lng1;
  var d = Math.sqrt((xd * xd) + (yd * yd));
  return d;
}

Number.prototype.toRad = new function() {  // convert degrees to radians
  return this * Math.PI / 180;
} 
  
function Location()
{
   this.storeLat = "";
   this.storeLng = "";
   this.storeAddress = "";
}
  
function setCookie(c_name,value,exdays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
document.cookie=c_name + "=" + c_value;
}
function createCookie(c_name,value,exdays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
document.cookie=c_name + "=" + c_value;
}
  
function getCookie(c_name)
{
  var i,x,y,ARRcookies=document.cookie.split(";");
   var retVal = "";
  for (i=0;i<ARRcookies.length;i++)
  {
    x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
    y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
    x=x.replace(/^\s+|\s+$/g,"");
    if (x==c_name)
      {
      retVal = unescape(y);
        break;
      }
  }
  return retVal;
}

