//Park Array 

parksArr =  new Array();
var parkList = '';

parksArr[0] = new Array(5);
parksArr[0][0] = 'DE';
parksArr[0][1] = 'Devon Cliff';
parksArr[0][2] = 50.61496114; //latitude
parksArr[0][3] = -3.36645437;  //longitude
parksArr[0][4] = 10000;  //dummy distance from post code

parksArr[1] = new Array(5);
parksArr[1][0] = 'AH';
parksArr[1][1] = 'Allhallows Holiday Park';
parksArr[1][2] = 51.47472739; //latitude
parksArr[1][3] = 0.64905522;  //longitude
parksArr[1][4] = 10000;  //dummy distance from post code


parksArr[2] = new Array(5);
parksArr[2][0] = 'CG';
parksArr[2][1] = 'Cala Gran';
parksArr[2][2] = 53.89735; //latitude
parksArr[2][3] = -3.02079;  //longitude
parksArr[2][4] = 10000;  //dummy distance from post code


parksArr[3] = new Array(5);
parksArr[3][0] = 'CT';
parksArr[3][1] = 'Craig Tara';
parksArr[3][2] = 55.4635; //latitude
parksArr[3][3] = -4.63315;  //longitude
parksArr[3][4] = 10000;  //dummy distance from post code


parksArr[4] = new Array(5);
parksArr[4][0] = 'SE';
parksArr[4][1] = 'Seton Sands';
parksArr[4][2] = 55.9722408; //latitude
parksArr[4][3] = -2.9313508;  //longitude
parksArr[4][4] = 10000;  //dummy distance from post code


parksArr[5] = new Array(5);
parksArr[5][0] = 'BE';
parksArr[5][1] = 'Berwick';
parksArr[5][2] = 55.97198667; //latitude
parksArr[5][3] = -2.93113667;  //longitude
parksArr[5][4] = 10000;  //dummy distance from post code

parksArr[6] = new Array(5);
parksArr[6][0] = 'HA';
parksArr[6][1] = 'Haggerston Castle';
parksArr[6][2] = 55.685; //latitude
parksArr[6][3] = -1.93777;  //longitude
parksArr[6][4] = 10000;  //dummy distance from post code

parksArr[7] = new Array(5);
parksArr[7][0] = 'BD';
parksArr[7][1] = 'Blue Dolphin';
parksArr[7][2] = 54.2308969; //latitude
parksArr[7][3] = -0.32287069;  //longitude
parksArr[7][4] = 10000;  //dummy distance from post code


parksArr[8] = new Array(5);
parksArr[8][0] = 'PV';
parksArr[8][1] = 'Primrose Valley';
parksArr[8][2] = 54.19418; //latitude
parksArr[8][3] = -0.28386;  //longitude
parksArr[8][4] = 10000;  //dummy distance from post code


parksArr[9] = new Array(5);
parksArr[9][0] = 'RE';
parksArr[9][1] = 'Reigton Sands';
parksArr[9][2] = 54.16864; //latitude
parksArr[9][3] = -0.2582;  //longitude
parksArr[9][4] = 10000;  //dummy distance from post code


parksArr[10] = new Array(5);
parksArr[10][0] = 'TP';
parksArr[10][1] = 'Thorpe Park';
parksArr[10][2] = 53.5540284; //latitude
parksArr[10][3] = -0.0320663;  //longitude
parksArr[10][4] = 10000;  //dummy distance from post code

parksArr[11] = new Array(5);
parksArr[11][0] = 'GS';
parksArr[11][1] = 'Golden Sands';
parksArr[11][2] = 53.35697017; //latitude
parksArr[11][3] = -0.0320663;  //longitude
parksArr[11][4] = 10000;  //dummy distance from post code


parksArr[12] = new Array(5);
parksArr[12][0] = 'CC';
parksArr[12][1] = 'Caister';
parksArr[12][2] = 52.65977; //latitude
parksArr[12][3] = 1.72222;  //longitude
parksArr[12][4] = 10000;  //dummy distance from post code


parksArr[13] = new Array(5);
parksArr[13][0] = 'SA';
parksArr[13][1] = 'Seashore';
parksArr[13][2] = 52.63158513; //latitude
parksArr[13][3] = 1.73863615;  //longitude
parksArr[13][4] = 10000;  //dummy distance from post code


