//onsubmit="return validar('document.theForm','Nom','Nom','','Lloc','Lloc','','DataInici','Data inici','di','DataFi','Data fi','df','Filtros','f')"

function validar(){
	// editor html
	if (typeof(ewe)!='undefined'){
		for (e in ew)
			{
			if (ViewCurrent == 2)
			toggleView();
			document.forms['theForm'].elements(ew[e].name_field).value = document.getElementById(ew[e].name+'ewe').innerHTML;
			}

	}
	// fi editor html

    var color2='#FFFFE1'
    var color='#FFFFFF'
	var args=validar.arguments;
	var numargs=args.length;
	var envia,missatge,tipus
	var incorrecte=''
	var formu = args[0];


	for (i=1; i<(numargs-1); i+=3)
	{
		if (numargs==3)
		{
			obj=args[0];
			envia=false;
			missatge=args[1]
			tipus=args[2]
		}
		else
		{
			obj = formu.elements[args[i]];
			envia=true;
			missatge='"' + args[i+1] + '"'
			tipus=args[i+2]
		}


		// obligatori
        if ((tipus.indexOf('1')!=-1) || (tipus=='int1') || (tipus=='email1')){
				if (obj.value=="")
				{
					if (!incorrecte){obj.focus()};
					incorrecte+=missatge + VALIDAR_TEXT1 + '\n';
					obj.style.backgroundColor=color2
					//obj.focus()
				}
				else
				{
					obj.style.backgroundColor=color
					if (tipus.indexOf('1')!=-1){tipus=tipus.substr(0,tipus.length-1) };
				}
		}

        // nom, cognoms...

		if ((tipus=='names')  && (obj.value!='')){
			//valido caràcters
			var checkOK = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZÀÈÌÒÙÁÉÍÓÚÖÏËÜÄºª-_" + "abcdefghijklmnñopqrstuvwxyzàèìòùáéíóúäëïöü ";
			var checkStr = obj.value;
			var allValid = true;
			for (x = 0; x < checkStr.length; x++) {
				ch = checkStr.charAt(x);
				for (j = 0; j < checkOK.length; j++){
					if (ch == checkOK.charAt(j)){
					break;
					}
					if (j == checkOK.length-1) {
					allValid = false;
					break;
					}
				}
			}
			if (allValid == false ){
				if (!incorrecte){obj.focus()};
				incorrecte+=missatge + VALIDAR_TEXT2 + '\n';
				obj.style.backgroundColor=color2;
			}
			else
			{
				obj.style.backgroundColor=color
			}


			//------------- si no te un mínim de 3 caracters
			if (obj.value.length < 2 )
			{
					if (!incorrecte){obj.focus()};
					incorrecte+=missatge + VALIDAR_TEXT25 + '\n';
					obj.style.backgroundColor=color2;
			}
			else
			{
				obj.style.backgroundColor=color
			}
		}



		// mail
        if ((tipus=='email')  && (obj.value!='')){
		obj.value = obj.value.toLowerCase();
		var caracters = "0123456789abcdefghijklmnopqrstuvwxyz.-@_";
		var caractersInvalids='';
		for (x=0;x<obj.value.length;x++)
		{
			if (caracters.indexOf(obj.value.charAt(x))==-1)
			{
			caractersInvalids = caractersInvalids + ' ' + obj.value.charAt(x)
			}
		}
		mail=obj.value
		arrob=mail.indexOf('@')
		punt=mail.indexOf('.',arrob+2)
		ultim=mail.length-1
			if ((arrob==-1) || (punt==-1) || (arrob==0) || (punt==ultim) || (caractersInvalids))
			{
				if (caractersInvalids)
				{
					caractersInvalids = '. ' + VALIDAR_TEXT2 + ':' + caractersInvalids;
				}
				if (!incorrecte){obj.focus()};
				incorrecte+= missatge + VALIDAR_TEXT3 +caractersInvalids+'\n'
				obj.style.backgroundColor=color2
			}
			else
			{
				obj.style.backgroundColor=color
			}
		}

		// número
        if ((tipus=='int')  && (obj.value!='')){
			val = obj.value;
			while (val.indexOf('.')!=-1){val = val.replace('.','');}
			if ((val!=Number(val)) && (obj.value!=''))
			{
				if (!incorrecte){obj.focus()};
				incorrecte+= missatge + VALIDAR_TEXT5 + '\n'
				obj.style.backgroundColor=color2
			}
			else
			{
				obj.style.backgroundColor=color
			}
			if (obj.value==''){obj.value='0'}
		}

		// decimal
        if ((tipus=='decimal')  && (obj.value!='')){
			val = obj.value;
			while (val.indexOf('.')!=-1){val = val.replace('.','');}
			val = val.replace(',','.');
			if ((val!=Number(val)) && (obj.value!=''))
			{
				if (!incorrecte){obj.focus()};
				incorrecte+= missatge + VALIDAR_TEXT24 + '\n'
				obj.style.backgroundColor=color2
			}
			else
			{
				obj.style.backgroundColor=color
			}
			if (obj.value==''){obj.value='0'}
		}
		// tarjeta
        if ((tipus=='creditcard') && (obj.value!='')){
			if (!ValidarTarjeta(obj.value))
			{
				if (!incorrecte){obj.focus()};
				incorrecte+= missatge + VALIDAR_TEXT20 + '\n'
				obj.style.backgroundColor=color2
			}
			else
			{
				obj.style.backgroundColor=color
			}
		}

		// tarjeta caducitat
        if((tipus=='creditdate') && (obj.value!='')){
			if (!comprobaCaducitat(obj.value))
			{
				if (!incorrecte){obj.focus()};
				incorrecte+= missatge + VALIDAR_TEXT21 + '\n'
				obj.style.backgroundColor=color2
			}
			else
			{
				obj.style.backgroundColor=color
			}
		}
		// cp
		if ((tipus=='cp') && (obj.value!=''))
		{
			if ((obj.value!=Number(obj.value)) && (obj.value!='')  || (obj.value<10000))
			{
				if (!incorrecte){obj.focus()};
				incorrecte+= missatge + VALIDAR_TEXT6 + '\n'
				obj.style.backgroundColor=color2
			}
			else
			{
				obj.style.backgroundColor=color
			}
		}

		// llargada maxima
        if(tipus>1){
			if (obj.value.length > tipus)
			{
				if (!incorrecte){obj.focus()};
				incorrecte+= missatge + VALIDAR_TEXT7 + obj.value.length + VALIDAR_TEXT8 + tipus + ' \n'
				obj.style.backgroundColor=color2
			}
			else
			{
				obj.style.backgroundColor=color
			}
		}

		// data
		if (tipus=='di')
		{
			var obj2=eval(args[0]);
			var Any=obj2.ano.value;
			var Mes=obj2.mes.options[obj2.mes.selectedIndex].value;
			var Dia=obj2.dia.options[obj2.dia.selectedIndex].value;
			if (Dia!=0)
			{
				if ((Any == "") || (Any!=Number(Any)))
				{
					incorrecte+= missatge + VALIDAR_TEXT9 + " \n";
				}
				else
				{
					if ((Any<1850) || (Any>2150))
					{
						incorrecte+= missatge + VALIDAR_TEXT10 + "\n"
					}
				}
			    if ((Mes==2) && (Dia>28))
				{
					if (((Any/4)==parseInt(Any/4)) && (Dia<30))
					{
					}
					else
					{
						incorrecte+= missatge + VALIDAR_TEXT11 + '\n';
					}
				}
				if ((Mes==4) || (Mes==6) || (Mes==9) || (Mes==11))
				{
					if (Dia>30)
					{
						incorrecte+= missatge + VALIDAR_TEXT11 + '\n';
					}
				}
			}
		}

		// account
        if ((tipus=='account') && (obj.value!='')){
			if ((obj.value!=Number(obj.value)) && (obj.value!=''))
			{
				if (!incorrecte){obj.focus()};
				incorrecte+= missatge + VALIDAR_TEXT22 + '\n'
				obj.style.backgroundColor=color2
			}
			else
			{
				obj.style.backgroundColor=color
			}
			if (obj.value==''){obj.value='0'}
		}



		if (tipus=='fe')
		{
			var obj2=eval(args[0]);
			var Any=obj2.ano.value;
			Any="20"+Any;
			var Mes=obj2.mes.options[obj2.mes.selectedIndex].value;
			var Dia=obj2.dia.options[obj2.dia.selectedIndex].value;
			if (Dia!=0)
			{
				if ((Any == "") || (Any!=Number(Any)))
				{
					incorrecte+= missatge + VALIDAR_TEXT9 + " \n";
				}
				else
				{
					if ((Any<999) || (Any>9999))
					{
						incorrecte+= missatge + VALIDAR_TEXT10 + " \n";
					}
				}
			    if ((Mes==2) && (Dia>28))
				{
					if (((Any/4)==parseInt(Any/4)) && (Dia<30))
					{
					}
					else
					{
						incorrecte+= missatge + VALIDAR_TEXT11 + " \n";
					}
				}
				if ((Mes==4) || (Mes==6) || (Mes==9) || (Mes==11))
				{
					if (Dia>30)
					{
						incorrecte+= missatge + VALIDAR_TEXT11 + " \n";
					}
				}
			}
		}
// NIF

		// opcio -> contiene el valor:	 1 para NIF 	2 para NIE
		//opcio = document.form.nif_nie.options[document.form.nif_nie.selectedIndex].value;

		if ((tipus == 'nif') && (obj.value!=''))
		{
			var NIF=obj.value;
			var temp = Validar_NIF(NIF);

			if (temp >= 1 || temp <= 5)
			{ obj.style.backgroundColor=color2 }
			else
			{ obj.style.backgroundColor=color }
			switch (temp)
			{
			    case 1:
					incorrecte+= missatge + VALIDAR_TEXT23 + "\n"
					break;
			    case 2:
					incorrecte+= missatge + VALIDAR_TEXT23 + "\n"
					break;
			    case 3:
			        incorrecte+= missatge + VALIDAR_TEXT23 + ".\n"
					break;
			    case 4:
			        incorrecte+= missatge + VALIDAR_TEXT23 + "\n"
					break;
			    case 5:
			        incorrecte+= missatge + VALIDAR_TEXT23 + "\n"
					break;
			}

		}

// valor del select
    if(tipus == 'sel')
    {
			if (obj.selectedIndex==0)
			{
				if (!incorrecte){obj.focus()};
				incorrecte+=VALIDAR_TEXT16 + missatge + ' \n'
				obj.style.backgroundColor=color2
			}
			else
			{
				obj.style.backgroundColor=color
			}
		}

// checkbox obligatori en un array
    if(tipus == 'check')
    {
      objChecked = false;
      formu = eval(args[0]);
      for (x=0;x<formu.elements.length; x++)
    	{
    	 if ((formu.elements[x].type == 'checkbox') && (formu.elements[x].name.indexOf(obj)!=-1))
    	 {
    	    if (formu.elements[x].checked == true) objChecked = true;
    	 }
    	}
      if (!objChecked)
			{
				incorrecte+=missatge + VALIDAR_TEXT18 + ' \n'
				//obj.style.backgroundColor=color2
			}
			else
			{
				//obj.style.backgroundColor=color
			}
	  }

// checkbox obligatori en un array
    if(tipus == 'checkmail')
    {
      objChecked = false;
      formu = eval(args[0]);
      for (x=0;x<formu.elements.length; x++)
    	{
    	 if ((formu.elements[x].type == 'checkbox') && (formu.elements[x].name.indexOf(obj)!=-1))
    	 {
    	    if (formu.elements[x].checked == true) objChecked = true;
    	 }
    	}
      if (!objChecked && formu.selected_addresses_ids.value=='')
			{
				incorrecte+=VALIDAR_TEXT19 + ' \n'
				//obj.style.backgroundColor=color2
			}
			else
			{
				//obj.style.backgroundColor=color
			}
	  }

// fi validacio
	}
	if (incorrecte){
	    incorrecte= '\n' + VALIDAR_TEXT17 + '\n\n' + incorrecte
		alert (incorrecte)
	}
	if (envia){
		// guardar amb frame
		if ((document.getElementById('save_frame'))
			&& (
				(formu.action.indexOf('action=save_record')!=-1)
				|| (formu.action.indexOf('action=add_record')!=-1)
				|| (formu.action.indexOf('action=copy_record')!=-1)
				)
			&& (incorrecte=='')
			){
			showPopWin('', 300, 100, null, false, false, MODALBOX_SAVE);
  			if (document.getElementById('missatge')) document.getElementById('missatge').innerHTML = '';
			formu.target = 'save_frame';																																																																			   		}
		return (incorrecte=='')
	}
}

