/*
  JavaScript used for Referral & Search teaser widgets
  
  (C) Copyright 2009, Compete Inc.
  
  Depends on:
    JQuery
  
*/ 
var referral_teaser_data = null;
var search_teaser_data = null;

/*
 * Initialize Handler
 */ 
$j(document).ready(function() {
  _load_referral_data('referral');
  _load_search_data();
  
  // Bind the click handler for Pro Badges on teasers
  $j('div.box div.title div.pro-badge').bind('click', function() {
    document.location = member_site + '/plans/';
  });
});


/*
 * Event Handlers
 */ 
function _change_referral_tab(event) {
  if (event.data.curr_tab == 'referral') {
    _load_referral_data('destination');
  } else {
    _load_referral_data('referral');
  }
  
  return false;
}


/*
 * Internal private functions
 */ 
function _load_referral_data(metric) {
  _set_loading('referral-content-data');
  
  $j.getJSON('/metrics/async/referral/' + site_name + '/' + metric + '/', function(json) {
    referral_teaser_data = json;
    _display_referral_teaser();
  });
}

function _load_search_data() {
  _set_loading('search-content-data');
  
  $j.getJSON('/s/async/get_top_terms/' + site_name + '/', function(json) {
    search_teaser_data = json;
    _display_search_teaser();
  });
}

function _display_search_teaser() {
  /* Build the content title
        <div id="referral-content-title" class="title-row">
          <div class="title col-left">Referring Site</div>
          <div class="title col-right">Referral Share</div>
        </div>
   */
  var _title_div = $j('div#search-content-title');
  _title_div.empty();
  if (search_teaser_data[0].terms.length > 0) {
    _title_div.append('<div class="title col-left">Keyword</div>');
    _title_div.append('<div class="title col-right">Search Share</div>');
  }
  
  /* Build a row of data per item in array
        <div class="row">
          <div class="col-left"><a href="#">keyword</a></div>
          <div class="col-right">98.45%</div>
        </div>
   */
  var _content_div = $j('div#search-content-data');
  _content_div.empty();
  
  if (search_teaser_data[0].terms.length > 0) {
    $j.each(search_teaser_data[0].terms, function() {
      var _keyword = this[1];
      var _share = this[2];
      var _content = '<div class="row">';
      _content += '  <div class="col-left"><a href="' + searchtools_site + '/exact_match/?term=' + encodeURIComponent(_keyword) + '" title="' + _keyword + '">' + ellipsify(_keyword, 20).html() + '</a></div>';
      _content += '  <div class="col-right">' + _share.toFixed(2) + '%</div>';
      _content += '</div>';
      _content_div.append(_content);
    });
  } else {
    _content_div.append('<div class="row"><span class="nodata">No Search Analytics data available</span></div>');
  }
  
  /* Build the footer link if we have data
   */
  var _footer_div = $j('div#search-content-footer');
  _footer_div.empty();
  
  if (search_teaser_data[0].terms.length > 0) {
    var _url = searchtools_site + '/site_referrals/' + site_name + '/';
    
    _total_rows = search_teaser_data[0].total;
    _footer_div.append('<a href="' + _url + '">See all ' + numberFormat(_total_rows) + 
                       ' keywords with PRO</a>');
    _footer_div.show();
  } else { _footer_div.hide(); }
}

function _display_referral_teaser() {
  /* Build the change content tab
        <div id="referral-content-tab" class="title-tab">
          <div class="col-right">
            <a href="#">Show Destination Sites</a>
          </div>
        </div>
   */
  var _tab_div = $j('div#referral-content-tab');
  _tab_div.empty();
  _tab_div.append('<div class="col-right"></div>')
  
  if (referral_teaser_data.metric == 'referral') {
    $j('div#referral-content-tab div.col-right').append('<a href="#">Show Destination Sites</a>');
  } else if (referral_teaser_data.metric == 'destination') {
    $j('div#referral-content-tab div.col-right').append('<a href="#">Show Referral Sites</a>');
  }
  $j('div#referral-content-tab div.col-right a').bind('click', { curr_tab: referral_teaser_data.metric }, _change_referral_tab);
  
  /* Build the content title
        <div id="referral-content-title" class="title-row">
          <div class="title col-left">Referring Site</div>
          <div class="title col-right">Referral Share</div>
        </div>
   */
  var _title_div = $j('div#referral-content-title');
  _title_div.empty();
  if ((referral_teaser_data.metric == 'referral') && (referral_teaser_data.row_count > 0)) {
    _title_div.append('<div class="title col-left">Referring Site</div>');
    _title_div.append('<div class="title col-right">Referral Share</div>');
  } else if (referral_teaser_data.row_count > 0) {
    _title_div.append('<div class="title col-left">Destination Site</div>');
    _title_div.append('<div class="title col-right">Destination Share</div>');
  }
  
  /* Build a row of data per item in array
        <div class="row">
          <div class="col-left"><a href="#">google.com</a></div>
          <div class="col-right">98.45%</div>
        </div>
   */
  var _content_div = $j('div#referral-content-data');
  _content_div.empty();
  
  if (referral_teaser_data.row_count) {
    $j.each(referral_teaser_data.data, function() {
      var _site = (referral_teaser_data.metric == 'referral') ? this.ref_site : this.dest_site;
//  This is such a sucky hackish thing to do, but needs must and we have less 
//  than 24 hours to release
      var _url = reftools_site + '/' + referral_teaser_data.metric + 's/' + _site;
      var _share = parseFloat(this.pct_curr_mo);
      var _content = '<div class="row">';
      _content += '  <div class="col-left sitelink" site="' + _site + '"><a href="/' + _site + '/">' + ellipsify(_site, 20).html() + '</a></div>';
      if (_share != -1) { 
        _content += '  <div class="col-right"><a href="' + _url + '/">' + _share.toFixed(2) + '%</a></div>';
      } else {
        _content += '  <div class="col-right">Low Sample</div>';
      }
      _content += '</div>';
      _content_div.append(_content);
    });
  } else {
    _content_div.append('<div class="row"><span class="nodata">No Referral Analytics data available</span></div>');
  }
  
  /* Build the footer link if we have data
   */
  $j("div").filter('.sitelink').hover(siteHover, siteUnHover);
  var _footer_div = $j('div#referral-content-footer');
  _footer_div.empty();
  
  if (referral_teaser_data.row_count) {
    var _url = reftools_site + '/' + referral_teaser_data.metric + 's/' + site_name + '/';
  
    _footer_div.append('<a href="' + _url + '">See all ' + numberFormat(referral_teaser_data.row_count) + ' ' + 
                       referral_teaser_data.metric + 's with PRO</a>');
    _footer_div.show();
  } else { _footer_div.hide(); }
  
  $j('div.box div.title div.title-head a')[0].href = reftools_site + '/';
}

function _set_loading(content_div_id) {
  var _content_div = $j('div#' + content_div_id);
  _content_div.empty();
  _content_div.append('<img src="/site_media/images/icons/ajax_loading.gif" />');
}

/* This function formats numbers by adding commas and a optional prefix
     Uses code from: http://www.netlobo.com/number_format_javascript.html
 */
function numberFormat(nStr, prefix) {
  var prefix = prefix || '';
  
  nStr += '';
  x = nStr.split('.');
  x1 = x[0];
  x2 = x.length > 1 ? '.' + x[1] : '';
  
  var rgx = /(\d+)(\d{3})/;
  while (rgx.test(x1)) {
    x1 = x1.replace(rgx, '$1' + ',' + '$2');
  }
  
  return prefix + x1 + x2;
}
