/**
 *
 */


// Caricamento dinamico via Js dei plugins richiesti per l'applicazione.
//jqPlugins('calendar,maskedinput,blockui,modal,choose,interface,iwin');


$('document').ready(function() {
	
	___estimate___listTable();
	___estimate___errorMessages();
	___estimate___formBlockEvidence();
	
	// Applico i plugins pe il calendario.
	$('.jCalendar').maskedinput('99/99/9999').calendar();
	
	
	$('a.blank').attr('target','_blank');
	
	// Attivo la gestione delle applicazioni di preventivo.
	Estimate().init();
	
	
	// Attivo la gestione dei semafori di stato preventivo.
	Estimate().StatoPreventivo();
	
	// Gestione della stampa in una nuova finestra di un pdf del contatto.
	if ( __appController__ == 'store_contacts' && __appAction__ == 'add' ) Estimate().printContact();
});




/**
 * Class "Estimate"
 * Gestione dei preventivi nel sistema.
 */
var Estimate = function() {
	
	
		
	
	return {
		
		
		init: function() {
			if ( __appController__ == 'store_estimates' && __appAction__ == 'add' ) {
				this.add();
			}
			
			if ( __appController__ == 'store_estimates' && __appAction__ == 'edit' ) {
				this.add();
			}
			
			// Operazioni dedicate allo storico dei preventivi.
			if ( __appController__ == 'store_utilities' && __appAction__ == 'archive' ) {
				$('.estActEdit').remove();
			}
			
			
			// Apertura AJAX della visualizzazione anteprima preventivo.
			$('.estActPreview').bind('click',function(){
				this.blur();
				
				// Identifico l'id del preventivo in questione.
				id = $(this).attr('href');
				id = id.substr(0,id.length-1);
				id = id.substr(0,id.lastIndexOf('/'));
				id = id.substring( id.lastIndexOf('/')+1, id.length );
				
				dlgId 		= "estPreview"+id;
				dlgTitle	= "Anteprima Preventivo";
				dlgCnt		= "Caricamento in corso...";
				
				$('body').append(jqmGetBaseModal(dlgId,dlgTitle,dlgCnt));
				dlg = $('#'+dlgId);
				dlg.jqm({modal:false}).jqmShow();
				
				$('.content',dlg).load(
					$(this).attr('href').replace('xhtml','ajax'),
					{__jcms__request_type__: "ajax_xhtml"},
					function() {
						
						dlg.css('border','1px solid black');
						
						$('.content',dlg).each(function(){
							o = $(this);
							o.css('fontSize','10px');
							o.css('padding', '10px');
						});
					}
				);
				
				
				return false;
			});
			
		}, // EndOf: "init()" ---
		
		
		
		/**
		 * Gestione del pannello creazione preventivo.
		 */
		add: function() {
			
			
			// Aggiunta campo "Prezzo di Listino". [BasePrice]
			listino = '<div id="js_listino" class="total">';
			listino+= '<label>Prezzo Listino Cliente:</label>';
			listino+= '<input type="text" name="data[StoreEstimate][base_price]" id="StoreEstimateBasePrice" />';
			listino+= '<span class="clr">&nbsp;</span>';
			listino+= '</div>';
			$('#veichle_data').after(listino);
			
			// Aggiunta campo prezzo di "Prezzo Scontato". [DiscountedPrice]
			listino = '<div id="js_ptotal" class="total">';
			listino+= '<label>Totale Parziale:</label>';
			listino+= '<input type="text" name="data[StoreEstimate][discounted_price]" id="StoreEstimateDiscountedPrice" />';
			listino+= '<span class="clr">&nbsp;</span>';
			listino+= '</div>';
			$('#discount_data').after(listino);
			
			// Aggiunta del campo "Totale Imponibile" [TaxableIncomePrice].
			html = '<div id="js_imponibile" class="total">';
			html+= '<label>Totale Imponibile:</label>';
			html+= '<input type="text" name="data[StoreEstimate][taxable_income_price]" id="StoreEstimateTaxableIncomePrice" />';
			html+= '<span class="clr"></span></div>';
			$('#price_data').after(html);
						
			// Aggiunta del campo "Prezzo Chiavi in Mano" [TotalPrice].
			html = '<div id="js_totale" class="total">';
			html+= '<label>Prezzo Chiavi in Mano:</label>';
			html+= '<input type="text" name="data[StoreEstimate][total_price]" id="StoreEstimateTotalPrice" />';
			html+= '<span class="clr"></span></div>';
			$('#price_tax').after(html);
			
			
			
			// Predisposizione componente "euro" per i vari campi del form
			$('#StoreEstimateVeichleVersionPrice').euro();
			$('#StoreEstimateVeichleColorPrice').euro();
			$('#StoreEstimateEquipementPrice').euro();
			$('#StoreEstimateBasePrice').euro(); 				// Prezzo di listino calcolato.
			$('#StoreEstimateDiscountedPrice').euro();			// Prezzo scontato
			$('#StoreEstimateOnroad').euro();
			$('#StoreEstimateTaxableIncomePrice').euro();		// Prezzo Imponibile
			$('#StoreEstimateIvaValue').euro();
			$('#StoreEstimateTotalPrice').euro();				// Prezzo totale
			$('#StoreEstimateExchangeIvaValue').euro();
			$('#StoreEstimateExchangePrice').euro();			// Prezzo permuta
			$('#StoreEstimateTotal').euro();					// Prezzo totale
			
			
			// Calcolo dinamico degli importi di preventivo.
			touch = ' #StoreEstimatePreparationPrice';
			touch+= ',#StoreEstimateReservedDiscount';
			touch+= ',#StoreEstimateIva'
			touch+= ',#StoreEstimateExpensesValue';
			touch+= ',#StoreEstimateExchangeValue';
			touch+= ',#StoreEstimateExchangeIva';
			$(touch).bind('keyup',function() {
				Estimate().UpdateListino();
			});
			
			// Calcolo dinamicamente lo sconto in base alla percentuale inserita.
			$('#StoreEstimateReservedDiscount').bind('keyup',function() {
				BasePrice					= $('#StoreEstimateBasePrice').euroGet();
				ReservedDiscountPercentage 	= Estimate().GetFloat('StoreEstimateReservedDiscount','value');
				ReservedDiscount			= Math.round( ( BasePrice / 100 * ReservedDiscountPercentage ) * 100 ) / 100;
				$('#StoreEstimateReservedDiscountValue').attr('value',ReservedDiscount);
				Estimate().UpdateListino();
			});
			
			// Calcolo dinamicamente la percentuale di sconto in base alla quantitˆ di sconto inserito.
			$('#StoreEstimateReservedDiscountValue').bind('keyup',function() {
				BasePrice					= $('#StoreEstimateBasePrice').euroGet();
				ReservedDiscount			= Estimate().GetFloat('StoreEstimateReservedDiscountValue','value');
				ReservedDiscountPercentage	= Math.round(( ReservedDiscount /( BasePrice /100))*100)/100;
				$('#StoreEstimateReservedDiscount').attr('value',ReservedDiscountPercentage);
				Estimate().UpdateListino();
			});

			// Aggiornamento iniziale del prezzo di listino del veicolo.
			Estimate().UpdateListino();
			
			// Impostazioni iniziali pannello modalitˆ di pagamento:
			Estimate().PaymentType(true);
			$('#StoreEstimatePaymentType').bind('change',function(){ Estimate().PaymentType(false); });
			
			// Predisposizione "Choose" per l'agente di riferimento.
			$('#choose_agent').choose({
				onChoose:	function( obj ) {
								url = __appBase__ + '/sources/get_store_agents/';
								obj.chooseDialog({ 
									title:	"Selezione Commerciale:",
									source: url,
									modal: 	"false",
									chooseButton:"none",
									chooseMode:	 "click"
								});
				}
			});
			
			// Predisposizione "Choose" per il cliente.
			url = __appBase__ + '/sources/get_store_contacts/';
			$('#choose_contact').choose({
				onChoose:	function( obj ) {
								url = __appBase__ + '/sources/get_store_contacts/';
								obj.chooseDialog({ 
									title:	"Selezione Contatto:",
									source: url,
									modal: 	"false",
									chooseButton:"none",
									chooseMode:	 "click",
									onLoad: function( dlg, cfg ) {
										
										// Gestione dei links di paginazione:
										$('.navBarModal a', dlg ).click(function(){
											$('.content',dlg).html("Caricamento in corso...");
											$('.content',dlg).load( $(this).attr('href') ,function(){ 
												cfg.onLoad( dlg, cfg );
												chooseDialog_initData( dlg, cfg ); 
											});
											return false;
										});
										
										// Gestione del form di ricerca.
										$('.navBarModal form').ajaxForm({
											target: $('.content',dlg),
											beforeSubmit: function(){
												$('.content',dlg).html("Caricamento in corso...");
											},
											success: function(){
												cfg.onLoad( dlg, cfg );
												chooseDialog_initData( dlg, cfg );
											}
										});
										
									}
								});
				}
			});
			
			
			
			// Predisposizione "Choose" per la selezione di un veicolo.
			$('#choose_veichle').choose({
				onChoose: 	function( obj ) {
								
								// Gestione del reset degli attributi correlati al veicolo.
								if ( $('#choose_version .value').attr('value') != undefined ) {
									if ( confirm("Precedendo nell'operazione verranno eliminati gli altri attributi del veicolo.\n\nContinuare?",1) ) {
										$('#choose_version').chooseReset();
										$('#choose_color').chooseReset();
										$('#StoreEstimateVeichleVersionPrice').euroReset();
										$('#StoreEstimateVeichleColorPrice').euroReset();
										$('#StoreEstimateBasePrice').euroReset();
										Estimate().ResetOptionals();
										Estimate().UpdateListino();
										Estimate().ClearVeichleVersionCode();
									} else return;
								} // Fine gestione reset attributi correlati al veicolo.
								
								url = __appBase__ + '/sources/get_store_veichles/';
								obj.chooseDialog({ 
									title:	"Selezione veicolo:",
									source: url,
									modal: 	"false",
									chooseButton:"none",
									chooseMode:	 "click",
									onChoose: function() {
										$('#choose_version a').click();
									}
								});
							}
			});
			
			// Predisposizione "Choose" per la selezione di una caratteristica di veicolo.
			Estimate().VeichleVersionCode();
			$('#choose_version').choose({
				onChoose: 	function( obj ) {
								
								if ( $('#choose_veichle .value').attr('value') == undefined ) {
									alert("E' necessario selezionare prima un veicolo!");
									$('#choose_veichle a').click();
									return;
								}
								
								url = __appBase__ + '/sources/get_store_veichle_versions/';
								obj.chooseDialog({ 
									title:		"Selezione caratteristica veicolo:",
									source: 	(url + $('#StoreEstimateVeichleId').attr('value')+'/'),
									modal: 		"false",
									chooseButton:"none",
									chooseMode:	 "click",
									onChoose:	function(obj) {
													$('#StoreEstimateVeichleVersionPrice').euroSet( obj.start_price );
													Estimate().SetVeichleVersionCode( obj.code );
													Estimate().UpdateListino();
									}
								});
								
								
							}
			});
			
			// Predisposizione "Choose" per la selezione di un colore del veicolo.
			$('#choose_color').choose({
				onChoose: 	function( obj ) {
								
								if ( $('#choose_veichle .value').attr('value') == undefined ) {
									alert("E' necessario selezionare prima un veicolo!");
									$('#choose_veichle a').click();
									return;
								}
								
								url = __appBase__ + '/sources/get_store_veichle_colors/';
								obj.chooseDialog({ 
									title:		"Selezione colore veicolo:",
									source: 	(url + $('#StoreEstimateVeichleId').attr('value')+'/'),
									modal: 		"false",
									chooseButton:"none",
									chooseMode:	 "click",
									onChoose:	function(obj) {
													$('#StoreEstimateVeichleColorPrice').euroSet( obj.color_price );
													Estimate().UpdateListino();
									}
								});
								
								
							}
			});
			
			
			// Predisposizione "Choose" per la selezione di un equipaggiamento veicolo.
			$('#choose_equipement').choose({
				onChoose: 	function( obj ) {
								
								if ( $('#choose_veichle .value').attr('value') == undefined ) {
									alert("E' necessario selezionare prima un veicolo!");
									$('#choose_veichle a').click();
									return;
								}
								
								url = __appBase__ + '/sources/get_store_veichle_equipements/';
								obj.chooseDialog({ 
									title:		"Selezione Equipaggiamenti:",
									source: 	(url + $('#StoreEstimateVeichleId').attr('value')+'/'),
									modal: 		"false",
									chooseButton:"none",
									afterLoad:	function( dlg ) {
													// Rimozione degli handler sugli eventi di riga per la selezione.
													$('.src tbody tr', dlg).unbind('dblclick').unbind('click');
													// Ridimensionamento dell'altezza della tabella e aggiunta bottone "OK".
													$('.content', dlg).attr('style','height:320px');
													$('.content', dlg).after('<input type="button" value="chiudi" class="closeBt" />');
													$('.closeBt', dlg).bind('click', function() { dlg.jqmHide().remove(); });
													// Gestione del click sulla riga per la comunicazione server-side:
													$('.src tbody tr', dlg).bind('click', function() {
														Estimate().OptionalsOnClickRow( $(this), dlg );
													});
												} // Fine operazioni dopo il caricamento dati optionals.
								});
								
								
							}
			});
			
		}, // EndOf: "add()" ---
		
		
		/**
		 * Aggiorna il prezzo di listino per il preventivo.
		 */
		UpdateListino: function() {
			
			// Recupero le informazioni sulle componenti basilari del prezzo veicolo.
			VeichleVersionPrice 	= $('#StoreEstimateVeichleVersionPrice').euroGet();
			VeichleColorPrice 		= $('#StoreEstimateVeichleColorPrice').euroGet();
			EquipementPrice 		= $('#StoreEstimateEquipementPrice').euroGet();
			PreparationPrice		= Estimate().GetFloat('StoreEstimatePreparationPrice','value');
			
			// Calcolo il Prezzo di Listino.
			BasePrice	= VeichleVersionPrice 
						+ VeichleColorPrice 
						+ EquipementPrice 
						+ PreparationPrice;
			$('#StoreEstimateBasePrice').euroSet( BasePrice );
			
			// Recupero lo sconto applicato. Valore e percentuale sono calcolati reciprocamente alla
			// modifica dei rispettivi campi (nel codice prima della definizione dei campi choose.).
			ReservedDiscount = Estimate().GetFloat('StoreEstimateReservedDiscountValue','value');
			if ( ReservedDiscount == 0 ) {
				ReservedDiscountPercentage 	= Estimate().GetFloat('StoreEstimateReservedDiscount','value');
				ReservedDiscount			= Math.round( (BasePrice / 100 * ReservedDiscountPercentage )*100)/100;
			}
			
			// Calcolo il Totale Scontato.
			DiscountedPrice = BasePrice - ReservedDiscount;
			$('#StoreEstimateDiscountedPrice').euroSet( DiscountedPrice );
			
			// Caolcolo il totale imponibile.
			onroad 				= $('#StoreEstimateOnroad').euroGet();
			TaxableIncomePrice 	= DiscountedPrice + onroad;
			$('#StoreEstimateTaxableIncomePrice').euroSet( TaxableIncomePrice );
			
			// Calcolo l'IVA sul veicolo.
			IvaPercentage 		= this.GetFloat('StoreEstimateIva','value');
			Iva 				= (TaxableIncomePrice/100)*IvaPercentage;
			$('#StoreEstimateIvaValue').euroSet(Iva);
			
			// Calcolo il prezzo totale del veicolo chiavi in mano.
			ExpensesValue 		= Estimate().GetFloat('StoreEstimateExpensesValue','value');
			TotalPrice 			= TaxableIncomePrice + Iva + ExpensesValue;
			$('#StoreEstimateTotalPrice').euroSet( TotalPrice );
			
			// Recupero il valore della permuta e calcolo l'iva.
			ExchangeValue 			= Estimate().GetFloat('StoreEstimateExchangeValue','value');
			ExchangeIvaPercentage	= Estimate().GetFloat('StoreEstimateExchangeIva','value');
			ExchangeIvaValue		= (ExchangeValue/100)*ExchangeIvaPercentage
			ExchangePrice			= ExchangeValue + ExchangeIvaValue;
			$('#StoreEstimateExchangeIvaValue').euroSet(ExchangeIvaValue);
			$('#StoreEstimateExchangePrice').euroSet(ExchangePrice);
			
			Total 	= TotalPrice - ExchangePrice;
			$('#StoreEstimateTotal').euroSet(Total);
		}, // EndOf: "UpdateListino()" ---
		
		
		/**
		 * Legge il valore di un campo di input come numero (float).
		 */
		GetFloat: function( fid, attr ) {
			val = $('#'+fid).attr(attr)+'';
			
			if ( val == 'undefined' || val == '' ) {
				return 0;
			} else {
				if ( val.indexOf(',') >= 0 ) {
					val = val.replace(',','.');
				}
			}
			val = parseFloat(val);
			
			return val;
		}, // EndOf: "GetFloat()" ---
		
		
		/**
		 * Handler del click su di una riga della selezione optionals
		 */
		OptionalsOnClickRow: function( row, dlg ) {
			
			// Gestione della selezione/deselezione equipaggiamento mediante chiamata server-side.
			obj = chooseDialog_getObject( row, $('thead', dlg) );
			
			if ( row.attr('class').indexOf('selected') < 0 ) {
				if ( !Estimate().AddOptionalById( obj.value, dlg ) ) return;
				row.addClass('selected');
			} else {
				if ( !Estimate().RemoveOptionalById( obj.value, dlg) ) return;
				row.removeClass('selected');
			}
			
			// Ricalcolo il totale di equipaggiamenti selezionati per il veicolo.
			var tot = 0;
			$('tr.selected', dlg).each(function() {
				obj = chooseDialog_getObject( $(this), $('thead', dlg) );
				tot += parseFloat(obj.price);
			});
			
			// Aggiorno i campi di valore nel preventivo.
			$('#StoreEstimateEquipementPrice').euroSet(tot);
			Estimate().UpdateListino();
			
		}, // EndOf: "OptionalsOnClickRow()" ---
		
		
		AddOptionalById: function( id ) {
			//$('.src',dlg).block();
			
			var esito = $.ajax({
 				url: __appBase__ + '/store_estimates/add_equipement_by_id/'+id+'/',
 				async: false
			}).responseText;
			
			//$('.src',dlg).unblock();
			
			if ( esito == "1" ) return true;
			return false;
		}, // EndOf: "AddOptionalById()" ---
		
		RemoveOptionalById: function ( id ) {
			//$('.src',dlg).block();
			
			var esito = $.ajax({
 				url: __appBase__ + '/store_estimates/remove_equipement_by_id/'+id+'/',
 				async: false
			}).responseText;
			
			//$('.src',dlg).unblock();
			
			if ( esito == "1" ) return true;
			return false;
		}, // EndOf: "RemoveOptionalById()" ---
		
		ResetOptionals: function () {
			
			var esito = $.ajax({
 				url: __appBase__ + '/store_estimates/reset_equipement/',
 				async: false
			}).responseText;
			
			$('#StoreEstimateEquipementPrice').euroReset();
			
			
		}, // EndOf: "ResetOptionals()" ---
		
		
		/**
		 * Definisce le varie modalitˆ di visualizzazione del pannello modalitˆ di pagamento.
		 */
		PaymentType: function( mode ) {
			
			value = $('#StoreEstimatePaymentType').attr('value');
			
			if ( value == 'F' || value == 'L' ) {
				if ( ! $('#fin').is(':visible') ) $('#fin').slideDown();
				if ( value == 'L' ) {
					if ( ! $('#riscatto').is(':visible') ) $('#riscatto').fadeIn(); 
				} else {
					if ( $('#riscatto').is(':visible') ) $('#riscatto').fadeOut();
				}
			} else {
				if ( mode == true )
					$('#fin').hide();
				else
					if ( $('#fin').is(':visible') ) $('#fin').slideUp();
				$('#riscatto').fadeOut();
			}
		}, // EndOf: "PaymentType()" ---
		
		
		VeichleVersionCode: function() {
			$('#StoreEstimateVeichleVersionCode').hide();
			Estimate().SetVeichleVersionCode( $('#StoreEstimateVeichleVersionCode').attr('value') );
			p = $('#StoreEstimateVeichleVersionCode').parent();
			a = $('a:last',p)
			p.css('position','relative');
			a.attr('class','icoVeichleImage');
			a.html( a.html() + "<span></span>" );
		},
		
		/**
		 * Imposta il codice versione dopo la selezione ed associa l'icona
		 * per la visualizzazione dell'immagine.
		 */
		SetVeichleVersionCode: function( code ) {
			
			if ( code == '' || code == undefined ) {
				Estimate().ClearVeichleVersionCode();
				return;
			}
			
			$('#StoreEstimateVeichleVersionCode').attr('value',code);
			p = $('#StoreEstimateVeichleVersionCode').parent();
			$('a:last',p).unbind('click');
			$('a:last',p).bind('click',function(){
				this.blur();
				url = __appBase__ + '/store_estimates/veichle_image/' + code + '.gif';
				win = window.open(url,'','toolbar=no, status=no, location=0, width=490px, height=300px');
				return false;
			});
		}, // EndOf: "SetVeichleVersionCode()" ###
		
		
		/**
		 * Pulisce il codice versione del veicolo.
		 */
		ClearVeichleVersionCode: function() {
			$('#StoreEstimateVeichleVersionCode').attr('value','');
			p = $('#StoreEstimateVeichleVersionCode').parent();
			$('a:last',p).unbind('click');
			$('a:last',p).bind('click',function(){ this.blur();return false; });
		}, // EndOf: "ClearVeichleVersionCode()" ###
		
		
		/**
		 * Intercetta i box contenenti un link di stato preventivo e ne sistema grafica
		 * ed azioni per prevedere la modifica via ajax.
		 */
		StatoPreventivo: function() {
			$('.estimate_status').each(function(){
				
				// Identifico l'oggetto link contenuto.
				lnk = $('a',$(this));
				
				// Aggiungo lo span per la gestione CSS
				lnk.append('<span></span>');
				
				lnk.bind('click', StatoPreventivo_onClick );
			});
		}, // EndOf: "StatoPreventivo()" ###
		
		
		/**
		 * Nella schermata di creazione nuovo contatto si interviene per produrre una schermata
		 * di stampa dati di contatto per ragioni di accettazione trattamento privacy.
		 */
		printContact: function() {
			
			$('#saveCnt').hide();
			$('#submit').append('<input type="button" value="Stampa Contatto" id="printCnt" />');
			
			$('#printCnt').bind('click',function(){
				
				// Definizione degli url di stampa e salvataggio.
				var saveUrl 	= $('#add').attr('action');
				var printUrl	= saveUrl.replace("/add","/print_contact");
				
				// Apertura della finestra e produzione del PDF.
				var pri = window.open('','printWindow');
				$("#add").attr('action',printUrl);
				$("#add").attr('target','printWindow');
				$("#add").submit();
				
				// Ripristino dei corretti valori per il form.
				$("#add").attr('action',saveUrl);
				$("#add").attr('target','_self');
				
				// Visualizzazione del bottone di stampa.
				$(this).hide();
				$('#saveCnt').css('float','right').fadeIn();
			});
			
		}, // EndOf: "printContact()" ###

		end: function(){}
	}
}; // EndOf: "Estimate()" ###


