
// Between the hours of 6pm & 6am, turn on Night Mode (gives the body the "night" class)
// Also turn on Night Mode when given the ?night=true URL param (for easy testing)
$(document).ready(function() {
	var time = new Date();
	var hours = time.getHours();
	var re = /[?&]night=1|true|yes/;
	var night = window.location.search.match(re);
	
	if ((hours && (hours >= 18 || hours < 6)) || night) {
		$("body").addClass("night");
	}
});

// Tooltips
$(document).ready(function() {
	window.ttfadeTO = null;
	$("a.link_tooltip").hover(
		function (e) {
			if (window.ttfadeTO != undefined) {
				clearTimeout(window.ttfadeTO);
				fadeOutToolTip();
			}
			prepareTooltip($(this), e);
			$("div#tooltip").fadeIn("normal");
		},
		function (e) {
			window.ttfadeTO = setTimeout("fadeOutToolTip()",1000);
			$("div#tooltip").stop(true, true);
		}
	)
	
	$("div#tooltip").hover(
		function (e) {
			if (window.ttfadeTO != undefined) {
				clearTimeout(window.ttfadeTO);
				$("div#tooltip").css("opacity","1");
			}
			$("div#tooltip").stop(true);
		},
		function (e) {
			window.ttfadeTO = setTimeout("fadeOutToolTip()",250);
		}
	)
});

function prepareTooltip(ttLink, event) {
	$("div#tooltip div.middle strong").text(ttLink.attr("title"));
	$("div#tooltip div.middle p").text(ttLink.attr("rev"));
	$("div#tooltip div.middle a").attr("href",ttLink.attr("href"));

	var ttWidth = $("div#tooltip").width();
	var ttHeight = $("div#tooltip").height();
	var scrollTop = $(document).scrollTop();
	var linkWidth = $(event.target).width();
	var linkLeftPos = $(event.target).offset().left;
	var linkTopPos = $(event.target).offset().top;
	
	var ttLeftPos = (linkLeftPos + linkWidth/2)-(ttWidth/2);
	var ttTopPos = linkTopPos-ttHeight+10;
	if (ttLeftPos < 0) {ttLeftPos = 0}
	
	$("div#tooltip").css({left: ttLeftPos, top: ttTopPos, display: "none"});
}

function fadeOutToolTip() {
	$("div#tooltip").fadeOut("fast");
}

//IE6 Hover on non-link elements
function addIE6Hover(selector) {
	$(selector).hover(
		function () {$(this).addClass("hover")},
		function () {$(this).removeClass("hover")}
	)
}


/*** Modal Window ***/
var ninWii = (navigator.platform.indexOf('Nintendo Wii')>=0) ? true : false;
var ninDSi = (navigator.platform.indexOf('Nintendo DSi')>=0) ? true : false;

var modalWindow = function(target, options){
	var base = this;

	base.options = {
		className: 'modal-window',
		exteriorFire: false,
		exteriorFireContent: '',
		interstitial: false,
		interstitialTarget: 'http://google.com',
		pagingButtons: false,
		pagingContent: 'div.modal-content',
		placeExisting: false,
		placeExistingElement: $('my-element'),
		callback:function(){}
	}

	if(typeof options == 'object'){
		$.extend(base.options, options);
	}

	base.elClicked = target;
	base.targetLink = base.elClicked.attr('href');

	if(base.options.exteriorFire){
		$(document).bind('modalOpen',function(e, target){
			base.__createModal();
		});

		$(document).trigger('modalOpen', base.options.interstitialTarget);
	}else{
		$(base.elClicked).click(function(e){
			e.preventDefault();
			base.__createModal(this);
		});
	}
};

