

var map;
var idx_mkr = 0;
var idx_lnkElem = 1;
var idx_iWndHTML = 2;
var idx_recordType = 3;
var idx_recordId = 4;
var idx_high = 5;
var idx_btnId = 6;
var markerClicked=false;
var newMarkerId;
var newMarkerName;
var newMarkerButtonId;
var newMarkerRespondingElementId;
var markerDataArrays=[];
var markerRespondingElementIds=[];
var debugging = false;
var dragging =false;
var mouseIn = false;
var markerClicked = false;
var rcdId;
var tblName;
var normalButtonInnerHTML = "<img src='" + arrowHorizNormal.src + "'>";
var hilitButtonInnerHTML = "<img width='20px' src='" + ArrowHorizHilit.src + "'>";
function addSlashes(str){
		 return (str+'').replace(/([\\"'])/g, "\\$1").replace(/\0/g, "\\0");
}
function debug(string){
	if(debugging){
		var answer = confirm(string + " \n continue debugging?")
		if(answer){
			debugging=true
		}
		else{
			debugging = false;
		}
		
	}
}
function offerDebug(){
	var answer = confirm("debug?");
	if(answer){
		debugging = true;
	}
}
function loadGMap(tableName,recordId) {
	
	rcdId=recordId;
	tblName = tableName;
	var recordType = "";
	if(tableName =="crags"){
		recordType = "topos";
	}
	if(tableName =="areas"){
		recordType = "crags";
	}
	if(tableName =="regions"){
		recordType = "areas";
	}
	if(tableName =="countries"){
		recordType = "regions";
	}
	
	var iconBlue = new GIcon(); 
	iconBlue.image = 'images/symbols/RapVert.gif';      
	iconBlue.iconAnchor = new GPoint(6, 20);    
	iconBlue.infoWindowAnchor = new GPoint(5, 1);    
	var iconRed = new GIcon();     
	iconRed.image = 'http://labs.google.com/ridefinder/images/mm_20_red.png';    
	iconRed.shadow = 'http://labs.google.com/ridefinder/images/mm_20_shadow.png';    
	iconRed.iconSize = new GSize(12, 20);    iconRed.shadowSize = new GSize(22, 20);    
	iconRed.iconAnchor = new GPoint(6, 20);    
	iconRed.infoWindowAnchor = new GPoint(5, 1);    
		
    if (GBrowserIsCompatible()) {
     	map = new GMap2(document.getElementById("map"));
		
		GEvent.addListener(map,"click", 
				function(GMap2, latlng){
						//offerDebug();
							unHighlightMarkerElements();
							markerClicked = false;	
  							if (latlng) { 
								if(newMarkerId){
									
									var newMarker = createMarker(latlng, newMarkerId,newMarkerName , recordType,newMarkerButtonId)
														map.addOverlay(newMarker);
									
									highlightElement(newMarkerRespondingElementId)
									newMarkerId = null;
									newMarkerName = null;
								}
							else{
    							var myHtml = "The GPoint value is: " + parseInt(latlng.lat()) + " at zoom level " + map.getZoom();
								
							}
						
					
  				}
		});
			
		GEvent.addListener(map,"moveend", function(){ 
				var SWLong= map.getBounds().getSouthWest().lng(); 
				var SWLat= map.getBounds().getSouthWest().lat();
				var NELong= map.getBounds().getNorthEast().lng(); 
				var NELat= map.getBounds().getNorthEast().lat();
				var centreLong = map.getCenter().lng(); 
				var centreLat = map.getCenter().lat();
				var zm = map.getZoom();   
  				//var i= map.getCenter().lat();
				//alert(parseInt(i));
				//var msgDiv = document.getElementById("msg");
				//msgDiv.innerHTML=
				//"SW Lng:" + parseFloat(SWLong) + '<br>' + 
				//"SW Lat:" + parseFloat(SWLat) + '<br>' + 
				//"NE Lng:" + parseFloat(NELong) + '<br>'  + 
				//"NE Lat:" + parseFloat(NELat) + '<br>' + 
				//"Cntre long:" + parseFloat(centreLong)  + '<br>' + 
				//"Cntre lat:" + parseFloat(centreLat)  + '<br>' + 
				//"ZOOM:" + parseFloat(zm);
		});
		map.setMapType(G_NORMAL_MAP);
		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
		var url;
		if(tableName =="areas"){
			url="getAreaGMap.php?areaId=" + recordId;
		}
		if(tableName =="regions"){
			//url="getRegionGMap.php?regionId=" + recordId;
			url="getGMap.php?tableName=regions&recordId="  + recordId;
			
		}
		if(tableName =="countries"){
			url="getGMap.php?tableName=countries&recordId="  + recordId;
			
		}
		//debug(tableName + '...' + recordId + ' map created url=' + url);
		var today       = new Date();
		var time = today.getTime();
		url = url + "&time=" +  time;
		GDownloadUrl(url, 
					 function(data) { 
					 	
					 	//debug(data);
	  					var xml = GXml.parse(data);			
						debug("parsed data");
						var mapElement = xml.documentElement.getElementsByTagName("map");		
						debug("created map element");
						var mapLatLng = new GLatLng(parseFloat(mapElement[0].getAttribute("lat")),parseFloat(mapElement[0].getAttribute("lng")));
						
						var zoom = parseInt(mapElement[0].getAttribute("zoom"));
						
						
						try{
							map.setCenter(mapLatLng, zoom);
						}
						catch(err){
							debug(err.description);  
						}						
						var markers = xml.documentElement.getElementsByTagName("marker"); 							
						
						for (var i = 0; i < markers.length; i++) { 
												var name = markers[i].getAttribute("name");												
												var id = markers[i].getAttribute("id");
												var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),parseFloat(markers[i].getAttribute("lng"))); 
												newMarkerRespondingElementId = "respond_" + id;	
												
												if(tableName =="areas"){
													linkedButtonId = "btn_crag_" + id;
												}
												if(tableName =="regions"){
													linkedButtonId = "btn_area_" + id;
												}
												if(tableName =="countries"){
													linkedButtonId = "btn_region_" + id;
												}
												
												var marker = createMarker(point,id,name,recordType,linkedButtonId);
												
												map.addOverlay(marker);												
						}
						//alert("marker loaded");
						unHighlightMarkerElements();
						map.setMapType(G_NORMAL_MAP);																					
						map.addControl(new GSmallMapControl());	
				 	}
			);				
		
 	  }//end if
	  
	  
	  function createMarker(point,id, name,recordType,linkedButtonId) { 
	   		
	  		if(id==""){
				id=newMarkerId;
			}
			if(name==""){
				id=newMarkerName;
			}
			
			var opts=new Object();
			opts.title=name; 
			opts.draggable=true;
			opts.cragId=id;
			;
			var marker = new GMarker(point,opts); 
			
			//alert(marker.options.toString());
			//var marker = new GMarker(point,{draggable: true; title:'bla'}); 
			
			marker.getIcon().image = "arrowPointingDownSOLID.gif";			
			var infoWindowUrl;
			if(recordType=="topos"){
				infoWindowUrl = "topoViewer.php?" + "topoId=" + id;
			}
			if(recordType=="crags"){
				infoWindowUrl = "crag.php?" + "cragId=" + id;
			}
			if(recordType=="areas"){
				infoWindowUrl = "area.php?" + "areaId=" + id;
			}
			if(recordType=="regions"){
				infoWindowUrl = "region.php?" + "regionId=" + id;
			}
			
			var html = "<a href='" + infoWindowUrl + "'>" + name + "</a>"; 
			
			//var html = "<button id=\"addMarkerButton\" onclick=\"alert('hello');\">Delete</button>";  
			
			if(newMarkerRespondingElementId){
				
				var indexToRemove = -1;
				//alert(markerDataArrays.length);
				for(var i=0;i<markerDataArrays.length;i++){
					var markerAndElem = markerDataArrays[i];
					//alert(markerAndElem[1] + "..." + newMarkerRespondingElementId);
					//alert(markerAndElem[1]==newMarkerRespondingElementId);
					if(markerAndElem[1]==newMarkerRespondingElementId){
						var x = markerAndElem[0];
						map.removeOverlay(x);
						x=null;
						//alert("removed " + x.getTitle());
						//x.openInfoWindowHtml("oops");
						indexToRemove = i;
					}
					
				}				
				if(indexToRemove >-1){
					var newArray =[];
					var newArrayIndex=0;
					for(var i=0;i<markerDataArrays.length;i++){
						if(i!=indexToRemove){
							newArray[newArrayIndex] = markerDataArrays[i];
							newArrayIndex++;
						}
					}
					markerDataArrays = newArray;					
				}
				
				var markerAndElem=[];
				markerAndElem[idx_mkr]=marker;
				markerAndElem[idx_lnkElem]=newMarkerRespondingElementId;
				markerAndElem[idx_iWndHTML]=html;
				
				markerAndElem[idx_recordType]=recordType;
				markerAndElem[idx_recordId]=id;
				markerAndElem[idx_high]=false;
				markerAndElem[idx_btnId]=linkedButtonId;
				
				markerDataArrays[markerDataArrays.length]=markerAndElem;
				
				var elId = newMarkerRespondingElementId;				
				GEvent.addListener(marker, 'click', function() { 
					
					unHighlightMarkerElements();
					highlightElement(elId);
					markerClicked = true;
					//alert(html);
					marker.openInfoWindowHtml(html);
				});
				var nbid = linkedButtonId;
				GEvent.addListener(marker, "mouseover", function() {
					//offerDebug(); 
  					unHighlightMarkerElements();
					
					highlightElement(elId);
  				});
				
			}
			
			
			GEvent.addListener(marker, "dragstart", function() {
  				map.closeInfoWindow();
				dragging=true;
  			});
			GEvent.addListener(marker, "dragend", function() {
				var latlong= marker.getLatLng();
				var latNum =latlong.lat();
				//alert(parseFloat(latNum));
  				//marker.openInfoWindowHtml(parseFloat(marker.getLatLng().lat()));
  				});	
			dragging=false;
			//newMarkerId = null;
			//newMarkerName = null;
			
			
			return marker;
	}
	
	}
	function removeMarker(idx){
		
		arr = markerDataArrays[idx];
		if(arr[0]){
			map.removeOverlay(arr[0]);
		}
	}
	
	function delMarker(marker){			
			map.removeOverlay(marker);
	}	
	function markerExists(recId){
		var b = false;
		for(var i=0;i<markerDataArrays.length;i++){
			var markerAndElem = markerDataArrays[i];
			var tmpId = markerAndElem[idx_recordId];
			if(tmpId==recId){
				b=true;
			}
		}
		return b;
	}
	function highlightElement(elId){	
		var btn;
		var elem;
		var mkr;
		var index=-1;
		
		for(var i=0;i<markerDataArrays.length;i++){
			
			var markerAndElem = markerDataArrays[i];
			
			var m = markerAndElem[idx_mkr];
			//alert(markerAndElem[1]);
			var tmpId = markerAndElem[idx_lnkElem];
			
			var tmpBtnId =  markerAndElem[idx_btnId];
			var btnId;
			var tmphtm = markerAndElem[idx_recordId];
			
			var e = document.getElementById(tmpId);	
			var b = document.getElementById(tmpBtnId);
			
			try{
				unHighlightMarkerElements();
			}			
			catch(err){
				alert('ooarr' + err.description);
			}
			debug(tmpId + "..." + elId);
			
			if(tmpId==elId){			
				debug("found " + elId);
				mkr = m;
				elem = e;
				btn = b;
				btnId = tmpBtnId;
				index = i;
			}
			//highlightMarker2(m,false);
			
			e.style.backgroundColor='#FFFFFF';
			
			
			try{
				btn= document.getElementById(tmpBtnId);
				
				//btn.innerHTML="<img src='arrowPointingRightSOLID.gif'>";
				if(btn2.innerHTML==hilitButtonInnerHTML){
					btn.innerHTML=normalButtonInnerHTML;
				}
				
				
			}
			catch(err){
				debug(err.description)
			}
			
			//}
			
		}
		if(index>-1){									
			
			
			for(var x=0;x<markerDataArrays.length;x++){
				var markerAndElem = markerDataArrays[x];
				var elId2 = markerAndElem[1];
				if(elId2==elId){
					mkr =  markerAndElem[0];
					var btn2id=markerAndElem[idx_btnId];
					debug("btn2id " + btn2id);
					var btn2 = document.getElementById(btn2id);
					//btn2.innerHTML="<img src='arrowPointingRight.gif'>";
					btn2.innerHTML=hilitButtonInnerHTML;
				}
				
			}
			
			highlightMarker2(mkr,true);
			
			elem.style.backgroundColor='#CCCCCC';
		}
		else{
			
		}
		
	}
	
	function highlightMarker2(originalMkr,b){
		
		var infoWinHTML;
		var index=-1;
		var respondingElementId;
		var id;
		var btnId;
		
		
		for(var i=0;i<markerDataArrays.length;i++){
			markerDataArrays[i][idx_high] = false;
			var tmp=markerDataArrays[i];
			
			if(tmp[0]==originalMkr){
				
				index = i;
				respondingElementId = tmp[idx_lnkElem];
				id = tmp[idx_recordId];
				infoWinHTML=tmp[idx_iWndHTML];
				
				btnId = tmp[idx_btnId];
				markerAndElem = tmp.splice(i,0);
				//markerAndElem = tmp.splice();

			}
		}
		
		var name = originalMkr.getTitle();
		
		var opts=new Object();
		opts.title=name; 
		opts.draggable=true;
		opts.cragId=id;
		
		var lat=originalMkr.getLatLng().lat();
		
		var lng=originalMkr.getLatLng().lng();
		
		var ll = new GLatLng(lat,lng);
		
		var newMarker = new GMarker(ll,opts); 
		
		if(b){
			
			newMarker.getIcon().image = ArrowVertHilit.src;
			
		}
		else{
			newMarker.getIcon().image = arrowVertNormal.src;
			
			//alert("hollow");
		}
		
		//alert("removeMarker");
		if(index>-1){
			removeMarker(index);
		}
		else{
			//return;
		}
		
		var elemId = respondingElementId;
		//var html = "<div></div>"
		//html=markerAndElem[idx_iWndHTML];
		//alert(html);
		//alert("gothtml:::" + infoWinHTML);
		
		
		
		GEvent.addListener(newMarker, "dragstart", function() {
  				//map.closeInfoWindow();
				dragging = true;
  		});
		GEvent.addListener(newMarker, "dragend", function() {
			//var latlong= newMarker.getLatLng();
			//var latNum =latlong.lat();
			dragging = false;
  		});	
		GEvent.addListener(newMarker, "mouseup", function() {
			//var latlong= newMarker.getLatLng();
			//var latNum =latlong.lat();
			dragging = false;
  		});	
		GEvent.addListener(newMarker, "mousedown", function() {
			//var latlong= newMarker.getLatLng();
			//var latNum =latlong.lat();
			dragging = true;
  		});	
		
		
		GEvent.addListener(newMarker, "mouseout", function() {
			mouseIn = false;
  		});	
		GEvent.addListener(newMarker, "mouseover", function() {
																								
			if(!dragging){
				if(!mouseIn){
  					unHighlightMarkerElements();
					highlightElement(elemId);
					mouseIn = true;
				}
			}
			
  		});
		
		
		markerAndElem[idx_mkr]	= newMarker;
		markerAndElem[idx_lnkElem]	= respondingElementId;
		if(b){
			markerAndElem[idx_high] = true;
		}
		else{
			markerAndElem[idx_high] = false;
		}
		//markerDataArrays[index]=markerAndElem;
		
		try{
			markerDataArrays[index][idx_mkr] = newMarker;
		    markerDataArrays[index][idx_lnkElem] = respondingElementId;
			if(b){
				markerDataArrays[index][idx_high] = true;
			}
			else{
				markerDataArrays[index][idx_high] = false;
			}
			markerDataArrays[index][idx_btnId] = btnId;
			
			map.addOverlay(newMarker);
			
		}
		catch(err){
			
		}
		if(b){
			
			newMarker.openInfoWindowHtml(infoWinHTML);
		}
		
	}
	
	function unHighlightMarkerElements(){
		if(markerDataArrays.length>0){
			
		}
		
		for(var i=0;i<markerDataArrays.length;i++){
			
			var markerAndElem = markerDataArrays[i];
			var m = markerAndElem[0];
			
			
			if(markerAndElem[idx_high]==true){
				highlightMarker2(m,false);
			}
			
			var tmpId = markerAndElem[1];
			var e;
			try{
				e = document.getElementById(tmpId);	
			}
			catch(e){
				alert(tmpId);
			}
			e.style.backgroundColor='#FFFFFF';
		}
}
function saveMapData(){
strMapData="<?xml version='1.0' encoding='UTF-16' standalone='yes'?><MAPS>"
strMapData = strMapData + "<MAP id=\"" + rcdId + "\" table=\"" + tblName + "\">";
strMapData = strMapData + "<MAP_RECORD_ID>" + rcdId + "</MAP_RECORD_ID>";
strMapData = strMapData + "<MAP_TABLE_NAME>" + tblName + "</MAP_TABLE_NAME>";

tempFileName = "gMapData_" + tblName + "_" + rcdId + ".txt";

strMapData = strMapData + "<MAP_LAT>" + map.getCenter().lat() + "</MAP_LAT>";
strMapData = strMapData + "<MAP_LNG>" + map.getCenter().lng() + "</MAP_LNG>";
strMapData = strMapData + "<MAP_ZOOM>" + map.getZoom() + "</MAP_ZOOM>";
	for(var i=0;i<markerDataArrays.length;i++){
		var array = markerDataArrays[i];
		var mkr = array[idx_mkr];
		var mkrRecId = array[idx_recordId];
		var mkrRecType = array[idx_recordType];
		
		var mkrData = "<MARKER lat=\"" + mkr.getLatLng().lat() + "\" lng=\"" + mkr.getLatLng().lng() + "\" recordType=\"" + mkrRecType + "\" recordId=\"" + mkrRecId + "\">";
		mkrData = mkrData + "<MKR_TABLE_NAME>" + mkrRecType + "</MKR_TABLE_NAME>";
		mkrData = mkrData + "<MKR_RECORD_ID>" + mkrRecId + "</MKR_RECORD_ID>";
		mkrData = mkrData + "<MKR_LAT>" + mkr.getLatLng().lat() + "</MKR_LAT>";
		mkrData = mkrData + "<MKR_LNG>" + mkr.getLatLng().lng() + "</MKR_LNG>";
		mkrData = mkrData + "</MARKER>\n";
		strMapData = strMapData + mkrData;
	}
	strMapData = strMapData + "</MAP>";
strMapData=strMapData + "</MAPS>";

	var retval = "";
	var retval = updateGmapData(strMapData,tempFileName);
	
	if(retval != 'ok'){
		alert(retval);
	}		
}
