// digg badge --  test version 05Sep2007; use at your own risk
// copyright Kent Brewster 2007
// see http://kentbrewster.com/put-your-digg-in-a-box for info
( function() { 
   var trueName = '';
   for (var i = 0; i < 16; i++) { trueName += String.fromCharCode(Math.floor(Math.random() * 26) + 97); }
   window[trueName] = {};
   var $ = window[trueName];
   $.f = function() {
      return { 
         runCount : 0,
         init : function(target) {
            var theScripts = document.getElementsByTagName('SCRIPT');
            for (var i = 0; i < theScripts.length; i++) {
               if (theScripts[i].src.match(target)) {
                  $.a = {};
                  if (theScripts[i].innerHTML) { $.a = $.f.parseJson(theScripts[i].innerHTML); }
                  if ($.a.err) { alert('bad json!'); }
                  $.f.buildStructure();
                  theScripts[i].parentNode.insertBefore($.w, theScripts[i]);
                  theScripts[i].parentNode.removeChild(theScripts[i]);
                  break;
               }
            }         
         },
         parseJson : function(json) {
            this.parseJson.data = json;
            if ( typeof json !== 'string') { return {"err":"trying to parse a non-string JSON object"}; }
            try {
               var f = Function(['var document,top,self,window,parent,Number,Date,Object,Function,',
                  'Array,String,Math,RegExp,Image,ActiveXObject;',
                  'return (' , json.replace(/<\!--.+-->/gim,'').replace(/\bfunction\b/g,'function&shy;') , ');'].join(''));
               return f();
            } catch (e) { return {"err":"trouble parsing JSON object"}; }
         },         
         buildStructure : function() {
            $.t = [ {"n":"All Stories", "v":""} ]
            $.a.offset = 0;
            var args = [ "topic", "width", "count", "title", "popular" ];
            var defaults = { "popular":true, "topic":"", "width":400, "count":10, "title":"Put Your Digg in a Box" };
            for (var i = 0; i < args.length; i++) { if (typeof defaults[args[i]] !== typeof $.a[args[i]] ) { $.a[args[i]] = defaults[args[i]]; } }
            if (!document.getElementById('diggBox')) {
               var link = document.createElement('LINK');
               link.id = 'diggBox'; 
               link.rel = 'stylesheet';
               link.type = 'text/css';
               link.href = 'http://r8ar.com/diggBox.css';
               document.getElementsByTagName('HEAD')[0].appendChild(link);
            }
            $.w = document.createElement('DIV');
            $.w.className = 'diggBox';
            if ($.a.className) {  try { $.w.className = $.a.className; } catch(err) { } }
            if ($.a.addClassName) {  try { $.w.className += ' ' + $.a.addClassName; } catch(err) { } }
            if ($.a.width) { try { $.w.style.width = $.a.width +'px'; } catch(err) { } }
            if ($.a.headerBackground) { try { $.w.style.background = $.a.headerBackground; } catch(err) { } }
            if ($.a.border) { try { $.w.style.border = $.a.border; } catch(err) { } }
            $.w.h = document.createElement('P');
            $.w.h.className = 'h';
            if ($.a.headerColor) { try { $.w.h.style.color = $.a.headerColor; } catch(err) { } }
            $.w.q = document.createElement('SELECT');
            for (var i = 0; i < $.t.length; i++) {
               var option = document.createElement('OPTION');
               option.text = $.t[i].n;
               option.value = $.t[i].v;
               $.w.q.options.add(option);
            }
            if (typeof $.a.addTopics === 'object' && $.a.addTopics.length) {
               for (var i = 0; i < $.a.addTopics.length; i++) {
                  var dupe = false;
                  for (var j = 0; j < $.w.q.options.length; j++) {
                     if ($.a.addTopics[i].short_name == $.w.q.options[j].value) { dupe = true; }
                  }
                  if (!dupe) {
                     var option = document.createElement('OPTION');
                     option.text = $.a.addTopics[i].name;
                     option.value = $.a.addTopics[i].short_name;
                     $.w.q.options.add(option);
                  }
               }
            }
            $.w.q.onchange = function() {
              $.a.topic = $.w.q.value;
              $.a.offset = 0;
              $.f.runSearch();
            }
            $.w.h.appendChild($.w.q);
            $.w.h.appendChild(document.createTextNode($.a.title));
            $.w.appendChild($.w.h);
            $.w.r = document.createElement('DL');
            if ($.a.evenBackground) { try { $.w.r.style.color = $.a.evenBackground; } catch(err) { } }
            $.w.appendChild($.w.r);
            $.f.runSearch();
         },
         runSearch : function() {
            $.f.callback = trueName + $.f.runCount;
            $.f.runCount++;
            window[$.f.callback] = function(r) {
               delete($.f.callback);
               $.f.removeScript($.f.callback);
               $.f.renderResult(r);
            };
            var url = 'http://services.digg.com/stories/';
            if ($.a.topic) { url += 'topic/' + $.a.topic; }
            if ($.a.popular) { url += '/popular/'; }
            url += '?offset=' + $.a.offset;
            url += '&count=' + $.a.count;
            url += '&appkey=http%3A%2F%2Fr8ar.com%2fdigg&type=javascript&callback=' + $.f.callback;
            $.f.runScript(url, $.f.callback);
         },
         renderResult: function(r) {
            $.w.r.innerHTML = '';
            $.w.r.d = [];
            $.w.r.s = [];
            $.w.r.u = [];
            if (r.stories) {
               for (var i = 0; i < r.stories.length; i++) {
                  var dt = document.createElement('DT');
                  var icon = document.createElement('A');
                  icon.innerHTML = r.stories[i].diggs;
                  icon.target = '_digg';
                  icon.alt = r.stories[i].href;
                  icon.rel = r.stories[i].topic.name;
                  icon.ver = r.stories[i].topic.short_name;
                  icon.className = 'icon';
                  icon.onmouseover = function() { $.f.toggleStuff(this.parentNode.nextSibling, 0); }
                  icon.onmouseout = function() { this.parentNode.nextSibling.style.display = 'none'; }
                  icon.onmousedown = function(v) {
                     var v = v || window.event;
                     if (v.shiftKey) {
                        var dupe = false;
                        for (var i = 0; i < $.w.q.options.length; i++) {
                           $.w.q.options[i].selected = false;
                           if ($.w.q.options[i].value == this.ver) {
                              $.w.q.options[i].selected = true;
                              $.a.topic = $.w.q.options[i].value;
                              dupe = true;
                           }
                        }
                        if (!dupe) {
                           var option = document.createElement('OPTION');
                           option.text = this.rel;
                           option.value = this.ver;
                           option.selected = true;
                           $.w.q.options.add(option);
                           $.a.topic = this.ver;
                           $.a.offset = 0;
                        }
                        $.f.runSearch();
                     } else { window.open(this.alt, '_blank', '', 0); }                  
                  }
                  dt.appendChild(icon);
                  var profile = document.createElement('A');
                  profile.target = '_digg';
                  profile.className = 'icon';
                  var img = document.createElement('IMG');
                  img.src = r.stories[i].user.icon;
                  img.height = '32';
                  img.border = 0;
                  img.width = '32';
                  profile.appendChild(img);
                  profile.href = 'http://digg.com/users/' + r.stories[i].user.name + '/news/dugg';
                  profile.onmouseover = function() { $.f.toggleStuff(this.parentNode.nextSibling, 1); }
                  profile.onmouseout = function() { this.parentNode.nextSibling.style.display = 'none'; }
                  dt.appendChild(profile);
                  var dest = document.createElement('A');
                  dest.href = r.stories[i].link;
                  dest.innerHTML = r.stories[i].title;
                  dest.target = '_blank';
                  dest.onmouseover = function() { $.f.toggleStuff(this.parentNode.nextSibling, 2); }
                  dest.onmouseout = function() { this.parentNode.nextSibling.style.display = 'none'; }
                  if ( i % 2) {
                     dt.className = 'odd';
                     if ($.a.oddBackground) { try { dt.style.background = $.a.oddBackground; } catch(err) { } }
                     if ($.a.oddColor) { try { dest.style.color = $.a.oddColor; } catch(err) { } }
                  } else {
                     if ($.a.evenBackground) { try { dt.style.background = $.a.evenBackground; } catch(err) { } }
                     if ($.a.evenColor) { try { dest.style.color = $.a.evenColor; } catch(err) { } }
                  }
                  dt.appendChild(dest);
                  $.w.r.appendChild(dt);
                  var details = document.createElement('DD');
                  if ($.a.hoverColor) { try { details.style.color = $.a.hoverColor; } catch(err) { } }
                  if ($.a.hoverBackground) { try { details.style.background = $.a.hoverBackground; } catch(err) { } }
                  if ($.a.hoverBorder) { try { details.style.border = $.a.hoverBorder; } catch(err) { } }
                  details.style.zIndex = i + 100;
                  details.style.width = $.a.width - 10 + 'px';
                  var status = document.createElement('P');
                  status.style.display = 'none';
                  var subDate = $.f.formatDate(r.stories[i].submit_date);
                  $.w.r.s[i] = "Posted: " + subDate + '<br />Diggs: ' + r.stories[i].diggs + '<br />Status: ' + r.stories[i].status + '<br />Comments: ' + r.stories[i].comments + '<br />Topic: ' + r.stories[i].topic.name + '<br />Click to view diggs; shift-click to add topic.';
                  status.innerHTML = $.w.r.s[i];
                  details.appendChild(status);
                  var user = document.createElement('P');
                  user.style.display = 'none';
                  $.w.r.u[i] = "Name: " + r.stories[i].user.name + "<br />Member Since: " + $.f.formatDate(r.stories[i].user.registered) + '<br />Profile Views: ' + r.stories[i].user.profileviews + '<br />Click to visit Digg profile.';
                  user.innerHTML = $.w.r.u[i];
                  details.appendChild(user);
                  var description = document.createElement('P');
                  description.style.display = 'none';
                  $.w.r.d[i] = r.stories[i].description;
                  description.appendChild(document.createTextNode($.w.r.d[i]));
                  details.appendChild(description);
                  $.w.r.appendChild(details);
               }
            }
            var ft = document.createElement('DT');
            ft.className = 'f';
            if ($.a.headerColor) { try { ft.style.color = $.a.headerColor; } catch(err) { } }
            if ($.a.headerBackground) { try { ft.style.background = $.a.headerBackground; } catch(err) { } }
            if (r.stories) {
            if ($.a.offset > 0 ) {
                  var pr = document.createElement('A');
                  pr.style.zIndex = 0;
                  pr.innerHTML = 'previous ' + $.a.count;
                  if ($.a.headerColor) { try { pr.style.color = $.a.headerColor; } catch(err) { } }
                  pr.onmouseup = function() {
                     $.a.offset -= $.a.count;
                     $.f.runSearch();
                  }
                  ft.appendChild(pr);
                  ft.appendChild(document.createTextNode(' - '));
               }
               if ($.a.offset + $.a.count < r.total) {
                  var nx = document.createElement('A');
                  nx.style.zIndex = 0;
                  nx.innerHTML = 'next ' + $.a.count;
                  if ($.a.headerColor) { try { nx.style.color = $.a.headerColor; } catch(err) { } }
                  nx.onmouseup = function() {
                     $.a.offset += $.a.count;
                     $.f.runSearch();
                  }
                  ft.appendChild(nx);
                  ft.appendChild(document.createTextNode(' - '));
               }
               var pp = document.createElement('A');
               if ($.a.headerColor) { try { pp.style.color = $.a.headerColor; } catch(err) { } }
               if ($.a.popular) {
                  pp.innerHTML = 'show all';
                  pp.onmouseup = function() {
                     $.a.offset = 0;
                     $.a.popular = false;
                     $.f.runSearch();
                  }
               } else {
                  pp.innerHTML = 'show popular';
                  pp.onmouseup = function() {
                     $.a.offset = 0;
                     $.a.popular = true;
                     $.f.runSearch();
                  }
               }
               ft.appendChild(pp);
            } else {
               ft.appendChild(document.createTextNode('Nothing found, sorry! '));
            }
            ft.appendChild(document.createTextNode(' - '));
            var gt = document.createElement('A');
            gt.style.zIndex = 0;
            gt.innerHTML = 'get this';
            gt.target = '_blank';
            gt.href = 'http://kentbrewster.com/put-your-digg-in-a-box';
            if ($.a.headerColor) { try { gt.style.color = $.a.headerColor; } catch(err) { } }
            ft.appendChild(gt);
            $.w.r.appendChild(ft);
         },
         formatDate : function(utime) {
            var d = new Date(utime * 1000);
            var prettyDate = d.getFullYear() + '-' + d.getMonth() + '-' + d.getDay() + ' ' + d.getHours() + ':' + d.getMinutes()+ ':' + d.getSeconds();
            return prettyDate;
         },
         toggleStuff : function(dd, n) {
            var p = dd.getElementsByTagName('P');
            for (var i = 0; i < p.length; i++) {
               p[i].style.display = 'none';
            }
            p[n].style.display = 'block';
            dd.style.display = 'block';
         },
         runScript : function(url, id) {
            var s = document.createElement('script');
            s.id = id;
            s.type ='text/javascript';
            s.src = url;
            document.getElementsByTagName('body')[0].appendChild(s);
         },
         removeScript : function(id) {
            if (document.getElementById(id)) {
               var s = document.getElementById(id);
               s.parentNode.removeChild(s);
            }
         }         
      };
   }();
   var thisScript = /^https?:\/\/[^\/]*r8ar.com\/diggBox.js$/;
   if(typeof window.addEventListener !== 'undefined') {
      window.addEventListener('load', function() { $.f.init(thisScript); }, false);
   } else if(typeof window.attachEvent !== 'undefined') {
      window.attachEvent('onload', function() { $.f.init(thisScript); });
   }
} )();
