var map;
var icon = new GIcon();
var to_htmls = [];
var from_htmls = [];
var htmls = [];
var gmarkers = [];
var x = 0
var gdir

var request;
var bounds = new GLatLngBounds();

var baseIcon = new GIcon();
baseIcon.image = "images/" + iconImage;
baseIcon.iconSize = new GSize(75, 144);
baseIcon.iconAnchor = new GPoint(37, 130);
baseIcon.infoWindowAnchor = new GPoint(35, 130);
baseIcon.imageMap = [0,0 , 75,0, 75,144 , 0,144];

var icons=[];	

function addMarker(point, title, iconStr, infoUrl, x) {
   bounds.extend(point);
   var icon = baseIcon;
   var marker = new GMarker(point, icon);
 	gmarkers.push(marker);
   marker.type = iconStr; 
        htmls ='<strong>' + description + '</strong><br />For directions, enter your postcode below:' +
           '<form action="javascript:getDirections()" style="height:100px;margin-top:10px;">' +
           '<input type="text"  MAXLENGTH="12" name="saddr" id="saddr" value="" style="width:95px;margin-right:10px;text-transform:uppercase;" />' +
           '<input value="Get Directions" type="submit" />' +
           '<input type="hidden" id="daddr" value="'+title+"@"+ point.lat() + ',' + point.lng() + 
           '"/></form>';		   
GEvent.addListener(marker, "click", function () {
     marker.openInfoWindowHtml( htmls, {maxurl:infoUrl}); 


 }); 
   map.addOverlay(marker);
}

function getDirections() {
	 
        var saddr = document.getElementById("saddr").value
        var daddr = document.getElementById("daddr").value
        
        var localSearch = new GlocalSearch();
			localSearch.setSearchCompleteCallback(null, 
			function() {
				if (localSearch.results[0])
				{		
					resultLat = localSearch.results[0].lat;
					resultLng = localSearch.results[0].lng;
					point = new GLatLng(resultLat,resultLng);
                    LtLng = String(resultLat+","+resultLng)
                    saddr = String(saddr + "@" + LtLng)
					setDirections(saddr, daddr, "en")
					}else{
					alert("Postcode not found!");
				}
			});	
		
		localSearch.execute(saddr + ", UK");
       
      }

      function myclick(x) {
        gmarkers[x].openInfoWindowHtml(htmls[x]);
      }

      function tohere(x) {
        gmarkers[x].openInfoWindowHtml(to_htmls[x]);
      }
      function fromhere(x) {
        gmarkers[x].openInfoWindowHtml(from_htmls[x]);
      }
      
 
function createRequest() {
	var ajaxRequest;
	try
	{
		ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
	}		
		catch (e1)
		{
			try
			{
				ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
			}
				catch (e2)
				{
					ajaxRequest = new XMLHttpRequest();
				}
		}
	
	return ajaxRequest;
}


function usePointFromPostcode(postcode, callbackFunction, pCode, cl, propUrl,x) {
var localSearch = new GlocalSearch();
			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);
					var ajax_connection = createRequest();
					ajax_connection.open('get', "includes/cache.asp?postcode=" + postcode + "&latitude=" + resultLat + "&longitude=" + resultLng);
					ajax_connection.send(null);
					callbackFunction(point, pCode, cl, propUrl,x);
				}else{
					alert("Postcode not found!");
				}
			});	
		
		localSearch.execute(postcode + ", UK");
}

function placeMarkerAtPoint(point)
{
	var marker = new GMarker(point,icon);
	map.addOverlay(marker);
}

function setCenterToPoint(point)
{
	map.setCenter(point, 17);
}
 function createMarker(point,html,infoUrl) {
        var marker = new GMarker(point);
        return marker;
      }
function showPointLatLng(point)
{
	alert("Latitude: " + point.lat() + "\nLongitude: " + point.lng());
}
function addOverlayMap(point, propHTML, propURL) {
	map.addOverlay(createMarker(point, propHTML , propURL));
}

function mapLoad() {
	if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));
		map.addControl(new GMapTypeControl ());
		map.addControl(new GSmallMapControl());
		map.enableContinuousZoom()
		map.enableScrollWheelZoom()
		map.setCenter(new GLatLng(Number(long + .0015),lat), 16, G_NORMAL_MAP);
		gdir = new GDirections(map, document.getElementById("directions")); 
        GEvent.addListener(gdir, "load", onGDirectionsLoad); 
        GEvent.addListener(gdir, "error", handleErrors);    
		var point = new GLatLng(parseFloat(long), parseFloat(lat));
		var propUrl = "";
		var propHTML = String("Future Inns Hotel");
		var pCode = String(" ");
		addMarker(point, "Future Inns Hotel, " + hotelLocation, 'red', propUrl, 1)	
	}
}

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}

function addUnLoadEvent(func) {
	var oldonunload = window.onunload;
	if (typeof window.onunload != 'function') {
	  window.onunload = func;
	} else {
	  window.onunload = function() {
	    oldonunload();
	    func();
	  }
	}
}

function setDirections(fromAddress, toAddress, locale) { 
      gdir.load("from: " + fromAddress + " to: " + toAddress, 
                { "locale": locale }); 
} 
function onGDirectionsLoad(){ 
          var enteredPostcode = document.getElementById("saddr").value;
		  var daddr = document.getElementById("daddr").value
            document.getElementById("directions").innerHTML = '<a href="http://maps.google.com/maps?f=d&source=s_d&saddr='+enteredPostcode+'&daddr='+ printedDirections +'%29&hl=en&geocode=' + long + '+' + lat + '&mra=pe&mrcr=0&sll=' + long + ',' + lat + '&sspn=' + sspn + '&ie=UTF8&ll=' + long + ',' + lat + '&t=h&z=10&pw=2" target="_blank">Print Directions</a>'
	  map.closeInfoWindow();
} 

function handleErrors(){ 
       if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS) 
         alert("Either the \"To\" or \"From\" geographic location cannot be found.\nPlease use a postal code or recognised city instead.\nThe postal code for St Thomas Church is NE1 7PF.\nError code: " + gdir.getStatus().code); 
       else if (gdir.getStatus().code == G_GEO_SERVER_ERROR) 
         alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + gdir.getStatus().code); 

       else if (gdir.getStatus().code == G_GEO_MISSING_QUERY) 
         alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + gdir.getStatus().code); 

       else if (gdir.getStatus().code == G_GEO_BAD_KEY) 
         alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + gdir.getStatus().code); 

       else if (gdir.getStatus().code == G_GEO_BAD_REQUEST) 
         alert("A directions request could not be successfully parsed.\n Error code: " + gdir.getStatus().code); 

       else alert("An unknown error occurred."); 

    }        

addLoadEvent(mapLoad);
addUnLoadEvent(GUnload);
