/**************AFHANDELEN MOUSEUPS***************************/
function mouseups()
{
	mousedown_north = false;
	mousedown_south = false;
	mousedown_west = false;
	mousedown_east = false;
	mousedown_center = false;
}

/************************ICONS***********************/
var esites_marker;
function define_esites_icon(map_obj)
{
	var esitesIcon = new GIcon();
	esitesIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
	esitesIcon.iconSize = new GSize(35, 35);
	esitesIcon.image = "http://googlemaps.linux/images/esites.png";
	esitesIcon.shadowSize = new GSize(37, 34);
	esitesIcon.iconAnchor = new GPoint(9, 34);
	esitesIcon.infoWindowAnchor = new GPoint(20, 20);
	esitesIcon.infoShadowAnchor = new GPoint(18, 25);
	esites_marker = new GMarker(new GLatLng(51.59060932855976, 4.7628092765808105), esitesIcon);
	map_obj.addOverlay(esites_marker);
	GEvent.addListener(esites_marker, "click", function() {
    	esites_marker.openInfoWindowHtml("<span style=\"font-family: arial; font-size: 11px; line-height: 18px;\">E-sites / Reduitlaan 33 / 4814 DC / BREDA<br/>Telefoon (076) 8 880 088 / Fax. (076) 8 880 089<br/>Email <a href=\"mailto:info@e-sites.nl\" style=\"color: #FC761C;\">info@e-sites.nl</a> . Internet <a href=\"http://www.e-sites.nl\" onclick=\"this.target='_blank';\" style=\"color: #FC761C;\">http://www.e-sites.nl</a></span>");
  	});

}

function define_icon(image, width, height, zoomable)
{
	var icon = new GIcon();
	icon.zoomable = zoomable;
	if (image == undefined) {
		alert('Er is geen image gedefineerd voor een van de icons');
	} else {
		icon.image = image;
	}
	if (width == undefined) {
		width = 35;
	}
	if (height == undefined) {
		height = 35;
	}
	icon.initial_width = width;
	icon.initial_height = height;
	icon.shadow = "";//http://www.google.com/mapfiles/shadow50.png
	icon.iconSize = new GSize(width, height);
	icon.shadowSize = new GSize(37, 34);
	icon.iconAnchor = new GPoint(10, 10);
	icon.infoWindowAnchor = new GPoint(20, 20);
	icon.infoShadowAnchor = new GPoint(18, 25);
	return icon;
}

function zoom_icons(old_level, new_level)
{
	var zoom_level = new_level;
	if (zoom_level > 19) {
		zoom_level = 19;
	}
	var devider = (19-zoom_level)	* 2;
	if (devider == 0) {
		devider = 1;
	}
	if (global_icons != undefined) {
		for (i=0;i<global_icons.length;i++) {
			//als zoomable
			if (global_icons[i][4] == 'true') {
				//dan zoomen aan de hand van breedte en hoogte
				var width = global_icons[i][2]/devider;
				var height = global_icons[i][3]/devider;
				global_icons[i][0].iconSize = new GSize(width, height);
				global_icons[i][0].iconAnchor = new GPoint(width/2, height/2);
			}
		}
		redraw_markers();
	}
}

function zoom_icon(icon)
{

}

/************************INITIALISEREN*********************/
window.document.body.onmouseup = function() {  mouseups(); }

var mousedown_north = false;
var mousedown_south = false;
var mousedown_west = false;
var mousedown_east = false;
var mousedown_center = false;
var loading_marker = false;
var loading_street = false;
var global_street_coords = new Array();
var loading_street_address = false;
var loaded_marker = false;
var geocoder = new GClientGeocoder();
var global_centre_coord = false;
var global_markers = new Array();
var global_markers_drawn = new Array();
/*******************************************LOAD FUNCTIONS****************************/
function load_centre_coord(address)
{
	geocoder.getLocations(
		address,
		function(centre_coord) {
			if (centre_coord.Status.code != 200) {
				global_centre_coord = 404; //"404 Not Found"
				alert(address + " Adres niet gevonden");
			} else {
				global_centre_coord = new GLatLng(centre_coord.Placemark[0].Point.coordinates[1], centre_coord.Placemark[0].Point.coordinates[0]);
			}
		}
	);
}

