extensions.push('schede');



var schedehtml   ='<div id="schedaOnPointDiv" style="cursor:help;position:absolute;top:90px;left:45px;width:400;height:400; z-index: 3000; visibility: hidden" onclick="schedaOnPoint()">';
schedehtml   +='			<v:rect strokecolor="#A8A6A6" id="schedarect" style="position:absolute;top:0px;left:0px;width:400;height:400;z-index:3000">';
schedehtml   +='				<v:stroke opacity="0" color="red"/>';				
schedehtml   +='				<v:fill opacity="0" color="red"/>';
schedehtml   +='			</v:rect>';
schedehtml   +='</div>';

//addExtensionHTML(schedehtml);

function schedeBegin() {
	addExtensionHTML(schedehtml);
	mapInfo.setProperty('schedeEnabled',false);
	otherMapGui.push('schedaPopupDiv');
	
	commands['schedaOpen']='schedaOpen';
	commands['schedaOpenFromChoice']='schedaOpenFromChoice';
	commands['detailOpen']='detailOpen';
	commands['schedaLink']='schedaLink';
	commands['schedaQuery']='schedaQuery';
	commands['schedaBack']='schedaBack';
	commands['schedaClose']='schedaClose';
	commands['schedaDetailClose']='schedaDetailClose';
	commands['cancelSelection']='cancelSelection';
	commands['infoToggle']='infoTogglePrimary';

	eventListeners.attachToEvent('layerAdded','addSchedaLayer');
	eventListeners.attachToEvent('allLayersLoaded','initScheda');
	
	//var popup=new Popup('navigator',document.getElementById('navDiv'),document.navMovie,null,document.getElementById('navTitle'));
	var popup=new Popup('scheda',document.getElementById('schedaPopupDiv'),null,null,document.getElementById('schedaTitle'));
	popups.addPopup(popup);

	popup=new Popup('schedadetail',document.getElementById('schedaDetailDiv'),null,null,document.getElementById('schedaDetailTitle'));
	popups.addPopup(popup);

	/*eventHandlers.push('info');
	
	eventHandlersStatus['info']=false;*/
	
	eventHandlers.push('scheda');

	eventHandlersStatus['scheda']=false;
	
	mapInfo.setProperty('schedeList',new Array());
	/*var schedeCombo=new ComboBox('schede');
	schedeCombo.setWidth(150);
	schedeCombo.onSelect='schedaSelect';
	schedeCombo.addItem('------------------------',0);
	schedeCombo.addItem('Tutto','ALLFEATURES');*/
	schedeConfigure();
	
}

function isVoiceVisible(voice) {
	
	if(voice.indexOf('.')!=-1) {
		var layerName=voice.substring(0,voice.indexOf('.'));
		var featureName=voice.substring(voice.indexOf('.')+1);
		var layer=map.getLayer(layerName);
		
		var rm=layer.getRenderingManager(featureName);
		
		if(rm.getProperty('visibility')) {
			var scale=map.getScale();
			if(layer.visibleInScale(scale,featureName))
				return true;
		}
	} else {
		var layer=map.getLayer(voice);
		var rm=layer.getRenderingManager();
		if(rm.getProperty('visibility')) {
			var scale=map.getScale();
			if(layer.visibleInScale(scale))
				return true;
		}
			
	}
	return false;
}

function areVoicesVisible(voices) {
	var voicesArr=voices.split('+');
	for(var pos in voicesArr) {
		var voice=voicesArr[pos];
		if(isVoiceVisible(voice))
			return true;
	}
	return false;
}

function schedaOnPoint() {
	waitingOn();
	
	var x=event.offsetX;
	var y=event.offsetY;
	
	var realX=map.realRange.minX+x/mapWidth*map.realRange.getDeltaX();
	var realY=map.realRange.minY+(mapHeight-y)/mapHeight*map.realRange.getDeltaY();
	//alert(realX+','+realY);
	
	var featureToQuery=mapInfo.getProperty('featureToQuery');
	var wfsQueries=new Array();
	var queryNames=new Array();
	var schedeList=mapInfo.getProperty('schedeList');
	if(mapInfo.getProperty('schedaLayer')) {
		
		var layer=map.getLayer(mapInfo.getProperty('schedaLayer'));
		
		var queryName=featureToQuery[layer.featureName];
		
		
		if(queryName) {
			var voices=schedeList[queryName];
			//alert('1');
			if(voices==true || areVoicesVisible(voices))
			{
					
			var wfsQuery=getSchedaOnPointQuery(queryName,realX,realY);
				
			queryNames.push(queryName);
			wfsQueries.push(wfsQuery);
				//wfsQueries+=wfsQuery;
				//alert(queryName);
			}
			//alert('2');
			//alert(queryName);
		}
	} else {
		var layers=map.layersWithFunction('schedaonpoint');
		for(var pos in layers) {
			var layer=layers[pos];
			
			var queryName=featureToQuery[layer.featureName];
			if(queryName) {
				var voices=schedeList[queryName];
				if(voices==true || areVoicesVisible(voices))
				{
						
				var wfsQuery=getSchedaOnPointQuery(queryName,realX,realY);
					
				queryNames.push(queryName);
				wfsQueries.push(wfsQuery);
					//wfsQueries+=wfsQuery;
				//alert(queryName);
			}
			}
			//alert(.featureName);
		}
	}
	
	if(wfsQueries.length>0) {
		automa=new Automa('ObjectsOnPoint',2,'automa','actionEnd()');
		automa.setProperty('queryCount',0);
		automa.setProperty('queryNames',queryNames);
		automa.setProperty('arguments',wfsQueries);
		automa.setProperty('globalDataSet',null);
		automa.setProperty('center',false);		
		automa.start();
	} else {
		alert('Nessun oggetto trovato');
		actionEnd();
	}

}

