///
// ImageEnlarger.js
//
// version 0.1  (13.03.2008)
//
// @Autor: Сергей Попов (popitch @ya.ru)
//

function enlargeImage(owner, mouseover, size) {
	if (owner._savedStyle == undefined) {
		// переход на абсолют
		owner.style.position = 'absolute';
		// сохранение текущего стиля (для восстановления)
		owner._savedStyle = {
			position: owner.style.position,
			left: owner.style.left,
			top: owner.offsetTop,
			width: owner.offsetWidth,
			height: owner.offsetHeight,
			size: size
		};
		// фиксация размера родителя(по смещению координат)
		// убрал, так что сам должен позаботиться
		//owner.offsetParent.style.width = owner.offsetParent.offsetWidth;
		//owner.offsetParent.style.height = owner.offsetParent.offsetHeight;
	}
	// 
	if (mouseover && (owner._state == undefined || (owner._state.ratio == 1 && owner._state.size == 0))) {
		// абсолютные координаты
		var x = 0, y = 0, node = owner;
		while (node != document.body) {
			//owner.offsetParent.innerHTML += '<br>'+owner.offsetLeft;
			x += node.offsetLeft;
			y += node.offsetTop;
			node = node.offsetParent;
		}
		owner._savedStyle.abs = {x: x, y: y};
	}
	// timeout
	owner._state = {
		startSize: mouseover? 0 : ( (owner._state != undefined && owner._state.size != undefined)? owner._state.size : owner._savedStyle.size ),
		endSize: mouseover? owner._savedStyle.size : 0,
		startTime: (new Date).getTime(),
		timeWidth: 200,
		size: 0, ratio: 0
	};
	this.enlarger = function(owner) {
		var state = owner._state;
		var saved = owner._savedStyle;
		var time = (new Date).getTime() - state.startTime;
		var ratio = state.ratio = time > state.timeWidth? 1 : Math.sin((Math.PI/2)*time/state.timeWidth);
		var size = state.size = Math.round(state.startSize + (state.endSize - state.startSize)*ratio);
		
		owner.style.left = saved.abs.x - size/2;
		owner.style.top = saved.abs.y - size/2;
		owner.style.width = saved.width + size;
		owner.style.height = saved.height + size;
		
		if (ratio != 1) {
			//var self = this;
			setTimeout(function() { enlarger(owner) }, 1);
		}
		else if (size == 0) {
			// восстановление
			owner.style.position = saved.position;
			owner.style.left = saved.left;
			owner.style.top = saved.top;
			owner.style.width = saved.width;
			owner.style.height = saved.height;
		}
	}
	this.enlarger(owner);
}
