	function Status(msgStr) 
	{ 
		status=msgStr;
		document.MM_returnValue = true;
	}


	function ValueCheck(StrValue,CheckValue, strMsg)
	{
		if (StrValue == CheckValue)
		{ 
			if (fCheck)
			{                     
				alert(strMsg)
				fCheck = false
			}
		}
	}

	function NonValueCheck(StrValue,CheckValue, strMsg)
	{
		if (StrValue != CheckValue)
		{ 
			if (fCheck)
			{                     
				alert(strMsg)
				fCheck = false
			}
		}
	}

	function IntCheck(IntValue, strMsg)
	{
		if (isNaN(IntValue))
		{   
			if (fCheck)
			{                    
				alert(strMsg)
				fCheck = false
			}
		}
	}


	function LengthCheck(StrValue, FieldName, MaxLength, strMsg)
	{
		if (StrValue.length > MaxLength)
		{   
			if (fCheck)
			{   
				var substr = StrValue.substring(StrValue.length,MaxLength) 
             
				alert("you have exceeded the " + MaxLength + " character limit for the " + FieldName + " field\nthe following text will need to be removed:\n\n" + substr);
				//alert(strMsg);
				fCheck = false;
			}
		}
	}

	function MultiLengthCheck(StrValue, FieldName, AdditionalLength, MaxLength, strMsg)
	{
		if (StrValue.length + AdditionalLength > MaxLength)
		{   
			if (fCheck)
			{   
				var substr = StrValue.substring(StrValue.length,MaxLength) 
             
				alert(strMsg)
				fCheck = false
			}
		}
	}

	function LengthCheckMsg(StrValue, FieldName, MaxLength)
	{
		if (StrValue.length > MaxLength)
		{   
			if (fCheck)
			{   
				var substr = StrValue.substring(StrValue.length,MaxLength) 
             
				alert("you have exceeded the " + MaxLength + " character limit for the " + FieldName + " field\nthe following text will need to be removed:\n\n" + substr)
				fCheck = false
			}
		}
	}

	function LengthCheckMin(StrValue, FieldName, MaxLength, strMsg)
	{
		if (StrValue.length < MaxLength)
		{   
			if (fCheck)
			{   
				var substr = StrValue.substring(StrValue.length,MaxLength) 
             
				//alert("you have exceeded the " + MaxLength + " character limit for the " + FieldName + " field\nthe following text will need to be removed:\n\n" + substr)
				alert(strMsg)
				fCheck = false
			}
		}
	}


	function SelectCheck(OptionValue,CheckValue, strMsg)
	{
		if (OptionValue == CheckValue)
		{ 
			if (fCheck)
			{                     
				alert(strMsg)
				fCheck = false
			}
		}
	}

	function IsHttp(StrValue, strMsg)
	{

		var reg_exp1 = new RegExp("http://")
		var reg_exp2 = new RegExp("https://")
		var reg_exp3 = new RegExp("ftp://")

		if ((StrValue.search(reg_exp1) != 0) && (StrValue.search(reg_exp2) != 0) && (StrValue.search(reg_exp3) != 0))
		{ 
			if (fCheck)
			{                     
				alert(strMsg)
				fCheck = false
			}
		}
	}

	function ValidateFormInput(StrValue, field_name)
	{

		var reg_exp1 = new RegExp("[^a-zA-Z0-9\.]")

		if (StrValue.search(reg_exp1) != -1)
		{ 
			if (fCheck)
			{                     
				alert("the " + field_name + " field can only contain letters, numbers and the full stop character\nplease try again")
				fCheck = false
			}
		}
	}

	function ValidateFormInputName(StrValue, field_name)
	{

		var reg_exp1 = new RegExp("[^a-zA-Z\-\'\ ]")

		if (StrValue.search(reg_exp1) != -1)
		{ 
			if (fCheck)
			{                     
				alert("the " + field_name + " field can only contain letters and hyphenating charaters\nplease try again")
				fCheck = false
			}
		}
	}


	function testUrl(which_field)
	{
		fCheck = true
		// Which_field is compiled on the page as this.form.field_name
		ValueCheck(which_field.value, "", "You must first enter a url to test");
		IsHttp(which_field.value, "Your url must be prefixed by one of the following protocols in order to link correctly\n\nA. 'http://'\nB. 'https://'\nC. 'ftp://'");

		if (fCheck)
		{
			window.open(which_field.value , "displaywindow", "width=400,height=300,toolbar=no,scrollbars=yes,resizable=yes,menubar=no,status=no,directories=no,location=yes");
		}
	}


	function PhoneNumCheck(strFieldValue, FieldName)
	{

		var PhonePat1 = /\d{2}\s\d{4}\s\d{4}/ 		// XX XXXX XXXX
		var PhonePat2 = /\d{4}\s\d{3}\s\d{3}/ 		// XXXX XXX XXX
		var PhonePat3 = /\d{2}\s\d{2}\s\d{2}/		// XX XX XX

		// if (str is blank or ((is 12 digit matching XX XXXX XXXX) OR (is 12 digit matching XXXX XXX XXX) OR (is 8 digit matching XX XX XX)))

	 	if ((strFieldValue == "") || ((strFieldValue.search(PhonePat1) == 0) && (strFieldValue.length == 12)) || ((strFieldValue.search(PhonePat2) == 0) && (strFieldValue.length == 12)) || ((strFieldValue.search(PhonePat3) == 0) && (strFieldValue.length == 8)))
		{    
			return
		} else {                  
			if (fCheck)
			{
				alert(FieldName + " must: \n\nA. contain numbers and spaces only\nB. conform to one of the following patterns:\n\n1. 00 0000 0000\n2. 0000 000 000\n3. 000 000")
				fCheck = false
			}
		}
	}


	function EmailCheck(emailStr) {

	if ((fCheck != false) && (emailStr !="")) {
		fCheck = false

		var emailPat		= /^(.+)@(.+)$/
		var specialChars	= "\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
		var validChars		= "\[^\\s" + specialChars + "\]"
		var quotedUser		= "(\"[^\"]*\")"
		var ipDomainPat		= /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
		var atom			= validChars + '+'
		var word			= "(" + atom + "|" + quotedUser + ")"
		var userPat 		= new RegExp("^" + word + "(\\." + word + ")*$")
		var domainPat		= new RegExp("^" + atom + "(\\." + atom +")*$")

		var matchArray=emailStr.match(emailPat)
		if (matchArray==null) {
			alert("email address seems incorrect\ncheck that it contains one '@' and at least one full stop character")
			return false
		}

		var user 	= matchArray[1]
		var domain 	= matchArray[2]
		if (user.match(userPat)==null) {
	    	// user is not valid
		    alert("the username doesn't seem to be valid")
		    return false
		}

		var IPArray = domain.match(ipDomainPat)
		if (IPArray!=null) {
		    // this is an IP address
			  for (var i=1;i<=4;i++) {
			    if (IPArray[i]>255) {
			        alert("destination IP address is invalid")
				return false
			    }
		    }
		    return true
		}

		var domainArray = domain.match(domainPat)
		if (domainArray==null) {
			alert("The domain name doesn't seem to be valid.")
		    return false
		}

		var atomPat = new RegExp(atom,"g")
		var domArr 	= domain.match(atomPat)
		var len		= domArr.length
		if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3) {
		   // the address must end in a two letter or three letter word.
		   alert("The address must end in a three letter domain, or two letter country code")
		   return false
		}

		if (len<2) {
		   alert("This address appears to be missing a hostname")
		   return false
		}

		fCheck = true
		return true;
		}
	}


	function UpdateFieldValue(which_element, final_value){
		with (window.document) {
			which_element.value = final_value
			//alert(which_element.name + " = " + which_element.value)
		}
	}


	function AtLeastOneSelected(which_form, element_name, check_mode, alert_message){
		if (fCheck) {
			fCheck = false;
			with (window.document) {
				for ( i=0; i < which_form.elements.length; i++ ) {
					current_name = which_form.elements[i].name
					if (current_name.substring(0,element_name.length) == element_name) {
						if ((check_mode == "checkbox" && which_form.elements[i].checked == true) || (check_mode == "text_field" && which_form.elements[i].value != "")) {
							fCheck = true;
							break;
						}
					}
				}
			}
			if (fCheck == false){
				alert(alert_message);
			}
		}
	}


	function Validate_pos_neg(which_form)
	{
		if (which_form.pos_neg.selectedIndex == "2")
		{
			which_form.num_days.options.selectedIndex = "0"
		}
	}

	function Validate_num_days(which_form)
	{
		if (which_form.num_days.selectedIndex != "0" && which_form.pos_neg.selectedIndex == "2")
		{
			which_form.pos_neg.options.selectedIndex = "0"
		}
	}

	function YearCheck(StrValue, MaxLength, strMsg)
	{
		if (StrValue.length != MaxLength)
		{   
			if (fCheck)
			{   
			alert(strMsg)
			fCheck = false
			}
		}
	}

	function Validate_dropdown_date(this_year, this_month, this_day)
	{
		//alert(this_year.value + " - " + this_month.selectedIndex + " - " + this_day.selectedIndex)
		var start_day = this_day.selectedIndex

		for (m=this_day.options.length-1;m>0;m--){this_day.options[m]=null}

		day = new Array;
		day[0]=new Option('1','1')
		day[1]=new Option('2','2')
		day[2]=new Option('3','3')
		day[3]=new Option('4','4')
		day[4]=new Option('5','5')
		day[5]=new Option('6','6')
		day[6]=new Option('7','7')
		day[7]=new Option('8','8')
		day[8]=new Option('9','9')
		day[9]=new Option('10','10')
		day[10]=new Option('11','11')
		day[11]=new Option('12','12')
		day[12]=new Option('13','13')
		day[13]=new Option('14','14')
		day[14]=new Option('15','15')
		day[15]=new Option('16','16')
		day[16]=new Option('17','17')
		day[17]=new Option('18','18')
		day[18]=new Option('19','19')
		day[19]=new Option('20','20')
		day[20]=new Option('21','21')
		day[21]=new Option('22','22')
		day[22]=new Option('23','23')
		day[23]=new Option('24','24')
		day[24]=new Option('25','25')
		day[25]=new Option('26','26')
		day[26]=new Option('27','27')
		day[27]=new Option('28','28')

		if ((this_month.selectedIndex == 3) || (this_month.selectedIndex == 5) || (this_month.selectedIndex == 6) || (this_month.selectedIndex == 10))
		{
			day[28]=new Option('29','29')
			day[29]=new Option('30','30')	
		} else {

			if (this_month.selectedIndex != 1)
			{
			day[28]=new Option('29','29')
			day[29]=new Option('30','30')
			day[30]=new Option('31','31')
			} else {
			if ((this_year.value % 4) == 0)
			{
				day[28]=new Option('29','29')
			}
			}
		}
	
		for (i = 0; i < day.length; i++)
		{
			this_day.options[i] = day[i];
		}

		if (start_day > (day.length - 1))
		{
			this_day.options[day.length - 1].selected = true;
		} else {

			this_day.options[start_day].selected = true;			
		}
	}

	function Validate_string_date(date_field)
	{

		var my_arr 		= date_field.split("/");
		var format_msg 	= "\n\ndates must be in the format DD/MM/YYYY"

		if (my_arr.length != 3){
			if (my_arr.length == 1){
				alert("the date string provided did not contain any slashes [/] which are used to seperate day/month/year values\nthe date was unable to be validated");
			} else {
				alert("the date string provided contained " + (my_arr.length - 1) + " slashes [/] instead of 2\nthe date was unable to be validated");
			}
			fCheck = false;
			return;
		} 

		// initialise
		this_day	= my_arr[0];
		this_month	= my_arr[1];
		this_year	= my_arr[2];

		month_arr 	= ['JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC']

		if (this_year.length != 4){
			alert("please enter a four digit year" + format_msg);
			fCheck = false;
			return;
		}

		if (this_month > 12){
			alert("there can not be more that 12 months in a year" + format_msg);
			fCheck = false;
			return;
		}

		if (this_month == 2){
			if (this_year % 4 == 0 && (this_year % 100 != 0 || this_year % 400 == 0)){
				if (this_day > 29){
					alert("there can only be 29 days in " + month_arr[this_month-1] + " on a leap year");
					fCheck = false;
					return;
				}
			} else {
				if (this_day > 28){
					alert("there can only be 28 days in " + month_arr[this_month-1]);
					fCheck = false;
					return;
				}
			}	
		}

		if (((this_month == 4) || (this_month == 6) || (this_month == 7) || (this_month == 11)) && (this_day > 30)) {
			alert("there can only be 30 days in " + month_arr[this_month-1]);
			fCheck = false;
			return;
		}

		if (this_day > 31){
			alert("there can not be more that 31 days in " + month_arr[this_month-1]);
			fCheck = false;
			return;
		}

	}


	function SubmitForm(which_form, field_str)
	{
		which_form.wn.value = window.name	
		which_form.h.value = window.history.length

		field_arr = field_str.split("|")

		with (window.document) {
			for ( i=0; i < which_form.elements.length; i++ ) {
				current_name = which_form.elements[i].name

				for (j=0; j < field_arr.length; j++){
					data_arr = field_arr[j].split("~")
					if (current_name == data_arr[0]) {
						UpdateFieldValue(which_form.elements[i], data_arr[1]);
						break
					}
				}
			}
		}
		which_form.submit()
	}

	function SubmitMain(DestinationStr, field_str)
	{


	   if (navigator.userAgent.indexOf("MSIE") > 0) {
	   var sSize = (document.body.clientWidth);
	   var browserFlag = 1;
	   } else {                                                
	   var sSize = (window.outerWidth);
	   var browserFlag = 2;
	   }

		window.document.submit_form.wn.value = window.name	;
		window.document.submit_form.cw.value = sSize;
		window.document.submit_form.br.value = browserFlag;
		window.document.submit_form.h.value = window.history.length;
		window.document.submit_form.action = DestinationStr;

		field_arr = field_str.split("|")

		with (window.document) {
			for ( i=0; i < window.document.submit_form.elements.length; i++ ) {
				current_name = window.document.submit_form.elements[i].name

				for (j=0; j < field_arr.length; j++){
					data_arr = field_arr[j].split("~")
					if (current_name == data_arr[0]) {
						UpdateFieldValue(window.document.submit_form.elements[i], data_arr[1]);
						break
					}
				}
			}
		}
		window.document.submit_form.submit()
	}


	function CheckRanking(which_form, field_name, exclusion_str) {

		loop_count = 0
		fCheck = true

		with (window.document) {
			this_value = which_form.elements.length;
			final_array = new Array();

			for ( i=0; i < this_value; i++ ) {
				item_name = which_form.elements[i].name;

				if (item_name == field_name) {

					for(var m = 0; m < which_form.elements[i].options.length; m++){
						if(which_form.elements[i].options[m].selected){
							item_value = which_form.elements[i].options[m].value

							//	alert("item_value = " + item_value);
						}
					}

					tempstr = item_value;
					finalstr = tempstr.split("_");

					if (finalstr[1] != exclusion_str) {

						final_array[loop_count] = finalstr[1];
    
						for ( n=0; n < loop_count; n++) {
							if (fCheck){
	
								if (final_array[n] == finalstr[1]) {
									fCheck = false;
									alert("there is more than one item ranked in position " + finalstr[1] + "\nplease make sure that all rankings are unique and try again");
									//	alert("failed test\n" + final_array[n] + " = " + finalstr[1]);
								}
								//else {
									//	alert("passed test\n" + final_array[n] + " != " + finalstr[1]);
								//}
							}
						}
						loop_count++;

					} // finalstr[1] is not equal to the exclusion_str value [999]
				}
			}
		}
		if (fCheck) {
			which_form.submit()
		}
	}


	function move(fbox, tbox) {

		// This function appropriated from :
		// Original:  Phil Webb (phil@philwebb.com)
		// Web Site:  http://www.philwebb.com

		var arrFbox = new Array();
		var arrTbox = new Array();
		var arrLookup = new Array();
		var i;

		for (i = 0; i < tbox.options.length; i++) {
			arrLookup[tbox.options[i].text] = tbox.options[i].value;
			arrTbox[i] = tbox.options[i].text;
		}

		var fLength = 0;
		var tLength = arrTbox.length;

		for(i = 0; i < fbox.options.length; i++) {
			arrLookup[fbox.options[i].text] = fbox.options[i].value;
			if (fbox.options[i].selected && fbox.options[i].value != "") {
				arrTbox[tLength] = fbox.options[i].text;
				tLength++;
			}
			else {
				arrFbox[fLength] = fbox.options[i].text;
				fLength++;
		   }
		}

		arrFbox.sort();
		arrTbox.sort();

		fbox.length = 0;
		tbox.length = 0;
		var c;

		for(c = 0; c < arrFbox.length; c++) {
			var no = new Option();
			no.value = arrLookup[arrFbox[c]];
			no.text = arrFbox[c];
			fbox[c] = no;
		}

		for(c = 0; c < arrTbox.length; c++) {
			var no = new Option();
			no.value = arrLookup[arrTbox[c]];
			no.text = arrTbox[c];
			tbox[c] = no;
	   }
	}
