////////////////////////////////////////////////////////////////////////////////////////////

function distance(oPoints){
	var A = new Object();
	var B = new Object();
	
	if (arguments.length == 4){
		A = { x : arguments[0],	y : arguments[1] };
		B = { x : arguments[2],	y : arguments[3] };
	} else {
		if (arguments.length == 1 && oPoints.length == 2) {
			A = arguments[0][0];
			B = arguments[0][1];
		}
		if (arguments.length == 2){
			A = arguments[0];
			B = arguments[1];
		}
		if ( A[0] && A[1] )		A = { x : A[0],	y : A[1] };
		else if (A.x && A.y)	A = { x : A.x,	y : A.y };
		
		if ( B[0] && B[1] )		B = { x : B[0],	y : B[1] };
		else if (B.x && B.y)	B = { x : B.x,	y : B.y };
	}

	A = { 
		x : (parseInt(A.x) || 0),
		y : (parseInt(A.y) || 0) 
	};
	B = { 
		x : (parseInt(B.x) || 0),
		y : (parseInt(B.y) || 0) 
	};
	
	if ( B.x - A.x || B.y - A.y ){
  		return Math.sqrt( 
			(B.x - A.x)*(B.x - A.x) + (B.y - A.y)*(B.y - A.y)
		);
	}
	return 0;
}


////////////////////////////////////////////////////////////////////////////////////////////

var Cloud1 = document.getElementById('Cloud1');
var Cloud2 = document.getElementById('Cloud2');
var Cloud3 = document.getElementById('Cloud3');

var isMSIE = document.attachEvent != null;
var isGecko = !document.attachEvent && document.addEventListener;

initMoveClouds();


/******************************************************************************/
function initMoveClouds(){
	Cloud1.style.left = '-500px';
	Cloud1.style.top = '60px';
		
	Cloud2.style.left = '-630px';
	Cloud2.style.top = '70px';

		
	Cloud3.style.left = '-500px';
	Cloud3.style.top = '10px';
	
	window.onload = startMoveClouds;
}


/******************************************************************************/
function startMoveClouds(){
	cloudMove( Cloud1 , 
		[
			[ -500 , 60 ],
			[ -300 , 50 ],
			[ -220 , 60 ],
			[ -80 , 70 ],
			[ 60 , 60 ],
			[ 200 , 60 ]
		],
		100
	);

	cloudMove( Cloud2 , 
		[
			[ -630 , 70 ],
			[ -700 , 80 ]
		],
		50
	);

	cloudMove( Cloud3 , 
		[
			[ -500 , 10 ],
			[ -700 , 30 ]
		],
		50
	);

}

/******************************************************************************/
function cloudMove(elNode , mPoints , iPoints){
	var Cloud = new Object();
	Cloud.element = elNode;
	Cloud.iCurPointNumber = 0;
	Cloud.intervalId = null;
	
/******************************************************************************/	
	Cloud.move = function(){
		
		var iTime = 2 / iPoints * 1000;

		Cloud.moveNode();
		Cloud.intervalId = setInterval( Cloud.moveNode , iTime );
	}


/******************************************************************************/
	Cloud.moveNode = function(){

			Cloud.element.style.left = Cloud.mAllPoints[Cloud.iCurPointNumber][0];
			Cloud.element.style.top = Cloud.mAllPoints[Cloud.iCurPointNumber][1];
			Cloud.iCurPointNumber++;
			if(Cloud.iCurPointNumber == Cloud.mAllPoints.length) clearTimeout(Cloud.intervalId);
	}	

	
/******************************************************************************/	
	Cloud.getAllPointsArray = function (mPoints , iTotalPointsCount){
		// errors //
			if(mPoints.length < 2) return 'mPoints.length='+mPoints.length;
			if(iTotalPointsCount  < 2) return 'iTotalPointsCount='+iTotalPointsCount;
		///////////
	
		var iPointsCount = mPoints.length;
		var iFullLength = 0;
		var mParts = [];
	
		for( var i = 1 ; i < iPointsCount ; i++ ){
			mParts[i-1] = distance( mPoints[i] , mPoints[i-1]);
			iFullLength += mParts[i-1];
		}
	
		var iSpeed = iFullLength / iTotalPointsCount;
	
		// errors //
			if( iFullLength <= 0 ) return 'iFullLength='+iFullLength;
			if( iSpeed < 1 ) return 'iSpeed='+iSpeed;
		///////////
	
		var x = mPoints[0][0] + 'px';
		var y = mPoints[0][1] + 'px';
		var iWidth = 0;
		var iHeight = 0;
		var iSteps = 0;
		var mFullPathPoints = [ [ x , y ] ];
		var iN = 1;
	
		for(var i = 0 ; i < iPointsCount - 1 ; i++){
			iWidth = mPoints[i+1][0] - mPoints[i][0];
			iHeight = mPoints[i+1][1] - mPoints[i][1];
			iSteps = Math.round( mParts[i] / iSpeed ); 
		
			for(var j = 1 ; j <= iSteps ; j++){
				x = Math.round( mPoints[i][0] + j / iSteps * iWidth ) + 'px';
				y = Math.round( mPoints[i][1] + j / iSteps * iHeight ) + 'px';
				mFullPathPoints[iN] = [ x, y ];
				iN++;
			}
		}

		return mFullPathPoints;
	}
	
	

	Cloud.mAllPoints = Cloud.getAllPointsArray( mPoints, iPoints);

	
	Cloud.move();
	
}
/******************************************************************************/
	
	
	

