function checkForm(objForm)
{
	var arClass, bValid;
	var objField = objForm.getElementsByTagName('*');

	for (var iFieldCounter=0; iFieldCounter<objField.length; iFieldCounter++)
	{
		// Allow for multiple values being assigned to the class attribute
		arClass = objField[iFieldCounter].className.split(' ');
		for (var iClassCounter=0; iClassCounter<arClass.length; iClassCounter++)
		{
			switch (arClass[iClassCounter])
			{
				case 'select0':
					bValid = objField[iFieldCounter].selectedIndex > 0;
					break;
				case 'acceptcheckbox':
					bValid = objField[iFieldCounter].checked;
					break;
				case 'string':
					bValid = isString(objField[iFieldCounter].value.replace(/^\s*|\s*$/g, ''));
					break;
				case 'number' :
					bValid = isNumber(objField[iFieldCounter].value);
					break;
				case 'date' :
					bValid = isDMY(objField[iFieldCounter].value);
					break;
				case 'email' :
					bValid = isEmail(objField[iFieldCounter].value);
					break;
				case 'rutwithdv' :
					bValid = isRut(objField[iFieldCounter].value);
					break;
				default:
					bValid = true;
			}

			if (bValid == false)
			{
				// If this field is invalid, leave the testing early,
				// and alert the visitor to this error
				mensaje = '';
				if(objField[iFieldCounter].title) {
					mensaje = ('Debe ingresar el campo ' + objField[iFieldCounter].title + ' correctamente');
				} else {
					mensaje = ('Debe ingresar el campo ' + objField[iFieldCounter].name + ' correctamente');
				}
				if(arClass[iClassCounter] == 'date') {
					mensaje += ".\nEl formato es dd-mm-aaaa (ej: 30-01-1978).";
				}
				if(objField[iFieldCounter].select) {
					objField[iFieldCounter].select();
				}
				if(objField[iFieldCounter].focus) {
					objField[iFieldCounter].focus();
				}
				alert(mensaje);
				return false;
			}
		}
	}
	return true;
}

function isRadioChecked(objForm, name)
{
	var arClass, bValid;
	var objField = objForm.getElementsByTagName('*');
	var anyChecked = false;

	for (var iFieldCounter=0; iFieldCounter<objField.length; iFieldCounter++) {
		if(objField[iFieldCounter].type == 'radio' && objField[iFieldCounter].name == name) {
			anyChecked = anyChecked || objField[iFieldCounter].checked;
		}
	}
	if(!anyChecked) {
		for (var iFieldCounter=0; iFieldCounter<objField.length; iFieldCounter++) {
			if(objField[iFieldCounter].type == 'radio' && objField[iFieldCounter].name == name) {
				if(objField[iFieldCounter].select) {
					objField[iFieldCounter].select();
				}
				if(objField[iFieldCounter].focus) {
					objField[iFieldCounter].focus();
				}
				break;
			}
		}
	}
	return anyChecked;
}

function isRut(strValue)
{
	if(typeof strValue == 'undefined') {
		return false;
	}
	rutdv = strValue.split(/-/);
	if(typeof rutdv[1] == 'undefined') {
		return false;
	}
	rutdv[0] = rutdv[0].replace(/\./, '');
	return validaRut(rutdv[0], rutdv[1]);
}

function isString(strValue)
{
	return (typeof strValue == 'string' && strValue != '');
}

function isNumber(strValue)
{
	return (!isNaN(strValue) && strValue != '');
}

function isEmail(strValue)
{
	var objRE = /^[\w-\.\']{1,}\@([\da-zA-Z-]{1,}\.){1,}[\da-zA-Z-]{2,}$/;

	return (strValue != '' && objRE.test(strValue));
}
function isLeapYear(aa)
{
	if(aa%400==0) return true;
	if(aa%100==0) return false;
	if(aa%4==0) return true;
	return false;
}
function isDMY(strValue)
{
	strValue=strValue.replace('/','-');
	var dmy=strValue.split('-');
	var dias_mes=[31,28,31,30,31,30,31,31,30,31,30,31];
	var mydate=new Date();
	if (!(parseInt(dmy[2],10) && parseInt(dmy[1],10) && parseInt(dmy[0],10))){
		 return false;
	}
	if(isLeapYear(dmy[2])) {
		dias_mes[1]++;
	}
	if(dmy[1]<1||dmy[1]>12) {
		 return false;
	}
	if(dmy[0]<1||dmy[0]>dias_mes[dmy[1]-1]) {
		 return false;
	}
	return true;
}
/* R.U.T. Validation routines. Please call validaRut(rut,dv)
** Taken from the SII site. No copyright notice was found. */
function trimval(str){
	var ini=0;
	var fin=str.length-1;
	while(ini<=fin && str.charAt(ini)==" ") ini++;
	if (ini<=fin) {
		while(str.charAt(fin)==" ") fin--;
		if (fin<str.length-1) {
				fin++;
				return str.substring(ini,fin);
		} else return str.substr(ini);
	} else return '';
}

function isNumero(str)
{
	var flag=true;
	var i=0;
	var nums=new Array(1,1,1,1,1,1,1,1,1,1);
	while (i<str.length && flag) {
		flag= (nums[str.charAt(i++)]!=null);
	}
	return flag;
}

function validaM11(rut,dv)
{
	var suma=0;
	var mul=2;
	var i=0;
	for (i=rut.length-1;i>=0;i--) {
		suma=suma+rut.charAt(i) * mul;
		mul= mul==7 ? 2 : mul+1;
	}
	var dvr = ''+(11 - suma % 11);
	if (dvr=='10') dvr = 'K';
	else if (dvr=='11') dvr = '0';
	if (dvr!=dv) return false;
	else return true;
}

var ruterror='';
function validaRut(rut,dv)
{
	rut=trimval(rut);
	rut=rut.replace(/\./g,'');
	dv=trimval(dv).toUpperCase();
	if (rut=='' && dv=='') {
		return true;
	}
	if (rut=='' || !isNumero(rut) || rut*1==0) {
		ruterror='Rut Inválido';
		return false;
	}else if ((!isNumero(dv) && (dv != "K")) || (dv == "")) {
		ruterror='Dígito Verificador inválido';
		return false;
	}else if (!validaM11(rut,dv)) {
		ruterror='Dígito Verificador Erróneo';
		return(false);
	}
	return true;
}

