/* for Blogroll */
if (typeof Blogroll == "undefined") {
    // add class
    var set_ie = function(element_name, class_name){
        if (document.documentMode && document.documentMode >= 8) {
            element_name.setAttribute('class', class_name);
        } else if (element_name.addEventListener)  {
            element_name.setAttribute('class', class_name);
        } else {
            element_name.setAttribute('className', class_name);
        }
    };
    var Blogroll = function(id, config, feeds, is_categorize) {
        this.id = id;
        this.config = config;
        this.feeds = feeds;
        this.is_categorize = is_categorize;

        // XXXX get from document.getElementsByTagName('script').pop().src ????
        if (typeof blogroll_roll_host == 'undefined') {
            this.roll_host = 'http://blogroll.livedoor.net/';
            this.cms_host  = 'http://blogroll.livedoor.com/';
        } else {
            this.roll_host = blogroll_roll_host;
            this.cms_host  = blogroll_cms_host;
        }

        this.now = new Date;
        return this;
    };
    Blogroll.prototype.setup_style = function(target_div, name, value) {
        var ch = this.config;

        if (name != undefined) {
            if (value != undefined) {
                ch[name] = value;
            } else {
                value = document.getElementById(name).value;
                ch[name] = value;
            }
        }
    };
    Blogroll.prototype.create_item = function(item) {
        var li = document.createElement('li');
        set_ie(li, 'blogroll-list');
        this.add_icon(li, item);
        var anchor = this.create_anchor(item);
        li.appendChild(anchor);
        if (this.config.show_new != 0) {
            this.add_new(li, item);
        }
        this.add_date(li, item);
        this.add_sbm(li, item);

        return li;
    };
    Blogroll.prototype.create_category_name = function(ul, name) {
        var li = document.createElement('li');
        set_ie(li, 'blogroll-category-name');
        var category_name = document.createTextNode(name);
        li.appendChild(category_name);
        ul.appendChild(li);
    }

    Blogroll.prototype.create_anchor = function(item) {
        var ch = this.config;
        var anchor_text;
        var entry_title = item.entry_title;
        var anchor = document.createElement('a');

        if (ch.title_charnum != 0) {
            entry_title = entry_title.substr(0, ch.title_charnum);
            if (ch.title_charnum < item.entry_title.length) {
                entry_title += '...';
                anchor.title = item.entry_title;
            }
        }

        if (ch.view_text == 'entry') {
            anchor_text = entry_title;
        } else if (ch.view_text == 'feed-entry') {
            anchor_text = item.feed_title + ' / ' + entry_title;
        } else if (ch.view_text == 'entry-feed') {
            anchor_text = entry_title + ' / ' + item.feed_title;
        } else if (ch.view_text == 'feed') {
            anchor_text = item.feed_title;
        }
        set_ie(anchor, 'blogroll-link');
        anchor.href = item.entry_link;
        anchor.target = "_blank";
        anchor.appendChild(document.createTextNode(anchor_text));
        this.add_tracking(anchor, item);

        return anchor;
    };

    Blogroll.prototype.format_item_date = function(item) {
        var ch = this.config;
        var date_str = "";
        if (ch.show_md == 1 || ch.show_hm == 1) {
            date_str = ' (';
            if (ch.show_md != 0) {
                var ym = new Date( item.posted_at * 1000 );
                ym = ym.getMonth()+1 + '/' + ym.getDate();
                date_str += ym;
            }
            if (ch.show_hm != 0) {
                var hm = new Date( item.posted_at * 1000 );
                hm = ("0"+ hm.getHours() ).slice(-2) + ':' + ("0"+ hm.getMinutes() ).slice(-2);
                if (ch.show_md != 0) {
                    date_str += ' ' + hm;
                } else {
                    date_str += hm;
                }
            }
            date_str += ')';
        }
        return date_str;
    };

    Blogroll.prototype.add_date = function(li, item) {
        var date_str = this.format_item_date(item);
        var date = document.createElement('span');
        set_ie(date, 'blogroll-link-time');
        date.appendChild(document.createTextNode(date_str));
        li.appendChild(date);
    };

    Blogroll.prototype.add_icon = function(li, item) {
        var ch = this.config;

        if (ch.view_icon != 0) {
            var img = document.createElement('img');
            set_ie(img, 'blogroll-icon');
            img.src = item.icon_path;
            li.appendChild(img);
        }

        if (ch.view_favicon != 0) {
            var favimg = document.createElement('img');
            set_ie(favimg, 'blogroll-favicon');
            favimg.src = this.roll_host + 'url/' + item.entry_link;
            favimg.width = 16;
            favimg.height = 16;
            li.appendChild(favimg);
        }
    };

    Blogroll.prototype.add_new = function(li, item) {
        var now = this.now;
        now = Math.ceil(now.getTime() / 1000);
        var diff = now - item.posted_at;
        if (diff < (this.config.new_limit)) {
            var new_span = document.createElement('span');
            set_ie(new_span, 'blogroll-new-entry');
            new_span.appendChild(document.createTextNode('NEW!'));
            li.appendChild(new_span);
        }
    };

    Blogroll.prototype.add_ad = function(div, ul) {
        if (this.config.ad_type == "text") {
            var ad = this.config.ad_list[ Math.floor(Math.random()*this.config.ad_list.length) ];

            if (ad) {
                var ad_a = document.createElement('a');
                set_ie(ad_a, 'blogroll-ad-text');
                ad_a.href = this.roll_host + 'ad_redirect?ad_id=' + ad.id + '&channel_id=' + this.id;
                ad_a.target = '_blank';
                ad_a.appendChild(document.createTextNode(ad.text));
                ul.insertBefore(ad_a, ul.firstChild);
            }
        } else if (this.config.ad_type == "img") {
            var img_ad_div = document.createElement('div');
            set_ie(img_ad_div, 'blogroll-ad-img');

            var img_ad_anchor = document.createElement('a');
            var ad_banner = this.config.ad_banner_list[ Math.floor(Math.random()*this.config.ad_banner_list.length) ];

            if (ad_banner) {
                img_ad_anchor.href = this.roll_host + 'ad_redirect?ad_id=' + ad_banner.id + '&channel_id=' + this.id;
                img_ad_anchor.target = '_blank';
                img_ad_anchor.title = ad_banner.text;

                var img_ad = document.createElement('img');
                img_ad.src = ad_banner.src;
                img_ad.setAttribute('alt', '');

                img_ad_anchor.appendChild(img_ad);
                img_ad_div.appendChild(img_ad_anchor);

                div.appendChild(img_ad_div);
            }
        }

        var default_ad = document.createElement('div');
        set_ie(default_ad, 'blogroll-ad-default');

        var default_ad_anchor = document.createElement('a');
        default_ad_anchor.href = 'http://blogroll.livedoor.com/';
        default_ad_anchor.target = '_blank';
        default_ad_anchor.appendChild(document.createTextNode('(Powered by livedoor BlogRoll)'));
        default_ad.appendChild(default_ad_anchor);
        div.appendChild(default_ad);
    };

    Blogroll.prototype.add_sbm = function(li, item) {
        var ch = this.config;
        if (ch.view_ld_clip != 0) {
            var clip = document.createElement('img');
            clip.src = "http://image.clip.livedoor.com/counter/" + item.entry_link;
            clip.style.border = 'none';
            var link = document.createElement('a');
            set_ie(link, 'blogroll-clip');
            link.href = "http://clip.livedoor.com/page/" + item.entry_link;
            link.target = "_blank";
            link.appendChild(clip);
            li.appendChild(link);
        }

        if (ch.view_hatena_bookmark != 0) {
            var hatebu = document.createElement('img');
            hatebu.src = "http://b.hatena.ne.jp/entry/image/" + item.entry_link;
            hatebu.style.border = 'none';
            var link = document.createElement('a');
            set_ie(link, 'blogroll-hatebu');
            link.href = "http://b.hatena.ne.jp/entry/" + item.entry_link;
            link.target = "_blank";
            link.appendChild(hatebu);
            li.appendChild(link);
        }
    };

    Blogroll.prototype.add_tracking = function(a, item) {
        var channel_id = this.id;
        if (typeof blogroll_is_preview != "undefined") {
            return;
        }
        var call_url = this.roll_host + "click_js" +
            '?c=' + channel_id +
            '&f=' + item.feed_id +
            '&url=' + encodeURIComponent(item.entry_link) +
            '&sig=' + item.sig +
            '&title=' + encodeURIComponent(item.entry_title);
        var log_click = function (ev) {
            var log_img = document.createElement('img');
            log_img.src = call_url;
        };

        if (a.addEventListener) {
            a.addEventListener('mousedown', log_click, false);
        } else if (a.attachEvent) { // for IE
            a.attachEvent('onmousedown', log_click);
        }
    };
    Blogroll.prototype.show_log = function() {
        var log_img = document.createElement('img');
        log_img.src = this.roll_host + 'img/blank.gif?channel_id=' + this.id;
    };

    Blogroll.prototype.preview = function(is_categorize, output_id) {
        this.show(is_categorize, output_id);
    };
    Blogroll.prototype.show = function(div_id, name, value) {
        var ch = this.config;
        var div = document.getElementById(div_id);
        div.innerHTML = "";
        this.setup_style(div, name, value);
        var ul = document.createElement('ul');
        set_ie(ul, 'blogroll-list-wrap');

        if (this.is_categorize && ch.show_per_category) {
            var feeds_len = this.feeds.length;

            var total_categorize_feeds_len = 0;
            for (var i = 0; i < feeds_len; i++) {
                total_categorize_feeds_len += this.feeds[i].categorize_feeds.length;
            }

            var show_number = (ch.show_number != 0) ? ch.show_number : total_categorize_feeds_len;
            var loop = 0;

            for (var i = 0; i < feeds_len; i++) {
                if (this.feeds[i].category) {
                    this.create_category_name(ul, this.feeds[i].category);
                }
                for (var k=0, klen=this.feeds[i].categorize_feeds.length; k<klen; k++) {
                    if (this.feeds[i]) {
                        if (loop < show_number) {
                            var li = this.create_item(this.feeds[i].categorize_feeds[k]);
                            ul.appendChild(li);
                        }
                        loop++;
                    }
                }
            }
        } else {
            var len = (ch.show_number != 0) ? ch.show_number : this.feeds.length;
            if (len > this.feeds.length) {len = this.feeds.length}

            for (var i = 0; i < len; i++) {
                var li = this.create_item(this.feeds[i]);
                ul.appendChild(li);
            }
        }
        div.appendChild(ul);
        if (ch.show_ad == 1) {
            this.add_ad(div, ul);
        }
        if (typeof blogroll_is_preview == "undefined") {
            this.show_log();
        }
    };

    // callback function
    function blogroll_write_feeds (id, config, feeds, is_categorize) {
        (new Blogroll(id, config, feeds, is_categorize)).show("blogroll-" + id);
    };
    function blogroll_preview (id, config, feeds, output_id, is_categorize) {
        (new Blogroll(id, config, feeds, is_categorize)).preview(output_id);
    };
    function refresh_preview (output_id, channel_id, name, value) {
        br = window.br || new Blogroll(channel_id, blogroll_ch, blogroll_feeds, blogroll_preview_is_categorize);

        if (name == "show_per_category") {
            if (value == 1) {
                br.is_categorize = 1;
                blogroll_feeds = blogroll_feeds_categorize;
            } else {
                br.is_categorize = 0;
                blogroll_feeds = blogroll_feeds_noncategorize;
            }
        }

        br = new Blogroll(channel_id, blogroll_ch, blogroll_feeds, br.is_categorize);
        br.show(output_id, name, value);
    };
};

(function () {
    if (typeof blogroll_channel_id == "undefined") {
        return;
    }
    document.write('<div id="blogroll-' + blogroll_channel_id + '" class="blogroll-channel"></div>');
    var chid = blogroll_channel_id;
    (function() {
        var script = document.createElement('script');
        // XXXX get from document.getElementsByTagName('script').pop().src ????
        var host = (typeof blogroll_roll_host == 'undefined') ? "http://blogroll.livedoor.net/" : blogroll_roll_host;
        script.src = host + chid + "/roll_data";
        if (typeof blogroll_is_preview != "undefined") {
            script.src += "?is_preview=1";
        }
        script.charset = "UTF-8";
        script.defer = "defer";
        script.async = "async";
        script.type = "text/javascript";
        document.getElementsByTagName('head')[0].appendChild(script);
    }) ();
    blogroll_channel_id = undefined;
})();

