/*
 *  SHOP@ TOOLBAR - VERSION 2.2
 *  Toolbar JavaScript Library File, version 2.0
 *  
 *  Code base: Shop@ Toolbar version 2.1 (DLA)
 *  
 *  Updates:
 *    [08/03/00] - Code base revision/extensions by Trang
 *    [08/15/00] - doNav, doSearch revised by KJB
 *    [08/31/00] - Sanity check added by Glenn
 *    [09/01/00] - Code cleanup; AOL window fix; top/bottom by KJB
 *
 */


agt = navigator.userAgent.toLowerCase();

// Note: Opera and WebTV spoof Navigator.  We do strict client detection.
// If you want to allow spoofing, take out the tests for opera and webtv.
is_nav  = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1)
	   && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1)
	   && (agt.indexOf('webtv')==-1));

is_opera = (agt.indexOf("opera") != -1);
is_webtv = (agt.indexOf("webtv") != -1);


/** FUNCTIONS **/
function toolbarLink(locationToken, toolbarMode)
{
  var gotoLocation;
                
  if ( locationToken == "shophome" ) { 
    if ((aps_property == "AOL") && (is_nav || is_opera || is_webtv)) {
      alert(toolbarLinkErrorMsg);
      return;
    }

    gotoLocation = ShoppingHome; 
  } else if ( locationToken == "custserv" ) { 
    gotoLocation = CustomerService; 
  } else { 
    return; 
  }

  if ( toolbarMode == "docked" ) { 
    window.location.href = gotoLocation; 
  } else if ( toolbarMode == "floating" ) { 
    parent.location.href = gotoLocation; 
  } else if ( toolbarMode == "intercept" ) { 
    parent.location.href = gotoLocation;
  } else if ( toolbarMode == "nonpartner" ) { 
    parent.location.href = gotoLocation;
  } else { 
    return; 
  }
}


function doNav(frameMode, formPosition)
{
  if ((doNav.arguments.length == 1) || (formPosition == "top")) {
    navToken = document.forms["ToolbarNav"].ShoppingCategory.options[document.forms["ToolbarNav"].ShoppingCategory.selectedIndex].value;
  } 
  if (formPosition == "bottom") {
    navToken = document.forms["ToolbarNav2"].ShoppingCategory.options[document.forms["ToolbarNav2"].ShoppingCategory.selectedIndex].value;
  }

  if (navToken == "brak_wyboru") {
    alert(win_title + ': Bez wybierania.\n\n' + no_nav_msg);
    return;
  } else if (navToken == "nav_shophome" ) { 
    if ((aps_property == "AOL") && (is_nav || is_opera || is_webtv)) {
      alert(toolbarLinkErrorMsg);
      return;
    }
  }

  var gotoLocation = eval(navToken);
  if ((gotoLocation == null) || (gotoLocation == "undefined") || 
      (gotoLocation.length == 0)) {
    return;
  }

  if ( frameMode == "docked" ) {
    window.location.href = gotoLocation;    
  } else if ( frameMode == "floating" ) {
    parent.location.href = gotoLocation;  
  } else if ( frameMode == "intercept" ) {
    parent.location.href = gotoLocation;
  } else if ( frameMode == "nonpartner" ) {
    parent.location.href = gotoLocation;
  } else { 
    return; 
  }
}


