with(jzGMap){// Use name spave dont indent whole file



$.cancelShowHover = function (){
	if (!mapDiv|| !mapDiv.hoverDiv) return
	var hover=mapDiv.hoverDiv
	if (hover.waitingToOpen) {
		clearTimeout(hover.waitingToOpen)
		hover.waitingToOpen=false
		hover.showInfo= false
		//alert('cleared shoe hover')
		}
	}


$.showHover = function(marker,pt,fromProxy,pos) {
	//alert('in show hover marker='+marker+' pt='+pt+' noproxy='+noproxy)
	if (!mapDiv|| !mapDiv.hoverDiv ||  !(marker.hoverContent || marker.hoverImage)){
	    //alert('leaving showhover')
	    return 
	    }
	var hover=mapDiv.hoverDiv
	cancelShowHover(hover) //Do this to make sure the counter is reset
	var wait=300
	if (fromProxy) wait=50
	hover.showInfo= [marker,pt,fromProxy,pos] //cause no arguments ins settimeout in ie
	hover.waitingToOpen=setTimeout(showHoverBis,wait)
	//alert('settimer for showhoverbis')
	}

$.showHoverBis = function (){
	var hover=mapDiv.hoverDiv
	hover.waitingToOpen= false
	var info= hover.showInfo
	hover.showInfo= false
	if (!info) return
	var marker=info[0],pt=info[1],fromProxy=info[2],pos=info[3]
	//alert('in hover bis')
	if (!mapDiv|| !mapDiv.hoverDiv || !marker || (!marker.hoverContent && !marker.hoverImage)){
	    //alert('leaving hover bis')
	    return
	    }
	//if (fromProxy) alert('show hover no proxy on'+marker)
	if (marker.hoverImage) {
		marker.setImage(marker.hoverImage)
		//alert('did setIamge='+marker.hoverImage)
		}
	if (!marker.hoverContent) return
	var vMap=mapDiv.vMap
	var content
	cancelHideHover(hover)
	if (typeof marker.hoverContent == 'function') content=marker.hoverContent(fromProxy)
	else content=marker.hoverContent
	//alert('show hov for '+content)
	if (!content) return

	//Set content get Height
	hover.style.width=hover.hoverWidth+'px'
	hover.style.height='auto'
	hover.style.display="block";
	hover.innerHTML=content
	hover.hoverHeight= hover.offsetHeight //could be wrong at this point ...

	
	//Reset hover offset
	if (!fromProxy){
	  hover.mouseOffsetY= hover.mousePadding
	  hover.mouseSideY= 'top'
	  hover.mouseOffsetX= -(hover.hoverWidth/2)
	  hover.mouseSideX= 'left'
	  }
	else {
	  hover.mouseOffsetY= 40
	  hover.mouseSideY= 'top'
	  hover.mouseOffsetX= 0 //-(hover.hoverWidth/2)
	  hover.mouseSideX= 'left'
	  }


	if (!fromProxy && mapDiv.home != 'vxxx' && vMap.mousePos) {
		//alert('yes hover')
		//Got a mousePos recalc best possible offset
		var mouseXY= vMap.fromLatLngToContainerPixel(vMap.mousePos)
		var mx=mouseXY.x, my=mouseXY.y, hw= hover.hoverWidth, hh= hover.hoverHeight,
			dw= mapDiv.offsetWidth, dh=mapDiv.offsetHeight, padding= hover.mousePadding, yCenter= false

		//check for bottom fit
		if ( (dh-my-padding) >= hh ) hover.mouseOffsetY= padding //got a fit
		// does not fit below check over
		else if ( (my-padding) >= hh ) hover.mouseOffsetY= -( padding + hh ) //got a fit over
		//ok cant got on top or bottom will center vericatly
		else {
			yCenter= true
			//center but dont go over the top .... 
			var a= Math.min(-hh/2, hh-(dh-my))
			//alert(' a= '+a+' hh='+hh+' dh='+dh+' my='+my)
			hover.mouseOffsetY= Math.max(-my,a)
			}
		//ok now do x
		//start by trying right side
		if ( (mx+padding+hw) <= dw) hover.mouseOffsetX= padding
		//try left
		else if ( (mx-padding) >= hw) hover.mouseOffsetX= -( padding + hw)
		//try center
		else if ( !yCenter && (mx >= hw/2) && (dw-mx)>=hw/2 ) hover.mouseOffsetX= -(hw/2) //got a fit
		//even if does not fit use rigth side ..
		else hover.mouseOffsetX= padding

		hover.openPos = vMap.mousePos
		//alert('show hover openPos='+hover.openPos+' pt='+pt)
		setHoverPos2(hover,hover.openPos)
		}
	else {
		//alert('no hover')
		hover.openPos = vMap.mousePos
		if (fromProxy){
		    //alert('got pos= '+pos)
		    setHoverPos2(hover,pos,fromProxy)
		    }
		else
		    setHoverPos2(hover,hover.openPos)
		//alert('show hover else vMap.mousepos='+vMap.mousePos+' pt='+pt)
		}
	//alert('show hover for '+clientRect)
	//alert(' open hover x='+hover.mouseOffsetX+' y=hover.mouseOffsetY)
	//alert('width = '+hoverWidth+' left='+leftSpace+' r='+rightSpace+' i.x='+iconSize.width+'  ia.x='+iconAnchor.x)


	hover.style.visibility="visible";
	}


$.cancelShowMenu = function (){
	if (!mapDiv|| !mapDiv.menuDiv) return
	var menu=mapDiv.menuDiv
	if (menu.waitingToOpen) {
		clearTimeout(menu.waitingToOpen)
		menu.waitingToOpen=false
		menu.showInfo=false
		//alert('cleared shoe hover')
		}
	}

$.showMenu = function(content) {
	//alert('show menu comyrmt='+content)
	//alert('in show hover marker='+marker+' pt='+pt+' noproxy='+noproxy)
	if (!mapDiv|| !mapDiv.menuDiv ){ alert('no menu div'); return }
	var menu=mapDiv.menuDiv
	cancelShowMenu(menu) //Do this to make sure the counter is reset
	menu.showInfo=content
	menu.waitingToOpen=setTimeout(showMenuBis,300,content)
	//alert('settimer for showhoverbis')
	}

$.showMenuBis = function (content){
	hideHover()
	if (!mapDiv|| !mapDiv.menuDiv) return
	var hover=mapDiv.menuDiv
	var content= hover.showInfo
	var vMap= mapDiv.vMap
	hover.showInfo= false
	//alert('in hover bis')
	cancelHideMenu(hover)
	if (!content) return

	//Set content get Height
	hover.style.width=hover.hoverWidth+'px'
	hover.style.height='auto'
	hover.style.display="block";
	hover.innerHTML=content
	hover.hoverHeight= hover.offsetHeight //could be wrong at this point ...

	
	//Reset hover offset
	hover.mouseOffsetY= hover.mousePadding
	hover.mouseSideY= 'top'
	hover.mouseOffsetX= -(hover.hoverWidth/2)
	hover.mouseSideX= 'left'


	if ( mapDiv.home != 'vxxx' && vMap.mousePos) {
		//alert('yes menu')
		//Got a mousePos recalc best possible offset
		var mouseXY= vMap.fromLatLngToContainerPixel(vMap.mousePos)
		var mx=mouseXY.x, my=mouseXY.y, hw= hover.hoverWidth, hh= hover.hoverHeight,
			dw= mapDiv.offsetWidth, dh=mapDiv.offsetHeight, padding= hover.mousePadding, yCenter= false

		//check for bottom fit
		if ( (dh-my-padding) >= hh ) hover.mouseOffsetY= padding //got a fit
		// does not fit below check over
		else if ( (my-padding) >= hh ) hover.mouseOffsetY= -( padding + hh ) //got a fit over
		//ok cant got on top or bottom will center vericatly
		else {
			yCenter= true
			//center but dont go over the top .... 
			var a= Math.min(-hh/2, hh-(dh-my))
			//alert(' a= '+a+' hh='+hh+' dh='+dh+' my='+my)
			hover.mouseOffsetY= Math.max(-my,a)
			}
		//ok now do x
		//start by trying right side
		if ( (mx+padding+hw) <= dw) hover.mouseOffsetX= padding
		//try left
		else if ( (mx-padding) >= hw) hover.mouseOffsetX= -( padding + hw)
		//try center
		else if ( !yCenter && (mx >= hw/2) && (dw-mx)>=hw/2 ) hover.mouseOffsetX= -(hw/2) //got a fit
		//even if does not fit use rigth side ..
		else hover.mouseOffsetX= padding

		hover.openPos = vMap.mousePos
		//alert('show hover openPos='+hover.openPos+' pt='+pt)
		setHoverPos2(hover,hover.openPos)
		}
	else {
		//alert('no menu')
		hover.openPos = vMap.mousePos
		setHoverPos2(hover,hover.openPos)
		//alert('show hover else vMap.mousepos='+vMap.mousePos+' pt='+pt)
		}
	//alert('show hover for '+clientRect)
	//alert(' open hover x='+hover.mouseOffsetX+' y=hover.mouseOffsetY)
	//alert('width = '+hoverWidth+' left='+leftSpace+' r='+rightSpace+' i.x='+iconSize.width+'  ia.x='+iconAnchor.x)


	hover.style.visibility="visible";
	}



$.setHoverPos = function(mouseCoord){
	return
	if (!mapDiv) return
	var vMap = mapDiv.vMap, hover=mapDiv.hoverDiv
	//if (!vMap || !hover) return
	mousePos = vMap.fromLatLngToContainerPixel(mouseCoord)

	var container=vMap.getContainer()
	var cPos=getOffsetPos(container)
	hover.style[hover.mouseSideX] = (cPos.x+mousePos.x+hover.mouseOffsetX) + 'px'
	hover.style[hover.mouseSideY]  = (cPos.y+mousePos.y+hover.mouseOffsetY) + 'px'
	}

$.setHoverPos2 = function(hover,mouseCoord,fromproxy){
	if (!mapDiv) return
	var vMap = mapDiv.vMap
	//if (!vMap || !hover) return
	if (fromproxy) {
	    //var container=vMap.getContainer()
	    //var cPos=getOffsetPos(container)
	    hover.style[hover.mouseSideX] = (mouseCoord[0]+hover.mouseOffsetX) + 'px'
	    hover.style[hover.mouseSideY]  = (mouseCoord[1]+hover.mouseOffsetY) + 'px'
	    }

	else {
	    if (mouseCoord)
	      var mousePos = vMap.fromLatLngToContainerPixel(mouseCoord)
	    else
	      var mousePos= {x:0,y:0}

	    var container=vMap.getContainer()
	    var cPos=getOffsetPos(container)
	    hover.style[hover.mouseSideX] = (cPos.x+mousePos.x+hover.mouseOffsetX) + 'px'
	    hover.style[hover.mouseSideY]  = (cPos.y+mousePos.y+hover.mouseOffsetY) + 'px'
	    }
	}

$.showRectHover = function(overlay,e){
	//var x=e.layerX, y=e.layerY, xy=new GPoint(x,y)
	//alert('x='+x+' y='+y+' xy='+xy)
	//var pt=mapDiv.vMap.fromContainerPixelToLatLng(xy)
	//alert('pt='+pt)

	var pane= mapDiv.vMap.getPane(G_MAP_MARKER_PANE).parentNode.style
	var offx=parseInt(pane.left)
	var offy=parseInt(pane.top)
	var div=overlay.div_.style
	var divx=parseInt(div.left)
	var divy=parseInt(div.top)
	var pt =  new GPoint(e.layerX+offx+divx, e.layerY+offy+divy)
	//alert('offx='+offx+' offy='+offy+' divx='+divx+' divy='+divy+' pt='+pt)

	return showHover(overlay,pt)
	}

$.cancelHideHover = function (){
	if (!mapDiv|| !mapDiv.hoverDiv) return
	var hover=mapDiv.hoverDiv
	if (hover.waitingToClose) {
		clearTimeout(hover.waitingToClose)
		hover.waitingToClose=false
		}
	}

$.hideHover = function(marker,fromProxy) {
	if (!mapDiv) return
	if (marker && marker.nonHoverImage) marker.setImage(marker.nonHoverImage)
	if (!mapDiv.hoverDiv) return
	var hover=mapDiv.hoverDiv
	cancelHideHover(hover) //Do this to make sure the counter is reset
	hover.waitingToClose=setTimeout(hideHoverBis,300,fromProxy)
	if (!fromProxy) hideMenu()
	}

$.hideHoverBis =function(fromProxy) {
	if (!mapDiv|| !mapDiv.hoverDiv) return
	var hover=mapDiv.hoverDiv
	//cancelHideHover(hover) not sure exactly what to do ...
	hover.waitingToClose=false //Not sure exactlu what to do... does canceling a 'running' timeout cause an error?
	hover.openPos=false
	//Hide the hover
	hover.style.visibility='hidden'
	}

$.initHover = function(div){
	//return false
	var hover=getId('hoverDiv')
	if (hover){
		div.hoverDiv=hover
		return hover
		}
	hover = document.createElement("div")
	div.hoverDiv=hover
	setinithovervals(hover)
	hover.id='hoverDiv'
	hover.onmouseover=function(){
	    //alert('hover mouse over')
	    cancelHideHover()
	    cancelHideMenu()
	    //cancelShowHover()
	    }
	hover.onmouseout=function(){
	    //alert('hover mouse out')
	    hideHover()
	    hideMenu()
	    }
	document.body.appendChild(hover);
	return hover
	}

$.initMenu = function(div){
	//return false
	var menu=getId('menuDiv')
	if (menu){
		div.menuDiv=menu
		return menu
		}
	menu = document.createElement("div")
	div.menuDiv= menu
	setinithovervals(menu)
	menu.id='menuDiv'
	menu.onmouseover=function(){
	    //alert('hover mouse over')
	    cancelHideMenu()
	    //cancelShowHover()
	    }
	menu.onmouseout=function(){
	    //alert('hover mouse out')
	    hideMenu()
	    hideHover()
	    }
	document.body.appendChild(menu);
	return menu
	}

$.cancelHideMenu = function (){
	if (!mapDiv|| !mapDiv.menuDiv) return
	var menu=mapDiv.menuDiv
	if (menu.waitingToClose) {
		clearTimeout(menu.waitingToClose)
		menu.waitingToClose=false
		}
	}

$.hideMenu = function() {
	if (!mapDiv) return
	if (!mapDiv.menuDiv) return
	var menu=mapDiv.menuDiv
	cancelHideMenu() //Do this to make sure the counter is reset
	menu.waitingToClose=setTimeout(hideMenuBis,400)
	}

$.hideMenuBis =function() {
	if (!mapDiv|| !mapDiv.menuDiv) return
	var menu=mapDiv.menuDiv
	//cancelHideHover(hover) not sure exactly what to do ...
	menu.waitingToClose=false //Not sure exactlu what to do... does canceling a 'running' timeout cause an error?
	menu.openPos=false
	//Hide the hover
	menu.style.visibility='hidden'
	}

$,setinithovervals= function(hover){
	hover.hoverWidth= 250
	hover.mousePadding= 30
	hover.mouseOffsetY= hover.mousePadding
	hover.mouseOffsetX= -(hover.hoverWidth/2)
	hover.className="hoverDiv"
	hover.style.backgroundColor='#ffffff'
	hover.style.fontWeight='normal'
	hover.style.fontFamily='Arial'
	hover.style.fontSize='8pt'
	hover.style.border='2px #888888 solid'
	//hover.style.whiteSpace='pre'
 	hover.style.height='auto'
	hover.style.width= hover.hoverWidth+'px'
	hover.innerHTML="Hover Div"
        //div.vMap.getPane(G_MAP_FLOAT_PANE).appendChild(hover);
        hover.style.visibility="hidden";
	hover.style.padding='2px'
	hover.style.position='absolute'
	hover.style.zIndex=9999
	hover.waitingToClose=false
	}

}

