/**
 * @author mgharibi
 * @author ndykzeul
 */
/*
 * xml feeds
 * http://store.barefootwine.com/ewinerysolutionsproductfeed
 * http://store.barefootwine.com/ewinerysolutionsproductfeed?format=json
 * http://store.barefootwine.com/ewinerysolutionsproductfeed?fields=productname&orderby=productname&type=thirdpartywine&productname=Barefoot%20Bubbly%20Chardonnay%20Brut%20Cuvee
 * http://store.barefootwine.com/ewinerysolutionsproductfeed?fields=productname,appellation&orderby=productname&type=thirdpartywine&appellation=California
 * http://store.barefootwine.com/ewinerySolutionsProductFeed?fields=all&orderby=price1&type=thirdpartywine&price1Low=10&price1High=50
 * 
 * cookies
 * cartProducts
 * shippingState
 * memberStatus
 * cartSubTotal
 * 
 * cartProducts Cookie
 * qty: an integer specifying the number of a product purchased
 * productID: the productID of the product. Should be obtained from the product feed. 
 * isCase: a Boolean value specifying whether the product is being sold in a case or not
 * productpriceID: this value will be blank for wine products, and will have a value for non-wine products. Each non-wine product SKU will have a unique productpriceid. This should be obtained from the product feed.\
 * type: specifies the product type. This should be obtained from the product feed.
 *
 * example: &quantity1=10&productID1=9d5dc4bf-1cc4-fbb6-2355-956f2f72b4ff&isCase1=0&productpriceid1=&type1=firstpartywine&quantity2=2&productID2=9d5dc4bf-1cc4-fcc6-2455-956f2f72b4ff&isCase2=1&productpriceid2=&type2=firstpartywine
 * json:    [{"quantity":"10","productID":"9d5dc4bf-1cc4-fbb6-2355-956f2f72b4ff","isCase":"0","productpriceid":"","type":"firstpartywine"},{"quantity":"2","productID":"9d5dc4bf-1cc4-fbb6-2355-9ff89fkjhkjfkj","isCase":"1","productpriceid":"","type":"firstpartywine"}}
 */

// when DOM is loaded, check for product code and load store integration parts
var GLOBAL_DOMAIN_NAME;
$(function() {
	// set shipping state variables
	var stateSelected = $.getUrlVar('state');
	var cartShipTo = $.cookie("SHIPPINGSTATE");
	
	if(stateSelected == "false" && cartShipTo == null) {
		emptyCart();
		openShipTo(null,null);
	} else {
		if(cartShipTo == null) { emptyCart(); }
	}
	var productSku = $("#productSku").html();
	
	// get all products and assign to object.
	$.getJSON("http://store.macmurrayranch.com/ewinerysolutionsproductfeed?fields=all&format=json&callback=?", function(data) {
		//alert("JSON Data: " + data.length);
		document.allProducts = data.products;
		if(productSku!=null) {
			document.productData = new Object();
			for(var x =0; x< data.products.length; x++) {
				// if(data.products[x].SHIPPINGSKU.toString().replace(".0","") == productSku) {
				if(data.products[x].PRODUCTSKU.toString().replace(".0","") == productSku) {
					document.productData = data.products[x];
					break;
				}
			}
		}
		
		// load price info and enable buttons
		loadPriceInformation();
		enableBuyButtons();
		
		// set domain for cookie (needed for subdomains)
		var domainArray = window.location.hostname.split(".");
		if(domainArray.length == 3) {
			GLOBAL_DOMAIN_NAME = domainArray[1] + "." + domainArray[2];
		} else if(domainArray.length == 2) {
			GLOBAL_DOMAIN_NAME = domainArray[0] + "." + domainArray[1];
		}
		updateCartInformation();
	});
	
	$('#set-shipping-state').click(function(e) {
		e.preventDefault();
		if($('#shipping-state').val() == "no-state" && $('#pickup').not(':checked')) {
			$('.modal-container p.error').show();
		}
		checkedState = checkState($('#shipping-state').val());
		if(checkedState === true || $('#pickup').is(':checked')) setShippingState();
	});
	
	$('#close-ship-to').click(function(e) {
		e.preventDefault();
		closeShipTo();
	});
	
	$('#continue-shopping, #close-shopping-cart').click(function(e) {
		e.preventDefault();
		closeAddToCart();
	});
	
	$('#shipping-state').change(function() {
		$('#select-state').attr('checked',true);
		checkState($(this).val());
	});
	
	$('#pickup').click(function(e) {
		if($('#pickup').is(':checked')) {
			$('.modal-container p.error').hide();
			$('#set-shipping-state').attr('disabled', false);
			$('#set-shipping-state').attr('src', '/resources/images/modal/submit_btn.gif');
		}
	});
	
	// purchase details / info toggle.
	jQuery.easing.def = 'easeInExpo';
	jQuery.easing.def = 'easeOutExpo';
	$('.purchase_btn').toggle(function(){
		$(this).next('.purchase_window').animate({height:'74px'},'slow', 'easeOutExpo');
	}, function(){
		$(this).next('.purchase_window').animate({height:'0px'},'slow', 'easeInExpo');
	});
});

