/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Script valida_form_back.js, 29/09/2000, Netjuice-Network CATALUNYA, omanzano@netjuice-network.com                        //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/* Declaración de funciones.

Init()								// Función comodín donde se inicializará cualquier elemento del script, url es la
				   			     	// dirección de destino, donde apunta el formulario.
isEmpty(s)							// Verifica si s es un valor vacio.
isEmptyNotWhitespace(s,obj)			// Verifica si s esta vacio sin espacios en blanco
isInteger(s)						// Verifica si s es un entero y devuelve true o false.
isDigit(c)							// Verifica si c es un dígito en un rango de "0" a "9". 
isAlphabetic(s,obj)					// Verifica si s es una letra y en caso false inicializa el campo obj a "".
isLetter(c)							// Verifica si c es un carácter aceptado dentro de un rango (a-z)(A-Z)(')(-)...
									// y el espacio que no sea principio de cadena.
isLetterOrNumber(c)					// Verifica que c se encuentre en un rango de LETRAS y NÚMEROS
isWhitespace(s)						// Verifica si s es un espacio en blanco.
isMail(obj)							// Verifica si es un email con sintaxis válida.
isWhiteSpacePos(c,pos_ini,pos_fin)	// Verifica de c si entre la pos_ini y pos_fin hay un espacio en blanco.
isTelefon(obj)						// Verifica si obj es un número de teléfono.
									// Teléfono internacional=true /// Teléfono Nacional=false.
isCodPostal(c)						// Verifica que c sea un código postal válido.
ChangeImg(obj,valor)				// Cambia la imágen a Visto si el campo es correcto.
NotAcceptInitChar(c)				// Verifica que c no se encuentre en el patrón para el 1er carácter de la cadena.
isName(obj)							// Verifica si s es un nombre de persona o empresa.
isCategoria(c,obj)					// Verifica que sea una categoria según el patrón: 00.00.00.00.... etc.
isNumero(obj)						// Verifica que el valor del obj sea un número y nada más.
isNif(obj)							// Verifica que el valor del obj sea un NIF.
isMaxLenTextArea(c,obj,maxlen)      // Verifica que la longitud maxlen no sea más grande que el contenido de c.

NotAcceptInitChar(c)				// Verifica que c se encuentre dentro de un patrón de carácteres.
daysInFebruary(year)				// Verifica si year es un año visiesto y devuelve el número de dias.
isCorrectDate(obj,day,month,year)	// Verifica que la fecha sea correcta en base al año bisiesto
isOneDigit(s,obj)					// Verifica que s se encuentre en un patrón de a-z A-Z
isAtoZ(s)							// Devuelve true si NO está entre a-z A-Z y false lo contrario.
SelectOption(obj,selIndex)			// Verifica que no elijas la primera opción de un Select.
isReadOnly(obj,name)				// Asigna a obj un campo de texto NO modificable.
isNameWhiteSpace(s,obj)				// Verifica si s es un nombre de persona o empresa aceptando espacios en blanco.
DeteleWhiteSpace(s,obj)				// Elemina los espacios en blanco que haya al principio de s.
isDate(s,obj)						// Verifica que s sea una fecha tipo: ddmmaa y lo transforma a dd/mm/aa
isCardDate(s,obj)					// Formatea la fecha para que isDate() la acepte y verifique.
ChangeFocusToButton(obj)			// Cambia el foco hacia el botón de Alta

isCreditCard(st)					// Verifica que el st sea un número de targeta de crédito.
isVisa(cc)							// Verifica que el cc sea un número VISA.
isMasterCard(cc)					// Verifica que el cc sea un número MASTERCARD.
isAmericanExpress(cc)				// Verifica que el cc sea un número AMERICA EXPRESS.

isFileBox(obj)						// Verifica si el campo file tiene algún valor.
isDecimal(c)						// Verifica que c sea un número, coma o punto para los números decimales.
CompCampoVacio(obj)					// Verifica si un campo está vacio o no. Devuelve TRUE O FALSE
MakeOption(Txt,Valor,Form,Select)	// Crea un nuevo OPTION en el formulario especificado por NOMBRE o ÍNDICE.

