$(function on_dom_ready (){

	settings = get_settings();
	// global settings object containing base_url

	//CALLED BY EXISTENCE
	// functions likely to occur on nearly every page - check for existence

	function check_for_existence (){
		$.each(arguments, function() {
			for(obj_key_names in this){

				switch (obj_key_names) {

					case 'hover_selector':
						if( $(this.hover_selector).length > 0) {
							mouse_addClass_linkExpand(this);
						}
						break;

					case 'carousel_selector':
						if( $(this.carousel_selector).length > 0) {
							carousel(this);
						}
						break;

					case 'share_selector':
						if( $(this.share_selector).length > 0) {
							$(this.share_selector).show();
						}
						break;

					case 'get_in_touch_selector':
						if( $(this.get_in_touch_selector).length > 0) {
							enquiry_form();
						}
						break;

					case 'contact_us_selector':
						if( $(this.contact_us_selector).length > 0) {
							contact_us_form();
						}
						break;

					case 'lightbox_link_selector':
						if( $(this.lightbox_link_selector).length > 0) {
							employers_callback_form();
							lightbox(this.lightbox_link_selector);
						}
						break;

				}
			}
		});
	}


	check_for_existence (
		{hover_selector: 'ul.basic li', hover_class: 'hovered', link_expand: true},
		{hover_selector: '.bulletin', hover_class: 'hovered', link_expand: true},
		{hover_selector: '.promoBlock', hover_class: 'hovered', link_expand: true},
		{carousel_selector : '.scrollable', nav_items : '.nav', items_per_view : 1},
		{share_selector: 'div.share-this' },
		{lightbox_link_selector: '#request-callback a'},
		{get_in_touch_selector: '#get-in-touch' },
		{contact_us_selector: 'form#contact-us' }
    );

	matchHeight();
	hitAreas();


    //CALLED BY PAGE
    //switch applies functions that require specific arguments to individual pages

    var page = $('body').attr('id');

    switch (page) {

        case 'home':
            options_tabs('ul.options li','.chooser > div');
            mouse_addClass_linkExpand ( 
                 {hover_selector: '#newsletter .right', hover_class: 'hovered', link_expand: true},
                 {hover_selector: '.block-couple div.right', hover_class: 'hovered', link_expand: true}
            );
        break;

        case 'employers-landing':
            mouse_addClass_linkExpand ( 
                 {hover_selector: '.mid-col .block-couple div.block', hover_class: 'hovered', link_expand: true}
				 );
        break;

        case 'newsletter':
            mouse_addClass_linkExpand ( 
                 {hover_selector: '.orange a', hover_class: 'hovered', link_expand: true}
				 );
        break;
    }    
	 
});

// CORE FUNCTION (called on dom_ready) ///

function get_settings() {

    function get_base_url(){
        var doc_location = document.location.href;
        var url_strip = new RegExp("http:\/\/.*\/");
        var base_url = url_strip.exec(doc_location);
        return base_url;
    }

    var settings = { 
        base_url : get_base_url()
    };

    return settings;

}



// COMMON FUNCTIONS  (called on_existence) ///
function carousel () {
	$.each(arguments, function () {
		var carousel_selector = $(this.carousel_selector);
		nav_items = $(this.nav_items);
		items_per_view = this.items_per_view;

		var autoplay = ($(carousel_selector).find('ul.items li').size() > 1)?true:false;

		var api = carousel_selector.scrollable({
			onBeforeSeek: function() { 
				this.getItems().fadeTo(60, 0);  
			}, 
			onSeek: function(target) {
				this.getItems().fadeTo(500, 1);
			},
			size: items_per_view
		})
		.navigator(nav_items)
		.circular()
		.autoscroll({
			interval: 6000,
			api: true,
			autoplay: autoplay,
			steps: 1,
			autopause: false
		});

		if(autoplay == true) {
			$('button#play').hide();
		} else {
			$('button#play').hide();
			$('button#pause').hide();
		}

		$('button#play').click(function(){
			api.play();
			$(this).hide();
			$('button#pause').show();
		});

		$('button#pause').click(function(){
			api.stop();
			$(this).hide();
			$('button#play').show();
		});

   });
}


function matchHeight() {
	if($('.matchHeight').size() > 0) {
		var maxHeight = '0';
		$('.matchHeight').each(function(){
			maxHeight = ($(this).height() > maxHeight) ? $(this).height() : maxHeight;
		});
		$('.matchHeight').height(maxHeight);
	}
}


