// Should we allow transitions?
allowTrans = 1;
// Determine if the slides are ready for manual transition
sliderReady = 0;

 function addLoadEvent(func) {
	  // to handle bootstrap stack
	  var oldonload = window.onload;
	  if (typeof window.onload != 'function') {
	    window.onload = func;
	  } else {
	    window.onload = function() {
	      if (oldonload) {
	        oldonload();
	      }
	      func();
	    }
	  }
	}	
	
addLoadEvent(hpSlidesFader);

function hpSlidesFader(){
    /* prepairSlides() counts slide elements and displays buttons and slide indicator */
    prepairSlides();
    /* buttonAsignment() attaches functions to buttons to control slideshow */    
    buttonAssignment();
    /* restartTimer() sets the value of the timeleft variable */ 
    restartTimer();
    /* startTimer() initiates interval calls to countdown every xSecond, value set in function */
    startTimer();
    /* first slide slott in array defined here */
    slideNumber = 0;
	/* We should now be ready to allow manual transitions... */
	sliderReady = 1;
}

function buttonAssignment(){
     /* block of general controllers */
     $('pause').onclick = pauseShow;
     $('prev').onclick = direction;
     $('next').onclick = direction;
}

function prepairSlides(layout){   
    /* gather all div elements with class name slide into an array */
    slides = getElementsByClassName(document, "div", "slide");
	
    /* controlers are hidden via css stylesheet and not turned on untill the javascript is called */
    $('controlButtons').style.display = "block";
}

function getElementsByClassName(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)
}

function restartTimer(){
	// use var transTime assingned on template pages to control 
	// length between transitions - V.Einwohner (02/28/2007)
    //timeLeft = 4.75;
	timeLeft = transTime;
}

function startTimer(){
    xSecond = 1;
    sliderTime = setInterval("countDown();", xSecond * 1000);
}

function countDown(){
    timeLeft --;
    if(timeLeft < 1){
        restartTimer();
        direction();
        }
}
    
function pauseShow(){
	// use vars playbtnCtrl & pausebtnCtrl assingned on template pages
	// to control which buttons gets displayed - V.Einwohner (12/21/2007)
    switch(this.id){
        case 'pause':
            $('playbutton').src = playbtnCtrl;
            clearInterval(sliderTime);
            $('pause').id = "play";
            $('play').onclick = pauseShow;
        break;
        case 'play':
            $('playbutton').src = pausebtnCtrl;
            $('play').id = "pause";
            $('pause').onclick = pauseShow;
            startTimer();        
        break;
    }
    return false;
}
    
function direction(){
	if (allowTrans==1)
	{
	    activeSlideNumber = slideNumber;
	    switch(this.id){
	        case "prev":
	            slideNumber --;
				allowTrans=0; 
	        break;
	        case "next":
	            slideNumber ++;
				allowTrans=0;        
	        break;
	        default: 
	            slideNumber ++;
	        }
	
	    if(slideNumber > slides.length-1)
	           slideNumber = 0;
	    if(slideNumber < 0)
	           slideNumber = slides.length-1;
	
	    callSlide(slideNumber, activeSlideNumber);
	}
    return false;
}
    
function callSlide(newSlide, formerSlide){
	if (allowTrans==1)
	{
		allowTrans = 0;
		var fadeInDur;
		var fadeOutDur;
		
		// MOD - What type of fade to use?
		// Variable assigned on template pages.
		// - V.Einwohner (9/23/2008)
		switch(fadeType)
		{
			case "cross":
				$('fadeLayer').innerHTML = slides[formerSlide].innerHTML;
				fadeInDur = 0.7;
				fadeOutDur = 0.6;
				break;
			case "fade":
				fadeInDur = 0.3;
				fadeOutDur = 0.3;
				break;
			default:
				$('fadeLayer').innerHTML = slides[formerSlide].innerHTML;
				fadeInDur = 0.7;
				fadeOutDur = 0.6;
		}
		
		
		Effect.Appear($('fadeLayer'),
	        {  duration: fadeInDur,
	           afterFinishInternal: function(){
	            slides[formerSlide].style.display = "none";
	            slides[newSlide].style.display = "block";
	            Effect.Fade($('fadeLayer'),{duration: fadeOutDur, afterFinish: function(){allowTrans = 1;} }); }
	        });
	}
	else
	{
		slides[formerSlide].style.display = "none";
	    slides[newSlide].style.display = "block";
		allowTrans = 1;
	}
    restartTimer();
}       

function manualSlide(manslide){
    if (allowTrans==1 && sliderReady==1)
	{
		slides.each(function(item){item.style.display = "none";});
	    activeSlide = manslide;
	    slides[activeSlide].style.display = "block";
	    slideNumber = activeSlide;
	    restartTimer();
	    return false;
	}
}