var oSlideShowData = new Object();
function slideshow_start(iSlideShowId, aDurations, iOffset)
{
	var oSlideShow = document.getElementById('slideshow_' + iSlideShowId);
	if ( oSlideShow ) {
		
		var oBackgrounds = slideshow_backgrounds(oSlideShow);
		var oSlides = slideshow_slides(oSlideShow);
		
		if ( oBackgrounds && oSlides && oBackgrounds.length > 0 && oSlides.length > 0 ) {
			
			oBackgrounds[0].style.display = 'block';
			oSlides[0].style.display = 'block';
			
			if ( aDurations.length > 1 && oBackgrounds.length > 1 && oSlides.length > 1 ) {
				
				iOffset = parseInt(iOffset, 10) || 0;
				var iInterval = Math.max(0, iOffset) + aDurations[0];
				oSlideShowData[iSlideShowId] = {'current': 0, 'durations': aDurations, 'margins': [], 'next': 1, 'open': false, 'queue': -1, 'timer': 0};
				oSlideShowData[iSlideShowId]['timer'] = window.setTimeout(function() { slideshow_advance(iSlideShowId); }, iInterval);
				
				var aButtons = slideshow_buttons(oSlideShow);
				if ( aButtons.length > 0 ) {
					aButtons[0].className += ' slideshow_current';
				}
				
			}
			
		}
		
	}
	return;
}
function slideshow_set(iSlideShowId, iSlideIndex)
{
	var oSlideShow = document.getElementById('slideshow_' + iSlideShowId);
	if ( oSlideShow && oSlideShowData[iSlideShowId] ) {
		
		var oSlides = slideshow_slides(oSlideShow);
		var iCurrent = oSlideShowData[iSlideShowId]['current'];
		
		if ( iSlideIndex >= 0 && iSlideIndex < oSlides.length ) {
			
			if ( oSlideShowData[iSlideShowId]['open'] ) {
				
				oSlideShowData[iSlideShowId]['queue'] = iSlideIndex;
				
			} else {
				
				window.clearTimeout(oSlideShowData[iSlideShowId]['timer']);
				if ( iSlideIndex == iCurrent ) {
					var iInterval = oSlideShowData[iSlideShowId]['durations'][iCurrent];
					oSlideShowData[iSlideShowId]['timer'] = window.setTimeout(function() { slideshow_advance(iSlideShowId); }, iInterval);
				} else {
					oSlideShowData[iSlideShowId]['next'] = iSlideIndex;
					slideshow_advance(iSlideShowId);
				}
				
			}
			
		}
		
	}
	return;
}
function slideshow_advance(iSlideShowId)
{
	var oSlideShow = document.getElementById('slideshow_' + iSlideShowId);
	if ( oSlideShow && oSlideShowData[iSlideShowId] ) {
		
		var iCurrent = oSlideShowData[iSlideShowId]['current'];
		var iNext = oSlideShowData[iSlideShowId]['next'];
		if ( iCurrent == iNext ) {
			return;
		}
		
		window.clearTimeout(oSlideShowData[iSlideShowId]['timer']);
		var oBackgrounds = slideshow_backgrounds(oSlideShow);
		var oSlides = slideshow_slides(oSlideShow);
		
		var oIndicators = slideshow_indicators(oSlideShow);
		if ( oIndicators ) {
			
			var aPosition1 = getPosition(oSlideShow);
			var aPosition2 = getPosition(oIndicators);
			var iLeft = parseInt(aPosition2[0], 10) - parseInt(aPosition1[0], 10);
			var iTop = parseInt(aPosition2[1], 10) - parseInt(aPosition1[1], 10);
			
			oIndicators.style.position = 'absolute';
			oIndicators.style.left = iLeft + 'px';
			oIndicators.style.top = iTop + 'px';
			
			oSlideShowData[iSlideShowId]['margins'] = getMargins(oIndicators);
			oIndicators.style.marginBottom = '0px';
			oIndicators.style.marginLeft = '0px';
			oIndicators.style.marginRight = '0px';
			oIndicators.style.marginTop = '0px';
			oIndicators.className += ' slideshow_nomargins';
			
		}
		
		var aButtons = slideshow_buttons(oSlideShow);
		if ( aButtons.length > 0 ) {
			aButtons[iCurrent].className = aButtons[iCurrent].className.replace(' slideshow_current', "");
			aButtons[iNext].className += ' slideshow_current';
		}
		
		oBackgrounds[iCurrent].style.display = 'block';
		oBackgrounds[iNext].style.display = 'block';
		oSlides[iCurrent].style.display = 'block';
		oSlides[iCurrent].style.position = 'absolute';
		oSlides[iCurrent].style.left = '0px';
		oSlides[iCurrent].style.top = '0px';
		oSlides[iNext].style.display = 'block';
		oSlides[iNext].style.position = 'absolute';
		oSlides[iNext].style.left = '0px';
		oSlides[iNext].style.top = '0px';
		
		setOpacity(oBackgrounds[iCurrent], 100);
		setOpacity(oBackgrounds[iNext], 0);
		setOpacity(oSlides[iCurrent], 100);
		setOpacity(oSlides[iNext], 0);
		
		oSlideShowData[iSlideShowId]['open'] = true;
		oSlideShowData[iSlideShowId]['timer'] = window.setTimeout(function() { slideshow_fade(iSlideShowId); }, 10);
		
	}
	return;
}
function slideshow_fade(iSlideShowId)
{
	var oSlideShow = document.getElementById('slideshow_' + iSlideShowId);
	if ( oSlideShow && oSlideShowData[iSlideShowId] ) {
		
		window.clearTimeout(oSlideShowData[iSlideShowId]['timer']);
		var oBackgrounds = slideshow_backgrounds(oSlideShow);
		var oSlides = slideshow_slides(oSlideShow);
		
		var iCurrent = oSlideShowData[iSlideShowId]['current'];
		var iCurrentOpacity = getOpacity(oSlides[iCurrent]);
		var iNext = oSlideShowData[iSlideShowId]['next'];
		var iNextOpacity = getOpacity(oSlides[iNext]);
		
		if ( iCurrentOpacity <= 5 || iNextOpacity >= 95 ) {
			
			var oIndicators = slideshow_indicators(oSlideShow);
			if ( oIndicators ) {
				
				oIndicators.style.position = 'relative';
				oIndicators.style.left = 'auto';
				oIndicators.style.top = 'auto';
				
				var aMargins = oSlideShowData[iSlideShowId]['margins'];
				oIndicators.style.marginBottom = aMargins[2];
				oIndicators.style.marginLeft = aMargins[3];
				oIndicators.style.marginRight = aMargins[1];
				oIndicators.style.marginTop = aMargins[0];
				
				var rReplace = new RegExp(' slideshow_nomargins', 'g');
				oIndicators.className = oIndicators.className.replace(rReplace, "");
				
			}
			
			oBackgrounds[iCurrent].style.display = 'none';
			oBackgrounds[iNext].style.display = 'block';
			oSlides[iCurrent].style.display = 'none';
			oSlides[iCurrent].style.position = 'relative';
			oSlides[iCurrent].style.left = 'auto';
			oSlides[iCurrent].style.top = 'auto';
			oSlides[iNext].style.display = 'block';
			oSlides[iNext].style.position = 'relative';
			oSlides[iNext].style.left = 'auto';
			oSlides[iNext].style.top = 'auto';
			
			setOpacity(oBackgrounds[iCurrent], 100);
			setOpacity(oBackgrounds[iNext], 100);
			setOpacity(oSlides[iCurrent], 100);
			setOpacity(oSlides[iNext], 100);
			
			oSlideShowData[iSlideShowId]['current'] = oSlideShowData[iSlideShowId]['next'];
			oSlideShowData[iSlideShowId]['next']++;
			if ( oSlideShowData[iSlideShowId]['next'] >= oSlides.length ) {
				oSlideShowData[iSlideShowId]['next'] = 0;
			}
			
			oSlideShowData[iSlideShowId]['open'] = false;
			if ( oSlideShowData[iSlideShowId]['queue'] >= 0 ) {
				
				var iSlideIndex = oSlideShowData[iSlideShowId]['queue'];
				oSlideShowData[iSlideShowId]['queue'] = -1;
				slideshow_set(iSlideShowId, iSlideIndex);
				
			} else {
				
				var iInterval = oSlideShowData[iSlideShowId]['durations'][iNext];
				oSlideShowData[iSlideShowId]['timer'] = window.setTimeout(function() { slideshow_advance(iSlideShowId); }, iInterval);
				
			}
			
		} else {
			
			iCurrentOpacity -= 5;
			setOpacity(oBackgrounds[iCurrent], iCurrentOpacity);
			setOpacity(oSlides[iCurrent], iCurrentOpacity);
			
			iNextOpacity += 5;
			setOpacity(oBackgrounds[iNext], iNextOpacity);
			setOpacity(oSlides[iNext], iNextOpacity);
			
			oSlideShowData[iSlideShowId]['timer'] = window.setTimeout(function() { slideshow_fade(iSlideShowId); }, 10);
			
		}
		
	}
	return;
}
function slideshow_backgrounds(oSlideShow)
{
	var oDivs = oSlideShow.getElementsByTagName('div');
	var aSlides = new Array();
	for (var i = 0; i < oDivs.length; i++) {
		if ( /\bslideshow_slide_bg\b/.test(oDivs[i].className) ) {
			aSlides.push(oDivs[i]);
		}
	}
	return aSlides;
}
function slideshow_buttons(oSlideShow)
{
	var oDivs = oSlideShow.getElementsByTagName('div');
	var aIndicators = new Array();
	for (var i = 0; i < oDivs.length; i++) {
		if ( /\bslideshow_indicator\b/.test(oDivs[i].className) ) {
			aIndicators.push(oDivs[i]);
		}
	}
	return aIndicators;
}
function slideshow_indicators(oSlideShow)
{
	var oDivs = oSlideShow.getElementsByTagName('div');
	var oIndicators = null;
	for (var i = 0; i < oDivs.length; i++) {
		if ( /\bslideshow_indicators\b/.test(oDivs[i].className) ) {
			oIndicators = oDivs[i];
			break;
		}
	}
	return oIndicators;
}
function slideshow_slides(oSlideShow)
{
	var oDivs = oSlideShow.getElementsByTagName('div');
	var aSlides = new Array();
	for (var i = 0; i < oDivs.length; i++) {
		if ( /\bslideshow_slide\b/.test(oDivs[i].className) ) {
			aSlides.push(oDivs[i]);
		}
	}
	return aSlides;
}
function getOpacity(oElement)
{
	iOpacity = 100;
	if ( oElement.style.opacity ) {
		iOpacity = parseFloat(oElement.style.opacity) * 100;
	} else if ( oElement.style.MozOpacity ) {
		iOpacity = parseFloat(oElement.style.MozOpacity) * 100;
	} else if ( oElement.style.KhtmlOpacity ) {
		iOpacity = parseFloat(oElement.style.KhtmlOpacity) * 100;
	} else if ( oElement.style.filters ) {
		if ( oElement.style.filters.alpha ) {
			iOpacity = parseInt(oElement.style.filters.alpha, 10);
		}
	}
	return iOpacity;
}
function setOpacity(oElement, iOpacity)
{
	oElement.style.opacity = (iOpacity / 100).toString();
	oElement.style.MozOpacity = (iOpacity / 100).toString();
	oElement.style.KhtmlOpacity = (iOpacity / 100).toString();
	oElement.style.filter = ( iOpacity < 100 ) ? 'alpha(opacity=' + iOpacity.toString() + ')' : "";
	return;
}
function getPosition(oNode, iHorz, iVert)
{
	var sHorz = 0;
	var sVert = 0;
	if ( typeof iHorz == 'number' ) {
		sHorz = iHorz;
	}
	if ( typeof iVert == 'number' ) {
		sVert = iVert;
	}
	if ( oNode.offsetParent ) {
		while ( oNode.offsetParent ) {
			sHorz += oNode.offsetLeft;
			sVert += oNode.offsetTop;
			oNode = oNode.offsetParent;
		}
		sHorz += oNode.offsetLeft;
		sVert += oNode.offsetTop;
	} else if ( oNode.x && oNode.y ) {
		sHorz += oNode.x;
		sVert += oNode.y;
	}
	return [sHorz.toString() + 'px', sVert.toString() + 'px'];
}
function getMargins(oElement)
{
	var aMargins = [
		getStyle(oElement, 'marginTop'),
		getStyle(oElement, 'marginRight'),
		getStyle(oElement, 'marginBottom'),
		getStyle(oElement, 'marginLeft')
	];
	return aMargins;
}
function getStyle(oElement, sProperty)
{
	if ( document.defaultView && document.defaultView.getComputedStyle ) {
		var sValue = document.defaultView.getComputedStyle(oElement, "")[sProperty];
	} else if ( oElement.currentStyle ) {
		var sValue = oElement.currentStyle[sProperty];
	} else {
		var sValue = null;
	}
	return sValue;
}