function hitAreas() {
	$('.hitArea').hover(function(){
		$(this).css('cursor','pointer');
	},function(){});
	$('.hitArea').click(function(){
		var hitlink = '';
		hitlink = $(this).find('a.hitLink:first').attr('href');
		if(hitlink){
			window.location = hitlink;
		}
		else{
			window.location = $(this).find('a:first').attr('href');
		}
	});
}


function mouse_addClass_linkExpand () {

  $.each(arguments, function() {
    var hover_class = this.hover_class;
    var link_expand = this.link_expand;

		 $(this.hover_selector).each(function(){
			 var selected = $(this);
			 if ( selected.find('a').length == 1) {
				 selected.hover(function() {
					$(this).addClass(hover_class);
				 },
				 function() {
					$(this).removeClass(hover_class);
				 });
			 }

			 if ( link_expand == true && selected.find('a').length == 1) {
				selected.click(function(){
				  var href = $(this).find('a').attr('href');
				  window.location.href = href;
				});
			 }

		 });
  });
}

function lightbox (lightbox_link_selector) {
	$(lightbox_link_selector).fancybox({
		hideOnContentClick: false,
		zoomSpeedIn	: 0,
		zoomSpeedOut: 0,
		easingIn	: 'linear',
		easingOut: 'linear',
		imageScale: true,
		centerOnScroll: false,
		overlayShow: true,
		overlayOpacity: 0.9,
		overlayColor: '#000',
		frameWidth: 500,
		frameHeight: 1300,
		callbackOnStart: function() { 
			$('#fancy_ajax').hide();
		},
		callbackOnShow: function() { 
			$('html, body').css('height','100%');
			$('.mid-col #employers_callback').remove();

			$('.html-only, #employers_contact_method, #employers_callback_info, #employers_callback_submit, #employers_callback_result_details, #employers_callback_success, #employers_callback_regional_director').hide();
			var regionType = '-1';
			$("#employers_callback input:checkbox:checked").attr("checked", "");
			regionType = $('select#region').val();

			$('#employers_contact_method').slideDown();

			if(regionType != '-1'){
				var ajax_region_contact = settings.base_url + 'enquiries/get_regional_director/' + $('select#employers_callback_region').val();
				$('#employers_callback_regional_director').load(ajax_region_contact);
			}

			$('select#employers_callback_region').change(function(){
				var ajax_region_contact = settings.base_url + 'enquiries/get_regional_director/' + $('select#employers_callback_region').val();
				$('#employers_callback_regional_director').load(ajax_region_contact);
				$(this).blur();
				return false;
			});

			$('input#employers_callback_call').click(function(){
				if($(this).val() == 'callback' && $(this).attr('checked') === true) {
					$('#employers_callback_info, #employers_callback_submit').slideDown();
				} else {
					$('#employers_callback_info, #employers_callback_submit').slideUp();
				}
				$(this).blur();
			});

			$('input#employers_callback_show').click(function(){
				//alert($(this).attr('checked'));
				if($(this).val() == 'show' && $(this).attr('checked') === true) {
					$('#employers_callback_result_details, #employers_callback_regional_director').slideDown();
				} else {
					$('#employers_callback_regional_director').slideUp();
				}
				$(this).blur();
			});

			$('#employers_callback_submit_button').click(function(e){

				e.preventDefault();
				var goodtogo = true;
				var validation_callback_fields = ["employers_callback_region","employers_callback_aoi","employers_callback_jobrole","employers_callback_csize","employers_callback_name","employers_callback_email","employers_callback_tel","employers_callback_tx","employers_callback_tandc"];

				var checkCallbackFields = false;
				if($('#audience').val() != '15' && $('#call').val() === 'callback') {
					checkCallbackFields = true;
				} else {
					checkCallbackFields = false;
				}


				$('#callback_form input, #callback_form select, #callback_form textarea').each(function(){
					if(checkCallbackFields === true) {
						if(
							$.inArray($(this).attr('id'),validation_callback_fields) != -1 && 
							(
								(
									$(this).val() == '-1' || $(this).val() == '' || $(this).val() == undefined
								) || (
									$(this).attr('type') == 'checkbox' && $(this).attr('checked') == false
								)
							)
						){
							$(this).closest('.row').children('span.error').slideDown();
							goodtogo = false;
						} else {
							$(this).closest('.row').children('span.error').slideUp();
						}
					}
				});


				if(goodtogo === false) {
					$(this).blur();
					return false;
				}


				$.ajax({
					type: "POST",
					url: settings.base_url + 'enquiries/submit_enquiry/true/true',
					data: $("#callback_form").serialize(),
					dataType: "json",
					//async: false,
					success: function(msg){
						if(msg.mode === 'enquiry') {
							if(msg.result === true) {
								$('#employers_callback_success').html('<p>Thank you for your enquiry - we will get back to you as soon as possible.</p>');
								$('#employers_callback_enquiry_details').slideUp();
								$('#employers_callback_result_details, #employers_callback_success, #employers_callback_regional_director').slideDown();
							} else {
								$('#employers_callback_success').html('<p>Sorry, there was a problem sending your enquiry - please try again in a moment.</p>');
								$('#employers_callback_success').slideDown();
							}
							$(this).blur();
							return false;
						}
					}
				});

				$(this).blur();
				return false;
			});

			$('#employers_callback_details a#employers_callback_clear').click(function(){
				clearForm('#employers_callback_details input:text, #employers_callback_details textarea, #employers_callback_details select');
				$("#employers_callback_details input:checkbox:checked").attr("checked", "");
				$('#employers_callback_details span.error').slideUp();
				$('#employers_callback_details .html-only, #employers_callback_contact_method, #employers_callback_info, #employers_callback_submit, #employers_callback_result_details, #employers_callback_success #employers_callback_regional_director').slideUp();

				$(this).blur();
				return false;
			});
			
			var close_btn = $('<div id="fancy_close_btn_btm" class="fancy_close_btn"></div>');
			close_btn.click(function(){$('#fancy_close').click();});
			$('#callback_form').append(close_btn);

		}, 
		callbackOnClose: function() {
			$('html, body').css('height','auto');
			employers_callback_form();
		}
	});
}