function ToolbarJump(mURL, rows)
{
  // ON/OFF SWITCH - FOR OPS USE ONLY!!
  // set floatToolbar to 0 (zero) to turn floating off!!
  var floatToolbar = 1;

  // QCPP support
  var qcppURL = qcpp_jump(mURL);

  if ( top.AOLtoolbar ) {  // cross-browser test
    top.frames[1].location = qcppURL;
    return;
  }

  if ((ToolbarJump.arguments.length == 1) || (rows == null) || 
      (rows == "undefined") || (rows.length == 0)) {
    rows = 38;
  } 

  if ((aps_property == "AOL") && (floatToolbar == 1) && !tb_isAOL6()) {
    // if AOL, open in a new window
    var tbWin    = null;
    var tempMURL = qcppURL;
    var tempWin  = 'http://shop-s03c.websys.aol.com/misc/tb_redirect.html' + '?merchURL=' + tempMURL;
    tbWin = window.open(tempWin, 'tbWin');
    tbWin.document.write(tb_buildFrameSet(qcppURL, rows));
  } else if ((floatToolbar == 1) && (navigator.appVersion.indexOf("NAVIO") >= 0)) {
    // build frameset for AOL TV
    top.location = "javascript:'" + tb_buildFrameSet(qcppURL, rows) + ";";
  } else if ((floatToolbar == 1) && !tb_isAOL6()) {
    // build frameset - toolbar and merchant
    document.write(tb_buildFrameSet(qcppURL, rows));
  } else {
    document.location = qcppURL;
  }
}


function doSearch(frameMode, formPosition, aps_merchantdomain)
{
  // search prod location
  var SURL   = "http://shopping.search.aol.com/?";

  var TERMS  = "aps_terms";
  var PROP   = "aps_property";  
  var REF    = "aps_referrer";
  var CAT    = "aps_category";
  var DOMAIN = "aps_merchantdomain";
  
  var searchTerms;
  var searchString;
  var searchReferrer;
  var shopProperty;
  var searchCategory;

  // backward compatibility
  searchReferrer   = ((aps_referrer == "undefined") || (aps_referrer.length == 0)) ? document.forms["ToolbarSearch"].aps_referrer.value : aps_referrer;

  shopProperty     = ((aps_property == "undefined") || (aps_property.length == 0)) ? document.forms["ToolbarSearch"].aps_property.value : aps_property;

  searchCategory   = ((aps_category == "undefined") || (aps_category.length == 0)) ? "ALL" : aps_category;  // not implemented yet, set to ALL


  if ((doSearch.arguments.length == 1) || (formPosition == "top")) {
    allTerms = document.forms["ToolbarSearch"].aps_terms.value;
  } 
  if ((doSearch.arguments.length == 2) && (formPosition == "bottom")) {
    allTerms = document.forms["ToolbarSearch2"].aps_terms.value;
  }


  if ((allTerms == null) || (allTerms.length == 0)) {
    alert(win_title + ' Shopping Search: No search term(s) entered.\n\n' + no_search_msg);
    return;
  }

  searchTerms  = escape( allTerms );  // handle spaces in terms

  searchString = SURL + PROP + '=' + shopProperty + '&' + REF + '=' + searchReferrer + '&' + CAT + '=' + searchCategory  + '&' + TERMS + '=' + searchTerms + '&' + DOMAIN + '=' + escape(aps_merchantdomain);

  // FLOATING VS. DOCKED LOGIC
  if ( frameMode == "docked" ) {
    window.location.href = searchString;    
  } else if ( frameMode == "floating" ) {
    parent.location.href = searchString;    
  } else { 
    return; 
  }
}



function tb_isAOL6()
{
  agt = navigator.userAgent.toLowerCase();
  is_aol6 = (agt.indexOf("aol 6.") != -1);
  return is_aol6;
}



function tb_buildFrameSet(URL, rows)
{
  if ((shopAtURL == null ) || (shopAtURL == "undefined") || (shopAtURL == "")) {
    shopAtURL = "http://shop-s03c.websys.aol.com";
  }

  var merchantDomain = tb_getMerchantDomain(URL);

  var redirectURL = shopAtURL + "/misc/floating_toolbar.adp?aps_merchantdomain=" + escape(merchantDomain);

  var stringLiteral = '<html><head><title>' + win_title + '</title></head> <frameset rows="' + rows + ',*" frameborder=0 border=0> <frame src="' + redirectURL + '" name="AOLtoolbar" marginheight=0 marginwidth=0 frameborder=0 scrolling=no noresize> <frame src="' + URL + '" name="merchant"> </frameset> <noframes>Requires Frames!</noframes></html>';

  return stringLiteral;
}


