// JavaScript Document
/*********************************************************************
WALIDACJA FORMULARZA 

@author Daniel Meyer, Tomasz Falkowski
@version 1.0
@date 2.07.2007

@parameters 
    nazwa - nazwa formularz 
    arr - tablica dwuwymirowa, 3 koluumny: input name, rodzaj walidacji, tytuł 
@return true/false

przykład użycia:
    <script language="javascript" type="text/javascript" src="_libs/_javascript/checkForm.js"></script>
    <form method="post" action="#" name="register" onsubmit="
    return checkForm('register', 
        new Array(
          new Array('firstname','noempty','imię'),
          new Array('lastname','noempty','nazwisko')))">
	    
	     Imię:
	     <input class="inpat2" type="text" name="firstname" maxlength="50" />
       <b id="bold_firstname" style="color:red; visibility:hidden;">*</b>
       <textarea name="info" style="width: 500px; height: 40px; border: 0px solid black;" readonly="true"></textarea> 
      </form> 
*********************************************************************/


function checkForm(nazwa,arr) {
	//alert("Start");
	var bledy = 0;
	var blad=true;
	var blad1=true;
	var info1="";
	
//	alert("Długość tablicy arr: "+arr.length);
	for(i=0;i<arr.length;i++)
	{
		with (document.forms[nazwa]) {
		//alert("Pozycja: "+arr[i][0]);
     switch (arr[i][1])
     {
        
        
        case "radiochecked" : 
                  {
                    //alert("Wybrana walidacja: "+arr[i][1] );                
                     var chckd = false; 
                     for (j = 0; j < elements[arr[i][0]].length; j++)
                      {
                        if (elements[arr[i][0]].item(j).checked){chckd = true;}
                      }                
                    if (!chckd) {blad = true; bledy++;info1+= " "+arr[i][2]+"," ;} else blad=false;
                    document.getElementById('bold_'+arr[i][0]).style.visibility = (blad) ? "visible" : "hidden";
                   break;} 
        case "decimal" : 
                  {
                    //alert("Wybrana walidacja: "+arr[i][1] );
                    if(!decimal_validate(elements[arr[i][0]].value)) {blad = true; bledy++;info1+= " "+arr[i][2]+"," ;} else blad=false;
                    document.getElementById('bold_'+arr[i][0]).style.visibility = (blad) ? "visible" : "hidden";
                   break;} 
        case "datatime" : 
                  {
                    //alert("Wybrana walidacja: "+arr[i][1] );
                    if(!datatime_validate(elements[arr[i][0]].value)) {blad = true; bledy++;info1+= " "+arr[i][2]+"," ;} else blad=false;
                    document.getElementById('bold_'+arr[i][0]).style.visibility = (blad) ? "visible" : "hidden";
                   break;}  
        case "float" : 
                  {
                   // alert("Wybrana walidacja: \'nip\'" );
                    if(!isFloat(elements[arr[i][0]].value)) {blad = true; bledy++;info1+= " "+arr[i][2]+"," ;} else blad=false;
                    document.getElementById('bold_'+arr[i][0]).style.visibility = (blad) ? "visible" : "hidden";
                   break;}  
        case "int" : 
                  {
                   //alert("Wybrana walidacja: "+arr[i][1] );
                    if(!isInt(elements[arr[i][0]].value)) {blad = true; bledy++;info1+= " "+arr[i][2]+"," ;} else blad=false;
                    document.getElementById('bold_'+arr[i][0]).style.visibility = (blad) ? "visible" : "hidden";
                  break;} 
        case "nr" : 
                  {
                   //alert("Wybrana walidacja: "+arr[i][1] );
                    if(!isNr(elements[arr[i][0]].value)) {blad = true; bledy++;info1+= " "+arr[i][2]+"," ;} else blad=false;
                    document.getElementById('bold_'+arr[i][0]).style.visibility = (blad) ? "visible" : "hidden";
                  break;} 				  
        case "noempty" : 
                  {
                    //alert("Wybrana walidacja: "+arr[i][1] );
                    //alert("wartość: "+elements[arr[i][0]].value);
                    if(elements[arr[i][0]].value == "") {blad = true; bledy++;info1+= " "+arr[i][2]+"," ;} else blad=false;
                    document.getElementById('bold_'+arr[i][0]).style.visibility = (blad) ? "visible" : "hidden";
                  break;}
        case "noselect" : 
                  {
                    //alert("Wybrana walidacja: "+arr[i][1] );
                    //alert("wartość: "+elements[arr[i][0]].value);
					var f = document.register;
					if(f.elements[arr[i][0]].checked) blad=false; else {blad = true; bledy++;info1+= " "+arr[i][2]+"," ;}
                    document.getElementById('bold_'+arr[i][0]).style.visibility = (blad) ? "visible" : "hidden";
                  break;}				  
        case "selected" : 
                  {
                   //alert("Wybrana walidacja: "+arr[i][1] );
                   //alert("Wartość: "+elements[arr[i][0]].selectedIndex );
                    if(elements[arr[i][0]].selectedIndex == 0) {blad = true; bledy++;info1+= " "+arr[i][2]+"," ;} else blad=false;
                    document.getElementById('bold_'+arr[i][0]).style.visibility = (blad) ? "visible" : "hidden";
                  break;}          
        case "email" : 
                  {
                    //alert("Wybrana walidacja: "+arr[i][1] );  
					//alert("Wybrana walidacja1: "+isValidEmail(elements[arr[i][0]].value) );  
                    if(!isValidEmail(elements[arr[i][0]].value)) {blad = true; bledy++;info1+= " "+arr[i][2]+"," ;} else blad=false;
                    document.getElementById('bold_'+arr[i][0]).style.visibility = (blad) ? "visible" : "hidden";
               
                  break;}
        case "login" : 
                  {
                   //alert("Wybrana walidacja: "+arr[i][1] );
                    if(!isValidLogin(elements[arr[i][0]].value,5,20)) {blad = true; bledy++;info1+= " "+arr[i][2]+"," ;} else blad=false;
                    document.getElementById('bold_'+arr[i][0]).style.visibility = (blad) ? "visible" : "hidden";
               
                  break;}
        case "nip" : 
                  {
                   //alert("Wybrana walidacja: "+arr[i][1] );
                    if(!sprNumer(elements[arr[i][0]].value,10,10)) {blad = true; bledy++;info1+= " "+arr[i][2]+"," ;} else blad=false;
                    document.getElementById('bold_'+arr[i][0]).style.visibility = (blad) ? "visible" : "hidden";
               
                  break;}  
        case "phone" : 
                  {
                   //alert("Wybrana walidacja: "+arr[i][1] );
				   if(elements[arr[i][0]].value.length > 0)
				   {
                    if(!sprTel(elements[arr[i][0]].value,7,30)) {blad = true; bledy++;info1+= " "+arr[i][2]+"," ;} else blad=false;
                    document.getElementById('bold_'+arr[i][0]).style.visibility = (blad) ? "visible" : "hidden";
					}
               
                  break;}                   
        case "zipcode" : 
                  {
                   //alert("Wybrana walidacja: "+arr[i][1] );
                    if(!sprNumer(elements[arr[i][0]].value,5,5)) {blad = true; bledy++;info1+= " "+arr[i][2]+"," ;} else blad=false;
                    document.getElementById('bold_'+arr[i][0]).style.visibility = (blad) ? "visible" : "hidden";
                  break;}
        case "regon" : 
                  {
                   //alert("Wybrana walidacja: "+arr[i][1] );
                    if(!sprNumer(elements[arr[i][0]].value,7,14)) {blad = true; bledy++;info1+= " "+arr[i][2]+"," ;} else blad=false;
                    document.getElementById('bold_'+arr[i][0]).style.visibility = (blad) ? "visible" : "hidden";
               
                                  
                  break;}                   
        case "pass2" : 
                  {
                  //alert("Wybrana walidacja: "+arr[i][1] ); 
                    if(!isValidLogin(elements[arr[i][0]].value,5,16)) {blad = true; bledy++;info1+= " "+arr[i][2]+"," ;} else blad=false;
                    if(!isValidLogin(elements[arr[i][0]+"2"].value,5,16)) {blad1 = true; bledy++;info1+= " potwierdzone "+arr[i][2]+"," ;} else blad1=false;
                    if(!blad && !blad1)
                       if(elements[arr[i][0]].value != elements[arr[i][0]+"2"].value) {blad = true; blad1 = true; bledy++; info1+=", hasła muszą być takie same";} else {blad=false; blad1 = false;}
              
                    document.getElementById('bold_'+arr[i][0]).style.visibility = (blad) ? "visible" : "hidden";
                    document.getElementById('bold_'+arr[i][0]+"2").style.visibility = (blad1) ? "visible" : "hidden";                    
                  break;}                        
     }
    }
   }
      
if(bledy > 0) {
document.forms[nazwa].info.value="Niepoprawne pola: "+info1;    
document.getElementById('info').style.display = "block";  
}

return (bledy > 0) ? false : true;

}
//***************NUMER LICZBA(BEZ: spacji,myślnika,nawiasów)***********************
function isFloat(src)
{
  var regex = /^[0-9]+\,?[0-9]*$/;
  return regex.test(src); 
}
function isInt(src)
{
  var regex = /^[0-9]+$/;
  return regex.test(src); 
}

