//<![CDATA[

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

function browserCheck() {
	window.setTimeout(function() {
	    isok = true;
	    /*if (BrowserDetect.OS!="Windows")
			isok = false;*/
		if (BrowserDetect.browser!='Explorer'&&BrowserDetect.browser!='Firefox')	isok = false;
		if (BrowserDetect.browser=='Explorer'&&BrowserDetect.version<7)				isok = false;
        if (BrowserDetect.browser=='Firefox'&&BrowserDetect.version<2)				isok = false;
		if (!isok)
		    alert("Il browser utilizzato non e' supportato.\nI browser supportati sono Internet Explorer 7+ e Firefox 2+");
	}, 1000);
}

var GJX_editbox = 'GJXedit';

var GJX_ICON 		= 'icona';
var GJX_INFO 		= 'informazione';
var GJX_POLY 		= 'poligono';      // in objPlace non funziona... ho messo le stringhe

var GJX_heimin 		= 2;
var GJX_heimax 		= 46;

var GJX_mapVersion	= "1.5a";	// versione script
var GJX_zoom		= 13;
var GJX_centerLat	= 41.89018613438137;
var GJX_centerLng	= 12.492291927337646;
var GJX_centerP 	= 13;		//12;

var GJX_mapBounds;
var GJX_mapCenter;
var GJX_mapZoom;

var GJX_firstPoint 	= null;
var GJX_lastPoint 	= null;
var GJX_lastLine	= null;
var GJX_lineList	= new Array();
var GJX_lastPoly	= new Array();
var GJX_oldOverlay	= null;

var GJX_geo_marker;

var GJX_myDoc = new objXMLdoc();
var GJX_map 		= null;
var GJX_geo 		= null;
var GJX_centerPoint = null;
var GJX_gzone 		= null;
var GJX_ozone 		= null;

var GJX_icoPos = null;

function $$$(id) {
	var ret = document.getElementById(id);
	if (ret == 'undefined')
	    ret = null;
	return ret;
}
function $$a(mex) {	return alert(mex); }
function $$c(mex) {	return confirm(mex); }

function keycheck(ev) {
	if (!isEdit()) {
		if (ev.keyCode == 13) {
			$$$('avviacerca').click();
			return false;
		}
	}
	return true;
}

String.prototype.htmlEncode = function() {
	var me = this;
	me = me.replace(/</g,"&lt;");
	me = me.replace(/>/g,"&gt;");
	return me;
}

function onReturn(ptr, ev) {
	if (ev.keyCode == 13)
		ptr.value += '<br/>';
}

function maiuscolize(ptr) {
	var stringa = ptr.value;
	if ((stringa.charAt(stringa.length-2) == ' ') || (stringa.length == 1)) {
		if (stringa.length == 0)
			ptr.value = stringa[0].toUpperCase();
		else
			ptr.value = stringa.substr(0, stringa.length-1) + stringa.charAt(stringa.length-1).toUpperCase();	// mette la maiuscola...
	}
}

function areaset(ptr) {
	if (ptr.rows==GJX_heimin)
		ptr.rows=Math.floor(GJX_heimax/2);
	else if (ptr.rows==Math.floor(GJX_heimax/2))
		ptr.rows=GJX_heimax;
	else
		ptr.rows=GJX_heimin;
}

function findPosX(obj) {
	var curleft = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else {
		if (obj.x)
			curleft += obj.x;
	}
	return curleft;
}

function findPosY(obj) {
	var curtop = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else {
		if (obj.y)
			curtop += obj.y;
	}
	return curtop;
}

function onCloseWin(evt) {
	var message = 'Uscire comporta la perdita delle modifiche non esportate.';
	if (typeof evt == 'undefined')
		evt = window.event;
	if (evt)
		evt.returnValue = message;
	return message;
}


function showhide(ptr) {
	ptr2 = ptr.parentNode.parentNode.nextSibling;
	if (ptr2.className == 'divshow') {
		ptr2.className = 'divhide';
		ptr.src='images/gjx_add.gif';
	}
	else {
		ptr2.className = 'divshow';
		ptr.src='images/gjx_sub.gif';
	}
}

function modified() {
	var lab = $$$('editLegend');
	if (lab.style.color=='') {
		lab.style.color			 	= '#FFFFFF';
		lab.style.backgroundColor 	= '#990000';
		lab.style.fontWeight	 	= 'bold';
		lab.innerHTML += ' [modificato]';
	}
}

function updateIcoS(t,icoT,icoS,icoW,icoH) {
	var filename = t.src;		//.split('/');
	//alert("update:"+filename);
	$$$(icoT).innerHTML = filename;			//filename[filename.length-1];
	$$$(icoT).style.color='#990000';
	$$$(icoS).src   	= t.src;
	$$$(icoW).innerHTML = t.getAttribute('width');
	$$$(icoW).style.color='#990000';
	$$$(icoH).innerHTML = t.getAttribute('height');
	$$$(icoH).style.color='#990000';

	showIconPos();
	modified();
}

function isEdit() {
	if ($$$('editLegend')!=null)
	    if ($$$('editField').style.display == 'block')
	    	return true;
	return false
}
function isEditWhat(what) {
	if (isEdit())
	    if ($$$('editLegend').innerHTML.indexOf(what)>=0)
	        return true;
	return false;
}
function isEditIcon() { return isEditWhat('ICONA'); }
function isEditInfo() { return isEditWhat('INFORMAZIONE'); }
function isEditPoly() { return isEditWhat('POLIGONO'); }

function cleanMap() {
	if ($$c('Elimino tutte le locazioni?')) {
		GJX_myDoc = new objXMLdoc();
		var editor = $$$(GJX_editbox);
		editor.innerHTML = GJX_myDoc.showEdit('');
		GJX_myDoc.showGMap(GJX_map);
	}
}

function deleteItem(ptr) {
	ptr = ptr.parentNode;
	var label = ptr.parentNode.getElementsByTagName('label')[0].innerHTML;
	if ($$c('Elimino ['+label+'] ?')) {
		var myobjRef = ptr.parentNode.getAttribute('id').toString().split('_')[1];
		var refs = myobjRef.split('/');
		var myobjNam = ptr.parentNode.getAttribute('id').toString().split('_')[0];
		var editor = $$$(GJX_editbox);
		if (myobjNam == 'place')
			GJX_myDoc.removePlace(myobjRef);
		else
			GJX_myDoc.getPlace(refs[0]).removeItem(myobjNam, refs[1]);
		editor.innerHTML = GJX_myDoc.showEdit('');
		GJX_myDoc.showGMap(GJX_map);
	}
}

function selColor(selfPtr, selID) {
	var sel = $$$(selID);
	sel.style.backgroundColor = selfPtr.style.backgroundColor;
	sel.style.color = selfPtr.style.color;
}

function newObject(ptr) {
	var what = ptr.parentNode.parentNode.getElementsByTagName('label')[0].innerHTML.split(' ');		//alert("what: "+what);
	newObjectDirect(what);
}
function newObjectDirect(what) {
	var pid = '';
	if (what[0] != 'MAPPA')
		pid = what[1].toString().substr(1,what[1].length-2);		// pesco il numero di place
	var opath;
	switch(what[0]) {			// cambia l'oggetto da creare in relazione a quale tasto N(uovo) č stato premuto
		case 'MAPPA':
					GJX_myDoc.addPlace();
					opath = 'locazione_'+(GJX_myDoc.places.length-1)+'/0';
					break;
		case 'ICONE':
					GJX_myDoc.getPlace(pid).addIcon();
					opath = 'icona_'+pid+'/'+(GJX_myDoc.getPlace(pid).icon.length-1);
					break;
		case 'INFORMAZIONI':
					GJX_myDoc.getPlace(pid).addInfo();
					opath = 'informazione_'+pid+'/'+(GJX_myDoc.getPlace(pid).info.infoNum()-1);
					break;
		case 'POLIGONI':
					GJX_myDoc.getPlace(pid).addPoly();
					opath = 'poligono_'+pid+'/'+(GJX_myDoc.getPlace(pid).poly.length-1);
					break;
	}
	var editor = $$$(GJX_editbox);
				
	editor.innerHTML = GJX_myDoc.showEdit(opath);		// codifica speciale usata da showEdit per calcolare l'opath dell'ultimo componente inserito
	colorizeIt(opath);
	if (opath.indexOf('locazione')<0)
		editItem(opath);
}

function savePlace(myobjNam, myobjRef) {
	$$$(GJX_editbox).className = 'GJXeditLR';
	clearColorize();
	
	var all_ok = true;
	var myo = GJX_myDoc.getObject(myobjNam, myobjRef);
	switch (myobjNam) {
		case GJX_ICON:
						myo.lat 	= $$$('tlat').innerHTML;
						myo.lng 	= $$$('tlng').innerHTML;
						myo.src 	= $$$('tico').innerHTML;                //alert("tico:"+$$$('tico').innerHTML);
						myo.width 	= $$$('ticow').innerHTML;
						myo.height 	= $$$('ticoh').innerHTML;
						break;
		case GJX_INFO:
						if ($$$('icaption').value)
							myo.caption = $$$('icaption').value;
						myo.content = $$$('icontent').value;
						break;
		case GJX_POLY:
						myo.color 	= $$$('pcolor').value;
						myo.size 	= $$$('psize').value;
						myo.alpha 	= $$$('palpha').value;
						myo.filled 	= false;
						if ($$$('pfilled').checked)			// forse da modificare per IE, in quanto non č detto che dia true/false
							myo.filled = true;
						myo.closure	= false;
						if ($$$('pclosure').checked)		// forse da modificare per IE, in quanto non č detto che dia true/false
							myo.closure = true;
						if (! myo.hasPoints())
							myo.saveDrawPoints();
						break;
		default:
						all_ok = false;			// qui in teoria non arriva mai... nel codice
	}
	
	if (myobjNam == GJX_POLY)
		myo.clearDPoints();

	if (all_ok)
		closeEdit(myobjNam, myobjRef);
	else
		$$a('Salvataggio '+myobjNam+' NON effettuato!');
}

function closeEdit(myobjNam, myobjRef) {
	//$$$(GJX_editbox).className = 'GJXeditLR';		// ripristina dimensioni lista locazioni
	var ws=getWindowSize();
	$$$(GJX_editbox).style.height=ws.height+'px';
	clearColorize();
	$$$('editField').style.display = 'none';
	if (myobjNam == GJX_POLY) {		// PER AZZERARE I PUNTI TEMPORANEI
		var myo = GJX_myDoc.getObject(myobjNam, myobjRef);
		myo.clearDPoints();
	}
	GJX_myDoc.showGMap(GJX_map);
	//document.body.style.backgroundImage='url(../googlemaps/images/back.gif)';
}

