google.load('search', '1');
var searchControl;

function display_ads(html_) {
  function render() {
    $j('div.gsc-resultsRoot > .gsc-results.gsc-webResult').each(function(){
	$j(html_).insertBefore(this)
     });
    display_ads = display_ads;
  }
  if (display_ads.results_loaded)
    render();
  else {
    display_ads = render;
  }
}

function populateTags() {
  var q = document.getElementById("queries");
  var renderer = (new PopularQueryRenderer(q));
  renderer.render.apply(renderer, arguments);
  var params = deserializeUrl();
  $j(q).find('a').each(function(){
    params['q'] = this.innerHTML;
    this.href = '?'+serializeParams(params);
  });
}

 function deserializeUrl() {
    var ret = {};
    var search = location.search.slice(1);
    if (search) {
      for (var pairs = search.split('&'), i = 0, l = pairs.length, pair; i < l; i++) {
	pair = pairs[i].split('=');
	key = decodeURIComponent(pair[0]);
	val = decodeURIComponent(pair[1]);
	if (key in ret) {
	  if (!(ret[key] instanceof Array)) {
	    ret[key] = [ret[key]];
	  }
	  ret[key].push(val);
	} else {
	  ret[key] = val;
	}
      }
    }
    return ret;
  }

function serializeParams(params) {
  var v, aParams = [];
  for (var key in params) {
    v = params[key];
    key = encodeURIComponent(key);
    if (v instanceof Array) {
      for (var i = 0, l = v.length; i < l; i++) {
	aParams.push(key + '=' + encodeURIComponent(v[i]));
      }
    }
      else
	aParams.push(key + '=' + encodeURIComponent(v));
    }

  return aParams.join('&');
}


