/***************Here's the init stuff***************/


Event.observe(window, 'load',
              function() { initShow() }
             );


function initShow(){
  loadShow('slideShow','controlBar','playBar');
}
var prevText = "< Prev";
var playText = "Play";
var stopText = "Stop";
var nextText = "Next >";

var slideWidth = 250;
var slideHeight = 250;
var defaultSlideLength = 5000;
var defaultTStepNum = 10;
var defaultTStepLength = 50;  
var defaultSlideDelay = 0;
var changeOverflow = true;
var useTextButtons = false;
var useSpanButtons = false;
/**********************Here's the real code*************/

var pastInit = false;

var transitions = {};

transitions["flipIn"] = "flip(targetIndex,false);";
transitions["fadeIn"] = "moveFade(targetIndex,false,0,0,1,0,0,0,0,0,0,0,stepNum,stepLength);";

transitions["fadeNIn"] = "moveFade(targetIndex,false,0,0,1,0,0,0,-slideHeight,-slideHeight,0,0,stepNum,stepLength);";
transitions["fadeEIn"] = "moveFade(targetIndex,false,0,0,1,slideWidth,slideWidth,0,0,0,0,0,stepNum,stepLength);";
transitions["fadeSIn"] = "moveFade(targetIndex,false,0,0,1,0,0,0,slideHeight,slideHeight,0,0,stepNum,stepLength);";
transitions["fadeWIn"] = "moveFade(targetIndex,false,0,0,1,-slideWidth,-slideWidth,0,0,0,0,0,stepNum,stepLength);";

transitions["fadeNEIn"] = "moveFade(targetIndex,false,0,0,1,slideWidth,slideWidth,0,-slideHeight,-slideHeight,0,0,stepNum,stepLength);";
transitions["fadeNWIn"] = "moveFade(targetIndex,false,0,0,1,-slideWidth,-slideWidth,0,-slideHeight,-slideHeight,0,0,stepNum,stepLength);";
transitions["fadeSWIn"] = "moveFade(targetIndex,false,0,0,1,-slideWidth,-slideWidth,0,slideHeight,slideHeight,0,0,stepNum,stepLength);";
transitions["fadeSEIn"] = "moveFade(targetIndex,false,0,0,1,slideWidth,slideWidth,0,slideHeight,slideHeight,0,0,stepNum,stepLength);";

transitions["slideNIn"] = "moveFade(targetIndex,false,1,1,1,0,0,0,-slideHeight,-slideHeight,0,0,stepNum,stepLength);";
transitions["slideEIn"] = "moveFade(targetIndex,false,1,1,1,slideWidth,slideWidth,0,0,0,0,0,stepNum,stepLength);";
transitions["slideSIn"] = "moveFade(targetIndex,false,1,1,1,0,0,0,slideHeight,slideHeight,0,0,stepNum,stepLength);";
transitions["slideWIn"] = "moveFade(targetIndex,false,1,1,1,-slideWidth,-slideWidth,0,0,0,0,0,stepNum,stepLength);";

transitions["slideNEIn"] = "moveFade(targetIndex,false,1,1,1,slideWidth,slideWidth,0,-slideHeight,-slideHeight,0,0,stepNum,stepLength);";
transitions["slideNWIn"] = "moveFade(targetIndex,false,1,1,1,-slideWidth,-slideWidth,0,-slideHeight,-slideHeight,0,0,stepNum,stepLength);";
transitions["slideSWIn"] = "moveFade(targetIndex,false,1,1,1,-slideWidth,-slideWidth,0,slideHeight,slideHeight,0,0,stepNum,stepLength);";
transitions["slideSEIn"] = "moveFade(targetIndex,false,1,1,1,slideWidth,slideWidth,0,slideHeight,slideHeight,0,0,stepNum,stepLength);";




transitions["flipOut"] = "flip(targetIndex,true);";
transitions["fadeOut"] = "moveFade(targetIndex,true,1,1,0,0,0,0,0,0,0,0,stepNum,stepLength);";