function automaObjectsOnPointPhase1() {
	var queryNames=automa.getProperty('queryNames');
	var wfsQueries=automa.getProperty('arguments');
	doNextQuery(0,queryNames,wfsQueries);
}

function doNextQuery(pos,queryNames,wfsQueries) {
	var queryName=queryNames[pos];
	
	var queryDesc=mapInfo.getProperty('queries')[queryName];
	automa.setProperty('queryName',queryName);
	automa.setProperty('queryFeature',queryDesc.feature);
	var args=wfsQueries[pos];
	engine.sendMsg("query",null,'returnObjectsOnPoint',queryName,args,'');
}

function returnObjectsOnPoint(retrow) {
	
	if(retrow=='*ERROR*') {
		alert('Errore di esecuzione della query');
		automa.end();
	} else {
		var dataSet=new DataSet();
		var queryDesc=mapInfo.getProperty('queries')[automa.getProperty('queryName')];
		
		dataSet.loadFromQueryResult(retrow,queryDesc);
		
		automa.setProperty('dataSet',dataSet);

		automa.goOn();
	}
}

function automaObjectsOnPointPhase2() {
	var globalDataSet=automa.getProperty('globalDataSet');
	var dataSet=automa.getProperty('dataSet');
	if(!globalDataSet)
		globalDataSet=dataSet;
	else
		globalDataSet.append(dataSet);
	automa.setProperty('globalDataSet',globalDataSet);
	var queryDesc=mapInfo.getProperty('queries')[automa.getProperty('queryName')];
	
	var count=automa.getProperty('queryCount');
	count++;
	automa.setProperty('queryCount',count);
	var queryNames=automa.getProperty('queryNames');
	var wfsQueries=automa.getProperty('arguments');
	
	if(count==queryNames.length) {
		schedaToggle(false);
		viewSchedaAllResults(globalDataSet);
	} else {
		automa.rewind();
		doNextQuery(count,queryNames,wfsQueries);
		
	}
}

function viewSchedaAllResults(dataSet) {
	
	document.getElementById('schedaPopupDiv').style.visibility='visible';
	var html='';
	
	var recNum=0;
	var rows=dataSet.rows;
	var schede=new Array();
	for(var rowNum=0;rowNum<rows.length;rowNum++) {
		var row=rows[rowNum];
			
		recNum++;
		var elements=schede[row.feature];
		if(!elements)
			elements=new Array();
		elements.push(row);
		schede[row.feature]=elements;	
		
			
	}
	for(var feature in schede) {
		html+='<b>'+mapInfo.getProperty('featureToDescription')[feature]+'</b><br/>';
		var featRows=schede[feature];
		for(var pos in featRows) {
			var row=featRows[pos];
			var fields=row.fields;
			
			html+=getSchedaAllDescription(row,false);
			
			
			//html+='ID: '+row.id+'<br>';
		}
	}
	
	if(html=='')
		document.getElementById('schedaText').innerHTML='&nbsp;';
	else
		document.getElementById('schedaText').innerHTML=html;

	automa.end();
}

function getRowAttributes(row) {
	var result='';
	for (var fieldName in row.fields) {
		result+='*'+fieldName+'='+row.fields[fieldName].replace(/\'/g,'\\\'');
	}
	return result.substring(1);
}

function getDetailAttributesArray(attrs) {
	
	var result=new Array();
	var attrsArr=attrs.split('~~~');
	for(var pos in attrsArr) {
		var attr=attrsArr[pos];
		var couple=attr.split('=');
		var fieldName=couple[0];
		
		var fieldValue=unescape(couple[1].replace(/\+/g,' '));
		
		result[fieldName]=fieldValue;
	}
	return result;
}

function getAttributesArray(attrs) {
	
	var result=new Array();
	var attrsArr=attrs.split('*');
	for(var pos in attrsArr) {
		var attr=attrsArr[pos];
		var couple=attr.split('=');
		var fieldName=couple[0];
		var fieldValue=couple[1];
		
		result[fieldName]=fieldValue;
	}
	return result;
}

