
	/*
		----------------------------------------------------------------------
		Script		: thumbManager.js
		Description	: Creates thumbnail objects requested by slideshow.js.
		----------------------------------------------------------------------
	*/

var ThumbManager = new Class({
	Implements: [Options, Events],
	options: {
		fxOptions: {
			imageFx: 'fade',
			thumbFx: 'slider',
			direction: 'right',
			fxParams: {
				duration: 2000,
				wait: 5000,
				transition: Fx.Transitions.linear
			}
		},
		thumbOptions: {
			userSupplied: false,
			thumbData: [],
			resize: [],
			useLinks: false,
			useTips: false,
			tipsText: {},
			links: [],
			ajaxLinks: [],
			bottomPosition: true,
			horizCenter: true,
			thumbCenter: true,
			containerStyles: {
			},
			wrapperStyles: {
				float: 'left',
				position: 'relative'
			},
			thumbStyles: {
				position: 'absolute',
				left: '50%',
				top: '50%'
			},
			layout: {
				placement: 'out',
				location: 'left'
			},
			slider: {
				styles: {
					borderColor: '#FF8000',
					borderStyle: 'solid',
					borderWidth: 1
				},
				className: 'outline'
			},
			mask: {
				tint: '#000000',
				styles: {
					opacity: 0.5
				},
				className: 'overlay'
			}
		}
	}, // end @options
	
	initialize: function(baseURI, options) {
		this.setOptions(options);
		//this.baseURI = baseURI;
		this.wrapperStyles = this.options.thumbOptions.wrapperStyles;
		this.thumbStyles = this.options.thumbOptions.thumbStyles;
		
		var thumbData = this.options.thumbOptions.thumbData;
		var thumbSizes = this.options.thumbOptions.resize;

		var thumbRequests = [];
		//var defSize = '.33';
		
		thumbData.each(function(thumb, i){
			thumbRequests[i] = 'images/' + thumb.name;
		});
		
		this.thumbImages = new Asset.images(thumbRequests, {onComplete: this.loadThumbs.bind(this)});
		
	},	//	end @initialize.
	
	loadThumbs: function(){
		this.thumbContainer = new Element('ul', {'class': 'thumbContainer'});
		
		var maxH = maxW = 0;
		this.thumbImages.each(function(thumb, i){
			if(i == 0){maxH = thumb.height; maxW = thumb.width;}
			else {
				if(maxH < thumb.height){maxH = thumb.height}
				if(maxW < thumb.width){maxW = thumb.width}
			}
		});
		this.wrapperStyles = $H(this.wrapperStyles).combine({height: maxH, width: maxW});
		this.thumbImages.each(function(thumb, i){
			var thumbWrap = new Element('li', {'class': 'slideshowThumbnail'}).set('styles', this.wrapperStyles).inject(this.thumbContainer);
			if(this.options.thumbOptions.useTips) {
				var text = $H(this.options.thumbOptions.tipsText).filter(function(value, key) {
					return this.options.thumbOptions.thumbData[i].name.contains(key);
				}, this);
				var tipContent = text.getValues()[0].split('::');
				var tipTitle = tipContent[0];
				var tipText = tipContent[1];
				thumbWrap.store('tip:title', tipTitle);
				thumbWrap.store('tip:text', tipText);
			}
			if(this.options.thumbOptions.thumbCenter) {
			this.thumbStyles.marginLeft = Math.round(-(thumb.width/2)-this.thumbStyles.padding-this.thumbStyles.borderWidth);
			this.thumbStyles.marginTop = Math.round(-(thumb.height/2)-this.thumbStyles.padding-this.thumbStyles.borderWidth);
			} else {
				this.thumbStyles.top = 0;
				this.thumbStyles.left = 0;
			}
			this.thumbStyles.width = thumb.width;
			this.thumbStyles.height = thumb.height;
			thumb.set('styles', this.thumbStyles);
			if(this.options.thumbOptions.useLinks) {
				var link = new Element('a', {'href': this.options.thumbOptions.links[i], 'rel': JSON.encode(this.options.thumbOptions.ajaxLinks[i])}).inject(thumbWrap);
				thumb.inject(link);
			} else { thumb.inject(thumbWrap); }
		}, this);
		
		if(this.options.thumbOptions.useTips) {
			if(!Browser.Engine.trident5) {
				new Tips(this.thumbContainer.getElements('li.slideshowThumbnail'), {
					onShow: function(tip) { tip.fade('in'); },
					onHide: function(tip) { tip.fade('out'); }
				});
			} else {
				new Tips(this.thumbContainer.getElements('li.slideshowThumbnail'));
			}
		}
		if(this.thumbImages.length == 0){
			this.thumbContainer.destroy();
			this.fireEvent('failure');
			return;
		}
		
		this.thumbWrappers = this.thumbContainer.getElements('li.slideshowThumbnail');
		
		this.fireEvent('complete');
		
	}, //	end @loadThumbs.
	
	ready: function(){
		this.fireEvent('complete', '', 100);
	}

});	//	end ThumbManager class.