// constants
var TYPE_TEXT 			= 1;
var TYPE_EMAIL 			= 2;
var TYPE_CC 			= 3;
var TYPE_SELECTBOX 		= 4;
var TYPE_TEXT_EMPTY 	= 5;
var TYPE_RADIO			= 6;
var TYPE_CHECKBOX		= 7;
var TYPE_NUMBER			= 8;
var TYPE_EMPTY			= 9;
var TYPE_TEXT_PASSWORD	= 10;

var STR_STANDARD_ERROR	= 'Sorry, but some errors were found when processing this form.  Please review and correct the following errors, then try again.\n\n';

// functions
function isCreditCard (theCard) {

	if (theCard.length > 19) {
		return false;
	}

	var theSum = 0;
	var theMul = 1;
	var theLen = theCard.length;

	for (i = 0; i < theLen; i++) {
		var theDigit = theCard.substring(theLen - i - 1, theLen - i);
		var theProduct = parseInt(theDigit, 10) * theMul;
		if (theProduct >= 10) {
			theSum += (theProduct % 10) + 1;
		} else {
	  		theSum += theProduct;
		}
	
		if (theMul == 1) {
			theMul++;
		} else {
			theMul--;
		}
	}
	
	if ((theSum % 10) == 0) {
		return true;
	} else {
		return false;
	}
		
}

// -------------------------------------------

function hasNumbers (theString) {

	return /\d/.test(theString);
}

// -------------------------------------------

function validateField (theForm, theField, theType) {

	theField		= document.forms[theForm][theField];
	
	switch (theType) {
		case TYPE_TEXT :
			if (theField.value.length <= 1) {
				return false;
			} else {
				return true;
			}
			
			break;
		case TYPE_EMAIL :
			if (theField.value.indexOf('@') > -1) {
				// found @ sign, search for .
				atPosition = theField.value.indexOf('@');
				if (theField.value.indexOf('.', atPosition) > -1) {
					// valid e-mail address
					return true;
				} else {
					return false;
				}
			} else {
				return false;
			}
			
			break;
		case TYPE_CC :
			if (isCreditCard(theField.value)) {
				return true;
			} else {
				return false;
			}

			break;
		case TYPE_SELECTBOX :
			if (theField.selectedIndex == 0) {
				return false;
			} else {
				return true;
			}
			
			break;
		case TYPE_TEXT_EMPTY :
			if (theField.value.length <= 0) {
				return false;
			} else {
				return true;
			}
			
			break;
		case TYPE_RADIO :
			for (intCounter = 0; intCounter < theField.length; intCounter++) {
				if (theField[intCounter].checked) {
					return true;
				}
			}
			return false;
			
			break;
		case TYPE_CHECKBOX :
			if (theField.checked) {
				return true;
			} 
			return false;
			
			break;
		case TYPE_NUMBER :
			if (isNaN(theField.value)) {
				return false;
			} else {
				return true;
			}
			
			break;
		case TYPE_EMPTY :
			if (theField.value.length == 0) {
				return false;
			} else {
				return true;
			}
			
			break;
		case TYPE_TEXT_PASSWORD :
			if (theField.value.length < 6) {
				return false;
			} else {
				if (!hasNumbers(theField.value)) {
					return false;
				} else {
					return true;
				}
			}
			
			break;
	}

}
