
function disableRightClick(e)
{
	if (!document.rightClickDisabled)
	{
		document.oncontextmenu = disableRightClick;
		return document.rightClickDisabled = true;
	}

	return false;
}

// Funcion que Levanta una Ventana PopUp
// parENombVent : nombre de la ventana
// parEDireUrl : dirección url de la pagina que se quiere abrir
// parEScrollBars : (S/N) indicador para habilitar o no los scrollbars
// parEResizable: (S/N) indicador para habilitar o no el poder cambiar de tamaño la ventana
// parEWidth : ancho de la ventanta
// parEHeight : alto de la ventana
// parELeft : (opcional -> '') posicion derecha de la ventana (centro horizontal automático si no se suministra)
// parETop : (opcional -> '') posicion superior de la ventana (centro vertical automático si no se suministra)
function funLevantaPopUp (parENombVent, parEDireUrl, parEScrollBars, parEResizable, parEWidth, parEHeight, parELeft, parETop)
{
	// Declaracion de Variables
	var varFlyout;

	// Setea el ancho máximo de la ventana y la centro si no se paso un valor 
	// de parametro o si el valor es mayor al máximo permitido
	if ((parEWidth>=screen.width-12)||(parEWidth==""))
	{
		parEWidth = screen.width - 12;
		parELeft = 0;
	}

	// Setea el alto máximo de la ventana y la centro si no se paso un valor
	// de parametro o si el valor es mayor al máximo permitido
	if ((parEHeight>=screen.height-58)||(parEHeight==""))
	{
		parEHeight = screen.height - 58;
		parETop = 0;
	}

	// Centra la ventana a lo ancho si no se paso un valor de parametro
	if ((parELeft=="")&&(parELeft!="0"))
	{
		parELeft = (screen.width - 12 - parEWidth) / 2;
	}

	// Centra la ventana a lo alto si no se paso un valor de parametro
	if ((parETop=="")&&(parETop!="0"))
	{
		parETop = (screen.height - 58 - parEHeight) / 2;
	}

	// Crea la nueva ventana
	varFlyout = window.open(parEDireUrl,parENombVent,"resizable=" + parEResizable + ",scrollbars=" + parEScrollBars + ",width=" + parEWidth + ",height=" + parEHeight + ",top=" + parETop + ",left=" + parELeft)

	// Devuelve el Objeto de la ventana creada
	return varFlyout;
}

// Funcion que muestra el mensaje en la barra de estado
function funEscribeBarraEstado(parEMensaje)
{
	window.status = parEMensaje;
}

// Funcion que deshabilita el Click Derecho del Mouse
function funDeshabilitaClickDerecho ()
{
	if (event.button == 2)
	{
		alert ("¡¡ Botón Derecho del Mouse Deshabilitado !!")
	}
}

// Funcion que cambia el color del background de un botton
function funCambiaColorComando (parEComando, parEColoBack, parEColoText)
{
	// Solo realiza el efecto si el combado esta habilitado
	if (parEComando.disabled == false)
	{
		if (parEColoBack != "")
		{
			parEComando.style.backgroundColor = parEColoBack;
		}
		if (parEColoText != "")
		{
			parEComando.style.color = parEColoText;
		}		
	}	
}

// Funcion que valida si un e-mail esta bien ingresado
function funValidaMail (parEMail)
{
	varPasa=0;
	varCuenta=0;

	// Verifica que exista la cadena del e-mail
	if (parEMail.value.length==0) return false;

	// Verifica el que exista el (@)
	for (varI=0;varI<parEMail.value.length;varI++)
	{
		EsteCaracter=parEMail.value.substring(varI,varI+1);
		if (EsteCaracter == "@")
		{
			varCuenta++;
			varPosi=varI;
		}
	}

	// Verifica que exista solo 1 (@)
	if (varCuenta == 1)
		varPasa=1;
	else
		varPasa=0;

	// Verifica que haya por lo menos un (.) despues del (@)
	if (varPasa==1)
	{
		varPasa = 0;
		for (varI=varPosi+1;varI<parEMail.value.length-1;varI++)
		{
			EsteCaracter=parEMail.value.substring(varI,varI+1);
			if (EsteCaracter == ".") varPasa=1;
		}
	}

	// Devuelve el exito o fracaso de la validacion
	if (varPasa == 1)
		return true;
	else
		return false;
}