// FUNCIÓN para validar el NIF
function Validar_NIF(nNif)
{

  var checkOK = "0123456789-,.";
  var checkStr = nNif;
  var allValid = true;
  var decPoints = 0;
  var allNum = "";
  var num = 0;
  var lletra = "";
  var LetraResult = "";
  var i = 0;
  var j = 0;

  if (nNif.length < 9)
  {
    //alert("Escriba 8 Dígitos y la Letra.");
    return 1;

  }

  if (nNif == "")
  {
    //alert("Nif es un campo obligatorio");
    return 2;
  }

  for (i = 0;  i < checkStr.length - 1;  i++)
  {
    ch = checkStr.charAt(i);
	num += ch;
    for (j = 0;  j < checkOK.length;  j++)
      if (ch == checkOK.charAt(j))
        break;
    if (j == checkOK.length)
    {
      allValid = false;
      break;
    }
    if (ch == ",")
    {
      allNum += ".";
      decPoints++;
    }
    else if (ch != ".")
      allNum += ch;
  }


  if (!allValid)
  {
	//alert("El formato del NIF no es correcto.");
    return 3;

  }
  else
  {
	  lletra = checkStr.charAt(8);
	  LetraResult = FCalcular_NIF(num);
	  if (LetraResult != lletra.toUpperCase())
	  {
	    //alert("La letra no es correcta");
	    return 4;
	  }
  }

  if (decPoints > 1)
  {
   // alert("Escriba un número válido en el campo NIF.");
    return 5;
  }

 // theForm.nif.style.backgroundColor=color;
  return (true);
}