function getSchedaAllDescription(row,center) {
	var format=mapInfo.getProperty('featureToFormat')[row.feature];
	var id=row.id.substring(row.id.indexOf('.')+1);
	return '<span style="cursor:hand" onclick="doCommand(\'schedaOpenFromChoice\',\''+row.feature+','+id+','+getRowAttributes(row)+','+center+'\')">'+parseFormat(row,format)+'</span><br>';
}

function parseFormat(row,format) {
	var pos=format.indexOf('${');
	var oldPos=0;
	var result='';
	while(pos!=-1) {
		
		var endPos=format.indexOf('}',pos);
		result+=format.substring(oldPos,pos);
		var varName=format.substring(pos+2,endPos);
		
		result+=row.fields[varName];
		oldPos=endPos+1;
		pos=format.indexOf('${',endPos);
	}
	if(oldPos<(format.length-1))
		result+=format.substring(oldPos);
	return result;
}

function getTolleranceMeters(range) {
	var tollerancePx=mapInfo.getProperty('infoTollerancePixels');
	return tollerancePx/mapWidth*range.getDeltaX();
}

function getTolleranceRange(x,y) {
	var tollerance=getTolleranceMeters(map.realRange)/2;
	return new Range(x-tollerance,x+tollerance,y-tollerance,y+tollerance);
}

function getSchedaOnPointQuery(queryName,x,y) {
	
	var tolleranceRange=getTolleranceRange(x,y);
	var queryDesc=mapInfo.getProperty('queries')[queryName];
	var feature=queryDesc.feature;
	var result='';

	var idName=queryDesc.getIdName(feature);
	if(idName)
		result+='<Query typeName="'+feature+'" primarykey="'+idName+'" crs="gauss">';
	else
		result+='<Query typeName="'+feature+'" crs="gauss">';
	var fieldsText='';
	var outputs=queryDesc.outputsList('scheda',feature);
	var idName='';
	var idQuote='';
	var idType=queryDesc.getIdType(feature);
	if(idType=='STRING')
		idQuote='\'';
	for(var pos=0;pos<outputs.length;pos++) {
		var output=outputs[pos];
		fieldsText+='<PropertyName>'+output.name+'</PropertyName>';		
	}
	if(queryDesc.getGroupBy(feature))
		fieldsText+='<PropertyName>'+queryDesc.getGroupBy(feature)+'</PropertyName>';
	result+=fieldsText+'<Filter><Overlaps><PropertyName>Geometry</PropertyName><gml:Box><gml:coordinates>'+tolleranceRange.minX+','+tolleranceRange.minY+','+tolleranceRange.maxX+','+tolleranceRange.maxY+'</gml:coordinates></gml:Box></Overlaps></Filter>';
		
	result+='</Query>';
	
	return result;
}

function addSchedaLayer(layerName,featureName,description,style,featureType,category) {
	
	var schedeList=mapInfo.getProperty('schedeList');
	//var schedeCombo=comboBoxes['schede'];
	var layer=map.getLayer(layerName);
	var schedaName=layerName;
	if(featureName)
		schedaName=layerName;
	if(layer && layer.hasFunction('scheda')) {
		schedeList[description]=schedaName;
		var node=new ComponentArt_TreeViewNode();
		node.ID='TNquery'+schedaName;
		node.Text=description;
		node.qzxg=5;

		(Uctreeactionpanel1_TreeView1.Nodes())[1].AddNode(node);
		
		//schedeCombo.addItem(description,schedaName);
	}
	if(layer && layer.hasFunction('schedaonpoint')) {
		//schedeList[description]='*'+schedaName;
		var node=new ComponentArt_TreeViewNode();
		node.ID='TNquery*'+schedaName;
		node.qzxg=5;
		node.Text=description;
		var layer=map.getLayer(layerName);
	
		//alert(layerName+','+featureName+','+description);
		var voices=layer.hasFunction('schedaonpointvoices');
		
		if(voices)
			schedeList[description]=voices;
		else
			schedeList[description]=true;
		
		(Uctreeactionpanel1_TreeView1.Nodes())[1].AddNode(node);
		//schedeCombo.addItem(description,'*'+schedaName);
	}

	mapInfo.setProperty('schedeList',schedeList);
	
}

