function validarformulario(form){
	if (revisaformulario(form)) form.submit();
}

// --------------------------------------------------------------------------------------

function revisaformulario(form) {
	var error = false;

	for(var i=0; i<form.length; i++){
		var element = form[i];

		// consulto si es necesario el valor de este campo.
		if(element.getAttribute('require') == '1' && element.value == ''){
			alert (element.getAttribute('rmensaje'));
			element.focus();
			error = true;
			break;
		}

		// Me fijo si posee validación, si posee ejecuto tal validación.
		if (element.getAttribute('validate') != null && element.getAttribute('validate') != '') {
			error = validarcampo(element.value,element.getAttribute('validate'),element.getAttribute('mensaje'), element);
		}

		if (error) { break; }
	}

	t = !error;
	return t;
}

// --------------------------------------------------------------------------------------

function validarcampo(valor,validacion,mensaje, element) {
	var passed = true;

	switch (validacion) {
		case 'entero':
			if(isNaN(parseInt(valor))) passed = false;
			break;

		case 'flotante':
			if(isNaN(parseFloat(valor))) passed = false;
			break;

		case 'email':
			var emailexp = /^[a-z_0-9\-\']+(\.[a-z_0-9\-\']+)*@[a-z_0-9\-]+(\.[a-z_0-9\-]+){1,}$/i;
			if (!emailexp.test(valor)) passed = false;
			break;

		case 'password':
		case 'string':
			var exp = /[^A-Za-z0-9_]/;
			if (exp.test(valor)) passed = false;
			break;

		case 'checked':
			if(!element.checked) passed = false;
			break;

		case 'select':
			if (!element.selectedIndex) passed = false;
			break;

		case 'radio':
			break;

		case 'fecha':
			var re = /^(\d{1,2})[-\s\.\/](\d{1,2})[-\s\.\/](\d{4})$/;
			if (!re.test(valor)) { 
				passed = false
			} else {
				var result = valor.match(re);

				var d = parseInt(result[1]);
				var m = parseInt(result[2]);
				var y = parseInt(result[3]);

				if (m < 1 || m > 12 || y < 1900 || y > 2100) { 
					passed = false;
				} else {
					if (m == 2){
						var days = ((y % 4) == 0) ? 29 : 28;
					} else {
						if (m == 4 || m == 6 || m == 9 || m == 11) {
							var days = 30;
						} else {
							var days = 31;
						}
					}
					if (!(d >= 1 && d <= days)) passed = false;
				}
			}
			break;
		case 'ip':
			var exp = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;
			if (!exp.test(valor)) passed = false;
			break;

		case 'url':
			var exp = /^http(s)?\:\/\/\w[\w\-]+(\.\w[\w\-]+)+([\/\%\?\&\+\#\.\w\-\=]+)*$/;
			if (!exp.test(valor)) passed = false;
			break;

		case 'postal':
			var exp = /[A-Za-z0-9]{4,8}$/;
			if (!exp.test(valor)) passed = false;
			break;

		case 'files':
			var tipos = element.getAttribute('validate_files');

			// Para que puedas subir cualquier tipo de archivos
			if (tipos != '' && tipos != '*') {

				extArray = tipos.split(' ');

				while (valor.indexOf("\\") != -1) {
					valor = valor.slice(valor.indexOf("\\") + 1);
				}
				ext = valor.slice(valor.indexOf(".")).toLowerCase();

				var allowSubmit = false;
				for (var i = 0; i < extArray.length; i++) {
					if ('.'+extArray[i] == ext) { allowSubmit = true;}
				}

				if (!allowSubmit) { passed = false; }
			}

			break;
	}


	if (!passed) {
		alert (mensaje);
		element.focus();
	}

	return !passed;
}