/*
-------------------------------------------------------------
Soficus Content Management System
ver.4.0.100
Copyright (C) 2007 Soficus Ltd
Soficus Ltd
Suite 9, The Saville Exchange
Howard Street
North Shields
Tyne & Wear
NE30 1SE
United Kingdom

E-mail: info@soficus.co.uk
Tel: +44 (0) 191 293 1867
Tel: +44 (0) 191 645 0605
web: http://www.soficus.co.uk


------------------------ LICENCE ----------------------------
THIS COPY IS LICENSED ONLY TO:


REDISTRIBUTION, MODIFICATION OR USE IN SOURCE OR BINARY FORMS OF THIS SOURCE CODE IS PROHIBITED.
UNAUTHORISED CHANGES ON THE SOURCE CODE WILL BREACH YOUR LICENCE AND WARRANTY!

THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS`` AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
-------------------------------------------------------------
*/

/* 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;
}