function schedaSelect(layerName) {
	
	waitingOn();
	if(layerName==0) {
		disableEvent('scheda');
	} else {
		enableEvent('scheda');
	}
	if(mapInfo.getProperty('schedaLayer')) {
		//map.removeLayer(mapInfo.getProperty('schedaLayer'));
		mapInfo.setProperty('schedaLayer',null);
	}
	if(layerName!=0 && (layerName=='ALLFEATURES' || layerName.substring(0,1)=='*')) {
		if(layerName=='ALLFEATURES')
			mapInfo.setProperty('schedaLayer',null);
		else
			mapInfo.setProperty('schedaLayer',layerName.substring(1));
		var schedadiv=document.getElementById('schedaOnPointDiv');
		schedadiv.style.visibility='visible';
	
		var schedarect=document.getElementById('schedarect');
		schedadiv.style.pixelLeft=mapOffsetX-3;
		schedadiv.style.pixelTop=mapOffsetY-3;
		schedadiv.style.width=mapWidth+8;
		schedadiv.style.height=mapHeight+7;
		schedarect.style.width=mapWidth+8;
		schedarect.style.height=mapHeight+7;
	} else {
		var schedadiv=document.getElementById('schedaOnPointDiv');
		schedadiv.style.visibility='hidden';
		
		
		if(layerName!=0) {
			var layer=map.getLayer(layerName);
			var schedaLayer=layer.clone();
			schedaLayer.name=schedaLayer.name+'Scheda';
			mapInfo.setProperty('schedaLayer',schedaLayer.name);
			schedaLayer.dynamic=true;
			schedaLayer.dynamicPosition='vip';
			schedaLayer.noAlternativeLayer=true;
			schedaLayer.featureType=layer.featureType;
			schedaLayer.renderingManager=layer.renderingManager.clone();
			schedaLayer.renderingManager.setProperty('visibility',true);
			schedaLayer.renderingManager.setProperty('opacity',100);
			schedaLayer.renderingManager.setProperty('selectable',true);
			/*schedaLayer.renderingManager.setProperty('visibility',true);
			schedaLayer.renderingManager.setProperty('opacity',100);
			schedaLayer.renderingManager.setProperty('color','none');
			schedaLayer.renderingManager.setProperty('fill','none');*/
			map.addDynamic(schedaLayer);
		}
		
		
	}	
	map.update();
}

function infoTogglePrimary() {
	infoToggle(false);
}

/*function schedaQuery() {

	var id=mapInfo.getProperty('schedaId');
	var checkedList=new Array();
	checkedList[id]='on';
	var wfsquery=getDetailArguments(mapInfo.getProperty('schedaQueryName'),checkedList);
	if(wfsquery) {
		var report=window.open('report.html','report','WIDTH=660,HEIGHT=620,RESIZABLE=YES,SCROLLBARS=YES');
		report.document.write('<html>');
		report.document.write('<head>');
		report.document.write('<link rel="stylesheet" href="rfi.css">');
		report.document.write('<link rel="stylesheet" href="fsi.css">');
		report.document.write('<title>Report</title>');
		report.document.write('</head>');
		report.document.write('<body>');
		report.document.write('<table cellspacing="0" cellpadding="0" width="624">');
		report.document.write('<tr><td colspan="2"><img src="immagini/report_header.gif"/></td></tr>');
		report.document.write('<tr><td><img src="images/spacer.gif" width="1" height="500"/></td><td valign="top">');
		
		automa=new Automa('DoQuery',2,'automa','actionEnd()');
		automa.setProperty('queryName',mapInfo.getProperty('schedaQueryName'));
		automa.setProperty('arguments',wfsquery);
		automa.setProperty('mode','detail');
		
		mapInfo.setProperty('reportPopup',report);
		automa.start();
	} else {
		actionEnd();
		alert('Selezionare almeno un elemento della lista');
		
	}

}*/

function schedaToggle(secondary) {
	if(mapInfo.getProperty('schedaLayer') || document.getElementById('schedaOnPointDiv').style.visibility=='visible') {
		/*var schedeCombo=comboBoxes['schede'];
		schedeCombo.init();
		schedeCombo.draw(document.getElementById('queryListDiv'));*/
		Uctreeactionpanel1_TreeView1.SelectedNode=null;
		Uctreeactionpanel1_TreeView1.Render();
		schedaSelect(0);
	}
}

function initScheda() {
	Uctreeactionpanel1_TreeView1.Render();
	Uctreeactionpanel1_TreeView1.ExpandAll();
	/*var schedeCombo=comboBoxes['schede'];
	schedeCombo.init();
	schedeCombo.draw(document.getElementById('queryListDiv'));*/
}

function infoToggle(secondary) {
	
	var status=mapInfo.getProperty('schedeEnabled');
	if(!status) {
		document.getElementById('puls_info').onmouseover=null;
		document.getElementById('puls_info').onmouseout=null;
		document.getElementById('puls_info').src='immagini/b_info_down.gif';
		status=true;
		enableEvent('info');
		var schedeCombo=comboBoxes['schede'];
		schedeCombo.init();
		schedeCombo.draw(document.getElementById('schedeListDiv'));
		document.getElementById('schedeListDiv').style.visibility='visible';
	}
	else {
		document.getElementById('puls_info').onmouseover=new Function("MM_nbGroup('over','puls_info','immagini/b_info_roll.gif','immagini/b_info_roll.gif',1);");
		document.getElementById('puls_info').onmouseout=new Function("MM_nbGroup('out');");
		document.getElementById('puls_info').src='immagini/b_info.gif';
		status=false;
		disableEvent('info');
		if(mapInfo.getProperty('schedaLayer'))
			schedaSelect(0);
		document.getElementById('schedeListDiv').style.visibility='hidden';
		var schedadiv=document.getElementById('schedaOnPointDiv');
		schedadiv.style.visibility='hidden';
	}
	mapInfo.setProperty('schedeEnabled',status);
	if(!secondary)
		actionEnd();
}

