
/* - bbwebsite.js - */
function debugData(i,isFading) { // debug functionality only
	ssdata = 'Slideshow: ' + changeSlide.slideshows[i][0] + '<br />'
	ssdata += 'Number of rotations remaining: ' + changeSlide.slideshows[i][1] + '<br />'
	ssdata += 'Which slide now showing: ' + changeSlide.slideshows[i][3] + '<br />'
	ssdata += 'Slide show paused: ' + changeSlide.slideshows[i][4] + '<br />'
	ssdata += 'Slideshows completed (changeSlide.counter): ' + changeSlide.counter + '<br />'
//	ssdata += 'slideshowtimerID2: ' + slideshowtimerID2 + '<br />'
//	ssdata += 'Saved state: ' + changeSlide.slideshows[i][5];
//	if (isFading) {
//		ssdata += 'Which loop: doFade()' + '<br />'
//		ssdata += 'Slide 1 fader: ' + doFade.fader1 + '<br />'
//		ssdata += 'Slide 2 fader: ' + doFade.fader2 + '<br />'
//	} else {
//		ssdata += 'Which loop: changeSlide()' + '<br />'
//		ssdata += '<br /><br />'
//	}
	document.getElementById("slideshowinfobox-" + changeSlide.slideshows[i][0]).style.display = "block";
	document.getElementById("slideshowinfobox-" + changeSlide.slideshows[i][0]).innerHTML = ssdata;
}

// this function changes the opacity of the supplied object to the supplied amount in all browsers
function changeOpacity(obj, n) {
	var o = document.getElementById(obj)
	if (typeof o.filters != "undefined" && o.filters) {
		if (o.filters["DXImageTransform.Microsoft.Alpha"])
			o.filters["DXImageTransform.Microsoft.Alpha"].Opacity = (n * 100);
		else if (o.filters.item && o.filters.item("DXImageTransform.Microsoft.Alpha"))
			o.filters.item("DXImageTransform.Microsoft.Alpha").Opacity = (n * 100);
	} else if (typeof o.style.MozOpacity != "undefined")
		o.style.MozOpacity = n;
	else if (typeof o.style.opacity != "undefined")
		o.style.opacity = n;
	else if (typeof o.style.Opacity != "undefined")
		o.style.Opacity = n;
	else if (typeof o.style.KhtmlOpacity != "undefined")
		o.style.KhtmlOpacity = n;
}
globalcounter = 0;
function doFade() {
	if (doFade.fader2 <= (1 + (2 * changeSlide.fadeAmount))) {
		for (var i = 0; i < changeSlide.slideshows.length; i++) {
//			debugData(i,true);
			var obj1 = "slideshow1-" + changeSlide.slideshows[i][0];
			var obj2 = "slideshow2-" + changeSlide.slideshows[i][0];
			if (!changeSlide.slideshows[i][4] && changeSlide.slideshows[i][1] > 0) { // if pause is not set for that slideshow and there are still some rotations left
				changeOpacity(obj1, doFade.fader1);
				changeOpacity(obj2, doFade.fader2);
				if (doFade.fader2 >= 0.99) {
					document.getElementById(obj1).innerHTML = document.getElementById(obj2).innerHTML;
					changeOpacity(obj1, 1);
					changeOpacity(obj2, 0);
					doFade.fader2 = 1.5;
				}
			} else
				continue;
		}
		doFade.fader1 -= changeSlide.fadeAmount;
		doFade.fader2 += changeSlide.fadeAmount;
	} else {
		clearInterval(slideshowtimerID2);
		slideshowtimerID2 = 0;
		changeSlide();
//		if (!slideshowtimerID1)
//			slideshowtimerID1 = setTimeout("changeSlide()",changeSlide.delay);
		doFade.fader1 = 1;
		doFade.fader2 = 0;
		globalcounter++;
	}
}
doFade.fader1 = 1;
doFade.fader2 = 0;

/* This runs changeSlide which sets the slides up for the next transition and waits two seconds before running delayThenFade, which triggers the doFade transition. After this, changeSlide runs again. */

function getValidId(obj) {
	while (!obj.id) {
		obj = obj.parentNode;
	}
	return obj.id
}

