// imprese_cciaa.js
// autore: Kiko
// copyright 2006 Metaware S.p.A.
// creato il 14/02/2006

/*
 * L'oggetto CCIAAClient contiene i metodi e i dati pertinenti alla gestione dei dati dinimici di CCIAA 
 */
var CCIAAClient = new Object();

// Inizializzazione dell'oggetto downloader
/** 
 * L'id dell'elemento HTML che verra' manipolato dalle funzioni di managing dei vari eventi. 
 * Inoltre, durante il loading di una servlet, verranno disabilitati tutti gli input 
 * al suo interno 
 */ 
CCIAAClient.elementId = null;
CCIAAClient.loaderId = null;
CCIAAClient.postExecute = null;
CCIAAClient.manageData = null;
CCIAAClient.isOperating = false;
CCIAAClient.cf = null;    //cf per il quale e' stata fatta la richiesta

/* Questo e' il metodo da invocare per recuperare i dati da CCIAA.
 * - cf e' il codice fiscale di cui si vogliono conoscere i dettagli
 * - divId e' l'id del div che contiene i campi da disabilitare durante il caricamento (OPZIONALE)
 * - loaderId e' l'id del div che contiene il box di informazione di loading (OPZIONALE)
 * - manageData e' la funzione che verra' chiamata una volta ottenuto il DOM di risposta e che provvedera' 
 *		a gestire i dati ricevuti (aggiornando/abilitando campi, riempiendo labels etc...)
 * - postExecute puo' contenere del codice javascript arbitrario da eseguire quando
 *    arriva una risposta positiva dalla servlet (dopo che vengono caricati i dati).
 */
CCIAAClient.caricaImpresaDaCF = function (cf, loaderId, divId, manageData, postExecute)
{
	// POSSIBILE CORSA CRITICA, ma solo se l'utente si mette a cliccare come un forsennato a caso
	while (CCIAAClient.isOperating == true)
	{
		//return;
	}
  
  CCIAAClient.cf = cf;
  CCIAAClient.isOperating = true;
  CCIAAClient.elementId = divId;     //bruuuuuutto!!!
  CCIAAClient.loaderId = loaderId;     //bruuuuuutto!!!
  CCIAAClient.postExecute = postExecute;
  CCIAAClient.downloader = MwAjaxUtil.newXMLDownloader();

	// TODO controllare che manageData sia funzione e non variabile!  
  CCIAAClient.manageData = manageData; //bruuuuuutto!!!
  CCIAAClient.vediLoading(true);                //mostra il box di attesa
  var risposta = this.processRequest('imprese-CCIAA?cf=' + cf);
} 

/* Questo e' il metodo da invocare per recuperare i dati da CCIAA.
 * - cf e' il codice fiscale di cui si vogliono conoscere le imprese rappresentate
 * - tableId e' l'id dell'elemento HTML gestito dal metodo manageData 
 * - loaderId e' l'id del div che contiene il box di informazione di loading (OPZIONALE)
 * - manageData e' la funzione che verra' chiamata una volta ottenuto il DOM di risposta e che provvedera' 
 *		a gestire i dati ricevuti (aggiornando/abilitando campi, riempiendo labels etc...)
 * - postExecute puo' contenere del codice javascript arbitrario da eseguire quando
 *    arriva una risposta positiva dalla servlet (dopo che vengono caricati i dati).
 */
CCIAAClient.elencoImpreseRappresentate = function (cf, ente, loaderId, tableId, manageData, postExecute)
{
	// POSSIBILE CORSA CRITICA, ma solo se l'utente si mette a cliccare come un forsennato a caso
	while (CCIAAClient.isOperating == true)
	{
		//return;
	}

	if (ente == null || ente == 'divLoading')
	{
		alert ("TODO ti sei dimenticato di aggiornare l'invocazione di elencoImpreseRappresentate, manca l'ente dopo il codice fiscale");
	}

	  CCIAAClient.cf = cf;
	  CCIAAClient.isOperating = true;
	  CCIAAClient.elementId = tableId;     //bruuuuuutto!!!
	  CCIAAClient.loaderId = loaderId;     //bruuuuuutto!!!
	  CCIAAClient.postExecute = postExecute;
	  CCIAAClient.downloader = MwAjaxUtil.newXMLDownloader();

	  // TODO controllare che manageData sia funzione e non variabile!  
	  CCIAAClient.manageData = manageData; //bruuuuuutto!!!
	  CCIAAClient.vediLoading(true);                //mostra il box di attesa
	
	  var risposta = this.processRequest('imprese-CCIAA?client=scrivania&cf=' + cf + '&command=ditte_rappresentate&ente=' + ente);
} 


/**
 * Questo metodo invoca la servlet imprese-CCIAA chiedendo il dettaglio per una data posizione nel
 * Registro delle imprese.
 * In maniera asincrona verra' invocato o il metodo dettaglioImpresa() o il metodo erroreDettaglioImpresa dell'
 * oggetto handler passato.
 * 
 * Parametri:
 * rea: il numero rea dell'impresa 
 * provincia: la provincia
 * handler: un oggetto che deve avere i metodi dettaglioImpresa() e erroreDettaglioImpresa(). Il primo accetta un oggetto di classe DettaglioImpresa,
 *      il secondo una eccezione  
 * loaderId : l'id del div che contiene il messaggio di caricamento in corso 
 *
 * Un oggetto di classe DettaglioImpresa e' così fatto:
 *
 		dettaglio.formaGiuridica
		dettaglio.ragioneSociale
		dettaglio.codiceFiscale
		dettaglio.partitaIVA
 		
 		dettaglio.iscrizioneCCIAA.data
		dettaglio.iscrizioneCCIAA.provincia
		dettaglio.iscrizioneCCIAA.rea

		dettaglio.indirizzo.stato.nome
		dettaglio.indirizzo.stato.codice 

		dettaglio.indirizzo.provincia.nome
		dettaglio.indirizzo.provincia.sigla		
		dettaglio.indirizzo.provincia.codiceISTAT 

		dettaglio.indirizzo.comune.nome
		dettaglio.indirizzo.comune.codiceCatastale		
		dettaglio.indirizzo.comune.codiceISTAT		

 		dettaglio.indirizzo.cap
		dettaglio.indirizzo.toponimo
		dettaglio.indirizzo.denominazioneStradale
		dettaglio.indirizzo.numeroCivico
		dettaglio.indirizzo.eMail
		dettaglio.telefonoUfficio
		dettaglio.telefonoFax
 
 */