function clearColorize() {
	var tgtTag = $$$(GJX_editbox).getElementsByTagName('span');
	for (var i=0; i<tgtTag.length; i++)
		tgtTag[i].style.color = '';
}

function colorizeIt(opath) {
	var ptr = $$$(opath);
	if (ptr) {
		var ptrl = ptr.getElementsByTagName('span');
		if (ptrl.length>1)
			ptrl[1].style.color = 'rgb(153, 0, 0)';
	}
}

function coordSaveLatLng(lat, lng) {
	if ($$$('tlat') != null) {
		$$$('tlat').innerHTML = lat;
		$$$('tlat').style.color='#990000';
		$$$('tlng').innerHTML = lng;
		$$$('tlng').style.color='#990000';
		modified();
	}
}

function coordSave(pt) {
	if (pt==null || pt=='undefined') {
	    pt = GJX_map.getCenter();
	}
	if ($$$('tlat') != null) {
		var lat = pt.lat();
		var lng = pt.lng();
		$$$('tlat').innerHTML = lat;
			$$$('tlat').style.color='#990000';
		$$$('tlng').innerHTML = lng;
			$$$('tlng').style.color='#990000';
		modified();
	}
}

function centerLocation(myo) {
	if (myo.lat != 0 && myo.lng != 0) {			// se ho gią definito la locazione...
		GJX_map.setCenter(new GLatLng(myo.lat, myo.lng));		//...allora centro la mappa sulla locazione
	}
	else {		// se l'icona č ancora priva di coordinate, metto quelle attuali
		myo.lat = GJX_map.getCenter().lat();
		myo.lng = GJX_map.getCenter().lng();
	}
}

function closeMapCfg() {
	//document.body.style.backgroundImage='url(../googlemaps/images/back.gif)';
	//$$$(GJX_editbox).className = 'GJXeditLR';		// ripristina dimensioni lista locazioni
	$$$('editField').style.display = 'none';
	var ws=getWindowSize();
	$$$(GJX_editbox).style.height=ws.height+'px';
	GJX_myDoc.showGMap(GJX_map);
}

function saveMapCfg() {
	$$$(GJX_editbox).className = 'GJXeditLR';
	var myo = GJX_myDoc.config;
	myo.lat 	 = $$$('tlat').innerHTML;
	myo.lng 	 = $$$('tlng').innerHTML;
	myo.zoomlev  = $$$('tzlev').innerHTML;
	myo.width 	 = parseFloat($$$('twid').value);
	myo.height 	 = parseFloat($$$('thei').value);
	myo.controls = $$$('tctrl').value;
	myo.zoomable = 'false';
	if ($$$('tzoom').checked)	myo.zoomable = 'true';
	myo.ahybrid  = 'false';
	if ($$$('tahyb').checked)	myo.ahybrid  = 'true';
    myo.maptypes = 'false';
	if ($$$('ttmap').checked)	myo.maptypes = 'true';
 	myo.overview = 'false';
	if ($$$('tview').checked)	myo.overview = 'true';
 	myo.draggable = 'false';
	if ($$$('tdrag').checked)	myo.draggable = 'true';
	closeMapCfg();
	window.opener.document.editForm.elements[GJX_MAP_XML].value = GJX_myDoc.getXML();
}

function editGMap() {
	var myo = GJX_myDoc.config;
	GJX_map.setCenter(new GLatLng(myo.lat, myo.lng));
	GJX_map.setZoom(myo.zoomlev);
	
	var optstr;
	var iHTML = '';
	iHTML += '<div style="padding:5px;">';
	iHTML += '<div onmouseover="helpme(\'pMappa\');" onmouseout="helpme();">';
	iHTML += '<div class="editboxitem" id="editLegend">MAPPA</div>';
	iHTML += '<table width="100%" height="185px" valign="absmiddle">';
	iHTML += '<tr class="em085"><td><label>Lat: </label><span id="tlat">'+myo.lat+'</span></td>';
	iHTML += '<td><label>Lng: </label><span id="tlng">'+myo.lng+'</span></td></tr>';
	iHTML += '<tr class="em085"><td colspan="2"><label>Zoom: </label> <span id="tzlev">'+myo.zoomlev+'</span></td></tr>';
	 iHTML += '<tr class="em085"><td><label>Larghezza: </label>'+'<input id="twid" name="twid" type="text" value="'+myo.width+'" size="4" maxlength="4" onchange="modified(); showZoneBorders();" />'+'</td>';
	 iHTML += '<td><label>Altezza: </label>'+'<input id="thei" name="thei" type="text" value="'+myo.height+'" size="4" maxlength="4" onchange="modified(); showZoneBorders();" />'+'</td></tr>';
	iHTML += '<tr class="em085"><td><label>Controlli spostamento</label></td><td>'+'<select onchange="modified();" id="tctrl" name="tctrl">';
	 if (myo.controls==1) {
		iHTML += '<option value="0">No</option>';
		iHTML += '<option value="1" selected="selected">Mini</option>';
		iHTML += '<option value="2">Normale</option>';
	 }
	 else {
	 	if (myo.controls==2) {
			iHTML += '<option value="0">No</option>';
			iHTML += '<option value="1">Mini</option>';
			iHTML += '<option value="2" selected="selected">Normale</option>';
	 	}
	 	else {
	 		iHTML += '<option value="0" selected="selected">No</option>';
			iHTML += '<option value="1">Mini</option>';
			iHTML += '<option value="2">Normale</option>';
	 	}
	 }
	iHTML += '</select>'+'</td></tr>';
	 optstr = '';
	 if (myo.zoomable=='true')
		optstr = ' checked="checked"';
	 iHTML += '<tr class="em085"><td>'+'<input onchange="modified();" id="tzoom" name="tzoom" type="checkbox"'+optstr+' />'+' <label>Zoom abilitato</label></td>';
	 optstr = '';
	 if (myo.ahybrid=='true')
		optstr = ' checked="checked"';
	 iHTML += '<td>'+'<input onchange="modified();" id="tahyb" name="tahyb" type="checkbox"'+optstr+' />'+' <label>Auto-ibrida</label></td></tr>';
      optstr = '';
	  if (myo.maptypes=='true')
		optstr = ' checked="checked"';
	  iHTML += '<tr class="em085"><td>'+'<input onchange="modified();" id="ttmap" name="ttmap" type="checkbox"'+optstr+' />'+' <label>Tipo Mappa</label></td>';
	  optstr = '';
	  if (myo.overview=='true')
		optstr = ' checked="checked"';
	  iHTML += '<td>'+'<input onchange="modified();" id="tview" name="tview" type="checkbox"'+optstr+' />'+' <label>Mini Mappa</label></td></tr>';
     optstr = '';
	  if (myo.draggable=='true')
		optstr = ' checked="checked"';
	  iHTML += '<tr class="em085"><td colspan="2">'+'<input onchange="modified();" id="tdrag" name="tdrag" type="checkbox"'+optstr+' />'+' <label>Movibile</label></td></tr>';
	iHTML += '</table>';
	iHTML += '</div></div>';

			iHTML += '<div align="center">';
			iHTML += '<input style="width:100px;height:24px;background:transparent;background-image:url(images/gjx_sav.gif);background-repeat:no-repeat;font-weight:bold;text-align:right;padding:2px;padding-right:12px;" type="button" value="SALVA" onclick="if($$c(\'Sei sicuro di voler salvare i cambiamenti?\')) saveMapCfg();"/>';
			iHTML += '&nbsp;&nbsp;&nbsp;';
			iHTML += '<input id="closingbutton" name="closingbutton" style="width:100px;height:24px;background:transparent;background-image:url(images/gjx_cancel.gif);background-repeat:no-repeat;font-weight:bold;text-align:right;padding:2px;" type="button" value="ANNULLA" onclick="closeMapCfg();"/>';
			iHTML += '</div>';
	
	return(iHTML);
}

function closeEditBox() {
	if ($$$('editField').style.display == 'block') {
	    $$$('closingbutton').click();
	}
}

function showZone() {
	if (GJX_gzone != null) {
	    GJX_map.removeOverlay(GJX_gzone);
	}
	var myo = GJX_myDoc.config;
	var cenpnt = GJX_map.fromLatLngToDivPixel(new GLatLng(myo.lat,myo.lng));
	var twid = Math.floor(parseInt($$$('twid').value)/2);
	var thei = Math.floor(parseInt($$$('thei').value)/2);
	var polyst = new Array();
	polyst.push(GJX_map.fromDivPixelToLatLng(new GPoint(cenpnt.x-twid, cenpnt.y-thei)));
	polyst.push(GJX_map.fromDivPixelToLatLng(new GPoint(cenpnt.x+twid, cenpnt.y-thei)));
	polyst.push(GJX_map.fromDivPixelToLatLng(new GPoint(cenpnt.x+twid, cenpnt.y+thei)));
	polyst.push(GJX_map.fromDivPixelToLatLng(new GPoint(cenpnt.x-twid, cenpnt.y+thei)));
	polyst.push(GJX_map.fromDivPixelToLatLng(new GPoint(cenpnt.x-twid, cenpnt.y-thei)));
	GJX_gzone = new GPolygon(polyst, "#000000", 1, 0, "#000000", 0.1);
	GJX_map.addOverlay(GJX_gzone);
}
function showZoneBorders() {
	if (GJX_ozone != null) {
	    GJX_map.removeOverlay(GJX_ozone);
	}
	var centro = GJX_map.getCenter();
	var cenpnt = GJX_map.fromLatLngToDivPixel(centro);
	var twid = Math.floor(parseInt($$$('twid').value)/2);
	var thei = Math.floor(parseInt($$$('thei').value)/2);
	var polyst = new Array();
	polyst.push(GJX_map.fromDivPixelToLatLng(new GPoint(cenpnt.x-twid, cenpnt.y-thei)));
	polyst.push(GJX_map.fromDivPixelToLatLng(new GPoint(cenpnt.x+twid, cenpnt.y-thei)));
	polyst.push(GJX_map.fromDivPixelToLatLng(new GPoint(cenpnt.x+twid, cenpnt.y+thei)));
	polyst.push(GJX_map.fromDivPixelToLatLng(new GPoint(cenpnt.x-twid, cenpnt.y+thei)));
	polyst.push(GJX_map.fromDivPixelToLatLng(new GPoint(cenpnt.x-twid, cenpnt.y-thei)));
	GJX_ozone = new GPolyline(polyst, "#000000", 1, 0.3);
	GJX_map.addOverlay(GJX_ozone);
}

