/**************************************************************** 
"bretteleben.de JavaScript Slideshow" - Version 20100412 
License: http://www.gnu.org/copyleft/gpl.html 
Author: Andreas Berger 
Customized by Dr. Uwe Zielinski
Copyright (c) 2010 Andreas Berger - andreas_berger@bretteleben.de 
Project page and Demo at http://www.bretteleben.de 
Last update: 2010-04-12 
*****************************************************************/ 
//*****parameters to set***** 
//into this array insert the paths of your pics. 
var def_imges=new Array ('pics/pic01.jpg', 'pics/pic02.jpg', 'pics/pic03.jpg', 'pics/pic04.jpg', 'pics/pic05.jpg'); 
var def_divid="slideshow"; //the id of the div container that will hold the slideshow 
var def_picwid=250; //set this to the width of your widest pic 
var def_pichei=353; //... and this to the height of your highest pic 
var def_backgr="#fff"; //set this to the background color you want to use for the slide-area 
//(for example the body-background-color) if your pics are of different size 
var def_sdur=3; //time to show a pic between fades in seconds 
var def_fdur=1; //duration of the complete fade in seconds 
var def_steps=20; //steps to fade from on pic to the next 
var def_startwhen="y"; //start automatically at pageload? set it to "y" for on and to "n" for off 
var def_shuffle="y"; //start with random image? set it to "y" for on and to "n" for off 
var def_showcontr="n"; //do you want to show controls? set it to "y" for on and to "n" for off 
//into this array insert the paths of your control-buttons or the text to display e.g. back,start,stop,fwrd. 
var def_contr=undefined;//new Array ('bwd.png', 'start.png', 'stop.png', 'fwd.png'); 
var def_has_desc="n"; // Array imges contains image descriptions "y"/"n". "p": Show image file name, if description is empty. 
//**************************************************************** 

//daisychain onload-events 
function daisychain(sl){if(window.onload) {var ld=window.onload;window.onload=function(){ld();sl();};}else{window.onload=function(){sl();};}} 

