var cms_application_fader_c = function()
{
	this.target_opacity_i = 100;
	this.step_i = 100;
	this.fade_out_i = 80;
	this.update_interval_i = 10;

	this.interval_i = 4000;
	this.loop_count_i = 0;

	this.image_path_a = [];
	this.image_id_s = '';
	this.background_id_s = '';

	this.fading_b = false;
};

/**/

cms_application_fader_c.prototype.setOpacity = function(element_o, value_i)
{
	element_o.style.filter = 'alpha(opacity:' + value_i + ')';
	element_o.style.opacity = value_i / 100;
};

cms_application_fader_c.prototype.setFadeIn = function(element_o)
{
	var this_o = this;

	this.fading_b = true;

	var extreme_opacity_i = this.target_opacity_i + ((this.step_i / 100) * this.fade_out_i);
	var current_opacity_i = 0;

	var setFadeInStep = function()
	{
		if (current_opacity_i < this_o.target_opacity_i)
		{
			current_opacity_i += (extreme_opacity_i - current_opacity_i) / this_o.step_i;

			this_o.setOpacity(element_o, current_opacity_i);
		}
		else
		{
			clearInterval(interval_i);

			this_o.fading_b = false;
		}
	};

	var interval_i = setInterval(setFadeInStep, this.update_interval_i);
};

cms_application_fader_c.prototype.setImageFade = function(path_s)
{
	if (!this.fading_b)
	{
		var old_path_s = this.image_o.style.backgroundImage.substring(4, this.image_o.style.backgroundImage.length - 1);

		this.background_o.style.backgroundImage = 'url(' + old_path_s + ')';

		this.setOpacity(this.image_o, 0);
		this.image_o.style.backgroundImage = 'url(' + path_s + ')';

		this.setFadeIn(this.image_o);
	}
};

cms_application_fader_c.prototype.setLoop = function()
{
	var this_o = this;

	var loop_count_i = 1;
	var image_index_i = 1;

	var setNextImage = function()
	{
		if (image_index_i == this_o.image_path_a.length)
		{
			if (this_o.loop_count_i)
			{
				if (loop_count_i == this_o.loop_count_i)
				{
					clearInterval(interval_i); return false;
				}
			}

			loop_count_i++;
			image_index_i = 0;
		}

		this_o.setImageFade(this_o.image_path_a[image_index_i]);

		image_index_i++;
	};

	var interval_i = setInterval(setNextImage, (this.interval_i < 4000) ? 4000 : this.interval_i);
};

cms_application_fader_c.prototype.setPreload = function()
{
	var this_o = this;
	/*var image_a = new Array();

	for (index_i in this.image_path_a)
	{
		image_a[index_i] = new Image();
		image_a[index_i].src = this.image_path_a[index_i];
	}*/

	this_o.setLoop();
};

/**/

cms_application_fader_c.prototype.setTargetOpacity = function(value_i)
{
	this.target_opacity_i = value_i;
};

cms_application_fader_c.prototype.setStepSize = function(value_i)
{
	this.step_i = value_i;
};

cms_application_fader_c.prototype.setFadeOutSpeed = function(value_i)
{
	this.fade_out_i = value_i;
};

cms_application_fader_c.prototype.setUpdateInterval = function(value_i)
{
	this.update_interval_i = value_i;
};

cms_application_fader_c.prototype.setInterval = function(value_i)
{
	this.interval_i = (value_i < 4000) ? 4000 : value_i;
};

cms_application_fader_c.prototype.setLoopCount = function(count_i)
{
	this.loop_count_i = count_i;
};

cms_application_fader_c.prototype.setImageId = function(id_s)
{
	this.image_id_s = id_s;
};

cms_application_fader_c.prototype.setBackgroundId = function(id_s)
{
	this.background_id_s = id_s;
};

cms_application_fader_c.prototype.setImagePath = function(path_s)
{
	this.image_path_a[this.image_path_a.length] = path_s;
};

cms_application_fader_c.prototype.setStart = function()
{
	this.image_o = document.getElementById(this.image_id_s);
	this.background_o = document.getElementById(this.background_id_s);

	if (!this.image_o || !this.background_o) return false;

	this.setPreload();
};
