var BookPreviewer = { 
	book: null,
	pages: null,
	current_page: null,
	pageTurnCallback: null,
	startup: function() {
		var hash = window.location.hash;
		if (hash.indexOf('front') != -1) { page_number = 0}
		else if (hash.indexOf('back') != -1) { page_number = 999 }
		else { page_number = parseInt(hash.gsub(/\D+/, '')) };
		BookPreviewer.goToPage(page_number);
	},
	nextPage: function() {
		if (BookPreviewer.current_page.next !== null) {
			start = BookPreviewer.current_page.number;
			BookPreviewer.goToPage(BookPreviewer.current_page.next);
			if (BookPreviewer.current_page.number == 999) return;
			if (BookPreviewer.current_page.number == start + 2) {
				BookPreviewer.showPagesSkipped('Page ' + BookPreviewer.getPageName(start+1));
			} else if (BookPreviewer.current_page.number > start + 2) {
				BookPreviewer.showPagesSkipped('Pages ' + BookPreviewer.getPageName(start+1) + '&#8211;' + BookPreviewer.getPageName(BookPreviewer.current_page.number-1));
			} else {
				BookPreviewer.hidePagesSkipped();
			}
		}
	},
	previousPage: function() {
		if (BookPreviewer.current_page.previous !== null) {
			start = BookPreviewer.current_page.number;
			BookPreviewer.goToPage(BookPreviewer.current_page.previous);
			if (start == 999) return;
			else if (BookPreviewer.current_page.number == start - 2) {
				BookPreviewer.showPagesSkipped('Page ' + BookPreviewer.getPageName(start-1));
			} else if (BookPreviewer.current_page.number < start - 2) {
				BookPreviewer.showPagesSkipped('Pages ' + BookPreviewer.getPageName(BookPreviewer.current_page.number+1) + '&#8211;' + BookPreviewer.getPageName(start-1));
			} else {
				BookPreviewer.hidePagesSkipped();
			}
		}
	},
	showPagesSkipped: function(pages_skipped) {
		$('pages_skipped').update(pages_skipped);
		Effect.Queues.get('skip-notice').each(function(effect) { effect.cancel(); });
		new Effect.Appear($('skip-notice'), { duration: 0.3, from: .01, to: .99, delay: 0.4, queue: { scope: 'skip-notice', position: 'end' } });
		new Effect.Fade($('skip-notice'), { duration: 2.7, from: .99, to: .01, delay: 4, queue: { scope: 'skip-notice', position: 'end' } });
		//Element.show.delay(0.7, 'skip-notice');
		//$('skip-notice').style.opacity = 1;
	},
	hidePagesSkipped: function(pages_skipped) {
		$('skip-notice').hide();
	},
	goToPage: function(page_number) {
		new_page = BookPreviewer.pages.find(function(page) {return (page.number == page_number);});
		if (new_page == null) new_page = BookPreviewer.pages[0];
		if (BookPreviewer.current_page && BookPreviewer.current_page.number == new_page.number) return true;
		if (BookPreviewer.current_page) $('previewpage_' + BookPreviewer.current_page.number).hide();
		$('previewpage_' + new_page.number).show();
		BookPreviewer.current_page = new_page;
		BookPreviewer.loadImages();
		if (BookPreviewer.current_page.number != $('page_select').getValue) {
			$('page_select').value = BookPreviewer.current_page.number;
		}
		switch(BookPreviewer.current_page.number) {
			case 0:   window.location.hash = 'front-cover'; break;
			case 999: window.location.hash = 'back-cover'; break;
			default:  window.location.hash = 'p' + BookPreviewer.current_page.number;
		}
		if (typeof(BookPreviewer.pageTurnCallback) == 'function')
		  BookPreviewer.pageTurnCallback();
		if (window.pageTracker)
		  pageTracker._trackEvent("Book Preview", "PageTurn", BookPreviewer.book.name, parseInt(page_number));
	},
	getPageName: function(page_number) {
		if (page_number <= (BookPreviewer.book.first_page_offset || 0)) {
			return $w('0 i ii iii iv v vi vii viii ix x')[page_number];
		} else return page_number - (BookPreviewer.book.first_page_offset || 0)
	},
	loadImages: function() {
		BookPreviewer.loadImage(BookPreviewer.current_page.number);
		if (BookPreviewer.current_page.previous !== null) {
			BookPreviewer.loadImage(BookPreviewer.current_page.previous);
		}
		if (BookPreviewer.current_page.next !== null) {
			BookPreviewer.loadImage(BookPreviewer.current_page.next);
		}
	},
	loadImage: function(page_number) {
		if (Element.empty('previewpage_' + page_number)) {
			if (page_number == 0) { image_suffix = "-front.jpg" }
			else if (page_number == 999) { image_suffix = "-back.jpg" }
			else { image_suffix = "-p" + page_number + ".png" }
			new Element.update(
				'previewpage_'+page_number, 
				'<img src="/images/products/previews/' + BookPreviewer.book.code + image_suffix + '" width="612" height="792" alt="" />'
			);
		}
	}
}
