//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
/*
Handler per la gestione del cambiamento nelle pagine.
*/
var _changed = false ;
var _elementAlert = null ;

var changeAlertMessage = "I cambiamenti andrebbero persi. \nContinuo?" ;
/*
Scrive nel primo elemento trovato il codice per visualizzare l'avvenuto cambiamento
dei dati
*/
(function() {
	jQuery.fn.changeAlert = function(cContainers) {
		if(!this.size()) return ;

		// Setup
		_elementAlert = this.eq(0) ;
		
		// Setta lo stato in base al cookie
		$('#_hndChkbox', this).get(0).checked = $.cookie("handlerAlert") ;
		
		$("#_cmdCheck", this).css("cursor", "pointer").bind("click", function() {
			$('#_hndChkbox', _elementAlert).toggleCheck() ; 
			$.cookie("handlerAlert", ($('#_hndChkbox', _elementAlert).get(0).checked) ? 1: null) ;
		});
				
		// Catture l'evento di cambiamento settaggio alert e lo mette in cookie
		$("#_hndChkbox", _elementAlert).bind("click", function() { $.cookie("handlerAlert", (this.checked ? 1 : null)) ; });
		
		// Cattura l'evento onchange per ogni input, textarea, select
		cContainers.not($('input, textarea, select', this.eq(0))).bind("change", setChangedAlert) ;		
	},
	jQuery.fn.changeAlertForce = function() {
		$('#_hndChkbox', _elementAlert).check() ; 
	}
})(jQuery) ;

/*
Indica a quali elementi va associato il controllo di uscita pagina tramite evento click
*/
(function() {
	jQuery.fn.alertUnload = function(cContainers) {
		this.not($('a',_elementAlert)).bind("click", function(event) { 
			if(_changed && $('#_hndChkbox', _elementAlert).get(0).checked) {	
				var msg = "" ;
				try {
					msg = changeAlertMessage ;
				} catch(e) {
					msg = "I cambiamenti andrebbero persi, lasciando la pagina. Continuo?" ;
				}
				
				if(!confirm(msg)) {
					try {
					event.cancelBubble = true ;
					event.stopPropagation();
					} catch(e) {}
					
					return false ;
				}
			}
			
			return true ;
		}) ;
	}	
})(jQuery) ;

(function() {
	jQuery.fn.alertChangeTab = function() {
		this.not($('a',_elementAlert)).bind("click", function(event) { 
			if(_changed && $('#_hndChkbox', _elementAlert).get(0).checked) {	
				var msg = "" ;
				try {
					msg = changeAlertMessage ;
				} catch(e) {
					msg = "I cambiamenti andrebbero persi, lasciando la pagina. Continuo?" ;
				}
				
				if(!confirm(msg)) {
					try {
					event.cancelBubble = true ;
					event.stopPropagation();					
					} catch(e) {}
					
					IsValidChangeTab = false ;
					return false ;
				}
			}
			
			unsetChangedAlert() ;
			
			IsValidChangeTab = true ;
			return true ;
		}) ;
	}	
})(jQuery) ;

/*
Funzione che puo' essere chiamata per forzare il segnale di un cambiamento
*/
(function() {
	jQuery.fn.alertSignal = function() {
		setChangedAlert() ;
	}	
})(jQuery) ;


// Indica l'avvenuto cambiamento
function setChangedAlert() {
	try {
		if(_changed) return ;
		else _changed = true ;

		$("#_hndVisualAlert").attr('class', 'alertChanged');
		$("#_hndVisualAlert").html($("#_hndMessage").html()) ;
	} catch(e) {}
}

// Cancella la segnalazione del cambiamento
function unsetChangedAlert() {
	try {
		if(!_changed) return ;
		else _changed = false ;

		$("#_hndVisualAlert").removeClass('alertChanged');
		$("#_hndVisualAlert").html("") ;
	} catch(e) {}
}

jQuery.fn.extend({
	check: function() {
		return this.each(function() { this.checked = true; });
	},
	uncheck: function() {
		return this.each(function() { this.checked = false; });
	},
	toggleCheck: function() {
		return this.each(function() { this.checked = !this.checked ; });
	}
});



