(function() {
    function findURL() {
        // assume that last script in page is this script
        var scripts = document.getElementsByTagName('script');
        var script = scripts[scripts.length-1];
        var scriptURL = script.getAttribute('src');
        var m = scriptURL.match('^.*\\?(.*)');
        if ( m ) {
            return m[1];
        }
        return ''
    }
    
    var scriptURL = findURL();
    // default to new
    var URL = scriptURL? 'http://huffduffer.com/'+scriptURL : 'http://huffduffer.com/new';
    
    function uuid() {
        var id = "_"+(new Date()).getTime();
        for ( var i = 0; i < 8; i++ ) {
            id += "0123456789".charAt(Math.floor(Math.random()*10));
        }
        return id;
    }
    var id = uuid();
    var div_id = 'huffduffer'+id;
    
    function requestContent() {
        var script = document.createElement('script');
        script.src = URL + '/json?callback='+id;
        // IE7 doesn't like this: document.body.appendChild(script);
        // Instead use:
        document.getElementsByTagName('head')[0].appendChild(script);
    }
    
    function createCallback(div_id) {
        // return a function with the div_id in a closure
        return function(data) {
            // style the div
            var div = document.getElementById(div_id);
            div.style.fontFamily='Baskerville,Garamond,\'Hoefler Text\',\'Adobe Caslon Pro\',\'Bell MT\',\'Times New Roman\',Georgia,sans-serif';
            div.style.backgroundColor='#fff';
            div.setAttribute('title', data.title);
            
            var ul = document.createElement('ul');
            ul.style.listStyle='none';
            ul.style.padding='0';
            ul.style.margin='0';
            var items = data.items;
            for ( var i = 0; i < items.length; i++ ) {
                var item = items[i];
                var li = document.createElement('li');
                var a = document.createElement('a');
                a.setAttribute('href', item.link);
                a.setAttribute('title', item.description);
                a.style.color='#456789';
                a.innerHTML=item.title;
                li.appendChild(a);
                ul.appendChild(li);
                
                if ( i == 0 ) {
                    li.style.backgroundImage='url(http://huffduffer.com/images/next.gif)';
                    li.style.backgroundPosition='right center'
                    li.style.backgroundRepeat='no-repeat';
                    li.style.padding='0.5em 60px 0.5em 0.5em';
                    
                    var link = document.createElement('a');
                    var defaultLabel = 'Show more huffduffed items';
                    
                    function show() {
                        var div = document.getElementById(div_id);
                        var lis = div.getElementsByTagName('li');
                        for ( var i = 0; i < lis.length; i++ ) {
                            var li = lis.item(i);
                            li.style.display='';
                        }
                        link.onclick=hide;
                        link.setAttribute('title', 'Hide huffduffed items');
                        link.removeChild(link.childNodes[0]);
                        link.appendChild(document.createTextNode('x'));
                        return false;
                    }

                    function hide() {
                        var div = document.getElementById(div_id);
                        var lis = div.getElementsByTagName('li');
                        for ( var i = 0; i < lis.length; i++ ) {
                            var li = lis.item(i);
                            if ( i != 0 ) {
                                li.style.display='none';
                            }
                        }
                        link.onclick=show;
                        link.setAttribute('title', defaultLabel);
                        link.removeChild(link.childNodes[0]);
                        link.appendChild(document.createTextNode('...'));
                        return false;
                    }
                    
                    link.appendChild(document.createTextNode('...'));
                    link.setAttribute('href','#');
                    link.setAttribute('title', defaultLabel);
                    link.style.color='#456789';
                    var small = document.createElement('small');
                    small.appendChild(document.createTextNode(' ['));
                    small.appendChild(link);
                    small.appendChild(document.createTextNode('] '));
                    link.onclick=show;
                    
                    li.appendChild(small);
                }
                else {
                    if ( i != (items.length-1) ) {
                        li.style.borderBottom='1px dotted #CCCCCC';
                    }
                    li.style.display='none';
                    li.style.padding='0.5em 60px 0.5em 1em';
                }
            }
            div.appendChild(ul);
        };
    }
    
    // create a function with a generated name, to ensure 
    // we get the right div
    window[id] = createCallback(div_id);
    document.write("<div id='"+div_id+"'></div>");
    
    // small delay to avoid holding up the page loading
    setTimeout(requestContent,10);
})();

