﻿var map = null;
var geocoder = null;
var marker_list = new Array();
var dist = null;
var Postal_Code = null;
var City_Name = null;
var s_lat = null;
var s_lon = null;


var map_init = 0;

var is_init = 0;



function load() {



if (location.host == 'testtest.server-daten.de') { alert('loaden'); }

// alert(location.host);

try {

	var md = document.getElementById("map");
	if (!md) { return; }

	//var plz = document.getElementById("PLZ").value;

	dist = document.getElementById("searchDistance").value;
	Postal_Code = document.getElementById("sPostal_Code").value;
	City_Name = document.getElementById("sCity_Name").value;
	s_lat = document.getElementById("sLatitude");
	s_lon = document.getElementById("sLongitude");

	if ((s_lat) && (s_lon) && (!isNaN(s_lat.value)) && (!isNaN(s_lon.value)) ) 
		{ s_lat = parseFloat(s_lat.value); s_lon = parseFloat(s_lon.value); }
	else { s_lat = null; s_lon = null; }

	var d = null;

	if (
		((City_Name == 0) & (Number(Postal_Code) > 0) & (Postal_Code.length < 5)) | (Postal_Code == 0 & City_Name == 0)
	)
		{ 
		if (location.host == 'testtest.server-daten.de') { alert('direkt laden'); }



		load_direct(); return; }


	// alert(City_Name);
	// alert(Postal_Code);

	if (isNaN(City_Name) | Number(Postal_Code) > 0) {  
		
		is_init = 1;
		if (Number(Postal_Code) < 1) { Postal_Code = ''; }
		// alert('Prüfung erfolgreich');

		d = (Number(Postal_Code) > 0 ? Postal_Code : '') + ' ' + (isNaN(City_Name) ? City_Name : '');

	      if (GBrowserIsCompatible()) {

		geocoder = new GClientGeocoder();

		// alert(Postal_Code + ': ' + City_Name);

		showAddress(d, Postal_Code, City_Name);


	      }
		 else { alert('Browser nicht kompatibel'); }

	} else  {  /* alert('Keine Daten');  */
		if (location.host == 'testtest.server-daten.de') { alert(City_Name); alert(Postal_Code); }
		return; }

	}



catch(e) { 
	var d = document.getElementById("map");
	var n = document.createTextNode("Wenn Sie eine Darstellung als Karte mit Entfernungsangaben nutzen möchten, " +
		"dann fügen Sie google.com / google.de als vertrauenswürdige Sites hinzu. Damit wird JavaScript von google " +
		"aktiviert und ausgeführt. " +
		"Sie sehen dann einen zu Ihrer Suche passenden Ausschnitt aus maps.google. " + e);

	n = document.createTextNode("Fehler bei der Ausführung der google-Maps: " + e + ". Eventuell wird Ihr Browser nicht von google.maps unterstützt.");

	if (d) { d.appendChild(n); }


}


}



