//zwraca nacisniety klawisz
//dziala pod IE i N
function getkey(e){
 if (window.event)
    return window.event.keyCode;
 else if (e)
    return e.which;
 else
    return null;
}



function int_valid(e){
 var key, keychar;
 
 //pobranie znaku
 key = getkey(e);
 if (key == null) return true;

 // pobierz znak
 keychar = String.fromCharCode(key);
 
 // wzorzec inta
 //int_expr = /[0-9]/;
 int_expr = /^\d$/;
 //dopasowanie do wzorca inta
 if(int_expr.test(keychar))
  return true;

 // klawiesze kontrolne i funkcyjne
 if ( key==null || key==0 || key==8 || key==9 || key==13 || key==27 )
   return true;

 // nic nie podpasowalo wiec zwroc false
 return false;
}



function kod_valid(e,obj){
 var key, keychar;
 var temp_kod;
 //pobranie znaku
 key = getkey(e);
 if (key == null) return true;

// klawiesze kontrolne i funkcyjne
 if ( key==null || key==0 || key==8 || key==9 || key==13 || key==27 )
   return true;
 
 // pobierz znak
 keychar = String.fromCharCode(key);
 
 temp_kod=obj.value+keychar;
 
 if (temp_kod.length==7) return false;
 
 //kod_expr = /[\d][\d]?[-]?[\d]?[\d]?[\d]?[\d]?/;
 
 //if(kod_expr.test(temp_kod))
 	//alert('ok');
 
 //proba dodania 2. znaku
 if(obj.value.length==2){  
  obj.value=obj.value+'-';
 }
 
 
 // wzorzec inta
 //int_expr = /[0-9]/;
 int_expr = /[\d]/;//
 //dopasowanie do wzorca inta
 if(int_expr.test(keychar))
  return true;


 // nic nie podpasowalo wiec zwroc false
 return false;
}

function int_comma_valid(e){
 var key, keychar;
 
 //pobranie znaku
 key = getkey(e);
 if (key == null) return true;

 // pobierz znak
 keychar = String.fromCharCode(key);
 
 // wzorzec inta
 int_expr1 = /^\d$/; 
 int_expr2 = /^\.$/; 
 //dopasowanie do wzorca inta
 if(int_expr1.test(keychar)||int_expr2.test(keychar))
  return true;

 // klawiesze kontrolne i funkcyjne
 if ( key==null || key==0 || key==8 || key==9 || key==13 || key==27 )
   return true;

 // nic nie podpasowalo wiec zwroc false
 return false;
}

