// valida cualquier cosa
// copyright 2003 Mauricio Giraldo
// validacion de fecha tomada de www.smartwebby.com

function validar(forma,boton,tuteando,exec){
	var campos, nombres, tipos, arrCampos, arrNombres, arrTipos,i,j,valido=true,laForma;
	var re, arrMultiCheck, arrCamposMultiCheck, arrMultiSelect, arrCamposMultiSelect, noMulti=0;
	tutea = tuteando ? ["You must","Try"] : ["You must","Try"];
	laForma = document[forma];
	campos = laForma['__campos__'].value;
	nombres = laForma['__nombres__'].value;
	tipos = laForma['__tipos__'].value;
	arrCampos = campos.split(",");
	arrNombres = nombres.split(",");
	arrTipos = tipos.split(",");
	
	for (i=0;i<arrCampos.length;i++){
		if (arrTipos[i] == 'texto'){
			if (laForma[arrCampos[i]].value == '') {
				alert (tutea[0] + ' provide a text in ' + arrNombres[i] + '.\n' + tutea[1] + ' again.');
				laForma[arrCampos[i]].focus();
				valido = false;
				return false;
				break;
			}
		} else if (arrTipos[i] == 'alias'){
			re = /^[a-zA-Z0-9\.@_-]+$/;
			if (!re.test(laForma[arrCampos[i]].value)) {
				alert (tutea[0] + ' ingresar un alias válido en ' + arrNombres[i] + '.\n' + tutea[1] + ' de nuevo.');
				laForma[arrCampos[i]].focus();
				valido = false;
				return false;
				break;
			}
		} else if (arrTipos[i] == 'radio'){
			valido = false;
			for (j=0;j<laForma[arrCampos[i]].length;j++) {
				if (laForma[arrCampos[i]][j].checked) valido = true;
			}
			if (!valido) {
				alert (tutea[0] + ' choose ' + arrNombres[i] + '.\nPlease try again');
				valido = false;
				return false;
				break;
			}
		} else if (arrTipos[i] == 'alias-op'){
			if (laForma[arrCampos[i]].value != '') {
				re = /^[a-zA-Z0-9\.@_-]+$/;
				if (!re.test(laForma[arrCampos[i]].value)) {
					alert (tutea[0] + ' ingresar un alias válido en ' + arrNombres[i] + '.\n' + tutea[1] + ' de nuevo.');
					laForma[arrCampos[i]].focus();
					valido = false;
					return false;
					break;
				}
			}
		} else if (arrTipos[i] == 'clave'){
			if (laForma["clave"].value == "") {
				alert (tutea[0] + ' ingresar una clave.\n' + tutea[1] + ' de nuevo.');
				laForma["clave"].focus();
				valido = false;
				return false;
				break;
			}
			if (laForma["clave"].value != laForma["clave2"].value) {
				alert ('Las claves deben coincidir.\n' + tutea[1] + ' de nuevo.');
				laForma["clave2"].focus();
				valido = false;
				return false;
				break;
			}
		} else if (arrTipos[i] == 'multiselect'){
			if (laForma[arrCampos[i]].selectedIndex==-1) {
				alert ('You must select ' + arrNombres[i] + '.\nPlease try again.');
				laForma[arrCampos[i]].focus();
				valido = false;
				return false;
				break;
			}
		} else if (arrTipos[i] == 'multicheck'){
			arrMultiCheck = arrCampos[i].split("|");
			var arrBoxes = laForma[arrMultiCheck[0]];
			for (j=0;j<arrBoxes.length;j++) {
				if (arrBoxes[j].checked) noMulti++;
			}
			if (noMulti<arrMultiCheck[1]) {
				alert (tutea[0] + ' select ' + arrNombres[i] + '.\n' + tutea[1] + ' again.');
				valido = false;
				return false;
				break;
			}
		} else if (arrTipos[i] == 'accept'){
			if (!laForma[arrCampos[i]].checked) {
				alert (tutea[0] + ' accept ' + arrNombres[i] + '.\nPlease try again.');
				laForma[arrCampos[i]].focus();
				valido = false;
				return false;
				break;
			}
		} else if (arrTipos[i] == 'fecha'){
			if (laForma[arrCampos[i]].value == '') {
				alert ('Debe ingresar una fecha valida en ' + arrNombres[i] + '.\nIntente de nuevo');
				laForma[arrCampos[i]].focus();
				valido = false;
				return false;
				break;
			} else {
				if (!validarFecha(laForma[arrCampos[i]])) {
					laForma[arrCampos[i]].focus();
					valido = false;
					return false;
					break;
				}
			}		
		} else if (arrTipos[i] == 'fecha-tres'){
			if (laForma["dia"].value == '' || laForma["mes"].value == '' || laForma["ano"].value == '') {
				alert (tutea[0] + ' ingresar una fecha en ' + arrNombres[i] + '.\n' + tutea[1] + ' de nuevo');
				laForma[arrCampos[i]].focus();
				valido = false;
				return false;
				break;
			} else {
				var validDate = dateCheckTres(laForma);
				if (!validDate) {
					alert (tutea[0] + ' ingresar una fecha valida (numeros) en ' + arrNombres[i] + '.\n' + tutea[1] + ' de nuevo');
					laForma[arrCampos[i]].focus();
					valido = false;
					return false;
					break;
				}
			}
		}
	}
	if (valido && !exec){
		if (boton) laForma[boton].disabled = true;
		return true;
	} else if (exec) {
		eval(exec);
	} else {
		return false;
	}
}

var dtCh= "/";
var minYear=1900;
var maxYear=2100;

function validarFecha(campo){
	var dt=campo;
	if (isDate(dt.value)==false){
		return false
	}
    return true
}

function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}

function isDate(dtStr){
	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strMonth=dtStr.substring(0,pos1)
	var strDay=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
	if (pos1==-1 || pos2==-1){
		alert("El formato de fecha debe ser : MM/DD/AAAA")
		return false
	}
	if (strMonth.length<1 || month<1 || month>12){
		alert("Por favor ingrese un mes válido en la fecha.")
		return false
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		alert("Por favor ingrese un dia válido en la fecha.")
		return false
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		alert("Por favor ingrese año de 4 dígitos válido entre "+minYear+" y "+maxYear+" en la fecha.")
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		alert("Por favor ingrese una fecha válida.")
		return false
	}
return true
}

function dateCheckTres(laForma){
	var chk    = 0;
	var maxDia = 0;
	var dd = laForma["dia"].value; // day
	var mm = laForma["mes"].value; // month
	var yyyy = laForma["ano"].value; // year
	
	// calling function to get maximum day for this month
	maxDia = maxDay(mm, yyyy);  

	if ((dd <= 0) || (dd > maxDia)){
		chk = 1;
	} else if ((mm <= 0) || (mm > 12)){
		chk = 1;
	} else if ((yyyy <= 0)){
		chk = 1;
	} 
	
	if (chk == 1){
		return false;
	} else {
		return true;
	}
}

// function for calculating maximum day 
function maxDay(mn, yr){
	var mDay;
	if ((mn == 4) || (mn == 6) || (mn == 9) || (mn == 11)){ 
		mDay = 30;
	} else if (mn == 2) {
		//calling leap year function 
		mDay = isLeapYear(yr) ? 29 : 28;    
	} else {
		mDay = 31;
	}
	return mDay; 
}

// function to check leap year
function isLeapYear(yr){
	if (yr % 2 == 0) {
		return true;
	} else {
		return false;
	}
}