var gg_cb_already_fired = false;
function google_afd_ad_request_done(response) {
  if (ad_config.err == 1) {
    return;
  }
  // prevent FF bug that fire the gg cb twice
  if (gg_cb_already_fired == true) {
    return;
  } else {
    gg_cb_already_fired = true;
  }

  if (response.error_code
    || response.blocked == 'true' || response.blocked == true
  ) {
    return;
  } else if (response.faillisted == 'true' || response.faillisted == true
    || response.adult == 'true' || response.adult == true
  ) {
    ad_config.err = '1';
    ad_config.suggestion_ready = '1';
    if (ad_config.render_suggestion_now == '1') {
      render_suggestion();
    }
    return;
  }

  if (ad_config.source == 6) {
    ad_config.search_token = response.search_token;
    ad_config.token = response.token;
    ad_config.feedback_url = response.feedback_url;
  }

  if (ad_config.use_google_keywords && ad_config.use_google_keywords == 1) {
    if (response.link_units && response.link_units.length > 0) {
      ad_config.keywords = response.link_units; 
    }
  }
  ad_config.gen_cats = response.categories;

  var ads = '';
  if (response.ads) {
    for (var i=0; i< response.ads.length; i++) {
      ads += render_ad_fragment( response.ads[i] );
    }
  } else {
    if (response.request.client != "ca-dp-r-radlinks_js") {
      ad_config.suggestion_ready = '1';
      if (ad_config.render_suggestion_now == '1') {
        render_suggestion();
      }
    }
  }
  // Store markup and response object
  ad_config.markup = ads;
  if (ad_config.feed_test) {
    ad_config.response = response;
  }

  // only render the ads when onready is fired, otherwise we don't have container element
  if (ad_config.render_now == 1) {
    render_ads_page();
  }

  return;
}

function show_ads() {
  if ($('#listings')) {
    $('#listings').html(ad_config.markup);
  }
  if ($('div#search_results')) {
    $('div#search_results').show();
  }
  if (ad_config.source == 6) {
    // sl must be clickable
    make_sl_clickable();
  }
}

function make_rs_clickable() {
  if ($('#related_searches_label1')) {
    $('#related_searches_label1').html("<a href='"+ad_config.feedback_url+"' target='_blank'>Related Searches</a>");
  }
  if ($('#related_searches_label2')) {
    $('#related_searches_label2').html("<a href='"+ad_config.feedback_url+"' target='_blank'>Related Searches</a>");
  }
  if ($('#popular_categories_label1')) {
    $('#popular_categories_label1').html("<a href='"+ad_config.feedback_url+"' target='_blank'>Popular Categories</a>");
  }
  if ($('#popular_categories_label2')) {
    $('#popular_categories_label2').html("<a href='"+ad_config.feedback_url+"' target='_blank'>Popular Categories</a>");
  }
  if (!($('#footer_cat_link')) && $('#footer_cat_wrp')) {
    var oldHTML = $('#footer_cat_wrp').html();
    var newHTML = "<a id='footer_cat_link' class='footer_cat_link' href='"+ad_config.feedback_url+"'>" + oldHTML + "</a>";
    $('#footer_cat_wrp').html(newHTML);
  }
}

function make_sl_clickable() {
  if ($('#sponsored_listings_label1')) {
    var current_text = $('#sponsored_listings_label1').html();
    $('#sponsored_listings_label1').html("<a href='"+ad_config.feedback_url+"' target='_blank'>"+current_text+"</a>");
  }
  if ($('#sponsored_listings_label2')) {
    var current_text = $('#sponsored_listings_label2').html();
    $('#sponsored_listings_label2').html("<a href='"+ad_config.feedback_url+"' target='_blank'>"+current_text+"</a>");
  }
}

function append_tokens() {
  if (ad_config.token && ad_config.search_token) {
    var anchors = $('a[href*="search.php"]');
    if (anchors) {
      anchors.each(function() {
        this.href += "&token=" + ad_config.token;
      });
    }

    var forms = $('form[action*="search.php"]');
    if (forms) {
      forms.each(function() {
        $('<input>')
          .attr({
            type: 'hidden',
            id: 'token',
            name: 'token'
           })
          .val(ad_config.search_token)
          .appendTo(this);
      });
    }

    $.cookie('ctoken', ad_config.token);
    $.cookie('cstoken', ad_config.search_token);
  }
}

