/* ===== Ticker ===== 
 * by Anders Ytterström <anders.ytterstrom@gmail.com>
 * About: madr.se/code/ticker | madr.se/blog/101
 * License: MIT style
 */
var Ticker = function(tickerElm) {
	if(!removeClass || !addClass || !DOMReady || !addEvent || !document.getElementsByTagName) return;
	var wrp = tickerElm;
	var interval = { letters:50, lines:4000 };
	var pos = 0;
	var current = 0;
	var maxwidth = 0;
	var elms = [];
	var chars = [];
	var max = [];
	var c = this;
	return {
		init: function(){
			if (typeof wrp == "undefined") return;
			addClass(wrp, 'on');
			elms = wrp.getElementsByTagName('a');
			for (var i=0, maxI=elms.length; i<maxI; i++) {
				chars[i] = elms[i].innerHTML.replace(/^\s+|\s+$/g,'').split("");
				max[i] = chars[i].length;
				elms[i].innerHTML="";
			}
			this.calcMaxX(wrp);
			addClass(elms[0].parentNode,"active");
			pos = 0;
			this.printChars();
			var c = this;
			addEvent(window,'resize',function(){
				c.calcMaxX(wrp);
			});
		},
		calcMaxX : function(tickerElm){
			tickerElm.style.position = "relative";
			var headerX = tickerElm.getElementsByTagName('*')[0].offsetWidth;
			maxwidth = tickerElm.offsetWidth - headerX;
			tickerElm.style.position = "";
		},
		printChars: function(evt){
			var c = this;
			if (max[current] > pos) {
				if (elms[current].printMovement) {
					clearTimeout(elms[current].printMovement)
				}
				elms[current].innerHTML = elms[current].innerHTML + chars[current][pos];
				pos++;
				var overflow = maxwidth - (elms[current].offsetWidth + 20);
				if (overflow < 0) {
					elms[current].style.marginLeft = (overflow - 5) + "px";
				}
				elms[current].printMovement = setTimeout(function(){
					c.printChars();
				}, interval.letters);
			}
			else {
				pos = 0;
				elms[current].printMovement = setTimeout(function(){
					c.nextLine();
				}, interval.lines);
				return true;
			}
		},

		cleanup: function(elm){
			removeClass(elm.parentNode, "active");
			elm.style.marginLeft = "";
			elm.innerHTML="";
		},

		nextLine: function(){
			if (current >= elms.length) {
				return true;
			}
			this.cleanup(elms[current]);
			var next;
			if (current < (elms.length - 1)) {
				next = current + 1;
				current++;
			}
			else {
				next = current = 0;
			}
			addClass(elms[next].parentNode,"active");
			this.printChars();
		}
	}
}

DOMReady(function(){
	var elms = elmsByClass("ticker");
	for(var i=0,max=elms.length; i<max; i++){
		new Ticker(elms[i]).init();
	}
});/* === /ticker === */


