function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_showHideLayers() { //v6.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
    obj.visibility=v; }
}

var map;
var nextAddress = 0;
var localSearch = new Array();
var callBack = new Array();

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);
}

function placeMarkerAtPoint(point, addID) {
	var addrpnt = new GMarker(point, smlicon);
	map.addOverlay(addrpnt);
	//
	arr[addID].addrpnt = addrpnt;
	addrpnt.addressID = addID;
	addrpnt.point = point;
	//
	GEvent.addListener(addrpnt, "click", function() {
		buildMarker(this);
  	});
}

function buildMarker(object) {
	zoomShowInfo(object);
}

function removeMarker(object) {
	intMap();
}

function zoomShowInfo(object) {
	infPoint = object.point;
	map.setCenter(infPoint, 15);
	document.getElementById("address").value = object.addressID;
}

function zoomShowInfoFromSelect(infPoint, addID) {
	map.setCenter(infPoint, 15);
	document.getElementById("address").value = addID;
}

function setCenterToPoint(point) {
	map.setCenter(point, 15);
}

function mapLoad() {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"));
		//
		intMap();
		//
		map.addControl(new GSmallMapControl());
		//map.addControl(new GMapTypeControl());
 		//map.addControl(new GScaleControl()) ;
 		//map.addControl(new GOverviewMapControl());
		//
		smlicon = new GIcon();
		smlicon.image = image;
		smlicon.shadow = shadow;
		smlicon.iconSize = new GSize(37, 29);
		smlicon.shadowSize = new GSize(37, 29);
		smlicon.iconAnchor = new GPoint(15, 29);
		smlicon.infoWindowAnchor = new GPoint(15, 29);
		//
		theNext();
	}
}

function showAddress(addID) {
	if(addID == -1) {
		intMap();
	} else {
		var addr = arr[addID];
		usePointFromPostcode(addr, addID, zoomShowInfoFromSelect);
	}
}

function intMap() {
	var start = new GLatLng(52.8, -2.1);
 	map.setCenter(start, zoomlevel);
	document.getElementById("address").value = -1;
}

function getAddress(addID, next) {
	var addr = arr[addID];
	usePointFromPostcode(addr, addID, placeMarkerAtPoint);
	next(); 
}

function theNext() {
	if (nextAddress < arr.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);