function tb_getMerchantDomain(url) 
{
  // strip AMS from url
  var ret;
  var idx;
  var tempurl = url;
  var domain  = "";

  if((idx = url.indexOf("/ams/clickThruRedirect")) != -1) {
    // search for http(s) prefix
    idx = url.indexOf("http", idx);
    if (idx == -1 ) { 
      tempurl = url;
    } else {
      tempurl = url.substring(idx, url.length);
    }
  }

  domain = qcpp_getDomain(tempurl);

  return domain;
}


function replacePlus(text)
{
  // function for replacing "+" chars with spaces in a string
  // could use the following if all browsers supported JavaScript1.2
  // document.ToolbarSearch.aps_terms.value = temp.replace(/\+/g," ");

  var newText = text;
  var index = text.indexOf("+");
  while (index >= 0) {
    var newTextTemp = newText.substring(0, index++);
    newText = newTextTemp + " " + newText.substring(index, newText.length);
    index = newText.indexOf("+");
  }
  return newText;
}


/** QCPP FUNCTIONS **/
function qcpp_getDomain(url) 
{
  // Given a URL, return the domain of the URL target or the
  // empty string if the domain cannot be detected.
  // Ex: given "http://www.foo.com/a/b", return "foo.com"
  // All URLs passed in should be absolute, not relative.

  var http_idx;
  var https_idx;
  var idx = -1;

  var domain = url;
  if((idx = url.indexOf("http://")) == 0)
    domain = domain.substring(7, domain.length);
  else if((idx = url.indexOf("https://")) == 0)
    domain = domain.substring(8, domain.length);
  else {
    // protocol not http or https.  Return empty string.
    return "";
  }

  if((idx = domain.indexOf('/')) != -1) {
    domain = domain.substring(0, idx);	
  }

  var d1;
  var d2;    
  var ret = "";
  // return last two components or empty string
  if((idx1 = domain.lastIndexOf('.')) != -1) {
    d1 = domain.substring(idx1+1, domain.length);
    if((idx2 = domain.lastIndexOf('.', idx1-1)) != -1) {
      d2 = domain.substring(idx2+1, idx1);
      ret = d2 + "." + d1;   // return "foo.com"
    }
  }
    
  return ret;
}


function qcpp_getProxyURL(url)
{
  // Given a URL, decide if we should proxy this URL via QCPP
  // or not. Either return the URL with QCPP proxy added, or
  // the original URL unmodified. Manipulates absolute URLs.

  var domain = qcpp_getDomain(url);
  if(domain == "")
    return url;
  
  // skip QCPP if we can't find our data
  var enabled = false;
  if((typeof qcpp_merchants != "undefined") &&
     qcpp_merchants != null &&
     qcpp_merchants[domain])   
       enabled = true;

  if(!enabled)
    return url;
    
  var idx;
  var ret = url;
  if((idx = url.indexOf("http://")) == 0) {
    ret = qcpp_server + url.substring(7, url.length);
  } else if((idx = url.indexOf("https://")) == 0) {
    ret = qcpp_secureServer + url.substring(8, url.length);
  }

  return ret;
}


function qcpp_getRedirectURL(url) 
{
  // Determine if the target URL is redirected through another
  // site, such as doubleclick.net

  var idx;
  var redirect = "";
  if((idx = url.indexOf("/ad.doubleclick.net/")) != -1) {
    idx = url.indexOf("http", idx);
    if(idx == -1)
      return url;  // can't parse, punt
    redirect = url.substring(0, idx);
    url = url.substring(idx, url.length);            
  }

  var ret;
  ret = qcpp_getProxyURL(url);
  return redirect + ret;
}


function qcpp_jump(url) 
{
  // strip AMS from url
  var amsPrefix = "";
  var ret;
  var idx;
  if((idx = url.indexOf("/ams/clickThruRedirect")) != -1) {
    // search for http(s) prefix
    idx = url.indexOf("http", idx);
    if(idx == -1) 
      return url;  // can't parse, punt
	amsPrefix = url.substring(0, idx);
    url = url.substring(idx, url.length);
  }

  ret = qcpp_getRedirectURL(url);
  return amsPrefix + ret;
}