CCIAAClient.dettaglioImpresa = function (rea, provincia, handler, loaderId)
{
	// POSSIBILE CORSA CRITICA, ma solo se l'utente si mette a cliccare come un forsennato a caso
	while (CCIAAClient.isOperating == true)
	{
		//return;
	}

	CCIAAClient.downloader = MwAjaxUtil.newXMLDownloader();

	CCIAAClient.isOperating = true;
	CCIAAClient.loaderId = loaderId;     //bruuuuuutto!!!
	CCIAAClient.vediLoading(true);                //mostra il box di attesa
	CCIAAClient.manageData = CCIAAClient.manageDataDettaglioImpresa;
	CCIAAClient.dettaglioImpresaHandler = handler;
	this.processRequest('imprese-CCIAA?command=dettaglio_impresa&provincia=' + provincia + '&rea=' + rea);
}

/**
 * Questo metodo invoca la servlet imprese-CCIAA chiedendo l'anagrafica di una persona presa dal
 * Registro delle imprese.
 * In maniera asincrona verra' invocato o il metodo anagraficaEstesa() o il metodo erroreAnagraficaEstesa dell'
 * oggetto handler passato.
 * 
 * Parametri:
 * cf : il codice fiscale della persona
 * handler: un oggetto che deve avere i metodi anagraficaEstesa() e erroreAnagraficaEstesa(). Il primo accetta un oggetto 
 *	    di classe DatiPersona, il secondo una eccezione  
 * loaderId : l'id del div che contiene il messaggio di caricamento in corso 
 *
 * Un oggetto di classe DatiPersona e' così fatto:
 *
 		
 
 */
CCIAAClient.anagraficaEstesa = function (cf, handler, loaderId)
{
	// POSSIBILE CORSA CRITICA, ma solo se l'utente si mette a cliccare come un forsennato a caso
	while (CCIAAClient.isOperating == true)
	{
		//return;
	}

	CCIAAClient.downloader = MwAjaxUtil.newXMLDownloader();

	CCIAAClient.isOperating = true;
	CCIAAClient.loaderId = loaderId;     //bruuuuuutto!!!
	CCIAAClient.vediLoading(true);                //mostra il box di attesa
	CCIAAClient.manageData = CCIAAClient.manageDataAnagraficaEstesa;
	CCIAAClient.anagraficaEstesaHandler = handler;
	this.processRequest('imprese-CCIAA?command=anagrafica_estesa&cf=' + cf);
}


CCIAAClient.manageDataDettaglioImpresa = function(risposta)
{
/*
<?xml version="1.0" encoding="UTF-8"?>
<risposta>
 <dettaglio-impresa>
  <forma-giuridica codice="80">SOCIETA' CONSORTILE PER AZIONI</forma-giuridica>
  <ragione-sociale>INFOCAMERE - SOCIETA' CONSORTILE DI INFORMATICA DELLE CAMERE DI  COMMERCIO ITALIANE PER AZIONI</ragione-sociale>
  <partita-iva>12345678903</partita-iva>
  <codice-fiscale>02313821007</codice-fiscale>
  <codice-REA data-iscrizione="1995-01-02" provincia="RM">804877</codice-REA>
  <indirizzo>

   <stato codice="I">Italia</stato>
   <provincia codice-istat="058" sigla="RM">ROMA</provincia>
   <comune codice-catastale="H501" codice-istat="058091">ROMA</comune>
   <cap>00187</cap>
   <toponimo>PIAZZA</toponimo>
   <denominazione-stradale>SALLUSTIO</denominazione-stradale>

   <numero-civico>21</numero-civico>
   <e-mail>relazioni.esterne@infocamere.it</e-mail>
   <telefono tipo="Ufficio">0498288111</telefono>
  </indirizzo>
 </dettaglio-impresa>
</risposta>
*/
	try
	{
		var dettaglio = new Object();
	
		dettaglio.iscrizioneCCIAA = new Object();
		dettaglio.indirizzo = new Object();
	
		dettaglio.formaGiuridica = MWUtility.mergeText(risposta.getElementsByTagName('forma-giuridica')[0]);
		dettaglio.ragioneSociale = MWUtility.mergeText(risposta.getElementsByTagName('ragione-sociale')[0]);
		dettaglio.codiceFiscale = MWUtility.mergeText(risposta.getElementsByTagName('codice-fiscale')[0]);
		dettaglio.partitaIVA = MWUtility.mergeText(risposta.getElementsByTagName('partita-iva')[0]);
	
		var codiceREA = risposta.getElementsByTagName('codice-REA')[0];
		dettaglio.iscrizioneCCIAA.data = codiceREA.getAttribute("data-iscrizione");
		dettaglio.iscrizioneCCIAA.provincia = codiceREA.getAttribute("provincia");
		dettaglio.iscrizioneCCIAA.rea = MWUtility.mergeText(codiceREA);
	
		var stato = risposta.getElementsByTagName('stato')[0];
		dettaglio.indirizzo.stato = new Object();
	
		if (stato != null)
		{
			dettaglio.indirizzo.stato.nome = MWUtility.mergeText(stato);
			dettaglio.indirizzo.stato.codice = stato.getAttribute("codice");
		}
	
		var provincia = risposta.getElementsByTagName('provincia')[0];
		dettaglio.indirizzo.provincia = new Object();
	
		if (provincia != null)
		{
			dettaglio.indirizzo.provincia.nome = MWUtility.mergeText(provincia);
			dettaglio.indirizzo.provincia.sigla = provincia.getAttribute("sigla");		
			dettaglio.indirizzo.provincia.codiceISTAT = provincia.getAttribute("codice-istat");		
		}
	
		var comune = risposta.getElementsByTagName('comune')[0];
		dettaglio.indirizzo.comune = new Object();
	
		if (comune != null)
		{
			dettaglio.indirizzo.comune.nome = MWUtility.mergeText(comune);
			dettaglio.indirizzo.comune.codiceCatastale = comune.getAttribute("codice-catastale");		
			dettaglio.indirizzo.comune.codiceISTAT = comune.getAttribute("codice-istat");		
		}
	
		dettaglio.indirizzo.cap = MWUtility.mergeText(risposta.getElementsByTagName("cap")[0]);
		dettaglio.indirizzo.toponimo = MWUtility.mergeText(risposta.getElementsByTagName("toponimo")[0]);
		dettaglio.indirizzo.denominazioneStradale = MWUtility.mergeText(risposta.getElementsByTagName("denominazione-stradale")[0]);
		dettaglio.indirizzo.numeroCivico = MWUtility.mergeText(risposta.getElementsByTagName("numero-civico")[0]);
		dettaglio.indirizzo.eMail = MWUtility.mergeText(risposta.getElementsByTagName("e-mail")[0]);
		dettaglio.indirizzo.frazione = MWUtility.mergeText(risposta.getElementsByTagName("frazione")[0]);
	
		var telefoni = risposta.getElementsByTagName('telefono');
	
		for(t = telefoni.length; t-->0 ;)
		{
			var tipo = telefoni[t].getAttribute("tipo");
	
			if (tipo == 'Ufficio')
			{
				dettaglio.telefonoUfficio = MWUtility.mergeText(telefoni[t]);
			}
			else if (tipo == "Fax")
			{
				dettaglio.telefonoFax = MWUtility.mergeText(telefoni[t]);
			}
		}

		CCIAAClient.dettaglioImpresaHandler.dettaglioImpresa(dettaglio);
	}
	catch (e)
	{
		CCIAAClient.dettaglioImpresaHandler.erroreDettaglioImpresa(e);
	}
}

