var iQmultimedia = {
	init: function() {
		iQmultimedia.slideshow.init();
		iQmultimedia.carousel.init();
		window.addEvent('load', iQmultimedia.slideshow.startSlideshow);
	},

	slideshow: {
		interval: undefined,
		slideshowElements: undefined,
		slideshowIndex: 0,
		thumbnailElements: undefined,
		captionElements: undefined,
		delay: 3000,
		slideshowOn: false,
	
		init: function() {
			var container;

			// Homepage
			if(container = $('slideshow')) {
				iQmultimedia.slideshow.slideshowElements = container.getElementsByTagName('img');
				iQmultimedia.slideshow.captionElements = $('captions').getElementsByTagName('p');
				for(var i = 1, j = iQmultimedia.slideshow.slideshowElements.length; i < j; i++) {
					$(iQmultimedia.slideshow.slideshowElements[i]).fade('hide');
					$(iQmultimedia.slideshow.captionElements[i]).fade('hide');
				}
			} else if(container = $('projectimages')) {
				var projectImagesContainer = container.getFirst('div.selected');
				if(projectImagesContainer) {
					var projectID = projectImagesContainer.get('id').substring('images'.length);
					
					iQmultimedia.slideshow.slideshowElements = projectImagesContainer.getElementsByTagName('img');
					iQmultimedia.slideshow.thumbnailElements = $('thumbs' + projectID).getElementsByTagName('img');
					iQmultimedia.slideshow.captionElements = $('captions').getElementsByTagName('p');
					for(var i = 0, j = iQmultimedia.slideshow.slideshowElements.length; i < j; i++) {
						if($(iQmultimedia.slideshow.slideshowElements[i]).hasClass('selected')) {
							iQmultimedia.slideshow.slideshowIndex = i;
						} else {
							// Fade them properly so they can be shown again
							$(iQmultimedia.slideshow.slideshowElements[i]).fade('hide');
							$(iQmultimedia.slideshow.captionElements[i]).fade('hide');
						}
						
						iQmultimedia.slideshow.thumbnailElements[i].parentNode.onclick = new Function('iQmultimedia.slideshow.fadeTo(' + i + '); return false;');
					}
				} else {
					return;
				}
			} else {
				return;
			}
			
			iQmultimedia.slideshow.slideshowOn = true;
		},
		
		startSlideshow: function() {
			if(iQmultimedia.slideshow.slideshowOn) {
				iQmultimedia.slideshow.interval = setInterval(iQmultimedia.slideshow.cycle, iQmultimedia.slideshow.delay);
			}
		},
		
		cycle: function() {
			var newIndex = iQmultimedia.slideshow.slideshowIndex + 1;
			if(newIndex >= iQmultimedia.slideshow.slideshowElements.length) {
				newIndex = 0;
			}

			iQmultimedia.slideshow.fadeTo(newIndex, false);
		},
		
		fadeTo: function(index, stopSlideshow) {
			if(stopSlideshow == undefined && iQmultimedia.slideshow.interval != undefined) {
				clearInterval(iQmultimedia.slideshow.interval);
			}
			
			if(index != iQmultimedia.slideshow.slideshowIndex) {
				iQmultimedia.carousel.makeIndexVisible(index);
			
				// Fade out the current image
				$(iQmultimedia.slideshow.slideshowElements[iQmultimedia.slideshow.slideshowIndex]).fade('out');
				
				if(iQmultimedia.slideshow.thumbnailElements != undefined) {
					$(iQmultimedia.slideshow.thumbnailElements[iQmultimedia.slideshow.slideshowIndex].parentNode).tween('border-color', '#acacac');
				}
				if(iQmultimedia.slideshow.captionElements != undefined) {
					$(iQmultimedia.slideshow.captionElements[iQmultimedia.slideshow.slideshowIndex]).fade('out');
				}

				iQmultimedia.slideshow.slideshowIndex = index;
				
				// Fade in the selected image			
				$(iQmultimedia.slideshow.slideshowElements[iQmultimedia.slideshow.slideshowIndex]).fade('in');
				
				if(iQmultimedia.slideshow.thumbnailElements != undefined) {
					$(iQmultimedia.slideshow.thumbnailElements[iQmultimedia.slideshow.slideshowIndex].parentNode).tween('border-color', '#464646');
				}
				if(iQmultimedia.slideshow.captionElements != undefined) {
					$(iQmultimedia.slideshow.captionElements[iQmultimedia.slideshow.slideshowIndex]).fade('in');
				}
			}
		}
	},
	
	carousel: {
		carousel: undefined,
		itemsVisible: undefined,
		itemSize: undefined,
		numItems: undefined,
		currentIndex: 0,
		leftArrow: undefined,
		rightArrow: undefined,
		
		init: function() {
			// Find any carousel objects
			var thumbOuter;
			if(thumbOuter = $('thumbnailsouter')) {
				if(iQmultimedia.carousel.carousel = thumbOuter.getFirst('div.selected').getFirst('div.carousel')) {
					iQmultimedia.carousel.itemSize = $(iQmultimedia.carousel.carousel.getElementsByTagName('a')[0]).getSize().x;
					iQmultimedia.carousel.itemsVisible = Math.floor(iQmultimedia.carousel.carousel.getStyle('width').toInt() / iQmultimedia.carousel.itemSize);
					iQmultimedia.carousel.numItems = iQmultimedia.carousel.carousel.getElementsByTagName('a').length;
					
					iQmultimedia.carousel.leftArrow = iQmultimedia.carousel.carousel.getPrevious('a.carouselleft');
					iQmultimedia.carousel.rightArrow = iQmultimedia.carousel.carousel.getNext('a.carouselright');
					
					iQmultimedia.carousel.leftArrow.addEvent('click', function() { iQmultimedia.carousel.slide(-1, this); });
					iQmultimedia.carousel.rightArrow.addEvent('click', function() { iQmultimedia.carousel.slide(1, this); });
					
					if(iQmultimedia.carousel.currentIndex <= 0) {
						iQmultimedia.carousel.leftArrow.addClass('disabled');
					} else {
						iQmultimedia.carousel.leftArrow.removeClass('disabled');
					}
					
					if(iQmultimedia.carousel.currentIndex + iQmultimedia.carousel.itemsVisible >= iQmultimedia.carousel.numItems) {
						iQmultimedia.carousel.rightArrow.addClass('disabled');
					} else {
						iQmultimedia.carousel.rightArrow.removeClass('disabled');
					}
				}
			}
		},
		
		slide: function(direction, el) {
			if(el != undefined && el.hasClass('disabled')) {
				return;
			}
			
			var slideDistance = (direction > 1 || direction < -1 ? direction : direction * Math.min(iQmultimedia.carousel.itemsVisible - 1, (direction < 0 ? iQmultimedia.carousel.currentIndex : iQmultimedia.carousel.numItems - (iQmultimedia.carousel.itemsVisible + iQmultimedia.carousel.currentIndex))));
			
			iQmultimedia.carousel.carousel.getFirst().tween('left', (-1 * (slideDistance + iQmultimedia.carousel.currentIndex) * iQmultimedia.carousel.itemSize));
			iQmultimedia.carousel.currentIndex += slideDistance;
			
			if(iQmultimedia.carousel.currentIndex <= 0) {
				iQmultimedia.carousel.leftArrow.addClass('disabled');
			} else {
				iQmultimedia.carousel.leftArrow.removeClass('disabled');
			}
			
			if(iQmultimedia.carousel.currentIndex + iQmultimedia.carousel.itemsVisible >= iQmultimedia.carousel.numItems) {
				iQmultimedia.carousel.rightArrow.addClass('disabled');
			} else {
				iQmultimedia.carousel.rightArrow.removeClass('disabled');
			}
		},
		
		makeIndexVisible: function(index) {
			if(index < iQmultimedia.carousel.currentIndex) {
				iQmultimedia.carousel.slide(index - iQmultimedia.carousel.currentIndex);
			} else if(index >= iQmultimedia.carousel.currentIndex + iQmultimedia.carousel.itemsVisible) {
				iQmultimedia.carousel.slide(index - (iQmultimedia.carousel.currentIndex + iQmultimedia.carousel.itemsVisible) + 1);
			}
		}
	}
};

window.addEvent('domready', iQmultimedia.init);