/**
* LARGESCALEIMAGE
*/
function SaveImg(element){
	element = document.getElementById(element);
	
	var str = "<div id='inputFieldBOX' class='inputFieldBOX'>";
	str += '<div id="open" onclick="minimize(&#34;inputFieldBOX&#34;,this)" class="minimize"></div>';
	str += "<select  id='size'>"; 
	str += "<option value='4'>A4</option>";
	str += "<option value='3'>A3</option>";	
	str += "<option value='2'>A2</option>";
	str += "<option value='1'>A1</option>";
	str += "<option value='0'>A0</option>";
	str += "</select> @ <input type='text' id='dpi' value='200' size='6'> dpi<p/>";
	str += "<input type='checkbox' id='drawBOUNDS'>draw boundary frame<p/>";
	str += "<h2><span onclick='executeSaveImg()'>[create]</span> ";
	str += "<span onclick='document.getElementById(&#34;inputField&#34;).innerHTML=&#34;&#34;'>[close]</span><h2>";
	str += "</div>";
	
	element.innerHTML = str;	

}

function executeSaveImg() {
	var bounds = map.getBounds();
	var tr = convertPoint(bounds.getNorthEast()); 
	var bl = convertPoint(bounds.getSouthWest()); 
	
	
	var dpi = parseFloat(document.getElementById('dpi').value);
	
	var size =  parseFloat(document.getElementById('size').value);
	
	var height = bl.y - tr.y;
	var width =  tr.x - bl.x; 
	
	var sc;
	if(size == 0) {
		sc = Math.min((118.8/2.54*dpi)/width, (84/2.54*dpi)/height );		
	} else if (size == 1) {
		sc = Math.min((84/2.54*dpi)/width, (59.4/2.54*dpi)/height );
	} else if (size == 2) {
		sc = Math.min((59.4/2.54*dpi)/width, (42/2.54*dpi)/height );		
	} else if (size == 3) {
		sc = Math.min((42/2.54*dpi)/width, (29.7/2.54*dpi)/height );		
	} else if (size == 4) {
		sc = Math.min((29.7/2.54*dpi)/width, (21.0/2.54*dpi)/height );
	}
	
	
	height *= Math.round(sc);
	width *= Math.round(sc);
	if (document.getElementById('drawBOUNDS').checked) { 	
		window.open( "largeScaleMap.php?height=" + height + "&width="+width+"&mapTypSel="+mapTypSel+"&lat1="+ne.lat()+"&lng1="+ne.lng()+"&lat2="+sw.lat()+"&lng2="+sw.lng()  + "&bounds=0");
	} else {
		window.open( "largeScaleMap.php?height=" + height + "&width="+width+"&mapTypSel="+mapTypSel+"&lat1="+ne.lat()+"&lng1="+ne.lng()+"&lat2="+sw.lat()+"&lng2="+sw.lng() );
	}
}

/**
* ADDSAVE
*/
function addSave(mapObjekts) {
	var str;
	var placemark;
	var element = document.getElementById('saveKML');
	if (!element){
		element = document.createElement('div');
		element.id = "saveKML";
		element.style.visibility = "hidden";
		document.body.appendChild(element);
	} 
	element.innerHTML = "";
	for(var i =0; i < mapObjekts.length;i++) {
		try {
			str = mapObjekts[i].toKML();
			placemark = document.createElement('div');
			placemark.setAttribute("KMLText",str);
			element.appendChild(placemark);
		} catch (err) {
			alert(err);
		}
	}
	window.open("login.php?action=addTo");	
}

/**
* Save
*/
function Save(mapObjekts) {
	var str;
	var placemark;
	var element = document.getElementById('saveKML');
	if (!element){
		element = document.createElement('div');
		element.id = "saveKML";
		element.style.visibility = "hidden";
		document.body.appendChild(element);
	} 
	element.innerHTML = "";
	for(var i =0; i < mapObjekts.length;i++) {
		try {
			str = mapObjekts[i].toKML();
			placemark = document.createElement('div');
			placemark.setAttribute("KMLText",str);
			element.appendChild(placemark);
		} catch (err) {
			alert(err);
		}
	}
	window.open("login.php?action=saveTo");	
}


function SaveKML(mapObjekts) {
	var str;
	var placemark;
	
		
	var KMLTxt = '<?xml version="1.0" encoding="UTF-8"?>';
	KMLTxt += '<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2">';
	KMLTxt += '<Document>';
			
	for(var i =0; i < mapObjekts.length;i++) {
		try {
		   KMLTxt += mapObjekts[i].toKML();
		} catch (err) {
			alert(err);s
		}
	}
	 
	KMLTxt += '</Document>';
	KMLTxt += '</kml>';

	window.open("data:application/vnd.google-earth.kml+xml;charset=utf-8,"+KMLTxt);
}


