
/*
 * Класс для анимирования бабочки
 * TimeZero <http://www.timezero.ru/>
 * 2007-12-13
 * Автор: Дмитрий Шкинёв <berkel@timezero.ru>
 */

var butterflyAnimation = function(containerId, mainContainerId, options){

	this.container = $(containerId);
	this.mainContainer = $(mainContainerId);

	this.imagesLr = [];
	this.imagesRl = [];

    this.options = options;

	this.startPosition = this.options.start_position;
	this.stopSpotPosition = this.options.stop_spot_position;
	this.continuityCount = this.options.continuity_count;
	this.shotChangeInterval = this.options.shot_change_interval;
	this.changePositionInterval = this.options.change_position_interval;
	this.direction = this.options.direction;
	this.shotsDir = this.options.shots_dir;

	this.container.style.left = this.startPosition.x + "px";
	this.container.style.top = this.startPosition.y + "px";

	this.shotIndex = cmnGetRandom(1, this.continuityCount);

	this.lastStopSpotIndex = -1;

	this.init();
}

butterflyAnimation.prototype = {

	init : function(){

		var eThis = this;

		for (var i=1; i<=eThis.continuityCount; i++){

			var oImgLr = document.createElement("IMG");
			var oImgRl = document.createElement("IMG");

			if (window.attachEvent && !window.opera){
				oImgLr.src = "/i/dt.gif";
				oImgLr.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + eThis.shotsDir + "lr" + i + ".png');";

				oImgRl.src = "/i/dt.gif";
				oImgRl.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + eThis.shotsDir + "rl" + i + ".png');";
			} else {
				oImgLr.src = eThis.shotsDir + "lr" + i + ".png";
				oImgRl.src = eThis.shotsDir + "rl" + i + ".png";
			}

			eThis.imagesLr[i] = oImgLr;
			eThis.imagesRl[i] = oImgRl;
		}

		eThis.imageIntervalId = setInterval(function(){eThis.shotChange();}, eThis.shotChangeInterval);
		eThis.containerIntervalId = setInterval(function(){eThis.changePosition();}, eThis.changePositionInterval);

//		window.onmousemove = eThis.getMouseCoords;
	},

	checkStopSpotPosition : function(x, y){

		var eThis = this;

		var i=0

		while (coords = eThis.stopSpotPosition[i++]){

			var leg1 = Math.abs(coords.y - y);
			var leg2 = Math.abs(coords.x - x);

			var hypotenuseWidth = Math.sqrt(Math.pow(leg1, 2) + Math.pow(leg2, 2));

			if (hypotenuseWidth < coords.distance){
				coords.index = (i-1);
				return coords;
			}
		}

		return false;
	},

	getMouseCoords : function(evt){

		var mainContainerPostion = cmnGetAbsolutePos($("mainTd"));

		var x = evt.clientX - mainContainerPostion.x;
		var y = evt.clientY - mainContainerPostion.y;

		$("debug").innerHTML = "x=" + evt.clientX + "<br/>" + "y=" + evt.clientY + "<br/>";
		$("debug").innerHTML += "x=" + (evt.clientX - mainContainerPostion.x) + "<br/>" + "y=" + (evt.clientY - mainContainerPostion.y) + "<br/>";
		$("debug").innerHTML += "x=" + mainContainerPostion.x + "<br/>" + "y=" + mainContainerPostion.y;
	},

	shotChange : function(){

		var eThis = this;

		if (eThis.shotIndex > eThis.continuityCount)
			eThis.shotIndex = 1;

		if (eThis.container.hasChildNodes())
			eThis.container.removeChild(eThis.container.firstChild);

		if (eThis.direction == "rl"){
			eThis.container.appendChild(eThis.imagesRl[eThis.shotIndex++]);
		} else {
			eThis.container.appendChild(eThis.imagesLr[eThis.shotIndex++]);
		}
	},

	moveToStopSpot : function(coords){

		var eThis = this;

		eThis.lastStopSpotIndex = coords.index;

		var containerPostion = cmnGetAbsolutePos(eThis.container);
		var mainContainerPostion = cmnGetAbsolutePos(this.mainContainer);

		var top = 0, left = 0;

		if (eThis.direction == "lr"){
			left = containerPostion.x + 1;
		} else {
			left = containerPostion.x - 1;
		}

		var tan = (Math.abs(containerPostion.x - coords.x) == 0) ? Math.abs(containerPostion.y - coords.y) : Math.abs(containerPostion.y - coords.y) / Math.abs(containerPostion.x - coords.x);

		var x = left - containerPostion.x;
		var y = tan*x;

		if (y > 0 && containerPostion.y - y > 600){
			top = containerPostion.y - y;

		} else {

			top = containerPostion.y;
			clearInterval(eThis.containerMoveToStopSpotIntervalId);

			setTimeout(
				function(){

					if (Math.round(Math.random()) > 0){
						eThis.direction = "rl";
					} else {
						eThis.direction = "lr";
					}

					eThis.containerIntervalId = setInterval(function(){eThis.changePosition();}, eThis.changePositionInterval);

				}, 2000);
		}

		eThis.container.style.left = left + "px";
		eThis.container.style.top = top + "px";
	},

	changePosition : function(){

		var eThis = this;

		var containerPostion = cmnGetAbsolutePos(eThis.container);
		var mainContainerPostion = cmnGetAbsolutePos(eThis.mainContainer);

		var top = 0, left = 0;

		if (containerPostion.x + eThis.container.offsetWidth >= (mainContainerPostion.x + eThis.mainContainer.offsetWidth) - 200){
			eThis.direction = "rl";
		} else if (containerPostion.x < mainContainerPostion.x + 200){
			eThis.direction = "lr";
		}

//		$("debug").innerHTML = eThis.direction;

		if (containerPostion.y <= 430){
			containerPostion.y = 430;
		} else if (containerPostion.y >= 600){
			containerPostion.y = 600;
		}

		if (Math.round(Math.random()) > 0){
			top = containerPostion.y + 1;
		} else {
			top = containerPostion.y - 1;
		}

		if (eThis.direction == "lr"){
			left = containerPostion.x + 1;
		} else {
			left = containerPostion.x - 1;
		}

		eThis.container.style.left = left + "px";
		eThis.container.style.top = top + "px";

//		eye1.setPosition(left + eye1.alignX, top + eye1.alignY, eye1.radius);
//		eye2.setPosition(left + eye1.alignX, top + eye1.alignY, eye2.radius);

//		eye1.point.style.top = eye2.point.style.top;

		var stopSpotCoords = eThis.checkStopSpotPosition(left, top);

		if (stopSpotCoords && stopSpotCoords.index != eThis.lastStopSpotIndex){
			clearInterval(eThis.containerIntervalId);
			eThis.containerMoveToStopSpotIntervalId = setInterval(function(){eThis.moveToStopSpot(stopSpotCoords);}, eThis.changePositionInterval);
		}
	}
};
