var TraxSID = null;

trax_do();
// $(document).ready(trax_show_ac);
// trax_show_ac();

function padding(s,l) {
  return( l.substr(0, (l.length - s.length) ) + s );
}

function trax_do () {
  var D = document;
  // DOM_load_handlers = [trax_show_ac];

  // var sid = readCookie('txi_2');
  var sid = window.$CVO ? $CVO.sid : null;

  var aid = '1';
  var cid; // = str_between(D.URL, "txi_2=", '&');
  // var is_agent = readCookie('is_agent') || 
  var is_agent = Kava.Globals.IsAgent;
  var agent_id = Kava.Globals.AgentId = readCookie('_agent_id');
  
  if (agent_id) {
    if (sid == null || sid.charAt(0) == '0') {
      sid = '111111111111';
    }
  }
  
  Kava.Globals.TraxSID = TraxSID = sid;
  var proto = window.location.protocol;
  if (proto.indexOf('http') != 0)
    proto = 'http:';
  
  var pixel_url = proto + '//ssl.xorox.net/trax/pixel.gif';
  var debug_url = proto + '//ssl.xorox.net/trax/debug.mpl';
  var img_url = proto + '//ssl.xorox.net/trax/loghit.mpl'
    + '?a=' + aid
    + '&s=' + sid
    + '&ag=' + (null == agent_id ? '' : agent_id)
    + '&p=' + escape(D.URL)
    + '&r=' + escape(D.referrer);
    // + '&cb=' + Math.random().toString().substr(2);
  
  var trax_img = $('<img />').attr('id', 'trax_image').appendTo('head');
  if (D.URL.indexOf('order.store.yahoo.net/ymix/') > 0) {
    if (D.URL.indexOf('sectionId=ysco.review') > 0) {
      $(document).ready(function () {
        var email = D.getElementById("ys_billToEmail").innerHTML;
        email = email.match(/^\S+/);
        // D.getElementById("trax_debug").src = debug_url + "?em=" + escape(email);
      });
    }
    else if (D.URL.indexOf('sectionId=ysco.ship-bill') > 0) {
      $(document).ready(function () {
        var clicked = 0;
        var input_field_map = {
          'billing-name'        : 'shipping-full-name',
          'billing-first-name'  : 'shipping-first-name',
          'billing-last-name'   : 'shipping-last-name',
          'billing-company'     : 'shipping-company',
          'billing-address1'    : 'shipping-address1',
          'billing-address2'    : 'shipping-address2',
          'billing-city'        : 'shipping-city',
          'billing-state'       : 'shipping-state',
          'billing-zip'         : 'shipping-zip',
          'billing-phone'       : 'shipping-phone'
        };
        addEvent(D.getElementById("useBillingRadio"), 'click', function () {
          if (clicked++)
            return;
          for (var billing_eid in input_field_map) {
            var shipping_eid = input_field_map[billing_eid];
            if (D.getElementById(billing_eid) && D.getElementById(shipping_eid))
              D.getElementById(billing_eid).value = D.getElementById(shipping_eid).value;
          }
          D.getElementById('billing-country').selectedIndex = D.getElementById('shipping-country').selectedIndex;
        });
        var show_debit_checkbox_if_needed = function () {
          if (D.getElementById('card-type').value.match(/MasterCard|Visa/i))
            $('#labelvwcf-yhst-66731470225857-Debit-Card').show();
          else
            $('#labelvwcf-yhst-66731470225857-Debit-Card').hide();
        }
        addEvent(D.getElementById('card-type'), 'change', show_debit_checkbox_if_needed);
        show_debit_checkbox_if_needed();
        if (!is_agent) {
          $('#card-type option')
            .filter( function () {return /google/i.test(this.value);} )
            .remove();
          $('#shipping-country option')
            .filter( function () {return /AS/i.test(this.value);} )
            .remove();
          $('#billing-country option')
            .filter( function () {return /AS/i.test(this.value);} )
            .remove();
        }
      });
    }
    else if (D.URL.indexOf('ysco_key_order_id=') > 0) {
      $(document).ready(function () {
        var tds = D.getElementById('ys_orderInfo').getElementsByTagName('td');
        var e = tds[tds.length - 1];
        var onum;
        if (window.orderNum)
          onum = orderNum;
        else
          onum = e.innerHTML;
        var itemid = onum.match(/\d+$/)[0];
        e.innerHTML = Kava.Globals.StorePrefix + '-' + itemid;
      });
    }
  }
  
  if (window.orderNum) {
    // next-gen yahoo cart
    Kava.Globals.OrderConf = 1;
    got_confirm(orderNum, orderTotal);
  }
  else if (D.URL.indexOf('https://order.store.yahoo.com/cgi-bin/wg-thank-you') == 0) {
    Kava.Globals.OrderConf = 1;
    // var log_url = img_url;
    // img_url = pixel_url;
    var order_id = str_between(D.URL, '?oid=', '&');
    $(document).ready(function () { // window.setTimeout(function () {
      var blist = D.getElementsByTagName('B');
      var oa_node = blist[blist.length - 1];
      var order_amount = oa_node.innerHTML;
      // D.getElementById("trax_image").src = log_url;
      got_confirm(order_id, order_amount);
      // var pnode = oa_node.parentNode.parentNode.parentNode.parentNode;
      // D.getElementById("trax_debug").src += "?" + escape(pnode.innerHTML);
      // }, 100)
    });
  }
  else {
    trax_img.attr('src', img_url);
    Kava.Globals.fnLoaded();
  }
  
  if (Kava.Globals.OrderConf) {
    if (is_agent) { // && !/^1{10}/.test(sid)
      // reset agent cookie to phone-no-code after order
      // CVO.set_mid('111111111111');
      $CVO.push([ 'resetCode' ]);
      
      // createCookie('txi_2', '111111111111', 5000);
      $.each([ 'ysco_key_browser_session_cookie', 'ysco_key_session_cookie', 'ysco_key_shopping_cart_cookie' ], function () {
        $.cookie(this, null, { domain: 'store.yahoo.net', path: '/' });
      });

      /*
      createCookie('ysco_key_browser_session_cookie', null, 0, 'store.yahoo.net');
      createCookie('ysco_key_session_cookie', null, 0, 'store.yahoo.net');
      createCookie('ysco_key_shopping_cart_cookie', null, 0, 'store.yahoo.net');
      */
    }
  }
 
  /*
  if (DOM_load_handlers.length) {
    var dom_load_handler = function () {
      var f;
      while (f = DOM_load_handlers.pop()) { f() };
    };

    $(document).ready(dom_load_handler);
  }
  */
  // D.write('<' + 'img id="trax_image" width=0 height=0 src="' + img_url +'"></img>');
  // D.write('<' + 'img id="trax_debug" width=0 height=0 src="' + pixel_url +'"></img>');

  function got_confirm (oid, oamt) {
    Kava.Globals.OrderID = oid;
    Kava.Globals.OrderAmount = oamt;
    img_url += '&oi=' + oid + '&oa=' + oamt;
    trax_img.attr('src', img_url);
    
    if (!Kava.Globals.ClientDebug && !is_agent)
      Kava.Loader.run('//ssl.xorox.net/trax/cj.mpl?a=' + Kava.Globals.StoreID + '&s=' + TraxSID + '&oi=' + oid + '&oa=' + oamt);
      
    if (Kava.Globals.StoreID == 0) {
      // fpTrackSale();
      scrape_order_detail();
      add_google_checkout_button();
      //window.open("https://eval.bizrate.com/popup.pl?id=32141", "thisName", "directories=0,height=160,width=425");//removed for weighted random selection survey rotator in cart confirmation page
    }
    Kava.Globals.fnLoaded();
  }
}

