/**************************************

	DOGS ON THE BLOCK MAPS
	
	Needs different google key for every domain
	
	last update: 17 april 2007
	
****************************************/

var t_visit = "Hondenronde bezoeken";
var t_add = "Mijn hond aan deze ronde toevoegen";
var t_dogs = "hond(en)";
var t_new = "je nieuwe hondenronde";

var map;
var mainform; // holds the data in hidden fields
var markers; // will hold all location markers
var baseIcon;
if (typeof pageAction == "undefined") var pageAction = "none";


/***** DOGSPOT RELATED FUNCTIONS ****/
var dogspot = new Array();

// create marker functions (requires googleMaps to be able to function correctly)
function dogspotObject(name, point, id, loc, tot) { // intialize object
	this.name = name;
	this.point = point;
	this.id = id;
	this.loc = loc;
	this.total = tot;
	//this.lat = lat; this.lng = lng; // not used	
	//this.marker = new GMarker(point, icon);
	
	this.bark = function() { // method
		alert("woof");
	}
	
	this.addMarker = function(themarker) {
		this.marker = themarker;
		this.marker.title = "This is "+this.name;
	}
	
} // end object init

/***** ONLOAD EVENT + ACTION SWITCHER ****/
   function load() {
     if (GBrowserIsCompatible()) {
		 			
		 // language specific texts here		
		
		if (typeof(mapLang) == "undefined") mapLang = "nl";
		else if (mapLang=="fr") {
			t_visit = "Visiter cette balade pour chiens";
			t_add = "Ajouter mon chien à cette balade";
			t_dogs = "chien(s)";
			t_new = "Nouvelle balade";
		}
		
		// ****************************************
		

		// do general initialisation:
      	map = new GMap2(document.getElementById("map"));
   		map.addControl(new GOverviewMapControl());
		map.addControl(new GMapTypeControl());
		
		pageAction = pageAction.toLowerCase();
		
		if ((pageAction=="clicklist" || pageAction=="clicklistdog") && typeof(myLng)!="undefined") { // default location has been defined via querystring 'loc=3300'
			defaultzoom = 11;
				
		} else { // no default location via querystring 'loc=3300'
			
			var t = readCookie("defaultzoom");
			if (t!="") { // get via cookie (user last view of map)
				if (pageAction=="clicklist" || pageAction=="create" || pageAction=="modify" || pageAction=="clicklistdog") {
					//alert("cookie");
					defaultzoom = parseInt(t,10); myLat= readCookie("lat"); myLng = readCookie("long");
				}
			} else { // no cookie data yet use DEFAULT SETTINGS
				if (typeof(defaultzoom)=="undefined") defaultzoom = 10;
				// don't change the longitude/latitude (yet) will be changed underneath
				// myLat = 50.849090;
				// myLng = 4.348183;								
			}
			//
		} // end if location selection
	
		
		if (typeof(myLat)=="undefined" || myLat=="" ) {
			// define some default view (Brussels area):
			//alert("creating default lat and longitude");
			myLat = 50.849090;
			myLng = 4.348183;				
		} //else alert("myLat: "+myLat);
		
		map.setCenter(new GLatLng(myLat,myLng), defaultzoom); // show selected location
		
		//alert("defaultzoom: "+defaultzoom);
		initIcons();		
		
	
		
		// do pageSpecific Stuff:
		switch(pageAction) {
			case "clicklist": 
				map.addControl(new GLargeMapControl());
				if (typeof(defaultzoom)=="undefined") defaultzoom = 12;				
				loadLocations(); 
				//showOnMap(0);
				break;
			case "clicklistdog": 
				map.addControl(new GLargeMapControl());
				if (typeof(defaultzoom)=="undefined") defaultzoom = 12;				
				loadLocations(); 
				//showOnMap(0);
				break;
				
			case "show":
			    //map.addControl(new GSmallMapControl());
				map.addControl(new GLargeMapControl());
				if (typeof(defaultzoom)=="undefined") defaultzoom = 14;
				//map.setZoom(defaultzoom);
				loadLocations();				
				break;
				
			case "create":
				mainform = document.dogspot_frm;
				//map.addControl(new GSmallMapControl());
				map.addControl(new GLargeMapControl());								
				//initMapForm(); // custom function for form				
				addNewSpot();
			 	break;		
				
			case "modify":
				mainform = document.dogspot_frm;
				//map.addControl(new GSmallMapControl());
				map.addControl(new GLargeMapControl());								
				//initMapForm(); // custom function for form
				loadLoaction4Edit();			
				addNewSpot();
			 	break;			
		} // end switch
				
     }
   }