function editItem(opath) {
	window.onbeforeunload = null;
	closeEditBox();
	//document.body.style.backgroundImage='url(../googlemaps/images/back2.gif)';
	var myedit = $$$('editBox');
	var iHTML = '';
	$$$('editField').style.display = 'block';
	var ws=getWindowSize();
	if (opath == 'mappacfg') {
		//$$$(GJX_editbox).className = 'GJXeditLRmappa';		//modifico dimensione lista locazioni
		$$$(GJX_editbox).style.height=(ws.height-305)+'px';
	    iHTML = editGMap();
		myedit.innerHTML = iHTML;
		showZone();
		showZoneBorders();
	}
	else {
		GJX_myDoc.showGMap(GJX_map);  		// ########### potrebbe DARE PROBLEMI con DRAG'n'DROP
		clearColorize();		// decoloro i label
		ptr = $$$(opath);
		if (ptr.parentNode.getElementsByTagName('span')[1].style.color != 'rgb(153, 0, 0)') {	// deve essere allineato con colorizeIt per entrare
			ptr.getElementsByTagName('span')[1].style.color = 'rgb(153, 0, 0)';

			var myobjRef = opath.split('_')[1];
			var myobjNam = opath.split('_')[0];
			var myo = GJX_myDoc.getObject(myobjNam, myobjRef);		//alert("myo:"+myo+"\nref:"+myobjRef+"\nnam:"+myobjNam);
			//$$$(GJX_editbox).className = 'GJXeditLR'+myobjNam;		//modifico dimensione lista locazioni
			switch (myobjNam) {			// cambio del pannello di editazione in relazione all'oggetto da editare
				case GJX_ICON:
						$$$(GJX_editbox).style.height=(ws.height-319)+'px';
						iHTML = editIcon(myo, myobjRef);
						break;
				case GJX_INFO:
						$$$(GJX_editbox).style.height=(ws.height-324)+'px';
						iHTML = editInfo(myo, myobjRef);
						break;
				case GJX_POLY:
				        $$$(GJX_editbox).style.height=(ws.height-193)+'px';
						iHTML = editPoly(myo, myobjRef);
						break;
			} 	// fine switch (myobjNam)
			iHTML += '<div align="center">';
			iHTML += '<input style="width:100px;height:24px;background:transparent;background-image:url(images/gjx_sav.gif);background-repeat:no-repeat;font-weight:bold;text-align:right;padding:2px;padding-right:12px;" type="button" value="SALVA" onclick="if($$c(\'Sei sicuro di voler salvare i cambiamenti?\')) { savePlace(\''+myobjNam+'\', \''+myobjRef+'\'); window.opener.document.editForm.elements[GJX_MAP_XML].value = GJX_myDoc.getXML(); }"/>';
			// closeEditBox(); alert('Mappa esportata sul record. Salvare il record per conservare le modifiche.');
			iHTML += '&nbsp;&nbsp;&nbsp;';
			iHTML += '<input id="closingbutton" name="closingbutton" style="width:100px;height:24px;background:transparent;background-image:url(images/gjx_cancel.gif);background-repeat:no-repeat;font-weight:bold;text-align:right;padding:2px;" type="button" value="ANNULLA" onclick="closeEdit(\''+myobjNam+'\', \''+myobjRef+'\');"/>';
			iHTML += '</div>';
		}
 }
	myedit.innerHTML = iHTML;

	showIconPos();
	window.onbeforeunload = onCloseWin;
}

function editIcon(myo, myobjRef) {
	centerLocation(myo);		// centro la mappa sull'icona cliccata
																					//alert("myo.src:"+myo.src);
	var iconArray = GJX_iconArray;
	
	var iHTML = '<div style="padding:5px;">';
	iHTML += '<div onmouseover="helpme(\'pIcon\');" onmouseout="helpme();">';
	iHTML += '<div class="editboxitem" id="editLegend">ICONA ['+myobjRef+']</div>';
	iHTML += '<div style="border:0px solid black; margin-bottom:5px;">';
	iHTML += '<table width="100%" height="44px" valign="absmiddle">';
	//iHTML += '<tr><td align="center" valign="absmiddle"><div style="width:42px; height:42px; overflow:hidden;"><img id="icoSel" src="icons/'+myo.src+'"/></div></td>';
	iHTML += '<tr><td align="center" valign="absmiddle"><div style="width:42px; height:42px; overflow:hidden;"><img id="icoSel" src="'+myo.src+'"/></div></td>';
	iHTML+= '<td><label>Lat: </label><span style="font-size:0.8em;" id="tlat">'+myo.lat+'</span><br/>';
	iHTML += '<label>Lng: </label><span style="font-size:0.8em;" id="tlng">'+myo.lng+'</span></td></tr>';
	iHTML += '<tr style="display:none;"><td><label>Nome file<label></td><td><span id="tico">'+myo.src+'</span> (<span id="ticow">'+myo.width+'</span>x<span id="ticoh">'+myo.height+'</span>)</td></tr>';
	iHTML += '</table>';
	iHTML += '</div>';
	iHTML += '<div class="iconList">';
//	iHTML += '<input type="image" src="icons/defmarker.png" value="default" onclick="updateIcoS(this,\'tico\',\'icoSel\',\'ticow\',\'ticoh\');"/>';

	for (var k=0; k<iconArray.length; k++) {
		iHTML += '<input type="image" width="'+iconArray[k].width+'" height="'+iconArray[k].height+'" src="'+iconArray[k].icon+'" onclick="updateIcoS(this,\'tico\',\'icoSel\',\'ticow\',\'ticoh\');"/>';		//alert('icon:'+iconArray[k].icon);
 	}
	iHTML += '</div></div></div>';
	return(iHTML);
}

function editInfo(myo, myobjRef) {
	var loc = myobjRef.split('/')[0];
	var myoIcon = GJX_myDoc.getObject(GJX_ICON, loc+'/0');		//centro rispetto alla prima icona della locazione con l'informazione cliccata
	centerLocation(myoIcon);
	
	var labelMod = '';
	if (GJX_myDoc.getPlace(loc).infoNum() < 2)		// disabilito l'input se ho 1 solo campo informativo
		labelMod = ' disabled="disabled"';
	
	var iHTML = '<div style="padding:5px;">';
	iHTML += '<div onmouseover="helpme(\'pInfo\');" onmouseout="helpme();">';
	iHTML += '<div class="editboxitem" id="editLegend">INFORMAZIONE ['+myobjRef+']</div>';
	iHTML += '<div><label>Etichetta</label></div>';
	iHTML += '<input'+labelMod+' type="text" name="icaption" id="icaption" style="width:288px;" value="'+myo.caption+'" maxlength="20" onchange="modified();"/>';		// lunghezza MASSIMA posta a 20 caratteri (era 11)
	iHTML += '<div><label>Contenuto</label></div>';
	iHTML += '<textarea name="icontent" id="icontent" style="width:288px; font-size:0.9em;" rows="8" onkeydown="onReturn(this, event);" onchange="modified();">'+myo.content+'</textarea>';
	iHTML += '</div></div>';
	return(iHTML);
}

function editPoly(myo, myobjRef) {
	var filled = '';
	if (myo.filled)	filled =' checked="true"';
	var closure = '';
	if (myo.closure) closure = ' checked="true"';
	var color = myo.color;
	var size = myo.size;
	var alpha = myo.alpha;
	
	if (myo.hasPoints()) {
		centerLocation(myo.points[0]);
	}

	var iHTML = '<div style="padding:5px;">';
	iHTML += '<div onmouseover="helpme(\'pPoly\');" onmouseout="helpme();">';
	iHTML += '<div class="editboxitem" id="editLegend">POLIGONO ['+myobjRef+']</div>';
	iHTML += '<table width="99%">';
	iHTML += '<tr><td><label>Colore</label><br/>';
	iHTML += '<select name="pcolor" id="pcolor" style="width:100%;; color:'+color+'; background-color:'+color+'; width:100%;" onchange="modified(\'poly\');">';
	var colorArray = new Array('#0000FF','#0080FF','#00FFFF','#00FF00','#00BF00','#F9D900','#FFFF00','#FF8000',
							   '#D05000','#915000','#AB2F54','#FF0000','#FF00FF','#C000FF','#8000FF','#000000');
	for (var k=0; k<colorArray.length; k++) {
		iHTML += '<option value="'+colorArray[k]+'" style="width:100%;; color:'+colorArray[k]+'; background-color:'+colorArray[k]+'; width:100%;" onclick="selColor(this,\'pcolor\');"';
		if (colorArray[k] == color)
			iHTML += ' selected="true"';
		iHTML += '>.</option>';
	}
	iHTML += '</select>';
	iHTML += '</td><td><label>Spessore</label><br/>';
	iHTML += '<select name="psize" id="psize" style="width:100%;;" onchange="modified(\'poly\');">';
	var sizeArray = new Array('1','3','5','7','9','11');
	for (var k=0; k<sizeArray.length; k++) {
		iHTML += '<option value="'+sizeArray[k]+'"';
		if (sizeArray[k] == size)
			iHTML += ' selected="true"';
		iHTML += '>'+sizeArray[k]+' punti</option>';
	}
	iHTML += '</select>';
	iHTML += '</td><td><label>Trasparenza</label></div>';
	iHTML += '<select name="palpha" id="palpha" style="width:100%;;" onchange="modified(\'poly\');">';
	var alphaArray = new Array('0.8','0.6','0.4','0.2');
	var alphaLabel = new Array('Bassissima','Bassa','Media','Alta');
	for (var k=0; k<alphaArray.length; k++)	{
		iHTML += '<option value="'+alphaArray[k]+'"';
		if (alphaArray[k] == alpha)
			iHTML += ' selected="true"';
		iHTML += '>'+alphaLabel[k]+'</option>';
	}
	iHTML += '</select></td></tr>';
	iHTML += '</table><table width="99%">';
	iHTML += '<tr><td><input type="checkbox" name="pfilled" id="pfilled" value=""'+filled+' onchange="modified(\'poly\');"/><label>Riempimento</label></td>';
	iHTML += '<td><input type="checkbox" name="pclosure" id="pclosure" value=""'+closure+' onchange="modified(\'poly\');"/><label>Chiusura</label></td></tr>';
	iHTML += '</table></div></div>';
	return(iHTML);
}

function getWindowSize() {
  var myWidth = 0, myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
  return {width:myWidth,height:myHeight};
}

function resizeIT() {
	var ws=getWindowSize();
	$$$('areaplace').style.width=(ws.width-325)+'px';
	$$$('areaplace').style.height=ws.height+'px';
	$$$('eggmap').style.width=(ws.width-343)+'px';
	$$$('contgmap').style.width=(ws.width-325)+'px';
	$$$('sugg').style.width=(ws.width-325)+'px';
	var chk = $$$('infoenabled'+'chk');
	if (chk.checked) {
		$$$('eggmap').style.height=(ws.height-205)+'px';
		$$$('contgmap').style.height=(ws.height-160)+'px';
	}
	else {
		$$$('eggmap').style.height=(ws.height-75)+'px';
		$$$('contgmap').style.height=(ws.height-30)+'px';
	}

	if ($$$('editField').style.display == 'block') {
	    window.setTimeout(function(){
		    var what=''+$$$('editLegend').innerHTML;
		    if (what.indexOf('MAP')>=0) {
		    	$$$(GJX_editbox).style.height=(ws.height-305)+'px';
		    }
		    else if (what.indexOf('ICON')>=0) {
		    	$$$(GJX_editbox).style.height=(ws.height-319)+'px';
		    }
		    else if (what.indexOf('INFO')>=0) {
		    	$$$(GJX_editbox).style.height=(ws.height-324)+'px';
		    }
		    else if (what.indexOf('POLI')>=0) {
		    	$$$(GJX_editbox).style.height=(ws.height-193)+'px';
		    }
		},0);
	}
	else {
	    $$$(GJX_editbox).style.height=(ws.height-30)+'px';
	}
}
window.onresize = resizeIT;