parksArr[14] = new Array(5);
parksArr[14][0] = 'WD';
parksArr[14][1] = 'Wild Duck';
parksArr[14][2] = 52.56552; //latitude
parksArr[14][3] = 1.65471;  //longitude
parksArr[14][4] = 10000;  //dummy distance from post code


parksArr[15] = new Array(5);
parksArr[15][0] = 'HO';
parksArr[15][1] = 'Hopton';
parksArr[15][2] = 52.5414075; //latitude
parksArr[15][3] = 1.7318014;  //longitude
parksArr[15][4] = 10000;  //dummy distance from post code

parksArr[16] = new Array(5);
parksArr[16][0] = 'OR';
parksArr[16][1] = 'The Orchards';
parksArr[16][2] = 51.79963419; //latitude
parksArr[16][3] = 1.02462741;  //longitude
parksArr[16][4] = 10000;  //dummy distance from post code

parksArr[17] = new Array(5);
parksArr[17][0] = 'CH';
parksArr[17][1] = 'Combe Haven';
parksArr[17][2] = 50.85405183; //latitude
parksArr[17][3] = 0.52788761;  //longitude
parksArr[17][4] = 10000;  //dummy distance from post code


parksArr[18] = new Array(5);
parksArr[18][0] = 'CF';
parksArr[18][1] = 'Church Farm';
parksArr[18][2] = 50.77037992; //latitude
parksArr[18][3] = -0.7453619;  //longitude
parksArr[18][4] = 10000;  //dummy distance from post code

parksArr[19] = new Array(5);
parksArr[19][0] = 'RP';
parksArr[19][1] = 'Rockley Park';
parksArr[19][2] = 50.71953736; //latitude
parksArr[19][3] = -2.02943698;  //longitude
parksArr[19][4] = 10000;  //dummy distance from post code

parksArr[20] = new Array(5);
parksArr[20][0] = 'SV';
parksArr[20][1] = 'Seaview';
parksArr[20][2] = 50.64469678; //latitude
parksArr[20][3] = -2.41434684;  //longitude
parksArr[20][4] = 10000;  //dummy distance from post code

parksArr[21] = new Array(5);
parksArr[21][0] = 'WM';
parksArr[21][1] = 'Weymouth Bay';
parksArr[21][2] = 50.64609235; //latitude
parksArr[21][3] = -2.41818153;  //longitude
parksArr[21][4] = 10000;  //dummy distance from post code

parksArr[22] = new Array(5);
parksArr[22][0] = 'LS';
parksArr[22][1] = 'Littlesea';
parksArr[22][2] = 50.60538; //latitude
parksArr[22][3] = -2.48856;  //longitude
parksArr[22][4] = 10000;  //dummy distance from post code

parksArr[23] = new Array(5);
parksArr[23][0] = 'DF';
parksArr[23][1] = 'Doniford Bay';
parksArr[23][2] = 51.17993; //latitude
parksArr[23][3] = -3.29901;  //longitude
parksArr[23][4] = 10000;  //dummy distance from post code

parksArr[24] = new Array(5);
parksArr[24][0] = 'BR';
parksArr[24][1] = 'Burnam on Sea';
parksArr[24][2] = 51.22869845; //latitude
parksArr[24][3] = -3.00077145;  //longitude
parksArr[24][4] = 10000;  //dummy distance from post code

parksArr[25] = new Array(5);
parksArr[25][0] = 'RV';
parksArr[25][1] = 'Riviere Sands';
parksArr[25][2] = 51.17993; //latitude
parksArr[25][3] = -3.29901;  //longitude
parksArr[25][4] = 10000;  //dummy distance from post code

parksArr[26] = new Array(5);
parksArr[26][0] = 'PS';
parksArr[26][1] = 'Perran Sands';
parksArr[26][2] = 50.35923619; //latitude
parksArr[26][3] = -5.14380532;  //longitude
parksArr[26][4] = 10000;  //dummy distance from post code


parksArr[27] = new Array(5);
parksArr[27][0] = 'KP';
parksArr[27][1] = 'Kiln Park';
parksArr[27][2] = -4.70923343; //latitude
parksArr[27][3] = 51.67810378;  //longitude
parksArr[27][4] = 10000;  //dummy distance from post code


