var badMarkers=new Array();
var badGmap;
var badGdir;
var badRoutingInfos=new Array();
var badLoadMap=true;
var badLocale='de';
function initMap() {
	if (GBrowserIsCompatible()) {
		Event.observe(window, 'unload', function(e) { Event.stop(e);
			GUnload();
		});
		
		badGmap = new GMap2(document.getElementById("gmap_canvas"));
		
		badGmap.addMapType(G_HYBRID_MAP);
		badGmap.addMapType(G_PHYSICAL_MAP);
		//badGmap.setMapType(G_HYBRID_MAP);
		badGmap.setMapType(G_PHYSICAL_MAP);

		badGmap.addControl(new GLargeMapControl());
		badGmap.addControl(new GMapTypeControl(), new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(5, 5)));
//baddebug('set center '+gmapMarkers[0][0]+" , "+gmapMarkers[0][1]);

		if(gmapCoCenter[0]>0) {
			var point = new GLatLng(gmapCoCenter[0],gmapCoCenter[1]);
		}
		else {
			var point = new GLatLng(gmapMarkers[0][0],gmapMarkers[0][1]);
		}
		var zoom=5;
		if(badGmapZoom) { zoom=badGmapZoom; }
	    badGmap.setCenter(point,zoom);
 
		setGMapMarkers(badGmap);

		if(document.getElementById("route")) {
			badGdir = new GDirections(badGmap, document.getElementById("route"));
			GEvent.addListener(badGdir, "load", gmapOnGDirectionsLoad);
			GEvent.addListener(badGdir, "error", gmapHandleErrors);
			if(badRoutingInfos.length>0) {
				var from=badRoutingInfos[1];
				for(var i=0;i<gmapMarkers.length;i++) {
					if(gmapMarkers[i][2]==badRoutingInfos[3]) {
						from=gmapMarkers[i][0]+', '+gmapMarkers[i][1];
						break;
					}	
				}
				var to=badRoutingInfos[0];
				badStartRouting(to,from,badRoutingInfos[2]);
			}
			//directions.load("from: 500 Memorial Drive, Cambridge, MA to: 4 Yawkey Way, Boston, MA 02215 (Fenway Park)");
		}
		if(bad_showCenterMarker) {
			var centerMarker=new GMarker(point, {draggable:true, zIndex:10000, zIndexProcess : function(marker,b){ return 10000; }});
			badGmap.addOverlay(centerMarker);
		}
	}
	else {
		throw(gmapTxtLang[0]["notcompatible"]);
	}
}
var bubbles=new Array();
function setGMapMarkers(map) {
	var point;
	var html='';
	var customIcon;
	var badMarker;
	
	for(i=0;i<gmapMarkers.length;i++) {

		point=new GLatLng(gmapMarkers[i][0],gmapMarkers[i][1]);

		customIcon = new GIcon(G_DEFAULT_ICON);
		customIcon.zIndexProcess = i;
		customIcon.shadow = gmapHost+"clear.gif";
		var anchorPoint=new GPoint(0,0);
		switch(gmapMarkers[i][3]) {
			case 3:
				customIcon.image = gmapHost+"typo3conf/ext/bad_locations/res/icons/2.png";
				customIcon.iconSize = new GSize(15, 26);
				customIcon.iconAnchor = new GPoint(7, 23);
				customIcon.shadowSize = new GSize(0, 0);
				anchorPoint=new GPoint(1,-24);
				markerOptions = { icon:customIcon, zIndexProcess:putOnTop };
			break;
			case 4:
				customIcon.image = gmapHost+"typo3conf/ext/bad_locations/res/icons/3.png";
				customIcon.iconSize = new GSize(17, 32);
				customIcon.shadowSize = new GSize(0, 0);
				anchorPoint=new GPoint(0,-30);
				customIcon.iconAnchor = new GPoint(8, 29);
				markerOptions = { icon:customIcon, zIndexProcess:putOnTop };
			break;
			case 5:
				customIcon.image = gmapHost+"typo3conf/ext/bad_locations/res/icons/4.png";
				customIcon.iconSize = new GSize(17, 27);
				customIcon.shadowSize = new GSize(0, 0);
				anchorPoint=new GPoint(0,-24);
				customIcon.iconAnchor = new GPoint(8, 24);
				markerOptions = { icon:customIcon, zIndexProcess:putOnTop };
			break;
			case 6:
				customIcon.image = gmapHost+"typo3conf/ext/bad_locations/res/icons/5.png";
				customIcon.iconSize = new GSize(17, 20);
				customIcon.shadowSize = new GSize(0, 0);
				anchorPoint=new GPoint(0.5,-17);
				customIcon.iconAnchor = new GPoint(8, 17);
				markerOptions = { icon:customIcon, zIndexProcess:putOnTop };
			break;
			default:
				customIcon.image = gmapHost+"typo3conf/ext/bad_locations/res/icons/1.png";
				customIcon.iconSize = new GSize(15, 19);
				customIcon.shadowSize = new GSize(0, 0);
				customIcon.iconAnchor = new GPoint(7, 10);
				anchorPoint=new GPoint(0.5,-17);
				markerOptions = { icon:customIcon };
			break;
		}
		
//baddebug('Index '+i+": "+gmapMarkers[i][0]+","+gmapMarkers[i][1]+" / "+gmapMarkers[i][3]);

		// == Create an EBubble ==
		// Parameters
		// ==========
		// 1. map.
		// 2. URL of the background image
		// 3. GSize() specifying the size of that image
		// 4. GSize() specifying the size of the inner area when the contents can be written.
		// 5. GPoint() specifying the offset of top left corner of the inner area from the top left corner of the background image
		// 6. GPoint() specifying the anchor point of the image.
		// ==========
		//bubble = new EBubble(map, gmapHost+"clear.gif", new GSize(182,1), new GSize(182,1), new GPoint(0,0), anchorPoint);
		bubbles[i] = new EBubble(map, gmapHost+"clear.gif", new GSize(182,1), new GSize(182,1), new GPoint(0,0), anchorPoint, true, gmapMarkers[i][2], i);
	  
		html='';
		html+='<table border="0" cellpadding="0" cellspacing="0" class="badGmap0">';
		html+='<tr><td class="badGmap1">&nbsp;</td><td class="badGmap3"><a href="#" onclick="bubbles['+i+'].hide();return false;">&nbsp;</a></td><td class="badGmap2">&nbsp;</td></tr>';
		html+='<tr><td class="badGmap1a">&nbsp;</td><td class="badGmap4"><div><span class="gmTitle">'+gmapMarkers[i][4]+'</span>';
		if(gmapMarkers[i][5]!='') { html+='<span class="gmAdress"><span class="gmData">'+gmapMarkers[i][5]+'</span></span>'; }
		if(gmapMarkers[i][6]!='') { html+='<span class="gmZip"><span class="gmData">'+gmapMarkers[i][6]+" "+gmapMarkers[i][7]+'</span></span>'; }
		if(gmapMarkers[i][8]!='') { html+='<span class="gmPhone">'+gmapTxtLang[0]["phone"]+' <span class="gmData">'+gmapMarkers[i][8]+"</span></span>"; }
		if(gmapMarkers[i][9]!='') { html+='<span class="gmFax">'+gmapTxtLang[0]["fax"]+' <span class="gmData">'+gmapMarkers[i][9]+"</span></span>"; }
		if(!badJobMode && !badSubsMode && !badSubsModeExt) {
			if(gmapMarkers[i][3]==5) {
				html+='<span class="gmCountry">'+gmapMarkers[i][13]+'</span>';
				html+='<div class="spacer">&nbsp;</div>';
				var url=gmapMarkers[i][12].replace(/http:\/\/|https:\/\//,'');
				
				if(gmapMarkers[i][12]!='') { html+='<p class="extLink"><a href="'+gmapMarkers[i][12]+'" target="_blank">'+url+'</a></p>'; }
			}
			else {
				html+='<div class="spacer">&nbsp;</div>';
				if(gmapMarkers[i][10]!='') { html+='<p class="specialLink"><a href="'+gmapMarkers[i][10]+'">'+gmapTxtLang[0]["location"]+'</a></p>'; }
				if(gmapMarkers[i][11]!='') { html+='<p class="specialLink"><a href="'+gmapMarkers[i][11]+'">'+gmapTxtLang[0]["request"]+'</a></p>'; }
			}
		}
		else if(badSubsModeExt) {
			html+='<div class="spacer">&nbsp;</div>';
			if(gmapMarkers[i][10]!='') { html+='<p class="specialLink"><a href="'+gmapMarkers[i][10]+'">'+gmapTxtLang[0]["location"]+'</a></p>'; }
			if(gmapMarkers[i][11]!='') { html+='<p class="specialLink"><a href="'+gmapMarkers[i][11]+'">'+gmapTxtLang[0]["request"]+'</a></p>'; }
		}
		else if(badSubsMode) {
			if(gmapMarkers[i][3]==4) {
				html+='<div class="spacer">&nbsp;</div>';
				if(gmapMarkers[i][10]!='') { html+='<p class="specialLink"><a href="'+gmapMarkers[i][10]+'">'+gmapTxtLang[0]["location"]+'</a></p>'; }
				if(gmapMarkers[i][11]!='') { html+='<p class="specialLink"><a href="'+gmapMarkers[i][11]+'">'+gmapTxtLang[0]["request"]+'</a></p>'; }
			}
			else {
				html+='<span class="gmCountry">'+gmapMarkers[i][13]+'</span>';
				html+='<div class="spacer">&nbsp;</div>';

				if(trim(gmapMarkers[i][12])!='') {
					var url=gmapMarkers[i][12].replace(/http:\/\/|https:\/\//,'');
					html+='<p class="extLink"><a href="'+gmapMarkers[i][12]+'" target="_blank">'+url+'</a></p>';
				}
			}
		}
		else {
			html+='<div class="spacer">&nbsp;</div>';
			html+='<div class="csc-hrline">&nbsp;</div><div class="jobsGmap">';
			for(var k=0;k<badJobs[i].length;k++) {
				html+='<p class="specialLink">'+badJobs[i][k]+'</p>';
			}
			html+='</div>';
		}
		html+='</div></td><td class="badGmap2a">&nbsp;</td></tr>';
		html+='<tr><td class="badGmap5">&nbsp;</td><td class="badGmap6"><div>&nbsp;</div></td><td class="badGmap7">&nbsp;</td></tr>';
		html+='</table>';

		badMarker=createMarker(point,markerOptions,html,i);
		map.addOverlay(badMarker);
	}
}

function createMarker(point,options,html,index) {
	var marker = new GMarker(point,options);
	
	//GEvent.addListener(marker, "click", function() { marker.openInfoWindowHtml(html); });
	GEvent.addListener(marker, "click", function() { bubbles[index].openOnMarker(marker,html); });
	
	return marker; 
}



var badGeocoder = new GClientGeocoder();
var badRouteTo=false;
function badRouting(form) {
	if(badRouteDefault && form.route_field.value==badRouteDefault) {
		return false;
	}
	var uid=form.showUid.value;
	var to='';

	if(uid>0) {
		for(var i=0;i<gmapMarkers.length;i++) {
			if(gmapMarkers[i][2]==uid) {
				to=gmapMarkers[i][0]+', '+gmapMarkers[i][1];
				break;
			}	
		}
	}
	if(to=='') {
		to=form.from.value;
	}
	else {
	}
	var from=form.route_field.value;
	badStartRouting(from,to,badLocale,form);
	
	return false;
}

function badStartRouting(from,to,locale,form) {
	if(locale=='') {
		locale=badLocale;
	}
    badGeocoder.getLatLng(
        from,
        function(point) {
			from=point.lat()+', '+point.lng();
			document.getElementById("route").style.display='block';
			badGdir.load("from: " + from + " to: " + to,{ "locale": locale });
		}
	);
	return true;
}

function putOnTop(marker,b) {
    return 1;
}


function gmapHandleErrors(){
   if (badGdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
	 alert(gmapTxtLang[0]["notfound"]+"\nError code: " + badGdir.getStatus().code);
   else if (badGdir.getStatus().code == G_GEO_SERVER_ERROR)
	 alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + badGdir.getStatus().code);
   
   else if (badGdir.getStatus().code == G_GEO_MISSING_QUERY)
	 alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + badGdir.getStatus().code);

//   else if (badGdir.getStatus().code == G_UNAVAILABLE_ADDRESS)  <--- Doc bug... this is either not defined, or Doc is wrong
//     alert("The geocode for the given address or the route for the given directions query cannot be returned due to legal or contractual reasons.\n Error code: " + badGdir.getStatus().code);
	 
   else if (badGdir.getStatus().code == G_GEO_BAD_KEY)
	 alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + badGdir.getStatus().code);

   else if (badGdir.getStatus().code == G_GEO_BAD_REQUEST)
	 alert("A directions request could not be successfully parsed.\n Error code: " + badGdir.getStatus().code);
	
   else alert("An unknown error occurred.");
}

