var setDomains = (function(){
	storeOrigin = (typeof storeOrigin === "undefined" || storeOrigin.indexOf("#") > -1)? "http://store.ancestry.com" : storeOrigin;
	ancOrigin = (typeof ancOrigin === "undefined" || ancOrigin.indexOf("#") > -1)? "http://www.ancestry.com" : ancOrigin;
}());
// FUNCTION PARSES A PRODUCT LIST OBJECT AND INJECTS PRICE INFORMATION INTO DOM
if(setPrices === undefined){var setPrices = {};};
setPrices.useProductList = (function() {
	var productList = setPrices.getProductList;
	$(function() {
		// SIMPLE VALIDATION FOR productList OBJECT
		if(typeof productList !== "undefined" && productList.hasOwnProperty("length")) {
			if(productList.length >= 1) {
		
			var pricingElements = $(".pricing");
			// IF THERE ARE MORE th.pricing ELEMENTS THAN productList ARRAY ELEMENTS
			if(pricingElements.length > productList.length) {
				// REMOVE PRICING FOR ELEMENTS WITHOUT productList COUNTERPART
				pricingElements.filter(function() {return ($(this).index(".pricing") > productList.length - 1);}).remove();
			}
			
			var currencyCode = (function () {
				var cc = productList[0].currencyCode || "USD";
				switch(cc)
				{	
					case"USD": return "$";
					case"EUR": return "&euro;";
					case"GBP": return "&pound;";
					default: return "$";
				}
			}());
			
			pricingElements.each(function(pricingIndex){
				$(this).children(":lt(2)").each(function(priceTypeIndex) { // CHILDREN SHOULD GET FIRST 2 ELEMENTS WITH CLASSES: 'regularPrice','discountedPrice'
					var priceType = $(this).attr("class").split(" ")[0]; // CACHE THE STRING FOR USE INSIDE INNER LOOP
					$(this).children().each(function(pricePartsIndex) {// CHILDREN SHOULD GET ELEMENTS WITH CLASSES: 'currency','whole','dec'
						// TEST FOR UNDEFINED productList PROPERTY (EITHER: 'regularPrice', or 'discountedPrice')
						var price = productList[pricingIndex][priceType];
						if(price === undefined) {
							// REMOVE MISSING PRICETYPE FROM HTML, STYLE REMAINING PRICETYPE
							pricingElements.filter(function() {return ($(this).index(".pricing") === pricingIndex);})
								.find("."+priceType).remove().end().children().attr("class","redPrice");
						}
						else {
							switch($(this).attr("class").split(" ")[0])
							{
								case"currency": $(this).html(currencyCode);break;
								case"whole": $(this).text(parseInt(price) + ".");break;
								case"dec":
									var decStr = price.toFixed(2).toString();
									if(decStr.indexOf(".") === -1) {$(this).text("00");}// IF DECIMAL POINT IS NOT FOUND USE 00 FOR CENTS
									else{$(this).text(decStr.split(".")[1]);}
									break;
								default:break;
							}
						}
					});
				}).end().siblings("#shipBtn,.shipBtn").attr("href",function() { // TRAVERSE TO BUY NOW BUTTON, SET THE href ATTRIBUTE
					return storeOrigin + "/Index.aspx?p=" + productList[pricingIndex].offerId + "&action=addproduct&ReturnURL="+location.href;
				}).click(function(event){ // FIRE OMNITURE EVENT ON BUY NOW BUTTON CLICK
					if(typeof s_account === "undefined"){s_account = "myfamilyancestry";}
					var pageName = location.pathname.substring(location.pathname.lastIndexOf("/") + 1);
					var label = pageName + " " + document.title + " Ship It " + productList[pricingIndex].offerId;
					var s = s_gi(s_account); 
					s.tl(this,'o',label);
				});
			});
			}
		}
		
		// CREATES A DISCOUNT LABEL TO SHOW THE SAVINGS PERCENTAGE NEXT TO THE PRICE
		(function setDiscountLabel(){
			var productList = setPrices.getProductList;
			$(".discountedPrice").each(function(index){ // WE'VE ALREADY REMOVED THE DIV.DISCOUNTPRICE NODE FROM THE DOM
				var discount;
				if(productList[index] && productList[index].discountedPrice && productList[index].regularPrice) { // MAKE SURE WE DON'T ACCESS UNDEFINED PROPERTIES
					productList[index].discountPercentage = discount = 100 - Math.round((productList[index].discountedPrice / productList[index].regularPrice) * 100);
				}else{return;}; 
				if($(this).next(".discountLabel").length === 0) {$(this).after("<div class='discountLabel'></div>");} // ADD DIV.DISCOUNTLABEL IF IT DOESN'T EXIST
				$(this).next(".discountLabel").html(discount + "%<div>savings!</div>"); // POPULATE DIV.DISCOUNTLABEL WITH THE DISCOUNT PERCENTAGE
			});
		}());
		
		// OMNITURE CLICK TRACKING FOR DOWNLOAD LINK ADDED 11/10/2011
		$("a:contains(Download)").click(function(event){
			var pageName = location.pathname.substring(location.pathname.lastIndexOf("/") + 1);
			var label = pageName + " " + document.title + " Download Link ";
			var s = s_gi(s_account); 
			s.tl(this,'o',label);
		});
		
		// UNCOMMENT THE FOLLOWING LINE TO HIDE ALL DOWNLOAD LINKS AND TEXT
		//$(".productInfo + div:contains(Download)").add("strong:contains(Download)").nextUntil(".gap").andSelf().hide();
		if(location.search.indexOf("ref=") > -1) {$("a#downloadBtn").hide();};
		
		// NEW SWITCH FOR HREF FOR DOWNLOAD LINK CHANGED 11/22/2011
		$("#downloadBtn").attr("href",function(){
			var dLPt1 = "https://shop.novadevelopment.com/store_new/ancestry_transition.php?i=",dlPt2=productList[0]["discountPercentage"] || "",dlPt3="&rs=68&preflanguage=5&fpc=USD&r=",dlPt4=location.href,dlPt5="&netid=cj";
			switch(dlPt2)
			{
				case(20):dlPt2 = "9867469";break;case(25):dlPt2 = "9867470";break;case(30):dlPt2 = "9867471";break;case(40):dlPt2 = "9867472";break;case(50):dlPt2 = "9867473";break;case(""):default:dlPt2 = "9867055";break;
			}
			return dLPt1+dlPt2+dlPt3+dlPt4+dlPt5;
		});
	});
}());
	//	MODAL 