// Funcion que valida que el control tenga ingresado un valor
function funValidaTextoControl(parEControl,parENombCont)
{
	// valida si tiene ingresado algo
	if (parEControl.value.length==0)
	{
		alert ('El campo ' + parENombCont + ' se encuentra vacío.');
		parEControl.focus();
		return false;
	}

	// devuelve exito
	return true;
}

// Funcion que valida que el control tenga ingresado un valor
function funValidaValorControl (parEControl,parEValoMini,parEValoMaxi,parENombCont)
{
	// valida si tiene ingresado algo
	if (parEControl.value.length==0)
	{
		alert ('El campo ' + parENombCont + ' se encuentra vacío.');
		parEControl.focus();
		return false;
	}

	// valida si tiene un valor menor al minimo
	if (parEValoMini != null)
	{
		if (parseFloat(parEControl.value) < parseFloat(parEValoMini))
		{
			alert ('El campo ' + parENombCont + ' debe ser mayor a ' + parEValoMini);
			parEControl.focus();
			return false;
		}
	}

	// valida si tiene un valor mayor al maximo
	if (parEValoMaxi != null)
	{
		if (parseFloat(parEControl.value) > parseFloat(parEValoMaxi))
		{
			alert ('El campo ' + parENombCont + ' debe ser menor a ' + parEValoMaxi);
			parEControl.focus();
			return false;
		}
	}

	// devuelve exito
	return true;
}

// Funcion que valida el ingreso de decimales y punto decimal al digitar una tecla
function funValidaValorNumericoDigito(parECajaNume,parENumeDeci)
{
	// declaracion de variables
	var varPosi, varLen, varNumeDeciActu;

	// Valido si puede ingresar el punto decimal
	if (parENumeDeci == '0') 
	{
		// solo numeros
		if (((event.keyCode<48)||(event.keyCode>57))&&(event.keyCode!=45)) event.returnValue = false;
		// valido si ya existe un signo menos
		varPosi = parECajaNume.value.indexOf('-')
		if ((varPosi != -1)&&(event.keyCode == 45)) event.returnValue = false;
	} 
	else 
	{
		// solo numeros y punto
		if (((event.keyCode<48)||(event.keyCode>57))&&(event.keyCode!=46)&&(event.keyCode!=45)) event.returnValue = false;
		// valido si ya existe un punto decimal
		varPosi = parECajaNume.value.indexOf('.')
		if ((varPosi != -1)&&(event.keyCode == 46)) event.returnValue = false;
		// valido si ya existe un signo menos
		varPosi = parECajaNume.value.indexOf('-')
		if ((varPosi != -1)&&(event.keyCode == 45)) event.returnValue = false;
	}
}

// Funcion que valida al salirse del control que no se haya pasado de un rango y lo truca si asi es
function funValidaRangoDigito(parECajaValo,parEValoMini,parEValoMaxi)
{
	// declaracion de variables
	var varLenActu;

	// valida el valor minimo
	if ((parECajaValo.value.length!=0)&&(parEValoMini.length!=0))
	{
		varValo = parseFloat(parECajaValo.value);
		varMini = parseFloat(parEValoMini);
		if (varValo < varMini) parECajaValo.value = parEValoMini;
	}

	// valida el valor maximo
	if ((parECajaValo.value.length!=0)&&(parEValoMaxi.length!=0))
	{
		varValo = parseFloat(parECajaValo.value);
		varMaxi = parseFloat(parEValoMaxi);
		if (varValo > varMaxi) parECajaValo.value = parEValoMaxi;
	}
}

