var BBCSEARCH = function() {
   $ = {};
   return {
      init : function(el) {
         $.badge = document.getElementById(el);
         $.h = document.createElement('a');
         $.h.className = 'home';
         $.h.target = '_blank';
         $.badge.appendChild($.h);
         $.q = document.createElement('input');
         $.badge.appendChild($.q);
         $.r = document.createElement('dl');
         $.r.style.display = 'none';
         $.badge.appendChild($.r);
         BBCSEARCH.ping = [];
         $.lastQuery = '';
         setInterval(BBCSEARCH.runSearch, 500);
      },
      runSearch : function(query) {
      
         if ($.q.value) {
            if ($.q.value != $.lastQuery) {
               $.lastQuery = $.q.value;
               
         var n = BBCSEARCH.ping.length;
         $.h.className = 'loading';
         BBCSEARCH.ping[n] = function(result) {
            delete BBCSEARCH.ping[n];
            $.h.href = 'http://search.bbc.co.uk/cgi-bin/search/results.pl?scope=all&q=' + $.q.value;
            BBCSEARCH.removeScript('BBCSEARCH.ping[' + n + ']');
            $.r.innerHTML = '';
            $.r.style.display = 'block';
            if (result.ResultSet.Result.length) {
               for (var i = 0; i < result.ResultSet.Result.length; i++) {
                  var dt = document.createElement('dt');
                  var a = document.createElement('a');
                  a.className = 'bookmark';
                  a.title = 'save to del.icio.us';
                  a.onmouseup = function() {
                     BBCSEARCH.saveBookmark(this);
                  }
                  dt.appendChild(a);
                  var a = document.createElement('a');
                  a.rel = result.ResultSet.Result[i].Title;
                  var t = result.ResultSet.Result[i].Title.split(' | ')
                  a.innerHTML = t[t.length-1]; 
                  a.href = result.ResultSet.Result[i].Url
                  a.target = '_blank';
                  a.onmouseover = function() {
                     this.parentNode.nextSibling.style.display = 'block';
                  }
                  a.onmouseout = function() {
                     this.parentNode.nextSibling.style.display = 'none';
                  };
                  dt.appendChild(a);
                  if (i % 2) { dt.className = 'odd'; }
                  $.r.appendChild(dt);
                  var dd = document.createElement('dd');
                  var p = document.createElement('p');
                  p.innerHTML = result.ResultSet.Result[i].Summary;
                  dd.appendChild(p);
                  dd.style.zIndex = i + 100;
                  $.r.appendChild(dd);
               }
            } else {
               var dt = document.createElement('dt');
               dt.innerHTML = 'Nothing found, sorry!';
               $.r.appendChild(dt);
            }
            $.h.className = 'home';
         };
         var callback = 'BBCSEARCH.ping[' + n + ']';
         var url = 'http://search.yahooapis.com/WebSearchService/V1/webSearch?';
         url += '&appid=bbcSearch';
         url += '&site=news.bbc.co.uk'; 
         url += '&results=20'; 
         url += '&output=json';
         url += '&query=' + $.q.value;
         url += '&callback=' + callback;
         BBCSEARCH.runScript(url, callback);
            }
         } else {
            if ($.lastQuery) {
               $.r.style.display = 'none';
               $.r.innerHTML = '';
               $.h.href = 'http://en.wikipedia.org';
            }
         }      
      },
      saveBookmark : function(el) {
         var ns = el.nextSibling;
         var url='http://del.icio.us/post/?';
         url += 'url=' + escape(ns.href);
         url += '&title=' + escape(ns.rel);
         url += '&jump=no';
         window.open(url,'popup','width=720px,height=420px',0);
      }, 
      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) {
         var s = '';
         if (s = document.getElementById(id)) {
            s.parentNode.removeChild(s);
         }
      }
   };
}();

window.onload = function() {
   BBCSEARCH.init('bbcSearch');
};