var csAjaxTracking=true;

if(typeof(s) == 'undefined') s = { t:function() { return } };
var pngfix;

// --------< define broadway stuff >--------
Broadway = { version:'1.0.0', processing:false, timeoutId:0 };
Broadway.taxPromo = { processing:false };
Broadway.shoppingCart = { processing:false, count:0 };
Broadway.siteSearch = { processing:false };
Broadway.navigation = { processing:false };
Broadway.broadvision = { processing:false };
Broadway.error = { processing:false };

Broadway.executeLocatorCS = function() {
	if((typeof(Broadway.csPostalCode) == 'undefined') || (typeof(Broadway.csCity) == 'undefined') || (typeof(Broadway.csState) == 'undefined')) return;
	csOrderNum = Broadway.csOrderNum;
	csOrderType = Broadway.csOrderType;
	csCity = Broadway.csCity;
	csState = Broadway.csState;
	csPostalCode = Broadway.csPostalCode;
	csAjaxTracking = true;

	csExecuteShoppingCart();
	csExecuteTracker();
};

Broadway.showSpinner = function(target,xOff,yOff) {
	$(target).fadeTo('fast',0.5);
	var spinner = $('div.spinner-loader');
	var p = $(target).offset();
	var x = p.left + ((xOff) ? xOff : 0);
	var y = p.top + ((yOff) ? yOff : 0);
	spinner.css('top', parseInt(y) + 'px');
	spinner.css('left', parseInt(x) + 'px');
	spinner.show();
};
$(document).ready(function() { $('div.spinner-loader').hide(); });

Broadway.clearProcessing = function() {
	clearTimeout(Broadway.timeoutId);
	$('div.spinner-loader').hide();
	Broadway.processing = false;
};

Broadway.setProcessing = function(fn) {
	Broadway.processing = true;
	Broadway.processingFn = fn;
	Broadway.timeoutId = window.setTimeout(Broadway.clearProcessing,8000);
};

// --------< cart item counter >--------
$(document).ready(function() { Broadway.shoppingCart.setCartCount(); });

Broadway.shoppingCart.setCartCount = function() {
	try {
		$.ajax({
			type:'get',
			cache:false,
			url:'/com/Ajax/VisitorAjax.cfc?method=getCartCounter',
			success: function(data,textStatus,jqXHR) {
				$("#header-cart-qty").html(data);
				Broadway.shoppingCart.count = parseInt(data.replace('[','').replace(']',''));
				$('#header-shopping-cart').fadeIn('fast');
				if(Broadway.shoppingCart.count > 0) {
					$('#checkout-sidebar-checkout img').fadeTo('normal',1);
					$('#checkout-sidebar-checkout img').css('cursor','pointer');
				} else {
					$('#checkout-sidebar-checkout img').fadeTo('normal',0.5);
					$('#checkout-sidebar-checkout img').css('cursor','auto');
				}
			},
			error: function(jqXHR,textStatus,errorThrown) {
				var result = { textStatus:textStatus, errorThrown:errorThrown, browser:$.browser };
				Broadway.error.send({subject:'Ajax Error',msg:'jQuery Ajax error in /js/global.js : setCartcount',obj:result});
			}
		});
	} catch(e) {
		var result = { exception:e, browser:$.browser, nav:navigator };
		Broadway.error.send({subject:'Javascript Error',msg:'Javascript error in /js/global.js : setCartcount',obj:result});
	}
}

$(window).load(function() {
	if((typeof(tagStruct) != 'undefined') && tagStruct.isThankYou != '1') {
		try {
			$.ajax({
				type:'get',
				cache:false,
				url:'/com/Ajax/VisitorAjax.cfc?method=loadTagging',
				data:tagStruct,
				success: function(data,textStatus,jqXHR) {
					$('div#siteTagging').html(data);
				},
				error: function(jqXHR,textStatus,errorThrown) {
					var result = { textStatus:textStatus, errorThrown:errorThrown, browser:$.browser };
					Broadway.error.send({subject:'Ajax Error',msg:'jQuery Ajax error in /js/global.js : window:load',obj:result});
				}
			});
		} catch(e) {
			var result = { exception:e, browser:$.browser, nav:navigator };
			Broadway.error.send({subject:'Javascript Error',msg:'Javascript error in /js/global.js : window:load',obj:result});
		}
	}
});

