// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// tabbed.js
//
// copyright (c) 2010-2011 drow <drow@bin.sh>
// all rights reserved

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// global data

  var tab_info = { };

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// init tabs

  function init_tabs () {
    if (blocks = $$('div.tab_block')) {
      var B = {}; Builder.dump(B);

      blocks.each(function (block) {
        var block_attr = { 'class': 'tab_nav' };
        var items = [];

        if (tabs = get_tabs(block)) {
          tabs.each(function (tab) {
            tab.addClassName('inactive');

            tab_hash = fix_hash(title_hash(tab.title));
            tab.writeAttribute('hash',tab_hash);

            if (link = tab.readAttribute('href')) {
              a_attr = { 'href': link };
            } else {
              a_attr = { 'onclick': "lift_tab('" + tab_hash + "')" };
            }
            tab_link = B.A(a_attr,tab.title);
            items.push(B.LI({},tab_link));

            tab_info[tab_hash] = { 'tab': tab, 'link': tab_link };
          });
          block.insert({ 'top': B.UL(block_attr,items) });
          lift_tab(tabs[0].readAttribute('hash'));
        }
      });
    }
  }
  function get_tabs (block) {
    return select_children(block,'div.tab');
  }
  function select_children (parent,desc) {
    return parent.childElements().grep(new Selector(desc));
  }
  function title_hash (string) {
    return '#' + string.replace(/\s+/g,'_').underscore();
  }
  function fix_hash (string) {
    if (tab_info[string]) {
      for (i = 2; i < 100; i++) {
        var check = string + i;
        if (! tab_info[check]) return check;
      }
    }
    return string;
  }

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// lift tab

  function lift_tab (tab_hash) {
    var tab = tab_info[tab_hash].tab;
    var link = tab_info[tab_hash].link;

    link.up('ul').select('a').each(function (a) {
      a.removeClassName('active');
    });
    link.addClassName('active');

    get_tabs(link.up('div')).each(function (d) {
      d.addClassName('inactive');
    });
    tab.removeClassName('inactive');
  }

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// showtime

  document.observe('dom:loaded',init_tabs);

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