/***** MAP RELATED FUNCTIONS ****/
function initIcons() {
	// Create a base icon for all of our markers that specifies the
	// shadow, icon dimensions, etc.
	baseIcon = new GIcon();
	baseIcon.image = "/zapdog/gmap/markerImage.png";
	baseIcon.iconSize = new GSize(26, 23);
	
	// shadow can be different image:
	//baseIcon.shadow = "markerImage.png";
	//baseIcon.shadowSize = new GSize(37, 34);		
	
	baseIcon.iconAnchor = new GPoint(9, 23);
	baseIcon.infoWindowAnchor = new GPoint(9, 12);
	baseIcon.infoShadowAnchor = new GPoint(18, 25);
	
	blurIcon = new GIcon();
	blurIcon.image = "/zapdog/gmap/markerImageBlur.png";
	blurIcon.iconSize = new GSize(26, 23);
	
	blurIcon.iconAnchor = new GPoint(9, 23);
	blurIcon.infoWindowAnchor = new GPoint(9, 12);
	blurIcon.infoShadowAnchor = new GPoint(18, 25);
	
}


function loadLocations() {
	// Download the data in data.xml and load it on the map. The format we
	// expect is:
	// <markers>
	//   <marker lat="37.441" lng="-122.141"/>
	//   <marker lat="37.322" lng="-121.213"/>
	// </markers>
	
	showStatus("One moment please, loading dogspot locations...");
	GDownloadUrl(markerData, function(data, responseCode) {
	//alert(data)
	  var xml = GXml.parse(data);
	 // xml = xml.firstChild;
	  //alert(xml.childNodes.length+"\n"+xml.childNodes[0]);
	  //alert(xml);
	  //alert(xml.documentElement.getElementsByTagName("marker"))
	  var markers = xml.documentElement.getElementsByTagName("marker");
	  //var markers = xml.getElementsByTagName("marker");
	  //alert(markers.length);
	  
	  if(pageAction=='clicklistdog'){
	 	map.setCenter(new GLatLng(0,0),0);
	  	//map.setCenter(new GLatLng(50.849090,4.348183), map.getZoom());
	 	var bounds = new GLatLngBounds();
	  }
	  
	  for (var i = 0; i < markers.length; i++) {
		var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));	
		if(pageAction=='clicklistdog'){
	  		bounds.extend(point);
		}				
				
	
		//if (markers.length==1) { map.setCenter(point, defaultzoom); }
		
		
	   	dogspot[i] =  new dogspotObject(
								markers[i].getAttribute("name"),
								point,
								markers[i].getAttribute("id"),
								markers[i].getAttribute("loc"),
								markers[i].getAttribute("total")
							);
		
		//if (dogspot[i].id==selectedSpot) { map.setCenter(point, defaultzoom); }
	   
		// add 
		//addToList( i, dogspot[i].name );		

	  } // end for
		if(pageAction=='clicklistdog'){
			if(markers.length==1)
			map.setZoom(map.getBoundsZoomLevel(bounds)-4);
			else if(markers.length==2)
			map.setZoom(map.getBoundsZoomLevel(bounds)-1);
			else
			map.setZoom(map.getBoundsZoomLevel(bounds));
			//alert(map.getZoom())
			map.setCenter(bounds.getCenter());
		}
		showLocations();
		
	}); // end GDownloadUrl
	
		
	
} // end loadLocations()

