function SlideShow(ssd,id)
{
this.start=function()
{
if(this.autoMode)return;
this.autoMode=true;
this.autoAdvance();
};
this.autoAdvance=function()
{
if(this.currentSlide>=0 && this.currentSlide<this.slides.length)this.slides[this.currentSlide].element.style.display='none';
this.currentSlide++;
if(this.currentSlide==this.slides.length)
{
if(this.params.loop)this.currentSlide=0;
else return this.autoStop();
}
if(this.updateNewSlide())this.advanceTimer=setTimeout('SlideShow.advance('+this.id+')',this.slides[this.currentSlide].params.delay);
return;
};
this.autoStop=function()
{
this.autoMode=false;
if(this.advanceTimer)clearTimeout(this.advanceTimer);
return;
};
this.updateNewSlide=function()
{
if(this.currentSlide > this.slides.length)return false;
this.slides[this.currentSlide].element.style.display='block';
if(this.params.controlToc && !this.params.controlToc.options[this.currentSlide].selected)
this.params.controlToc.options[this.currentSlide].selected=true;
if(this.params.controlCounter)this.params.controlCounter.firstChild.nodeValue=(this.currentSlide+1)+'/'+this.slides.length;
return true;
};
this.goToSlide=function(slideNum)
{
if(this.autoMode)this.autoStop();
if(this.currentSlide>=0 && this.currentSlide<this.slides.length)this.slides[this.currentSlide].element.style.display='none';
var newSlide=slideNum;
if(newSlide<0)newSlide=this.params.loop?this.slides.length-1:0;
if(newSlide>=this.slides.length)newSlide=this.params.loop?0:this.slides.length-1;
this.currentSlide=newSlide;
this.updateNewSlide();
return;
};
this.id=id;
this.container=ssd;
this.currentSlide=-1;
this.autoMode=false;
this.advanceTimer=null;
this.controlEventHandlers={controlStart:{event:'click',listener:SlideShow.controlStartListener}, 
controlStop:{event:'click',listener:SlideShow.controlStopListener}, 
controlToc:{event:'change',listener:SlideShow.controlTocListener}, 
controlNext:{event:'click',listener:SlideShow.controlNextListener}, 
controlPrevious:{event:'click',listener:SlideShow.controlPreviousListener}, 
controlHome:{event:'click',listener:SlideShow.controlHomeListener}, 
controlEnd:{event:'click',listener:SlideShow.controlEndListener}};
this.params=new Array();
SlideShow.parseParameters(this.params,SlideShow.ssOptDefs,SlideShow.ssDefOptStr);
SlideShow.parseParameters(this.params,SlideShow.ssOptDefs,ssd.getAttribute('slideshow'));
for(o in this.params)
{
if(/control/i.test(o))
{
if(/null/i.test(this.params[o]))this.params[o]=null;
else this.params[o]=document.getElementById(this.params[o]);
if(this.params[o]){this.params[o].klSS=this;
if(this.controlEventHandlers[o])SlideShow.installListener(this.params[o], 
this.controlEventHandlers[o].event, 
this.controlEventHandlers[o].listener);
}}}
var reData=/^(\d+)(s|ms)$/.exec(this.params.delay);
this.params.delay=parseInt(reData[1],10)*(reData[2]=='s'?600:1);
this.params.loop=this.params.loop=='true'?true:false;this.slides=new Array();
for(var i=0;i<this.container.childNodes.length;i++)
if(/div/i.test(this.container.childNodes[i].nodeName)&& 
this.container.childNodes[i].getAttribute('slide'))
this.slides.push(new SlideShow.slide(this.container.childNodes[i],this));
for(var i=0;i<this.container.childNodes.length;i++)
if(!(this.container.childNodes[i].nodeType==1 && 


this.container.childNodes[i].getAttribute('slide')))
this.container.removeChild(this.container.childNodes[i]);
if(this.params.controlToc &&/select/i.test(this.params.controlToc.nodeName))
{
while(this.params.controlToc.options.length)
this.params.controlToc.remove(0);
var opt=null;
for(var i=0;i<this.slides.length;i++)
{
opt=document.createElement('option');
opt.value=i;opt.appendChild(document.createTextNode(this.slides[i].params.title));
this.params.controlToc.appendChild(opt);
}
}
this.container.className=this.params.className;
if(/auto/i.test(this.params.start))this.start();
else{this.currentSlide=0;this.updateNewSlide();
}
return;
}
SlideShow.slide=function(sd,parent)
{
this.element=sd;this.ss=parent;this.params=new Array();
var hes=this.element.getElementsByTagName(this.ss.params.slideTitles);
this.params.title=hes.length>0?hes[0].firstChild.nodeValue:'';
this.params.delay=this.ss.params.delay;
SlideShow.parseParameters(this.params,SlideShow.sOptDefs,this.element.getAttribute('slide'));
if(this.params.className)this.element.className=this.params.className;
this.element.style.display='none';return;};SlideShow.list=new Array();
SlideShow.init=function(){if(document.body.addEventListener || document.body.attachEvent)
{
var divs=document.body.getElementsByTagName('div');
for(var i=0;i<divs.length;i++)if(divs[i].getAttribute('SlideShow'))
{
divs[i].klss=new SlideShow(divs[i],SlideShow.list.length);
SlideShow.list.push(divs[i].klss);
}}};
SlideShow.installListener=function(node,event,listener)
{
if(node.addEventListener){node.addEventListener(event,listener,false);
return true;}if(node.attachEvent)
{
node.attachEvent('on'+event,listener);
return true;
}return false;
};
SlideShow.advance=function(id){return SlideShow.list[id].autoAdvance();
};
SlideShow.controlStartListener=function(e)
{
var target=e.target?e.target:(e.srcElement?e.srcElement:null);
if(target && target.klSS)target.klSS.start();
};
SlideShow.controlStopListener=function(e)
{
var target=e.target?e.target:(e.srcElement?e.srcElement:null);
if(target && target.klSS)target.klSS.autoStop();
};
SlideShow.controlTocListener=function(e)
{
var target=e.target?e.target:(e.srcElement?e.srcElement:null);
if(target && target.klSS)target.klSS.goToSlide(target.selectedIndex);
};
SlideShow.controlNextListener=function(e){var target=e.target?e.target:(e.srcElement?e.srcElement:null);
if(target && target.klSS)target.klSS.goToSlide(target.klSS.currentSlide+1);
};
SlideShow.controlPreviousListener=function(e)
{
var target=e.target?e.target:(e.srcElement?e.srcElement:null);
if(target && target.klSS)target.klSS.goToSlide(target.klSS.currentSlide-1);
};
SlideShow.controlHomeListener=function(e)
{
var target=e.target?e.target:(e.srcElement?e.srcElement:null);
if(target && target.klSS)target.klSS.goToSlide(0);
};
SlideShow.controlEndListener=function(e)
{
var target=e.target?e.target:(e.srcElement?e.srcElement:null);
if(target && target.klSS)target.klSS.goToSlide(target.klSS.slides.length-1);
};
SlideShow.ssOptDefs=new Array();
SlideShow.ssOptDefs['class-name']=/^\s*(\w+)\s*$/;
SlideShow.ssOptDefs['slide-titles']=/^\s*(h[1-6])\s*$/;
SlideShow.ssOptDefs['control-start']=/^\s*(\w+)\s*$/;
SlideShow.ssOptDefs['control-stop']=/^\s*(\w+)\s*$/;
SlideShow.ssOptDefs['control-toc']=/^\s*(\w+)\s*$/;
SlideShow.ssOptDefs['control-counter']=/^\s*(\w+)\s*$/;
SlideShow.ssOptDefs['control-next']=/^\s*(\w+)\s*$/;
SlideShow.ssOptDefs['control-previous']=/^\s*(\w+)\s*$/;
SlideShow.ssOptDefs['control-home']=/^\s*(\w+)\s*$/;
SlideShow.ssOptDefs['control-end']=/^\s*(\w+)\s*$/;
SlideShow.ssOptDefs['start']=/^\s*(manual|auto)\s*$/;
SlideShow.ssOptDefs['delay']=/^\s*(\d+(?:s|ms))\s*$/;
SlideShow.ssOptDefs['loop']=/^\s*(true|false)\s*$/;
SlideShow.ssDefOptStr='class-name:SlideShow;slide-titles:h2;control-start:null;control-stop:null;control-toc:null;control-counter:null;control-next:null;control-previous:null;control-home:null;contol-end:null;start:auto;delay:5s;loop:false';SlideShow.sOptDefs=new Array();SlideShow.sOptDefs['class-name']=/^\s*(\w+)\s*$/;SlideShow.sOptDefs['title']=/^\s*'(.+)'\s*$/;SlideShow.sOptDefs['delay']=/^\s*(\d+(?:s|ms))\s*$/;
SlideShow.parseParameters=function(object,definitions,parameters)
{
paramEntries=parameters.split(';');
for(var i=0;i<paramEntries.length;i++)
{
paramEntry=paramEntries[i].split(':');
if(paramEntry.length==2)
{
paramName=paramEntry[0].replace(/^\s*([\w-]+)\s*$/,'$1');
if(definitions[paramName])
{
res=definitions[paramName].exec(paramEntry[1]);
if(res && res[1])object[SlideShow.convertCSSName(paramName)]=res[1];}}}};
SlideShow.convertCSSName=function(cssName)
{
sn=cssName.split('-');rs=sn[0];
for(var i=1;i<sn.length;i++)rs+=sn[i].replace(/^(\w)(\w*)$/,function(str,p1,p2,offset,s)
{
return p1.toUpperCase()+p2;});return rs;
};