/**
 * feed.js
 * Fall 2005
 *
 * JavaScript support for the HB_Feed module. Adds some usability features
 * through the use of remote scripting and DOM page manipulations and a few
 * aesthetic flourishes.
 *
 * @author  Dan Phiffer <dan@phiffer.org>
 * @version 0.04
 */

var hb_feed;

function HB_Feed(id, url, title) {
    this.id = id;
    this.url = url;
    this.title = title;
    
    var main = document.getElementById('main');
    var div = main.appendChild(document.createElement('div'));
    div.setAttribute('id', 'feed' + id);
    div.className = 'feed';
    hb_feed = this;
    this.setup_markup();
    remote('hb/feed/latest.php?id=' + id, this.handle_latest);
}

HB_Feed.prototype.setup_markup = function() {
    var div = document.getElementById('feed' + this.id);
    var rss = this.url;
    
    div.innerHTML = '<dl class="controls">' +
        '<dt>' + this.title + '</dt>' +
        '<dd class="primary">' +
        '<ul class="tabs">' +
        '<li class="selected"><a href="#" rel="latest">Latest</a></li>' +
        '<li><a href="feed/archive" rel="archive">Archive</a></li>' +
        '<br class="clear"/>' +
        '</ul></dd>' +
        '<dd class="secondary">' +
        '<a href="' + rss + '?rss" class="feed">RSS<img src="images/feed-off.gif"/></a>' +
        '</dd>' +
        '<br class="clear"/></dl>';
}

HB_Feed.prototype.show = function() {
    var div = document.getElementById('feed' + this.id);
    div.style.display = 'block';
}

HB_Feed.prototype.hide = function() {
    var div = document.getElementById('feed' + this.id);
    div.style.display = 'none';
}

HB_Feed.prototype.handle_latest = function(response) {
    var div = document.getElementById('feed' + hb_feed.id);
    var content = div.appendChild(document.createElement('div'));
    content.className = 'content';
    content.innerHTML = response.responseText;
    
    var script = content.getElementsByTagName('script');
    for (var i = 0; i < script.length; i++) {
        (function() {
            eval(script[i].innerHTML);
        })();
    }
    
    hb_feed.setup_items();
    hb_feed.setup_hover();
    hb_feed.setup_tabs();
}

HB_Feed.prototype.setup_items = function() {
    var div = document.getElementById('feed' + hb_feed.id);
    var items = div.getElementsByTagName('li');
    for (var i = 0; i < items.length; i++) {
        if (items[i].parentNode.className == 'items') {
            var link = items[i].getElementsByTagName('a')[0];
            link.onclick = function() {
                var contents = this.parentNode.getElementsByTagName('div')[0];
                if (contents.style.display == 'block') {
                    contents.style.display = 'none';
                } else {
                    contents.style.display = 'block';
                }
                return false;
            }
        }
    }
}

HB_Feed.prototype.setup_hover = function() {
    var div = document.getElementById('feed' + hb_feed.id);
    var divs = div.getElementsByTagName('div');
    for (var i = 0; i < divs.length; i++) {
        if (divs[i].className.indexOf('entry') != -1) {
            add_event(divs[i], 'onmouseover', function() {
                this.add_class('hover');
            });
            add_event(divs[i], 'onmouseout', function() {
                this.remove_class('hover');
            });
        }
    }
}

HB_Feed.prototype.setup_tabs = function() {
    var div = document.getElementById('feed' + hb_feed.id);
    var dd_list = div.getElementsByTagName('dd');
    for (var i = 0; i < dd_list.length; i++) {
        if (dd_list[i].className.indexOf('primary') != -1) {
            var a_list = dd_list[i].getElementsByTagName('a');
            break;
        }
    }
    for (var i = 0; i < a_list.length; i++) {
        a_list[i].feed = div;
        a_list[i].onmousedown = this.tab_click;
        a_list[i].onclick = function() { return false; }
    }
}

HB_Feed.prototype.tab_click = function() {
    var dd_list = this.feed.getElementsByTagName('dd');
    for (var i = 0; i < dd_list.length; i++) {
        if (dd_list[i].className.indexOf('primary') != -1) {
            var li_list = dd_list[i].getElementsByTagName('li');
            break;
        }
    }
    for (var i = 0; i < li_list.length; i++) {
        var link = li_list[i].getElementsByTagName('a')[0];
        if (link == this) {
            li_list[i].add_class('selected');
            hb_feed.show_tab(link.getAttribute('rel'));
        } else {
            li_list[i].remove_class('selected');
        }
    }
}

HB_Feed.prototype.show_tab = function(tab) {
    var div = document.getElementById('feed' + this.id);
    var div_list = div.getElementsByTagName('div'); 
    for (var i = 0; i < div_list.length; i++) {
        if (div_list[i].has_class(tab) && div_list[i].has_class('tab')) {
            div_list[i].style.display = 'block';
        } else if (div_list[i].has_class('tab')) {
            div_list[i].style.display = 'none';
        }
    }
}

