var ct_String   = 1;
var ct_Number   = 2;
var ct_Email    = 3;
var ct_Telefono = 4;
var ct_Date	    = 5;
var ct_MesAno   = 6;
var ct_Select   = 7;
var ct_Radio    = 8;
var ct_CheckBox = 9;

var aFields = new Array();

function clValidator() {
	this.addField = f_addField;
	this.validate = f_validate;
}

function f_addField(obj) {
	aFields[aFields.length] = obj;
}

function clField(sName, nType, nLength, bEmpty, sAlert) {
	this.name   = sName;
	this.type   = nType;
	this.length = nLength;
	this.empty  = bEmpty;
	this.alert  = sAlert;
}

function f_validate() {
	var bShowAlert = false;
	for(iter=0; iter<aFields.length; iter++) {
		var objF = aFields[iter];
		var objE = document.forms[0].elements[objF.name];
		// si esta vacío y puede estar vacío, no entramos a validarlo
		if(!(isEmpty(objE.value) && objF.empty)) {
			if(objF.type == ct_String) {
					if(!validaString(objE.value, objF.length)) bShowAlert = true;
			}
			if(objF.type == ct_Number) {
				if(isNaN(objE.value) || (!objF.empty && objE.value==0) ) bShowAlert = true;
			}
			if(objF.type == ct_Email) {
				if(!validaMail(objE.value)) bShowAlert = true;
			}
			if(objF.type == ct_Telefono) {
				if(!validaTelefono(objE.value)) bShowAlert = true;
			}
			if(objF.type == ct_Date) {
				if(!validaFecha(objE.value)) bShowAlert = true;
			}
			if(objF.type == ct_MesAno) {
				if(!validaMesAno(objE.value)) bShowAlert = true;
			}
			if(objF.type == ct_Select) {
				if(objE.selectedIndex==0) bShowAlert = true;
			}
			if(objF.type == ct_Radio) { /*
				var bOne = false;
				alert(document.forms[0].elements[objF.name].elements);
				for(ii=0; ii<objE.options.length; ii++) {
					if(!bOne) bOne = objE.elements[ii].checked;
				}
				bShowAlert = !bOne; */
			}
		}
		if(bShowAlert) {
			alert(objF.alert);
			objE.focus();
			return false;
		}
	}
	return true;
}


function validaMail(field) {
	var isEmail = field.match(/^\w+(-\w+)*(\.\w+(-\w+)*)*@\w+(-\w+)*(\.\w+(-\w+)*)*\.([a-z]{3,4}|[a-z]{2})$/);
	return isEmail!=null;
}
function validaFecha(field) {
	aMonth = Array(31,28,31,30,31,30,31,31,30,31,30,31);
	field = field.split("/");
	if(field.length!=3)  return false;
	if(field[0].length<1 || field[0].length>2 || field[1].length<1 || field[1].length>2 || field[2].length<1 || field[2].length>4 ) return false;
	field[0] = paseInt(String(field[0]));
	field[1] = paseInt(String(field[1]));
	field[2] = paseInt(String(field[2]));
	if(field[2]%4==0) aMonth[1]=29;
	if(field[1]<1 || field[1]>12) return false;
	if(field[0]<1 || field[0]>aMonth[field[1]-1]) return false;
	return true;
}
function paseInt(n) {
	return (10*(parseInt(n/10))) + (n%10);
}
function validaMesAno(field) {
	var aDatos = field.split("/");
	if(aDatos.length!=2) return false;
	if(aDatos[0]<0 || aDatos[0]>12) return false;
	if(aDatos[1].length!=2) return false;
	return true;
}
function validaTelefono(field) {
	var isTelFormat01 = field.match(/[0-9]{3}\.[0-9]{3}\.[0-9]{3}/);
	var isTelFormat02 = field.match(/[0-9]{2}\.[0-9]{3}\.[0-9]{2}\.[0-9]{2}/);
	var isTelFormat03 = field.match(/[0-9]{3}\.[0-9]{2}\.[0-9]{2}\.[0-9]{2}/);
	var isTelFormat04 = field.match(/[0-9]{9}/);
	return isTelFormat01!=null || isTelFormat02!=null || isTelFormat03!=null || isTelFormat04!=null;
}
function validaNumero(field) {
	var isNumber = field.match(/[\D]+/gi);
	return isNumber!=null
}
function validaString(field, nMaxLength) {
	return (field!="" && field.length<=nMaxLength)
}
function isEmpty(field) {
	return (field=="");
}