/* JavaScript written by Joshua A. S. Allen on 8/2/10

SlaphappyGeeks.com */

var slideImage=null,
slideTitle=null,
slideImageID='SLIDE_IMAGE',
slideTitleID='SLIDE_TITLE',
slideImagePath='/dbPix/',
slideWaitTime=5000,
slideFadeOutTime=2000,
slideFadeInTime=2000,
slideTimeoutID=null,
slideAutoStartID=null,
slideImageIndex=0,
slideImageOnloadSet=false,
slideShowOn=false,
slideImages=[],
slideImageSizes=[],
slideTitles=[];

function preloadNextSlide()
{// Preload next graphic.
if(slideImageIndex<(slideImages.length-1)){
	var img=new Image();
	img.src=slideImagePath+slideImages[slideImageIndex+1];}}

function setSlideOnload()
{// Set slide image onload handler once.
if(!slideImageOnloadSet){	
	$(slideImage).bind('load',
		// onload handler.
		function()
		{// Set size so jQuery will know how to resize.
		slideImage.style.width=(slideImage.width=getSlideSize()[0])+'PX';
		slideImage.style.height=(slideImage.height=getSlideSize()[1])+'PX';
		$(slideImage).
		show(
			slideFadeInTime,
			// Callback when image is fullsize.
			function()
			{// Set width, height and opacity in case jQuery didn't.
			slideImage.width=getSlideSize()[0];
			slideImage.height=getSlideSize()[1];
			slideImage.style.opacity=1.0;
			// If in slideshow, set timeout for next slide.
			if(slideShowOn){
				slideTimeoutID=window.setTimeout(loadNextSlide,slideWaitTime);
				preloadNextSlide();}});
		}
	);
	slideImageOnloadSet=true;}}

function cancelSlideshow()
{// Cancel slideshow and jQuery animations.
slideShowOn=false;
if(slideTimeoutID!=null){
	window.clearTimeout(slideTimeoutID);
	slideTimeoutID=null;}
// Stop auto-start.
if(slideAutoStartID!=null){
	window.clearTimeout(slideAutoStartID);
	slideAutoStartID=null;}
if(getSlideImage()){
	$(slideImage).stop();}}

function getSlideImage()
{// Get slide image by reference or id.
return slideImage=slideImage?slideImage:document.getElementById(slideImageID);}

function getSlideTitle()
{// Get slide title by reference or id.
return slideTitle=slideTitle?slideTitle:document.getElementById(slideTitleID);}

function getSlideSize()
{// Returns array containing image width (index 0) and height (index 1).
return slideImageSizes[slideImageIndex];}

function forceLoadSlide(i)
{// Force a slide to load.
cancelSlideshow();
return loadSlide(i);}

function loadSlide(i)
{// Loads slide by index i.
if(!slideImages.length){
	return;}
if(getSlideImage()){
	$(slideImage).
	stop().
	hide(slideFadeOutTime,
		function(){
			setSlideOnload();
			// Set slide src.
			slideImage.src=slideImagePath+slideImages[slideImageIndex=i];
			if(getSlideTitle()){
				slideTitle.innerHTML=slideTitles[i];}
	});}
return undefined;}

function loadNextSlide()
{// Loads next slide.
return loadSlide((slideImageIndex+1)%slideImages.length);}

function loadPrevSlide()
{// Loads previous slide.
return loadSlide(slideImageIndex>0?slideImageIndex-1:slideImages.length-1);}

function startSlideshow()
{// Starts slideshow from beginning.
cancelSlideshow();
slideShowOn=true;
return slideImageIndex==0?loadNextSlide():loadSlide(0);}

function pauseSlideshow()
{// Pause slideshow.
cancelSlideshow();}

function continueSlideshow()
{// Continue slideshow.;
if(slideShowOn){
	return undefined;}
cancelSlideshow();
slideShowOn=true;
return loadNextSlide();}

function autoStartSlideshow(delay)
{// Auto-start slideshow after delay milliseconds.
if(!slideShowOn&&slideImageIndex==0){
	slideAutoStartID=window.setTimeout(
		function(){
			slideAutoStartID=null;
			startSlideshow();},arguments.length?delay:slideWaitTime);}
}
