/*
  keywords by Christian Heilmann
  Version: 1.0
  Copyright (c) 2008, Christian Heilmann
  Code licensed under the BSD License:
  http://wait-till-i.com/license.txt
*/
KEYWORDS = function(){
  var config = {
    // insert your app id here - https://developer.yahoo.com/wsregapp/
    appID:'y7glC9_V34HOP0NVzZXD6y7IjgsIp8DsSxsoEHFVWHuWRf_HS7kvt7WZz0qOcfU-',
    amount:20
  }
  var out = {};
  var callback = alert;
  function getTerms(term,cb){
    var api = 'http://boss.yahooapis.com/ysearch/web/v1/' + 
              term + '?format=json&view=keyterms&callback=KEYWORDS.seed'+
              '&appid=' + config.appID;
    var s = document.createElement('script');
    s.src = api;
    s.type = 'text/javascript';
    document.getElementsByTagName('head')[0].appendChild(s);
    if(typeof cb === 'function'){
      callback = cb;
    }
  }
  function seed(o){
    if(typeof o.ysearchresponse.nextpage !== 'undefined'){
      var next = o.ysearchresponse.nextpage.split('?')[0];
      var query = next.replace(/.*?\//g,'');
    } 
    out.term = query;
    out.keywords = [];
    var results = o.ysearchresponse.resultset_web;
    for(var i=0,j=results.length;i<j;i++){
      out.keywords = out.keywords.concat(results[i].keyterms.terms);
    }
    var filtered = filter(out.keywords)
    out.keywords = filtered[0];
    out.toplist = filtered[1].join(',');
    callback(out);
  }
  function filter(kw){
    var kw = kw.join(',');
    kw = kw.toLowerCase();
    kw = kw.split(',');
    var kw = kw.sort();
    var count = 0;
    var filtered = [];
    for(var i=0,j=kw.length-1;i<j;i++){
      if(kw[i]!==kw[i+1]){
        filtered.push(count + '|' + kw[i]);
        count = 0;
      }
      count++;
    }
    filtered.sort(function(a,b){
      return parseInt(a) - parseInt(b);
    });
    filtered.reverse();
    filtered = filtered.slice(0,config.amount);
    var toplist = []
    for(var i=0,j=filtered.length;i<j;i++){
      var bits = filtered[i].split('|');
      toplist.push(bits[1]);
      filtered[i] = {term:bits[1],amount:bits[0]};
    }
    return [filtered,toplist];
  }
  return{seed:seed,get:getTerms,config:config}
}();