function openMyMaps(mapObjekts) {
	for (var i = mapObjekts.length-1; i >= 0;i--){ // maybe needs rework...
		mapObjekts[i].setMap(null);
		mapObjekts.splice(i,1);
	}	
	mapObjekts = new Array();
	// build in a question to add or to replace...
	var element = document.getElementById('Information');
	if (!element || element.innerHTML == ""){
		loadInformation();
		element = document.getElementById('Information');
	} 
	element.innerHTML = "";
	element = document.getElementById('loadKML');
	if (!element){
		element = document.createElement('div');
		element.id = "loadKML";
		element.style.visibility = "hidden";
		document.body.appendChild(element);
	} 
	element.innerHTML = "";
	window.open("login.php?action=open");	
}

/**
* load From
*/
function loadMyMaps(mapObjekts) {
	
	// build in a question to add or to replace...
	var element = document.getElementById('Information');
	if (!element || element.innerHTML == ""){
		loadInformation();
		element = document.getElementById('Information');
	} 
	element.innerHTML = "";
	element = document.getElementById('loadKML');
	if (!element){
		element = document.createElement('div');
		element.id = "loadKML";
		element.style.visibility = "hidden";
		document.body.appendChild(element);
	} 
	element.innerHTML = "";
	window.open("login.php?action=loadFrom");	
}

