function getQueryVariable(variable) {
    var query = decodeURIComponent(window.location.search.substring(1));
    var vars = query.split("&");
    for (var i = 0; i < vars.length; i++) {

        var pair = vars[i].split("=");

        if (pair[0].toLowerCase() == variable) {
            return pair[1];
        }
    }
    return null;
}

function createCookie(name, value, days) {
	var cookieStr = "";
	var domain;
	var beta_gamma_domain_RE = /\.amazon\.com/;
	
	if(document.location.href.match(beta_gamma_domain_RE)) {
		domain="; domain=.amazon.com";
	} else {
		domain="; domain=.amazonservices.com";
	}
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        var expires = "; expires=" + date.toGMTString();
    } else {
		var expires = "";
	}


	if('\v'=='v') {  ///true for IE
		cookieStr = name + "=" + value + expires + domain + "; path=/";
	} else {
		cookieStr = name + "=" + value + expires + "; path=/";
	}
    document.cookie = cookieStr;
}

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 getLeadSource() {
    var ld = readCookie("ld");
    return (ld != false && ld != null) ? ld : '';
}

function getPromotionCode() {
    var pc = readCookie("pc");
    return (pc != false && pc != null) ? pc : '';
}

function getHideMenuParam() {
    var hm = readCookie("hm");
    return (hm != false && hm != null) ? hm : '';
}

var ld = getQueryVariable("ld");
var pc = getQueryVariable("pc");
var adver = getQueryVariable("adver");
var type = getQueryVariable("type");
var hm = getQueryVariable("hm");

//-------DO NOT REMOVE; THESE ARE REPORT SUITE IDS--------


function getAccount() {
    var hn = window.location.hostname;
    //if(hn.indexOf("amazonservices.") >=0){
    if (hn.indexOf("integ") >= 0) {
        return "amznsrvsdev,amznsrvsmaindev";
    } else {
        return 'amznsrvsprod,amznsrvsmainprod';
    }
}
var s_account = getAccount();
//---------------------------------------------------------

 if (ld && ld != null && ld != '') {
	eraseCookie('ld');
	createCookie("ld", ld, 30);
}

else {
    var refURL = document.referrer;
    //var testRE = new RegExp("desktop\.amazon\.co","i");
    //var testRE = new RegExp("((webstoreoffers|desktop|webstore)\.amazon\.co|amazonservices\.com)","i");
    var testRE = new RegExp("(http://(webstoreoffers|webstore)\.amazon\.co|http://www\.amazonservices\.com|(desktop|integ)\.amazon\.co)", "i");
    var newld = '';
    //Preserve lead when surfing internal pages
    if (!refURL || !refURL.match(testRE)) {
        var googleRE = new RegExp("www\.google\.", "i");
        var yahooRE = new RegExp("\.search\.yahoo\.co", "i");
        var msnRE = new RegExp("\.search\.(live|msn)\.co", "i");
        var aolRE = new RegExp("(\.search\.aol\.co|aolsearch)", "i");
        var askRE = new RegExp("\.ask\.co", "i");
        var altaRE = new RegExp("\.altavista\.co", "i");
        var lycosRE = new RegExp("\.lycos\.co", "i");

        var azRE = new RegExp("AZMMSubNav");

        //Malformed lead source from AZMMSubNav
        var currentURL = window.location.search.substring(1);
        if (currentURL.match(azRE)) {
            newld = "AZMMSubNav";
        } else {
            //Natural Search Leads
            if (refURL.match(googleRE)) {
                newld = "NSGoogle";
            } else {
                if (refURL.match(yahooRE)) {
                    newld = "NSYahoo";
                } else {
                    if (refURL.match(msnRE)) {
                        newld = "NSMsn";
                    } else {
                        if (refURL.match(aolRE)) {
                            newld = "NSAol";
                        } else {
                            if (refURL.match(askRE) || refURL.match(altaRE) || refURL.match(lycosRE)) {
                                newld = "NSOther";
                            }
                        }
                    }
                }
            }
        }






        //Set lead=domain if ld is null/AS and referral URL is not an internal site URL
        if (newld == '' && !refURL.match(testRE)) {
            if (refURL && refURL != '' && (getLeadSource() == '' || getLeadSource() == "AS" || getLeadSource() == "WBAS")) {
                var domain = refURL.match(/:\/\/([^\/:]+)/);
                //Prefix "EL" for External Links
                if (domain) {
                    newld = domain[1] ? "EL-" + domain[1] : '';
                }
            } else {
                newld = getLeadSource();
            }
        }
		
        //Append AS at the end of all leads if not already		
	if (!newld.match(new RegExp("AS$")) && !jQuery("[class*='treatment-']").length) newld = newld + "AS";
		createCookie("ld", newld, 30);
	}
}

