/* Some functions in this file require isEmptyWhenTrimmed(), so be sure to include validate.js aswell. */
function requireUserRef(form) {
	return requireUserRefCust(form, null, null);
}


function requireUserRefCust(form, fileLabelName, userRefName) {
	if (form == null) { // Act as if javascript is disabled.
		return true;
	}

	fileLabelName = (fileLabelName != null) ? fileLabelName : "File Label";
	userRefName	  = (userRefName   != null) ? userRefName   : "User Reference";

	if ( form.fileLabel_text != null && isEmptyWhenTrimmed(form.fileLabel_text) ) {
		alert( 'You must enter a ' + fileLabelName );
		form.fileLabel_text.focus();
		return false;
	}

	if ( isEmptyWhenTrimmed(form.userRef) ) { 
		alert( 'You must enter a ' + userRefName );
		form.userRef.focus();
		return false;
	}

	return true;
} // End requireUserRefCust


function requireUserRefCustEmail(form, fileLabelName, userRefName) {

	try {
		if (form == null) { // Act as if javascript is disabled.
			return true;
		}

		fileLabelName = (fileLabelName != null) ? fileLabelName : "File Label";
		userRefName = (userRefName != null) ? userRefName : "User Reference";

		if ( form.fileLabel_text != null && isEmptyWhenTrimmed(form.fileLabel_text) ) {
			alert( 'You must enter a ' + fileLabelName );
			form.fileLabel_text.focus();
			return false;
		}

		if ( isEmptyWhenTrimmed(form.userRef) ) { 
			alert( 'You must enter a valid email address in ' + userRefName );
			form.userRef.focus();
			return false;
		}

		if ( isValidEmail(form.userRef.value) == false ) { 
			alert( 'You must enter a valid email address in ' + userRefName );
			form.userRef.focus();
			return false;
		}
	} catch ( e ) {
		//alert( "requireUserRefCustEmail() ERROR: " + e ) ;
		return true; // No point penalising the customer for our mistake.
	}
	return true;
} // End requireUserRefCustEmail


function requireUserRefStrict(form, allowedRefEnc) {
	if (form == null) { // Act as if javascript is disabled.
		return true;
	}

	if ( isEmptyWhenTrimmed(form.userRef) ) { 
		alert('You must enter a User Reference');
		form.userRef.focus();
		return false;
	}

	var userRef = form.userRef.value;
	var allowedRefs = unescape(allowedRefEnc).split(',');
	var x;
	for (x in allowedRefs) {
		if ( userRef == allowedRefs[x] ) {
			return true;
		}
	}

	alert( 'Sorry, that reference is not allowed.' );
	form.userRef.focus();
	return false;
} // End requireUserRefStrict


function requireUserRef8digits(form) {
	if (form == null) { // Act as if javascript is disabled.
		return true;
	}

	if ( isEmptyWhenTrimmed(form.userRef) ) { 
		alert('The Matter Number must be 8 digits long.');
		form.userRef.focus();
		return false;
	}

	var userRef = form.userRef.value;

	if (userRef.length != 8){
		alert('The Matter Number must be 8 digits long.');
		form.userRef.focus();
		return false;
	}

	if (!(isPositiveInteger(userRef))){
		alert('The Matter Number must be 8 digits long.');
		form.userRef.focus();
		return false;
	}
	return true;
} // End requireUserRef8digits


