var strFormID = "cartaddproduct";
var minicart = {
	cart: "",
	AJAXBasketItemsURL: "",
	AJAXBasketSummaryURL: "",
	AJAXForm: "",
	termsMessage: "Please agree to the terms before adding the product to your shopping basket.",
	checkbox: null,
	addToCartButton: null,
	sizeSelectBox: null,
	selectSizeMessage: "Please select a size for this product before adding the product to your shopping basket.",
	
	miniBasketDiv : null,
	miniBasketControls : null,
	basketContents : null,
	closeBtns : null,
	expandBtns : null,
	basketWrapper : null,
	timer : null,
	closeTime : 3000,
	
	loadingImageValue: null,
	itemAddedImageValue: null,
	
	container: new Array(),
	
	init: function() {
		this.prepare();
		this.prepareAJAX();
	},
	prepare: function() {
		
		this.miniBasketDiv = jQuery('#minicart');
		this.miniBasketControls = this.miniBasketDiv.find('div.basket_showToggle a');
		this.basketContents = this.miniBasketDiv.find('.basketContent');
		this.basketWrapper = this.miniBasketDiv.find('.basketContentWrapper');
		this.closeBtns = this.miniBasketDiv.find('div.basket_showToggle a.closeMinicart');
		this.expandBtns = this.miniBasketDiv.find('div.basket_showToggle a.expandMinicart');
		
		this.cart = $("minicart") || null;
		if (this.cart == null) return;
		this.insertBasketControls();
		
		minicart.addToCartButton = $("addProduct");
		
		minicart.sizeSelectBox = $$("div.size select")[0] || null;
		minicart.checkbox = $$("div.terms input")[0] || null;
		if (minicart.checkbox != null) {
			minicart.assignAddStatus();
			minicart.checkbox.onclick = minicart.assignAddStatus;
			minicart.checkbox.onkeypress = minicart.assignAddStatus;
		}
	},
	assignAddStatus: function() {
		if(minicart.checkbox.checked) {
			minicart.addToCartButton.addClass("enabled");
		}
		else {
			minicart.addToCartButton.removeClass("enabled");
		}
	},
	showComplete: function() {
		minicart.miniBasketDiv.removeClass("opening");
		minicart.miniBasketDiv.addClass("open");
	},
	closeComplete: function() {
		minicart.miniBasketDiv.removeClass("closing");
		minicart.miniBasketDiv.addClass("closed");
	},
	insertBasketControls: function() {
		minicart.miniBasketDiv.removeClass('mouseHover');

		minicart.closeBtns.bind('click', function() {
			minicart.closeBasket();
			return false;
		});
		
		minicart.expandBtns.bind('click', function() {
			minicart.showBasket();
			return false;
		});
		
		minicart.basketWrapper.bind('mouseleave', function() {
			if(minicart.miniBasketDiv.hasClass("open")) {
				minicart.timer = setTimeout(function() { minicart.closeBasket();},minicart.closeTime);
			}
			return false;
		});
		
		minicart.basketWrapper.bind('mouseenter', function() {
			if(minicart.timer) {
				clearTimeout(minicart.timer);
			}
			return false;
		});
	},
	showBasket: function() {
		if(minicart.miniBasketDiv.hasClass("closed")) {
			var basketContentsHeight = 0;
			jQuery("#basketContents ul.items").show();
			minicart.basketContents.children().each(function() {
				basketContentsHeight += jQuery(this).outerHeight(true);
			});
			minicart.miniBasketDiv.removeClass("closed");
			minicart.basketContents.animate({"height": basketContentsHeight}, 400, 'linear', minicart.showComplete);
			minicart.miniBasketDiv.addClass("opening");
		}
	},
	closeBasket: function() {
		if(minicart.miniBasketDiv.hasClass("open")) {
			minicart.miniBasketDiv.removeClass("open");
			minicart.basketContents.animate({"height": 0}, 400, 'linear', minicart.closeComplete);
			minicart.miniBasketDiv.addClass("closing");
		}
	},
	autoShowCloseBasket: function() {
		minicart.showBasket();
		minicart.timer = setTimeout(function() { minicart.closeBasket();},minicart.closeTime);
	},
	prepareAJAX: function() {
		if (minicart.addToCartButton == null) {
			return;
		}
		
		minicart.AJAXBasketItemsURL = document.getElementById("AJAXBasketItemsURL").value;
		minicart.AJAXBasketSummaryURL = document.getElementById("AJAXBasketSummaryURL").value;
		
		minicart.loadingImageValue = staticRoot+'img/asda_img/loading_addtobasket.gif';
		
		if (minicart.AJAXBasketItemsURL == null && minicart.AJAXBasketSummaryURL == null ) return;
		
		minicart.AJAXForm = document.forms[strFormID];
		
		// old is now in the onclick event handler in the add to cart button
		//minicart.addToCartButton.onclick = function() {
		//	minicart.addProduct();
		//	return false;
		//}
	},
	addProduct: function(addBtn,frmId) {
		var passAjax = true;
		
		// check for ageRestriction
		if ((addBtn != null) && addBtn.getAttribute("class").indexOf("big") != -1 && minicart.checkbox != null && minicart.checkbox.checked == false) {
			alert(minicart.termsMessage);
			passAjax = false;
		}
		
		// check for size selction
		if (minicart.sizeSelectBox != null && minicart.sizeSelectBox.value == "@@@") {
			alert(minicart.selectSizeMessage);
			passAjax = false;
		}
		
		// ajax request if all is ok
		if (passAjax) {
			if(frmId == 'undefined') {
				var frmId = strFormID;
			}
			
			//create buttons
			//izView in details page in that page itemadded isn't required.
			//exept addbutton is not big add button.
			if((addBtn != null) && ($('izView') == null && $('productViewerSmall') == null) || (addBtn != null) && addBtn.src.indexOf("/img/btn_addtobasket.gif") != -1) {
				if(addBtn.src.indexOf('img/btn_addtobasket.gif') != -1) { //107 px image
					minicart.itemAddedImageValue = staticRoot+'img/asda_img/button_item_added_GM.gif';
				} else {
					minicart.itemAddedImageValue = staticRoot+'img/asda_img/button_item_added.gif';
				}
				minicart.container[frmId] = new itemButton(strFormID,addBtn);
				minicart.container[frmId].showLoading();
			}
			
			var AJAXBasketItems = new Request({url: minicart.AJAXBasketItemsURL, method: 'post', data: minicart.AJAXForm, evalScripts: true, onComplete: function (response) { minicart.updateBasketItems(response,frmId);}}).send();
		}
	},
	updateBasketItems: function(result,formId) {
		var insertionElement = jQuery("#basketContents");
		if (insertionElement == null) return;
		insertionElement.html(result);
		
		//replace loading to itemAdded, main
		if((minicart.container[formId] != null) && ($('izView') == null)) {
			minicart.container[formId].showAdded();
			setTimeout(function() { minicart.container[formId].showButton(); },3000);
		}
		
		// now call second pipeline
		var AJAXBasketSummary = new Request({url: minicart.AJAXBasketSummaryURL, method: 'post', data: minicart.AJAXForm, onComplete: minicart.updateBasketSummary}).send();
		
		//call ie hack function
		if($chk(minicart.ieHack)) {
			minicart.ieHack();
		}
		
		minicart.autoShowCloseBasket();
		
	},
	updateBasketSummary: function(result) {
		var insertionElement = jQuery(".basketSummary");
		if (insertionElement == null) return;
		insertionElement.html(result);
	}
}


