//  Accordion
if (typeof Effect == 'undefined') 
    throw("mtcms.js requires including script.aculo.us effects.js library!");

var MtCms = Class.create();
MtCms.prototype = {
    initialize: function(container, options) {
	this.container = container;
	this.currentActive = false;
	this.currentAccordion = [];
        if($(container) == undefined) {
            throw(container + "doesn't exists!");
            return false;
        }
        
        this.options = Object.extend({
			resizeSpeed : 8,
			onEvent : 'click',
			afterFinish : function(){this.currentActive = false;}.bind(this)
		}, options || {});
        
        this.duration = ((11-this.options.resizeSpeed)*0.15);
	
        var accordions = $$('#' + container + ' dt.parent span');
        accordions.each(function(accordion){
            Event.observe(accordion, this.options.onEvent, this.processObserve.bind(this, accordion));
	    Element.hide(accordion.className);
        }.bind(this));
    },
    
    processObserve: function(accordion) {
	if(this.currentActive) {
	    return;
	}
	
	//get level of accordion
	level = '';
	parentClassNames = accordion.parentNode.classNames().toArray();
	parentClassNames.each(function(className){
	    if(className.search(/level/i) >= 0) {
		level = className;
	    }
	}.bind(this));
	if(!this._isCurrentAccordion(accordion.className)) {
	    this.deActive(level);
	}
        this.active(accordion);
    },
    
    _handleAccordion: function(accordion) {
	this.currentActive = true;
        new Effect.toggle(accordion.className,
			    'blind',
			    {
				duration : this.duration,
				afterFinish : this.options.afterFinish
			    }
	    );
    },
    
    active: function(accordion) {
	if(!this._isCurrentAccordion(accordion.className)) {
	    this.currentAccordion.push(accordion.className);
	    accordion.parentNode.addClassName('active-children');
        } else {
	    this.currentAccordion = this.currentAccordion.without(accordion.className);
	    accordion.parentNode.removeClassName('active-children');
        }
	this._handleAccordion(accordion);
    },
    
    deActive: function(level) {
	accordions = $$('#' + this.container + ' dt.'+ level +' span');
	accordions.each(function(accordion){
		if(accordion.parentNode.hasClassName('active-children')) {
		    this.currentAccordion = this.currentAccordion.without(accordion.className);
		    accordion.parentNode.removeClassName('active-children');
		    this._handleAccordion(accordion);
		}
	    }.bind(this));
    },
    
    _isCurrentAccordion: function(className) {
	for(var i = 0; i <= this.currentAccordion.length; i++) {
	    if(this.currentAccordion[i] === className) {
		return true;
	    }
	}
	return false;
    },
    
    setCurrentAccordion: function(id) {
	if($('item-'+id) == undefined) {
	    return;
	}
	
	this.currentAccordion.push('item-'+id);
	$('item-'+id).previous().addClassName('active-children');
	Element.show('item-'+id);
    }
}