/**
 * Gestione del click su di un semaforo per il cambio stato preventivo.
 */
StatoPreventivo_onClick = function() {
	this.blur();
	
	if( __appAction__ == 'archive' ) {
		alert("Non e' possibile modificare lo stato di un preventivo archiviato.");
		return false;
	}
	
	// Identifico l'id del preventivo in questione.
	id = $(this).attr('href');
	id = id.substr(0,id.length-1);
	id = id.substring( id.lastIndexOf('/')+1, id.length );
	
	dlgId 		= "estChs"+id;
	dlgTitle 	= "";
	dlgCnt		= '<div class="change_status">';
	dlgCnt		+= '<a href="'+id+'" class="p">Pending<span></span></a>';
	dlgCnt		+= '<a href="'+id+'" class="a">Active<span></span></a>';
	dlgCnt		+= '<a href="'+id+'" class="r">Rejected<span></span></a>';
	dlgCnt		+= '</div>';
	
	
	$('body').append(jqmGetBaseModal(dlgId,dlgTitle,dlgCnt));
	dlg = $('#'+dlgId);
	dlg.jqm({modal:false}).jqmShow();
	$('.title',dlg).remove();
	
	dlg.css('height','80px');
	dlg.css('width','400px');
	dlg.css('border','1px solid black');
	
	$('a',dlg).bind('click',function(){
		this.blur();
		
		url = __appBase__ + '/store_estimates/set_status/' + id + '/' + $(this).attr('class') + '/';
		var rep = $.ajax({url: url,async: false}).responseText;
		
		if ( rep == "1" ) {
			$('#statusLink'+id).attr('class',$(this).attr('class'));
		} else {
			alert("ERRORE: ricaricare la pagina e ritentare.");
		}
		
		dlg.jqmHide().remove();
		return false;
	});
	
	// @todo: position at mouse left!
	
	return false;
} // EndOf: "StatoPreventivo_onClick()" ###

