var backhand = function($) {
	var windowWidth;
	var windowHeight;
	var navHeight;
	var contentBoxPaddingLeft;
	var contentBoxPaddingRight;
	var contentBoxPaddingTop;
	var contentBoxPaddingBottom;
	var contentBoxWidth;
	var contentBoxHeight;
	var contentMenuElements = [];
	
	function init() {
		// Element info
		navHeight = $('nav#top').height();
		contentBoxPaddingLeft = $('.content-box').cssDimension('padding-left');
		contentBoxPaddingRight = $('.content-box').cssDimension('padding-right');
		contentBoxPaddingTop = $('.content-box').cssDimension('padding-top');
		contentBoxPaddingBottom = $('.content-box').cssDimension('padding-bottom');
		
		// Set all link targets to _blank
		$('a[class!="email-link"]').attr('target','blank');
		
		// Add smooth scroll to nav elements
		$('#top ul li a').each( function(index,element) {
			$(element).enableSmoothScroll();
			contentMenuElements.push($(this).parent());
		});
		
		// Size content boxes
		sizeContentBoxes();
		
		// Highlight first element for starters
		contentMenuElements[0].addClass('nav-selected');
		
		$('.vertical-align-middle').each(function() {
			this.style.position = 'relative';
			this.style.top = ($(this).parent().height() - $(this).height())/2 + 'px';
	    });
		
		//$('.email-link').each( function(e) { $(this).mailtoSetup(this.name); });
		$('.email-link').each( function(e) { $(this).mailtoSetup($(this).attr('coded'),$(this).attr('key')); });
		
		$('iframe[load^=http]').each( function(e) { $(this).attr('src', $(this).attr('load')); $(this).attr('load',null); });
	}
	
	function sizeContentBoxes() {
		// Viewport info
		windowWidth  = $(window).width();
		windowHeight = $(window).height();
		
		// Content boxes
		contentBoxWidth  = windowWidth  - contentBoxPaddingLeft - contentBoxPaddingRight;
		contentBoxHeight = windowHeight - contentBoxPaddingTop  - contentBoxPaddingBottom - navHeight ;
		
		$('.content-box').each(function(index,element) {
			element.style.width  = contentBoxWidth + 'px';
			element.style.height = contentBoxHeight + 'px';
		});
	}
	
	
	
	// Prototype extensions
	$.fn.cssDimension = function(style) {
		return $(this).css(style).replace('px','');
	};
	$.fn.enableSmoothScroll = function() {
		var topHeight = $('#top').height();
		$(this).click( function() {
			var elementClicked = $(this).attr("href");
			var destination = $(elementClicked).offset().top;
			$("html:not(:animated),body:not(:animated)").animate({ scrollTop: destination - topHeight }, 500 );
			return false;
		});
	};
	$.fn.mailtoSetup = function(coded,key) {
		// Incorporates code from:
		// Email obfuscator script 2.1 by Tim Williams, University of Arizona
		// Random encryption key feature by Andrew Moulden, Site Engineering Ltd
		// This code is freeware provided these four comment lines remain intact
		// A wizard to generate this code is at http://www.jottings.com/obfuscator/
		// key = "Cq9R5UQbAdjeKuH3XZE2rDtaST8L6yJOgnfF7BWvihNG0xYPIpsclz1MwkVm4o";
		shift=coded.length;
		link="";
		for (i=0; i<coded.length; i++) {
			if (key.indexOf(coded.charAt(i))==-1) {
				ltr = coded.charAt(i);
				link += (ltr);
		  } else {     
			  ltr = (key.indexOf(coded.charAt(i))-shift+key.length) % key.length;
			  link += (key.charAt(ltr));
		  }
		}
		$(this).attr('href','mailto:' + link);
		$(this).html(link);
	};
	
	// Events
	$(document).ready( function() {
		init();
	});
	$(window).resize( function() {
		//sizeContentBoxes();
	});
	// Add check for which content page is visible, and highlight corresponding nav element
	$(window).scroll(function(event) {
		viewPortOffset = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
		index = Math.floor(viewPortOffset/contentBoxHeight);
		element = contentMenuElements[index];
		if(element != null && !element.hasClass('nav-selected')) {
			$('#top ul li').removeClass('nav-selected');
			element.addClass('nav-selected');
		}
	});	
	
	function log(message) {
		if($('#log') != null)
			$('#log').append(message + '<br/>');
	}
	
}(jQuery);