function replace_gen_cats(gen_cats) {
  var anchors = $("a.ggov");
  if (anchors && anchors.length > 0) {
    var pterms = anchors[0].href.match('\&pterm=(.+?)\&append=');
    var pterm = decodeURIComponent(pterms[1]);
    for (var i=0; i < gen_cats.length; i++) {
      if (gen_cats[i].term == pterm) {
        var sub_cats = gen_cats[i].subcategories;
        for (var j=0; j < sub_cats.length; j++) {
          var current_terms = anchors[j].href.match('\&term=(.+?)\&');
          var current_term = current_terms[1];
          var term = escape(sub_cats[j].term.replace(' ','+')); 
          anchors[j].href = anchors[j].href.replace(current_term, term);
          anchors[j].innerHTML = sub_cats[j].term;
        }
      }
    }
  }
}

function replace_keywords(keywords) {
  var anchors = $('a[href*="search.php"]:not(.rs_repeat):not(.tagline_kw):not(.generic_kw)');
  var repeat_anchors = $('a[href*="search.php"].rs_repeat');
  var tagline_anchors = $('a[href*="search.php"].tagline_kw');

  if (anchors && anchors.length > 0) {
    var term_count = 0;
    for (var i=0; i < anchors.length && i < keywords.length; i++) {
      var term_token = escape(keywords[term_count].term.replace(/ /g,'+')) + '&token=' + keywords[term_count].token;
      update_anchor(anchors, i, term_token, keywords[term_count].term);
      update_anchor(repeat_anchors, i, term_token, keywords[term_count].term);
      update_anchor(tagline_anchors, i, term_token, keywords[term_count].term);
      term_count++;
    }
    // we have more terms than feed returns
    for (var i=term_count+1; i < anchors.length; i++) {
      anchors[i].href += "&token=" + ad_config.token;
    }
  }

  // for generic kw, we just need to append token
  var generic_anchors = $('a[href*="search.php"].generic_kw');
  if (generic_anchors) {
    generic_anchors.each(function() {
      this.href += "&token=" + ad_config.token;
    });
  }

  var forms = $('form[action*="search.php"]');
  if (forms) {
    forms.each(function() {
      $('<input>')
        .attr({
          type: 'hidden',
          id: 'token',
          name: 'token'
         })
        .val(ad_config.search_token)
        .appendTo(this);
    });
  }

}

function update_anchor(anchors, i, term_token, term) {
  if (!(anchors) || (anchors[i] == undefined)) {
    return;
  }
  var link_matches = anchors[i].href.match('term=(.+?)&append=');
  if (link_matches) {
    anchors[i].href = anchors[i].href.replace(link_matches[1], term_token);
  }
  var word_matches = anchors[i].innerHTML.match('<img.*?>(.*)');
  if (word_matches == null) {
    anchors[i].innerHTML = term;
  }
  else {
    anchors[i].innerHTML = anchors[i].innerHTML.replace(word_matches[1], ' ' + term);
  }
}

// Generate ad fragment
function render_ad_fragment(ad_obj) {
  // build ad redirect url
  var base_url = '/redirect.php?';
  base_url += 'odomain=' + ad_config.domain;
  base_url += '&pp=' + ad_config.source;
  base_url += '&position=' + ad_obj.n;
  base_url += '&source=' + ad_config.source;
  base_url += '&term=' + ad_config.seed_keyword;
  base_url += '&nterms=' + Base64.encode( ad_config.seed_keyword );
  base_url += '&currency=' + ad_config.currency;
  base_url += '&market=' + ad_config.market;
  var url = base_url + '&to=' + urlencode( ad_obj.url );

  var ad = '<div class="clear"></div><div class="listing">';
  ad += '<div class="listing_title"><a class="title" href="' + url + '" target="' + ad_config.target + '">'+ ad_obj.line1 +'</a></div>';
  var ad_desc = ad_obj.line2;
  if (ad_obj.line3 != undefined) {
    ad_desc += ' ' + ad_obj.line3;
  }

  ad += '<div class="listing_desc">' + ad_desc + '</div>';

  ad += '<div class="listing_url"><a class="url" href="' + url + '" target="' + ad_config.target + '">'+ ad_obj.visible_url +'</a></div>';

  var sr = '';
  if (ad_obj.seller_ratings != undefined) {
    sr = render_seller_rating(ad_obj.seller_ratings, base_url);
  }
  ad +=sr;

  var sl = '';
  var sl_l = '';
  var sl_r = '';
  var link = '';
  if (ad_obj.sitelinks != undefined) {
    for (var i=0; i< ad_obj.sitelinks.length; i++) {
      link = render_site_links_fragment( ad_obj.sitelinks[i], base_url );
      if (i % 2 == 0) {
        sl_l += link;
      } else {
        sl_r += link;
      }
    }
  }
  if (sl_l != '') {
    sl_l = '<div class="site_links_left">' + sl_l + '</div>';
  }
  if (sl_r != '') {
    sl_r = '<div class="site_links_right">' + sl_r + '</div>';
  }
  if (sl_l != '' || sl_l != '') {
    sl = '<div class="clear"></div><div class="site_links">' + sl_l + sl_r + '</div>';
  }

  ad +=sl;
  ad += '</div>';

  return ad;
}

