/**
Estas funciones est?n probadas en browsers Netscape 4.x y Explorer 4.x.
*/
function adicionarItemToList(pLista, pIndex, pValue, pText){
	var optionName;
	optionName = new Option(pText, pValue);
	pLista.options[pIndex]=optionName;
}

function eliminarItemsDeLista(pLista){
	var i;
	var numItems;
	numItems=pLista.options.length;
	for(i=0;i<numItems;i++){
		pLista.options[i]=null;
		i--;
		numItems=pLista.options.length;	
	}
}

function eliminarItemsDeListaExceptoThisOnes(pLista,pArray){

	var i;
	var numItems;
	numItems=pLista.options.length;
	for(i=0;i<numItems;i++){
		if(!isItemInArray(pArray,pLista.options[i].value)){
			pLista.options[i]=null;
			i--;
			numItems=pLista.options.length;	
		}
	}

}

function eliminarItemsDeListaReversando(pLista){
	var numItems;
	numItems=pLista.options.length;
	while(numItems>=0){
		pLista.options[numItems]=null;
		numItems--;	
	}
}

function buscarItem(pLista,pItem){
	var i;
	var numItems;
	numItems=pLista.options.length;
	if(pItem != ""){
		for(i=0;i<numItems;i++){
			if(pLista.options[i].value==pItem){
				return true;
			}
		}
	}
	return false;
}

function eliminarItemsDeListaExcepto(pLista,pItem){
	var i;
	var numItems;
	numItems=pLista.options.length;
	for(i=0;i<numItems;i++){
		if(i != pItem){
			pLista.options[i]=null;
			i--;
			numItems=pLista.options.length;	
		}
	}
}
function eliminarItemDeLista(pLista,pItem){
	var i;
	var numItems;
	numItems=pLista.options.length;
	for(i=0;i<numItems;i++){
		if(pLista.options[i].value==pItem){
			pLista.options[i]=null;
			i--;
			numItems=pLista.options.length;
		}
	}

}
function seleccionarItemsDistintos(pLista){
	var i;
	var j;
	var valoresLista=new Array();
	var nombresLista=new Array();
	var optionName;
	i=0;
	while(pLista.options.length>0){
		valoresLista[i]=pLista.options[0].value;
		nombresLista[i]=pLista.options[0].text;
		eliminarItemDeLista(pLista,valoresLista[i]);
		i++;
	}
	for(j=0;j<i;j++){
		optionName = new Option(nombresLista[j],valoresLista[j]);
		pLista.options[j]=optionName;

	}

}

function seleccionarAllItemsOfList(pLista){
	var i;
	var numItems;
	numItems=pLista.length;
	if(numItems > 0){
		for(i=0;i<numItems;i++){
			pLista.options[i].selected=true;
		}
	}
}

function seleccionarItem(pLista,pItem){
	var i;
	var numItems;
	numItems=pLista.options.length;
	if(pItem != ""){
		for(i=0;i<numItems;i++){
			if(pLista.options[i].value==pItem){
				pLista.options[i].selected=true;
			}
		}
	}
}


function changeItemsBetweenLists(pListaSource, pListaTarget){
	var contOrigen = 0;
	var longitudOrigen = pListaSource.options.length;
	var longitudDestino = pListaTarget.options.length;
	var texto = "";
	var valor = "";
	while (contOrigen < longitudOrigen)	{
		if(pListaSource.options[contOrigen].selected)	{
			// Adiciona el valor
			texto = pListaSource.options[contOrigen].text;
			valor = pListaSource.options[contOrigen].value;
			nuevaOpcion = new Option(texto, valor);
			pListaTarget.options[longitudDestino] = nuevaOpcion;
			for (cont = contOrigen; cont < (longitudOrigen - 1); cont++) {
				pListaSource.options[cont].text = pListaSource.options[cont+1].text;
				pListaSource.options[cont].value = pListaSource.options[cont+1].value;
				pListaSource.options[cont].selected = pListaSource.options[cont+1].selected;
			}
			pListaSource.options[cont] = null;
			contOrigen--;
		}
		longitudDestino = pListaTarget.options.length;
		longitudOrigen = pListaSource.options.length;
		contOrigen++;
	}
}

