$(function () {
	//--Error messages used in form validation-------------------------------------------------------------------------------
		var validationErrorMessage = {};
			validationErrorMessage['email'] = 'Invalid email address';	
			validationErrorMessage['phone'] = 'XXX-XXX-XXXX';
			validationErrorMessage['phone2'] = 'XXX-XXX-XXXX';
			validationErrorMessage['postal_code'] = 'Invalid postal code';
	
	
	
	//--IE select width fix--------------------------------------------------------------------------------------------------
		function ieSelectWidthFix() {
			if (jQuery.browser.msie) {
				$('select').each(function () {
					$(this).data("originalWidth", $(this).css('width'));
				});
				
				$('select').mouseenter(function () {
					$(this).css('width', "auto");
					$(this).data("resizedWidth", $(this).attr('offsetWidth'));
					
					if (parseInt($(this).data("resizedWidth")) < parseInt($(this).data("originalWidth").replace(/px/, ""))) {
						$(this).css('width', $(this).data("originalWidth"));		
					} else {
						$(this).addClass('expanded');	
					}
				});
				
				$('select').change(function () {
					$(this).css('width', $(this).data("originalWidth"));
					$(this).removeClass('expanded');
				});
				
				$(':input').focus(function () {
					if ($(this).attr('class') != 'expanded') {
						$('.expanded').each(function () {
							$(this).css('width', $(this).data("originalWidth"));
							$(this).removeClass('expanded');
						});
					}
				});
			}
		}
	
	
	
	//--Validation checks--------------------------------------------------------------------------------------------------------  
		function isRequired(formField) {
			switch ($(formField).attr('type')) {
				case 'text':
				case 'textarea':
				case 'select-one':
					if ($(formField).val()) {
						return true;
					}
				return false;
			}
		}
		
		function isPattern(formField, pattern) {
			var regExp = new RegExp("^" + pattern + "$");
			
			var correct = regExp.test($(formField).val());
	
			return correct;
		}
		
		function isValidEmail(formField) { return isPattern(formField, "[a-zA-Z0-9._+%-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$"); }
		
		function isValidPhone(formField) { return isPattern(formField, "^[0-9]{3}-[0-9]{3}-[0-9]{4}$"); }
		
		function isValidZip(formField) { return isPattern(formField, "^[0-9]{5}(-[0-9]{4})?$"); }
	//-----------------------------------------------------------------------------------------------------END Validation checks



	//--Form validation---------------------------------------------------------------------------------------------------------
		function removeError() {
			if (!$(this).data('errorMessage')) return;
			
			$(this).removeClass('errorMessage');	
			$(this).next().remove();
			$(this).removeData('errorMessage');
		}
		
		function validate (step) {
			var validForm = true;
			
			if (step == "stepOne") {
				var formFields = $('#stepOne :input');
			} else {
				var formFields = $(':input');	
			}
			
			for (var i = 0; i < formFields.length; i++) {
				var validation = $(formFields[i]).attr('validation');
				var fieldID = $(formFields[i]).attr('id');
				var OK, requiredFirst = true;
				
				if (!validation) {
					switch (fieldID) {
						case "phone":
						case "phone2":
						case "email":
							if ($(formFields[i]).val() == "") {
								continue;
							}
						break;
						
						default:
							continue;
						break;
					}
				}
				
				switch (fieldID) {
					case "postal_code":
						OK = isRequired(formFields[i]);
						
						if (OK) { 
							OK = isValidZip(formFields[i]);	
							requiredFirst = false;					
						}
						break;
						
					case "email":
						OK = isRequired(formFields[i]);
						if (OK) { 
							OK = isValidEmail(formFields[i]);
							requiredFirst = false;
						}
						break;
						
					case "phone":
					case "phone2":
						OK = isRequired(formFields[i]);
						if (OK) { 
							OK = isValidPhone(formFields[i]);
							requiredFirst = false;
						}
						break;
						
					default:
						OK = isRequired(formFields[i]);
						break;
				};
				
				if (!OK) {
					var errorMessage = "Required"; 
					
					if (!requiredFirst) {
						errorMessage =  validationErrorMessage[fieldID] || "";
					}
					
					writeError(formFields[i], errorMessage);
					
					validForm = false;
				}
				
			}
			
			return validForm;
		}
		
		function writeError(formField, message) {
			var fieldID = $(formField).attr('id');
			var fieldWidth = $(formField).attr('offsetWidth');
			var fieldHeight = $(formField).attr('offsetHeight');
			
			$(formField).addClass('errorMessage');
							
			$(formField).focus(removeError);
			
			if ($(formField).data('errorMessage')) return;
					
			$(formField).parent().append('<label style="width:'+fieldWidth+'px; height: '+fieldHeight+'px;" class="errorMessage" for="'+fieldID+'" htmlFor="'+fieldID+'">'+message+'</label>');
			
			$(formField).data('errorMessage', message);
		}
	//-------------------------------------------------------------------------------------------------------END Form validation
	
	
	
	
	
	
	//--Form setup-------------------------------------------------------------------------------------------------------------		
		$('#program_code2, #program_code3').attr({disabled: true});
		
		$('#program_code').change(function () {
			if ($(this).val() == "") {
				$('#program_code2, #program_code3').attr('disabled', 'disabled');
				$('#program_code2, #program_code3').val('');
				
				$('#program_code2 option:first').text('--Option 2--');
				$('#program_code2 option:first').text('--Option 3--');
			} else {
				$.getJSON('/global/cdm-server.php?path=http://ulm.datamark.com/cdm/campuses/' + $('#campus_code').val() + '/programs?order_asc=ProgramName', function (json) {
					$('#program_code2').find('option').remove().end();
					$('#program_code2').append('<option value="">--Select One--</option>');
					for (var i=0; i<json.body.length; i++) {
						if ( (json.body[i].CategoryName == $('#desired_degree').data('programCategory')) && ($('#program_code').val() != json.body[i].ProgramCode) ) {
							$('#program_code2').append('<option value="'+json.body[i].ProgramCode+'">'+json.body[i].Name+'</option>');	
						}
					}
					$('#program_code2').removeAttr('disabled');
				});							   
			}
		});
		
		$('#program_code2').change(function () {
			if ($(this).val() == "") {
				$('#program_code3').attr('disabled', 'disabled');
				$('#program_code3').val('');
			} else {
				$.getJSON('/global/cdm-server.php?path=http://ulm.datamark.com/cdm/campuses/' + $('#campus_code').val() + '/programs?order_asc=ProgramName', function (json) {
					$('#program_code3').find('option').remove().end();
					$('#program_code3').append('<option value="">--Select One--</option>');
					for (var i=0; i<json.body.length; i++) {
						if ( (json.body[i].CategoryName == $('#desired_degree').data('programCategory')) && ($('#program_code').val() != json.body[i].ProgramCode) && ($('#program_code2').val() != json.body[i].ProgramCode) ) {
							$('#program_code3').append('<option value="'+json.body[i].ProgramCode+'">'+json.body[i].Name+'</option>');	
						}
					}
					$('#program_code3').removeAttr('disabled');
				});							   
			}
		});
		
		$('#btn_Submit').click(function () {
			var validForm = validate();
			
			if ( validForm ) {
				$('#requestForm').submit();
			}	
			
			return false;
		});
		
		ieSelectWidthFix();	
	//-------------------------------------------------------------------------------------------------------------END Form setup
});