function ttest()
{
  alert( 'aaaaaaaassssssssssstro' );
}

function suma_cyfr( ii ) 
{
  //  alert( (ii % 10) + Math.floor(ii/10) );
  return  (ii % 10) + Math.floor(ii/10);
}

function asciiCodeOf(znak) 
{
  var A   = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  return  A.indexOf(znak);
} //fun codeOf()

function SprawdzIdentyfikator() 
{		
  //  alert( verifyNumber.arguments[0] );
  var  rodzajNum =SprawdzIdentyfikator.arguments[0];
  var  tempStr   =SprawdzIdentyfikator.arguments[1];

  if (rodzajNum != 7)
	if (rodzajNum!=-1)
	{ 
	  return verifyPESEL( rodzajNum,tempStr ); 
	}
	else 
	{ 
	  return false; 
	}
  if (rodzajNum == 7) 
  {  // alert('verifyIBAN');
	  return verifyIBAN( tempStr );
	}
  return false;
}

function  DatawPeselu( tempStr ) 
{
  var  century = new Array (1900,2000,2100,2200,1800);
  var     dwm  = new Array (0,31,28,31,30,31,30,31,31,30,31,30,31,0);
	data = tempStr.substring(0,6);
        dd   = parseInt(data.substring(4,6),10);  // od do
        cc   = parseInt(data.substring(2,4),10);
        bb   = parseInt(data.substring(0,2),10);
        mm   = cc % 20;    
	rr   = century[Math.floor(cc/20)] + bb;
	if(((rr%4==0)&&(rr%100!=0))||(rr%400==0)) 
	  dwm[2]=29;
  temp = '';
  if ( mm<1 || mm>12 || dd<1 || dd>dwm[mm] )
    temp = '   błędna data: '+dd+'.'+mm+'.'+rr;
	return temp;
}

function trzyLitery( tempStr ) 
{
  var litery = true;
  for(i=0;i<2;i++) 
  {
	  znak = tempStr.charAt(i); 	//  alert( znak );
	  litery = litery && ((znak >='A') && (znak <='Z'));
  }
  return litery; // 3 litery na poczatku
} // fun trzyLitery

