var GalleryItem = function(node){
	this.steps = 10;
	this.timeout = 10;
	this.step = 0;
	this.smallSize = [102, 63];
	this.bigSize = [261, 165];
	this.init(node);
}

GalleryItem.init=function(){
	$('#content .gallery-item').each(function(){
		new GalleryItem(this);
	});
};

GalleryItem.prototype = {
	init: function(node){
		this.id = ~~(Math.random() * 100);
		this.parent=$(node);
		this.smallImg=this.parent.find('.preview:first');
		this.bigImg=this.parent.find('.image:first');
		this.smallSize = (this.smallImg.is('img')) ? [Number(this.smallImg.attr('width')), Number(this.smallImg.attr('height'))] : [this.smallImg.width(), this.smallImg.height()];
		//this.bigSize = (this.bigImg.is('img')) ? [Number(this.bigImg.attr('width')), Number(this.bigImg.attr('height'))] : [this.bigImg.width(), this.bigImg.height()];
		
		//stupid IE
		this.bigSize = (this.bigImg.is('img')) ? [parseInt(this.bigImg.css('width')), parseInt(this.bigImg.css('height'))] : [this.bigImg.width(), this.bigImg.height()];

		this.bigImg.css({width: this.smallSize[0], height: this.smallSize[1]});
		this.observe();
	},

	observe: function() {
		var _self = this;
		this.smallImg.mouseover(function(){ _self.startGrow(); }).mouseout(function(){ _self.startShrink(); });
		this.bigImg.mouseover(function(){ _self.startGrow(); }).mouseout(function(){ _self.startShrink(); });
	},

	startGrow: function() {
		//this.smallImg.hide();
		this.bigImg.show();
		this.parent.addClass('active');
		clearTimeout(this.timer);
		this.setTimeout(this.makeStepGrow);
	},

	startShrink: function() {
		clearTimeout(this.timer);
		this.setTimeout(this.makeStepShrink);
		this.smallImg.show();
	},

	setTimeout: function(func) {
		var _self = this;
		this.timer = setTimeout(function(){
			func.call(_self);
		}, this.timeout);
	},

	setSize: function() {
		var d=this.step / (this.steps - 1);
		this.bigImg.css({
			width: this.smallSize[0] + (this.bigSize[0] - this.smallSize[0]) * d,
			height: this.smallSize[1] + (this.bigSize[1] - this.smallSize[1]) * d
		});
	},

	makeStepGrow: function() {
		this.setSize();
		if(this.step <= 0) {
			this.step = 0;
			this.bigImg.show();
		}
		this.step++;
		if(this.step < this.steps) {
			this.setTimeout(this.makeStepGrow);
		} else {
			this.step = this.steps - 1;
		}
	},

	makeStepShrink: function() {
		this.setSize();
		this.step--;
		if(this.step <= -1) {
			this.bigImg.hide();
			this.step = 0;
			this.parent.removeClass('active');
		} else {
			this.setTimeout(this.makeStepShrink);
		}
	}
};

$(function(){GalleryItem.init();});