function checkMatterNumber(form) {
	if (form == null) { // Act as if javascript is disabled.
		return true;
	}

	if ( requireUserRef8digits(form) == true ) {

		var userRef = form.userRef.value;
		var url = "http://" + self.location.hostname + "/checkMatterNumber.jsp?matterNum=" + userRef;
		var request;

		try {
			// Try the "standard" way
			request = new XMLHttpRequest();
		} catch (err) {
			try {
				// Try the first M$ Way
				request = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (err) {
				try {
					// Try the second M$ Way
					request = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (err) {}
			} // End second try...catch
		} // End first try...catch

		if ( request == null ) {
			// Act as if user has javascript turned off
			return true;
		}

		request.open("GET", url, false);
		request.setRequestHeader("User-Agent", navigator.userAgent);
		request.send(null);

		if ( request.status == 200 ) {
			var valid = ( request.responseText == 'y' );
			if ( valid == true ) {
				return true;
			} else {
				alert('Sorry, that Matter Number is not valid.');
				form.userRef.focus();
				return false;
			}
		}

		// Act as if user has javascript turned off
		return true;

	} else {
		return false;
	}
} // End checkMatterNumber()


function validateMatterNumberIfSupplied(form) {
	if ( isEmptyWhenTrimmed(form.userRef) == false ) {
		return checkMatterNumber(form) ;
	} else { // Nothing was supplied, but it is not required here, so that is okay.
		return true;
	}
} // End validateMatterNumberIfSupplied()


function requireUserRefBCM(form, fileLabelName, userRefName) {
	if (form == null) { // Act as if javascript is disabled.
		return true;
	}
	fileLabelName = (fileLabelName != null) ? fileLabelName : "File Num";
	userRefName	  = (userRefName   != null) ? userRefName   : "Matter Num";

	if ( form.fileLabel_text != null ) {
		if ( isEmptyWhenTrimmed(form.fileLabel_text) ) {
			alert( 'Please enter your ' + fileLabelName + '; this should be between 3 and 5 digits long.' );
			form.fileLabel_text.focus();
			return false;
		}

		var tmp = form.fileLabel_text.value;
		if ( tmp.length < 3 || tmp.length > 5 || !(isGreaterThanZero(tmp))) {
			alert( 'Please enter your ' + fileLabelName + '; this should be between 3 and 5 digits long.' );
			form.fileLabel_text.focus();
			return false;
		}
	} // End if

	if ( isEmptyWhenTrimmed(form.userRef) ) {
		alert( 'Please enter your ' + userRefName + '; this should only contain digits.' );
		form.userRef.focus();
		return false;
	}

	var tmp = form.userRef.value;
	if ( !(isGreaterThanZero(tmp)) ) {
		alert( userRefName + ' should only contain digits.' );
		form.userRef.focus();
		return false;
	}

	return true;
} // End requireUserRefBCM


function requireExtraReferencesNonChargable(form, fileLabelName, userRefName) {
	if (form == null) { // Act as if javascript is disabled.
		return true;
	}

	try {
		fileLabelName = (fileLabelName != null) ? fileLabelName : "File Num";
		userRefName	  = (userRefName   != null) ? userRefName   : "Matter Num";

		// If the Matter Number is ADMIN then ignore FileNum
		if ( form.userRef != null && form.userRef.value != null && form.userRef.value.toLowerCase()=='admin') {
			form.userRef.value = form.userRef.value.toUpperCase();
			if ( form.fileLabel_text != null ) {
				form.fileLabel_text.value='';
			}
		}

		// If the Matter Number is ARCHIVE then the FileNum must be at least 10 characters long
		if ( form.userRef != null && form.userRef.value != null && form.userRef.value.toLowerCase()=='archive') {

			form.userRef.value = form.userRef.value.toUpperCase();

			if ( form.fileLabel_text != null ) {
				form.fileLabel_text.value = form.fileLabel_text.value.replace(/^\s+|\s+$/g, ""); // trim
				if ( form.fileLabel_text.value.length > 9 ) {
					return true;
				} else {
					alert( 'Please enter the Archive reason in the ' + fileLabelName + ' field; this should be 10 or more characters.' );
					form.fileLabel_text.focus();
					return false;
				}
			} else {
				alert( 'Please enter the Archive reason in the ' + fileLabelName + ' field; this should be 10 or more characters.' );
				form.fileLabel_text.focus();
				return false;
			}
		} // End if('archive')

		// If the Matter num is supplied, and it is not admin/archive ...
		if ( form.userRef != null 
			&& isEmptyWhenTrimmed(form.userRef) == false
			&& (form.userRef.value.toLowerCase()=='admin') == false 
			&& (form.userRef.value.toLowerCase()=='archive') == false 
			&& form.fileLabel_text != null ) {

			// ... then Matter num must be a number and ...
			if ( isEmptyWhenTrimmed(form.userRef) == true ) {
				alert( 'Please enter your ' + userRefName + '; this should only contain digits (or else be ADMIN or ARCHIVE).' );
				form.userRef.focus();
				return false;
			}

			var tmp2 = form.userRef.value;
			if ( isGreaterThanZero(tmp2) == false ) {
				alert( userRefName + ' should only contain digits, and must be greater than zero (or else be ADMIN or ARCHIVE).' );
				form.userRef.focus();
				return false;
			}

			// ... then validate FileNum.
			if ( isEmptyWhenTrimmed(form.fileLabel_text) ) {
				alert( 'Please enter your ' + fileLabelName + '; this should be between 3 and 5 digits long.' );
				form.fileLabel_text.focus();
				return false;
			}

			var tmp = form.fileLabel_text.value;
			if ( tmp.length < 3 || tmp.length > 5 || !(isPositiveInteger(tmp))) {
				alert( 'Please enter your ' + fileLabelName + '; this should be between 3 and 5 digits long.' );
				form.fileLabel_text.focus();
				return false;
			}
		} // End check that the matter number is supplied.


		// Also, if File Num is supplied, it must be validated!
		if ( isEmptyWhenTrimmed(form.fileLabel_text) == false) {
			var tmp = form.fileLabel_text.value;
			if ( tmp.length < 3 || tmp.length > 5 || !(isPositiveInteger(tmp))) {
				alert( 'Please enter your ' + fileLabelName + '; this should be between 3 and 5 digits long.' );
				form.fileLabel_text.focus();
				return false;
			}

			if ( isEmptyWhenTrimmed(form.userRef) == true ) {
				alert( 'Please enter your ' + userRefName + '; this should only contain digits (or else be ADMIN or ARCHIVE).' );
				form.userRef.focus();
				return false;
			}
			var tmp2 = form.userRef.value;
			if ( !(isPositiveInteger(tmp2)) ) {
				alert( userRefName + ' should only contain digits (or else be ADMIN or ARCHIVE).' );
				form.userRef.focus();
				return false;
			}

		} // End if File Num is supplied

	} catch ( e ) {
		return true;
	}

	return true ;
} // End function requireExtraReferencesNonChargable


function requireExtraReferencesChargable(form, fileLabelName, userRefName) {
	if (form == null) { // Act as if javascript is disabled.
		return true;
	}

	try {
		fileLabelName = (fileLabelName != null) ? fileLabelName : "File Num";
		userRefName	  = (userRefName   != null) ? userRefName   : "Matter Num";

		// If the Matter Number is ADMIN then ignore FileNum
		if ( form.userRef != null && form.userRef.value != null && form.userRef.value.toLowerCase()=='admin') {
			form.userRef.value = form.userRef.value.toUpperCase();
			if ( form.fileLabel_text != null ) {
				form.fileLabel_text.value='';
			}
		}

		// If the Matter Number is ARCHIVE then the FileNum must be at least 10 characters long
		if ( form.userRef != null && form.userRef.value != null && form.userRef.value.toLowerCase()=='archive') {

			form.userRef.value = form.userRef.value.toUpperCase();

			if ( form.fileLabel_text != null ) {
				form.fileLabel_text.value = form.fileLabel_text.value.replace(/^\s+|\s+$/g, ""); // trim
				if ( form.fileLabel_text.value.length > 9 ) {
					return true;
				} else {
					alert( 'Please enter the Archive reason in the ' + fileLabelName + ' field; this should be 10 or more characters.' );
					form.fileLabel_text.focus();
					return false;
				}
			} else {
				alert( 'Please enter the Archive reason in the ' + fileLabelName + ' field; this should be 10 or more characters.' );
				form.fileLabel_text.focus();
				return false;
			}
		} // End if('archive')

		// If the Matter num is supplied, and it is not admin/archive ...
		if ( form.userRef != null
			&& (form.userRef.value.toLowerCase()=='admin') == false 
			&& (form.userRef.value.toLowerCase()=='archive') == false 
			&& form.fileLabel_text != null ) {

			// ... then Matter num must be a number and ...
			if ( isEmptyWhenTrimmed(form.userRef) == true ) {
				alert( 'Please enter your ' + userRefName + '; this should only contain digits (or else be ADMIN or ARCHIVE).' );
				form.userRef.focus();
				return false;
			}

			var tmp2 = form.userRef.value;
			if ( isGreaterThanZero(tmp2) == false ) {
				alert( userRefName + ' should only contain digits, and must be greater than zero (or else be ADMIN or ARCHIVE).' );
				form.userRef.focus();
				return false;
			}

			// ... then validate FileNum.
			if ( isEmptyWhenTrimmed(form.fileLabel_text) ) {
				alert( 'Please enter your ' + fileLabelName + '; this should be between 3 and 5 digits long.' );
				form.fileLabel_text.focus();
				return false;
			}

			var tmp = form.fileLabel_text.value;
			if ( tmp.length < 3 || tmp.length > 5 || !(isPositiveInteger(tmp))) {
				alert( 'Please enter your ' + fileLabelName + '; this should be between 3 and 5 digits long.' );
				form.fileLabel_text.focus();
				return false;
			}
		} // End check that the matter number is supplied.

	} catch ( e ) {
		return true;
	}

	return true ;
} // End function requireExtraReferencesChargable


function checkCheckboxDT(form, fileLabelName, userRefName) {
	if ( form == null || form.dtChargeable == null) {
		return '' ;
	}
	try {
		if ( form.dtChargeable.value == 'false' ) {
			return '' ;
		}

		if ( isEmptyWhenTrimmed(form.fileLabel_text) == true ) {
			return fileLabelName + '; this should be 7 characters long.'; // The calling function must add the "and your" or whatever.
		}

		var tmp = form.fileLabel_text.value;
		if ( tmp.length == 7 ) {
			return '' ;
		}
		return fileLabelName + '; this should be 7 characters long.'; // The calling function must add the "and your" or whatever.

	} catch ( e ) {
		return '' ;
	}

	return '' ;
} // End function checkCheckboxDT



function requireExtraReferencesNonChargableDT(form, fileLabelName, userRefName) {
	if (form == null) { // Act as if javascript is disabled.
		return true;
	}

	try {
		fileLabelName = (fileLabelName != null) ? fileLabelName : "Code";
		userRefName	  = (userRefName   != null) ? userRefName   : "Ref.";

		var msg = checkCheckboxDT( form, fileLabelName, userRefName ) ;

		if ( msg != null && msg.length > 0 ) {
			alert( 'Please enter your ' + msg);
			form.fileLabel_text.focus();
			return false;
		}

	} catch ( e ) {
		return true;
	}

	return true ;
} // End function requireExtraReferencesNonChargableDT


function requireExtraReferencesChargableDT(form, fileLabelName, userRefName) {
	if (form == null) { // Act as if javascript is disabled.
		return true;
	}

	try {
		fileLabelName = (fileLabelName != null) ? fileLabelName : "Code";
		userRefName	  = (userRefName   != null) ? userRefName   : "Ref.";

		var msg = checkCheckboxDT( form, fileLabelName, userRefName ) ;

		if ( isEmptyWhenTrimmed(form.userRef) ) {
			if ( msg == null || msg.length < 1 ) {
				alert( 'Please enter your ' + userRefName );
			} else {
				alert( 'Please enter your ' + userRefName + ' and your ' + msg );
			}
			form.userRef.focus();
			return false;
		}

		if ( msg != null && msg.length > 0 ) {
			alert( 'Please enter your ' + msg );
			form.fileLabel_text.focus();
			return false;
		}

	} catch ( e ) {
		return true;
	}

	return true ;
} // End function requireExtraReferencesChargableDT


function checkMatterNumberMCFG(form, isChargableItem, userRefName) {

	try {
		if ( form == null ) {	// Act as if javascript is disabled.
			return true;
		}

		if ( isEmptyWhenTrimmed(form.userRef) ) {
			// Non-chargeable items don't require a reference (yet)
			if ( isChargableItem == null || isChargableItem == false ) {
				return true;
			} else {
				alert('Please enter a valid ' + userRefName + ' (in the format "123456.1234").');
				form.userRef.focus();
				return false;
			}
		}

		var userRef = form.userRef.value.replace(/^\s+/, '').replace(/\s+$/, '');
		var re = new RegExp(/^[0-9]{6}\.[0-9]{4}$/);
		if ( re.test(form.userRef.value) == false ) {
			alert('The ' + userRefName + ' must be of the format "123456.1234".');
			form.userRef.focus();
			return false;
		}

		return true;
	} catch (e) {
		// Handle it server side instead
		return true;
	}
} // End function checkMatterNumberMCFG
