var map;
var mMgr;
var markers = [];
var markerCount = postcodes.length;
var minZoom = 5;


function getPointFromPostcode(postcode, i){
	var obj = {};
		obj.id = i;
		obj.searchComplete = function(){
			if(search.results[0]){
				var point = new GLatLng(search.results[0].lat,search.results[0].lng);
				addMarkers(point, this.id);
			}else{
				markerCount--;
			}
		};
	
	var search = new GlocalSearch();
		search.setSearchCompleteCallback(obj, obj.searchComplete);
		search.execute(postcode + ", UK");

}

function createMarker(point, orgid, orgname, orgaddress) {
      var marker = new GMarker(point);
      marker.value = orgname;
      GEvent.addListener(marker, "click", function() {
        var myHtml = "<b><a href=\"/Member_Search/Member_Profile.aspx?id=" + orgid + "\">" + orgname + "</a>" + orgaddress + "</b><br/>";
        map.openInfoWindowHtml(point, myHtml);
      });
      return marker;
}

function addMarkers(point, i){
	markers.push(createMarker(point, orgids[i], orgnames[i], orgaddresses[i]));
	if(markers.length ==markerCount){
		mMgr.addMarkers(markers, minZoom);
		mMgr.refresh();
		
		$('mapCover').setStyle('display', 'none');
		$('map').setStyle('visibility', 'visible');
	}
}

function mapLoad() {
	if (GBrowserIsCompatible()) {
		
		map = new GMap2(document.getElementById("map"));
		
		G_NORMAL_MAP.getMinimumResolution = function () { return minZoom };
        G_SATELLITE_MAP.getMinimumResolution = function () { return minZoom };
        G_HYBRID_MAP.getMinimumResolution = function () { return minZoom }; 
		
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		map.setCenter(new GLatLng(latitude,longitude), zoom, G_NORMAL_MAP);
		mMgr = new MarkerManager(map);
		
		for(var i=0; i<postcodes.length; i++){
		    getPointFromPostcode(postcodes[i], i);
		}
		
		if(postcodes.length == 0){
			$('mapCover').setStyle('display', 'none');
			$('map').setStyle('visibility', 'visible');
		}
	}
}

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();
	  }
	}
}

$('mapCover').setStyle('display', 'block');
$('map').setStyle('display', 'block');

addLoadEvent(mapLoad);
addUnLoadEvent(GUnload);


/*
var icon = new GIcon();
icon.image = "http://www.google.com/mapfiles/marker.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);


function usePointFromPostcode(searchObj,postcode,orgid,orgname,orgaddress,callbackFunction) {

	searchObj.setSearchCompleteCallback(null, 
		function() {
			if (searchObj.results[0])
			{		
				var resultLat = searchObj.results[0].lat;
				var resultLng = searchObj.results[0].lng;
				var point = new GLatLng(resultLat,resultLng);
				//callbackFunction(point,orgid,orgname,orgaddress);
				updateMap(point);
			}else{
				//alert("Postcode not found!");
				//console.log('postcode not found');
				markerCount--;
			}
		}
	);	
	
	searchObj.execute(postcode + ", UK");
}

function placeMarkerAtPoint(point,orgid,orgname, orgaddress)
{
	var marker = createMarker(point, orgid, orgname, orgaddress);
	console.log(mMgr);
	//mMgr.addMarker(marker, 8);
	mMgr.refresh();
	//var marker = new GMarker(point,icon);
	//alert(orgname)
	//map.setMapType(G_NORMAL_MAP);
	//map.addOverlay(createMarker(point, orgid, orgname, orgaddress));
}

function createMarker(latlng, orgid, orgname, orgaddress) {
      var marker = new GMarker(latlng, {icon: icon});
      marker.value = orgname;
      GEvent.addListener(marker,"click", function() {
        var myHtml = "<b><a href=\"/Member_Search/Member_Profile.aspx?id=" + orgid + "\">" + orgname + "</a>" + orgaddress + "</b><br/>";
        map.openInfoWindowHtml(latlng, myHtml);
      });
      return marker;
	}

function setCenterToPoint(point)
{
	map.setCenter(point, 17);
}

function showPointLatLng(point)
{
	alert("Latitude: " + point.lat() + "\nLongitude: " + point.lng());
}

function mapLoad() {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"));
		
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		map.setCenter(new GLatLng(latitude,longitude), 8, G_NORMAL_MAP);
		
		
		window.setTimeout(setupMarkerManager, 0);
	}
}

function setupMarkerManager(){
		mMgr = new MarkerManager(map);
		
		for(var i=0; i<postcodes.length; i++){
			var localSearch = new GlocalSearch();
		    usePointFromPostcode(localSearch,postcodes[i],orgids[i],orgnames[i],orgaddresses[i], placeMarkerAtPoint);
		}
		
}

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);


var markers = [];
var markerCount = postcodes.length;
function updateMap(point){
	var i = markers.length;
	markers.push(createMarker(point, orgids[i], orgnames[i], orgaddresses[i]));
	console.log(markers.length+' : '+markerCount);
	if(markers.length ==markerCount){
		console.log('add markers');
		mMgr.addMarkers(markers, 8);
		mMgr.refresh();
	}
}
*/