liwe.fx.fade = {};

liwe.fx.fade._do_fade_in = function ( e )
{
	e.fade_val = liwe.fx.set_opacity ( e, e.fade_val + e.fade_amount );
	
	if ( e.fade_val < 100 ) setTimeout ( function () { liwe.fx.fade._do_fade_in ( e ); }, e.fade_millis );
	else if ( e.fade_cback ) e.fade_cback ( e );
};

liwe.fx.fade._do_fade_out = function ( e )
{
	e.fade_val = liwe.fx.set_opacity ( e, e.fade_val - e.fade_amount );

	if ( e.fade_val > 0 ) setTimeout ( function () { liwe.fx.fade._do_fade_out ( e ); }, e.fade_millis );
	else if ( e.fade_cback ) e.fade_cback ( e );
};

/* =======================================================================
	PUBLIC FUNCTIONS
======================================================================= */
liwe.fx.fade_in = function ( el, amount, millis, cback )
{
	el.fade_cback = cback;

	if ( ! amount ) amount = 10;
	if ( ! millis ) millis = 100;

	el.fade_amount = amount;
	el.fade_millis = millis;

	el.fade_val = liwe.fx.set_opacity ( el, 0 );
	// el.style.visibility = 'inherit';

	liwe.fx.fade._do_fade_in ( el );
};

liwe.fx.fade_out = function ( el, amount, millis, cback )
{
	el.fade_cback = cback;

	if ( ! amount ) amount = 10;
	if ( ! millis ) millis = 100;

	el.fade_amount = amount;
	el.fade_millis = millis;

	el.fade_val = liwe.fx.set_opacity ( el, 100 );
	el.style.visibility = 'inherit';

	liwe.fx.fade._do_fade_out ( el );
};
