/*****************************
 * extjscsienricher v. 1.4.2 *
 *****************************/


var old_value_combobox = ""; // --> variabile che contiene il valore
// dell'ultimo combobox su cui è andato il focus
var old_name_combobox = ""; // --> variabile che contiene il nome dell'ultimo
// combobox su cui è andato il focus
var is_onclick_combobox = false; // --> variabile che indica se si è premuto
// col mouse sulla combobox su cui si ha il
// focus
/**
 * imposto a false la variabile che mi indica se devo mostrare la finestra di
 * attesa
 */
var isLoadingBoxMdd = true;

/**
 * reperimento path file corrente
 * @param {String} filename
 * @return {String}
 */
var getCurrentPathFile = function(filename){
	var i, a, links = document.getElementsByTagName("script"), len = links.length;
    for (i = 0; i < len; i++) {
        a = links[i];
        var pathFile = a.getAttribute("src");
        if (pathFile.indexOf(filename) != -1) {
            return pathFile.substring(0, pathFile.indexOf(filename));
        }
    }
}
//*** sovrascrittura path blank image
Ext.BLANK_IMAGE_URL = getCurrentPathFile('ajaxifyTag.js')+'images/s.gif';

// ***ridimensiono l'area da disabilitare
function loadHeight() {

	var ps = Ext.fly(document).getScroll();
	var disabledZone = Ext.get('disabledZoneMdd');
	if (!disabledZone) {
		disabledZone = document.createElement('div');
		disabledZone.setAttribute('id', 'disabledZoneMdd');

		Ext.getBody().appendChild(disabledZone);

		var height = Ext.getBody().getViewSize().height;
		var width = Ext.getBody().getViewSize().width;

		Ext.fly('disabledZoneMdd').setStyle({
					position : 'absolute',
					left : '0px',
					top : ps.top + 'px',
					width : width + 'px',
					height : height + 'px'
				});
	}
}

/**
 * mostro la maschera di attesa. STDMDD-764: su IE l'evento beforeunload non e' affidabile
 * (scatta piu' volte => disattivo)
 */
window.onbeforeunload = function() {

	if (isLoadingBoxMdd  && !Ext.isIE) {
		showLoadBox();
	}

	isLoadingBoxMdd = true;
}

/**
 * disabilito la maschera di attesa se sto cliccando sui link di export della
 * displaytag
 */
document.onclick = function(event) {
	if (window.event) {
		event = window.event;
	}

	var el = event.srcElement || event.target;

	var tag = el.tagName;
	var cssClass = el.className;

	if ((tag == 'span' || tag == 'SPAN')
			&& (cssClass == 'pdf' || cssClass == 'xls')) {
		isLoadingBoxMdd = false;
	} else if ((tag == 'input' || tag == 'INPUT')
			&& (cssClass.indexOf('showHelp') != -1 || cssClass
					.indexOf('showReport') != -1)) {
		isLoadingBoxMdd = false;
	}

}

function showLoadBox() {

	Ext.MessageBox.show({
				title : 'Attendere',
				msg : 'Lettura dati in corso...',
				progressText : 'Attendere...',
				width : 300,
				progress : false,
				closable : true,
				icon : 'ext-mb-download'
			});
}

function hideLoadBox() {
	if (Ext.MessageBox.isVisible()) {
		Ext.MessageBox.hide();
	}
}

/**
 * estrae l'id della pagina preso dal commento pageId della risposta
 * 
 * @param {String}
 *            fragment. Restituisce la stringa dialogPanel se non trova il
 *            pageId.
 * @return {String}
 */
function getResponsePageId(fragment) {
	/*
	 * se non ho il page id allora sono in un dialogpanel
	 */
	if (fragment.indexOf('<!-- pageId:') == -1) {
		return 'dialogPanel';
	}
	var idStartIdx = fragment.indexOf('<!-- pageId:') + 12;
	var idEndIdx = fragment.indexOf(' -->', idStartIdx);
	return fragment.substring(idStartIdx, idEndIdx);
}

/**
 * lancia l'evento di success sul callback
 * 
 * @param {String}
 *            response
 * @param {Object}
 *            opts
 * @param {String}
 *            id
 * @param {String}
 *            pageId
 */