function loadLoaction4Edit(){
//liName,liLat,liLng,liZoom,liID,liLoc,liTotal
	liName=document.dogspot_frm.dogspotName.value;
	liLat=document.dogspot_frm.iLat.value;
	liLng=document.dogspot_frm.iLong.value;
	liLat=document.dogspot_frm.iLat.value;
	liZoom=document.dogspot_frm.iZoom.value;
	liID=document.dogspot_frm.dogspot_id.value;
	liLoc='loc';
	liTotal='0';
	var point = new GLatLng(parseFloat(liLat), parseFloat(liLng));	
	dogspot[0] =  new dogspotObject(liName, point, liID, liLoc, liTotal);
	map.setCenter(new GLatLng(0,0),0);
	var bounds = new GLatLngBounds();
	bounds.extend(point);
	map.setZoom(map.getBoundsZoomLevel(bounds)-4);
	map.setCenter(bounds.getCenter());
	showLocations();
}


function showLocations() {
	// Download the data in data.xml and load it on the map. The format we
	// expect is:
	// <markers>
	//   <marker lat="37.441" lng="-122.141"/>
	//   <marker lat="37.322" lng="-121.213"/>
	// </markers>
	
	showStatus("One moment please, rendering dogspot locations...");
	//alert("dogspot.length: "+dogspot.length+ " selectedSpot id: "+selectedSpot);
	
  for (var i = 0; i < dogspot.length; i++) {
	//alert(markerData+" added "+i+" "+dogspot[i].name+" with id "+dogspot[i].id );
	
	if (pageAction != "show" || dogspot[i].id==selectedSpot || selectedSpot==0) {
		var icon = new GIcon(baseIcon); // default active icon
	} else {
		var icon = new GIcon(blurIcon); // inactive icon
	}
	
   	dogspot[i].addMarker( createMarker(dogspot[i].point, icon, i ) );
   	map.addOverlay( dogspot[i].marker ); // function with click handler
	

  } // end for
  
	showStatus("Done.");		
	
	//if (pageAction=="clicklist" && typeof(defaultDogspot)!='undefined') show(defaultDogspot); // uses db id
	
	GEvent.addListener(map, "zoomend", function() { 
		setCookie("defaultzoom",map.getZoom(),30);
	} );
	
	GEvent.addListener(map, "moveend", function() {
		var center = map.getCenter();
		setCookie("lat",center.lat(),30);
		setCookie("long",center.lng(),30);
		//alert (center.lat()+", "+center.lng());			
	});
	  

	
		
	
} // end loadLocations()


function showStatus(s) {
	//document.getElementById("mapstatus").innerHTML = s;
}

function createMarker(point,icon,id) {
  var marker = new GMarker(point,icon);
  marker.title = "title"; 
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml( infoHTML(dogspot[id]) );
  });
  return marker;
}

// **** CREATE FUNCTIONS ***

function addNewSpot() {
	
	GEvent.addListener(map, "click", function(marker, point) {
	if (!marker) map.clearOverlays(); // already clicked before, remove old clicked position
		dogspot[0] =  new dogspotObject(t_new,	point);
		// add icon;	
		var icon = new GIcon(baseIcon); // create a new icon from default icon		
		
		mainform.iLong.value = point.lng();
		mainform.iLat.value = point.lat();
		mainform.iZoom.value = map.getZoom();		
		
		dogspot[0].addMarker( createMarker(dogspot[0].point, icon, 0 ) );
		map.addOverlay( dogspot[0].marker ); // function with click handler	
		//updateMyLink();
	});
	
	GEvent.addListener(map, "zoomend", function() { 
			mainform.iZoom.value = map.getZoom();
			setCookie("defaultzoom",mainform.iZoom.value,30);
	} );
	
	
}

