jQuery.fn.extend({
    slidebox: function(cmd, arg) {
        var $slideList = $(this).children('.slides'),
			$slides = $slideList.children('.slide'),
			$slidebox = $(this),
			isCollapsible = $slidebox.hasClass('collapsible');	
		var	commands = {
	            go: function(dest){
	                var distance = Math.abs(this.data('slidebox_slide') - dest),
						nmrSlides = this.data('slidebox_nmr_slides'),
						prevSlide = this.data('slidebox_slide');
	                if (dest >= 0 && dest < nmrSlides && distance > 0) {
	                   	this.data('slidebox_slide', dest);
	                	//this.animate({
						//	height: $slides.eq(dest).height() + 10 + 'px'
						//}, 400);
	                    $slideList.animate({
		                    left: -dest * this.width() + 'px'
		                }, 400 * distance);
						$slides.eq(prevSlide).animate({
							opacity: 0
						}, 300, function () {
							$(this).css('height', '0px');
						});
						$slides.eq(dest).css('height', '').animate({
							opacity: 1
						}, 600);
	                }
	            },
	            left: function(){
	                commands.go.call(this, this.data('slidebox_slide') - 1);
	            },
	            right: function(){
	                commands.go.call(this, this.data('slidebox_slide') + 1);
	            }
	        };
		var	height = !isCollapsible? '' : function () {
				var final = 0;
				$slides.each(function () {
					if ($(this).height() > final) final = $(this).height();
				});
				return final;
			}();	
		$slideList.css('height', height !== ''? height + 'px' : '');
        return this.each(function(){
            var $this = $(this),
				init = typeof cmd === 'object' && cmd.init >= 0? cmd.init: 0;
            if ($this.data('slidebox_init') !== true) {
                $this
					.data('slidebox_slide', init)
					.data('slidebox_nmr_slides', $slides.length)
					.data('slidebox_init', true);
				$slideList
					.css('left', -1 * $this.data('slidebox_slide') * $this.width() + 'px');
				$slides.css({
					height: '0px',
					opacity: 0
				}).eq($this.data('slidebox_slide')).css({
					height: '',
					opacity: 1
				});	
				if (!$this.hasClass('collapsed')) {
					$this
						.css('height', $slides.eq($this.data('slidebox_slide')).height() + 10 + 'px');
				}
                if ($slideList.length === 0) {
                    $('<ul class="slides"></ul>')
						.append($this.find('*'))
						.appendTo($this);
                }
            } else if (cmd && commands[cmd]) {
            	commands[cmd].call($this, arg);
            }
        });
		
    }
});
