var Gallery = new Class({

	//implements
	Implements: [Options],

	//origColor: null,
	positionsArray: new Array(),	//to store item positions
	itemNum: null,
	totalSlides: 0,					
	curIndex: null,  				
	prevIndex: null,				
	curPic: null,					//index of current pic (from mini-thumbs)
	prevPic: null,					//index of prev. pic (from mini-thumbs)
	scrollFX: null,					//holds Fx.Scroll 
	theURI: null,
	pageName: null,
	thumbSize: 40,					//width/height of mini-thumbs

	//options
	options: {
		stage: null,
		inner: null,
		thumbs: null,
		thumbsHolder: null,
		items: new Array(),
		thumbsDir: null,
		prevBtn: null,
		nextBtn: null,					
		transitionTime: 1000
	},
	
	
	
	//initialization
	initialize: function(options) {		
		//set options
		this.setOptions(options);
		
		var self = this;
		var tempCount = 0;
		//var tempSlide = null;
		
		self.theURI = new URI();
		self.pageName = self.theURI.get('file');
		
		
		self.options.stage.setStyles({
			'overflow': 'hidden',
			'position': 'relative'
			
		});
		
		self.options.thumbsHolder.set('tween', {
			'duration' : 1000,
			'ease' : 'cubic:out',
			'link' : 'ignore'
		});
		
		self.options.thumbsHolder.setStyles({
			'left' : 0,
			'position' : 'relative'
			
		});
		
		
		self.options.inner.setStyles({
			'position':'absolute'					 
		});
		
		
		
		self.options.thumbs.each(function(el, k){
			
			el.setStyles({
				'position': 'absolute',
				'top': 0,
				'left': k * el.getSize().x
				//'opacity' : 1
			});
			
			var tempHref = el.getElement('a').get('href');
			var tempURI = new URI(tempHref);
			var tempPage = tempURI.get('file');
			
			if(tempPage === self.pageName){
				el.set('opacity', .5);
				self.curIndex = k;
				self.curSlide = Math.floor(k/ 9); 
				var zoo = '';
			}
			
			el.set('tween', {
				'duration' : 200,
				'ease' : 'cubic:out'
			});
			
			el.store('index', k);
			//el.store('tempPage', tempPage);
			
			
			el.addEvents({
				
				'mouseenter' : function(e){
					this.tween('opacity', .5)
				},
				
				'mouseleave' : function(e){
					if(this.retrieve('index') != self.curIndex){
						this.tween('opacity', 1)
					}
				},
				
				'click': function(e){
					
					if(e){
						//e.stop();
						//parent.location.hash = self.options.thumbs[k].get('href');
					}
					
				}
				
				
			});
			
		});
	
		
		self.options.items.each(function(el, k){
			
			/*
			el.setStyles({
				'position': 'absolute',
				'top': '0',
				'opacity': '.0001',
				'visibility': 'hidden'
			});
			*/
			
			//el.set('rel', self.options.thumbs[k].get('href'));
		    //var destroyed = el.getElement('a').destroy();
		    
		    
		    var miniThumbs = $$(el.getElements('.pics_list li').clone());
		    var destroyed = el.getElement('.pics_list').destroy();
		    el.store('miniThumbs', miniThumbs);
		    
		    //var tearsheet = $(el.getElement('.dltearsheet').clone());
		    //var destroyed2 = el.getElement('.dltearsheet').destroy();
		    //el.store('tearsheet', tearsheet);
		    
		    
		    //related links click handling
		    var relateds = el.getElements('p.related a');
		    relateds.each(function(rel, i) {
				rel.addEvents({
					'click' : function(e) {
						//e.stop();
						
						/*
						var myHref = new URI(rel.getProperty('href'));
						
						var tempHref = rel.getProperty('href')
						var tempHash = tempHref.split('#')[1];
						var tempDir = myHref.get('directory');
						
						
						var curURL = new URI(parent.location);
						var curDir = curURL.get('directory');
						
						if(curDir == tempDir){
							parent.location.hash = tempHash;
							self.hashClick();
						}
						else{
							parent.location = tempHref;	
						}
						//alert('clicked');
						*/
						
					}
				});	  
			});
				
		});
		
		
		//setup for thumbs scrolling
		var prevBtn = self.options.prevBtn;
		var nextBtn = self.options.nextBtn;
		var thumbCount = self.options.thumbs.length;
		var thumbHolderWidth = self.options.thumbsHolder.getSize().x;
		var minX = 0;
		var maxX = -1 * (thumbHolderWidth - self.options.inner.getSize().x );
		
		if(thumbCount <= 9){
			prevBtn.setStyle('opacity', .3);
			nextBtn.setStyle('opacity', .3);
		}
		else{
			
			nextBtn.setStyle('cursor', 'pointer');
			
			prevBtn.addEvents({
				'click' : function(e){
					self.slidePrev();
				}
			});
			
			nextBtn.addEvents({
				'click' : function(e){
					self.slideNext();
				}
			});
		}
		
		
	
	},

	//my post-initialization (startup) function
	start: function() {
		
		var self = this;
		
		//self.hashClick();
		
		self.showMiniThumbs(0);
		//self.showTearsheet(0);
					
		var myFx = new Fx.Scroll($(document.body));
		myFx.set(0,0);
		
		if(self.curIndex == null){
			self.curIndex = 0;
			self.options.thumbs[0].set('opacity', .5);
		}

		var nextCounter = 0;
		while(nextCounter < self.curSlide){
			self.slideNext();
			nextCounter++;
		}
		//alert('test');
		
	},
	
	
	slidePrev: function(){
		var self = this;
		var minX = 0;
		var innerW = self.options.inner.getScrollSize().x;
		var holderW = self.options.thumbsHolder.getSize().x;
		var thumbW = self.options.thumbs[0].getSize().x;
		
		var maxX = (holderW - innerW);
		var curX = self.options.thumbsHolder.getStyle('left').toInt();
		var newX = curX + (thumbW * 9);
		
		if(curX < minX){
			self.options.nextBtn.setStyle('opacity', 1);		
			self.options.thumbsHolder.tween('left', newX);
			self.options.nextBtn.setStyle('cursor', 'pointer');
		}
		
		if(newX >= minX)
		{
			self.options.prevBtn.setStyle('opacity', .6);
			self.options.prevBtn.setStyle('cursor', 'default');
		}
		
	},
	
	
	slideNext: function(){
		
		
		var self = this;
		var minX = 0;
		var innerW = self.options.inner.getScrollSize().x;
		var innerW = self.options.inner.getScrollSize().x;
		var holderW = self.options.thumbsHolder.getSize().x;
		var thumbW = self.options.thumbs[0].getSize().x;
		
		
		var maxX = (holderW - innerW);
		
		var curX = self.options.thumbsHolder.getStyle('left').toInt();
		
		
		if(maxX < 0){
			self.options.prevBtn.setStyle('opacity', 1);
			
			var newX = curX - (thumbW * 9);
			self.options.thumbsHolder.tween('left', newX);
			self.options.prevBtn.setStyle('cursor', 'pointer');
			
			
		}
		
		if(newX <= maxX)
		{
			self.options.nextBtn.setStyle('opacity', .6);
			self.options.nextBtn.setStyle('cursor', 'default');
		}
	},
	
	
	showMiniThumbs: function(item_id) {
		
		var self = this;
		var myMenu = $('minithumbs');
		
		//hide #mini_thumbs, empty li's
		//myMenu.fade('hide');
		//myMenu.getElements('li').each(function(el, k) {
			//el.destroy();
		//});
		
		
		//repopulate with new li's (which are stored inside each 'item' element)
		var newThumbs = self.options.items[item_id].retrieve('miniThumbs');
		newThumbs.each(function(el, k) {
			var cloned = el.clone();
			var newImg = new Element('img');
			var imgSrc = $(cloned.getElement('a')).get('href');
			var uri = new URI(imgSrc);
			var filename = uri.get('file');
			var mainImg = $(self.options.items[item_id].getElement('.box.item'));
			
			var thumbSrc = self.options.thumbsDir + filename;
			
			newImg.setProperty('src', thumbSrc);
			newImg.setStyles({ 'width': self.thumbSize, 'height': self.thumbSize, 'cursor': 'pointer'});
			cloned.grab(newImg);
			
			$('minithumbs').grab(cloned);
			
			//ditch the original (text) link
			var destroyed = cloned.getElement('a').destroy();
			
			
			//add click events to each 'cloned' li
			cloned.addEvents({
				'click': function(e){
					var newPic = new Element('img');
					newPic.setProperty('src', imgSrc);
					//newPic.set('opacity',.001);
					
					
					mainImg.fade('hide');
					//mainImg.fade('hide');					
					mainImg.getElement('img').dispose();
					
					self.options.items[item_id].getElement('.box.item').grab(newPic);
					
					
					//mainImg.fade('hide');
					//mainImg.set('opacity',.0001)
					//mainImg.setProperty('src', imgSrc);
					mainImg.fade('in');
					
				}
			});
			
			//fire off first thumb, to ensure new product view starts on 1st img
			if(k == 0){
				cloned.fireEvent('click');
			}
		})
		
		
		
		
		//show $mini_thumbs again
		$('minithumbs').fade('in');
		
		
		//alert("item_id:" + item_id);
		
	},
	
	
	showTearsheet: function(item_id) {
		
		var self = this;
		var myBtn = $('lowerbar').getElement('.dltearsheet');
		
		//hide download button, destroy it
		myBtn.fade('hide');
		myBtn.destroy();
		
		
		//repopulate with new element
		var newBtn = self.options.items[item_id].retrieve('tearsheet');
		var cloned = newBtn.clone();
		

		$('lowerbar').grab(cloned);		
		cloned.set('tween', { 'duration' : 1000, 'ease' : 'cubic:out' });
		cloned.set('opacity', .0001);
		
		//show btn
		var tempHref = cloned.getElement('a').get('href');
		var tempLength = tempHref.length;
		var lastChar = tempHref.charAt(tempLength - 1);
		
		if(lastChar != '#') cloned.fade('in');
		
	}
	
	
	
});