function scrape_order_detail () {
  var order = {};
  var items = [];
  var td_attr = 'font[size=-2]';
  var order_trs = $('table:contains(Total) tr[bgcolor="#efefef"]');
  var has_coupon = order_trs.is(':contains(Coupon offer)');
  var has_giftcert = order_trs.is(':contains(Gift certificate)');
  var has_warning = order_trs.is(':contains(Warning)');
  var extra_rows = 0;
  if (has_coupon) extra_rows += 2;
  if (has_giftcert) extra_rows++;
  if (has_warning) extra_rows++;
  var order_trs_size = order_trs.size();
  var num_items = (order_trs_size - extra_rows - 6) / 2;
  for (var i = 0; i < num_items; i++) {
    var item_tds = order_trs.eq(2*i + 3).find(td_attr);
    var item = {};
    item.qty = item_tds.eq(0).text();
    item.name = item_tds.eq(1).text();
    if (3 == item_tds.size()) {
      item.options = '';
      item.price = item_tds.eq(2).text() / item.qty;
    }
    else if (4 == item_tds.size()) {
      item.options = item_tds.eq(2).text().replace(/^\s+|\s+$/g, '');
      item.price = item_tds.eq(3).text() / item.qty;
    }
    items.push(item);
  }
  order.total = Number(order_trs.eq(order_trs_size - 1).find(td_attr).slice(-1).text());
  
  order.tax = Number(order_trs.eq(order_trs_size - 2 - has_giftcert).find(td_attr).slice(-1).text());
  order.shipping = Number(order_trs.eq(order_trs_size - 3 - has_giftcert).find(td_attr).slice(-1).text());
  order.subtotal = Number(order_trs.eq(order_trs_size - 4 - extra_rows).find(td_attr).slice(-1).text());
  
  order.giftcerts = 0;
  if (has_giftcert)
    order.giftcerts = Number(order_trs.eq(order_trs_size - 2).find(td_attr).slice(-1).text());
  
  order.coupons = 0;
  if (has_coupon)
    order.coupons = Number(order_trs.eq(order_trs_size - 5).find(td_attr).slice(-1).text());
  order.items = items;
  Kava.Globals.Order = order;
}

