//-----------------------------------------------------------------------------------------------

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('requireerr'));
			if (element.type != 'hidden') element.focus();
			error = true;
			break;
		}

		// Me fijo si posee validación, si posee ejecuto tal validación.
		// Valida solo si no esta vacio.
		if (element.getAttribute('validate') != null && element.getAttribute('validate') != '' && element.value != '') {
			error = validarcampo(element.value,element.getAttribute('validate'),element.getAttribute('validateerr'), element);
		}


		// Verifico que tenga el mínimo requerido.
		if (element.getAttribute('minlength') != null && element.value.length < element.getAttribute('minlength')) {
			alert (element.getAttribute('lengtherr'));
			element.focus();
			error = true;
			break;
		}


		// Verifico que tenga el máximo requerido.
		if (element.getAttribute('maxlength') != null && element.value.length > element.getAttribute('maxlength')) {
			alert (element.getAttribute('lengtherr'));
			element.focus();
			error = true;
			break;
		}


		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 'fechahoy':
			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 < 1945 || 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;
				}

				today = new Date();
				targetdate = new Date(y,m,d); 
				milliseconds = (24 * 60 * 60 * 1000);
				diferencia = ((targetdate.getTime() - today.getTime()) / milliseconds);
				deferencia = Math.round(diferencia);

				if (diferencia>0) 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);
				}

				// Permit nombres de archivos con mas de un punto.
				ext = valor;

				while (ext.indexOf(".") != -1) {
					ext = ext.slice(ext.indexOf(".") + 1).toLowerCase();
				}

				var allowSubmit = false;
				for (var i = 0; i < extArray.length; i++) {
					if (extArray[i] == ext) { allowSubmit = true;}
				}

				if (!allowSubmit) { passed = false; }
			}

			break;

		case 'cuit':

			cuit = valor;
			var vec= new Array(10);
			esCuit=false;
			cuit_rearmado="";
			errors = '';
			for (i=0; i < cuit.length; i++) {   
				caracter=cuit.charAt( i);
				if ( caracter.charCodeAt(0) >= 48 && caracter.charCodeAt(0) <= 57 )     {
					cuit_rearmado +=caracter;
				}
			}
			cuit=cuit_rearmado;
			if ( cuit.length != 11) {  // si to estan todos los digitos
				esCuit=false;
				errors = 'Cuit <11 ';
				// alert( "CUIT Menor a 11 Caracteres" );
			} else {
				x=i=dv=0;
				// Multiplico los dígitos.
				vec[0] = cuit.charAt(  0) * 5;
				vec[1] = cuit.charAt(  1) * 4;
				vec[2] = cuit.charAt(  2) * 3;
				vec[3] = cuit.charAt(  3) * 2;
				vec[4] = cuit.charAt(  4) * 7;
				vec[5] = cuit.charAt(  5) * 6;
				vec[6] = cuit.charAt(  6) * 5;
				vec[7] = cuit.charAt(  7) * 4;
				vec[8] = cuit.charAt(  8) * 3;
				vec[9] = cuit.charAt(  9) * 2;
                    
				// Suma cada uno de los resultado.
				for( i = 0;i<=9; i++) {
					x += vec[i];
				}
				dv = (11 - (x % 11)) % 11;
				if ( dv == cuit.charAt( 10) ) {
					esCuit=true;
				}
			}
			if ( !esCuit ) {

				// alert( "CUIT Invalido" );
				// document.frmClientes.cuit.focus();
				// errors = 'Cuit Invalido ';
				passed = false;
			}

			// document.MM_returnValue1 = (errors == '');

			break;

	}


	if (!passed) {
		alert (mensaje);
		if (element.type != 'hidden') element.focus();
	}

	return !passed;
}

// --------------------------------------------------------------------------------------