/*
$.showHoverOld = function (marker,pt){
	if (!mapDiv|| !mapDiv.hoverDiv ||  !(marker.hoverContent || marker.hoverImage)) return
	if (marker.hoverImage) {
		marker.setImage(marker.hoverImage)
		//alert('did setIamge='+marker.hoverImage)
		}
	if (!marker.hoverContent) return
	var hover=mapDiv.hoverDiv, vMap=mapDiv.vMap
	var content
	cancelHideHover(hover)
	if (typeof marker.hoverContent == 'function') content=marker.hoverContent()
	else content=marker.hoverContent
	//alert('show hov for '+content)
	if (!content) return

	

	if (vMap.mousePos) {
		hover.openPos = vMap.mousePos
		setHoverPos(hover.openPos)
		}
	else hover.openPos = true
	//alert('show hover for '+clientRect)
	
	//alert('width = '+hoverWidth+' left='+leftSpace+' r='+rightSpace+' i.x='+iconSize.width+'  ia.x='+iconAnchor.x)
	hover.style.width=hover.hoverWidth+'px'
	hover.style.height='auto'
	hover.innerHTML=content


	hover.style.display="block";
	hover.style.visibility="visible";
	}


$.showHoverOld2 = function (marker,pt){
	if (!mapDiv|| !mapDiv.hoverDiv ||  !(marker.hoverContent || marker.hoverImage)) return
	if (marker.hoverImage) {
		marker.setImage(marker.hoverImage)
		//alert('did setIamge='+marker.hoverImage)
		}
	if (!marker.hoverContent) return
	var hover=mapDiv.hoverDiv, vMap=mapDiv.vMap
	var content
	cancelHideHover(hover)
	if (typeof marker.hoverContent == 'function') content=marker.hoverContent()
	else content=marker.hoverContent
	//alert('show hov for '+content)
	if (!content) return

	
	var clientRect
	var border=10
	if (pt) clientRect =  new GBounds([new GPoint(pt.x-border,pt.y-border),new GPoint(pt.x+border,pt.y+border)])
	else    clientRect = getClientBounds(marker)
	//alert('show hover for '+clientRect)
	if (!clientRect) return
	var container=vMap.getContainer()

	var leftSpace  = clientRect.min().x
	var rightSpace = container.offsetWidth-clientRect.max().x
	var topSpace   = clientRect.min().y
	var bottomSpace= container.offsetHeight-clientRect.max().y

	hoverWidth=Math.min(250,Math.max(leftSpace,rightSpace,50))
	//alert('width = '+hoverWidth+' left='+leftSpace+' r='+rightSpace+' i.x='+iconSize.width+'  ia.x='+iconAnchor.x)
	hover.style.width=hoverWidth+'px'
	hover.style.height='auto'
	hover.innerHTML=content
	var hoverWidth=hover.offsetWidth
	var hoverHeight=hover.offsetHeight

	var cPos=getOffsetPos(container)

	if (leftSpace>=hoverWidth) hover.style.left=(cPos.x+clientRect.min().x-hoverWidth)+'px'
	else hover.style.left=(cPos.x+clientRect.max().x)+'px'

	if (topSpace>=hoverHeight || bottomSpace<hoverHeight) hover.style.top= (cPos.y+Math.max(0,clientRect.min().y-hoverHeight))+'px'
	else hover.style.top= (cPos.y+clientRect.max().y)+'px'

	hover.style.display="block";
	hover.style.visibility="visible";
	}
*/