CCIAAClient.manageDataAnagraficaEstesa = function(risposta)
{
/*
<?xml version="1.0" encoding="UTF-8"?>
<risposta>
 <anagrafica>
  <cognome>DI PROVA</cognome>
  <nome>UTENTE</nome>
  <codice-fiscale>DPRTNT00A01A012T</codice-fiscale>
  <nazionalita codice="I">Italia</nazionalita>
  <sesso>M</sesso>
  <nascita>
   <stato codice="I">Italia</stato>
   <provincia codice-istat="098" sigla="LO">LODI</provincia>
   <comune codice-catastale="D021" codice-istat="098021">CORNEGLIANO LAUDENSE</comune>
   <data>1938-02-05</data>
  </nascita>
  <residenza>
   <stato codice="I">Italia</stato>
   <provincia codice-istat="098" sigla="LO">LODI</provincia>
   <comune codice-catastale="E648" codice-istat="098031">LODI</comune>
   <cap>20075</cap>
   <toponimo>VIALE</toponimo>
   <denominazione-stradale>PIACENZA</denominazione-stradale>
   <numero-civico>76</numero-civico>
  </residenza>
 </anagrafica>
</risposta>

*/
	try
	{
		var anagraficaTag = risposta.getElementsByTagName('anagrafica')[0];
		var anagraficaEstesa = new Object();

		anagraficaEstesa.nascita = new Object();
		anagraficaEstesa.residenza = new Object(); 

		anagraficaEstesa.cognome = MWUtility.mergeText(MWUtility.getFirstElementByTagName(anagraficaTag, 'cognome'));
		anagraficaEstesa.nome = MWUtility.mergeText(MWUtility.getFirstElementByTagName(anagraficaTag, 'nome'));
		anagraficaEstesa.codiceFiscale = MWUtility.mergeText(MWUtility.getFirstElementByTagName(anagraficaTag, 'codice-fiscale'));
		anagraficaEstesa.sesso = MWUtility.mergeText(MWUtility.getFirstElementByTagName(anagraficaTag, 'sesso'));
		anagraficaEstesa.nazionalita = CCIAAClient.leggiStato(MWUtility.getFirstElementByTagName(anagraficaTag, 'nazionalita'));

		var nascitaTag = MWUtility.getFirstElementByTagName(anagraficaTag, 'nascita');

		if (nascitaTag != null)
		{
			anagraficaEstesa.nascita.data = MWUtility.mergeText(MWUtility.getFirstElementByTagName(nascitaTag, 'data'));
			anagraficaEstesa.nascita.stato = CCIAAClient.leggiStato(MWUtility.getFirstElementByTagName(nascitaTag, 'stato'));

			if (anagraficaEstesa.nascita.stato.codice == 'I')
			{
				anagraficaEstesa.nascita.provincia = CCIAAClient.leggiProvincia(MWUtility.getFirstElementByTagName(nascitaTag, 'provincia'));
				anagraficaEstesa.nascita.comune = CCIAAClient.leggiComune(MWUtility.getFirstElementByTagName(nascitaTag, 'comune'));
			}
			else
			{
				anagraficaEstesa.nascita.cittaStraniera =  MWUtility.mergeText(MWUtility.getFirstElementByTagName(nascitaTag, 'citta-straniera'));
			}
		}

/* 
  <residenza>
   <stato codice="I">Italia</stato>
   <provincia codice-istat="098" sigla="LO">LODI</provincia>
   <comune codice-catastale="E648" codice-istat="098031">LODI</comune>
   <cap>20075</cap>
   <toponimo>VIALE</toponimo>
   <denominazione-stradale>PIACENZA</denominazione-stradale>
   <numero-civico>76</numero-civico>
  </residenza>*/
		var residenzaTag = MWUtility.getFirstElementByTagName(anagraficaTag, 'residenza');

		if (residenzaTag != null)
		{
			anagraficaEstesa.residenza.denominazioneStradale = MWUtility.mergeText(MWUtility.getFirstElementByTagName(residenzaTag, 'denominazione-stradale'));
			anagraficaEstesa.residenza.numeroCivico = MWUtility.mergeText(MWUtility.getFirstElementByTagName(residenzaTag, 'numero-civico'));
			anagraficaEstesa.residenza.frazione = MWUtility.mergeText(MWUtility.getFirstElementByTagName(residenzaTag, 'cfrazioneivico'));
			anagraficaEstesa.residenza.stato = CCIAAClient.leggiStato(MWUtility.getFirstElementByTagName(residenzaTag, 'stato'));

			if (anagraficaEstesa.residenza.stato.codice == 'I')
			{
				anagraficaEstesa.residenza.provincia = CCIAAClient.leggiProvincia(MWUtility.getFirstElementByTagName(residenzaTag, 'provincia'));
				anagraficaEstesa.residenza.comune = CCIAAClient.leggiComune(MWUtility.getFirstElementByTagName(residenzaTag, 'comune'));

				anagraficaEstesa.residenza.cap = MWUtility.mergeText(MWUtility.getFirstElementByTagName(residenzaTag, 'cap'));
				anagraficaEstesa.residenza.toponimo = MWUtility.mergeText(MWUtility.getFirstElementByTagName(residenzaTag, 'toponimo'));
			}
			else
			{
				anagraficaEstesa.residenza.cittaStraniera =  MWUtility.mergeText(MWUtility.getFirstElementByTagName(residenzaTag, 'citta-straniera'));
			}

		}
		CCIAAClient.anagraficaEstesaHandler.anagraficaEstesa(anagraficaEstesa);
	}
	catch (e)
	{
		CCIAAClient.anagraficaEstesaHandler.erroreAnagraficaEstesa(e);
	}
}