*/

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/* Variables definidas.

var RequiredFields		// Contiene los campos obligatorios del formulario.		 
var c=0					// Contador comodin.
var d=0					// Contador comodin.
var e=0					// Contador comodin.
var comp=false			// Control comodin.
var Elements;			// Contiene el objeto de formulario: document.forms[0]
var ValorCampo;			// Contiene el valor del campo a comparar.
var Control				// Contiene true o false según el estado del campo email: true=error, false=ok ¿?.
var ie					// Contiene true si el navegador es IExplorer.
var ns					// Contiene true si el navegador es Netscape.
var whitespace			// Contiene " \t\n\r" = espacio más un salto de linea o tabulador.
var error				// Contiene true o false y sirve para cambiar la imágen de Visto o X.
var Destino				// Contiene la dirección de destino de la página actual.
var ready				// Control de envio de formulario, si es false no lo envia.
*/


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// DEFINICIÓN DE VARIABLES.

var c=0;
var d=0;
var e=0;
var Elements;
var ValorCampo;
var Control=false;
var num_tel;
var whitespace = " \t\n\r";

var error=false;
var ready=false;


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// INICIACIÓN.


function Init(NombreForm){
	Elements=eval("document.forms['"+NombreForm+"']");
	ready=true;
	error = false;
	whitespace = " \t\n\r";
}

function ValidarPass(obj){
	
	s=""+obj.value;
	s=DeleteWhiteSpace(s,obj);
	if(s.length<3) error = true;
	else error = false;

	return error;
}

function isName(obj){
	s=""+obj.value;
	if(s.length==0) return true;
	else return isAlphabetic(s,obj);
}

function isAlphabetic(s,obj){
	s=DeleteWhiteSpace(s,obj);
	if(!NotAcceptInitChar(obj.value.substr(0,1))){
		for(i = 0; i < s.length; i++){   
			var c = s.charAt(i);
			if(!isLetterOrNumber(c) && !isCharAccent(c)){
				error=true;
			}
		}
	}
	else error=true;
	
	return error;
}

function DeleteWhiteSpace(s,obj){
var i;
var z=0;

	if(s.length!=0){
/*		
		while(isWhitespace(s.substr(z,1))){
			z++;
		}
*/
		
		while(s.substr(z,1)==" "){
			z++;
		}
		obj.value=s.substr(z,(s.length-z));
		s=obj.value;
	}
	return s;
}


function isWhitespace(s){
var c = s.charAt(0);

	if(whitespace.indexOf(c) == -1) return false;
	else return true;
}

