//Created by Kay 17/01/08 to allow for the use of google maps to open in a thickbox.

//Add the event fAddEvent on the window load
fAddEvent(window, "unload", GUnload);
fAddEvent(window, "load", fAttachBodyOnload);

//Create the event which adds an event listener to the window
function fAddEvent(obj, evType, fn){ if(obj.addEventListener){ obj.addEventListener(evType, fn, false); return true; } else if(obj.attachEvent){ var r = obj.attachEvent("on"+evType, fn); return r; } else return false; }
 
var localSearch = new GlocalSearch();
var postcode = "";
var address = "";

function usePointFromPostcode(postcode, callbackFunction) {
	
	localSearch.setSearchCompleteCallback(null, 
		function() {
			
			if (localSearch.results[0])
			{		
				var resultLat = localSearch.results[0].lat;
				var resultLng = localSearch.results[0].lng;
				var point = new GLatLng(resultLat,resultLng);				
				callbackFunction(point, postcode);
			}else{
			    //this must be an address outside uk, use lat and long instead
				alert("Postcode not found!");
			}
		});	
		
	localSearch.execute(postcode + ", UK");
}


function fGetElementsByClassName(clsName) {
	//loop through each element within the document
	var my_array = document.getElementsByTagName("*");
	  
	var retvalue = new Array();
	var i;
	var j;
	for (i=0,j=0;i<my_array.length;i++) {
		//if the classname is equal to the classname your searching for then add the
		//element to the array		
		if (my_array[i].className.indexOf(clsName)!= -1) {	
			retvalue[j++] = my_array[i];
		}
	}
	
	return retvalue;
}

//Code added to add the lightbox - This is the code that is used for the link to the lightbox google map only

// Copyright 2007 - Michael Uyttersprot / eMich.be
// v0.1b - 07.03.01

var gmlb_width=640;
var gmlb_height=480;
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 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.height="100%";
	gmOverlay.style.zindex="100";
	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";

	gmClose = document.createElement("div");
	gmClose.setAttribute("id","gmlb_close");
	gmClose.setAttribute("class","gmlb_close");
	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;};
	
	gmContainer.appendChild(gmMap);
	gmContainer.appendChild(gmLabel);
	gmContainer.appendChild(gmClose);
	gmOverlay.appendChild(gmContainer);
	document.documentElement.ownerDocument.body.appendChild(gmOverlay);
}

function gm_ShowMap(obj){
	//create the address	

	fCreateAddress(obj);
	
	if(document.all){
		gmOverlay.style.top = getScrollHeight()+"px";
		gmOverlay.style.left = getScrollWidth()+"px";
	}
	gmOverlay.style.width=getFrameWidth()+"px";
	//gmOverlay.style.height=getFrameHeight()+"px";
    gmOverlay.style.height = "100%";
	if(obj.title){
		gmLabel.innerHTML=obj.title;
	}
	else{
		gmLabel.innerHTML="Google Map";
	}

	gmContainer.style.visibility="hidden";
	document.getElementById("gmlb_overlay").style.display="";
	gmContainer.style.left=((getFrameWidth()-gmContainer.offsetWidth)/2)+"px";
	gmContainer.style.top=((getFrameHeight()-gmContainer.offsetHeight)/2)+"px";
	gmContainer.style.visibility="";
	var params = parseGmapLink(obj.href);
	
	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);
			gmMapObject.addControl(new GLargeMapControl());
			gmMapObject.addControl(new GMapTypeControl());
		}
		
		if(params["q"]!=null){			
					usePointFromPostcode(postcode, gm_addMarker)	
				
		}else{
			//we are doing an inline map		
			var point = new GLatLng(params["lat"],params["long"]);	
			gm_addMarker(point, "")
		}
	}
}

function gm_addMarker(point, postcode){
    	if(!gmMapObject)
    	{
    		gmMapObject = new GMap2(gmMap);
    		gmMapObject.addControl(new GLargeMapControl());
    		gmMapObject.addControl(new GMapTypeControl());
    	}	
		
    	gmMapObject.setCenter(point, 14, G_NORMAL_MAP);
	if(gm_marker!=null){gmMapObject.removeOverlay(gm_marker);}	
	gm_marker = new GMarker(point);	
	gmMapObject.addOverlay(gm_marker);	
	
	if(address!=""){

		gm_marker.openInfoWindowHtml(address);
	}
}

