jQuery(function() {
	var $ = jQuery;
	
	var funcGetQuestionType = function(elem) {
		var elemClass = $(elem).attr("class");
		
		//alert("elemClass = " + elemClass);
		
		var ret = "";
		var matches = elemClass.match(/page-form-question-type-(\d)+/);
		if (matches.length >= 2) {
			//alert("matches: " + matches.join(", "));
			//alert("question type = " + matches[1]);
			ret = matches[1];
		}
		
		return ret;
	};
	
	$("#page-forms .page-form-question-type-4 input").datepicker();
	
	$("#page-forms .GST_FormBuilder2").submit(function(e) {
		var $theForm = $(this);
		
		var funcGiveFocusToField = function($theField, fieldType) {
			switch (fieldType) {
				// Regular .value check
				case 0:
				case 4:
				case 5:
				case 6:
					$theField.find("input[type='text']").first().focus();
					break;
				
				// Select box
				case 1:
				case 8:
					$theField.find("select").first().focus();
					break;
				
				// Checkboxes
				case 2:
					$theField.find("input[type='checkbox']").first().focus();
					break;
				
				// Textarea
				case 3:
					$theField.find("textarea").first().focus();
					break;
				
				// 1-10 radio buttons	
				case 7:
					$theField.find("input[type='radio']").first().focus();
					break;
			}
		};
		
		//e.preventDefault();
		
		// Get all my fields
		var $fields = $theForm.find(".page-form-question, .page-form-contact-field");
		
		//alert("I have " + $fields.length + " fields.");
		
		var stopTheForm = false;
		
		// Walk each field checkin' thangs
		$fields.each(function() {
			var $theField = $(this);
			
			var fieldType = 1 * funcGetQuestionType(this);
			//alert("fieldType = " + fieldType);
			
			// First, is it required?
			var required = $theField.hasClass("page-form-question-required");
			
			// Second, does it have a value (at all, type-sensitive)
			var hasValue = false;
			var fieldValue = false;
			
			switch (fieldType) {
				// Regular .value check
				case 0:
				case 4:
				case 5:
				case 6:
					var $inputs = $theField.find("input[type='text']");
					fieldValue = $inputs.attr("value");
					if (fieldValue.length > 0) {
						hasValue = true;
					}
					//alert("text field value: " + fieldValue);
					break;
					
				// Select box
				case 1:
				case 8:
					var elemSelect = $theField.find("select").get(0);
					fieldValue = elemSelect.options[elemSelect.selectedIndex].value;
					if (fieldValue.length > 0) {
						hasValue = true;
					}
					//alert("select box value: " + fieldValue);
					break;
					
				// Checkboxes
				case 2:
					var $checkedBoxes = $theField.find("input[type='checkbox']");
					fieldValue = [];
					$checkedBoxes.each(function() {
						if (this.checked) {
							hasValue = true;
							//fieldValue.push(this.value);
							//fieldValue.push($(this).parent().text());
							fieldValue.push($(this).next().text());
						}
					});
					fieldValue = (fieldValue.length > 0) ? fieldValue : false;
					if (fieldValue) {
						//alert("checkbox value(s):\n" + fieldValue.join("\n"));
					} else {
						//alert("checkbox value(s): (none)");
					}
					
					break;
					
				// Textarea
				case 3:
					var $textarea = $theField.find("textarea").first();
					fieldValue = $textarea.attr("value");
					if (fieldValue.length > 0) {
						hasValue = true;
					}
					//alert("textarea value: " + fieldValue);
					break;
					
				// 1-10 radio buttons	
				case 7:
					var $radios = $theField.find("input[type='radio']");
					$radios.each(function() {
						if (this.checked) {
							fieldValue = $(this).attr("value");
							hasValue = true;
							return false;
						}
					});
					
					if (fieldValue) {
						//alert("radio button value: " + fieldValue);
					} else {
						//alert("radio button value: (none)");
					}
					break;
			}
			
			var fieldLabel = $theField.find(".fb2_field_heading").text();
			
			if (required && !hasValue) {
				alert(fieldLabel + " cannot be left blank");
				
				funcGiveFocusToField($theField, fieldType);
				
				stopTheForm = true;
				return false;
			} else {
				
				// Third, is that value valid (given the field type)
				if (required) {
					// Validate the data (by type)
					switch (fieldType) {
						// Regular .value check
						case 0:
						case 1:
						case 2:
						case 3:
							// No validation
							break;
						
						// Date
						case 4:
							if (!fieldValue.match(/^\d\d\/\d\d\/\d\d\d\d$/)) {
								alert(fieldLabel + " must be a date in MM/DD/YYYY format.");
								funcGiveFocusToField($theField, fieldType);
								stopTheForm = true;
								return false;
							}
							break;
						
						// Email
						case 5:
							//alert("fieldValue is a " + (typeof fieldValue));
							if (!fieldValue.match(/^[^@]+@[^.]+\..+$/)) {
								alert(fieldLabel + " must be an email address.");
								funcGiveFocusToField($theField, fieldType);
								stopTheForm = true;
								return false;
							}
							break;
						
						// Number
						case 6:
							if (!fieldValue.match(/^-?([1-9][0-9]*|0)(\.[0-9]+)?$/)) {
								alert(fieldLabel + " must be a number.");
								funcGiveFocusToField($theField, fieldType);
								stopTheForm = true;
								return false;
							}
							break;
						
						// 1-10 radio buttons	
						case 7:
							fieldValue = parseInt(fieldValue);
							if (fieldValue < 1 || fieldValue > 10) {
								alert(fieldLabel + " must be between 1 and 10 inclusive.");
								funcGiveFocusToField($theField, fieldType);
								stopTheForm = true;
								return false;
							}
							break;
					}
				}
			}
			
		});
		
		//return false;
		if (stopTheForm) {
			return false;
		}
	});
});
