
var AddToCart = {
	Version: '1.0.0', 
	REQUIRED_PROTOTYPE: '1.6.0.3', 
	PageElemID: "WholePage", 
	AddedToCartElemID: "AddedToCart", 
	AddedToCartIFrameElemID: "AddedToCartIFrame", 
	AddedToCartBGElemID: "AddedToCartBG", 
	CartQuantityElemID: "CartQuantity", 
	AddedToCartResultsElemID: "AddedToCartResults", 
	AddedToCartCloseElemID: "AddedToCartClose", 
	CloseButtonPosition: 3, // 1=topleft, 2=topcenter, 3=topright
	Counter: 1, 
	load: function(){
		// verify the prototype is load and right version
		function convertVersionString(versionString) {
			var v = versionString.replace(/_.*|\./g, '');
			v = parseInt(v + '0'.times(4-v.length));
			return versionString.indexOf('_') > -1 ? v-1 : v;
		}
		if((typeof Prototype == 'undefined') || (typeof Element == 'undefined') || (typeof Element.Methods == 'undefined') || (convertVersionString(Prototype.Version) < convertVersionString(AddToCart.REQUIRED_PROTOTYPE))){
			throw("CommerceCM requires the Prototype JavaScript framework >= " + AddToCart.REQUIRED_PROTOTYPE);
		}
		/* Script not in head tag, in control right now
		// get parameters from javascript src query string
		var js = /scripts/cart\.js(\?.*)?$/;
		$$('head script[src]').findAll(function(s){
			return s.src.match(js);
		}).each(function(s){
			var path = s.src.replace(js, ''),
			includes = s.src.match(/\?.*params=([a-z,]*)/);
			var params = (includes ? includes[1] : 'CartQuantity').split(',');
			if(params.length >= 1){
				AddToCart.AddedToCartElemID = params[0];
			}
			if(params.length >= 2){
				AddToCart.AddedToCartBGElemID = params[1];
			}
			if(params.length >= 3){
				AddToCart.CartQuantityElemID = params[2];
			}
		});
		*/
	}, 
	add: function(_productid, _quantityid, _attribute1id, _attribute2id, _attribute3id, _attribute4id, _return, _format, _suffix){
		var params = {};
		// set session id
		var now = new Date();
		params.t = now.getTime();
		// set product id
		params.ProductID = (_productid-0);
		// set quantity
		var qtyval = ($F(_quantityid)-0);
		if(!isNaN(qtyval) && qtyval > 0){
			params.Quantity = qtyval;
		}else{
			params.Quantity = 1;
		}
		// set attributes
		if(_attribute1id != '' && $(_attribute1id)){
			var attr1val = $F(_attribute1id);
			params.Attribute1 = attr1val.escapeHTML();
		}
		if(_attribute2id != '' && $(_attribute2id)){
			var attr2val = $F(_attribute2id);
			params.Attribute2 = attr2val.escapeHTML();
		}
		if(_attribute3id != '' && $(_attribute3id)){
			var attr3val = $F(_attribute3id);
			params.Attribute3 = attr3val.escapeHTML();
		}
		if(_attribute4id != '' && $(_attribute4id)){
			var attr4val = $F(_attribute4id);
			params.Attribute4 = attr4val.escapeHTML();
		}
		// set return - 1 = item count, 2 = item quantity count
		_return = (_return-0);
		if(!isNaN(_return) && _return > 0){
			params.Return = _return;
		}else{
			params.Return = 1;
		}
		// set format - 1 = string, 2 = json
		_format = (_format-0);
		if(!isNaN(_format) && _format > 0){
			params.Format = _return;
		}else{
			params.Format = 2; // json is the default
		}
		// use suffix - true | false
		// default to true
		if(typeof _suffix === 'undefined'){
			_suffix = true;
		}
		if(!_suffix){
			params.Suffix = false;
		}else{
			params.Suffix = true;
		}
		// send add to cart request		
		new Ajax.Request('/AddToCart.aspx', {
			method: 'get', 
			parameters: params, 
			onSuccess: function(_transport){
				var response = _transport.responseJSON || {Error: "NOT OK"}
				if(response.Error != ""){
					alert(response.Error);
					//alert("Error!\n\nCould not add the item to your basket. (Error Code: 1)");
				}else{
					try {
						AddToCart.formatAndDisplayResponse(response);
					}catch(x){
						alert(x);
						//alert("Error!\n\nCould not add the item to your basket.\n\n(Error Code: 2)");
					}
				}
			}, 
			onFailure: function(){
				alert("Error!\n\nAn error occurred when attempting to add to the basket.\n\n(Error Code: 3)");
			}
		});
	}, 
	close: function(){
		$(this.AddedToCartElemID).setStyle({top: -2000 + "px", left: -2000 + "px"});
		$(this.AddedToCartCloseElemID).setStyle({top: -2000 + "px", left: -2000 + "px"});
		$(this.AddedToCartIFrameElemID).setStyle({top: -2000 + "px", left: -2000 + "px"});
		$(this.AddedToCartBGElemID).setStyle({top: -3000 + "px", left: -3000 + "px", height: 100 + "%"});
		return 0;
	}, 
	//_payload = {ProductImage: '<img>', ProductName: '<ProductName>', SKU: '<SKU>', Quantity: '#', ListPrice: '$#.##', OnSale: (true|false), SalePrice: '$#.##', TotalItems: '# item(s)|#', BasketSubTotal: '$#.##'}
	formatAndDisplayResponse: function(_payload){

		// update the basket item quantity div, if exists
		var basketQuantity = $(AddToCart.CartQuantityElemID);
		if(basketQuantity){
			basketQuantity.update(_payload.TotalItems);
		}
		
		if($(this.AddedToCartResultsElemID)){
		
			// replace variables
			var AddedToCart_Image = $("AddedToCart_Image");
			if(AddedToCart_Image){
				AddedToCart_Image.src = _payload.ProductImage
			}
			var AddedToCart_ProductName = $("AddedToCart_ProductName");
			if(AddedToCart_ProductName){
				AddedToCart_ProductName.update(_payload.ProductName);
			}
			var AddedToCart_SKU = $("AddedToCart_SKU");
			if(AddedToCart_SKU){
				AddedToCart_SKU.update(_payload.SKU);
			}
			var AddedToCart_Quantity = $("AddedToCart_Quantity");
			if(AddedToCart_Quantity){
				AddedToCart_Quantity.update(_payload.Quantity);
			}
			var AddedToCart_Price = $("AddedToCart_Price");
			if(AddedToCart_Price){
				var price = "<span class='ListPrice'>" + _payload.ListPrice + "</span>"
				if(_payload.OnSale){
					price += "<span class='SalePrice'>" + _payload.SalePrice + "</span>";
				}
				AddedToCart_Price.update(price);
			}
			var AddedToCart_TotalItems = $("AddedToCart_TotalItems");
			if(AddedToCart_TotalItems){
				AddedToCart_TotalItems.update(_payload.TotalItems);
			}
			var AddedToCart_BasketSubTotal = $("AddedToCart_BasketSubTotal");
			if(AddedToCart_BasketSubTotal){
				AddedToCart_BasketSubTotal.update(_payload.BasketSubTotal);
			}
			// show added results
			this.centerAddedPopup();
		
		}else{
			alert("The item has been added to your cart.");
		}
		
	}, 
	centerAddedPopup: function(){
		// grayout background
		$(this.AddedToCartBGElemID).setStyle({top: 0 + "px", left: 0 + "px"});
		// calculate where center is
		var popupCenterY = Math.round(this.getScrollAmount() + (this.getWindowHeight()/2) - (this.getAddedPopupHeight()/2));
		var popupCenterX = Math.round((this.getWindowWidth()/2) - (this.getAddedPopupWidth()/2));
		// position the added to cart message
		$(this.AddedToCartIFrameElemID).setStyle({top: popupCenterY + "px", left: popupCenterX + "px"});
		$(this.AddedToCartElemID).setStyle({top: popupCenterY + "px", left: popupCenterX + "px"});
		if(this.CloseButtonPosition == 3){
			var closeX = popupCenterX + this.getAddedPopupWidth() - $(this.AddedToCartCloseElemID).getWidth();
			$(this.AddedToCartCloseElemID).setStyle({top: (popupCenterY + $(this.AddedToCartCloseElemID).getHeight()/4) + "px", left: closeX + "px"});
		}
		if($(this.PageElemID)){
			var pageHeight = $(this.PageElemID).getHeight();
			if(pageHeight > this.getWindowHeight()){
				$(this.AddedToCartBGElemID).setStyle({height: pageHeight + "px"});
			}
		}
		return true;
	}, 
	getWindowWidth: function(win){
		var width;
		win = win ? win : window;
		width = win.innerWidth || (win.document.documentElement.clientWidth || win.document.body.clientWidth);
		return width; 
	}, 
	getWindowHeight: function(win){
		var height;
		win = win ? win : window;
		height = win.innerHeight || (win.document.documentElement.clientHeight || win.document.body.clientHeight);
		return height; 
	}, 
	getAddedPopupWidth: function(){
		return $(this.AddedToCartElemID).getWidth();
	}, 
	getAddedPopupHeight: function(){
		return $(this.AddedToCartElemID).getHeight();
	}, 
	getScrollAmount: function(){
		if(typeof window.pageYOffset != "undefined"){
			var scroll = window.pageYOffset;
		}else if(typeof document.documentElement.scrollTop != "undefined"){
			var scroll = document.documentElement.scrollTop;
		}else{
			var scroll = document.body.scrollTop;
		}
		return scroll;
	}
};

function loadAddToCart(){
	AddToCart.load();
}

addPageLoad_Handler(loadAddToCart);

// add ajax creation/completion responders
/*Ajax.Responders.register({
	onCreate: function(){
		LABEL.displayAjaxLoader();
	}, 
	onComplete: function(){
		//alert('a request completed');
	}
});*/