function helpmeStatus(t) {
	var ws=getWindowSize();
	var chk = $$$(t.id+'chk');
	if (!chk.checked) {
	    chk.checked=true;
	    t.src="images/gjx_down.gif";
	    t.title="Disabilita l'aiuto contestuale";
		$$$('sugg').style.height='160px';
		$$$('eggmap').style.height=(ws.height-205)+'px';
		$$$('contgmap').style.height=(ws.height-160)+'px';
	}
	else {
		chk.checked=false;
		t.src="images/gjx_up.gif";
		t.title="Abilita l'aiuto contestuale";
		$$$('sugg').style.height='30px';
		$$$('eggmap').style.height=(ws.height-75)+'px';
		$$$('contgmap').style.height=(ws.height-30)+'px';
	}
	GJX_map.checkResize();
	GJX_centerPoint.setPoint(GJX_map.getCenter());
}
function helpme(html) {
	if ($$$("infoenabledchk").checked) {
		var myHTML = html || 'tutorial';		// default = tutorial.html
		$$$("suggest").src="tutorial/"+myHTML+".html";
 	}
}

function initPosition(gmap, xmlObj) {
	gmap.setCenter(new GLatLng(xmlObj.config.lat,xmlObj.config.lng));
	gmap.setZoom(xmlObj.config.zoomlev);
}

// ###################### OGGETTO DOCUMENTO XML (RADICE) ######################
function objXMLdoc(XSDfile, XMLencoding, configuration, placesArray) {
	this.__ver__ = GJX_mapVersion;
	this.XSDfile = XSDfile || '';
	this.encoding = XMLencoding || 'ISO-8859-1';		// ho messo come default iso-8859-1
	this.config = configuration || new objConfig();
	this.places  = placesArray || new Array();
}
	objXMLdoc.prototype.getXML = function() {
		var myContent = '';
		myContent += '<?xml version="1.0"';
		if (this.encoding != '')
			myContent += ' encoding="'+this.encoding+'"';
		myContent += '?>'+"\n";			//UTF-8"?>'+"\n";
		myContent += '<map';
		if (this.XSDfile != '') {
			myContent += ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"';
			myContent += ' xsi:noNamespaceSchemaLocation="'+this.XSDfile+'"';
		}
		myContent += '>'+"\n";
		
		myContent += this.config.getXML();
		
		for (var i=0; i<this.places.length; i++)
			myContent += this.places[i].getXML();
			
		myContent += '</map>'+"\n";
		return (myContent);
	}
	objXMLdoc.prototype.addPlace = function(newPlace) {
		this.places.push(newPlace || new objPlace());
	}
	objXMLdoc.prototype.removePlace = function(placeIdx) {
		this.places.splice(placeIdx,1);
	}
	objXMLdoc.prototype.modifyPlace = function(placeIdx) {
		this.getPlace(placeIdx).modifyObject(objName, fieldArray);
	}
	objXMLdoc.prototype.getPlace = function(placeIdx) {
		if (placeIdx>=0 && placeIdx<this.placeNum())
			return(this.places[placeIdx]);
		else
			return(null);
	}
	objXMLdoc.prototype.placeNum = function() {
		return (this.places.length);
	}
	objXMLdoc.prototype.showGMap = function(gmap, init) {
		if (gmap) {
			gmap.clearOverlays();
			if (init!=null)
				initPosition(gmap, this);
			GJX_centerPoint = putIcon(GJX_map, gmap.getCenter(), 'images/pointer.gif', GJX_centerP, GJX_centerP, null);
			for (var i=0; i<this.places.length; i++)
				this.places[i].showGMap(gmap);
			return true;
		}
		else {
			return false;
		}
	}
	objXMLdoc.prototype.showEdit = function(opath) {		//alert(opath);
		if (opath == '') {
			opath = 'icona_0/0';
		}
		var splitter1 = opath.split('_');
		var oType     = splitter1[0];
		var splitter2 = splitter1[1].split('/');
		var oPlace    = splitter2[0];
		var oItem     = splitter2[1];
		var display   = 'divhide';
		var mypic     = 'gjx_add';
		var mycode = '<div class="divobj itemGen item0" id="mappa" onmouseover="helpme(\'mappa\');" onmouseout="helpme();">';
			mycode += '<div class="rightButtons">';
				mycode += '<input onclick="cleanMap();" type="image" src="images/gjx_del.gif" title="Clicca per svuotare la mappa"/>';
				mycode += '<input onclick="newObject(this);" type="image" src="images/gjx_new.gif" title="Clicca per aggiungere una locazione"/>';
			mycode += '</div>';
			mycode += '<a><div onclick="editItem(\'mappacfg\');" class="rightButtonsMargin labelpadtop"><label class="mylink" title="Modifica le caratteristiche della mappa">MAPPA</label></div></a>'
		mycode += '</div>';
		mycode += '<div class="divshow">';
		for (var i=0; i<this.placeNum(); i++) {
			if (i == oPlace) {
				mypic 	= 'gjx_sub';
				display = 'divshow';
			}
			else {
				mypic 	= 'gjx_add';
				display = 'divhide';
			}
			mycode += '<div class="divobj itemGen item1" id="place_'+i+'" onmouseover="helpme(\'locazioni\');" onmouseout="helpme();">';
				mycode += '<div class="rightButtons">';
			        mycode += '<input onclick="deleteItem(this);" type="image" src="images/gjx_del.gif" title="Clicca eliminare la locazione"/>';
			        mycode += '<image src="images/gjx_trs.gif" />';
				mycode += '</div>';
				mycode += '<div class="leftButton">';
					mycode += '<input onclick="showhide(this);" type="image" src="images/'+mypic+'.gif" title="Clicca per espandere/contrarre"/>';
				mycode += '</div>'
				mycode += '<div class="leftButtonMargin labelpadtop"><label style="color:#333;">LOCAZIONE ['+i+']</label></div>';
			mycode += '</div>';
			mycode += '<div class="'+display+'">';
				mycode += this.getPlace(i).showEdit(i, oType);
			mycode += '</div>';
		}
		mycode += '</div>';
		return (mycode);
	}
	objXMLdoc.prototype.getObject = function(item, Opath) {
		var placeIdx = Opath.toString().split('/')[0];
		var placeObj = this.getPlace(placeIdx);
		var ret = null;
		if (placeObj!=null) {
			ret = placeObj.getObject(item, Opath)
		}
		if (ret != null)
			return(ret);
		else
			$$a('[objXMLdoc]>>Error: type['+item+'_'+Opath+'] not valid!');
		return(null);
	}
	
function objConfig(lat,lng,zlev,wid,hei,ctrl,zoom,ahyb,mtype,oview,drag) {
	this.lat 	   = lat   || 41.89018613438137;
	this.lng 	   = lng   || 12.492291927337646;
	this.zoomlev  = zlev  || 13;
	this.width    = wid   || 580;
	this.height   = hei   || 320;
	this.controls = ctrl  || 1;
	this.zoomable = zoom  || 'true';
	this.ahybrid  = ahyb  || 'false';
	this.maptypes = mtype || 'true';
	this.overview = oview || 'false';
	this.draggable= drag  || 'true';
}
	objConfig.prototype.getXML = function() {
	    var myContent = '';
	    myContent += '<config>'+"\n";
	    myContent += '   <center lat="'+this.lat+'" lng="'+this.lng+'" zoom="'+this.zoomlev+'" />'+"\n";
	    myContent += '   <view width="'+this.width+'" height="'+this.height+'" />'+"\n";
	    myContent += '   <options>'+"\n";
	    myContent += '      <controls>'+this.controls+'</controls>'+"\n";
	    myContent += '      <zoomable>'+this.zoomable+'</zoomable>'+"\n";
	    myContent += '      <autohybrid>'+this.ahybrid+'</autohybrid>'+"\n";
	    myContent += '      <maptypes>'+this.maptypes+'</maptypes>'+"\n";
	    myContent += '      <overview>'+this.overview+'</overview>'+"\n";
	    myContent += '      <draggable>'+this.draggable+'</draggable>'+"\n";
	    myContent += '   </options>'+"\n";
	    myContent += '</config>'+"\n";
	    return (myContent);
	}

