// Form.js (Website Framework) || Version: 0.03 || Last Updated: 2008-10-10 13:00 || Updated by: Hidde-Finne Peters || Created: 2008-04-16 by Hidde-Finne Peters
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------

function hasMinChars (value, chars) {
	if (value.length < chars) {
		return false;
	} else {
		return true;
	}
}

function numbersOnly (value) {
	if (!value.match(/^\d+$/))	{
		return false;
	} else {
		return true;
	}
}

function lettersOnly (value) {
	if (value.length > 0) {
		for (var i = 0; i < value.length; i++) {
			if (value[i]) {
				if (value[i].match(/^\d+$/)) {
					return false;	
				}
			}
		}
		return true;
	}
	return false;
}

function isEmailFormat (str) {
	if (str.length > 6) {
		//	Length is sufficient
		var atIndex = str.indexOf("@");
		if (atIndex > 0) {
			//	@ is valid
			var dotIndex = str.indexOf(".", atIndex);
			if (dotIndex - atIndex > 2) {
				//	Enough characters between @ and .
				if ((str.length - 2) > dotIndex) {
					//	Enough characters after .
					//	If it gets here the string must be good
					return true;
				}
			}
		}
	}
	return false;			
}

function conditionValid (condition) {
	var formField = document.getElementById(condition[0]);	
	var type = formField.type;
	var value = formField.value;
	if (value != null) {
		var conditionType = condition[1];
		var conditionParam = condition[2];
		switch (conditionType) {
			case 'minChars':
				return hasMinChars(value, conditionParam);
				break;
			case 'emailFormat':
				return isEmailFormat(value);
				break;
			case 'numbersOnly':
				return numbersOnly(value);
				break;
			case 'lettersOnly':
				return lettersOnly(value);
				break;
		}
	}
	//	Condition processing failed, return valid;
	return true;
}

function updateDisplayValid (condition, valid) {
	var inputId = condition[0];
	var feedback = condition[3];
	var formField = document.getElementById(inputId);
	var tooltipBox = document.getElementById(inputId +'_tooltipBox');
	var tooltip = document.getElementById(inputId +'_tooltip');
	if (valid) {
		formField.className = 'form_field_default';
		if (tooltipBox)
		tooltipBox.style.display = 'none';
	} else {
		formField.className = 'form_field_invalid';
		if (tooltip)
		tooltip.setAttribute('tip', feedback);
		if (tooltipBox)
		tooltipBox.style.display = 'block';
	}
}

function hasInvalidField (invalidFields, condition) {
	for (var i = 0; i < invalidFields.length; i++) {
		if (invalidFields[i] == condition[0]) {
			return true;	
		}
	}
	return false
}

function checkField (conditions, fieldName, handleInvalid) {
	if (conditions && fieldName) {
		for (var i = 0; i < conditions.length; i++) {
			if (conditions[i][0] == fieldName) {
				var condition = conditions[i];
				if (!conditionValid(condition)) {
					if (handleInvalid) {
						updateDisplayValid(condition, false);
					}
					return false;
				}
			}
		}
		if (condition) {
			updateDisplayValid(condition, true);
			return true;
		}
	}
}

function checkForm (conditions) {
	var invalidFields = new Array();
	for (var i = 0; i < conditions.length; i++) {
		var condition = conditions[i];
		if (!hasInvalidField(invalidFields, condition)) {
			var valid = conditionValid(condition)
			updateDisplayValid(condition, valid);
			if (!valid) {
				//	Condition is not valid
				invalidFields.push(conditions[i][0]);
			}
		}
	}
	var submitButton = document.getElementById('submitButton');
	var spam_check_field = document.getElementById('spam_check_passed');
	if (spam_check_field) {
		spam_check_field.value = 'true';	
	}
	if (invalidFields.length == 0) {
		//	Enable form button
		//submitButton.disabled = false;
		return true;
	} else {
		//	Disable form button
		//submitButton.disabled = true;
		return false;
	}
}