// Funcion que valida que no se pase del maximo de decimales al cambiar las condiciones de maximo de decimales
function funValidaValorNumericoTotal(parECajaNume,parENumeDeci)
{
	// declaracion de variables
	var varPosi, varLen, varNumeDeciActu;

	// valido los decimales
	varPosi = parECajaNume.value.indexOf('.')
	if (varPosi != -1)
	{
		varLen = parECajaNume.value.length
		varNumeDeciActu = varLen - varPosi - 1;
		if (varNumeDeciActu > parseFloat(parENumeDeci))
		{
			varPartEnte = parECajaNume.value.substring(0,varPosi);
			if (parENumeDeci != '0')
			{
				varPartDeci = parECajaNume.value.substring(varPosi+1,varPosi+1+parseFloat(parENumeDeci));
				parECajaNume.value = varPartEnte + '.' + varPartDeci;
			}
			else
			{
				parECajaNume.value = varPartEnte;
			}
		}
	}
}

// Funcio que llena datos en un combo sin filtrar
function funLlenaCombo(parECombo,arrEListCodi,arrEListText,parECodiSele,parEOpciInic,parECodiOpciInic,parETextOpciInic)
{
	varLen = arrEListCodi.length;
	parECombo.length = 0;
	varPosiSele = -1;

	// verifica si tiene que añadir una opcion al inicio
	if (parEOpciInic=="S")
	{
		parECombo.length = parECombo.length + 1;
		parECombo.options[0].value = parECodiOpciInic;
		parECombo.options[0].text = parETextOpciInic;
	}

	// llena todos los elementos de la lista
	varLenActu = parECombo.length;
	for (varI=0;varI<varLen;varI++)
	{
		parECombo.length = parECombo.length + 1;
		parECombo.options[varLenActu + varI].value = arrEListCodi[varI];
		parECombo.options[varLenActu + varI].text = arrEListText[varI];
		if (parECodiSele==arrEListCodi[varI])
		{
			varPosiSele = parECombo.length-1;
		}
	}

	// ubica el elemento de la lista por defecto
	if (varPosiSele!=-1) parECombo.options.selectedIndex=varPosiSele;
}

// Funcio que concatena datos en un combo sin filtrar
function funConcatenaCombo(parECombo,arrEListCodi,arrEListText,parECodiSele)
{
	varLenActu = parECombo.length;
	varLenNuev = arrEListCodi.length;
	varPosiSele = -1;

	// concatena todos los elementos de la lista
	for (varI=0;varI<varLenNuev;varI++)
	{		
		parECombo.length = parECombo.length + 1;
		parECombo.options[varLenActu + varI].value = arrEListCodi[varI];
		parECombo.options[varLenActu + varI].text = arrEListText[varI];
		if (parECodiSele==arrEListCodi[varI])
		{
			varPosiSele = parECombo.length-1;
		}
	}

	// ubica el elemento de la lista por defecto
	if (varPosiSele!=-1) parECombo.options.selectedIndex=varPosiSele;
}

// Funcion que llena un combo Multiple sin filtrar ningun dato
function funLlenaComboMultiple(parECombo,arrEListCodi,arrEListText,parECodiSele,parEOpciInic,parECodiOpciInic,parETextOpciInic)
{

	varLen = arrEListCodi.length;
	parECombo.length = 0;
	varPosiSele = -1;

	// verifica si tiene que añadir una opcion al inicio
	if (parEOpciInic=="S")
	{
		parECombo.length = parECombo.length + 1;			
		parECombo.options[parECombo.length-1].value = parECodiOpciInic;
		parECombo.options[parECombo.length-1].text = parETextOpciInic;
	}

	// llena todos los elementos de la lista
	for (varI=0;varI<varLen;varI++)
	{
		parECombo.length = parECombo.length + 1;			
		parECombo.options[parECombo.length-1].value = arrEListCodi[varI];
		parECombo.options[parECombo.length-1].text = arrEListText[varI];
		if (parECodiSele!="")
		{
			varAux = "," + arrEListCodi[varI] + ",";
			if (parECodiSele.match(varAux)==varAux)
				parECombo.options[parECombo.length-1].selected = true;
		}
	}

}

