var 
	debug = false,
	extended_debug = false,
	form_id = "annual_conference_registration_form",

	// An array of objects. Each object corresponds with one form element - shopping cart items.
	elements = [
		{
			id : "registration_member_early", // form element id
			product_name : "2011 Annual Conference Registration, Member, Early", // Shopping cart product name
			price : 180,
			send_to_paypal : false, 
			jq : null, // jQuery object containing cooresponding form element
			type: null, // type of form element (checkbox, radio button, etc)
			children : [ // When this object is selected the following will be presented as options
				{
					id : "member_number",
					name : "Member Number"
				}
			]
		},
		{
			id : "registration_member",
			product_name : "2011 Annual Conference Registration, Member",
			price : 230,
			send_to_paypal : false,
			jq : null,
			type: null,
			children : [ // When this object is selected the following will be presented as options
				{
					id : "member_number",
					name : "Member Number"
				}
			]
		},
		{
			id: "registration_nonmember_early",
			product_name : "2011 Annual Conference Registration, Non Member, Early",
			price : 280,
			send_to_paypal : false,
			jq : null,
			type: null
		},
		{
			id : "registration_nonmember",
			product_name : "2011 Annual Conference Registration, Non Member",
			price : 330,
			send_to_paypal : false,
			jq : null,
			type: null
		},
		{
			id : "conference_speaker_early",
			product_name : "2011 Annual Conference Registration, Conference Speaker",
			price : 0,
			send_to_paypal : false,
			jq : null,
			type: null
		},
		{
			id : "conference_speaker",
			product_name : "2011 Annual Conference Registration, Conference Speaker",
			price : 0,
			send_to_paypal : false,
			jq : null,
			type: null
		},
		{
			id : "all_meals",
			product_name : "All meals (no drink tickets)",
			price : 150,
			send_to_paypal : false,
			jq : null,
			type: null
		},
		{
			id : "thursday_banquet_meal",
			product_name : "Thursday Night Banquet meal only (no drink tickets)",
			price : 50,
			send_to_paypal : false,
			jq : null,
			type: null
		},
		{
			id : "DADS_tour_yes",
			product_name : "Tour of DADS - YES",
			price : 0,
			send_to_paypal : false,
			jq : null,
			type: null
		},
		{
			id : "DADS_tour_no",
			product_name : "Tour of DADS - NO",
			price : 0,
			send_to_paypal : false,
			jq : null,
			type: null
		},
		{
			id : "friday_tour_yes",
			product_name : "Friday tour - YES",
			price : 0,
			send_to_paypal : false,
			jq : null,
			type: null
		},
		{
			id : "friday_tour_no",
			product_name : "Friday tour - NO",
			price : 0,
			send_to_paypal : false,
			jq : null,
			type: null
		}
	],

	validator = $("#" + form_id).validate({
		rules: {
			first_name: { required: true },
			last_name: { required: true },
			address1 : {
				required: true,
				minlength: 2
			},
			city: {	required: true },
			state: { required: true },
			zip: {
				required: true,
				minlength: 5,
				maxlength: 5,
				digits: true
			},
			email: {
				required: true,
				email: true
			},
			night_phone_a: {
				required: true,
				minlength: 3,
				digits: true
			},				
			night_phone_b: {
				required: true,
				minlength: 3,
				digits: true
			},				
			night_phone_c: {
				required: true,
				minlength: 4,
				digits: true
			},				
			member_number: {
				required: function(element) {
					return ( $("#registration_member_early").is(":checked") || $("#registration_member").is(":checked") )
				},
				digits: true
			},
			DADS_tour: {
				required: true	
			},
			friday_tour: {
				required: true	
			}
		},
		messages: {
			first_name: "Please enter your first name",
			last_name: "Please enter your last name",
			address1: {
				required: "Please enter an address",
				minlength: jQuery.format("Please enter at least {0} letters")
	
			},
			city: {	required: "Please enter a city" },
			state: { required: "Please select a state" },
			zip: { required: "Please enter a zip code" },
			email: { required: "Please enter a valid email address" },	
			night_phone_a: {
				required: "Please enter a valid phone number", 
				minlength: jQuery.format("Please enter at least {0} numbers")
			 },
			night_phone_b: {
				required: "Please enter a valid phone number",
				minlength: jQuery.format("Please enter at least {0} numbers")
			},
			night_phone_c: {
				required: "Please enter a valid phone number",
				minlength: jQuery.format("Please enter at least {0} numbers")
			},
			member_number: {
				required: "Please enter your membership number",
				digits: "Please enter only numbers"
			},
		//	member_expiration: {
//				required: "Please enter your membership expiration date",
//				
//				/* The callback is called in the scope of the validator and with the rule's
//				parameters as the first and the element as the second arugment, it must
//				return a String to display as the message.
//				*/
//				twoDigitMonthfourDigitYear: function(parameters, element) {
//					// Most of this code must be duplicated in the addMethod() function
//					value = $(element).val();
//					if ( /^\d{2}\/\d{4}/.test(value) ) {
//						var slashPosition = value.indexOf('/'),
//							expireMonth = value.slice(0,slashPosition),
//							expireYear = value.slice(slashPosition + 1), // return everything after '/'
//							now = new Date(),
//							currentYear = now.getFullYear(),
//							expirationDate = new Date().setFullYear(expireYear, expireMonth, 1);
//					
//						if ( expireMonth < 1 || expireMonth > 12) {
//							return "Month must be between 01 and 12.";
//						}
//						if ( expireYear < currentYear ) {
//							return "Year must be later than " + (currentYear - 1);
//						}
//						// Check if membership has expired
//						// dateObject.setFullYear(year,month,day)
//						if ( expirationDate < now ) {
//							return "Your membership has expired";
//						}
//					} else { // basic MM/YYYY format not meet
//						return "Please enter the date in MM/YYYY format";
//					}
//				} // end of function
//			}, // end of member_expiration
			
			thursday_lunch: "Please select one of the lunch entrees"
		},
		// Specify grouping of error messages. A group consists of an arbitrary group name as the key and a comma-seperated list of element names as the value. Use errorPlacement to control where the group message is placed.
		groups: { phone: "night_phone_a night_phone_b night_phone_c" },
		errorPlacement: function(error, element) { //element is a jQuery object, element.attr("name")
			switch ( element.attr("name") ) {
				case "thursday_lunch":
					error.insertAfter(element);
					break;
				case "friday_tour":
					error.appendTo($('#error_friday_tour'));
					break;
				case "DADS_tour":
					error.appendTo($('#error_DADS_tour'));
					break;
				default:
					error.appendTo( element.parent("td").next("td") )
			}
		},
		onsubmit: false // don't valid on submit. Will call validation in $(elements[0].jq[0].form).submit()
	}), // end of validate

	// Elements to hide on print
	elements_to_hide_on_print = [
		"iframe", // all iframe elements such as Google map
		"#thirdCol"
	];