function gmapOnGDirectionsLoad(){ 
  // Use this function to access information about the latest load()
  // results.

  // e.g.
  // document.getElementById("getStatus").innerHTML = gdir.getStatus().code;
  // and yada yada yada...
}


function badGetSearchResults(sword,formobj) {
	if(!badCheckSearch(sword)) { return false; }
	var requrl=formobj.url.value;
	var url = "index.php";
	var pars = "eID=tx_badlocations_search&no_cache=1&search="+encodeURI(sword)+"&url="+encodeURI(requrl);
	var myAjax = new Ajax.Request(url, {method: 'get', parameters: pars, onComplete: badGetSearchData});
	return false;
}


function badGetSearchData(request) {
	var xmldoc = request.responseXML;

	if(xmldoc.getElementsByTagName("data")[0].firstChild!=null) { 
		var result = xmldoc.getElementsByTagName("data")[0].firstChild.data;
//document.write(result);
		if(trim(result)!='') {
			showBadSearchResults(result);
/*
			if(!ie) { var arr=$('gmap_canvas').positionedOffset(); }
			else { var arr=new Array( document.getElementById('gmap_canvas').offsetLeft , document.getElementById('gmap_canvas').offsetTop); }

			var layer=document.getElementById('badSearchResultsLayer');
			layer.style.left=(arr[0])+"px";
			layer.style.top=(arr[1])+"px";
			layer.style.display='block';
//alert("show layer");
			var div=document.getElementById('badSearchResults');
			div.style.display='block';

			div.innerHTML = result;
			showBadSearchResults();

			var width=div.offsetWidth;
			var height=div.offsetHeight;
			var mapwidth = document.getElementById('gmap_canvas').offsetWidth;
			var mapheight = document.getElementById('gmap_canvas').offsetHeight;
			var left=parseInt((mapwidth-width)/2);
			var top=parseInt((mapheight-height)/2);	

//alert(arr[0]+" "+left+" - "+arr[1]+" "+top);
			div.style.left=(arr[0]+left)+"px";
			div.style.top=(arr[1]+top)+"px";
//alert("show div");
*/
		}
		return;
	}
	document.badform.submit();
}
var badSearchUrl='';
function showBadSearchResults(result) {
	if(!ie) { var arr=$('gmap_canvas').positionedOffset(); }
	else { var arr=new Array( document.getElementById('gmap_canvas').offsetLeft , document.getElementById('gmap_canvas').offsetTop); }

	var layer=document.getElementById('badSearchResultsLayer');
	layer.style.left=(arr[0])+"px";
	layer.style.top=(arr[1])+"px";
	layer.style.display='block';

	var div=document.getElementById('badSearchResults');
	div.style.display='block';
	if(result) {

//alert(result);
//alert(badSearchUrl);	
		var html='<div class="badSearchResultsClose"><a href="#" onclick="badCloseSearchLayer();return false;">&nbsp;</a></div><div class="spacer">&nbsp;</div><div class="badSearchResultsDiv"><div style="white-space:nowrap">Bitte verfeinern Sie Ihre Auswahl:</div>';
		result=result.split("|");
		for(var i=0;i<result.length;i++) {
//alert(result[i]);
			if(!result[i]) continue;
			var row=result[i].split(";");
			if(row) {
				if(!row[2]) { continue; }
				var tmp='<div class="csc-hrline">&nbsp;</div><div class="badSearchResultsRow"><span class="badSearchResultsCity"><a href="'+badSearchUrl+'?tx_badlocations_pi1[confirmed]=1&tx_badlocations_pi1[input_field]='+row[0]+'&tx_badlocations_pi1[range]='+row[1]+'">'+row[2]+(row.length>3 && row[3]?' (PLZ: '+row[3]+')':'')+'</a></span></div><div class="spacer">&nbsp;</div>';
				html+=tmp;
			}
		}
		html+='<div class="csc-hrline">&nbsp;</div></div>';
//alert(html);		
		div.innerHTML = html;
	}

	var width=div.offsetWidth;
	var height=div.offsetHeight;
	var mapwidth = document.getElementById('gmap_canvas').offsetWidth;
	var mapheight = document.getElementById('gmap_canvas').offsetHeight;
	var left=parseInt((mapwidth-width)/2);
	var top=parseInt((mapheight-height)/2);
	
//alert(arr[0]+" "+left+" - "+arr[1]+" "+top);
	div.style.left=(arr[0]+left)+"px";
	var topPx=(arr[1]+top)
	if( topPx < (0-document.getElementById('gmap_canvas').offsetTop) ) { topPx=0+60; }
	div.style.top=topPx+"px";
}

function badCloseSearchLayer() {
	var layer=document.getElementById('badSearchResultsLayer');
	layer.style.display='none';
	var div=document.getElementById('badSearchResults');
	div.style.display='none';	
}

//Event.observe(document, "dom:loaded", initMap, false);