// Removes leading and ending whitespaces
String.prototype.trim = function () {
	var reRightTrim	= /((\s*\S+)*)\s*/;
	var reLeftTrim	= /\s*((\S+\s*)*)/;
	var sString		= this;
	sString			=  sString.replace(reRightTrim, "$1");
	sString			=  sString.replace(reLeftTrim, "$1");
	return sString;
}

SlideshowContent								= {
	// customise with these settings
	nTimeInterval: 10000,							// speed of playing slideshow in millisecond
	bStartAsPlaying: true,							// true - initialise slideshow with items playing
													// flase - initialise slideshow with items paused at first slide
	sContainerID: 'slideshowContainer',				// id value of the slideshow container
	sItemTag: 'div',								// tag that contains each slide (eg div, img, a)
	sItemClass: 'showcaseItem',						// class of slides
	sControlContainerID: 'slideshowControls',		// id of the controls container
	sPreviousID: 'previous',						// id of the previous slide button/link
	sPlayID: 'play',								// id of the play slides button/link
	sPauseID: 'pause',								// id of the pause slides button/link
	sNextID: 'next',								// id of the next slide button/link
	sHideClass: 'hide',								// class is used to hide elements
	
	sSlideNumberTag: 'li',							// tag that contains each slide number button (eg div, img, a)
	sSlideNumberClass: 'slideShowControl',			// class of the navigate by slide number buttons
	sSlideNumberCurrentClass: 'active',				// class of the navigate by slide number current button
	sSlideNumberIDPrefix: 'slideshowFrame_',		// prefix of the ID for each slide number button
	
	// don't alter below here
	aSlides: new Array(),							// array of slide divs to show
	aSlideNumbers: new Array(),						// array of slide numbers
	nCurrentSlide: 0,								// slide currently showing 
	oInterval: '',									// object for slideshow interval
	
	init:function() {
		// test that have required functionality
		if(!document.getElementById||!document.createTextNode){return;}
		if(!document.getElementsByTagName||!document.getElementById){return;}
		
		// get slideshow container
		var oContainer							= document.getElementById(SlideshowContent.sContainerID);
		if (oContainer) {
			
			// get an array of the slides in the slideshow
			SlideshowContent.aSlides			= getElementsByClassName(oContainer, SlideshowContent.sItemTag, SlideshowContent.sItemClass);
			var oControls						= document.getElementById(SlideshowContent.sControlContainerID);
			var oPrevious						= document.getElementById(SlideshowContent.sPreviousID);
			var oPlay							= document.getElementById(SlideshowContent.sPlayID);
			var oPause							= document.getElementById(SlideshowContent.sPauseID);
			var oNext							= document.getElementById(SlideshowContent.sNextID);
			SlideshowContent.aSlideNumbers		= getElementsByClassName(oControls, SlideshowContent.sSlideNumberTag, SlideshowContent.sSlideNumberClass);
			
			if (SlideshowContent.aSlides.length > 0) {
				// show container and first slide
				SlideshowContent.show(oContainer);
				SlideshowContent.show(SlideshowContent.aSlides[SlideshowContent.nCurrentSlide]);			
				
				// if there is more than one slide
				if (SlideshowContent.aSlides.length > 1) {
					// show slide controls
					if (oControls) {
						SlideshowContent.show(oControls);
						
						if (oPrevious) {
							SlideshowContent.show(oPrevious);
							oPrevious.onclick	= function() {SlideshowContent.previousSlide(); return false;}
						}
						if (oNext) {
							SlideshowContent.show(oNext);
							oNext.onclick		= function() {SlideshowContent.nextSlide(); return false;}
						}
						
						if (oPlay && oPause) {
							oPlay.onclick		= function() {
								SlideshowContent.playSlides();
								SlideshowContent.show(oPause);
								SlideshowContent.hide(oPlay);
								return false;
							}
							oPause.onclick		= function() {
								SlideshowContent.pauseSlides();
								SlideshowContent.show(oPlay);
								SlideshowContent.hide(oPause);
								return false;
							}
							if (SlideshowContent.bStartAsPlaying) {
								SlideshowContent.playSlides();
								SlideshowContent.show(oPause);
								SlideshowContent.hide(oPlay);
							} else {
								SlideshowContent.pauseSlides();
								SlideshowContent.show(oPlay);
								SlideshowContent.hide(oPause);
							}
						}
						
						// activate slide count buttons
						// start loop from 1, because slide numbers on page will use 1 as part of ID
						if (SlideshowContent.aSlideNumbers && SlideshowContent.aSlideNumbers.length > 1) {
							for (i = 0; i < SlideshowContent.aSlideNumbers.length; i++) {
								SlideshowContent.aSlideNumbers[i].onclick	= function() {
									SlideshowContent.pauseSlides();
									SlideshowContent.show(oPlay);
									SlideshowContent.hide(oPause);														
									aBar			= this.id.split(SlideshowContent.sSlideNumberIDPrefix);
									nSlideNumber	= parseInt(aBar[1]);
									SlideshowContent.toSlideNumber(nSlideNumber);
									return false;
								}
							}
							SlideshowContent.highlightCurrentSlideNumber();
						}
					}
				}
			}
		}
	},
	
	show:function(oElement) {
		while (oElement.className.indexOf(SlideshowContent.sHideClass) != -1) {
			oElement.className					= oElement.className.replace(SlideshowContent.sHideClass, '');
			oElement.className					= oElement.className.trim();
		}
	},
	
	hide:function(oElement) {
		oElement.className						= oElement.className.trim();
		oElement.className						= oElement.className + ' ' + SlideshowContent.sHideClass;
	},
	
	playSlides:function() {
		SlideshowContent.oInterval = setInterval("SlideshowContent.nextSlide()", SlideshowContent.nTimeInterval);
	},
	
	pauseSlides:function() {
		clearInterval(SlideshowContent.oInterval);
	},
	
	previousSlide:function() {
		SlideshowContent.hide(SlideshowContent.aSlides[SlideshowContent.nCurrentSlide]);
		
		if (SlideshowContent.nCurrentSlide == 0) {
			// at the beginning of the slideshow array, start from end
			SlideshowContent.nCurrentSlide		= SlideshowContent.aSlides.length - 1;
		} else {
			// show previous slide in array
			SlideshowContent.nCurrentSlide--;
		}
		
		SlideshowContent.show(SlideshowContent.aSlides[SlideshowContent.nCurrentSlide]);
		SlideshowContent.highlightCurrentSlideNumber();
	},
	
	nextSlide:function() {
		SlideshowContent.hide(SlideshowContent.aSlides[SlideshowContent.nCurrentSlide]);
		
		if ((SlideshowContent.nCurrentSlide + 1) == SlideshowContent.aSlides.length) {
			// at the end of the slideshow array, start from begining
			SlideshowContent.nCurrentSlide		= 0;
		} else {
			// show next slide in array
			SlideshowContent.nCurrentSlide++;
		}
		
		SlideshowContent.show(SlideshowContent.aSlides[SlideshowContent.nCurrentSlide]);
		SlideshowContent.highlightCurrentSlideNumber();
	},
	
	toSlideNumber:function(nSlideNumber) {
		SlideshowContent.hide(SlideshowContent.aSlides[SlideshowContent.nCurrentSlide]);
		
		if (nSlideNumber <= SlideshowContent.aSlides.length && nSlideNumber > 0) {
			SlideshowContent.nCurrentSlide		= nSlideNumber - 1;
		} else {
			SlideshowContent.nCurrentSlide		= 0;
		}
		
		SlideshowContent.show(SlideshowContent.aSlides[SlideshowContent.nCurrentSlide]);
		SlideshowContent.highlightCurrentSlideNumber();
	},
	
	highlightCurrentSlideNumber:function() {
		for (i = 0; i < SlideshowContent.aSlideNumbers.length; i++) {
			if (SlideshowContent.nCurrentSlide == i) {
				SlideshowContent.aSlideNumbers[i].className = SlideshowContent.sSlideNumberCurrentClass;
			} else {
				 SlideshowContent.aSlideNumbers[i].className = SlideshowContent.sSlideNumberClass;
			}
		}
	}
}

WindowListener.add("load","SlideshowContent.init()");