// Extra Validate methods
jQuery.validator.addMethod(
	"twoDigitMonthfourDigitYear",
	function(value, element, params) {
		if ( this.optional(element) ) {
			return this.optional(element);
		}
		else if ( /^\d{2}\/\d{4}/.test(value) ) {
			var slashPosition = value.indexOf('/'),
				expireMonth = value.slice(0,slashPosition),
				expireYear = value.slice(slashPosition + 1), // return everything after '/'
				now = new Date(),
				currentYear = now.getFullYear(),
				expirationDate = new Date().setFullYear(expireYear, expireMonth, 1);
			
			// Check if membership has expired
			if ( expireMonth > 0 && expireMonth <= 12 && expireYear >= currentYear && expirationDate > now ) {
				return true;
			}
			else {
				return false;
			}
		}
		else {
		  return false;
		}
	},
	"Please enter the date in MM/YYYY format"
);


$(document).ready(function() {
	// Make sure when members registration buttons are clicked that the two required fields are filled in
	$("#registration_member_early, #registration_member").click(function() {
		$("#member_number").valid();
//$("#member_expiration").valid();
	})
	
	// Hide error label and remove error class
	$("#registration_nonmember_early, #registration_nonmember").click(function() {
		var member_number_field = $("#member_number");
			//member_expiration_field = $("#member_expiration");
		
		// Reset just the two membership related form fields no the entire form: no validator.resetForm();
		member_number_field.removeClass("error");
		// find the label in the next td over and hide it.
		member_number_field.parent("td").next(".error_column").find("label.error").hide();
		// clear any value in field in case it's invalid
		member_number_field.val("");
	
		//member_expiration_field.removeClass("error");
		//member_expiration_field.parent("td").next(".error_column").find("label.error").hide();
		//member_expiration_field.val("");
	})
	
	$("#thursday_lunch").change(function() {
		// cleans the error message on change
		$(this).valid();	   
	});
	
	//$("#date").mask("99/99/9999");
	//$('#member_expiration').mask("99/9999");
	
});

