var map;
var localSearch = new GlocalSearch();
var geocoder = null;
var Icon;
var Markers = new Array();
var Html ='';
var to_htmls = new Array();
var from_htmls = new Array();
var htmls = new Array();
var gdir;
var country = 'UK';

function usePointFromPostcode(postcode) {
	Html = '';
	localSearch.setSearchCompleteCallback(null, 
		function() {			
			if (localSearch.results[0])
			{
				for(var i=0; i<Markers.length; i++) {
				map.removeOverlay(Markers[i]);
				}
				var resultLat = localSearch.results[0].lat;
				var resultLng = localSearch.results[0].lng;
				
				processAddress( resultLat, resultLng );
				
			}else{
				alert("Postcode not found!");
			}
		});	
		
	localSearch.execute(postcode + ", "+country);
}

function createMarker(point, i, name) {	
	if(i==0) {
	Icon.image = "icons/green/marker"+(i+1)+".png";
	}
	else {
	Icon.image = "icons/marker"+(i+1)+".png";	
	}
	
	var marker = new GMarker(point, Icon);
	
	to_htmls[i] = '<br>Directions: <b>To here<\/b> - <a href="javascript:fromhere(' + i + ')">From here<\/a>' +
           		  '<br>Start address:<form action="javascript:getDirections()">' +
                  '<input type="text" SIZE=30 MAXLENGTH=40 name="saddr" id="saddr" value="" /><br><br>' +
           		  '<INPUT value="Get Directions" TYPE="SUBMIT"><br>' +
           		  '<input type="hidden" id="daddr" value="'+name+"@"+ point.lat() + ',' + point.lng() + 
           		  '"/>';
   from_htmls[i] ='<br>Directions: <a href="javascript:tohere(' + i + ')">To here<\/a> - <b>From here<\/b>' +
           		  '<br>End address:<form action="javascript:getDirections()">' +
           		  '<input type="text" SIZE=30 MAXLENGTH=40 name="daddr" id="daddr" value="" /><br><br>' +
           		  '<INPUT value="Get Directions" TYPE="SUBMIT"><br>' +
           		  '<input type="hidden" id="saddr" value="'+name+"@"+ point.lat() + ',' + point.lng() +
           		  '"/>';
   var html = 'Directions: <a href="javascript:tohere('+i+')">To here<\/a> - <a href="javascript:fromhere('+i+')">From here<\/a>';

   GEvent.addListener(marker, "click", function() {												
   marker.openInfoWindowHtml(html);
   });
    
   Markers[i] = marker;
   htmls[i] = html;
   return marker;
}

function getDirections() {
   	var saddr = $("#saddr").attr("value");
    var daddr = $("#daddr").attr("value");
	$("#content").css("display", "none");
	$("#directions").css("display", "block");
	map.closeInfoWindow();
    gdir.load("from: "+saddr+" to: "+daddr);
}


function createHtml( marker, i ) {
	var address_str = '';
	var name = marker.getAttribute("store_name");
	var distance = marker.getAttribute("store_distance");
	var address = marker.getAttribute("store_address");
	address = address.split("|");
	for( var j=0; j<address.length; j++ ) {
	address_str += address[j]+'<br>';
	}
	var postcode = marker.getAttribute("store_postcode");
	var phone = marker.getAttribute("store_phone");
	if( phone ) {
	phone = 'Tel: '+phone+'<br>';
	}
	Html += '<p><a href="javascript:myclick('+i+')">' + name + '<\/a><br>'+address_str+postcode+'<br>'+phone+'<\/p><p class="dist">Distance: '+distance+' mile(s)<\/p>';
}

function myclick( num ) {
	for(var i=0; i<Markers.length; i++) {
		if( i==num ) {
		var image = "icons/green/marker"+(i+1)+".png";	
		var center = Markers[i].getLatLng();
		}
		else {
		var image = "icons/marker"+(i+1)+".png";	
		}
		Markers[i].setImage(image);
	}
	
	Markers[num].openInfoWindowHtml(htmls[num]);
	map.setCenter(center, 15);
}

function tohere(num) {
	Markers[num].openInfoWindowHtml(to_htmls[num]);
 }
 
 function fromhere(num) {
 	Markers[num].openInfoWindowHtml(from_htmls[num]);
 }
 
 function DisplayStores() {
 gdir.clear();
 $("#content").css("display", "block");
 $("#directions").css("display", "none");
 }


function mapLoad() {
	if (GBrowserIsCompatible()) {
		map = new GMap2($('#map').get(0));
		
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
       	map.setCenter(new GLatLng(55.378051, -3.435973), 5);
		gdir = new GDirections(map, $("#directions").get(0));
		geocoder = new GClientGeocoder();
		//geocoder.setBaseCountryCode("UK");
		Icon = new GIcon(G_DEFAULT_ICON);
	}
}

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 processAddress(lat, lng) {
	var request = GXmlHttp.create();
      request.open("GET", "stores.php?lat="+lat+"&lng="+lng+"&country="+country, true);
      request.onreadystatechange = function() {
        if (request.readyState == 4) {
          var xmlDoc = GXml.parse(request.responseText);
          var markers = xmlDoc.documentElement.getElementsByTagName("marker");          
		  for (var i = 0; i < markers.length; i++) {
            var lat = parseFloat(markers[i].getAttribute("store_lat"));
            var lng = parseFloat(markers[i].getAttribute("store_lng"));
            var point = new GLatLng(lat,lng);
				if( i==0 ) {
				map.setCenter(point, 15);	
				}
            var marker = createMarker(point, i, markers[i].getAttribute("store_name"));
			createHtml( markers[i], i );
            map.addOverlay(marker);
          }
		  $("#address_area").fadeOut("slow",function callback() {
		  if( markers.length > 0 ) {
			  $('#content').html(Html);
		  }
		  else {
		 	  $('#content').html('<p style="color:#ff0000; font-weight:bold;">No stores were found close to your location</p>');  
		  }
		  });
        }
      }
      request.send(null);
}

function SetCountry(code) {
country = code;
	if(country == 'UK') {
	$('#address_txt').html('<img src="images/img2.jpg" />');	
	}
	else {
	$('#address_txt').html('<img src="images/img3.jpg" />');	
	}
	if( $("#address_area").css("display") == "none") {
	$("#address_area").fadeIn("slow");	
	}
}

addLoadEvent(mapLoad);
addUnLoadEvent(GUnload);