
/*{SOFICUS_LICENCE_AGREEMENT}*/

/* Class Validation Set */
/*----------------------------------------------------------------------------------------------------------------*/
function ValidationSet(inputitem)
{
	this.vSet= new Array();
	this.add= add_validationdesc;
	this.validate= vset_validate;
	this.itemobj = inputitem;
}
	function add_validationdesc(desc, error)
	{
		this.vSet[this.vSet.length]= new ValidationDesc(this.itemobj,desc,error);
	}
	function vset_validate()
	{
		for(var i=0; i<this.vSet.length; i++)
		{
			if(!this.vSet[i].validate())
			{
				return false;
			}
		}
		return true;
	}

/* Class Validator */
/*----------------------------------------------------------------------------------------------------------------*/
function Validator(frmname)
{
	var formobj = "";
	this.formobj=document.forms[frmname];

	formobj = document.forms[frmname];

	if(!this.formobj)
	{
		alert("MESSAGE: couldnot get Form object "+frmname);
		return;
	}
	if(this.formobj.onsubmit)
	{
		this.formobj.old_onsubmit = this.formobj.onsubmit;
		this.formobj.onsubmit=null;
	}
	else
	{
		this.formobj.old_onsubmit = null;
	}
	this.formobj.onsubmit=form_submit_handler;
	this.addValidation = add_validation;

	this.setAddnlValidationFunction=set_addnl_vfunction;
	this.clearAllValidations = clear_all_validations;


	function set_addnl_vfunction(functionname)
	{
		this.formobj.addnlvalidation = functionname;
	}

	function clear_all_validations()
	{
		for(var itr=0;itr < this.formobj.elements.length;itr++)
		{
			this.formobj.elements[itr].validationset = null;
		}
	}

	function form_submit_handler()
	{
		for(var itr=0;itr < this.elements.length;itr++)
		{
			if(this.elements[itr].validationset && !this.elements[itr].validationset.validate())
			{
				return false;
			}
		}

		if(this.addnlvalidation)
		{
			str =" var ret = "+this.addnlvalidation+"()";
			str =" var ret = "+this.addnlvalidation;
			eval(str);
			if(!ret) return ret;
		}
		return true;
	}

	function add_validation(itemname, descriptor, errstr)
	{
		if(!this.formobj)
		{
			alert("MESSAGE: The form object is not set properly!");
			return;
		}//if
		var itemobj = this.formobj[itemname];
		if(!itemobj)
		{
			alert("MESSAGE: Couldnot get the input object named: "+itemname);
			return;
		}
		if(!itemobj.validationset)
		{
			itemobj.validationset = new ValidationSet(itemobj);
		}
		itemobj.validationset.add(descriptor,errstr);
	}

	function passwords_match(inP, inJ, errorstring)
	{
		if(!formobj)
		{
			alert("MESSAGE: The form object is not set properly!");
			return;
		}//if

		var itemobj = formobj[inP];
		if(!itemobj)
		{
			alert("MESSAGE: Couldnot get the input object named: "+inP);
			return;
		}
		
		var itemobj = formobj[inJ];
		if(!itemobj)
		{
			alert("MESSAGE: Couldnot get the input object named: "+inJ);
			return;
		}

		if(formobj[inP].value != formobj[inJ].value)
		{
			alert(errorstring);
			formobj[inP].focus();
			return false;
		}
		else
		{
			return true;
		}
	}
}//end class
/*----------------------------------------------------------------------------------------------------------------*/


function validateEmail(email)
{
// a very simple email validation checking. 
// you can add more complex email checking if it helps 
	if(email.length <= 0)
	{
		return true;
	}
	
	var splitted = email.match("^(.+)@(.+)$");
	if(splitted == null)
		return false;
	if(splitted[1] != null )
	{
		var regexp_user=/^\"?[\w-_\.]*\"?$/;
		if(splitted[1].match(regexp_user) == null) return false;
	}
	if(splitted[2] != null)
	{
		var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
		if(splitted[2].match(regexp_domain) == null) 
		{
			var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
			if(splitted[2].match(regexp_ip) == null) return false;
		}// if
		return true;
	}
	return false;
}//end validateEmail