function load_direct() {
	if (GBrowserIsCompatible()) {

//alert('direkt');

if (location.host == 'testtest.server-daten.de') { alert('Nun GeoCoder'); }

       	        geocoder = new GClientGeocoder();

		
		if (marker_list.length < 1) { 
				if (location.host == 'testtest.server-daten.de') { alert('DirektReturn'); }
				return; }
		else {
			var nM = null;

			var i = 0;
			var j = 0;
			
			while(j == 0 && i < marker_list.length) {
				nM = marker_list[i];
				if ((nM) && nM[0] && nM[1] ) { j = 1; }
				else {	i++; }
			}
			if (!nM) { return; }


			j = i;


			var bds = new GLatLngBounds(new GLatLng(nM[1], nM[0]), new GLatLng(nM[1], nM[0]));

			for (i = j; i < marker_list.length; i++) {
				nM = marker_list[i];

				// bds.extend(new GLatLng(nM[1], nM[0]));

				if ((nM) && nM[0] && nM[1]) { bds.extend(new GLatLng(nM[1], nM[0])); }
			}

			map = new GMap2(document.getElementById("map"), G_NORMAL_MAP);

//			if (marker_list.length > 1) {

//			map.setCenter(bds.getCenter(), map.getBoundsZoomLevel(bds));

//alert(marker_list.length);

//			alert(map.getBoundsZoomLevel(bds));

			i = map.getBoundsZoomLevel(bds);

			if (marker_list.length < 3)
				{ map.setCenter(bds.getCenter(), Math.min(i, 6)); }
			else 	{ map.setCenter(bds.getCenter(), Math.min(i, 11)); }



//			map.setCenter(bds.getCenter(), map.getBoundsZoomLevel(bds) - 1 );


/*

			for (i = 0; i < marker_list.length; i++) {
				nM = marker_list[i];

				// alert(minX + ' ' + maxX + ' ' + minY + ' ' + maxY);

				minX = Math.min(nM[0], minX);
				minY = Math.min(nM[1], minY);
				maxX = Math.max(nM[0], maxX);
				maxY = Math.max(nM[1], maxY);
			}
			//alert(minX + ' ' + maxX);

			var v1 = (minX + maxX) / 2.0;
			var v2 = (minY + maxY) / 2.0;

			var point = new GLatLng(v2, v1); 

		        map = new GMap2(document.getElementById("map"), G_NORMAL_MAP);

			map.setCenter(point, 17);


			var bds = map.getBounds();


			if (marker_list.length == 1) { map.setZoom(11); }
			else {

				map.setZoom(map.getBoundsZoomLevel(new GLatLngBounds(new GLatLng(minX, minY), new GLatLng(maxX, maxY))));

				//bds = map.getBounds();

				//while (bds.getSouthWest().lng() > minX || bds.getNorthEast().lng() < maxX || bds.getSouthWest().lat() > minY || bds.getNorthEast().lat() < maxY)
				//{
				//	map.zoomOut();
				//	bds = map.getBounds();
				//}
			}

*/


			map.addControl(new GLargeMapControl()); /* erlaubt Zoom und Wanderung */
			map.addControl(new GMapTypeControl());
			map.addControl(new GScaleControl());
			map.addControl(new GOverviewMapControl());

			map.setMapType(G_NORMAL_MAP);





			sd_create_Marker(null, null, null, null, '', null, null, '', '', 0);

			sd_create_all_Marker(1);

			map_init = 1;




		}




	}



}









function sd_unload_map() {


//	if (GUnload) {	alert(GUnload);  }
	if (map_init < 1) { return; }

	try_GUnload();

}