function runSuccessAction(response, opts, id, pageId) {
	var fragment = response.responseText;

	var responsePageId = getResponsePageId(fragment);

	if (responsePageId == 'dialogPanel') {
		var idxOfBody = fragment.indexOf('<body>');
		var idxOfEndBody = fragment.indexOf('</body>');			// memorizzo il dato in una variabile per poter controllarne il valore in fase di debug
		var fragm = fragment;
		if (idxOfBody >= 0){ /* STDMDD-830 */
		
			/* STDMDD-914 */
			if(idxOfEndBody >= 0 && idxOfEndBody > idxOfBody )	// substring esatta solo se la end esiste ed e' maggiore dello start
				fragm = fragment.substring(idxOfBody + 6, idxOfEndBody);			
			else
				fragm = fragment.substring(idxOfBody + 6);		// non imposto la end e substringo fino alla fine del frammento
			
		}
		var frammento = Ext.getBody();
		frammento.dom.innerHTML = fragm;

	} else if (pageId != null && fragment.indexOf('<!-- pageId:' + pageId + ' -->') == -1) {
		/*
		 * 
		 */
		document.forms[0].action = responsePageId + '.do';
		document.forms[0].submit();

	} else {

		var idSplit = id.split(',');
		for (var i = 0; i < idSplit.length; i++) {
			var fragm = fragment
					.substring(fragment.indexOf('<!-- startFragment:'
									+ idSplit[i] + ' -->'), fragment
									.indexOf('<!-- endFragment:' + idSplit[i]
											+ ' -->'));

			var frammento = Ext.get(idSplit[i]);
			if (frammento != null){
				frammento.dom.innerHTML = fragm;
			}
		}

	}

	// riapplica gli arricchimenti del frammento
	if (uiEnricherMgr != undefined) {
		try {
			uiEnricherMgr.apply(pageId, idSplit);
		} catch (e) {
			// ***oggetto non trovato
		}
	}

	hideLoadBox();
}

function runFailureAction(response, opts) {
	var messaggio = "";
	if (response.status == '304') {
		messaggio = "Impossibile eseguire l'operazione";
	} else if (response.status == '200') {
		var testo = response.responseText;
		if (testo.indexOf('application-error-msg-ext') != -1) {
			messaggio = testo.substring(testo
							.indexOf('<div id="application-error-msg-ext">')
							+ 36, testo.indexOf('</div>'));
		} else {
			return; // Do nothing
		}
	} else if (response.status == '401') {
		messaggio = "Autenticazione richiesta - Bisogna autenticarsi";
	} else if (response.status == '302') {
		messaggio = "Sessione scaduta";
	} else if (response.status == '500') {
		messaggio = "Si &egrave; verificato un errore applicativo.";
	} else {
		messaggio = "Si &egrave; verificato un problema generico";
	}
	Ext.Msg.show({
				title : "Attenzione eccezione remota",
				msg : messaggio,
				icon : Ext.Msg.ERROR,
				minWidth : 400,
				buttons : Ext.Msg.OK
			});
}

function updateAjaxCallback(id, url, parameters, pageId) {

	var lista = {};
	var paramSplit = parameters.split(',');
	for (var i = 0; i < paramSplit.length; i++) {
		var sottoParam = paramSplit[i].split('=');
		lista[sottoParam[0]] = sottoParam[1];
	}

	Ext.Ajax.request({
				url : url,
				// params : { eval(parameters) },
				params : Ext.apply(lista),
				method : 'POST',
				beforerequest : showLoadBox(),
				// requestcomplete: maskStore.hide(),
				requestexception : Ext.util.Format.messaggiErroreConnection,
				success : function(response, opts) {
					runSuccessAction(response, opts, id, pageId);
				},
				failure : function(response, opts) {
					runFailureAction(response, opts);
				}
			});
}

function xmlhttpPost(strURL, formname, id, pageId, responsemsg) {

	Ext.Ajax.request({
				url : strURL,
				form : formname,
				waitMsg : responsemsg,
				method : 'POST',
				beforerequest : showLoadBox(),
				// requestcomplete: maskStore.hide(),
				requestexception : Ext.util.Format.messaggiErroreConnection,
				success : function(response, opts) {
					runSuccessAction(response, opts, id, pageId);
				},
				failure : function(response, opts) {
					runFailureAction(response, opts);
				}
			});
}

// event handler RadioButtons
function onRBClickAjax(id, requestUri, parameters, pageId, formName) {
	xmlhttpPost(requestUri, formName, id, pageId, 'Attendere...');
}

// --> funzione che viene eseguita al click sul combobox
function onCBClickAjax(oggetto, id, requestUri, parameters, pageId, formName) {
	// controllo se è già stato premuto il tasto del mouse
	if (is_onclick_combobox == true) {
		// mi comporto come se la combobox perda il fuoco
		is_onclick_combobox = false;
		// UpdateAjaxCallback(id, url, parameters, pageId) [MA]
		xmlhttpPost(requestUri, formName, id, pageId, 'Attendere...');
		old_value_combobox = oggetto.value;
		old_name_combobox = oggetto.name;
	} else
		// se non è stato premuto imposto la variabile a true per segnalare la
		// prima pressione
		is_onclick_combobox = true;
}