function isLetter(c)
{
	return (((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z"))) || (((c==" ") || (c=="'") || (c=="-") || (c=="·") || (c=="º") || (c=="ª")));
}

function isLetterOrNumber(c)
{
	return (((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")) || ((c >= "0") && (c <= "9")) || ((c=="ñ") || (c=="Ñ")) || ((c=="ç") || (c=="Ç")));
}

function NotAcceptInitChar(c)
{
	return ((c=="'") || (c=="-") || (c=="·") || (c=="º") || (c=="ª") || (c==" ") || (c=="") || (c==null));
}

function isAtoZ(c)
{
	return (((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")) || ((c=="ñ") || (c=="Ñ")) || ((c=="ç") || (c=="Ç")));
}

function isLetterOrNumberOrWhiteSpace(c)
{
	return (((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")) || (c==" ") || (c=="'") || (c=="-") || (c=="_") || (c=="·") || (c=="º") || (c=="ª")  || ((c >= "0") && (c <= "9")) || ((c=="+") || (c=="/") || (c=="@") || (c=="€") || (c=="$") || (c=="%") || (c=="&") || (c=="*")) || ((c=="!") || (c=="¡")) || ((c=="¿") || (c=="?")) || ((c==".") || (c==":")) || ((c==",") || (c==";")) || ((c=="(") || (c==")")) || ((c=="ñ") || (c=="Ñ")) || ((c=="ç") || (c=="Ç")));
}

function isCharAccent(c)
{
	return ((c=="á") || (c=="à") || (c=="é") || (c=="è") || (c=="í") || (c=="ì") || (c=="ó") || (c=="ò") || (c=="ú") || (c=="ù") || (c=="Á") || (c=="À") || (c=="É") || (c=="È") || (c=="Í") || (c=="Ì") || (c=="Ó") || (c=="Ò") || (c=="Ú") || (c=="Ù"))
}


function isCharNotAccept(c){
	
	return ((c=="á") || (c=="à") || (c=="é") || (c=="è") || (c=="í") || (c=="ì") || (c=="ó") || (c=="ò") || (c=="ú") || (c=="ù") || (c=="Á") || (c=="À") || (c=="É") || (c=="È") || (c=="Í") || (c=="Ì") || (c=="Ó") || (c=="Ò") || (c=="Ú") || (c=="Ù") || (c=="#") || (c=="$") || (c=="Â") || (c=="Ã") || (c=="Å") || (c=="Æ") || (c=="Ç") || (c=="Ê") || (c=="Ë") || (c=="Ä") || (c=="Î") || (c=="Ï") || (c=="Ð") || (c=="Ñ") || (c=="ñ") || (c=="Ô") || (c=="Û") || (c=="Ø") || (c=="Ö") || (c=="Õ") || (c=="ç") || (c=="æ") || (c=="å") || (c=="ä") || (c=="ã") || (c=="â") || (c=="ß") || (c=="Þ") || (c=="Ý") || (c=="Ü") || (c=="ê") || (c=="ë") || (c=="î") || (c=="ï") || (c=="ð") || (c=="ô") || (c=="õ") || (c=="ö") || (c=="ø") || (c=="û") || (c=="ü") || (c=="ý") || (c=="þ") || (c=="ÿ") || (c==",") || (c=="'") || (c=='"'))
}


function isMail(obj){
var ValorCampo;

	ValorCampo=obj.value;
	if(ValorCampo.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) == -1){
		error = true;
	}
	else error = false;
	
	if(ValorCampo==" ") error=false
	
	return error;
}

function isEmpty(s)
{
	return ((s == null) || (s.length == 0));
}

function isEmptyNotWhitespace(s,obj)
{
	s = DeleteWhiteSpace(s,obj);
	return ((s == null) || (s.length == 0));
}

///////////Numeros////////////////////

function isTelefon(obj){
	if(!isNaN(parseInt(obj.value)) && (""+obj.value).length>=9){
		return false;
	}
	else return true;
}

function isCodPostal(c){
	if(!isNaN(c) && c.length==5) return true;
	else return false;
}

function isInteger(s)
{
var i;

	for(i=0;i<s.length;i++)
	{   
		var c = s.charAt(i);
		if(!isDigit(c))
		{
			error=true;
		}
	}
	return error;
}

function isDigit(c)
{
	return ((c >= "0") && (c <= "9"))
}

function isDecimal(c)
{
	return ((c == ".") || (c == ","))
}


function isNumero(obj)
{
var c;

	error=false;
	c= obj.value;
	if(c.length==0) error=true;
	else
	{
		for(var i=0;i<c.length;i++)
		{   	 
			if(!isDigit(c.substr(i,1)))
			{
				if(!isDecimal(c.substr(i,1)))
				{
					error=true;
				}
			}
		}
	}
	return error;	
}

function isNif(obj)
{
var c,letra;
var err;

	err = false;
	c= obj.value;
	if(c.length!=10) error=true;
	else
	{
		letra = c.substr(9,(c.length - 1));
		c = c.substr(0,9);
		error = isInteger(c);
		
		if (!error)
		{
			err = isAtoZ(letra);
		}
		if (err=false) error = true;
		else error = false;
	}
	
	return error;	
}



function isMaxLenTextArea(c,obj,maxlen)
{
	if(c.length>maxlen) return true;
	else return false;
}

function isCategoria(c,obj)
{
var i=0;
var cont=0;
   
	while(i<c.length)
	{
		if(isDigit(c.charAt(i)) && cont<2)
		{
			cont++;
		}
		else
		{
			if(cont==2 && c.charAt(i)==".")
			{
				cont=0;
			}
			else error=true;
		}     	
	 	i++;
	}	
	
	if(cont!=2) error=true;
	
	return error;	
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// CADENAS !!!!


function isOneDigit(s,obj)
{
	if(s.length==0) error=true;
	else
	{
		if(isAtoZ(s) || isCharAccent(s)) error=false;
		else error=true;
	}
	return error;	
}


function isNameWhiteSpace(s,obj)
{

	//s=DeleteWhiteSpace(s,obj);
	
	if(s.length==0 || s=="") error=true;
	else
	{
		var i=0;
		error=false;
		   
		while(i<s.length){
		          var c=s.substr(i,1);
		      if(!isLetterOrNumberOrWhiteSpace(c) && !isCharAccent(c)) error=true;
		      i++;
		    }
		
	}
	return error;	
}



//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// ESPACIO BLANCO !!!


function isWhiteSpacePos(c,pos_ini,pos_fin)
{
var espacio=false;

	if(c.length<pos_fin) espacio=false;
	else
	{
		for(var i=pos_ini;i<=pos_fin;i++)
		{
			if(c.charAt(i)==" ")
			{
				espacio=true;
			}
		}
	}
	if(espacio) return true;
	else return false;
}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// FILE !!!

function isFileBox(obj)
{
	if(obj.value.length>0)
	{
		error=false;
	}
	else error=true;
	
	return error;
}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Fechas !!!

function daysInFebruary(year)
{
   // February has 29 days in any year evenly divisible by four,
   // EXCEPT for centurial years which are not also divisible by 400.
	return (  ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 );
}

function isCorrectDate(obj,day,month,year)
{
var DiasFebrero;
var daysInMonth = new Array(12);

	daysInMonth[1] = 31;
	daysInMonth[2] = 29;
	daysInMonth[3] = 31;
	daysInMonth[4] = 30;
	daysInMonth[5] = 31;
	daysInMonth[6] = 30;
	daysInMonth[7] = 31;
	daysInMonth[8] = 31;
	daysInMonth[9] = 30;
	daysInMonth[10] = 31;
	daysInMonth[11] = 30;
	daysInMonth[12] = 31;
	
	day=parseFloat(day);
	month=parseFloat(month);
	//   year=parseInt(year);
	//   alert("day="+day+"\nmonth="+month);
	if(day<=daysInMonth[month])
	{
		if(parseInt(month)==2)
		{
			DiasFebrero=daysInFebruary(year);   
			if(day > DiasFebrero)
			{
				error=true;
				obj.value="";
			}
		}
		error=false;
		if(day<10) var day="0"+day;
		if(month<10) var month="0"+month;
		obj.value=day+"/"+month+"/"+year;
	}
	else
	{
		error=true;
		obj.value="";
	}
	return error;
}

function isDate(s,obj)
{
	s=DeleteWhiteSpace(s,obj);
	error=false;
	var day="";
	var month="";
	var year="";
	
	if(s.length>=6)
	{ // formato ddmmaa mínimo para tratarlo como una fecha.
		if(s.indexOf("/") == -1)
		{
			 if(s.length==6 || s.length==8)
			 {
				day=s.substr(0,2);
				month=s.substr(2,2);
				year=s.substr(4,4);
			 }
			 else error=true;
		}
		else
		{
			if((s.indexOf("/") != -1) && (s.lastIndexOf("/") != s.indexOf("/")))
			{
				day=s.substr(0,(s.indexOf("/")));
				month=s.substr((s.indexOf("/")+1),2);
				if(month.indexOf("/") != -1) month=month.substr(0,1);
				year=s.substr((s.lastIndexOf("/")+1),4);
				//alert("day="+day+"\nmonth="+month+"\nyear="+year);
			}
			else error=true;
		}
	}
	else error=true;
	
	//   alert("day="+day+"\nmonth="+month+"\nyear="+year);
	if(error) return error;
	else return isCorrectDate(obj,day,month,year);
}

function isCardDate(more,s,obj)
{
	s=(""+more)+s;
	if(s.length>=6) isDate(s,obj);
	else obj.value="";
}


///////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Campo de texto ReadOnly !!!

function isReadOnly(obj,name)
{
	for(var i=0;i<obj.length;i++)
	{
		if(obj.elements[i].name==name)
		{
			if((i+1)==obj.length)
			{
				for(var ii=0;ii<obj.length;ii++)
				{
					if(obj.elements[ii].type=="button")
					{
						obj.elements[ii].focus();	
					}
				}
			}
			else obj.elements[i+1].focus();
		}
	}  
}



//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Foco a la Ventana !!!

var contWin=0;
var set;

function WindowFocus(ObjWin)
{
	contWin++;
	if(ObjWin!="")
	{
		ObjWin.focus();
	}
	else
	{
		if(contWin<5)
		{
			set = setTimeout("WindowFocus(ObjWin);",1000);
		}
		else clearTimeout(set);
	}
}



////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// VALIDACIÓN DE TARGETAS DE CRÉDITO									      //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////



function isCreditCard(st) 
{
	if(st.length>19)
	{
		return true;
	}
	
	sum=0;
	mul=1;
	l=st.length;
	
	for(i=0;i<l;i++)
	{
		digit = st.substring(l-i-1,l-i);
		tproduct = parseInt(digit ,10)*mul;
		if(tproduct>=10)
		{
			sum+=(tproduct % 10)+1;
		}
		else sum += tproduct;
		if(mul==1)
		{
			mul++;
		}
		else mul--;
	}
	
	// Uncomment the following line to help create credit card numbers
	// 1. Create a dummy number with a 0 as the last digit
	// 2. Examine the sum written out
	// 3. Replace the last digit with the difference between the sum and
	//    the next multiple of 10.
	
	if((sum % 10)==0)
	{
		return false;
	}
	else return true;
}

function isVisa(cc)
{
//    Sample number for visa: 4111 1111 1111 1111 (16 digits)
	if(((cc.length == 16) || (cc.length == 13)) && (cc.substring(0,1) == 4))
	{
		isCreditCard(cc);
	}
	else return true;
}

function isMasterCard(cc)
{
	//     Sample number for MasterCard: 5500 0000 0000 0004 (16 digits)
	firstdig = cc.substring(0,1);
	seconddig = cc.substring(1,2);
	if((cc.length == 16) && (firstdig == 5) && ((seconddig >= 1) && (seconddig <= 5)))
	{
		isCreditCard(cc);
	}
	else return true;
}

function isAmericanExpress(cc)
{
	//   Sample number for American Express: 340000000000009 (15 digits)
	firstdig = cc.substring(0,1);
	seconddig = cc.substring(1,2);
	if((cc.length == 15) && (firstdig == 3) && ((seconddig == 4) || (seconddig == 7)))
	{
		isCreditCard(cc);
	}
	else return true;
}

function CompCampoVacio(obj)
{
var s=obj.value;

	if(s.length==0 || s=="") error=true;
	else error=false;
	
	return error;
}

function MakeOption(Txt,Valor,Form,Select){
	var Elements2="";
	var cadena;
	
	if(isNaN(Form)){
		cadena = "document.forms['" + Form +"']." + Select;
		Elements2=eval("document.forms['" + Form +"']." + Select);
	}
	else{
		Elements2=eval("document.forms[Form]."+Select);
	}
	
	var ObjOption=new Option(Txt,Valor,false,true);
	Elements2.options[Elements2.options.length]=ObjOption;
}


function CorrectIndex(obj){
	var c=0;
	var cadena="";
	var cadena2="";

	cadena = DeleteWhiteSpace(obj.value,obj);
	
	if (cadena.length < 4) {
		error = true;
	}
	else {
		while ((c<cadena.length) && (!error)){
			error = isCharNotAccept(cadena.substr(c,1));
			c++;
		}
	}
	
	return error;
}


