var strFormID = "cartaddproduct";
var minicart = {
	slideEffect: "",
	closeButton: "",
	openButton: "",
	slideArea: "basketContents",
	cart: "",
	slideEffectState: "closed",
	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.",
	
	loadingImageValue: null,
	itemAddedImageValue: null,
	
	container: new Array(),
	
	init: function() {		
		this.prepare();
		this.prepareAJAX();
	},
	prepare: function() {
		
		this.cart = $("minicart") || null;
		if (this.cart == null) return;
		minicart.cart.addClass("closed");
		this.insertBasketControls();
		this.slideEffect = new Fx.Slide(minicart.slideArea, {duration: 500, transition: Fx.Transitions.linear,onComplete: function() { minicart.sliderComplete();} });
		this.slideEffect.hide();
		if($(minicart.slideArea)) {
			$(minicart.slideArea).removeClass("hide");
		}
		
		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");
		}
	},
	sliderComplete: function() {
		if (minicart.state == "opening"){
			minicart.cart.addClass("open");
			minicart.cart.removeClass("opening");
			minicart.cart.removeClass("closed");
		} else {
			minicart.cart.removeClass("closing");
			minicart.cart.removeClass("open");
			minicart.cart.addClass("closed");
		}
	},
	insertBasketControls: function() {
		var basketControls = $("expandBasket");
		if (basketControls == null) return;
		
		minicart.closeButton = new Element("a", { "class": "collapse hide", "href": "#" });
		var closeButtonImg = new Element("img", { "src": staticRoot + "img/asda_img/" + "bullet_02.gif", "alt": "Close basket" });
		var closeButtonText = new Element("span", { "class": "expandLink"} );
		closeButtonText.appendText('Close');
		minicart.closeButton.appendChild(closeButtonImg);
		minicart.closeButton.appendChild(closeButtonText);
		minicart.closeButton.inject(basketControls,'top');
		minicart.closeButton.onclick = this.closeBasket;
		minicart.closeButton.onkeypress = this.closeBasket;
		
		minicart.openButton = new Element("a", { "class": "expand", "href": "#" });
		var openButtonImg = new Element("img", { "src": staticRoot + "img/asda_img/" + "bullet_01.gif", "alt": "Open basket" });
		var openButtonText = new Element("span", { "class": "expandLink"} );
		openButtonText.appendText('Expand');
		minicart.openButton.appendChild(openButtonImg);
		minicart.openButton.appendChild(openButtonText);
		minicart.openButton.inject(basketControls,'top');
		minicart.openButton.onclick = this.showBasket;
		minicart.openButton.onkeypress = this.showBasket;
	},
	showBasket: function() {
		minicart.state = "opening";
		minicart.cart.removeClass("closed");
		minicart.cart.addClass("opening");
		minicart.slideEffect.slideIn();
		minicart.closeButton.removeClass("hide");
		minicart.openButton.addClass("hide");
		return false;
	},
	closeBasket: function() {
		minicart.state = "closing";
		minicart.cart.removeClass("open");
		minicart.cart.addClass("closing");
		minicart.slideEffect.slideOut();
		minicart.openButton.removeClass("hide");
		minicart.closeButton.addClass("hide");
		return false;
	},
	autoShowCloseBasket: function() {
		minicart.showBasket();
		setTimeout(function() { minicart.closeBasket();},3000);
	},
	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 (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.
			if((addBtn != null) && ($('izView') == null)) {
				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 = document.getElementById("basketContents") || null;
		if (insertionElement == null) return;
		insertionElement.innerHTML = 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 = document.getElementById("basketSummary");
		if (insertionElement == null) return;
		insertionElement.innerHTML = 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);
		//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);
	}
});

window.addEvent('domready', function(){	minicart.init(); });
