﻿/// protected:
function StatusAnimator()
{
	//data
	this.iState = 0;
	this.iOpac = 100;
	this.bFading = true;
	this.hTimer = null;
	//properties
	this.div = null;
	// functions
	var me = this;
	// protected:
	// div lekerdezese, ahova a statusz szoveget irja
	this.GetDiv = function()
	{
		return me.div;
	}
	
	// protected:
	// div lekerdezese, ahova a statusz szoveget irja
	this.SetDiv = function(div)
	{
		me.div = div;
	}

	// private:
	this.ClearDiv = function()
	{
		if(me.div)
		{
			while(me.div.firstChild)
				me.div.removeChild(me.div.firstChild);
		}
	}

	// protected:
	// Kész állapot megjelenítése
	this.ShowReady = function(iCommandID)
	{
		if(!me.div)
			return;
		me.ClearDiv();
		NewTextTag("Kész.", me.div);
		me.StartAnimate();
	}

	// protected:
	// Hiba állapot megjelenítése
	this.ShowError = function(exp, iCommandID)
	{
		if(!me.div)
			return;

		me.ClearDiv();
		NewTextTag("Kommunikációs hiba!", me.div);
		me.StartAnimate();
	}

	// protected:
	// Letoltés állapotának megjelenítése:
	// iState: 0: uninitialized - open has not been called yet.
	//         1: loading - send has not been called yet.
	//         2: loaded - send has been called, but the response is not yet available.
	//         3: interactive - The response is being downloaded, and the responseText property holds partial data.
	//         4: completed - The response has been loaded and the request is completed.
	this.ShowState = function (iState)
	{
		if(iState != null) // was called from outside
			me.iState = iState;

		if(me.div)
		{
			me.ClearDiv();
			if(me.iState != 4 || iState != null)
			{
				if(me.iState > 0 && me.iState < 4)
					NewTextTag("Letöltés...", me.div);
				else
					NewTextTag("Kész", me.div);
				me.StartAnimate();
			}
			else
			{
				if(me.hTimer)
					clearInterval(me.hTimer);
			}
		}
	}

	// private:
	// Animáció indítása
	this.StartAnimate = function()
	{
		me.iOpac = 100;
		me.bFading = true;
		if(me.hTimer)
			clearInterval(me.hTimer);
		me.hTimer = setInterval(me.Animate, 80);
	}

	// private:
	// Animáció: opacity általi villogtatás
	this.Animate = function()
	{
		if(me.bFading)
			me.iOpac-= 5;
		else
			me.iOpac+= 5;
		
		if(me.iOpac <= 0)
		{
			me.bFading = false;
			me.ShowState(null);
		}
		if(me.iOpac >= 100)
		{
			me.bFading = true;
		}
		SetOpac(me.div, Math.max(0, Math.min(me.iOpac, 100)));
	}
}

