// News ticker
// 
//   Requires: Prototype.js library

var Tickr = {

	hrefs                   : [],
	headlines               : [],
	headline_num            : null,
	current_headline_num    : -1,
	current_headline_length : 0,
	current_headline_text   : '',
	headline_timeout        : 5000,
	char_timeout            : 35,
	ticker_id               : 'news_ticker',             // id of object in which to display ticker
	ticker_container_id     : 'news_ticker_container',   // id of news ticker container object
	headlines_id            : 'news_items',              // id of <ul> object that contains headlines
	ticker_elem             : null,

	// Grab <ul> and populate headline & href arrays
	init : function () {
		var headlines_elem = $(Tickr.headlines_id);
		if (headlines_elem) {
			var news_items = headlines_elem.childElements();
			Tickr.headline_num = news_items.length;
			for (var i = 0; i < Tickr.headline_num; i++) {
				var news_item = news_items[i].down('a');
				Tickr.hrefs[i] = news_item.getAttribute('href');
				Tickr.headlines[i] = news_item.innerHTML;
			}
		}
	},

	// Kickstart the ticker
	start : function () {
		Tickr.ticker_elem = $(Tickr.ticker_id);
		if (Tickr.ticker_elem) {
			$(Tickr.ticker_container_id).show();
			// Start headline animation
			Tickr.run();
		}
	},

	// Main ticker display function
	run : function () {

		var timeout;

		// Grab the next headline
		if (Tickr.current_headline_length == 0) {
			Tickr.current_headline_num++;
			Tickr.current_headline_num = Tickr.current_headline_num % Tickr.headline_num;
			Tickr.current_headline_text = Tickr.headlines[Tickr.current_headline_num].replace(/&quot;/g,'"').replace(/&amp;/g,'&');
			Tickr.ticker_elem.target = "_stormadvisory";
			Tickr.ticker_elem.href  = Tickr.hrefs[Tickr.current_headline_num];
			Tickr.ticker_elem.title = Tickr.current_headline_text;
		}

		Tickr.ticker_elem.update(
			Tickr.current_headline_text.substring(0, Tickr.current_headline_length) + Tickr.replace_text(Tickr.current_headline_text)
		);

		// Modify length of substring; define character timeout
		if (Tickr.current_headline_length != Tickr.current_headline_text.length) {
			Tickr.current_headline_length++;
			timeout = Tickr.char_timeout;
		}
		// Reset & set timeout for current headline
		else {
			Tickr.current_headline_length = 0;
			timeout = Tickr.headline_timeout;
		}
		// reduce, reuse, recycle
		setTimeout("Tickr.run()", timeout);
	},

	replace_text : function(headline_text) {
		if (Tickr.current_headline_length == headline_text.length)
			return '';
		if ((Tickr.current_headline_length % 2) == 1)
			return '_';
		else
			return '-';
	}
}

// Fire it up
Event.observe(window, 'load', function(){
	Tickr.init();
	Tickr.start();
}, false);