var W3CDOM = (document.getElementsByTagName && document.createElement);

///**NASTAVITVE**\\\
var prikaziMsg = false; //e eli da se prikae pod fieldom e sporoilo, ter da se obarva input daj tukaj na true
var prikaziOkno =true; //e eli prikazati box z napakami, daj na true

var inputBorder = "1px solid #c02424"; //obroba inputov e je napaka
var inputBackground = "#fcf4f4"; //ozadje inputov e je napaka

var inputBorderOK = "1px solid #7F7F7F"; //obroba inputov ko ni napake
var inputBackgroundOK = "#fff"; //ozadje inputov ko ni napake
///--------------\\\

var fV = {
	addEvent: function(elm, evType, fn, useCapture) {
		
		if(elm.addEventListener) {
			elm.addEventListener(evType, fn, useCapture);
			return true;
		} else if(elm.attachEvent) {
			var r = elm.attachEvent('on' + evType, fn);
			return r;
		} else {
			elm['on' + evType] = fn;
		}
	},
	
	init: function() {
		for (var i in validationSet) {
			if(document.getElementsByName(i)) {
				var formField = document.getElementsByName(i)[0];
				if(!formField) {
					//alert(i);
				} else {
					if(formField.type=="radio") {
						elm1 = document.getElementsByName(formField.name);	
						for (j = 0 ; j<elm1.length ; j++){
							formField1 = document.getElementById(formField.name + "_" + j);
							fV.addEvent(formField1, 'blur', fV.checkValid, false);
						}						
					} else {
						fV.addEvent(formField, 'blur', fV.checkValid, false);
					}				
					if(!formField.form.validateSubmit) {
	
						fV.addEvent(formField.form, 'submit', fV.checkValidSubmit, false);
						formField.form.onsubmit = fV.checkSubmit;  //Safari
						formField.form.validateSubmit = true;
					}
				}
			}
		}
	},

	checkValidSubmit: function(e) {
		if (typeof e == 'object' && e.tagName && e.tagName=='FORM')
			var frm = e;
		else
			var frm = window.event ? window.event.srcElement : e ? e.target : null;
			
		if(!frm) return;
		var errText = [];
		frm.submitAllowed = true;

		for (var i=0; i < frm.elements.length; i++) {
			
			if(frm.elements[i].name && validationSet[frm.elements[i].name]) {
				
				var failedE = fV.handleValidity(frm.elements[i]);
				
				if (W3CDOM && failedE) { 
					if (!Element.hasClassName(frm.elements[i],'errorElement')) {
					  	Element.addClassName(frm.elements[i],'errorElement');
					}
					frm.elements[i].onchange = fV.removeError;		
				}			
				
				if(prikaziMsg) {
					var errDisplay = document.getElementById('error_' + frm.elements[i].name);
					//input element, ki ga lahko kasneje obarvamo
					var inputek = document.getElementById(frm.elements[i].name);
					
					if(failedE && errDisplay) {	
						errDisplay.innerHTML = validationSet[failedE.name]['error'];
						//tukaj lahko postajlamo input ob errorju..
						inputek.style.border=inputBorder;
						inputek.style.background=inputBackground;
					}
					
					if(!failedE && errDisplay) {
						errDisplay.innerHTTML = '';
						//e je kul, mu dajmo original barve nazaj
						inputek.style.border=inputBorderOK;
						inputek.style.background=inputBackgroundOK;
					}
				}
				
				if(failedE) {
					var labels = document.getElementsByTagName('label');
					if(validationSet[failedE.name]['error']!='')
					{
						
						errText[errText.length] = validationSet[failedE.name]['error'];
						for(var j=0; j < labels.length; j++) {						
							if(labels[j].htmlFor == failedE.id) {
								//errText[errText.length - 1] += ' (\'' + labels[j].firstChild.nodeValue + '\')';
							}
						}
					}
				}
			}
		}

		if(errText.length > 0) {
			frm.submitAllowed = false;
			if (!W3CDOM) {
				alert(errText.join('\n'));
			}			
			Element.update('errorMessage', '<ul><li>'+errText.join('</li><li>')+'</li></ul>' )
			if (!Element.visible("errorMessage")) {
				
				if(prikaziOkno)new Effect.BlindDown("errorMessage", {duration: 0.4});
			}			
			
			if(e && e. preventDefault) {
				
				e.preventDefault();
			}
			if(window.event) {
				window.event.cancleBubble = true;
				window.event.returnValue = false;
				return false;
			}
			if (e.tagName && e.tagName=='FORM') {
				return false;
			}
		} 
		
		frm.submitAllowed = true;
		if(window.event) {
			window.event.cancleBubble = false;
			window.event.returnValue = true;
			return true;
		}			

		if (e.tagName && e.tagName=='FORM') {
			return true;
		}
		

	},
	
	checkSubmit: function() {
		if(this.submitAllowed==undefined) fV.checkValidSubmit();
		return this.submitAllowed;
	},
	
	removeError: function() {
	  Element.removeClassName(this,'errorElement');
	  this.onchange = null;
	},	
	
	checkValid: function(e) {
		var target=window.event ? window.event.srcElement : e ? e.target : null;
		if (!target) return;
		
		var failedE = fV.handleValidity(target);
		if (W3CDOM && failedE) { 
			if (!Element.hasClassName(target,'errorElement')) {
			  	Element.addClassName(target,'errorElement');
			}
			target.onchange = fV.removeError;		
		}			
		
		if(prikaziMsg) {
			var errDisplay = document.getElementById('error_' + target.name);
			//podobna zgodba kot zgoraj
			var inputek = document.getElementById(target.name);
			
			if(failedE && errDisplay) {
				errDisplay.innerHTML = validationSet[failedE.name]['error']; 
				//tudi kle dodano
				inputek.style.border=inputBorder;
				inputek.style.background=inputBackground;
			}
			if(!failedE && !errDisplay) {
				alert(validationSet[failedE.name]['error']);
			}
				
			if(!failedE && errDisplay) {				
				errDisplay.innerHTML = '';
				//pa e kle
				inputek.style.border=inputBorderOK;
				inputek.style.background=inputBackgroundOK;
			}
		}
		
	},
	
	notempty: function(field) {
		if(field.value=="") {		
			return true;		
		} else {
			return false;
		}
	},
	
	
	handleValidity: function(field) {
		var func = validationSet[field.name]['func'];
		var re = validationSet[field.name]['regexp'];
		var notempty = validationSet[field.name]['notempty'];
		
		if(notempty) {
			var empty = fV.notempty(field);
			if(empty) {
				return field;
			}			
		} else {
			if(!field.value) {
				return null;
			}			
		}
		
		if(func == '-') {
		} else {	
			if(func=='leto_rojstva') {
				var nileto = leto_rojstva(field);
				if(nileto) {
					return field;
				}			
			} else {
				aa = getFunc(func, field);
				if (!aa) {
					return field;
				}
			}
		}

		if(re!='-') {
			if(!field.value.match(re)) {
				return field;
			} else {
				return null;
			}
		}
	}	
	
}


	
fV.addEvent(window, 'load', fV.init, false);