// JavaScript Document

colors = new Array(40)
colors[0]="#00cc00";
colors[1]="#00ff00";
colors[2]="#009900";
colors[3]="#006600";
colors[4]="#0000cc";
colors[5]="#0000ff";
colors[6]="#000000";
colors[7]="#cc00cc";
colors[8]="#ff00ff";
colors[9]="#cc00ff";
colors[10]="#ff00cc";
colors[11]="#cc0000";
colors[12]="#FF6633";
colors[13]="#FF9933";
colors[14]="#ff0000";
colors[15]="#00ff00";
colors[16]="#0000ff";
colors[17]="#ffff00";
colors[18]="#ff00ff";
colors[19]="#00ffff";
colors[20]="#000000";
colors[21]="#0000ff";
colors[22]="#ff0000";
colors[23]="#FF9933";
colors[24]="#FF2233";
colors[25]="#FF4433";
colors[26]="#FF6633";
colors[27]="#FF9933";
colors[28]="#ff0000";
colors[29]="#00ff00";
colors[30]="#0000ff";
colors[31]="#ffff00";
colors[32]="#ff00ff";
colors[33]="#00ffff";
colors[34]="#000000";
colors[35]="#0000ff";
colors[36]="#ff0000";
colors[37]="#FF9933";
colors[38]="#FF2233";
colors[39]="#FF4433";
colors[40]="#ff0000";


var map;
var geoXml;
var toggleState = 1;
var geocoder;
var address = ""
var lat =0 ;
var lng = 0;
var time = new Date();	
var lastMarker ;



var mapHidden = false;

function showMap() {
   	var thisMap = document.getElementById('map');
	if (mapHidden) {
		MM_showHideLayers('map','','show');
		thisMap.style.height = '550px';
		mapHidden = false;
	} else {
		MM_showHideLayers('map','','hide');
		thisMap.style.height = '0px';
		mapHidden = true;
	
	}
}
function initialize() {
  	 	geocoder = new GClientGeocoder();
			geocoder.setBaseCountryCode("uk")

  	   
	  
	  map = new GMap2(document.getElementById("map"));
       map.setCenter(new GLatLng(51.489,-0.1502), 11); 
        map.addControl(new GLargeMapControl());
        map.addControl(new GLargeMapControl());
		
		geoXml = new GGeoXml("http://www.findfreeparking.co.uk/showzoneweb.asp?BlockID=177271,178171");

		map.addOverlay(geoXml);
     

   	  
	  
}

function gotResults(sc, searcher)
	{
		var resultcontent = '';
		var found = false ;
    	var sidebar = document.getElementById('CarParks');
			var thisCount = 1;
		for (i=0; i<searcher.results.length; i++)
		{
			var result = searcher.results[i];
			var thisLat = lat * 0.0174532925;
			var thisLng = 	lng * 0.0174532925;
			searchLng = (result.lng)*0.0174532925;
			searchLat = (result.lat)*0.0174532925;	
			dist =(3959 * Math.acos( Math.cos(searchLat) * Math.cos(thisLat)* Math.cos( thisLng - searchLng ) + Math.sin(searchLat) * Math.sin(thisLat)));

			if (dist < radius) {
			  var found = true;
  			  var point = new GLatLng(parseFloat(result.lat), parseFloat(result.lng));
			  var blueIcon = new GIcon(G_DEFAULT_ICON);
			  var IconSize = new GSize(20,32);
			  blueIcon.image = "http://parking.red-c.co.uk/icons/iconb"+thisCount+".png";
			  blueIcon.iconSize = IconSize;
			  // Set up our GMarkerOptions object
			  markerOptions = { icon:blueIcon };
	  		  
			  var marker = createMarker(point, thisCount + " " + result.title, result.streetAddress, markerOptions);
			  map.addOverlay(marker);

			  var sidebarEntry = createSidebarEntry( "("+thisCount + ") " + result.title,result.streetAddress,dist,null,null,result.lat,result.lng );
			  sidebar.appendChild(sidebarEntry);
			  thisCount++;
			}
		}
		if (!found ) {
			  var sidebarEntry = createSidebarEntry("No Car Parks where found in this range");
			  sidebar.appendChild(sidebarEntry);
		}
		
			
	}
	

