var map;
var localSearch = new GlocalSearch();

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(postcode, callbackFunction) {
	
	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);
			}else{
				alert("Postcode not found!");
			}
		});	
		
	localSearch.execute(postcode + ", UK");
}

function placeMarkerAtPoint(point)
{
	// Disable marker so it's not shown on map
	/*var marker = new GMarker(point,icon);
	map.addOverlay(marker);*/
	map.setCenter(point, 10);
}

function setCenterToPoint(point)
{
	map.setCenter(point, 10);
}

function showPointLatLng(point)
{
	alert("Latitude: " + point.lat() + "\nLongitude: " + point.lng());
}

function mapLoad() {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("marker-map"));
		
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		map.setCenter(new GLatLng(54.61301200837813,-1.539459228515625), 5, G_HYBRID_MAP); //53.47409816712899, -2.5927734375
	}
}

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);
mapBehaviour = {
	
	instructorContainerID:'instructor_details_holder',
	resetMapID:'reset-map',
	latitudeID:'latitude',
	longitudeID:'longitude',
	zoomLevelID:'zoom_level',
	unitedKingdomMapID:'view-united-kingdom',
	
	moreInfoLinkID:'moreinfo-link',
	// Track markers so we can open their info window with an external link
	gmarkers: Array(),
	
	defaultZoom: 15,
	
	map : null,
	localSearch : new GlocalSearch(),

	init:function()
	{//return;
		// Check to see if W3C DOM is available - if not terminate script
		// If required objects are available, hide js alert and show update form
		if(!document.getElementById || !document.createTextNode){return;}
		
		var container = document.getElementById(mapBehaviour.instructorContainerID);
		if(container) {
			
			//var _divs = container.getElementsByTagName("div");
			var _a = container.getElementsByTagName("a");
			if(_a) {
				//alert(_divs);
				for (i=0;i<_a.length;i++)
				{
					
					if(helper.cssjs('check',_a[i],'locationlink')) {
						//alert(_divs[i].getAttribute('href'));
						/*helper.addEvent(_a[i],'click',mapBehaviour.centerMap,false);*/
						helper.addEvent(_a[i],'mouseover',mapBehaviour.showMoreInfo,false);
						helper.addEvent(_a[i],'mouseout',mapBehaviour.hideMoreInfo,false);
					}
					if(helper.cssjs('check',_a[i],'moreinfo-link')) {
						helper.addEvent(_a[i],'click',mapBehaviour.centerMap,false);
						/*helper.addEvent(_a[i],'mouseover',mapBehaviour.showMoreInfoOnLink,false);
						helper.addEvent(_a[i],'mouseout',mapBehaviour.hideMoreInfoOnLink,false);*/
					}
					/*if(helper.cssjs('check',_a[i],'expericence-link'))
						helper.addEvent(_a[i],'mouseover',mapBehaviour.showMoreInfoOnLink,false);*/
				}
			}
			var _divs = container.getElementsByTagName("div");
			if(_divs) {
				for (i=0;i<_divs.length;i++) {
					if(helper.cssjs('check',_divs[i],'expericence-link'))
						helper.addEvent(_divs[i],'mouseover',mapBehaviour.showMoreInfoOnLink,false);
				}
			}
		} else {
			return;	
		}
		// ++++++++++++++++++++++ Attach an event that allows the map to be reset
		var container = document.getElementById(mapBehaviour.resetMapID);
		if(container) {
			helper.addEvent(container,'click',mapBehaviour.resetMap,false);
		}
		// ++++++++++++++++++++++ Attach an event that allows the map to be reset
		// ++++++++++++++++++++++ Attach an event that allows the full UK to be shown
		var container = document.getElementById(mapBehaviour.unitedKingdomMapID);
		if(container) {
			helper.addEvent(container,'mouseover',mapBehaviour.showUK,false);
		}
		// ++++++++++++++++++++++ Attach an event that allows the full UK to be shown

		
		//var container = document.getElementById("emma@mybodystudios.co.uk");
		
		//var val = map;//.marker.get("emma@mybodystudios.co.uk");
//		alert(val.getElementsByTagName("marker"));
		//var mm = new GMarkerManager(map, {maxZoom:19}); 
	//	alert(mapBehaviour.dumpObj(mm));
	},
	   
	resetMap:function(e) {
		
		var resultLat = document.getElementById(mapBehaviour.latitudeID).firstChild.nodeValue;
		var resultLng = document.getElementById(mapBehaviour.longitudeID).firstChild.nodeValue;
		var zoomLevel = document.getElementById(mapBehaviour.zoomLevelID).firstChild.nodeValue;
		var point = new GLatLng(resultLat,resultLng);
		// callbackFunction(point);
		
		//var map = document.getElementById("marker-map");
		var marker = new GMarker(point,icon);
		//map.addOverlay(marker);
		map.setCenter(point, parseInt(zoomLevel));
		helper.cancelClick(e);
	},
	showUK:function(e) {
		
		var resultLat = 55.378051;
		var resultLng = -3.43597;
		var zoomLevel = 5;
		var point = new GLatLng(resultLat,resultLng);
		// callbackFunction(point);
		
		//var map = document.getElementById("marker-map");
		var marker = new GMarker(point,icon);
		//map.addOverlay(marker);
		map.setCenter(point, parseInt(zoomLevel));
	},

	centerMap:function(e) {
		
		// Trigger the map to open the info window
		
		var linkElement = helper.getTarget(e);
		//var url = linkElement.getAttribute('href');//.split('#');
		if(linkElement.getAttribute('href')) {
			var id = linkElement.getAttribute('href');
		} else { 
			if(linkElement.parentNode.getAttribute('href')) {
				
				var id = linkElement.parentNode.getAttribute('href');
			}else{
				if(linkElement.parentNode.parentNode.getAttribute('href')) {
					var id = linkElement.parentNode.parentNode.getAttribute('href');
				}else{
					if(linkElement.parentNode.parentNode.parentNode.getAttribute('href')) {
						var id = linkElement.parentNode.parentNode.parentNode.getAttribute('href');
					}else{
						var id = linkElement.parentNode.parentNode.parentNode.parentNode.getAttribute('href');
					}
				}
			}
		}
	 	var idValue = id.split('#');
		//map.setCenter(point, mapBehaviour.defaultZoom);
		//	alert(mapBehaviour.gmarkers[1958]);
		GEvent.trigger(mapBehaviour.gmarkers[parseInt(idValue[1])], "click");
		
		return;
		var resultLat = document.getElementById("latitude_"+idValue[1]).firstChild.nodeValue;
		var resultLng = document.getElementById("longitude_"+idValue[1]).firstChild.nodeValue;
		
		/*var _spans = linkElement.getElementsByTagName("span");
		if(_spans) {
			for (i=0;i<_spans.length;i++)
			{
				if(helper.cssjs('check',_spans[i],'latitude')) {
					
					var resultLat = _spans[i].innerHTML;
				}else{
					if(helper.cssjs('check',_spans[i],'longitude')) {
						var resultLng = _spans[i].innerHTML;
					}
				}
			}
		} else {
			return;
		}*/
		if(!resultLat)
			return;
		/*localSearch.setSearchCompleteCallback(null, 
		function() {
			
			if (localSearch.results[0])
			{*/	
				//var resultLat = 51.4959446451; //localSearch.results[0].lat;
				//var resultLng = -0.1754808426; //localSearch.results[0].lng;
				var point = new GLatLng(resultLat,resultLng);
				// callbackFunction(point);
				
				//var map = document.getElementById("marker-map");
				var marker = new GMarker(point,icon);
				//map.addOverlay(marker);
				map.setCenter(point, mapBehaviour.defaultZoom);
	
			/*}else{
				alert("Postcode not found!");
			}
		});	*/
		// localSearch.execute(postcode + ", UK");
		helper.cancelClick(e);
	},
	
	showMoreInfo:function(e) {
		
		var linkElement = helper.getTarget(e);
		//var url = linkElement.getAttribute('href');//.split('#');
		if(linkElement.parentNode.getAttribute('href')) {
			
			var id = linkElement.parentNode;
		}else{
			if(linkElement.parentNode.parentNode.getAttribute('href')) {
				var id = linkElement.parentNode.parentNode;
			}else{
				if(linkElement.parentNode.parentNode.parentNode.getAttribute('href')) {
					var id = linkElement.parentNode.parentNode.parentNode;
				}else{
					var id = linkElement.parentNode.parentNode.parentNode.parentNode;
				}
			}
		}
		helper.cssjs('add',id.parentNode,'showmoreinfo');
	},
	
	hideMoreInfo:function(e) {
		
		var linkElement = helper.getTarget(e);
		//var url = linkElement.getAttribute('href');//.split('#');
		if(linkElement.parentNode.getAttribute('href')) {
			
			var id = linkElement.parentNode;
		}else{
			if(linkElement.parentNode.parentNode.getAttribute('href')) {
				var id = linkElement.parentNode.parentNode;
			}else{
				if(linkElement.parentNode.parentNode.parentNode.getAttribute('href')) {
					var id = linkElement.parentNode.parentNode.parentNode;
				}else{
					var id = linkElement.parentNode.parentNode.parentNode.parentNode;
				}
			}
		}
		helper.cssjs('remove',id.parentNode,'showmoreinfo');
	},
	
	showMoreInfoOnLink:function(e) {
		
		var linkElement = helper.getTarget(e);
		//var url = linkElement.getAttribute('href');//.split('#');

		var id = linkElement.parentNode;
		helper.cssjs('add',id,'showmoreinfo');
	},
	
	hideMoreInfoOnLink:function(e) {
		var linkElement = helper.getTarget(e);
		var id = linkElement.parentNode;
		helper.cssjs('remove',id,'showmoreinfo');
	},
	
	usePointFromPostcode:function(postcode) {
	
		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);
				
				var marker = new GMarker(point,icon);
				map.addOverlay(marker);
				map.setCenter(point, 10);
	
			}else{
				alert("Postcode not found!");
			}
		});	
		
		localSearch.execute(postcode + ", UK");
	},
	
	placeMarkerAtPoint:function(point)
	{
		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);

		var marker = new GMarker(point,icon);
		map.addOverlay(marker);
		map.setCenter(point, 10);
	}
}

helper.addEvent(window, 'load', mapBehaviour.init, false);
