function check(strForm) { //Properties this.strForm = strForm; this.arrErrors = new Array(); //Methods this.getInput = check_getInput; this.getNextPosition = check_getNextPosition; this.checkError = check_checkError; this.checkFixedError = check_checkFixedError; this.isDate = check_isDate; this.checkString = check_string; this.checkFixedString = check_fixedString; this.checkNumber = check_number; this.checkNumberPos = check_numberPos; this.checkFloat = check_float; this.checkDate = check_date; this.checkEmail = check_email; this.checkCombo = check_combo; this.compareDates = check_compareDates; this.sumUnitDate= check_sumUnitDate; this.toString = check_toString; } function check_getInput (strInput) { return eval("document." + this.strForm + "." + strInput); } function check_getNextPosition () { return this.arrErrors.length; } function check_checkError (objInput, strNameShow, strRegExp, intMinLen, intMaxLen, blnOptional, strErrorMessage) { var intPosition = this.getNextPosition(); var objRegExp = new RegExp(strRegExp); if (!objInput.value.length) { if (!blnOptional){ this.arrErrors[intPosition] = "El campo " + strNameShow + " no puede estar vacío"; return false; }else return true; }else{ if ((!objRegExp.test(objInput.value))) { this.arrErrors[intPosition] = "El campo " + strNameShow + (strErrorMessage ? strErrorMessage : " contiene caracteres inválidos" ); return false; }else if (objInput.value.length < intMinLen) { this.arrErrors[intPosition] = "El campo " + strNameShow + " debe tener más de " + intMinLen + " caracteres"; return false; }else if (objInput.value.length > intMaxLen) { this.arrErrors[intPosition] = "El campo " + strNameShow + " no debe tener más de " + intMaxLen + " caracteres"; return false; } else return true; } } function check_checkFixedError (objInput, strNameShow, strRegExp, intLen, blnOptional, strErrorMessage) { var intPosition = this.getNextPosition(); var objRegExp = new RegExp(strRegExp); if (!objInput.value.length) { if (!blnOptional){ this.arrErrors[intPosition] = "El campo " + strNameShow + " no puede estar vacío"; return false; }else return true; }else{ if ((!objRegExp.test(objInput.value))) { this.arrErrors[intPosition] = "El campo " + strNameShow + (strErrorMessage ? strErrorMessage : " contiene caracteres inválidos" ); return false; }else if (objInput.value.length != intLen) { this.arrErrors[intPosition] = "El campo " + strNameShow + " debe tener " + intLen + " caracteres"; return false; } else return true; } } function check_isDate(datFecha) { var arrFecha = datFecha.split("-"); var datFechaValida = new Date(arrFecha[0], arrFecha[1] - 1, arrFecha[2]); if ((arrFecha[2] == datFechaValida.getDate()) && (arrFecha[1] == (datFechaValida.getMonth() + 1)) && (arrFecha[0] == datFechaValida.getFullYear())) return true; else return false; } function check_string (strInput, strNameShow, intMinLen, intMaxLen, blnOptional) { var objInput = this.getInput(strInput); var strRegExp = "^[^<>']+$"; return this.checkError(objInput, strNameShow, strRegExp, intMinLen, intMaxLen, blnOptional, false); } function check_fixedString (strInput, strNameShow, intLen, blnOptional) { var objInput = this.getInput(strInput); var strRegExp = "^[^<>']+$"; return this.checkFixedError(objInput, strNameShow, strRegExp, intLen, blnOptional, false); } function check_number (strInput, strNameShow, intMinLen, intMaxLen, blnOptional) { var objInput = this.getInput(strInput); var strRegExp = "^[0-9]+$"; return this.checkError(objInput, strNameShow, strRegExp, intMinLen, intMaxLen, blnOptional, false); } function check_numberPos (strInput, strNameShow, intMinLen, intMaxLen, blnOptional) { var objInput = this.getInput(strInput); var strRegExp = "^[0-9]+$"; if (this.checkError(objInput, strNameShow, strRegExp, intMinLen, intMaxLen, blnOptional, "El campo " + strNameShow + " debe ser positivo")) { if (objInput.value > 0) return true; else { this.arrErrors[this.getNextPosition()] = "El campo " + strNameShow + " debe ser positivo"; return false; } } else return false; } function check_float (strInput, strNameShow, intMinLen, intMaxLen, blnOptional) { var objInput = this.getInput(strInput); var strRegExp = "^[0-9]+(\\.[0-9]+)?$"; return this.checkError(objInput, strNameShow, strRegExp, intMinLen, intMaxLen, blnOptional, false); } function check_date (strInput, strNameShow, blnOptional) { var objInput = this.getInput(strInput); var strRegExp = "^[0-9]{4}\-[0-9]{1,2}\-[0-9]{1,2}"; var intPosition; if ((objInput.value.length == 0) && (blnOptional)) return true; if (this.checkError(objInput, strNameShow, strRegExp, 8, 10, blnOptional, " no contiene una fecha válida")) if (!this.isDate(objInput.value)) { var intPosition = this.getNextPosition(); this.arrErrors[intPosition] = "El campo " + strNameShow + " no contiene una fecha válida"; return false; } else return true; } function check_email (strInput, strNameShow, intMinLen, intMaxLen, blnOptional) { var objInput = this.getInput(strInput); var strRegExp = "^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,4})+$"; return this.checkError(objInput, strNameShow, strRegExp, intMinLen, intMaxLen, blnOptional, false); } function check_combo (strInput, strNameShow, blnOptional) { var objInput = this.getInput(strInput); if (blnOptional) { return true; } else { if (objInput.selectedIndex > 0) { return true; } else { var intPosition = this.getNextPosition(); this.arrErrors[intPosition] = "Debe elegir una opción para el campo " + strNameShow; return false; } } } var aFinMes = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); function finMes(nMes, nAno){ return aFinMes[nMes - 1] + (((nMes == 2) && (nAno % 4) == 0)? 1: 0); } function padNmb(nStr, nLen, sChr){ var sRes = String(nStr); for (var i = 0; i < nLen - String(nStr).length; i++) sRes = sChr + sRes; return sRes; } function makeDateFormat(nDay, nMonth, nYear){ var sRes; sRes =padNmb(nYear, 4, "0")+ "-" + padNmb(nMonth, 2, "0") + "-" + padNmb(nDay, 2, "0"); return sRes; } function incDate(sFec0){ var nDia = parseInt(sFec0.substr(8, 2), 10); var nMes = parseInt(sFec0.substr(5, 2), 10); var nAno = parseInt(sFec0.substr(0, 4), 10); nDia += 1; if (nDia > finMes(nMes, nAno)){ nDia = 1; nMes += 1; if (nMes == 13){ nMes = 1; nAno += 1; } } return makeDateFormat(nDia, nMes, nAno); } function decDate(sFec0){ var nDia = Number(sFec0.substr(8, 2)); var nMes = Number(sFec0.substr(5, 2)); var nAno = Number(sFec0.substr(0, 4)); nDia -= 1; if (nDia == 0){ nMes -= 1; if (nMes == 0){ nMes = 12; nAno -= 1; } nDia = finMes(nMes, nAno); } return makeDateFormat(nDia, nMes, nAno); } function addToDate(sFec0, sInc){ var nInc = Math.abs(parseInt(sInc)); var sRes = sFec0; if (parseInt(sInc) >= 0) for (var i = 0; i < nInc; i++) sRes = incDate(sRes); else for (var i = 0; i < nInc; i++) sRes = decDate(sRes); return sRes; } function check_sumUnitDate(strInput1,intUnidad) { if (!this.isDate(strInput1)) return null; return addToDate(strInput1,intUnidad); } function check_compareDates(strInput1, strInput2, strUnidad) { if ((!this.isDate(strInput1)) || (!this.isDate(strInput2))) return null; // Si son fechas válidas, las paso a arrays para compararlas. var arrFecha1 = strInput1.split("-"); var datFechaValida1 = new Date(arrFecha1[0], arrFecha1[1] - 1, arrFecha1[2]); var arrFecha2 = strInput2.split("-"); var datFechaValida2 = new Date(arrFecha2[0], arrFecha2[1] - 1, arrFecha2[2]); var intAjuste; switch (strUnidad) { // El resultado te lo devuelve en años case "a": case "A": intAjuste = 86400000 * 365; break; // El resultado te lo devuelve en horas case "h": case "H": intAjuste = 86400000 / 24; break; // El resultado te lo devuelve por default en días case "d": case "D": default: intAjuste = 86400000; break; } return ((datFechaValida1 - datFechaValida2) / intAjuste); } function check_toString () { var strErrors = ""; var i; for (i = 0; i < this.arrErrors.length; i++) { strErrors = strErrors + this.arrErrors[i] + "\n"; } return strErrors; }