var acaboDeSalir = false; // para frenar el salto alocado cuando llena campos (usada en cambiarFoco())

function cambiarFoco(actual, nombreCampoFoco, longitud){
	if (!acaboDeSalir)
		if (actual.value.length == longitud){
			try{window.document.getElementById(nombreCampoFoco).focus();}catch(e){};
		} 
	acaboDeSalir = false;
}

// maneja el campo asociado a un checkbox que debe tomar valor binario
function clickCheckBox(estado,destino,si,no){
	if (estado){destino.value=si;} 	else {destino.value=no;}
}

function validar(condicion,campo,mensaje){
	if (!condicion){
		if (mensaje>'') alert(mensaje);
		try{campo.focus();}catch(e){};
		try{campo.select();}catch(e){};
		return false;
	}
	return true;
}

function splitCUIT(frm, cuit,prefijoPedazos){ 	// dado un form, un valor de cuit y un prefijo de los pedazos 
												//(PreCUIT, NCUIT y VeriCUIT), asigna
	var prefijo = eval('frm.'+prefijoPedazos+'PreCUIT');
	var numero= eval('frm.'+prefijoPedazos+'NCUIT');
	var digito = eval('frm.'+prefijoPedazos+'VeriCUIT');

	prefijo.value=cuit.substr(0,2); 
	numero.value=cuit.substr(2,8); 
	digito.value=cuit.substr(10,1);
}

function validarCUIT(cuit){
	
	if (cuit<20000000000 || cuit.length!=11){
		alert("debe ingresar un CUIT correcto");
		return false;
	}
	
	var dosDigitos = parseInt(cuit.substr(0,2),10);
	// VERIFICAR LOS DOS PRIMERO DÍGITOS VÁLIDOS
	if (dosDigitos!=20 && dosDigitos!=23 && dosDigitos!=24 && dosDigitos!=27 && dosDigitos!=30 && dosDigitos!=33 && dosDigitos!=34){
		alert("debe ingresar un CUIT correcto\nverifique los dos primeros dígitos\ndeben ser: 20, 23, 27, 30, 33 ó 34");
	  	return false;
	}
	
	// VERIFICAR CON EL DÍGITO VERIFICADOR
	var digitoVerificador = parseInt(cuit.substr(10,1),10); 
	var verificador = 0;
	var TablaMul = new Array(5,4,3,2,7,6,5,4,3,2); //Tabla Arbitraria
	var acum = 0;
	for (i=0; i<10; i++) {
		acum += (parseInt(cuit.substr(i,1),10) * TablaMul[i]);
	}
	var dividendo = Math.floor(acum/11);
	var producto = dividendo * 11;
	var diferencia = acum - producto;
	if (diferencia>0) verificador = 11 - diferencia;
	if (verificador!=digitoVerificador){
		alert("debe ingresar un CUIT correcto\nrevíselo por favor, el dígito verificador no ha sido validado");
	  	return false;
	}
	
	return true;
}

function fill0(campo,size){
	if (campo.value.length<size){
		var ceros = '';
		for (var i=0; i<size; i++) ceros+='0';
		var auxi = ceros + campo.value;
		var nuevoValor = auxi.substr(campo.value.length,size);
		return nuevoValor;
	}
	return campo.value;
}

var xml;
if (window.ActiveXObject) xml = new ActiveXObject("Microsoft.XMLDOM");
if (document.implementation && document.implementation.createDocument) xml = document.implementation.createDocument("","",null);


function abrirCalendario2(obj){
	var fecha;
	obj.disabled=true ;
	fecha = window.showModalDialog('calendariocont.asp?fecha='+obj.value,'','dialogWidth:275px;dialogHeight:200px;center:yes;help:no;status:no');
	obj.value = fecha ; 
	obj.disabled=false;
}

function llenarForm(form, obj, qry){

	try {
		xml.async = false;
		xml.onreadystatechange=verify;
		//document.getElementById('test').innerText = "xmlSelect.asp?qry="+qry;
		xml.load("xmlSelect.asp?qry="+qry);		
		xmlObj = xml.documentElement;		
	} catch(e) {return false}

	if (!xmlObj) return false;
	if (xmlObj.hasChildNodes()) {		
		var nodos = xmlObj.childNodes;
		if (eval(nodos[0].text)) {
			var registro = nodos[1].childNodes;
			for (i=0; i<registro.length; i++) {
				if(eval(form+'.'+registro[i].attributes[0].value)||
				   eval(form+'.'+registro[i].attributes[0].value[0])){	// si existe el campo en el form
					switch (registro[i].attributes[1].value) { // tipo de campo
						case '11': 
							eval(form+'.'+registro[i].attributes[0].value+'[0].checked = ' + registro[i].text);
							eval(form+'.'+registro[i].attributes[0].value+'[1].checked = !' + registro[i].text);
							break;
						default:
							eval(form+'.'+registro[i].attributes[0].value+'.value=\''+registro[i].text+'\'');
					}
				}
			}
			return true;
		} 
	}
	return false;
}

