var map;
var nextAddress = 1;
var localSearch = new Array();
var callBack = new Array();

function runCallBack() {
	if (localSearch.results[0]) {		
		var resultLat = localSearch.results[0].lat;
		var resultLng = localSearch.results[0].lng;
		var point = new GLatLng(resultLat,resultLng);
		callbackFunction(point, this.addID);
	} else{
		alert("Postcode not found! "+this.postcode);
	}
}

function usePointFromPostcode(postcode, addID, callbackFunction) {
	localSearch[addID] = new GlocalSearch();
	callBack[addID] = function() {
		if (localSearch[addID].results[0]) {		
			var resultLat = localSearch[addID].results[0].lat;
			var resultLng = localSearch[addID].results[0].lng;
			var point = new GLatLng(resultLat,resultLng);
			callbackFunction(point, addID);
		} else{
			// Postcode not found!
		}
	}
	localSearch[addID].setSearchCompleteCallback(null, callBack[addID]);
	localSearch[addID].execute(postcode)// + ", UK");
}

function placeMarkerAtPoint(point, addID) {	
	var addrpnt = new GMarker(point, smlicon);
	map.addOverlay(addrpnt);
	//
	pArray[addID].addrpnt = addrpnt;
	addrpnt.addressID = addID;
	addrpnt.point = point;
	//
	GEvent.addListener(addrpnt, "click", function() {
		buildMarker(this);
  	});
	//
	GEvent.addListener(addrpnt, "infowindowclose", function() {
		removeMarker(this);
	});
}

function buildMarker(object) {
 	zoomShowInfo(aArray[object.addressID], object);
}

function removeMarker(object) {
	map.closeInfoWindow()
	//intMap();
}

function zoomShowInfo(html, object) {
	infPoint = object.point;
	infPoint2 = new GLatLng(Number(object.point.lat())+0.005, Number(object.point.lng()));
	object.openInfoWindowHtml(html);
	map.setCenter(infPoint2, 14);
	
	document.getElementById("address").value = object.addressID;
}

function setCenterToPoint(point) {
	map.setCenter(point, 14);
}

/*
function showPointLatLng(point) {
	alert("Latitude: " + point.lat() + "\nLongitude: " + point.lng());
}
*/

function mapLoad() {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"));
		//
		intMap();
		//
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
 		map.addControl(new GScaleControl()) ;
 		map.addControl(new GOverviewMapControl()) ;
		//
		smlicon = new GIcon();
		smlicon.image = "http://www.ibstock.uk.com/google-map/img/smlicon.png";
		smlicon.shadow = "http://www.ibstock.uk.com/google-map/img/smliconshadow.png";
		smlicon.iconSize = new GSize(47, 37);
		smlicon.shadowSize = new GSize(47, 37);
		smlicon.iconAnchor = new GPoint(18, 37);
		smlicon.infoWindowAnchor = new GPoint(18, 37);
		//
		theNext();
	}
}

function showAddress(addID) {
	if(addID == 0) {
		intMap();
	} else {
		buildMarker(pArray[addID].addrpnt);
	}
}

function intMap() {
	map.closeInfoWindow()
	var start = new GLatLng(53.8, -3.1);
 	map.setCenter(start, 6);
	document.getElementById("address").value = 0;
}

function getAddress(addID, next) {
	var addr = pArray[addID].postcode;
	usePointFromPostcode(addr, addID, placeMarkerAtPoint);
	next(); 
}

function theNext() {
	if (nextAddress < pArray.length) {
		setTimeout('getAddress("'+nextAddress+'",theNext)', 10);
		nextAddress++;
	}
}

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();
	  }
	}
}

addLoadEvent(mapLoad);
addUnLoadEvent(GUnload);