transitions["fadeSOut"] = "moveFade(targetIndex,true,1,1,0,0,0,0,0,0,slideHeight,0,stepNum,stepLength);";
transitions["fadeWOut"] = "moveFade(targetIndex,true,1,1,0,0,0,-slideWidth,0,0,0,0,stepNum,stepLength);";
transitions["fadeNOut"] = "moveFade(targetIndex,true,1,1,0,0,0,0,0,0,-slideHeight,0,stepNum,stepLength);";
transitions["fadeEOut"] = "moveFade(targetIndex,true,1,1,0,0,0,slideWidth,0,0,0,0,stepNum,stepLength);";

transitions["fadeSWOut"] = "moveFade(targetIndex,true,1,1,0,0,0,-slideWidth,0,0,slideHeight,0,stepNum,stepLength);";
transitions["fadeSEOut"] = "moveFade(targetIndex,true,1,1,0,0,0,slideWidth,0,0,slideHeight,0,stepNum,stepLength);";
transitions["fadeNWOut"] = "moveFade(targetIndex,true,1,1,0,0,0,-slideWidth,0,0,-slideHeight,0,stepNum,stepLength);";
transitions["fadeNEOut"] = "moveFade(targetIndex,true,1,1,0,0,0,slideWidth,0,0,-slideHeight,0,stepNum,stepLength);";

transitions["slideSOut"] = "moveFade(targetIndex,true,1,1,1,0,0,0,0,0,slideHeight,0,stepNum,stepLength);";
transitions["slideWOut"] = "moveFade(targetIndex,true,1,1,1,0,0,-slideWidth,0,0,0,0,stepNum,stepLength);";
transitions["slideNOut"] = "moveFade(targetIndex,true,1,1,1,0,0,0,0,0,-slideHeight,0,stepNum,stepLength);";
transitions["slideEOut"] = "moveFade(targetIndex,true,1,1,1,0,0,slideWidth,0,0,0,0,stepNum,stepLength);";

transitions["slideSWOut"] = "moveFade(targetIndex,true,1,1,1,0,0,-slideWidth,0,0,slideHeight,0,stepNum,stepLength);";
transitions["slideSEOut"] = "moveFade(targetIndex,true,1,1,1,0,0,slideWidth,0,0,slideHeight,0,stepNum,stepLength);";
transitions["slideNWOut"] = "moveFade(targetIndex,true,1,1,1,0,0,-slideWidth,0,0,-slideHeight,0,stepNum,stepLength);";
transitions["slideNEOut"] = "moveFade(targetIndex,true,1,1,1,0,0,slideWidth,0,0,-slideHeight,0,stepNum,stepLength);";







var slideIds;
var curSlideIndex = 0;
var maxSlideIndex;
var ssElem;
var cbElem;
var isRunning = false;
var csTimerId; //this is the timerId that's set to trigger the next slide when this one is done
var otherTimeId;

function loadShow(slideShow,controlBar,playBar){
  if(pastInit){
    return;
      }  
  pastInit = true;  
  ssElem = document.getElementById(slideShow);
  cbElem = document.getElementById(controlBar);
  pbElem = document.getElementById(playBar);
  
  //var slides = getElementsByClassName('slide');
  var slides = $$('.slide');  
  
  slideIds = new Array(slides.length);
  
  
  for(var i=0; i<slides.length; i++){
    var slide = slides[i];
    if(slide.id==null || slide.id==''){
      slide.id='s'+i;
    }
    slideIds[i] = slide.id;
    if(i==0){
      
      slide.addClassName('curSlide');
    }
    maxSlideIndex = i;
    
    if(cbElem!=null){
      buttonElem = document.createElement('a');
      buttonElem.href = 'javascript:showSlideFromClick('+i+');';
      
      if(i==0){
        buttonElem.className='sb curSb';
      }else{
        buttonElem.className='sb';
      }
      buttonElem.slideIndex = i;
      buttonElem.id='sb_'+slide.id;
      cbElem.appendChild(buttonElem);
      if(useTextButtons){
        var buttonText = slide.getAttribute("buttonText");
        buttonElem.appendChild(document.createTextNode(buttonText));
      }else if(useSpanButtons){
        var buttonId = slide.getAttribute("buttonId");
        buttonElem.appendChild(document.getElementById(buttonId));
      }
      //addEvent(buttonElem.id,'click',showSlide);
    }
  }
  
  if(pbElem!=null){
    buttonElem = document.createElement('a');
    buttonElem.href = 'javascript:showPrevSlide();';
    buttonElem.className='sbp';
    buttonElem.id='sb_prev';
    buttonElem.appendChild(document.createTextNode(prevText));
    pbElem.appendChild(buttonElem);
    
    buttonElem = document.createElement('a');
    buttonElem.href = 'javascript:stopSlides();';
    buttonElem.className='sbp';
    buttonElem.id='sb_stop';
    buttonElem.appendChild(document.createTextNode(stopText));
    pbElem.appendChild(buttonElem);
    
    buttonElem = document.createElement('a');
    buttonElem.href = 'javascript:playSlides();';
    buttonElem.className='sbp';
    buttonElem.id='sb_play';
    buttonElem.appendChild(document.createTextNode(playText));
    pbElem.appendChild(buttonElem);
    
    buttonElem = document.createElement('a');
    buttonElem.href = 'javascript:showNextSlide();';
    buttonElem.className='sbp';
    buttonElem.id='sb_next';
    buttonElem.appendChild(document.createTextNode(nextText));
    pbElem.appendChild(buttonElem);
  }
  var firstSlideTime = getSlideTime(0);
  isRunning=true;
  otherTimerId = setTimeout("showNextSlide()",firstSlideTime);
  
}