function data_valid(e,obj){
 var key, keychar;
 var temp_data;
 
 //wzorce
 
 // wzorzec inta
 //int_expr = /[0-9]/;
 int_expr = /[\d]/;//
 
 
 
 //pobranie znaku
 key = getkey(e);
 if (key == null) return true;

// klawiesze kontrolne i funkcyjne
 if ( key==null || key==0 || key==8 || key==9 || key==13 || key==27 )
   return true;
 
 // pobierz znak
 keychar = String.fromCharCode(key);
 
 //if((obj.selected==true)&&((int_expr.test(keychar))||(keychar=='-'))) return true;
 
 temp_data=obj.value+keychar;
 
 
 //dlugosc maxymalna 10
 if (temp_data.length==11) return false;
 
 //na pierwszej pozycji 0-3
 if (temp_data.length==1){
 	if (!((temp_data>=0)&&(temp_data<=3))) return false;
 } 
 
 //dzien pomiedzy 01-31
 if(temp_data.length==2){
 	if (!((temp_data>0)&&(temp_data<=31))) return false;
 }
 
 

 // proba dodania 3. znaku
 // znak musi być 0-1 dla dni od 1 do 28 i 30,31
 // znak musi być 0 dla dnia 29
 if(obj.value.length==2){
  if(keychar=='-') return true;
  if((keychar==0)||(keychar==1)){
   	obj.value=obj.value+'-';
   	return true;
  }else{
  		return false;
  }
 }
 
 

 // proba dodania 4. znaku
 if(obj.value.length==3){
  if((keychar==0)||(keychar==1)){
   return true;
  }else{
   return false;
  }
 }

 
 //proba dodania 5 znaku
 if(obj.value.length==4){
  var _day = obj.value.substr(0,2);
  var _m_head = obj.value.charAt(3);
  
  //alert(_day+' '+_m_head);
  //alert(_m_head);
  //alert(_day);
  if(!int_expr.test(keychar)){
   return false;
  }else{
   
   if((_m_head==0)&&(keychar==0)&&(keychar=0)) return false;
   
   
   

   if(((_day==30)||(_day==31)) && (_m_head==0)&&(keychar==2)) return false;
   //if(((_day==30)&&(_m_head==0)) && ((keychar!=4)&&(keychar!=6)&&(keychar!=9))) return false;
   if( ((_day==30)&&(_m_head==1)) && (keychar!=0) && (keychar!=1) && (keychar!=2)) return false;
   if( ((_day==31)&&(_m_head==0)) && ((keychar!=1)&&(keychar!=3)&&(keychar!=5)&&(keychar!=7)&&(keychar!=8))) return false;
   if( ((_day==31)&&(_m_head==1)) && (keychar==1) ) return false;
   if( ((_day==31)&&(_m_head==1)) && ((keychar!=0)&&(keychar!=2)&&(keychar!=1))) return false;
   if (((_day>=1)&&(_day<=30))&&(_m_head==1) && ((keychar!=0)&&(keychar!=1)&&(keychar!=2))) return false;

   
  // if((_day>=1)&&(_day<=29)&&(_m_head==0)&&(keychar>=1)&&(keychar<=9)){ 
  //  return true;
  // }else{
  //  if((_day>=1)&&(_day<=29)&&(_m_head==1)&&((keychar==0)||(keychar==1)||(keychar==2))){ 
  //   return true;
  //  }else{
  //   return false;
  //  }
  // }
    
   

   
  }
  	
  return true;	
 }
 
 //proba dodania 6. znaku
 if(obj.value.length==5){
  if(keychar=='-') return true;  
  obj.value=obj.value+'-';
 }
 
 _29_02_expr = /^[2]?[9]?[-]?[0]?[2]?[-]?[0-9]{3}$/;
 
 if(obj.value.length==9){
 // if(_29_02_expr.test(obj.value)) alert('29');
  var _head = obj.value.substr(6,8);
  var _year = _head+keychar;
  if((_29_02_expr.test(obj.value))){
   if( (_year%4==0) && ((_year%100!=0)||(_year%400==0)) ){
    return true;
   }else{
    return false;
   }
  }else{
   return true;
  }
 }
 
 // wzorzec inta
 //int_expr = /[0-9]/;
 int_expr = /[\d]/;//
 //dopasowanie do wzorca inta
 if(int_expr.test(keychar))
  return true;


 // nic nie podpasowalo wiec zwroc false
 return false;
}


function year_valid(e,obj){
 var key, keychar;
 var temp_data;
 
 //wzorce
 
 // wzorzec inta
 //int_expr = /[0-9]/;
 int_expr = /^[\d]$/;//
 
 
 
 //pobranie znaku
 key = getkey(e);
 if (key == null) return true;

// klawiesze kontrolne i funkcyjne
 if ( key==null || key==0 || key==8 || key==9 || key==13 || key==27 )
   return true;
 
 // pobierz znak
 keychar = String.fromCharCode(key);
 
 if(obj.value.length==4) return false;
 if(!int_expr.test(keychar)) return false;
 
 return true;
}


function vin_valid(e,obj){
 var key, keychar;
 var temp_data;
 
 //wzorce
 
 // wzorzec inta
 //int_expr = /[0-9]/;
 vin_expr = /^[a-zA-Z0-9]$/;//
 
 //pobranie znaku
 key = getkey(e);
 if (key == null) return true;

// klawiesze kontrolne i funkcyjne
 if ( key==null || key==0 || key==8 || key==9 || key==13 || key==27 )
   return true;
 
 // pobierz znak
 keychar = String.fromCharCode(key);
 
 if(obj.value.length==17) return false;
 if(!vin_expr.test(keychar)) return false;
 
 return true;
}