function add_google_checkout_button () {
  var f = $('<form/>')
    .attr('method', 'post')
    .attr('action', 'https://checkout.google.com/api/checkout/v2/checkoutForm/Merchant/404241396840495');
  var fvars = {
    item_name_1: Kava.Globals.StorePrefix + '-ORDER',
    item_description_1: Kava.Globals.StoreName + ' order #' + Kava.Globals.OrderID,
    item_price_1: Kava.Globals.OrderAmount,
    item_currency_1: 'USD',
    item_quantity_1: 1,
    item_merchant_id_1: '404241396840495'
  };
  $.each(fvars, function (k, v) {
    $('<input type="hidden"/>')
      .attr('name', k)
      .attr('value', v)
      .appendTo(f);
  });
  $('<input type="image"/>')
      .attr('name', 'Google Checkout')
      .attr('alt', 'Fast checkout through Google')
      .attr('src', 'https://checkout.google.com/buttons/checkout.gif?merchant_id=404241396840495&w=180&h=46&style=white&variant=text&loc=en_US')
      .attr('width', 180)
      .attr('height', 46)
      .appendTo(f);
  f.appendTo('#gc_section');
}

function trax_show_ac() {
  var code = Kava.Globals.IsAgent ? (CVO.mid || CVO.sid) : CVO.sid;
  var elems = getElementsByClassName('TraxAC', 'span');
  for (var i = 0; i < elems.length; i++) {
    elems[i].innerHTML = TraxSID.substr(0,5);
  }
}

function createCookie(name,value,days,dom) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
  
  var domain = '';
  if (!dom) {
    var dparts = document.domain.split(/\./)
    if (dparts.length > 2)
      domain = '; domain=.' + dparts[dparts.length - 2] + '.' + dparts[dparts.length - 1];
  }
  else
    domain = '; domain=.' + dom;

	document.cookie = name+"="+value+expires+"; path=/" + domain;

}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

function str_between (str, left, right) {
  var lindex = str.indexOf(left);
  if (lindex == -1)
    return null;
  
  var t = str.substr(lindex + left.length);
  var rindex = t.indexOf(right);
  if (rindex == -1)
    return t;
  
  return t.substr(0, rindex);
}

Array.prototype.push = function() {
  var n = this.length >>> 0;
  for (var i = 0; i < arguments.length; i++) {
    this[n] = arguments[i];
    n = n + 1 >>> 0;
  }
  this.length = n;
  return n;
};

Array.prototype.pop = function() {
  var n = this.length >>> 0, value;
  if (n) {
    value = this[--n];
    delete this[n];
  }
  this.length = n;
  return value;
};

function getElementsByClassName(className, tag, elm){
	var testClass = new RegExp("(^|\s)" + className + "(\s|$)");
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;
	for(var i=0; i<length; i++){
		current = elements[i];
		if(testClass.test(current.className)){
			returnElements.push(current);
		}
	}
	return returnElements;
}

function getElementsByAttribute(oElm, strTagName, strAttributeName, strAttributeValue){
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	var oAttributeValue = (typeof strAttributeValue != "undefined")? new RegExp("(^|\s)" + strAttributeValue + "(\s|105 33") : null;
	var oCurrent;
	var oAttribute;
	for(var i=0; i<arrElements.length; i++){
		oCurrent = arrElements[i];
		oAttribute = oCurrent.getAttribute && oCurrent.getAttribute(strAttributeName);
		if(typeof oAttribute == "string" && oAttribute.length > 0){
			if(typeof strAttributeValue == "undefined" || (oAttributeValue && oAttributeValue.test(oAttribute))){
				arrReturnElements.push(oCurrent);
			}
		}
	}
	return arrReturnElements;
}

function addEvent( obj, type, fn ) { 
  if ( obj.attachEvent ) { 
    obj['e'+type+fn] = fn; 
    obj[type+fn] = function(){obj['e'+type+fn]( window.event );} 
    obj.attachEvent( 'on'+type, obj[type+fn] ); 
  }
  else 
    obj.addEventListener( type, fn, false ); 
} 

function removeEvent( obj, type, fn ) { 
  if ( obj.detachEvent ) { 
    obj.detachEvent( 'on'+type, obj[type+fn] ); 
    obj[type+fn] = null; 
  }
  else 
    obj.removeEventListener( type, fn, false ); 
} 

Kava.Globals.TraxSID = TraxSID;
$('#TraxSID').val(TraxSID);

Kava.Loader.loaded('trax');