/*function getSchedaArguments(queryName,id,feature) {
	mapInfo.setProperty('schedaQueryName',queryName);
	
	var queryDesc=mapInfo.getProperty('queries')[queryName];
	if(!feature)
		feature=queryDesc.feature;
	mapInfo.setProperty('schedaId',feature+','+id);
	var result='';
	
	var filterCond='';
	var idName=queryDesc.getIdName(feature);
	if(idName)
		result+='<Query typeName="'+tablePrefix(feature)+feature+'" primarykey="'+idName+'">';
	else
		result+='<Query typeName="'+tablePrefix(feature)+feature+'">';
	var fieldsText='';
	var outputs=queryDesc.outputsList('scheda',feature);
	var idName='';
	var idQuote='';
	var idType=queryDesc.getIdType(feature);
	if(idType=='STRING')
		idQuote='\'';
	for(var pos=0;pos<outputs.length;pos++) {
		var output=outputs[pos];
		fieldsText+='<PropertyName>'+output.name+'</PropertyName>';		
	}
	if(queryDesc.realGroupBy)
		fieldsText+='<PropertyName>'+queryDesc.realGroupBy+'</PropertyName>';
	result+=fieldsText+'<Filter>';
		
	
		filterCond+='<FeatureId fid="'+idQuote+id.replace(/\'/g,'\'\'')+idQuote+'"/>';
	
	result+=filterCond;
	result+='</Filter></Query>';

	
	return new Array(feature,result);
}

function schedaLink(args) {
	var id=mapInfo.getProperty('schedaId').substring(mapInfo.getProperty('schedaId').indexOf(',')+1);
	document.getElementById('backSchedaButton').style.visibility='visible';
	mapInfo.setProperty('schedaBackId',id);
	mapInfo.setProperty('schedaFeature',null);
	var queryName=args;
	var wfsquery=getSchedaArguments(queryName,id,'TRAT_WEBS');	
	automa=new Automa('DoQuery',2,'automa','actionEnd()');
	automa.setProperty('queryName',queryName);
	automa.setProperty('arguments',wfsquery);
			//automa.setProperty('queryFeature',feature);
	automa.setProperty('mode','scheda');
	automa.start();

}

function schedaBack() {
	var id=mapInfo.getProperty('schedaBackId');
	document.getElementById('backSchedaButton').style.visibility='hidden';
	mapInfo.setProperty('schedaBackId',null);
	mapInfo.setProperty('schedaFeature','TRAT_WEBS');
	var queryName='localizzaTratta';
	var wfsquery=getSchedaArguments(queryName,id,'TRAT_WEBS');	
	automa=new Automa('DoQuery',2,'automa','actionEnd()');
	automa.setProperty('queryName',queryName);
	automa.setProperty('arguments',wfsquery);
			//automa.setProperty('queryFeature',feature);
	automa.setProperty('mode','scheda');
	automa.start();

}*/

function parseLink(link,attributes) {
	var pos=link.indexOf('${');
	var oldPos=0;
	var result='';
	while(pos!=-1) {
		
		var endPos=link.indexOf('}',pos);
		result+=link.substring(oldPos,pos);
		var varName=link.substring(pos+2,endPos);
		if(attributes[varName]=='NULL')
			return null;
		result+=attributes[varName];
		oldPos=endPos+1;
		pos=link.indexOf('${',endPos);
	}
	if(oldPos<(link.length-1))
		result+=link.substring(oldPos);
	return result;
}

function detailOpen(args) {
	var argArr=args.split(',');
	var feature=argArr[0];
	var id=argArr[1];
	var attrs=argArr[2];
	var attributes=getAttributesArray(attrs);
		
	var featureToScheda=mapInfo.getProperty('featureToScheda');
	var featureDetail=mapInfo.getProperty('featureDetail');
	var featureDetailInput=mapInfo.getProperty('featureDetailInput');
	var link=featureToScheda[feature];
	
	var detail='';
	var detailInput='';
	if(link) {
		if(link=='internal') {
			nphases=4;
			detail=featureDetail[feature];
			detailInput=featureDetailInput[feature];
			detailInput=parseLink(detailInput,attributes);
		} else {
			var parsedLink=parseLink(link,attributes);
			if(parsedLink!=null) {
				var win=window.open(parsedLink,'scheda','WIDTH=600,HEIGHT=500,RESIZABLE=YES,SCROLLBARS=YES');
				if(win)
					win.focus();
			} else
				alert('La scheda non e\' disponibile');
		}
	}
	
	var featureToQuery=mapInfo.getProperty('featureToQuery');
	var queryName=featureToQuery[feature];
	
		
	document.getElementById('schedaPopupDiv').style.visibility='hidden';
	
	automa=new Automa('OpenDetail',2,'automa','actionEnd()');
	automa.setProperty('queryName',queryName);
	automa.setProperty('detail',detail);
	automa.setProperty('detailInput',detailInput);
	automa.start();
}