function slideCheck(e) {
	e = (e?e:(event?event:null));
	if (e) {
		selectedObject = (e.target?e.target:e.srcElement);
		id = selectedObject.id;
		if (!id)
			id = getValidId(selectedObject);
		pause = (e.type.indexOf("mouseover") > -1?true:false);
		for (var i = 0; i < changeSlide.slideshows.length; i++) {
			if (id.indexOf(changeSlide.slideshows[i][0]) > -1) {
				changeSlide.slideshows[i][4] = pause;
				if (slideshowtimerID2) {
					var obj1 = "slideshow1-" + changeSlide.slideshows[i][0];
					var obj2 = "slideshow2-" + changeSlide.slideshows[i][0];
					changeOpacity(obj1, 1);
					changeOpacity(obj2, 0);
				}
				break;
			}
		}
		if (!pause && !slideshowtimerID2 && !slideshowtimerID1)
			changeSlide();
	}
}

function getNextItem(slides) {
	if (slides[3] == slides[2].length - 1)
		return 0;
	else
		return slides[3] + 1;
}

function changeSlide() {
/* this works as follows:
Loop through all items until each one runs out of rotations. 
When each one does, a global rotations counter is incremented by one.
When the global counter is the same as changeSlide.slideshows, the whole thing stops.*/
	if (changeSlide.counter < changeSlide.slideshows.length) {
		for (var i = 0; i < changeSlide.slideshows.length; i++) {
//			debugData(i,false);
			if (!changeSlide.slideshows[i][4]) { // if pause is not set for that slideshow
				if (changeSlide.slideshows[i][3] == changeSlide.slideshows[i][2].length-1) // if at end of slide show - lose a rotation from number remaining
					changeSlide.slideshows[i][1]--;
				if (changeSlide.slideshows[i][1] < 1) { // zero or fewer rotations remaining - do not rotate
					if (!changeSlide.slideshows[i][1]) {
						changeSlide.counter++;
						if (changeSlide.slideshows[i][6]) // end with composite slide
							setTimeout("initLastFade(" + i + ")",changeSlide.delay);
					}
				} else {
					obj = document.getElementById("slideshow2-" + changeSlide.slideshows[i][0]);
					changeSlide.slideshows[i][3] = getNextItem(changeSlide.slideshows[i]); // slide to be shown index
					obj.innerHTML = changeSlide.slideshows[i][2][changeSlide.slideshows[i][3]].innerHTML;
				}
			} else
				continue;
		}
		if (!slideshowtimerID2)
			slideshowtimerID1 = setTimeout("delayThenFade()",changeSlide.delay);
	} else
		slideshowtimerID1 = 0;
}
changeSlide.slideshows = []; // An array of arrays containing the data for each slideshow on the page
changeSlide.counter = 0; // this increments by one every time a slideshow finishes
changeSlide.delay = 3000; // this is the delay in milliseconds between slide transitions
changeSlide.fadeAmount = 0.05; // the is the degree of fade with each loop of the fader - visible = 1, hidden = 0, so 0.05 is a 5% step i.e. 20 steps for the full fade. The larger this number the quicker the transition.
changeSlide.init = false; // set to true when the slideshow has been initialised
/* THE DATA ITEMS THAT BELONG TO EACH SLIDESHOW
changeSlide.slideshows[i][0] = id of slide show on page
changeSlide.slideshows[i][1] = number of rotations of that slide show
changeSlide.slideshows[i][2] = array of html elements containing slide info
changeSlide.slideshows[i][3] = counter for each slide shown
changeSlide.slideshows[i][4] = true|false if slideshow is paused|active
changeSlide.slideshows[i][5] = true|false to determine whether the slide show starts with a composite slide
changeSlide.slideshows[i][6] = true|false to determine whether the slide show ends with a composite slide
*/

function initLastFade(i) {
	obj = document.getElementById("slideshow2-" + changeSlide.slideshows[i][0]);
	obj.innerHTML = document.getElementById("bbslideshowitem-composite").innerHTML;
	lastFadeIn.i = i;
	slideshowtimerID3 = setInterval("lastFadeIn()",25);
}

function lastFadeIn() {
	obj1 = "slideshow1-" + changeSlide.slideshows[lastFadeIn.i][0];
	obj2 = "slideshow2-" + changeSlide.slideshows[lastFadeIn.i][0];
	if (lastFadeIn.fade2 <= (1 + (2 * changeSlide.fadeAmount))) {
		changeOpacity(obj1, lastFadeIn.fade1);
		changeOpacity(obj2, lastFadeIn.fade2);
		lastFadeIn.fade1 -= changeSlide.fadeAmount;
		lastFadeIn.fade2 += changeSlide.fadeAmount;
	} else {
		document.getElementById(obj1).innerHTML = document.getElementById(obj2).innerHTML;
		clearInterval(slideshowtimerID3);
	}
}
lastFadeIn.fade1 = 1;
lastFadeIn.fade2 = 0;
lastFadeIn.i = 0;

