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) {
	intMap();
}

function zoomShowInfo(html, object) {
	infPoint = object.point;
	object.openInfoWindowHtml(html);
	map.setCenter(infPoint, 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.halstone-mobile.com/images/halstonemarker.png";
		smlicon.shadow = "http://www.halstone-mobile.com/images/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.065,-2.247783);
 	map.setCenter(start,9);
	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 onloader(func) {
if(window.addEventListener && !window.opera) {
// Firefox 1.5+, Gecko/Mozilla 1.0.1+, Konqueror, Safari 3.0
window.addEventListener('load', func, false)
}
else if(window.attachEvent) {
// Microsoft IE 5+, Opera 8.0+
window.attachEvent('onload', func)
}
else { // Incomplete solution
// Add func to any existing window.onload.
// Any later inconsiderate window.onload can
// overwrite the window.onload set here
var o=window.onload
window.onload = function() { o ? o() : o;func() }
}
return}



function onunloader(func) {
if(window.addEventListener && !window.opera) {
// Firefox 1.5+, Gecko/Mozilla 1.0.1+, Konqueror, Safari 3.0
window.addEventListener('unload', func, false)
}
else if(window.attachEvent) {
// Microsoft IE 5+, Opera 8.0+
window.attachEvent('unload', func)
}
else { // Incomplete solution
// Add func to any existing window.onload.
// Any later inconsiderate window.onload can
// overwrite the window.onload set here
var o=window.unload
window.unload = function() { o ? o() : o;func() }
}
return}




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

onloader(mapLoad);
onunloader(GUnload);