/*
<div id="calendar_div"></div><div style="z-index: 3000; display: block;" class="jqmWindow jqmID1" id="estChs15"><div class="title">Cambio stato preventivo</div><div class="content">test</div></div>
*/

/**
 * Evidenzia la riga puntata nelle tabelle ".list"
 */
function ___estimate___listTable() {
	
	$('.list tbody tr').hover(
		function() { $(this).addClass('hover'); },
		function() { $(this).removeClass('hover'); }
	);
	
} // EndOf: "___estimate___listTable()" ###


/**
 * Sistema i box di notifica errore "ERR: " con la classe corretta.
 */
function ___estimate___errorMessages() {
	
	if( $('#flashMessage').length > 0 && $('#flashMessage').html().substring(0,4).toUpperCase() == "ERR:" ) {
		$('#flashMessage').attr('class','error');
		$('#flashMessage').html( $('#flashMessage').html().substring( 5, $('#flashMessage').html().length ) );
	}
	
} // EndOf: "___estimate___errorMessages()" ###


/**
 *	Evidenzia il blocco di form su cui si sta lavorando.
 */
function ___estimate___formBlockEvidence() {
	
	$('div.i1 input, div.i1 textarea').focus(function() {
		
		// Evidenzia il blocco di form
		$('div.i1').each(function() { $(this).removeClass('active'); });
		$(this).parent().addClass('active');
		
		// Evidenzia l'elemento.
		$('div.i1 input, div.i1 textarea').each( function() { $(this).removeClass('focus') });
		$(this).addClass('focus');
		
	});
	
} // EndOf: "___estimate___formBlockEvidence()" ###





