// ---------------------
// Options
// ---------------------
// * times in milliseconds

var scrollDelay = 60;				// time in between each small movement (larger is slower)
var delayBeforeScrolling = 2000;	// time to wait before scrolling the first time
var fadeTime = 3000;				// fade-in time

var feedLocation = '/blog/rss';		// location of the feed e.g. '/blog/rss'
var descriptionLength = 124;			// how much of the description to show. default 90
var bFadeMode = false;				// fade instead of scroll (true or false)
									//	* increase scrollDelay to at least 2000 for this
// ---------------------



// status values (don't edit)
var bStopped = true;
var bFadedIn = false;

function requestFeed() {

	$.get(feedLocation, '', buildFeedList, 'text');
}

function buildFeedList(data, textStatus) {

	if (textStatus != 'success') {
		setTimeout(requestFeed, 3000);
		return;
	}
		
	var feedScroller = document.getElementById('feedScroller');
	
	// extract the important information from the feeds
	var regexp = /<item>[\s]*<title>([^<]+)<\/title>[\s]*<description><!\[CDATA\[\s*([\s\S]*?)\]\]><\/description>\s*<link>([^<]*)<\/link>\s*<\/item>/ig;
	var match = null;
	
	while (match = regexp.exec(data)) {
	
		var title = match[1], desc = match[2], url = match[3];
		var newArticle = document.createElement('div');
		var newTitle = document.createElement('h1');
		var newDesc = document.createElement('p');
		
		newTitle.innerHTML = title;
		
		// shorten the description
		newDesc.innerHTML = desc.substr(0,descriptionLength) + '...';
		
		newArticle.setAttribute('class','feedScrollerArticle');
		newArticle.className = 'feedScrollerArticle';	// for IE6/7
		newArticle.url = url;
		
		$(newArticle).bind('click', function() {
			if (parent && parent.location)
				parent.location.href = this.url;
			else
				window.location = this.url;
		});
		
		if (jQuery.support.opacity)
			$(newArticle).fadeTo(0, 0);

		newArticle.appendChild(newTitle);
		newArticle.appendChild(newDesc);
		feedScroller.appendChild(newArticle);
	}
	
	$('.feedScrollerArticle').hover(function() {
		$(this).addClass('feedScrollerArticle-hover');
		bStopped = true;
	}, function() {
		$(this).removeClass('feedScrollerArticle-hover');
		bStopped = false;
	});
      			
	if (jQuery.support.opacity)
		$('.feedScrollerArticle').fadeTo(fadeTime, 1, feedScrollerFadedIn);
	else
		feedScrollerFadedIn();
}

// perform scrolling
function feedScrollerScroll() {
	
	if (!bStopped) {
		var feedScroller = document.getElementById('feedScroller');
		var children = feedScroller.childNodes;
		var firstArticle;
		
		// find the first article
		for (var i=0; i<children.length; i++) {
			
			if (children[i].nodeName == 'DIV') {
				firstArticle = children[i];
				break;
			}
		}
		
		if (bFadeMode) {
			$(feedScroller).fadeTo('slow', 0.8);
			$(firstArticle).fadeTo('slow', 0, function() {
			
				this.parentNode.appendChild(this);
				$(this.parentNode).fadeTo('slow', 1);
				$(this).fadeTo('slow', 1);
			});
		}
		else {
			feedScroller.scrollTop += 1;
			
			if (feedScroller.scrollTop >= firstArticle.offsetHeight) {
				
				feedScroller.appendChild(firstArticle);
				feedScroller.scrollTop = 0;
			}
		}
	}
	
	setTimeout(feedScrollerScroll, scrollDelay);
}

// start the scrolling
function feedScrollerStart() {
	
	bStopped = false;
	feedScrollerScroll();
}

// called when the fade-in has finished
function feedScrollerFadedIn() {
	
	if (!bFadedIn) {
		bFadedIn = true;
		setTimeout(feedScrollerStart, delayBeforeScrolling);
	}
}

$(document).ready(function(){
	
	requestFeed();
	
});