function schedaOpenFromChoice(args) {
	var argArr=args.split(',');
	var feature=argArr[0];
	var id=argArr[1];
	var attrs=argArr[2];
	var attributes=getAttributesArray(attrs);
	var center=argArr[3];
	
	var featureToScheda=mapInfo.getProperty('featureToScheda');
	var featureDetail=mapInfo.getProperty('featureDetail');
	var featureDetailInput=mapInfo.getProperty('featureDetailInput');
	var link=featureToScheda[feature];
		
	var nphases=3;
	var detail='';
	var detailInput='';
	if(link) {
		if(link=='internal') {
			nphases=4;
			detail=featureDetail[feature];
			detailInput=featureDetailInput[feature];
			detailInput=parseLink(detailInput,attributes);
		} else {
			var parsedLink=parseLink(link,attributes);
			if(parsedLink!=null) {
				var win=window.open(parsedLink,'scheda','WIDTH=600,HEIGHT=500,RESIZABLE=YES,SCROLLBARS=YES');
				if(win)
					win.focus();
			} else
				alert('La scheda non e\' disponibile');
		}
	}

	var featureToQuery=mapInfo.getProperty('featureToQuery');
	var queryName=featureToQuery[feature];
	var wmsQuery;

	var queryDesc=mapInfo.getProperty('queries')[queryName];
	
	if(id.indexOf('.')==-1)
		wmsQuery=getSchedaWmsQuery(queryDesc,id);
	else
		wmsQuery=getSchedaWmsQuery(queryDesc,id.substring(0,id.indexOf('.')));
	
	document.getElementById('schedaPopupDiv').style.visibility='hidden';
	
	if(mapInfo.getProperty('selectionLayer'))
		removeSelection();

	automa=new Automa('AddSelection',nphases,'automa','actionEnd()');
	automa.setProperty('queryName',queryName);
	automa.setProperty('arguments',wmsQuery);
	automa.setProperty('legendLabel','SELEZIONE');
	automa.setProperty('featureType',queryDesc.featureType);
	automa.setProperty('style',queryDesc.getStyle());
	automa.setProperty('center',center=='true');
	automa.setProperty('detail',detail);
	automa.setProperty('detailInput',detailInput);
	automa.start();
}

function automaAddSelectionPhase1() {
	
	var analysisNumber=mapInfo.getProperty('analysisCount');
	var analysisName='analysis'+analysisNumber;
	
	var queryDesc=mapInfo.getProperty('queries')[automa.getProperty('queryName')];

	analysisNumber++;
	mapInfo.setProperty('analysisCount',analysisNumber);
	var layer=new SVGLayer(analysisName,analysisName,analysisNumber,true,1,1000000,outFeature,onFeature,clickFeature,mouseMoveFeature,'','');
	layer.featureType=automa.getProperty('featureType');
	if(automa.getProperty('properties'))
		layer.implementationProperties=automa.getProperty('properties');
	layer.dynamicCall='mapQuery';
	layer.dynamicCallArgs='\''+automa.getProperty('queryName')+'\',\''+automa.getProperty('arguments')+'\',\''+analysisName+'\',\'\'';
		
	layer.dynamic=true;
	layer.dynamicPosition='over';
	layer.interactiveFunctions='tooltip*legend';
	layer.resolution=10;
	var rendererClass=Renderer.implementations[automa.getProperty('featureType')];
	
	if(rendererClass) {
		var renderer=eval('new '+rendererClass+'()');
		renderer.init(automa.getProperty('style'));
		renderer.setProperty('opacity',100);
		renderer.setProperty('visibility',true);
		layer.setRenderingManager(renderer);	
	}
	mapInfo.setProperty('selectionLayer',layer.name);
	map.addLayer(layer);

	

	automa.setProperty('newLayer',layer);
	map.update();
	
}

function automaAddSelectionPhase2() {

	var layer=automa.getProperty('newLayer');
	if(layer) {
		var bbox=layer.boundingRange.copy();
		
		if(bbox && automa.getProperty('center')) {
			if(bbox.getDeltaX()<mapInfo.getProperty('minimumSelectionRange')) {
				var cX=bbox.minX+bbox.getDeltaX()/2.0;
				var cY=bbox.minY+bbox.getDeltaY()/2.0;
				var w=mapInfo.getProperty('minimumSelectionRange');
				var h=mapHeight/mapWidth*w;
				bbox=new Range(cX-w/2.0,cX+w/2.0,cY-h/2.0,cY+h/2.0);
			}
			
			centerOnSelection(bbox);
			map.update();
		} else
			automa.goOn();
		
	} else
		automa.end();
}

