// Copyright 2007 - Michael Uyttersprot / eMich.be
// v0.1b - 07.03.01

var gmlb_width=850;
var gmlb_height=600;
var gmOverlay;
var gmContainer;
var gmMap;
var gmLabel;
var gmMapObject = null;
var gm_zoom;
var gm_mapType;
var gm_close;
var gm_marker = null;

function gmLb_init()
{
	var agt=navigator.userAgent.toLowerCase();
	var is_opera = (agt.indexOf("opera") != -1);
	var is_konq = (agt.indexOf('konqueror') != -1);
	var is_safari = ((agt.indexOf('safari')!=-1)&&(agt.indexOf('mac')!=-1))?true:false;
	var is_khtml = (is_safari || is_konq);
	var is_ie = ((agt.indexOf('msie') != -1)&&(!is_opera)&&(!is_khtml));
	var is_ie7 = ((agt.indexOf('msie') != -1)&&(agt.indexOf('7') != -1)&&(!is_opera)&&(!is_khtml)&&(is_ie));
	var is_ie6 = ((agt.indexOf('msie') != -1)&&(agt.indexOf('6') != -1)&&(!is_opera)&&(!is_khtml)&&(is_ie));
	
	
	
	gmOverlay = document.createElement("div");
	gmOverlay.setAttribute("id","gmlb_overlay");
	
	gmOverlay.style.display="none";
	gmOverlay.style.position=document.all?"absolute":"fixed";
	gmOverlay.style.top="0px";
	gmOverlay.style.left="0px";
	
	gmOverlay.style.width=gmlb_width+"px";
	gmOverlay.style.height=gmlb_height+"px";
	
	gmOverlay.style.width = getFrameWidth();
	gmOverlay.style.height = getFrameHeight();
	
	gmContainer = document.createElement("div");
	gmContainer.setAttribute("id","gmlb_container");
	
	gmContainer.style.width=gmlb_width+"px";
	gmContainer.style.position="absolute";
	gmContainer.style.display="inline";
	
	gmLabel = document.createElement("div");
	gmLabel.setAttribute("id","gmlb_label");
	
	gmLabel.setAttribute("class","gmlb_label");
	gmLabel.style.display="block";
	gmLabel.innerHTML="test";
	
	gmClose = document.createElement("div");
	gmClose.setAttribute("id","gmlb_close");
	
	gmClose.setAttribute("class","gmlb_close");
	gmClose.style.display="block";
	gmClose.onclick=function()
	{
		if(is_ie6)
		{
			$("MyMapList").style.visibility = 'visible';
		}
		
		
		Effect.Fade($(gmOverlay.id), {duration: 1});
		gmLbOnClose();
	};
	
	//Taille de la fenetre ...
	if(getFrameHeight()<(gmlb_height+60)) gmlb_height = getFrameHeight()-60;
	if(getFrameWidth()<(gmlb_width+60)) gmlb_width = getFrameWidth()-60;
	
	gmMap = document.createElement("div");
	gmMap.setAttribute("id","gmlb_map");
	
	gmMap.style.display="block";
	gmMap.onclick=function()
	{
		return false;
	};
	
	gmInfo = document.createElement("div");
	gmInfo.setAttribute("id","gmlb_info");
	
	gmInfo.style.display="block";
	
	gmContainer.appendChild(gmLabel);
	gmContainer.appendChild(gmClose);
	gmContainer.appendChild(gmMap);
	gmContainer.appendChild(gmInfo);
	
	gmOverlay.appendChild(gmContainer);
	
	document.documentElement.ownerDocument.body.appendChild(gmOverlay);
}