parksArr[28] = new Array(5);
parksArr[28][0] = 'QW';
parksArr[28][1] = 'Quay West';
parksArr[28][2] = 52.20710178; //latitude
parksArr[28][3] = -4.34635868;  //longitude
parksArr[28][4] = 10000;  //dummy distance from post code

parksArr[29] = new Array(5);
parksArr[29][0] = 'GR';
parksArr[29][1] = 'Greenacres';
parksArr[29][2] = 52.91292326; //latitude
parksArr[29][3] = -4.17349237;  //longitude
parksArr[29][4] = 10000;  //dummy distance from post code


parksArr[30] = new Array(5);
parksArr[30][0] = 'HM';
parksArr[30][1] = 'Hafan y Mor';
parksArr[30][2] = 52.90546; //latitude
parksArr[30][3] = -4.33965;  //longitude
parksArr[30][4] = 10000;  //dummy distance from post code


parksArr[31] = new Array(5);
parksArr[31][0] = 'PH';
parksArr[31][1] = 'Presthaven Sands';
parksArr[31][2] = 53.32936308; //latitude
parksArr[31][3] = -3.40655654;  //longitude
parksArr[31][4] = 10000;  //dummy distance from post code

parksArr[32] = new Array(5);
parksArr[32][0] = 'MM';
parksArr[32][1] = 'Marton Mere';
parksArr[32][2] = 53.8034377; //latitude
parksArr[32][3] = -2.9919377;  //longitude
parksArr[32][4] = 10000;  //dummy distance from post code

parksArr[33] = new Array(5);
parksArr[33][0] = 'LA';
parksArr[33][1] = 'Lakeland';
parksArr[33][2] = 54.15815; //latitude
parksArr[33][3] = -2.96631;  //longitude
parksArr[33][4] = 10000;  //dummy distance from post code

parksArr[34] = new Array(5);
parksArr[34][0] = 'LY';
parksArr[34][1] = 'Lydstep Beach';
parksArr[34][2] = 51.65100479192769; //latitude
parksArr[34][3] = -4.7614849358797;  //longitude
parksArr[34][4] = 10000;  //dummy distance from post code

parksArr[35] = new Array(5);
parksArr[35][0] = 'FG';
parksArr[35][1] = 'Far Grange';
parksArr[35][2] = 53.96123; //latitude
parksArr[35][3] = -0.19913;  //longitude
parksArr[35][4] = 10000;  //dummy distance from post code

var localSearch = new GlocalSearch();


var postCode;
var maxSearchDistance = 600;
var parkList;
var searchLandingPageUrl = '';
var priceQuery = '';

function redirectToSearchPage(maxDistance, pCode, sUrl, pquery)
{
   parkList = '';
   priceQuery = pquery;
   searchLandingPageUrl = sUrl;
   maxSearchDistance = maxDistance;
   postCode = pCode;
   if(strTrim(postCode) == '')
   {
     alert("Please enter a valid postcode.");
   }
   else
   {
     var pcodeRegEx = /^[a-zA-Z]\w{1,3}\s{0,1}\d\w{2}\s{0,}$/;
     var trimmedPostCode = strTrim(postCode);
     if(pcodeRegEx.test(trimmedPostCode))
     {
     	usePointFromPostcode(postCode, buildList);
     }
     else
     {
     	alert("Please enter a valid postcode.");
     }
   } 
   //calcGetLatLangUsingGeoCode(postCode);
}



function calcGetLatLangUsingGeoCode(postCode)
{
    var googleGeoCoder = new GClientGeocoder();
    googleGeoCoder.setBaseCountryCode("GB");
    googleGeoCoder.getLatLng(postCode, searchBasedOnGLatLang);
}

function searchBasedOnGLatLang(pointLatLang)
{
  if(pointLatLang == null)
  {
    alert("Postcode " + postCode + " not found!");
  }
  else
  {
    var resultLat = pointLatLang.lat();        
    var resultLng = pointLatLang.lng();;
    buildList(resultLat, resultLng);
  }  
}