//Add prefix 'WB' to the lead for SoA tracking if landing page is as.com/webstore
var webstoreRE = new RegExp("(http://www\.amazonservices\.com|(desktop|integ)\.amazon\.com).*/webstore\/", "i");
var refURL = document.referrer;
var testRE = new RegExp("(http://(webstoreoffers|webstore)\.amazon\.co|http://www\.amazonservices\.com|(desktop|integ)\.amazon\.co)", "i");
var newld = getLeadSource();
// Check if WB not already added at the beginning, as.com/webstore page and referrals URL was not an internal site page 
if (!newld.match(new RegExp("^WB")) && location.href.match(webstoreRE) && !refURL.match(testRE)) {
    // alert(location.href.match(webstoreRE));
    // createCookie("ld", "WB"+newld, 30);
}



if (pc && pc != null && pc != '') {
    createCookie("pc", pc, 30);
}

createCookie("referrer", document.referrer, 30);

if (hm && hm != null && hm != '') {
    createCookie("hm", hm, 30);
}


function utmLinkWrapper(uri) {
	var webstoreRE = new RegExp("webstore\.amazon\.com\/webstore_fee_schedule", "g"),
		 ssrRe = new RegExp("sellercentral\.amazon\.com\/gp\/on-board\/workflow\/Registration\/login\.html", "g"),
		 encodedLdRE = new RegExp("ld\%3D", "g"),
		 temp = decodeURIComponent(uri),
	     url = uri;//decodeURIComponent(uri);
		 
		
		
    if (webstoreRE.test(temp)) {
        return url;
    } else if (url.indexOf('ld=') <= 0) {
		var ldsrc = getLeadSource();
		if(encodedLdRE.test(url) ) {
			return url;
		}
		if (ssrRe.test(temp)) {
			if (url.indexOf('?') > 0) {
				url = url + "%26passthrough%25252Fld=" + ldsrc;
			} else {
				url = url + "%3Fpassthrough%25252Fld=" + ldsrc;
			}
		} else { ///non SSR links
			///extract tab hash
			var hash = url.match(/#.*/);
			
			url = hash? url.replace(hash, "") : url;
			
			if (url.indexOf('?') > 0) {
				if(url.indexOf("/redirect/") >= 0)  {  //// add %26(url encoded "&") when going to redirect app as redirect app will perform decoding
					url = url + '%26ld=' + ldsrc;  
				} else {  /// add "&" when not passed to redirect app
					url = url + '&ld=' + ldsrc;
				}
				
			} else {
				url = url + '?ld=' + ldsrc;
			}
						
			url = hash? url + hash : url;
		}
    }
	return url;
};

function referrallead(node) {
    if (typeof node.href != "undefined" && node.href.match("^javascript:") == null && node.href.indexOf("#") < 0) {
        utmLinkWrapper(node);
    }
};

/********************
* Sanitize links with a given container
*
*********************/

var UrlSanitizer = function() {
	var redirectRE = [/(\/redirect\/.*)(?=location=).{9}/g, ""],
	obidosRE = [/(.*)\/obidos\/(.*)(#.*)/, "$3"],
	refParamRE = [/&?pf_rd_.=[A-Za-z0-9]+\-?[A-Za-z0-9]+/g, ""],
	refAmbParamRE = [/&?ref=amb_link.[A-Za-z0-9_]+\-?[A-Za-z0-9_]+/g, ""],
	ieUtfParamRE = [/ie=UTF8&?/g, ""],
	hashTabUrlRE = [/#\w+\-.*/, ""], ///checks urls ending with hash for tabs like "#services-pads-pricing"
	endingWithQuestionMarkRE = [/\?$/, ""],
	url = "";
	
	return {
		init : function (el_id) {
			  el_id = el_id || "headerSlots";
              if (typeof el_id === "string")  {
				  el_id = el_id.indexOf("#") > -1 ? el_id : "#" + el_id;
			  }

				jQuery("a", $(el_id)).each(function() {
					
					//declarations
					var href = $(this).attr('href'),
					    parent = $(this).parents("[class*=treatment]"), ///for weblab treatments
						treatmentNum = function() {
							 var num = 0, ////return 0  if not a treatment
							 _match = [];
							 if(parent.length > 0) {
								 _match = parent[0].className.match(/(treatment\-)(\d+)/i);
								 num = _match && _match.length > 1 ? _match[2] : 1; ////return 1 by default if not in treatment-# format, # can be any number
							 }
							 return num;
						 }()/* ,
						ldNum = function() {
							var return_val = 0;
							if(treatmentNum) {
								return_val = href.match(/ld=[a-zA-Z0-9]*AS(\d)/i);
							}
							return return_val;
						}(), 
						isTreatmentNumberAppended = (ldNum && ldNum.length >= 1) ? true : false, // check if treatment number already appended to ld code */
						
						
						tab = false;   ///no need to attach ld to tabs
						
											 
					if($(this).parent('.services-tab').length > 0) {
						tab = true;
					}
					
					if(href && href.indexOf("#") >= 0) {  /// sanitize only internal jump links with hash
						href = UrlSanitizer.sanitize(href);
					}
					//href = decodeURIComponent(href);
					href = $.trim(href);
					if (typeof href !== "undefined" && href != "undefined" && !href.match(/^javascript\:\.*/i) && !href.match(/^mailto:.*/i) && !tab) {
							if(href.indexOf("#") < 0 || href.match(hashTabUrlRE)) {  /// check urls that either dont have "#" or urls with tab ids hashed at end
								href =  utmLinkWrapper(href);
							}
						
						if(treatmentNum && (/ld=[a-zA-Z0-9]*/.test(href))) { 
						// value for treatmentNum will either be 0 if not a treatment or any other positive integer if a treatment
								
								if(/sell-on-amazon.htm/.test(location.href)){

									if( treatmentNum == 2)
									{
										href = href.replace(/(ld=[a-zA-Z0-9]*)/g, "$1"+"AZFSSOAWBA");
									}else if(treatmentNum == 3)
									{
										href = href.replace(/(ld=[a-zA-Z0-9]*)/g, "$1"+"AZFSSOASignup");
									}
									else if(treatmentNum == 4)
									{
										href = href.replace(/(ld=[a-zA-Z0-9]*)/g, "$1"+"NewVideo");
									}
									else if(treatmentNum == 5)
									{
										href = href.replace(/(ld=[a-zA-Z0-9]*)/g, "$1"+"ASSSTab");
									}
									else{
									href = href.replace(/(ld=[a-zA-Z0-9]*AS(\d?))/g, "$1"+ treatmentNum);				
									}
								}
								else if(href.indexOf("AS"+treatmentNum) < 0)
								{
									href = href.replace(/(ld=[a-zA-Z0-9]*)/g, "$1AS"+ treatmentNum);
								}
						}else if(ld !== null && href.indexOf("AS") < 0){
							href = href.replace(/(ld=[a-zA-Z0-9]*)/, "$1AS");	
						}
					}
					this.href = href;
				});
				
				/// for image maps
				jQuery("area", $(el_id)).each(function() {
					var href = $(this).attr('href');
					if(href && href.indexOf("#") >= 0) {  /// sanitize only internal jump links with hash
						href = UrlSanitizer.sanitize(href);
					}
					//href = decodeURIComponent(href);
					href = $.trim(href);
					if (typeof href !== "undefined" && href != "undefined" && !href.match(/^javascript\:\.*/i) && !href.match(/^mailto:.*/i)) {
							if(href.indexOf("#") < 0 || href.match(hashTabUrlRE)) {  /// check urls that either dont have "#" or urls with tab ids hashed at end
								href =  utmLinkWrapper(href);
							}
					}
					this.href = href;
				});
				
		},
		sanitize : function(uri) {
			url = decodeURIComponent(uri);
			url = url.replace(redirectRE[0], redirectRE[1]);
			url = url.replace(refParamRE[0], refParamRE[1]);
			url = url.replace(refAmbParamRE[0], refAmbParamRE[1]);
			url = url.replace(ieUtfParamRE[0], ieUtfParamRE[1]);
			url = url.replace(obidosRE[0], obidosRE[1]);
			return url;
		}
	}
	
}();

jQuery(document).ready(function () {
   UrlSanitizer.init();
   UrlSanitizer.init("middleColumn");
   
});
$(function() {

		function getParameterByName(name) {
			var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
			return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
		}


		$.fn.onNavClick(function() {
		
			var newld=getParameterByName('ld');
			url=$(this).attr("href");
			
			
			if(newld != null && url.indexOf("ld") < 0)
			{

				var hash = url.match(/#.*/);
				
				url = hash? url.replace(hash, "") : url;
				
				if (url.indexOf('?') > 0) {
					if(url.indexOf("/redirect/") >= 0)  {  //// add %26(url encoded "&") when going to redirect app as redirect app will perform decoding
						url = url + '%26ld=' + newld;  
					} else {  /// add "&" when not passed to redirect app
						url = url + '&ld=' + newld;
					}
					
				} else {
					url = url + '?ld=' + newld;
				}
							
				url = hash? url + hash : url;

				
				$(this).attr("href",url);

				return false;
			}

		});
});