function changeItemsBetweenListsExceptThisOnes(pListaSource, pListaTarget, arrExceptions){
	var contOrigen = 0;
	var longitudOrigen = pListaSource.options.length;
	var longitudDestino = pListaTarget.options.length;
	var texto = "";
	var valor = "";
	while (contOrigen < longitudOrigen)	{
		if(pListaSource.options[contOrigen].selected && !isItemInArray(arrExceptions,pListaSource.options[contOrigen].value))	{
			// Adiciona el valor
			texto = pListaSource.options[contOrigen].text;
			valor = pListaSource.options[contOrigen].value;
			nuevaOpcion = new Option(texto, valor);
			pListaTarget.options[longitudDestino] = nuevaOpcion;
			for (cont = contOrigen; cont < (longitudOrigen - 1); cont++) {
				pListaSource.options[cont].text = pListaSource.options[cont+1].text;
				pListaSource.options[cont].value = pListaSource.options[cont+1].value;
				pListaSource.options[cont].selected = pListaSource.options[cont+1].selected;
			}
			pListaSource.options[cont] = null;
			contOrigen--;
		}
		longitudDestino = pListaTarget.options.length;
		longitudOrigen = pListaSource.options.length;
		contOrigen++;
	}
}

function isItemInArray(pArray,pItem){
	var i;
	for(i=0; i< pArray.length; i++){
		if(pArray[i] == pItem){
			return true;
		}
	}
	return false;
}

function getPosInArrayOfItem(pArray,pItem){
	var i;
	for(i=0; i< pArray.length; i++){
		if(pArray[i] == pItem){
			return i;
		}
	}
	return -1;

}


function eliminarItemsSelectedFromList(pLista){
	var contOrigen = 0;
	var longitudOrigen = pLista.options.length;
	while (contOrigen < longitudOrigen)	{
		if(pLista.options[contOrigen].selected)	{
			for (cont = contOrigen; cont < (longitudOrigen - 1); cont++) {
				pLista.options[cont].text = pLista.options[cont+1].text;
				pLista.options[cont].value = pLista.options[cont+1].value;
				pLista.options[cont].selected = pLista.options[cont+1].selected;
			}
			pLista.options[cont] = null;
			contOrigen--;
		}
		longitudOrigen = pLista.options.length;
		contOrigen++;
	}

}

function join(Partes) {
	aRetornar = "";
	for(var j in Partes)
		if(j!="length")
			aRetornar += Partes[j];
	return aRetornar;
}

function eliminarEspacios(aQue){
	var Partes = split(aQue,' ')
	return join(Partes)
}

function split(source,separator){
        var oldOffset,newOffset,i;
        temp = new Array;
	    source = source+""
        for (i = 0,oldOffset = 0; oldOffset < source.length; ++i){
            newOffset = source.indexOf(separator, oldOffset)
            if (newOffset == -1)
                newOffset = source.length
            temp[i] = source.substring(oldOffset, newOffset)
            oldOffset = newOffset + 1
        }
        return temp
}

function reemplazar(strExpresion, strActual, strNuevo){
	var newExpresion = new String(strExpresion);
	var subStrAux1;
	var subStrAux2;
	var index;
	while((index = newExpresion.indexOf(strActual)) > 0){
		subStrAux1 = newExpresion.substring(0,index);
		subStrAux2 = newExpresion.substring(index+strActual.length,newExpresion.length);
		newExpresion = subStrAux1 + strNuevo + subStrAux2;
	}
	return newExpresion;
}









function rtrim(cadena) {
    cadena += "";
    for (var i = cadena.length -1; (i >= 0) && ((cadena.charAt(i) == ' ')); i--)
        ;
    return cadena.substring(0, i+1);
}

function ltrim(cadena) {
    cadena += "";
    for (var i = 0; (i < cadena.length) && ((cadena.charAt(i) == ' ')); i++)
        ;
    if (i == cadena.length) {
        return "";
    }
    return cadena.substring(i);
}

function trim(cadena) {
    return ltrim(rtrim(cadena));
}

/** Las siguientes funciones se utilizan para validar un n?mero de punto flotante. */
var r1Float = new RegExp("(\,\,)|([0-9]{4}\,)|(^[0]{0,}\,)|([\,]+[0-9]{0,2}[\,$])|(\\..*[\\.\,])");
var r2Float = new RegExp("(((\\[?)[0-9]\\,[0-9]{3}(\\]?))|(^[0-9]*))(\\.[0-9]+)?$")

function isFloat(number) {
	number = trim(number)
	return (!r1Float.test(number) && r2Float.test(number));
}

/*Esta funcion recibe un float y un rango y lo valida*/
function isFloatRange(number, min, max)  {
	if (!isFloat(number)) {
		return false;
	}
	var theValue = (number.split(",").join(""))*1;
	return theValue >= min && theValue <= max
}