function delayThenFade() {
	slideshowtimerID1 = 0;
	if (!slideshowtimerID2)
		slideshowtimerID2 = setInterval("doFade()",25);
}

function firstFadeIn() {
	if (changeSlide.init) {
		if (firstFadeIn.fade <= (1 + (2 * changeSlide.fadeAmount))) {
			for (var i = 0; i < changeSlide.slideshows.length; i++) {
//				debugData(i, false);
				obj = "slideshow1-" + changeSlide.slideshows[i][0];
				changeOpacity(obj, firstFadeIn.fade);
			}
			firstFadeIn.fade += changeSlide.fadeAmount;
		} else {
			for (var i = 0; i < changeSlide.slideshows.length; i++) {
				if (!changeSlide.slideshows[i][5])
					changeSlide.slideshows[i][3] = getNextItem(changeSlide.slideshows[i]);
			}
			clearInterval(slideshowtimerID1);
			slideshowtimerID1 = setTimeout("delayThenFade()",changeSlide.delay);
		}
	}
}
firstFadeIn.fade = 0;


var slideshowtimerID1, slideshowtimerID2, slideshowtimerID3;
var bbwebsite_existingonload = window.onload;
function initSlideShow() {
	if (bbwebsite_existingonload != null && typeof(bbwebsite_existingonload) == "function" && !initSlideShow.init) {
		bbwebsite_existingonload();
	}
	initSlideShow.init = true;
	if (changeSlide.slideshows.length) {
		for (var i = 0; i < changeSlide.slideshows.length; i++) {
			var obj = document.getElementById("slideshowholder-" + changeSlide.slideshows[i][0]);
			if (obj) {
// event handlers definitions
				if (obj.addEventListener) {
					obj.addEventListener("mouseover", slideCheck, true);
					obj.addEventListener("mouseout", slideCheck, true);
				} else if (document.attachEvent) {
					obj.attachEvent("onmouseover", slideCheck);
					obj.attachEvent("onmouseout", slideCheck);
				} else {
					obj.onmouseover = slideCheck;
					obj.onmouseout = slideCheck;
				}
				tmpslides = obj.getElementsByTagName("div"); // query the HTML to start setting up the data array
				var slides = [];
				for (var j = 0; j < tmpslides.length; j++) {
					if (tmpslides[j].id.indexOf("bbslideshowitem") > -1 && tmpslides[j].id.indexOf("bbslideshowitem-composite") == -1)
						slides = slides.concat(tmpslides[j]);
				}
				changeSlide.slideshows[i][2] = slides;
				changeSlide.slideshows[i][3] = 0; // counter for each slide shown
				changeSlide.slideshows[i][4] = false; // set true if the slideshow is paused
				if (changeSlide.slideshows[i][1]) { // if rotations set to 1 or more set up the slides
					if (changeSlide.slideshows[i][2].length > 1) { // more than one slide, so start the slideshow
						obj1 = document.getElementById("slideshow1-" + changeSlide.slideshows[i][0]);
						obj2 = document.getElementById("slideshow2-" + changeSlide.slideshows[i][0]);
						if (slides[0] && obj) {
							if (changeSlide.slideshows[i][5]) { // start with composite slide
								obj1.innerHTML = document.getElementById("bbslideshowitem-composite").innerHTML;
								obj2.innerHTML = slides[0].innerHTML;
							} else {
								obj1.innerHTML = slides[0].innerHTML;
								obj2.innerHTML = slides[1].innerHTML;
							}
						}
					} else { // only one slide, so just show it and stop
						var sobj = "slideshow1-" + changeSlide.slideshows[i][0];
						document.getElementById(sobj).innerHTML = changeSlide.slideshows[i][2][0].innerHTML;
						changeOpacity(sobj, 1);
						return;
					}
				} else { // rotatations set to zero, so pick a random image and stop
					if (changeSlide.slideshows[i][2] && changeSlide.slideshows[i][2].length) { // if there are any slides in the slideshow
						var n = Math.floor(changeSlide.slideshows[i][2].length * Math.random());
						randobj = "slideshow1-" + changeSlide.slideshows[i][0]
						document.getElementById(randobj).innerHTML = changeSlide.slideshows[i][2][n].innerHTML;
						changeOpacity(randobj, 1);
					}
					return;
				}
			} else
				return; // stops everything if there's an error rendering the slideshows HTML
		}
		changeSlide.init = true;
		slideshowtimerID1 = setInterval("firstFadeIn()",25);
	}
}
initSlideShow.init = false;
onload = initSlideShow;


