var CMSGallery = function(id,autostart) {
	var gallery = $('gallery_'+id);
	var gallerycontainer = gallery.getParent();
	var galleryselect = gallery.getElement('select[name=imageJumper]');
	if ( !galleryselect ) {
		galleryselect = gallery.getElement('.cms_gallerythumbs');
		galleryselect.options = galleryselect.getElements('a');
	}
	var galleryspeed = gallery.getElement('select[name=imageSpeed]');
	var galleryfirst = gallery.getElement('a.cms_firstslide');
	var galleryprev = gallery.getElement('a.cms_prevslide');
	var gallerylast = gallery.getElement('a.cms_lastslide');
	var gallerynext = gallery.getElement('a.cms_nextslide');
	var galleryauto = gallery.getElement('a.cms_autoslide');
	var galleryslidecontainer = 'galleryslides_'+id;
	var galleryslides = gallery.getElements('table');
	var galleryimages = gallery.getElements('table img');
	var galleryslidenumber = -1;
	var needsIEScale = true;
	var galleryIsRunning = false;
	gallery.galleryperiodical = gallery.galleryperiodical || 0;
	gallery.galleryinstantiated = gallery.galleryinstantiated || false;
	if ( galleryslides.length == 0 ) {
		galleryslides = gallery.getElements('.table');
		galleryimages = gallery.getElements('.table img');
		needsIEScale = false
	}
	if ( window.ie && needsIEScale ) {
		galleryimages.each(function(image){
			image.setProperty('width',parseInt(gallery.getParent().getStyle('width'),10));
		})
	}
	var runSlide = function(slidenumber){
		var fadespeed = 750;
		var panspeed = 1000 * ( galleryspeed.selectedIndex + 1 );
		if (galleryslidenumber != slidenumber) {
			galleryslidenumber = slidenumber;
			var fadeout = new Fx.Style(galleryslidecontainer, 'opacity', {
				onStart: function(){
					galleryIsRunning = true;
				},
				duration: fadespeed,
				wait: false,
				onComplete: function(){
					galleryIsRunning = false;
					galleryselect.selectedIndex = slidenumber;
					galleryselect.fireEvent('change', slidenumber);
					if ( galleryslides[slidenumber] ) {
						var img = galleryslides[slidenumber].getElement('img');
						if ( img ) {
							var imgHeight = img.offsetHeight.toInt();
							var divHeight = gallerycontainer.getStyle('height').toInt();
							if (imgHeight > divHeight && !parent.CMS) {
								var pan = new Fx.Style(img, 'top', {
									duration: panspeed,
									wait: false
								}).start(0 - imgHeight + divHeight, 0);
							}
						}
					}
					var fadein = new Fx.Style(galleryslidecontainer, 'opacity', {
						onStart: function(){
							galleryIsRunning = true;
						},
						duration: fadespeed,
						wait: false,
						onComplete: function(){
							galleryIsRunning = false;
						}
					}).start(0, 1);
				}
			}).start(1, 0);
		}
	};
	gallery.fireEvent('test');
	if (!gallery.galleryinstantiated) {
		gallery.addEvent('test', function(){
			gallery.galleryinstantiated = true;
		});
		if ( galleryselect ) {
			galleryselect.addEvent('change', function(){
				if ( galleryselect.getTag() == 'select' ) {
					if (typeof galleryslides[this.selectedIndex] != 'undefined') {
						galleryslides.removeClass('active').addClass('inactive');
						galleryslides[this.selectedIndex].removeClass('inactive').addClass('active');
					}
				} else if ( galleryselect.getTag() == 'div' && arguments.length > 0 ) {
					do { /*delay*/ } while ( galleryIsRunning );
					galleryspeed.fireEvent('change');
					galleryslides.removeClass('active').addClass('inactive');
					galleryslides[arguments[0]].removeClass('inactive').addClass('active');
					galleryselect.options.removeClass('cms_active');
					galleryselect.options[this.selectedIndex].addClass('cms_active').blur();
				}
			});
			if ( galleryselect.getTag() == 'div' ) {
				galleryselect.options.addEvents({
					click: function(e){
						runSlide(this.getProperty('tabindex').toInt() - 1);
						e = new Event(e).preventDefault().stopPropagation().stop();
					},
					mouseover: function(e){
						runSlide(this.getProperty('tabindex').toInt() - 1);
						e = new Event(e).preventDefault().stopPropagation().stop();
					}
				});
			}
		}
		galleryspeed.addEvent('change',function(){
			if ( gallery.galleryperiodical != 0 ) {
				$clear(gallery.galleryperiodical);
				var fadespeed = 1000 * ( this.selectedIndex + 1 );
				gallery.galleryperiodical = (function(){gallerynext.fireEvent('click')}).periodical(fadespeed);
				galleryauto.innerHTML = 'Stop';
			}
		});
		galleryfirst.addEvent('click',function(e){
			runSlide(0);
			if ( e ) e = new Event(e).preventDefault();
		});
		galleryprev.addEvent('click',function(e){
			var slidenumber = ( galleryselect.selectedIndex > 0 ) ? galleryselect.selectedIndex - 1 : galleryselect.options.length - 1;
			runSlide(slidenumber);
			if ( e ) e = new Event(e).preventDefault();
		});
		gallerylast.addEvent('click',function(e){
			runSlide(galleryselect.options.length - 1);
			if ( e ) e = new Event(e).preventDefault();
		});
		gallerynext.addEvent('click',function(e){
			var slidenumber = ( galleryselect.selectedIndex + 1 < galleryselect.options.length ) ? galleryselect.selectedIndex + 1 : 0;
			if ( galleryselect.selectedIndex + 2 == galleryselect.options.length && gallery.hasClass('cms_gallery4') ) {
				$clear(gallery.galleryperiodical);
			}
			runSlide(slidenumber);
			if ( e ) e = new Event(e).preventDefault();
		});
		galleryauto.addEvent('click',function(e){
			if ( gallery.galleryperiodical == 0 ) {
				var fadespeed = 1000 * ( galleryspeed.selectedIndex + 1 );
				gallerynext.fireEvent('click');
				gallery.galleryperiodical = (function(){gallerynext.fireEvent('click')}).periodical(fadespeed);
				this.innerHTML = 'Stop';
			} else {
				$clear(gallery.galleryperiodical);
				gallery.galleryperiodical = 0;
				this.innerHTML = 'Play';
			}
			if ( e ) e = new Event(e).preventDefault();
		});
	}
	if ( autostart ) {
		galleryauto.fireEvent('click');
	} else if ( gallery.galleryperiodical != 0 ) {
		$clear(gallery.galleryperiodical);
		gallery.galleryperiodical = 0;
		galleryauto.setHTML('Play');
	}
};
if ( document.getElementsByTagName('body').length == 0 ) {
	window.addEvent('load',function(){
		$$('.cms_gallery2, .cms_gallery3, .cms_gallery4').each(function(gallery){
			var theID = gallery.getProperty('id').split('_')[1];
			var autostart = ( gallery.hasClass('cms_gallery3') || gallery.hasClass('cms_gallery4') );
			CMSGallery(theID,autostart);
		});
	});

}