var r1Int = new RegExp("(\,\,)|([0-9]{4}\,)|(^[0]{0,}\,)|([\,]+[0-9]{0,2}[\,$])");
var r2Int = new RegExp("((\\[?)[0-9]\\,[0-9]{3}(\\]?)$)|(^[0-9]+)$")

function isInt(number) {
	number = trim(number);
	return (!r1Int.test(number) && r2Int.test(number));
}

/*Esta funcion recibe un entero y un rango y lo valida*/
function isIntRange(number, min, max)  {
	if (!isInt(number)) {
		return false;
	}
	var theValue = (number.split(",").join(""))*1;
	return theValue >= min && theValue <= max
}


/*Esta funcion valida una hora y retorna falso o verdadero*/
/* Recibe el formato de HH:MM*/
function isTime(time)  {
	var HP
	time = trim(time)
	HP = time.split(":")
	if (HP.length != 2) {
		return false;
	}
	return(HP[0] < 24 && HP[0] >= 0 && HP[1] < 60 && HP[1] >= 0)
}


/*Esta funcion valida una fecha y retorna falso o verdadero*/
/* Recibe el formato de Dia/Mes/Ano*/
function isDateDMY(date)  {
	var FP
	date = trim(date)
	FP = date.split("/")
	if (FP.length != 3) {
		return false
	}
	return isSplitDateDMY(FP[0], FP[1], FP[2])
}


function isSplitDateDMY(day, month, year)  {
	if (!isInt(day) || !isInt(month) || !isInt(year)) {
		return false;
	}
	date = new Date(year, month-1, day)
	return ((date.getDate() == (day)*1) && ((date.getMonth()+1) == (month)*1) && (date.getFullYear() == (year)*1));
}


// Retorna si la fecha inferior efectivamente es inferior
// que la fecha superior. La fecha debe encontrarse en formato dd/mm/yyyy
// -1 a < b, 0 a == b, 1 a > b
function compareDatesDMY(a, b) {
	var firstDateArray, secondDateArray;
	firstDateArray = a.split("/");
	secondDateArray = b.split("/");
	aDate = new Date(firstDateArray[2], firstDateArray[1]-1, firstDateArray[0]);
	bDate = new Date(secondDateArray[2], secondDateArray[1]-1, secondDateArray[0]);
	if (aDate.getTime() < bDate.getTime()) {
		return -1;
	}
	if (aDate.getTime() == bDate.getTime()) {
		return 0;
	}
	return 1;
}

function isChecked(field) {
	if (!field) {
		return false;
	}
	if (field.length) {
		for (var i = 0; i < field.length; i++) {
			if (field[i].checked) {
				return true;
			}
		}
		return false;
	}
	return field.checked;
}


/** Valida un email */
function isEmail(str) {
  var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
  var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
  return (!r1.test(str) && r2.test(str));
}


/** Estas son la validaciones en si de las formas */

var _campoError = null;
var _errores    = "";

function appendErrorMessage(msgError) {
    _errores += ((_errores != "") ? "\n":"") + "        " + msgError
}

function appendErrorMessageFocus(campo, msgError) {
    _errores += ((_errores != "") ? "\n":"") + "        " + msgError
    if (_campoError == null) {
                _campoError = campo;
    }
}


function validarLista(lista, msgError, indiceInicial, funcion) {
    if (!indiceInicial && indiceInicial != 0) {
        indiceInicial = 1;
    }
    if (lista.selectedIndex < indiceInicial ||
        (funcion ? !eval("funcion(lista)") : false)) {
        appendErrorMessage(msgError)
        if (_campoError == null) {
            _campoError = lista;
        }
        return false;
    }
    return true;
}

function validarSeleccion(campo, msgError, funcion) {
    if (!isChecked(campo) ||
        	(funcion ? !eval("funcion(campo)") : false)) {
        appendErrorMessage(msgError)
        if (_campoError == null) {
            if (campo.length) {
                _campoError = campo[0]
            } else {
                _campoError = campo;
            }
        }
        return false;
    }
    return true;
}

function validarCampo(campo, msgError, longitudMinima, longitudMaxima, funcion) {
    if (!longitudMinima  && longitudMinima != 0) {
        longitudMinima = 1
    }
    if (!longitudMaxima ) {
		longitudMaxima = Number.MAX_VALUE
    }
    var value = trim(campo.value)
    if (value.length < longitudMinima || value.length > longitudMaxima ||
        (funcion ? !eval("funcion(campo)") : false)) {
        appendErrorMessage(msgError)
        if (_campoError == null) {
            _campoError = campo;
        }
        return false;
    }
    return true;
}

function validarCheck(campo,msg) {
		if(!$("."+campo).is(":checked")){
			appendErrorMessage(msg);
			//return;
		}	
}