function searchLocations() {

	showLoader()
		
	if (lastMarker>"")
		map.removeOverlay(lastMarker);

	var address = document.getElementById('addressInput').value;
	var radius = document.getElementById('radiusSelect').value;

	address += " ,london, UK";

	//'' method to run 
	geocoder.getLatLng(address, function(latlng) {

		lat =latlng.lat();
		lng =latlng.lng();

		if (lat=="51.5001524" && lng=="-0.1262362") {
			alert("Address " + document.getElementById('addressInput').value + ' not found\rPlease try another one');
			return false;
		} else {

			lat =latlng.lat();
			lng =latlng.lng();
			//alert("1=1&lat="+lat+"&lng="+lng+"&radius="+radius)

			var point = new GLatLng(parseFloat(lat), parseFloat(lng));	  		  
			var Icon = new GIcon(G_DEFAULT_ICON);
			var IconSize = new GSize(17,37);
			Icon.image = "http://www.findfreeparking.co.uk/images/pin.png";
			Icon.iconSize = IconSize;
			// Set up our GMarkerOptions object
			markerOptions = { icon:Icon };
			var thisMarker = new GMarker(point,markerOptions );
			lastMarker = thisMarker;
			map.addOverlay(thisMarker);
			var zoom = parseInt(14- (parseInt(radius)/2.2)) ;
			if(radius > 4)
				zoom ++;
			map.setCenter(point, zoom); 

			//'' Load CMS results
			loadCMSResults(lat,lng,radius) ;
			//searchLocationsNear(latlng, radius);

		}
	});
}



function showZone(lat,lng) {
	
			var point = new GLatLng(parseFloat(lat), parseFloat(lng));	  		  
			var Icon = new GIcon(G_DEFAULT_ICON);
			  var IconSize = new GSize(32,32);
			  Icon.image = "http://maps.google.com/mapfiles/ms/icons/blue-pushpin.png";
			  Icon.iconSize = IconSize;
			  // Set up our GMarkerOptions object
			  markerOptions = { icon:Icon };
	  		    var marker = new GMarker(point,markerOptions );
			  map.addOverlay(marker);
			  var zoom = parseInt(14- (parseInt(radius)/2)) ;
			   map.setCenter(point, zoom); 
 			map.addOverlay(geoXml);
				 map.addOverlay(geoXml2);
	
}

//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com/math/is-point-in-poly [rev. #0]



function createMarker(point, name, details, markerOptions) {
  var marker = new GMarker(point,markerOptions );
  var html = '<div style="width:200px"><h1>' + name + '</h1>' + details+ "</div>";
  GEvent.addListener(marker, 'click', function() {
    marker.openInfoWindowHtml(html);
  });
  return marker;
}



function searchLocationsNear(center,radius,time) {

 

	var searchLat = 0; var searchLong = 0; var dist = 0; 
    var bounds = new GLatLngBounds();
 

	
   var searchControl = new google.search.SearchControl();

      // Add in local search
      var localSearch = new google.search.LocalSearch();
      var options = new google.search.SearcherOptions();
      options.setExpandMode(GSearchControl.EXPAND_MODE_OPEN);
	   // Set the Search Control to get the most number of results
 	  searchControl.setResultSetSize(google.search.Search.LARGE_RESULTSET);

      searchControl.addSearcher(localSearch, options);

      // Set the Local Search center point
      localSearch.setCenterPoint(center);

      // Tell the searcher to draw itself and tell it where to attach
      searchControl.draw(document.getElementById("searchcontrol"));

		// Declare function for using results
	  searchControl.setSearchCompleteCallback(this, gotResults);
	  
      // Execute an inital search
      searchControl.execute("car parks");
	    // Calculate what the zoom level should be
 

}




