/**
 *
 * @fileoverview Oggetto servizio
 *
 * @filename servizio.js
 * @requires owjslib.js, layoutServizio.js, YAHOO.util.Dom, YAHOO.util.Connect, YAHOO.widget.Effects
 * @created 2008-05-07
 * @original author Giampaolo Bellavite
 * @copyright Kemen s.r.l.
 * @license Mozilla Public License Version 1.1
 * @version 0.1
 * @$LastChangedDate:: 2011-10-03#$
 * $LastChangedRevision: 4456 $
 * $LastChangedBy: andrea $
*/


if(typeof(HOL) == 'undefined') {var HOL = {}};

HOL.layoutServizio = {};

/**
 * Mostra il loader vicino al titolo del modulo
 * @return {boolean} false
 */	
HOL.layoutServizio.showLoader = function(){
	Dom.addClass('modulo-richiesta','loader');
	return false;
};

/**
 * Nasconde il loader vicino al titolo
 * @return {boolean} false
 */	
HOL.layoutServizio.hideLoader = function(){
	Dom.removeClass('modulo-richiesta','loader');
	return false;
};

/**
 * @return {boolean} false
 */	
HOL.layoutServizio.showSidebarLoader = function(){
	var target = document.getElementById('sidebarBox');
	target.innerHTML = '<div style="text-align:center;padding-top:10px;"><img src="/css/images/ajax-loader.gif" /></div>';
	return false;
};

/**
 * @return {boolean} false
 */	
HOL.layoutServizio.hideSidebarLoader = function(){
	var target = document.getElementById('sidebarBox');
	target.innerHtml = '';
	return false;
};

/*** Constructor ***/

HOL.servizio = function(pkServizio){
	var _pk = pkServizio;
	var _form = document.forms['formServizio' + pkServizio];
	var _positionInCart = 1;

	this.getPK = function() {
		return _pk;		
	};
	
	this.getForm = function() {
		return _form;		
	};
};

/*** Public Methods ***/

/**
 * Carica il form definito dall'attributo hol:form di el all'interno di un target 
 * @param {string/HTML element} el Checkbox o radio button che checked carica il form
 * @param {string} template Template contente il form
 * @param {string/HTML element} target Contenitore del form. Deve essere di tipo "block"
 * @param {boolean} reload Ricarica il form anche se e' gia' stato caricato (default: false)
 * @param {boolean} loadSidebar ricarica la sidebar (default: true)
 * @param {array} callbackArgs ricarica sidebar e aggregazioni nella seconda chiamata
 * @param {boolean} loadAggregazioni visualizza gli eventuali servizi aggregati
 * @return {boolean} Ritorna false; el viene checked al success del callback
 */	
HOL.servizio.prototype.loadForm = function(el, template, target, reload, loadSidebar,callbackArgs,loadAggregazioni){
	if(arguments.length == 3) {
		var reload = false;
	};

	var loadSidebar = loadSidebar != undefined ? loadSidebar : true;
	var loadAggregazioni = loadAggregazioni != undefined ? loadAggregazioni : false;
	var args = callbackArgs != undefined ? callbackArgs : [];
	
	var el = Dom.get(el);
	var target = Dom.get(target);
	Dom.setStyle(target, 'background-color', 'white'); // risolve bug IE alpha filter per opacity
	var oServizio = this;

	/*if(el.type=='checkbox' && !el.checked) {
		// se e' una checkbox reagisco a seconda che la checkbox sia attivata o no
		target.innerHTML = '';		
		target.setAttribute('hol:loadedform', null);
		return true;
	};*/
	
	// se il target contiene gia' il form, non richiedere il form dal server 
	if (target.getAttribute('hol:loadedform') == template && !reload) {
		return true;
	};
		
	var callback = {};
	callback.success = function(oResult){
		
			// sostituisce nel target il form ricevuto dal server
			target.innerHTML = oResult.responseText;
			Effects.Appear(target, {
				seconds: 0.3
			});

			// imposta il nome del form nel target
			target.setAttribute('hol:loadedform', template);
			HOL.layoutServizio.hideLoader();
			HOL.forms.enableSubmit(oServizio.getForm());
			//Tooltip
			HOL.utils.setTooltip();
			//se esiste un callback il ricarico sidebar e aggregazioni è demandato alla seconda chiamata
			if(args.length > 0){			
				args[2] = args[2] != undefined ? args[2] : false;
				args[3] = args[3] != undefined ? args[3] : false;
				args[4] = args[4] != undefined ? args[4] : false;				
				servizio.loadForm(el,args[0],args[1],args[2],args[3],args[4]);	
			}else{
				// se richiesto ricarica la sidebar
				if (loadSidebar) {
					oServizio.loadSidebar();
				};
				// se richiesto ricarica le aggregazioni			
				if(loadAggregazioni){
					oServizio.loadAggregazioni();
				}
			}
		}
	callback.failure = function(oResult){
			HOL.panels.showError(oResult);
			HOL.layoutServizio.hideLoader();
			HOL.forms.enableSubmit(oServizio.getForm());
			return false;
		}
	
	HOL.forms.cleanValidationError(oServizio.getForm(),'modulo-richiesta-errore');
	HOL.forms.disableSubmit(oServizio.getForm());
	HOL.layoutServizio.showLoader();
	Conn.setForm(this.getForm());
	var oConn = Conn.asyncRequest('POST', 
								  '/_ajax.ordine.cfm?_isXHR=true&method=loadForm&formName=' + template + '&pk_servizio=' + oServizio.getPK(), 
								  callback);
	
	Conn.resetFormState(); // reset the form state after the submit
	
};