// --------< add an item to the cart >--------
// obj = { packageid: ##, itemid:## }
Broadway.shoppingCart.addItem = function(obj) {
	// add!packageId.itemId:qty|packageId.itemId:qty|...
	s.pageName = 'ShoppingCart';
	s.events = 'scAdd';
	s.products = ';' + obj.sku + ';1;' + obj.price;
	try { void(s.t()); } catch(e) { ; };

//	csOrderType = 'Cart - Add';
//	csOrderNum = 'ADD-' + tagStruct.orderId;
//	csExecuteShoppingCart();
//	csExecuteTracker();

	pauseExec(300);  // pause execution for 300 milliseconds to ensure that tagging fires off
	document.location.href = '/ShoppingCart?action=add!' + obj.packageid + ((obj.itemid > 0) ? '.' + obj.itemid : '') + ':1';
};

Broadway.error.send = function(obj) {
	try {
		obj.x = { };
		obj.x.appCodeName = navigator.appCodeName;
		obj.x.appMinorVersion = navigator.appMinorVersion;
		obj.x.appName = navigator.appName;
		obj.x.appVersion = navigator.appVersion;
		obj.x.cookieEnabled = navigator.cookieEnabled;
		obj.x.cpuClass = navigator.cpuClass;
		obj.x.onLine = navigator.onLine;
		obj.x.platform = navigator.platform;
		obj.x.userAgent = navigator.userAgent;
		obj.x.browserLanguage = navigator.browserLanguage;
		obj.x.systemLanguage = navigator.systemLanguage;
		obj.x.userLanguage = navigator.userLanguage;
		obj.x.cookie = document.cookie;
		obj.x.location = window.location;
		obj.x.domain = document.domain;
		obj.x.referrer = document.referrer;
	} catch(e) {
		obj.x = e;
	}
	var data = { data:$.toJSON(obj).toHexTrig() };

	try {
		$.ajax({
			type:'post',
			cache:true,
			dataType:'json',
			data:data,
			url:'/com/ajax/visitorAjax.cfc?method=uier',
			success: function(data,textStatus,jqXHR) { Broadway.error.processing=false; },
			error: function(jqXHR,textStatus,errorThrown) { Broadway.error.processing=false; }
		});
	} catch(e) { Broadway.error.processing=false; }
};

pngfix = function(selector) {	if($.browser.msie && parseInt($.browser.version, 10) < 7) DD_belatedPNG.fix(selector); };