function fCreateAddress(obj){
    //loop through my parents until you find the element that contains the adr element
	var vCardElem = obj.parentNode;
	var name = "";	
	var uri = "";
	var colAddress = "";
	address="";

	//try to find the vcard element	 
	while (vCardElem.className!="vcard")
	{      
		vCardElem = vCardElem.parentNode;
	}
	if(vCardElem.className.indexOf("vcard")!=-1){
	
		colAddress = vCardElem.getElementsByTagName("*");	
	
		//we should now have all the vcard children nodes, loop through them and get all the bits of the address you want
		for (i=0;i<colAddress.length;i++) {
			if(colAddress[i].className.indexOf("postal-code")!=-1 || colAddress[i].className.indexOf("street-address")!=-1 || colAddress[i].className.indexOf("locality")!=-1){
				if (address==""){
					address = colAddress[i].innerHTML ;
				}else {
					address = address + ", <br/>" + colAddress[i].innerHTML;
				}
			}else if(colAddress[i].className.indexOf("uri")!=-1){
				uri = "<p class=\"maptext\"><a href='" + colAddress[i].innerHTML + "'>" + colAddress[i].innerHTML + "</a></p>"
			}else if(colAddress[i].className.indexOf("fn")!=-1){
				if (colAddress[i].innerHTML.indexOf("strong")!=-1 || colAddress[i].innerHTML.indexOf("b")!=-1){
				    name = colAddress[i].innerHTML				
				}else{
				    name = "<strong>" + colAddress[i].innerHTML + "</strong>"
				}							
			}
		};

		//now populate the whole address to go in the popup
		address = "<p class=\"maptext\">" + name + "<\p>" + "<p class=\"maptext\">" + address + "<\p>" 		
	}
return;
}

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]=="q"){	
			postcode = keyValue[1];
            		gMapParams["postcode"] = postcode;
		}
		
		if(keyValue[0]!="ll"){
			gMapParams[keyValue[0]]=keyValue[1];
		}
		else{
			var latlong=keyValue[1].split(",");
			gMapParams["lat"]=latlong[0];
			gMapParams["long"]=latlong[1];
		}
	}
	return gMapParams;
}

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);


//Added by Kay Rogage 17/01/08 to get the address for the map popup when displaying within a page

function fAttachBodyOnload(){       

        document.body.onload =CreatePopUpText();    
}

function CreatePopUpText(){
 
    var colDivs = fGetElementsByClassName("map_property_info")
    var postalCode = "";
  
    //we only want to do all this if the div map_property_info exists
    if(colDivs.length!=0){
    
        var i;
        var elemDiv;
        
        for(i=0;i<colDivs.length;i++){ 
            //there should only really be one but we'll loop through the collection just for completeness     
            elemDiv = colDivs[i]    
        }
        
        //get the postcode for the long and latitude
        var colAllChildNodes = elemDiv.getElementsByTagName("*");
        for(i=0;i<colAllChildNodes.length;i++){
            if(colAllChildNodes[i].className=="postal-code"){
                postalCode = colAllChildNodes[i].innerHTML;
                
            }
        }
                     
       /* var colAddress = elemDiv.childNodes;
        var elemStart = ""
        var elemFinish = ""
        
        for(i=0;i<colAddress.length;i++){
            var elem = colAddress[i];
            if(elem.innerHTML!=undefined){            
                elemStart = "<" + elem.tagName + " class=\"text\">"; 
                elemFinish = "</" + elem.tagName + ">"; 
                   
                address = address + elemStart + elem.innerHTML + elemFinish;   
            }         
        }*/
       
        postalCode = postalCode.replace(" ", "+");       
        usePointFromPostcode(postalCode, googleMapsInitialize)
      
    }return "";
}

function googleMapsInitialize(point, postalCode){
	 //hide the link and text to navigating to google map website
	    var pMapText = document.getElementById('google_map_link');
	    if (pMapText){
	        pMapText.style.display = "none";
	    }
    
	 //set the height and width of the div container
	    var divMap = document.getElementById('google_map');
	    if(divMap){
	        divMap.style.width = "500px";
	        divMap.style.height = "350px";
	        divMap.style.display = "block";
    		}
    		
		var map = new GMap2(document.getElementById('google_map'));     	 
		map.addControl(new GSmallMapControl());	

		map.setCenter(point, 14, G_NORMAL_MAP);
	 	var marker = new GMarker(point);	
		map.addOverlay(marker);	
		
		marker.openInfoWindowHtml(address);
		
}