(function(){
  var modal_tpl = '<div class="ka-section ka-hvr"><h2>#{title}</h2><div class="ka-content">#{message}</div></div>';

 
  function getRootEl(){ return $j('#searchcontrol') }
  function getActiveTab(){return getRootEl().find('div.gsc-tabsArea div.gsc-tabhActive')};

  function getSearchQueryEl() {
    return getRootEl().find('form.gsc-search-box input.gsc-input');
  }

  function refreshPages(){
    var qEl = getSearchQueryEl();
    var v = qEl.attr('value');
    if (window.yuku_q == $j.trim(v))
      return false;

    var params = deserializeUrl();
    params['q'] = v;
    params['t'] = $j.trim(getActiveTab().text());
    window.location.search = serializeParams(params);

    return true;
  }

  function setUpFormEvents(){
    getRootEl().find('form.gsc-search-box input.gsc-input').bind('keypress', function(e){
      if (e.isKeyPressed('Enter')) {
	return !refreshPages();
      }
    });
    getRootEl().find('form.gsc-search-box input[type=submit]').bind('keypress', function(e){
      if (e.isKeyPressed('Enter') && refreshPages()) {
	e.stopPropagation();
	e.preventDefault()
      }
    }).click(function(e){
      if (refreshPages()) {
	e.stopPropagation();
	e.preventDefault()
      }
    });
  };

  function reloadTabs(e){
    e.preventDefault();
    e.stopPropagation();
    var params = deserializeUrl();
    params['t'] = $j.trim(getActiveTab().text());
    window.location.search = serializeParams(params);
    getRootEl().find('div.gsc-resultsRoot').css({'visibility':'hidden'});
  }

  function classifyTabs(){
    /* get all divs with class name gsc-tabHeader and to them class
       name ka-tab-THE_CONTENT_OF_THE_TAB. Where any consecutive
       spaces in THE_CONTENT_OF_THE_TAB is replaced with a dash */
    var div, divs = getRootEl().find('div.gsc-tabHeader');
    for (var l = divs.length; l--; ) {
      div = $j(divs[l]);
      var key = $j.trim(div.html());
      if (key in classMap) {
	div.addClass(classMap[key]);
	if (key == window.yuku_t)
	  div.click();
//	div.click(reloadTabs);
      }
    }
  }

  function tabifySearchControl(searchControl) {
    var tab_data, tab, type;
    /* add tabs to searchcontrol thnigy */
    for (var i = 0, l = tabs.length; i < l; i++) {
      tab_data = tabs[i];
      type = tab_data.type + 'Search';
      if (!(type in google.search))
	continue;
      tab = new google.search[type]();
      tab.setUserDefinedLabel(tab_data.name);
      //if ('domain' in tab_data)
	//tab.setSiteRestriction(tab_data.domain);
      if ((tab_data.name == 'Images') || (tab_data.name == 'YukuVerse'))
	tab.setSiteRestriction('yuku.com');
      if (tab_data.type == 'Image')
	tab.setRestriction(google.search.ImageSearch.RESTRICT_IMAGESIZE,
			   ['huge', 'xxlarge', 'xlarge', 'large', 'medium' ]);
      searchControl.addSearcher(tab);
    }
  }

  function initSeachControl(){
    // Create a search control
	//Create a custom search control that uses a CSE restricted to code.google.com
	//searchControl = new google.search.CustomSearchControl('010152722869508787056:rir2sxr2say');


    searchControl = new google.search.SearchControl();
    searchControl.setResultSetSize(google.search.Search.LARGE_RESULTSET);

    /* draw the the searchcontrol with tabs */
    var options = new google.search.DrawOptions();
    options.setDrawMode(GSearchControl.DRAW_MODE_TABBED);

    tabifySearchControl(searchControl);

    searchControl.draw(getRootEl()[0], options);

    var l = tabs.length;
    searchControl.setSearchCompleteCallback(null, function(){
      if (!(--l)) {
	display_ads();
	l = tabs.length;
      }
    });

    classifyTabs();

    // Execute an inital search
    searchControl.execute(window.yuku_q);
    setUpFormEvents();
  }

  google.setOnLoadCallback(initSeachControl, true);
  $j(document).click(function(e){
     var t = e.target;
     if (t.tagName != 'IMG' || t.className.indexOf('gs-image') == -1)
       return;

     var $result = $j(t).parents('div.gs-imageResult:first');
     var title = $result.find('div.gs-snippet').text();
     var img = $result.find('a.gs-image').attr('href');
     //var url = $result.find('a.gs-image').attr('src');
     var url = t.src;
     e.preventDefault();
     yut.Modal.open();
     var $content = $j(yut.String.replaceFromDict(modal_tpl, {title: title, message:'<p class="ka-image"><img class="ka-image" src="'+url+'"></p><p class="ka-modal-actions"><a href="'+img+'">Go to image page</a><p>'}));
     yut.Modal.setContent($content);
  });

  
})();


(function(){

  var prefix = '<div class="featuredAds" id="featuredAds">';
  var sufix = '<div class="featuredAds" id="featuredAds">';
  var tpl = '<div class="gsc-webResult gsc-result">\
    <div class="gs-webResult gs-result">\
      <div class="gs-title">\
	<a target="_blank" class="gs-title" href="#{redirectUrl}">#{title}</a>\
	<div class="resultSponsored">Featured content</div>\
      </div>\
      <div class="gs-snippet">#{snippet}\
	<div class="resultDomain"><a class="resultDomainLink" href="#{redirectUrl}">#{source}</a></div>\
      </div>\
<img src=#{trackingUrl}" width="1" height="1">\
    </div>\
  </div>';


  var rep = yut.String.replaceFromDict;
  function build_add_item(data) {
    return rep(tpl, data);
  }

  function build_html(adsList) {
    if (adsList.length > 3)
      adsList.length = 3;
    return prefix + adsList.map(build_add_item).join('') + sufix;
  }

  window.com_oneriot_search_results = function(results) {
    if ('featuredResultList' in results)
      display_ads(build_html(results.featuredResultList));
  }
 })();