function loadCMSResults(lat,lng,radius){

	//var x = ("http://www.findfreeparking.co.uk/zonexml.asp?1=1&lat="+lat+"&lng="+lng+"&radius="+radius );
	map.removeOverlay(geoXml);



	var url = "http://www.findfreeparking.co.uk/zonexml_v2.asp?1=1&lat="+lat+"&lng="+lng+"&radius="+radius

	//'' clear the sidebar content
//	document.getElementById('url').innerHTML = "<a href='"+url+"' target='_blank'>"+url+"</a>";
	document.getElementById('Current').innerHTML = "<center><br /><br /><br /><img src='/images/ajax-loader.gif' ></center>";
	document.getElementById('FreeZone').innerHTML = url;
	document.getElementById('FreeParking').innerHTML = "";
	document.getElementById('ParkingZones').innerHTML = "";


log(url)

	//'' Method to run on return
	GDownloadUrl(url, function(data,HTTPSTATUS) {

		var current = document.getElementById('Current');
		current.innerHTML = "";

	
		var xml = GXml.parse(data);
		var markers = xml.documentElement.getElementsByTagName('marker');
		var freefound = false;
		var zonefound = false;
		var paidfound = false;
		var freezonefound = false ;
		var sidebar = document.getElementById('ParkingZones');
		sidebar.innerHTML = "";
		var freeParking = document.getElementById('FreeParking');
		freeParking.innerHTML = "";
		var freeZone = document.getElementById('FreeZone');
		freeZone.innerHTML = "";

		var blocks = "";
		
		for (var i = 0; i < markers.length; i++) {

			if (markers[i].getAttribute('BlockID') != 177271)
				blocks += markers[i].getAttribute('BlockID') + ",";
			
			var name = markers[i].getAttribute('title');
			var point = new GLatLng(parseFloat(markers[i].getAttribute('centreLat')),
								  parseFloat(markers[i].getAttribute('centreLng')));
			
			var blueIcon = new GIcon(G_DEFAULT_ICON);
			var IconSize = new GSize(0,0);
			blueIcon.iconSize = IconSize;
					blueIcon.shadowSize = IconSize;
			blueIcon.hide = true;
			// Set up our GMarkerOptions object
			markerOptions = { icon:blueIcon };
			var hours = markers[i].getElementsByTagName("hours")[0].firstChild.nodeValue ;
			var notes = markers[i].getElementsByTagName("notes")[0].firstChild.nodeValue ;
			notes = notes.replace(/\n/g,"<br/>");
			 var details ="<b>"+ hours + "<br/>" +  markers[i].getAttribute('PricePerHour') +"</b>" ;

			if (notes>"")
				details += ("<br/>" + notes) ;

				var marker = createMarker(point, name, details, markerOptions);
				map.addOverlay(marker);

	 
				var sidebarEntry = createSidebarEntry(marker, markers[i].getAttribute('title'), markers[i].getAttribute('nextTime'), markers[i].getAttribute('distance'), markers[i].getAttribute('PricePerHour'),markers[i].getAttribute('cat'),markers[i].getAttribute('lat'),markers[i].getAttribute('lng'),markers[i].getAttribute('OrderID'));
		 
		  if (markers[i].getAttribute('inZone') == "true"  && markers[i].getAttribute('title') > "" ) {
			  if (!zonefound) {
					var div = document.createElement('li');
					div.innerHTML= "Zone Details";
					div.className = "heading";
					current.appendChild(div);
			  }
			  current.appendChild(sidebarEntry); 
			  zonefound = true;
			} else if (markers[i].getAttribute('cat') == "Free Zone") {
			  
				if (!freezonefound) {
					var div = document.createElement('li');
					div.innerHTML = "Free Zones";
					div.className = "heading";
					freeZone.appendChild(div);
				}
				freeZone.appendChild(sidebarEntry);
				freezonefound = true;

			} else if (markers[i].getAttribute('cat') == "Currently Free") {
					if (!freefound) {
						var div = document.createElement('li');
						div.innerHTML = "Free Zones Nearby";
						div.className = "heading";
						freeParking.appendChild(div);
				  }
				  freeParking.appendChild(sidebarEntry);
				  freefound = true;
			} else {
				   if (!paidfound) {
						var div = document.createElement('li');
						div.innerHTML = "Paid Zones Nearby";
						div.className = "heading";
						sidebar.appendChild(div);
				  }
				  sidebar.appendChild(sidebarEntry);
				  paidfound = true;
			}
		}

		if (!freefound && !freezonefound) {
			var div = document.createElement('li');
			div.innerHTML = "Free Parking"
			  div.className = "heading";
			freeParking.appendChild(div);

			var div = document.createElement('li');
			div.innerHTML = "No Free Parking was found in this area.<br><span class='highlight'>Select a wider radius to find free zones further away.</span>"
			freeParking.appendChild(div);
		}
		if (!paidfound ) {
			var div = document.createElement('li');
			div.innerHTML = "Parking Zones"
			div.className = "heading";
			sidebar.appendChild(div);

			var div = document.createElement('li');
			div.innerHTML = "No Parking Zones where found in this area"
			sidebar.appendChild(div);
		}
		if (!zonefound ) {
			var div = document.createElement('li');
			div.innerHTML = "Parking Zones"
			div.className = "heading";
			sidebar.appendChild(div);

			var div = document.createElement('li');
			div.innerHTML = "Your zone cound not be found you maybe outside central London"
			current.appendChild(div);
		}


		
		
		geoXml = new GGeoXml("http://www.findfreeparking.co.uk/showzoneweb.asp?BlockID="+blocks, function(){
				hideLoader()
		});

		map.addOverlay(geoXml);


	});

}

