

var map;
var localSearch = new GlocalSearch();

var icon = new GIcon();
icon.image = "/images/icon_hotels.png";
icon.shadow = "http://www.google.com/mapfiles/shadow50.png";
icon.iconSize = new GSize(20, 34);
icon.shadowSize = new GSize(37, 34);
icon.iconAnchor = new GPoint(10, 34);

var markerOptions = { icon: icon };

var enterKeyCode = 13;




function usePointFromPostcode(postcode, callbackFunction) {
	
	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);
				callbackFunction(point);
			}else{
				alert("Postcode not found!");
			}
		});	
		
	localSearch.execute(postcode + ", UK");
}

function placeMarkerAtPoint(url, point, address, thumb, title)
{
	var marker = new GMarker(point, markerOptions);
	map.addOverlay(marker);
	
	var html = "<div class='mapTitle'><a href='" + url + "'>" + title + "</a></div>";
	html += "<div class='mapContent'>";
	if(thumb != null && thumb.length > 0)
	    html += "<img src='" + thumb + "' alt='" + title + "'/>";
	    
	html += "<div class='mapContentInner'>" + address + "</div></div>";
                
	
	map.openInfoWindowHtml(point, html)
	map.setZoom(10);
	
}

function createMarkerAtPoint(url, point, address, thumb, title)
{
	var marker = new GMarker(point, markerOptions);
	map.addOverlay(marker);
	
	var html = "<div class='mapTitle'><a href='" + url + "'>" + title + "</a></div>";
	html += "<div class='mapContent'>";
	if(thumb != null && thumb.length > 0)
	    html += "<img src='" + thumb + "' alt='" + title + "'/>";
	    
	html += "<div class='mapContentInner'>" + address + "</div></div>";
	    
	GEvent.addListener(marker, "click", function(){map.openInfoWindow(point, html);});
}

function setCenterToPoint(point)
{
	map.setCenter(point, 17);
}

function calculateNearestHotel(point)
{
    var NearestHotelIndex = 0;
    var CurrentDistance = 10000;
        
    for (var i = 0; i < hotels.length; i++)
    {
       var hotel = hotels[i];
       var HotelCord = hotel.Latitude + "," + hotel.Longitude;
       var NewDistance = calculateDistance(point, HotelCord);
       if ( NewDistance < CurrentDistance)
       {
            CurrentDistance = NewDistance;
            NearestHotelIndex = i;
       }
    }
    
    var SelectedHotel = hotels[NearestHotelIndex];
    var HotelPoint = new GLatLng(SelectedHotel.Latitude, SelectedHotel.Longitude);
    
    setCenterToPoint(HotelPoint);
    placeMarkerAtPoint(SelectedHotel.URL, HotelPoint, SelectedHotel.Address, SelectedHotel.Thumb, SelectedHotel.Title);  //(url, point, address, thumb, title)  
}

function calculateDistance(cord1, cord2)
{
    //Returns in miles the distance between to cords
    
    var cord1Array = cord1.toString().replace('(','').replace(')','').split(',');
    var cord2Array = cord2.split(',');
    
    
    var lat1 = cord1Array[0];
    var lat2 = cord2Array[0];
    var lon1 = cord1Array[1]
    var lon2 = cord2Array[1]
    
    var distance = distHaversine(lat1, lon1, lat2, lon2);
    return distance;    
}

function distHaversine (lat1, lon1, lat2, lon2) 
{
    var pi80 = Math.PI / 180;
    lat1 *= pi80;
    lon1 *= pi80;
    lat2 *= pi80;
    lon2 *= pi80;
    
    var r = 6372.797; // Radius of the earth in km
    
    var dlat = lat2 - lat1;
    var dlon = lon2 - lon1;
    
    var a = Math.sin(dlat / 2) * Math.sin(dlat /2) + Math.cos(lat1) * Math.cos(lat2) * Math.sin(dlon /2) * Math.sin(dlon /2);
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1- a));
    var km = r * c;
    
    return km * 0.621371192;
    
}

function findObjWithClientId(Id) 
{ 
    var ctrls = document.getElementsByTagName("body")[0].getElementsByTagName("*");
   
    for(var count = 0; count < ctrls.length ; count ++) 
    { 
        var index = ctrls[count].id.indexOf(Id); 
        if(index != -1) 
        { 
            if((ctrls[count].id.length - index) == Id.length) 
            { 
                return ctrls[count]; 
            } 
        } 
    } 
    return null; 
}



function showPointLatLng(point)
{
	alert("Latitude: " + point.lat() + "\nLongitude: " + point.lng());
}

function mapLoad() {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("googleMap"));
		map.addControl(new GLargeMapControl());
		map.setCenter(new GLatLng(54.622978,-2.592773), 5, G_HYBRID_MAP);
        map.setMapType(G_NORMAL_MAP);
        LoadHotels();
	}
}

function LoadHotels()
{
	if(hotels.length == 1) {
		var hotel = hotels[0];
		var HotelPoint = new GLatLng(hotel.Latitude, hotel.Longitude);
		if(HotelPoint.toString().indexOf("undefined") == -1)
		{
			setCenterToPoint(HotelPoint);
    		placeMarkerAtPoint(hotel.URL, HotelPoint, hotel.Address, hotel.Thumb, hotel.Title);
		}
	} else {
		for (var i = 0; i < hotels.length; i++) {
			var hotel = hotels[i];
			var HotelPoint = new GLatLng(hotel.Latitude, hotel.Longitude);
			if(HotelPoint.toString().indexOf("undefined") == -1)
			{
        		createMarkerAtPoint(hotel.URL, HotelPoint, hotel.Address, hotel.Thumb, hotel.Title);
			}
		}
	}
	
}

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();
	  }
	}
}

$(document).ready(function() {
    $("#postcode").keydown(function(event) {

        if (event.keyCode == enterKeyCode) {
            $('#hotelSearch').click();
            return false;
        }
    });

    mapLoad();
});
$(window).unload(GUnload);