function completeLoad() {
	var lat = new Array();  
	var lng = new Array();
	
	var info = document.getElementById('MapDescription');
	var maptitle = info.getAttribute("title");
	
	info = info.getAttribute("description");
	info = info.split("\n");	
	
	var places = document.getElementById('loadKML');
	places = places.childNodes;
	if (places.length != 0){
	for (var i = 0; i < places.length;i++) {
		var xmlDoc;
		if (window.DOMParser) {
			var parser=new DOMParser();
			xmlDoc = parser.parseFromString(places[i].getAttribute("content"),"text/xml");
		} else { // Internet Explorer
			xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
			xmlDoc.async = "false";
			xmlDoc.loadXML(places[i].getAttribute("content"));
		}
		
		var name;
		try{
			name = xmlDoc.getElementsByTagName("name")[0].childNodes[0].nodeValue;
		} catch (err) {
			name = ""; 	
		}
		var Style = xmlDoc.getElementsByTagName("Style");
		// load coordinates
		var coordsStr = xmlDoc.getElementsByTagName("coordinates")[0].childNodes[0].nodeValue;		
		coordsStr = coordsStr.split(" ");
		var coords = new google.maps.MVCArray();
		for (var j =0; j < coordsStr.length;j++) {
			var point = coordsStr[j].split(",");
			coords.push(new google.maps.LatLng(point[1],point[0]));
			lat.push(point[1]);
			lng.push(point[0]);
		}
		// lineStyle
		var LineStyle = Style[0].getElementsByTagName("LineStyle");
		var color, opacity,width, line;
		try {
			color = LineStyle[0].getElementsByTagName("color")[0].childNodes[0].nodeValue;
			opacity = h2d(color.substr(0,2))/255;
			color = "#" +color.substr(6,2)+color.substr(4,2)+color.substr(2,2);
			width = LineStyle[0].getElementsByTagName("width")[0].childNodes[0].nodeValue;
			line = true;
		} catch (err) {
			color = "#000000";
			opacity = 1;
			width = 1;
			line = false;
		}
		// polyStyle
		var polyStyle = Style[0].getElementsByTagName("PolyStyle");
		var polycolor, polyopacity,poly;
		try{
			polycolor = polyStyle[0].getElementsByTagName("color")[0].childNodes[0].nodeValue;
			polyopacity = h2d(polycolor.substr(0,2))/255;
			polycolor = "#" +polycolor.substr(6,2)+polycolor.substr(4,2)+polycolor.substr(2,2);
			poly = true;
		}catch (err) {
			polycolor = "#ffffff";
			polyopacity = .6;
			poly = false;
		}
		
		// extended information load...
		var PlaceInfo =  xmlDoc.getElementsByTagName("ExtendedData");
		PlaceInfo =  xmlDoc.getElementsByTagName("Data");
		var objInfo = new Array();
		for (var j = 0;j < PlaceInfo.length;j++){
			var tempArray = new Array();
			try { 
				try {
					tempArray['title'] = PlaceInfo[j].getElementsByTagName('displayName')[0].childNodes[0].nodeValue;
				} catch (err1) {
					tempArray['title'] = PlaceInfo[j].getAttribute('name'); 
				}
			} catch (err) { 
				tempArray['title'] = "";
			}
			
			try { 
				tempArray['type'] = PlaceInfo[j].getAttribute('name'); 
			} catch (err) { 
				tempArray['type'] = "fixed";
			}
			
			try { 
				var Data = PlaceInfo[j].getElementsByTagName('value')[0].childNodes[0].nodeValue;
				if (tempArray['type']  == "select") {
					var Info = Data.split(":");
					if (Info.length > 1) {
						var opt = Info[1].split(",");
						if (opt.length > 1) {
							tempArray['selected'] = Info[0];
						   tempArray["options"] = new Array();
						   for (var l in opt) {
						   	tempArray["options"].push(opt[l]);
							}
						}
					}
				} else if (tempArray['type']  == "text") {
					var Info = Data.split(":");
					if (Info.length > 1) {
						var opt = Info[1].split(",");
						if (opt.length > 1) {
							tempArray["type"] = "select";
							tempArray['selected'] = Info[0];
							tempArray["options"] = new Array();
							for (var l in opt) {
								tempArray["options"].push(opt[l]);
							}
						} else {
							tempArray["type"] = "text";
							tempArray['selected'] = Info[0];
						}
					}
				} else {
					tempArray['selected'] = Data;
				}
			} catch (err) { 
				tempArray['selected'] = "";
			}
			objInfo.push(tempArray);
		}
		
			
		
		// load adresse ...
		var address = xmlDoc.getElementsByTagName("address");
		try { 
			address = address[0].childNodes[0].nodeValue;
		} catch (err) {	
			address = "";
		}
		
		
		 if ( name.search(/QUADTREE/i) != -1 ) { // maybe general rework ...
		 	 // load coordinates
		 	 var allCoordsStr = xmlDoc.getElementsByTagName("coordinates");
		 	 var allCoords = new google.maps.MVCArray();
		 	 for (var allC = 0; allC < allCoordsStr.length;allC++) {
		 	 	 var coordsStr = allCoordsStr[allC].childNodes[0].nodeValue;		
		 	 	 coordsStr = coordsStr.split(" ");
		 	 	 var coords = new google.maps.MVCArray();
		 	 	 for (var j =0; j < coordsStr.length;j++) {
		 	 	 	 var point = coordsStr[j].split(",");
		 	 	 	 coords.push(new google.maps.LatLng(point[1],point[0]));
		 	 	 	 lat.push(point[1]);
		 	 	 	 lng.push(point[0]);
		 	 	 }
		 	 	 allCoords.push(coords);
		 	 }
		 	 var polyOptions = {
				map: map, 
				paths: allCoords,
				strokeColor: color,
				strokeOpacity: opacity,
				strokeWeight: width,
				fillColor: polycolor,
				fillOpacity: polyopacity
			} 
			var objekt = new google.maps.Polygon(polyOptions);
		 	 objekt.title = name;
		 	 objekt.address = address;
		 	 objekt.Info = objInfo;
		 	 mapObjekts.push(objekt);
		 	 google.maps.event.addListener(objekt,'click',function(event) {
		 	 		 google.maps.event.trigger(map, 'click', event, this);
		 	 		 var objNr;
		 	 		 for (var i = mapObjekts.length-1; i >= 0;i--){ // maybe needs rework...
		 	 		 	 if (mapObjekts[i] == this) { objNr = i }
		 	 		 }
		 	 		 this.ClickAction(objNr);
		 	 });
		} else if (name.search(/polyline/i) != -1 || coords.getLength() > 1 && line && !poly) { // adding a polyline
			var polyOptions = {
				map: map,
				path: coords, 
				strokeColor: color, 
				strokeOpacity: opacity, 
				strokeWeight: width
			}	
			var objekt = new google.maps.Polyline(polyOptions);
			if ( name.search(/DRAWaMAP/i) != -1 ) {
				objekt.title = name;
			} else {
				objekt.title = "DRAWaMAP Polyline";	
			}
			objekt.address = address;
			objekt.Info = objInfo;
			mapObjekts.push(objekt);
			google.maps.event.addListener(objekt,'click',function(event) {
					google.maps.event.trigger(map, 'click', event, this);
					var objNr;
					for (var i = mapObjekts.length-1; i >= 0;i--){ // maybe needs rework...
						if (mapObjekts[i] == this) { objNr = i }
					}
					this.ClickAction(objNr);
			});
		} else if (name.search(/marker/i) != -1){
			// selection marker .... ??
			var polyOptions = {
				map: map, 
				path: coords,
				strokeColor: color,
				strokeOpacity: opacity,
				strokeWeight: width,
				fillColor: polycolor,
				fillOpacity: polyopacity
			} 
			var objekt = new google.maps.Polygon(polyOptions);
			objekt.title = name;
			if ( name.search(/DRAWaMAP/i) == -1 ) {
				objekt.title = "DRAWaMAP Marker";
			} 
			
			if (address == "") {
				var geocoder = new google.maps.Geocoder();
				
				if (geocoder) {
					geocoder.geocode({latLng: coords.getAt(0)}, function(results, status) {
							if (status == google.maps.GeocoderStatus.OK) {
								if (results[0]) {
									objekt.address = results[0].formatted_address;// htmlentities(results[0].formatted_address);
								}
							} else {
								objekt.address = coords.getAt(0).toUrlValue(3);
							}
					});
				}
			} else {
				objekt.address = address;
			}
			objekt.Info = objInfo;
			mapObjekts.push(objekt);
			
			google.maps.event.addListener(objekt,'click',function(event) {
					google.maps.event.trigger(map, 'click', event, this);
					var objNr;
					for (var i = mapObjekts.length-1; i >= 0;i--){ // maybe needs rework...
						if (mapObjekts[i] == this) {objNr = i};
					}
					this.ClickActionMarker(objNr);
			});
		} else if (name.search(/polygon/i) != -1 || coords.getLength() > 1 && line && poly ) { // load polygone			
			var polyOptions = {
				map: map, 
				path: coords,
				strokeColor: color,
				strokeOpacity: opacity,
				strokeWeight: width,
				fillColor: polycolor,
				fillOpacity: polyopacity
			} 
			var objekt = new google.maps.Polygon(polyOptions);
			if ( name.search(/DRAWaMAP/i) != -1 ) {
				objekt.title = name;
			} else {
				objekt.title = "DRAWaMAP Polygone";	
			}
			objekt.address = address;
			objekt.Info = objInfo;
			mapObjekts.push(objekt);
			google.maps.event.addListener(objekt,'click',function(event) {
					google.maps.event.trigger(map, 'click', event, this);
					var objNr;
					for (var i = mapObjekts.length-1; i >= 0;i--){ // maybe needs rework...
						if (mapObjekts[i] == this) {objNr = i};
					}
					this.ClickAction(objNr);
			});
		} else if (coords.getLength() == 1) {
			recreateMarker(null,coords.getAt(0),map);
		} 
	}
	lat.sort();
	lng.sort();
	
	var sw = new  google.maps.LatLng(lat[0], lng[0] );
	var ne =  new google.maps.LatLng(lat[lat.length-1], lng[lng.length-1] );
	
	var Bound = new google.maps.LatLngBounds(sw,ne);
	map.fitBounds(Bound);
	window.mapZoom = map.getZoom();
	} else {
		alert(maptitle +" is empty!");
	}
}