// Funcion que llena un combo con datos filtrados por una Clave (parEFilt)
function funLlenaComboFiltrado (parECombo,arrEListFilt,arrEListCodi,arrEListText,parEFilt,parECodiSele,parEOpciInic,parECodiOpciInic,parETextOpciInic)
{
	varLen = arrEListCodi.length;
	parECombo.length = 0;
	varPosiSele = -1;

	// verifica si tiene que añadir una opcion al inicio
	if (parEOpciInic=="S")
	{
		parECombo.length = parECombo.length + 1;			
		parECombo.options[parECombo.length-1].value = parECodiOpciInic;
		parECombo.options[parECombo.length-1].text = parETextOpciInic;
	}

	// llena todos los elementos de la lista
	for (varI=0;varI<varLen;varI++)
	{
		if (arrEListFilt[varI]==parEFilt)
		{
			parECombo.length = parECombo.length + 1;			
			parECombo.options[parECombo.length-1].value = arrEListCodi[varI];
			parECombo.options[parECombo.length-1].text = arrEListText[varI];
			if ((parECodiSele!="")&&(parECodiSele==arrEListCodi[varI]))
			{
				varPosiSele = parECombo.length-1;
			}
		}
	}

	// ubica el elemento de la lista por defecto
	if (varPosiSele!=-1) parECombo.options.selectedIndex = varPosiSele;
}

// Funcion que concatena un combo con datos filtrados por una Clave (parEFilt)
function funConcatenaComboFiltrado(parECombo,arrEListFilt,arrEListCodi,arrEListText,parEFilt,parECodiSele)
{
	var varI = 0;
	var varLen = arrEListCodi.length;
	var varPosiSele = -1;

	// llena todos los elementos de la lista
	for (varI=0;varI<varLen;varI++)
	{
		if (arrEListFilt[varI]==parEFilt)
		{
			parECombo.length = parECombo.length + 1;			
			parECombo.options[parECombo.length-1].value = arrEListCodi[varI];
			parECombo.options[parECombo.length-1].text = arrEListText[varI];
			if ((parECodiSele!="")&&(parECodiSele==arrEListCodi[varI]))
			{
				varPosiSele = parECombo.length-1;
			}
		}
	}

	// ubica el elemento de la lista por defecto
	if (varPosiSele!=-1) parECombo.options.selectedIndex=varPosiSele;
}

// Funcion que llena un combo Multiple con datos filtrados por una Clave (parEFilt)
function funLlenaComboFiltradoMultiple(parECombo,arrEListFilt,arrEListCodi,arrEListText,parEFilt,parECodiSele,parEOpciInic,parECodiOpciInic,parETextOpciInic)
{
	varLen = arrEListCodi.length;
	parECombo.length = 0;
	varPosiSele = -1;
	varCodiSele = "," + parECodiSele + ",";

	// verifica si tiene que añadir una opcion al inicio
	if (parEOpciInic=="S")
	{
		parECombo.length = parECombo.length + 1;			
		parECombo.options[parECombo.length-1].value = parECodiOpciInic;
		parECombo.options[parECombo.length-1].text = parETextOpciInic;
	}

	// llena todos los elementos de la lista
	for (varI=0;varI<varLen;varI++)
	{
		if (arrEListFilt[varI]==parEFilt)
		{
			parECombo.length = parECombo.length + 1;			
			parECombo.options[parECombo.length-1].value = arrEListCodi[varI];
			parECombo.options[parECombo.length-1].text = arrEListText[varI];
			if (parECodiSele!="")
			{
				varAux = "," + arrEListCodi[varI] + ",";
				if (varCodiSele.indexOf(varAux)>=0)
					parECombo.options[parECombo.length-1].selected = true;
			}
		}
	}

}

// Funcion que elimina un elemento de un combo
function funEliminaItemCombo (parECombo,parEPosiItem)
{
	// Declaracion de variables
	var varI, varLen;

	// Inicializa las variables
	varLen = parECombo.length;

	// Elimino la actividad del combo	
	for (varI=parEPosiItem;varI<varLen-1;varI++)
	{
		parECombo.options[varI].value = parECombo.options[varI+1].value;
		parECombo.options[varI].text = parECombo.options[varI+1].text;
	}
	parECombo.length = parECombo.length - 1;
}

