//======================================================
// Form validation functions
// Author: Leszek Leszczynski <lleszczynski@torn.com.pl>


		/*
			funkcja sprawdzająca poprawność przeciwko sumie kontrolnej
			value - wartość
			control - cyfry sumy kontrolnej, w tabeli
			modulo - wartość liczby modulo w sumie kontrolnej		
		
		*/
		function checkCS(value, control, modulo,minus) {
		
			var len = control.length;
			
			if((value.length-1)!=len) return "TOOSHORT";
			
			var sum = 0;
			
			for (i=0; i<len; i++)  {
				sum += value.charAt(i)*control[i];
			}
			
			sum%=modulo;
			if(minus) sum=modulo-sum;
			
			if (sum==value.charAt(len)) return "OK";
			else if((sum==10)&&(value.charAt(len)==0)) return "OK"
			
			else return "CSERROR";
		
		
			return "OK";
		}
		
		function checkPesel(value) {
			if(value=="") return "";
			var wagi=new Array(1,3,7,9,1,3,7,9,1,3);
			return checkCS(value,wagi,10,true);
		}

		function checkNIP(value) {
			if(value=="") return "";
			var wagi=new Array(6,5,7,2,3,4,5,6,7);
			return checkCS(value, wagi,11, false);
		
		}
				
		function getFromInp(form, input) {
			inp = eval("form.elements['"+input+"']");
			if(inp) {
				return inp.value;
			} else {
				return null;		
			}
		}
		
		
		/*
		
			zwraca:
			"OK" - ok
			"BADFORMAT" - zły format
			"TOOBIG" - za póżna data
			"TOOSMALL" - za mała
		 
		*/

		function checkDate(form, inputName, after, before, dateFormat){
			var d1="";
			var first = true;
			var nDf="";
			var eD="";
			var dd = dateFormat.length;
			for (i = 0; i<dd; i++) {
			
				ch = dateFormat.charAt(i);
				
				switch (ch) {
					case 'y': if(!first) {eD+="-"; d1+="-"; nDf+="-";} else first=false; d1+=getFromInp(form,inputName+"_year"); nDf+="y"; do {i++;} while ((i<dd)&&(dateFormat.charAt(i)==ch)); break;
					case 'M': if(!first) {eD+="-"; d1+="-"; nDf+="-";} else first=false; d1+=getFromInp(form,inputName+"_mon"); nDf+="M";do {i++;} while ((i<dd)&&(dateFormat.charAt(i)==ch)); break;
					case 'd': if(!first) {eD+="-"; d1+="-"; nDf+="-";} else first=false; d1+=getFromInp(form,inputName+"_day"); nDf+="d";do {i++;} while ((i<dd)&&(dateFormat.charAt(i)==ch)); break;
					case 'h': if(!first) {eD+="-"; d1+="-"; nDf+="-";} else first=false; d1+=getFromInp(form,inputName+"_hour"); nDf+="H";do {i++;} while ((i<dd)&&(dateFormat.charAt(i)==ch)); break;
					case 'm': if(!first) {eD+="-"; d1+="-"; nDf+="-";} else first=false; d1+=getFromInp(form,inputName+"_minutes"); nDf+="m";do {i++;} while ((i<dd)&&(dateFormat.charAt(i)==ch)); break;
					case 's': if(!first) {eD+="-"; d1+="-"; nDf+="-";} else first=false; d1+=getFromInp(form,inputName+"_secs"); nDf+="s";do {i++;} while ((i<dd)&&(dateFormat.charAt(i)==ch)); break;
					case '&': do {i++;} while ((i<dd)&&(dateFormat.charAt(i)!=';'));
				}
			}
			
			if(d1==eD) return "";
				
				data = getDateFromFormat(d1,nDf);
				
				var bad = new Date(1000, 0, 1, 0, 0, 0);
				bad = bad.getTime();

				if(data==bad) return "BADFORMAT";//("\n- nieprawidłowy format daty w polu "+label);
				
				if(after!="") {
				
					afterD = getDateFromFormat(after,dateFormat);
					
				
					if(afterD>data) return "TOOSMALL";//("\n- zbyt wczesna data w polu "+label);
				}
				
				if(before!="") {
					beforeD = getDateFromFormat(before,dateFormat);
				
					if(data>beforeD) return "TOOBIG";//("\n- zbyt późna data w polu "+label);
				}
				
				return "OK";
			
		}	
		
		/**
		 * Funkcje do obsługi pól numerycznych
		 * Niestety wychodzą z założenia, że pola rozdziela przecinek- do poprawki, ale później.
		 */		
		
		function enterNumericField(field) {
			field.style.textAlign="left";

		}
		
		function leaveNumericField(field,decimalDigits) {
			field.style.textAlign="right";
 			
			if(field.value!=""){
			
					var x = new Number(field.value.replace(",","\."));
							
					if(isNaN(x)) {
						
						field.value="";
					
					} else {
					
						strBuf = x.toFixed(decimalDigits);			
						field.value=strBuf.replace(".",",");			
					}
			}
		}
		
		
		/**
		 * funkcja sprawdzająca, czy wartość val pasuje do wyrażenia regularnego regexp
		 */
		function regCheck(val,regexp) {
			if (val=="") {
				return true;
			}	
 			var re = regexp;
 			return re.test(val);
		}
		
		/**
		 * funkcja sprawdzająca, czy został zaznaczony jakikolwiek checkbox/radio
		 * zwraca false, jeżeli był
		 */
		 
		function nullMany(elem) {
			if (elem.length == null) {
				// jeżeli tylko jedno pole w grupie
				if (elem.checked) return false;
			} else {
				// w przeciwnym przypadku skanuj
				for(i=0; i<elem.length; i++) {
					if(elem[i].checked) return false;
				}
			}				
			return true;
		}
		
		/**
		 * funkcja sprawdzająca, czy został zaznaczony jakikolwiek checkbox
		 * zwraca false, jeżeli był
		 * dla radiobuttonów też działa 8)
		 */
		 
		function nullDrop(elem) {
			for(i=0; i<elem.length; i++) {
				if(elem[i].selected) return false;
			}
			return true;
		}
		

		
	/**
	* funkcje do obsługi tekstu w TextArea
	*/	
	function taLimit(elem, limit) {
		return elem.value.length < limit;
	}

	function taSub(elem,limit) {
		if (elem.value.length > limit) {
			elem.value=elem.value.substr(0,limit)
		}	
	}
	
	/**
	 *	funkcja sprawdzająca, czy wartość jest całkowita
	 */		
	function isInteger(value) {
		if((value=="")||(value==null)) return true;
		var integer = /^\d+$/;
		if (parseInt(value) != value) return false;
	  	return integer.test(value);
	}

	
