var map;

var postcodestomark;
 postcodestomark = new Array();

//alert('hello');

var icon = new GIcon();
icon.image = "/files/heart_marker.png";
icon.shadow = "http://www.google.com/mapfiles/shadow50.png";
icon.iconSize = new GSize(25, 25);
icon.shadowSize = new GSize(25, 25);
icon.iconAnchor = new GPoint(12, 25);
icon.infoWindowAnchor = new GPoint(23, 0);

var iconM = new GIcon();
iconM.image = "/files/Heart_MSP.png";
iconM.shadow = "http://www.google.com/mapfiles/shadow50.png";
iconM.iconSize = new GSize(25, 25);
iconM.shadowSize = new GSize(25, 25);
iconM.iconAnchor = new GPoint(12, 25);
iconM.infoWindowAnchor = new GPoint(23, 0);

var iconC = new GIcon();
iconC.image = "/files/Heart_Gold.png";
iconC.shadow = "http://www.google.com/mapfiles/shadow50.png";
iconC.iconSize = new GSize(25, 25);
iconC.shadowSize = new GSize(25, 25);
iconC.iconAnchor = new GPoint(12, 25);
iconC.infoWindowAnchor = new GPoint(23, 0);

var iconE = new GIcon();
iconE.image = "/files/error.png";
iconE.shadow = "http://www.google.com/mapfiles/shadow50.png";
iconE.iconSize = new GSize(50, 50);
iconE.shadowSize = new GSize(50, 50);
iconE.iconAnchor = new GPoint(25, 50);
iconE.infoWindowAnchor = new GPoint(25, 0);

function mark_postcodes(postcodes_array){	
	if(postcodes_array.length);
	for (var postcode in postcodes_array){
	//alert(postcodes_array[postcode][3]);
	usePointFromPostcode(postcodes_array[postcode][0],postcodes_array[postcode][1],postcodes_array[postcode][2],postcodes_array[postcode][3],postcodes_array[postcode][4], placeMarkerAtPoint);
	}
}

function usePointFromPostcode(postcode,name,avatar,text,type,callbackFunction) {
	
	var html="<div class='pledge_box_gmap' style='width:200px'><p><img src='"+avatar+"' alt='avatar' align='right' /><b>I "+name+" pledge</b></p><p>"+text+"</p><div>";
	
	var localSearch = new GlocalSearch();
	
	localSearch.setSearchCompleteCallback(null, 
		function() {
			
			if (localSearch.results[0])
			{		
				var resultLat = localSearch.results[0].lat;
				var resultLng = localSearch.results[0].lng;
				var point = new GLatLng(resultLat,resultLng);
								
				callbackFunction(point,html,type);
			}else{				
				//	var center_point = new GLatLng('56.891003','-4.240723');
				//callbackFunction(center_point,'<p><b>WRONG Location found :(</b></p>'+html,'e');
				
			}
		});	
	
	localSearch.execute(postcode); // + ", UK");
}

//var varmarkersText=new Array();

function placeMarkerAtPoint(point,html,type)
{
//	alert(type);
	if(type=='c')
	var marker = new GMarker(point,iconC);
	else if(type=='m')
	var marker = new GMarker(point,iconM);
	else if(type=='e')
	var marker = new GMarker(point,iconE);
	else
	var marker = new GMarker(point,icon);
		

	
	GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(html);
  });

	map.addOverlay(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"));
	
	 // ====== Restricting the range of Zoom Levels =====
      // Get the list of map types      
      var mt = map.getMapTypes();
      // Overwrite the getMinimumResolution() and getMaximumResolution() methods
      for (var i=0; i<mt.length; i++) {
        mt[i].getMinimumResolution = function() {return 5;}
        mt[i].getMaximumResolution = function() {return 12;}
      }
	  
	map.addControl(new GLargeMapControl ());
	
	//	map.addControl(new GLargeSmallControl());
	//	map.addControl(new GMapTypeControl());
		map.setCenter(new GLatLng(56.891003,-4.240723), 5, G_NORMAL_MAP);
	}

/*
	// Add a move listener to restrict the bounds range
      GEvent.addListener(map, "move", function() {
        checkBounds();
      });

      // The allowed region which the whole map must be within
      var allowedBounds = new GLatLngBounds(new GLatLng(55,-7), new GLatLng(62,-1));
      
      // If the map position is out of range, move it back
      function checkBounds() {
        // Perform the check and return if OK
        if (allowedBounds.contains(map.getCenter())) {
          return;
        }
        // It`s not OK, so find the nearest allowed point and move there
        var C = map.getCenter();
        var X = C.lng();
        var Y = C.lat();

        var AmaxX = allowedBounds.getNorthEast().lng();
        var AmaxY = allowedBounds.getNorthEast().lat();
        var AminX = allowedBounds.getSouthWest().lng();
        var AminY = allowedBounds.getSouthWest().lat();

        if (X < AminX) {X = AminX;}
        if (X > AmaxX) {X = AmaxX;}
        if (Y < AminY) {Y = AminY;}
        if (Y > AmaxY) {Y = AmaxY;}
        //alert ("Restricting "+Y+" "+X);
        map.setCenter(new GLatLng(Y,X));
      }
*/

	mark_postcodes(postcodestomark);	
	
}


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);
