	var Carousel = new Class( {
		initialize: function ( mainClass, imagesClass, linksClass, effectTime, setSize, maxOpacity, minOpacity ) {
			this.actImages = null;
			this.actScr = 0;
			this.imagesClass=imagesClass;
			this.imageIndex=0;
			this.timer=null;
			
			this.actImages = new imageBar( $(document.body).getElement( '.' + imagesClass ), effectTime, (setSize || 1), (maxOpacity || 1), (minOpacity || 0.5) );

/*
			var _this=this;
			var paths=new Array();
			$$('.tabletCarousel img').each(function(el){
				paths.push(el.get('src'));
			});
			new Asset.images(paths,{
				onComplete:function(){
					var size=0;
					$$('.tabletCarousel img').each(function(el){
						size+=el.getSize().x;
					});				
					_this.actImages.bar.setStyle( 'width',size );
				}
			});		
			*/
			$$( '.' + linksClass + ' a').each( function ( lobj, num ) {
				if( lobj.get( 'rel' ) == 'screenshot' )
					lobj.addEvent('click',function(e){
						e.stop();
						this.actImages.showImage(lobj.href.replace(/.*#/, '') || num );
					}.bind(this));
			}.bind(this));
			
			
			this.fx1=new Fx.Tween($('preview').getElement('>div img'),{duration:500,link:'cancel'});	
			var _this=this;
		
		
		//	$('preview').getElement('>div img').set('src','./resizer.php?imgfile='+gup($$('.'+imagesClass+' a')[0].getElement('img').get('src'),'imgfile')+'&max_width=500&max_height='+($('preview').getSize().y-8));
			$$('.'+imagesClass+' a').each(function(el){
				el.store('title',el.title).removeProperty('title');
				el.addEvent('click',function(e){
					if(e!=undefined)
						e.stop();
					$('preview').getElement('span').set('html',el.retrieve('title'));
					var img=$('preview').getElement('>div img');
					img.setStyle('opacity',0);
					var path='./resizer.php?imgfile='+gup(el.getElement('img').src,'imgfile')+'&max_width=2000&max_height='+($('preview').getSize().y-8-48);
					if(Browser.webkit){
						new Asset.image(
							path,{
								onload:function(){	
									img.src=path;
									_this.fx1.start('opacity',1);
									$('preview').setStyle('visibility','visible');									
								}
							});
					}
					else{
						new Asset.images(
							path,
							{
								onProgress:function(c,i){
									if(i==0){
										img.src=path;
										_this.fx1.start('opacity',1);
										$('preview').setStyle('visibility','visible');	
									//	img.getParent().setStyles({'width':img.getSize().x,'height':img.getSize().y});;
									}
								}
							});
					}
				});
			});
			($$('.'+this.imagesClass+' a')[this.imageIndex]).fireEvent('click');
			this.imageIndex++;
			$('preview').getElement('a.play').addEvent('click',function(e){
				e.stopPropagation();
				this.setStyle('display','none');
				$$('#preview a').setStyle('display','none');
				if(_this.timer==null)
					_this.timer=_this.slideShow.periodical(4000,_this);
			});
			
			$('preview').getElement('a.left').addEvent('click',function(e){
				this.imageIndex--;
				if(this.imageIndex<0)
					this.imageIndex=0;
				($$('.'+this.imagesClass+' a')[this.imageIndex]).fireEvent('click');
			}.bind(this));
			$('preview').getElement('a.right').addEvent('click',function(e){
				this.imageIndex++;
				if(this.imageIndex>$$('.'+this.imagesClass+' img').length-1)
					this.imageIndex=0;
				($$('.'+this.imagesClass+' a')[this.imageIndex]).fireEvent('click');
			}.bind(this));
			
			var tmp=window;
			if(Browser.ie8||Browser.ie7)
				tmp=$(document.body);
			tmp.addEvent('keydown', function(event){
				if(event.key=='esc'&&this.timer!=null){
					clearTimeout(this.timer);
					this.timer=null;
					$$('#preview a').setStyle('display','block');
					this.fx1.set('opacity',1);
				}
				if(event.key=='left'&&this.timer==null){
					this.imageIndex--;
					if(this.imageIndex<0)
						this.imageIndex=0;
					($$('.'+this.imagesClass+' a')[this.imageIndex]).fireEvent('click');
				}
				if(event.key=='right'&&this.timer==null){
					this.imageIndex++;
					if(this.imageIndex>$$('.'+this.imagesClass+' img').length-1)
						this.imageIndex=0;
					($$('.'+this.imagesClass+' a')[this.imageIndex]).fireEvent('click');
				}				
			}.bind(this));
			$('preview').addEvent('click',function(e){
				if(this.timer!=null){
					clearTimeout(this.timer);
					this.timer=null;
					$$('#preview a').setStyle('display','block');
				}
			}.bind(this));
		},
		
		slideShow: function(){
			($$('.'+this.imagesClass+' a')[this.imageIndex]).fireEvent('click');
			this.imageIndex++;
			if(this.imageIndex>$$('.'+this.imagesClass+' img').length-1)
				this.imageIndex=0;
		}
	} );

	var imageBar = new Class( {
		initialize: function ( obj, effectTime, setSize, maxOpacity, minOpacity ) {
			this.effectTime = effectTime;
			this.setSize = setSize;
			this.maxOpacity = maxOpacity;
			this.minOpacity = minOpacity;
			this.elements = new Array();
			this.actLeft = 0;
			this.disabled = false;

			this.container = $(obj);
			this.container.setStyles( {  position:'absolute',overflow: 'hidden' } );
			this.bar = new Element( 'div' ).setStyles( { height: this.container.getSize().y +8, position:'relative', top: 0, left: 0, opacity: this.maxOpacity } );
			
			Array.from(this.container.childNodes).each( function ( obj ) {
				if( obj.nodeType == 1 )
				{
					obj = $(obj);
					obj.set( 'align', 'left' );
					var size = obj.getSize().x + parseInt((obj.getStyle("margin-left") || "0").replace(/\D*/g, "")) + parseInt((obj.getStyle("margin-right") || "0").replace(/\D*/g, ""));
					this.actLeft += size;
					this.elements.push( {
						element: obj.inject( this.bar ),
						width: size,
						position: this.actLeft - size
					} );
				}
			}, this );
			
			
	

			this.bar.setStyle( 'width', this.actLeft );
			this.bar.inject( this.container );
			
			this.actElement = 0;
			this.lastElement = null;
			this.effect = new Fx.Tween(this.bar,{
				property:'left',
				duration: this.effectTime,
				transition: Fx.Transitions.quartInOut,
				onStart: function(){
								this.disabled = true;
								this.bar.tween('opacity',[this.maxOpacity, this.minOpacity]);
							//	this.effectOpacity.start(this.maxOpacity, this.minOpacity);
				}.bind(this),
				onComplete: function(){	
								this.disabled = false;
								this.bar.tween('opacity',[this.minOpacity, this.maxOpacity]);
							//	this.effectOpacity.start(this.minOpacity, this.maxOpacity);
				}.bind(this)
			} ); 
		//	this.effectOpacity = this.bar.effect( 'opacity', { duration: 300 } );
			this.actPosition = 0;
		},
		
		showImage: function ( target ) {
			if( target != this.actElement && !this.disabled)
			{
				this.lastElement = this.actElement;
				var actElement = this.actElement;
				if (target == '-')
				{
					actElement -= this.setSize;
				}
				else if (target == '+')
				{
					actElement += this.setSize;
				}
				else
				{
					actElement = target * this.setSize;
				}

				if (-1 < actElement && actElement < this.elements.length)
				{
					this.actElement = actElement;
					var delta = ( this.elements[this.actElement].position - this.elements[this.lastElement].position );
					this.effect.start( this.actPosition, this.actPosition - delta );
					this.actPosition = this.actPosition - delta;
				}
			}
			return false;
		}
	} );

