/*
	AUTOR: I.S.C. IVAN DE JESUS MARQUEZ HERRERA
	CONTACTO: flamaspeed@hotmail.com
	
	VALIDACION DE FORMULARIOS "FLAMASPPED VALIDATIONS"
	
	SI USAS ESTA LIBRERIA POR FAVOR NO BORRES ESTE COMENTARIO.
	PUEDES USARLO EN DONDE LO DESEES.
	
	PARA USARLO OCUPAS CREAR LOS SIGUIENTES ESTILOS
	
	Color del texto
	.texto_invalido{
		color: #FF0000;
	}
	Color del input
	.input_invalido{
		border: 1px solid #FF0000;
	}
*/
function validacion (campo, tipoValidacion, msgError){

	obj = document.getElementById (campo);

	var igualPos = tipoValidacion.search("=");
    var  comando  = "";
    var  cmdValor = "";

	if(igualPos >= 0){
		 comando  = tipoValidacion.substring(0,igualPos);
		 cmdValor = tipoValidacion.substr(igualPos+1);
    } else {
     	comando = tipoValidacion;
    }

	if (!comando || comando.length==0){
		alert('Error de sintaxis: especifica el tipo de validación: '+tipoValidacion);
		return false;
	}else if (!obj){
		alert('Error de sintaxis: especifica el campo a validar: '+campo);
		return false;
	}


	switch(comando){
		/*CAMPOS VACIOS / CAMPOS REQUERIDOS*/
		case 'requerido':
		case 'req':
		case 'require':
			if(!msgError || msgError.length==0)
				msgError = 'El campo es requerido';

			if ( !require (obj) ){
				insertarMensaje( obj, crear_span(obj, msgError) );
				return false;
			}else
				limpiarMensaje(obj);
		break;
		/*LONGITUD DEFINIDA*/
        case "igual":
		case "equal":
			if(!msgError || msgError.length==0)
				msgError = 'La longitud de la cadena debe ser de '+cmdValor+' caracteres';

			if ( !equal(obj, cmdValor) ){
				insertarMensaje( obj, crear_span(obj, msgError) );
				return false;
			}else
				limpiarMensaje(obj);
		break;
		/*LONGITUD MINIMA DE LA CADENA*/
		case "longitudminima":
		case "lonmin":
		case "minlength":
        case "minlen":
			if(!msgError || msgError.length==0)
				msgError = 'El mínimo de caracteres es: '+cmdValor;

			if ( !minlen(obj, cmdValor) ){
				insertarMensaje( obj, crear_span(obj, msgError) );
				return false;
			}else
				limpiarMensaje(obj);
		break;
		/*LONGITUD MAXIMA DE LA CADENA*/
		case "longitudmaxima":
		case "lonmax":
		case "maxlength":
        case "maxlen":
			if(!msgError || msgError.length==0)
				msgError = 'El maximo de caracteres es: '+cmdValor;

			if ( !maxlen(obj, cmdValor) ){
				insertarMensaje( obj, crear_span(obj, msgError) );
				return false;
			}else
				limpiarMensaje(obj);
		break;
		/*SOLO NUMEROS*/
		case "digitos":
		case "digito":
        case "digits":
		case "digit":
			if(!msgError || msgError.length==0)
				msgError = 'Solo se permiten digitos (Sin punto decimal)';

			if ( !digitos(obj) ){
				insertarMensaje( obj, crear_span(obj, msgError) );
				return false;
			}else
				limpiarMensaje(obj);
		break;
		/*NUMEROS CON PUNTO DECIMAL*/
        case "numerico":
		case "num":
		case "numeric":
			if(!msgError || msgError.length==0)
				msgError = 'Solo se permiten numeros';

			if ( !numerico(obj) ){
				insertarMensaje( obj, crear_span(obj, msgError) );
				return false;
			}else
				limpiarMensaje(obj);
		break;
		/*NUMEROS Y LETRAS*/
		case "alfanumerico":
		case "alnum":
        case "alphanumeric":
			if(!msgError || msgError.length==0)
				msgError = 'Solo se permiten numeros y letras';

			if ( !alfanumerico(obj) ){
				insertarMensaje( obj, crear_span(obj, msgError) );
				return false;
			}else
				limpiarMensaje(obj);
		break;
		/*SOLO LETRAS*/
		case "alfabetico":
		case "alphabetic":
        case "alpha":
			if(!msgError || msgError.length==0)
				msgError = 'Solo se permiten letras';

			if ( !alfabetico(obj) ){
				insertarMensaje( obj, crear_span(obj, msgError) );
				return false;
			}else
				limpiarMensaje(obj);
		break;
		/*SOLO NUMEROS*/
        case "correo":
		case "mail":
		case "email":
			if(!msgError || msgError.length==0)
				msgError = 'Verique el correo electrónico';

			if ( !validarMail(obj.value) ){
				insertarMensaje( obj, crear_span(obj, msgError) );
				return false;
			}else
				limpiarMensaje(obj);
		break;

		default:
			alert('Comando incorrecto: '+comando);
			return false;
		break;

	}

	return true;
}