function centerOnSelection(range) {
	
	range.zoom(0.8);
	range.inverseAdjustAspectRatio(mapWidth,mapHeight);
	
	
	var scale=map.maxRealRange.getDeltaX()/range.getDeltaX();
//	alert(scale);
	i=-1;
	if(scale<=1)
		currentZoom=0;
	else if(scale>=zoomScale[zoomScale.length-1])
		currentZoom=zoomScale.length-1;
	else {
		for(var count=zoomScale.length-1;count>=0;count--) {
			if (scale<=zoomScale[count]) {
				currentZoom=count;
			}
		}
	}
	
	if(currentZoom>0) {
		
		var d1=Math.abs(scale-zoomScale[currentZoom]);
		
		var d2=Math.abs(scale-zoomScale[currentZoom-1]);
		
		if(d2<d1)
			currentZoom=currentZoom-1;
	}

	map.zoomBox(range);
	map.zoomAbsolute(zoomScale[currentZoom]);	
	
	mapInfo.setProperty('currentZoom',currentZoom);
	
	eventListeners.fireEvent('scaleChange');
}

function automaAddSelectionPhase3() {
	var layer=automa.getProperty('newLayer');
	if(layer) {
		eventListeners.fireEvent('layerAdded',layer.name,'',automa.getProperty('legendLabel'),automa.getProperty('style'),automa.getProperty('featureType'),mapInfo.getProperty('ExtraCategory'));
		eventListeners.fireEvent('dynamicLayerAdded');
	}
	
		
	if(automa.getProperty('detail')) {
		engine.sendMsg("detail",null,'returnDetail',automa.getProperty('queryName'),automa.getProperty('detailInput'));
	} else {
	eventListeners.fireEvent('queryEnd');
		automa.end();
	}
}

function returnDetail(retrow) {
	//alert(retrow);
	document.getElementById('schedaDetailDiv').style.visibility='visible';
	
	var detail=parseLink(automa.getProperty('detail'),getDetailAttributesArray(retrow));
	document.getElementById('schedaDetailText').innerHTML=detail;
	
	automa.goOn();
}
		
function automaAddSelectionPhase4() {
	eventListeners.fireEvent('queryEnd');
	automa.end();
}

function automaOpenDetailPhase1() {
	engine.sendMsg("detail",null,'returnDetail',automa.getProperty('queryName'),automa.getProperty('detailInput'));
}

function automaOpenDetailPhase2() {
	automa.end();
}

function getSchedaWmsQuery(queryDesc,id) {
	var wmsFeature=queryDesc.wmsFeature;
	var wmsQuery='';
	
	var analysisNumber=mapInfo.getProperty('analysisCount');
	var analysisName='analysis'+analysisNumber;

	wmsQuery='<NamedLayer><Name>'+wmsFeature+'</Name><UserStyle><Name>Query'+analysisName+'</Name><FeatureTypeStyle><FeatureTypeName>'+wmsFeature+'</FeatureTypeName><Rule><Name>RuleS1</Name><Filter>';

	
	if(queryDesc.getGroupBy(queryDesc.feature)) {
		var idQuote='';
		if(queryDesc.getGroupByType(wmsFeature)=='STRING')
			idQuote='\\\'';
		
		wmsQuery+='<PropertyIsEqualTo><PropertyName>'+queryDesc.getGroupBy(queryDesc.feature)+'</PropertyName><Literal>'+idQuote+id+idQuote+'</Literal></PropertyIsEqualTo>';
	} else {
		var idQuote='';
		if(queryDesc.getIdType(wmsFeature)=='STRING')
			idQuote='\\\'';
		wmsQuery+='<FeatureId fid="'+idQuote+id.replace(/\'/gi,'\'\'')+idQuote+'"/>';
	}
	wmsQuery+='</Filter>'+queryDesc.getStyle(wmsFeature)+'</Rule></FeatureTypeStyle></UserStyle></NamedLayer>';

	return wmsQuery;
}

function cancelSelection() {
	//var legendFeatures=mapInfo.getProperty('legendFeatures');
	
	if(mapInfo.getProperty('selectionLayer')) {
		removeSelection();
		mapInfo.setProperty('selectionLayer',null)
		
		
		eventListeners.fireEvent('dynamicLayerRemoved');
		map.update();
	} else
		actionEnd();
}

