var icons = new Array();
var g_overlays = new Array();
var activeelements = new Array();
var markers = new Array();
var currentMarker = null;
var mandant = null;
var merk_infos = new Array();

function createMarker(info, icon, ns, debug)
{
	if (!ns) ns = "";
	var latlng = new GLatLng(info.lat,info.lng);
	
	if (g_overlays[ns+info.id])
	{
		return g_overlays[ns+info.id];
		g_overlays[ns+info.id].show();
	}
	else
	{
		g_overlays[ns+info.id] = new GMarker(latlng, {icon:icon});
		map.addOverlay(g_overlays[ns+info.id]);
		return g_overlays[ns+info.id];
	}
}

function removeOverlay(info)
{
	if (g_overlays[info.id]) g_overlays[info.id].hide();
}

function createInfoWindowTab(info, tab, doNotShowImage)
{
	var infoWindowTab = "<div class='bubble_title'>"+info.title+"</b></div>";
	if (info.date) infoWindowTab += "<div class='bubble_date'>"+info.date+"</b></div>";
	infoWindowTab += "<div><div class='bubble_text'>";
	if (info.image && !doNotShowImage)
	{
		if (info.image.split("/").pop().length > 0)
		{
			infoWindowTab += "<img src='"+info.image+"' ";
			if (info.imageWidth) infoWindowTab += 'width="'+info.imageWidth+'" ';
			if (info.imageHeight) infoWindowTab += 'height="'+info.imageHeight+'" ';
			infoWindowTab += "/>";
		}
	}
	if (tab) infoWindowTab += info.text[tab];
	else infoWindowTab += info.text;
	infoWindowTab += "</div><div style='width:100%; clear:both; line-height:0px; font-size:1px; height:0px;'></div></div>";
	return infoWindowTab;
}

function createTabbedInfoWindow(info)
{
	var tabs = new Array();
	var doNotShowImage = false;
	for (k in info.text)
	{
		var tab = createInfoWindowTab(info, k, doNotShowImage);
		doNotShowImage = true;
		//alert(tab);
		tabs.push(new GInfoWindowTab(k, tab));
	}
	return tabs;
}

function createInfoWindow(info)
{
	if (typeof(info.text) == "object") return createTabbedInfoWindow(info);
	else return createInfoWindowTab(info);
}

function createIcon(iconinfo, debug)
{
	if (iconinfo.src)
	{
		var src = iconinfo.src;
		if (src.indexOf("http://") == -1) src = "http://www.connemap.de/v2/"+src;
		if (icons[src]) return icons[src];
		icons[src] = new GIcon(G_DEFAULT_ICON, src);
		with (icons[src])
		{
			printImage = src;
			mozPrintImage = src;
			printShadow = "";
			iconSize = new GSize(iconinfo.width, iconinfo.height);
			iconAnchor = new GPoint(iconinfo.anchorX, iconinfo.anchorY);
			shadow = null;
		}
		return icons[src];
	}
	else
	{
		return G_DEFAULT_ICON;
	}
}

function loadMarker(infos)
{
	map.closeInfoWindow();
}

function geoCallback()
{
	resume();
}

function wait(message)
{
	setMessage(message);
	if (document.getElementById("laden")) document.getElementById("laden").style.display = "";
}

function setMessage(message)
{
	if (document.getElementById("loadmessage"))
	{
		document.getElementById("loadmessage").innerHTML = message;
	}
}
GMarker.prototype.getDefaultBounds = function()
{
	return new GLatLngBounds(this.getLatLng(), this.getLatLng());
}

function resume()
{
	loadingelements--;
	if (loadingelements == 0)
	{
		var bounds = false;
		var countElement = 0;
		while (activeelements.length > 0)
		{
			g_overlay = g_overlays[activeelements.pop()];
			if (g_overlay)
			{
				if (!g_overlay.isHidden())
				{
					tmpbounds = g_overlay.getDefaultBounds();
					ne = tmpbounds.getNorthEast();
					sw = tmpbounds.getSouthWest();
					if (!bounds) bounds = new GLatLngBounds(sw, ne);
					else
					{
						bounds.extend(ne);
						bounds.extend(sw);
					}
					countElement++;
				}
			}
		}
		if (bounds && document.getElementById("laden"))
		{
			if (bounds.getNorthEast() == bounds.getSouthWest()) map.setCenter(bounds.getNorthEast());
			else map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds) - 1);
		}
		if (countElement == 1 && g_overlay && document.getElementById("laden"))
		{
			if (g_overlay.infoWindow) g_overlay.openInfoWindow(g_overlay.infoWindow);
		}
		if (document.getElementById("laden")) document.getElementById("laden").style.display = "none";
	}
}

function togglePoi(info, ns, debug)
{
	if (!ns) ns = "";
	setMessage("Lädt POI");
	if (info.hidden)
	{
		
		removeOverlay(info);
	}
	else
	{
		if (g_overlays[ns+info.id])
		{
			g_overlays[ns+info.id].show();
		}
		else
		{
			var icon = G_DEFAULT_ICON;
			if (info.icon) icon = createIcon(info.icon, debug);
			var marker = createMarker(info, icon, ns, debug);
			if (info.href)
			{
				marker.href=info.href;
				marker.target=info.target;
				marker.windowoptions = info.windowoptions;
				if (!info.target) GEvent.addListener(marker, "click", jumpToUrl);
				else GEvent.addListener(marker, "click", popup);
			}
			
			if (info.title)
			{
				marker.infoWindow = createInfoWindow(info);
				marker.bindInfoWindowTabsHtml(marker.infoWindow);
			}
		}
	}
	resume();
}

