/*
	Script description:
	This class is used as the tool class for validating errors
	
	Author: Fu-Yao Kevin Feng
	Edited: Jerry Lee
	Copyright Silversoft (Pty) Ltd 2004
*/

/*==========================================================================*/
/*
	This function will run through all the elements in the form, run the js to
	check if valid before submiting the form.
*/
function submit_check(form)
{
	//for (i in form.elements) //This FOR loop only works in Firefox and not IE
	for (var i=0  ;i < form.elements.length;i++)
	{
		var id = form.elements[i].id;

		//if (id.substring(0, 4) == "test")
		if (id != "")
		{
			if (id.charAt(id.length-1) != ';')
			{
				invalid(form.elements[i], form.elements[i].name + ": Java Script error!");
				return false;
			}
			
			if (id.indexOf(';') == id.lastIndexOf(';'))
			{				
				if (!check (form.elements[i].name, id))
					return false;
			}
				
			else //More than one js check, assumes only two checks at the moment
			{
				js1 = id.substring(0, id.indexOf(';'));
				js2 = id.substring(id.indexOf(';')+1, id.lastIndexOf(';'));
				
				var name = form.elements[i].name;

				if (!check(name, js1) || !check(name, js2))
					return false;
			}
		}		
	}
	return true;
}
/*==========================================================================*/
/*
	This function is used in function submit_check, where this function will
	execute the javascript of certain element.
*/
function check (name, fn)
{
	var func = fn.substring(0, fn.indexOf('('));
	var param = fn.substring(fn.indexOf('(')+1, fn.indexOf(')'));
	
	var temp = param;
	
	for (var i=0; i<count_param(param)+1; i++)
	{
		var token = "";
		
		if (temp.indexOf(',') > 0) // More than one token left
			token = temp.substring(0, temp.indexOf(','));
		else // Last token
			token = temp;
			
		token = rep(token, " ", ""); // Trim all spaces
		
		// Take out the token from string
		temp = temp.substring(temp.indexOf(',')+1, temp.length);		
		
		if (token.indexOf("'") < 0) //Check if it's a string param or form element
		{
			if (token == "this")
			{
				token = name;
				param = rep(param, "this", token);
			}

			// Replace form element name with full path form name
			var elem = "document.forms[0].elements['" + token + "']";
			param = rep(param, token, elem);
		}
	}
	
	var myfunc = new Function("return " + func + "(" + param + ")");
	if(!myfunc())
		return false;

	else
		return true;
}

/*==========================================================================*/

function rep(str, s1, s2)
{
	//Replacing s1 with s2
	var rep = new RegExp (s1, 'gi');
	return str.replace(rep, s2);
}

/*==========================================================================*/

function count_param(param)
{
	//var count = 0;
	/*
	for (i=0; i<param.length; i++)
	{
		if (param[i] == ',')
			count++;
	}
	*/
	var count = 1;
	while ((param.indexOf(',') != param.lastIndexOf(',')) && param.indexOf(',') > 0)
	{		
		param = param.substring(param.indexOf(',')+1, param.length);
		count++;
	}
	return count;
}

/*==========================================================================*/

function invalid(elem, msg)
{
	alert(msg);
	elem.focus();
}

/*==========================================================================*/

function date_required(elem, label)
{
	if (elem.value != 0)
		return true;
	
	else
	{
		invalid(elem, "Please enter a valid date.");
		elem.focus();
		return false;
	}
}

/*==========================================================================*/

function tb_numberonly(elem, label)
{
	if (elem.value != "")
	{
		//Regular expression that checks for valid number
		var objRegExp  = /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/;
		
		if (objRegExp.test(elem.value))
			return true;
		else
		{
			invalid(elem, "'" + label + "'" + " require(s) numeric values only.");
			elem.focus();
			return false;
		}
	}
	else
		return true;

}

/*==========================================================================*/

function tb_numberinrange(elem, low, high, label)
{
	if (elem.value == "")
	{
		//invalid(elem, label + ": Please enter a number!");
		//return false;
		return true;
	}
	
	if(tb_numberonly(elem, label))
	{
		if ((parseFloat(elem.value) <= parseFloat(high)) && (parseFloat(elem.value) >= parseFloat(low)))
			return true;

		else
		{
			invalid(elem, label + ": Number not in range!");
			return false;
		}
	}
}

/*==========================================================================*/

