// ---------------------------------------------------------------------
// JAVASCRIPT	: Kamper GUI, Google MAP library
// REVISION		: v1.1 9 juni 2008
// ---------------------------------------------------------------------
//

/* EXAMPLE CODE
// Images MAP : /images/
// 3 type of images : 1) icon, icon, schadow, thumbnail img pop-up

var map=null, markManager=null, focusPoint=null;

window.onload = function() {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("googleMap"));
		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
		var rowID = kgui_findID("myHome");
		focusPoint = new GLatLng(DB[rowID].lat, DB[rowID].lng);
		map.setCenter( focusPoint, DB[rowID].zoom );
		kgui_showGroup("dietplus");

		// KGUI, activatie / deactivate when Scanning for LOCATION, on click
		GEvent.addListener(map, "click", function(marker, point) { map.openInfoWindow( point, "lat:"+Math.round(point.y*100000+3)/100000+",lng:"+Math.round(point.x*100000+8)/100000 , {maxWidth:200} );});
	} else alert ( "ERROR : Uw browser wordt niet ondersteund door Google maps!" ) ;
}

// -- HTML Code

<style type="text/css">
<!--
#googleMap {
	height: 480px;
	width: 640px;
	border: 1px solid #FF0000;
}
-->
</style>

<div id="googleMap"></div>


*/

var DBpoly = new Array ({id:"",t:"",desc:"",points:"-",levels:"-",gr:"regio",Polyline:null,listener:null});

var DB = new Array (
{id:"expresszo",t:"Expres-Zo atelier Utrecht",desc:"Zonstraat 134<br>3581MX Utrecht",lat:52.084981,lng:5.135451,gr:"expresszo",tmb:"mark_myHome.png",icon:"mark_myHome.png",shad:"mark_myHomeSchaduw.png",lnk:"www.expres-zo.nl",zoom:15,marker:null,listener:null}
 );
var map=null, markManager=null, focusPoint=null;
var omtrekCirkel=null;
var cookieNo=1; 

function kgui_clickOptie (obj) {
	var lat,lng;

	switch (obj.name) {
		case "mapopties" :
			if (obj.checked) kgui_showGroup(obj.value);
			else kgui_removeGroup(obj.value);
			break;

		default :
			alert ("kgui_clickOptie ("+obj.name+") wordt niet afgehandeld");
			break;
	}
} // kgui_clickOptie()

function kgui_showGroup(vGroep) {	// v1.0
// Toont alle MARKERS van een groep, zie 'gr:' optie.
// indien vGroep = ALL dan wordt alles getoond en niet gekeken naar de  'gr:' optie.
	var len=DB.length, retVal=0;
	if ( vGroep == "ALL" ) { // Zet alles op de map.
		for (var i=0; i<len; i++) kgui_addSymbolToMap(DB[i].id);
		retVal = len;
	} else { // Doorzoek de lijst op specifieke groepen.
		for (var i=0; i<len; i++)
			if ( DB[i].gr.indexOf(vGroep) >=0 ) {
				kgui_addSymbolToMap(DB[i].id);
				retVal++;}}
	return retVal; // Geef terug het aantal object dat op de kaart is gezet.
} // kgui_showGroup()

function kgui_removeGroup(vGroep) {	// v1.0
// Verwijdert een groep 'vGroep' of alle MARKERS van de map.
	var len=DB.length, retVal=0;
	if ( vGroep == "ALL" ) { // Verwijder alles op de map.
		for (var i=0; i<len; i++) {
			if (DB[i].marker!=null) { map.removeOverlay(DB[i].marker); DB[i].marker = null; retVal++; }
			if (DB[i].listener!=null) { GEvent.removeListener(DB[i].listener); DB[i].listener = null; }
		}
	} else // Doorzoek de lijst op specifieke groepen.
		for (var i=0; i<len; i++)
			if ( DB[i].gr.indexOf(vGroep) >=0 ) { 
				if (DB[i].marker!=null) { map.removeOverlay(DB[i].marker); DB[i].marker = null; retVal++; }
				if (DB[i].listener!=null) { GEvent.removeListener(DB[i].listener); DB[i].listener = null; }
			}
	return retVal; // Geef terug het aantal object dat op de kaart is verwijderd.
} // kgui_removeGroup()

function kgui_flipMapOpties(vObjID) {	// v1.0
	if (vObjID.checked) kgui_showGroup(vObjID.value);
	else kgui_removeGroup(vObjID.value);
} // kgui_flipMapOpties()

