////////////////////////////////////////////////////////////////////////////////////
//
// Waldemar Biernacki, 2009-2010, all rights reserved
// http://sao.pl
//
////////////////////////////////////////////////////////////////////////////////////

var _animacja          = new Array();
var _animacja_interval = new Array();

//------------------------------------------------------------------------------

function animacja_rejestruj ( nr, start, end, krok  )
{

	if ( _animacja_interval[nr] ) animacja_stop( nr );

	_animacja_interval[nr] = setInterval( 'animacja_zmiana('+nr+')', krok );

	_animacja[nr] = new Array();
	_animacja[nr]._animacja_iden  = [];
	_animacja[nr]._animacja_stan  = start;
	_animacja[nr]._animacja_od    = start;
	_animacja[nr]._animacja_do    = end;
	_animacja[nr]._animacja_krok  = krok;

	_animacja[nr].element = new Array();
	_animacja[nr].anim_od = new Array();
	_animacja[nr].anim_do = new Array();
	_animacja[nr].paramet = new Array();
	_animacja[nr].jednost = new Array();
	_animacja[nr].wart_od = new Array();
	_animacja[nr].wart_do = new Array();
	_animacja[nr].funkcja = new Array();

	_animacja[nr].ilosc   = 0;

}

//------------------------------------------------------------------------------

function animacja_zrob ( nr, element, anim_od, anim_do, paramet, jednost, wart_od, wart_do, funkcja )
{

	var el = document.getElementById( element );

	if ( !el || wart_od == wart_do || anim_od >= anim_do ) return;

	if ( paramet == 'left'        && wart_od == 'now' ) wart_od = parseInt( el.style.left        );  
	if ( paramet == 'marginLeft'  && wart_od == 'now' ) wart_od = parseInt( el.style.marginLeft  );  
	if ( paramet == 'marginTop'   && wart_od == 'now' ) wart_od = parseInt( el.style.marginTop   );  
	if ( paramet == 'marginRight' && wart_od == 'now' ) wart_od = parseInt( el.style.marginRight );  
	if ( paramet == 'top'         && wart_od == 'now' ) wart_od = parseInt( el.style.top         );  
	if ( paramet == 'width'       && wart_od == 'now' ) wart_od = parseInt( el.style.width       );  
	if ( paramet == 'height'      && wart_od == 'now' ) wart_od = parseInt( el.style.height      );  
	if ( paramet == 'borderWidth' && wart_od == 'now' ) wart_od = parseInt( el.style.borderWidth );  
	if ( paramet == 'fontSize'    && wart_od == 'now' ) wart_od = parseInt( el.style.fontSize    );  
	if ( paramet == 'opacity'     && wart_od == 'now' ) wart_od =           el.style.opacity;  
	if ( paramet == 'fontWeight'  && wart_od == 'now' ) wart_od =           el.style.fontWeight;  

	_animacja[nr].element[_animacja[nr].ilosc] = element;
	_animacja[nr].anim_od[_animacja[nr].ilosc] = anim_od;
	_animacja[nr].anim_do[_animacja[nr].ilosc] = anim_do;
	_animacja[nr].paramet[_animacja[nr].ilosc] = paramet;
	_animacja[nr].jednost[_animacja[nr].ilosc] = jednost;
	_animacja[nr].wart_od[_animacja[nr].ilosc] = wart_od;
	_animacja[nr].wart_do[_animacja[nr].ilosc] = wart_do;
	_animacja[nr].funkcja[_animacja[nr].ilosc] = funkcja;

	_animacja[nr].ilosc++;
}


//------------------------------------------------------------------------------

function animacja_zmiana ( nr )
{ 
	if ( !_animacja[nr].ilosc || _animacja[nr]._animacja_od == _animacja[nr]._animacja_do ) return 0;

    var i=0;
	while ( _animacja[nr].element[i] ) {

		var el = document.getElementById( _animacja[nr].element[i] );

		if ( el ) {

			if (_animacja[nr].anim_od[i]     <  _animacja[nr].anim_do[i]     &&
				_animacja[nr].anim_od[i]     <= _animacja[nr]._animacja_stan && 
				_animacja[nr]._animacja_stan <= _animacja[nr].anim_do[i]
			) {

					   if ( _animacja[nr].paramet[i] == 'left'   ) {

					el.style.left =			animacja_licz_liczbe( nr, el, i ) + _animacja[nr].jednost[i];

				} else if ( _animacja[nr].paramet[i] == 'marginLeft'   ) {

					el.style.marginLeft =	animacja_licz_liczbe( nr, el, i ) + _animacja[nr].jednost[i];

				} else if ( _animacja[nr].paramet[i] == 'marginTop'   ) {

					el.style.marginTop =	animacja_licz_liczbe( nr, el, i ) + _animacja[nr].jednost[i];

				} else if ( _animacja[nr].paramet[i] == 'marginRight'   ) {

					el.style.marginRight =	animacja_licz_liczbe( nr, el, i ) + _animacja[nr].jednost[i];

				} else if ( _animacja[nr].paramet[i] == 'top'    ) {

					el.style.top =			animacja_licz_liczbe( nr, el, i ) + _animacja[nr].jednost[i];

				} else if ( _animacja[nr].paramet[i] == 'width'  ) {

					el.style.width =		animacja_licz_liczbe( nr, el, i ) + _animacja[nr].jednost[i];

				} else if ( _animacja[nr].paramet[i] == 'height' ) {

					el.style.height =		animacja_licz_liczbe( nr, el, i ) + _animacja[nr].jednost[i];

				} else if ( _animacja[nr].paramet[i] == 'borderWidth' ) {

					el.style.borderWidth =	animacja_licz_liczbe( nr, el, i ) + _animacja[nr].jednost[i];

				} else if ( _animacja[nr].paramet[i] == 'fontSize' ) {

					el.style.fontSize =		parseInt(animacja_licz_liczbe( nr, el, i )) + _animacja[nr].jednost[i];

				} else if ( _animacja[nr].paramet[i] == 'opacity'  ) {

					el.style.opacity =		parseInt( animacja_licz_liczbe( nr, el, i ))/100;

				} else if ( _animacja[nr].paramet[i] == 'fontWeight' ) {

					el.style.fontWeight = 100 * parseInt(animacja_licz_liczbe( nr, el, i )/100 );



				} else if ( _animacja[nr].paramet[i] == 'color'  ) {

					el.style.color = 			animacja_licz_kolor( nr, el, i );

				} else if ( _animacja[nr].paramet[i] == 'backgroundColor' ) {

					el.style.backgroundColor = 	animacja_licz_kolor( nr, el, i );

				} else if ( _animacja[nr].paramet[i] == 'borderColor' ) {

					el.style.borderColor = 		animacja_licz_kolor( nr, el, i );
				}
			}
		}

		i++;
	}

	if ( _animacja[nr]._animacja_do > _animacja[nr]._animacja_od ) {

		_animacja[nr]._animacja_stan  += _animacja[nr]._animacja_krok;
		if ( _animacja[nr]._animacja_stan > _animacja[nr]._animacja_do ) animacja_stop( nr );

	} else {

		_animacja[nr]._animacja_stan  -= _animacja[nr]._animacja_krok;
		if ( _animacja[nr]._animacja_stan < _animacja[nr]._animacja_od ) animacja_stop( nr );
	}

	return 0;
}