/** 
 * 	Class for itemButton
 */
var itemButton = new Class({
    initialize: function(frmId,addToCartEl){
   		var _parent;
		var addToCart;
		var loading;
		var itemAdded;
		var oldTextAlign;
		
		var self = this;
		
		//get parent
		self._parent = addToCartEl.parentNode;
		//self._parent.style.height = '2.091em';
		self.oldTextAlign = self._parent.style.textAlign;
		self._parent.style.textAlign = 'center';
		
		//copy add to cart
		self.addToCart = addToCartEl;
		//loading img
		self.loading = new Element('img');
		self.loading.setProperty('id', 'loadingImage'+frmId);
		self.loading.setProperty('src', minicart.loadingImageValue);
		self.loading.setProperty('class', 'addToBasketLoading');
	
		//item added image
		self.itemAdded = new Element('img');
		self.itemAdded.setProperty('id', 'itemAddedImage'+frmId);
		self.itemAdded.setProperty('class', 'added');
		self.itemAdded.setProperty('src', minicart.itemAddedImageValue);
   	},
   	showLoading: function(){
		this.addToCart.style.display = 'none';
		this._parent.appendChild(this.loading);
	},
	showAdded: function(){
		this._parent.removeChild(this.loading);
		this._parent.style.textAlign = this.oldTextAlign;
		
		this._parent.appendChild(this.itemAdded);
		this.itemAdded.set('tween', {duration:100});
		this.itemAdded.tween('opacity', 100);
		
	},
	showButton: function(){
	
		var itemAddedFx = new Fx.Tween(this.itemAdded,{property: 'opacity',duration: 500});
		var self = this;
		itemAddedFx.start(0).chain(function(){
		
			self._parent.removeChild(self.itemAdded);
			self.mainButton();
		});
	},
	mainButton: function(){
		var addToCartFx = new Fx.Tween(this.addToCart, {property: 'opacity',duration: 500});
		this.addToCart.setStyles({
			display: '',
			visibility: 'visible',
			opacity: 0
		});
		addToCartFx.start(1);
	}
});
jQuery(document).ready(function(){
	minicart.init();
});
