/* MW 2003-07-11 - form validation functions */
/*
@modifiedBy HW
@date 2003-10-10
@modification added email validator
@modification added requireTextAtLeast - require text at least as long as a minimum no. of chars.
*/

function complain(fieldId, message, focus) {
	alert(message);

	if(focus) {
		try {
			document.getElementById(fieldId).focus();
		} catch(e) {
			// Ah well, that's a shame, isn't it?
		}
	}
}

function requireIntOrBlank(fieldId, message) {
	var field = document.getElementById(fieldId);
	var value = field.value;
	if(value.length == 0) { return true; }
	if (!(/^ *[0-9]+ *$/).test(value)) {
		complain(fieldId, message,true);
		return false;
	}
	return true;
}

function requireInteger(fieldId, message) {
	var field = document.getElementById(fieldId);
	if (!(/^ *[0-9]+ *$/).test(field.value)) {
		complain(fieldId, message,true);
		return false;
	}
	return true;
}

function requireIntNonZero(fieldId, message) {
	var field = document.getElementById(fieldId);

	// check integer
	//   note - can't just call requireInteger, as IE has a bug
	//          in it, and doing that causes it to think the call
	//          returned true! How muppet is that...
	var isint = false;
	if (!(/^ *[0-9]+ *$/).test(field.value)) {
		complain(fieldId, message, false);
		return false;
	} else {
		isint = true;
	}

	if(isint) {
		// Now check value
		var text = field.value;
		if(text > 0) {
			return true;
		}
	}
	
	// failed non zero check
	complain(fieldId, message, false);
	return false;
}

function requireShort(fieldId, message, length) {
	var field = document.getElementById(fieldId);
	var text = field.value;
	if(text.length > length || text.length == 0) {
		complain(fieldId, message, true);
		return false;
	}
	return true;
}

function requireMoney(fieldId, message) {
	var field = document.getElementById(fieldId);
	if (!(/^ *[0-9]+(\.[0-9][0-9])? *$/).test(field.value)) {
		complain(fieldId, message, true);
		return false;
	}
	return true;
}

function requireNonEmpty(fieldId, message) {
	var field = document.getElementById(fieldId);
	if (field.value == '') {
		complain(fieldId, message, true);
		return false;
	}
	if ((/^ /).test(field.value)) {
		complain(fieldId,message+ ". Also, must not begin with a space.",true);
		return false;
	}
	return true;
}

function requireDate(fieldId, message) {
	/* does not check valid-looking dates for correctness - that's handled by <ui:date> */
	var field = document.getElementById(fieldId);
	if (!(/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/).test(field.value)) {
		complain(fieldId, message, false);
		return false;
	}
	return true;
}

function requireDateOrEmpty(fieldId, message) {
	if (document.getElementById(fieldId).value.length) {
		/* does not check valid-looking dates for correctness - that's handled by <ui:date> */
		var field = document.getElementById(fieldId);
		if (!(/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/).test(field.value)) {
			complain(fieldId, message, false);
			return false;
		}
		return true;
	
	}
	
	else {
		return true;	
	}
}

function requireDateLater(earlyFieldId,lateFieldId,message) {
	/* does not check valid-looking dates for correctness - that's handled by <ui:date> */
	var early = document.getElementById(earlyFieldId).value;
	var late = document.getElementById(lateFieldId).value;

	var isLater = (early <= late);

	if(isLater) {
		return true;
	}

	complain(earlyFieldId,message,false);

	return false;
}

function requireDateLaterOrEmpty(earlyFieldId,lateFieldId,message) {
/* does not check valid-looking dates for correctness - that's handled by <ui:date> */
if (document.getElementById(lateFieldId).value.length) {
		var early = document.getElementById(earlyFieldId).value;
		var late = document.getElementById(lateFieldId).value;
	
		var isLater = (early <= late);
	
		if(isLater) {
			return true;
		}
	
		complain(earlyFieldId,message,false);
	
		return false;
}
	return true;
}

function requirePostcode(fieldId, message) {
	var field = document.getElementById(fieldId);
	if (!(/^ *[a-zA-Z]([a-zA-Z]?[0-9]{1,2}|[0-9][a-zA-Z]|[a-zA-Z][0-9][a-zA-Z]) [0-9][a-bd-hjlnp-uw-zA-BD-HJLNP-UW-Z]{2} *$/).test(field.value)) {
		complain(fieldId, message, true);
		return false;
	}
	return true;
}

function requireEmail(fieldId, message) {
	var field = document.getElementById(fieldId);
		
	if (!(/^([a-zA-Z0-9-_]+\.)*[a-zA-Z0-9-_]+\@([a-zA-Z0-9-_]+\.)+[a-zA-Z0-9]{2,}$/).test(field.value)) {
		complain(fieldId, message, true);
		return false;
	}
	return true;
}

function requirePositiveNumber(fieldId, message) {
	var field = document.getElementById(fieldId);
	if (!(/^([0-9]+|[0-9]*\.[0-9]+)$/).test(field.value)) {
		complain(fieldId, message, true);
		return false;
	}
	return true;
}

function requireIntInRange(fieldId,lower,upper,optional,message) {
	var field = document.getElementById(fieldId);
	if(optional) {
		if(field.value.length == 0) {
			return true;
		}
	}
	if (!(/^([0-9]+|[0-9]*\.[0-9]+)$/).test(field.value)) {
		complain(fieldId, message, true);
		return false;
	}
	if( field.value < lower ) {
		complain(fieldId, message+". Must be between "+lower+" and "+upper, true);
		return false;
	}
	if( field.value > upper ) {
		complain(fieldId, message+". Must be between "+lower+" and "+upper, true);
		return false;
	}
	return true;
}

function requireTextAtLeast(fieldId,minimum,message) {
	var field = document.getElementById(fieldId);
	if (field.value.length < minimum) {
		complain(fieldId, message, true);
		return false;
	}
return true;	
}	


function triggerDateValidation() {
	// This function finds all date elements, and triggers their
	//  validation routines, which might not have occured if the user
	//  hit enter when in a date field

	var ret = true;

	var inputs = document.getElementsByTagName("input");
	for(var i=0; i<inputs.length; i++) {
		if(inputs[i].getAttribute("name") == 'isADateField' ) {
			var date = document.getElementById(inputs[i].value);
			dateBlur(inputs[i].value);
			if(date.value == 'invalid') {
				// date blur found an error
				ret = false;
			}
		}
	}
	return ret;
}

function requireChoiceFromCheckboxGroup(fieldName, message) {
	theboxes = document.getElementsByName(fieldName);
	
	atLeastOneChecked = false;

	for (i=0; i<theboxes.length; i++) {
		if (theboxes[i].checked == true) atLeastOneChecked = true;
	}
	
	if (!atLeastOneChecked) {
		alert(message);
		return false;
	}
	
	return true;
}


function stripPoundSign(id) {
	var oldval = document.getElementById(id).value;
	var newval = oldval.replace(/^\xA3/,'');
	document.getElementById(id).value = newval;
}

function checkEmail(fieldId, message) {
	var field = document.getElementById(fieldId);
	if (field.value.length) {	
	if (!(/^([a-zA-Z0-9-_]+\.)*[a-zA-Z0-9-_]+\@([a-zA-Z0-9-_]+\.)+[a-zA-Z0-9]{2,}$/).test(field.value)) {
		complain(fieldId, message, true);
		return false;
	}
	}
	return true;
}
