// ==UserScript==
// @name          n-Category Cafe
// @description   change the behavior of the blog to match my way of using it
// @include       http://golem.ph.utexas.edu/*
// ==/UserScript==

window.addEventListener("load",function(){

// JSON to DOM element converter
// http://www.arantius.com/article/dollar-e
// MIT license  http://www.opensource.org/licenses/mit-license.php
var createTree = function(data) {
    var el;
    if ('string'==typeof data) {
        el=document.createTextNode(data);
    } else {
        //create the element
        el=document.createElement(data.tag);
        delete(data.tag);

        //append the children
        if ('undefined'!=typeof data.children) {
            if ('string'==typeof data.children ||
                'undefined'==typeof data.children.length
            ) {
                //strings and single elements
                el.appendChild(createTree(data.children));
            } else {
                //arrays of elements
                for (var i=0, child=null; 'undefined'!=typeof (child=data.children[i]); i++) {
                    el.appendChild(createTree(child));
                }
            }
            delete(data.children);
        }

        //any other data is attributes
        for (attr in data) {
            if ('innerHTML'==attr){ el.innerHTML=data[attr];}
            else el.setAttribute(attr,data[attr]);
        }
    }

    return el;
};

function strip(str)
{
    str=str.replace(/(<[^>]*>)/gm,"");
    return str;
}

var s=document.getElementById("convert_breaks");
if (s) { s.selectedIndex=1; }

var parent_id=0;
var allInputs = document.getElementsByTagName("input");
for (var i = 0; i < allInputs.length; i++) {
    thisInput=allInputs[i];
    if (thisInput.getAttribute("name")=='parent_id') {
        parent_id=thisInput.getAttribute("value");
        break;
    }
}

var msg=location.href.split(/\#/);
if (msg.length>1 && (msg[1]=='comments' || msg[1]=='more')) msg=new Array();

var parent_match=location.href.match(/parent_id=([^&]*)/);
if (parent_match && !parent_id) parent_id = parent_match[1];

var check=null;
if (msg.length>1) check=function(x){return x != msg[1];}
else if (parent_id) check=function(x){return parseInt(x.substring(2),10) != parent_id;}

if (check) {
    var allDivs, thisDiv;
    allDivs = document.getElementsByTagName("div");
    for (var i = 0; i < allDivs.length; i++) {
        thisDiv = allDivs[i];
        if (thisDiv.getAttribute("id"))
        {
            var cl=thisDiv.getAttribute("class");
            if (cl!='comments-body' && cl!='trackback') continue;
            // do something with thisDiv
            var id=thisDiv.getAttribute("id");
            var flag=((cl=='comments-body' && check(id)) || cl=='trackback');
            var hits=thisDiv.innerHTML.match(/3>((.|\r|\n)*)/);
            if (hits && hits.length && hits.length>1) hits=hits[1];
            var newDiv=createTree({
                tag:'div',
                children:[{
                    tag:'span',
                    style:'cursor:pointer',
                    innerHTML:'\u229e',
                    onclick:
                        "var d=document.getElementById('x"+id+"');"+
                        "document.getElementById('y"+id+"').style.display=d.style.display;"+
                        "d.style.display=(d.style.display=='none')?'inline':'none';"
                },{
                    tag:'span',
                    id:'y'+id,
                    style:'display:'+(flag?'inline':'none'),
                    innerHTML:(hits?strip(hits).substring(0,50):"")+"..."
                },{
                    tag:'span',
                    id:'x'+id,
                    style:'display:'+(!flag?'inline':'none'),
                    innerHTML:thisDiv.innerHTML
                }]
            });
            thisDiv.parentNode.insertBefore(newDiv,thisDiv);
            thisDiv.parentNode.removeChild(thisDiv);
        }
    }
}

},true);