function try_GUnload() {

	try { GUnload() } catch(e) {} 

}



    function showAddress(address, l_Postal_Code, l_City_Name) {


      if (geocoder) {


//        geocoder.getLatLng(
//          address,
//          function(point) {
//            if (!point) {
//                // alert(address + " not found");
//		if (l_Postal_Code) { 
//			// alert('Zweiter Versuch' + l_Postal_Code);
//			showAddress(l_Postal_Code, null, null); }
//            } else {

		var nM = null;
		nM = marker_list[0];

		// alert(point);

		var i = 0;

		//var bds = new GLatLngBounds(new GLatLng(nM[1], nM[0]), new GLatLng(nM[1], nM[0]));

		//bds.extend(point);

		if ((s_lat) && (s_lon)) {
			// alert(s_lat + ':' + point.x);

			point = new GLatLng(s_lat, s_lon);			

			// if ((Math.abs(s_lon - point.x) > 0.5) || (Math.abs(s_lat - point.y) > 0.5))
			// 	{ point = new GLatLng(s_lat, s_lon); /* alert(point); */ }
		 }


				

		var bds = new GLatLngBounds(point, point);

		for (i = 1; i < marker_list.length; i++) {
			//alert(marker_list.length + ' - ' + i);
			nM = marker_list[i];

			if ((nM) && nM[0] && nM[1]) { bds.extend(new GLatLng(nM[1], nM[0])); }

			// bds.extend(new GLatLng(nM[1], nM[0]));
		}

		map = new GMap2(document.getElementById("map"), G_NORMAL_MAP);

		if (marker_list.length < 2)
			{ map.setCenter(point, 6); }
		else	{ map.setCenter(point, 11); }


		while (!map.getBounds().containsBounds(bds))
			{ map.zoomOut(); }


		//i = map.getBoundsZoomLevel(bds);
		//map.setCenter(point, Math.min(i, 11));


		map.addControl(new GLargeMapControl()); /* erlaubt Zoom und Wanderung */
		map.addControl(new GMapTypeControl());
		map.addControl(new GScaleControl());
		map.addControl(new GOverviewMapControl());
		map.setMapType(G_NORMAL_MAP);

		// alert(point);

		sd_create_Marker(null, null, point, 'Ihr Standort', '', 
			((l_Postal_Code) ? l_Postal_Code : ((Postal_Code) ? Postal_Code : '')), 
			((l_City_Name) ? l_City_Name : ((City_Name) ? City_Name : '')), 
			'', '', 0);

		click_sidebar(0);

		sd_create_all_Marker(1);

//             }
//           }
//         );

       }





	return;


      if (geocoder) {
        geocoder.getLatLng(
          address,
          function(point) {
            if (!point) {
                // alert(address + " not found");
		if (l_Postal_Code) { 
			// alert('Zweiter Versuch' + l_Postal_Code);
			showAddress(l_Postal_Code, null, null); }
            } else {

		var nM = null;
		nM = marker_list[0];

		// alert(point);

		var i = 0;

		//var bds = new GLatLngBounds(new GLatLng(nM[1], nM[0]), new GLatLng(nM[1], nM[0]));

		//bds.extend(point);

		if ((s_lat) && (s_lon)) {
			// alert(s_lat + ':' + point.x);

			if ((Math.abs(s_lon - point.x) > 0.5) || (Math.abs(s_lat - point.y) > 0.5))
				{ point = new GLatLng(s_lat, s_lon); /* alert(point); */ }
		 }


				

		var bds = new GLatLngBounds(point, point);

		for (i = 1; i < marker_list.length; i++) {
			//alert(marker_list.length + ' - ' + i);
			nM = marker_list[i];

			if ((nM) && nM[0] && nM[1]) { bds.extend(new GLatLng(nM[1], nM[0])); }

			// bds.extend(new GLatLng(nM[1], nM[0]));
		}

		map = new GMap2(document.getElementById("map"), G_NORMAL_MAP);

		map.setCenter(point, 11);

		while (!map.getBounds().containsBounds(bds))
			{ map.zoomOut(); }


		//i = map.getBoundsZoomLevel(bds);
		//map.setCenter(point, Math.min(i, 11));


		map.addControl(new GLargeMapControl()); /* erlaubt Zoom und Wanderung */
		map.addControl(new GMapTypeControl());
		map.addControl(new GScaleControl());
		map.addControl(new GOverviewMapControl());
		map.setMapType(G_NORMAL_MAP);

		// alert(point);

		sd_create_Marker(null, null, point, 'Ihr Standort', '', 
			((l_Postal_Code) ? l_Postal_Code : ((Postal_Code) ? Postal_Code : '')), 
			((l_City_Name) ? l_City_Name : ((City_Name) ? City_Name : '')), 
			'', '', 0);

		click_sidebar(0);

		sd_create_all_Marker(1);
            }
          }
        );
      }

	//else { alert('Kein geocoder'); }
    }


function sd_cache_Marker(longitude, latitude, firmenname, strasse, plz, ort, url, mail, pos) {
//	alert('Länge davor: ' + marker_list.length);

//	if (is_init != 1) { return; }

//	alert('sd_cache_Marker');


	if (isNaN(parseFloat(longitude))) { longitude = null; }
	if (isNaN(parseFloat(latitude)))  { latitude  = null; }

	var nM = new Array(longitude, latitude, firmenname.replace(/\&quot;/, '"'), strasse, plz, ort, url, mail);
//	marker_list.push(nM);

	//alert(pos);
	//alert(marker_list.length);
	marker_list[pos] = nM;

	//alert(marker_list.length);




//	alert(marker_list.length);



}

