$(document).ready(function(){
            //
            // Cart Popup
            updateCartInfo();
            var inner = $('#cart_popup .container').css('height', '0');
            var shadow = $('#cart_popup .shadow').css('width', '58px');
            $('#cart_popup')
                .mouseenter(function(){
                    shadow.css('width', '170px');
                    inner.stop(true,false).animate({'height': '72px'});
                })
                .mouseleave(function(){
                    inner.stop(true,false).animate({'height': '0'}, {complete: function(){
                       shadow.css('width', '58px');
                    }});
                });
        });
        var updateCartInfo = function() {
            $.getJSON('http://'+FoxyDomain+'/cart?output=json&cart=view&callback=?' + fc_AddSession(), function(data){
                $('#cart_popup .cart_count').html(data.product_count);
                $('#cart_popup .cart_price').html('$'+data.total_price);
            });
        };
        var fc_BuildFoxyCart = function(){
            updateCartInfo();
        };
        
var ProductRotator = function(){
            var self = this;
            self.v = {ani:{duration:600}};
            self.el = {};
            self.products = [];
            //
            // Product
            self.Product = function(name, url, img, thumb, img_alt, thumb_alt){
                var product = this;
                //
                // Init
                product.init = function(name, url, img, thumb, img_alt, thumb_alt){
                    product.name = name;
                    product.url = url;
                    product.img = img;
                    product.thumb = thumb;
                    product.img_alt = img_alt;
                    product.thumb_alt = thumb_alt;
                    return product;
                };
                return product.init(name, url, img, thumb, img_alt, thumb_alt);
            };
            self.addProduct = function(name, url, img, thumb, img_alt, thumb_alt) {
                var product = new self.Product(name, url, img, thumb, img_alt, thumb_alt);
                self.products.push(product);
                return self;
            };
            self.getNext = function(i) {
                if (++i >= self.products.length) {
                    return 0;
                } else {
                    return i
                };
            };
            self.getPrev = function(i) {
                if (--i < 0) {
                    return self.products.length - 1;
                } else {
                    return i
                };
            };
            self.setHero = function(i) {
                var product = self.products[i];
                var link = $('<a/>')
                    .attr('href', product.url)
                    .appendTo(self.el.heroContainer);
                var productEl = $('<img/>')
                    .attr('src', product.img)
                    .attr('alt', product.img_alt)
                    .appendTo(link);
                return productEl;
            };
            self.setLeft = function(i) {
                var product = self.products[i];
                var productEl = $('<img/>')
                    .attr('src', product.thumb)
                    .appendTo(self.el.leftContainer)
                    .click(function(){ self.goTo(i, -1) });
                return productEl;
            };
            self.setRight = function(i) {
                var product = self.products[i];
                var productEl = $('<img/>')
                    .attr('src', product.thumb)
                    .appendTo(self.el.rightContainer)
                    .click(function(){ self.goTo(i, 1) });
                return productEl;
            };
            self.goTo = function(i, dir) {
                // hero
                self.el.heroContainer.find('img')
                    .animate({
                        'opacity': 0
                    }, {
                        complete: function(){
                            $(this).remove();
                            self.setHero(i).hide().fadeIn('slow');
                        }
                    });
                // left
                self.el.leftContainer.find('img')
                    .animate({
                        'left': -150*dir,
                        'opacity': 0
                    }, {
                        duration: self.v.ani.duration,
                        complete: function(){ $(this).remove(); }
                    });
                self.setLeft(self.getPrev(i))
                    .css({
                        'left': 150*dir,
                        'opacity': 0
                    })
                    .animate({
                        'left': 0,
                        'opacity': 1
                    }, {
                        duration: self.v.ani.duration
                    });
                // right
                self.el.rightContainer.find('img')
                    .animate({
                        'right': 150*dir,
                        'opacity': 0
                    }, {
                        duration: self.v.ani.duration,
                        complete: function(){ $(this).remove(); }
                    });
                self.setRight(self.getNext(i))
                    .css({
                        'right': -150*dir,
                        'opacity': 0
                    })
                    .animate({
                        'right': 0,
                        'opacity': 1
                    }, {
                        duration: self.v.ani.duration
                    });
            };
            //
            // Start
            self.start = function(){
                self.setHero(0).hide().fadeIn('slow');
                self.setLeft(self.getPrev(0)).hide().fadeIn('slow');
                self.setRight(self.getNext(0)).hide().fadeIn('slow');
                return self;
            };
            //
            // Init
            self.init = function(){
                self.el.leftContainer = $('#leftContainer');
                self.el.rightContainer = $('#rightContainer');
                self.el.leftForeground = $('#leftForeground');
                self.el.rightForeground = $('#rightForeground');
                self.el.heroContainer = $('#heroContainer');
                return self;
            };
            return self.init();
        };
        $(document).ready(function(){
            pr = new ProductRotator();
            
                pr.addProduct(
                    'BackPack',
                    '/products/backpack/',
                    'http://www.twelvesouth.com/static/assets/products/product/home_hero_image/backpack-big.jpg',
                    'http://www.twelvesouth.com/static/assets/products/product/home_thumb_image/backpack-small.jpg',
                    '',
                    ''
                );
            
                pr.addProduct(
                    'BookArc',
                    '/products/bookarc/',
                    'http://www.twelvesouth.com/static/assets/products/product/home_hero_image/book-arc-big.jpg',
                    'http://www.twelvesouth.com/static/assets/products/product/home_thumb_image/bookarc-small.gif',
                    '',
                    ''
                );
            
                pr.addProduct(
                    'SurfacePad',
                    '/products/surfacepad/',
                    'http://www.twelvesouth.com/static/assets/products/product/home_hero_image/surfpad-big.jpg',
                    'http://www.twelvesouth.com/static/assets/products/product/home_thumb_image/surfpad-small.jpg',
                    '',
                    ''
                );
            
            pr.start();
        });
