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 verifyNumber() {		// copyright R.J.żyłła 2000-2006 
//  alert( verifyNumber.arguments[0] );
var  rodzajNum =verifyNumber.arguments[0];
var  tempStr   =verifyNumber.arguments[1];

  if (rodzajNum != 7)
	if (rodzajNum!=-1)
	     { return verifyPESEL( rodzajNum,tempStr ); }
	else { 
		//document.forms[0].wynik.value = 'Niewybrany rodzaj numeru. Brak danych' 
		alert('Niewybrany rodzaj numeru. Brak danych');
	}
  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() {		// copyright R.J.żyłła 2000-2007 
//  alert( verifyPESEL.arguments[0] );
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');
// alert( nazwy[ rodzajNum ] );

var  dlug  = new Array  ( 11, 9,10, 8,10,16,12,28, 9, 7,15 );
var  mody  = new Array  ( 10,11,11,10,11,10,10,97,10,11,10 );
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  */

   /* 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
	    }

	    if (znak == 'X') cyfry[i]= 10
	  	else 	cyfry[i] = parseInt(znak);
	}  
	// alert( 'L= '+L+'  dlug[tabl]='+dlug[rodzajNum] );
	// alert('nr rodz numeru= '+ rodzajNum );
	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 );
		}
	  }
	  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
	  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 == 0){ 
	  	//comment = DatawPeselu( tempStr );
	  	//alert(tempStr + (wynikB ? ' =Dobry': ' = Zły ') + comment);
		/*if(wynikB ==  false){
			alert('Podany numer PESEL: ' + tempStr  +' jest nieprawidlowy');
			return false;
		} */
		return wynikB;
	  	//f.pesel.value = ' ';
	  }

	  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';

	  //document.forms[0].wynik.value = tempStr + (wynikB ? ' =Dobry': ' = Zły ') + comment;
	  //alert(tempStr + (wynikB ? ' =Dobry': ' = Zły ') + comment);
	  //document.forms[0].dane.value = ' ';
	  return wynikB;
	} 
	  else {
		wynikB = false;
		//document.forms[0].wynik.value = tempStr + (L<dlug[rodzajNum]? ' zbyt mało': ' za dużo') + ' cyfr';
		// alert(tempStr + (L<dlug[rodzajNum]? ' zbyt mało': ' za dużo') + ' cyfr');
		// document.forms[0].dane.value = '';
		
		if ((L == dlug[rodzajNum]-1) && (rodzajNum == 10)) {
	  	    alert( 'dla numeru IMEI obliczyć cyfrę kontroln± ?');
		    suma = 0;
		    for (i=0; i<L; i++) {
			suma = suma + suma_cyfr(wagi[rodzajNum][i]*cyfry[i]);
			 // alert( 'Suma IMEI = ' + suma );
		    }	//alert( 'Suma IMEI = ' + suma );
		    CK = (10 - suma % 10) % 10;
		    //document.forms[0].wynik.value = tempStr + '   ' + CK + '   ck obliczone';
			alert(tempStr + '   ' + CK + '   ck obliczone');
		    document.forms[0].dane.value = ' ';
		}
	}
    }
     else 
    {	
		//document.forms[0].wynik.value = ' brak danych';
		alert(' brak danych');
	// document.forms[0].dane.value = '';  // alert( tempStr );
    }
  document.forms[0].dane.focus();
  return false;
} // fun verifyPESEL


function compactNonAlfa() {

var inpstr= compactNonAlfa.arguments[0];	// document.forms[0].dane.value;
var inpstl= inpstr.length;  			// document.forms[0].dane.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() {		// copyright R.J.żyłła 2003-2006 

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);
	    } // if
	}// for

	// 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 ');
	alert(kopia + ((mod==1)?' =Dobry':' = Zły '));
    }
     else 
    {	
		//document.forms[0].wynik.value = ' brak danych';
		alert(' 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;
}