//------------------------------------------------------------------------------

function animacja_stop ( nr )
{

	clearInterval( _animacja_interval[nr] );

	_animacja[nr] = undefined;
}


//------------------------------------------------------------------------------

function animacja_licz_liczbe ( nr, el, i )
{

	var rel_stan =  ( _animacja[nr]._animacja_stan - _animacja[nr].anim_od[i] ) / ( _animacja[nr].anim_do[i] - _animacja[nr].anim_od[i] ); 

	var wartosc = _animacja[nr].wart_od[i] + ( _animacja[nr].wart_do[i] - _animacja[nr].wart_od[i] ) * rel_stan;


	return wartosc;
}

//------------------------------------------------------------------------------

function animacja_licz_kolor ( nr, el, i )
{
	var rel_stan =  ( _animacja[nr]._animacja_stan - _animacja[nr].anim_od[i] ) / ( _animacja[nr].anim_do[i] - _animacja[nr].anim_od[i] ); 

	var od_koloru = _animacja[nr].wart_od[i];
	var do_koloru = _animacja[nr].wart_do[i];

	var red1 = parseInt(od_koloru.slice(1, 3),16);
	var red2 = parseInt(do_koloru.slice(1, 3),16);
	var red = parseInt( red1+(red2-red1) * rel_stan );
	red = Math.max( 0, Math.min( red ,255));

	var gre1 = parseInt(od_koloru.slice(3, 5), 16);
	var gre2 = parseInt(do_koloru.slice(3, 5), 16);
	var gre = parseInt( gre1+(gre2-gre1) * rel_stan );
	gre = Math.max( 0, Math.min( gre ,255));

	var blu1 = parseInt(od_koloru.slice(5, 7), 16);
	var blu2 = parseInt(do_koloru.slice(5, 7), 16);
	var blu = parseInt( blu1+(blu2-blu1) * rel_stan );
	blu = Math.max( 0, Math.min( blu ,255));

	var wartosc = '#'+getHex(red)+getHex(gre)+getHex(blu); 

	return wartosc; 
}

//------------------------------------------------------------------------------

function zpnn ( kolor )
{
	kolor = kolor.substr(kolor.indexOf('(')+1);
	kolor = kolor.substr(0,kolor.indexOf(')'));
	var tmp = kolor.split(',');
	return '#'+getHex(tmp[0])+getHex(tmp[1])+getHex(tmp[2]);
}

//------------------------------------------------------------------------------

function getHex( dec )
{
	var hexArray = new Array( "0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f");
	var code1 = Math.floor(dec / 16);
	var code2 = dec - code1 * 16;
	var decToHex = hexArray[code1]+hexArray[code2];
	return (decToHex);
}


function wylicz_kolor ( kat, c, j )
{
	kat = parseInt(kat) % 360;
	if ( kat < 0 ) kat += 360;
	przyrost = 100 * ( kat % 60 ) / 60;

	if ( kat <   60 ) { od_koloru = '#'+j+j+c+c+c+c;	do_koloru = '#'+j+j+j+j+c+c; } else
	if ( kat <  120 ) { od_koloru = '#'+j+j+j+j+c+c;	do_koloru = '#'+c+c+j+j+c+c; } else
	if ( kat <  180 ) { od_koloru = '#'+c+c+j+j+c+c;	do_koloru = '#'+c+c+j+j+j+j; } else
	if ( kat <  240 ) { od_koloru = '#'+c+c+j+j+j+j;	do_koloru = '#'+c+c+c+c+j+j; } else
	if ( kat <  300 ) { od_koloru = '#'+c+c+c+c+j+j;	do_koloru = '#'+j+j+c+c+j+j; } else
	if ( kat <  360 ) { od_koloru = '#'+j+j+c+c+j+j;	do_koloru = '#'+j+j+c+c+c+c; }

	return animacja_licz_kolor ( od_koloru, do_koloru, przyrost );
}

 
