/*
#########################################################
#
# Google maps functions
#
# Copyright:		2010 S-Inside
# Project:			Any website
# Platform:			Javascript
#
#########################################################
*/

var address;
var geocoder;
var gmarkers = [];
var html;
var htmls =[];
var $nCount = 0;
var icon;
var label;
var map;
var marker;
var markers;
var randomnumber;
var side_bar_html = "";
var xml;

function load($p_sSub) {
	if (!$p_sSub) {
		$p_sSub = "";
	}
	if (GBrowserIsCompatible())  {
		var map = new GMap2(document.getElementById("maps"));
		var geocoder = new GClientGeocoder();
		
		//create randomnumber to prevent caching and retrieve xml file
		var randomnumber=Math.floor(Math.random()*11111)
		GDownloadUrl($p_sSub+"js/maps_addresses.xml?random="+randomnumber, function(data, responseCode) {
			//store markers in markers array
			var xml = GXml.parse(data);
			var markers = xml.documentElement.getElementsByTagName("marker");
			
			/*
			// create marker icon, not used here
			var icon = new GIcon();
			icon.image = "http://www.whelp.nl/googlemaps/images/whelp_small.png";
			icon.iconSize = new GSize(24, 23);
			icon.iconAnchor = new GPoint(0, 20);
			icon.infoWindowAnchor = new GPoint(5, 1);
			*/
			
			//loop over the markers array
			for (var i = 0; i < markers.length; i++) {
				var address = markers[i].getAttribute("address");
				var html = GXml.value(markers[i].getElementsByTagName("infowindow")[0]);
        		var label = markers[i].getAttribute("label");
        		
        		if ((markers[i].getAttribute("lat")) && (markers[i].getAttribute("lng"))) {
        			var pointer = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
        			showPoint(map,geocoder,pointer,html,label,icon,address);
    			} else {
        			showAddress(map,geocoder,address,html,label,icon);
    			}
			} //close for loop
			
			}
		); //close GDownloadUrl
		
		//add controls
		map.addControl(new GSmallMapControl());
		
	} //close GBrowserIsCompatible
}

//showAddress, if only address is given
function showAddress(map,geocoder,address,html,label,icon,point) {
	geocoder.getLatLng(address, function(point) {
		if (!point) {
			//alert(address + " niet gevonden");
		} else {
			// alert(address + ": " + point);
			map.setCenter(point, 5);
			var marker = createMarker(point,html+'<br/><br/>'+address,label,icon);
			map.addOverlay(marker);
			map.addControl(new GMapTypeControl());
		}
	});
}

//showPoint, if lat and lng are given, uses given address in HTML baloon
function showPoint(map,geocoder,point,html,label,icon,address) {
	if (point) {
		map.setCenter(point, 5);
		var marker = createMarker(point,html+'<br/><br/>'+address,label,icon);
		map.addOverlay(marker);
		map.addControl(new GMapTypeControl());
	} else {
		return false;
	}
}

//Create marker and set up event window
function createMarker(point,html,label,icon){
	var marker = new GMarker(point,icon);
	// create onclick on marker
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(html);
	});
	// create onmouseover on marker
	GEvent.addListener(marker, "mouseover", function() {
		marker.openInfoWindowHtml(html);
	});
	
	// save the info we need to use later for the side_bar
	gmarkers[$nCount] = marker;
	htmls[$nCount] = html;
	
	// add a line to the side_bar html
	var $sOnMouseOver = ''; // onmouseover="GEvent.trigger(gmarkers['+$nCount+'], \'mouseover\');"
	var $sOnClick = 'onclick="GEvent.trigger(gmarkers['+$nCount+'], \'click\'); return false;"';
	side_bar_html += '<a class="link" href="#" '+$sOnClick+' '+$sOnMouseOver+'>'+label+'</a><br>';
	document.getElementById("side_bar").innerHTML = side_bar_html;
	$nCount++;
	return marker;
}

// convert given string to utf8
// does not work!
function UTF8_encode (string) {
	string = string.replace(/\r\n/g,"\n");
	var utftext = "";

	for (var n = 0; n < string.length; n++) {
		var c = string.charCodeAt(n);
		if (c < 128) {
			utftext += String.fromCharCode(c);
		} else if((c > 127) && (c < 2048)) {
			utftext += String.fromCharCode((c >> 6) | 192);
			utftext += String.fromCharCode((c & 63) | 128);
		} else {
			utftext += String.fromCharCode((c >> 12) | 224);
			utftext += String.fromCharCode(((c >> 6) & 63) | 128);
			utftext += String.fromCharCode((c & 63) | 128);
		}
	}
	return utftext;
}

