/* Essential Healthcare Jquery Init */

var accordions;

var updateAgeSelects = function(type, selectCounterId, containerId, max) {
		if(max == null) {
			max = 5;
		}
		$(containerId).hide();
		if ($(selectCounterId) != null &&
			$(selectCounterId).val().match(/^[0-9]+$/) &&
			parseInt($(selectCounterId).val()) > 0) {
			$(containerId+' select').hide();
			for(var i=1; i<=max; i++) {
				if (parseInt($(selectCounterId).val()) >= i && $('#'+type+''+i) != null) 
					$('#'+type+''+i).show();
			}
			$(containerId).show();
		}
}

var validateViewPanes = function(viewPanes) {
	var paneWithError = -1;
			
		for(var i=0; i<viewPanes.length;i++) {
			for(p in viewPanes[i]) {
				if(viewPanes[i][p]($('#'+p).val()) == false || viewPanes[i][p]($('#'+p).val()) == null) {
					$('#'+p).addClass('error');
					$('#'+p).parent().addClass("error")
					//alert(p+"failed"); 
					paneWithError = i; 
				}
			}
		}
	return paneWithError;
}

$(document).ready(function(){
	
	/* Accordion */
	
	$("#accordionDemo").accordion();
		accordions = jQuery('#accordionDemo');
		
		jQuery('.next-link').click(function() {
			accordions.accordion("activate", 1);
		});
		jQuery('.next-link2').click(function() {
			accordions.accordion("activate", 2);
		});
	
	/* Expanding/Collapsing Toggle Div */
	
	$(".toggle-box h3").click(function(){
		$(".toggle-box .inner").slideToggle("slow");
		$(this).toggleClass("pressed");
		return false;
		});
	
	/* Facebox */
	
	$('a[rel*=facebox]').facebox();
	$.facebox.settings.opacity = 0.5 ;
	
	/* Form default values */
	defaultValue('#callbackName', '#callbackForm', 'Type your name');
	defaultValue('#callbackPhone', '#callbackForm', 'Your daytime phone number');
	defaultValue('#callbackEmail', '#callbackForm', 'Your email, just in case');	
	
	// size the response and loader to match the form
	$('#callbackResponse').height($('#callbackForm').height()-22);
	$('#callbackLoader').height($('#callbackForm').height()-22);
	
	/*
	
	$('#callbackForm').submit(function() {
		$('#callbackLoader').show();
		$.getJSON('/callback/', { 
			callbackName: $('#callbackName').val(), 
			callbackPhone: $('#callbackPhone').val(), 
			callbackEmail: $('#callbackEmail').val(), 
			callbackPageName: $('#callbackPageName').val(), 
			callbackPageURL: $('#callbackPageURL').val(), 
			ajax: 'true' 
			}, 
			function(response) {
				if (response.success) {
					$('#callbackResponse').html(callback_body_success_inline);
					$('#callbackResponse').show();
					pageTracker._trackPageview("/callback/successfully-sent/");
				} 
				else {
					$('#callbackEmail').focus().blur();
					$('#callbackPhone').focus().blur();
					$('#callbackName').focus().blur();
					//if (response.errors.PHONE) $('#callbackPhone').effect('highlight', { color: '#c33' }, 1000);
					//if (response.errors.NAME)  $('#callbackName').effect('highlight', { color: '#c33' }, 1000);
					$('#callbackPhone, #callbackName').removeClass('error');
					if (response.errors.PHONE) $('#callbackPhone').addClass('error');
					if (response.errors.NAME) $('#callbackName').addClass('error');
					if (response.errors.EMAIL) $('#callbackEmail').addClass('error');
					pageTracker._trackPageview("/callback/not-enough-information/");
				}
				$('#callbackLoader').hide();
			});
		
		return false;
		
	});
	*/
	
	$('#callbackForm').submit(function() {
		
		var callbackStatus = true;
		$('#callbackForm *').removeClass('error');
		$('#callbackEmail').focus().blur();
		$('#callbackPhone').focus().blur();
		$('#callbackName').focus().blur();
		
		if($('#callbackPhone').val() == '' || !$('#callbackPhone').val().match(/^[0-9 -]+$/)) {
			$('#callbackPhone').addClass('error');
			callbackStatus = false;
		}
		
		if($('#callbackName').val() == '') {
			$('#callbackName').addClass('error');
			callbackStatus = false;
		}
		
		if($('#callbackEmail').val() == '' || !$('#callbackEmail').val().match(/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+\.([a-zA-Z0-9\._-]+)+$/)) {
			$('#callbackEmail').addClass('error');
			callbackStatus = false;
		}
		
		return callbackStatus;
	});
	
	/*
	 * Business Contact form Validation
	 *
	 */
	 
	/* display/hide age of employees */
	$('#employees').change(updateEmployeeAgeSelects);
	
	$(function() {
		if ($('#contactForm.business').html()) {
			updateEmployeeAgeSelects();
		}
	});
	
	function updateEmployeeAgeSelects() {
		updateAgeSelects('employee', '#employees', '#ages-of-employees');
	}
	
	$('#contactForm.business').submit(function() {
		
		$('#contactForm.business *').removeClass('error');
		
		viewPanes = [
			{
			name: function(val) { return val != ''; },
			jobtitle: function(val) { return val != ''; }, 
			email: function(val) { return val != '' && val.match(/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+\.([a-zA-Z0-9\._-]+)+$/); }
			},
			{
			company: function(val) { return val != ''; },
			postcode: function(val) { return val != ''; }, 
			phone: function(val) { return val != '' && val.match(/^[0-9 -]+$/); }
			},
			{
			employees: function(val) { return val != ''; }
			}
			];
		
		var paneWithError = validateViewPanes(viewPanes);
		
		/* view pane 3 */
		$('#ages-of-employees select:visible').each(function(i) {
			if ($($('#ages-of-employees select:visible')[i]).val() == '') {
				$($('#ages-of-employees select:visible')[i]).addClass('error');
				$($('#ages-of-employees select:visible')[i]).parent().parent().addClass('error');
				paneWithError = paneWithError > -1 ? paneWithError : 2;
			}
		});
		
		if (paneWithError > -1) {
			accordions.accordion("activate", paneWithError);
			return false;
		}
	});
	
	/*
	 * family/personal Contact form Validation
	 *
	 */
	
	$(function() {
		if ($('#contactForm.personal').html()) {
			updateChildrenAgeSelects();
			updatePartnerFields();
		}
	});
	
	$('#children').change(updateChildrenAgeSelects);
	
	function updateChildrenAgeSelects() {
		updateAgeSelects('child', '#children', '#ages-of-children',6);
	}
	
	$('#partner').change(updatePartnerFields);
	
	function updatePartnerFields() {
		if ($('#partner').val() == 'yes') {
			$('.partner').show();
		} else {
			$('.partner').hide();
		}
	}
	
	$('#contactForm.personal').submit(function() {
		
		$('#contactForm.personal *').removeClass('error');
		
		viewPanes = [
			{
			gender: function(val) { return val.match(/^(male|female)$/) ? true : false; },
			smoke: function(val) { return val.match(/^(yes|no)$/i) ? true : false; },
			partner: function(val) { return val.match(/^(yes|no)$/i) ? true : false; },
			partnerSmoke: function(val) { if($('#partner').val() == 'yes') return val.match(/^(yes|no)$/i) ? true : false; return true; },
			children: function(val) { return val.match(/^[0-9]+$/i) ? true : false; }
			},
			{
			yourAge: function(val) { return val.match(/^[0-9]+$/i) ? true : false; },
			partnersAge: function(val) { if($('#partner').val() == 'yes') return val.match(/^[0-9]+$/i) ? true : false; return true;  },
			ailments: function(val) { return val != ''; }
			},
			{
			name: function(val) { return val != ''; },
			email: function(val) { return val != '' && val.match(/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+\.([a-zA-Z0-9\._-]+)+$/); },
			phone: function(val) { return val != '' && val.match(/^[0-9 -]+$/); },
			altphone: function(val) { if(val != '') return val.match(/^[0-9 -]+$/); return true; },
			address: function(val) { return val != ''; },
			postcode: function(val) { return val != ''; }
			}
			];
		
		var paneWithError = validateViewPanes(viewPanes);
		
		$('#ages-of-children select:visible').each(function(i) {
			if ($($('#ages-of-children select:visible')[i]).val() == '') {
				$($('#ages-of-children select:visible')[i]).addClass('error');
				$($('#ages-of-children select:visible')[i]).parent().parent().addClass('error');
				paneWithError = paneWithError > -1 ? paneWithError : 1;
			}
		});
		
		if (paneWithError > -1) {
			accordions.accordion("activate", paneWithError);
			return false;
		}
	});
	
	$('#persons').change(updatePersonAgeSelects);
	
	function updatePersonAgeSelects() {
		updateAgeSelects('person', '#persons', '#ages-of-persons');
	}
	

	/*
	 * international Contact form Validation
	 *
	 */
	
	
	$('#persons').change(updatePersonAgeSelects);
	
	function updatePersonAgeSelects() {
		updateAgeSelects('person', '#persons', '#ages-of-persons');
	}
	
	$(function() {
		if ($('#contactForm.international').html()) {
			updatePersonAgeSelects();
		}
	});
	
	$('#persons').change(updatePersonAgeSelects);
	
	$('#contactForm.international').submit(function() {
		
		$('#contactForm.international *').removeClass('error');
		
		viewPanes = [
			{
			name: function(val) { return val != ''; },
			email: function(val) { return val != '' && val.match(/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+\.([a-zA-Z0-9\._-]+)+$/); },
			phone: function(val) { return val != '' && val.match(/^[0-9 -]+$/); },
			residence: function(val) { return val != ''; }
			},
			{
			location: function(val) { return val != ''; },
			start: function(val) { return val != '' && val.match(/^[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]$/); },
			length: function(val) { return val != ''; },
			medical: function(val) { return val != ''; }
			},
			{
			persons: function(val) { return val != ''; }
			}
			];
		
		var paneWithError = validateViewPanes(viewPanes);
		
		$('#ages-of-persons select:visible').each(function(i) {
			if ($($('#ages-of-persons select:visible')[i]).val() == '') {
				$($('#ages-of-persons select:visible')[i]).addClass('error');
				$($('#ages-of-persons select:visible')[i]).parent().parent().addClass('error');
				paneWithError = paneWithError > -1 ? paneWithError : 1;
			}
		});
		
		if (paneWithError > -1) {
			accordions.accordion("activate", paneWithError);
			return false;
		}
	});
	
	
	
});


/**
 * Handle input field defaults
 */
function defaultValue(fieldAccessor, formAccessor, defaultVal) {
    $(fieldAccessor).focus(function() {
        if ($(this).val()==defaultVal) $(this).val('');
    });
    $(fieldAccessor).blur(function() {
        if ($(this).val()=='') $(this).val(defaultVal);
    });
    $(formAccessor).submit(function() {
        if ($(fieldAccessor).val()==defaultVal) $(fieldAccessor).val('');
    });
}
