var Accordion = new Object();
Accordion.Reset = function () {
    var acc = document.getElementById('accordion');
    if (!acc) { return; }
    var dts = acc.getElementsByTagName('dt');
    var dds = acc.getElementsByTagName('dd');
    var cbtns = Accordion.getElementsByClassName(document.getElementById('accordion'), 'close');
    //var cbtns = document.getElementById('accordion').getElementsByClassName('close');
    for (var i = 0; i < dts.length; i++) {
        dts[i].sibling = dds[i];
        dts[i].closeBtn = cbtns[i];
        dts[i]._height = Accordion.heights[i];
        dts[i].onclick = function () {
            Accordion.OpenPanel(this, this.sibling, this.closeBtn, this._height);
        }
    }
    Accordion.CloseAll();
}
Accordion.CloseAll = function () {
    var acc = document.getElementById('accordion');
    if (!acc) { return; }
    var dts = acc.getElementsByTagName('dt');
    var dds = acc.getElementsByTagName('dd');
    for (var i = 0; i < dds.length; i++) {
        if (dts[i].className == '' || dts[i].className == 'opened') {
            dds[i].style.height = '';
            var tClose = new Tween(dds[i].style, 'height', Tween.strongEaseOut, Accordion.heights[i], 0, .25, 'px');
            tClose.start();
            dts[i].className = dds[i].className = 'closed';
        }
    }
}
Accordion.OpenPanel = function (panel, sibling, closeBtn, _height) {
    Accordion.Reset();
    panel.className = sibling.className = 'opened';
    sibling.style.height = '';
    var tOpen = new Tween(sibling.style, 'height', Tween.strongEaseOut, 0, _height, .5, 'px');
    tOpen.start();
    panel.onclick = closeBtn.onclick = function () {
        Accordion.Reset();
    }
}
Accordion.SetHeights = function () {

    var acc = document.getElementById('accordion');
    if (!acc) { return; }

    var dds = acc.getElementsByTagName('dd');
    for (var i = 0; i < dds.length; i++) {
        var pHeight = (dds[i].clientHeight) ? dds[i].clientHeight : dds[i].innerHeight;
        Accordion.heights.push(pHeight);
    }
}
Accordion.getElementsByClassName = function (node, classname) {
    var a = [];
    var re = new RegExp('\\b' + classname + '\\b');
    var els = node.getElementsByTagName("*");
    for (var i = 0, j = els.length; i < j; i++)
        if (re.test(els[i].className)) a.push(els[i]);
    return a;
}

Accordion.Init = function() {

    Accordion.heights = new Array();
    Accordion.SetHeights();
    Accordion.Reset();
}

// addListener(window, "load", Accordion.Init, Accordion);


window.addEvent('domready', Accordion.Init.bind(Accordion));