function abrirCalendario(obj){
	var fecha;
	obj.disabled = true;
	fecha=window.showModalDialog('calendario.asp?fecha='+obj.value,'','dialogWidth:275px;dialogHeight:280px;center:yes;help:no;status:no');
	
	if (!isNaN(parseInt(fecha,10))) obj.value = fecha;
	obj.disabled = false;
}
//ADMINISTRADORAS DEL BUSCADOR
function traerData(ingresado, tabla, identificador, criterio, campos, formulario, cantidad, funcion, procesador) {
	if (ingresado=='') return false;
	MM_openBrWindow(
		'_buscador1.asp?autoLoad=si&ingresado='+ingresado
			+'&tabla='+tabla
			+'&identificador='+identificador
			+'&criterio='+criterio
			+'&campos='+campos
			+'&formulario='+formulario
			+'&procesador='+procesador
			+'&cantidad='+cantidad
			+'&funcion='+funcion,
		'popUp','scrollbars=yes,width=600,height=500');
}

function buscador(CUIT,ingresado, tabla, identificador, criterio, campos, formulario) {
	MM_openBrWindow(
		'_buscador1.asp?CUIT='+CUIT
			+'&ingresado='+ingresado
			+'&tabla='+tabla
			+'&identificador='+identificador
			+'&criterio='+criterio
			+'&campos='+campos
			+'&formulario='+formulario,
		'popUp','scrollbars=yes,width=760,height=500');
}
function traerData2(ingresado, tabla, identificador, criterio, campos, formulario, cantidad, funcion, busqueda, procesador) {
	if (ingresado=='') return false;
	MM_openBrWindow(
		'_buscador1.asp?autoLoad=si&ingresado='+ingresado
			+'&tabla='+tabla
			+'&identificador='+identificador
			+'&criterio='+criterio
			+'&campos='+campos
			+'&formulario='+formulario
			+'&procesador='+procesador
			+'&cantidad='+cantidad
			+'&funcion='+funcion
			+'&busqueda='+busqueda,
		'popUp','scrollbars=yes,width=600,height=500');
}

function buscador2(titulo,CUIT,ingresado, tabla, identificador, criterio, campos, formulario, where, evaluar, indice) {
	var URL = '_buscador1.asp?titulo='+escape(titulo)
			+'&CUIT='+CUIT
			+'&ingresado='+ingresado
			+'&tabla='+tabla
			+'&identificador='+identificador
			+'&criterio='+criterio
			+'&campos='+campos
			+'&formulario='+formulario
			+'&where='+where
			+'&evaluar='+escape(evaluar)
			+'&indice='+indice;
	window.document.getElementById('mensajeAuxiliar').innerText = URL;
	MM_openBrWindow(URL,'popUp','scrollbars=yes,width=760,height=500');
}
//////////////
function removeChar( strValue, char ) {
  var objRegExp = new RegExp(char, "g"); //search for char globally
  return strValue.replace(objRegExp,'');
}

function replaceChar( strValue, char, char1 ) {
  var objRegExp = new RegExp(char, "g"); //search for char globally
  return strValue.replace(objRegExp,char1);
}

function validarEMail(strValue) {
	var objRegExp  = /^[a-z0-9]([a-z0-9_\-\.]*)@([a-z0-9_\-\.]*)(\.[a-z]{2,3}(\.[a-z]{2}){0,2})$/i;
	  return objRegExp.test(strValue);
}

function validarPATENTE(strValue) {
	var objRegExp  = /^[A-Z]{3}[0-9]{3}$/i;
	  return objRegExp.test(strValue);
}

function clnInt(x) {
	return parseInt('0'+x, 10);
}
function clnFlt(x) {
	return parseFloat('0'+x);
}
function clnStr(x) {
	x = removeChar(x, '\'');
	var aux = x;
	aux = removeChar(aux, ' '); aux = removeChar(aux,'\r\n'); aux = removeChar(aux,'\n');
	if (aux=='') x='';
	return x;
}