function objPlace(iconArray, info, polyArray) {
	this.icon = iconArray || new Array();
	this.info = info || new objInfo();
	this.poly = polyArray || new Array();
}
	objPlace.prototype.getXML = function() {
		var myContent = '';
		myContent += '<place>'+"\n";
		for (var i=0; i<this.icon.length; i++)
			myContent += this.icon[i].getXML();
		myContent += this.info.getXML();
		for (var i=0; i<this.poly.length; i++)
			myContent += this.poly[i].getXML();
		myContent += '</place>'+"\n";
		return (myContent);
	}
	objPlace.prototype.getOverlays = function()	{
		var overlays = Array();
		for (var i=0; i<this.icon.length; i++)
			overlays.push(this.icon[i].overlay);
		for (var i=0; i<this.poly.length; i++)
			overlays.push(this.poly[i].overlay);
		return (overlays);
	}
	objPlace.prototype.showEdit = function(ibase, oType) {
		var mycode = '';
		
		var display = 'divhide';
		var mypic   = 'gjx_add';
		if (oType == 'icona') {
			display = 'divshow';
			mypic   = 'gjx_sub';
		}
		mycode += '<div class="divobj itemGen item2" id="icone_'+ibase+'" onmouseover="helpme(\'icone\');" onmouseout="helpme();">';
		mycode += '<div class="rightButtons"><input onclick="newObject(this);" type="image" src="images/gjx_new.gif"title="Clicca per aggiungere un icona"/></div>';
		mycode += '<div class="leftButton">';
		if (this.icon.length > 0)
			mycode += '<input onclick="showhide(this);" type="image" src="images/'+mypic+'.gif" title="Clicca per espandere/contrarre"/>';
		else
			mycode += '<img style="margin-left:2px;" src="images/gjx_nosub.gif" title="Cartella vuota"/>';
		mycode += '</div><div class="leftButtonMargin rightButtonsMargin labelpadtop"><label>ICONE ['+ibase+']</label></div></div>';
		mycode += '<div class="'+display+'">';
		for (var i=0; i<this.icon.length; i++)
			mycode += this.icon[i].showEdit(ibase+'/'+i);
		mycode += '</div>';
		
		if (oType == 'informazione') {
			display = 'divshow';
			mypic   = 'gjx_sub';
		}
		mycode += '<div class="divobj itemGen item2" id="info_'+ibase+'" onmouseover="helpme(\'informazioni\');" onmouseout="helpme();">';
		mycode += '<div class="rightButtons"><input onclick="newObject(this);" type="image" src="images/gjx_new.gif" title="Clicca per aggiungere un informazione"/></div>';
		mycode += '<div class="leftButton">';
		if (this.info.infoNum() > 0)
			mycode += '<input onclick="showhide(this);" type="image" src="images/'+mypic+'.gif" title="Clicca per espandere/contrarre"/>';
		else
			mycode += '<img style="margin-left:2px;" src="images/gjx_nosub.gif" title="Cartella vuota"/>';
		mycode += '</div><div class="leftButtonMargin rightButtonsMargin labelpadtop"><label>INFORMAZIONI ['+ibase+']</label></div></div>';
		mycode += '<div class="'+display+'">';
			mycode += this.info.showEdit(ibase);
		mycode += '</div>';
		
		if (oType == 'poligono') {
			display = 'divshow';
			mypic   = 'gjx_sub';
		}
		mycode += '<div class="divobj itemGen item2" id="poly_'+ibase+'" onmouseover="helpme(\'poligoni\');" onmouseout="helpme();">';
		mycode += '<div class="rightButtons"><input onclick="newObject(this);" type="image" src="images/gjx_new.gif" title="Clicca per aggiungere un poligono"/></div>';
		mycode += '<div class="leftButton">';
		if (this.poly.length > 0)
			mycode += '<input onclick="showhide(this);" type="image" src="images/'+mypic+'.gif" title="Clicca per espandere/contrarre"/>';
		else
			mycode += '<img style="margin-left:2px;" src="images/gjx_nosub.gif" title="Cartella vuota"/>';
		mycode += '</div><div class="leftButtonMargin rightButtonsMargin labelpadtop"><label>POLIGONI ['+ibase+']</label></div></div>';
		mycode += '<div class="'+display+'">';
		for (var i=0; i<this.poly.length; i++)
			mycode += this.poly[i].showEdit(ibase+'/'+i);
		mycode += '</div>';
		return (mycode);
	}
	objPlace.prototype.removeItem = function(itemName, itemIdx)	{
		switch (itemName) {
			case GJX_ICON:
							this.icon.splice(itemIdx,1);
							break;
			case GJX_INFO:
							this.info.removeTab(itemIdx);
							break;
			case GJX_POLY:	//'poligono'
							this.poly.splice(itemIdx,1);
							break;
		}
	}
	objPlace.prototype.addIcon = function(myIcon) {
		this.icon.push(myIcon || new objIcon());
	}
	objPlace.prototype.getIcon = function(myIdx) {
		if (myIdx>=0 && myIdx<this.iconNum())
			return(this.icon[myIdx]);
		else
			return(null);
	}
	objPlace.prototype.iconNum = function()	{
		return (this.icon.length);
	}
	objPlace.prototype.addInfo = function(myInfo) {
	    if (this.icon.length < 1)
			this.addIcon();
		this.info.addTab(myInfo);
	}
	objPlace.prototype.getInfo = function(myIdx) {
		if (myIdx>=0 && myIdx<this.infoNum())
			return(this.info.getInfo(myIdx));
		else
			return(null);
	}
	objPlace.prototype.infoNum = function() {
		return (this.info.infoNum());
	}
	objPlace.prototype.addPoly = function(myPoly) {
		this.poly.push(myPoly || new objPoly());
	}
	objPlace.prototype.getPoly = function(myIdx) {
		if (myIdx>=0 && myIdx<this.polyNum())
			return(this.poly[myIdx]);
		else
			return(null);
	}
	objPlace.prototype.polyNum = function() {
		return (this.poly.length);
	}
	objPlace.prototype.getObject = function(item, Opath) {
		var myIdx = Opath.toString().split('/')[1];
		if (item == GJX_ICON)
			return (this.getIcon(myIdx));
		else if (item == GJX_INFO)
			return (this.getInfo(myIdx));
		else if (item == 'poligono') {
			return (this.getPoly(myIdx));
		}
		else {
			$$a('[objPlace]>>Error: type['+item+'_'+Opath+'] not valid!');
			return(null);
		}
	}
	objPlace.prototype.showGMap = function(gmap) {
		for (var i=0; i<this.icon.length; i++)
			this.icon[i].showGMap(gmap, this.info.getTabArray());
		for (var i=0; i<this.poly.length; i++)
			this.poly[i].showGMap(gmap);
		return (true);
	}

function objIcon (lat, lng, src, wid, hei) {
	this.lat 	 	= lat || 0;
	this.lng 	 	= lng || 0;
	this.src 	 	= src || GJX_iconArray[0].icon;
	this.width 	= wid || GJX_iconArray[0].width;
	this.height 	= hei || GJX_iconArray[0].height;
	this.opath   	= '';
}
	objIcon.prototype.getXML = function() {
		var myContent = '';
		myContent += "   "+'<icon';
		myContent += ' lat="'+this.lat+'"';
		myContent += ' lng="'+this.lng+'"';
		if (this.src != "defmarker.png") {
			myContent += ' image="'+this.src+'"';
			myContent += ' width="'+this.width+'"';
			myContent += ' height="'+this.height+'"';
		}
		myContent += '/>'+"\n";
		return (myContent);
	}
	objIcon.prototype.showEdit = function(i) {
		var mycode = '<div class="divobj itemGen item3" id="icona_'+i+'" onmouseover="helpme(\'icone\');" onmouseout="helpme();">';
		this.opath = "icona_"+i;		//salvo l'opath nell'oggetto stesso
		mycode += '<div class="rightButtons">';
		mycode += '<input onclick="deleteItem(this);" type="image" src="images/gjx_del.gif" title="Clicca eliminare"/>';
		mycode += '<image src="images/gjx_trs.gif" />';
		mycode += '</div><a><div onclick="editItem(\''+this.opath+'\');" class="labelpadtop"><span clasS="hid"><label>Icona ['+i+']</label></span><span class="itemName">Icona ['+i+']</span></div></a></div>';
		return (mycode);
	}
	objIcon.prototype.showGMap = function(gmap, tabArray) {
		var place = new GLatLng(this.lat, this.lng);
		//var myico = putIcon(gmap, place, 'icons/'+this.src, this.width, this.height, tabArray, this.opath);
		var myico = putIcon(gmap, place, this.src, this.width, this.height, tabArray, this.opath);
		return (true);
	}
	
// ###################### OGGETTO INFORMAZIONE E OGGETTO FIGLIO TAB ###
function objInfo (infoArray) {
	this.info	 = infoArray || new Array();
}
	objInfo.prototype.getXML = function() {
		var myContent = '';
		if (this.info.length > 0) {
			myContent += "   "+'<info>'+"\n";
			for (var i=0; i<this.info.length; i++)
				myContent += this.info[i].getXML();
			myContent += "   "+'</info>'+"\n";
		}
		return (myContent);
	}
	objInfo.prototype.showEdit = function(ibase) {
		var mycode = '';
		for (var i=0; i<this.info.length; i++)
			mycode += this.info[i].showEdit(ibase+'/'+i);
		return (mycode);
	}
	objInfo.prototype.addTab = function(myTab) {
		if (this.infoNum() < 2)
			this.info.push(myTab || new objTab());
	}
	objInfo.prototype.getInfo = function(myIdx)	{
		if (myIdx>=0 && myIdx<this.infoNum())
			return(this.info[myIdx]);
		else
			return(null);
	}
	objInfo.prototype.infoNum = function() {
		return (this.info.length);
	}
	objInfo.prototype.removeTab = function(tabIdx) {
		if (this.infoNum() > 0)			//1)		// il minimo numero di info (tab) ora č 0
			this.info.splice(tabIdx,1);
	}
	objInfo.prototype.getTabArray = function() {
		var tabInfo = new Array();
		if (this.info.length > 0) {		// metto il contenuto solo se č presente!
			for(var i=0; i<this.info.length; i++)
				tabInfo.push(new GInfoWindowTab(this.info[i].caption, this.info[i].content));
		}
		return (tabInfo);
	}
	function objTab (caption, content) {
		this.caption = caption || '';
		this.content = content || '';
		this.opath = '';
	}
		objTab.prototype.getXML = function() {
			var myContent = '';
			myContent += "      "+'<tab>'+"\n";
			myContent += "         "+'<caption><![CDATA['+this.caption.htmlEncode()+']]></caption>'+"\n";
			myContent += "         "+'<content><![CDATA['+this.content.htmlEncode()+']]></content>'+"\n";
			myContent += "      "+'</tab>'+"\n";
			return (myContent);
		}
		objTab.prototype.showEdit = function(i) {
			var mycode = '<div class="divobj itemGen item3" id="informazione_'+i+'" onmouseover="helpme(\'informazioni\');" onmouseout="helpme();">';
			this.opath = "informazione_"+i;		//salvo l'opath nell'oggetto stesso
			mycode += '<div class="rightButtons">';
			mycode += '<input onclick="deleteItem(this);" type="image" src="images/gjx_del.gif" title="Clicca eliminare"/>';
			mycode += '<image src="images/gjx_trs.gif" />';
			mycode += '</div><a><div onclick="editItem(\''+this.opath+'\');" class="labelpadtop"><span clasS="hid"><label>Informazione ['+i+']</label></span><span class="itemName">Informazione ['+i+']</span></div></a></div>';
			return (mycode);
		}

//var GJX_POLYLIST = [];
		
