var Balafia_Press = Class.create(
{
	node:		false,
	display:	false,
	cache:		false,
	thumbnails:	false,
	slider:		false,
	sliderMax:	false,
	mutex:		false,
	
	initialize: function(node)
	{
		this.node = node;
		
		if(!this.node || !this.node.hasClassName("press_gallery")) return false;
		
		this.display	=	this.node.down(".display");
		this.cache		=	this.display.down(".cache");
		this.thumbnails	=	this.node.down(".thumbnails");
		this.slider		=	this.thumbnails.down(".slider");
		this.sliderMax	=	-(this.slider.getDimensions().width - this.thumbnails.getDimensions().width);
		this.mutex		=	false;
		
		this.setupMouse();
		this.setupButtons();
	},
	
	setupButtons: function()
	{
		var tb = Balafia_Textbox.instance;
		
		var animate = function(number,event){
			var image = this.thumbnails.down("img.image_"+number);

			var pos = (-image.positionedOffset().left);
			if(pos < this.sliderMax) pos = this.sliderMax;
			this.slider.morph("left:"+pos+"px",2);
			
			return this.changeImage(image,event);
		}.bind(this);
		
		tb.area.down(".item_number img.prev").observe("click",function(event){
			return animate(tb.prevItemNumber(),event);
		});
		
		tb.area.down(".item_number img.next").observe("click",function(event){
			return animate(tb.nextItemNumber(),event);
		});
	},
	
	setupMouse: function()
	{
		var handle	=	false;
		var mutex	=	false;
		var min		=	0;
		var max		=	this.sliderMax;
		var offset	=	0;
		
		this.thumbnails.observe("mousemove",function(event){
			var x = Event.pointerX(event) - this.cumulativeOffset().left;
			
			offset = 0;
			
			if(x < 100) offset = 5;
			if(x > 380) offset = -5;
		});
		
		this.thumbnails.observe("mouseenter",function(event){
			if(handle) return

			handle = setInterval(function(){
				if(mutex) return;
				mutex = true;
				
				var left = this.slider.positionedOffset().left;
				
				if(left <= min || left >= max){
					var pos = left+offset;
					
					if(pos > min) pos = min;
					if(pos < max) pos = max;
					
					this.slider.setStyle({left:pos+"px"});
				}
				
				mutex = false;
			}.bind(this),20);
		}.bind(this));
		
		this.thumbnails.observe("mouseleave",function(event){
			clearInterval(handle);
			handle = false;
		});
		
		this.thumbnails.select("img").invoke("observe","click",function(event){
			this.changeImage(event.element(),event);
		}.bindAsEventListener(this));
	},
	
	changeImage: function(img,event)
	{
		var p = img.cumulativeOffset();
		var d = img.getDimensions();
		
		var src = img.src.replace("thumb","image");
		var cloneImage = this.cache.down("."+img.className);
		
		var number = +img.className.replace("image_","");
		Balafia_Textbox.instance.setItemNumber(number);
		
		if(cloneImage && this.mutex == false){
			this.mutex = true;
			
			cloneImage.setStyle({
				"position":	"absolute",
				"left":		p.left+"px",
				"top":		p.top+"px",
				"width":	d.width+"px",
				"height":	d.height+"px",
				"zIndex":	100
			});
			
			
			var m = this.display.down(".main_image");
			var p = m.cumulativeOffset();
			var d = m.getDimensions();
			
			cloneImage.morph("left:"+p.left+"px; top:"+p.top+"px; width:481px; height:350px",{
				duration: 1,
				after: function(){
					m.insert({after:cloneImage});
					m.removeClassName("main_image");
					cloneImage.addClassName("main_image");
					cloneImage.setStyle({left: 0,top: 0});
					this.cache.insert({bottom:m.remove()});
					this.mutex = false;
				}.bind(this)
			});
			
			$(document.body).insert({bottom:cloneImage});
		}
		
		if(event) event.stop();
		return false;
	}
});
