//class.form_validator.js ... uscream@vip.hr ...

function form_validator(frmForm)
{
	this.frmForm = frmForm;
	this.fields = new Array();

	// config ------------------------------
		this.defMessage = "Niste ispunili obavezno polje!";
		this.errField = "Greška: polje nije pronađeno!";
	
	this.add = function(varField, varRequired, varType, varMessage)	
	{
		
		if(!this.fields)this.fields=new Array();
		varIndex=this.fields.length;
		this.fields[varIndex]=new Array();
		this.fields[varIndex]['name'] = varField;
		this.fields[varIndex]['required'] = varRequired ? true : false ;
		this.fields[varIndex]['type'] = varType ? varType : false ;
		this.fields[varIndex]['message'] = varMessage ? varMessage : this.defMessage+" ("+varField+")" ;
		
	}

	this.check = function()
	{
		varSize=this.fields.length;
		
		for(ci=0;ci<this.fields.length;ci++)
		{

			objCElement = this.frmForm.elements[this.fields[ci]['name']];

			if(!objCElement && (this.fields[ci]['type']!="code"))
			{
				alert(this.errField+" "+this.fields[ci]['name'])
				return false;
			}
			
			if(objCElement)
			{
				varCEValue = objCElement.value;
			}
			
			varCERequired = this.fields[ci]['required'];
			
			switch(this.fields[ci]['type']) 
			{ 
				//-------------------------------------------
				case "string": 
				{ 
					varCEStatus = this.checkReaction(ci, this.checkString(varCEValue,varCERequired))
					break;
				}
				//-------------------------------------------
				case "number": 
				{ 
					varCEStatus = this.checkReaction(ci, this.checkNumber(varCEValue,varCERequired))
					break;
				}
				//-------------------------------------------
				case "integer": 
				{ 
					varCEStatus = this.checkReaction(ci, this.checkInteger(varCEValue,varCERequired))
					break;
				}
				//-------------------------------------------
				case "integer+": 
				{ 
					varCEStatus = this.checkReaction(ci, this.checkIntegerPlus(varCEValue,varCERequired))
					break;
				}
				//-------------------------------------------
			        case "date": 
				{ 
					varCEStatus = this.checkReaction(ci, this.checkDate(varCEValue,varCERequired))
					break;
				}
				//-------------------------------------------
			        case "email": 
				{ 
					varCEStatus = this.checkReaction(ci, this.checkEmail(varCEValue,varCERequired))
					break;
				}
				//-------------------------------------------
			        case "radio": 
				{ 
					varCEStatus = this.checkReaction(ci, this.checkRadio(objCElement,varCERequired))
					break;
				}
				//-------------------------------------------
			        case "code": 
				{ 
					varCEStatus = this.checkReaction(ci, eval(this.fields[ci]['name']),varCERequired);
					break;
				}
				//-------------------------------------------	
				
			}
			
			if(!varCEStatus) return false;

		}

		return true;
		
	}

	this.checkReaction = function(varID, varStatus)
	{
		if(!varStatus)	alert(this.fields[varID]['message']);
		return varStatus;
	}
	
	//---------------------------------
	
	this.checkRadio = function (varElement, varRequired){
		
		if(!varRequired) return true;

	        return !(this.RadioIndex(varElement)==undefined);
        	
	}
	
	this.checkEmail = function (varValue, varRequired){
		
		if(varRequired && (varValue.length=0)) return flase ;
		
		var result = false;
		var index = varValue.indexOf("@");
		if (index > 0)
		{
			var pindex = varValue.indexOf(".",index);
			if ((pindex > index+1) && (varValue.length > pindex+1))
			result = true;
		}

		return result;

	}
	
	this.checkDate = function (varValue, varRequired){
		
		if(varRequired && (varValue.length=0)) return flase ;
		
	        var result = true;

	        var elems = varValue.split(".");
	
	        result = (elems.length == 3);
	
	        if (result){
	                var dan = parseInt(elems[0],10);
	                var mjesec = parseInt(elems[1],10);
	                var godina = parseInt(elems[2],10);
	
	                result = !isNaN(mjesec) && (mjesec > 0) && (mjesec < 13) &&
	                                !isNaN(dan) && (dan > 0) && (dan < 32) &&
	                                !isNaN(godina) && (godina > 1890);
	
	        }
	
	        return result;
	}

	this.checkNumber = function (varValue, varRequired)
	{

		if((varValue.length > 0) && !isNaN(varValue)) return true;
		else return !(varRequired)
		
	}

	this.checkInteger = function (varValue, varRequired)
	{
		if((varValue.length > 0) && varValue==parseInt(varValue)) return true;
		else return !(varRequired)	
	}

	this.checkIntegerPlus = function (varValue, varRequired)
	{
		if((varValue.length > 0) && varValue==parseInt(varValue) && parseInt(varValue)) return true;
		else return !(varRequired)	
	}
	

	this.checkString = function (varValue, varRequired)
	{
	
		return !(varRequired && (varValue.length==0))
		
	}
	
	this.RadioIndex = function (objRadio)
	{
	        for(var i=0;i<objRadio.length;i++) if(objRadio[i].checked)return i;
	        return undefined;
	}


}