var map=null;
var markerObjects=null;
var markerArray=null;
var markerCluster=null;
var centerBounds=false;
var infowindow=false;
var init_process=true;

initialize=function()
{
	AjaxRequest("/gmap/v3/region-center-json.php?v=0.1&id="+fn_ss_destination_id+"&typ="+fn_ss_destination_typ+"&sublev="+fn_ss_subreg_level+"&objekt="+fn_ss_objekt, function(data)
	{
		var jsonResponse=JSON.parse(data);
		
		if(jsonResponse.length)
		{
			centerBounds=new google.maps.LatLngBounds();
			centerBounds.extend(new google.maps.LatLng(jsonResponse[0].lat,jsonResponse[0].lon));
			centerBounds.extend(new google.maps.LatLng(jsonResponse[1].lat,jsonResponse[1].lon));
			
			var center = centerBounds.getCenter();
		}
		else
		{
			var center = new google.maps.LatLng(50.941309,6.958122);
		}
		
		var myOptions = {
			zoom: 2,
			center: center,
			//disableDoubleClickZoom: true,
			mapTypeId: google.maps.MapTypeId.ROADMAP
		}
		
		myicon = new google.maps.MarkerImage('/gmap/v3/pin-blue.png');
		
		// Map starten
		map=new google.maps.Map(document.getElementById('mapdiv'), myOptions);
		map.fitBounds(centerBounds);
		
		google.maps.event.addListener(map,"tilesloaded",function()
		{
			init_process=false;
			processbar('hide');
		});
		
		//icon=new google.maps.Icon(G_DEFAULT_ICON);
		//icon.image="/gmap/pin-blue.png";
		//icon.shadow='';
		
		loadMarkerObjects();
		showResizeLink();
		
		infowindow = new google.maps.InfoWindow();
	});
};

jsLoader=function()
{
	var script=document.createElement("script");
	script.src="/gmap/v3/markerclusterer-jsapi-min-v3-r130.js";
	script.type="text/javascript";
	document.getElementsByTagName("head")[0].appendChild(script);
	
	var script=document.createElement("script");
	script.src="/gmap/v3/json2-2010-03-20-min.js";
	script.type="text/javascript";
	document.getElementsByTagName("head")[0].appendChild(script);
};

AjaxRequest=function(url,callback)
{
	var request = window.XMLHttpRequest ?
	    new XMLHttpRequest :
	    new ActiveXObject('Microsoft.XMLHTTP');
	
	request.onreadystatechange = function()
	{
		if (request.readyState == 4)
		{
			request.onreadystatechange = doNothing;
			callback(request.responseText, request.status);
		}
	};
	
	request.open('GET', url, true);
	request.send(null);
};

function doNothing() {}


setMyCenter=function()
{
	map.setCenter(centerBounds.getCenter());
	map.fitBounds(centerBounds);
};

loadMarkerObjects=function()
{
	AjaxRequest("/gmap/v3/data-json-2.php?objekt="+fn_ss_objekt, function(data)
	{
		markerObjects=JSON.parse(data);
		getMarkerFromArea(markerObjects);
	});
};

getMarkerFromArea=function(markerObjects)
{
	var bounds=map.getBounds();
	markers=[];
	
	for(var i in markerObjects)
	{
		if(markerObjects.hasOwnProperty(i))
		{
			var places=markerObjects[i].uks;
			var latlon=new google.maps.LatLng(places[0].lat,places[0].lon);
			//if(bounds.contains(latlon))
			//{
				var tabbed = (markerObjects[i].sum>1) ? true : false;
				
				var markerNum = markers.length;
				var marker=createMarker(latlon,places,tabbed,markerNum);
				markers.push(marker);
			//}
		}
	}
	refreshMap(markers);
};

getMarkerFromAreaExtra=function(markerObjects)
{
	var bounds=map.getBounds();
	markers=[];
	
	for(var i in markerObjects)
	{
		if(markerObjects.hasOwnProperty(i))
		{
			var places=markerObjects[i].uks;
			var latlon=new google.maps.LatLng(places[0].lat,places[0].lon);
			//if(bounds.contains(latlon))
			//{
				var tabbed = (markerObjects[i].sum>1) ? true : false;
				
				var markerNum = markers.length;
				var marker=createMarker(latlon,places,tabbed,markerNum);
				markers.push(marker);
			//}
		}
	}
	return (markers);
};

createMarker=function(latlon,places,tabbed,markerNum)
{
	var marker=new google.maps.Marker({
		position: latlon,
		map: map,
		icon:myicon
	});


	if(!tabbed)
	{
		google.maps.event.addListener(marker,"click",function(){openInfoWindow(latlon,places[0].uid);});
	}
	else
	{
		google.maps.event.addListener(marker,"click",function(){openInfoWindowTabbed(latlon,places[0].uid,places.length,markerNum);});
		google.maps.event.addListener(marker, "ClickTab", function(tab)
		{
			switchTab(places[tab].uid,places.length,tab,markerNum);
		});
	}
	return marker;
};

getInfoWindowTabs=function(placesSum,tabnum,markerNum)
{
	var window_tabs= '<div id="iw_tabs"><table border="0" cellpadding="2" cellspacing="0"><tr>';
	for (var i=0; i<placesSum; i++)
	{
		if (i==tabnum)
		{
			window_tabs+='<td class="EWTabOn" nowrap>' + (i+1) + ' </td>';
		}
		else
		{
			window_tabs+='<td class="EWTabOff" nowrap onclick="google.maps.event.trigger(markers['+markerNum+'],\'ClickTab\','+i+')">' + (i+1) + ' </td>';
		}
	}
	window_tabs += '</tr></table></div>';
	
	return window_tabs;
}