/*************************************************
					VALIDACIONES
**************************************************/

function require (obj){
	if (obj.value == '' || obj.value.length == 0)
		return false;
	else
		return true;
}

function equal(obj, valor){
	if(eval(obj.value.length) !=  eval(valor))
		return false;
	else
		return true;
}

function minlen(obj, valor){
	if(eval(obj.value.length) <  eval(valor))
		return false;
	else
		return true;
}

function maxlen(obj, valor){
	if(eval(obj.value.length) >  eval(valor) || obj.value.length == 0) {
		return false;
	}
	else
		return true;
}

function digitos(obj){
	var posCaracter = obj.value.search("[^0-9]");
	if(posCaracter >= 0 || obj.value.length == 0)
	 	return false;
	else
		return true;
}

function numerico(obj){
	if(isNaN(obj.value) || obj.value.length == 0)
	 	return false;
	else
		return true;
}

function alfanumerico(obj){
	var posCaracter = obj.value.search("[^A-Za-z0-9 áéíóúÁÉÍÓÚñÑ@,;.:?¿!¡\r\n]");
	if(posCaracter >= 0 || obj.value.length == 0)
	 	return false;
	else
		return true;
}

function alfabetico(obj){
	var posCaracter = obj.value.search("[^A-Za-z áéíóúÁÉÍÓÚñÑ@,;.:?¿!¡\r\n]");
	if(posCaracter >= 0 || obj.value.length == 0)
	 	return false;
	else
		return true;
}

function validarMail(email)
{
// a very simple email validation checking.
// you can add more complex email checking if it helps
    if(email.length <= 0)
	{
	  return false;
	}
    var splitted = email.match("^(.+)@(.+)$");
    if(splitted == null) return false;
    if(splitted[1] != null )
    {
      var regexp_user=/^\"?[\w-_\.]*\"?$/;
      if(splitted[1].match(regexp_user) == null) return false;
    }
    if(splitted[2] != null)
    {
      var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
      if(splitted[2].match(regexp_domain) == null)
      {
	    var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
	    if(splitted[2].match(regexp_ip) == null) return false;
      }// if
      return true;
    }
return false;
}


/*************************************************
	FUNCIONES QUE AGREGAN LOS MENSAJES DE ERROR
**************************************************/
function insertarMensaje(obj,elementoInsertar){
	 obj.parentNode.appendChild(elementoInsertar);
	 agregarClase(elementoInsertar, 'texto_invalido');
	 agregarClase(obj, 'input_invalido');
}

function limpiarMensaje(obj){
	eliminarSpan(obj);
	eliminarClase(obj);
}

function crear_span(obj, msgError){
	eliminarSpan(obj);
	var span = document.createElement('div');
	var textNode = document.createTextNode(msgError);
	span.appendChild(textNode);
	return span;
}

function eliminarSpan(obj){
	var nextObj;
	elements = obj.parentNode.childNodes;
	long_elements = elements.length;
	for(i=0;i<long_elements;i++){
		if(elements[i].nodeName=='DIV'){
			nextObj = elements[i];
			break;
		}

	}
	if(nextObj) obj.parentNode.removeChild(nextObj);
}

function agregarClase(obj, clase){
	eliminarClase(obj);
	obj.className = clase;
}

function eliminarClase(obj){
     obj.className = '';
}