// ONE OFF FUNCTIONS (called on_page_ID) ///

function employers_callback_form () {

	//Prepare the form

	var ajax_info = settings.base_url + 'enquiries/employers_callback_form';

	$('<div id="employers_callback"></div>').load(ajax_info, function() {

		$(this).appendTo('.mid-col').hide();
		$("#employers_callback input:checkbox:checked").attr("checked", "");
		$('#request-callback a').attr('href','#employers_callback');
		$('.html-only, #employers_contact_method, #employers_callback_info, #employers_callback_submit, #employers_callback_result_details, #employers_callback_success, #employers_callback_regional_director').hide();

	});

}

function enquiry_form () {

	//Prepare the form

	$('.html-only, #contact-method, #callback-info, #learner-info, #contact-submit, #result-details, #success, #providers, #qualifications, #regional-director').hide();
	var audienceType = '-1';
	var regionType = '-1';
	$("#get-in-touch input:checkbox:checked").attr("checked", "");
	audienceType = $('select#audience').val();
	regionType = $('select#region').val();

	if(audienceType === '13' || audienceType === '14') {
		//Employers and Industry Learners
		$('#learner-info, #callback-info, #result-details, #providers, #qualifications, #success').slideUp();
		$('#contact-method').slideDown();
	} else if(audienceType === '-1' || audienceType === ''){
		//Not set
		$('#contact-method, #learner-info, #callback-info, #contact-submit, #result-details, #providers, #qualifications, #success, #regional-director').slideUp();
		$('#contact-method').hide();
	} else {
		//Independent Learners
		$('#contact-method, #callback-info, #result-details, #providers, #qualifications, #success, #regional-director').slideUp();
		$('#learner-info, #contact-submit').slideDown();
		$('#contact-method').hide();
	}

	if(regionType != '-1'){
		var ajax_region_contact = settings.base_url + 'enquiries/get_regional_director/' + $('select#region').val();
		$('#regional-director').load(ajax_region_contact);
	}


	//Form events & actions

	$('select#audience').change(function(){
		audienceType = $(this).val();

		$('select#audience option:selected').attr('selected','');
		$('select#audience option[value="'+audienceType+'"]').attr('selected','selected');

		$('#success').hide();
		if(audienceType === '13' || audienceType === '14') {
			//Employers and Industry Learners
			$('#learner-info, #callback-info, #result-details, #providers, #qualifications, #success').slideUp();
			$('#contact-method').slideDown();
		} else if(audienceType === '-1'){
			//Not set
			$('#contact-method, #learner-info, #callback-info, #contact-submit, #result-details, #providers, #qualifications, #success, #regional-director').slideUp();
			$('#contact-method').hide();
		} else {
			//Independent learner
			$('#contact-method, #callback-info, #result-details, #providers, #qualifications, #success, #regional-director').slideUp();
			$('#learner-info, #contact-submit').slideDown();
			$('#contact-method').hide();
		}
		$(this).blur();
		return false;
	});

	$('select#region').change(function(){
		var ajax_region_contact = settings.base_url + 'enquiries/get_regional_director/' + $('select#region').val();
		$('#regional-director').load(ajax_region_contact);
		$(this).blur();
		return false;
	});

	$('input#call').click(function(){
		//alert($(this).attr('checked'));
		if($(this).val() == 'callback' && $(this).attr('checked') === true) {
			$('#callback-info, #contact-submit').slideDown();
		} else {
			$('#callback-info, #contact-submit').slideUp();
		}
		$(this).blur();
	});

	$('input#show').click(function(){
		//alert($(this).attr('checked'));
		if($(this).val() == 'show' && $(this).attr('checked') === true) {
			$('#result-details, #regional-director').slideDown();
		} else {
			$('#regional-director').slideUp();
		}
		$(this).blur();
	});

	$('#get-in-touch-submit').click(function(e){
	//	$('#success').appendTo('form');
	
		e.preventDefault();
	
		var goodtogo = true;
		var validation_learner_fields = ["learner_type","learning_type","study_type","sector"];
		var validation_callback_fields = ["region","aoi","jobrole","csize","name","email","tel","tx","tandc"];

		var checkLearnerFields = false;
		if($('#audience').val() == '15') {
			checkLearnerFields = true;
		} else {
			checkLearnerFields = false;
		}

		var checkCallbackFields = false;
		if($('#audience').val() != '15' && $('#call').val() === 'callback') {
			checkCallbackFields = true;
		} else {
			checkCallbackFields = false;
		}


		$('#get-in-touch input, #get-in-touch select, #get-in-touch textarea').each(function(){
			if(checkLearnerFields === true) {
				if(
					$.inArray($(this).attr('id'),validation_learner_fields) != -1 && 
					(
						(
							$(this).val() == '-1' || $(this).val() == '' || $(this).val() == undefined
						) || (
							$(this).attr('type') == 'checkbox' && $(this).attr('checked') == false
						)
					)
				){
					$(this).closest('.row').children('span.error').slideDown();
					goodtogo = false;
				} else {
					$(this).closest('.row').children('span.error').slideUp();
				}
			}

			if(checkCallbackFields === true) {
				if(
					$.inArray($(this).attr('id'),validation_callback_fields) != -1 && 
					(
						(
							$(this).val() == '-1' || $(this).val() == '' || $(this).val() == undefined
						) || (
							$(this).attr('type') == 'checkbox' && $(this).attr('checked') == false
						)
					)
				){
					$(this).closest('.row').children('span.error').slideDown();
					goodtogo = false;
				} else {
					$(this).closest('.row').children('span.error').slideUp();
				}
			}
		});


		if(goodtogo === false) {
			$(this).blur();
			return false;
		}


		var result = $.ajax({
			type: "POST",
			url: settings.base_url + 'enquiries/submit_enquiry/true',
			data: $("#get-in-touch").serialize(),
			dataType: "json",
			success: function(msg){
				if(msg.mode === 'providers') {
					if(msg.result.length > 0) {
						response = '<p>Thank you for your interest.</p>';
						response += '<p>The following Providers offer training matching your search criteria:</p>';
						response += '<ul class="content-list">';
						for(i=0; i < msg.result.length; i++) {
							response += '<li class="hitArea">';
							response += '<h3><a href="/' + msg.result[i].URL + '" class="hitLink" title="View the NSAFS provider profile for ' + msg.result[i].PROVIDERS_name + '">' + msg.result[i].PROVIDERS_name + '</a></h3>';
							response += '<p>Providers website: <a href="' + msg.result[i].PROVIDERS_url + '" title="Visit the website of ' + msg.result[i].PROVIDERS_name + '">'+msg.result[i].PROVIDERS_url+'</a></p>';
							response += '</li>';
						}
						response += '</ul>';
						$('#providers').html(response);
						$('#result-details, #contact-details, #providers').slideDown();
					} else {
						response = '<p>Sorry, currently we do not have any Providers in your area that offer training matching your search criteria. Please talk to your local college or contact us for further advice.</p>';
						$('#providers').html(response);
						$('#result-details, #contact-details, #providers').slideDown();
					}
				} else if(msg.mode === 'qualifications') {
					if(msg.result.length > 0) {
						response = '<p>Thank you for your interest.</p>';
						response += '<p>The following qualifications match your search criteria:</p>';
						response += '<p>Please note: Courses are subject to change.</p>';						
						response += '<ul class="content-list">';
						for(i=0; i < msg.result.length; i++) {
							response += '<li class="hitArea">';
							response += '<h3><a href="/' + msg.result[i].QUALIFICATIONS_url + '" class="hitLink" title="View the NSAFS qualification profile for ' + msg.result[i].QUALIFICATIONS_dropdowntitle + '">' + msg.result[i].QUALIFICATIONS_dropdowntitle + '</a></h3>';
							if(msg.result[i].providers.length > 0) {
								response += '<ul class="plain">';
								for(p=0; p < msg.result[i].providers.length; p++) {
									response += '<li><a href="/' + msg.result[i].providers[p].PROVIDERS_profile + '" title="View the NSAFS provider profile for ' + msg.result[i].providers[p].PROVIDERS_name + '">' + msg.result[i].providers[p].PROVIDERS_name + '</a></li>';
								}
								response += '</ul>';
							}
							response += '</li>';
						}
						response += '</ul>';
						$('#qualifications').html(response);
						$('#result-details, #contact-details, #qualifications').slideDown();
					} else {
						response = '<p>Sorry, currently we do not have any qualifications matching your search criteria. Please talk to your local college or contact us for further advice.</p>';
						$('#qualifications').html(response);
						$('#result-details, #contact-details, #qualifications').slideDown();
					}
				} else {
					if(msg.result === true) {
						$('#success').html('<p>Thank you for your enquiry - we will get back to you as soon as possible.</p>');
						$('#enquiry-details').slideUp();
						$('#result-details, #success, #regional-director').slideDown();
					} else {
						$('#success').html('<p>Sorry, there was a problem sending your enquiry - please try again in a moment.</p>');
						$('#success').slideDown();
					}
				}
			}
		}).responseText;

		$(this).blur();
		return false;
	});

	$('a#clear').click(function(){
		clearForm('input:text, textarea, select');
		$("#get-in-touch input:checkbox:checked").attr("checked", "");
		$('form span.error').slideUp();
		$('.html-only, #contact-method, #callback-info, #learner-info, #contact-submit, #result-details, #success, #providers, #qualifications, #regional-director').slideUp();

		$(this).blur();
		return false;
	}); 

}

