(function() { 
	var Event = YAHOO.util.Event,
        Dom   = YAHOO.util.Dom,
        lang  = YAHOO.lang,
		productsToSlide = 4
			
	var getProducts = function() {
		var callbacks = {
			success : function (o) {
	            // Process the JSON data returned from the server
	            var products = [];
	            try {
	                products = YAHOO.lang.JSON.parse(o.responseText);
	            }
	            catch (x) {
	                // alert("JSON Parse failed!");
	                return;
	            }
				if(products.length > 0) {
					productCount = products.length;
					var slidesHtml = "";
					var slidesWidth = 0;
					var width;
					var counter = 0;
					for(product in products) {
						width = 0;
						slidesHtml += '<div class="product" id="product' + counter +'">';
						slidesHtml += '<a href="' + products[product].link + '" class="img"><img src="/images/product_images/info_images/' + products[product].image + '" /></a>';
						slidesHtml += '<p class="description"><span id="title">' + products[product].name + '</span></p>';
						slidesHtml += '<p class="products_designer"><span id="by">by&nbsp;</span>' + products[product].designer + '</p>';
						slidesHtml += '<p class="product_price"><span id="only">Only&nbsp;</span>&euro;' + products[product].price +'</p></div>';
						counter++;
					}
					Dom.get("slides").innerHTML = slidesHtml;
					for (var i = 0; i < products.length; i++) {
						slidesWidth += parseInt(Dom.getStyle("product" + i, "width"));
						slidesWidth += parseInt(Dom.getStyle("product" + i, "margin-left"));
						slidesWidth += parseInt(Dom.getStyle("product" + i, "margin-right"));
					}
					Dom.setStyle("slides", "width", slidesWidth + "px");
				}
			},
			failure : function (o) {
	            if (!YAHOO.util.Connect.isCallInProgress(o)) {
	                // alert("Async call failed!");
					YAHOO.util.Connect.asyncRequest('GET',"gallery.php", callbacks);
	            }
	        },
	        timeout : 15000
		}
		YAHOO.util.Connect.asyncRequest('GET',"gallery.php", callbacks);
		
	}
	
	constructGallery = function() {
		var newdivHtml = '<h3 class="newproducts"><span>New Products</span></h3>';
		newdivHtml += '<a id="prevButton"><img src="/templates/daa/images/slider/left.png" height="22px" width="32px" alt="previous Products" /></a>';
		newdivHtml += '<div id="slideClip"><div id="slides"></div></div>';
		newdivHtml += '<a id="nextButton"><img src="/templates/daa/images/slider/right.png" height="22px" width="32px" alt="next Products" /></a>';
		Dom.get("gallery").innerHTML = newdivHtml;
		getProducts();
	};
	
	var getProductWidth = function() {
		var productWidth = parseInt(Dom.getStyle("product1", "width"));
		var marginLeft = parseInt(Dom.getStyle("product1", "margin-left"));
		var marginRight = parseInt(Dom.getStyle("product1", "margin-right"));		
		productWidth = productWidth + marginLeft + marginRight;
		return productWidth;
	}
	
	var getCurrentMargin = function(){
		var currentMargin = Dom.getStyle("slides", "margin-left");
		currentMargin = currentMargin.replace("px", "");
		return parseInt(currentMargin);
	}
	
	var updateButtons = function(){
		if (getCurrentMargin() == 0) {
			Event.removeListener('prevButton', 'click');
		}else if(!Event.getListeners('prevButton', 'click')){
			Event.addListener('prevButton', 'click', prevProducts);
		}
		if ((getCurrentMargin() < 0) && (getCurrentMargin()*-1 + getProductWidth()*productsToSlide) >= getProductWidth() * productCount ){
			Event.removeListener('nextButton', 'click');
		}else if(!Event.getListeners('nextButton', 'click')){
			Event.addListener('nextButton', 'click', nextProducts);
		}
	}
	
	var nextProducts = function() {
		var currentMargin = getCurrentMargin();
		var productWidth = getProductWidth();
		var newMargin = currentMargin - productWidth * productsToSlide;
		if ((newMargin * -1) >= (productCount * getProductWidth() - getProductWidth() * productsToSlide)) {
			newMargin = currentMargin - ((productCount * getProductWidth()) + (currentMargin - (getProductWidth() * productsToSlide)));
		}else {
			newMargin = currentMargin - productWidth * productsToSlide;
		}

		animateSlide(newMargin);
		Dom.setStyle("slides","margin-left", newMargin + "px");		
		updateButtons();
	}
	
	var prevProducts = function() {
		var currentMargin = getCurrentMargin();
		var productWidth = getProductWidth();		
		var newMargin = currentMargin + productWidth * productsToSlide;
		if ((currentMargin * -1) < (getProductWidth() * productsToSlide)) {
			newMargin = 0 ;
		}else {
			newMargin = currentMargin + productWidth * productsToSlide;
		}
		animateSlide(newMargin);		
		Dom.setStyle("slides", "margin-left", newMargin + "px");
		updateButtons();
	}
	
	var animateSlide = function(margin) {
		var attributes = {
			marginLeft: { to: margin }
		};
		var anim = new YAHOO.util.Anim("slides", attributes, 0.7, YAHOO.util.Easing.easeOut);
		anim.animate();
	}
	
	var init = function() {
		if (Dom.inDocument("gallery")){
			constructGallery();
			Event.addListener('prevButton','click', prevProducts);
			Event.addListener('nextButton','click', nextProducts);
			updateButtons();
		}
	}
	
    Event.onDOMReady(init);

})();