function clnStrAltas(x) {
	x = removeChar(x, '\'');
	x = replaceChar(x,' ','_');
	return x;
}

function xmlCombo( combo, tabla, id, descripcion, idSelected, where ) {
	xml.async = false;
	//alert("xmlCombo.asp?tabla="+tabla+"&id="+id+"&descripcion="+descripcion+"&where="+where);
	//document.getElementById('test').innerText = "xmlCombo.asp?tabla="+tabla+"&id="+id+"&descripcion="+descripcion+"&where="+where ;
	xml.load("xmlCombo.asp?tabla="+tabla+"&id="+id+"&descripcion="+descripcion+"&where="+where);
	xmlObj = xml.documentElement;	

	if (xmlObj.hasChildNodes()) { // atencion!!! los nombres de los campos del form deben ser iguales a los nombres de los campos de la tabla
		var obj = xmlObj.childNodes, nodos;
		nodos = obj.length;
		if((obj[0].text == 'OK') && (parseInt(nodos,10) > 1)){
			var registro = obj[1].childNodes;
			combo.length = registro.length;
			for (var i=0; i<registro.length; i++) { // recorro campos del registro obtenido
				combo.options[i].value = registro[i].attributes[0].value;
				combo.options[i].text = registro[i].attributes[1].value;
				if (registro[i].attributes[0].value == idSelected) combo.selectedIndex = i;
			}
		}
	}
}
function xmlComboPot( combo, tabla, id, descripcion, idSelected, where ) {
	xml.async = false;
	//alert("xmlCombo.asp?tabla="+tabla+"&id="+id+"&descripcion="+descripcion+"&where="+where);
	//document.getElementById('test').innerText = "xmlCombo.asp?tabla="+tabla+"&id="+id+"&descripcion="+descripcion+"&where="+where ;
	xml.load("xmlComboPot.asp?tabla="+tabla+"&id="+id+"&descripcion="+descripcion+"&where="+where);
	xmlObj = xml.documentElement;	

	if (xmlObj.hasChildNodes()) { // atencion!!! los nombres de los campos del form deben ser iguales a los nombres de los campos de la tabla
		var obj = xmlObj.childNodes, nodos;
		nodos = obj.length;
		if((obj[0].text == 'OK') && (parseInt(nodos,10) > 1)){
			var registro = obj[1].childNodes;
			combo.length = registro.length;
			for (var i=0; i<registro.length; i++) { // recorro campos del registro obtenido
				combo.options[i].value = registro[i].attributes[0].value;
				combo.options[i].text = registro[i].attributes[1].value;
				if (registro[i].attributes[0].value == idSelected) combo.selectedIndex = i;
			}
		}
	}
}

function traerDatos( keyField, tipo ) { // Usar xmlQry.asp
	var where = keyField.name+'='+tipo+keyField.value+tipo;
	
	xml.async = false;
	xml.load("xmlQry.asp?acc=select&where="+where+'&tabla='+tabla+'&campos='+autoFill);
	xmlObj = xml.documentElement;	
	//
	if (xmlObj.hasChildNodes()) { // atencion!!! los nombres de los campos del form deben ser iguales a los nombres de los campos de la tabla
		var obj = xmlObj.childNodes, nodos;
		nodos = obj.length;
		if((obj[0].text == 'OK') && (parseInt(nodos,10) > 1)){
			var registro = obj[1].childNodes;
			for (var i=0; i<registro.length; i++) { // recorro campos del registro obtenido
				var atributos = registro[i].attributes;
				for (var j=0; j<atributos.length; j++){ // recorro los atributos del nodo
					if(atributos[j].name=='CAMPO') { // si es un campo
						if (eval('modi.'+atributos[j].value)) { // si el campo está en el form
							eval('modi.'+atributos[j].value+'.value = \''+registro[i].text+'\''); // asigno datos
						}
						if (eval('modi.'+atributos[j].value+'Hidden')) { // si tiene un campo Hidden asociado en el form
							eval('modi.'+atributos[j].value+'Hidden.value = \''+registro[i].text+'\''); // asigno datos
						}
					}
				}
			}
		} else {
			modi.reset();
		}
	}
}

