/**
 * Requires:
 *   ImageSwitcher.js
 *   Slideshow.js
 *   ThumbnailPages.js
 *   NavigationButtons.js
 */
var SlideshowStill = {

	init: function(slideshowElement) {
		var showOrHideNavButtons = function(index) {
			if (index === 0) {
				navButtons.hideLeft();
			}
			else {
				navButtons.showLeft();
			}
			if (index === imageCount - 1) {
				navButtons.hideRight();
			}
			else {
				navButtons.showRight();
			}
		};

		var onImageShown = function(imageObject) {
      var index = imageObject.index;
			//navButtons.getLeft().style.left = (slideshowElement.offsetLeft + image.offsetLeft) + 'px';
			//navButtons.getRight().style.left = (slideshowElement.offsetLeft + image.offsetLeft + image.offsetWidth - navButtons.getRight().offsetWidth) + 'px';
			if (isSlideshowPaused) {
				showOrHideNavButtons();
			}
			else {
				nextImageTimeoutID = setTimeout(function() { imageSwitcher.next(); }, imageObject.nextImageDelay);
			}
			if (index % thumbsPerPage === 0 && Math.floor(index / thumbsPerPage) - 1 === thumbs.getCurrentPageNumber()) {
				thumbs.nextPage();
			}
		};

		var pauseSlideshow = function() {
			isSlideshowPaused = true;
			clearTimeout(nextImageTimeoutID);
			showOrHideNavButtons();
		};

		var resumeSlideshow = function() {
			isSlideshowPaused = false;
			navButtons.hide();
			imageSwitcher.next();
		};
		
		var imageObjects = List.map(slideshowElement.getElementsByTagName('img'), function(image, index) {
			return Slideshow.slideshowImageToImageObject(image, index);
		});

		var imageCount = imageObjects.length;
		var thumbsPerPage = 10;
		var imageSwitcher = ImageSwitcher.init(imageObjects, {
			onImageShown: onImageShown,
			onImageLoaded: function(imageObject, index) {
				thumbs.select(index);
				navButtons.hide();
			}
		});
		var navButtons = NavigationButtons.init(DOM.getSiblings(slideshowElement, { className: 'slideshow-navigation' }), {
			click: { onLeft: imageSwitcher.prev, onRight: imageSwitcher.next }
		}, '0.6');
		var thumbs = ThumbnailPages.init(DOM.getSiblings(slideshowElement, { className:'thumbnails' })[0], thumbsPerPage, {
			onClick: function(thumb, thumbIndex) {
				pauseSlideshow();
				imageSwitcher.showImage(thumbIndex);
			},
			onPageShown: function(pageNumber) {
				if (pageNumber === 0) {
					thumbsNav.hideLeft();
					thumbsNav.showRight();
				}
				else {
					thumbsNav.showLeft();
					if (pageNumber === thumbs.getPageCount() - 1) {
						thumbsNav.hideRight();
					}
					else {
						thumbsNav.showRight();
					}
				}
			}
		});
		var thumbsNav = NavigationButtons.init(DOM.getSiblings(slideshowElement, { className:'slideshow-thumbnails-button' }), {
			click: { onLeft: thumbs.previousPage, onRight: thumbs.nextPage }
		}, '0.5');
		var isSlideshowPaused = false;
		var nextImageTimeoutID = 0;

		DOM.addEventListener(slideshowElement, 'click', function() {
			if (isSlideshowPaused === true) {
				resumeSlideshow();
			}
			else {
				pauseSlideshow();
			}
		});

		imageSwitcher.next();
		thumbs.nextPage();
		navButtons.getLeft().style.top = navButtons.getRight().style.top = (Math.round(slideshowElement.offsetHeight / 2) - 27) + 'px';
	},

};

