// EXPERIMENTAL FORM SCRIPTS (Updated 2009-07-24)

// Rewrite of validateForm in jQuery compliant format. Works cross-browser.
// IMPORTANT: The validate mode 'cc' -REQUIRES- jQuery/cc.js to work. Otherwise, it will not.
// IMPORTANT: Conforms to HTML 5 standards. All custom attributes are prefixed with 'DATA-'.
// TODO: wholesalerActiveDates and notZeroActive modes (May not do these at all)
function validateForm(id) {
	var validate = true;
	var formtag  = jQuery("form#" + id);
	var formid   = jQuery(formtag).attr("id");
	var formname = jQuery(formtag).attr("name");

	// Validate All Input Elements with the Validate Attribute
	jQuery("input[data-validate],textarea[data-validate]",formtag).each(function() {
		var elemtype     = jQuery(this).attr("type");
		var elemid       = jQuery(this).attr("id");
		var elemvalue    = trim(jQuery(this).val());
		var elemdefault  = trim(jQuery(this).attr("default"));
		var validatemode = jQuery(this).attr("data-validate").toLowerCase();
		var validatename = jQuery(this).attr("data-validatename");

		if(!validatename || validatename == "") {
			validatename = elemid;
		}

		if(validatemode == "email") {
			if(!emailCheck(elemvalue)) {
				jQuery(this).select();
			 	jQuery(this).focus();
				validate = false;
			}
		} else if(validatemode == "cc") {
			if(!validCCForm(this) || elemvalue == "" || elemvalue == NULL) {
				jQuery(this).select();
			 	jQuery(this).focus();
				validate = false;
			}
		} else if(validatemode == "requiredDefault") {
			if(elemvalue == "") {
				alert("Please enter " +  validatename + " before submitting this form.");
				jQuery(this).select();
				jQuery(this).focus();
				validate = false;
			} else if(typeof(elemdefault) != 'undefined' && trim(elemdefault) == trim(elemvalue)) {
				alert("You must enter " + validatename + " before submitting this form.");
				jQuery(this).select();
				jQuery(this).focus();
				validate = false;
			}
		} else if(validatemode == "notZero") {
			if(elemvalue == "" || elemvalue == 0 || elemvalue == 0.00) {
				alert(validatename + " must be greater than 0.");
				validate = false;
			}
		} else if(elemvalue == "" || elemvalue == elemdefault) {
			alert("You must enter " +  validatename + " before submitting this form.");
			jQuery(this).select();
			jQuery(this).focus();
			validate = false;
		}

		if(validate == false) {
			return false;
		}
	});

	// Validate All Selects with the Validate Attribute
	if(validate == true) {
		jQuery("select[data-validate]",formtag).each(function() {
			var elemid       = jQuery(this).attr("id");
			var elemvalue    = trim(jQuery(this).val());
			var elemdefault  = trim(jQuery(this).attr("default"));
			var validatemode = jQuery(this).attr("data-validate").toLowerCase();
			var validatename = jQuery(this).attr("data-validatename");

			if(!validatename || validatename == "") {
				validatename = elemid;
			}

			if(validatemode == "requiredDefault") {
				if(elemvalue == "") {
					alert("Please choose " +  validatename + " before submitting this form.");
					jQuery(this).select();
					jQuery(this).focus();
					validate = false;
				} else if(typeof(elemdefault) != 'undefined' && trim(elemdefault) == trim(elemvalue)) {
					alert("Please enter " + validatename + " before submitting this form.");
					jQuery(this).choose();
					jQuery(this).focus();
					validate = false;
				}
			} else if(validatemode == "notZero") {
				if(elemvalue == "" || elemvalue == 0 || elemvalue == 0.00) {
					alert(validatename + " must be greater than 0.");
					validate = false;
				}
			} else if(elemvalue == "" || elemvalue == elemdefault) {
				alert("Please choose " +  validatename + " before submitting this form.");
				jQuery(this).select();
				jQuery(this).focus();
				validate = false;
			}

			if(validate == false) {
				return false;
			}
		});
	}

	// Loop and disable marked form elements.
	if (validate == true) {
		jQuery("*[data-disableonsubmit]",formtag).each(function(){
			var disableItem = jQuery(this).attr("data-disableonsubmit");

			if(disableItem == true || disableItem.toLowerCase() == "yes" || disableItem.toLowerCase() == "true" || parseInt(disableItem) == 1) {
				jQuery(this).attr("disabled", true);
			}
		});

		// Record form_name in the FORM for submission
		if(!formname || trim(formname) == "") {
			formname = formid;
		}

		if(jQuery("#form_name",formtag).length == 0) {
			jQuery(formtag).append("<INPUT TYPE='hidden' NAME='form_name' ID='form_name' VALUE='" + formname + "'>");
		}
	}

	return validate;
}

// Limits the number of characters that can be in any given field.
// Main reason for this function is text areas, which do not have a maxlength attribute.
function charLimit(field, number) {
	if(field.value.length > number) { field.value = field.value.slice(0, number+1); }
}