// Funcion que cuenta el numero de caracteres ingresado en un textarea
function funCuentaCaracteres(parENumeMaxi,parETextArea,parETextMaxi)
{
	// Variables
	varLargo = parENumeMaxi;
	varLargTextArea = parETextArea.value.length;
	varValoTextArea = parETextArea.value;

	// Actualizo el texto de ayuda
	if (parETextMaxi != null) parETextMaxi.value = varLargo - varLargTextArea;

	// Verifico si debo bloquear el campo
	if (varLargTextArea >= varLargo)
	{
		parETextArea.value = varValoTextArea.substring(0,varLargo)
		if (parETextMaxi != null) parETextMaxi.value = 0;
	}
}

// Funcion que redondea un numero
function funRedondeaNumero(parENume,parENumeDeci,parECaraDeci)
{
	if (parENumeDeci > 0) 
	{
		if ((parENume.toString().length - parENume.toString().lastIndexOf(parECaraDeci)) > (parENumeDeci + 1))
		{
			var Rounder = Math.pow(10, parENumeDeci);
			parENume = Math.round(parENume * Rounder) / Rounder;

			varCero = "";
			varDeci = parENume.toString().length - parENume.toString().lastIndexOf(parECaraDeci) - 1;

			if (parENume.toString().lastIndexOf(parECaraDeci)>0)
			{
				for (varI=varDeci;varI<parENumeDeci;varI++)
				{
					varCero = varCero + "0";
				}
				parENume = parENume + varCero;
			}
			else 
			{
				for (varI=0;varI<parENumeDeci;varI++)
				{
					varCero = varCero + "0";
				}
				parENume = parENume + "." + varCero;
			}

			return parENume;
		}
		else
		{
			varCero = "";
			varDeci = parENume.toString().length - parENume.toString().lastIndexOf(parECaraDeci) - 1;

			if (parENume.toString().lastIndexOf(parECaraDeci)>0)
			{
				for (varI=varDeci;varI<parENumeDeci;varI++)
				{
					varCero = varCero + "0";
				}
				parENume = parENume + varCero;
			}
			else 
			{
				for (varI=0;varI<parENumeDeci;varI++)
				{
					varCero = varCero + "0";
				}
				parENume = parENume + "." + varCero;
			}

			return parENume;
		}
	}
	else return Math.round(parENume);
}


// Funcion que acumula los valores seleccionados de un checkbox en un textbox de ayuda
function funAcumulaValoresCheckbox(parEControl)
{
	// Variables
	var varNombre, varNumeElem, varForm, varI;

	// Obtengo los valores necesarios
	varForm = document.forms[0];
	varNombre = parEControl.name;
	varNumeElem = varForm.elements['txtNumeElem'+varNombre].value;

	// Encero el valor del texto de acumulación
	varForm.elements['txtValoElem'+varNombre].value = "";

	// Recorro los controles similares para acumular los valores
	for (varI=0;varI<varNumeElem;varI++)
	{
		if (varForm.elements[varNombre][varI].checked)
			varForm.elements['txtValoElem'+varNombre].value = varForm.elements['txtValoElem'+varNombre].value + varForm.elements[varNombre][varI].value + ',';
	}
}

// Funcion que acumula los valores seleccionados de un combo múltiple en un textbox de ayuda
function funAcumulaValoresCombo(parEControl)
{
	// Variables
	var varNombre, varNumeElem, varForm, varI;

	// Obtengo los valores necesarios
	varForm = document.forms[0];
	varNombre = parEControl.name;
	varNumeElem = parEControl.length;
	// Encero el valor del texto de acumulación
	varForm.elements['txtValoElem'+varNombre].value = "";
	// Recorro los controles similares para acumular los valores
	for (varI=0;varI<varNumeElem;varI++)
	{
		if (varForm.elements[varNombre][varI].selected)
			varForm.elements['txtValoElem'+varNombre].value = varForm.elements['txtValoElem'+varNombre].value + varForm.elements[varNombre][varI].value + ',';
	}
}