function isNr(src)
{
  var regex = /^[0-9\/ ]+$/;
  return regex.test(src); 
}

                  /*********** wyrażenie opisujące dobry adres e-mail:********
                  *   ^                 - początek napisu
                  *   [^@]+             - 1 lub więcej znaków innych niż @
                  *   @                 - znak @
                  *   ([a-z0-9\-]+\.)+  - jedna lub więcej grupa, a w niej:
                  *   [a-z0-9\-]+       - jedna lub więcej litera, cyfra lub myślnik
                  *   \.                - kropka
                  *   [a-z]{2,4}        - od dwóch do czterech liter
                  *   $                 - koniec napisu
                  ************************************************************/
                  
function isValidEmail1(strEmail)
{
  var regex = /^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/;
  return regex.test(src);
}
function isValidEmail(strEmail){
  validRegExp = /^[^@]+@[^@]+.[a-z]{2,}$/i;
	return validRegExp.test(strEmail); 
 return true; 
}

function isValidLogin(str,min,max){
if(str.length<min || str.length>max)return false;
var regex = /^[0-9a-zA-Z]+$/i;
    return regex.test(str); 
}

//***************NUMER (BEZ: spacji,myślnika)**********************************
function sprNumer(str, min, max)
{
//alert(str);
var  stri = str.replace(/[\-\s]/g,'');
//usuwa spacje
//stri = stri.replace(/\s/g,'');
validRegExp = /^[0-9]+$/;
//alert(stri);
if(stri.length<min || stri.length>max)return false;
if (stri.search(validRegExp) == -1)     return false;  
return true; 
}
//***************NUMER TELEFONU (BEZ: spacji,myślnika,nawiasów)***********************
function sprTel(str, min, max)
{
var  stri = str.replace(/[\-\s\)\(]/g,'');
validRegExp = /^[0-9]+$/;
//alert(stri);
if(stri.length<min || stri.length>max)return false;
if (stri.search(validRegExp) == -1)     return false;
return true; 
}

function postal_code_validate(src)
{
  var regex = /^[0-9]{2}\-[0-9]{3}$/;
  return regex.test(src);
}
function integer_validate(src) 
{
  var regex = /^[\-]{0,1}[0-9]{1,8}$/;
  return regex.test(src);
}
function disableInput(nazwa,sel,val,dis)
{
	alert('startDis');
  	with (document.forms[nazwa]) {
	//	alert("Pozycja: "+arr[i][0]);
    if(elements[sel].value=val) elements[dis].disabled="true";
      else elements[dis].disabled="false";
  }
}
function datatime_validate(src)
{
var regex = /^(3[01])?([12][0-9])?(0?[1-9])?\-([1][0-2])?(0?[1-9])?\-([0-9]{4})\s(2[0-3])?(1[0-9])?(0?[0-9])?:([1-5][0-9])?(0?[0-9])?:([1-5][0-9])?(0?[0-9])?$/;
return regex.test(src);
}
function decimal_validate(src)
{
var regex = /^[0-9]+(\,[0-9]{1,2})?$/;
return regex.test(src);
}