function kgui_addSymbolToMap(vID) { // v1.0
	var rowID = kgui_findID(vID);

	if (rowID<0) alert("ERROR : kgui_findID("+vID+") niet gevonden!");
	else if (DB[rowID].marker==null) {
		var mark=null;
		var markPoint = new GLatLng(DB[rowID].lat, DB[rowID].lng);
		var markOpt = new Object;
		var markIcon = new GIcon();

		markIcon.image				= "images/"+DB[rowID].icon;
		markIcon.iconSize			= new GSize(34,47);
		markIcon.shadow				= "images/"+DB[rowID].shad;
		markIcon.shadowSize			= new GSize(46,47);
		markIcon.iconAnchor			= new GPoint(22,47);
		markIcon.infoWindowAnchor	= new GPoint(9, 2);
		markIcon.infoShadowAnchor	= new GPoint(18, 25);

		markOpt.title = DB[rowID].t;
		markOpt.clickable = true ;
		markOpt.icon = markIcon ;
		mark = new GMarker( markPoint, markOpt );

		// This is buggy in MSIE 5.5
		DB[rowID].listener = GEvent.addListener ( mark, "click", function() {
			var tmp="";
			if(!DB[rowID].lnk=="") tmp = "Website: <a href=\"javaScript:;\" onClick=\"window.document.location='http:\/\/"+DB[rowID].lnk+"';\">"+kgui_stripDomainName(DB[rowID].lnk)+"</a>";
			if(DB[rowID].tmb=="") tmp = "<div id=\"pt\"><b>"+DB[rowID].t+"</b><br>"+DB[rowID].desc+"<br>"+tmp+"</div>";
			else tmp = "<div id=\"pt\"><table><tr><td valign=\"top\"><img src=\"images/"+DB[rowID].tmb+"\" /></td><td valign=\"top\"><b>"+DB[rowID].t+"</b><br>"+DB[rowID].desc+"</td></tr></table>"+tmp+"</div>";
			// map.openInfoWindowHtml( markPoint, tmp, {maxWidth:200} );
			mark.openInfoWindowHtml( tmp, {maxWidth:200} );
		});

		map.addOverlay(mark); 		// Add to the MAP
		DB[rowID].marker = mark;	// Keep track of all Markers

/* Can Not Get it to Work
		if (markManager==null) // Markmanager definieren NA map.setCenter : r() error
		 markManager = new GMarkerManager ( map,{borderPadding:10, trackMarkers:false} ); // maxZoom:10,

		markManager.addMarker(mark, 16, 10);
		markManager.refresh();
*/
	}
}// kgui_addSymbolToMap()

function kgui_addPolyToMap(vObjID) { // v1.0
	var rowID = kgui_findPolyID(vObjID.value);
	if (rowID<0) alert("ERROR : kgui_findPolyID("+vID+") niet gevonden!");
	else if (DBpoly[rowID].Polyline==null) {	// Nog niet getekend
		var encodedPolyline = new GPolyline.fromEncoded({
			color: "#FF0000",
			weight: 8,
			points: DBpoly[rowID].points,
			levels: DBpoly[rowID].levels,
			zoomFactor: 32,
			numLevels: 4
		});
		map.addOverlay(encodedPolyline);
		DBpoly[rowID].Polyline = encodedPolyline;
	} else {
		map.removeOverlay(DBpoly[rowID].Polyline);
		DBpoly[rowID].Polyline = null;
	}
} // kgui_addPolyToMap()

function kgui_doObjectInfo(vObjID) { // v1.0
	switch (vObjID.value) {
		case "wegvankunst" :
			// if (vObjID.checked) kgui_showGroup("kunst");
			// else kgui_removeGroup("kunst");
			if (vObjID.checked) kgui_showGroup(vObjID.value);
			else kgui_removeGroup(vObjID.value);
			kgui_addPolyToMap(vObjID);	// ON / OFF
			break;
	}
}

function kgui_findID(vID) { // v 1.0
	var len=DB.length, retVal=-1; 
	for (var i=0; i<len; i++) if (DB[i].id==vID) {retVal=i; break;} return retVal;
} // kgui_findID()

function kgui_findPolyID(vID) { // v 1.0
	var len=DBpoly.length, retVal=-1; 
	for (var i=0; i<len; i++) if (DBpoly[i].id==vID) {retVal=i; break;} return retVal;
} // kgui_findPolyID()

function kgui_stripDomainName(vURL){ var i=vURL.indexOf("/"); if(i>0) return vURL.substr(0,i); else return vURL; }

