
//####################################################
//###  PointMap class				  ####
//####################################################

with(jzGMap){ //Part of jzGMap
importFrom(jz,'addistener dof getId IE')
			
//$.LogWH = function(elem)  { var s=elem.style;Log('..cw'+elem.clientWidth+' ch='+elem.clientHeight+' for '+elem)}

$.initPointMap = function(elem) { // Initialize the Map
	if (!GBrowserIsCompatible()) return 
	mapDiv=elem
	mapDiv.iframe = mapDiv.getAttribute('jz:iframe',false)
	if ( mapDiv.iframe && elem.style.height=='100%' ) {
		//IE 100% patch ...(jz.IE || jz.KONQ) && 
		elem.style.height=document.body.clientHeight+'px'
		}
	setTimeout(initPointMapBis,100) // yeild process so browser can display overlay message, jz_scan can finish its work ...
	}

$.initPointMapBis = function() { // Initialize the Map

	//addListener(mapDiv,'contextmenu',function(e){alert('cntxt')})
	var id=mapDiv.id
	var mode=mapDiv.getAttribute('jz:inputmode') 
	mapDiv.inputMode=mode
	mapDiv.home = mapDiv.getAttribute('jz:home','')

	var ops= {}
	if (mode) ops={draggableCursor:'default', draggingCursor:'default'}
	
	var types= mapDiv.getAttribute('jz:maptypes')
	if (types) ops['mapTypes']= mapf(types.split(' '), function(tName){ return window['G_'+tName.toUpperCase()+'_MAP'] || 0 })

	var vMap =newMap(mapDiv,ops)
	mapDiv.vMap=vMap
	vMap.enableContinuousZoom()
	vMap.enableScrollWheelZoom()
	vMap.enableDoubleClickZoom()

	mapDiv.lang = mapDiv.getAttribute('jz:lang') || 'fr' 
	
	var lat=parseFloat(mapDiv.getAttribute('jz:lat'))
	var lng=parseFloat(mapDiv.getAttribute('jz:lng'))
	var mapPoint=newLatLng(lat,lng)
	var zoom=mapDiv.getAttribute('jz:zoom')
	if (zoom) zoom=parseInt(zoom)
	else zoom=6
	vMap.setCenter(mapPoint, zoom)

	var controls=mapDiv.getAttribute('jz:mapcontrols'), overview=false
	if (!controls) controls='GLargeMap GMapType GScale GOverviewMap Logo'
	if (mapDiv.getAttribute('jz:router') && controls.indexOf('Directions')==-1) //auto add dicontrol
		controls+= ' Directions'
	vMap.jzControls={}
	dof(controls.split(' '), function(cName){ 
		//if (cName=='OverviewMap') return overview=true
		var name=cName+'Control'
		var ctl = (jzGMap && jzGMap[name]) || window[name]
		if (ctl) {
			var ictl= new ctl()
			vMap.addControl(ictl)
			vMap.jzControls[cName]= ictl
			}
		})

	var ftrue=function(){return true}
	mapDiv.showattraits=ftrue
	mapDiv.showmarkers=ftrue

	initMenu(mapDiv)
	initHover(mapDiv)
	initOverlays(mapDiv)

	var elem
	var name=mapDiv.id.slice(0,-5) //remove .map
	if (elem=getId(name+'._i.lat')) addListener(elem,'change',doLatLngChanged)
	if (elem=getId(name+'._i.lng')) addListener(elem,'change',doLatLngChanged)
	GEvent.addListener(vMap,'click',doPointMapClick)
	if (mode) GEvent.addListener(vMap,'dblclick',doPointMapDblClick)
	
	var geoloc=mapDiv.getAttribute('jz:geoloc')

	vMap.marker=newMarker(mapPoint,{dragend:mode?doMarkerMoved:false /*, drag:mode?doMarkerDraged:false */ })
	vMap.addOverlay(vMap.marker)

	if (geoloc) {

		//alert('got ele,val='+elem.value)
		if ( (geoloc == 'manApprox') || (geoloc == 'autoApprox' )) {
			vMap.circle=Circle(mapPoint,0.05)
			vMap.addOverlay(vMap.circle)
//			if (elem=getId('MessageControlElem')) elem.innerHTML="Position approximative, probablement a l'interieur du rond bleu<br />"+geoloc
			}
		}
	if (elem=getId('MessageControlElem')) {
		elem.innerHTML=mapDiv.getAttribute('jz:geolocmess')
		elem.style.visibility='visible'
		}
	if (mapDiv.inputMode) {
		var tag=jz.getParentByTagName(mapDiv,'FORM')
		jz.addListener(tag,'submit',function(){jz.warnUnload=false})
		}

	var route= mapDiv.getAttribute('jz:router')
	if (route){
		var target= mapDiv.getAttribute('jz:target')
		if (target){
			var ta= mapf(target.split(','),parseFloat)
			if (isNaN(ta[0]) || isNaN(ta[1]))
				 target= false
			else target= new GLatLng(ta[0],ta[1])
			}
		var routecls= jzGMap[route]

		var dirctrl= getId('DirectionsControl')
		var offsetTop= 100
		if (dirctrl) offsetTop+=dirctrl.offsetHeight

		if (routecls) vMap.router= routecls(vMap,{network:route, offset:[90,offsetTop], target:target}) // a doite offset:[-35,80], left of logo [240,45]
		else vMap.router= Router(vMap,{network:route, offset:[90,offsetTop], target:target})
		// init ctrl de directions
/*		var dirctrl= getId('DirectionsControl')
		if (dirctrl){
			var checked= getId('DirectionsControl.check').checked
			jzGMap.dodirectionscontrolchange(dirctrl,checked,'pathmap')
			}*/
		}


	doMoveEnd(mapDiv,'force')

	}
jz.DomClasses['PointMap']=initPointMap

//################################################
//### PointMap event handlers and support functions

$.doMarkerMoved = function() {
	var vMap=mapDiv.vMap
	var point=vMap.marker.getPoint()
	var name=mapDiv.id.slice(0,-5) //remove .map
	var elem
	if (elem=getId(name+'._d.lat')) elem.innerHTML=point.lat().toFixed(6)
	if (elem=getId(name+'._d.lng')) elem.innerHTML=point.lng().toFixed(6)
	if (mapDiv.inputMode) {
		if (elem=getId(name+'._hasInput')) elem.value='hasinput'
		if (elem=getId(name+'._i.lat')) elem.value=point.lat().toFixed(6)
		if (elem=getId(name+'._i.lng')) elem.value=point.lng().toFixed(6)
		name2=name.slice(0,-9)
		a=getId(name2+'.charger')
		b=a && a.value
		c=getId(name2+'.message')
		d=c && c.value
		//alert('before test name='+name2+' a='+a+' b='+b+' c='+c+' d='+d)
		if ( (elem=getId(name2+'.charger')) && elem.value &&
			(elem=getId(name2+'.geoloc')) && elem.value ) {
			/* we got a message change */
			elem.value='Manuel Precis'
			//alert(elem.value)
			}
		}
	}

$.doLatLngChanged = function() {
	var vMap=mapDiv.vMap
	var name=mapDiv.id.slice(0,-5) //remove .map
	var elem,lat,lng
	if (!mapDiv.inputMode) return

	if (elem=getId(name+'._i.lat')) lat=parseFloat(elem.value)
	if (elem=getId(name+'._i.lng')) lng=parseFloat(elem.value)
	if (!(lat && lng)) return
	var pt=newLatLng(lat,lng)
	if (!pt) return
	vMap.marker.setPoint(pt)
	vMap.panTo(pt)
		
	if (elem=getId(name+'._hasInput')) elem.value='hasinput'
	
	name2=name.slice(0,-9)
	a=getId(name2+'.charger')
	b=a && a.value
	c=getId(name2+'geoloc')
	d=c && c.value
	//alert('before test name='+name2+' a='+a+' b='+b+' c='+c+' d='+d)
	if ( (elem=getId(name2+'.charger')) && elem.value &&
		(elem=getId(name2+'.geoloc')) && elem.value ) {
		/* we got a message change */
		elem.value='Manuel Precis'
		//alert(elem.value)
		}
	}

$.doPointMapClick = function(overlay,point) {
	if (!mapDiv) return
	if (overlay && overlay.href && !mapDiv.inputMode) return doNavigate(overlay,point)
	if (overlay) return //#Let overlay take care of it itself
	mapDiv.vMap.panTo(point)
	}

$.doPointMapDblClick = function(overlay,point) {
	if (!mapDiv) return
	mapDiv.vMap.marker.setPoint(point)
	doMarkerMoved()
	}

}//End jzGMap name space