var Gallery = new Class({
	Implements: [Options,Events],
	options: {},
	initialize: function(options) {
		//
		this.setOptions(options);
		//
		// check if we need to setup a gallery
		//
		var arr;
		var n;
		//
		arr = $$('figure img');
		n = arr.length;
		if(n<2){
			return;
		}
		//
		var tmp;
		//
		/*
		tmp = $$('figure');
		tmp[0].setStyle('display','none');
		*/
		//
		this.prepare(arr);
		//
		this.onStageResize();
		//
		this.showImage(0);
		//
		//tmp[0].setStyle('display','block');

	},
	onStageResize: function(){
		//
		var w;
		var b;
		var minW;
		//
		minW = 1024;
		//
		b = false;
		w = window.getWidth();
		if(this.isRunning){
			if(w<minW){
				this.isRunning = false;
				b = true;
			}
		}
		else{
			
			if(w>=minW){
				
				this.isRunning = true;
				b = true;
			}
		}
		if(b){
			if(this.isRunning){
				this.slides.each(function(el){
					el.setStyle('opacity',0);
				});	
				this.showImage(this.currentIndex);
			}
			else{
				this.slides.each(function(el){
					el.setStyle('visibility','visible');
				});
				this.slides.each(function(el){
					el.fade('in');
				});
			}			
		}
		//
		if(this.isRunning){
			this.adjustUI();
		}
	},
	onIdle: function(){
		if(this.isIdle){
			this.onThumbnailsOver(false);
		}
	},
	prepare: function(arr){
		//	
		this.isIdle = true;
		//
		this.setActiveSlide(-1);
			
		this.currentIndex = 0;
		this.layout = 0;		
		this.slides = arr;
		this.isRunning = true;		
		this.locked = false;
		this.numItems = arr.length;
		
		this.thumbnailsItemWidth = 60;
		this.thumbnailsItemMargin = 6;
		
		//this.setParameters();
		

		//
		/*
		var loc;
		var base;
		*/
		var el;
		var pathSpacer;
		//
		/*
		loc = String(document.location);
		
		if(loc.indexOf("victorbrigola.com")>-1){
			base = "http://static.victorbrigola.com/";
		}
		else{
			base = "http://localhost:8888/victorbrigola/stat/";
		}
		*/
		//
		pathSpacer = this.options.base+'templates/victorbrigola/assets/spacer.gif';
		//
		el = $('content');
		//
		this.bar = new Element('div',{'id':'gallery-toolbar'}).inject(el);
		
		// previous button
		this.btnPrevious = new Element('a',{'href':'#','id':'gallery-previous','class':'gallery-toolbar-item gallery-image-icon gallery-icon'}).inject(this.bar);	
		new Element('img',{'src':pathSpacer}).inject(this.btnPrevious);
		
		// next button
		this.btnNext = new Element('a',{'href':'#','id':'gallery-next','class':'gallery-toolbar-item gallery-image-icon gallery-icon'}).inject(this.bar);
		new Element('img',{'src':pathSpacer}).inject(this.btnNext);
		//
		this.btnPrevious.addEvent('click', function(e) {
				this.onPrevious(e.target);
				return false;
    		}.bind(this));
    	this.btnPrevious.addEvent('mouseover', function(e) {
				this.onSlidesOver("left");
    		}.bind(this));
    	this.btnNext.addEvent('click', function(e) {
				this.onNext(e.target);
				return false;
    		}.bind(this));	
    	this.btnNext.addEvent('mouseover', function(e) {
				this.onSlidesOver("right");
    		}.bind(this));	

		this.counter = new Element('div',{'id':'gallery-counter'}).inject(this.bar);
		this.navigation = new Element('div',{'id':'gallery-navigation'}).inject(this.bar);
		this.thumbnails = new Element('div',{'id':'gallery-thumbnails'}).inject(this.navigation);
		
		var myTips = new Tips('.gallery-image-icon',{offset:{'x':4,'y':-18},showDelay:0,hideDelay:0});
		
		//
		this.slides.each(function(el){
			el.setStyle('opacity',0);
		});
		arr = new Array();
		var dummy = this.options.dummy;
		this.slides.each(function(el){
			//
			var str;
			//
			str = el.get('src');
			
			if(!dummy){
				str = str.substr(0,str.length-4)+".60x0.jpg";
			}
			arr.push(str);
		});
		
		// thumbnails
		var th = $$('img.thumb');
		this.thumbnails.adopt(th);
		this.thumbs = new Array();
		for(var i=0;i<this.numItems;i++){
			/*
			var el = new Element('img',{
					src:arr[i],
					class:'thumb'
			}).inject(this.thumbnails);
			*/
			el = th[i];
			el.addEvent('click', function(e) {
				this.onThumbClick(e.target);
    		}.bind(this));
    		this.thumbs.push(el);
		}
		//
		el = this.thumbnails;
		//el.setStyle('width',this.thumbnailsWidth);
		el.fade(1); 
		
		el = this.navigation;
		el.addEvent('mouseover', function(e) {
     		this.onThumbnailsOver(true);
    	}.bind(this));
		el.addEvent('mouseout', function(e) {
     		this.onThumbnailsOver(false);
    	}.bind(this));
    	el.addEvent('mousemove', function(e) {
     		this.onThumbnailsMove(e);
    	}.bind(this));
    	
    	//this.adjustUI();
	},
	/*setParameters: function(){
		
		
	},
	*/
	adjustUI: function(){
		//
		var minH;
		var h;
		var layout;
		var n;
		//
		minH = 840;
		h = window.getHeight();
		layout = 1;
		if(h>minH){
			layout = 2;
		}
		if(layout!=this.layout){
			switch(layout){
				case 1:
					n = 11;
					break;
				case 2:
					n = 14;
					break;			
			}
			this.layout = layout;
			this.setLimit(n);
			this.thumbnailsWidthTotal = this.getLimit()*(this.thumbnailsItemWidth+this.thumbnailsItemMargin)-this.thumbnailsItemMargin;
			this.thumbnailsWidth = this.numItems*(this.thumbnailsItemWidth+this.thumbnailsItemMargin)-this.thumbnailsItemMargin;
			this.thumbnailsMinX = -parseInt(this.thumbnailsWidth)+this.thumbnailsWidthTotal;
			this.thumbnailsMaxX = 0;
			this.thumbnails.setStyle('width',this.thumbnailsWidth);
		}
	},
	onNext: function() {
		if(!this.isLocked()){
			this.step(1);
		}
		return false;
	},
	onPrevious: function() {
		if(!this.isLocked()){
			this.step(-1);
		}
		return false;		
	},
	showImage:function(c){
		//
		this.lockGUI();
		//
		this.highlightThumb(c);
		//
		this.updateCounter(c);
		//
		this.updateSlide(c);
		//
		this.adjustThumbnailNavigation(c);
		//
		this.unlockGUI();
	},
	updateSlide: function(to) {
		if(this.currentIndex>-1){
			this.slides[this.currentIndex].fade('out');
		}
		this.currentIndex = (to!=null ? to : (this.currentIndex < this.slides.length - 1 ? this.currentIndex+1 : 0));
		//
		this.slides[this.currentIndex].fade('in');
	},
	step:function(c){
		//
		c = this.getActiveSlide()+c;
		//
		if(c<0){
			c = this.getNumItems()-1;
		}
		if(c == this.getNumItems()){
			c = 0;
		}
		this.showImage(c);
		/*
		this.updateGallery(c);		
		this.adjustThumbnailNavigation(c);
		*/
	},
	/*
	updateGallery:function©{
		this.showImage(c);
	},
	*/
	/*setActiveThumb:function©{
		//
		var limit;
		//
		limit = this.getNumItems()-this.getLimit();
		if(c>=limit){
			c = limit;
		}
		this.activeThumb = c;
	},*/
	onThumbnailsOver:function(b){
		//
		var to;
		//
		if(b){
			to = 1;
			this.isIdle = false;
		}
		else{
			to = 0.01;
		}
		this.thumbnails.fade(to);
		this.activateThumbnails(b);
	},
	activateThumbnails:function(b){
		this.thumbnailsActive = b;
		if(b){
			var func = function(){this.onTimer();}.bind(this);
			this.timer = func.periodical(30);
		}
		else{
			clearInterval(this.timer);
		}
	},
	adjustThumbnailNavigation:function(c){
		//
		var l;
		var offset;
		//
		// try to place active item in focus
		offset = Math.floor(this.getLimit()/2);
		l = ((-1*c)+offset)*(this.thumbnailsItemWidth+this.thumbnailsItemMargin);
		//
		if(l>this.thumbnailsMaxX){
			l = this.thumbnailsMaxX;
		}
		if(l<this.thumbnailsMinX){
			l = this.thumbnailsMinX;
		}
		this.setThumbnailNavigationPos(l);
	},
	setThumbnailNavigationPos:function(l){
		this.thumbnails.setStyle('margin-left',l+'px');
	},
	onTimer:function(){
		this.moveThumbnails();
	},
	moveThumbnails:function(){
		if(this.thumbnailsActive){
			//
			var el;
			var w;
			var l;
			var offset;
			var to;
			var limit;
			//
			w = this.thumbnailsWidthTotal;
			l = this.mouseX;
			offset = Math.floor(((w/2)-l)/25);
			limit = 7;
			if(offset<-limit || offset>limit){
				l = parseInt(this.thumbnails.getStyle('margin-left'));
				l+=offset;
				if(l>this.thumbnailsMaxX){
					l = this.thumbnailsMaxX;
				}
				if(l<this.thumbnailsMinX){
					l = this.thumbnailsMinX;
				}
				this.offsetX = l;
				this.setThumbnailNavigationPos(l);
			}
		}
	},
	onThumbnailsMove:function(e){
		this.mouseX = e.client.x-200;
	},
	onThumbClick:function(el){
		if(!this.isLocked()){
			c = this.getThumbs().indexOf(el);
			if(c!=this.getActiveSlide()){
				this.showImage(c);
			}
		}
	},
	highlightThumb:function(c){
		//
		var arr;
		var className;
		//
		if(c>-1){
			className = "selected";
			arr = this.getThumbs();
			arr[c].addClass(className);
			if(this.getActiveSlide()!=c){
				c = this.getActiveSlide();
				if(c>-1){
					arr[c].removeClass(className);
				}
			}
		}
	},
    onSlidesOver:function(dir){
		this.adjustTip(dir);
		return false;
	},
	adjustTip:function(dir){
		if(dir=='left'){
			add = 'tip-wrap-right';
			remove = 'tip-wrap-left';
		}
		else{
			add = 'tip-wrap-left';
			remove = 'tip-wrap-right';
		}
		$$('.tip-wrap').each(function(el){
			el.removeClass(add);
			el.addClass(remove);
		});
	},
	updateCounter:function(c){
		this.counter.set('text',(c+1)+"/"+this.getNumItems());
	},
	lockGUI:function(){
		this.locked = true;
	},
	unlockGUI:function(){
		this.locked = false;
	},
	setLimit:function(c){
		this.numVisibleItems = c;
	},
	getLimit:function(){
		return this.numVisibleItems;
	},
	getNumItems: function(){
		return this.numItems;
	},
	setActiveSlide:function(c){
		this.currentIndex = c;
	},
	getActiveSlide:function(){
		return this.currentIndex;
	},
	getThumbs:function(){
		return $$('img.thumb');
	},
	isLocked:function(){
		return this.locked;
	}
});