function llenarTabla( campos ) { // Usar xmlQry.asp. Recibe arreglo con nombres de los campos en orden

	xml.async = false;
	xml.load("xmlQry.asp?acc=select&where=true");
	xmlObj = xml.documentElement;	
	//
	if (xmlObj.hasChildNodes()) { // atencion!!! los nombres de los campos del form deben ser iguales a los nombres de los campos de la tabla
		var obj = xmlObj.childNodes, nodos;
		nodos = obj.length;
		if((obj[0].text == 'OK') && (parseInt(nodos,10) > 1)){
			var registro = obj[1].childNodes;
			for (var i=0; i<registro.length; i++) { // recorro campos del registro obtenido
				var atributos = registro[i].attributes;
				for (var j=0; j<atributos.length; j++){ // recorro los atributos del nodo
					if(atributos[j].name=='CAMPO') { // si es un campo
						if (eval('modi.'+atributos[j].value)) { // si el campo está en el form
							eval('modi.'+atributos[j].value+'.value = \''+registro[i].text+'\''); // asigno datos
						}
					}
				}
			}
		} else {
			alert("tabla vacia");
		}
	}
}

function noExiste(obj, tipo) {
	if (obj.value=='') return true;
	var qry = "SELECT "+obj.name+" FROM "+tabla+" WHERE "+obj.name+"="+tipo+obj.value+tipo;
	if (existeRegistro(qry)) {
		return true;
	} else {
		alert('No existe un registro que tenga el valor '+obj.value+' en el campo '+obj.name);
		obj.focus();
		return false;
	}
}

function existe(obj, tipo) {
	if (obj.value=='') return true;
	
	var qry = "SELECT "+obj.name+" FROM "+tabla+" WHERE "+obj.name+"="+tipo+obj.value+tipo;
	if (!existeRegistro(qry)) {
		return true;
	} else {
		alert('El valor \''+obj.value+'\' para el campo \''+obj.name+'\' ya está siendo usado en otro registro.\nIngrese otro valor por favor.');
		obj.focus();
		return false;
	}
}

function existe2(obj, objHidden, tipo) {
	if (obj.value == '') return true;
	if (obj.value == objHidden.value) return true; // no cambió el valor, sale sin validar
	
	var qry = "SELECT "+obj.name+" FROM "+tabla+" WHERE "+obj.name+"="+tipo+obj.value+tipo;
	if (!existeRegistro(qry)) {
		return true;
	} else {
		alert('El valor \''+obj.value+'\' para el campo \''+obj.name+'\' ya está siendo usado en otro registro.\nIngrese otro valor por favor.');
		obj.focus() ;
		return false ;
	}
}

function existeRegistro(qry) { // Usa xmlExiste.asp
	try {
		xml.async = false;
		xml.onreadystatechange=verify;
		xml.load("xmlExiste.asp?qry="+qry);
		xmlObj = xml.documentElement;
	} catch(e) {
		return false;
	}
	
	if (xmlObj.hasChildNodes()) {
		var obj = xmlObj.childNodes;
		return eval(obj(0).text);
	}
	return false;
}

function copiarRow( obj ) { // la tabla de resultados de la búsqueda debe llamarse resultadoBusqueda
	var row = obj.cloneNode(true);
	row.style.display = 'block';
	document.getElementById("resultadoBusqueda").tBodies[0].appendChild(row);
	return true;
}

function limpiarResultadosBusqueda(){ // usar los objetos contenedorResultados, noEncontre, resultadoBusqueda del ABM
	var row;
	contenedorResultados.style.display = 'none';
	noEncontre.style.display = 'none';
	
	for (var i=resultadoBusqueda.tBodies[0].rows.length-1; i>-1; i--) {
		row = resultadoBusqueda.tBodies[0].children(i);
		resultadoBusqueda.tBodies[0].removeChild(row);
	}
	return true;
}

// agrega una celda de texto dada una fila, columna, contenido, alineacion y visibilidad
function addTextCell(row, col, contenido, align, display) { 
	var cell = row.insertCell(col);
	var cont = document.createTextNode(contenido);
	cell.setAttribute('align', align);
	cell.style.setAttribute('display', display);
	cell.appendChild(cont);
}
// Agrega Inputs a la tabla
function addInputCell(row, col, nomfld, size, tipo, valor, display) { // agrega una celda dada una fila, su contenido y su alineacion
	var cell = row.insertCell(col);
	cell.setAttribute('align', 'left');
	var cont = document.createElement('input');
	cont.setAttribute('name', nomfld);
	cont.setAttribute('type', tipo);
	cont.setAttribute('className','dataProd');
	cont.setAttribute('size',size);
	cont.setAttribute('value',valor);
	cell.style.setAttribute('display', display);
	//cell.appendChild(cont);
	cell.innerHTML = valor ;
}

