// JavaScript Document

SITESEARCH = function(){
  var config = {
    IDs:{
      searchForm:'customsearch',
      term:'term',
      site:'site'
    },
    loading:'Loading results...',
    noresults:'No results found.',
    appID:'YOUR-APP-ID',
    results:20
  };
  var form;
  var out;
  function init(){
    if(config.appID === 'YOUR-APP-ID'){
      alert('Please get a real application ID!');
    } else {
      form = document.getElementById(config.IDs.searchForm);
      if(form){
        form.onsubmit = function(){
          var site = document.getElementById(config.IDs.site).value;
          var term = document.getElementById(config.IDs.term).value;
          if(typeof site === 'string' && typeof term === 'string'){
            if(typeof out !== 'undefined'){
              out.parentNode.removeChild(out);
            }
            out = document.createElement('p');
            out.appendChild(document.createTextNode(config.loading));
            form.appendChild(out);
            var APIurl = 'http://boss.yahooapis.com/ysearch/web/v1/' + 
                          term + '?callback=SITESEARCH.found&sites=' + 
                          site + '&count=' + config.results + 
                          '&appid=' + config.appID;
            var s = document.createElement('script');
            s.setAttribute('src',APIurl);
            s.setAttribute('type','text/javascript');
            document.getElementsByTagName('head')[0].appendChild(s);
            return false;
          }
        };
      }
    }
  };
  function found(o){
    var list = document.createElement('ul');
    var results = o.ysearchresponse.resultset_web;
    if(results){
      var item,link,description;
      for(var i=0,j=results.length;i<j;i++){
        item = document.createElement('li');
        link = document.createElement('a');
        link.setAttribute('href',results[i].clickurl);
        link.innerHTML = results[i].title;
        item.appendChild(link);
        description = document.createElement('li');
        description.innerHTML = results[i]['abstract'];
        item.appendChild(description);
        list.appendChild(item);
      }
    } else {
      list = document.createElement('p');
      list.appendChild(document.createTextNode(config.noresults));
    }
    form.replaceChild(list,out);
    out = list;
  };
  return{
    config:config,
    init:init,
    found:found
  };
}();
