

function doZoom(arg) {
	if(arg=='in')
		doCommand('zoomin');
	if(arg=='out')
		doCommand('zoomout');
	if(arg=='all')
		doCommand('qunione');
}

function changeState()
{
	
	setCookie("realRangeMinX",map.realRange.minX,null);
	setCookie("realRangeMinY",map.realRange.minY,null);
	setCookie("realRangeMaxX",map.realRange.maxX,null);
	setCookie("realRangeMaxY",map.realRange.maxY,null);
}
// Sets cookie values. Expiration date is optional
//
function setCookie(name, value, expire) 
{   
	
	document.cookie = name + "=" + escape(value) + ((expire == null) ? "" : ("; expires=" + expire.toGMTString()));
}
	

function getCookie(Name) 
{   
	
	var search = Name + "=";
	if (document.cookie.length > 0) { 
		// if there are any cookies      
		offset = document.cookie.indexOf(search);
		if (offset != -1) {					
			// if cookie exists          
			offset += search.length;         
			// set index of beginning of value         
			end = document.cookie.indexOf(";", offset);          
			// set index of end of cookie value      
			if (end == -1)             
				end = document.cookie.length;
			return unescape(document.cookie.substring(offset, end));
			}    
		}
	return null;
}


function initMapController() {
	
	eventListeners.attachToEvent('zoom','doZoom');
	eventListeners.attachToEvent('scaleChange','changeState');
	eventListeners.attachToEvent('positionChange','changeState');
	//eventListeners.attachToEvent('init','positionGui');
		
	/**
	 * Layer implementations.
	 */
	SVGLayer.implementation=new GWMSVGLayer();
	TiledSVGLayer.implementation=new GWMSVGLayer();
	DynamicSVGLayer.implementation=new GWMSVGLayer();
	
	engine=new WebEngine();
	var wfsEngine=new WFSEngine(baseUrl+'/proxy/WFSPostProxy.aspx');
	engine.registerHandler('query',wfsEngine);
	var wmsEngine=new WMSEngine(baseUrl+'/proxy/WMSPostProxy.aspx');
	engine.registerHandler('mapQuery',wmsEngine);
	var detailEngine=new DetailEngine(baseUrl+'/services/Detail.aspx');
	engine.registerHandler('detail',detailEngine);
	/*var catEngine=new CATEngine(baseUrl+'/proxy/CATPostProxy.aspx');
	engine.registerHandler('catalog',catEngine);*/
	var pdfEngine=new PDFEngine(baseUrl+'/services/PrintMap.aspx');
	engine.registerHandler('printPdf',pdfEngine);
	
	popups=new Popups();
	document.body.onmousemove=new Function("popups.dragPopup()");
	document.body.onmouseup=new Function("popups.endDragPopup()");
	
	mapInfo.setProperty('engineUrl',baseUrl+'/dispatcher.aspx');
	mapInfo.setProperty('serverUrl',baseUrl+'/');
	mapInfo.setProperty('initGUI',false);
	mapInfo.setProperty('currentZoom',0);
	mapInfo.setProperty('emptyDynamicLayerunder',1);
	mapInfo.setProperty('emptyDynamicLayerover',1);
	mapInfo.setProperty('emptyDynamicLayertop',1);
	mapInfo.setProperty('emptyDynamicLayervip',1);
	mapInfo.setProperty('categories',new Array());
	mapInfo.setProperty('legendFeature','');
	mapInfo.setProperty('legendCategory','');
	mapInfo.setProperty('legendFeatures',new Array());
	mapInfo.setProperty('legendFeaturesByLayer',new Array());
	mapInfo.setProperty('maxResultsPerPage',12);
	mapInfo.setProperty('queryZoom',0.5);
	mapInfo.setProperty('bufferZones',new Array());
	mapInfo.setProperty('keysSeparator',';');
	mapInfo.setProperty('useCatalog',false);
	mapInfo.setProperty('mapthematisms',new Array());
	mapInfo.setProperty('tooltipMode','smart');
	mapInfo.setProperty('infoTollerancePixels',4);
	mapInfo.setProperty('analysisCount',0);
	mapInfo.setProperty('zoomScaleSteps',6);
	mapInfo.setProperty('minimumSelectionRange',80);
	var printDenied=new Array();
	printDenied.push('ortofoto');
	printDenied.push('base3.GeoParticelle');
	printDenied.push('base3.GeoEdifici');
	mapInfo.setProperty('printDenied',printDenied);
	
	Renderer.implementations['text']='TextRenderer';
	Renderer.implementations['linear']='LinearRenderer';
	Renderer.implementations['areal']='ArealRenderer';
	Renderer.implementations['raster']='RasterRenderer';
	Renderer.implementations['punctual']='PunctualRenderer';
	Renderer.implementations['virtual']='VirtualRenderer';
	Renderer.implementations['histogram']='HistogramRenderer';
	Renderer.implementations['pie']='PieRenderer';
	Renderer.styleReader=new SLDReader();
	var featuresToNodes=new Array();
	mapInfo.setProperty('featuresToNodes',featuresToNodes);
	
	for(var pos in extensions) {
		var extension=extensions[pos];
		
		eval(extension+'Begin()');
	}

	eventListeners.fireEvent('init');
	
	automa=new Automa('LoadConfiguration',6,'automa');
	
	automa.start();
}		

