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, 'LV_invalid');
	 agregarClase(obj, 'LV_invalid_field');
	
}

function limpiarMensaje(obj){
	eliminarSpan(obj);
	eliminarClase(obj);
}

function crear_span(obj, msgError){
	eliminarSpan(obj);
	var span = document.createElement('div');
	var gko = navigator.userAgent.toLowerCase();
	if (gko.indexOf('gecko')!=-1) {//si soporta gecko, es Mozilla, Netscape, Safari, etc	
	span.setAttribute("style","color:#FE3D1B");
	}
	else {//es I Explroer	
	span.style.setAttribute('cssText', "color:#FE3D1B");
	}
	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 = '';
}



