// JavaScript Document

// retorna la lletra corresponent a un número de DNI (NIF)
	function lletraDni(dni)
	{
	   var lockup = 'TRWAGMYFPDXBNJZSQVHLCKE';
	   return lockup.charAt(dni % 23);
	}
	
	// retorna si el CIF o NIF és correcte
	function comprovarCIF(control_cif)
	{
		mal=false;
		letras="ABCDEFGHKLMNPQS";
		numeros = "0123456789";
		var caracteres = new Array();
		
		cif = control_cif.value;
		
		for (a=0;a<cif.length;a++)
		{
			caracteres[a]=cif.charAt(a);
		}
		if ((caracteres[0]=='X')||(caracteres[0]=='T'))
		{
			// NIE (NIF d'un extranger)
			if (caracteres[0]=='T') // Sembla que hi ha alguns NIEs que comencen per TX...
			{
				dni = parseInt(cif.substring(2,8),10);
			}
			else //... tot i que la majoria comencen per X.
			{
				dni = parseInt(cif.substring(1,8),10);
			}
			if (lletraDni(dni)!=caracteres[8])
			{
				alert('Aquest NIE no sembla correcte.'); // Traduir
				control_cif.focus();
				return false;
			}
			else
			{
				return true;
			}
		}
		else if (numeros.indexOf(caracteres[0])>=0)
		{
			// NIF
			dni = parseInt(cif.substring(0,8),10);
			if (lletraDni(dni)!=caracteres[8])
			{
				alert('Aquest DNI / NIF no sembla correcte.'); // Traduir
				control_cif.focus();
				return false;
			}
			else
			{
				return true;
			}
		}
		else if (letras.indexOf(caracteres[0])==-1)
		{
			alert('Aquest CIF no sembla correcte.'); // Traduir
			control_cif.focus();
			return false;
		}

		resultadoImpares=0;
		for(a=1;a<8;a=a+2)
		{
			numero=parseInt(caracteres[a],10)*2;
			numero=parseInt(numero/10,10)+(numero%10);
			resultadoImpares+=numero;
		}
		
		numeroPar=0;
		for(a=2;a<8;a=a+2)
		{
			numeroPar+=parseInt(caracteres[a],10);
		}
		total=resultadoImpares+numeroPar;
		total=10-(total%10);
		if((total!=caracteres[8])&&(total+64!=cif.charCodeAt(0)))
		{
			mal=true;
		}
		if(mal)
		{
			alert("Aquest CIF no sembla correcte. Si us plau, corregeixi'l."); // Traduir
			control_cif.focus();
			return false;
		}
	}

// Obté la posició actual del cursor del textbox que li passem
function obtenirPosCursor (ctrl) {

	var pos = 0;
	
	if (document.selection)
	{ // Si és IE...
		ctrl.focus ();
		var Sel = document.selection.createRange ();
		Sel.moveStart ('character', -ctrl.value.length);
		pos = Sel.text.length;
	}
	else if (ctrl.selectionStart || ctrl.selectionStart == '0')
	{	// Si és Firefox (o un altre estàndard)
		pos = ctrl.selectionStart;
	}
	return (pos);

}

// Assigna la posició pos del cursor al control (textbox) que li passem
function posarPosCursor(ctrl, pos)
{

	if(ctrl.setSelectionRange)
	{
		ctrl.focus();
		ctrl.setSelectionRange(pos,pos);
	}
	else if (ctrl.createTextRange)
	{
		var range = ctrl.createTextRange();
		range.collapse(true);
		range.moveEnd('character', pos);
		range.moveStart('character', pos);
		range.select();
	}
}

// Passem a majúscules el contingut d'un input, però respectant la posició del cursor.
function majuscules(control)
	{
		var pos = obtenirPosCursor(control);
		control.value = control.value.toUpperCase();
		posarPosCursor(control,pos);
	}

// Algoritmes de passaport
/*int
check_digit(char *s)
{
    static int m[3] = { 7, 3, 1 };
    int i, n;
	
    for (i = n = 0; s[i] != ‘\0'; i++)
        if (isdigit(s[i]))
            n += (s[i] - ‘0') * m[i % 3];
        else if (isalpha(s[i]))
            n += (toupper(s[i]) - ‘A’) * m[i % 3];
        else
            return -1;
    return n % 10;
}

function Control(Str: string): string;
var
  i, j , k: integer;
const
  m: array[0..2] of Integer = (7,3,1);
begin
  k:= 0;
  Str:= Uppercase(Str);
  for i:= 1 to Length(Str) do
  begin
    if not TryStrToInt(Str[i],j) then
      if not (Str[i] in ['A'..'Z']) then
      begin
        Result:= '';
        Exit;
      end else j:= Ord(Str[i]) - Ord('A');
    k:= k + (j*m[(i-1) mod 3]);
  end;
  Result:= IntToStr(k mod 10);
end;
*/