function emptyCart() {
	// set domain for cookie (needed for subdomains)
	var domainArray = window.location.hostname.split(".");
	if(domainArray.length == 3) {
		GLOBAL_DOMAIN_NAME = domainArray[1] + "." + domainArray[2];
	} else if(domainArray.length == 2) {
		GLOBAL_DOMAIN_NAME = domainArray[0] + "." + domainArray[1];
	}
	$.cookie("CARTPRODUCTS", null, {path: '/', domain:GLOBAL_DOMAIN_NAME});	
}

function loadPriceInformation() {
	var allowedStates = $.cookie("ALLOWEDSTATES");
	
	$(".price").each(function(index) {
		//alert(index + ': ' + $(this).text());
		var sku = $(this).parents('*[sku]').attr("sku");
		var product = getProductBySku(sku);
		
		if(product != null) {
			//$(this).html(formatCurrency(product.PRICE1) + " / Bottle<br />" + formatCurrency(product.PRICE2) +" / Case")
			if(product.INVENTORY <= 0) {
				//$(this).parents('.wine-cart').after('<p class="cart-amount" style="width:auto;">'+product.INVENTORY_OUTOFSTOCKMESSAGE+'</p>');
				//$('.addBottle').attr('href', '#').css('background-image', 'url("/resources/images/btn-add-to-cart-disabled.png")').css('cursor', 'default').removeClass();
			}
			$(this).html('$'+formatCurrency(product.PRICE1)+' / Bottle');
			
			if(allowedStates == null) {
				$.cookie("ALLOWEDSTATES", product.COMPLIANTSTATES);
			}
		} else {
			$(this).parents('.purchase_window').siblings('.purchase_btn').remove();
			$(this).parents('.purchase_window').siblings('img').remove();
			$(this).parents('.purchase_window').remove();
		}
	});
}

function getProductBySku(sku) {
	for(var x =0; x< document.allProducts.length; x++) {
		// remove productsku OR once shipperksu is populated.
		// if(document.allProducts[x].SHIPPINGSKU.toString().replace(".0","") == sku || document.allProducts[x].PRODUCTSKU.toString().replace(".0","") == sku) {
		if(document.allProducts[x].PRODUCTSKU.toString().replace(".0","") == sku) {
			return document.allProducts[x];
		}
	}
	return null;
}

function enableBuyButtons() {
	$('.addBottle').click(function() {
		var productSku = $(this).parents('*[sku]').attr("sku");
		addBottlesToCart(false,productSku);
	});
	
	$('.addCase').click(function() {
		var productSku = $(this).parents('*[sku]').attr("sku");
		addBottlesToCart(true,productSku);
	});
}

function getTotalsInCart() {
	var cartProducts = $.JSONCookie("CARTPRODUCTS");
	var cartTotal = new Object();
	var totalQty = 0;
	var subTotal = 0.0;
	if(cartProducts.length != undefined) {
		for(var p = 0; p < cartProducts.length; p++) {
			var pObj = cartProducts[p];
			totalQty += parseInt(pObj.QUANTITY);
			
			// determine cost for this item and add to total
			for(var i = 0; i < document.allProducts.length; i++) {
				if(pObj.PRODUCTID == document.allProducts[i].PRODUCTID) {
					if(pObj.ISCASE == "1") {
						subTotal += parseFloat(document.allProducts[i].PRICE2) * (parseInt(pObj.QUANTITY));
					} else {
						subTotal += parseFloat(document.allProducts[i].PRICE1) * (parseInt(pObj.QUANTITY));
					}
					break;
				}
			}
		}
	}
	cartTotal.totalQty = totalQty;
	cartTotal.subTotal = subTotal;
	return cartTotal;
}