function stopSlides(){
  isRunning=false;
  clearTimeout(otherTimerId);
  clearTimeout(csTimerId);
}

function playSlides(){
  isRunning=true;
  showNextSlide();
}

function showSlide(e){
  targetId = getTargetElement(e).id;
  targetIndex = document.getElementById(targetId).slideIndex;
  showSlideByIndex(targetIndex);  
}

function showNextSlide(){
  if(curSlideIndex==maxSlideIndex){
    showSlideByIndex(0);
  }else{
    showSlideByIndex(curSlideIndex+1);
  }
}

function showPrevSlide(){
  if(curSlideIndex==0){
    showSlideByIndex(maxSlideIndex);
  }else{
    showSlideByIndex(curSlideIndex-1);
  }
}



function showSlideFromClick(targetIndex){
  stopSlides();
  showSlideByIndex(targetIndex);
}

function showSlideByIndex(targetIndex){
  if(targetIndex==curSlideIndex){
    return;
      }
  oldSlide = document.getElementById(slideIds[curSlideIndex]);
  newSlide = document.getElementById(slideIds[targetIndex]);
  oldTransName = oldSlide.getAttribute("transOut");
  oldTStepNum = oldSlide.getAttribute("tOStepNum");
  oldTStepLength = oldSlide.getAttribute("tOStepLength");
  
  newTransName = newSlide.getAttribute("transIn");
  newTStepNum = newSlide.getAttribute("tIStepNum");
  newTStepLength = newSlide.getAttribute("tIStepLength");
  newTransDelay = newSlide.getAttribute("inDelay");
  
  if(oldTStepNum==null || oldTStepNum=='' || oldTStepNum<0){
    oldTStepNum=defaultTStepNum;
  }
  
  if(oldTStepLength==null || oldTStepLength=='' || oldTStepLength<0){
    oldTStepLength=defaultTStepLength;
  }
  
  if(newTStepNum==null || newTStepNum=='' || newTStepNum<0){
    newTStepNum=defaultTStepNum;
  }
  
  if(newTStepLength==null || newTStepLength=='' || newTStepLength<0){
    newTStepLength=defaultTStepLength;
  }
  
  
  if(oldTransName==null || oldTransName==''){
    oldTransName = 'fadeOut';
  }
  
  if(newTransName==null || newTransName==''){
    newTransName = 'fadeIn';
  }
  
  if(newTransDelay==null || newTransDelay==''){
    newTransDelay=defaultSlideDelay;
  }
  oldTrans = transitions[oldTransName];
  newTrans = transitions[newTransName];
  
  if(oldTrans==null || oldTrans==''){
    oldTrans = transitions["fadeOut"];
  }
  
  if(newTrans==null || newTrans==''){
    newTrans = transitions["fadeIn"];
  }
  
  oldTrans = oldTrans.replace("targetIndex",curSlideIndex);
  oldTrans = oldTrans.replace("stepNum",oldTStepNum);
  oldTrans = oldTrans.replace("stepLength",oldTStepLength);  
  
  newTrans = newTrans.replace("targetIndex",targetIndex);
  newTrans = newTrans.replace("stepNum",newTStepNum);
  newTrans = newTrans.replace("stepLength",newTStepLength);
  
  //alert(oldTrans + " " + newTrans);
  
  eval(oldTrans);
  otherTimerId = setTimeout("eval(newTrans)",newTransDelay);
  //;
  //remClass(oldSlide,'curSlide');
  //moveFade(curSlideIndex,true,1,1,0,0,0,400,0,0,400,0,10,50);
  //moveFade(targetIndex,false,0,0,1,400,400,0,400,400,0,0,10,50);
  //addClass(newSlide,'curSlide');
  curSlideIndex = targetIndex;
}