function removeSelection() {
	map.removeLayer(mapInfo.getProperty('selectionLayer'));
	/*var legendFeatures=mapInfo.getProperty('legendFeatures');
	var legendFeaturesByLayer=mapInfo.getProperty('legendFeaturesByLayer');
	var feature=legendFeatures['SELEZIONE'];
	delete legendFeatures['SELEZIONE'];
	for(var pos in feature.layers) {
		var layer=feature.layers[pos];
		delete legendFeaturesByLayer[layer.name];
		map.removeLayer(layer.name);
	}
	if(mapInfo.getProperty('ExtraCategory')) {
		var categories=mapInfo.getProperty('categories');
		var category=categories[mapInfo.getProperty('ExtraCategory')];
		for(var pos in category) {
			var legendEl=category[pos];
		
			if(legendEl=='SELEZIONE')
				delete category[pos];
		}
		categories[mapInfo.getProperty('ExtraCategory')]=category;
		mapInfo.setProperty('categories',categories);
	}
	
	mapInfo.setProperty('legendFeatures',legendFeatures);
	mapInfo.setProperty('legendFeaturesByLayer',legendFeaturesByLayer);*/
}

function schedaOpen(args) {
	var argArr=args.split(',');
	var layerName=argArr[0];
	var id=argArr[1];
	var layer=map.getLayer(layerName);
	var attributes=layer.getAttributes(id);
	var feature=attributes['feature'];
	
	var featureToScheda=mapInfo.getProperty('featureToScheda');
	
	var link=featureToScheda[feature];
	
	if(link) {
		var parsedLink=parseLink(link,attributes);
		var win=window.open(parsedLink,'scheda','WIDTH=600,HEIGHT=500,RESIZABLE=YES');
		if(win)
			win.focus();
	}
	
	var featureToQuery=mapInfo.getProperty('featureToQuery');
	var queryName=featureToQuery[feature];
	var queryDesc=mapInfo.getProperty('queries')[queryName];
	var wmsQuery;
	if(id.indexOf('.')==-1)
		wmsQuery=getSchedaWmsQuery(queryDesc,id);
	else
		wmsQuery=getSchedaWmsQuery(queryDesc,id.substring(0,id.indexOf('.')));

	if(mapInfo.getProperty('selectionLayer'))
		removeSelection();

	automa=new Automa('AddSelection',2,'automa','actionEnd()');
	automa.setProperty('queryName',queryName);
	automa.setProperty('arguments',wmsQuery);
	automa.setProperty('legendLabel','SELEZIONE');
	automa.setProperty('featureType',queryDesc.featureType);
	automa.setProperty('style',queryDesc.getStyle());
			
	automa.start();
	
	//actionEnd();
	
}

function schedaClose() {
	/*mapInfo.setProperty('schedaBackId',null);
	document.getElementById('backSchedaButton').style.visibility='hidden';*/
	document.getElementById('schedaPopupDiv').style.visibility='hidden';
	actionEnd();
}
function schedaDetailClose() {
	/*mapInfo.setProperty('schedaBackId',null);
	document.getElementById('backSchedaButton').style.visibility='hidden';*/
	document.getElementById('schedaDetailDiv').style.visibility='hidden';
	actionEnd();
}



function DetailEngine_clearCommunication() {
	detailcommunication.document.write('<html><head></head><body><form id="ogcform" name="ogcform" action="'+this.url+'" method="POST"><input type="hidden" name="query" value=""/><input type="hidden" name="detailInput" value=""/><input type="hidden" name="application" value=""/></form></body></html>');
	//wfscommunication.document.write('<html><head></head><body><form id="ogcform" name="ogcform" action="'+this.url+'" method="POST"><input type="hidden" name="meth" value="SOAP"/><input type="hidden" name="data" value=""/></form></body></html>');
	
}

/*
 * Invia una richiesta al motore java. Il metodo è asincrono. Ciò significa che
 * non viene attesa la risposta. Tale risposta verrà inviata alla funzione <responseHandler>,
 * oppure al metodo <responseHandler> di <responseHandlerObject>.
 * Il tipo di richiesta viene indicata dal parametro <msgAction>. Ogni tipo di richiesta 
 * può prevedere una serie di parametri aggiuntivi.
 */
function DetailEngine_handleMsg(msgAction,otherArgs) {
	var query=otherArgs[0];
	var detailInput=otherArgs[1];
	var url=this.url;		
	
	var ogcform=window.detailcommunication.document.getElementById('ogcform');
	ogcform.query.value=query;
	
	ogcform.detailInput.value=detailInput;
	ogcform.application.value=mapInfo.getProperty('applicationName');
	ogcform.submit();
	return detailcommunication;
}

/**
 * Costruttore. Viene passato come parametro la <DIV> usata per la comunicazione con il motore.
 */
function DetailEngine(url) {
	this.url=url;
	this.clearCommunication();
}


DetailEngine.prototype.handleMsg=DetailEngine_handleMsg;
DetailEngine.prototype.clearCommunication=DetailEngine_clearCommunication;