$(document).ready(function () {
	$("#header-shopping-cart").hover(function() { //shopping cart rollover effect
			$(this).children("a").children("span").css({'padding-bottom':'6px','border':'0','border-bottom':'3px','border-style':'solid','border-color':'#3FBBEF'});
		},
		function() { $(this).children("a").children("span").css({'padding-bottom':'9px','border-bottom':'0px'});
	});
	$(".faq-content").slideUp("fast");
	$("#steamit-faq ul li h3").click(function () {
			$(this).next(".faq-content").slideToggle("slow"); 
    }).toggle(function(){
			$(this).css('background','url(/assets/img/Steam-It/green2_faq-opened.gif)  0px 6px no-repeat');	
		},
		function(){
			$(this).css('background','url(/assets/img/Steam-It/green2_faq-closed.gif)  3px 4px no-repeat');	
		}
	);
	$("#proshield-faq ul li h3").click(function () {
    	$(this).next(".faq-content").slideToggle("slow"); 
    }).toggle(function(){
			$(this).css('background','url(/assets/img/Air-ProShield-Plus/faq_open.gif)  0px 6px no-repeat');	
		},
		function(){
			$(this).css('background','url(/assets/img/Air-ProShield-Plus/faq_closed.gif)  2px 4px no-repeat');	
		}
	);

	$("#product-registration ul li").hover(function(){
		$(this).addClass("product-registration-hover");
		}, function() {$(this).removeClass("product-registration-hover");
	});
	$("#product-registration ul li").click(function(){
		window.location=$(this).find("a").attr("href");
		return false;
	});

	$('a[rel="external"]').click(function() {
		window.open( $(this).attr('href') );
		return false;
	});

	$(".category-grid-3-wide-no-sidebar > li:nth-child(3n)").addClass("last");
	$(".category-grid-3-wide-w-sidebar > li:nth-child(3n)").addClass("last");
	$(".category-grid-3-wide-w-2sidebar > li:nth-child(3n)").addClass("last");
	$(".category-grid-4-wide-no-sidebar > li:nth-child(4n)").addClass("last");
	$(".category-grid-4-wide-w-sidebar > li:nth-child(4n)").addClass("last");
	$("a#show-customer-release").click(function(){
		$("#testimonial-customer-release div.hidden").slideToggle("fast");
	});
});	

// if string trim function are not present, then add them
$(document).ready(function() {
	if(typeof(String.trim) == 'undefined') {
		String.prototype.trim = function() {
			return this.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g,"");
		}
	};

	if(typeof(String.fulltrim) == 'undefined') {
		String.prototype.fulltrim = function() {
			return this.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g,"").replace(/\s+/g," ");
		}
	};
});

$(function () {
	pngfix('.pngfix');
	pngfix('.pngfix-inside img');
});

$(document).ready(function() {
	(function($) {
		$.extend({
			add2cart: function(source_id, target_id, callback) {
				var source = $('#' + source_id );
				var target = $('#' + target_id );
				var shadow = $('#' + source_id + '_shadow');
				if(!shadow.attr('id')) {
					$('body').prepend('<div id="'+source.attr('id')+'_shadow" style="display: none; background-color: #ddd; border: solid 1px darkgray; position: static; top: 0px; z-index: 100000;">&nbsp;</div>');
					var shadow = $('#'+source.attr('id')+'_shadow');
				}
				if(!shadow) {
					alert('Cannot create the shadow div');
				}
				shadow.width(source.css('width')).height(source.css('height')).css('top', source.offset().top).css('left', source.offset().left).css('opacity', 0.5).show();
				shadow.css('position', 'absolute');
				shadow.animate( { width: target.innerWidth(), height: target.innerHeight(), top: target.offset().top, left: target.offset().left }, { duration: 400 } )
					.animate( { opacity: 0 }, { duration: 100, complete: callback } );
			},

			redirect: function(url) { window.location.href = url; return url; },
			// Returns the basename of a path
			basename: function(path) {
				var t = path.split('/');
				return t[t.length] === '' && s || t.slice(0, t.length).join('/');
			},
			// Returns the filename of a path
			filename: function(path) { return path.split('/').pop(); },
			fileExtension: function(s) {
				var tokens = s.split('.');
				return tokens[tokens.length-1] || false;
			}
		});
	})(jQuery);
});

function getPosition(obj) {
	var posX = obj.position().left;
	var posY = obj.position().top;
	while(obj.offsetParent().context.nodeName != 'BODY') {
    posX += obj.offsetParent().position().left;
    posY += obj.offsetParent().position().top;
    obj = obj.offsetParent();
	}
	return({top:parseInt(posY),left:parseInt(posX)});
}