function verifyPESEL() 
{		
  var  rodzajNum =verifyPESEL.arguments[0];
  var  tempStr   =verifyPESEL.arguments[1];
  
  var  nazwy = new Array ('PESEL','REGON','NIP','BANK','ISBN','CCARD',
			'IACS','IBAN','DowOsob','NrLekarza','IMEI','NrGospIACS');
  
  var  dlug  = new Array  ( 11, 9,10, 8,10,16,12,28, 9, 7,15, 9 );
  var  mody  = new Array  ( 10,11,11,10,11,10,10,97,10,11,10, 7 );
  var  wagi  = new Array 
	     (  new Array( 1,3,7,9,1, 3,7,9,1,3, 0,0,0,0,0,0),	/* PESEL */
		new Array( 8,9,2,3,4, 5,6,7,0,0, 0,0,0,0,0,0),	/* REGON */
		new Array( 6,5,7,2,3, 4,5,6,7,0, 0,0,0,0,0,0),	/*  NIP  */
		new Array( 7,1,3,9,7,11,3,0,0,0, 0,0,0,0,0,0),	/* BANK  */
		new Array(10,9,8,7,6, 5,4,3,2,0, 0,0,0,0,0,0),	/* ISBN  */
		new Array( 2,1,2,1,2, 1,2,1,2,1, 2,1,2,1,2,1),	/* CCARD */
		new Array( 3,1,3,1,3, 1,3,1,3,1, 3,0,0,0,0,0),	/* IACS  */
		new Array( 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,0),	/* blank */
		new Array( 7,3,1,0,7, 3,1,7,3,1, 0,0,0,0,0,0),	/* DowOso*/
		new Array( 0,1,2,3,4, 5,6,0,0,0, 0,0,0,0,0,0),	/* NrPrWZ*/
		new Array( 1,2,1,2,1, 2,1,2,1,2, 1,2,1,2,1,2),  /* IMEI  */
		new Array( 1,2,1,2,1, 2,1,2,1,2, 1,2,1,2,1,2) );  /* sztuczny NrGosp  */

   /* NIP    6 5 7 2 3 4 5 6 7 MOD 11 plus ostatnia cyfra */
   /* REGON  8 9 2 3 4 5 6 7   MOD 11 plus ostatnia cyfra */
   /* BANKI  7 1 3 9 7 11 3    MOD 10 plus ostatnia cyfra */
   /* ISBN  10 9 8 7 6 5 4 3 2 MOD 11 */
   /* NPWZ   0 1 2 3 4 5 6     MOD 11 ck na poz. 1 */

  var  cyfry = new Array  (0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 );

  if (tempStr != '') 
  { 			// zamiana znaków na liczby
	  comment = ' ';			//  alert( tempStr );
	  if (rodzajNum == 8) 
	  {
		  tempStr = compactNonAlfa(tempStr);
		  if (!trzyLitery( tempStr )) 
		    comment = ' formalnie, ale brak trzech liter' 
		}
	  else	tempStr = compactString(tempStr);
	  // alert( tempStr )
    
  	if (rodzajNum == 5) 
  	{ // wydluz spacjami
	    tempStr = "0000000000" + tempStr;  
	    L = tempStr.length;
	    tempStr = tempStr.substring(L-16,L); // L = tempStr.length; 
		  //    alert('L='+L + ' ['+tempStr+']' );
	  }

	  L = tempStr.length;
	  for ( i=0; i<L; i++ ) 
	  {
	    znak = tempStr.charAt(i); 	//  alert( znak );
	    if (rodzajNum == 8) 
	    {
		    if ((znak >='A') && (znak <='Z')) 
		    {
		      znak = asciiCodeOf(znak) % 10; 
		      // tempStr = tempStr.substring(0,i) + ca +tempStr.substring(i+1,tempStr.length);
		    } 
	    }

	    if (znak == 'X') cyfry[i]= 10
	  	else 	cyfry[i] = parseInt(znak);
	  }  
    //	 alert( 'L= '+L+'  dlug[tabl]='+dlug[rodzajNum] );
    //	 alert('nr rodz numeru= '+ rodzajNum + ' cyfry=' + cyfry[0] + cyfry[1] + cyfry[2] + cyfry[3] + cyfry[4] + cyfry[5] + cyfry[6] + cyfry[7] + cyfry[8] );
	  if ((L == dlug[rodzajNum]) || (rodzajNum == 5))
	  {
	    suma = 0;   
	    if (rodzajNum == 5)	// CCard
		    for (i=0; i<L-1; i++) 
		    {
		      suma = suma + suma_cyfr(wagi[rodzajNum][i]*cyfry[i]);
					// alert( suma );
		    }
	    else  
	      for (i=0; i<L-1; i++) 
	      {
		      suma = suma + (wagi[rodzajNum][i]*cyfry[i]);
		      // alert( wagi[rodzajNum][i]+'*'+cyfry[i]+' suma='+suma );
		    }
		    
	    if (rodzajNum == 8 || rodzajNum == 9) // dodaj iloczyn ostatniej
	  	  suma = suma + (wagi[rodzajNum][L-1]*cyfry[L-1]);
	    // alert( wagi[rodzajNum][i]+'*'+cyfry[i]+' suma='+suma );
	    if (rodzajNum == 10) 
	    { // IMEI
	  	  suma = 0;
		    for (i=0; i<L-1; i++) 
		    {
		      suma = suma + suma_cyfr(wagi[rodzajNum][i]*cyfry[i]);
			    // alert( 'Suma IMEI = ' + suma );
		    }
	    }	
	    if (rodzajNum == 11) 
	    { /* NrGosp IACS */  // alert('wejscie w IACS');
	  	  sp=0; snp=0; lp=0;
		    for (i=0; i<L-1; i++)
		      if (cyfry[i] % 2 == 0) 
		      {
		        sp += cyfry[i];
		        lp += 1;
		      }
		      else snp += cyfry[i];
		    suma = (23*sp + 17*snp + lp);	 
		    // alert( 'sp=' + sp + '  snp=' + snp +'  lp=' + lp + '  Suma NrGosp= ' + suma );
	    }
      
	    suma = suma % mody[rodzajNum];
	    if (rodzajNum == 0)  suma = (10-suma) % 10; // PESEL 
	    if (rodzajNum == 1)  suma =     suma  % 10; // REGON 
	    if (rodzajNum == 2)  suma =     suma;       // NIP 
	    
	    if (rodzajNum == 4)  suma = (11-suma) % 11; // ISBN  
	    if (rodzajNum == 5)  suma = (10-suma) % 10; // CCARD 
	    if (rodzajNum == 6)  suma = (10-suma) % 10; // IACS 

	    if (rodzajNum ==10)  suma = (10-suma) % 10; // IMEI
	    if (rodzajNum ==11)  suma =     suma  %  7; // NrGospIACS
	      
	    wynikB = ( suma == cyfry[L-1] );
	    if (rodzajNum == 8)
		    wynikB = ( suma % 10 == cyfry[3] );
	    if (rodzajNum == 9) 
	    {
		    wynikB = ( suma % 11 == cyfry[0] );
		    //	 alert('obl.cyfr='+suma+'   cyfra='+cyfry[0]);
	    }
	    if (rodzajNum == 0) comment = DatawPeselu( tempStr );

	    if (rodzajNum == 1) 
	    { // REGON
	      num = cyfry[0]*10 + cyfry[1];
	      if ((num != 0) && (num % 2 ==0 ) || (num>97)) comment = ' i błędny kod woj.';
	    }

	    if (rodzajNum == 2) // NIP
	      if (cyfry[0]==0 || cyfry[2]==0) comment = ' i błędny kod Urzędu';

//ja	  document.forms[0].wynik.value = tempStr + (wynikB ? ' =Dobry': ' = Zły ') + comment;
//ja	  document.forms[0].dane.value = ' ';
      if (wynikB) return true;//ja
	  } 
	  else 
	  {
		  return false;//ja
	  }
  }
  else 
  {	
    return false;
//ja    document.forms[0].wynik.value = ' brak danych';
	// document.forms[0].dane.value = '';  // alert( tempStr );
  }
//ja  document.forms[0].dane.focus();
  return false;
} // fun verifyPESEL