function automaLoadConfigurationPhase1() {
	automa.goOn();
	//loadFile('mainGui.html','mainGui');
}

/*function automaLoadConfigurationPhase2() {
	engine.sendMsg("Info",null,'returnGetMaps',"getMaps");
}*/

function automaLoadConfigurationPhase2() 
//function returnGetMaps(retrow)
{
	var retrow=mapInfo.getProperty('getMapsRetrow');
	
	var i;
	var maps;
	if(retrow.indexOf(';')!=-1)
		maps=retrow.split(';');
	else
		maps=new Array(retrow);
	
	for(i=0;i<maps.length;i++)
	{
		var fields=maps[i].split(',');
		
		mapInfo.setProperty('applicationName',fields[0]);
		var mapname = 'mappa';
		var xmin = parseFloat(fields[1]);
		var ymin = parseFloat(fields[2]);
		var xmax = parseFloat(fields[3]);
		var ymax = parseFloat(fields[4]);
		var maxScale=parseInt(fields[5]);
		var legendName=fields[6];
		var meterWidth=parseInt(fields[7]);
		var type=fields[8];
		var zooms=fields[9];
		
		var defaultTopo=parseInt(fields[10]);
		var confNumber=fields.length-11;
		var confArr=new Array();
		for(var count=0;count<confNumber;count++)
			confArr.push(parseInt(fields[11+count]));
		
		var originalRange=new Range(0,mapWidth,0,mapHeight);

		var maxRealRange=new Range(xmin,xmax,ymin,ymax);
		maxRealRange.adjustAspectRatio(mapWidth,mapHeight);
		var realRange=maxRealRange.copy();
		
		map=new Map(originalRange,realRange,maxRealRange,'goOn()',mapInfo.getProperty('basePath'),'map',mapname,maxScale,legendName,meterWidth,type,zooms,defaultTopo,confArr);

		mapArray[mapname] = map;
		
	}
	
	automa.goOn();
	
}

function automaLoadConfigurationPhase3() {
	if(mapInfo.getProperty('useCatolog'))
		engine.sendMsg("catalog",null,'returnGetGeoModels','getGeoModels');
	else
		automa.goOn();
}

function returnGetGeoModels(retrow) {
	retrow=retrow.replace(/\&lt\;/gi,'<');
	retrow=retrow.replace(/\&gt\;/gi,'>');
	
	var rexp=new RegExp("<tGeoModel.*?name=\"([^\"]*)\".*?>","gi");
	var models=new Array();
	while((result=rexp.exec(retrow))!=null) {
		var modelName=result[1];
		models.push(modelName);
	}
	automa.setProperty('modelNumber',0)
	automa.setProperty('models',models)
	automa.goOn();
}

function automaLoadConfigurationPhase4() {
	
	if(mapInfo.getProperty('useCatolog')) {
		var pos=automa.getProperty('modelNumber');
		var models=automa.getProperty('models');
		if(pos<models.length) {
			var modelName=models[pos];
			
			pos++;
			automa.setProperty('modelNumber',pos);
			automa.setProperty('modelName',modelName);
			engine.sendMsg("catalog",null,'returnResolveGeoModelByName','resolveGeoModelByName',modelName);

		} else
			automa.goOn();
	} else
		automa.goOn();
}

function returnResolveGeoModelByName(retrow) {
	retrow=retrow.replace(/\&lt\;/gi,'<');
	retrow=retrow.replace(/\&gt\;/gi,'>');
	
	var rexp=new RegExp("<node.*?name=\"([^\"]*)\".*?>","gi");
	var nodes=new Array();
	while((result=rexp.exec(retrow))!=null) {
		var nodeName=result[1];
		nodes.push(nodeName);
	}
	var featuresToNodes=mapInfo.getProperty('featuresToNodes');
	featuresToNodes[automa.getProperty('modelName')]=nodes;
	mapInfo.setProperty('featuresToNodes',featuresToNodes);
	automa.repeatPhase();
}

function automaLoadConfigurationPhase5() {
	
	hideMapGui();
	if(map)
		map.clear();
	
	automa.goOn();	
}

function automaLoadConfigurationPhase6() {
	automa.end();
	
	mapOpenFromSummary("mappa,1")
}
