/*
-------------------------------------------------------------
Soficus Content Management System
ver.4.0.100
Copyright (C) 2006 Soficus Ltd
27 Medomsley Road
Consett
Co.Durham
DH8 5HE
United Kingdom

tel: +44 (0) 1912 305 131
e-mail: info@soficus.co.uk
web: http://www.soficus.co.uk

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

Critical Strategic Solutions
Manor House, Front Street South,
Trimdon, Co Durham
TS29 6LY
United Kingdom
for web address: http://www.criticalstrategy.com

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






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