// (c) 2007 by Slawek Kruczek



var _fading_queue = Array();
var _fading_speed = 50;
var _default_fading_step = 0.02;

function _set_opacity(value)
{
	this.style.opacity = value;
	this.style.filter = 'alpha(opacity=' + value * 100 + ')';
}

function fade_it(e, start_opacity)
{
	e.set_opacity = _set_opacity;
	e.set_opacity(start_opacity);
	e.target_opacity = start_opacity;
	_fading_queue.push(e);
}

function fader()
{
	for(i in _fading_queue) {
		var e = _fading_queue[i];
		
		var target_opacity = parseFloat(e.target_opacity);
		var opacity = parseFloat(e.style.opacity);
		
		if(!e.fading_step)
			e.fading_step = _default_fading_step;
		
		if(target_opacity != opacity) {
			if(target_opacity < opacity) {
				e.set_opacity(opacity - e.fading_step);
				
				// rounding errors, dammit!
				if(target_opacity > parseFloat(e.style.opacity))
					e.style.opacity = target_opacity;
				if(parseFloat(e.style.opacity) < 0) {
					e.set_opacity(0);
				}
			}
			else if(target_opacity > opacity) {
				e.set_opacity(opacity + e.fading_step);
				
				if(target_opacity < parseFloat(e.style.opacity))
					e.style.opacity = target_opacity;
			}
			
			if(parseFloat(e.target_opacity) == parseFloat(e.style.opacity) && e.on_target_opacity_reached)
				e.on_target_opacity_reached();
		}
	}
	
	setTimeout('fader();', _fading_speed);
}


/*
 * Stuff for handling fading photos at the top of the page
 * specify available images in a global array available_images before including this script.
 */

var _time_between_changes = 5000;
var _time_on_top = 2000;
 
var _fading_image = null;
var _image_index = 0;

var _image_loaded = false;
var _time_elapsed = false;
var _in_progress = false;

var _container_id = 'header';


function _switch_image()
{
	_image_loaded = false;
	_fading_image.style.visibility = 'hidden';
	
	_fading_image.onload = new Function('_image_loaded = true;'); // it's not working anyway.
	_fading_image.src = available_images[_image_index++];
	
	if(_image_index >= available_images.length) {
		_image_index = 0;
		setTimeout('_time_elapsed = true', _time_between_changes * 2);
	}
	else
		setTimeout('_time_elapsed = true', _time_between_changes);
}

function _make_it_fade_away()
{
	setTimeout('_fading_image.target_opacity = 0', _time_on_top);
	_fading_image.on_target_opacity_reached = _switch_image;
}

function _fading_photos_manager()
{
	if(/*_image_loaded &&*/ _time_elapsed) {
		_time_elapsed = false;
		_in_progress = true;
		
		_fading_image.target_opacity = 1;
		_fading_image.style.visibility = 'visible';
		_fading_image.on_target_opacity_reached = _make_it_fade_away;
	}
	
	setTimeout('_fading_photos_manager()', 500);
}

function _fading_photos_setup()
{
	if(available_images) {
		_fading_image = document.createElement('img');
		_fading_image.onload = new Function('_image_loaded = true;');
		
		_fading_image.src = available_images[_image_index++];
		
		if(_image_index >= available_images.length)
			_image_index = 0;
		
		_fading_image.style.position = 'absolute';
		_fading_image.style.right = '0px';
		_fading_image.style.visibility = 'hidden';
		fade_it(_fading_image, 0);
		
		document.getElementById(_container_id).appendChild(_fading_image);
		
		setTimeout('_time_elapsed = true', _time_between_changes / 2);
		_fading_photos_manager();
	}
}




function setup()
{
	_fading_photos_setup();
	fader();
}