var Position = (function() {
	function resolveObject(s) {
		if(document.getElementById && document.getElementById(s)!=null) {
			return document.getElementById(s);
		} else if(document.all && document.all[s]!=null) {
			return document.all[s];
		} else if(document.anchors && document.anchors.length && document.anchors.length>0 && document.anchors[0].x) {
			for(var i=0; i<document.anchors.length; i++) {
				if(document.anchors[i].name==s) return(document.anchors[i]);
			}
		}
	}
	
	var pos = {};
	pos.$VERSION = 1.0;
	
	pos.set = function(o,left,top) {
		if(typeof(o)=="string") o = resolveObject(o);
		if(o==null || !o.style) return(false);
		if(typeof(left)=="object") {
			var pos = left;
			left = pos.left;
			top = pos.top;
		}

		o.style.left = left + "px";
		o.style.top = top + "px";
		return(true);
	};
	
	pos.get = function(o) {
		var fixBrowserQuirks = true;
		if(typeof(o)=="string") o = resolveObject(o);
		if(o==null) return(null);
		
		var left = 0;
		var top = 0;
		var width = 0;
		var height = 0;
		var parentNode = null;
		var offsetParent = null;

		offsetParent = o.offsetParent;
		var originalObject = o;
		var el = o; // "el" will be nodes as we walk up, "o" will be saved for offsetParent references
		while(el.parentNode!=null) {
			el = el.parentNode;
			if(el.offsetParent==null) {
			}	else {
				var considerScroll = true;
				if(fixBrowserQuirks && window.opera) {
					if(el==originalObject.parentNode || el.nodeName=="TR") {
						considerScroll = false;
					}
				}
				if(considerScroll) {
					if(el.scrollTop && el.scrollTop>0) top -= el.scrollTop;
					if (el.scrollLeft && el.scrollLeft>0) left -= el.scrollLeft;
				}
			}
			if(el == offsetParent) {
				left += o.offsetLeft;
				if(el.clientLeft && el.nodeName!="TABLE") left += el.clientLeft;
				top += o.offsetTop;
				if (el.clientTop && el.nodeName!="TABLE") top += el.clientTop;
				o = el;
				if(o.offsetParent==null) {
					if(o.offsetLeft) left += o.offsetLeft;
					if(o.offsetTop) top += o.offsetTop;
				}
				offsetParent = o.offsetParent;
			}
		}

		if(originalObject.offsetWidth) width = originalObject.offsetWidth;
		if(originalObject.offsetHeight) height = originalObject.offsetHeight;
		
		return({'left':left, 'top':top, 'width':width, 'height':height});
	};
	
	pos.getCenter = function(o) {
		var c = this.get(o);
		if(c==null) { return(null); }
		c.left = c.left + (c.width/2);
		c.top = c.top + (c.height/2);
		return(c);
	};
	
	return(pos);
})();