function flip(targetIndex,isTransOut){
  if(isTransOut){
    try{
      $(slideIds[targetIndex]).removeClassName('curSlide');
    }catch(err){;}
    try{
      $('sb_'+slideIds[targetIndex]).removeClassName('curSb');  
    }catch(err){;};
  }else{
    try{
      $(slideIds[targetIndex]).addClassName('curSlide');
    }catch(err){;}
    try{
      $('sb_'+slideIds[targetIndex]).addClassName('curSb');
    }catch(err){;};
    document.getElementById(slideIds[targetIndex]).style.opacity=0.99;
    document.getElementById(slideIds[targetIndex]).style.filter="alpha(opacity="+99+")";
    document.getElementById(slideIds[targetIndex]).style.top=0;
    document.getElementById(slideIds[targetIndex]).style.left=0;
    
    if(changeOverflow){
      ssElem.style.overflow='auto';
    }
    slideTime = getSlideTime(targetIndex);
    clearTimeout(csTimerId);
    if(isRunning){
      csTimerId = setTimeout("showNextSlide()",slideTime);
    }
  }
}

function getSlideTime(targetIndex){
  st = document.getElementById(slideIds[targetIndex]).getAttribute("displayLength");
  
  if(st==null || st=='' || st < 0){
    st=defaultSlideLength;
  }else if(st==0){
    st=1;
  }
  return st;
}

function moveFade(targetIndex,isTransOut,curOpat,startOpat,endOpat,curX,startX,endX,curY,startY,endY,curStep,numSteps,delay){
  //alert(curStep + ' ' + numSteps);
  if(startOpat==1)
    startOpat = 0.99;
  
  if(endOpat==1)
    endOpat = 0.99;
  
  if(curStep >= numSteps){
    if(isTransOut){
      try{
        $(slideIds[targetIndex]).removeClassName('curSlide');
      }catch(err){;}
      try{
        $('sb_'+slideIds[targetIndex]).removeClassName('curSb');
      }catch(err){;};
    }else{
      if(changeOverflow){
        //alert('about to set overflow to auto');
        ssElem.style.overflow='auto';
        //alert('just to set overflow to auto');  
      }
      slideTime = getSlideTime(targetIndex);
      clearTimeout(csTimerId);
      if(isRunning){
        csTimerId = setTimeout("showNextSlide()",slideTime);
      }
    }
    ;//do nothing
  }else{
    if(changeOverflow){
      ssElem.style.overflow='hidden';
    }
    try{
      $(slideIds[targetIndex]).addClassName('curSlide');
    }catch(err){;};
    try{
      $d('sb_'+slideIds[targetIndex]).addClassName('curSb');
    }catch(err){;};
    opatStep = (endOpat - startOpat) / numSteps;
    curOpat = curOpat + opatStep;
    document.getElementById(slideIds[targetIndex]).style.opacity = curOpat;
    document.getElementById(slideIds[targetIndex]).style.filter="alpha(opacity="+curOpat * 100+")";
    
    xStep = (endX - startX) / numSteps;
    curX = curX + xStep;
    document.getElementById(slideIds[targetIndex]).style.left = curX+'px';
    
    yStep = (endY - startY) / numSteps;
    curY = curY + yStep;
    document.getElementById(slideIds[targetIndex]).style.top = curY+'px';
    
    curStep += 1;
    otherTimerId = setTimeout("moveFade("+targetIndex+","+isTransOut+","+curOpat+","+startOpat+","+endOpat+","+curX+","+startX+","+endX+","+curY+","+startY+","+endY+","+curStep+","+numSteps+","+delay+")",delay);
  }    
}