loadInfoWindowContent=function(uid)
{
	AjaxRequest("/gmap/v3/html-content.php?uid="+uid, function(data)
	{
		var jsonResponse=JSON.parse(data);
		
		var window_content='<h5>'+jsonResponse.nam+'</h5>';
		window_content+='<img src="http://img1.ferien-netzwerk.com/bilder/kunden/hauptbilder/mini/'+jsonResponse.bil+'" width="100" height="75" />';
		window_content+='<p>'+jsonResponse.bes+'<br /><a href="/detail/'+jsonResponse.uid+'.html" target="_top">Zur Unterkunft</a></p>';
		
		document.getElementById('iw_inhalt').innerHTML = window_content;
	});
}

switchTab=function(uid,placesSum,tabnum,markerNum)
{
	// Tabs neu schreiben
	var window_tabs=getInfoWindowTabs(placesSum,tabnum,markerNum);
	document.getElementById('iw_tabs').innerHTML = window_tabs;
	
	// Precess-Image anzeigen
	document.getElementById('iw_inhalt').innerHTML = '<div style="margin:30px auto 0 auto;text-align:center;width:150px;"><img style="" src="/gmap/v3/mozilla_giallo.gif" width="32" height="32" class="borderfree" /> Lade Daten...</div>';
	
	// loadInfoWindowContent laden
	loadInfoWindowContent(uid);
	
	// innerHTML neu setzen
}

openInfoWindow=function(point,uid)
{
	// InfoWindow öffnen
	var window_content='<div class="giw" id="iw_div">';
	window_content+='<div id="iw_inhalt">';
	window_content+='<div style="margin:30px auto 0 auto;text-align:center;width:150px;"><img style="" src="/gmap/v3/mozilla_giallo.gif" width="32" height="32" class="borderfree" /> Lade Daten...</div>';
	window_content+='</div>';
	window_content+='</div>';
	
	infowindow.setContent(window_content);
	infowindow.setPosition(point);
	infowindow.open(map);
	
	// loadInfoWindowContent laden
	loadInfoWindowContent(uid);
};

openInfoWindowTabbed=function(point,uid,placesSum,markerNum)
{
	// Tabbed InfoWindow öffnen
	var window_content='<div class="giw" id="iw_div">';
	
	window_content+=getInfoWindowTabs(placesSum,0,markerNum);
	
	window_content+='<div id="iw_inhalt">';
	window_content+='<div style="margin:30px auto 0 auto;text-align:center;width:150px;"><img style="" src="/gmap/v3/mozilla_giallo.gif" width="32" height="32" class="borderfree" /> Lade Daten...</div>';
	window_content+='</div>';
	window_content+='</div>';
	
	infowindow.setContent(window_content);
	infowindow.setPosition(point);
	infowindow.open(map);
	
	// loadInfoWindowContent laden
	loadInfoWindowContent(uid);
};


refreshMap=function(markers)
{
	mc=new MarkerClusterer(map,markers,{maxZoom:13,gridSize:30});
};

ResizeGMap=function(id)
{
	var x=document.getElementById(id);
	if(x.style.height=='150px')
	{
		x.style.height='400px';
		google.maps.event.trigger(map, 'resize');
		map.setZoom(map.getZoom());
		setMyCenter(centerBounds);
		controlText.firstChild.nodeValue='Karte verkleinern';
		
		// BRauche ich hier nicht, da scho alle Marker geladen sind. setMyCenter reicht hier aus.
		//mc.clearMarkers();
		//getMarkerFromArea(markerObjects);
	}
	else
	{
		x.style.height='150px';
		
		controlText.firstChild.nodeValue='Karte vergrößern';
	}
};


showResizeLink=function()
{
	var controlDiv = document.createElement('DIV');
	controlDiv.style.padding = '5px';

	// Set CSS for the control border
	var controlUI = document.createElement('DIV');
	controlUI.style.backgroundColor = 'white';
	controlUI.style.borderStyle = 'solid';
	controlUI.style.borderWidth = '1px';
	controlUI.style.cursor = 'pointer';
	controlUI.style.textAlign = 'center';
	controlUI.title = 'Klicken um die Karte zu vergrößern';
	controlDiv.appendChild(controlUI);
	
	// Set CSS for the control interior
	controlText = document.createElement('A');
	controlText.onclick=function()
	{
		ResizeGMap('mapdiv');
		return true;
	};
	controlText.style.fontFamily = 'Arial,sans-serif';
	controlText.style.fontSize = '12px';
	controlText.style.paddingLeft = '4px';
	controlText.style.paddingRight = '4px';
	controlText.innerHTML = 'Karte vergrößern';
	controlUI.appendChild(controlText);
	
	map.controls[google.maps.ControlPosition.RIGHT].push(controlDiv);
};

processbar=function(action)
{
	if(document.getElementById('process'))
	{
		if(action == 'show')
		{
			document.getElementById('process').style.display = 'inline';
		}
		else if(action == 'hide' && !init_process)
		{
			document.getElementById('process').style.display = 'none';
		}
	}
};

google.load("maps","3",{"other_params":"sensor=false","locale":"de_DE","callback":jsLoader});
google.setOnLoadCallback(initialize);