(function($){$.fn.glow=function(){var clookup={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgrey:"a9a9a9",darkgreen:"006400",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",grey:"808080",green:"008000",greenyellow:"adff2f",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgrey:"d3d3d3",lightgreen:"90ee90",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"778899",lightslategrey:"778899",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"00ff00",limegreen:"32cd32",linen:"faf0e6",magenta:"ff00ff",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370d8",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"d87093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",red:"ff0000",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"ffffff",whitesmoke:"f5f5f5",yellow:"ffff00",yellowgreen:"9acd32"};function nameToColor(n){return clookup[(""+n).toLowerCase()]||null;}
function re_rgba()
{return new RegExp('rgba\\s*\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\,\\s*([0-9]{1,3})\\s*\\)');}
function re_rgb()
{return new RegExp('rgb\\s*\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)');}
function parseColor(c){var r;var e=new RegExp('#([A-F0-9]{2})([a-fA-F0-9]{2})([A-F0-9]{2})','i');if(r=e.exec(c)){return[parseInt(r[1],16),parseInt(r[2],16),parseInt(r[3],16)];}
e=new RegExp('#([A-F0-9]{1})([A-F0-9]{1})([A-F0-9]{1})','i');if(r=e.exec(c)){return[parseInt(r[1]+r[1],16),parseInt(r[2]+r[2],16),parseInt(r[3]+r[3],16)];}
e=re_rgb();if(r=e.exec(c)){return[parseInt(r[1],10),parseInt(r[2],10),parseInt(r[3],10)];}
e=re_rgba();if(r=e.exec(c)){return[parseInt(r[1],10),parseInt(r[2],10),parseInt(r[3],10),parseInt(r[4],10)];}
if(r=nameToColor(c)){return parseColor('#'+r);}
if(window.console){console.log('can not parse color '+c);}else{}
return false;}
function colorMatters(c){if(c=="inherit"||c=="transparent"){return false;}
var e=re_rgba();var r=e.exec(c);if(r&&parseInt(r[4],10)==0){return false;}
return true;}
function printColor(r){return'#'+(0x1000000+parseInt(r[0],10)*0x10000+parseInt(r[1],10)*0x100+parseInt(r[2],10)).toString(16).slice(-6);}
function finalBackgroundColor(e){var bg;do{bg=e.css('background-color');if(colorMatters(bg)){return bg;}
bg=e[0].bgColor;if(bg){return bg;}
e=e.parent();}while(e.length>0&&e.get(0).tagName);return arguments[1]||'#FFF';}
function glowItem(duration,steps)
{function glowFunction(){if(step<steps){var c=[0,0,0];for(var i=0;i<3;i++){c[i]=parseInt(srcc[i])+(((parseInt(dstc[i])-parseInt(srcc[i]))/steps)*step);}
elem.css('background-color',printColor(c));step=step+1;setTimeout(glowFunction,timeoutstep);}else{elem.css('background-color',ocol);elem.attr('glowing',0);}}
var elem=$(this);if(elem.attr('glowing')==1){return;}
elem.attr('glowing',1);var ocol=$(elem).css('background-color');var dstc=parseColor(finalBackgroundColor(elem));if(!dstc){return;}
var step=0;var timeoutstep=parseInt(duration/steps,10);glowFunction.call(elem);}
var srcc=parseColor(arguments[0]||'#FFFF99');if(!srcc){return false;}
var duration=arguments[1]||1000;var steps=arguments[2]||50;if(duration<0||!duration){duration=1000;}
if(steps<0||!steps){steps=1;}
$(this).each(function(i,x){glowItem.call(x,duration,steps);});};})(jQuery);


// ----------< extend string object to return a hextrigesimal string >----------
String.prototype.toHexTrig = function() {
	var result = new String('');
	for(var i=0; i<this.length; i++) {
		var char36 = Number(this.charCodeAt(i)).toString(36);
		if(char36.length < 2) char36 = '0' + char36;
		result += char36;
	}
	return(result);
}

// ----------< extend string object to return a hextrigesimal string back to regular string >----------
String.prototype.fromHexTrig = function() {
	var result = new String('');
	for(var i=0; i<this.length; i+=2) {
		var char36 = this.charAt(i) + this.charAt(i+1);
		var nchar = String.fromCharCode(parseInt(char36,36));
		result += nchar;
	}
	return(result);
}

if(!Array.prototype.indexOf) {
	Array.prototype.indexOf = function(obj, fromIndex) {
		if(fromIndex == null) {
			fromIndex = 0;
		} else if(fromIndex < 0) {
			fromIndex = Math.max(0, this.length + fromIndex);
		}
		for(var i=fromIndex, j=this.length; i < j; i++) if(this[i] === obj) return(i);
		return(-1);
	};
}

Array.prototype.hasObject = (
	!Array.indexOf ? function(o) {
		var l = this.length + 1;
		while(l -= 1) if(this[l - 1] === o) return(true);
		return(false);
	} : function(o) {
		return(this.indexOf(o) !== -1);
	}
);

function pauseExec(m) {
	var date = new Date();
	var curDate = null;
	do { curDate = new Date(); } 
	while(curDate-date < m);
}

/**
 * MacOS displays small fonts at the size requested.
 * Other OSes don't.
 * This hack allows overrides for Mac to be in the same
 * stylesheet, alongside the styles for other OSes.
 */
$(function () {	if(navigator.appVersion.indexOf('Mac') >= 0) { $('body').addClass('macos');	} });
