var Spry;
if(!Spry){
Spry={};
}
if(!Spry.Widget){
Spry.Widget={};
}
Spry.Widget.Accordion=function(_e9,_ea){
this.element=this.getElement(_e9);
this.defaultPanel=0;
this.hoverClass="AccordionPanelTabHover";
this.openClass="AccordionPanelOpen";
this.closedClass="AccordionPanelClosed";
this.focusedClass="AccordionFocused";
this.enableAnimation=true;
this.enableKeyboardNavigation=true;
this.currentPanel=null;
this.animator=null;
this.hasFocus=null;
this.previousPanelKeyCode=Spry.Widget.Accordion.KEY_UP;
this.nextPanelKeyCode=Spry.Widget.Accordion.KEY_DOWN;
this.useFixedPanelHeights=true;
this.fixedPanelHeight=0;
Spry.Widget.Accordion.setOptions(this,_ea,true);
this.attachBehaviors();
};
Spry.Widget.Accordion.prototype.getElement=function(ele){
if(ele&&typeof ele=="string"){
return document.getElementById(ele);
}
return ele;
};
Spry.Widget.Accordion.prototype.addClassName=function(ele,_ed){
if(!ele||!_ed||(ele.className&&ele.className.search(new RegExp("\\b"+_ed+"\\b"))!=-1)){
return;
}
ele.className+=(ele.className?" ":"")+_ed;
};
Spry.Widget.Accordion.prototype.removeClassName=function(ele,_ef){
if(!ele||!_ef||(ele.className&&ele.className.search(new RegExp("\\b"+_ef+"\\b"))==-1)){
return;
}
ele.className=ele.className.replace(new RegExp("\\s*\\b"+_ef+"\\b","g"),"");
};
Spry.Widget.Accordion.setOptions=function(obj,_f1,_f2){
if(!_f1){
return;
}
for(var _f3 in _f1){
if(_f2&&_f1[_f3]==undefined){
continue;
}
obj[_f3]=_f1[_f3];
}
};
Spry.Widget.Accordion.prototype.onPanelTabMouseOver=function(e,_f5){
if(_f5){
this.addClassName(this.getPanelTab(_f5),this.hoverClass);
}
return false;
};
Spry.Widget.Accordion.prototype.onPanelTabMouseOut=function(e,_f7){
if(_f7){
this.removeClassName(this.getPanelTab(_f7),this.hoverClass);
}
return false;
};
Spry.Widget.Accordion.prototype.openPanel=function(_f8){
var _f9=this.currentPanel;
var _fa;
if(typeof _f8=="number"){
_fa=this.getPanels()[_f8];
}else{
_fa=this.getElement(_f8);
}
if(!_fa||_f9==_fa){
return null;
}
var _fb=_f9?this.getPanelContent(_f9):null;
var _fc=this.getPanelContent(_fa);
if(!_fc){
return null;
}
if(this.useFixedPanelHeights&&!this.fixedPanelHeight){
this.fixedPanelHeight=(_fb.offsetHeight)?_fb.offsetHeight:_fb.scrollHeight;
}
if(this.enableAnimation){
if(this.animator){
this.animator.stop();
}
this.animator=new Spry.Widget.Accordion.PanelAnimator(this,_fa,{duration:this.duration,fps:this.fps,transition:this.transition});
this.animator.start();
}else{
if(_fb){
_fb.style.display="none";
_fb.style.height="0px";
}
_fc.style.display="block";
_fc.style.height=(this.useFixedPanelHeights?this.fixedPanelHeight:_fc.scrollHeight)+"px";
}
if(_f9){
this.removeClassName(_f9,this.openClass);
this.addClassName(_f9,this.closedClass);
}
this.removeClassName(_fa,this.closedClass);
this.addClassName(_fa,this.openClass);
this.currentPanel=_fa;
return _fa;
};
Spry.Widget.Accordion.prototype.closePanel=function(){
if(!this.useFixedPanelHeights&&this.currentPanel){
var _fd=this.currentPanel;
var _fe=this.getPanelContent(_fd);
if(_fe){
if(this.enableAnimation){
if(this.animator){
this.animator.stop();
}
this.animator=new Spry.Widget.Accordion.PanelAnimator(this,null,{duration:this.duration,fps:this.fps,transition:this.transition});
this.animator.start();
}else{
_fe.style.display="none";
_fe.style.height="0px";
}
}
this.removeClassName(_fd,this.openClass);
this.addClassName(_fd,this.closedClass);
this.currentPanel=null;
}
};
Spry.Widget.Accordion.prototype.openNextPanel=function(){
return this.openPanel(this.getCurrentPanelIndex()+1);
};
Spry.Widget.Accordion.prototype.openPreviousPanel=function(){
return this.openPanel(this.getCurrentPanelIndex()-1);
};
Spry.Widget.Accordion.prototype.openFirstPanel=function(){
return this.openPanel(0);
};
Spry.Widget.Accordion.prototype.openLastPanel=function(){
var _ff=this.getPanels();
return this.openPanel(_ff[_ff.length-1]);
};
Spry.Widget.Accordion.prototype.onPanelTabClick=function(e,_101){
if(_101!=this.currentPanel){
this.openPanel(_101);
}else{
this.closePanel();
}
if(this.enableKeyboardNavigation){
this.focus();
}
if(e.preventDefault){
e.preventDefault();
}else{
e.returnValue=false;
}
if(e.stopPropagation){
e.stopPropagation();
}else{
e.cancelBubble=true;
}
return false;
};
Spry.Widget.Accordion.prototype.onFocus=function(e){
this.hasFocus=true;
this.addClassName(this.element,this.focusedClass);
return false;
};
Spry.Widget.Accordion.prototype.onBlur=function(e){
this.hasFocus=false;
this.removeClassName(this.element,this.focusedClass);
return false;
};
Spry.Widget.Accordion.KEY_UP=38;
Spry.Widget.Accordion.KEY_DOWN=40;
Spry.Widget.Accordion.prototype.onKeyDown=function(e){
var key=e.keyCode;
if(!this.hasFocus||(key!=this.previousPanelKeyCode&&key!=this.nextPanelKeyCode)){
return true;
}
var _106=this.getPanels();
if(!_106||_106.length<1){
return false;
}
var _107=this.currentPanel?this.currentPanel:_106[0];
var _108=(key==this.nextPanelKeyCode)?_107.nextSibling:_107.previousSibling;
while(_108){
if(_108.nodeType==1){
break;
}
_108=(key==this.nextPanelKeyCode)?_108.nextSibling:_108.previousSibling;
}
if(_108&&_107!=_108){
this.openPanel(_108);
}
if(e.preventDefault){
e.preventDefault();
}else{
e.returnValue=false;
}
if(e.stopPropagation){
e.stopPropagation();
}else{
e.cancelBubble=true;
}
return false;
};
Spry.Widget.Accordion.prototype.attachPanelHandlers=function(_109){
if(!_109){
return;
}
var tab=this.getPanelTab(_109);
if(tab){
var self=this;
Spry.Widget.Accordion.addEventListener(tab,"click",function(e){
return self.onPanelTabClick(e,_109);
},false);
Spry.Widget.Accordion.addEventListener(tab,"mouseover",function(e){
return self.onPanelTabMouseOver(e,_109);
},false);
Spry.Widget.Accordion.addEventListener(tab,"mouseout",function(e){
return self.onPanelTabMouseOut(e,_109);
},false);
}
};
Spry.Widget.Accordion.addEventListener=function(_10f,_110,_111,_112){
try{
if(_10f.addEventListener){
_10f.addEventListener(_110,_111,_112);
}else{
if(_10f.attachEvent){
_10f.attachEvent("on"+_110,_111);
}
}
}
catch(e){
}
};
Spry.Widget.Accordion.prototype.initPanel=function(_113,_114){
var _115=this.getPanelContent(_113);
if(_114){
this.currentPanel=_113;
this.removeClassName(_113,this.closedClass);
this.addClassName(_113,this.openClass);
if(_115){
if(this.useFixedPanelHeights){
if(this.fixedPanelHeight){
_115.style.height=this.fixedPanelHeight+"px";
}
}else{
_115.style.height="auto";
}
}
}else{
this.removeClassName(_113,this.openClass);
this.addClassName(_113,this.closedClass);
if(_115){
_115.style.height="0px";
_115.style.display="none";
}
}
this.attachPanelHandlers(_113);
};
Spry.Widget.Accordion.prototype.attachBehaviors=function(){
var _116=this.getPanels();
for(var i=0;i<_116.length;i++){
this.initPanel(_116[i],i==this.defaultPanel);
}
this.enableKeyboardNavigation=(this.enableKeyboardNavigation&&this.element.attributes.getNamedItem("tabindex"));
if(this.enableKeyboardNavigation){
var self=this;
Spry.Widget.Accordion.addEventListener(this.element,"focus",function(e){
return self.onFocus(e);
},false);
Spry.Widget.Accordion.addEventListener(this.element,"blur",function(e){
return self.onBlur(e);
},false);
Spry.Widget.Accordion.addEventListener(this.element,"keydown",function(e){
return self.onKeyDown(e);
},false);
}
};
Spry.Widget.Accordion.prototype.getPanels=function(){
return this.getElementChildren(this.element);
};
Spry.Widget.Accordion.prototype.getCurrentPanel=function(){
return this.currentPanel;
};
Spry.Widget.Accordion.prototype.getPanelIndex=function(_11c){
var _11d=this.getPanels();
for(var i=0;i<_11d.length;i++){
if(_11c==_11d[i]){
return i;
}
}
return -1;
};
Spry.Widget.Accordion.prototype.getCurrentPanelIndex=function(){
return this.getPanelIndex(this.currentPanel);
};
Spry.Widget.Accordion.prototype.getPanelTab=function(_11f){
if(!_11f){
return null;
}
return this.getElementChildren(_11f)[0];
};
Spry.Widget.Accordion.prototype.getPanelContent=function(_120){
if(!_120){
return null;
}
return this.getElementChildren(_120)[1];
};
Spry.Widget.Accordion.prototype.getElementChildren=function(_121){
var _122=[];
var _123=_121.firstChild;
while(_123){
if(_123.nodeType==1){
_122.push(_123);
}
_123=_123.nextSibling;
}
return _122;
};
Spry.Widget.Accordion.prototype.focus=function(){
if(this.element&&this.element.focus){
this.element.focus();
}
};
Spry.Widget.Accordion.prototype.blur=function(){
if(this.element&&this.element.blur){
this.element.blur();
}
};
Spry.Widget.Accordion.PanelAnimator=function(_124,_125,opts){
this.timer=null;
this.interval=0;
this.fps=60;
this.duration=500;
this.startTime=0;
this.transition=Spry.Widget.Accordion.PanelAnimator.defaultTransition;
this.onComplete=null;
this.panel=_125;
this.panelToOpen=_124.getElement(_125);
this.panelData=[];
Spry.Widget.Accordion.setOptions(this,opts,true);
this.interval=Math.floor(1000/this.fps);
var _127=_124.getPanels();
for(var i=0;i<_127.length;i++){
var p=_127[i];
var c=_124.getPanelContent(p);
if(c){
var h=c.offsetHeight;
if(h==undefined){
h=0;
}
if(p==_125&&h==0){
c.style.display="block";
}
if(p==_125||h>0){
var obj=new Object;
obj.panel=p;
obj.content=c;
obj.fromHeight=h;
obj.toHeight=(p==_125)?(_124.useFixedPanelHeights?_124.fixedPanelHeight:c.scrollHeight):0;
obj.distance=obj.toHeight-obj.fromHeight;
obj.overflow=c.style.overflow;
this.panelData.push(obj);
c.style.overflow="hidden";
c.style.height=h+"px";
}
}
}
};
Spry.Widget.Accordion.PanelAnimator.defaultTransition=function(time,_12e,_12f,_130){
time/=_130;
return _12e+((2-time)*time*_12f);
};
Spry.Widget.Accordion.PanelAnimator.prototype.start=function(){
var self=this;
this.startTime=(new Date).getTime();
this.timer=setTimeout(function(){
self.stepAnimation();
},this.interval);
};
Spry.Widget.Accordion.PanelAnimator.prototype.stop=function(){
if(this.timer){
clearTimeout(this.timer);
for(i=0;i<this.panelData.length;i++){
obj=this.panelData[i];
obj.content.style.overflow=obj.overflow;
}
}
this.timer=null;
};
Spry.Widget.Accordion.PanelAnimator.prototype.stepAnimation=function(){
var _132=(new Date).getTime();
var _133=_132-this.startTime;
var i,obj;
if(_133>=this.duration){
for(i=0;i<this.panelData.length;i++){
obj=this.panelData[i];
if(obj.panel!=this.panel){
obj.content.style.display="none";
obj.content.style.height="0px";
}
obj.content.style.overflow=obj.overflow;
obj.content.style.height=obj.toHeight+"px";
}
if(this.onComplete){
this.onComplete();
}
return;
}
for(i=0;i<this.panelData.length;i++){
obj=this.panelData[i];
var ht=this.transition(_133,obj.fromHeight,obj.distance,this.duration);
obj.content.style.height=((ht<0)?0:ht)+"px";
}
var self=this;
this.timer=setTimeout(function(){
self.stepAnimation();
},this.interval);
};
