var Gallery = new Class({

	initialize: function(element, pos){
		this.pos = pos;
		this.element = element;
		this.initScroller();
	},
	
	initScroller: function(){
		var that = this;
		var container = $(that.element);
		if (!container) {
			return;
		}
		
		var listContainer = container.getElement('div.scrollContainer ul');
		var contents = listContainer.getElements('li');
		var len = contents.length;
		var scrollIndex = that.pos;
		if(scrollIndex > len){
			scrollIndex = 0;
		}		
		var totalWidth = 0;
		var forceWaiting = false;
		var previewImage = container.getElement('img.preview');	
		var currentImage = container.getElement('span.currentImage');
		var totalImage = container.getElement('span.totalImage');
		var currentTitle = container.getElement('.title');
		var currentDescription = container.getElement('.description');
		var currentLi = contents[scrollIndex];
		currentImage.set('html',  scrollIndex + 1);
		totalImage.set('html',  len);		
		contents.each(function(el, index){
			el.getElement('a').removeClass('current');
			totalWidth += el.getCoordinates().width;
			el.removeEvents('click').addEvent('click', function(e){
				if(e) new Event(e).stop();
				if(forceWaiting) return;
				forceWaiting = true;
				scrollIndex = index;
				currentLi.getElement('a').removeClass('current');
				currentLi = contents[index];
				currentLi.getElement('a').addClass('current');				
				currentImage.set('html',  index + 1);
				currentTitle.set('html',  currentLi.getElement('a').getProperty('title'));
				currentDescription.set('html',  currentLi.getElement('a').getProperty('longdesc'));
				new Fx.Tween(previewImage, {
					duration: 300,
					property: 'opacity',
					onComplete: function(){
						previewImage.src = el.getElement('a').href;
						previewImage.fade(1);
						setTimeout(function(){
							forceWaiting = false;
						}, 500);
					}
				}).start(0.001);
			});
		});
		currentLi.getElement('a').addClass('current');
		listContainer.setStyle('width', totalWidth);
		var scrollFx = new Fx.Scroll(listContainer.getParent());
		scrollFx.set(0, 0);	
		contents[scrollIndex].fireEvent('click');
		scrollFx.toElement(contents[scrollIndex]);		
		var btnPrev = container.getElements('p.pre');		
		var btnNext = container.getElements('p.next');
		if (contents.length <= 5) {
			this.setDisableButton(btnPrev);
			this.setDisableButton(btnNext);
			return;
		}
		
		btnPrev.removeEvents('click').addEvent('click', function(e){
			if(e) new Event(e).stop();	
			if(forceWaiting) return;
			if(scrollIndex > 0) {
				scrollIndex -= 1;
				contents[scrollIndex].fireEvent('click');	
				scrollFx.cancel().toElement(contents[scrollIndex]);
			}			
			if(scrollIndex >= 0) {
				scrollFx.cancel().toElement(contents[scrollIndex]);			
			}
		});
		that.setEnableButton(btnNext);
		btnNext.removeEvents('click').addEvent('click', function(e){
			if(e) new Event(e).stop();
			if(forceWaiting) return;			
			if(scrollIndex < len - 1) {
				scrollIndex += 1;
				contents[scrollIndex].fireEvent('click');					
				scrollFx.cancel().toElement(contents[scrollIndex]);							
			}		
			if(scrollIndex <= len - 5) {
				scrollFx.cancel().toElement(contents[scrollIndex]);			
			}	
		});		
	},
	
	setDisableButton: function (btn) {
		try {			
			btn.setStyles({
				'opacity': '0.4',
				'cursor': 'default'
			});
		} catch(err) {}
	},

	setEnableButton: function (btn) {
		try {
			btn.setStyles({
				'opacity': '1',
				'cursor': 'default'
			});
		} catch(err) {}
	}
});
