/*
	File creato da Fusco R. il 24/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 inviaFormRicercaServizi(urlCartografia,urlRisultati)
	function loadServiziTrovati()
	function validaCampiServizi()
	function loadRisultatiServizi()
	function registerSupplierServiziLayer(uri)
	function submittiServizi()	
	function inviaCercaServizi()
	function removeServiziLayer()
	function settaCampiServizi()
	function caricaCercaServizi()
	function mostraServiziInCartografico()
	
	var inviaFormRicercaServiziHTTPRequest = null;
	var inviaRicercaServiziHTTPRequest = null;
	*/
	
	var inviaFormRicercaServiziHTTPRequest = null;
	var inviaRicercaServiziHTTPRequest = null;
	var vettoreParametriServizi=null;
	
	
	//funzione per la validazione dei campi di ricerca	
	function validaCampiServizi(messaggioAlert)
	{
	  o1 = getObject('serviziRegioniSelected');
	  o2 = getObject('serviziProvinceSelected');
	  o3 = getObject('serviziPortiSelect');
  	  o4 = getObject('serviziComuniSelect'); 
  	  o5 = getObject('serviziSelectB');
  	  o6 = getObject('serviziSelectE');
  	  o7 = getObject('serviziSelectT');	
  	  o8 = getObject('serviziSelectBarche');  
	  	  
	  if (o1.value.length==0 && o2.value.length==0 && o3.value.length==0 && o4.value.length==0 && o5.value.length==0 && o6.value.length==0 && o7.value.length==0 && o8.value.length==0)
	  {
	  	  alert(messaggioAlert);
	  	  return false;
	  }		
	  return true;
	}
	
	
	//funzione che setta i valori dei campi della ricerca dei servizi
	function settaCampiServizi(regione,provincia,porto,locality, serviziB, serviziE, serviziT,serviziBarche)
	{
		getObject('serviziRegioniSelected').value = regione;
	    getObject('serviziProvinceSelected').value = provincia;
	    getObject('serviziPortiSelect').value = porto;
  	    getObject('serviziComuniSelect').value = locality; 
  	    
  	    getObject('serviziSelectB').value = serviziB;
	    getObject('serviziSelectE').value = serviziE;
	    getObject('serviziSelectT').value = serviziT;
		getObject('serviziSelectBarche').value = serviziBarche;
	}
	
	
	/*carica il vettore dei parametri usati nella chiamata ajax*/
	function getVettoreParametriServizi()
	{
		o1 = getObject('serviziRegioniSelected');
	  	o2 = getObject('serviziProvinceSelected');
	  	o3 = getObject('serviziPortiSelect');
  	  	o4 = getObject('serviziComuniSelect'); 
  	  	o5 = getObject('serviziSelectB');
  	  	o6 = getObject('serviziSelectE');
  	  	o7 = getObject('serviziSelectT');
      	o8 = getObject('serviziSelectBarche');
	  	vettoreParametri = new Array();

	  	vettoreParametri[vettoreParametri.length] = "regioniSelected=" + o1.value;   
 	  	vettoreParametri[vettoreParametri.length] = "provinceSelected=" + o2.value;   
  	  	vettoreParametri[vettoreParametri.length] = "portiSelect=" + o3.value;   
  	  	vettoreParametri[vettoreParametri.length] = "localitySelect=" + o4.value;   
  	  	vettoreParametri[vettoreParametri.length] = "serviziSelectB=" + o5.value;  
  	   	vettoreParametri[vettoreParametri.length] = "serviziSelectE=" + o6.value;   
  	    vettoreParametri[vettoreParametri.length] = "serviziSelectT=" + o7.value;     	   	    	   	 
      	vettoreParametri[vettoreParametri.length] = "serviziSelectBarche=" + o8.value;
      	return vettoreParametri;
	}
	
	
	function inviaCercaServizi(){
		document.forms['ricercaServizi'].submit();
		return true;
	}
	
	//funzione chiamata quando si preme il pulsante cerca del pannello cerca servizi e non si č nel cartografico	
	function submittiServizi(messaggioAlert)	
	{
		var valido = validaCampiServizi(messaggioAlert);
		if (!valido)
			return false;
		else
		{			
			document.forms['ricercaServizi'].submit();
		}			
	}
	
	/*Funzione che viene chiamata al momento dell'apertura della pagina del cartografico, nel caso si sia effettuata
	una ricerca dei servizi quando non si era nella pagina del cartografico */
	function caricaCercaServizi(urlRisultati,urlCartografia,regione,provincia,porto,locality, serviziB, serviziE, serviziT,serviziBarche){
	
		removeAllRicerche();
		
		/*i campi erano gią stati validati prima della http request, adesso li setto per mostrare le opzioni scelte*/
		settaCampiServizi(regione,provincia,porto,locality, serviziB, serviziE, serviziT,serviziBarche);
		
		//carico il vettore dei parametri solo una volta mettendolo in variabile globale
		vettoreParametriServizi = getVettoreParametriServizi();
		
		hideshowPanel('CercaServizi','frecciaBiancaLuogo','frecciaBianca');
		
		//imposto i layer per la gestione dei ricaricamenti in seguito all'evento zoom sulla mappa
		registerSupplierServiziLayerNew(urlCartografia, vettoreParametriServizi);
		
		//ajax request per i risultati da visualizzare nella pagina
		inviaFormRicercaServiziPagina(urlRisultati, vettoreParametriServizi);
		
		//ajax request per i risultati del cartografico
		inviaFormRicercaServiziCartografico(urlCartografia,vettoreParametriServizi);	
		
		
		
		//forzo il primo caricamento del cartografico simulando uno zoom
		//controllaDimensioni(null);
		
	/*	try{
			modulo = 'modulo_' +idmodulo;
			hide(modulo);
		}
		 catch(e){
    		alert("caricacercaservizi"+e.message);
   		}
		hideshowPanel('CercaServizi','frecciaBiancaLuogo','frecciaBianca');
		
	    
		vettoreParametri = new Array();
		
		vettoreParametri[vettoreParametri.length] = "regioniSelected=" + regione;   
 	 	vettoreParametri[vettoreParametri.length] = "provinceSelected=" + provincia;   
  	    vettoreParametri[vettoreParametri.length] = "portiSelect=" + porto;   
  	    vettoreParametri[vettoreParametri.length] = "localitySelect=" + locality;   
  	    
  	    vettoreParametri[vettoreParametri.length] = "serviziSelectB=" + serviziB;       	 
	    vettoreParametri[vettoreParametri.length] = "serviziSelectE=" + serviziE;       
	    vettoreParametri[vettoreParametri.length] = "serviziSelectT=" + serviziT;     
	 vettoreParametri[vettoreParametri.length] = "serviziSelectBarche=" + serviziBarche;
      	inviaFormRicercaServiziHTTPRequest = makeRequest('<%=response.encodeURL("porto.do?method=postCercaServizi")%>', 'html', vettoreParametri);
		  if (inviaFormRicercaServiziHTTPRequest.readyState != 4)
			  inviaFormRicercaServiziHTTPRequest.onreadystatechange = loadServiziTrovati;   
	      else 
			  loadServiziTrovati();
		  
	 	moduloRicerca ='modulo_' +idmoduloRicerche;
	  	show(moduloRicerca);

		  inviaRicercaServiziHTTPRequest = makeRequest(url, 'html', vettoreParametri);
		    if (inviaRicercaServiziHTTPRequest.readyState != 4)
		     inviaRicercaServiziHTTPRequest.onreadystatechange = loadRisultatiServizi;   
		    else 
		     loadRisultatiServizi();
		    */
		 return false;
	}
	
	    
	
	/*funzione chiamata in seguito alla pressione del bottone "ricerca servizi" nel pannello
	ricerca servizi (e si č nel cartografico). valida i campi ed esegue due chiamate ajax per avere i risultati su cartografico 
	e nella pagina*/
	function gestoreRicercaServizi(urlCartografia, urlRisultati, messaggioAlert)
	{
		//valido i campi di ricerca
 		var valido = validaCampiServizi(messaggioAlert);
 		if (!valido)
			return false; 
			
		//rimuovo i layer di tutte le altre precedenti ricerche
		removeAllRicerche();
		
		//carico il vettore dei parametri solo una volta mettendolo in variabile globale
		vettoreParametriServizi = getVettoreParametriServizi();
		
		//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
		registerSupplierServiziLayerNew(urlCartografia, vettoreParametriServizi);
		
		addLoadingPushPin('loadServiziTrovatiXMLRequest');
		
		//ajax request per i risultati da visualizzare nella pagina
		inviaFormRicercaServiziPagina(urlRisultati, vettoreParametriServizi);
		
		//ajax request per i risultati del cartografico
		inviaFormRicercaServiziCartografico(urlCartografia,vettoreParametriServizi);		
		
		
		
		//forzo il primo caricamento del cartografico simulando uno zoom
		//controllaDimensioni(null);
	
	}
	
	
	//esegue la richiesta ajax per la ricerca dei servizi e visualizza i risultati nella pagina
	function inviaFormRicercaServiziPagina(urlRisultati,vettoreParametri)
	{
		/*chiamata ajax per l'elenco dei risultati*/
		modulo = 'modulo_' +idmodulo;
	  	hide(modulo);
		moduloRicerca ='modulo_' +idmoduloRicerche;
	  	show(moduloRicerca);
	  	inviaRicercaServiziHTTPRequest = makeRequest(urlRisultati, 'html', vettoreParametri);
	    if (inviaRicercaServiziHTTPRequest.readyState != 4)
	    	inviaRicercaServiziHTTPRequest.onreadystatechange = loadRisultatiServizi;   
	    else 
	    	loadRisultatiServizi();  	
	     return false;
	}	
	
	
	/*callback per il prelievo dei risultati da mostrare nella pagina*/
   function loadRisultatiServizi(){
	    if (inviaRicercaServiziHTTPRequest.readyState == 4){
	     elencoRisServizi = getObject('risultati');
	     elencoRisServizi.innerHTML = inviaRicercaServiziHTTPRequest.responseText;
	    
	    }
    }
    
    
	
	
	//esegue la richiesta ajax per la ricercad dei servizi e visualizza i risultati nel cartografico
	function inviaFormRicercaServiziCartografico(urlCartografia,vettoreParametri)
	{  
		//vettoreParametri = vettoreParametriServizi;
	//	skipperLayerNew = getMapLayer('supplierServiziLayer');
    //	if (skipperLayerNew != null)     	
	 //   	skipperLayerNew.Hide();   
	
		/*chiamata ajax per i risultati del cartografico*/
      	inviaFormRicercaServiziHTTPRequest = makeRequest(urlCartografia, 'html', vettoreParametri);
	  	if (inviaFormRicercaServiziHTTPRequest.readyState != 4)
		  inviaFormRicercaServiziHTTPRequest.onreadystatechange = loadServiziTrovati;   
      	else 
		  loadServiziTrovati();	  
	  	
	  	return false;
	}
	
	
	/*callback per il prelievo dei risultati del cartografico*/
	function loadServiziTrovati()
	{
		if (inviaFormRicercaServiziHTTPRequest != null)
		  if (inviaFormRicercaServiziHTTPRequest.readyState == 4)	  
		  {
	  		removeLoadingPushPin('loadServiziTrovatiXMLRequest');   
	 	 	mostraServiziInCartografico();
	  	  }
	}
	   


	
    
    
    //Registra i layer dei servizi che si attiveranno a seconda del livello di zoom
    /*Non PIU USATA PERCHE' ESEGUE UNA CHIAMATA AJAX PER OTTENERE SEMPRE GLI STESSI RISULTATI
    vedi registerSupplierServiziLayer
    */
 	function registerSupplierServiziLayer(uri, vettoreParametri)
    {    	
    	/*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 
		 */
     	supplierServiziLayer = new VEShapeLayer();
     	supplierServiziLayer1 = new SkipperLayer();
     	supplierServiziLayer1.maxZoom=6;
     	supplierServiziLayer1.minZoom=2;
     	supplierServiziLayer1.loaded=false;
     	supplierServiziLayer1.loadfunction="inviaFormRicercaServiziCartografico('" + uri + "&livello=1');";

     	supplierServiziLayer2 = new SkipperLayer();
	    supplierServiziLayer2.maxZoom=8;
    	supplierServiziLayer2.minZoom=7;
     	supplierServiziLayer2.loaded=false;
     	supplierServiziLayer2.loadfunction="inviaFormRicercaServiziCartografico('" + uri + "&livello=2');";

	    supplierServiziLayer3 = new SkipperLayer();
     	supplierServiziLayer3.maxZoom=11;
	    supplierServiziLayer3.minZoom=9;
    	supplierServiziLayer3.loaded=false;
     	supplierServiziLayer3.loadfunction="inviaFormRicercaServiziCartografico('" + uri + "&livello=3');";

     	supplierServiziLayer4 = new SkipperLayer();
     	supplierServiziLayer4.maxZoom=17;
     	supplierServiziLayer4.minZoom=12;
     	supplierServiziLayer4.loaded=false;
     	supplierServiziLayer4.loadfunction="inviaFormRicercaServiziCartografico('" + uri + "&livello=4');";

		/*Questo č il layer che verrą caricato con le shape, dopo la chiamata ajax eseguita da
		da layer.loadfunction
		*/
	    aggiungiMapLayer('supplierServiziLayer', supplierServiziLayer);     

		/*aggiungo i layer alla hashtable usata dalla callback dell'evento di zoom*/
     	aggiungiLayer('supplierServiziLayer1', supplierServiziLayer1);
     	aggiungiLayer('supplierServiziLayer2', supplierServiziLayer2);
     	aggiungiLayer('supplierServiziLayer3', supplierServiziLayer3);
     	aggiungiLayer('supplierServiziLayer4', supplierServiziLayer4);                    
   }
   
   
   //Registra i layer dei servizi che si attiveranno a seconda del livello di zoom
   /*Rifa il parsing del documento xml ricevuto con la chiamata ajax*/
 	function registerSupplierServiziLayerNew(uri, vettoreParametri)
    {    	
    	/*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 
		 */
     	supplierServiziLayer = new VEShapeLayer();
     	supplierServiziLayer1 = new SkipperLayer();
     	supplierServiziLayer1.maxZoom=17;
     	supplierServiziLayer1.minZoom=2;
     	supplierServiziLayer1.loaded=false;
     	supplierServiziLayer1.loadfunction="mostraServiziInCartografico();";     	

		/*Questo č il layer che verrą caricato con le shape, dopo la chiamata ajax eseguita da
		da layer.loadfunction
		*/
	    aggiungiMapLayer('supplierServiziLayer', supplierServiziLayer);     

		/*aggiungo i layer alla hashtable usata dalla callback dell'evento di zoom*/
     	aggiungiLayer('supplierServiziLayer1', supplierServiziLayer1);     	                    
   }
   
   
   /*carica i layer per le microsoft maps*/
   function mostraServiziInCartografico()
   {   
   		if (inviaFormRicercaServiziHTTPRequest != null)
		  if (inviaFormRicercaServiziHTTPRequest.readyState == 4)  
	   	  {
	    //	myLayer = new VEShapeLayer();
		//	rimuoviMapLayer('luoghiTrovatiLayer', myLayer);
		//	rimuoviMapLayer('serviziTrovatiLayer', myLayer);
	    //	aggiungiMapLayer('serviziTrovatiLayer', myLayer);
     		//codice per IE
      		if (window.ActiveXObject)
      		{
       			xmlDocServiziTrovati=new ActiveXObject("Microsoft.XMLDOM");
       			xmlDocServiziTrovati.loadXML(inviaFormRicercaServiziHTTPRequest.responseText);
       			rit = loadXMLPushPinTag('supplierServiziLayer', xmlDocServiziTrovati);
      		}
      		//codice per Mozilla, Firefox, Opera, etc.
      		else 
      		{
       			var parser=new DOMParser();
       			xmlDocServiziTrovati=parser.parseFromString(inviaFormRicercaServiziHTTPRequest.responseText,"text/xml");
       			rit = loadXMLPushPinTag('supplierServiziLayer', xmlDocServiziTrovati);
       		}      		
      		myLayer = getMapLayer('supplierServiziLayer');
     		
  			try{
  			     map.AddShapeLayer(myLayer);
  			 }
   			catch(e)
   			{
    			alert("loadServiziTrovati" + e.message);
   			}
   	   }
   }
    
   
   	//rimuove tutti i layer usati dalla funzionalitą ricercaServizi
  	function removeServiziLayer()
	{ 		
 		rimuoviMapLayer('supplierServiziLayer');

 		rimuoviLayer('supplierServiziLayer1'); 	  		
	}