// agrega una celda de icono dada una fila, columna, id del icono, imagen, onclick y help al pasar por arriba
function addIconCell(row, col, id, imagen, funcion, title) {

	var cell = row.insertCell(col);			
	var cont = document.createElement('img');
	cont.setAttribute('src', imagen);
	cont.setAttribute('id', id);
	cont.setAttribute('title', title);
	cont.setAttribute('className', 'iconos');			
	cont.attachEvent('onclick', function() { eval(funcion) });			
	cell.appendChild(cont);	
}

function agregarFila(tabResu, nuevaFila) {

	var tabRow = tabResu.insertRow();
	tabRow.attachEvent('onmouseout', function() { mouseOutPR('linea'+nuevaFila[0]) });			
	tabRow.attachEvent('onmouseover', function() { mouseOverPR(tabRow) });			
	tabRow.setAttribute('className', 'texto');
	tabRow.setAttribute('id', 'linea'+nuevaFila[0]);
	var col = nuevaFila.length, j=0;
	for (var i=0; i<col; i+=3)
		//addTextCell(row, col, contenido, align, display)
		//addTextCell(tabRow, j++, nuevaFila[i], nuevaFila[i+1], nuevaFila[i+2]);
		
		//addInputCell(row, col, nomfld, size, tipo, valor, display)
		addInputCell(tabRow, j++, nuevaFila[i],25,'', nuevaFila[i], nuevaFila[i+2]);
	//
	addIconCell(tabRow, j++, 'modi'+nuevaFila[0], 'imgs/edit2.gif', 'editar(\'linea'+nuevaFila[0]+'\')', 'editar');
	if (tieneInhibir) addIconCell(tabRow, j++, 'inhi'+nuevaFila[0], 'imgs/inhibir.gif', 'removeFila', 'inhibir');
	if (tieneBaja) addIconCell(tabRow, j++, 'del'+nuevaFila[0], 'imgs/del.gif', 'removeFila()', 'borrar');
}

// Funcion que borra fila
function removeFila(obj, campoClave){	
	if (confirm('Está seguro que desea borrar definitivamente este registro?')) {
		var auxi = '';
		if (eval(obj+'[0]')) auxi='[0]';

		var paramArray = new Array(campoClave, eval(obj+auxi+'.cells[0].innerText'), 'key', campoClave);
		var row = eval(obj+auxi);
		results.tBodies[0].removeChild(row);
		divTableResults(results.tBodies[0].rows.length)
		
		// eliminar de la base
		dbXML('del', paramArray);
	}
}

function swapIconosInhibir( idRef ) {
	var auxi, arreglo = false;
	if (eval('inhi'+idRef+'[0]')) arreglo = true;
	
	var eInhi = eval('inhi'+idRef);
	var eDesinhi = eval('desinhi'+idRef);

	if (arreglo) {
		for (var i=0; i<eInhi.length; i++) {	// hacer swap
			auxi = eInhi[i].style.display;
			eInhi[i].style.display = eDesinhi[i].style.display;
			eDesinhi[i].style.display = auxi;
		}
	} else {
		auxi = eInhi.style.display;
		eInhi.style.display = eDesinhi.style.display;
		eDesinhi.style.display = auxi;
	}
}

function verify() {
	// 0 Object is not initialized
	// 1 Loading object is loading data
	// 2 Loaded object has loaded data
	// 3 Data from object can be worked with
	// 4 Object completely initialized
	if (xml.readyState != 4)
	{
		return false;
	}
}
function arreglarNombre(nombre){
	var x = nombre.toString();
	if (x.length > 0) {
		x = x.substr(0,1).toUpperCase() + x.substr(1).toLowerCase();
		if (x.indexOf(' ', 0) != -1){
			var s = x.indexOf(' ',0)+1;
			x = x.substr(0,s) + arreglarNombre(x.substr(s));
		}
	}
	return x;
}
// ante un campo INPUT tipo TEXT con un checkbox asociado lo habilita o lo inhabilita limpiandolo al clikear
function habilitar(campo){
	var auxCampo = campo;

	if (eval('form1.'+auxCampo+'.disabled == true ')){
		eval('form1.'+auxCampo+'.disabled = false ;')
	}else{
		eval('form1.'+auxCampo+'.value = "" ;')
		eval('form1.'+auxCampo+'.disabled = true ;')
	}
	return true;
}