function be_slideshow(be_slideid,be_imges,be_divid,be_picwid,be_pichei,be_backgr,be_sdur,be_fdur,be_steps,be_startwhen, 
                      be_shuffle,be_showcontr,be_contr,be_has_desc){ 

//declarations and defaults 
  var slideid=(be_slideid)?be_slideid:"0"; 
  var imges=(be_imges)?be_imges:def_imges; 
  var divid=(be_divid)?be_divid:def_divid; 
  var picwid=(be_picwid)?be_picwid:def_picwid; 
  var pichei=(be_pichei)?be_pichei:def_pichei; 
  var backgr=(be_backgr)?be_backgr:def_backgr; 
  var sdur=(be_sdur)?be_sdur:def_sdur; 
  var fdur=(be_fdur)?be_fdur:def_fdur; 
  var steps=(be_steps)?be_steps:def_steps; 
  var startwhen=(be_startwhen)?be_startwhen:def_startwhen; 
      startwhen=(startwhen.toLowerCase()=="y")?1:0; 
  var shuffle=(be_shuffle)?be_shuffle:def_shuffle; 
      shuffle=(shuffle.toLowerCase()=="y")?1:0; 
  var showcontr=(be_showcontr)?be_showcontr:def_showcontr; 
      showcontr=(showcontr.toLowerCase()=="y")?1:0; 
  var has_desc=(be_has_desc)?be_has_desc:def_has_desc; 
  var contr=(be_contr)?be_contr:def_contr; 
  var ftim=fdur*1000/steps; 
  var stim=sdur*1000; 
  var emax=imges.length; 
  var self = this; 
  var stopit=1; 
  var startim=1; 
  var u=0; 
  var parr = new Array(); 
  var ptofade,pnext,factor,mytimeout; 
  var descriptions = new Array(); 
  var descidx; 
  var desc_img_if_no_desc; 
  
  if( has_desc=="y") 
  { 
    has_desc=1; 
    desc_img_if_no_desc=0; 
  } 
  else if( has_desc=="p") 
  { 
    has_desc=1; 
    desc_img_if_no_desc=10; 
  } 
  else 
  { 
    has_desc=0; 
    desc_img_if_no_desc=0; 
  } 

 // Extract image descriptions out of array of images 
  if( has_desc ) 
  { 
    var i; 
    for( i=0; i<imges.length; i++ ) 
    { 
      // copy description from array of images to array of descriptions 
      descriptions.push( imges[i+1] ); 
      // delete description out of array of images 
      imges.splice( i+1, 1 ); 

    } 
    
    emax=imges.length 
  } 

//check if there are at least 3 pictures, elswhere double the array 
  if(imges.length<=2){imges=imges.concat(imges);} 
//shuffle images if set 
  if(shuffle){var i;for(i=0;i<=Math.floor(Math.random()*imges.length);i++){imges.push(imges.shift());}} 
  
// set index of image description 
  this.b_set_descidx = function( offset ) 
  { 
    descidx = descidx + offset 
    if( descidx < 0 ) { descidx = emax-1 }; 
    if( descidx >= emax ) { descidx = 0 }; 
  } 

// get and format image description text 
  this.b_get_desc = function(p_desc_idx) 
  { 
    return (descriptions[p_desc_idx])?  descriptions[p_desc_idx] : "";
  }

//set image description in div 
  
//push images into array and get things going 
  this.b_myfade = function(){ 
    var a,idakt,paktidakt,ie5exep; 
    for(a=1;a<=emax;a++){ 
      idakt="img_"+slideid+"_"+a;paktidakt=document.getElementById(idakt); 
      ie5exep=new Array(paktidakt);parr=parr.concat(ie5exep); 
    } 
    if(startwhen){ 
      stopit=0; 
      mytimeout=setTimeout(function(){self.b_slide();},stim); 
    } 
  } 

//prepare current and next and trigger slide 
  this.b_slide = function(){ 
    clearTimeout(mytimeout); 
    u=0; 
    ptofade=parr[startim-1]; 
    if(startim<emax){pnext=parr[startim];} 
    else{pnext=parr[0];} 
    pnext.style.zIndex=1; 
    pnext.style.visibility="visible"; 
    pnext.style.filter="Alpha(Opacity=100)"; 
    try{pnext.style.removeAttribute("filter");} catch(err){} 
    pnext.style.MozOpacity=1; 
    pnext.style.opacity=1; 
    ptofade.style.zIndex=2; 
    ptofade.style.visibility="visible"; 
    ptofade.style.filter="Alpha(Opacity=100)"; 
    ptofade.style.MozOpacity=1; 
    ptofade.style.opacity=1; 
    factor=100/steps; 
    if(stopit=="0") 
    { 
      this.b_slidenow(); 
    } 
  } 

//one step forward 
  this.b_forw = function(){ 
    stopit=1; 
    clearTimeout(mytimeout); 
    ptofade=parr[startim-1]; 
    if(startim<emax){pnext=parr[startim];startim=startim+1;} 
    else{pnext=parr[0];startim=1;} 
    ptofade.style.visibility="hidden"; 
    ptofade.style.zIndex=1; 
    pnext.style.visibility="visible"; 
    pnext.style.zIndex=2; 
    self.b_set_descidx( +1 ); 
    self.b_slide(); 
  } 

//one step back 
  this.b_back = function(){ 
    stopit=1; 
    clearTimeout(mytimeout); 
    if(u==0){ //between two slides 
      ptofade=parr[startim-1]; 
      if(startim<emax){pnext=parr[startim];} 
      else{pnext=parr[0];} 
      
      pnext.style.visibility="hidden"; 
      ptofade.style.zIndex=1; 
      ptofade.style.visibility="visible"; 
      if(startim>=2){startim=startim-1;} 
      else{startim=emax;} 
      self.b_set_descidx( -1 ); 
      self.b_slide(); 
    } 
    else{ //whilst sliding 
      self.b_slide(); 
    } 
  } 

//slide as said, then give back 
  this.b_slidenow = function(){ 
    var check1,maxalpha,curralpha,desc_alpha;    
    
  // when half of the steps is done toggle from old to new description 
    if( u == Math.round(steps/2) ) 
    { 
      // temporarily set new description, but decrement desc_index again. desc_index 
      // will be incremented finally when slide finished without beeing interupted. 
      self.b_set_descidx( +1 ); 
      self.b_set_descidx( -1 ); 
    } 

    check1=ptofade.style.MozOpacity; 
    maxalpha=(100-factor*u)/100*105; 
    if(check1<=maxalpha/100){u=u+1;} 
    curralpha=100-factor*u; 
    ptofade.style.filter="Alpha(Opacity="+curralpha+")"; 
    ptofade.style.MozOpacity=curralpha/100; 
    ptofade.style.opacity=curralpha/100; 

  // curralpha is decreased from 100 to 0. 
  // 100 to 50: Fade out old description 
  //  50 to 0 : Fade in new description 
    if( curralpha > 50 ) 
    { 
     desc_alpha = ((curralpha-50)*2); 
  } 
  else 
    { 
     desc_alpha = 100-(curralpha*2); 
  } 
    
    if(u<steps){ //slide not finished 
      if(stopit=="0"){mytimeout=setTimeout(function(){self.b_slidenow();},ftim);} 
      else {this.b_slide();} 
    } 
    else{ //slide finished 
      // desc_index is now incremented finally when slide finished without beeing interupted by "stop". 
      self.b_set_descidx( +1 ); 
      
      if(startim<emax){ 
        ptofade.style.visibility="hidden"; 
        ptofade.style.zIndex=1; 
        pnext.style.zIndex=2; 
        startim=startim+1;u=0; 
        mytimeout=setTimeout(function(){self.b_slide();},stim); 
      } 
      else{ 
        ptofade.style.visibility="hidden"; 
        ptofade.style.zIndex=1; 
        pnext.style.zIndex=2; 
        startim=1;u=0; 
        mytimeout=setTimeout(function(){self.b_slide();},stim); 
      } 
    } 
  } 

//manual start 
  this.b_start= function(){ 
    if(stopit==1){ 
      stopit=0; 
      mytimeout=setTimeout(function(){self.b_slide();},0 /* Not stim. Start immediately when started manually */); 
    } 
  } 

//manual stop 
  this.b_stop= function(){ 
    clearTimeout(mytimeout); 
    stopit=1; 
    this.b_slide(); 
  } 

//insert css and images 
  this.b_insert= function(){ 
    var b, thestylid, thez, thevis, slidehei; 
    slidehei=pichei+25;
    var myhtml="<div style='width:"+picwid+"px;height:"+slidehei+"px;'>"; 
        myhtml+="<div style='position:absolute;width:"+picwid+"px;height:"+pichei+"px;'>"; 
    for(b=1;b<=emax;b++){ 
      thez=1;thevis='hidden'; 
      if(b<=1) {thez=2; thevis='visible';} 
      myhtml+="<div id='img_"+slideid+"_"+b+"' style='margin:0;padding:0;text-align:center;visibility:"+thevis+";z-index:"+thez+";position:absolute;left:0;top:0;width:"+picwid+"px;height:"+pichei+"px;background-color:"+backgr+";'>"; 
      myhtml+="<img src='"+imges[(b-1)]+"' style='vertical-align:middle;border:0;' alt=''/>";
      if(has_desc) {
	descidx=0; 
	myhtml+='<div class="slideshow_desc">'+self.b_get_desc(b-1)+'</div>';
      } 
      myhtml+="</div>"; 
    }
    myhtml+="</div>"; 
  //show controls 
    if(showcontr){ 
        myhtml+="<table border=0 cellspacing=0 width='100%'>"; 
        myhtml+="  <tr>"; 
	if(contr) {
	  for(b=1;b<=4;b++){ 
	    var check=contr[b-1].substring(contr[b-1].length-3).toLowerCase(); //check for buttons 
	    contr[b-1]=(check=="jpg"||check=="gif"||check=="png")?("<img src='"+contr[b-1]+"' style='border:none;' alt=''/>"):(contr[b-1]); 
	  }
	  myhtml+="    <td align='right'  valign='top'>"; 
	  myhtml+="     <div style='text-align:right;padding-top:"+(pichei+3)+"px;'>"; 
	  myhtml+="       <a href='javascript:be_"+slideid+".b_back();'  style='text-decoration:none'>"+contr[0]+"</a>&nbsp;"; 
	  myhtml+="       <a href='javascript:be_"+slideid+".b_start();' style='text-decoration:none'>"+contr[1]+"</a>&nbsp;"; 
	  myhtml+="       <a href='javascript:be_"+slideid+".b_stop();'  style='text-decoration:none'>"+contr[2]+"</a>&nbsp;"; 
	  myhtml+="       <a href='javascript:be_"+slideid+".b_forw();'  style='text-decoration:none'>"+contr[3]+"</a>"; 
	  myhtml+="     </div>"; 
	  myhtml+="    </td>"; 
	}
        myhtml+="  </tr>"; 
        myhtml+="</table>"; 
    }
    myhtml+="</div>"; 
    document.getElementById(divid).innerHTML=myhtml; 
    
    self.b_myfade(); 
  }

 //call autostart-function 
 daisychain(this.b_insert); 
}