function isDigit(c)
{
	var test = "" + c;
	if (test == "0" || test == "1" || test == "2" || test == "3" || test == "4" || test == "5" || test == "6" || test == "7" || test == "8" || test == "9")
	{
		return true;
	}
	return false;
}//isDigit

function isAllDigits(s)
{
	var test = "" + s;
	for (var k = 0; k < test.length; k++)
    {
    	var c = test.substring(k, k+1);
     	if (isDigit(c) == false)
        {
        	return false;
        }
    }
	return true;
}// isAllDigits

function validateZip(zip)
{
	if (zip.length <= 0)
	{
		return true;
	}
	else if (zip.length == 5)
    {
        var result = isAllDigits(zip);
        if (result == false)
        {
           return false;
        }
        else
        {
	        return true;
	    }
    }
    else if (zip.length == 10)
    {
    	var result = isAllDigits(zip.substring(0,5));
        if (result == true)
        {
        	if (zip.substring(5,6) != "-")
            {
               return  false;
            }
            else
            {
                result = isAllDigits(zip.substring(6,10));
                if (result==true)
                {
                	return true;
                }
                else
                {
                	return false;
                }
            }
        }
        else
        {
        	return false;
        } 	
    
    }
    else
    {
    	return false;
    }

}//end validateZip


/* Class ValidationDesc */
/*---------------------------------------------------*/
function ValidationDesc(inputitem, desc, error)
{
	this.itemobj = inputitem;
	this.desc=desc;
	this.error=error;
	this.validate=vdesc_validate;
}
	function vdesc_validate()
	{	
		if(!V2validateData(this.desc,this.itemobj,this.error))
		{
			this.itemobj.focus();
			return false;
		}
		return true;
	}

