// @auth ghunt
// @name affiliateTracking.js
// @desc sets up affiliate tracking for Google Affiliates
// @change
//   2011-10-24 ghunt
//     initial file creation

jQuery.extend({
  getUrlVars: function() {
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for(var i = 0; i < hashes.length; i++) {
      hash = hashes[i].split('=');
      vars.push(hash[0]);
      vars[hash[0]] = hash[1];
    }
    return vars;
  },
  getUrlVar: function(name) {
    return jQuery.getUrlVars()[name];
  }
});

jQuery(document).ready(function() {
  setupTracking();
});

function setupTracking() {
  var j = jQuery.noConflict();
  var cookieName = 'pfmPGRSKY';
  var isValid = false;  
  
  if(j.getUrlVar('pcode')) {
    setCookie(cookieName, j.getUrlVar('pcode'), 60, '/', '', '');
  } else {
    // inject tracking image and pass pcode to server
    j('.shipmentConfirm').each(function() {
      var val = parseInt(getCookie(cookieName));
      isValid = val >= 9600 || val <= 9999 ? true : false;
    });
    
    if(isValid) {
      var orderNumber = amznAnalytics.getElement('purchaseID');
      var billingZip = amznAnalytics.getElement('billingPostalCode');
      var purchases = amznAnalytics.getSet('purchases');
      var rev = 0;
      var i = 0;
      for(i=0; i<purchases.length; i++)
        rev += (purchases[i]['revenue'] * purchases[i]['quantity']);
      
      rev -= amznAnalytics.getElement('totalPromotionAmount');
      rev = Math.max(rev, 0.0);
      rev = Math.floor(rev * 100) / 100;
      var link = 'https://clickserve.cc-dt.com/link/order?vid=K10050&oid=' + orderNumber;
      link += '&amt=' + rev + '&btzip=' + billingZip;
      var img = j('<img >').attr({
        src: link,
        width: 1,
        height: 1
      });
      j('body').after(img);
    }
  }
}

function setCookie(name, value, expires, path, domain, secure) {
    // set time, it's in milliseconds
    var today = new Date();
    today.setTime(today.getTime());

    /*
    if the expires variable is set, make the correct
    expires time, the current script below will set
    it for x number of days, to make it for hours,
    delete * 24, for minutes, delete * 60 * 24
    */
    if (expires) {
        expires = expires * 1000 * 60 * 60 * 24;
    }
    var expires_date = new Date(today.getTime() + (expires));

    document.cookie = name + "=" + escape(value) +
    ((expires) ? ";expires=" + expires_date.toGMTString() : "") +
    ((path) ? ";path=" + path : "") +
    ((domain) ? ";domain=" + domain : "") +
    ((secure) ? ";secure" : "");
}

function getCookie(check_name) {
    // first we'll split this cookie up into name/value pairs
    // note: document.cookie only returns name=value, not the other components
    var a_all_cookies = document.cookie.split(';');
    var a_temp_cookie = '';
    var cookie_name = '';
    var cookie_value = '';
    var b_cookie_found = false; // set boolean t/f default f
    for (i = 0; i < a_all_cookies.length; i++) {
        // now we'll split apart each name=value pair
        a_temp_cookie = a_all_cookies[i].split('=');


        // and trim left/right whitespace while we're at it
        cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');

        // if the extracted name matches passed check_name
        if (cookie_name == check_name) {
            b_cookie_found = true;
            // we need to handle case where cookie has no value but exists (no = sign, that is):
            if (a_temp_cookie.length > 1) {
                cookie_value = unescape(a_temp_cookie[1].replace(/^\s+|\s+$/g, ''));
            }
            // note that in cases where cookie is initialized but no value, null is returned
            return cookie_value;
            break;
        }
        a_temp_cookie = null;
        cookie_name = '';
    }
    if (!b_cookie_found) {
        return null;
    }
}