// ###################### OGGETTO POLIGONO E OGGETTO FIGLIO PUNTO ###
function objPoly (color, size, alpha, filled, closure, pointsArray) {
	this.color 	 = color || '#0000FF';
	this.size	 	 = size || 3;
	this.alpha	 	 = alpha || 0.4;
	this.filled  	 = filled || false;
	this.closure 	 = closure || false;
	this.points  	 = pointsArray || new Array();
	this.drawpoints = pointsArray || new Array();
	this.opath 	 = '';
}
		objPoly.prototype.saveDrawPoints = function() {			// §
			this.points = this.drawpoints;
			for(var i=0; i<this.numDPoints(); i++) {
				this.points[i].lat = this.drawpoints[i].lat;
				this.points[i].lng = this.drawpoints[i].lng;
			}
		}
	objPoly.prototype.clearPoints = function() {
	    this.points = [];
	}
		objPoly.prototype.clearDPoints = function() {
			this.drawpoints = [];
		}
	objPoly.prototype.addPoint = function(lat, lng) {
		this.points.push(new objPoint(lat, lng));
	}
		objPoly.prototype.addDPoint = function(lat, lng) {
			this.drawpoints.push(new objPoint(lat, lng));
		}
	objPoly.prototype.hasPoints = function() {
		if (this.numPoints() > 0)
			return (true);
		return (false);
	}
		objPoly.prototype.hasDPoints = function() {
			if (this.numDPoints() > 0)
				return (true);
			return (false);
		}
	objPoly.prototype.numPoints = function() {
		return (this.points.length);
	}
		objPoly.prototype.numDPoints = function() {
			return (this.drawpoints.length);
		}
	objPoly.prototype.getXML = function() {
		var myContent = '';
		if (this.hasPoints()) {
			myContent += "   "+'<poly';
			  myContent += ' color="'+this.color+'"';
			  myContent += ' size="'+this.size+'"';
			  myContent += ' alpha="'+this.alpha+'"';
			  myContent += ' filled="'+this.filled+'"';
			  myContent += ' closure="'+this.closure+'"';
			myContent += '>'+"\n";
			for (var i=0; i<this.points.length; i++)
				myContent += this.points[i].getXML();
			myContent += "   "+'</poly>'+"\n";
		}
		return (myContent);
	}
	objPoly.prototype.showEdit = function(i) {
		var mycode = '<div class="divobj itemGen item3" id="poligono_'+i+'" onmouseover="helpme(\'poligoni\');" onmouseout="helpme();">';
		this.opath = "poligono_"+i;			//salvo l'opath nell'oggetto stesso
		mycode += '<div class="rightButtons">';
		mycode += '<input onclick="deleteItem(this);" type="image" src="images/gjx_del.gif" title="Clicca eliminare"/>';
		mycode += '<image src="images/gjx_trs.gif" />';
		mycode += '</div><a><div onclick="editItem(\''+this.opath+'\');" class="labelpadtop"><span clasS="hid"><label>Poligono ['+i+']</label></span><span class="itemName">Poligono ['+i+']</span></div></a></div>';
		return (mycode);
	}
	objPoly.prototype.getPolyArray = function()	{
		var polyArr = new Array();
		for (var i=0; i<this.points.length; i++)
			polyArr.push(this.points[i].getCoords());
		return(polyArr);
	}
	objPoly.prototype.showGMap = function(gmap, editing) {
	    editing = editing || false;
		if (this.hasPoints()) {
			var p = new Array();
			p['pc'] = this.color;
			p['ps'] = parseInt(this.size);
			p['pa'] = parseFloat(this.alpha);
			p['pf'] = this.filled;
			p['pl'] = this.closure;
			var polygons;
			var myPoly = this.getPolyArray();
			
			if (editing) {
			    for (var pt in this.points) {
				    this.points[pt].showGMap(gmap);
				}
			}
			
			if (p['pl']) {
				myPoly.push(this.points[0].getCoords());
			}
			if (p['pf']) {
				polygons = new GPolygon(myPoly, p['pc'], p['ps'], p['pa'], p['pc'], p['pa']);				
			}
			else {
				polygons = new GPolyline(myPoly, p['pc'], p['ps'], p['pa']);
			}
			//GJX_POLYLIST.push(polygons);
			// ### CLICKABLE ###
			gmap.addOverlay(polygons);
		}
		return (true);
	}
	function objPoint (lat, lng) {
		this.lat = lat || 0;
		this.lng = lng || 0;
	}
		objPoint.prototype.getXML = function() {
			var myContent = '';
			myContent += "      "+'<point';
			myContent += ' lat="'+this.lat+'"';
			myContent += ' lng="'+this.lng+'"';
			myContent += '/>'+"\n";
			return (myContent);
		}
		objPoint.prototype.getCoords = function() {
			return(new GLatLng(this.lat, this.lng));
		}
		objPoint.prototype.showGMap = function(gmap) {
			var place = new GLatLng(this.lat, this.lng);
			var myico = putIcon(gmap, place, 'images/vertex.gif', 9, 9, new Array(), null, 2);
		}

function Trim() {return this.replace(/\s+$|^\s+/g,"");}
function LTrim(){return this.replace(/^\s+/,"");}
function RTrim(){return this.replace(/\s+$/,"");}
String.prototype.Trim = Trim;
String.prototype.RTrim = RTrim;
String.prototype.LTrim = LTrim;

function $rat(node, attr, defValue, numeric) {
	var attribute = defValue;
	if (node.getAttribute(attr) != null) {
		if (numeric == true)
			attribute = parseFloat(node.getAttribute(attr));
		else
			attribute = node.getAttribute(attr);
	}
	return (attribute);
}

function checkBounds() {
	if (! GJX_mapBounds.containsBounds(GJX_map.getBounds()))
		GJX_map.returnToSavedPosition();
	else
		GJX_map.savePosition();
}

function putIcon (gmap, position, iconFile, width, height, infoTabs, opath, notDraggable) {
	notDraggable = notDraggable || null;
	var icona = new GIcon();
	if (iconFile && width && height) {
		icona.image 		   = iconFile;
		icona.iconSize 		   = new GSize(width, height);
		
		/*if (notDraggable!=false || notDraggable>0) {
		    if (notDraggable==2)
				icona.iconAnchor 	   = new GPoint(width/2, height/2);
			else
   				icona.iconAnchor 	   = new GPoint(width-1, height-1);
		}
		else {
			icona.iconAnchor 	   = new GPoint(width/2, height-1);
		}
		icona.infoWindowAnchor = new GPoint(width/2, height-2);*/
		icona.iconAnchor 	   = new GPoint(Math.round(width/2), Math.round(height/2));
		icona.infoWindowAnchor = new GPoint(Math.round(width/2), Math.round(height/2));
	}
	var inerte = false;
	if (infoTabs &&infoTabs.length > 0)
		inerte = true;
	var marker;
//	if (notDraggable) {
		marker = new GMarker(position, {icon:icona});
		marker.opath = opath;
/*	}
	else {
		marker = new GMarker(position, {icon:icona, draggable:true});
		marker.opath = opath;
		/ *GEvent.addListener(marker, 'dragstart',
					function() { //alert('x')
						if (marker.opath) {
							editItem(marker.opath);
							$$$(GJX_editbox).innerHTML = GJX_myDoc.showEdit(marker.opath);
							colorizeIt(marker.opath);
						}
					});* /
	    GEvent.addListener(marker, 'dragend',
					function() { //alert(marker);
/ *						if ($$$('editField').style.display == 'block') {
						    if ($$$('editLegend')!=null) {
								if ($$$('editLegend').innerHTML.indexOf('Icona')!=-1) {
									if (marker.opath) {
										editItem(marker.opath);
										$$$(GJX_editbox).innerHTML = GJX_myDoc.showEdit(marker.opath);
										colorizeIt(marker.opath);
									}
								    //coordSave(marker.getLatLng()); alert('ok')
								}
							}
						}* /
					});
	}
*/
	
	GEvent.addListener(marker, 'click',
						function() {
							if (marker.opath) {
							    //if (!isEditIcon()) {	//(GJX_lastPoint == null) {
									editItem(marker.opath);
									$$$(GJX_editbox).innerHTML = GJX_myDoc.showEdit(marker.opath);
									colorizeIt(marker.opath);
								//}
							}
							if (inerte) {
								marker.openInfoWindowTabsHtml(infoTabs);
							}
						});

	
	gmap.addOverlay(marker);
	return (marker);
}

function getPolyParms() {
	var polyparm = new Array();
	polyparm['pc'] = $$$('pcolor').value;
	polyparm['ps'] = parseInt($$$('psize').value);
	polyparm['pa'] = parseFloat($$$('palpha').value);
	polyparm['pf'] = $$$('pfilled').checked;
	polyparm['pl'] = $$$('pclosure').checked;
	return(polyparm);
}

function showIconPos() {
	if (GJX_icoPos!=null) {
		GJX_map.removeOverlay(GJX_icoPos);
	}
	if (isEditIcon()) {
		var iw = $$$('ticow').innerHTML;
		var ih = $$$('ticoh').innerHTML;
		var iv = new Array();
		var cp = GJX_map.fromLatLngToDivPixel(GJX_map.getCenter());
		iv.push(GJX_map.fromDivPixelToLatLng(new GPoint(Math.ceil(cp.x-iw/2)-1,Math.round(cp.y-ih/2))));
		iv.push(GJX_map.fromDivPixelToLatLng(new GPoint(Math.floor(cp.x+iw/2),Math.round(cp.y-ih/2))));
		iv.push(GJX_map.fromDivPixelToLatLng(new GPoint(Math.floor(cp.x+iw/2),Math.round(cp.y+ih/2))));
		iv.push(GJX_map.fromDivPixelToLatLng(new GPoint(Math.ceil(cp.x-iw/2)-1,Math.round(cp.y+ih/2))));
		iv.push(GJX_map.fromDivPixelToLatLng(new GPoint(Math.ceil(cp.x-iw/2)-1,Math.round(cp.y-ih/2))));
        GJX_icoPos = new GPolyline(iv,'#000CCC',2,0.5);
        GJX_map.addOverlay(GJX_icoPos);
	}
	else {
		GJX_icoPos = null;
	}
}

