Import("../events/CreatorEvents.js") ;

/**
 * metody statyczne klasy Marquee, służące do animacji tekstu w formie szyldu informacyjnego
 * Przykład wywołania:
 *
 * Marquee.addText = ('tekst', 'http://www.wp.pl') ;
 * Marquee.start(params) ;
 *
 * params - tablica asocjacyjna parametrów opcjonalnych określających styl pola tekstowego (para styl: wartość)
 *
 *
 * Wygenerowany automatycznie kod musi znajdować się w kontenerze div, należy więc wywołać powyższe instrukcje w miejscu
 * pojawienia się szyldu.
 *
 * Klasa wykorzystuje metody klasy zewnętrznej: CreatorEvents
 *
 * Zmienne:
 *
 * Marquee.marginTreshold - określa ilość pikseli o jaką pomniejszany jest margines pola tekstowego w każdym cyklu animacji
 * (w pikselach)
 *
 * Marquee.listenerInterval - określa interwał zmiejszenia marginesu
 * (w milisekundach)
 *
 * Marquee.textInterval - określa interwał pojawienia się kolejnego tekstu z kolejki
 * (w milisekundach)
 *
 * Klasa utworzona dnia 20 marca 2008r.
 */

Marquee = function(params){

	Marquee.fieldName = 'marqueeField' ;
	Marquee.formName = 'marqueeText' ;

	Marquee.marginTreshold = 1 ; //px
	Marquee.listenerInterval = 20 ; //ms
	Marquee.textInterval = 500 ; //ms

	Marquee.params = {
		bgcolor: 'transparent',
		color: '#666666',
		border: '0px',
		cursor: 'pointer'
	};

	for(var i in params){
		Marquee.params[i] = params[i];
	}
};

Marquee.start = function(params){
	Marquee(params);
	Marquee.resetCounter();
	Marquee.insertCode();
	Marquee.resetAnimation();
	Marquee.listen() ;
};



Marquee.addText = function(string, href) {
	if(typeof(Marquee.text) == 'undefined')
		Marquee.text = [] ;
	Marquee.text.push({'text': string, 'href': href}) ;
}

Marquee.insertCode = function(){
	document.write(Marquee.getCode());
};

Marquee.getCode = function(){
	return '<form name="' + Marquee.formName + '" action="" style="overflow: hidden; zoom: 1; padding: 0px; margin: 0px;">' +
		   '<input type="text" name="' + Marquee.fieldName + '" style="' + Marquee.getTextFieldParams() + '"/>' +
		   '</form>';

};

Marquee.getTextFieldParams = function(){
	var styleString = '' ;
	for(var i in Marquee.params){
		if(i == 'bgcolor')
			styleString += 'background-color: '+Marquee.params[i]+'; ';
		else
			styleString += i+': '+Marquee.params[i]+'; ';
	}
	return styleString ;
};

Marquee.listen = function() {
	listenerId = window.setInterval("Marquee.checkAnimateTreshold();", Marquee.listenerInterval) ;
}

Marquee.checkAnimateTreshold = function() {
	if(Marquee.frameCounter == Marquee.loopTreshold) {
		window.clearInterval(Marquee.animateId);
		if(Marquee.text.length-1 == Marquee.count) {
			Marquee.resetCounter();
		}else
			Marquee.count ++ ;
		window.setTimeout("Marquee.resetAnimation()",Marquee.textInterval);
		Marquee.animate(Marquee.textMargin-=Marquee.marginTreshold);
	}else
		Marquee.animate(Marquee.textMargin-=Marquee.marginTreshold) ;
}

Marquee.animate = function(margin) {
	document.marqueeText.marqueeField.style.marginLeft = margin+'px' ;
	document.marqueeText.marqueeField.value = Marquee.text[Marquee.count]['text'] ;
	Marquee.frameCounter++ ;
}

Marquee.resetAnimation = function() {
	Marquee.textMargin = document.marqueeText.parentNode.offsetWidth ; 	 //px
	Marquee.frameCounter = 0 ;
	document.marqueeText.marqueeField.size = Marquee.text[Marquee.count]['text'].length + 2 ;
	var ce = new CreatorEvents(document.marqueeText.marqueeField);
 	ce.add('click', function(){ document.location.href = Marquee.text[Marquee.count]['href'] });
	Marquee.loopTreshold = document.marqueeText.parentNode.offsetWidth +  document.marqueeText.marqueeField.offsetWidth ;//px
}

Marquee.resetCounter = function() {
	Marquee.count = 0 ;
}