/**
 * Zikula Application Framework
 *
 * @copyright (c) 2008, Pawel Preneta <jusuff@jabster.pl>
 * @link http://code.zikula.org/bianor/
 * @version $Id: usermenutree.js 84 2008-08-07 21:42:56Z jusuff $
 * @license GNU/GPL - http://www.gnu.org/copyleft/gpl.html
 * @package menutree
 */

document.observe("dom:loaded", menutree_init, false);

function menutree_init()
{
    // prepare each menutree block
    $$('ul.usermenutree').each(function(menu) {
        new MenuTree(menu);
    });
}
var MenuTree = Class.create({
    initialize: function(menu) {
        this.menu = $(menu);
        this.id = menu.identify();
        this.toggler = 'img.toggle';
        this.plus = 'modules/menutree/pnimages/plus.gif';
        this.minus = 'modules/menutree/pnimages/minus.gif';
        // bind toggle action
        this.menu.select(this.toggler).invoke('observe','click',this.toggleNode.bindAsEventListener(this));
        // bind also empty spans
        this.menu.select('li.parent > span').invoke('observe','click',this.toggleNode.bindAsEventListener(this));
        // initialy hide childnodes
        var status = Cookie.get(this.id) ? $H(Cookie.get(this.id).evalJSON(true)) : new Hash();
        this.menu.select('ul').each(function(u) {
            if(!status.get(u.up('li').identify())) {
                u.hide();
                u.previous(this.toggler).writeAttribute('src',this.plus);
            }
        }.bind(this));
    },
    toggleNode: function(event) {
        var target = event.element().up('li').down(this.toggler),
            ul = event.element().up('li').down('ul')
        if (ul != undefined) {
            ul.toggle();
            target.src = (ul.visible()) ? this.minus : this.plus;
            var status = Cookie.get(this.id) ? $H(Cookie.get(this.id).evalJSON(true)) : new Hash();
            status.set(ul.up('li').identify(),ul.visible());
            Cookie.set(this.id,status.toJSON());
        }
    }
});
