/* -*- Mode:javascript; indent-tabs-mode: nil; -*- */
/* Jeremy English 10-March-2008 */

function dateString(date){
    var d = new Date();
    var re = /^(\d)$/;
    d.setTime(Date.parse(date));
    var mo  = (d.getMonth()+1).toString().replace(re, "0$1");
    var day = d.getDate().toString().replace(re, "0$1");
    var yr  = d.getFullYear().toString();
    return mo + '/' + day + '/' + yr;
}

function gitHubDateString(date){
    var re = /^(\d{4})-(\d{2})-(\d{2}).+$/;
    var m = date.match(re);
    return m[2] + '/' + m[3] + '/' + m[1];
}


function buildNodePicker(item){
    var f = function(name){
        return item.getElementsByTagName(name)[0].firstChild.nodeValue;
    }
    return f;
}

function buildAttrPicker(item){
    var f = function(name, attr){
        return item.getElementsByTagName(name)[0].attributes.getNamedItem(attr).value;
    }
    return f;
}

function ListItem(scon, postDiv, expand){
    this.scon = scon;
    this.postDiv = postDiv;
    this.on = true;
    this.expand = expand;
}

ListItem.prototype.onclick = function(){
    var obj = this;
    return (function(){
            if (obj.on){
                obj.scon.appendChild(obj.postDiv);
                  obj.expand.src = 'unfolded.png';
            }else{
                       obj.scon.removeChild(obj.postDiv);
                  obj.expand.src = 'folded.png';
            }
        obj.on = !obj.on;
    })
}


function showSummary(xmlData, closure){
    var xmlType = closure[0];
    var cname = closure[1];
    var browser = getBrowser();
    var doc = browser.readXML(xmlData);

    if (xmlType == 'atom'){
        var items = doc.getElementsByTagName("entry");
    }
    else{
        var items = doc.getElementsByTagName("item");
    }

    var container = document.getElementById(cname);
    var n = Math.min(5, items.length);

    for (var i = 0; i < n; i++){
        var nodePicker = buildNodePicker(items[i]);
        var attrPicker = buildAttrPicker(items[i]);
        if (xmlType == 'atom'){
            var title = nodePicker("title");
			var re = /^jeng /;
			title = title.replace(re,"");
            var link = attrPicker("link","href");
            var date = nodePicker("published");
            var post = nodePicker("content");
            var dateStr = gitHubDateString(date);
        }
        else{
            var title = nodePicker("title");
            var link = nodePicker("link");
            var date = nodePicker("pubDate");
            if (browser.type == 'ie' || (browser.appName == 'firefox' && browser.appVersion >= 3)){
                var post = nodePicker("content:encoded");
            }
            else {
                var post = nodePicker("encoded");
            }
            var dateStr = dateString(date);
        }

        var scon   =  document.createElement('div');
        var anchor =  document.createElement('a');
        var idate =  document.createElement('i');
        var expand =  document.createElement('img');
        var brk =  document.createElement('br');
        var postDiv=  document.createElement('div');
        var id = i.toString();
        //        alert(browser.type);
        postDiv.innerHTML = post;
        postDiv.id = 'postdiv' + id;
        scon.id = 'scon' + id;
        anchor.href = link;
        anchor.innerHTML = '&nbsp;' + title;
        idate.innerHTML = '&nbsp;' + dateStr;
        idate.className = cname + "Date";
        anchor.className = cname + "Title";
        postDiv.className = cname + "Post";
        scon.appendChild(expand);
        scon.appendChild(anchor);
        scon.appendChild(idate);
        scon.appendChild(brk);
        container.appendChild(scon);
        expand.id = 'expand' + id;
        expand.src = 'folded.png';
        expand.alt = 'Folded/Unfolded image';
        var li = new ListItem(scon,postDiv,expand);
        expand.onclick = li.onclick();
    }
}


function getGithubAtom(){
    var browser = getBrowser();
    browser.ajaxRequest("github.atom",
                        "GET",
                        null,
                        showSummary,
                        false,
                        ['atom', 'gitHubSummary'] );
}

function getBlogRss(){
    var browser = getBrowser();
    browser.ajaxRequest("/blog/?feed=rss2",
                        "GET",
                        null,
                        showSummary,
                        false,
                        ['rss','blogSummary']);
}

function getFoldRss(source, div){
    var browser = getBrowser();
    browser.ajaxRequest(source,
                        "GET",
                        null,
                        showSummary,
                        false,
                        ['rss',div]);
}

function getBlogAndGitHub(){
    getGithubAtom();
    getBlogRss();
}

/* Last update Jeremy English 09-May-2009 */