/**
 * A partire da un nodo XML così fatto:
 *  <stato codice="I">Italia</stato>
 * produce un oggetto così fatto:
 *
 * ret.codice
 * ret.nome
 */ 
CCIAAClient.leggiStato = function(statoNode)
{
//    
	if (statoNode != null)
	{
		var ret = new Object();

		ret.codice =statoNode.getAttribute('codice');
		ret.nome = MWUtility.mergeText(statoNode);
		return ret;
	}
	else
	{
		return null;
	}
}

/**
 * A partire da un nodo XML così fatto:
 *  <provincia codice-istat="098" sigla="LO">LODI</provincia>
 * produce un oggetto così fatto:
 *
 * ret.codice-istat
 * ret.sigla
 * ret.nome
 */ 
CCIAAClient.leggiProvincia = function(provinciaNode)
{
	if (provinciaNode != null)
	{
		var ret = new Object();

		ret.codiceIstat = provinciaNode.getAttribute('codice-istat');
		ret.sigla = provinciaNode.getAttribute('sigla');
		ret.nome = MWUtility.mergeText(provinciaNode);
		return ret;
	}
	else
	{
		return null;
	}
}

/**
 * A partire da un nodo XML così fatto:
 *    <comune codice-catastale="E648" codice-istat="098031">LODI</comune>
 * produce un oggetto così fatto:
 *
 * ret.codiceCatastale
 * ret.codiceIstat
 * ret.nome
 */ 
CCIAAClient.leggiComune = function(comuneNode)
{
	if (comuneNode != null)
	{
		var ret = new Object();

		ret.codiceIstat = comuneNode.getAttribute('codice-istat');
		ret.codiceCatastale = comuneNode.getAttribute('codice-catastale');
		ret.nome = MWUtility.mergeText(comuneNode);
		return ret;
	}
	else
	{
		return null;
	}

}


//Finestra di errore personalizzata CCIAA
CCIAAClient.produciErroreCCIAA = function (param)
{
  alert('CCIAA: ' + param);
}

//Richiesta ASINCRONA verso la servlet
CCIAAClient.processRequest = function (richiesta)
{
	//applico un timestamp per disabilitare la cache degli url
	var notCachedUrl = richiesta;
	notCachedUrl += (notCachedUrl.indexOf("?") == -1) ? "?" : "&";
	notCachedUrl += "timestamp=" + new Date().getTime();

    var risposta = '';
//    try
    {
        CCIAAClient.downloader.onreadystatechange = CCIAAClient.processReqChange;
        CCIAAClient.downloader.open("GET", notCachedUrl, true);
        CCIAAClient.downloader.send(null);
    }
/*    catch(e)
    {
        CCIAAClient.produciErroreCCIAA("Ci sono stati problemi nella chiamata al servizio di recupero dati. \n"+
        "Se il problema persiste contattare l'amministratore; " + e.toString());
    }*/
}

//Questo metodo viene chiamato quando l'oggetto 'richiesta' cambia stato
// E' necessario controllare se la risposta ha avuto esito positivo.
CCIAAClient.processReqChange = function ()
{
    var risposta = null;

    if (CCIAAClient.downloader.readyState != 4)
       return;
 
    try
    {
        if (CCIAAClient.downloader.status == 200)
        {
        	risposta = MwAjaxUtil.parseXML(CCIAAClient.downloader);

            CCIAAClient.vediLoading(false);

            if (risposta == null)
            {
            	alert("Risposta non valida");
            	return;
            }

			CCIAAClient.manageData(risposta, CCIAAClient.cf);

            if (CCIAAClient.postExecute != null)
                setTimeout(CCIAAClient.postExecute, 1);
        }
        else
        {
            alert("Servizio di recupero dati non disponibile.");
            CCIAAClient.vediLoading(false);
        }    
    }
    finally
    {
   	    CCIAAClient.isOperating = false;
   	}
}

//Cerco l'elemento 'divLoading' nel documento e ne cambio lo stato
CCIAAClient.vediLoading = function (flag)
{     
  if (CCIAAClient.loaderId == null || CCIAAClient.loaderId != '')
  {      
    var divLoading = document.getElementById(CCIAAClient.loaderId);
  
    if (divLoading != null)
    {
  
    	if (divLoading.tagName == 'DIV')
    	{
        	divLoading.style.display = (flag) ? '' : 'none';
        }
        else
        {
        	divLoading.style.display = (flag) ? '' : 'none';
        }
    }
  }
  
  if (CCIAAClient.elementId == null || CCIAAClient.elementId != '' )
  {      
    var datiForm = document.getElementById(CCIAAClient.elementId);
    var controlli;
  
    if (datiForm != null)
    {
        controlli = datiForm.getElementsByTagName('input');
        FormUtility.abilitaControlli(controlli, !flag);

        controlli = datiForm.getElementsByTagName('select');
        FormUtility.abilitaControlli(controlli, !flag);

        controlli = datiForm.getElementsByTagName('textarea');
        FormUtility.abilitaControlli(controlli, !flag);
    }   
  }
}



/**
 * Handler che produce la lista delle aziende per cui un utente e' legale rappresentante
 *
 */
var DitteRappresentateHandler = new Object();

// la lista delle imprese rappresentate (vedi manageRicercaDitte)
DitteRappresentateHandler.impreseRappresentate = new Array();
DitteRappresentateHandler.impreseRappresentateFiltro = "";
DitteRappresentateHandler.impreseRappresentateComparatoreUsato = null;