/**
 * Rimuove il campo urgente e ricarica la spalla
 */
HOL.servizio.prototype.removeUrgente = function(loadSidebar){	
	if(servizio.isUrgente == "YES"){
		var el = document.getElementById('urgenteBox');
		if(loadSidebar == undefined) {
			loadSidebar = true;	
		}
		el.innerHTML = '';
		if (loadSidebar) {
			this.loadSidebar();
		}			
	}
}

/**
 * Espone il box per la selezione dell'urgenza
 * @param {Boolean} loadSidebar
 */
HOL.servizio.prototype.loadUrgente = function(loadSidebar){
	
	if (servizio.isUrgente == "YES") {
		var target = document.getElementById('urgenteBox');
		var that = this;
		if (loadSidebar == undefined) {
			loadSidebar = true;
		}
		var callback = {
			success: function(oResult){
				target.innerHTML = oResult.responseText;
				HOL.layoutServizio.hideLoader();
				Effects.Appear(target, {
					seconds: 0.3
				});
				if (loadSidebar) {
					that.loadSidebar();
				}
			},
			failure: function(oResult){
				HOL.panels.showError(oResult);
				HOL.layoutServizio.hideLoader();
				HOL.forms.enableSubmit(oServizio.getForm());
				return false;
			}
		};
		
		HOL.layoutServizio.showLoader();
		Conn.setForm(this.getForm());
		var oConn = Conn.asyncRequest('POST', '/_ajax.ordine.cfm?_isXHR=true&method=loadUrgente', callback);
		
		Conn.resetFormState(); // reset the form state after the submit
	}
	return false; 	
	
}

/**
 * Ricarica il div delle aggregazioni
 * @param {Boolean} loadAggregazioni
 */
HOL.servizio.prototype.loadAggregazioni = function(){
	
		var target = document.getElementById('aggregazioni');
		var callback = {
			success: function(oResult){
				target.innerHTML = oResult.responseText;
			}
		};
		
		var oConn = Conn.asyncRequest('POST', '/_ajax.ordine.cfm?_isXHR=true&method=loadAggregazioni', callback);
		return false; 	
	
}

/**
 * Gestisce il checkbox per la sezione della visura certificata
 * @param {Object} e Event
 */
HOL.servizio.prototype.handleVisuraCertificata = function(el){
	if(el != undefined && el.checked){
		servizio.loadForm(el, 'consegna-pagamento', 'Consegna',null,false);
		this.removeUrgente();
	}else{
		servizio.hideForm(document.getElementById('Consegna'));
		this.loadUrgente();
	}
}

/**
 * Gestisce il flag planimetria box nel servizio Planimetria Catastale
 * @param {Object} e Event
 */
HOL.servizio.prototype.handlePlanimetriaBox = function(el){
	if(el != undefined && el.checked){
		servizio.loadForm(el, 'planimetria_box', 'PlanimetriaBox');
	}else{
		servizio.hideForm(document.getElementById('PlanimetriaBox'));
	}
}

/**
 * Gestisce il checkbox per richiedere l'atto notarile in un  servizio aggregato
 * @param {Object} e Event
 */
HOL.servizio.prototype.richiediAttoNotarile = function(el){
	if(el.checked){
		this.loadForm(el,'atto_notarile','attoNotarile',null,true);
	}else{
		this.hideForm('attoNotarile',function(){
			servizio.loadSidebar();
		})
	}
}

/**
 * Gestisce il campo di selezione uso certificato
 * @param {Object} e Event
 */
HOL.servizio.prototype.usoCertificato = function(el){
	if(el.value == 'Altro'){
		servizio.loadForm(el, 'altro', 'altro',null,false);
	}else{
		servizio.hideForm('altro');
	}
}

/**
 * @param {Object} e Event
 */