function validarCampoOpcional(campo, msgError, longitudMinima, longitudMaxima, funcion) {
	if (trim(campo.value).length > 0) {
		return validarCampo(campo, msgError, longitudMinima, longitudMaxima, funcion)
	}
}

function validarFecha(dia, mes, ano, msgError, funcion) {
	 if (!isIntRange(dia.value, 1, 31)) {
        appendErrorMessage(msgError)
        if (_campoError == null) {
            _campoError = dia;
        }
        return false;
	}
    if (mes.selectedIndex < 1) {
        appendErrorMessage(msgError)
        if (_campoError == null) {
            _campoError = mes;
        }
        return false;
    }
	if (!isInt(ano.value)) {
        appendErrorMessage(msgError)
        if (_campoError == null) {
            _campoError = ano;
        }
        return false;
	}
    if (!isDateDMY(dia.value + "/" + mes.options[mes.selectedIndex].value + "/" + ano.value) ||
        (funcion ? !eval("funcion(dia, mes, ano)") : false)) {
        appendErrorMessage(msgError)
        if (_campoError == null) {
            _campoError = dia;
        }
        return false;
    }
    return true;
}


function validarFechaOpcional(dia, mes, ano, msgError, funcion) {
	if (trim(dia.value).length > 0 ||
			mes.selectedIndex > 0 || trim(ano.value).length > 0) {
		return validarFecha(dia, mes, ano, msgError, funcion)
	}
}


function validarRangoFechas(dia1,mes1,ano1,dia2,mes2,ano2,msgError,funcion) {
	if (compareDatesDMY(dia1.value + "/" + mes1.value + "/" + ano1.value, dia2.value + "/" + mes2.value + "/" + ano2.value) >= 0) {
        if (_campoError == null) {
            _campoError = dia1;
        }
        return false;
	}
	return true;
}


function validarEntero(campo, msgError, limiteInferior, limiteSuperior,
		funcion) {
	if (!limiteInferior && limiteInferior != 0) {
		limiteInferior = Number.NEGATIVE_INFINITY
		limiteSuperior = Number.MAX_VALUE
	}
	if (!isIntRange(campo.value, limiteInferior, limiteSuperior) ||
        (funcion ? !eval("funcion(campo)") : false)) {
        appendErrorMessage(msgError)
        if (_campoError == null) {
            _campoError = campo;
        }
        return false;
	}
	return true;
}

function validarEnteroOpcional(campo, msgError, limiteInferior, limiteSuperior, funcion) {
	if (trim(campo.value).length > 0) {
		return validarEntero(campo, msgError, limiteInferior, limiteSuperior, funcion)
	}
}


function validarFloat(campo, msgError, limiteInferior, limiteSuperior, funcion) {
	if (!limiteInferior && limiteInferior != 0) {
		limiteInferior = Number.NEGATIVE_INFINITY
		limiteSuperior = Number.MAX_VALUE
	}
	if (!isFloatRange(campo.value, limiteInferior, limiteSuperior) ||
        (funcion ? !eval("funcion(campo)") : false)) {
        appendErrorMessage(msgError)
        if (_campoError == null) {
            _campoError = campo;
        }
        return false;
	}
	return true;
}

function validarFloatOpcional(campo, msgError, limiteInferior, limiteSuperior, funcion) {
	if (trim(campo.value).length > 0) {
		return validarFloat(campo, msgError, limiteInferior, limiteSuperior, funcion)
	}
}

function validarEmail(campo, msgError) {
	if (!isEmail(campo.value)) {
        appendErrorMessage(msgError)
        if (_campoError == null) {
            _campoError = campo;
        }
        return false;
	}
	return true;
}


function validarEmailOpcional(campo, msgError) {
	if (trim(campo.value).length > 0) {
		return validarEmail(campo, msgError);
	}
}


var _mensajeAdvertencia = " \n\n";

function validarForma(forma) {
	_errores = ""
	_campoError = null;

	eval("hacerValidaciones_" + forma.name +"(forma)");
	if (_errores != "") {
		alert(_mensajeAdvertencia + _errores);
		if (_campoError != null) {
		   _campoError.focus();
		 }
		return false;
	}
	return true;
}


function EsEnteroPositivoDato(Dato){
	if(isNaN(Dato) || Dato.indexOf(".") != -1 || parseInt(Dato,10)<0)
		return false;
	return true;
}

function isValidEmail(email){
	if(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email)){
		return true;
	}else {
		alert("Ingresa una dirección de correo electrónica válida");			
		return false;
	}
}