function FCalcular_NIF(FNumero) {
        var cadena = "TRWAGMYFPDXBNJZSQVHLCKE";
		var letra = "";

        letra =cadena.substring(FNumero % 23,FNumero % 23+1);
		return letra;
}

function ValidarTarjeta(numero_tarjeta) {
//var numero_tarjeta=numa+""+numb+""+numc+""+numd;

	// Comprobamos que solo hemos introducido numeros
	if (!isInt(numero_tarjeta)){
		return false;
	}

	// Paso 1: Tomamos las cifras en posiciones impares y las multiplicamos por 2 y
	// sumamos el resultado
	var cadena = numero_tarjeta.toString();
	var longitud = cadena.length;
	var cifra = null;
	var cifra_cad=null;
	var suma=0;
	for (var i=0; i < longitud; i+=2){
		cifra = parseInt(cadena.charAt(i))*2;
		// Si la cifra resultante es mayor que 9 sumamos las cifras
		if (cifra > 9){
			cifra_cad = cifra.toString();
			cifra = parseInt(cifra_cad.charAt(0))+parseInt(cifra_cad.charAt(1));
		}
		suma+=cifra;
	}
	// Paso 2: Tomamos las cifras en posiciones pares y las sumamos
	for (var i=1; i < longitud; i+=2){
		suma += parseInt(cadena.charAt(i));
	}

	// Paso 3: Comprobamos que el resultado es múltiplo de 10
	if ((suma % 10) == 0){
		// Si todo es correcto enviamos el formulario
		return true;
	} else {
		return false;
	}
}
function comprobaCaducitat(dataExpiracio) {
	var ArrayExpiracio=dataExpiracio.split("/");
	if ((ArrayExpiracio.length!=2) || (ArrayExpiracio[0]=="") || (isNaN(ArrayExpiracio[0])) || (ArrayExpiracio[1]=="") || (isNaN(ArrayExpiracio[1])) || (ArrayExpiracio[0]<1) || (ArrayExpiracio[0]>12)) {return false}
	return true;
	}

function isInt(valor){
    var cadena = valor.toString();
	var longitud = cadena.length;
	if (longitud == 0){return false;}
	var ascii = null;
    for (var i=0; i<longitud; i++) {
		ascii = cadena.charCodeAt(i);
        if (ascii < 48 || ascii > 57){return false;}
    }
	return true;
}