function V2validateData(strValidateStr,objValue,strError)
{
	var epos = strValidateStr.search("=");
	var  command  = "";
	var  cmdvalue = "";
	if(epos >= 0)
	{
		command  = strValidateStr.substring(0,epos);
		cmdvalue = strValidateStr.substr(epos+1);
	}
	else
	{
		command = strValidateStr;
	}

	switch(command)
	{
		case "req":
		case "required":
		{
			if(eval(objValue.value.length) == 0)
			{
				if(!strError || strError.length ==0)
				{
					strError = objValue.name + " : Required Field";
				}//if
				alert(strError);
				return false;
			}//if
			break;
		}//case required

		case "maxlength":
		case "maxlen":
		{
			if(eval(objValue.value.length) >  eval(cmdvalue))
			{
				if(!strError || strError.length ==0)
				{
					strError = objValue.name + " : "+cmdvalue+" characters maximum ";
				}//if
				alert(strError + "\n[Current length = " + objValue.value.length + " ]");
				return false;
			}//if
			break;
		}//case maxlen

		case "minlength":
		case "minlen":
		{
			if(eval(objValue.value.length) <  eval(cmdvalue))
			{
				if(!strError || strError.length ==0) 
				{
					strError = objValue.name + " : " + cmdvalue + " characters minimum  ";
				}//if
				alert(strError + "\n[Current length = " + objValue.value.length + " ]");
				return false;
			}//if
			break;
		}//case minlen

		case "alnum":
		case "alphanumeric":
		{
			var charpos = objValue.value.search("[^A-Za-z0-9]");
			if(objValue.value.length > 0 &&  charpos >= 0)
			{
				if(!strError || strError.length ==0)
				{
					strError = objValue.name+": Only alpha-numeric characters allowed ";
				}//if
				alert(strError + "\n [Error character position " + eval(charpos+1)+"]");
				return false;
			}//if
			break;
		}//case alphanumeric

		case "num":
		case "numeric":
		{
			var charpos = objValue.value.search("[^0-9.]");
			if(objValue.value.length > 0 &&  charpos >= 0)
			{
				if(!strError || strError.length ==0)
				{
					strError = objValue.name+": Only digits allowed ";
				}//if
				alert(strError + "\n [Error character position " + eval(charpos+1)+"]");
				return false;
			}//if
			break;
		}//numeric

		case "alphabetic":
		case "alpha":
		{
			var charpos = objValue.value.search("[^A-Za-z]");
			if(objValue.value.length > 0 &&  charpos >= 0)
			{
				if(!strError || strError.length ==0)
				{
					strError = objValue.name+": Only alphabetic characters allowed ";
				}//if
				alert(strError + "\n [Error character position " + eval(charpos+1)+"]");
				return false;
			}//if
			break;
		}//alpha

		case "alphanumhyphen":
		{
			var charpos = objValue.value.search("[^A-Za-z0-9\-_ ]");
			if(objValue.value.length > 0 &&  charpos >= 0)
			{
				if(!strError || strError.length ==0)
				{
					strError = objValue.name+": characters allowed are A-Z,a-z,0-9,- and _";
				}//if
				alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 
				return false; 
			}//if
			break;
		}//alphanumhypen

		case "alphaname":
		{
			var charpos = objValue.value.search("[^A-Za-z\-\' ]");
			if(objValue.value.length > 0 &&  charpos >= 0)
			{
				if(!strError || strError.length ==0)
				{
					strError = objValue.name+": characters allowed are A-Z,a-z,' and -";
				}//if
				alert(strError + "\n [Error character position " + eval(charpos+1)+"]");
				return false;
			}//if
			break;
		}//alphaname

		case "email":
		{
			if(!validateEmail(objValue.value))
			{
				if(!strError || strError.length ==0)
				{
					strError = objValue.name+": Enter a valid Email address ";
				}//if
				alert(strError); 
				return false;
			}//if
			break;
		}//case email

		case "zip":
		{
			if (!validateZip(objValue.value))
			{
				if(!strError || strError.length ==0)
				{
					strError = objValue.name+": Enter a ZIP code! Please use this zip code pattern Ex. 99999 or 99999-9999 ";
				}//if
				alert(strError); 
				return false;
			}//if
			break;			
		}//case zip



		case "lt":
		case "lessthan":
		{
			if(isNaN(objValue.value))
			{
				alert(objValue.name+": Should be a number ");
				return false;
			}//if
			if(eval(objValue.value) >=  eval(cmdvalue))
			{
				if(!strError || strError.length ==0)
				{
					strError = objValue.name + " : value should be less than "+ cmdvalue;
				}//if
				alert(strError);
				return false;
			}//if
			break;
		}//case lessthan

		case "gt":
		case "greaterthan":
		{
			if(isNaN(objValue.value))
			{
				alert(objValue.name+": Should be a number ");
				return false;
			}//if
			if(eval(objValue.value) <=  eval(cmdvalue))
			{
				if(!strError || strError.length ==0)
				{
					strError = objValue.name + " : value should be greater than "+ cmdvalue;
				}//if
				alert(strError);
				return false;
			}//if
			break;
		}//case greaterthan

		case "regexp":
		{
			if(objValue.value.length > 0)
			{
				if(!objValue.value.match(cmdvalue))
				{
					if(!strError || strError.length ==0)
					{
						strError = objValue.name+": Invalid characters found ";
					}//if
					alert(strError);
					return false;
				}//if
			}
			break;
		}//case regexp

		case "dontselect":
		{
			if(objValue.selectedIndex == null)
			{
				alert("MESSAGE: dontselect command for non-select Item");
				return false;
			}

			if(objValue.selectedIndex == eval(cmdvalue))
			{
				if(!strError || strError.length ==0)
				{
					strError = objValue.name+": Please Select one option ";
				}//if
				alert(strError);
				return false;
			}
			break;
		}//case dontselect

		case "checkbox":
		{
			if (objValue.checked == false)
			{
				alert(strError);
				return false;
			}//if
			break;
		}//checkbox

		case "confirmemail":
		{
			if (objValue.value != document.registrationForm.fldEmail.value)
			{
				alert(strError);
				return false;
			}
			break;
		}//confirm email

		case "username":
		{
			var charpos = objValue.value.search("[^A-Za-z0-9\-\.\@]");
			if(objValue.value.length > 0 &&  charpos >= 0) 
			{
				if(!strError || strError.length ==0)
				{
					strError = objValue.name+": characters allowed are A-Z,a-z,-,.,@";
				}//if
				alert(strError + "\n [Error character position " + eval(charpos+1)+"]");
				return false;
			}//if
		break;
		}//username

	}//switch
	return true;
}