function sd_create_all_Marker(j) {
	var nM = null;


//alert('Nun alle Marker');


//return;

//alert(marker_list.length);


	for (i = 0; i < marker_list.length; i++) {


//		alert('Pos ' + i);
		
		
		nM = marker_list[i];

		if ((nM) && (nM.length > 1) && (nM[0] != null) & (nM[1] != null))
			{
				sd_create_Marker(nM[0], nM[1], null, nM[2], nM[3], nM[4], nM[5], nM[6], nM[7], j);
			}
		j++;

	}
	// Initialisierung erfolgreich
	map_init = 1;
}

function sd_create_Marker(longitude, latitude, point, firmenname, strasse, plz, ort, url, mail, n) {
//	alert('Nun Marker: ' + firmenname);


	if (!firmenname) {

		points[0] = null;
		markers[0] = null;
		counter = 1;
		marker_html[0] = null;
		to_htmls[0] = null;
		from_htmls[0] = null;
		return;
		
	}

	var address = ((strasse) ? strasse + ', ' : '') + plz + ' ' + ort;
	var epoint = null;



//        geocoder.getLatLng(
//          address + ' ',
//          function(mpoint) {

            if (point) { epoint = point; }

//	  } );



	        if (!point) { epoint = new GLatLng( latitude, longitude); } 
		else { epoint = point; }


//	}

//	epoint = new GLatLng( longitude, latitude);

//        if (!point) { point = new GLatLng( longitude, latitude); } 


//	epoint = new GLatLng( latitude, longitude);


	var marker = createMarker(epoint, firmenname, '<div id="gmapmarker" style="white-space: nowrap;"><div ' +
	'class="tx_lumogooglemaps_pi1_infobox"><b>' + firmenname.replace(/&quot;/, '"') + '</b><br />' + 
	((strasse.length > 0) ? strasse : '') + '<br/>' + plz + ' ' + ort + 
	'<br />' +
	((mail.length > 0) ? '<a href="javascript:linkTo_UnCryptMailto(\'' +
		decryptString('mailto:' + mail, 2) + '\');">' + mail + '</a><br />' : '') + 
	((url.length > 0) ? '<a href="' + url + '" target="_blank">' + url + '</a><br />' : '' ) + 
	'</div></div>', n);
	map.addOverlay(marker);
}







// reinkopiert:

var points = [];
var markers = [];
var counter = 0;
var marker_html = [];
var to_htmls = [];
var from_htmls = [];
var map = null;