HOL.servizio.prototype.handleApostilla = function(el){
	if(!el.checked){
		servizio.hideForm('apostilla_paese',function(){
			servizio.loadSidebar();
		});
	}else{
		servizio.loadForm(el, 'apostilla', 'apostilla_paese');
	}
}

/**
 * Gestisce il cambio dei 3 select data e carica la sidebar solo se tutti e 3 hanno un valore numerico
 * @param {Object} e Event
 * @param {Object} d Id del select day
 * @param {Object} m Id del select month
 * @param {Object} y Id del select year
 */
HOL.servizio.prototype.handleDataChange = function(d,m,y){
	var day = document.getElementById(d);
	var month = document.getElementById(m);
	var year = document.getElementById(y);
	
	if(day.value > 0 && month.value > 0 && year.value > 0){
		this.loadSidebar();
	}
	
}


/**
 * Ricarica la sidebar del processo di acquisto in base all'ordine corrente
 */
HOL.servizio.prototype.loadSidebar = function(callback){
	var oServizio = this;
	var target = document.getElementById('sidebarBox');
	var call = callback;

	var callback = {
		success: function(oResult){
			target.innerHTML = oResult.responseText;
			Effects.Appear(target, {
				seconds: 0.3
			});
			if(typeof(call) == 'function'){
				call();
			}
		},
		failure: function(oResult){
			HOL.layoutServizio.hideSidebarLoader();
			HOL.panels.showError(oResult);
			HOL.forms.enableSubmit(oServizio.getForm());
			return false;
		}
	};

	HOL.layoutServizio.showSidebarLoader();
	Conn.setForm(this.getForm());
	var oConn = Conn.asyncRequest('POST', 
								  '/_ajax.ordine.cfm?_isXHR=true&method=doSidebar', 
								  callback);
	
	Conn.resetFormState(); // reset the form state after the submit
	
	return false; 	
}

/**
 * Nasconde e elimina il contenuto di target
 * @param {string/HTML element} target Contenitore del form. Deve essere di tipo "block"
 * @return {boolean} false
 */	
HOL.servizio.prototype.hideForm = function(target,callback){
	var target = Dom.get(target);
	var fade = new Effects.Fade(target, {
		seconds: 0.3
	});
	fade.onEffectComplete.subscribe(function(){		
		target.setAttribute('hol:loadedForm', '');
		target.innerHTML = '';
		HOL.forms.cleanValidationError(oServizio.getForm(),'modulo-richiesta-errore');
	});
	if(typeof(callback) == 'function'){
		fade.onEffectComplete.subscribe(callback);
	}
	return false;
};

/**
 * Mostra l'esempio scribd di un servizio
 * @param {string} id Id del documento scribd
 * @param {string} title Titolo della finestra
 * @param {string} key Key per ottenere il documento da scribd
 * @return {boolean} false
 */	

HOL.servizio.showExample = function(id,title,key) {
	HOL.panels.docExample.setHeader(title);
	HOL.panels.docExample.show();
	var scribd_doc = scribd.Document.getDoc(id, key); 
	scribd_doc.addParam('height', 380);
 	scribd_doc.addParam('width', "100%");
  	scribd_doc.write('docExample');
	HOL.panels.docExample.center();  
	return false;
};

HOL.servizio.cercaConservatoria = {};

/**
 * Mostra la finestra per la ricerca della conservatoria
 * @param {string/HTML Element} el Elemento a cui allineare la finestra
 * @param {string} dataType Data meccanizzata o no
 * @return {void}
 */	

HOL.servizio.cercaConservatoria.show = function(el,dataType) {
	HOL.windowBox.showConservatoria(dataType);
	/*
	return;		
	var panel = HOL.panels.conservatoria;
	var region = Dom.getRegion(el);
	var panelWidth = panel.cfg.getProperty('width').replace('px','');
	panel.setBody('Caricando...');
	
	var callback = {
		success: function(oResult) {			
			panel.setBody(oResult.responseText);
		},
		failure: function(oResult) {
			panel.setBody('Errore nel caricamento.');
		}		
	};
	
	var oConn = Conn.asyncRequest('GET', '/_ajax.common.cfm?method=conservatorieShowContent&dataType='+dataType, callback);
	
	panel.show();
	// sposto la finestra accanto all'elemento
	panel.moveTo(region.left, region.top);
	*/
};


HOL.windowBox.showConservatoria = function(dataType) {	
	var url = '/_ajax.common.cfm?method=conservatorieShowContent&dataType='+dataType;
	
	$.fancybox({
			href: url,			
			autoDimensions:false,			
			width:350,
			height:300,			
			ajax: {
				type: "GET"
			}
		});	
};

