var CarouselTabs = Class.create({
	initialize: function(brandname,cats,diets,special){
		this.brandName = brandname;
		this.brandid = 100;
		this.catsUrl = cats;
		this.dietsUrl = diets;
		this.specialURL = special+brandname;
		this.catsReceived = false;
		this.dietsReceived = false;
		$("feat-tab").observe('click',function(e){
			e.stop();
			this.tabSwap('feat-tab','carousel-featured-products',false);
		}.bind(this))
		$("cat-tab").observe('click',function(e){
			e.stop();
			this.tabSwap('cat-tab','carousel-categories','cats');
		}.bind(this))
		$("diet-tab").observe('click',function(e){
			e.stop();
			this.tabSwap('diet-tab','carousel-dietary-needs','diets');
		}.bind(this))
		this.wasActiveTab = "feat-tab";
		this.wasActiveDiv = "carousel-featured-products";
				
		this.getSpecial();
	},
	tabSwap: function(activeTab,activeDiv,tab){
		if(activeTab == this.wasActiveTab){return;}
		$(this.wasActiveTab + "-left").className="_inactive-left _tab";
		$(this.wasActiveTab + "-right").className="_inactive-right _tab";
		$(activeTab + "-left").className="_active-left _tab";
		$(activeTab + "-right").className="_active-right _tab";
		$(this.wasActiveDiv).style.display='none';
		$(activeDiv).style.display='block';
/*
		if(activeTab == "feat-tab"){
			$('new-product-carousel-left-btn').style.display='block'; $('new-product-carousel-right-btn').style.display='block';
		} else if(this.wasActiveTab == "feat-tab"){
			$('new-product-carousel-left-btn').style.display='none'; $('new-product-carousel-right-btn').style.display='none';
		}
*/
		this.wasActiveTab = activeTab;
		this.wasActiveDiv = activeDiv;
				if(tab){
			switch (tab){
				case 'cats':
					if(!this.catsReceived){this.getCategories(this.brandid)}
					this.catsReceived = true;
					break;
				case 'diets':
					if(!this.dietsReceived){this.getDietaryNeeds(this.brandid)}
					this.dietsReceived = true;
					break;
			}
		}
	},
	getSpecial: function(){		
		var specialTabRequest = new Ajax.Request(
			this.specialURL,{
				onSuccess: function(transport){
					var result = transport.responseText.evalJSON(true);
					var s = result.special;
					var specialProduct;
					$('diet-tab').show();
					this.brandid = result.brand;
					$('carousel-shop-all-btn').writeAttribute("href","/by-aisle.html?brand="+this.brandid);
					if (result.special){
						specialProduct = '<p class="product-image" caption="'+s.name+' ('+s.unit_size+') from '+s.brand_value+'" detail="product_detail_398"><a href="'+
						s.product_url+'" title="'+s.name+'"><img src="'+s.special_thumb+'" alt="'+s.name+'"></a></p><div id="special-content"><div class="product-name"><a class="product-name" href="'+
						s.product_url+'" title="'+s.name+'"> '+s.name+' <span class="unit-size">('+
						s.unit_size+')</span></a></div><div class="price-box"><div class="old-price"><span class="price-label">Regular Price:</span> <span class="price">'+
						this.formatCurrency(s.price)+'</span></div><span class="special-price"><span class="price-label">Special Today:</span> <span class="price">'+
						this.formatCurrency(s.special_price)+'</span></span><div class="savings-price"><span class="price-label">You Save:</span> <span class="price">'+
						this.formatCurrency(s.price-s.special_price)+'</span></div></div><div id="qty-cartbtn"><div class="cart-button"><a id="prod_'+s.entity_id+'"href="/checkout/cart/add/product/'+
						s.entity_id+'/" class="addToCartLink"><img src="'+skinPath+'images/btn_add_to_cart.gif" alt="Add to Cart" title="Add to Cart"></a></div><span class="qty-label">Qty: </span><input type="text" size="2" id="pqty_'+
						s.entity_id+'" class="cartQtyBox" maxlength="4"></input></div></div>';
					} else {
						specialProduct = '<div class="no-special">No special today.<br/>Please check back soon.</div>';
					}
					
					$('carousel-featured-products').update(specialProduct);
					this.bindQtyBox();
				}.bind(this),
				onCreate: function(){
					$('carousel-featured-products').up().addClassName('wait');
				},
				onComplete: function(){
					$('carousel-featured-products').up().removeClassName('wait');
				}
			}
		)
	},
	getCategories: function(brandid){
		$('carousel-categories').update('');
		var catTabRequest = new Ajax.Request(
            this.catsUrl+this.brandid,{
            	onSuccess: function(transport) {
            		var result = transport.responseText.evalJSON(true);
            		var listItemsMarkup = '';
            		var total = $A(result.categories).length;
					var overage = total%3;
            		if(total && total > 0){
            			categories = $A(result.categories);
                		categories.each(function(item,i){
                			listItemsMarkup += '<li><a href="/by-aisle.html?brand='+brandid+'&cat='+item.category_id+'">'+item.category_name+'</a></li>';
						});
						while (overage%3) {	
						   listItemsMarkup += '<li>&#160;</li>';
						   overage++;
						}
                		$('carousel-categories').update("<ul>"+listItemsMarkup+"</ul>");
            		} else {
            			var errors = result[1];
            			if (errors) {
            				errors.each(function(e){
            					$('carousel-categories').update('<ul><li class="error-message">'+e+'</li></ul>');
            				}); 
            			} else {
            				$('carousel-categories').update('<ul><li class="error-message">No Categories Associated.</li></ul>');
            			}
            		};
				}.bind(this),
				onCreate: function(){
					$('carousel-categories').up().addClassName('wait');
				},
				onComplete: function(){
					$('carousel-categories').up().removeClassName('wait');
				}
            }
        );
	},
	getDietaryNeeds: function(brandid){
		$('carousel-dietary-needs').update('');
		var dietTabRequest = new Ajax.Request(
            this.dietsUrl+this.brandid,{
            	onSuccess: function(transport) {
            		var result = transport.responseText.evalJSON(true);
            		var total = $A(result.dietary_needs).length;
            		var listItems = '';
					var overage = total%3;
            		if(total && total > 0){
            			dietaryneeds = $A(result.dietary_needs);
                		dietaryneeds.each(function(item,i){
                			listItems += '<li><a href="/by-aisle.html?brand='+brandid+'&dietary_needs='+item.option_id+'">'+item.name+'</a></li>';
						});
						while (overage%3) {	
						   listItems += '<li>&#160;</li>';
						   overage++;
						}
                		$('carousel-dietary-needs').update('<ul>'+listItems+'</ul>');
            		} else {
            			var errors = result[1];
            			if (errors) {
            				errors.each(function(e){
            					$('carousel-dietary-needs').update('<ul><li class="error-message">'+e+'</li></ul>');
            				}); 
            			} else {
            				$('carousel-dietary-needs').update('<ul><li class="error-message">No Dietary Needs Associated.</li></ul>');
            			}
            		};
				}.bind(this),
				onCreate: function(){
					$('carousel-dietary-needs').up().addClassName('wait');
				},
				onComplete: function(){
					$('carousel-dietary-needs').up().removeClassName('wait');
				}
            }
        );
	},
	bindQtyBox: function(){
		$$('.addToCartLink').each(function(_a2c){
            _a2c.observe('click',function(e){
                e.stop();
                var _hr = this.href;
                var _id = this.id.replace(/prod_/,'');
                var pqty = 'pqty_' + _id;
                var _href = _hr + "qty/" + ( $(pqty).getValue() == '' ? 1 : $('pqty_'+_id).getValue() );
                setLocation(_href);
            });
        }.bind(this));
	},
	formatCurrency: function(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);
	}
});