/**
 * L'intestazione della tabella generata, può essere modificata
 */
DitteRappresentateHandler.intestazioneTabella = "Selezionare l'azienda per cui si presenta la domanda";
/**
 * L'id del div in cui finira' la lista delle aziende rappresentate
 */
DitteRappresentateHandler.idRigaInserimento = 'listaImpresePlaceHolder';
/**
 * L'id dell'elemento della tabella con l'impresa di cui l'utente sta vedendo il dettaglio
 */
DitteRappresentateHandler.impresaInDettaglio = null;
/**
 * mappa provincia + rea=> codice Fiscale 
 */
DitteRappresentateHandler.codiciFiscaliDaREA = new Object();
/**
 * Nome di una funzione che verrà invocata sull'onclick dei radio button. La funzione deve avere due parametri, REA e Provincia, un terzo parametro è opzionale, denominazione.
 * Se null non verrà invocato nulla 
 */
DitteRappresentateHandler.onSelectRadioHandler = null;
/**
 * Numero di imprese per pagina
 */
DitteRappresentateHandler.impresePerPagina=6;
/**
 * Pagina correntemente visualizzata
 */
DitteRappresentateHandler.paginaCorrente=1;


/**
 * Gestisce l'arrivo dei dati sulle imprese rappresentate
 */
DitteRappresentateHandler.manageRicercaDitte = function(risposta)
{
	var elemento = risposta;
	var errore = risposta.getElementsByTagName("errore")[0];
	var risposta = risposta.getElementsByTagName("imprese-rappresentate")[0];

	if (errore != null)
	{
	// disabilito il form
		document.getElementById("form-dinamico").style.display= 'none';
		
		var codice = MWUtility.mergeText(errore.getElementsByTagName("codice")[0]);

		var errFatale = document.getElementById('errore-fatale');
		
		var testoErrore = "<h1>Attenzione!</h1>";
		testoErrore += "<h2>Non &egrave; possibile procedere alla compilazione della pratica</h2>";
		testoErrore += "<p>";
		
		// per i codici di errore vedi 'ImpreseCCIAA.java'
		if (codice == 'NESSUNA_AZIENDA')
		{
			testoErrore += "Non si dispone delle autorizzazioni per accedere al servizio. &Egrave; necessario essere titolari o ";
			testoErrore += "legali rappresentanti di impresa, oppure essere subdelegati da uno di essi.<br/>";
			testoErrore += "L'utente non risulta essere rappresentante legale di alcuna azienda iscritta al Registro delle Imprese. ";
			testoErrore += "Per maggiori informazioni contattare il <br/>";
		}
		else
		{
			testoErrore += "Non &egrave; stato possibile recuperare la lista delle aziende rappresentate.<br/>";
			testoErrore += "Ci&ograve; pu&ograve; essere dovuto ad un malfunzionamento temporaneo della Porta Applicativa del Registro delle Imprese.<br/>";
			testoErrore += "Si consiglia di riprovare in un secondo momento. ";
//			testoErrore += "Se il problema dovesse persistere contattare il <br/>";
		}

//		testoErrore += '<span class="nVerde">';
//		testoErrore += '<a href="http://www.impresa.gov.it/Portal/impresaGov.portal?_nfpb=true&amp;_pageLabel=numeroAzzurro" ';
//		testoErrore += 'title="Informazioni sul Numero Azzurro">Contact Center <strong><em>840</em> 500 111</strong></a>';
//		testoErrore += '</span>';
		testoErrore += '</p>';
		
		errFatale.innerHTML = testoErrore;
		errFatale.style.display= '';

		var form_Principale = document.forms["formPrincipale"];
		var controlli = form_Principale.getElementsByTagName('input');

    	FormUtility.abilitaControlli(controlli, false);
    
	    controlli = form_Principale.getElementsByTagName('select');
	    FormUtility.abilitaControlli(controlli, false);
	    
	    controlli = form_Principale.getElementsByTagName('textarea');
	    FormUtility.abilitaControlli(controlli, false);

	    controlli = form_Principale.getElementsByTagName('button');
	    FormUtility.abilitaControlli(controlli, false);

	    controlli = form_Principale.getElementsByTagName('submit');
	    FormUtility.abilitaControlli(controlli, false);

	} 
	else	if (risposta.tagName == "imprese-rappresentate")
	{
		DitteRappresentateHandler.elementId = CCIAAClient.elementId;
		 // ok, si procede
		 // Selezione l'azienda per cui si presenta la domanda
	/*
	<impresa>
<numero-rea>113543</numero-rea>
<cciaa>CR</cciaa>
<cf>00804630192</cf>
<ragione-sociale>FACO SRL (IN LIQUIDAZIONE)</ragione-sociale>
<delegante cf="RSSMRA60A01F205T">Mario Rossi</delegante>
</impresa>
*/
		/* creo un array di oggetti fatti cosi':
		sintesiImpresa["numero-rea"]
		sintesiImpresa["cciaa"]
		sintesiImpresa["cf"]
		sintesiImpresa["ragione-sociale"]
		sintesiImpresa["delegante-nome"]
		sintesiImpresa["delegante-cf"]
		sintesiImpresa["full-text-search"] = ragione-sociale + delegante-nome + cf  
		*/
		var imprese = risposta.getElementsByTagName("impresa");
		var impreseArray = new Array();

		for (t = 0; t < imprese.length; t++)
		{
			var impresaCorrente = imprese[t];
			var codiceFiscale = MWUtility.mergeText(impresaCorrente.getElementsByTagName('cf')[0]);
			var denominazione = MWUtility.mergeText(impresaCorrente.getElementsByTagName('ragione-sociale')[0]);
			var rea = MWUtility.mergeText(impresaCorrente.getElementsByTagName('numero-rea')[0])
			var provincia = MWUtility.mergeText(impresaCorrente.getElementsByTagName('cciaa')[0])
			var cfDelegante = impresaCorrente.getElementsByTagName('delegante')[0].getAttribute('cf');
			var nominativoDelegante =  MWUtility.mergeText(impresaCorrente.getElementsByTagName('delegante')[0]);

			var sintesiImpresa = new Object();
			sintesiImpresa["numero-rea"] = rea;
			sintesiImpresa["cciaa"] = provincia;
			sintesiImpresa["cf"] = codiceFiscale;
			sintesiImpresa["ragione-sociale"] = denominazione;
			sintesiImpresa["delegante-nome"] = nominativoDelegante;
			sintesiImpresa["delegante-cf"] = cfDelegante;
			sintesiImpresa["full-text-search"] = denominazione + "§" + nominativoDelegante + "§" + codiceFiscale;

			impreseArray[t] = sintesiImpresa;
		}

		DitteRappresentateHandler.impreseRappresentate = impreseArray;
		DitteRappresentateHandler.disegnaImpreseRappresentate();

	}
	else
	{
		alert ("Elemento inaspettato: " + elemento.tagName);
	}
}