function loadmap(GJX_mapID) {
	//GJX_POLYLIST = [];
	//, GJX_mapDragging, GJX_mapControl, GJX_mapType, GJX_mapOverview
	var GJX_mapDragging	= GJX_myDoc.config.draggable;
	var GJX_mapControl 	= GJX_myDoc.config.controls;
	var GJX_mapType    	= GJX_myDoc.config.maptypes;
	var GJX_mapOverview	= GJX_myDoc.config.overview;

	var GJX_mapZoom     = GJX_myDoc.config.zoomlev;
	var GJX_minZoom     = 8;
	var GJX_maxZoom     = 18;
	if (''+GJX_myDoc.config.zoomable=='false') {
		GJX_minZoom = GJX_mapZoom;
		GJX_maxZoom = GJX_mapZoom;
	}

	var GJX_hybridZoom = 14;
	if (''+GJX_myDoc.config.hybridZoom=='false') {
	    GJX_hybridZoom = GJX_maxZoom+1;
	}

	var GJX_mapCenterLat = GJX_myDoc.config.lat;
	var GJX_mapCenterLng = GJX_myDoc.config.lng;

	if (GBrowserIsCompatible())	{
		GJX_map = new GMap2($$$(GJX_mapID), {draggableCursor:'crosshair', draggingCursor:'move'});
		var centerPos = new GLatLng(GJX_mapCenterLat,GJX_mapCenterLng);			//new GLatLng(GJX_centerLat, GJX_centerLng);
		GJX_mapCenter = centerPos;
		//GJX_mapZoom = GJX_zoom;

		//GJX_map.setCenter(centerPos, GJX_zoom-1);
		//GJX_mapBounds = GJX_map.getBounds();
		GJX_map.setCenter(centerPos, GJX_zoom);

		GJX_geo = new GClientGeocoder();

		//GKeyboardHandler(GJX_map);

		if (''+GJX_mapDragging == 'false')		GJX_map.disableDragging();
		if (GJX_mapControl  == 1)				GJX_map.addControl(new GSmallMapControl());
		if (GJX_mapControl  == 2)				GJX_map.addControl(new GLargeMapControl());
		if (GJX_mapType     == 1)				GJX_map.addControl(new GMapTypeControl());
		if ((''+GJX_mapOverview == 'true') && (''+GJX_mapDragging == 'true'))			GJX_map.addControl(new GOverviewMapControl());

		GJX_map.enableContinuousZoom();
			//GJX_map.enableScrollWheelZoom();  // se la abilito fa cessare la funzionalitą di visualizzazione linee in creazione poligoni
		//GJX_map.disableInfoWindow();
		//GJX_map.disableDoubleClickZoom(); // NON VA!!

		//GJX_centerPoint = putIcon(GJX_map, centerPos, 'images/pointer.gif', GJX_centerP, GJX_centerP, null, null, true);

		/************************************** PERSONALIZZAZIONE FORUM_CENTER ************************************************/
		GJX_map.setMapType(G_SATELLITE_MAP);
		/*
		var minZoom = GJX_minZoom;				//8;
		var maxZoom = GJX_maxZoom;				//18;	// 17;
		var hybridZoom = GJX_hybridZoom;		//24;	// 14;
		GEvent.addListener(GJX_map, 'zoomend',	function() {
				if (GJX_map.getZoom() < minZoom)		GJX_map.setZoom(minZoom);
				if (GJX_map.getZoom() > hybridZoom)	GJX_map.setMapType(G_HYBRID_MAP);
				if (GJX_map.getZoom() <= hybridZoom)	GJX_map.setMapType(G_NORMAL_MAP);
				if (GJX_map.getZoom() > maxZoom)		GJX_map.setZoom(maxZoom);
				//checkBounds();
			}
		);
		*/
	}
}

// === A method for testing if a point is inside a polygon	 
// === Returns true if poly contains point
// === Algorithm shamelessly stolen from http://alienryderflex.com/polygon/ 
/*GPolygon.prototype.Contains = function(point) {
	var j=0;
	var oddNodes = false;
	var x = point.lng();
	var y = point.lat();
	for (var i=0; i < this.getVertexCount(); i++) {
		j++;
		if (j == this.getVertexCount()) {j = 0;}
		if (((this.getVertex(i).lat() < y) && (this.getVertex(j).lat() >= y)) || ((this.getVertex(j).lat() < y) && (this.getVertex(i).lat() >= y))) {
			if ( this.getVertex(i).lng() + (y - this.getVertex(i).lat()) /  (this.getVertex(j).lat()-this.getVertex(i).lat()) *  (this.getVertex(j).lng() - this.getVertex(i).lng())<x ) 	{
				oddNodes = !oddNodes
			}
		}
	}
	return oddNodes;
}*/
/*
bool pointInPolygon() {

  int      i, j=polySides-1 ;
  boolean  oddNodes=NO      ;

	for (i=0; i<polySides; i++) {
		if (polyY[i]<y && polyY[j]>=y
				||  polyY[j]<y && polyY[i]>=y) {
			if (polyX[i]+(y-polyY[i])/(polyY[j]-polyY[i])*(polyX[j]-polyX[i])<x) {
				oddNodes=!oddNodes;
			}
		}
		j=i;
	}

  return oddNodes; }
*/
/*
polyContains = function(poly,point) {
	var j=poly.getVertexCount()-1;
	var oddNodes = false;
	var x = point.lng();
	var y = point.lat();
	var polyX_i, polyX_j, polyY_i, polyY_j;
	for (var i=0; i < poly.getVertexCount(); i++) {
		polyX_i_ = poly.getVertex(i).lng();
		polyY_i_ = poly.getVertex(i).lat();
		polyX_j_ = poly.getVertex(j).lng();
		polyY_j_ = poly.getVertex(j).lat(); alert(polyX_i_+"\n"+polyY_i_+"\n"+polyX_j_+"\n"+polyY_j_);
		if (polyY_i_<y && polyY_j_>=y || polyY_j_<y && polyY_i_>=y) {
			if (polyX_i_+(y-polyY_i_)/(polyY_j_-polyY_i_)*(polyX_j_-polyX_i_)<x) {
				oddNodes = !oddNodes;
			}
		}
		j=i;
	}
	return oddNodes;
}
*/
function loadmap_editor(GJX_mapID, GJX_mapDragging, GJX_mapControl, GJX_mapType, GJX_mapOverview, GJX_defposition, GJX_editor_value) {
	//GJX_POLYLIST = [];
	window.onbeforeunload = onCloseWin;
	document.title = document.title+" ["+GJX_mapVersion+"]";
	
	if (GBrowserIsCompatible()) {
		$$$('mapback').visibility='hidden';
		GJX_map = new GMap2($$$(GJX_mapID), {draggableCursor:'crosshair', draggingCursor:'move'});	
		GJX_geo = new GClientGeocoder();
		
		GJX_mapZoom = GJX_zoom;
		var centerPos = new GLatLng(GJX_centerLat, GJX_centerLng);
		GJX_mapCenter = centerPos;
		/*GJX_map.setCenter(centerPos, GJX_zoom-1);
		GJX_mapBounds = GJX_map.getBounds();*/
		GJX_map.setCenter(centerPos, GJX_zoom);
		if (GJX_defposition!=null && GJX_defposition.length>0) {
			if (GJX_editor_value=='')
				setAddress(GJX_defposition);
		}
		else {
			$$$('mapback').visibility='visible';
		}
		
		//GKeyboardHandler(GJX_map);
		
		if (GJX_mapDragging == false)	GJX_map.disableDragging();
		if (GJX_mapControl  == 1)		GJX_map.addControl(new GSmallMapControl());
		if (GJX_mapControl  == 2)		GJX_map.addControl(new GLargeMapControl());
		if (GJX_mapType     == 1)		GJX_map.addControl(new GMapTypeControl());
		if (GJX_mapOverview == 1 && GJX_mapDragging == true) 	GJX_map.addControl(new GOverviewMapControl());
			
		GJX_map.enableContinuousZoom();
			//GJX_map.enableScrollWheelZoom();  // se la abilito fa cessare la funzionalitą di visualizzazione linee in creazione poligoni
		//GJX_map.disableInfoWindow();
		//GJX_map.disableDoubleClickZoom(); // NON VA!!

		GJX_centerPoint = putIcon(GJX_map, centerPos, 'images/pointer.gif', GJX_centerP, GJX_centerP, null, null, true);

		var minZoom = 8;
		var maxZoom = 18;		// 17;
		var hybridZoom = 24;	// 14;
		GEvent.addListener(GJX_map, 'zoomend',	function() {
		        if ((''+GJX_myDoc.config.ahybrid)=='true') {
					if (GJX_map.getZoom() < minZoom) 		GJX_map.setZoom(minZoom);
					if (GJX_map.getZoom() > hybridZoom) 	GJX_map.setMapType(G_HYBRID_MAP);
					if (GJX_map.getZoom() <= hybridZoom) 	GJX_map.setMapType(G_NORMAL_MAP);
					if (GJX_map.getZoom() > maxZoom)		GJX_map.setZoom(maxZoom);
					//checkBounds();
				}
			}
		);
		GEvent.addListener(GJX_map, "move",	function() {
								GJX_centerPoint.setPoint(GJX_map.getCenter());
								showIconPos();
							});
		/*GEvent.addListener(GJX_map, "moveend", function() {
								if ($$$('editField').style.display == 'block') {
			                        if ($$$('editLegend')!=null) {
										if ($$$('editLegend').innerHTML.indexOf('Mappa')!=-1) {
										    showZoneBorders();
										}
									}
								}
							});*/
				//GEvent.addListener(GJX_map, 'drag', checkBounds());
		realPoint = '';
		/*GEvent.addListener(GJX_map, "click", function(marker,point) {
								realPoint=point;
							});*/
		GEvent.addListener(GJX_map, "click", function(overlay,point) {
			realPoint=point;
			
			/*if (point) { alert('clicked');
				for (var i=0; i<GJX_POLYLIST.length; i++) { document.title="i: "+i+" - len:"+GJX_POLYLIST.length;
					if (polyContains(GJX_POLYLIST[i], point)) {
						alert(i);
					}
				}*/
				/*for (var i=0; i<polys.length; i++) {
					if (polys[i].Contains(point)) {
						map.openInfoWindowHtml(point,"Recorrer "+labels[i]);
						//i = 999; // Jump out of loop
					}
				}*/
			//}
		});
		GEvent.addListener(GJX_map, "dblclick", function(marker, point) {
								if ($$$('editField').style.display == 'block') {
								    if ($$$('editLegend')!=null) {
								      if ($$$('editLegend').innerHTML.indexOf('MAPPA')!=-1) {
										GJX_map.setCenter(realPoint);				//point);
									    coordSave(GJX_map.getCenter());
									    showZone();
									    	showZoneBorders();
									  }
									  else {
										if ($$$('editLegend').innerHTML.indexOf('ICONA')!=-1) {
										    coordSave(realPoint);					//point);
										}
										else {
											var s = $$$('editLegend').innerHTML;
											s = s.substr(10, 3);
											var myObj = GJX_myDoc.getObject('poligono', s); 		//$$a(myObj+"___"+myObj.hasPoints());

											if (myObj==null) {
											    alert("[ERROR] :: s:"+s);
											}
											if (myObj.hasPoints()) {
											    myObj.clearPoints();
											    myObj.clearDPoints();
                                                GJX_myDoc.showGMap(GJX_map);
											}
											if (!(GJX_firstPoint==null && myObj.hasDPoints()==true)) { 		// && myObj.hasDPoints()==true))
											    if ($$$('editLegend')!=null) {
													if ($$$('editLegend').innerHTML.indexOf('POLIGONO')!=-1) {
														GJX_lastPoint = realPoint;					//point;
														if (GJX_firstPoint == null) {
															GJX_firstPoint = realPoint;				//point;
															$$$('mapback').style.backgroundColor = '#990000';
															modified();
														}
														if (GJX_oldOverlay != null) {
															GJX_map.removeOverlay(GJX_oldOverlay);
														}
														GJX_lastPoly.push(GJX_lastPoint);
														myObj.addDPoint(realPoint.lat(), realPoint.lng());		//point.lat(), point.lng()); // salvo COORDINATE
														var p = getPolyParms();
														GJX_oldOverlay = new GPolyline(GJX_lastPoly, p['pc'], p['ps'], p['pa']);
														GJX_map.addOverlay(GJX_oldOverlay);
													}
												}
											}
										}
									  }
									}
								}
							});
      	GEvent.addListener(GJX_map, "zoomend", function(marker, point) {
								if ($$$('editLegend')!=null) {
									if ($$$('editLegend').innerHTML.indexOf('MAPPA')!=-1) {
									    $$$('tzlev').innerHTML = GJX_map.getZoom();
									    modified();
									}
								}
							});
		GEvent.addListener(GJX_map, "mousemove", function(marker, point) {
								if ($$$('editLegend')!=null) {
									if ($$$('editLegend').innerHTML.indexOf('POLIGONO')!=-1) {
										if (GJX_lastPoint != null) {
											GJX_map.removeOverlay(GJX_lastLine);
											var p = getPolyParms();
											var mp = marker;
											GJX_lastLine = new GPolyline(new Array(GJX_lastPoint, mp), p['pc'], p['ps'], p['pa']);
											GJX_map.addOverlay(GJX_lastLine);
										}
									}
								}
							});
		GEvent.addListener(GJX_map, "mouseout", function(marker, point) {
								if ($$$('editLegend')!=null) {
									if ($$$('editLegend').innerHTML.indexOf('POLIGONO')!=-1) {
										if (GJX_firstPoint != null) {
											$$$('mapback').style.backgroundColor = '';
											GJX_map.removeOverlay(GJX_lastLine);
											GJX_map.removeOverlay(GJX_oldOverlay);
											var p = getPolyParms();
											var polygons;
											if (p['pl']) {
												GJX_lastPoly.push(GJX_firstPoint);
											}
											if (p['pf']) {
												polygons = new GPolygon(GJX_lastPoly, p['pc'], p['ps'], p['pa'], p['pc'], p['pa']);
											}
											else {
												polygons = new GPolyline(GJX_lastPoly, p['pc'], p['ps'], p['pa']);
											}
											GJX_map.addOverlay(polygons);

											GJX_firstPoint 	= null;
											GJX_lastPoint 	= null;
											GJX_lastLine	= null;
											GJX_lineList	= new Array();			// riga aggiunta
											GJX_lastPoly	= new Array();
											GJX_oldOverlay	= null;
										}
									}
								}
							});
	}
	browserCheck();
}

