ie = document.all;

var E_NUM_NATURAL = 'el campo "%s" solo puede tener numeros enteros sin signo';
var E_NUM_ENTERO = 'el campo "%s" solo puede tener numeros enteros';
var E_NUM_REAL = 'el campo "%s" solo puede tener numeros';
var E_ALPHA = 'el campo "%s" solo puede tener texto';
var E_EMAIL = 'el campo "%s" debe ser un correo valido';
var E_CONTRASENA = 'El campo "%s" debe tener minimo cuatro (4) caracteres y debe coincidir con el campo "Confirmar %s"';
var E_COMBO = 'Debe seleccionar un valor del combo "%s"';
var E_USUARIO = 'El usuario debe tener un minimo de 4 caracteres y un maximo de 16 y solo puede contener letras, numeros y guion bajo';
var E_VACIO = 'Debe completar el campo "%s"';
var E_RADIO = 'Debe seleccionar un valor en el campo "%s"';

var COMBO = 1;
var COMBO_ESTATICO = 2;
var COMBO_MULTIPLE = 3;
var RADIO = 4;
var CHECKBOXS = 5;
var ALPHANUM = 10;
var ALPHA = 11;
var NUMERO_NATURAL = 20;
var NUMERO_ENTERO = 21;
var NUMERO_DECIMAL = 22;
var EMAIL = 30;
var URL = 31;
var ARCHIVO = 40;
var USUARIO = 50;
var CONTRASENA = 51;

var enviando = 0;

function validar(formulario) {

	//uncomment to submit form directly for PHP validation testing purposes
	//return enviar(formulario);
	
	var id = document.getElementById("id");
	actualizar = id.value;
	if(document.getElementById("estado_borrador")) {
		var borrador = document.getElementById("estado_borrador");
	} else {
		var borrador = 0;
	}
	if(borrador && borrador.checked) {
		enviar(formulario);
		return;
	}

	var listaErrores = document.getElementById("lista_errores");
	limpiarNodo(listaErrores);

	for(var i in camposValidos) {
		
		tipo = Math.abs(camposValidos[i]);
		obligatorio = (camposValidos[i] > 0);
		
		valido = 0;
		
		if(tipo == RADIO) {
			if(obligatorio) {
				error = E_RADIO;
				radios = document.getElementsByName(i);
				nombre = i;
				n = radios.length;
				for(var i = 0; i < n; i++) {
		      if(radios[i].checked) {
		      	valido = 1;
		      	break;
		      }
		    }
		  } else {
		  	valido = 1;
		  }
		} else {
			if(!(campo = document.getElementById(i))) continue;
			nombre = campo.name;
			
			if((tipo == COMBO) || (tipo == COMBO_ESTATICO) || (tipo == COMBO_MULTIPLE)) {
				valor = parseInt(campo.selectedIndex);
				valido = (!isNaN(valor) && valor);			
				if(!valido && obligatorio) {
					error = E_COMBO;
				} else {
					valido = 1;
				}
			} else {	
				
				if(campo.getAttribute("type") != "file")
					this.campo.value = trim(this.campo.value);		
					
				vacio = (campo.value.length == 0);
	
				if(vacio) {
					if(obligatorio && !(actualizar && ((tipo == CONTRASENA) || (tipo == ARCHIVO))) && (tipo > 0)) {
						error = E_VACIO;
					} else {
						valido = 1;
					}
				} else {
					switch(tipo) {
						case ALPHANUM:
						case ARCHIVO:
							valido = 1;
							break;
						case ALPHA:
							valido = (campo.value.search('^[a-z A-Z]+$') != -1);
							break;
						case NUMERO_NATURAL:
							valido = (campo.value.search('[^0-9]') == -1);
							break;
						case NUMERO_ENTERO:
							valido = (campo.value.search('^-?[0-9]+$') != -1);
							break;
						case NUMERO_DECIMAL:
							valido = (campo.value.search('[^0-9.-]') == -1);
						case EMAIL:
							valido = (campo.value.search('^[a-z][a-z0-9\-_.]+[@][a-z0-9\-_.]+[.][a-z]{2,3}$') != -1);
							break;
						case URL:
							uri = campo.value.toLowerCase();
							if(uri.search('^http://') == -1)
								campo.value = 'http://'+campo.value;
							valido = 1;
							break;
						case CONTRASENA:
							campo2 = document.getElementById(campo.id+'_confirmar');
							valido = ((campo.value.length > 3) && (campo.value == campo2.value));
							break;
						case USUARIO:
							valido = (campo.value.search('[\w]{4,16}') == -1);
							break;
						default:
							valido = 1;
					}
		
					if(!valido) {
						switch(tipo) {
							case NUMERO_NATURAL:
								error = E_NUM_NATURAL;
								break;
							case NUMERO_ENTERO:
								error = E_NUM_ENTERO;
								break;
							case NUMERO_DECIMAL:
								error = E_NUM_REAL;
								break;
							case ALPHA:
								error = E_ALPHA;
								break;
							case EMAIL:
								error = E_EMAIL;
								break;
							case CONTRASENA:
								error = E_CONTRASENA;
								break;
							case USUARIO:
								error = E_USUARIO;
								break;
						}
					}
				}
			}
		}
		
		if(!valido) {
			error = error.replace('%s', formatoNombre(nombre));
			listaErrores.appendChild(crearLI(error));
		}
	}
	formValido = !listaErrores.getElementsByTagName("li").length;
	if(!formValido)	window.scroll(0,0);

	return formValido;
	/**/
}

function enviar(formulario) {
	//formulario.boton.setAttribute('disabled','disabled');
	if(!enviando) formulario.submit();
	enviando = 1;
}
function trim(str) {
	return str.replace(/^\s*|\s*$/g,"");
}
/* DOM */
function crearLI(txt){
	var objLI = document.createElement('li');
	objLI.appendChild( document.createTextNode( txt ) );
	return objLI;
}
function limpiarNodo(nodo){
	while( nodo.hasChildNodes() ) nodo.removeChild(nodo.firstChild);
}
function formatoNombre(nombre) {
	nombre = nombre.replace(/(.*)\[(.*)\]/g,'$2');
	if(nombre.indexOf('id_') === 0)
		nombre = nombre.charAt(3).toUpperCase()+nombre.replace(/_/g,' ').substr(4);
	else if(nombre.indexOf('img_') === 0)
		nombre = nombre.charAt(4).toUpperCase()+nombre.replace(/_/g,' ').substr(5);
	else
		nombre = nombre.charAt(0).toUpperCase()+nombre.replace(/_/g,' ').substr(1);
	return nombre;
}