function setShippingState() {
	if($('#pickup').is(':checked')) {
		stateCode = "WC";
	} else {
		stateCode = $('#shipping-state').val();
	}
	
	$.cookie("SHIPPINGSTATE", stateCode, { path: '/', domain:GLOBAL_DOMAIN_NAME });
	closeShipTo();
}

function addBottlesToCart(isCase, pSku) {
	isCase = 0;
	// get cartProducts cookie
	var cartProducts = $.JSONCookie("CARTPRODUCTS");
	var cartShipTo = $.cookie("SHIPPINGSTATE");
	
	if(cartShipTo == null) {
		openShipTo(isCase,pSku);
		return false;
	}
	
	var productData;
	if(document.allProducts == null) {
		productData = document.productData;
	} else {
		for(var x =0; x< document.allProducts.length; x++) {
			// if(document.allProducts[x].SHIPPINGSKU.toString().replace(".0","") == pSku || document.allProducts[x].PRODUCTSKU.toString().replace(".0","") == pSku) {
			if(document.allProducts[x].PRODUCTSKU.toString().replace(".0","") == pSku) {
				productData = document.allProducts[x];
				break;
			}
		}
	}
	
	var quantity = $('*[sku='+pSku+'] .quantity').val();
	if(isNaN(quantity) || quantity <= 0) {
		//alert("please enter a numerical quantity");
		return false;
	} else {
		quantity = parseInt(quantity);
	}
	
	if(productData != null) {
		var recordExists = false;
		if(cartProducts.length != undefined) {
			for (var p = 0; p < cartProducts.length; p++) {
				var pObj = cartProducts[p];
				if(pObj.PRODUCTID == productData.PRODUCTID) {
					if(pObj.ISCASE == isCase) {
						// updated current record
						// pObj.QUANTITY = parseInt(pObj.QUANTITY) + 1; //((isCase == false) ? parseInt($("#productQty").val()) : 1);
						pObj.QUANTITY = parseInt(pObj.QUANTITY) + quantity; //((isCase == false) ? parseInt($("#productQty").val()) : 1);
						recordExists = true;
						break;
					}
				}
			}
		} else {
			//openShipTo();
		}
		
		if(!recordExists) {
			var newProductObj = new Object();
			newProductObj.QUANTITY = quantity; //(isCase == false) ? $("#productQty").val() :
			newProductObj.PRODUCTID = productData.PRODUCTID;
			newProductObj.ISCASE = (isCase) ? 1 : 0;
			newProductObj.PRODUCTPRICEID = "";
			newProductObj.TYPE = productData.TYPE;
			if(cartProducts.length != undefined) {
				cartProducts.push(newProductObj);
			} else {
				cartProducts = [newProductObj];
			}
		}
		
		$.JSONCookie("CARTPRODUCTS", cartProducts, {path: '/', domain:GLOBAL_DOMAIN_NAME});
		openAddToCart();
	}
	updateCartInformation();
}

function removeItem(arrayIndex) {
	var cartProducts = $.JSONCookie("CARTPRODUCTS");
	if(cartProducts.length != undefined) {
		cartProducts.remove(arrayIndex);
		$.JSONCookie("CARTPRODUCTS", cartProducts, {path: '/', domain:GLOBAL_DOMAIN_NAME});
		updateCartInformation();
	}
}

function getProductByID(pID) {
	for(var i = 0; i < document.allProducts.length; i++) {
		if(pID == document.allProducts[i].PRODUCTID) {
			return document.allProducts[i];
		}
	}
	return null;
}

function showCartContents() {
	$("#cartContents").slideDown("fast");
}

function hideCartContents() {
	$("#cartContents").slideUp("fast");
}