function compactNonAlfa() 
{

  var inpstr= compactNonAlfa.arguments[0];	
  var inpstl= inpstr.length;  			
  //	alert('compactNonAlfa = '+inpstr);
  for(i=0;i<inpstr.length;i++) 
  {
	  znak = inpstr.charAt(i);
	  znak = znak.toUpperCase(); 	// malym znakom pozwalamy sie zmienic na wielkie
		    // alert('inpStr='+inpstr.substring(0,i) +'?'+ inpstr.substring(i+1,inpstr.length));
	  if (!( ( znak>='0' && znak<='9' ) || ( znak >='A' && znak<='Z' ) ) ) 
	  {
	    inpstr = inpstr.substring(0,i) + inpstr.substring(i+1,inpstr.length);
	    i = i-1; 
	  }
  }
  //   alert('inpstr=' + inpstr.toUpperCase() );
  return inpstr.toUpperCase();
} // fun compactNonAlfa


function  verifyIBAN() 
{		

  var  tempStr = verifyIBAN.arguments[0];  //  alert( verifyIBAN.arguments[0] );

  if (tempStr != '') 
  {
	  // krok 0  pozostaw cyfry i litery A-Z a-z, zamien na UpperCase
	  //	   jesli na pocz. brak PL to tam wpisz
	  tempStr = compactNonAlfa(tempStr);	//  alert( tempStr );
	  if ((tempStr.charAt(0)<='9') && (tempStr.charAt(1)<='9'))
	   tempStr = 'PL' + tempStr;
	  kopia   = tempStr;

	  // krok 1  przesun 4 pierwsze znaki na koniec
	  tempStr = tempStr.substring(4,tempStr.length) + tempStr.substring(0,4);
  
	  // krok 2  zamien litery na cyfry 

	  for(var i=0;i<tempStr.length;i++) 
	  { // alert( i );
	    znak = tempStr.charAt(i);
		    // alert('tempStr='+tempStr.substring(0,i) +'?'+ tempStr.substring(i+1,tempStr.length));
	    if ((znak >='A') && (znak <='Z')) 
	    {
		    ca = asciiCodeOf(znak); 
		    tempStr = tempStr.substring(0,i) + ca +tempStr.substring(i+1,tempStr.length);
	    } 
	  }

	  // krok 3 podziel modulo 97; dana testowa BE62 5100 0754 7061 powinno wyjsc 1
	  mod = 0; L = tempStr.length;
	  for(var i=0;i<L;i=i+6) 
	  {
	    // alert('mod=' + ''+mod+tempStr.substring( i, i+6) );
	    // Uwaga: Netscape i IExpolorerze w parseInt traktuje 011 jako zapis oktalny
	    //	  wiec lepiej wymusic traktowanie dziesietne
	    mod = parseInt(''+mod+tempStr.substring( i, i+6),10 ) % 97;

	  }
	  // krok 4
	  document.forms[0].wynik.value = kopia + ((mod==1)?' =Dobry':' = Zły ');
  }
  else 
  {	
    document.forms[0].wynik.value = ' brak danych';
  }
  document.forms[0].dane.focus();
  return false;
} // fun verifyIBAN

function formInit() 
{
  document.forms[0].dane.value='';
  document.forms[0].dane.focus();
}

function compactString() 
{		// analyze input string
  var inpstr= compactString.arguments[0];	// document.forms[0].dane.value;  
  var inpstl= inpstr.length;  		// document.forms[0].dane.length;
					// keyboard=true;
  for(i=0;i<inpstr.length;i++) 
  {
	  znak = inpstr.charAt(i);
		// alert('inpStr='+inpstr.substring(0,i) +'?'+ inpstr.substring(i+1,inpstr.length));
	  if ((znak<'0' || znak>'9') && (znak !='X') && (znak !='x')) 
	  {
	    inpstr = inpstr.substring(0,i) + inpstr.substring(i+1,inpstr.length);
	    i = i-1;
	  }
		//  alert('inpStr='+inpstr);
  }
  return inpstr;
}