// Generate site link
function render_site_links_fragment(site_link_obj, base_url) {
  var sl = '';
  var url = base_url;
  if (site_link_obj.url != undefined && site_link_obj.link_text != undefined) {
    url += '&to=' + urlencode( site_link_obj.url );
    sl += '<div class="site_link"><a class="site_link_url" href="' + url  + '" target="' + ad_config.target + '">'+ site_link_obj.link_text +'</a></div>';
  }
  return sl;
}

// Generate seller rating
function render_seller_rating(seller_rating_obj, base_url) {
  var sr = '';
  if (seller_rating_obj.text != undefined
    && seller_rating_obj.rating != undefined
    && seller_rating_obj.rating >= 4
    && seller_rating_obj.rating_img_url != undefined
    && seller_rating_obj.source_url != undefined
  ) {
    var sl_text = seller_rating_obj.text;
    var rp_map = {"{{LINK_START}}":"<a class='seller_ratings_url' href='"+seller_rating_obj.source_url+"'>",
      "{{LINK_END}}":"</a>",
      "{{RATING}}":"<img alt='Seller Ratings' src='"+seller_rating_obj.rating_img_url+"'/>"};
    for (var val in rp_map) {
      sl_text = sl_text.replace(val, rp_map[val]);
    }
    sr += '<div class="seller_ratings">'+sl_text+'</div>'
  }
  return sr;
}

function render_ads_page() {
  if (ad_config.source == 6) {
    if (ad_config.use_google_keywords 
      && ad_config.use_google_keywords == 1
      && ad_config.keywords
      && ad_config.keywords.length > 0
    ) {
      replace_keywords(ad_config.keywords);
      // we use GG keyword, so make RS label clickable
        make_rs_clickable();
    } else {
      append_tokens();
    }
    replace_gen_cats(ad_config.gen_cats);
  }
  if (ad_config.markup) {
      show_ads();
  }
}

function render_suggestion() {
  if (ad_config.active_search == '1') {
    var suggest = '<span class="sponsored_listings_title_left">Your search did not match any documents.<br/><br/>Related Searches</span><div class="clear"></div><div id="listings">';
    var anchors = $('a[href*="search.php"]:not(.rs_repeat):not(.tagline_kw):not(.generic_kw)');
    for (var i=0; i < anchors.length && i < 10; i++) {
      suggest += '<div class="listing"><div class="clear"></div><div class="listing_title"><a class="title" href="'+anchors[i].href+'">'+anchors[i].text+'</a></div></div></div>';
    }
    suggest += '</div>';
    if ($('div#search_results')) {
      $('div#search_results').html(suggest);
      $('div#search_results').show();
    }
    if (ad_config.err == '1') {
      $.cookie('lf', 1);
    }
  } else {
    if (ad_config.err == '1') {
      $.cookie('lf', 1);
      location.reload();
    }
  }
}


$(document).ready(function() {
  var anchors = $('a[href*="search.php"]');
  if (anchors) {
    anchors.each(function() {
      this.href = this.href.replace("&j=-1","");
    });
  }
  var privacy = $('#privacy_link');
  if (privacy) {
    privacy.show();
  }
  var imgtd = $('#imgtd');
  if (imgtd) {
    imgtd.remove();
  }
  var fj = $('#j');
  if (fj) {
    fj.remove();
  }


  if (gg_cb_already_fired == true) {
    render_ads_page();
  } else {
    ad_config.render_now = 1;
  }

  if (ad_config.suggestion_ready == '1') {
    render_suggestion();
  } else {
    ad_config.render_suggestion_now = '1';
  }

});

