// 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 sonBlancs(s){
var i;
var z=0;

	if(s.length!=0){
		
		while(s.substr(z,1)==" "){
			z++;
		}
		
		if (z == s.length) {
			return true;
		}
		else
			return false;
	}

}

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;
	
	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 isDni(obj){
	if(!isNaN(parseInt(obj.value)) && (""+obj.value).length>=8){
		return false;
	}
	else return true;
}

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 isCif(elCIF)
{
  var error;
  var temp = elCIF.value.toUpperCase(); // pasar a mayúsculas

  if (!/^[A-Za-z0-9]{9}$/.test(temp))  // Son 9 dígitos? 
     error = true;     
  else if (!/^[ABCDEFGHKLMNPQS]/.test(temp)) // Es una letra de las admitidas ?
     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 daysInMonth(month,year)
{
var lvi_days;
var lvix_daysInMonth = new Array(12);

	lvix_daysInMonth[1] = 31;
	lvix_daysInMonth[2] = 0;
	lvix_daysInMonth[3] = 31;
	lvix_daysInMonth[4] = 30;
	lvix_daysInMonth[5] = 31;
	lvix_daysInMonth[6] = 30;
	lvix_daysInMonth[7] = 31;
	lvix_daysInMonth[8] = 31;
	lvix_daysInMonth[9] = 30;
	lvix_daysInMonth[10] = 31;
	lvix_daysInMonth[11] = 30;
	lvix_daysInMonth[12] = 31;

	if(parseInt(month)==2) {
		lvi_days=daysInFebruary(parseInt(year));   
	} else {
		lvi_days=lvix_daysInMonth[parseInt(month)];
	}
	return lvi_days;
}


//ADAPTADA A GAVÀ
function isCorrectDate(day,month,year)
{
var lvi_DiasFebrero;
var lvix_daysInMonth = new Array(12);

	lvix_daysInMonth[1] = 31;
	lvix_daysInMonth[2] = 29;
	lvix_daysInMonth[3] = 31;
	lvix_daysInMonth[4] = 30;
	lvix_daysInMonth[5] = 31;
	lvix_daysInMonth[6] = 30;
	lvix_daysInMonth[7] = 31;
	lvix_daysInMonth[8] = 31;
	lvix_daysInMonth[9] = 30;
	lvix_daysInMonth[10] = 31;
	lvix_daysInMonth[11] = 30;
	lvix_daysInMonth[12] = 31;
	
	day=parseFloat(day);
	month=parseFloat(month);
	//   year=parseInt(year);
	//   alert("day="+day+"\nmonth="+month);
	if((day > 0)&&(day<=lvix_daysInMonth[month])){
		if(parseInt(month)==2)
		{
			lvi_DiasFebrero=daysInFebruary(year);   
			if(day > lvi_DiasFebrero)
			{
				error=true;
			}
		}
		error=false;
		if(day<10) var day="0"+day;
		if(month<10) var month="0"+month;
	}
	else
	{
		error=true;
	}
	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(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;
}

function isRadioChecked(radio,choicesnumber) { 
	for (var i=0;i<choicesnumber;i++) {
		if  (radio[i].checked) return true;
	}
	return false;
}

function isCheckedButLessThanChoicesmax(radio,choicesnumber,choicesmax) { 
var opcionsselected;
	opcionsselected = 0;
	for (var i=0;i<choicesnumber;i++) {
		if  (radio[i].checked) opcionsselected++;
	}
	return opcionsselected<=choicesmax;
}


// VALIDACIÓN DE ALFANUMERICOS PARA EL CORREO/

function esLetra(c)
	{
		return (((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")));
	}

function esAlfanumericoValido(pvs_cadena)
	{
	var i, encontrado;

	encontrado=false;
	i=0;
	while (i<pvs_cadena.length && !encontrado) {
		if ((pvs_cadena.charAt(i) != ".") && !esLetra(pvs_cadena.charAt(i)) && !isDigit(pvs_cadena.charAt(i)))
			encontrado = true;
		i++;
	}
	
	if (!encontrado) 
		if (pvs_cadena.indexOf("..")!=-1)
			encontrado = true 	
	return (!encontrado)
	}

function esAlfanumericoValidoSinPunto(pvs_cadena)
	{
	var i, encontrado;

	encontrado=false;
	i=0;
	while (i<pvs_cadena.length && !encontrado) {
		if (!esLetra(pvs_cadena.charAt(i)) && !isDigit(pvs_cadena.charAt(i)))
			encontrado = true;
		i++;
	}
	
	
	return (!encontrado)
	}



// FUNCIONS PER A TRACAR DATES EN 3 CAMPS PER SEPARAT
//	 ANY text  MES select DIA select
// ON PRIMER OBLIGUEM A OMPLIR L'ANY, DESPRÉS EL MES, i FINALMENT LE DIA

function habilitaMesSiAnyNoBlanc(any,mes) {
	//isNumero retorna true si hiha error!!!! i false si és un Número!!! Què fort!
	if((isEmptyNotWhitespace(any.value,any))||isNumero(any)) {
		mes.disabled = true;
		mes.selectedIndex=0;
	} else {
		var any4digits;
		switch(any.value.length){
			case 3: any4digits="0"+any.value;
				break;
			case 2: any4digits="00"+any.value;
				break;
			case 3: any4digits="000"+any.value;
				break;
			default:any4digits=any.value;
		}
		any.value=any4digits;
		mes.disabled = false;
		mes.focus();
	}

}

function habilitaDiaSiMesNoBlanc(any,mes,dia) {
var lvs_i, lvi_i,lvi_dies;
	if(isEmpty(mes.value)) {
		dia.disabled = true;
		dia.selectedIndex=0;
	} else {
		dia.disabled = false;
		lvi_dies=daysInMonth(mes.value,any.value);
		//Lo del '+1' és per la opció primera "Tots"
		if (lvi_dies+1<dia.options.length) {
			dia.options.length=lvi_dies+1
		} else {
			for(lvi_i=dia.options.length;lvi_i<=lvi_dies;lvi_i++){
				lvs_i = String('0'+lvi_i);
				lvs_i = lvs_i.substring(lvs_i.length, lvs_i.length - 2);
				dia.options[lvi_i] = new Option(lvs_i,lvs_i);
			}
		}
		dia.focus();
	}

}