function nip1_valid(e,obj){
 var key, keychar;
 var temp_data;
 
 //wzorce
 
 // wzorzec inta
 //int_expr = /[0-9]/;
 int_expr = /^[\d]$/;//
 
 
 
 //pobranie znaku
 key = getkey(e);
 if (key == null) return true;

// klawiesze kontrolne i funkcyjne
 if ( key==null || key==0 || key==8 || key==9 || key==13 || key==27 )
   return true;
 
 // pobierz znak
 keychar = String.fromCharCode(key);
 
 if(obj.value.length==13) return false;
 
 if(!int_expr.test(keychar)&&keychar!='-') return false;
 
 if(obj.value.length==3){
  if(keychar=='-') return true;
  obj.value = obj.value+'-';
  return true;
 }
 
 if(obj.value.length==7){
  if(keychar=='-') return true;
  obj.value = obj.value+'-';
  return true;
 }
 
 if(obj.value.length==10){
  if(keychar=='-') return true;
  obj.value = obj.value+'-';
  return true;
 }
 
 if(obj.value.length==13){
	var suma;
	
	suma  = 6*obj.value.charAt(0);
	suma += 5*obj.value.charAt(1);
	suma += 7*obj.value.charAt(2);
  	suma += 2*obj.value.charAt(4);
	suma += 3*obj.value.charAt(5);
	suma += 4*obj.value.charAt(6);
	suma += 5*obj.value.charAt(8);
	suma += 6*obj.value.charAt(9);
	suma += 7*obj.value.charAt(11);
	
	if(keychar!=(suma%11)) return false;
	
	return true;
 }
 
 return true;
}

function nip_valid(e,obj){
 var key, keychar;
 var temp_data;
 
 //wzorce
 
 // wzorzec inta
 //int_expr = /[0-9]/;
 int_expr = /^[\d]$/;//
 
 
 
 //pobranie znaku
 key = getkey(e);
 if (key == null) return true;

// klawiesze kontrolne i funkcyjne
 if ( key==null || key==0 || key==8 || key==9 || key==13 || key==27 )
   return true;
 
 // pobierz znak
 keychar = String.fromCharCode(key);
 
 if(obj.value.length==10) return false;
 
 if(!int_expr.test(keychar)) return false;
 
 
 
 if(obj.value.length==9){
	var suma;
	
	suma  = 6*obj.value.charAt(0);
	suma += 5*obj.value.charAt(1);
	suma += 7*obj.value.charAt(2);
  	suma += 2*obj.value.charAt(3);
	suma += 3*obj.value.charAt(4);
	suma += 4*obj.value.charAt(5);
	suma += 5*obj.value.charAt(6);
	suma += 6*obj.value.charAt(7);
	suma += 7*obj.value.charAt(8);
	
	if(keychar!=(suma%11)) return false;
	
	return true;
 }
 
 return true;
}


function pesel_valid(e,obj){
 var key, keychar;
 var temp_data;
 
 //wzorce
 
 // wzorzec inta
 //int_expr = /[0-9]/;
 int_expr = /^[\d]$/;//
 
 
 
 //pobranie znaku
 key = getkey(e);
 if (key == null) return true;

// klawiesze kontrolne i funkcyjne
 if ( key==null || key==0 || key==8 || key==9 || key==13 || key==27 )
   return true;
 
 // pobierz znak
 keychar = String.fromCharCode(key);
 
 if(obj.value.length==11) return false;
 
 if(!int_expr.test(keychar)) return false;
 
 
 
 if(obj.value.length==10){
	var suma;
	
	suma  = 1*obj.value.charAt(0);
	suma += 3*obj.value.charAt(1);
	suma += 7*obj.value.charAt(2);
  	suma += 9*obj.value.charAt(3);
	suma += 1*obj.value.charAt(4);
	suma += 3*obj.value.charAt(5);
	suma += 7*obj.value.charAt(6);
	suma += 9*obj.value.charAt(7);
	suma += 1*obj.value.charAt(8);
	suma += 3*obj.value.charAt(9);
	
	if(keychar!=(10-(suma%10))) return false;
	
	return true;
 }
 
 return true;
}