function updateCartInformation() {
	var cartProducts = $.JSONCookie("CARTPRODUCTS");
	var cartTotal = getTotalsInCart();
	if(cartProducts.length != undefined) {
		$('.shop-total-price').html('').html("$" + formatCurrency(cartTotal.subTotal));
	}
	
	if(cartTotal.subTotal == 0) {
		$('.shop-total-price').html('').html("$0.00");
	}
	
	var totalItemsInCart = cartTotal.totalQty;
	$('.shop-cart-item').html('').html(totalItemsInCart);
	
	/*
	$('#cartInfo').html('').html("<p style='font-size:10px;'><br/>You currently have <a style='text-decoration:underline;' onclick='showCartContents();'>" + totalItemsInCart + " " + ((totalItemsInCart==1)?"item":"items") + "</a> in your shopping cart." + "<br/>Subtotal: " + formatCurrency(cartTotal.subTotal) + "</p>");
	if(cartProducts.length != undefined) {
		var htmlString = "<div id=\"closebtn\" style=\"cursor:hand;cursor:pointer;position:absolute;right:0px;top:0px;background-color:gray;color:white;border: 1px solid grey;\" onclick='hideCartContents();'>close</div><div style='height:15px;'></div>";
		for(var p = 0; p < cartProducts.length; p++) {
			var pObj = cartProducts[p];					
			var productObj = getProductByID(pObj.productID);
			if(productObj != null) {
				var conj = "";
				var price;
				if(pObj.isCase) {
					conj = (parseInt(pObj.quantity) == 1) ? "case of" : "cases of";
					price = productObj.PRICE2;
				} else {
					conj = (parseInt(pObj.quantity) == 1) ? "bottle of" : "bottles of";
					price = productObj.PRICE1;
				}
				htmlString += "<div><li>%qty% %conjunction% %name%, %cost% - %delete%".replace("%qty%",pObj.quantity).replace("%name%",productObj.PRODUCTNAME).replace("%cost%",formatCurrency(parseFloat(price) * (parseInt(pObj.quantity)))).replace("%conjunction%",conj).replace("%delete%","<a onclick='removeItem(" + p + ")'>remove</a></li></div>");
			}
		}
		htmlString += "<hr style='width:100%'><div style='float:left'>Total Items: %totalQty%</div>".replace("%totalQty%",cartTotal.totalQty);
		htmlString += "<div style='float:right'>Subtotal: %totalCost%</div>".replace("%totalCost%",formatCurrency(cartTotal.subTotal));
		htmlString += "";
		$("#cartContents").html(htmlString);
	}
	*/
}

function formatCurrency(num) {
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
	num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
	cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
	num = num.substring(0,num.length-(4*i+3))+','+
	num.substring(num.length-(4*i+3));
	//return (((sign)?'':'-') + '$' + num + '.' + cents);
	return (((sign)?'':'-') + num + '.' + cents);
}

Array.prototype.remove = function(from, to) {
	var rest = this.slice((to || from) + 1 || this.length);
	this.length = from < 0 ? this.length + from : from;
	return this.push.apply(this, rest);
};

$.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 $.getUrlVars()[name];
	}
});

function openShipTo(isCase, pSku) {
	$('.overlay, #ship-to-state').show();
	$('#ship-to-state').attr('isCase',isCase).attr('pSku',pSku);
}

function closeShipTo() {
	$('.overlay, #ship-to-state').hide();
	
	var cartShipTo = $.cookie("SHIPPINGSTATE");
	if($.cookie("SHIPPINGSTATE") != null && $('#ship-to-state').attr('pSku') != "") {
		addBottlesToCart(false,$('#ship-to-state').attr('pSku'));
	}
}

function openAddToCart() {
	$('.overlay, #shopping-cart').show();
}

function closeAddToCart() {
	$('.overlay, #shopping-cart').hide();
}

// check if selected state is in list of allowed states
function checkState(selectedState) {
	if($.cookie("ALLOWEDSTATES").indexOf(selectedState) == -1) {
		$('.modal-container p.error').show();
		$('#set-shipping-state').attr('disabled', true);
			$('#set-shipping-state').attr('src', '/resources/images/modal/submit_btn-disabled.gif');
		return false;
	} else {
		$('.modal-container p.error').hide();
		$('#set-shipping-state').attr('disabled', false);
		$('#set-shipping-state').attr('src', '/resources/images/modal/submit_btn.gif');
		return true;
	}
}

if (!Array.indexOf) {
  Array.prototype.indexOf = function (obj, start) {
    for (var i = (start || 0); i < this.length; i++) {
      if (this[i] == obj) {
        return i;
      }
    }
    return -1;
  }
}