function load_streets()
{
	for (i=0;i<global_streets.length;i++) {
		for (j=0;j<global_streets[i].length; j++) {
			loading_street = i;
			loading_street_address = j;
			var replaced = '';
			replaced = str_replace(',','',global_streets[i][j]);
			replaced = str_replace('.','',replaced);
			replaced = str_replace('-','',replaced);
			replaced = str_replace(' ','',replaced);
			if (isNaN(replaced)) {
				load_street_coord(global_streets[i][j], true);
				break;
			} else {
				var splitted = global_streets[loading_street][loading_street_address].split(',');
				if (global_street_coords[loading_street] == undefined) {
					global_street_coords[loading_street] = new Array();
				}
				//window.status += '(='+loading_street+','+loading_street_address+') ';
				global_street_coords[loading_street][loading_street_address] = new GLatLng(splitted[1], splitted[0]);
			}
		}
		if (isNaN(replaced)) {
			break;
		}
	}
}

function load_street_coord(address)
{
	geocoder.getLocations(
		address,
		function(coord) {
			if (global_street_coords[loading_street] == undefined) {
				global_street_coords[loading_street] = new Array();
			}
			if (coord.Status.code != 200) {
				global_street_coords[loading_street][loading_street_address] = 404; //"404 Not Found"
				alert("Een van de straten bevat een niet bestaand adres: "+address);
			} else {
				if (loading_street_address == -1) {
					var vulling = 0;
				} else {
					var vulling = loading_street_address;
				}
				//window.status += '(!!!'+loading_street+','+loading_street_address+') ';
				global_street_coords[loading_street][vulling] = new GLatLng(coord.Placemark[0].Point.coordinates[1], coord.Placemark[0].Point.coordinates[0]);
			}
			if (loading_street_address + 1 == global_streets[loading_street].length) {
				loading_street_address = 0;
				loading_street++;
			} else {
				loading_street_address++;
			}
			if ( (loading_street < global_streets.length) || (global_streets[loading_street] != undefined && loading_street_address  < global_streets[loading_street].length) ) {
				var replaced = '';
				replaced = str_replace(',','',global_streets[loading_street][loading_street_address]);
				replaced = str_replace('.','',replaced);
				replaced = str_replace('-','',replaced);
				replaced = str_replace(' ','',replaced);
				if (isNaN(replaced)) {
					//window.status += '(!!'+loading_street+','+loading_street_address+') ';
					load_street_coord(global_streets[loading_street][loading_street_address]);
				} else {
					var splitted = global_streets[loading_street][loading_street_address].split(',');
					if (global_street_coords[loading_street] == undefined) {
						global_street_coords[loading_street] = new Array();
					}
					//window.status += '(=='+loading_street+','+loading_street_address+') ';
					global_street_coords[loading_street][loading_street_address] = new GLatLng(splitted[1], splitted[0]);
					if (loading_street_address + 1 == global_streets[loading_street].length) {
						loading_street_address = 0;
						loading_street++;
					} else {
						loading_street_address++;
					}
					load_street_coord(global_streets[loading_street][loading_street_address]);
				}
			}
		}
	);
}

function load_markers()
{
	for (i=0;i<global_markers.length && loading_marker == false;i++) {
		var replaced = '';
		replaced = str_replace(',','',global_markers[i][0]);
		replaced = str_replace('.','',replaced);
		replaced = str_replace('-','',replaced);
		replaced = str_replace(' ','',replaced);
		if (isNaN(replaced)) {
			loading_marker = i;
			load_marker_coord(global_markers[i][0]);
			break;
		} else {
			replaced = str_replace(' ','',global_markers[i][0]);
			var splitted = replaced.split(',')
			global_markers[i][0] = new GLatLng(splitted[1], splitted[0]);
		}
	}
}

function load_marker_coord(address)
{
	geocoder.getLocations(
		address,
		function(coord) {
			if (coord.Status.code != 200) {
				global_markers[loading_marker][0] = 404; //"404 Not Found"
				alert("Een van de markers heeft een niet bestaand adres: "+address);
			} else {
				global_markers[loading_marker][0] = new GLatLng(coord.Placemark[0].Point.coordinates[1], coord.Placemark[0].Point.coordinates[0]);
			}
			while (loading_marker+1 < global_markers.length) {
				loading_marker++;
				var replaced = '';
				replaced = str_replace(',','',global_markers[loading_marker][0]);
				replaced = str_replace('.','',replaced);
				replaced = str_replace('-','',replaced);
				replaced = str_replace(' ','',replaced);
				if (isNaN(replaced)) {
					load_marker_coord(global_markers[loading_marker][0]);
					break;
				} else {
					var splitted = global_markers[loading_marker][0].split(',');
					global_markers[loading_marker][0] = new GLatLng(splitted[1], splitted[0]);
				}
			}
		}
	);
}

/********************************DRAW FUNCTIONS******************************/
function draw_street(map_obj, points, color) {
	//alert(points);
	var polyline = new GPolyline(points, color, 10);
	map_obj.addOverlay(polyline);
}

