// Sprawdzanie pol formularza.
// Dolaczanie skryptu: <script type="text/javascript" src="form.js"></script>
// Dolaczenie funkcji: onsubmit="return check(this,'pole1','text','pole2','email','pole3','num')"
// check(form[,field_name,field_require_type]{1,})
// wersja:
//		20040130 - poprawiona obsluga radiobutton'ow
//		20060130 - wprowadzony odczyt title na potrzeby komunikatow, poprawka obslugi select'ow
function check(){
	var argv=check.arguments;	var argc=argv.length;	
	var form=argv[0];			var i=1;				var err=0;
	// Sprawdzenie wymaganej ilosci argumentow 
	if(argc%2!=1){
		alert('Błąd w skrypcie: Brak wymaganej liczby parametrów!\nPrawdopodobnie brak typu dla jednego z pól.');
		return false;
	}
	while(i<argc){
		fd_n=argv[i];	fd_wt=argv[i+1];	 fd=form.elements[fd_n];
		// pobierz wartosc w zaleznosci od typu elementu formularza
		switch(fd=form.elements[fd_n].type){
			case 'text'	:
			case 'hidden':
			case 'password':
			case 'textarea':
			case 'file'	:
						fd_v=form.elements[fd_n].value;
						break;
			case 'select-one':
			case 'select-multiple':
						if( form.elements[fd_n].selectedIndex!=-1 ) fd_v=form.elements[fd_n].options[form.elements[fd_n].selectedIndex].value;
						else fd_v='';
						break;
			case 'checkbox':
						fd_v=form.elements[fd_n].checked;
						break;
			default		:
						fd_v='';
						// Element formularza moze byc tablica pol
						if(form.elements[fd_n].length>0){ //tablica np. radiobutton'ow
							var el_arr=form.elements[fd_n];
							if(el_arr[0].type=='radio' || el_arr[0].type=='checkbox'){
								for(var ir=0;ir<el_arr.length;ir++){ if(el_arr[ir].checked){ fd_v=el_arr[ir].value; break; } }
							}
						}
		}
		if(fd_v.length==0){
			err=1;
		}else{
			// sprawdz wartosc, czy jest ona zgodna z wymaganym typem
			switch(fd_wt){
				case 'int'	:
							if(isNaN(parseInt(fd_v)))  err=2;
							break;
				case 'float':
							if(isNaN(parseFloat(fd_v)))  err=2;
							break;
				case 'text'	:
							if(fd_v.length==0)  err=2;
							break;
				case 'checkbox'	:
				case 'radio'	:
							if(!fd_v)  err=2;
							break;
				case 'email':
							if(fd_v.search(/^\w+((-\w+)|(\.\w+))*\@\w+((\.|-)\w+)*\.\w+$/)==-1)  err=2;
							break;
				case 'kod':
							if(fd_v.search(/^[0-9]{2}-[0-9]{3}$/)==-1)  err=2;
							break;
				default		:
							alert('Błąd w skrypie:\nnieznany typ pola '+fd_n+'!');
							return false;
			}
		}
		// tytul pola - zmiennej
		if( form.elements[fd_n].getAttribute && form.elements[fd_n].getAttribute('title') ){
			fd_title = form.elements[fd_n].getAttribute('title');
		}else{
			fd_title = fd_n;
		}
		// pokaz rodzaj bledu
		switch(err){
			case 1	:
					alert('Brak wartości w polu \"'+fd_title+'\"!');
					return false;
					break;
			case 2	:
					alert('Wartość:\n \"'+fd_v+'\"\n w polu \"'+fd_title+'\" jest nieprawidłowa!');
					return false;
					break;					
		}
		i=i+2;
	}
	return true;
}
