// test for css media query support
if (! Modernizr.mq('only screen and (min-width: 0px)')) {
	// load css fallback
	// browsers hitting this are: IE6, IE7, IE8, FF 2.0.0.20
	document.writeln('<link rel="stylesheet" href="/css/mq-fallback.css" type="text/css" media="screen" />');
}

$(function() {
	enhance();
});

var enhance = function() {
	var o = {};

	o.addLabelToInput = function() {
		$('input[placeholder]').each(function() {
			$(this).before('<label for="' + $(this).attr('id') + '">' + $(this).attr('placeholder') + '</label>');
		});
	};

	o.bindLoginBehaviour = function() {
		var formAction = $('#aspnetForm').attr('action');
		// bind tab switching to nav links
		$('nav a').click(function(e) {
			e.preventDefault();
			var hash = $(this).attr('href');

			window.location.hash = hash;

			$('#aspnetForm').attr('action', formAction + hash);

			$('.on').removeClass('on');
			$(hash).removeClass('off');

			$(this).parent().addClass('on');
			$('article:not(' + hash + ')').addClass('off');
		});

		o.addTabbingHandlers();
		o.addOverlayHandlers();
	};

	o.addTabbingHandlers = function() {
		var invokeTabbing = function(e) {
			e.preventDefault();
			var hash = $(this).attr('href');
			$('nav a[href="' + hash + '"]').trigger('click');
		},
			invokeHashTabbing = function(allow) {
				var allow = allow || true;

				if (allow && window.location.hash != '') {
					var hash = $('nav a[href="' + window.location.hash + '"]');
					if (hash.length) hash.trigger('click');
				}
			},
			bindTabInvokers = function() {
				if ($('nav:visible').length) {
					$('article p a').bind('click', invokeTabbing);
					invokeHashTabbing();
				}
			};

		bindTabInvokers();

		$(window).resize(function() {
			$('article p a').unbind('click');
			invokeHashTabbing(false);
			bindTabInvokers();
		});
	};

	o.addOverlayHandlers = function() {
		var origPos = 0,
			resizeOverlay = function() {
				$('#cloak').css({
					'width': $(window).width() + $(window).scrollLeft() + 'px',
					'height': $(window).height() + $(window).scrollTop() + 'px'
				});
			},
			closeOverlay = function(e) {
				if (typeof (e) != 'undefined') e.preventDefault();

				$('.overlay:visible').fadeOut(250, function() {
					window.scrollTo(0, origPos);
					$('#cloak').fadeOut(250);
				});
			},
			invokeOverlays = function(e) {
				e.preventDefault();

				if (!$('#cloak').length) {
					$('body').append('<div id="cloak"></div>');

					// overlay closing handlers
					$('html').keydown(function(e) {
						if (e.keyCode === 27) closeOverlay(); // via Esc key
					});

					$('#cloak').click(closeOverlay); // via cloak click

					$('.overlay .close').click(closeOverlay); // via close click
				}

				if ($('.overlay:visible').length) {
					$('.overlay:visible').fadeOut(250);
					origPos = origPos;
				} else {
					origPos = $(window).scrollTop();
				}

				var hash = $(this).attr('href'),
					cloak = $('#cloak').css('opacity', '0.6');

				resizeOverlay();

				cloak.fadeIn(500, function() {
					if (origPos > 190) window.scrollTo(0, 190);
					$(hash).fadeIn(500);
				});
			},
			bindOverlayInvokers = function() {
				if ($('nav:visible').length) {
					$('a.helper').bind('click', invokeOverlays);
					$('.overlay:not(.overlay:visible)').hide();
				} else {
					$('.overlay').show();
				}
			};

		bindOverlayInvokers();

		$(window).resize(function() {
			$('a.helper').unbind('click');
			bindOverlayInvokers();
			if ($('#cloak:visible').length) resizeOverlay();
		});
	};

	o.doTracking = function() {
		// binds tracking calls to page load and click events
		if ($('.home').length) s3_log('Open_My_Mazda');

		if ($('.support a').length) {
			$('.support a').click(function() {
				s3_log('Help_Option');
			});
		}

		if ($('.accountdetails').length) {
			if ($(':checkbox:disabled').length) {
				// read-only mode
				s3_log('My_Details');
			} else {
				// edit mode
				s3_log('Edit_Details');
			}
		}

		if ($('.mydealer').length) s3_log('My_Dealer');

		if ($('.warranties').length) s3_log('My_Warranties');

		if ($('.signout').length) {
			$('.signout').click(function() {
				s3_log('Sign_Out');
			});
		}

		if ($('.forgottenpassword').length) s3_log('Forgot_PW');
		if ($('.registrationpage').length) s3_log('Registration');
	};

	o.init = function() {
		// test for input placeholder support
		if (!Modernizr.input.placeholder) o.addLabelToInput();

		// bind layout responsive behaviour to the login page
		if ($('.login').length) o.bindLoginBehaviour();

		// apply PNG transparency fixes for IE6
		if ($.browser.msie && parseInt($.browser.version, 10) === 6) {
			$.getScript('/js/DD_belatedPNG_0.0.8a-min.js', function() {
				DD_belatedPNG.fix('.model img, h1, h5');
			});
		}

		// initialises Sophus3 tracking
	};

	return o.init();
};
