/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

function JsSmoothResizer( el, settings )
{
	var myself = this;
	settings = {
		randomize: isSet( settings.randomize ) ? settings.randomize : false,
		sizeCoeficient: isSet( settings.sizeCoeficient ) ? settings.sizeCoeficient : 0.2,
		endless: isSet( settings.endless ) ? settings.endless : true,
		bothDirections: isSet( settings.bothDirections ) ? settings.bothDirections : true,
		time: isSet( settings.time ) ? settings.time : 500,
		centering: isSet( settings.centering ) ? settings.centering : true
	}

	this.movement = {
		isRunning: false,
		direction: isSet( settings.defaultDirection ) ? settings.defaultDirection : -1
	}

	var mainItem = {
		element: el,
		size: {
			init: {},
			min: {},
			max: {},
			start: {},
			dest: {},
			actual: {}
		},
		position: {
			init: {}
		}
	}

	mainItem.size.init.width = Dimension.getWidth( mainItem.element );
	mainItem.size.init.height = Dimension.getHeight( mainItem.element );
	mainItem.size.aspectRatio = mainItem.size.init.width / mainItem.size.init.height;
	/*mainItem.size.max.width = mainItem.size.init.width + mainItem.size.init.width * settings.sizeCoeficient;
	mainItem.size.max.height = mainItem.size.init.height + mainItem.size.init.height * settings.sizeCoeficient;

	if ( settings.bothDirections )
	{
		mainItem.size.min.width = mainItem.size.init.width - mainItem.size.init.width * settings.sizeCoeficient;
		mainItem.size.min.height = mainItem.size.init.height - mainItem.size.init.height * settings.sizeCoeficient;
	}*/
	mainItem.size.actual.width = mainItem.size.init.width;
	mainItem.size.start.width = mainItem.size.init.width;
	mainItem.size.dest.width = settings.randomize ? mainItem.size.init.width + this.movement.direction * mainItem.size.init.width * Math.random() * settings.sizeCoeficient : mainItem.size.init.width + this.movement.direction * mainItem.size.init.width * settings.sizeCoeficient;

	mainItem.position.init.left = Dimension.getLeft( mainItem.element );
	mainItem.position.init.top = Dimension.getTop( mainItem.element );
	
	this.play = function()
	{
		var animationSettings = {
			interval: 40,
			movementPosition: 0,
			movementLength: mainItem.size.dest.width - mainItem.size.actual.width
		}
		
		var timeStep = settings.time / animationSettings.interval;
		animationSettings.step = animationSettings.movementLength / timeStep;

		function animation()
		{
			animationSettings.movementPosition += animationSettings.step;

			if ( myself.movement.direction * animationSettings.movementPosition < myself.movement.direction * animationSettings.movementLength )
			{
				mainItem.size.actual.width = mainItem.size.start.width + animationSettings.movementPosition;
				mainItem.size.actual.height = mainItem.size.actual.width / mainItem.size.aspectRatio;

				if ( settings.centering )
				{
					mainItem.element.style.position = 'absolute';
					var centerPoint = {
						left: mainItem.position.init.left + mainItem.size.init.width / 2,
						top: mainItem.position.init.top + mainItem.size.init.height / 2
					}

					var newLeft = centerPoint.left - mainItem.size.actual.width / 2;
					var newTop = centerPoint.top - mainItem.size.actual.height / 2;
					mainItem.element.style.left = newLeft+'px';
					mainItem.element.style.top = newTop+'px';
				}

				mainItem.element.style.width = mainItem.size.actual.width+'px';
				mainItem.element.style.height = mainItem.size.actual.height+'px';

			}
			else
			{
				clearInterval( tmrAnimation );
				
				if ( settings.endless )
				{
					mainItem.size.actual.width = mainItem.size.dest.width;
					mainItem.size.start.width = mainItem.size.actual.width;

					if ( settings.centering )
					{
						var centerPoint = {
							left: mainItem.position.init.left + mainItem.size.init.width / 2,
							top: mainItem.position.init.top + mainItem.size.init.height / 2
						}

						var newLeft = centerPoint.left - mainItem.size.actual.width / 2;
						var newTop = centerPoint.top - mainItem.size.actual.height / 2;
						mainItem.element.style.left = newLeft+'px';
						mainItem.element.style.top = newTop+'px';
					}

					mainItem.element.style.width = mainItem.size.actual.width+'px';
					mainItem.element.style.height = mainItem.size.actual.height+'px';

					if ( settings.bothDirections )
					{
						myself.movement.direction = -1 * myself.movement.direction;
						mainItem.size.dest.width = settings.randomize ? mainItem.size.init.width + myself.movement.direction * mainItem.size.init.width * Math.random() * settings.sizeCoeficient : mainItem.size.init.width + myself.movement.direction * mainItem.size.init.width * settings.sizeCoeficient;
					}
					
					myself.play();
				}
			}
		}
		
		var tmrAnimation = setInterval( animation, animationSettings.interval );
	}

	this.play();
}