DitteRappresentateHandler.manageDettaglioDitta = function(risposta)
{
/*
<ragione-sociale>NUBI DI IERI SUL NOSTRO DOMANI ODIERNO</ragione-sociale>
-
	<sede-legale>
<provincia sigla="BO"/>
<comune codice-catastale="030">GRANAROLO DELL'EMILIA</comune>
<cap>40057</cap>
<toponimo>VIA</toponimo>
<denominazione-stradale>DEL LAVORO</denominazione-stradale>
<numero-civico>8/F</numero-civico>
<frazione>QUARTO INFERIORE</frazione>
</sede-legale>
*/
	risposta = risposta.getElementsByTagName("impresa")[0];

    if (risposta == null || risposta == undefined)
    {
//        alert ("Ditta non presente");
		var stringa = "Ditta non presente";

		var idImpresa = DitteRappresentateHandler.impresaInDettaglio;

		document.getElementById("IMP_" + idImpresa).innerHTML = stringa;
		document.getElementById("IMP_" + idImpresa).parentNode.style.display='';
		document.getElementById("BUTTON_DETAIL_" + idImpresa).src='images/minimizza.gif';

        return;
    }
    
	if (risposta.tagName == "impresa")
	{
		 // ok, si procede
		var stringa = "";

		var idImpresa = DitteRappresentateHandler.impresaInDettaglio;
		var codiceFiscale = DitteRappresentateHandler.codiciFiscaliDaREA[idImpresa];
		var denominazione = MWUtility.mergeText(risposta.getElementsByTagName('ragione-sociale')[0]);
		var sedeLegale = risposta.getElementsByTagName('sede-legale')[0];

		stringa += "Codice fiscale: " + codiceFiscale + "<br/>";

        if (sedeLegale != null)
        {
    		var provincia = sedeLegale.getElementsByTagName('provincia')[0].getAttribute("sigla");
		    var comune_node = sedeLegale.getElementsByTagName('comune')[0];
		    comune_node = (comune_node != null && comune_node != undefined) ? comune_node.lastChild : null;
		    var comune = (comune_node != null && comune_node != undefined) ? comune_node.data : '';
		    var cap = MWUtility.mergeText(sedeLegale.getElementsByTagName('cap')[0]);
		    var toponimo = MWUtility.mergeText(sedeLegale.getElementsByTagName('toponimo')[0]);
		    var denominazione = MWUtility.mergeText(sedeLegale.getElementsByTagName('denominazione-stradale')[0]);
		    var civico = MWUtility.mergeText(sedeLegale.getElementsByTagName('numero-civico')[0]);

    		stringa += "Indirizzo: " + toponimo + " " + denominazione + " " + civico + ", " + cap + " - " + comune + " ( " + provincia + ")";
        }
        else
            stringa += "Sede legale non disponibile";

		document.getElementById("IMP_" + idImpresa).innerHTML = stringa;
		document.getElementById("IMP_" + idImpresa).parentNode.style.display='';
		document.getElementById("BUTTON_DETAIL_" + idImpresa).src='images/minimizza.gif';
	}
	else
	{
		alert ("Elemento inaspettato: " + risposta.tagName);
	}

}


DitteRappresentateHandler.dettaglioImpresa = function(idImpresa)
{
	var codiceFiscale = DitteRappresentateHandler.codiciFiscaliDaREA[idImpresa];
	DitteRappresentateHandler.minimizzaTabella();	
	if (DitteRappresentateHandler.impresaInDettaglio == idImpresa)
	{
		DitteRappresentateHandler.impresaInDettaglio = null;
		return;
	}

	DitteRappresentateHandler.impresaInDettaglio = idImpresa;

	CCIAAClient.caricaImpresaDaCF(codiceFiscale, 'divLoading', null, DitteRappresentateHandler.manageDettaglioDitta);
}

DitteRappresentateHandler.minimizzaTabella = function(corrente)
{
	if (DitteRappresentateHandler.impresaInDettaglio != null && DitteRappresentateHandler.impresaInDettaglio != corrente)
	{
			document.getElementById( "IMP_" + DitteRappresentateHandler.impresaInDettaglio).parentNode.style.display='none';
			document.getElementById("BUTTON_DETAIL_" + DitteRappresentateHandler.impresaInDettaglio).src='images/espandi.gif';
			
	}
}



DitteRappresentateHandler.comparatoreDenominazione = new Object();
DitteRappresentateHandler.comparatoreDenominazione.nome = "comparatoreDenominazione";
DitteRappresentateHandler.comparatoreDenominazione.compare = function(left, right)
{
	if (left["ragione-sociale"] > right["ragione-sociale"])
		return 1;
	if (left["ragione-sociale"] < right["ragione-sociale"])
		return -1;
	return 0;
}

DitteRappresentateHandler.comparatoreDenominazioneInverso = new Object();
DitteRappresentateHandler.comparatoreDenominazioneInverso.nome = "comparatoreDenominazioneInverso";
DitteRappresentateHandler.comparatoreDenominazioneInverso.compare = function(left, right)
{
	if (left["ragione-sociale"] < right["ragione-sociale"])
		return 1;
	if (left["ragione-sociale"] > right["ragione-sociale"])
		return -1;
	return 0;
}

DitteRappresentateHandler.comparatoreNomeRappresentante = new Object();
DitteRappresentateHandler.comparatoreNomeRappresentante.nome = "comparatoreNomeRappresentante";
DitteRappresentateHandler.comparatoreNomeRappresentante.compare = function(left, right)
{
	if (left["delegante-nome"] > right["delegante-nome"])
		return 1;
	if (left["delegante-nome"] < right["delegante-nome"])
		return -1;
	return 0;
}