function draw_streets(map_obj, color, zoom_level)
{
	if (global_centre_coord != false && global_centre_coord != 404) {
		map_obj.setCenter(global_centre_coord, 19);
	} else {
		alert('Er is geen centraal adres opgegeven voor de kaart of het adres kan niet worden gevonden, de kaart kan niet getekend worden');
	}
	for (i=0;i<global_street_coords.length;i++) {
		draw_street(map_obj, global_street_coords[i], color);
	}

	draw_map(map_obj, zoom_level)
}

function redraw_markers()
{
	for (i=0;i<global_markers_drawn.length;i++) {
		map.removeOverlay(global_markers_drawn[i]);
		map.addOverlay(global_markers_drawn[i]);
	}
}

function draw_map(map_obj, zoom_level)
{
	if (global_centre_coord != false && global_centre_coord != 404) {
		map_obj.setCenter(global_centre_coord, zoom_level);
	} else {
		alert('Er is geen centraal adres opgegeven voor de kaart of het adres kan niet worden gevonden, de kaart kan niet getekend worden');
	}
	var bounds = new GLatLngBounds();
	//define_esites_icon(map_obj);
	for (i=0;i<global_markers.length;i++) {
		var current_marker = new GMarker(global_markers[i][0], global_markers[i][1]);
		bounds.extend(global_markers[i][0]);
		current_marker.ballon_html = global_markers[i][2];
		global_markers_drawn[global_markers_drawn.length] = current_marker;
		if (global_markers[i][2] != '') {
			GEvent.addListener(current_marker, "click", function() {
				this.openInfoWindowHtml(this.ballon_html);
			});
		}
		map_obj.addOverlay(current_marker);
	}

	map_obj.setZoom(map_obj.getBoundsZoomLevel(bounds)-1);
	map_obj.setCenter(bounds.getCenter());
	document.getElementById('map_loading').style.display = 'none';
}

/*****************BUTTON FUNCTIONS**************************/
function move_north(map_obj)
{
	if (mousedown_north) {
		map_obj.panBy(new GSize(0,100));
		window.setTimeout( function(){ move_north(map_obj); }, 200);
	}
}

function move_south(map_obj)
{
	if (mousedown_south) {
		map_obj.panBy(new GSize(0,-100));
		window.setTimeout( function(){ move_south(map_obj); }, 200);
	}
}

function move_west(map_obj)
{
	if (mousedown_west) {
		map_obj.panBy(new GSize(100,0));
		window.setTimeout( function(){ move_west(map_obj); }, 200);
	}
}

function move_east(map_obj)
{
	if (mousedown_east) {
		map_obj.panBy(new GSize(-100,0));
		window.setTimeout( function(){ move_east(map_obj); }, 200);
	}
}

function move_center(map_obj)
{
	map_obj.panTo(global_centre_coord);
	if (debug) {
		printr = print_r(global_markers);
		var venster = window.open("about:blank", "venster");
		vensterBody = "<pre><font face=Verdana size=1>" + printr;
		venster.document.body.innerHTML = "Print_r:" + vensterBody;
		venster.focus();
	}
}


/********************DEBUG FUNCTIONS*************************/

function clipboard(map_obj)
{
	document.getElementById('holdtext').innerText = map_obj.getCenterLatLng();
	Copied = document.getElementById('holdtext').createTextRange();
	Copied.execCommand("Copy");
	alert('Het gecentreerde punt op de kaart is gekopieerd naar het clipboard, dit punt is nu te gebruiken in de index.php voor bijvoorbeeld een marker of het centrum van de kaart');
}

function str_replace(search, replace, subject) {
    return subject.split(search).join(replace);
}

function print_r(obj, level) {
	var printr = "";
	if(level == undefined) {
		var level = 0;
	}

	for(elem in obj) {

		for(i = 0; i < level; i++) {
			printr += "\t";
		}
		if(level > 10) {
			printr += "[object]";
			return printr;
		}
		if(obj[elem] == "[object Object]" && elem.indexOf("parent") == -1 && elem.indexOf("Parent") == -1) {
			printr += "['" + elem + "'] =\n" + print_r(obj[elem], level + 1) + "\n";
		} else {
			printr += "['" + elem + "'] = " + obj[elem] + "\n";
		}
	}
	return printr;
}
/* AANROEP
				printr = print_r(centre_coord);
				var venster = window.open("about:blank", "venster");
				vensterBody = "<pre><font face=Verdana size=1>" + printr;
				venster.document.body.innerHTML = "Print_r:" + vensterBody;
				venster.focus();
*/