/**
 * 	Funciones para la creacion y manipulacion de cotizaciones
 * 
 */

// Variables para gastos agrupados
var activaGrupo = false;
var grupo = 0;
var addClassGrupo = '';
var addClassMarca = '';
var numParte = 1;



/* QUOTATIONS ZONE */
	
	
 function	loadC2eQuotationObservers(){
		// Observa el buscador falso para posteriormente hacer el envio con real form
		if($('BuscadorExpenseEnviar'))
			Event.observe('BuscadorExpenseEnviar', 'click', callSearchExpenseForm);
		if($('BuscadorObservationEnviar'))
			Event.observe('BuscadorObservationEnviar', 'click', callSearchObservationForm);
		if($('BuscadorClientEnviar'))
			Event.observe('BuscadorClientEnviar', 'click', callSearchClientForm);
		// Formateamos todas los precios de las partidas
		formateaCantidades();
	}
	
	/*---------------------------------------------------------
		addPartida(): agrega los campos de partida al formulario
		return void 
	-----------------------------------------------------------*/	
	function addPartida(nPartida, esGrupo, pPadre){
		var partidaItem = new Object();
		var cantidad = 0;
		var itemTemplate;
		var cantidadAction ='';
		var cantidad = '';
		var tipoGastos = '';

		if($('tableInvoice'))
		{ 
			focuss = foccusOnPart;
			//template para invoices
			cadenaInput = "data[PartInv][#{numeroPartida}]";
			//data[InvoiceExpense][#{numeroPartida}]
			cantidad = '<td class="cantidad "><input id="cantidad#{numeroPartida}" name="' + cadenaInput +'[cantidad]" value="1"/></td>' ;
			cantidadAction = 'Event.observe(\'cantidad#{numeroPartida}\', \'change\', function(event){ calculaInvoiceTotal(); });' ;
			tipoGastos = '+\'&moneda=\' + $(\'InvoiceMoneda\').value';
			itemTemplate = new Template(
				'<tr id="partida#{numeroPartida}" class="tr '+ addClassGrupo +'" >' +
					'<td class="validacion '+ addClassMarca +'" >'+
							'<div id="validExpense#{numeroPartida}"></div>' +
							'<div id="loading#{numeroPartida}" style="display:none">#{loaderImg}</div>' +
							'<input type="hidden" id="concepto#{numeroPartida}" name="' + cadenaInput +'[concepto]"/>' +
							'<input type="hidden" id="supplier_id#{numeroPartida}" name="' + cadenaInput +'[supplier_id]"/>' +
							'<input type="hidden" id="moneda#{numeroPartida}" name="' + cadenaInput +'[moneda]"/>' +					
							'<input type="hidden" id="cuenta#{numeroPartida}" name="' + cadenaInput +'[cuenta]"/>' +
							'<input type="hidden" id="precio_min#{numeroPartida}" name="' + cadenaInput +'[precio_min]"/>' +
							'<input type="hidden" id="tipo#{numeroPartida}" name="' + cadenaInput +'[tipo]"/>' +
							'<input type="hidden" id="expensePadre#{numeroPartida}" name="' + cadenaInput +'[expensePadre]"/>' +
							'<input type="hidden" id="grupo#{numeroPartida}" name="' + cadenaInput +'[grupo]"/>' +
							'<input type="hidden" id="cargoCliente#{numeroPartida}" name="' + cadenaInput +'[cargoCliente]"/>' +
					'</td>' + 
					'<td class="id "><input id="id#{numeroPartida}" name="' + cadenaInput +'[expense_id]"/></td>' +
					'<td class="concepto "><span id="conceptoSpan#{numeroPartida}"></span></td>' +
					  cantidad + 
					'<td class="tipo "><span id="tipoSpan#{numeroPartida}"></span></td>' +
					'<td class="cuenta"><span id="cuentaSpan#{numeroPartida}"></span></td>' +
					'<td class="impuesto"><input id="impuesto#{numeroPartida}" name="' + cadenaInput +'[impuesto]"  type="text"/></td>' +
					'<td class="precio "><input id="precio#{numeroPartida}" name="' + cadenaInput +'[precio]"  type="text"/>' +
						'<span id="monedaSpan#{numeroPartida}"></span>' +
					'</td>' +
					'<td class="acciones">' + 
					                         
											   deleteCode +
										'<script>' +
											'Event.observe(\'precio#{numeroPartida}\', \'change\', function(event){  calculaPrecioGrupo(#{numeroPartida}, #{numeroFocuss}, \'#{partidaPadre}\'); calculaInvoiceTotal(); });' +
											'Event.observe(\'impuesto#{numeroPartida}\', \'change\', function(event){  calculaInvoiceTotal(); $(\'impuesto#{numeroPartida}\').value = formatoValido($(\'impuesto#{numeroPartida}\').value);});' +
											 cantidadAction + 
											'Event.observe(\'id#{numeroPartida}\', \'change\', function(event){ ' + 
											'new Ajax.Updater(\'validExpense#{numeroPartida}\',\'#{baseDir}/admin/expenses/validate?id=\'+ $(\'id#{numeroPartida}\').value + \'&partida=\' + #{numeroPartida} '+tipoGastos+' , {onLoading:function(request){Element.hide(\'validExpense#{numeroPartida}\'); Element.show(\'loading#{numeroPartida}\')}, onComplete:function(request){Element.hide(\'loading#{numeroPartida}\'); Effect.Appear(\'validExpense#{numeroPartida}\')}, asynchronous:true, evalScripts:true, requestHeaders:[\'X-Update\', \'validExpense#{numeroPartida}\']}) }, false);' +
										'<\/script>' +
						'</td>' +
				'</tr>'
				);
				// // gastoClienteCode + 
		}else{
		 itemTemplate = new Template(
			'<tr id="partida#{numeroPartida}" class="tr '+ addClassGrupo +'" >' +
					'<td class="validacion '+ addClassMarca +'" >'+
							'<div id="validExpense#{numeroPartida}"></div>' +
							'<div id="loading#{numeroPartida}" style="display:none">#{loaderImg}</div>' +
							'<input type="hidden" id="concepto#{numeroPartida}" name="data[Part][#{numeroFocuss}][Expense][#{numeroPartida}][concepto]"/>' +
							'<input type="hidden" id="supplier_id#{numeroPartida}" name="data[Part][#{numeroFocuss}][Expense][#{numeroPartida}][supplier_id]"/>' +
							'<input type="hidden" id="moneda#{numeroPartida}" name="data[Part][#{numeroFocuss}][Expense][#{numeroPartida}][moneda]"/>' +					
							'<input type="hidden" id="cuenta#{numeroPartida}" name="data[Part][#{numeroFocuss}][Expense][#{numeroPartida}][cuenta]"/>' +
							'<input type="hidden" id="precio_min#{numeroPartida}" name="data[Part][#{numeroFocuss}][Expense][#{numeroPartida}][precio_min]"/>' +
							'<input type="hidden" id="tipo#{numeroPartida}" name="data[Part][#{numeroFocuss}][Expense][#{numeroPartida}][tipo]"/>' +
							'<input type="hidden" id="expensePadre#{numeroPartida}" name="data[Part][#{numeroFocuss}][Expense][#{numeroPartida}][expadre_id]"/>' +
							'<input type="hidden" id="grupo#{numeroPartida}" name="data[Part][#{numeroFocuss}][Expense][#{numeroPartida}][grupo]"/>' +
					'</td>' + 
					'<td class="id "><input id="id#{numeroPartida}" name="data[Part][#{numeroFocuss}][Expense][#{numeroPartida}][expense_id]"/></td>' +
					'<td class="concepto "><span id="conceptoSpan#{numeroPartida}"></span></td>' +
					  cantidad + 
					'<td class="tipo "><span id="tipoSpan#{numeroPartida}"></span></td>' +
					'<td class="cuenta"><span id="cuentaSpan#{numeroPartida}"></span></td>' +
					'<td class="precio_min"><span id="precio_minSpan#{numeroPartida}"></span></td>' +
					'<td class="precio "><input id="precio#{numeroPartida}" name="data[Part][#{numeroFocuss}][Expense][#{numeroPartida}][precio]"  type="text"/>' +
						'<span id="monedaSpan#{numeroPartida}"></span>' +
					'</td>' +
					'<td class="acciones">' + deleteCode +
										'<script>' +
											'Event.observe(\'precio#{numeroPartida}\', \'change\', function(event){  calculaPrecioGrupo(#{numeroPartida}, #{numeroFocuss}, \'#{partidaPadre}\'); calculaInvoiceTotal(); });' +
											 cantidadAction + 
											'Event.observe(\'id#{numeroPartida}\', \'change\', function(event){ ' + 
											'new Ajax.Updater(\'validExpense#{numeroPartida}\',\'#{baseDir}/admin/expenses/validate?id=\'+ $(\'id#{numeroPartida}\').value + \'&partida=\' + #{numeroPartida} '+tipoGastos+' , {onLoading:function(request){Element.hide(\'validExpense#{numeroPartida}\'); Element.show(\'loading#{numeroPartida}\')}, onComplete:function(request){Element.hide(\'loading#{numeroPartida}\'); Effect.Appear(\'validExpense#{numeroPartida}\')}, asynchronous:true, evalScripts:true, requestHeaders:[\'X-Update\', \'validExpense#{numeroPartida}\']}) }, false);' +
										'<\/script>' +
						'</td>' +
				'</tr>'
			);
		}
		
		partidaItem = {numeroPartida: numero, numeroFocuss:focuss, baseDir:base, loaderImg:loader, partidaPadre:pPadre};
		a = itemTemplate.evaluate(partidaItem);
		
		// Insertamos como el �ltimo hijo de tableBody
		if(!esGrupo)
			new Insertion.Bottom('tableBody' + focuss ,  a); 
		else{
			new Insertion.After('partida' + nPartida ,  a); 
		}
		numero++;
		//tableDecorator('tableBody' . focuss);
		tableDecorator('tableBody');
		//window.alert(focuss);
		calculaInvoiceTotal();
							
	}
	
	function calculaPrecioGrupo(num, focuss, partidaPadre)
	{
	 	var numPart = '';
		var total = 0;

		if($('partida' + num))
		{
			if($('grupo' + num))
			{
				var grupoAsignado = $('grupo' + num).value;
				var tableBody = $('tableBody' + focuss);
				var trNodeList = tableBody.getElementsByClassName(classGrupo + ''+ partidaPadre + '-' + grupoAsignado);
				var nodes = $A(trNodeList);
				var i = 0;
				nodes.each(function(tr) {
						numPart = tr.id.sub('partida', '');
						if($('precio' + numPart))
						{
							total += validNumber($('precio' + numPart).value);
							$('precio' + numPart).value = formatoValido($('precio' + numPart).value);
						}
						i++;
				 });
				 if(i == 0)
				 {
					 $('precio' + num).value = formatoValido($('precio' + num).value);
					
					
				 }
				 if($('precio' + partidaPadre)){
					 $('precio' + partidaPadre).value =  formatoValido(total);
				}
			}
		}
	}
	
	function removePartida(num,  focuss, partidaPadre)
	{
		if($('partida' + num))
		{
			if($('grupo' + num))
			{
				
				grupoAsignado = $('grupo' + num).value;
				var tableBody = $('tableBody' + focuss);
				var trNodeList = tableBody.getElementsByClassName(classGrupo + ''+ num + '-' + grupoAsignado);
		        var nodes = $A(trNodeList);
				nodes.each(function(tr) {
						tr.remove();
				 });
				$('partida' + num).remove();
				 if(partidaPadre != '')
				 {
					var trNodeList = tableBody.getElementsByClassName(classGrupo + ''+ partidaPadre + '-' + grupoAsignado);
			        var nodes = $A(trNodeList);
					var tamanio = nodes.size();
					var i = 1;
					// Si quitamos todos los hijos de un grupo, borramos el padre
					if(tamanio == 0 && $('partida' + partidaPadre))
					{
						$('partida' + partidaPadre).remove();
					}
					//Acomodamos los estilos de las flechas
					nodes.each(function(tr) {
							if(i == tamanio)
							{
								// Optenemos los nodos del TD
								nodosTd = $A(tr.getElementsByClassName(classGrupoNormal));
								nodosTd.each(function(td){
									td.removeClassName(classGrupoNormal);
									td.addClassName(classGrupoEnd);	
								});
							}
							i++;

					 });
				 }
			}
			// Eliminacion sencilla para cuando no hay grupos y partidasPadres
			if($('partida' + num))
			{
				$('partida' + num).remove();
			}
			tableDecorator('tableBody');
		}
		if($('tableInvoice'))
		{
			calculaInvoiceTotal();
		}
		// Si es un grupo, calcula de nuevo el costo del grupo
		if(partidaPadre != '')
		{
			calculaPrecioGrupo(partidaPadre, focuss, partidaPadre);
		}
	}
	
	function tableDecorator(id)
	{
		continua = false;
		
		if( $(id + focuss) )
		{
			tableBody = $(id + focuss);
			continua = true;
		}
		
		if(continua)
		{
			//var tableBody = $(id + focuss);
	        var trNodeList = tableBody.getElementsByClassName('tr');
	        var nodes = $A(trNodeList);
			var i = 0;
			nodes.each(function(tr) {
	           	//if(tr.hasClassName('even'))
					tr.removeClassName('even');
				//if(tr.hasClassName('odd'))	
					tr.removeClassName('odd');
			   if((i % 2) == 0)
			   {
				  tr.addClassName('even');
			   }else{
				   tr.addClassName('odd');
			   }
			   i++;
	       })
		 }
	}
	
	function normalTableDecorator(id)
	{
		continua = false;
		if( $(id) )
		{
			tableBody = $(id);
			continua = true;
		}
		if(continua)
		{
			//var tableBody = $(id + focuss);
	        var trNodeList = tableBody.getElementsByClassName('tr');
	        var nodes = $A(trNodeList);
			
			var i = 0;
			nodes.each(function(tr) {
	           	//if(tr.hasClassName('even'))
					tr.removeClassName('even');
				//if(tr.hasClassName('odd'))	
					tr.removeClassName('odd');
			  
			   if((i % 2) == 0)
			   {
				  tr.addClassName('even');
			   }else{
				   tr.addClassName('odd');
			   }
			   i++;
	       })
		 }
	}
	
	
	
	function callSearchExpenseForm()
	{
		$('ExpenseCriterio').value = $('BuscadorExpenseCriterio').value;
		new Ajax.Updater('resultadoBusqueda', base + '/admin/expenses/buscar?ajax=1', {asynchronous:true, evalScripts:true, onLoading:function(request){Element.hide('resultadoBusqueda');Element.show('loadingBusqueda')}, onComplete:function(request){Element.hide('loadingBusqueda');Effect.Appear('resultadoBusqueda')}, parameters:Form.serialize('expenseSearch'), requestHeaders:['X-Update', 'resultadoBusqueda']});
	}
	
	function addPartidaFromSearch(id, concepto, supplier_id, moneda, cuenta, tipo, precio_min, precio, addPart)
	{
		if(typeof(addPart) == 'undefined')
		{
			addPartida();
			numeroAux = numero - 1;
		}

		$('id' + numeroAux).value = "" + id;
		$('conceptoSpan' + numeroAux).innerHTML = concepto;

		if($('expense_id' + numeroAux))
			$('expense_id' + numeroAux).value = "" + id;
			
		if($('supplier_idSpan' + numeroAux))
			$('supplier_idSpan' + numeroAux).innerHTML = supplier_id;
		if($('tipoSpan' + numeroAux))
			$('tipoSpan' + numeroAux).innerHTML = tipo;
		if($('concepto' + numeroAux))
			$('concepto' + numeroAux).value = concepto;
		if($('supplier_id' + numeroAux))
			$('supplier_id' + numeroAux).value = supplier_id;
		if($('moneda' + numeroAux))
			$('moneda' + numeroAux).value = moneda;
		if($('cuenta' + numeroAux))
			$('cuenta' + numeroAux).value = cuenta;
		if($('tipo' + numeroAux))
			$('tipo' + numeroAux).value = tipo;
		
		if($('precio' + numeroAux))
			$('precio' + numeroAux).value = formatoValido(precio);
		if($('precio_min' + numeroAux))
			$('precio_min' + numeroAux).value = precio_min;
		
		
		if($('monedaSpan'  + numeroAux)){
			if(moneda == CURRENCY_MX){
				tipoMoneda = CURRENCY_MX_AB;
			}else if(moneda == CURRENCY_US){
				tipoMoneda = CURRENCY_US_AB;
			}
		
			$('monedaSpan' + numeroAux).innerHTML = ' ' + tipoMoneda;	
			if($('monedaSpan1-' + numeroAux))
					$('monedaSpan1-' + numeroAux).innerHTML = ' ' + tipoMoneda;
			if($('precio_minSpan' + numeroAux))
				$('precio_minSpan' + numeroAux).innerHTML = formatoValido(precio_min) + ' ' + tipoMoneda;
		}
		
		if($('cuentaSpan' + numeroAux)){
			if(cuenta == ACCOUNT_MX){
				$('cuentaSpan' + numeroAux).innerHTML = ACCOUNT_MX_AB;
			}else if(cuenta == ACCOUNT_US){
				$('cuentaSpan' + numeroAux).innerHTML = ACCOUNT_US_AB;
			}
		}
		calculaInvoiceTotal();
	
	}
	
	function validatePartida(partida, valid, id, concepto, supplier_id, 
							 moneda, cuenta, tipo, precio_min, precio, exPadre, grupo, readOnly){
		$('id' + partida).value = id;
		$('conceptoSpan' + partida).innerHTML = concepto;
		if(readOnly)
			$('id' + partida).readOnly = true;
		if($('supplier_idSpan' + partida))
			$('supplier_idSpan' + partida).innerHTML = supplier_id;
		if($('tipoSpan' + partida))
			$('tipoSpan' + partida).innerHTML = tipo;
		if($('concepto' + partida))
			$('concepto' + partida).value = concepto;
		if($('supplier_id' + partida))
			$('supplier_id' + partida).value = supplier_id;
		if($('moneda' + partida))
			$('moneda' + partida).value = moneda;
		if($('cuenta' + partida))
			$('cuenta' + partida).value = cuenta;
		if($('tipo' + partida))
			$('tipo' + partida).value = tipo;
		if($('impuesto' + partida))
		{
			$('impuesto' + partida).value = '0.00';
		}
		if($('precio' + partida))
		{  $('precio' + partida).value = formatoValido(precio);
		   if(tipo == EXPENSE_TIPO_PAQUETE)
			$('precio' + partida).readOnly = true;
		}
		if($('precio_min' + partida))
			$('precio_min' + partida).value = precio_min;
		

		if($('expensePadre' + partida))
			$('expensePadre' + partida).value = exPadre;
		if($('grupo' + partida))
			$('grupo' + partida).value = grupo;
	
		if($('monedaSpan'  + partida)){
			tipoMoneda = CURRENCY_MX_AB;
			if(moneda == CURRENCY_MX){
				tipoMoneda = CURRENCY_MX_AB;
			}else if(moneda == CURRENCY_US){
				tipoMoneda = CURRENCY_US_AB;
			}
			$('monedaSpan' + partida).innerHTML = ' ' + tipoMoneda;
			
			if($('monedaSpan1-' + partida))
				$('monedaSpan1-' + partida).innerHTML = ' ' + tipoMoneda;
			if($('precio_minSpan' + partida))
				$('precio_minSpan' + partida).innerHTML = formatoValido(precio_min) + ' ' + tipoMoneda;
		}

		if($('cuentaSpan' + partida))
		{
			if(cuenta == ACCOUNT_MX){
				$('cuentaSpan' + partida).innerHTML = ACCOUNT_MX_AB;
			}else if(cuenta == ACCOUNT_US){
				$('cuentaSpan' + partida).innerHTML = ACCOUNT_US_AB;
			}
		}
		
		// Solo para hoja de operacion 
		if ($('expense_id' + partida)) {
			$('expense_id' + partida).value = id;
		}
		
	}
	

	function cambiaSelect(valor, m){
       var mySelect = $('Part' + m + 'subserviceId');
       var someNodeList = mySelect.getElementsByTagName('option');
       var nodes = $A(someNodeList);
       var i= 0;
       nodes.each(function(node){
               mySelect.remove(i);          });
       var h;
       //alert(valor);
       switch(valor)
       {
           case '1':
               var h = $H({ 1: 'IMP', 2: 'EX' });
               break;
           case '2':
               var h = $H({ 3: 'IMP', 4: 'EX', 5: 'NAC' });
               break;
           case '3':
               var h = $H({ 6: 'COM', 7: 'ASE' });
               break;
       }
       h.each(function(pair) {
           var newElem = document.createElement("option");
           newElem.text = pair.value;
           newElem.value = pair.key;
           mySelect.options.add(newElem);
           newElem = null;
           //alert(pair.key + ' = "' + pair.value + '"');
       });
   }
	

	
	function showNextPart(numeroParte)
	{
		if (numeroParte <= 15)
		{
			//alert(numPart);
			//$('parte'+numPart).show();
			Effect.Appear('Parte' + numeroParte);
			//numParte++;
		}
	}
	
	function pintarParte(n)
	{
		nPart = 14;
		for (i=0; i<nPart; i++)
		{
			if( $('Parte' + i) )
			{
				$('Parte' + i).removeClassName('fondoParteActiva');
				$('Parte' + i).addClassName('fondoParteInactiva');	
			}
		}
		$('Parte' + n).removeClassName('fondoParteInactiva');	
		$('Parte' + n).addClassName('fondoParteActiva');
	}
	
	function cambiaTipoCliente()
	{
		tipo0 = $('tipo_0').value;
		tipo1 = $('tipo_1').checked;
		if(tipo1)
		{
			Effect.Appear('clienteId');
			Effect.Appear('clienteRfc');
			Effect.Appear('clienteDireccion');
			Effect.Appear('clienteTelefono');
			Effect.Appear('clienteFax');
			Effect.Appear('cliente-Mail');
		}
		else
		{
			Effect.Fade('clienteId');
			Effect.Fade('clienteRfc');
			Effect.Fade('clienteDireccion');
			Effect.Fade('clienteTelefono');
			Effect.Fade('clienteFax');
			Effect.Fade('cliente-Mail');
		}
	}
	
	
	//////////////////////////////////////// Observarciones /////////////////////////////////////////////////////
	
	
	function addObservacion(){
		var observacionItem = new Object();
		// Utilizamos clase Template de Prototype
		var itemTemplate = new Template(
			'<tr id="observacion#{numeroObservation}" class="tr" >' +
					'<td class="validacion">'+
							'<div id="validObservation#{numeroObservation}"></div>' +
							'<div id="loading#{numeroObservation}" style="display:none">#{loaderImg}</div>' +
					'</td>' + 
					
					
					'<td class="id"><input id="id#{numeroObservation}" name="data[Observation][#{numeroObservation}][observation_id]"/></td>' +
					
					'<td class="nombre"><span id="nombreSpan#{numeroObservation}"></span></td>' +
					'<input type="hidden" id="nombre#{numeroObservation}" name="data[Observation][#{numeroObservation}][nombre]"/>' +
					
					'<td class="tipo"><span id="tipoSpan#{numeroObservation}"></span></td>' +
					'<input type="hidden" id="tipo#{numeroObservation}" name="data[Observation][#{numeroObservation}][tipo]"/>' +					
					
					'<td class="descripcion"><span id="descripcionSpan#{numeroObservation}"></span></td>' +
					'<input type="hidden" id="descripcion#{numeroObservation}" name="data[Observation][#{numeroObservation}][descripcion]"/>' +
																	
					'<td class="acciones">' + deleteCodeObser + 
										'<script>' +
											'Event.observe(\'id#{numeroObservation}\', \'change\', function(event){ ' + 
											'new Ajax.Updater(\'validObservation#{numeroObservation}\',\'#{baseDir}/admin/observations/validate?id=\'+ $(\'id#{numeroObservation}\').value + \'&observacion=\' + #{numeroObservation} , {onLoading:function(request){Element.hide(\'validObservation#{numeroObservation}\'); Element.show(\'loading#{numeroObservation}\')}, onComplete:function(request){Element.hide(\'loading#{numeroObservation}\'); Effect.Appear(\'validObservation#{numeroObservation}\')}, asynchronous:true, evalScripts:true, requestHeaders:[\'X-Update\', \'validObservation#{numeroObservation}\']}) }, false);' +
										'<\/script>' +
						'</td>' +
				'</tr>'
		);
		
		//observacionItem = { numeroObservation: numero}; //, oddOrEven : tipoTr};
		observacionItem = { numeroObservation: numero, baseDir:base, loaderImg:loader};
		b = itemTemplate.evaluate(observacionItem);
		// Insertamos como el �ltimo hijo de tableBody
		new Insertion.Bottom('tableBodyObs',  b); 
		numero++;
		tableDecorator('tableBodyObs');
		//window.alert(focuss);
	}
	
	function removeObservacion(observacion)
	{
		//alert(observacion);
		observacion.remove();
		tableDecorator('tableBodyObs');
	}
	
	// Observa el buscador falso para posteriormente hacer el envio con real form
	
	function callSearchObservationForm()
	{
		//element.submit();
		$('ObservationCriterio').value = $('BuscadorObservationCriterio').value;
		new Ajax.Updater('resultadoBusquedaObs', base + '/admin/observations/buscar?ajax=1', {asynchronous:true, evalScripts:true, onLoading:function(request){Element.hide('resultadoBusquedaObs');Element.show('loadingBusquedaObs')}, onComplete:function(request){Element.hide('loadingBusquedaObs');Effect.Appear('resultadoBusquedaObs')}, parameters:Form.serialize('observationSearch'), requestHeaders:['X-Update', 'resultadoBusquedaObs']});

	}
	
	function addObservacionFromSearch(id, nombre, tipo, descripcion)
	{
		addObservacion();
		numeroAux = numero - 1;
		//alert('id' + numeroAux + '-->' +id) ;
		
		$('id' + numeroAux).value = id;
		$('nombreSpan' + numeroAux).innerHTML = nombre;
		$('tipoSpan' + numeroAux).innerHTML = tipo;
		$('descripcionSpan' + numeroAux).innerHTML = descripcion;
		
		$('nombre' + numeroAux).value = nombre;
		$('tipo' + numeroAux).value = tipo;
		$('descripcion' + numeroAux).value = descripcion;
	}
	
	function validateObservacion(observacion, valid, id, nombre, tipo, descripcion)
	{
		$('id' + observacion).value = id;
		$('nombreSpan' + observacion).innerHTML = nombre;
		$('tipoSpan' + observacion).innerHTML = tipo;
		$('descripcionSpan' + observacion).innerHTML = descripcion;
		
		
		$('nombre' + observacion).value = nombre;
		$('tipo' + observacion).value = tipo;
		$('descripcion' + observacion).value = descripcion;
		//alert(nombre);
	}
	
	//////////////////////////////////////// Observarciones /////////////////////////////////////////////////////
	
	// Observa el buscador falso para posteriormente hacer el envio con real form
	
	function callSearchClientForm()
	{
		//element.submit();
		$('ClientCriterio').value = $('BuscadorClientCriterio').value;
		new Ajax.Updater('resultadoBusquedaC', base + '/admin/clients/buscar?ajax=1', {asynchronous:true, evalScripts:true, onLoading:function(request){Element.hide('resultadoBusquedaC');Element.show('loadingBusquedaC')}, onComplete:function(request){Element.hide('loadingBusquedaC');Effect.Appear('resultadoBusquedaC')}, parameters:Form.serialize('clientSearch'), requestHeaders:['X-Update', 'resultadoBusquedaC']});

	}
	
	
	function addClientDatos(id, rfc, nombre, direccion, telefono, fax, ciudad, estado, pais, cp, email, colonia, tipo, n_conta, p_conta, clientValid)
	{

		if($('ClientId'))
			$('ClientId').value = id;	
		if($('ClientValid'))
			$('ClientValid').value = clientValid;	
		if($('OperationSheetClientId'))
			$('OperationSheetClientId').value = id;
		if($('InvoiceClientId'))
			$('InvoiceClientId').value = id;	
		if($('ClientRfc'))
			$('ClientRfc').value = rfc;
		if($('ClientNombre'))
			$('ClientNombre').value = nombre;
		if($('ClientDireccion'))
			$('ClientDireccion').value = direccion;
		if($('ClientTelefono'))
			$('ClientTelefono').value = telefono;
		if($('ClientFax'))
			$('ClientFax').value = fax;
		if($('ClientColonia'))
			$('ClientColonia').value = ciudad;
		if($('ClientCiudad'))
			$('ClientCiudad').value = ciudad;
		if($('ClientEstado'))
			$('ClientEstado').value = estado;
		if($('ClientPais'))
			$('ClientPais').value = pais;
		if($('ClientCp'))
			$('ClientCp').value = cp;
		if($('ClientEmail'))
			$('ClientEmail').value = email;
		if($('ClientColonia'))
			$('ClientColonia').value = colonia;
		//$('ClientTipo').value = tipo;
		if($('ClientNConta'))
			$('ClientNConta').value = n_conta;
		if($('ClientPConta'))
			$('ClientPConta').value = p_conta;
		if($('CxCClientId'))
			$('CxCClientId').value = id;			

		if($('tipo_1'))
		{
			$('tipo_1').checked = true;
			Effect.Appear('clienteId');
			Effect.Appear('clienteRfc');
			Effect.Appear('clienteDireccion');
			Effect.Appear('clienteTelefono');
			Effect.Appear('clienteFax');
			Effect.Appear('cliente-Mail');
		}
	}
	
	
	function cleanClientDatos()
	{

		if($('ClientId'))
			$('ClientId').value = "";	
		if($('ClientValid'))
			$('ClientValid').value = "";	
		if($('InvoiceClientId'))
			$('InvoiceClientId').value = "";	
		if($('ClientRfc'))
			$('ClientRfc').value = "";
		if($('ClientNombre'))
			$('ClientNombre').value = "";
		if($('ClientDireccion'))
			$('ClientDireccion').value = "";
		if($('ClientTelefono'))
			$('ClientTelefono').value = "";
		if($('ClientFax'))
			$('ClientFax').value = "";
		if($('ClientColonia'))
			$('ClientColonia').value = "";
		if($('ClientCiudad'))
			$('ClientCiudad').value = "";
		if($('ClientEstado'))
			$('ClientEstado').value = "";
		if($('ClientPais'))
			$('ClientPais').value = "";
		if($('ClientCp'))
			$('ClientCp').value = ""
		if($('ClientEmail'))
			$('ClientEmail').value = "";
		if($('ClientColonia'))
			$('ClientColonia').value = "";
		//$('ClientTipo').value = tipo;
		if($('ClientNConta'))
			$('ClientNConta').value = "";
		if($('ClientPConta'))
			$('ClientPConta').value = "";
		if($('CxCClientId'))
			$('CxCClientId').value = "";			

		
	}
	
	
	/** Especifica que la partida en la factura es un gasto que el cliente realizo **/
	function gastoCliente(num)
    {
        if ($('partida' + num)) 
		{
		  if($('cargoCliente' + num)){
		  	// Desactivar de gasto de cliente
			if($F('cargoCliente' + num) == 0)
			{
				$('cargoCliente' + num).value = 1;
				$('imgGastoCliente' + num).src = base + '/img/app/remove-gasto-cliente.gif'; 
				var titleAlt = "Remover Efectuado por Cuenta del Cliente";
				$('imgGastoCliente'+ num).title = titleAlt;
				$('imgGastoCliente'+ num).alt = titleAlt;
			}else{
				$('cargoCliente' + num).value = 0;
				$('imgGastoCliente' + num).src = base + '/img/app/add-gasto-cliente.gif';
				var titleAlt = "Gasto Efectuado por Cuenta del Cliente";
                $('imgGastoCliente'+ num).title = titleAlt;
                $('imgGastoCliente'+ num).alt = titleAlt;
			}
		  }
		}
		
    }