modalWindow.prototype = {
	modalEventHandlers:function(){
		var base = this;

		base.elOverlay.click(function(){
			base.__modalHide(400);
		});
		base.elBtnClose.click(function(){
			base.__modalHide(400);
		});
		$(window).bind('resize', function(){
			base.positionModal();
		});
		$(window).scroll(function(e){
			base.positionModal();
		});
		$(document).keydown(function(e){
			base.__handleEscape(e, base);
		});
	},
	interstitialEventHandlers:function(){
		var base = this;

		base.elBtnContinue.click(function(){
			base.__modalHide(400);
		});
		base.elBtnCancel.click(function(){
			base.__modalHide(400);
		});
	},
	pagingEventHandlers:function(el){
		var base = this;

		base.elPrev = $(el).parent('li').prevAll('li:first').children(base.options.pagingContent);
		base.elNext = $(el).parent('li').nextAll('li:first').children(base.options.pagingContent);

		if(base.elPrev.length >= 1){
			base.elBtnBack.click(function(){
				base.__modalHide(0);
				base.__createModal(base.elPrev);
			})
		}else{
			base.elBtnBack.addClass('disabled');
		}

		if(base.elNext.length >= 1){
			base.elBtnNext.click(function(){
				base.__modalHide(0);
				base.__createModal(base.elNext);
			});
		}else{
			base.elBtnNext.addClass('disabled');
		}
	},
	modalElements:function(){
		var base = this;

		base.elOverlay = $('<div id="overlay" />').fadeTo(0, '0.90');
		base.elBtnClose = $('<a class="btn" id="btn-modal-close"><span class="offscreen">Close</span></a>');

		if(base.options.placeExisting){
			base.elModalAttributes = $('<div class="modal-attributes" />');
			base.elModalWindow = base.options.placeExistingElement;
		}else{
			base.elModalWindow = $('<div id="modal-window" />').addClass(base.options.className);
		}

		if(typeof document.body.style.maxHeight === 'undefined' || navigator.platform == "Nintendo Wii"){
			base.elOverlay.css({
				height: ($(document.viewport).height() > $(document.body).height() ? $(document.viewport).height() : $(document.body).height()) + 'px'
			});
		}
	},
	interstitialElements:function(){
		var base = this;

		base.elBtnContinue = $('<a class="btn" id="btn-modal-continue" target="_blank"><span class="offscreen">Continue</span></a>').attr('href', base.targetLink);
		base.elBtnCancel = $('<a class="btn" id="btn-modal-cancel"><span class="offscreen">Cancel</span></a>');
	},
	pagingElements:function(){
		var base = this;

		base.elBtnWrapper = $('<ul class="buttons" />');
		base.elBtnBack = $('<a class="btn-back"><span>Back</span></a>');
		base.elBtnNext = $('<a class="btn-next"><span>Next</span></a>');

		base.elBtnWrapper.append($('<li />').append(base.elBtnBack)).append($('<li />').append(base.elBtnNext));
	},
	positionModal:function(){
		var scrollTop = $(window).scrollTop();
		var base = this,
			leftPosition = ($(document.body).width() - base.elModalWindow.width()) / 2 + 'px',
			topPosition = ($(window).height() - base.elModalWindow.height()) / 2 + scrollTop + 'px';

		if($(window).height() < base.elModalWindow.height() && base.options.exteriorFire){
			base.elModalWindow.css({
				'left' : leftPosition,
				'position' : 'absolute',
				'top' : '100px'
			});
		}else{
			base.elModalWindow.css({
				'left' : leftPosition,
				'top' : topPosition
			});
		}
	},
	__createModal:function(el){
		var base = this,
			modalWindowContent;

		base.elOrigin = el;
		base.modalElements();
		base.modalEventHandlers();

		if(base.options.interstitial){
			modalWindowContent = base.elModalWindow.html($('div.modal-interstitial').html());

			base.interstitialElements();
			base.interstitialEventHandlers();
			base.elModalWindow.append(base.elBtnContinue, base.elBtnCancel);
		}else if(base.options.pagingButtons){
			modalWindowContent = base.elModalWindow.append($($(el).attr('href')).children().clone(true));

			base.pagingElements();
			base.pagingEventHandlers(el);
			base.elModalWindow.append(base.elBtnClose, base.elBtnWrapper);
		}else if(base.options.placeExisting){
			modalWindowContent = base.options.placeExistingElement;

			base.elModalAttributes.append(base.elBtnClose);

			base.elModalWindow.append(base.elModalAttributes);
		}else{
			modalWindowContent = base.elModalWindow.append($($(el).attr('href')).children().clone(true));

			base.elModalWindow.append(base.elBtnClose);
		}

		if(base.options.placeExisting){
			$('body').append(base.elOverlay);
			 base.elModalWindow.show();
		}else{
			$('body').append(base.elOverlay, base.elModalWindow);
		}
		base.elOverlay.fadeIn(400);

		if(ie6){
			modalWindowContent.show();
		}else if(ie){
			modalWindowContent.show();
		}else{
			modalWindowContent.fadeIn(600);
		}

		base.positionModal();
		base.options.callback.call(base);
	},
	__modalHide:function(fadeTime){
		var base = this,
			remove = function(){
				$(this).remove();
			};

		if(base.options.placeExisting){
			base.elOverlay.fadeOut(fadeTime, remove);
			base.options.placeExistingElement.fadeOut(fadeTime);
			base.elModalAttributes.remove();
		}else{
			base.elOverlay.fadeOut(fadeTime, remove);
			base.elModalWindow.fadeOut(fadeTime, remove).empty();
		}

		if(typeof document.body.style.maxHeight === 'undefined'){
			$('body', 'html').css({
				'height' : 'auto',
				'overflow' : 'auto',
				'width' : 'auto'
			});
		}

		$(document).unbind('keydown', base.__handleEscape);

		if(base.options.exteriorFire){
			$(document).unbind('modalOpen');
		}
	},
	__handleEscape:function(e, base){
		var base = this;

		if(e.keyCode === 27){
			base.__modalHide(400);
		}
	}
};