function findZone(lat,lng){
	GDownloadUrl("http://parking.red-c.co.uk/zonexml.asp?1=1&lat="+lat+"&lng="+lng+"&findZone=true", function(data,HTTPSTATUS) {
	var xml = GXml.parse(data);
    var markers = xml.documentElement.getElementsByTagName('marker');
	var zonefound = false;
	var zone = document.getElementById('zone');
	for (var i = 0; i < markers.length; i++) {

	  var name = markers[i].getAttribute('name');
		if (markers[i].getAttribute('isFree') == "true") {
			var parking = "Parking is currently free until "  +  formatTime(markers[i].getAttribute('nextTime')) ;
		} else {
			var parking = "Parking is currently &pound;" +  markers[i].getAttribute('PricePerHour') + " per hour<br/>";
			parking += "Parking will become free at " + formatTime( markers[i].getAttribute('nextTime'));
		
	  var sidebarEntry = "<p>You are in <b>" + name + "</b><br/>" +parking +"<br/><br/>Restricted parking hours are <br/><i>" +markers[i].getAttribute('hours') + "</i><br/>Parking bay price is &pound;"+ markers[i].getAttribute('PricePerHour') + " per hour";
		}
		zone.innerHTML= sidebarEntry; 
	  	  zonefound = true;
	}
		if (!zonefound ) {
			var div = document.createElement('li');
			zone.innerHTML = "Your current zone cound not be found you maybe outside central London"

		}

});
}

function createSidebarEntry(marker,name,address,distance,price,isFree,thisLat, thisLng, OrderID) {
  var div = document.createElement('li');
    var html = "<div class='result'>";
	html += ("<div class='square' style='background-color:"+ colors[OrderID] + "'></div>");
	html += "<h3>"+name+"</h3>";

  if (address)
  	html += address ;
  // html += "<br/>";	
 
	  if (price  )
		  html += "<br/><i>" + price + "</i>" ;
    if (distance  )
	  html += "<br/><div class='distance'>(" + distance + ")</div>" ;
  
  html += "</div>";
 
  
  div.innerHTML = html;
 div.style.cursor = 'pointer';
  div.style.marginBottom = '5px';
 // div.style.height = '15px';
  GEvent.addDomListener(div, 'click', function() {
    GEvent.trigger(marker, 'click');
  });
  GEvent.addDomListener(div, 'mouseover', function() {
    div.style.backgroundColor = '#eee';
  });
  GEvent.addDomListener(div, 'mouseout', function() {
    div.style.backgroundColor = '#fff';
  });
  return div;
}

//-->
function MM_showHideLayers() { //v9.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) 
  with (document) if (getElementById && ((obj=getElementById(args[i]))!=null)) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
    obj.visibility=v; }
}

function formatTime() {
  now = new Date();
  hour = now.getHours();
  min = now.getMinutes();
  sec = now.getSeconds();

    if (min <= 9) {
      min = "0" + min;
    }
    if (sec <= 9) {
      sec = "0" + sec;
    }
    if (hour > 12) {
      hour = hour - 12;
      add = " pm";
    } else {
      hour = hour;
      add = " am";
    }
    if (hour == 12) {
      add = " pm";
    }
    if (hour == 00) {
      hour = "12";
    }

    return ((hour<=9) ? "0" + hour : hour) + ":" + min  + add;
}


function log(msg){
	try{
		var log = document.getElementById("log");
		log.innerHTML = (new Date())+"<p>"+msg+"</p><hr>"+log.innerHTML;
	}catch(er){}
}

function hideLoader(){
	try{
		document.getElementById("loader").style.display = 'none';
	}catch(er){}
}
function showLoader(){
	try{
		document.getElementById("loader").style.display = '';
	}catch(er){}
}
