/*------------------+          +---------------------+
|                   | Uputstvo |
|	
|  Clipboard (XHTML):
|	onSubmit="return checkForm(this, validator);"
|	var validator = new Array();
|	validator[0] = {fieldname: "fIme", displayname: "Ime", provjera: "R"}
|
|
|  ClipBoard (HTML):
|	onSubmit="return checkForm(this);"
|	provjera=""
|	raspon=""
|	emsg=""
|	regexp=""
|	displayname=""
|	
|
|	XHTML compatibility:
|		koristi "validator" niz i predaj ga kao drugi argument funkciji chekcForm
|
|	imena polja formulara moraju biti u formatu "fImepolja", ili navesti displayName atribut
|
|	polje formulara mora imati atribut provjera koji moze sadrzati:			
|		P - pozitivan cijeli broj (positive integer)
|		I - cijeli broj (integer)
|		N - broj (number)
|		R - obavezno polje (required)
|		E - e-mail adresa
|		U - URL
|		F - u formatu naznacenom atributom regExp
|		V - fileName
|	ili kombinaciju nekih od navedenih (npr: RP - required positive integer)
|	
|	opcioni atributi:
|		raspon - primjenjiv na P, I, N (raspon="od%do")
|		regexp - primjenjiva na F (format - regularni izraz)
|		emsg   - primjenjiva na F (error message)
|
|	na onSubmit akciju formulara postaviti: onSubmit="return checkForm(this);"
|	izmijenite funkcije errorField i okField kako biste promijenili oznacavanje polja sa greskom
|
|                                                                                     <------------------+
|                                                                                      by Milovan Zogovic|
+-------------------------------------------------------------------------------------------------------*/	
	
	var allErrors; //promjenjiva koja sadrzi izvjestaj o gresci
	
	//funkcija ispituje sve elemente formulara i sve njihove 'provjera' atribute
	function checkForm(form, validator){
		var bXHTML = false; // Valid XHTML document
		
		if(validator){
			bXHTML = true;
			var name;
			for(var i=0; i<validator.length; i++){
				name = validator[i]["fieldname"];
				if(validator[i]["provjera"]) form[name].provjera = validator[i]["provjera"];
				if(validator[i]["raspon"]) form[name].raspon = validator[i]["raspon"];
				if(validator[i]["emsg"]) form[name].emsg = validator[i]["emsg"];
				if(validator[i]["regexp"]) form[name].regexp = validator[i]["regexp"];
				if(validator[i]["displayname"]) form[name].displayname = validator[i]["displayname"];
			}
		}
		
		var errorExist = false;
		allErrors = "Greske: ";
		
		for(var i=0; i<form.elements.length; i++){
			var localError=false;
			field = form.elements[i];
			
			// cross-browser compatibility
			if(!bXHTML && field.getAttribute){
				field.provjera = field.getAttribute("provjera");
				field.raspon = field.getAttribute("raspon");
				field.emsg = field.getAttribute("emsg");
				field.regexp = field.getAttribute("regexp");
				field.displayname = field.getAttribute("displayname");
			}
			
			if(!field.provjera) continue;
			for(var j=0; j<field.provjera.length; j++){ //provjeravamo sve atribute
				var cond = field.provjera.charAt(j);
				switch(cond){
					case "P": if(!isRegExp(field, "^[0-9]*$", "mora biti pozitivan cijeli broj")) localError=true; break;
					case "I": if(!isRegExp(field, "^-?[0-9]*$", "mora biti cijeli broj")) localError=true; break;
					case "N": if(!isRegExp(field, "^-?[0-9]*[\.]?[0-9]*$", "mora biti broj"))	localError=true; break;
					case "R": if(isEmpty(field)) localError=true; break;
					case "E": if(!isRegExp(field, "^[^@ ]+@[^@ ]+[\.]{1}[^@ \.]+$", "mora biti validna e-mail adresa")) localError=true; break;
					case "U": if(!isRegExp(field, "^[a-zA-Z0-9]+://[^ ]+$", "mora biti validan URL")) localError=true; break;
					case "V": if(!isRegExp(field, '^[^\\/:\*\?"<>\|]*$', "ne smije sadrzati znake: \\/:?\"<>|")) localError=true; break;
					case "F": if(!isRegExp(field, field.regexp, field.emsg)) localError=true; break;
				}
				if(localError) {errorExist=true; break;} //cim naidje na prvu gresku, ne provjerava ostale atribute
			}
			if(!localError && field.raspon && !isInRange(field)) errorExist=true; //ako nije broj nema svrhe ispitivati da li je u dobrom rasponu
		}
		if(errorExist)	{alert (allErrors + "\n\n Molimo ispravite naznacene greske"); return false;}
		return true;
	}	
	
	
/*---------- funkcije za provjeru -----------*/	
	
	function isEmpty(field){
		inputStr = field.value;
		if(inputStr==null || inputStr=="") {errorField(field, "mora biti popunjeno"); return true;}
		okField(field);
		return false;
	}

	function isRegExp(field, format, poruka){
		if(!poruka) poruka = "mora biti pravilnog formata";
		inputStr = field.value.toString();
		if(!inputStr) return okField(field);
		re = new RegExp(format);
		if(!re.test(inputStr)) return errorField(field, poruka);
		return okField(field);
	}
	
	function isInRange(field){
		from = field.raspon.substr(0, field.raspon.indexOf('%'));
		to = field.raspon.slice(field.raspon.indexOf('%') + 1);
		broj = parseFloat(field.value);
		if(broj<from || broj>to) return errorField(field, "mora biti u opsegu od " + from + " do " + to);
		return okField(field);
	}
	
/*---------- funkcije za prikaz greske -----------*/	

	function errorField(field, msg){
		field.title = msg;
		allErrors += (field.displayname) 
			? "\n - Polje |" + field.displayname + "| " + msg 
			: "\n - Polj |" + field.name + "| " + msg;
		field.style.backgroundColor="#FFD504";
		return false;
	}
	
	function okField(field){
		field.title = '';
		field.style.backgroundColor = "";
		return true;
	}	