(function(){
	
	var globals;
	var settings;
	var resizeTimeout;

	// prepare

	function prepare() {
		
		globals = {
			'windowWidth' : '',
			'windowHeight' : '',
			'lastWindowWidth' : 0,
			'lastWindowHeight' : 0,
			'minHeight' : '0',
			'totalPages' : '',
			'flag' : false
		};

		settings = {
			'minWidth' : 960
		};
		
		$('.scroll').click(function(e){ // add event to scroll buttons
			e.preventDefault();
			var targetId = $(this).attr('href').split('#')[1];
			scrollToPage(targetId);
		});
	
		$('a.buy-link').live('click', function(e) {
			e.preventDefault();
			var productID=$(this).attr('rel').replace('buy-', '');
			$.ajax({
				url: '/buy/',
				type: 'POST',
				data: {productID: productID},
				dataType: 'json',
				success: function(d) {
					document.location.href='/basket/';
				},
				error: function(d) {
				}
			});
		});
	
	}
	
	// Basket functions
	
	function updateBasketDisplay(d) {
		console.log('updating basket');
		$('li.basket-display').removeClass().addClass('basket-display').addClass('basket'+d.count);
	}
	
	// scroll functions

	function scrollToPage(id) {
		$.scrollTo( '#' + id, 960, {
			onAfter: function() { window.location = '#' + id }
		} );
	}

	function scrollBack() {
		var hashArray = window.location.href.split('#');
		if(hashArray.length > 1 && !globals.flag) {
			globals.flag = true;
			$.scrollTo( '#' + hashArray[1], 960, {
				onAfter: function() { globals.flag = false; }
			});
		}
	}
	
	// adjust functions

	function adjustPageContainer() {
		globals.totalPages = $('.page').length;
		var pageContainerWidth = $(window).width() > settings.minWidth ? $(window).width() * globals.totalPages : settings.minWidth * globals.totalPages;
		$('#pageContainer').css('width',pageContainerWidth + 30); // add a little offset for IE
	}

	function adjustPages() {
		
		// highest page sets min-height
		$('.page').each(function(){
			var heightA = $(this).find('.content-a').innerHeight();
			var heightB = $(this).find('.content-b').innerHeight();
			var minHeight = heightA + heightB;
			globals.minHeight = globals.minHeight < minHeight ? minHeight : globals.minHeight;
		});

		// set page dimensions
		$('.page').css({
			'width' : globals.windowWidth,
			'height' : globals.windowHeight
		});
		
		// min-width and min-height go page content
		$('.page .inner').css({
			'minWidth' : settings.minWidth,
			'height' : globals.windowHeight,
			'minHeight' : globals.minHeight
		});
		
	}
	
	function adjustViewport() {
		globals.windowWidth = $(window).width();
		globals.windowHeight = $(window).height();
		if (globals.windowWidth==globals.lastWindowWidth && globals.windowHeight==globals.lastWindowHeight) return;
		globals.lastWindowWidth=globals.windowWidth;
		globals.lastWindowHeight=globals.windowHeight;
		adjustPages();
		adjustPageContainer();
		scrollBack();
		if (resizeTimeout) window.clearTimeout(resizeTimeout);
	}
	
	// Window events
	
	$(window).ready(onDomReady).resize(onWindowResized).load(onPageLoaded);

	function onDomReady() {
		prepare();
		adjustPageContainer();
	}

	function onPageLoaded() {
		$('html').addClass('jsEnabled'); // css for enabled javascript
		adjustViewport();
	}

	function onWindowResized() {
		if (resizeTimeout) window.clearTimeout(resizeTimeout);
		resizeTimeout = window.setTimeout(adjustViewport, 100);
	}

})();