DitteRappresentateHandler.comparatoreNomeRappresentanteInverso = new Object();
DitteRappresentateHandler.comparatoreNomeRappresentanteInverso.nome = "comparatoreNomeRappresentanteInverso";
DitteRappresentateHandler.comparatoreNomeRappresentanteInverso.compare = function(left, right)
{
	if (left["delegante-nome"] < right["delegante-nome"])
		return 1;
	if (left["delegante-nome"] > right["delegante-nome"])
		return -1;
	return 0;
}	


// comparatore di default
DitteRappresentateHandler.comparatoreUsato= DitteRappresentateHandler.comparatoreDenominazione;

DitteRappresentateHandler.disegnaImpreseRappresentate = function()
{
		var filtro = DitteRappresentateHandler.impreseRappresentateFiltro;
		var impreseUsate = null;
		var totale = 0;
		
		var cfImpresaSelezionato = document.getElementById('cfImpresaInput').value;
		var cfDeleganteSelezionato = document.getElementById('cfDeleganteInput').value;

		/** 
		 * la riga che contiene il messaggio di nessuna impresa, viene usata anche come placeholder sotto il quale generare 
		 * le righe delle imprese 
		 */
		var rigaNoImprese = document.getElementById('listaImpresePlaceHolder');	
		var tabella = rigaNoImprese.parentNode;

	// prima filtro
		if (filtro != undefined && filtro != null && filtro != "")
		{
			impreseUsate = new Array();

			for(t = 0; t < DitteRappresentateHandler.impreseRappresentate.length; t++)
			{
				var fullText = DitteRappresentateHandler.impreseRappresentate[t]["full-text-search"];

				if (fullText.toUpperCase().indexOf(filtro.toUpperCase()) > -1)
					impreseUsate[totale++] =  DitteRappresentateHandler.impreseRappresentate[t];
			}

		}
		else
		{
			impreseUsate = DitteRappresentateHandler.impreseRappresentate; 
		}

		var comparatoreUsato = DitteRappresentateHandler.comparatoreUsato;
		var stringaProssimoComparatore = "";
		var nomeFreccia = "";

		// mostro il messaggio
		if (impreseUsate.length == 0)
		{
			rigaNoImprese.style.display = '';
		}
		else
		{
		// poi ordino
			if (comparatoreUsato != undefined && comparatoreUsato != null )
			{
				MWUtility.sortByAttribute(impreseUsate, comparatoreUsato);
			}

			/* 
			 *  Produco l'intestazione
			 */
			rigaNoImprese.style.display = 'none';

			while (rigaNoImprese.nextSibling != null && rigaNoImprese.nextSibling.id != 'impreseIndicePagine')
			{
				// ripuliscio la tabella, togliendo tutte le righe comprese tra il placeholder ed il footer
				tabella.removeChild(rigaNoImprese.nextSibling);
			}

			// intestazione denominazione
			if (comparatoreUsato.nome == DitteRappresentateHandler.comparatoreDenominazione.nome)
			{
				stringaProssimoComparatore = "DitteRappresentateHandler.comparatoreDenominazioneInverso";
				nomeFreccia = "images/espandi.gif";
			}
			else
			{
				stringaProssimoComparatore = "DitteRappresentateHandler.comparatoreDenominazione";
	
				if (comparatoreUsato.nome == DitteRappresentateHandler.comparatoreDenominazioneInverso.nome)
					nomeFreccia = "images/minimizza.gif";
				else
					nomeFreccia = "";
			}

			var t = rigaNoImprese.rowIndex + 1;
			var rigaCorrente = tabella.insertRow(t++);
			var cellaCorrente = document.createElement("td");
			var innerHTML = ''; 

			rigaCorrente.id = "intestazioneSelezioneImpresa";
			cellaCorrente.className="entry-form-header  new-section";			
			cellaCorrente.colSpan=2;
			innerHTML = '<a alt="Ordina per denominazione" title="Ordina per denominazione" href="#" ';
			innerHTML  += 'onclick="DitteRappresentateHandler.comparatoreUsato=' + stringaProssimoComparatore + '; DitteRappresentateHandler.disegnaImpreseRappresentate()"> ';
			innerHTML  +='Denominazione dell\'impresa</a> ';
			if (nomeFreccia != "")
				innerHTML  += ' <img src="' + nomeFreccia + '" ></img>'

			cellaCorrente.innerHTML = innerHTML;
			rigaCorrente.appendChild(cellaCorrente);	

		// intestazione rappresentante
			if (comparatoreUsato.nome == DitteRappresentateHandler.comparatoreNomeRappresentante.nome)
			{
				stringaProssimoComparatore = "DitteRappresentateHandler.comparatoreNomeRappresentanteInverso";
				nomeFreccia = "images/espandi.gif";
			}
			else
			{
				stringaProssimoComparatore = "DitteRappresentateHandler.comparatoreNomeRappresentante";
	
				if (comparatoreUsato.nome == DitteRappresentateHandler.comparatoreNomeRappresentanteInverso.nome)
					nomeFreccia = "images/minimizza.gif";
				else
					nomeFreccia = "";
			}

			cellaCorrente = document.createElement("td");
			cellaCorrente.className="entry-form-header  new-section";
			cellaCorrente.colSpan=2;

			innerHTML = '<a alt="Ordina per nome" title="Ordina per nome" href="#" ';
			innerHTML += 'onclick="DitteRappresentateHandler.comparatoreUsato=' + stringaProssimoComparatore + '; DitteRappresentateHandler.disegnaImpreseRappresentate()"> ';
			innerHTML +='Con delega di</a> ';
			
			if (nomeFreccia != "")
				innerHTML += ' <img src="' + nomeFreccia + '" />';		
	
			cellaCorrente.innerHTML = innerHTML;
			rigaCorrente.appendChild(cellaCorrente);	

 
   	 	// poi calcolo la pagina corrente 
			var pagine = Math.ceil(impreseUsate.length / DitteRappresentateHandler.impresePerPagina);

			if (DitteRappresentateHandler.paginaCorrente > pagine)
				DitteRappresentateHandler.paginaCorrente = 1;

			var primo = (DitteRappresentateHandler.paginaCorrente  - 1) * DitteRappresentateHandler.impresePerPagina;
			var ultimo = (DitteRappresentateHandler.paginaCorrente ) * DitteRappresentateHandler.impresePerPagina - 1;

			if (ultimo >= impreseUsate.length)
				ultimo = impreseUsate.length - 1;

			/*
			 * Produco la lista
			 */
			for (indiceImpresa = primo; indiceImpresa <= ultimo; indiceImpresa++)
			{
				var impresaCorrente = impreseUsate[indiceImpresa];		
				var codiceFiscale = impresaCorrente["cf"];
				var denominazione = 	impresaCorrente["ragione-sociale"];
				var rea = impresaCorrente["numero-rea"];	
				var provincia = impresaCorrente["cciaa"];
				var cfDelegante = impresaCorrente["delegante-cf"];
				var nominativoDelegante = impresaCorrente["delegante-nome"]; 
				var position = 1 + (t * 2);
				var classe = "survey-section-value-";
				var idImpresa = provincia + rea;
	
				DitteRappresentateHandler.codiciFiscaliDaREA[idImpresa] = codiceFiscale;
				if ( (indiceImpresa % 2) == 0)
					classe += "even";
				else
					classe += "odd";
	
				rigaCorrente = tabella.insertRow(t++);
				cellaCorrente = rigaCorrente.insertCell(0);

				cellaCorrente.className = classe;
				cellaCorrente.style.width="10px";
				/* creazione del radio button */
				innerHTML = "<input  onclick='DitteRappresentateHandler.minimizzaTabella(\"";
				innerHTML += idImpresa;
				innerHTML += "\"); ";
				
				// sul click aggiorno anche il cf del legale rappresentante
				innerHTML += ' document.getElementById("cfDeleganteInput").value = "' + cfDelegante + '";';
				innerHTML += ' document.getElementById("cfImpresaInput").value = "' + codiceFiscale + '";';
	
				if(DitteRappresentateHandler.onSelectRadioHandler != null)
				{
					if (denominazione.indexOf("\"") >= 0 || denominazione.indexOf("\'") >= 0)
					{
						// escapo gli ' e le " TODO forse i simboli usati non sono i più adatti!!
				    	innerHTML += DitteRappresentateHandler.onSelectRadioHandler + "(\"" + rea + "\", \"" + provincia + "\", MWUtility.unescapeForCodeGeneration(\"" + 
				    	 MWUtility.escapeForCodeGeneration(denominazione)
				    	 + "\"));";
				    }
				    else
				    {
				    	innerHTML += DitteRappresentateHandler.onSelectRadioHandler + "(\"" + rea + "\", \"" + provincia + "\",\"" + denominazione + "\");";
				    }
				    
			    }
				innerHTML += "'";
				
				innerHTML+= "type='radio' name='^ignore_radio' ";

				if (cfImpresaSelezionato == codiceFiscale)
				{
					innerHTML += "checked='true'";
				}
				innerHTML += "/>";

				cellaCorrente.innerHTML = innerHTML;

				/* creazione della denominazione */
				cellaCorrente = rigaCorrente.insertCell(1);
				cellaCorrente.className = classe;
				cellaCorrente.style.width="380px";
				innerHTML = denominazione;
				cellaCorrente.innerHTML = innerHTML;

				/* creazione del delegante */
				cellaCorrente = rigaCorrente.insertCell(2);
				cellaCorrente.className = classe;
				innerHTML = nominativoDelegante;
				cellaCorrente.style.width="160px";
				cellaCorrente.innerHTML = innerHTML;
	
				/* pulsante 'espandi' */
				cellaCorrente = rigaCorrente.insertCell(3);
				cellaCorrente.className = classe;
				innerHTML = "<a href='#' onclick='DitteRappresentateHandler.dettaglioImpresa(\"";
				innerHTML += idImpresa;
				innerHTML += "\")' ><img src='images/espandi.gif' alt='espandi' width='11' height='11' id='BUTTON_DETAIL_";
				innerHTML += idImpresa;
				innerHTML += "'/></a>";
	
				cellaCorrente.innerHTML = innerHTML;

				/* creazione riga dettagli */
				rigaCorrente = tabella.insertRow(t++);
				cellaCorrente = rigaCorrente.insertCell(0);
				cellaCorrente.style.width="20px";
				rigaCorrente.style.display = 'none';
				innerHTML = "<a title='consulta il Registro delle Imprese' href='Control?action=17_dati_anagrafici_cciaa&provincia=";
				innerHTML += provincia;
				innerHTML += "&REA=";
				innerHTML += rea;
				innerHTML += "&codiceFiscaleImpresa=";
				innerHTML += codiceFiscale;
				innerHTML += "&hideBack=true";
				innerHTML += "'><img src='images/registro_imprese.gif' alt='consulta il Registro delle Imprese' /></a>"
				cellaCorrente.innerHTML = innerHTML;

				cellaCorrente = rigaCorrente.insertCell(1);
				cellaCorrente.colSpan = 2;
				cellaCorrente.id = "IMP_" + idImpresa;
			}
		}

		// se ho più di una pagina, mostro la lista delle pagine
		if (pagine > 1)
		{
			if ( DitteRappresentateHandler.paginaCorrente > 1)
			{
				document.getElementById('paginaPrecedente').style.visibility='visible'; 
			}
			else
			{
				document.getElementById('paginaPrecedente').style.visibility='hidden';
			}
		
							
			if ( DitteRappresentateHandler.paginaCorrente < pagine)
			{
				document.getElementById('paginaSuccessiva').style.visibility='visible'; 
			}
			else
			{
				document.getElementById('paginaSuccessiva').style.visibility='hidden';
			}

			document.getElementById('paginaCorrente').innerHTML = "Pagina " + DitteRappresentateHandler.paginaCorrente + " di " + pagine;
		}
		else
		{
			document.getElementById('impreseIndicePagine').style.display='none';
		}
// aggiungo l'input nascosto con il cf del legale rappresentante

}

DitteRappresentateHandler.toggleFiltro = function ()
{
  var object = document.getElementById('rigaFiltro');
  var immagine = document.getElementById('idImgFiltro');

  if (object.style.display=='none')
  {
    object.style.display='';
    immagine.src = 'images/lente_meno.gif';
  }
  else
  {
    object.style.display='none';
    immagine.src = 'images/lente.gif';
  }
}