function createMarker(point, title, html, n) {
if (n >= 0) {
n = -1;
}
var marker = new GMarker(point);

to_htmls[counter] = html;

to_htmls[counter] += '<form class="gmapDir" id="gmapDirTo" style="white-space: nowrap;" action="http://maps.google.com/maps" method="get" target="_blank">';
to_htmls[counter] += '<p class="gmapDirHead" id="gmapDirHeadTo">Wegbeschreibung: <strong>Hierher</strong> - <a href="javascript:fromhere(' + counter + ')">Von hier</a></p>';
to_htmls[counter] += '<p class="gmapDirItem" id="gmapDirItemTo"><label for="gmapDirSaddr" class="gmapDirLabel" id="gmapDirLabelTo">Start-Adresse:<br /></label><input type="text" size="40" maxlength="40" name="saddr" class="gmapTextBox" id="gmapDirSaddr" value="" onfocus="this.style.backgroundColor = \'#e0e0e0\';" onblur="this.style.backgroundColor = \'#ffffff\';" /></p>';
to_htmls[counter] += '<p class="gmapDirBtns" id="gmapDirBtnsTo"><input value="Wegbeschreibung anzeigen" type="submit" class="gmapDirButton" id="gmapDirButtonTo" /></p>';
to_htmls[counter] += '<input type="hidden" name="daddr" value="' + point.y + ', ' + point.x + '(' + title + ')' + '" /></form>';

from_htmls[counter] = html;

/* */

from_htmls[counter] += '<form class="gmapDir" id="gmapDirFrom" style="white-space: nowrap;" action="http://maps.google.com/maps" method="get" target="_blank">';
from_htmls[counter] += '<p class="gmapDirHead" id="gmapDirHeadFrom">Wegbeschreibung: <a href="javascript:tohere(' + counter + ')">Hierher</a> - <strong>Von hier</strong></p>';
from_htmls[counter] += '<p class="gmapDirItem" id="gmapDirItemFrom"><label for="gmapDirSaddr" class="gmapDirLabel" id="gmapDirLabelFrom">Ziel-Adresse:<br /></label><input type="text" size="40" maxlength="40" name="saddr" class="gmapTextBox" id="gmapDirSaddr" value="" onfocus="this.style.backgroundColor = \'#e0e0e0\';" onblur="this.style.backgroundColor = \'#ffffff\';" /></p>';
from_htmls[counter] += '<p class="gmapDirBtns" id="gmapDirBtnsFrom"><input value="Wegbeschreibung anzeigen" type="submit" class="gmapDirButton" id="gmapDirButtonFrom" /></p>';
from_htmls[counter] += '<input type="hidden" name="daddr" value="' + point.y + ',' + point.x + '(' + title + ')' + '" /></form>';

html = html + '<br /><div id="gmapDirHead" class="gmapDir" style="white-space: nowrap;">Wegbeschreibung: <a href="javascript:tohere(' + counter + ')">Hierher</a> - <a href="javascript:fromhere(' + counter + ')">Von hier</a></div>';

GEvent.addListener(marker, "click", function() { marker.openInfoWindowHtml(html); });
points[counter] = point;
markers[counter] = marker;
marker_html[counter] = html;
counter++;
return marker;
}



function click_sidebar(idx) {
markers[idx].openInfoWindowHtml(marker_html[idx]);
}

function showInfoWindow(idx,html) {
map.centerAtLatLng(points[idx]);
markers[idx].openInfoWindowHtml(html);
}

function tohere(idx) {
markers[idx].openInfoWindowHtml(to_htmls[idx]);
}

function fromhere(idx) {
markers[idx].openInfoWindowHtml(from_htmls[idx]);
}




  // decrypt helper function

function decryptCharcode(n,start,end,offset) {
	n = n + offset;
	if (offset > 0 && n > end)	{
		n = start + (n - end - 1);
	} else if (offset < 0 && n < start)	{
		n = end - (start - n - 1);
	}
	return String.fromCharCode(n);
}
  // decrypt string
function decryptString(enc,offset) {
	var dec = "";
	var len = enc.length;
	for(var i=0; i < len; i++)	{
		var n = enc.charCodeAt(i);
		if (n >= 0x2B && n <= 0x39)	{
			dec += decryptCharcode(n,0x2B,0x3A,offset);	// 0-9 . , - + / :
		} else if (n >= 0x40 && n <= 0x5A)	{
			dec += decryptCharcode(n,0x40,0x5A,offset);	// A-Z @
		} else if (n >= 0x61 && n <= 0x7A)	{
			dec += decryptCharcode(n,0x61,0x7A,offset);	// a-z
		} else {
			dec += enc.charAt(i);
		}
	}
	return dec;
}
  // decrypt spam-protected emails
function linkTo_UnCryptMailto(s)	{
	location.href = decryptString(s,-2);
}


function write_day() {
// 1.6.2007 : 9:35
	var d = new Date();
	document.write(d.getDate() + '.' + (d.getMonth() + 1) + '.' + d.getFullYear() + ' : ' + d.getHours() + ':' + 
		(d.getMinutes() < 10 ? '0' : '') + d.getMinutes());

}