function updateMyLink() {
 	document.getElementById("dogspotlist").innerHTML = "<li><a href='javascript:showOnMap(0)'>Center my new dogspot on map</a></li>";	
}

// *** LIST FUNCTIONS ***
function addToList(id,s) {
	document.getElementById("dogspotlist").innerHTML += "<li><a href='javascript:showOnMap("+id+")'>"+s+" id:"+id+"</a></li>";
}

function show(dbid) { // similar to showOnMap(id), but uses db id instead of sequential id
	var i=0; var found=-1; while(i<dogspot.length && found==-1) { if(dogspot[i].id==dbid) found=i; i++; }
	showOnMap(found);
}

function showOnMap(id) {
	//alert("showOnMap("+id+")");
	//var temp = new GLatLng( parseFloat(markers[0].getAttribute("lat")), parseFloat(markers[0].getAttribute("lng")) );
	map.panTo(dogspot[id].point);
	map.setCenter(dogspot[id].point);
	//var marker = new GMarker(point,icon);
	dogspot[id].marker.openInfoWindowHtml( infoHTML(dogspot[id]) );
	map.savePosition();
	
}

function infoHTML(obj) {
	//alert("show info");
	var html = "<b>"+unescape(obj.name)+"</b><br>";
	if (pageAction!="create" ||pageAction!="modify") {
		html += unescape(obj.loc) + "<br>";
		html += obj.total + " "+t_dogs+"<br>"; 
	}
	//if (typeof(addLink)=="undefined") 
	html += "<br>"; 
	//if (typeof(visitLink)!="undefined" && selectedSpot!=obj.id && pageAction != "show" ) html+= "<a href='"+visitLink + obj.id+"'>"+t_visit+"</a><br>";
	if (typeof(visitLink)!="undefined" && !(selectedSpot==obj.id && pageAction == "show") ) html+= "<a href='"+visitLink + obj.id+"'>"+t_visit+"</a><br>";
	
	//+ obj.id
	//var popuplink = page+"site.page&pid=popups/empty&keepThis=true&TB_iframe=true&height=370&width=610";
	//var popuplink = "?action=site.page&pid=popups/empty&keepThis=true&TB_iframe=true&height=370&width=610"; // title="" class="thickbox">Open thickbox</a>';
	//var popuplink = "javascript:top.addDog();"; // title="" class="thickbox">Open thickbox</a>';
	// GEDISABLED if (typeof(addLink)!="undefined") html+= "<br><a href='"+popuplink+"' title='Mijn hond aan deze ronde toevoegen' class='thickbox' target='_top'>Mijn hond aan deze ronde toevoegen</a>";
	if (typeof(addLink)!="undefined") html+= "<a href='javascript:top.initAddDog("+obj.id+")' title='"+t_add+"' class='thickbox' >"+t_add+"</a>";
	return html;
}

function initAddDog(spotID) {	
	var addLink = page+"dogspot.addDog&s="+spotID+"&keepThis=true&TB_iframe=true&height=410&width=610";
	TB_show("",addLink,false);
}


// SAVING PREFS IN COOKIE 
function setCookie(cookieName,cookieValue,nDays) {
	var today = new Date(); var expire = new Date();
	if (nDays==null || nDays==0) nDays=1;
	expire.setTime(today.getTime() + 3600000*24*nDays);
	document.cookie = cookieName+"="+escape(cookieValue)
				 + ";expires="+expire.toGMTString();
}

function readCookie(cookieName) {
	
	var theCookie=""+document.cookie;
	var ind=theCookie.indexOf(cookieName);
	//alert("reading cookie: ind: "+ind+" "+cookieName+" "+unescape(theCookie.substring(ind+cookieName.length+1,ind1)) );
	if (ind==-1 || cookieName=="") return "";
	var ind1=theCookie.indexOf(';',ind);
	if (ind1==-1) ind1=theCookie.length; 
	
	return unescape(theCookie.substring(ind+cookieName.length+1,ind1));
	
}

