﻿
var checkObjects		= new Array(); 	// Array containing the objects to validate.
var errors				= ""; 			// Variable holding the error message.
var returnVal			= false; 		// General return value. The validated form will only be submitted if true.
var language			= new Array(); 	// Language independent error messages!
var selectecLanguage	= "spanish";	// Choose between "english", "danish", "dutch", "french", "spanish", "russian", "portuguese"
language.spanish		= new Array();

// Error messages in Spanish: Thanks to Edu <edu@macneto.com>
	language.spanish.header		= "Se ha producido un error:"
	language.spanish.start		= "->";
	language.spanish.field		= " El campo ";
	language.spanish.require	= " es obligatorio";
	language.spanish.min		= " y debe contener al menos ";
	language.spanish.max		= " y no debe contener m\341s de ";
	language.spanish.minmax		= " y no m\341s de ";
	language.spanish.chars		= " caracteres";
	language.spanish.num		= " y debe contener un n\372mero";
	language.spanish.email		= " debe contener una direcci\363n de e-mail v\341lida";

function init(){
	define('nombre','string','Nombre',3,100);
	define('apellido','string','Apellido',3,100);	
	define('email','email','E-mail');
	define('telefono','num','Telfono',6);
	define('empresa','string','Empresa');
	define('domicilio','string','Domicilio',3,100);
	define('coment','string','Comentario',10,1000);
}

// -----------------------------------------------------------------------------
// define - Call this function in the beginning of the page. I.e. onLoad.
//
// n = name of the input field (Required)
// type= string, num, email (Required)
// min = the value must have at least [min] characters (Optional)
// max = the value must have maximum [max] characters (Optional)
// d = (Optional)
// -----------------------------------------------------------------------------
function define(n,type,HTMLname,min,max,d){
	var p;
	var i;
	var x;
	if(!d) d=document;
	if((p=n.indexOf("?"))>0&&parent.frames.length){
    	d=parent.frames[n.substring(p+1)].document;
    	n=n.substring(0,p);
    }
	if(!(x=d[n])&&d.all) x=d.all[n];
	
  	for (i=0;!x&&i<d.forms.length;i++){
  		x=d.forms[i][n];
  	}
	for(i=0;!x&&d.layers&&i<d.layers.length;i++){
		x=define(n,type,HTMLname,min,max,d.layers[i].document);
		return x;		
	}
	
	// Create Object. The name will be "V_something" where something is the "n" parameter above.
	eval("V_"+n+" = new formResult(x,type,HTMLname,min,max);");
	checkObjects[eval(checkObjects.length)] = eval("V_"+n);
}

// -----------------------------------------------------------------------------
// formResult - Used internally to create the objects
// -----------------------------------------------------------------------------
function formResult(form,type,HTMLname,min,max){
	this.form = form;
	this.type = type;
	this.HTMLname = HTMLname;
	this.min  = min;
	this.max  = max;
}