var form;


function ViewToPDF() {

	
	
	
	var parent;
	var str = "";
	
	var input;
	form = document.createElement("FORM");
	document.body.appendChild(form);
	form.action = "../create_pdf.php";
	form.target = "_blank";
	form.method = "POST";
	
	var bounds = map.getBounds();
	var tr = convertPoint(bounds.getNorthEast()); 
	var bl = convertPoint(bounds.getSouthWest()); 
	
	var width =   
	
	input = document.createElement("INPUT");
	input.type = "text";
	input.name = "height";
	input.value = parseFloat(bl.y - tr.y);
	
	form.appendChild(input);
	
	input = document.createElement("INPUT");
	input.type = "text";
	input.name = "width";
	input.value = parseFloat(tr.x - bl.x);
	
	form.appendChild(input);

	
	
	// KACHELDATEN funktioniert leider nicht da keine pro version...
	/* 
var map_canvas = document.getElementById("map_canvas");	
	var img = map_canvas.getElementsByTagName("img");
	var span = map_canvas.getElementsByTagName("span");
	var links = map_canvas.getElementsByTagName("a");
	var patt1=/googleapis/gi;	
	for (var i =0; i < img.length;i++){ 
		if ( img[i].src.search(patt1) != -1){
			parent = img[i].parentNode;

			input = document.createElement("INPUT");
			input.type = "text";
			input.name = "img["+i+"][left]";
			input.value = parseFloat(parent.style.left);
			
			form.appendChild(input);
				
			input = document.createElement("INPUT");
			input.type = "text";
			input.name = "img["+i+"][top]";
			input.value = parseFloat(parent.style.top);
		
			form.appendChild(input);
			
			input = document.createElement("INPUT");
			input.type = "text";
			input.name = "img["+i+"][width]";
			input.value = parseFloat(parent.style.width);
		
			form.appendChild(input);
			
			input = document.createElement("INPUT");
			input.type = "text";
			input.name = "img["+i+"][height]";
			input.value = parseFloat(parent.style.height);
		
			form.appendChild(input);
				
			input = document.createElement("INPUT");
			input.type = "text";
			input.name = "img["+i+"][src]";
			input.value = "" + img[i].src;
				
			form.appendChild(input);
		}	
	}*/

	// alle mapobjects durchgehen...
	
	form.submit();
	
	document.body.removeChild(form);
}



