        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, img_class){
                var product = this;
                //
                // Init
                product.init = function(name, url, img, thumb, img_alt, thumb_alt, img_class){
                    product.name = name;
                    product.url = url;
                    product.img = img;
                    product.thumb = thumb;
                    product.img_alt = img_alt;
                    product.thumb_alt = thumb_alt;
					product.img_class = img_class;
                    return product;
                };
                return product.init(name, url, img, thumb, img_alt, thumb_alt, img_class);
            };
            self.addProduct = function(name, url, img, thumb, img_alt, thumb_alt, img_class) {
                var product = new self.Product(name, url, img, thumb, img_alt, thumb_alt, img_class);
                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)
                    .attr('class', product.img_class)
                    .appendTo(link);
                return productEl;
            };
            self.setLeft = function(i) {
                var product = self.products[i];
                var productEl = $('<img/>')
                    .attr('src', product.thumb)
                    .attr('alt', product.thumb_alt)
                    .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)
                    .attr('alt', product.thumb_alt)
                    .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': -50*dir,
                        'opacity': 0
                    }, {
                        duration: self.v.ani.duration,
                        complete: function(){ $(this).remove(); }
                    });
                self.setLeft(self.getPrev(i))
                    .css({
                        'left': 50*dir,
                        'opacity': 0
                    })
                    .animate({
                        'left': 0,
                        'opacity': 1
                    }, {
                        duration: self.v.ani.duration
                    });
                // right
                self.el.rightContainer.find('img')
                    .animate({
                        'right': 50*dir,
                        'opacity': 0
                    }, {
                        duration: self.v.ani.duration,
                        complete: function(){ $(this).remove(); }
                    });
                self.setRight(self.getNext(i))
                    .css({
                        'right': -50*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(
                    'shoulderRAP&trade;',
                    '/shoulderRAP',
                    'images/lg_img_shoulderrap.png',
                    'images/sm_img_shoulderrap.png',
                    'shoulderRAP&trade;',
                    'shoulderRAP&trade;',
					'shoulderRAP'
                );

                pr.addProduct(
                    'backRAP&trade;',
                    '/backRAP',
                    'images/lg_img_backrap.png',
                    'images/sm_img_backrap.png',
                    'backRAP&trade;',
                    'backRAP&trade;',
					'backRAP'
                );
            
                pr.addProduct(
                    'elbowRAP&trade;',
                    '/elbowRAP',
                    'images/lg_img_elbowrap.png',
                    'images/sm_img_elbowrap.png',
                    'elbowRAP&trade;',
                    'elbowRAP&trade;',
					'elbowRAP'
                );
            
                pr.addProduct(
                    'kneeRAP&trade;',
                    '/kneeRAP',
                    'images/lg_img_kneerap.png',
                    'images/sm_img_kneerap.png',
                    'kneeRAP&trade;',
                    'kneeRAP&trade;',
					'kneeRAP'
                );
                pr.addProduct(
                    'universalRAP&trade;',
                    '/universalRAP',
                    'images/lg_img_universalrap.png',
                    'images/sm_img_universalrap.png',
                    'universalRAP&trade;',
                    'universalRAP&trade;',
					'universalRAP'
                );
            
            pr.start();
        });