// -----------------------------------------------------------------------------
// validate - Call this function onSubmit and return the "returnVal". (onSubmit="validate();return returnVal;")
// -----------------------------------------------------------------------------
function validate(){
	if(checkObjects.length>0){
		errorObject = "";
	
		for(i=0;i<checkObjects.length;i++){
			validateObject 			= new Object();
			validateObject.form 	= checkObjects[i].form;
			validateObject.HTMLname = checkObjects[i].HTMLname;
			validateObject.val 		= checkObjects[i].form.value;
			validateObject.len 		= checkObjects[i].form.value.length;
			validateObject.min 		= checkObjects[i].min;
			validateObject.max 		= checkObjects[i].max;
			validateObject.type 	= checkObjects[i].type;
			
			//Debug alert line
			//alert("validateObject: "+validateObject+"\nvalidateObject.val: "+validateObject.val+"\nvalidateObject.len: "+validateObject.len+"\nvalidateObject.min,validateObject.max: "+validateObject.min+","+validateObject.max+"\nvalidateObject.type: "+validateObject.type);
			
			// Checking input. If "min" and/or "max" is defined the input has to be within the specific range
			if(validateObject.type == "num" || validateObject.type == "string"){
				if((validateObject.type == "num" && validateObject.len <= 0) || (validateObject.type == "num" && isNaN(validateObject.val))){errors+=language[selectecLanguage].start+language[selectecLanguage].field+validateObject.HTMLname+language[selectecLanguage].require+language[selectecLanguage].num+"\n";
				} else if (validateObject.min && validateObject.max && (validateObject.len < validateObject.min || validateObject.len > validateObject.max)){errors+=language[selectecLanguage].start+language[selectecLanguage].field+validateObject.HTMLname+language[selectecLanguage].require+language[selectecLanguage].min+validateObject.min+language[selectecLanguage].minmax+validateObject.max+language[selectecLanguage].chars+"\n";
				} else if (validateObject.min && !validateObject.max && (validateObject.len < validateObject.min)){errors+=language[selectecLanguage].start+language[selectecLanguage].field+validateObject.HTMLname+language[selectecLanguage].require+language[selectecLanguage].min+validateObject.min+language[selectecLanguage].chars+"\n";
				} else if (validateObject.max && !validateObject.min &&(validateObject.len > validateObject.max)){errors+=language[selectecLanguage].start+language[selectecLanguage].field+validateObject.HTMLname+language[selectecLanguage].require+language[selectecLanguage].max+validateObject.max+language[selectecLanguage].chars+"\n";
				} else if (!validateObject.min && !validateObject.max && validateObject.len <= 0){errors+=language[selectecLanguage].start+language[selectecLanguage].field+validateObject.HTMLname+language[selectecLanguage].require+"\n";
				}
			} else if(validateObject.type == "email"){
				// Checking existense of "@" and ".". The length of the input must be at least 5 characters. The "." must neither be preceding the "@" nor follow it.
				if((validateObject.val.indexOf("@") == -1) || (validateObject.val.charAt(0) == ".") || (validateObject.val.charAt(0) == "@") ||(validateObject.len < 6) || (validateObject.val.indexOf(".") == -1) || (validateObject.val.charAt(validateObject.val.indexOf("@")+1) == ".") || (validateObject.val.charAt(validateObject.val.indexOf("@")-1) == ".")){errors+=language[selectecLanguage].start+language[selectecLanguage].field+validateObject.HTMLname+language[selectecLanguage].email+"\n";}
			}
		}
	}
	// Used to set the state of the returnVal. If errors -> show error messages in chosen language
	if(errors){
		alert(language[selectecLanguage].header.concat("\n"+errors));
		errors = "";
		returnVal = false;
	} else {
		returnVal = true;
	}
}

/**
 * DHTML email validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
 */

function echeck(str) {

		var at="@"
		var dot="."
		var lat=str.indexOf(at)
		var lstr=str.length
		var ldot=str.indexOf(dot)
		if (str.indexOf(at)==-1){
		   alert("Dirección de e-mail inválida.")
		   return false
		}

		if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
		   alert("Dirección de e-mail inválida.")
		   return false
		}

		if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		    alert("Dirección de e-mail inválida.")
		    return false
		}

		 if (str.indexOf(at,(lat+1))!=-1){
		    alert("Dirección de e-mail inválida.")
		    return false
		 }

		 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		    alert("Dirección de e-mail inválida.")
		    return false
		 }

		 if (str.indexOf(dot,(lat+2))==-1){
		    alert("Dirección de e-mail inválida.")
		    return false
		 }
		
		 if (str.indexOf(" ")!=-1){
		    alert("Dirección de e-mail inválida.")
		    return false
		 }

 		 return true					
	}

function ValidateForm(){
	var emailID=document.formulario.email
	
	if ((emailID.value==null)||(emailID.value=="")){
		alert("Por favor, Ingrese su dirección de e-mail.")
		emailID.focus()
		return false
	}
	if (echeck(emailID.value)==false){
		emailID.value=""
		emailID.focus()
		return false
	}
	return true
 }

function limpia_campos()
{
	document.formulario.nombre.text == '';
	document.formulario.apellido.text == '';
	document.formulario.email.text == '';
	document.formulario.telefono.text == '';
	document.formulario.empresa.text == '';
	document.formulario.domicilio.text == '';
	document.formulario.coment.text == '';
}


function chequearVacios()
{
if (document.formulario.nombre.value == ''){
	alert('Campo Nombre es requerido.')
	document.formulario.nombre.focus()
	return false }
else
if (document.formulario.apellido.value == ''){
	alert('Campo Apellido es requerido.')
	document.formulario.apellido.focus()
	return false }
else
if (ValidateForm(document.formulario.email.value)==false){
	document.formulario.email.focus()
	return false }
else
if (document.formulario.telefono.value == ''){
	alert('Campo Telefono es requerido.')
	document.formulario.telefono.focus()
	return false }
else
if (document.formulario.coment.value == ''){
	alert('Campo Comentario o Consulta es requerido.')
	document.formulario.coment.focus()
	return false }
else{
	document.formulario.submit()
	return true }
}


// Inserta aquí el mensaje que aparecerá cuando se pinche con el botón derecho
var mensaje = "BOTÓN DERECHO DESACTIVADO";
function derecho(e)
{
   if (navigator.appName == 'Netscape' && e.which == 3)
      alert(mensaje);
   else if (navigator.appName == 'Microsoft Internet Explorer' && event.button==2)
      alert(mensaje);
}
document.onmousedown = derecho;
