
/*
VALIDATION
*/
$(document).ready(function() {
	var tabs = [$('#tabPer'), $('#tabPro'), $('#tabBio')];
	var tabBodies = [$('#personal'), $('#professional'), $('#bio')];
	
	// function to switch tabs
	var tabSwitch = function(tabPrev, tabNext) {
		tabs[tabPrev].removeClass('active');
		tabs[tabNext].addClass('active');
		
		tabBodies[tabNext].show();
		tabBodies[tabPrev].hide();
	};
	
	// prevent a user from submitting the form by hitting the enter key
	$('#expertForm').keypress(function(e) {
		if(!e) e = window.event;
		if(e.keyCode == 13)
			return false;
	});
	
	// sector "other" option functionality
	$('.otherSelect').change(function() {
		var num = $(this).attr('id').substr(3);
		var otherFieldset = $('#otherField' + num);
		
		if($('option:selected', $(this)).val() == 'Other') {
			otherFieldset.show();
		}
		
		else {
			otherFieldset.hide();
		}
	});
	
	var validator = $('#expertForm').validate({
		// cancel some default on the fly validation
		onfocusout: false,
		onkeyup: false,
		
		// error
		errorElement: 'em',
		errorClass: 'formError',
		highlight: function(element, errorClass) {
			$(element.form).find('label[for=' + element.id + ']').addClass(errorClass);
		},
		unhighlight: function(element, errorClass) {
			$(element.form).find('label[for=' + element.id + ']').removeClass(errorClass);
		}
	});
	
	// function to dynamically adjust personal tab settings
	var settings1 = function() {
		validator.settings.rules = {
			prefix: { required: true },
			fname: { required: true },
			lname: { required: true },
			email: { required: true, email: true },
			pnum1: { required: true },
			address1: { required: true },
			city: { required: true },
			referredby: { required: true }
		};
		
		validator.settings.messages = {
			prefix: { required: 'Please select a prefix' },
			fname: { required: 'Please provide your first name' },
			lname: { required: 'Please provide your last name' },
			email: { required: 'Please provide your email', email: 'Please enter a valid email address' },
			pnum1: { required: 'Please provide your phone number' },
			address1: { required: 'Please provide your address' },
			city: { required: 'Please provide your city name' },
			referredby: { required: 'Please provide the name of your referrer' }
		};
	};
	
	// function to dynamically adjust professional tab settings
	var settings2 = function() {
		validator.settings.rules = {
			rate: { required: true, number: true },
			employ1: { required: true },
			pos1: { required: true },
			sec1: { required: true },
			month1: { required: true },
			year1: { required: true },
			date1: { required: true }/*,
			employ2: { required: true },
			pos2: { required: true },
			sec2: { required: true },
			month3: { required: true },
			year3: { required: true },
			month4: { required: true },
			year4: { required: true },
			employ3: { required: true },
			pos3: { required: true },
			sec3: { required: true },
			month5: { required: true },
			year5: { required: true },
			month6: { required: true },
			year6: { required: true }*/
		};
		
		validator.settings.messages = {
			rate: { required: 'Please provide your hourly rate', number: 'Please enter a valid numerical value' },
			employ1: { required: 'Please provide your current employer' },
			pos1: { required: 'Please provide a position/title' },
			sec1: { required: 'Please select a sector' },
			month1: { required: 'Please select a start month' },
			year1: { required: 'Please select a start year' },
			date1: { required: 'Please select the end date' },
			other1: { required: 'Please provide the sector' },
			other2: { required: 'Please provide the sector' },
			other3: { required: 'Please provide the sector' }/*,
			employ2: { required: 'Please provide the employer name' },
			pos2: { required: 'Please provide a position/title' },
			sec2: { required: 'Please select a sector' },
			month3: { required: 'Please select a start month' },
			year3: { required: 'Please select a start year' },
			month4: { required: 'Please select an end month' },
			year4: { required: 'Please select an end year' },
			employ3: { required: 'Please provide the employer name' },
			pos3: { required: 'Please provide a position/title' },
			sec3: { required: 'Please select a sector' },
			month5: { required: 'Please select a start month' },
			year5: { required: 'Please select a start year' },
			month6: { required: 'Please select an end month' },
			year6: { required: 'Please select an end year' }*/
		};
		
		if($('#otherField1').css('display') == 'block')
			$('#other1').rules('add', 'required');
			
		if($('#otherField2').css('display') == 'block')
			$('#other2').rules('add', 'required');
			
		if($('#otherField3').css('display') == 'block')
			$('#other3').rules('add', 'required');
	};
	
	// action handlers
	$('#personal .next').click(function() {
		settings1();
		if(validator.form())
			tabSwitch(0, 1);
		
		return false;
	});
	
	$('#professional .back').click(function() {
		tabSwitch(1, 0);
		
		return false;
	});
	
	$('#professional .next').click(function() {
		settings2();
		if(validator.form())
			tabSwitch(1, 2);
		
		return false;
	});
	
	$('#bio .back').click(function() {
		tabSwitch(2, 1);
		
		return false;
	});
});