function contact_us_form(){
	$('.region').hide();
	$('#contact-us-region').removeClass('hidden').show();

	$('select#region').change(function(){
		$('.region:visible').fadeOut('fast');
		$('#region'+$('select#region').val()).children('h2').hide();
		$('#region'+$('select#region').val()).fadeIn();
		$(this).blur();
		return false;
	});
}

function options_tabs (options_list_items,options_divs){

    options_list_items = $(options_list_items);
    options_divs = $(options_divs);

    //hide content other than first div
    options_divs.each(function(){
        if ( options_divs.index(this) > 0 ) {
            $(this).hide();
        }
    });

    // on tab click
    options_list_items.each(function(){
        $(this).click(function(){
            //highlight the corresponding tab
            var parent = $(this).parent('ul');
            var num = options_list_items.index(this) + 1;
            parent.attr('class','options');
            parent.addClass('selected' + num);

            //show the corresponding content
            options_divs.hide();
            options_divs.eq(num - 1).show();

        });
    });

}

function clearForm(selector) {
	var selector = $(selector);
	return selector.each(function() {
		var type = this.type;
		var tag = this.tagName.toLowerCase();
		if (tag == 'form') {
			return $(':input',this).clearForm();
		}
		if (type == 'text' || type == 'password' || tag == 'textarea') {
			this.value = '';
		} else if (type == 'checkbox' || type == 'radio') {
			this.checked = false;
		} else if (tag == 'select') {
			this.selectedIndex = 0;
		}
	});
}


// jQuery extend

$.fn.idle = function(time) { 
	var o = $(this); 
	o.queue(function() { 
		setTimeout(function() { 
			o.dequeue(); 
		}, 
		time);
	});
};
