
	function ValueCheck(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)
	{
		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 SelectCheck(OptionValue,CheckValue, strMsg)
	{
		if (OptionValue == CheckValue)
		{ 
			if (fCheck)
			{                     
				alert(strMsg);
				fCheck = false;
			}
		}
	}

	function UpdateFieldValue(which_element, final_value){
		with (window.document) {
			which_element.value = final_value;
			//alert(which_element.name + " = " + which_element.value);
		}
	}

	function SubmitForm(which_form, field_str)
	{
		// CHECK FOR OPTIONAL ACTION OVERIDE
		my_arr = field_str.split("~#~")
		if (my_arr.length == 2){
			which_form.action = my_arr[0];
			field_str = my_arr[1];
		} else {
			field_str = my_arr[0];
		}

		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 SubmitIdSearch(which_form, which_field, field_name)
	{

		fCheck = true

		ValueCheck(which_field.value, "", "Please enter a property_id");
		IntCheck(which_field.value, "The " + field_name + " should contain numbers only.\nPlease remove any non numeric characters.");

		if (fCheck)
		{
			which_form.submit()
		}
	}
	

	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 FixedLengthNumber(intValue,fixedLength,element_name) {

		var StrMsg = "";

		if ( intValue.length != fixedLength) {  
			StrMsg = "\n" + element_name + " must be " + fixedLength + " digits long, The number you provided was " + intValue.length + " digits long";
		}

		if ( isNaN(intValue) ) { 
			StrMsg = StrMsg + "\n" + element_name + " may only contain numbers, please remove any punctuation or letters";
		}

		if (StrMsg.length > 0) {
			if (fCheck) { 
				alert(StrMsg);
				fCheck = false;
			}
		}
	}


	function ValueComparison(StrValue,ComparisonMode, CheckValue, strMsg)
	{
		if (fCheck) {
			if (ComparisonMode == "eq") {
			    if (StrValue != CheckValue) {
                    fCheck = false;
                }
            }
			if (ComparisonMode == "ne") {
			    if (StrValue == CheckValue) {
                    fCheck = false;
                }
            }
            if (ComparisonMode == "gt") {
			    if (StrValue <= CheckValue) {
                    fCheck = false;
                }
            }
            if (ComparisonMode == "lt") {
			    if (StrValue >= CheckValue) {
                    fCheck = false;
                }
            }
			if (!fCheck) {
				alert(strMsg);
			}
		}
	}


	function EmailCheck( StrValue, isRequired )
	{

		if ( (isRequired == 0) && (StrValue.length == 0) ) {
			return;
		}

        if (fCheck)
        {   

			var disallowStr = ",!#$%^<>&*;:~` '\"\\|/"
			var error_prefix = "The email address entered was not valid: \n"

			for ( var i = 0 ; i < StrValue.length ; i++ ){
				for ( var n = 0 ; n < disallowStr.length ; n++ ){
					if ( disallowStr.substring(n, n + 1) == StrValue.substring(i, i + 1) ) {
						alert(error_prefix + "An illegal character [ " + disallowStr.substring(n, n + 1) + " ] was found");
						fCheck = false;
						return
					}
				}
			}

            var myArr = StrValue.split("@");

            if ( myArr.length != 2 ) {
                alert(error_prefix + "There must be a single '@' symbol");
                fCheck = false;
				return;
            }

            if ( myArr[0].length == 0 ) {
                alert(error_prefix + "No user has been specified");
                fCheck = false;
				return;
            }

            if ( myArr[1].length == 0 ) {
                alert(error_prefix + "No domain has been specified");
                fCheck = false;
				return;
            }

            var dotArr = myArr[1].split(".")

            if ( dotArr.length < 2 ) {
                alert(error_prefix + "Please provide a suffix for this domain \( ie: .com, .org or country code\) ");
                fCheck = false;
				return;
            }

			for (i=0; i<dotArr.length; i++) {
				if ( dotArr[i].length < 1 ) {
					alert(error_prefix + "Each element in the domain must be at least one character long \( ie: @a.b.com\)");
					fCheck = false;
					return;
				}
			}

		}
	}



	function Validate_date(date_field)
	{
		if (fCheck){

			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;
			} 

			// CONFIRM THAT PROVIDED VALUES ARE ALL INTEGERS
			for(var m = 0; m < my_arr.length; m++){
				if (isNaN(my_arr[m])){
					alert("the date string must contain only numbers, please change '" + my_arr[m] + "'");
					fCheck = false;
					return;
				}
			}

			// initialise
			this_day	= my_arr[0];
			this_month	= my_arr[1];
			this_year	= my_arr[2];

			month_str 	= "JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC"
			month_arr 	= month_str.split(",")

			if (this_year.length != 4){
				alert("please enter a four digit year" + format_msg);
				fCheck = false;
				return;
			}

			if (this_month > 12 || this_month < 1){
				alert("there can only be 12 months in a year, please use a number from 1 - 12" + format_msg);
				fCheck = false;
				return;
			}

			if (this_day < 1){
				alert("the day value must be a number greater than 0" + 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 == 9) || (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 Validate_datediff(start_date_name, start_date_value, end_date_name, end_date_value, error_msg){

		Validate_date(start_date_value);
		Validate_date(end_date_value);

		today = new Date();

		if (fCheck) {

			var start_arr 		= start_date_value.split("/");
			var end_arr 		= end_date_value.split("/");

			// initialise
			var is_error = 1;
			var error_str = "";

			start_day		= parseInt(start_arr[0],10);
			start_month		= parseInt(start_arr[1],10);
			start_year		= parseInt(start_arr[2],10);

			end_day			= parseInt(end_arr[0],10);
			end_month		= parseInt(end_arr[1],10);
			end_year		= parseInt(end_arr[2],10);

			if (start_year > end_year){
				error_str = "year"
			} else {
				if ((start_month > end_month) && (start_year == end_year)){
					error_str = "month"
				} else {
					if ((start_day > end_day) && (start_month == end_month) && (start_year == end_year)){
						error_str = "day"
					} else {
						is_error = 0
					}
				}
			}
			if (is_error == 1){
				alert(error_msg + "the selected " + start_date_name + " (" + start_date_value + ") occurs after " + end_date_name + " (" + end_date_value + ")");
				//alert(error_msg + "the selected " + start_date_name + " (" + start_date_value + ") occurs after " + end_date_name + " (" + end_date_value + ") \nthe offending value is the " + error_str + " field");
				fCheck = false;
				return;
			}	
		}
	}


	function BoundsCheck(strFieldValue, strMsg, minimum, maximum)
	{
		if ((strFieldValue < minimum) || (strFieldValue > maximum))
		{                      
			if (fCheck)
			{
				alert(strMsg);
				fCheck = false;
			}
		}
	}

