/**
 * Newsticker-Fader.
 * @author Steffen Friedrich, steffen.friedrich@pingping.ag
 * @copy pingping.ag
 **/
function Newsticker(_config)
{	this.config = _config;
	this.init = _Newsticker_init;
	this.init();
}

function _Newsticker_init()
{	this.tickers = new Array();
	
	var tick;
	for(var sklave=0; tick=document.getElementById(this.config.id+'-'+sklave); sklave++)
	{	if(sklave) 
		{	tick.prevTick = this.tickers[sklave-1];
			this.tickers[sklave-1].nextTick = tick;
		}
		this.tickers.push( tick );
	}

	if(this.tickers.length>1)
	{	this.tickers[0].prevTick = this.tickers[this.tickers.length-1];
		this.tickers[this.tickers.length-1].nextTick = this.tickers[0];
		this.tick = this.tickers[0];
		
		this.element = document.getElementById(this.config.id);
		this.element.ticker = this;
		
		this.access = 'document.getElementById("'+this.config.id+'").ticker.';

		this.curCucu = 1;

		this.tickick = Math.round(this.config.delay/this.config.fadedelay);

		this.tickWay = this.tickick+this.config.steps;
		this.tickStep = this.tickWay;

		this.fade = _Newsletter_fade;

		this.controls = _Newsletter_controls;
		this.createBlender = _Newsletter_createBlender; // this.config.blendImage
		
		this.backing = _Newsletter_backing;
		this.forwarding = _Newsletter_forwarding;
		
		this.setVisibility = _Newsletter_setVisibility;
		this.setVisible = _Newsletter_setVisible;

	  if(this.config.blender)
	  	this.createBlender();

		if(this.config.toolbarContainer)
			this.controls();
		
		if(this.config.stopOnHover)
		{	this.element.onmouseover = _Newsticker_interrupt;
			this.element.onmouseout = _Newsticker_continue;
		}

		this.fade(this.curCucu);
	}
}

function _Newsticker_interrupt()
{	this.ticker.className+=' hover';
	this.ticker.paused = 1;
}

function _Newsticker_continue()
{	this.ticker.className = this.ticker.className.replace(/ hover/g, '');
	this.ticker.paused = 0;
}

function _Newsletter_createBlender()
{	this.blender = document.getElementById(this.config.blender);
}

function _Newsletter_controls()
{	var con = document.getElementById(this.config.toolbarContainer);

	this.tools = document.createElement('div');
	this.tools.id = this.config.id+'-tools';
	this.tools.className = 'toolbar';
	
	this.back = document.createElement('a');
	this.back.title = this.config.backLinkTitle;
	this.back.href = '#';
	this.back.className = 'back';
	this.back.appendChild(document.createElement('img'));
	this.back.lastChild.src = this.config.backImageSource;
	
	if(this.config.backImageLinkText)
	{	this.back.appendChild(document.createElement('span'));
		this.back.lastChild.innerHTML = this.config.backImageLinkText;
	}		
	
	this.back.ticker = this;
	this.back.onclick = function(){this.ticker.backing(); return false;}

	this.next = document.createElement('a');
	this.next.title = this.config.nextLinkTitle;
	this.next.href = '#';
	this.next.className = 'forward';
	
	if(this.config.nextImageLinkText)
	{	this.next.appendChild(document.createElement('span'));
		this.next.lastChild.innerHTML = this.config.nextImageLinkText;
	}		

	this.next.appendChild(document.createElement('img'));
	this.next.lastChild.src = this.config.nextImageSource;
	this.next.ticker = this;
	this.next.onclick = function(){this.ticker.forwarding(); return false;}

	this.tools.appendChild( this.back );
	this.tools.appendChild( this.next );
	
	con.appendChild(this.tools);
}

function _Newsletter_backing()
{	this.curCucu++;
	
	if(this.tickStep>this.config.steps*.75)
	{	this.tick.style.display='none';
		this.tick.visible = 0;
		this.tick = this.tick.prevTick;
		this.tick.visible = 1;
		this.tick.style.display='block';
	}
	
	this.tickStep = this.tickWay;
	this.setVisibility();
	
	this.fade(this.curCucu);
}

function _Newsletter_forwarding()
{	this.curCucu++;
	
	this.tick.style.display='none';
	this.tick.visible = 0;
	this.tick = this.tick.nextTick;
	this.tick.style.display='block';
	this.tick.visible = 1;
	
	this.tickStep = this.tickWay;
	this.setVisibility();	
	
	this.fade(this.curCucu);
}

function _Newsletter_fade(cucu)
{	if(this.curCucu==cucu)this.curCucu++;
	else return;

	if(this.paused)
	{	window.setTimeout(this.access+'fade('+this.curCucu+')',100);
		return;
	}

	if(this.tickStep>this.config.steps) 
	{	window.setTimeout(this.access+'fade('+this.curCucu+')',(this.tickStep-this.config.steps)*this.config.fadedelay);
		this.tickStep=this.config.steps;
	}else
	if(this.tickStep)
	{	window.setTimeout(this.access+'fade('+this.curCucu+')',this.config.fadedelay);
		this.setVisibility();
		this.tickStep--;
	}else
	{	this.tick = this.tick.nextTick;
		this.tickStep=this.tickWay;
		//this.setVisibility();
		window.setTimeout(this.access+'fade('+this.curCucu+')',this.config.fadedelay);
	}
}

function _Newsletter_setVisibility()
{	if(this.tickStep<=this.config.steps) this.setVisible(this.tickStep/this.config.steps);
	else this.setVisible(1);
}

function _Newsletter_setVisible(visibility)
{	if(this.blender)
	{	if(visibility<.5)
		{		visibility=visibility*2;
				if(!this.tick.nextTick.visible)
				{	this.tick.nextTick.style.display='block';
					this.tick.style.display='none';
					this.tick.nextTick.visible = 1;
					this.tick.visible = 0;
				}
	 	}	else visibility=(1-visibility)*2;

		this.blender.style.opacity=visibility;
		visibility = Math.round(visibility*100);
		this.blender.style.filter='alpha(opacity='+visibility+')';
	} else
	{	this.tick.style.opacity=visibility;
		this.tick.nextTick.style.opacity=1-visibility;
		visibility = Math.round(visibility*100);
		this.tick.style.filter='alpha(opacity='+visibility+')';
		this.tick.nextTick.style.filter='alpha(opacity='+(100-visibility)+')';

		if(!this.tick.nextTick.visible)
		{ this.tick.nextTick.style.display='block';
			this.tick.nextTick.visible=1;
		}
	}
}
