/**
 *
 * @fileoverview Gestisce l'oggetto ordine nella pagina del servizio
 *
 * @filename richiesta.js
 * @requires owjslib.js, layoutServizio.js, servizio.js, YAHOO.util.Dom, YAHOO.util.Connect, YAHOO.lang.JSON;
 * @created 2008-05-07
 * @original author Giampaolo Bellavite
 * @copyright Kemen s.r.l.
 * @license Mozilla Public License Version 1.1
 * @version 0.1
 * @$LastChangedDate:: 2010-07-08#$
 * $LastChangedRevision: 2347 $
 * $LastChangedBy: faser $
*/

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

/*** Constructor ***/

HOL.richiesta = function(oServizio){
	var _oServizio = oServizio;
	this.getServizio = function(){
		return _oServizio;
	};
};

/*** Public methods ***/

/**
 * Aggiunge il servizio nel carrello richiamando via XHR _ajax.ordine.cfm
 * La chiamata (se ha avuto successo) deve ritornare la posizione nel carrello del servizio inserito
 * e ridirezione l'utente in order.cfm per proseguire con l'ordine, altrimenti mostra gli eventuali
 * errori all'utente
 *
 */
HOL.richiesta.prototype.addToCart = function(){
	var oOrdine = this;
	var oServizio = oOrdine.getServizio();
	var callback = {
		success: function(oResult){
			var parsedResponse = JSON.parse(oResult.responseText);
				
			// Controllo se c'e' un errore di validazione
			if (parsedResponse.CFValidationError) {
				if(parsedResponse.CFValidationError.field == '_expressionError') {
					HOL.layoutServizio.hideLoader();
					HOL.forms.enableSubmit(oServizio.getForm());
					HOL.forms.catchValidationError(parsedResponse.CFValidationError, 'modulo-richiesta-errore', oServizio.getForm());
					alert('Si è verificato un errore inviando la richiesta.\nClicca su OK per ricaricare la pagina e riprovare.');
					location.reload();
				}
				else {
					HOL.layoutServizio.hideLoader();
					HOL.forms.enableSubmit(oServizio.getForm());
					HOL.forms.catchValidationError(parsedResponse.CFValidationError, 'modulo-richiesta-errore', oServizio.getForm());
				};

			}
			else {
				if(parsedResponse.CFLocation){
					document.location=parsedResponse.CFLocation;
				}
				
			}
		},
		failure: function(oResult){
			HOL.layoutServizio.hideLoader();
			HOL.panels.showError(oResult);
			HOL.forms.enableSubmit(oServizio.getForm());
		}
	};
	HOL.forms.cleanValidationError(oServizio.getForm(),'modulo-richiesta-errore');
	HOL.layoutServizio.showLoader();
	HOL.forms.disableSubmit(oServizio.getForm());

	var form = oServizio.getForm();
	Conn.setForm(oServizio.getForm());
	var oConn = Conn.asyncRequest('POST',
								  '/_ajax.ordine.cfm?_isXHR=true&method=addToCart',
								  callback);
	// reset the form state after the submit
	Conn.resetFormState();
	return true;

};

/**
 * Aggiunge il servizio nel carrello richiamando via XHR _ajax.ordine.cfm
 * La chiamata (se ha avuto successo) deve ritornare la posizione nel carrello del servizio inserito
 * e ridirezione l'utente in order.cfm per proseguire con l'ordine, altrimenti mostra gli eventuali
 * errori all'utente
 *
 */
HOL.richiesta.prototype.editCart = function(pos){
	var oOrdine = this;
	var oServizio = oOrdine.getServizio();

	var callback = {
		success: function(oResult){
			var parsedResponse = JSON.parse(oResult.responseText);

			// Controllo se c'e' un errore di validazione
			if (parsedResponse.CFValidationError) {
				if(parsedResponse.CFValidationError.field == '_expressionError') {
					HOL.layoutServizio.hideLoader();
					HOL.forms.enableSubmit(oServizio.getForm());
					HOL.forms.catchValidationError(parsedResponse.CFValidationError, 'modulo-richiesta-errore', oServizio.getForm());
					alert('Si è verificato un errore inviando la richiesta.\nClicca su OK per ricaricare la pagina e riprovare.');
					location.reload();
				}
				else {
					HOL.layoutServizio.hideLoader();
					HOL.forms.enableSubmit(oServizio.getForm());
					HOL.forms.catchValidationError(parsedResponse.CFValidationError, 'modulo-richiesta-errore', oServizio.getForm());
				};
			}
			else {
				var form=oServizio.getForm();
				if((form.back)&&form.back.value=='session') {
					document.location='/orderSession.cfm';
				}
				else {
					document.location='/order.cfm?pos='+parsedResponse;
				}
			};
		},
		failure: function(oResult){
			HOL.layoutServizio.hideLoader();
			HOL.panels.showError(oResult);
			HOL.forms.enableSubmit(oServizio.getForm());
		}
	};
	HOL.forms.cleanValidationError(oServizio.getForm(),'modulo-richiesta-errore');
	HOL.layoutServizio.showLoader();
	HOL.forms.disableSubmit(oServizio.getForm());

	this.rankFormItem(oServizio.getForm());
	
	Conn.setForm(oServizio.getForm());
	var oConn = Conn.asyncRequest('POST',
								  '/_ajax.ordine.cfm?_isXHR=true&method=editCart&pos='+pos,
								  callback);
	// reset the form state after the submit
	Conn.resetFormState();
	return true;

};