/*
 * SCRIPT PARA VALIDAR UN FORMULARIO USANDO UN DICCIONARIO DE EXPRESIONES REGULARES
 * Y ENVIARLO VIA AJAX
 * 
 *  ELABORADO POR ALEXEI BETANCOURT BRITO
 *  DUDAS O COMENTARIOS A alexeib2@gmail.com
 *  BASADO EN EL PRINCIPIO KISS (http://es.wikipedia.org/wiki/Principio_KISS)
 *  
 *  LA FUNCION validar_campo VALIDA UN CAMPO CUANDO OCURRE UN EVENTO ONBLUR
 *  	DETALLE DE LOS PARAMETROS:
 *  	obj -> IDENTIFICADOR DEL CAMPO A VALIDAR
 *  	tipo -> TIPO DE CAMPO (TEXTO, USUARIO, CLAVE, CORREO, NUMERO, CI, EDAD, ETC)
 *  LA FUNCION validar_formulario VALIDA EL FORMULARIO ANTES DE SER ENVIADO
 *  	DETALLE DE LOS PARAMETROS:
 *  	obj -> IDENTIFICADOR DEL FORMULARIO
 *  LA FUNCION enviar_formulario REALIZA EL SUBMIT DEL FORM MEDIANTE AJAX
 *  	DETALLE DE LOS PARAMETROS:
 *  	div -> DIV CONTENEDOR
 *  	url -> URL DEL SCRIPT
 *  	jsreturn -> ESPECIFICA SI EL RESULTADO DE LA EJECUCION SERA UN JAVASCRIPT (TRUE O FALSE)
 *
 *	EL SCRIPT REQUIERE EL FICHERO MD5.JS PARA LA ENCRIPTACION DEL USUARIO Y LA CLAVE 
*/

// CREACION DEL DICCIONARIO DE EXPRESIONES REGULARES
var _mixtoer = /^[A-Za-z0-9_.-\/]+/;
var _nombreer = /^[a-zA-Z\s]+$/;
var _textoer = /[\w \r\n \t \s]+/;
var _decimaleser = /^[0-9\.,]+$/;
var _numeroer = /^[0-9]+$/;
var _edader = /^[0-9]{3}$/;
var _cier = /^[0-9]{11}$/;
var _correoer = /^\w+([\.-_]?\w+)*@\w+([\.-_]?\w+)*(\.\w{2,3})+$/;
var _usuarioer = /^[A-Za-z0-9_.-]{8,10}$/;
var _claveer = /^[A-Za-z0-9_.-]{8,10}$/;

// DECLARACION DE VARIABLES DE USO GENERAL
var _tipoNavegador = navigator.appName;
var _validado;
var _atributo;
var _parametros;

//DEFINICION DEL ATRIBUTO SEGUN EL TIPO DE NAVEGADOR
if(_tipoNavegador == "Microsoft Internet Explorer"){
	_atributo = "className";
}else{
	_atributo = "class";
}

//FUNCION DE VALIDACION DEL CAMPO CON EL EVENTO ONBLUR
function validar_campo(obj, tipo) {
	_objID = obj.id;
	_expreg = "_" + tipo + "er";
	_test = eval(_expreg).test(obj.value);
	if(_test == false){
		obj.setAttribute(_atributo ,'error');
		_validado = false;
		return(false);
	} else {
		obj.setAttribute(_atributo,'ok');
		_validado = true;
	}
}