function kgui_drawCircle (vCentre,vRadius) { // v 1.0
	var scale = 0.0000148;			// Omrekenen van meters naar Google coordinaten
	// var centerMap = map.getCenter();
	map.setCenter(focusPoint,15); 		// Reset en zoom zodat cirkel is te zien, uitgaande straal 500m.
	if (omtrekCirkel==null) {		// Declaratie 1-malig = circel mogelijk
		var points = new Array();
		for ( var a=0.0, x=0.0, y=0.0; a < Math.PI*2; a+=(Math.PI/15) ) {
			x = vCentre.x + vRadius * Math.sin(a) * scale;
    		y = vCentre.y + vRadius * Math.cos(a) * scale * 0.611; // 0.611 Correctie geschatte kromming aarde
			points.push (new GLatLng(y,x)); }
		points.push (points[0]) ;	// sluiten cirkel 
		omtrekCirkel = new GPolyline(points, "#FF3333", 3);
		map.addOverlay(omtrekCirkel); }
} // kgui_drawCircle()

function kgui_addHome() { // v 1.0
	var rowID=0;
	var dropListener ;

	if ( kgui_findID("myHome")==-1 ) { 	// 'MyHome' object bestaat nog niet, deze kan aangemaakt worden
		var centerMap = map.getCenter();
		DB.push ({id:"myHome",t:"Hier woon ik",desc:"-",lat:centerMap.lat(),lng:centerMap.lng(),gr:"",tmb:"",icon:"mark_myhome.png",shad:"mark_myhomeschaduw.png",lnk:"",zoom:16,marker:null,listener:null});
		rowID = kgui_findID("myHome");

		var mark=null;
		var markPoint	= new GLatLng(DB[rowID].lat, DB[rowID].lng);
		var markOpt	= new Object;
		var markIcon	= new GIcon();

		markIcon.image			= "images/"+DB[rowID].icon;
		markIcon.shadow			= "images/"+DB[rowID].shad;
		markIcon.iconSize		= new GSize(34,47);
		markIcon.shadowSize		= new GSize(46,47);
		markIcon.iconAnchor		= new GPoint(22,47);
		markIcon.infoWindowAnchor	= new GPoint(9, 2);
		markIcon.infoShadowAnchor	= new GPoint(18, 25);

		markOpt.title		= DB[rowID].t;
		markOpt.clickable	= true ;
		markOpt.draggable	= true ;
		markOpt.dragCrossMove	= false ; 
		markOpt.bouncy		= true ;
		markOpt.icon		= markIcon ;
		mark			= new GMarker( markPoint, markOpt ); // , {clickable:true,draggable:true } );// 

		DB[rowID].listener = GEvent.addListener ( mark, "click", function() {
			var tmp="";
			if(!DB[rowID].lnk=="") tmp = "Website: <a href=\"javaScript:;\" onClick=\"window.document.location='http:\/\/"+DB[rowID].lnk+"';\">"+kgui_stripDomainName(DB[rowID].lnk)+"</a>";
			if(DB[rowID].tmb=="") tmp = "<div id=\"pth\"><b>"+DB[rowID].t+"</b><br>"+DB[rowID].desc+"<br>"+tmp+"</div>";
			else tmp = "<div id=\"pt\"><table><tr><td valign=\"top\"><img src=\"images/"+DB[rowID].tmb+"\" /></td><td valign=\"top\"><b>"+DB[rowID].t+"</b><br>"+DB[rowID].desc+"</td></tr></table>"+tmp+"</div>";
			mark.openInfoWindowHtml( tmp, {maxWidth:200} );
		});

		dropListener = GEvent.addListener ( mark, "dragend", function() {
			DB[rowID].lat = mark.getPoint().lat();
			DB[rowID].lng = mark.getPoint().lng();
			kgui_saveMyHome();
			// mark.openInfoWindowHtml( "myHome <b>lat:</b>"+Math.round(mark.getPoint().lat()*100000+3)/100000+",<b>lng:</b>"+Math.round(mark.getPoint().lng()*100000+8)/100000 , {maxWidth:200} );
		});

		map.addOverlay(mark); 		// Add to the MAP
		DB[rowID].marker = mark;	// Keep track of all Markers
	}
} // kgui_addHome()

function kgui_saveMyHome() { // v 1.0
	var rowID = kgui_findID("myHome"); 
	DB[rowID].t = MM_findObj("naam").value;
// alert (DB[rowID].marker.title);
//	DB[rowID].marker.title = "Hier woont " + MM_findObj("naam").value;
	DB[rowID].desc = MM_findObj("desc").value;
	DB[rowID].lnk = MM_findObj("url").value;
/*	DB[rowID].lat = parseFloat(data_array[1]); break;
	DB[rowID].lng = parseFloat(data_array[1]); break;
	DB[rowID].tmb = data_array[1]; break;
	DB[rowID].icon = data_array[1]; break;
	DB[rowID].shad = data_array[1]; break;
	DB[rowID].zoom = parseInt(data_array[1]); break;
*/
	kgui_writeCookie("kaartDietPlus");

	MM_findObj("initMyHomeTxt").className = "nodisplay" ;
	MM_findObj("initMyHomeData").className = "nodisplay" ;

} // kgui_saveMyHome()