/**
 * Esegue la ricerca della conservatoria partendo dal codice del comune
 * @param {string} codComune Codice del comune della conservatoria
 * @param {string} dataType Data meccanizzata o no
 * @return {void}
 */

HOL.servizio.cercaConservatoria.search = function(codComune,dataType) {	
	var resultContainer = Dom.get('conserv_result');
	Dom.setStyle(resultContainer, 'display','');
	resultContainer.innerHTML = '';
	resultContainer.innerHTML = '<td colspan="2">Ricerca in corso...</td>';
	
	var callback = {
		success: function(oResult) {
			resultContainer.innerHTML = oResult.responseText;
		},
		failure: function(oResult) {
			resultContainer.innerHTML = 'Errore nella ricerca.'
		}		
	};
	var oConn = Conn.asyncRequest('GET', '/_ajax.common.cfm?_isXHR=true&method=conservatorieDoSearch&codComune='+codComune+'&dataType='+dataType, callback);
};




/**
 * Setta nell'HTML la conservatoria corretta
 * @param {string} cons Codice della conservatoria
 * @param {string} data Informazioni sulla data
 * @return {void}
 */
HOL.servizio.cercaConservatoria.set = function(cons,data) {
	var panel = HOL.panels.conservatoria;
	Dom.get('conservatoria_data').innerHTML = data;
	ow.form.setSelectValues('conservatoria', cons);
    Dom.get('field_conservatoria').onchange();
	panel.hide();
};

/** 
 * Controlla se un comune e' informatizzato
 * @param {Object} select Select 
 */
HOL.servizio.checkComuneInformatizzato = function(select,loadSidebar) {
	var resultContainer = Dom.get('comuneNonInformatizzato');
	var selectValue = ow.form.getSelectValues(select.name);
	HOL.forms.disableSubmit(select.form);
	HOL.layoutServizio.showLoader();
	var loadSidebar = loadSidebar != undefined ? loadSidebar : false;
	var callback = {
		success: function(oResult){
			if (selectValue != 0 && ow.core.trim(oResult.responseText) == 'NO') {
				Dom.setStyle(resultContainer, 'display', 'block');
				select.form.informatizzato.value = 0;
				servizio.removeUrgente();
			}
			else {
				Dom.setStyle(resultContainer, 'display', 'none');
				select.form.informatizzato.value = 1;
				servizio.loadUrgente();
			}
			HOL.layoutServizio.hideLoader();
			HOL.forms.enableSubmit(select.form);
			if(loadSidebar){
				servizio.loadSidebar();
			}
		},
		failure: function(oResult){
			HOL.panels.showError(oResult);
			HOL.layoutServizio.hideLoader();
			HOL.forms.enableSubmit(select.form);
			return false;
		}
	};
	var oConn = Conn.asyncRequest('GET', '/_ajax.common.cfm?method=searchComuneInformatizzato&codComune=' + selectValue, callback);
};

/**
 * 
 * @param {Object} select
 * @param {Array} list
 */
HOL.servizio.checkComuneMappaCatastale = function(select,list,callback) {
	
	var selectValue = ow.form.getSelectValues(select.name);
	HOL.forms.disableSubmit(select.form);
	HOL.layoutServizio.showLoader();
	var $box = $('#consegnaByComune');
	var match = false;
		
	for(var i=0; i <= list.length; i++){
		if(selectValue == list[i]){
			$box.html('Per il comune di ' +  list[i] + ' il tempo di consegna è di 1 giorno.');
			$box.show();
			match = true;
			break;
		}
	}
	
	HOL.servizio.checkComuneInformatizzato(select,false);	
	
	if(!match){
		$box.hide();	
	}
};


HOL.servizio.volturaCatastale = {};

/**
 * Controlla la mora da pagare partendo dalla data dell'atto
 * @param {Object} frm Form della richiesta
 */
HOL.servizio.volturaCatastale.checkMora = function(frm) {
	var resultContainer = Dom.get('textMora');
	var dataAtto = frm.data_atto_giorno.value + '/' + frm.data_atto_mese.value + '/' + frm.data_atto_anno.value; 
	HOL.forms.disableSubmit(frm);
	HOL.layoutServizio.showLoader();
	var callback = {
		success: function(oResult) {
			resultContainer.innerHTML = oResult.responseText;
			HOL.forms.enableSubmit(frm);
			HOL.layoutServizio.hideLoader();
		},
		failure: function(oResult){
			HOL.panels.showError(oResult);
			HOL.layoutServizio.hideLoader();
			HOL.forms.enableSubmit(frm);
			return false;
		}
	};
	var oConn = Conn.asyncRequest('GET', '/_ajax.common.cfm?method=checkCostoMora&data='+dataAtto, callback);
};



