// 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;
}

getElementsByClassName = function(oElm, strTagName, strClassName){
    var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++){
        oElement = arrElements[i];      
        if(oRegExp.test(oElement.className)){
            arrReturnElements.push(oElement);
        }   
    }
    return (arrReturnElements)
}

SlideshowContent								= {
	// customise with these settings
	nTimeInterval: 15000,							// speed of playing slideshow in millisecond
	bStartAsPlaying: true,							// true - initialise slideshow with items playing
													// flase - initialise slideshow with items paused at first slide
	sContainerID: 'hotOffers',						// id value of the slideshow container
	sItemTag: 'div',								// tag that contains each slide (eg div, img, a)
	sItemClass: 'hotOfferContent',					// class of slides
	sControlContainerID: 'slideshowControls',		// id of the controls container
	sPreviousID: 'prev',							// 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: 'selected',			// 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) {
					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 (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.restartSlides();
								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();
			
			//Use jQuery to animate/fade using opacity
			$(oElement).css('opacity', 0);
			$(oElement).animate({
							opacity: 1
						}, 400, function(){
						});
		}
	},
	
	hide:function(oElement) {
		
		oElement.className						= oElement.className.trim();
		oElement.className						= oElement.className + ' ' + SlideshowContent.sHideClass;
		//Reset opacity using jQuery
		$(oElement).css('opacity', 0);
	},
	
	playSlides:function() {
		SlideshowContent.oInterval = setInterval("SlideshowContent.nextSlide()", SlideshowContent.nTimeInterval);
	},
	
	pauseSlides:function() {
		clearInterval(SlideshowContent.oInterval);
	},
	
	restartSlides:function() {
		SlideshowContent.pauseSlides();
		SlideshowContent.playSlides();
	},
	
	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.restartSlides();
		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.restartSlides();
		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()");