;(function($){
$.ui=$.ui||{};
$.fn.extend({
accordion:function(options,data){
var args=Array.prototype.slice.call(arguments,1);
return this.each(function(){
if(typeof options=="string"){
var accordion=$.data(this,"ui-accordion");
accordion[options].apply(accordion,args);}else if(!$(this).is(".ui-accordion"))
$.data(this,"ui-accordion",new $.ui.accordion(this,options));});},
activate:function(index){
return this.accordion("activate",index);}});
$.ui.accordion=function(container,options){
this.options=options=$.extend({},$.ui.accordion.defaults,options);
this.element=container;
$(container).addClass("ui-accordion");
if(options.navigation){
var current=$(container).find("a").filter(options.navigationFilter);
if(current.length){
if(current.filter(options.header).length){
options.active=current;}else{
options.active=current.parent().parent().prev();
current.addClass("current");}}}
options.headers=$(container).find(options.header);
options.active=findActive(options.headers,options.active);
if(options.fillSpace){
var maxHeight=$(container).parent().height();
options.headers.each(function(){
maxHeight -=$(this).outerHeight();});
var maxPadding=0;
options.headers.next().each(function(){
maxPadding=Math.max(maxPadding,$(this).innerHeight()- $(this).height());}).height(maxHeight - maxPadding);}else if(options.autoheight){
var maxHeight=0;
options.headers.next().each(function(){
maxHeight=Math.max(maxHeight,$(this).outerHeight());}).height(maxHeight);}
options.headers.not(options.active||"").next().hide();
options.active.parent().andSelf().addClass(options.selectedClass);
if(options.event)
$(container).bind((options.event)+".ui-accordion",clickHandler);};
$.ui.accordion.prototype={
activate:function(index){
clickHandler.call(this.element,{
target:findActive(this.options.headers,index)[0]});},
enable:function(){
this.options.disabled=false;},
disable:function(){
this.options.disabled=true;},
destroy:function(){
this.options.headers.next().css("display","");
if(this.options.fillSpace||this.options.autoheight){
this.options.headers.next().css("height","");}
$.removeData(this.element,"ui-accordion");
$(this.element).removeClass("ui-accordion").unbind(".ui-accordion");}}
function scopeCallback(callback,scope){
return function(){
return callback.apply(scope,arguments);};}
function completed(cancel){
if(!$.data(this,"ui-accordion"))
return;
var instance=$.data(this,"ui-accordion");
var options=instance.options;
options.running=cancel?0:--options.running;
if(options.running)
return;
if(options.clearStyle){
options.toShow.add(options.toHide).css({
height:"",
overflow:""});}
$(this).triggerHandler("change.ui-accordion",[options.data],options.change);}
function toggle(toShow,toHide,data,clickedActive,down){
var options=$.data(this,"ui-accordion").options;
options.toShow=toShow;
options.toHide=toHide;
options.data=data;
var complete=scopeCallback(completed,this);
options.running=toHide.size()==0?toShow.size():toHide.size();
if(options.animated){
if(!options.alwaysOpen&&clickedActive){
$.ui.accordion.animations[options.animated]({
toShow:jQuery([]),
toHide:toHide,
complete:complete,
down:down,
autoheight:options.autoheight});}else{
$.ui.accordion.animations[options.animated]({
toShow:toShow,
toHide:toHide,
complete:complete,
down:down,
autoheight:options.autoheight});}}else{
if(!options.alwaysOpen&&clickedActive){
toShow.toggle();}else{
toHide.hide();
toShow.show();}
complete(true);}}
function clickHandler(event){
var options=$.data(this,"ui-accordion").options;
if(options.disabled)
return false;
if(!event.target&&!options.alwaysOpen){
options.active.parent().andSelf().toggleClass(options.selectedClass);
var toHide=options.active.next(),
data={
instance:this,
options:options,
newHeader:jQuery([]),
oldHeader:options.active,
newContent:jQuery([]),
oldContent:toHide},
toShow=options.active=$([]);
toggle.call(this,toShow,toHide,data);
return false;}
var clicked=$(event.target);
if(clicked.parents(options.header).length)
while(!clicked.is(options.header))
clicked=clicked.parent();
var clickedActive=clicked[0]==options.active[0];
if(options.running||(options.alwaysOpen&&clickedActive))
return false;
if(!clicked.is(options.header))
return;
options.active.parent().andSelf().toggleClass(options.selectedClass);
if(!clickedActive){
clicked.parent().andSelf().addClass(options.selectedClass);}
var toShow=clicked.next(),
toHide=options.active.next(),
data={
instance:this,
options:options,
newHeader:clicked,
oldHeader:options.active,
newContent:toShow,
oldContent:toHide},
down=options.headers.index(options.active[0])>options.headers.index(clicked[0]);
options.active=clickedActive?$([]):clicked;
toggle.call(this,toShow,toHide,data,clickedActive,down);
return false;};
function findActive(headers,selector){
return selector!=undefined?typeof selector=="number"?headers.filter(":eq("+ selector +")"):headers.not(headers.not(selector)):selector===false?$([]):headers.filter(":eq(0)");}
$.extend($.ui.accordion,{
defaults:{
selectedClass:"selected",
alwaysOpen:true,
animated:'slide',
event:"click",
header:"a",
autoheight:true,
running:0,
navigationFilter:function(){
return this.href.toLowerCase()==location.href.toLowerCase();}},
animations:{
slide:function(options,additions){
options=$.extend({
easing:"swing",
duration:300},options,additions);
if(!options.toHide.size()){
options.toShow.animate({height:"show"},options);
return;}
var hideHeight=options.toHide.height(),
showHeight=options.toShow.height(),
difference=showHeight/hideHeight;
options.toShow.css({height:0,overflow:'hidden'}).show();
options.toHide.filter(":hidden").each(options.complete).end().filter(":visible").animate({height:"hide"},{
step:function(now){
var current=(hideHeight - now)*difference;
if($.browser.msie||$.browser.opera){
current=Math.ceil(current);}
options.toShow.height(current);},
duration:options.duration,
easing:options.easing,
complete:function(){
if(!options.autoheight){
options.toShow.css("height","auto");}
options.complete();}});},
bounceslide:function(options){
this.slide(options,{
easing:options.down?"bounceout":"swing",
duration:options.down?1000:200});},
easeslide:function(options){
this.slide(options,{
easing:"easeinout",
duration:700})}}});})(jQuery);