var map = null;
var geocoder = null;
var host;

var com_map;

var httpObject;

function initialize() {
	
	httpObject = getHTTPObject();
	
	if (httpObject != null) {

		httpObject.open("GET", "modules/map/server/responder/offices.php?instance="+document.getElementById('instance').value, true);
		
		httpObject.onreadystatechange = stateChanged;
		
		httpObject.send(null);
	
	}
  
}


function getHTTPObject() {

	if (window.ActiveXObject) {
	
		return new ActiveXObject("Microsoft.XMLHTTP");
	
	} else if (window.XMLHttpRequest) {
	
		http_request = new XMLHttpRequest();
		
		if(http_request.overrideMimeType) {
          
			http_request.overrideMimeType('text/xml');
        
		}

		return http_request;
	
	} else {
	
		alert("Your browser does not support AJAX.");
	
		return null;
	
	}

}

var xmlDoc;

function stateChanged() {

	if(httpObject.readyState == 4){
	
		xmlDoc = httpObject.responseXML.documentElement;
	
		map_initialize();
	
	}

}

function map_initialize() {
	
	com_map = document.getElementById('com_map');	
	
	if(GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map_canvas"));
		geocoder = new GClientGeocoder();
	}


	var bounds = new GLatLngBounds();

	var zoom = xmlDoc.getAttribute('zoom');

	var bottomRight = new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(5,25));
	map.addControl(new GMapTypeControl(), bottomRight);
	var bottomLeft = new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(10,40));
	map.addControl(new GSmallMapControl(), bottomLeft);
	
	//showAddress(center, zoom, info);
	

	x = xmlDoc.getElementsByTagName('office');
	
	var openinfo = false;
	
	for(i=0;i<x.length;i++) {
	
		
		lat = x[i].getAttribute('latitude');
		lng = x[i].getAttribute('longitude');
		
		var latlng = new GLatLng(lat, lng);
		
		title = x[i].getAttribute('name');
		
		
		var info;
		
		if(x[i].childNodes[0]) {
			
			info = x[i].childNodes[0].nodeValue;
		
			info = urldecode(info);
		
		} else {
			
			info = title;	
			
		}

		
		if(x.length == 1) {
			
			openinfo = true;
			
		}
		
		map.addOverlay(createMarker(latlng, '<div class="mapinfo">'+info+'</div>', openinfo));
			
		bounds.extend(latlng);	
			
	}
	
	boundsZoom = map.getBoundsZoomLevel(bounds);
	
	if(boundsZoom < zoom) {
		
		zoom = boundsZoom;
			
	}
	
	showAddress(bounds.getCenter(), zoom);
	
}

function createMarker(point, info, openinfo) {
	
	
	
	var marker = new GMarker(point);
	
	if(!openinfo) {

		GEvent.addListener(marker, "click", function() {
		  marker.openInfoWindowHtml(info);
		});	
		
	} else {

		marker.openInfoWindowHtml(info);	
		
	}

	return marker;
}

function showAddress(address, zoom) {

	if(!zoom) {
		
		zoom = 10;	
		
	}
	
	if (geocoder) {
		geocoder.getLatLng(
			address,
			function(point) {
				if (!point) {
					alert(address + " not found");
				} else {
					map.setCenter(point, parseInt(zoom));
				}
			}
		);
	}
}

function getRoute() {
	
	var xe = document.getElementById('targets');
	
	if(xe) {
		
		var x = xe.getElementsByTagName('input');
		
		for(i=0;i<x.length;i++) {
		
			if(x[i].checked == true) {
				
				var target = x[i].value;
				
				break;
				
			}
	
		}

	} else {
		
		target = document.getElementById('target').value;

	}

	var xlocation = com_map.custom.value;

	
	if(xlocation) {

		directionsPanel = document.getElementById("route");
		
		directions = new GDirections(map, directionsPanel);
		
		GEvent.addListener(directions, "error", handleErrors);
	
		node = directionsPanel;
		
		if(node.hasChildNodes()) {
			
			while(node.childNodes.length >= 1 ) {
			
				node.removeChild(node.firstChild);
			
			}
		
		}
		
		
		directions.load("from: "+xlocation+", The Netherlands to: "+target+", The Netherlands");
	
	}

}

function handleErrors(){
  
	alert("Er is geen routbeschrijving gevonden vanaf de opgegeven locatie");
   
}

function urldecode (str) {
    // Decodes URL-encoded string  
    // 
    // version: 911.718
    // discuss at: http://phpjs.org/functions/urldecode
    // +   original by: Philip Peterson
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: AJ
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +      input by: travc
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Lars Fischer
    // +      input by: Ratheous
    // +   improved by: Orlando
    // +      reimplemented by: Brett Zamir (http://brett-zamir.me)
    // %        note 1: info on what encoding functions to use from: http://xkr.us/articles/javascript/encode-compare/
    // %        note 2: Please be aware that this function expects to decode from UTF-8 encoded strings, as found on
    // %        note 2: pages served as UTF-8
    // *     example 1: urldecode('Kevin+van+Zonneveld%21');
    // *     returns 1: 'Kevin van Zonneveld!'
    // *     example 2: urldecode('http%3A%2F%2Fkevin.vanzonneveld.net%2F');
    // *     returns 2: 'http://kevin.vanzonneveld.net/'
    // *     example 3: urldecode('http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a');
    // *     returns 3: 'http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a'
    
    return decodeURIComponent(str).replace(/\+/g, '%20');
}