function gm_Update()
{
	if($(gmOverlay.id).style.display!='none')
	{
		//Taille de la fenetre ...
		if(getFrameHeight()<540) gmlb_height = getFrameHeight()-60;
		else gmlb_height = 540;
		if(getFrameWidth()<700) gmlb_width = getFrameWidth()-60;
		else gmlb_width = 640;
		
		$(gmMap.id).style.width=gmlb_width+"px";
		$(gmMap.id).style.height=gmlb_height+"px";
		
		
		if(document.all)
		{
			$(gmOverlay.id).style.top = getScrollHeight()+"px";
			$(gmOverlay.id).style.left = getScrollWidth()+"px";
		}
		
		$(gmOverlay.id).style.width=getFrameWidth()+"px";
		$(gmOverlay.id).style.height=getFrameHeight()+"px";
		
		$(gmContainer.id).style.visibility="hidden";
		
		$("gmlb_overlay").style.display="";
		
		$(gmContainer.id).style.left=((getFrameWidth() - $(gmContainer.id).offsetWidth)/2) + "px";
		$(gmContainer.id).style.top=((getFrameHeight() - $(gmContainer.id).offsetHeight)/2) + "px";
		
		$(gmContainer.id).style.visibility="";
		
		gmLbOnShow();
	}
}


function gm_ShowMap(obj)
{
	if(document.all)
	{
		$(gmOverlay.id).style.top = getScrollHeight()+"px";
		$(gmOverlay.id).style.left = getScrollWidth()+"px";
	}
	
	$(gmOverlay.id).style.width=getFrameWidth()+"px";
	$(gmOverlay.id).style.height=getFrameHeight()+"px";

	if(obj.title)
	{
		$(gmLabel.id).innerHTML=obj.title;
	}
	else
	{
		$(gmLabel.id).innerHTML="Google Map";
	}

	$(gmContainer.id).style.visibility="hidden";
	
	$("gmlb_overlay").style.display="";
	
	$(gmContainer.id).style.left=((getFrameWidth() - $(gmContainer.id).offsetWidth)/2) + "px";
	$(gmContainer.id).style.top=((getFrameHeight() - $(gmContainer.id).offsetHeight)/2) + "px";
	
	$(gmContainer.id).style.visibility="";
	
	var params = parseGmapLink(obj.getAttribute("gmap"));
	
	gm_setMap(params);
	
	gmLbOnShow();
}


function gmLbOnShow()
{
	;
}


function gmLbOnClose()
{
	;
}


function getFrameWidth()
{
	if (self.innerWidth)
	{
		return self.innerWidth;
	}
	else if (document.documentElement && document.documentElement.clientWidth)
	{
		return document.documentElement.clientWidth;
	}
	else if (document.body)
	{
		return document.body.clientWidth;
	}
	
	else return;
}


function getFrameHeight()
{
	if (self.innerWidth)
	{
		return self.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientWidth)
	{
		return document.documentElement.clientHeight;
	}
	else if (document.body)
	{
		return document.body.clientHeight;
	}
	
	else return;
}


function getScrollWidth()
{
	var w = window.pageXOffset ||
	document.body.scrollLeft ||
	document.documentElement.scrollLeft;
	
	return w ? w : 0;
}


function getScrollHeight()
{
	var h = window.pageYOffset ||
	document.body.scrollTop ||
	document.documentElement.scrollTop;
	
	return h ? h : 0;
}


function gm_setMap(params)
{
	if(GBrowserIsCompatible())
	{
		if(!gmMapObject)
		{
			gmMapObject = new GMap2($(gmMap.id));
			gmMapObject.addControl(new GLargeMapControl());
			gmMapObject.addControl(new GMapTypeControl());
		}
		
		gm_mapType = G_NORMAL_MAP;
		gm_zoom = 10;
		
		/***/
		
		if(params["t"]=="k")
		{
			gm_mapType = G_SATELLITE_MAP;
			gm_zoom = parseInt(params["z"]);
		}
		else if(params["t"]=="" || params["t"]==null)
		{
			gm_mapType = G_NORMAL_MAP;
			gm_zoom = parseInt(params["z"]);
		}
		else if(params["t"]=="h")
		{
			gm_mapType = G_HYBRID_MAP;
			gm_zoom = parseInt(params["z"]);
		}
		
		/***/
		
		if(params["lat"]==null && params["long"]==null && params["q"]!=null && params["q"].indexOf("http://")==-1)
		{
			var geocoder = new GClientGeocoder();
			
			geocoder.getLatLng
			(
				unescape(params["q"].replace(/\+/g,  " ")),
				function(point)
				{
					gmMapObject.setCenter(point, gm_zoom, gm_mapType);
					gm_addMarker(point);
				}
			);
		}
		else if(params["q"]!=null && params["q"].indexOf('http://')!=-1)
		{
			//alert(params["q"]);
			//var geoxml = new GGeoXml(params["q"]);
			//var geoxml = new GGeoXml("http://www.emich.be/fr/kml");
			//gm_addXMLMarker(geoxml);
		}
		else
		{
			var point = new GLatLng(params["lat"], params["long"]);
			
			gmMapObject.setCenter(point, gm_zoom, gm_mapType);
			gm_addMarker(point);
		}
		
		
		if(params["op"] != '')
		{
			var charge_url = site_url + "ajax/maps.ajx.php?op=" + params["op"];
			new Ajax.Updater('gmlb_info', charge_url);
		}
	}
}


function gm_addMarker(point)
{
	var icon = new GIcon();
	icon.shadow = site_url + "elmts/shadow.png";
	icon.image = site_url + "elmts/picto_googlemap.gif";
	icon.iconSize = new GSize(20, 30);
	icon.shadowSize = new GSize(37, 30);
	icon.iconAnchor = new GPoint(10, 30);
	//icon.infoWindowAnchor = new GPoint(10, 2);
	//icon.infoShadowAnchor = new GPoint(18, 25);
	
	if(gm_marker!=null){gmMapObject.removeOverlay(gm_marker);}
	
	gm_marker = new GMarker(point, icon);
	GEvent.addListener(gm_marker, "click", function()
	{
		gm_marker.openInfoWindowHtml("");
	});
	
	gmMapObject.addOverlay(gm_marker);
}


function gm_addXMLMarker(geoxml)
{
	if(gm_marker!=null){gmMapObject.removeOverlay(gm_marker);}
	gm_marker = geoxml;
	gmMapObject.addOverlay(gm_marker);
}


function parseGmapLink(url)
{
	var parts = url.split("?");
	
	if(parts.length < 2)
	{
		return new Array();
	}
	
	var params = parts[1].split("&");
	var gMapParams = new Array();
	
	for(i = 0 ; i < params.length ; i++)
	{
		keyValue=params[i].split("=");
		
		if(keyValue[0]!="ll" && keyValue[0]!="sll")
		{
			gMapParams[keyValue[0]]=keyValue[1];
		}
		else
		{
			var latlong=keyValue[1].split(",");
			gMapParams["lat"]=latlong[0];
			gMapParams["long"]=latlong[1];
		}
	}
	
	return gMapParams;
}


function showAddress(address)
{
	var geocoder = new GClientGeocoder();
	
	geocoder.getLatLng
	(
		address,
		function(point)
		{
			if (!point)
			{
				alert(address + " not found");
			}
			else
			{
				gmSetCenter(point);
			}
		}
	);
}


function gmSetCenter(point)
{
	alert(point);
	document["gmCenter"]=point;
}


function gmLbAddLoadEvent(func)
{
	var oldonload = window.onload;
	if (typeof window.onload != 'function')
	{
		window.onload = func;
	}
	else
	{
		window.onload = function()
		{
			oldonload();
			func();
		}
	}
}


function gmLbAddResizeEvent(func)
{
	var oldonresize = window.onresize;
	if (typeof window.onresize != 'function')
	{
		window.onresize = func;
	}
	else
	{
		window.onresize = function()
		{
			oldonresize();
			func();
		}
	}
}


function gmLbAddScrollEvent(func)
{
	var oldonscroll = window.onscroll;
	if (typeof window.onscroll != 'function')
	{
		window.onscroll = func;
	}
	else
	{
		window.onscroll = function()
		{
			oldonscroll();
			func();
		}
	}
}


function gmLbAddLoadEvent(func)
{
	var oldonload = window.onload;
	if (typeof window.onload != 'function')
	{
		window.onload = func;
	}
	else
	{
		window.onload = function()
		{
			oldonload();
			func();
		}
	}
}


function gmLbAddClickEvent(obj,func)
{
	var oldonclick = obj.onclick;
	if (typeof obj.onclick != 'function')
	{
		obj.onclick = func;
	}
	else
	{
		obj.onclick = function()
		{
			oldonclick();
			func();
		}
	}
}

/*
gmLbAddLoadEvent(gmLb_init);
gmLbAddResizeEvent(gm_Update);
gmLbAddScrollEvent(gm_Update);
*/