function jumpToUrl()
{
	document.location.href=this.href;
}

function popup()
{
	var s_options = "";
	if (this.windowoptions)
	{
		for (i in this.windowoptions)
		{
			s_options += i+"="+this.windowoptions[i]+", ";
		}
		if (s_options.length > 0) s_options = s_options.substr(0,s_options.length - 2);
	}
	window.open(this.href, this.target, s_options);
}

function toggleKml(info, ns)
{
	if (!ns) ns = "";
	if (info.hidden) removeOverlay(info);
	else
	{
		wait("Lädt Themenkarte");
		if (g_overlays[ns+info.id])
		{
			g_overlays[ns+info.id].show();
			resume();
		}
		else
		{
			src = info.src.split("/");
			file = src.pop();
			path = src.join("/");
			day = new Date();
			g_overlays[ns+info.id] = new GGeoXml(path+"/"+escape(file)+"?t="+day.getTime(), geoCallback);
			map.addOverlay(g_overlays[ns+info.id]);
		}
	}
}

function centerAndZoom(info)
{
	var zoom = map.getZoom();
	if (info.zoom) zoom = info.zoom
	map.setCenter(new GLatLng(info.lat, info.lng), zoom);
}

function showLink(response, opt)
{
	if (response)
	{
		var value = response.responseText;
		var obj = document.getElementById(opt.id);
		if (obj && value) obj.innerHTML = value;
	}
}

function saveOverlays(action) {
	// Auslesen der Variable activeelements
	// schreiben der Daten in Tabelle
	var call="content/module/connemap/codebehind/ajax_savess.php";
	if (action=='1') {
		var ids = new Array(); //.join(",");
		for (var i in merk_infos)
		{
			if (!merk_infos[i].hidden) ids.push(i);
		}
		var query = call + "?ids="+ids.join(",")+"&action="+action;
	} else {
			var query = call;
	}
	//alert(query);
	request = new Ajax(query, showLink, { id: "ss_link" });
}

function toggleOverlay(infos, ns, debug)
{
	if (!ns) ns = "";
	loadingelements = infos.length;
	map.closeInfoWindow();
	for (i in infos)
	{
		var info = infos[i];
		activeelements.push(info.id);
		if (info.id)
		{
			merk_infos[info.id] = info;
		}
		if (info.src && info.id) toggleKml(info, ns);
		else if (info.id)
		{
			togglePoi(info, ns, debug);
		}
		else if (info.lat && info.lng) centerAndZoom(info);
	}
}

function toggleit(id, toggleid)
{
	var obj = document.getElementById(id);
	var toggleobj = document.getElementById(toggleid);
	if (obj.style.display == "none")
	{
		if (toggleobj) toggleobj.className = "toggle-show"
		obj.style.visibility = "visible";
		obj.style.display = "block";
	}
	else
	{
		if (toggleobj) toggleobj.className = "toggle-hide"
		obj.style.visibility = "hidden";
		obj.style.display = "none";
	}
}

function userPoi(elem, ma_pid)
{
	mandant = ma_pid;
	if (!elem.selected)
	{
		map.closeInfoWindow();
		elem.src = "content/module/connemap/images/poi_sel.png";
		elem.selected = true;
		
		var icon = createIcon({src:"http://maps.google.de/mapfiles/ms/micons/blue.png",width:32,height:32,anchorX:15,anchorY:31});

		var marker = new GMarker(map.getCenter(), {icon:icon});
		markers.push(marker);
		//map.getDragObject().setDraggableCursor("http://maps.google.de/intl/de_ALL/mapfiles/closedhand.cur");
		currentMarker = marker;
		
		map.addOverlay(currentMarker);
	}
}

function enableScrollWheelZoom(e, id) 
{ 
	if (!e) e = event;
	if (document.all)
	{
		if (!e.fromElement.contains(e.toElement) && !document.getElementById(id).contains(e.toElement)) 
		{ 
			map.enableScrollWheelZoom();
		} 
	}
	else
	{
		map.enableScrollWheelZoom();
	}
}

function disableScrollWheelZoom()
{
	map.disableScrollWheelZoom();
}

function removeLastMarker()
{
	var marker = markers.pop();
	map.removeOverlay(marker);
}

function hideControl(id)
{
	for (var i = 0; i < controls[id].length; i++)
	{
		var obj = document.getElementById(controls[id][i]);
		if (obj) obj.style.display = 'none';
	}
}

function showControl(id)
{
	for (var i = 0; i < controls[id].length; i++)
	{
		var obj = document.getElementById(controls[id][i]);
		if (obj) obj.style.display = '';
	}
}

function removeResult(id, idtotoggle, infos)
{
	var obj = document.getElementById(id);
	if (obj) obj.parentNode.removeChild(obj);
	var obj = document.getElementById(idtotoggle);
	if (obj) obj.parentNode.removeChild(obj);
	if (infos) toggleOverlay(infos);
}