function validar_formulario(obj) {
	//OBTENEMOS LA CANTIDAD DE LEMENTOS DEL FORMULARIO Y INICIAlIZAMOS _estado EN FALSE
	var _elementos = obj.length;
	var _estado = false;
	//SI LA VALIDACION DE LOS CAMPOS ES CORRECTA
	if(_validado == true){
		//PARA CADA ELEMENTO DEL FORMULARIO
		for(i = 0; i < _elementos; i++){
		//OBTENEMOS EL NOMBRE DEL CAMPO A PARTIR DE SU ID O NOMBRE
			_nombre = obj.elements[i].id;
			if(!_nombre){
				_nombre = obj.elements[i].name;
			}
			//OBTENEMOS EL TIPO DE CAMPO
			_tipoCampo = obj.elements[i].type;
			/*
			 * OBTENEMOS EL ULTIMO CARACTER PARA SABER SI EL CAMPO ES REQUERIDO O NO
			 * SIEMPRE Y CUANDO EL CAMPO NO SEA UN SELECT MULTIPLE
			 */ 
			 if(_tipoCampo != 'select-multiple'){
			 	_longitud = _nombre.length - 1;
				_requerido = _nombre.substr(_longitud);	
			 }else{
			 	if(_nombre.lastIndexOf("]") != -1){
					_longitud = _nombre.length - 3;
					_requerido = _nombre.substr(_longitud, 1);
				}
			 }
			//SI NO ES UN BOTON DE CUALQUIER TIPO INTENTAMOS LA VALIDACION
			if(_tipoCampo != 'reset' && _tipoCampo != 'button' && _tipoCampo != 'submit'){ 
				//SI EL TIPO DE CAMPO ES UN SELECT
				if(_tipoCampo == 'select-one'){
					_formulario = obj.id;
					_indice = document[_formulario][_nombre].selectedIndex;
					_valor = document[_formulario][_nombre].options[_indice].value;
					if(_requerido == "r"){
						if(_valor){
							if(!_parametros){
								_parametros = _nombre + '=' + _valor; 
							}else{
								_parametros = _parametros + '&' + _nombre + '=' + _valor;
							}
							_estado = true;
						}else{
							_estado = false;
						}
					}else{
						if(!_parametros){
							_parametros = _nombre + '=' + _valor; 
						}else{
							_parametros = _parametros + '&' + _nombre + '=' + _valor;
						}
						_estado = true;
					}
				}
				//SI EL TIPO ES UN SELECT MULTIPLE
				if(_tipoCampo == 'select-multiple'){
					_array = new Array();
					_formulario = obj.id;
					while (document[_formulario][_nombre].selectedIndex != -1){ 
						_valor = document[_formulario][_nombre].options[document[_formulario][_nombre].selectedIndex].value;
						_array.push(_valor);
						document[_formulario][_nombre].options[document[_formulario][_nombre].selectedIndex].selected = false;
					}
					_valor = _array.join('-');
					if(_requerido == "r"){
						if(_valor){
							if(!_parametros){
								_parametros = _nombre + '=' + _valor; 
							}else{
								_parametros = _parametros + '&' + _nombre + '=' + _valor;
							}
							_estado = true;
						}else{
							_estado = false;
						}
					}else{
						if(!_parametros){
							_parametros = _nombre + '=' + _valor; 
						}else{
							_parametros = _parametros + '&' + _nombre + '=' + _valor;
						}
						_estado = true;
					} 
				}
				//SI EL TIPO DE CAMPO ES UN CAMPO DE TEXTO
				if(_tipoCampo == 'text' || _tipoCampo == 'password'){
					//SI EL CAMPO ES EL USUARIO O LA CLAVE LO ENCRIPTAMOS CON MD5
					if(_nombre == "usuario_r" || _nombre == "clave_r"){
						_valor = hex_md5(obj.elements[i].value);
					}else{
						_valor = obj.elements[i].value;
					}					
					//SI EL CAMPO ES REQUERIDO
					if(_requerido == "r"){
						//SI EL CAMPO CONTIENE UN VALOR
						if(_valor){
							//SI NO SE HAN INICIALIZADO LOS PARAMETROS
							if(!_parametros){
								_parametros = _nombre + '=' + _valor; 
							}else{
								_parametros = _parametros + '&' + _nombre + '=' + _valor;
							}							
							_estado = true;
						}else{
							_estado = false;
						}
					}else{
						if(!_parametros){
							_parametros = _nombre + '=' + _valor; 
						}else{
							_parametros = _parametros + '&' + _nombre + '=' + _valor;
						}						
						_estado = true;
					}
				}
			}			
		}
		if(_estado == true){
			return true;
		}else{
			return false;
		}
	} else {
		return(false);
	}
}

//FUNCION PARA EL ENVIO DEL FORM CON AJAX
function enviar_formulario(div, url, jsreturn) {
	Cargar(div, url, 'post', _parametros, jsreturn);
}