function tb_required(elem, label)
{
	var val = elem.value;
	val = val.replace(/^\s*|\s*$/g,"")

	if (val != "")
		return true;
	else
	{
		invalid(elem, "'" + label + "'" + " is a Required Field.");
		return false;
	}
}

/*==========================================================================*/

function email_validator(elem, label)
{
	if (elem.value == "")
	{
		invalid(elem, "'" + label + "'" + " is a Required Field.");
		return false;
	}
	
	var email = elem.value;
	a = email.split(";")
	var exclude=/[^@\-\.\w]|^[_@\.\-]|[\._\-]{2}|[@\.]{2}|(@)[^@]*\1/;
	var check=/@[\w\-]+\./;
	var checkend=/\.[a-zA-Z]{2,3}$/;
	for(i=0;i<a.length;i++)
	{
		emailadd = a[i];
		if(((email.search(exclude) != -1)||(email.search(check)) == -1)||(email.search(checkend) == -1))
		{
			invalid(elem, "'" + label + "'" + " is not a valid Email Address.");
			return false
		}
		else
			return true;
	}
}

/*==========================================================================*/
function email_validator_notrequired(elem, label)
{
	if (elem.value == "")
	{
		//invalid(elem, "'" + label + "'" + " is a Required Field.");
		//return false;
		return true;
	}
	
	var email = elem.value;
	a = email.split(";")
	var exclude=/[^@\-\.\w]|^[_@\.\-]|[\._\-]{2}|[@\.]{2}|(@)[^@]*\1/;
	var check=/@[\w\-]+\./;
	var checkend=/\.[a-zA-Z]{2,3}$/;
	for(i=0;i<a.length;i++)
	{
		emailadd = a[i];
		if(((email.search(exclude) != -1)||(email.search(check)) == -1)||(email.search(checkend) == -1))
		{
			invalid(elem, "'" + label + "'" + " is not a valid Email Address.");
			return false
		}
		else
			return true;
	}
}

/*==========================================================================*/

function tb_minlength(elem, minlen, label)
{
	if (elem.value == "")
	{
		invalid(elem, label + ": cannot be empty!");
		return false;
	}
	
	var val = elem.value;
	if (val.length < parseInt(minlen))
	{
		invalid(elem, label + ": must be at least " + minlen + " character(s) long!");
		return false;
	}
	else
		return true;
}

/*==========================================================================*/

function tb_confirm(elem1, elem2, label)
{
	if (elem1.value != elem2.value)
	{
		invalid(elem2, label + ": must match!");
		return false;
	}
	else
		return true;
}

/*==========================================================================*/

function tb_password(pwd, check, label)
{
	if ((pwd.value != "") && (pwd.value == check.value))
		
		return true;
	else
	{
		invalid(pwd, label + ": Password missmatch!");
		return false;
	}
}

/*==========================================================================*/

function combobox_validation(elem, label)
{
	//if (elem.selectedIndex == 0)
	if (elem.value == "")
	{
		invalid(elem, "Please select an option under the " + "'" + label + "' field.");
		return false;
	}
	
	else
		return true;
}

/*==========================================================================*/
//enable a button if checkbox is checked.
function chk_button(chk, btn)
{

	if (chk.checked == true)
	{
		btn.disabled = false;
	}
	else
	{
		btn.disabled = true;
	}
}
/*==========================================================================*/

//copy address 1 to address 2
function copy_address(elem, address1, address2)
{
   for(var no=0;no<document.forms.length;no++)
   {
   var obj = document.forms[no];
   	for(var i=0; i<obj.length; i++)
	{
    	if(obj.elements[i].type=='text' && obj.elements[i].name.indexOf(address1)==0)
		{
			if (elem.checked == true)
			{
             	obj.elements[address2 + obj.elements[i].name.split(address1)[1]].value = obj.elements[i].value;
			}
			else
			{
				obj.elements[address2 + obj.elements[i].name.split(address1)[1]].value = "";
			}
        }
    }    
   }  
}
/*==========================================================================*/

//Switch the visibility of Increase Options of Ancilllary Recommendation

function switch_increaseopt(pre, vol, selected)
{
	var pre = document.getElementById(pre);
	var vol = document.getElementById(vol);

	if (selected == "premium")
	{
		pre.style.display = "block";
		vol.style.display = "none";
	}
	else if(selected == "voluntary")
	{
		pre.style.display = "none";
		vol.style.display = "block";
	}
	else
	{
		pre.style.display = "none";
		vol.style.display = "none";
	}
	//alert(pre.name);
}
/*==========================================================================*/