var Modal = (function(){	
	function Modal (options) {
		var that = {};
		var onStage = false;
		var defaults = {
			type:"image",
			alwaysShowNav:false,
			preventDefault:false,
			animate:250
		}
				
		var openModal = function(target) {
			if(onStage){return;}else {onStage = true;};
			if(typeof arguments[1] === "object" && spec.preventDefault){arguments[1].preventDefault();};
			$("<div/>",{"class":"overlayBG",text:"Loading..."}).css({"opacity":0}).appendTo("body").animate({"opacity":".5"},spec.animate);
			switch(spec.type)
			{
				case"image":
					$("<img/>",{"src":target,"class":"modalImg"}).one("load",function(){
						$(this).wrap("<div id='overlayContent'></div>").parent().appendTo("body").css({"opacity":0}).animate({"opacity":"1"},(spec.animate * 2));
						setPos();
						drawCloseButton();							
					}).each(function(){if(this.complete) {$(this).trigger("load");}}); // AFTER BROWSER CACHES IMAGE, MANUALLY TRIGGER LOAD EVENT
					break;
				case"html":
					var htmlContent = $(target).clone().css("display","block");
					$("<div/>",{"id":"overlayContent"}).append(htmlContent).appendTo("body");
					setPos();
					drawCloseButton();
					break;
			}			
			// 	TODO: SET HOVER FUNCTIONALITY FOR LEFT AND RIGHT HALF OF OVERLAYCONTENT, TO OPEN NAV BUTTONS
			$(".overlayBG,.closeButton").live("click",function(){
				if(!onStage){return;}else {
					$(".overlayBG,#overlayContent").remove();
					onStage = false;
				};
			});
		}
		
		var drawCloseButton = function() {
			$("#overlayContent").append("<div class='closeButton'>close</div>");
		}
		
		// CENTER THE MODAL CONTENT ON THE SCREEN
		var setPos = function(){
			$("#overlayContent").css({"margin-left":function(){
				return "-" + $("#overlayContent").outerWidth()/2 + "px";
			},"margin-top":function(){
				return "-" + $("#overlayContent").outerHeight()/2 + "px";							
			},"left":"50%","top":"50%"});
		}
		
		try {
		if(options != undefined && typeof options === "object") {
			var spec = $.extend({},defaults,options);
		}
		else {spec = defaults;}		
		var init = (function () {
			// SIMPLE VALIDATION
			if(typeof spec.selector === "undefined" || typeof spec.selector !== "string"){throw {name:"init Selector Error",message:"Selector must be defined"};}
			if(typeof spec.targets === "undefined" || spec.targets.length === undefined){throw {name:"init Targets Error",message:"Targets must be defined, and have length."};}
			
			$(spec.selector).each(function(index){
				var target = ($.isArray(spec.targets) && typeof spec.targets[index] === "string") ? spec.targets[index] : spec.targets;
				$(this).click(function(event){openModal(target,event);});
			});	
		}());
		}
		catch(e) {
			that.error = e;
			return that;
		}
		
		// PUBLIC INTERFACE METHODS
		that.openModal = openModal;
		
		return that;			
	}
	return Modal;	
}());