function regon_valid(e,obj){
 var key, keychar;
 var temp_data;
 
 //wzorce
 
 // wzorzec inta
 //int_expr = /[0-9]/;
 int_expr = /^[\d]$/;//
 
 
 
 //pobranie znaku
 key = getkey(e);
 if (key == null) return true;

// klawiesze kontrolne i funkcyjne
 if ( key==null || key==0 || key==8 || key==9 || key==13 || key==27 )
   return true;
 
 // pobierz znak
 keychar = String.fromCharCode(key);
 
 if(obj.value.length==9) return false;
 
 if(!int_expr.test(keychar)) return false;
 
 
 
 if(obj.value.length==8){
	var suma;
	
	suma  = 8*obj.value.charAt(0);
	suma += 9*obj.value.charAt(1);
	suma += 2*obj.value.charAt(2);
  	suma += 3*obj.value.charAt(3);
	suma += 4*obj.value.charAt(4);
	suma += 5*obj.value.charAt(5);
	suma += 6*obj.value.charAt(6);
	suma += 7*obj.value.charAt(7);

	
	if(keychar!=(suma%11)) return false;
	
	return true;
 }
 
 return true;
}


function formatNumber(obj){
     		var nbr=new String(obj.value);
      	var spaceExpr = new RegExp(" ","g");
      	nbr = nbr.replace(spaceExpr,'');
      	//alert(nbr);
      	//formatuj dopiero od trzeciego znaku
      	
      	 var tmpStr = new String('');
      	 var knum = 0;
      	 for(var inum=(nbr.length-1);inum>=0;inum--){
      	  //alert(nbr.charAt(inum));
      	  knum++;
      	  tmpStr = nbr.charAt(inum)+tmpStr;
      	   if(inum!=0 && knum==3){
      	   tmpStr = ' '+tmpStr;
      	   knum = 0;
				}
      	  //alert(tmpStr);
      	 }
      	 
      	 obj.value=tmpStr;
      	
      	
		}
		
		
 /*******************************************************
  * nextjump - przenosi kursor miedzy dwoma inputami
  * srcID - id inputa z którego przenosimy kursor
  * targetID - id inputa do którego przenosimy kursor
  * maxlength - maksymalna dlugosc pierwszego inputa,
  * po osiagnieciu ktorej nastepuje przeskok
  *******************************************************/		

 function nextjump(srcID,targetID,maxlength,e){
 	key = getkey(e);
 	if( key!=8 ){
 	 var srcField = document.getElementById(srcID);
	 var targetField = document.getElementById(targetID);
	 if(srcField.value.length==maxlength) targetField.focus();
	}else{
	 var srcField = document.getElementById(targetID);	
	 var targetField = document.getElementById(srcID);
	 if(srcField.value.length==0) targetField.focus();
	}
 }		

 /***********************************************************
  * date3_valid - sprawdza poprawnosc wprowadzanych danych
  * w dacie rozlozonej na 3 pola (dd,mm,rrrr)
  * 
  * e - zdarzenie
  * d - id pola zawierajacego dzien
  * m - id pola zawierajacego miesiac
  * y - id pola zawierajacego rok
  * obj - obiekt który się odwoluje (pole dzien, miesiac lub rok)
  * 
  ************************************************************/		

 function date3_valid(e,d,m,y,obj){

	//pobranie znaku
 	key = getkey(e);
 	keychar = String.fromCharCode(key);

 	var day = document.getElementById(d).value;
 	var month = document.getElementById(m).value;
 	var year = document.getElementById(y).value;

 	//wzorce
 	int_expr = /[\d]/;
 	int_1_9_expr = /[1-9]/;
 
 	
 	if (key == null){
	 return true;
	}
	
	if (key==8){
		switch(obj.name){
			case m:
				if (month=='') document.getElementById(d).focus();
				return true;
			break;
			case y:
				if (year=='') document.getElementById(m).focus();
				return true;
			break;
			default:
			return true;
		}
	}
	
	// jeżeli  klawiesze kontrolne i funkcyjne to OK
 	if ( key==null || key==0 || key==9 || key==13 || key==27 ){
	 return true;
	}

   
   switch(obj.name){
   	case d:
   		//pierwsza cyfra dnia musi być z przedzialu 0-3
   		if (obj.value.length==0 && (keychar=='0' || keychar=='1' || keychar=='2' || keychar=='3')){
			 return true;
			}
			
	      //jeżeli pierwsza cyfra dnia jest trojka to nastepna liczba musi być z przedzialu 0-1
	      if (obj.value.length==1 && obj.value=='3' && (keychar=='0' || keychar=='1')){
			 return true;
			}
	      //jeżeli pierwsza cyfra dnia jest 1 lub 2 to nastepna liczba musi być z przedzialu 0-9
	      if (obj.value.length==1 && (obj.value=='1' || obj.value=='2') && int_expr.test(keychar)){
			 return true;
			}
	      //jeżeli pierwsza cyfra dnia jest 0 to nastepna musi być z przedzialu 1-9
	      if (obj.value.length==1 && obj.value=='0' && int_1_9_expr.test(keychar)){
			 return true;
			}

	   break;
	   case m:
	   	

	   	// pierwsza cyfra miesiaca musi być z przedzialu 0-1
	   	if (obj.value.length==0 && (keychar=='0' || keychar=='1')){
			 return true;
			}

	   	// jeżeli dzien 30 i pierwsza cyfra miesiaca jest zerem to kolejna cyfa={4,6,9}
	      if (obj.value=='0' && day=='30' && (keychar=='4' || keychar=='6' || keychar=='9')){
			 return true;
			}

	      // jeżeli dzien 30 i pierwsza cyfra miesiaca jest jedynka to kolejna cyfra może być tylko jedynka
	      if (obj.value=='1' && day=='30' && keychar=='1'){
			 return true;
			}

	      //jeżeli dzien 31 i pierwsza cyfra miesiaca jest zerem to kolejna cyfra={1,3,5,7,8}
	      if (obj.value=='0' && day=='31' && (keychar=='1' || keychar=='3' || keychar=='5' || keychar=='7' || keychar=='8')){
			 return true;
			}

	      //jeżeli dzien 31 i pierwsza cyfra miesiaca jest jedynką to kolejna cyfra={0,2}
	      if (obj.value=='1' && day=='31' && (keychar=='0' || keychar=='2')){
			 return true;
			}

			// jeżeli dzien jest mniejszy od 30 i cyfra miesiecy jest zerem to kolejna cyfra musi być z przedzialu 1-9
			if (obj.value=='0' && day<30 && int_1_9_expr.test(keychar)){
			 return true;
			}

			if (obj.value=='1' && day<30 && (keychar=='0' || keychar=='1' || keychar=='2')){
			 return true;
			}
	   break;
	   case y:
	   	
	   	var fullyear = obj.value+keychar;
	   	
	   	// jeżeli dotychczas pole rok ma mniej niż 3 znaki to kolejna cyfra musi być 0-9
	   	if(obj.value.length<3 && int_expr.test(keychar)){
	   	 return true;
	   	}
	   	
	   	// jeżeli podany jest 29 luty to rok musi być przestepny
	   	if (obj.value.length==3 && day=='29' && month=='02' && int_expr.test(keychar) && (fullyear%4==0) && ( fullyear%100!=0 || fullyear%400==0)){
			 return true;
			}
			
			// rok musi być z przedzialu 0001-9999
			if (obj.value.length==3 && obj.value=='000' && (day!='29' || month!='02') && int_1_9_expr.test(keychar)){
			 return true;
			}
			
			// rok musi być z przedzialu 0001-9999
			if (obj.value.length==3 && obj.value!='000' && (day!='29' || month!='02') && int_expr.test(keychar)){
			 return true;
			}
			 	
	   break;
   }

   return false;
 }
 
 /***********************************************************
  * joinDate - laczy wszystkie pola daty w jednym polu hidden
  * d - id pola zawierajacego dzien
  * m - id pola zawierajacego miesiac
  * y - id pola zawierajacego rok
  * fd - id pola hidden w którym ma być przechowywana cala wartosc daty
  * 
  ************************************************************/		 

 function joinDate(d,m,y,fd){
  var day 	= document.getElementById(d).value; 	
  var month = document.getElementById(m).value;
  var year 	= document.getElementById(y).value;	
  
  document.getElementById(fd).value = day+'-'+month+'-'+year;
 } 

 /***********************************************************
  * joinKod - laczy wszystkie pola daty w jednym polu hidden
  * h - id pola zawierajacego poczatek kodu poczt
  * t - id pola zawierajacego konic poczt
  * fd - id pola hidden w którym ma być przechowywana cala wartosc kody poczt
  * 
  ************************************************************/		 

 function joinKod(h,t,fk){
  
  var head 	= document.getElementById(h).value;
  var tail = document.getElementById(t).value;
  
  document.getElementById(fk).value = head+'-'+tail;
 }
 
 
 
 function emailCheck (emailStr) {
/* The following pattern is used to check if the entered e-mail address
   fits the user@domain format.  It also is used to separate the username
   from the domain. */
var emailPat=/^(.+)@(.+)$/
/* The following string represents the pattern for matching all special
   characters.  We don't want to allow special characters in the address. 
   These characters include ( ) < @ , ; : \ " . [ ]    */
var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
/* The following string represents the range of characters allowed in a 
   username or domainname.  It really states which chars aren't allowed. */
var validChars="\[^\\s" + specialChars + "\]"
/* The following pattern applies if the "user" is a quoted string (in
   which case, there are no rules about which characters are allowed
   and which aren't; anything goes).  E.g. "jiminy cricket"@disney.com
   is a legal e-mail address. */
var quotedUser="(\"[^\"]*\")"
/* The following pattern applies for domains that are IP addresses,
   rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal
   e-mail address. NOTE: The square brackets are required. */
var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
/* The following string represents an atom (basically a series of
   non-special characters.) */
var atom=validChars + '+'
/* The following string represents one word in the typical username.
   For example, in john.doe@somewhere.com, john and doe are words.
   Basically, a word is either an atom or quoted string. */
var word="(" + atom + "|" + quotedUser + ")"
// The following pattern describes the structure of the user
var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
/* The following pattern describes the structure of a normal symbolic
   domain, as opposed to ipDomainPat, shown above. */
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")


/* Finally, let's start trying to figure out if the supplied address is
   valid. */

/* Begin with the coarse pattern to simply break up user@domain into
   different pieces that are easy to analyze. */
var matchArray=emailStr.match(emailPat)
if (matchArray==null) {
  /* Too many/few @'s or something; basically, this address doesn't
     even fit the general mould of a valid e-mail address. */
	alert("Bledny adres email (sprawdz @ i '.')")
	return false
}
var user=matchArray[1]
var domain=matchArray[2]

// See if "user" is valid 
if (user.match(userPat)==null) {
    // user is not valid
	alert("Bledny adres email (sprawdz @ i '.')")
    return false
}

/* if the e-mail address is at an IP address (as opposed to a symbolic
   host name) make sure the IP address is valid. */
var IPArray=domain.match(ipDomainPat)
if (IPArray!=null) {
    // this is an IP address
	  for (var i=1;i<=4;i++) {
	    if (IPArray[i]>255) {
			alert("Bledny adres email (sprawdz @ i '.')")
		return false
	    }
    }
    return true
}

// Domain is symbolic name
var domainArray=domain.match(domainPat)
if (domainArray==null) {
	alert("Bledny adres email (sprawdz @ i '.')")
    return false
}

/* domain name seems valid, but now make sure that it ends in a
   three-letter word (like com, edu, gov) or a two-letter word,
   representing country (uk, nl), and that there's a hostname preceding 
   the domain or country. */

/* Now we need to break up the domain to get a count of how many atoms
   it consists of. */
var atomPat=new RegExp(atom,"g")
var domArr=domain.match(atomPat)
var len=domArr.length
if (domArr[domArr.length-1].length<2 || 
    domArr[domArr.length-1].length>6) {
   // the address must end in a two letter or other TLD including museum
	alert("Bledny adres email (sprawdz @ i '.')")
   return false
}

// Make sure there's a host name preceding the domain.
if (len<2) {
   var errStr="Bledny adres email!"
   alert(errStr)
   return false
}

// If we've got this far, everything's valid!
return true;
}