function usePointFromPostcode(postcode, callbackFunction) {
  localSearch.setAddressLookupMode = GlocalSearch.ADDRESS_LOOKUP_DISABLED;
  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);
        //alert(localSearch.results[0].country);
        if(localSearch.results[0].country != "GB")
         {
           //alert("Postcode " + postcode + " not found!");
             alert("Please enter a valid postcode.");
         }
         else
         {
           buildList(resultLat, resultLng);
         }
      }else{
        //alert("Postcode " + postcode + " not found!");
        alert("Please enter a valid postcode.");
      }
    });    
  localSearch.execute(postcode + ", UK");
}


function buildList(rLat, rLng)
{
  $("#searchResultsHead").html("<h3>Search Results for the post code " + postCode + " lat=" +  rLat + " Lng=" + rLng + "</h3>");
//  alert("Show search results for Post code");
  var i;
  for(i=0; i < parksArr.length; i++)
  {   
      if(maxSearchDistance == 6000)
      {
        if(parkList == '')
        {
          parkList = parkList + parksArr[i][0];    
        }
        else
        {
          parkList = parkList + "," +  parksArr[i][0];    
        }      
      }
      else
      {
	 var pointDistance = calculateDistance(parseFloat(rLat), parseFloat(rLng), parseFloat(parksArr[i][2]), parseFloat(parksArr[i][3]));
	 if(maxSearchDistance >= parseFloat(pointDistance))
	 {
	   if(parkList == '')
	   {
 	     parkList = parkList + parksArr[i][0];    
	   }
	   else
	   {
             parkList = parkList + "," +  parksArr[i][0];    
	   }        
	  }
      }
  }
  if(parkList == '')
  {
     alert("Sorry, no Parks were found within your selected drive time, please try again.");
    //alert("Please enter a valid postcode.");
  }
  else
  {
    if (priceQuery != '')
    {
       window.location.href = searchLandingPageUrl  + "&" + priceQuery + "&ParkCode="+ parkList;
    }   
    else
    {
      window.location.href = searchLandingPageUrl + "&ParkCode="+ parkList
    }
  }  
}



function calculateDistance(lat1, lng1, lat2, lng2)
{
   var R = 6371; // km

   var dLat = (lat2-lat1).toRad();
   var dLng = (lng2-lng1).toRad(); 
   var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) * Math.sin(dLng/2) * Math.sin(dLng/2); 
   var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
   var d = R * c;
   return d;
}



/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */

/*
 * extend String object with method for parsing degrees or lat/long values to numeric degrees
 *
 * this is very flexible on formats, allowing signed decimal degrees, or deg-min-sec suffixed by 
 * compass direction (NSEW). A variety of separators are accepted (eg 3º 37' 09"W) or fixed-width 
 * format without separators (eg 0033709W). Seconds and minutes may be omitted. (Minimal validation 
 * is done).
 */
String.prototype.parseDeg = function() {
  if (!isNaN(this)) return Number(this);                 // signed decimal degrees without NSEW

  var degLL = this.replace(/^-/,'').replace(/[NSEW]/i,'');  // strip off any sign or compass dir'n
  var dms = degLL.split(/[^0-9.]+/);                     // split out separate d/m/s
  for (var i in dms) if (dms[i]=='') dms.splice(i,1);    // remove empty elements (see note below)
  switch (dms.length) {                                  // convert to decimal degrees...
    case 3:                                              // interpret 3-part result as d/m/s
      var deg = dms[0]/1 + dms[1]/60 + dms[2]/3600; break;
    case 2:                                              // interpret 2-part result as d/m
      var deg = dms[0]/1 + dms[1]/60; break;
    case 1:                                              // decimal or non-separated dddmmss
      if (/[NS]/i.test(this)) degLL = '0' + degLL;       // - normalise N/S to 3-digit degrees
      var deg = dms[0].slice(0,3)/1 + dms[0].slice(3,5)/60 + dms[0].slice(5)/3600; break;
    default: return NaN;
  }
  if (/^-/.test(this) || /[WS]/i.test(this)) deg = -deg; // take '-', west and south as -ve
  return deg;
}
// note: whitespace at start/end will split() into empty elements (except in IE)

/*
 * extend Number object with methods for converting degrees/radians
*/
Number.prototype.toRad = function() {  // convert degrees to radians
  return this * Math.PI / 180;
}

/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */
