// Copyright 2007 - Michael Uyttersprot / eMich.be
// v0.1b - 07.03.01

var gmlb_width=600;
var gmlb_height=400;
var gmOverlay;
var gmContainer;
var gmMap;
var gmLabel;
var gmMapObject = null;
var gm_zoom;
var gm_mapType;
var gm_close;
var gm_marker = null;
var directionsPanel;
var directions;
var map;
var polyMap;
var dirStatus = 0;
var startLat;
var startLng;
var sll;
var ell;
var eLat;
var eLng;
var ePoint;
var sStreet;
var sCity;
var gmpolyMap;
var retZip;


function gmLb_init(){
    
	var linksArr=document.getElementsByTagName("a");
	for(i = 0;i<linksArr.length;i++){
		if(linksArr[i].getAttribute("rel")=="gmap"){
			gmLbAddClickEvent(linksArr[i],function(){gm_ShowMap(this);return false;});
		}
	}

	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();
    
    //Rounded Corners ---------------------------------
    cornerT = document.createElement("div");
	cornerT.setAttribute("id","cornerT");
	cornerT.setAttribute("class","cornerT");
    cornerT.style.display="block";
    
    cornerB = document.createElement("div");
	cornerB.setAttribute("id","cornerB");
	cornerB.setAttribute("class","cornerB");
    cornerB.style.display="block";
    
    //End Rounded Corners------------------------------
    
    gmShadow = document.createElement("div");
	gmShadow.setAttribute("id","gmlb_Shadow");
	gmShadow.setAttribute("class","gmlb_Shadow");
	gmShadow.style.width= 620 + "px";
	gmShadow.style.display="inline";
    
    
	gmContainer = document.createElement("div");
	gmContainer.setAttribute("id","gmlb_container");
	gmContainer.style.width=gmlb_width+"px";
	gmContainer.style.display="block";

    directionsPanel = document.createElement("div");
    directionsPanel.setAttribute("id","direction");
    directionsPanel.setAttribute("class","gmlb_directions");
    directionsPanel.style.display="none";
    directionsPanel.style.width = 600 + "px";

	gmLabel = document.createElement("div");
	gmLabel.setAttribute("id","gmlb_label");
	gmLabel.setAttribute("class","gmlb_label");
	gmLabel.innerHTML ="<a href='#' onClick='showhideDirections()'>Show Driving Directions</a>" + "<img src='../images/spacer.gif' width='20' height='1' />" +  "<a href='#' onClick='printMap()'>Print this Map</a>" + "<img src='../images/spacer.gif' width='20' height='1' />" +  "<a href='#' onClick='mapOverview()'>Map Overview</a>";
	gmLabel.style.display="block";

    

	gmClose = document.createElement("div");
	gmClose.setAttribute("id","gmlb_close");
	gmClose.setAttribute("class","gmlb_close");
	gmClose.style.width = 600 + "px";
	gmClose.style.height = 32 + "px";
	gmClose.innerHTML = "Alabama ABC Board";
	gmClose.style.display="block";
	gmClose.onclick=function(){gmOverlay.style.display='none';gmLbOnClose();};


	gmMap = document.createElement("div");
	gmMap.setAttribute("id","gmlb_map");
	gmMap.style.width=gmlb_width+"px";
	gmMap.style.height=gmlb_height+"px";
	gmMap.style.display="block";
	gmMap.style.float="left";
	gmMap.onclick=function(){return false;};
	
	gmpolyMap = document.createElement("div");
	gmpolyMap.setAttribute("id","polyMap");
	gmpolyMap.style.width=gmlb_width+"px";
	gmpolyMap.style.height=gmlb_height+"px";
	gmpolyMap.style.display="none";
	gmpolyMap.style.float="left";
	gmpolyMap.onclick=function(){return false;};
	
	
	gmContainer.appendChild(gmClose);
	gmContainer.appendChild(gmMap);
	gmContainer.appendChild(gmLabel);
	gmContainer.appendChild(directionsPanel);
	
	cornerT.appendChild(gmContainer);
	cornerB.appendChild(cornerT);
	
	gmShadow.appendChild(cornerB);
	gmOverlay.appendChild(gmShadow);
	
	document.documentElement.ownerDocument.body.appendChild(gmOverlay);

}

function getShadow(){
    var height = gmContainer.offsetHeight; 
    var width = gmContainer.offsetWidth;
}

function gm_ShowMap(obj){
	if(document.all){
	
		gmOverlay.style.top = getScrollHeight()+ "px";
		gmOverlay.style.left = getScrollWidth()+ "px";
	}
	gmOverlay.style.width=getFrameWidth()+"px";
	gmOverlay.style.height=getFrameHeight()+ 600 + "px";
    
	gmContainer.style.visibility="hidden";
	document.getElementById("gmlb_overlay").style.display="";
	gmShadow.style.left=((getFrameWidth()-gmShadow.offsetWidth)/2)+"px";
	gmShadow.style.top = 25 + "px"; // Distance from top of browser
	
	gmContainer.style.visibility="";
	var params = parseGmapLink(obj.href);


    //---Simple grab variable from href value
	function getQueryData(variable){
	  var query = obj.href;
      var vars = query.split("&");
      for (var i=0;i<vars.length;i++) {
           var pair = vars[i].split("=");
           if (pair[0] == variable) {
              return pair[1];
           }
       }
     }
    
     storeNo = getQueryData('store');
     phoneNo = getQueryData('P');
     e1 = getQueryData('e1');
     e2 = getQueryData('e2') + ",&nbsp;AL&nbsp;" + getQueryData('e3');
     gmClose.innerHTML = "<span style='font-size:9pt'>" + storeNo + "</span><br>" + e1 + "<br>" + e2 + "<br>" + "(" + phoneNo + ")";
     
     
     startLat = getQueryData('slat');
     startLng = getQueryData('slng');
	 sll = startLat + ',' + startLng;
	 ell = getQueryData('ll');
	 sStreet = getQueryData('street');
	 sCity = getQueryData('city');
	 retZip = getQueryData('retZip');
	//--------------------------------------
	gm_setMap(params);
	gmLbOnShow();
	
	
    if(directions !=null){
        gmMapObject.removeOverlay(directionPoly.getPolyline());
        directions.clear();
    }
    directionsPanel = document.getElementById("direction");
   
    //polyMap = invisible map for driving directions only
    directions = new GDirections(polyMap,directionsPanel);
    directions.load(sll + ' to ' + ell);
    
    //directionPoly = Direction object for retriving ONLY GPolyline
    directionPoly = new GDirections();
    
    GEvent.addListener(directionPoly, "load", handleDirectionsLoad);
    directionPoly.load(sll + ' to ' + ell, {getPolyline:true});


    
 function handleDirectionsLoad()
        {
            gmMapObject.addOverlay(directionPoly.getPolyline());
        }

	/////////////////getShadow()
}

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 printMap(){
//window.open("http://maps.google.com/maps?f=d&hl=en&geocode=&saddr="+startLat+",+"+startLng+"&daddr="+eLat+",+"+eLng+"&ie=UTF8&z=14&om=1&pw=2",'mywindow','width=800,height=700,toolbar=no,location=yes,directories=no,status=yes,menubar=no,scrollbars=yes,copyhistory=no, resizable=yes'); 
   window.open("Print.aspx?&startLat="+startLat+"&startLng="+startLng+"&ll="+ell+"&eLat="+eLat+"&eLng="+eLng+"&e1="+e1+"&e2="+e2+"&street="+sStreet+"&city="+sCity+"&retZip="+retZip,'mywindow','width=825,height=760,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,copyhistory=no, resizable=no');
}

function showhideDirections(){
    if(dirStatus == 0){
	        gmLabel.innerHTML= "<a href='#' onClick='showhideDirections()'>Hide Driving Directions</a>"  + "<img src='../images/spacer.gif' width='20' height='1' />" +  "<a href='#' onClick='printMap()'>Print this Map</a>" + "<img src='../images/spacer.gif' width='20' height='1' />" +  "<a href='#' onClick='mapOverview()'>Map Overview</a>";
	        document.getElementById("direction").style.display='block';
	        dirStatus = dirStatus + 1;
	    }else{
	        gmLabel.innerHTML= "<a href='#' onClick='showhideDirections()'>Show Driving Directions</a>"  + "<img src='../images/spacer.gif' width='20' height='1' />" +  "<a href='#' onClick='printMap()'>Print this Map</a>" + "<img src='../images/spacer.gif' width='20' height='1' />" +  "<a href='#' onClick='mapOverview()'>Map Overview</a>";
	        document.getElementById("direction").style.display='none';
	        dirStatus = dirStatus - 1;
	    }
}

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)
		{
		   polyMap = new GMap2(gmpolyMap);
		   
			gmMapObject = new GMap2(gmMap);
			gmMapObject.addControl(new GSmallMapControl());
			//gmMapObject.addControl(new GMapTypeControl());
			gmMapObject.addControl(new GOverviewMapControl());

      
		}

		gm_mapType=G_NORMAL_MAP;
		gm_zoom=5;
		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"]);
			ePoint = new GLatLng(params["lat"],params["long"]);
			sPoint = new GLatLng(startLat,startLng);
			gmMapObject.setCenter(point, gm_zoom,gm_mapType);
			gm_addMarker(point);
			
		}
	}
}

function gm_addMarker(point){

    // Custom Markers & PolyLine
	var baseIcon = new GIcon();
    baseIcon.image="css/ELoc.png";
    baseIcon.iconSize = new GSize(60, 40); 
    baseIcon.iconAnchor = new GPoint(16, 38); 
    baseIcon.infoWindowAnchor = new GPoint(9, 2); 
    baseIcon.infoShadowAnchor = new GPoint(18, 22); 
    var icon = new GIcon(baseIcon); 
    
    var startIcon = new GIcon();
    startIcon.image="css/sLoc.png";
    startIcon.iconSize = new GSize(55, 59); 
    startIcon.iconAnchor = new GPoint(22, 55); 
    //baseIcon.infoWindowAnchor = new GPoint(9, 2); 
    //baseIcon.infoShadowAnchor = new GPoint(18, 22); 
    var sIcon = new GIcon(startIcon); 
    

	if(gm_marker!=null){gmMapObject.removeOverlay(gm_marker);}
	gm_marker = new GMarker(point, icon);
	gmMapObject.addOverlay(gm_marker);
	
	gm_marker2 = new GMarker(sPoint, sIcon);
	gmMapObject.addOverlay(gm_marker2);	
}

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"){
			gMapParams[keyValue[0]]=keyValue[1];
		}
		else{
			var latlong=keyValue[1].split(",");
			gMapParams["lat"]=latlong[0];
			gMapParams["long"]=latlong[1];
			eLat = gMapParams["lat"];
			eLng = gMapParams["long"];
		}
	}
	return gMapParams;
}

function showAddress(address) {
  var geocoder = new GClientGeocoder();

  geocoder.getLatLng(
    address,
    function(point) {
      if (!point) {
        alert(address + " not found");
      } else {
        gmSetCenter(point);
        
      }
    }
  );
}

//Zoom out to see full directions
function mapOverview(){
   var lngSpan = (parseFloat(startLng) + parseFloat(eLng))/2;
   var latSpan = (parseFloat(startLat) + parseFloat(eLat))/2;
   
   //var comboLat = parseFloat(startLat) + parseFloat(eLat);
   //var comboLng = parseFloat(startLat) + parseFloat(eLng);
   //var zoomLvl = (latSpan + lngSpan);
   //if (zoomLvl < 0){
   //   zoomLvl = zoomLvl * -1;
   // }else{
   //   zoomLvl = zoomLvl * 1;
   //}
   //zoomLvl = Math.floor(zoomLvl);
   //alert(zoomLvl);

 
   gmMapObject.setCenter(new GLatLng(latSpan,lngSpan));
   gmMapObject.setZoom(9);
}

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 gmLbAddClickEvent(obj,func) {
	var oldonclick = obj.onclick;
	if (typeof obj.onclick != 'function') {
		obj.onclick = func;
	}
	else {
		obj.onclick = function() {
			oldonclick();
			func();
			
		}
	}
}

gmLbAddLoadEvent(gmLb_init);