var pageEngine = {
	currentPage: 1,
	contentsShown: false,
	pageNumberCont: $('footer').children('p'),
	contentsPage: $('#contents'),
	magArea: $('#content'),
	pageLoader: $('#pageLoader'),
	navLeft: $('#prevSpread'),
	navRight: $('#nextSpread'),
	
	init: function(){
		$(document).ready(function(){
			var startingPage = $.query()['page'];
			pageEngine.generateNav();
			pageEngine.bindButtons();
			
			if(startingPage !== undefined){
				pageEngine.getSpread(startingPage);
			}
		});
	},
	getSpread: function(spreadNo){
		$.ajax({
            url: 'page' + spreadNo +'.html?' + Math.random(),
            success: function(data){
            	pageEngine.pageLoader.addClass('hidden');
            	pageEngine.currentPage = spreadNo;
            	pageEngine.renderSpread(data);
            }
        }); 
	},
	renderContents: function(){
		pageEngine.contentsPage.next().fadeOut('slow',function(){
			$('.page').remove();
			$(this).remove();
		});
		pageEngine.contentsPage.fadeIn('slow');
		pageEngine.pageNumberCont.html('Contents');
		pageEngine.contentsShown = true;
		pageEngine.navLeft.fadeOut('slow');
		pageEngine.navRight.fadeOut('slow');
	},
	renderSpread: function(data){
		pageEngine.magArea.append(data);
		var displayPageId = '#page' + pageEngine.currentPage;
		
		 if(pageEngine.contentsShown === true){
			pageEngine.contentsPage.next().fadeIn('slow');
			pageEngine.contentsPage.fadeOut('slow');
			pageEngine.contentsShown = false;
			pageEngine.navLeft.fadeIn('slow');
			pageEngine.navRight.fadeIn('slow');
		}
		else{
			
			$(displayPageId).prev().fadeOut('slow' ,function(){
				$(this).remove();
			});
			$(displayPageId).fadeIn('slow');
		} 
		pageEngine.pageNumberCont.html($(displayPageId).attr('rel'));
		
		if(pageEngine.currentPage == 8){
			pageEngine.navRight.fadeOut('slow');
		}else{
			pageEngine.navRight.fadeIn('slow');
			pageEngine.navLeft.fadeIn('slow');
		}
		
		//add cloudZoom here
		$('.cloud-zoom').bind('click', function(){
			$(this).CloudZoom();
			return false;
		});
	},
	generateNav: function(){
		$('a.navLink').bind('click',function(){
			var linkTo = $(this).attr('page');
			pageEngine.pageLoader.removeClass('hidden');
			if(linkTo === 'contents'){
				pageEngine.renderContents();
			}
			else{
				pageEngine.getSpread(linkTo);
			}
			return false;
		});
	},
	bindButtons: function(){
		pageEngine.navLeft.bind('click', function(){
			page = parseInt(pageEngine.currentPage) - 1;
			if(page == 0){
				pageEngine.renderContents();
			}else{
				pageEngine.getSpread(page);
			}
			return false;
		});
		
		pageEngine.navRight.bind('click', function(){
			page = parseInt(pageEngine.currentPage) + 1;
			pageEngine.getSpread(page);
			return false;
		});
	}
}

pageEngine.init();

jQuery.query = function() {
    var r = {};
    var q = location.search;
    q = q.replace(/^\?/, ''); // remove the leading ? 
    q = q.replace(/\&$/, ''); // remove the trailing & 
    jQuery.each(q.split('&'), function() {
        var key = this.split('=')[0];
        var val = this.split('=')[1];
        // convert floats 
        if (/^[0-9.]+$/.test(val))
            val = parseFloat(val);
        // ingnore empty values 
        if (val)
            r[key] = val;
    });
    return r;
 };
