/*
	File creato da Fusco R. il 30/10/08
	
	FUNZIONI ESTERNE UTILIZZATE:
	mappe.js					function addLoadingPushPin(idName,ricerca)  	
	mappe.js					function rimuoviMapLayer(nomeLayer)				
	mappe.js					function aggiungiMapLayer(nomeLayer, layer)
	mappe.js					function loadXMLPushPinTag(skipperLayerName, xmlPushPinDocument)
	mappe.js					function getMapLayer()
	risultatiCartografico.js	function removeAllRicerche() 	 				
								function hide()
								function show()
								function getObject()
	
	
	FUNZIONI DEFINITE NEL FILE

	
	function validaCampi()
	function getVettoreParametriCercaLuogo()
	function submitti(alert1,alert2)
	function inviaCercaLuogo()
	function caricaCercaLuogo(url,luogo,tipo, reg,prov,comune)
	function inviaFormRicercaLuogo(urlRisultati, urlCartografia,alert1,alert2)
	function inviaFormCercaLuoghiPagina(urlRisultati,vettoreParametri)
	function loadRisultati()
	function inviaFormRicercaLuoghiCartografico(urlCartografia,vettoreParametri)
	function loadLuoghiTrovati()
	function registerCercaLuoghiLayer(uri, vettoreParametri)
	function mostraLuoghiInCartografico()
	
	var inviaFormRicercaLuogoHTTPRequest = null;
	var inviaRicercaLuogoHTTPRequest = null;

	*/

	var inviaFormRicercaLuogoHTTPRequest = null;
	var inviaRicercaLuogoHTTPRequest = null;
	var keyword='';
	
	/*Validazione dei campi di ricerca Luogo*/
	function validaCampi(alert1,alert2)
	{
		o1 = getObject('luogokeyword');
		o2 = getObject('tipoSelected');
	  	o3 = getObject('regioniSelect');
  	  	o4 = getObject('provinceSelect'); 
  	  	o5 = getObject('comuniSelect');
		keyword=o1.value;
			  	
	  	if (keyword == message_resource['portalportonomeLuogo']) 
	  		keyword='';
	  	//taglio gli spazi in testa e coda
	  	keyword = keyword.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");	  	  

	  	if (keyword.length>0 && keyword.length<4)
	  	{	  		  
	  		  alert(alert1);
	  	  	return false;
	  	}	  	 
	  	  
	  	if (keyword.length==0 && o2.value.length==0 && o3.value.length==0 && o4.value.length==0 && o5.value.length==0)
	  	{	  	  	
	  	  	alert(alert2);
	  	  	return false;
	  	}		
	  	return true;
	}
	
	
	/*carica il vettore dei parametri usati nella chiamata ajax*/
	function getVettoreParametriCercaLuogo()
	{
		o1 = getObject('luogokeyword');
	  	o2 = getObject('tipoSelected');
	  	o3 = getObject('regioniSelect');
  	  	o4 = getObject('provinceSelect'); 
  	  	o5 = getObject('comuniSelect');
		
		vettoreParametri = new Array();
		
		vettoreParametri[vettoreParametri.length] = "luogokeyword=" +encodeURIComponent(keyword);   
 	  	vettoreParametri[vettoreParametri.length] = "tipoSelected=" + o2.value;   
  	 	 vettoreParametri[vettoreParametri.length] = "regioniSelect=" + o3.value;   
  	  	vettoreParametri[vettoreParametri.length] = "provinceSelect=" + o4.value;   
  	  	vettoreParametri[vettoreParametri.length] = "comuniSelect=" + o5.value;     
      	return vettoreParametri;
	}
	
	
	//funzione che setta i valori dei campi della ricerca dei luoghi
	function settaCampiLuogo(luogo, tipo, reg, prov, comune)
	{
		getObject('luogokeyword').value = luogo;
	    getObject('tipoSelected').value = tipo;
	    getObject('regioniSelect').value = reg;
  	    getObject('provinceSelect').value = prov; 
  	    getObject('comuniSelect').value = comune;
	}
	
	
	/* Funzione invocata quando si effettua una ricerca di luogo e non si č nel cartografico*/
	function submitti(alert1,alert2)	
	{
		var valido = validaCampi(alert1,alert2);
		if (!valido)
			return false;
		else
		{
			o1 = getObject('luogokeyword');
			o1.value = keyword;		
			document.forms['ricercaLuoghi'].submit();
		}	
	}
	


	function inviaCercaLuogo(){
		document.forms['ricercaLuoghi'].submit();
		return true;
	}
	
	
	/*Funzione che viene chiamata al momento dell'apertura della pagina del cartografico, nel caso si sia effettuata
	una ricerca dei luoghi quando non si era nella pagina del cartografico */
	function caricaCercaLuogo(urlRisultati,urlCartografia,luogo,tipo, reg,prov,comune){
		removeAllRicerche();
		
		/*i campi erano giā stati validati prima della http request, adesso li setto per 
		mostrare le opzioni scelte*/
		settaCampiLuogo(luogo, tipo, reg, prov, comune)
		
		//carico il vettore dei parametri
		vettoreParametri = getVettoreParametriCercaLuogo();
		
		//imposto i layer per la gestione dei riposizionamenti in seguito all'evento zoom sulla mappa
	  	//riposizionamenti necessari causa quell'offset aggiunto per centrare i puhpin
	  	//sulla localitā. il riposizionamento č funzione del livello di zoom della mappa
		registerCercaLuoghiLayer(urlCartografia);
		
		/*apro il pannello della ricerca dei luoghi*/
		hideshowPanel('CercaLuogo','frecciaBiancaLuogo','frecciaBianca');
		
		//ajax request per i risultati da visualizzare nella pagina
     	inviaFormCercaLuoghiPagina(urlRisultati,vettoreParametri);     
      	
      
     	//ajax request per i risultati del cartografico     
		inviaFormRicercaLuoghiCartografico(urlCartografia,vettoreParametri);
	  	
		
		//forzo il primo caricamento del cartografico simulando uno zoom
		controllaDimensioni(null);
		
	    return false;
	}
	
	
	
	

	/*funzione chiamata in seguito alla pressione del bottone "cerca luogo" nel pannello
	ricerca luogo (e si č nel cartografico). valida i campi ed esegue due chiamate ajax per avere i risultati su cartografico 
	e nella pagina*/
	function inviaFormRicercaLuogo(urlRisultati, urlCartografia,alert1,alert2)
	{	
		removeAllRicerche();
		  	
	  	var valido = validaCampi(alert1,alert2);
	  	if (!valido)
	  		return false;
	  	
	  	/*carico il vettore dei parametri per l'ajax request*/
	  	vettoreParametri = new Array();
	  	vettoreParametri = getVettoreParametriCercaLuogo();
	  	
	  	addLoadingPushPin('loadPortiTrovatiXMLRequest');  	 
	  	
	  	//imposto i layer per la gestione dei riposizionamenti in seguito all'evento zoom sulla mappa
	  	//riposizionamenti necessari causa quell'offset aggiunto per centrare i puhpin
	  	//sulla localitā. il riposizionamento č funzione del livello di zoom della mappa
		registerCercaLuoghiLayer(urlCartografia);
     
     	//ajax request per i risultati da visualizzare nella pagina
     	inviaFormCercaLuoghiPagina(urlRisultati,vettoreParametri);     
      	
      
     	//ajax request per i risultati del cartografico     
		inviaFormRicercaLuoghiCartografico(urlCartografia,vettoreParametri);
	  	
		
		//forzo il primo caricamento del cartografico simulando uno zoom
		//controllaDimensioni(null);
	 
	}
	
	
	
	//esegue la richiesta ajax per la ricerca dei luoghi e visualizza i risultati nella pagina
	function inviaFormCercaLuoghiPagina(urlRisultati,vettoreParametri)
	{
		modulo = 'modulo_' +idmodulo;
	  	hide(modulo);
		moduloRicerca ='modulo_' +idmoduloRicerche;
	  	show(moduloRicerca);
	  	
		/*chiamata ajax per l'elenco dei risultati*/
	  	inviaRicercaLuogoHTTPRequest = makeRequest(urlRisultati, 'html', vettoreParametri);
	    if (inviaRicercaLuogoHTTPRequest.readyState != 4)
	    	inviaRicercaLuogoHTTPRequest.onreadystatechange = loadRisultati;   
	    else 
	    	loadRisultati();  	
	    return false;
	}	
	
	
	//callback per caricare i risultati della chiamata ajax nella pagina
	function loadRisultati(){
	    if (inviaRicercaLuogoHTTPRequest.readyState == 4){
	     elencoRis = getObject('risultati');
	     elencoRis.innerHTML = inviaRicercaLuogoHTTPRequest.responseText;
	    
	    }
    }
    
    
    
    
    //esegue la richiesta ajax per la ricerca dei luoghi e visualizza i risultati nel cartografico
	function inviaFormRicercaLuoghiCartografico(urlCartografia,vettoreParametri)
	{
		/*chiamata ajax per i risultati del cartografico*/
	  	inviaFormRicercaLuogoHTTPRequest = makeRequest(urlCartografia, 'html', vettoreParametri);
	  	if (inviaFormRicercaLuogoHTTPRequest.readyState != 4)
			inviaFormRicercaLuogoHTTPRequest.onreadystatechange = loadLuoghiTrovati;   
      	else 
		  	loadLuoghiTrovati();	  	
	  	return false;
	}	
	
	
   /*callback della chiamata ajax per i risultati del cartografico*/
   function loadLuoghiTrovati()
   {
   	if (inviaFormRicercaLuogoHTTPRequest != null)
	  if (inviaFormRicercaLuogoHTTPRequest.readyState == 4)	  
	  {
	  	removeLoadingPushPin('loadPortiTrovatiXMLRequest');   
	 	 mostraLuoghiInCartografico()
	  }
   }
   
    
	
	//Registra i layer dei luoghi che si attiveranno a seconda del livello di zoom
 	function registerCercaLuoghiLayer()
    {    	
    	/*Questi layer non hanno shape attaccati a essi, vengono solo usati dalla callback
		dell'evento zoom che lancia la loadfunction del layer corrispondente all'attuale livello
		di zoom 
		 */
     	cercaLuoghiLayer = new VEShapeLayer();
     	cercaLuoghiLayer1 = new SkipperLayer();
     	cercaLuoghiLayer1.maxZoom=17;
     	cercaLuoghiLayer1.minZoom=2;
     	cercaLuoghiLayer1.loaded=false;
     	cercaLuoghiLayer1.loadfunction="mostraLuoghiInCartografico();";
     	

		/*Questo č il layer che verrā caricato con le shape, dopo la chiamata ajax eseguita da
		da layer.loadfunction
		*/
	    aggiungiMapLayer('luoghiTrovatiLayer', cercaLuoghiLayer);     

		/*aggiungo i layer alla hashtable usata dalla callback dell'evento di zoom*/
     	aggiungiLayer('cercaLuoghiLayer1', cercaLuoghiLayer1);     	                    
   }   
    
   
   
   /*carica i layer per le microsoft maps*/
   function mostraLuoghiInCartografico()
   {
 //  		skipperLayerNew = getMapLayer('luoghiTrovatiLayer');
  //  	if (skipperLayerNew != null)     	
//	    	skipperLayerNew.Hide();
     	if (inviaFormRicercaLuogoHTTPRequest != null)
	  		if (inviaFormRicercaLuogoHTTPRequest.readyState == 4)	  
	   		{
//	    myLayer = new VEShapeLayer();
//		rimuoviMapLayer('luoghiTrovatiLayer', myLayer);
//	    aggiungiMapLayer('luoghiTrovatiLayer', myLayer);
     //codice per IE
			      if (window.ActiveXObject)
			      {
			       xmlDocLuoghiTrovati=new ActiveXObject("Microsoft.XMLDOM");
			       xmlDocLuoghiTrovati.loadXML(inviaFormRicercaLuogoHTTPRequest.responseText);
			       rit = loadXMLPushPinTag('luoghiTrovatiLayer', xmlDocLuoghiTrovati);
			      }
			      //codice per Mozilla, Firefox, Opera, etc.
			      else 
			      {
			       var parser=new DOMParser();
			       xmlDocLuoghiTrovati=parser.parseFromString(inviaFormRicercaLuogoHTTPRequest.responseText,"text/xml");
			       rit = loadXMLPushPinTag('luoghiTrovatiLayer', xmlDocLuoghiTrovati);
			       }      
			      
			      myLayer = getMapLayer('luoghiTrovatiLayer');	     
				  try{		     
				     	map.AddShapeLayer(myLayer);		
					//  myLayer.Show();    
					}
				    catch(e)
				    {
				    	alert(e.message);
				    }
			}
}