var Carousel = Class.create({
    initialize: function(carousel, pagewidth, perPage) {
        this.carousel = carousel;
        this.perPage = perPage;
      
        // get total products listed
        this.products = $$('#'+carousel+' > li').length;

        // paginate
        this.pages = this.products - this.perPage;
        this.current = 0;
        this.pageWidth = pagewidth;

        // set correct width
        if($(this.carousel)){
        	$(this.carousel).setStyle({width: (this.products * this.pageWidth) + 'px'});
    	}

        // setup buttons
        this.rightBtn = $(carousel+'-right-btn');
        if (this.rightBtn) {
            this.rightBtn.observe('click',function(e) {
                Event.stop(e);
                if (this.current < this.pages) {
                    this.spinCarousel(-this.pageWidth);
                    this.current++;
                    this.setButtonStates();
                }
            }.bind(this));
        }

        this.leftBtn = $(carousel+'-left-btn');
        if (this.leftBtn) {
            this.leftBtn.addClassName('left_off');
            this.leftBtn.observe('click',
            function(e) {
                Event.stop(e);
                if (this.current > 0) {
                    this.spinCarousel(this.pageWidth);
                    this.current--;
                    this.setButtonStates();
                }
            }.bind(this));
        }
    },
    spinCarousel: function(where) {
        new Effect.MoveBy(this.carousel, 0, where, {
            duration: 0.2,
            transition: Effect.Transitions.sinoidal,
            queue: 'end'
        });
    },
    setButtonStates: function() {
        if (this.pages == 0) {
            this.rightBtn.addClassName('right_off').removeClassName('right_on');
            this.leftBtn.addClassName('left_off').removeClassName('left_on');
        } else if (this.current == 0) {
            this.rightBtn.addClassName('right_on').removeClassName('right_off');
            this.leftBtn.addClassName('left_off').removeClassName('left_on');
        } else if (this.current == this.pages) {
            this.rightBtn.addClassName('right_off').removeClassName('right_on');
            this.leftBtn.addClassName('left_on').removeClassName('left_off');
        } else {
            this.rightBtn.addClassName('right_on').removeClassName('right_off');
            this.leftBtn.addClassName('left_on').removeClassName('left_off');
        }
    }
});