function kgui_saveMyHome() { // v 1.0
	var rowID = kgui_findID("myHome"); 
	DB[rowID].t = MM_findObj("naam").value;
// alert (DB[rowID].marker.title);
//	DB[rowID].marker.title = "Hier woont " + MM_findObj("naam").value;
	DB[rowID].desc = MM_findObj("desc").value;
	DB[rowID].lnk = MM_findObj("url").value;
/*	DB[rowID].lat = parseFloat(data_array[1]); break;
	DB[rowID].lng = parseFloat(data_array[1]); break;
	DB[rowID].tmb = data_array[1]; break;
	DB[rowID].icon = data_array[1]; break;
	DB[rowID].shad = data_array[1]; break;
	DB[rowID].zoom = parseInt(data_array[1]); break;
*/
	kgui_writeCookie("kaartDietPlus");

	MM_findObj("initMyHomeTxt").className = "nodisplay" ;
	MM_findObj("initMyHomeData").className = "nodisplay" ;

} // kgui_saveMyHome()

function kgui_hierWoontKnop() { // v1.0
	var rowID = kgui_findID("myHome"); 
	// Check if myHome is Activated
	if (rowID<0) {
		MM_findObj("initMyHomeTxt").className = "display" ;
		MM_findObj("initMyHomeData").className = "display" ;
	 	kgui_addHome();
	} else { // Bestaat all, EDIT modus
		MM_findObj("initMyHomeData").className = "display" ;
		DB[rowID].marker.enableDragging();

		dropListener = GEvent.addListener ( DB[rowID].marker, "dragend", function() {
			DB[rowID].marker.disableDragging();
			DB[rowID].lat = DB[rowID].marker.getPoint().lat();
			DB[rowID].lng = DB[rowID].marker.getPoint().lng();
			kgui_saveMyHome();
			// mark.openInfoWindowHtml( "myHome <b>lat:</b>"+Math.round(mark.getPoint().lat()*100000+3)/100000+",<b>lng:</b>"+Math.round(mark.getPoint().lng()*100000+8)/100000 , {maxWidth:200} );
		});

	}
} // kgui_hierWoontKnop()

// ---------------------------------------------------------------------
function kgui_readCookie(vCookieName) { // v 1.0
	var cookieData = XMreadCookie(vCookieName);
	var items_array;
	var rowID = kgui_findID("myHome"); 

	if (cookieData!=""){
		items_array = cookieData.split("|");
		for (var i=0; i<items_array.length; i++ ) {
			var data_array = items_array[i].split("=");
			switch ( data_array[0] ) {
				case "mhTitle" :	DB[rowID].t = data_array[1]; break;
				case "mhDescr" :	DB[rowID].desc = data_array[1]; break;
				case "mhLat" :		DB[rowID].lat = parseFloat(data_array[1]); break;
				case "mhLng" :		DB[rowID].lng = parseFloat(data_array[1]); break;
				case "mhThumb" :	DB[rowID].tmb = data_array[1]; break;
				case "mhIcon":		DB[rowID].icon = data_array[1]; break;
				case "mhShadow" :	DB[rowID].shad = data_array[1]; break;
				case "mhLink" :		DB[rowID].lnk = data_array[1]; break;
				case "mhZoom" :		DB[rowID].zoom = parseInt(data_array[1]); break;
				case "cookieVersion" : break;
				default:
					alert ( "WARNING 101 : onbekende parameter '"+data_array[0]+"'");
		}} return true;}
	return false;
} // kgui_readCookie()

function kgui_writeCookie(vCookieName) { // v 1.0
	var cookieData="";
	var rowID = kgui_findID("myHome"); 

	cookieData = "cookieVersion="+String(cookieNo)+"|mhTitle="+DB[rowID].t+"|mhDescr="+DB[rowID].desc+"|mhLat="+String(DB[rowID].lat)+"|mhLng="+String(DB[rowID].lng)+"|mhThumb="+DB[rowID].tmb +"|mhIcon=" +DB[rowID].icon+"|mhShadow="+DB[rowID].shad +"|mhLink="+DB[rowID].lnk+"|mhZoom="+String(DB[rowID].zoom);

	XMwriteCookie(vCookieName,cookieData,365);
} // kgui_writeCookie()