function polyEditMapBlur() {
	if ($$$('editLegend')!=null) {
		if ($$$('editLegend').innerHTML.indexOf('POLIGONO')!=-1) {
			if (GJX_firstPoint != null) {
				$$$('mapback').style.backgroundColor = '';
				GJX_map.removeOverlay(GJX_lastLine);
				GJX_map.removeOverlay(GJX_oldOverlay);
				var p = getPolyParms();
				var polygons;
				if (p['pl']) {
					GJX_lastPoly.push(GJX_firstPoint);
				}
				if (p['pf']) {
					polygons = new GPolygon(GJX_lastPoly, p['pc'], p['ps'], p['pa'], p['pc'], p['pa']);
				}
				else {
					polygons = new GPolyline(GJX_lastPoly, p['pc'], p['ps'], p['pa']);
				}
				GJX_map.addOverlay(polygons);

				GJX_firstPoint 	= null;
				GJX_lastPoint 	= null;
				GJX_lastLine	= null;
				GJX_lineList	= new Array();			// riga aggiunta
				GJX_lastPoly	= new Array();
				GJX_oldOverlay	= null;
			}
		}
	}
}

function setAddress(address) {
	if (GJX_geo)
		GJX_geo.getLatLng(address,function(point){
									if (point) {
										GJX_map.setCenter(point, GJX_zoom);
										GJX_mapCenter = point;
										GJX_centerLat = GJX_mapCenter.lat();
										GJX_centerLng = GJX_mapCenter.lng();
									}
									else {
										alert("L'indirizzo '"+address+"' non e' stato trovato!");
									}
									$$$('mapback').visibility='visible';
								});
}

function showAddress(address) {
	if (GJX_geo)
		GJX_geo.getLatLng(address, function (point)	{
								if (!point)	{
									$$a(address + " non trovato!");
								}
								else {
									if (GJX_geo_marker)				// se gią presente il marker lo rimuovo
										GJX_map.removeOverlay(GJX_geo_marker);
									GJX_map.setCenter(point, GJX_zoom);
									GJX_geo_marker = new GMarker(point);
									GJX_map.addOverlay(GJX_geo_marker);
									if (isEditIcon()) {
										GJX_geo_marker.openInfoWindowHtml(address+"<div align=\"right\" style=\"margin-top:20px;font-size:0.8em; color:#000088;\">[clicca l'icona per rimuovere]</div>"+'<div style="margin-top:10px;"><input type="button" value="Clicca qui per impostare coordinate icona" onclick="coordSaveLatLng('+point.lat()+','+point.lng()+');" /></div>');
									}
									else {
										GJX_geo_marker.openInfoWindowHtml(address+"<div align=\"right\" style=\"margin-top:30px;font-size:0.8em; color:#000088;\">[clicca l'icona per rimuovere]</div>");
									}
									GEvent.addListener(GJX_geo_marker, 'click', function() {
																				GJX_map.closeInfoWindow();
																				GJX_map.removeOverlay(GJX_geo_marker);
																			});
								}
							}
					);
}

function XMLHTTPgetfile(taId, xmlSrc) {
	var area = $$$(taId);
	if (GBrowserIsCompatible()) {
		if (xmlSrc[0] != '<')			// Se č un file...
			GDownloadUrl(xmlSrc, function(data, responseCode) {	area.value = data; });
		else
			area.value = xmlSrc;
	}
}

function $get(obj, tag) {				// alert(obj+"\n"+tag);
	var c = obj.getElementsByTagName(tag);
	if (c.length>0)
	    return c[0];
	return false;
}

// ##################################################### FUNZIONE CHE GENERA L'ALBERO DI OGGETTI ###
function oBuildXML(xmlSrc) {
	if (xmlSrc==''||xmlSrc==null||xmlSrc=='undefined') {
	    return new objXMLdoc();
	}
	var retObj;
	if (GBrowserIsCompatible()) { 
		var xmlDoc = new GXml.parse(xmlSrc);
		
		var config = new objConfig();
		var cfg = $get(xmlDoc.documentElement,"config");
		if (cfg) {
		    var cfg_elem;
			cfg_elem = $get(cfg,"center");
			 config.lat = $rat(cfg_elem, "lat", GJX_centerLat, true);
			 config.lng = $rat(cfg_elem, "lng", GJX_centerLng, true);
			 config.zoomlev = $rat(cfg_elem, "zoom", 13, true);
			cfg_elem = $get(cfg,"view");
			 config.width = $rat(cfg_elem, "width", false, true);
			 config.height = $rat(cfg_elem, "height", false, true);

			cfg = $get(cfg,"options");
			if (cfg) {
			    var opt;
			    opt = $get(cfg,"draggable");
			    if (opt) config.draggable= ''+opt.firstChild.nodeValue;
                opt = $get(cfg,"controls");
			    if (opt) config.controls = ''+opt.firstChild.nodeValue;
				opt = $get(cfg,"zoomable");
			    if (opt) config.zoomable = ''+opt.firstChild.nodeValue;
				opt = $get(cfg,"autohybrid");
			    if (opt) config.ahybrid  = ''+opt.firstChild.nodeValue;
				opt = $get(cfg,"maptypes");
			    if (opt) config.maptypes = ''+opt.firstChild.nodeValue;
                opt = $get(cfg,"overview");
			    if (opt) config.overview = ''+opt.firstChild.nodeValue;
			}
		}
		
		var placeList = new Array();
		var places  = xmlDoc.documentElement.getElementsByTagName("place");
		for (var i=0; i<places.length; i++) {			// per ogni places trovato devo estrarre le informazioni relative
			var tabInfo = '';	// -----------------------------------------
			var pInfo = places[i].getElementsByTagName("info");
			if (pInfo.length > 0) {
				var infoArr = new Array();
				var iTab = pInfo[0].getElementsByTagName("tab");
				for (var j=0; j<iTab.length; j++) {	// ciclo sui tab presenti per estrarne i dati
					var caption = '';
					var content = '';
					if (iTab[j].getElementsByTagName("caption")[0].firstChild)
						caption = iTab[j].getElementsByTagName("caption")[0].firstChild.nodeValue;
					if (iTab[j].getElementsByTagName("content")[0].firstChild){
						content = iTab[j].getElementsByTagName("content")[0].firstChild.nodeValue;
					}
					infoArr.push(new objTab(caption,content)); //.firstChild.nodeValue
				}
				tabInfo = new objInfo(infoArr);
			}
			// estraggo le informazioni per l'icona ==============================================
			var iconList = new Array();	// -----------------------------------------
			var pIcon = places[i].getElementsByTagName("icon");
			for (var k=0; k<pIcon.length; k++) {
				var iLat = $rat(pIcon[k], "lat"   , false, true);
				var iLng = $rat(pIcon[k], "lng"   , false, true);
				var iSrc = $rat(pIcon[k], "image" , false, false);
				var iWid = $rat(pIcon[k], "width" , false, true);
				var iHei = $rat(pIcon[k], "height", false, true);
				iconList.push(new objIcon(iLat,iLng, iSrc,iWid,iHei));
			}
			// estraggo le informazioni per le poly ==============================================
			var polyList = new Array();	// -----------------------------------------
			var pPoly = places[i].getElementsByTagName("poly");
			for (var k=0; k<pPoly.length; k++) {
				var pCol = $rat(pPoly[k], "color" , false, false);
				var pSiz = $rat(pPoly[k], "size"  , false, true);
				var pAlp = $rat(pPoly[k], "alpha" , false, true);
				var pFil = false;
				if ($rat(pPoly[k], "filled", false, false) == 'true') {		// ritornerebbe 'true' e non true
					pFil = true;
			    }
			    var pClo = false
			    if ($rat(pPoly[k], "closure", false, false) == 'true') {	// ritornerebbe 'true' e non true
					pClo = true;
			    }
				// var polyLine = [];
				var pointArr = new Array();
				var pPoint = pPoly[k].getElementsByTagName("point");
				for (var j=0; j<pPoint.length; j++) {		// ciclo sui point presenti per estrarne i dati
					pointArr.push(new objPoint($rat(pPoint[j], "lat", true), $rat(pPoint[j], "lng", true)));
				}
				polyList.push(new objPoly(pCol,pSiz,pAlp,pFil,pClo, pointArr));
			}
			placeList.push(new objPlace(iconList,tabInfo,polyList));
		} // chiusura places
	}
	retObj = new objXMLdoc('', 'ISO-8859-1', config, placeList);	// encoding="ISO-8859-1" ||  encoding="UTF-8"

	return (retObj);
}
//]]>
