/*
function validaCampos(form, Campos)
Recibe el objeto de la forma y un string con los campos de la siguiente forma
nombreCampo1,Nombre real del campo1,tipoValidacionCampo1;
nombreCampon,Nombre real del campon,tipoValidacionCampon

donde tipoValidacionCampo puede tener uno de estos valores
R = Requerido
RisNum = Requerido con valor numérico
RisMail = Requerido con un mail válido
Retorna false y un mensaje explicando al usuario cual fue el error, enfoncándolo
en el lugar donde ocurrió
*/
function validaCampos(form,campos)
{
	//Divide el string en los campos
	arrayCampos = campos.split(";");
	//Recorre los campos encontrados
	for(i = 0;i < arrayCampos.length;i++)
	{
		//Divide las opciones para cada campo
		arrayInfo = arrayCampos[i].split(",");
		//Cada campo tiene una información básica que se asigna a las siguientes variables
		nombreCampo = arrayInfo[0];
		textoCampo = arrayInfo[1];
		validarCampo = arrayInfo[2];

		//Cada campo lo convierte en un objeto
		objCampo = eval("form." + nombreCampo);
		
		//alert(i + " " + nombreCampo + " " + objCampo.type);
		//Si es un RisEqual, valida el valor del segundo campo
		if(validarCampo == "isEqual")
		{
			nombreCampo2 = arrayInfo[3];
			objCampo2 = eval("form." + nombreCampo2);
		}
		//Si el campo es password
		if(objCampo.type == 'password')
		{
			//El campo es requerido
			if(validarCampo == 'R')
			{
				if(objCampo.value == "")
				{
					alert(textoCampo + " es requerido.");
					objCampo.focus();
					return false;
				}
			}
			else if(validarCampo == "RisNum") //El campo es Requerido y Numérico
			{
				//Valida que tenga información el campo
				if(objCampo.value == "")
				{
					alert(textoCampo + " es requerido.");
					objCampo.focus();
					return false;
				}
				else
				{
					//Valida que el valor que contiene es numérico
					if(isNaN(objCampo.value))
					{
						alert(textoCampo + " debe contener un número.");
						objCampo.focus();
						objCampo.select();
						return false;
					}
				}
			}
			else if(validarCampo == "isEqual")
			{
				if(objCampo.value != objCampo2.value)
				{
					alert(textoCampo + " no coinciden.");
					objCampo2.focus();
					objCampo2.select();
					return false;
				}
			}
		}
		//Si el campo es de tipo text
		if(objCampo.type == 'text' || objCampo.type == 'hidden')
		{
			//El campos es requerido
			if(validarCampo == 'R')
			{
				if(objCampo.value == "")
				{
					alert(textoCampo + " es requerido.");
					objCampo.focus();
					return false;
				}
			}
			else if(validarCampo == "RisNum") //El campo es Requerido y Numérico
			{
				//Valida que tenga información el campo
				if(objCampo.value == "")
				{
					alert(textoCampo + " es requerido.");
					objCampo.focus();
					return false;
				}
				else
				{
					//Valida que el valor que contiene es numérico
					if(isNaN(objCampo.value))
					{
						alert(textoCampo + " debe contener un número.");
						objCampo.focus();
						objCampo.select();
						return false;
					}
				}
			}
			else if(validarCampo == "RisMail") //El campo es requerido y debe contener un mail
			{
				//Valida que tenga información el campo
				if(objCampo.value == "")
				{
					alert(textoCampo + " es requerido.");
					objCampo.focus();
					return false;
				}
				else
				{
					//Valida que contenga un mail valido
					if(!email(objCampo))
					{
						alert(textoCampo + " debe contener un mail válido.");
						objCampo.focus();
						objCampo.select();
						return false;
					}
				}
			}
			else if(validarCampo == "isEqual")
			{
				if(objCampo.value != objCampo2.value)
				{
					alert(textoCampo + " no coinciden.");
					objCampo2.focus();
					objCampo2.select();
					return false;
				}
			}
			else if(validarCampo == "isNum")
			{
				if(objCampo.value != "")
				{
					//Valida que el valor que contiene es numérico
					if(isNaN(objCampo.value))
					{
						alert(textoCampo + " debe contener un número.");
						objCampo.focus();
						objCampo.select();
						return false;
					}
				}
			}
		}
		//Valida un select de tipo selección única
		if(objCampo.type == 'select-one')
		{
			//Aquí valida que el valor seleccionado sea diferente de vacío
			if(validarCampo == "R")
			{
				if(objCampo.options[objCampo.selectedIndex].value == "")
				{
					alert(textoCampo + " es obligatorio.");
					objCampo.focus();
					return false;
				}
			}
		}
		//Valida un select de tipo selección multiple
		if(objCampo.type == 'select-multiple')
		{
			//Aquí valida que el valor seleccionado sea diferente de vacío
			if(validarCampo == "R")
			{
				if(objCampo.selectedIndex == -1)
				{
					alert(textoCampo + " es obligatorio.");
					objCampo.selectedIndex = 0;
					objCampo.focus();
					return false;
				}
			}
		}
		//Valida un textarea
		if(objCampo.type == 'textarea')
		{
			//Valida que contenga un valor el textarea
			if(validarCampo == "R")
			{
				if(objCampo.value == "")
				{
					alert(textoCampo + " es obligatorio.");
					objCampo.focus();
					return false;
				}
			
			}
		}
		
		//Valida un radio
        if(typeof objCampo.length != "undefined")
        {
			objChecked = false;
			//alert(objCampo[0].type);
			if(objCampo[0].type == "radio"  || objCampo[0].type == "checkbox")
			{
				if(validarCampo == "R")
				{
					objChecked = false;
					//Recorre los elementos para verificar que haya escogido por lo menos 1				
					for (i = 0; i < objCampo.length; i++)
					{
						if(objCampo[i].checked)
						{
							return true;
						}
					}
					if(!objChecked)
					{
						alert(textoCampo + " es requerido.");
						//objCampo[0].focus();
						return false;
					}
				}
			}
        }
        else
        {
			if(objCampo.type == "radio" || objCampo.type == "checkbox")
			{
				if(!objCampo.checked)
				{
					alert(textoCampo + " es requerido.");
					//objCampo.focus();
					return false;
				}
			}
        }
		//alert(objCampo.type);
	}
	return true;
}

function email(emailInputBox)
{
	var emailString = emailInputBox.value;
    var addressIsValid = false;
    var invalidPatterns = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/;

    // Email Address Pattern Rules Enforced by the following pattern.
    // One or more characters before the "@"
    // An optional "[", because user@[255.255.255.0] is a valid e-mail
    // A sequence of letters, numbers, and periods, which are all
    // valid domain or IP address characters
    // A period followed by a 2-3 letter suffix
    // An optional "]"

    var validPatterns = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;

    // If browser supports regular expressions.

    if (window.RegExp)
    {
    	if (!invalidPatterns.test(emailString) && validPatterns.test(emailString))
        {
        	addressIsValid = true;
        }
        else
        {
        	addressIsValid = false;
        }
	}
    else
    {
    	if(emailString.indexOf("@") >= 0) addressIsValid = true;
	}

    if (!addressIsValid)
    {
    	alert("\"" + emailString + "\" Email incorrecto.");
        // The next two commands do not seem to work when this routine
        // is called from the OnChange event.
        emailInputBox.focus();
        emailInputBox.select();
	}
    return addressIsValid;
}
