// JQuery RSS reader V2 by Ben Beckford
function RSSReader(params){

	var maxEntries = 0;
	var container;
	var upArrow;
	var downArrow;
	var moverWrapper;
	var contentHeight;
	var mover;
	
	if(params.className != null)
	{
		container = $("." + params.className);
	}
	else if(params.idName != null)
	{
		container = $("#" + params.idName);
	}
	else
	{
		if(!suppressWarnings)
		{
			alert("Error, wrapper class or id not specified");
		}
	}
	
	var upDownArrowsOn = false;
	if(params.upDownArrowsOn != null)
	{
		upDownArrowsOn = params.upDownArrowsOn;
	}
	
	container.empty();
	
	if(upDownArrowsOn == true)
	{
		upArrow = $('<div class="rssUpArrow"></div>').appendTo(container);
		moverWrapper = $('<div class="rssMoverWrapper"></div>').appendTo(container);
		mover = $('<div class="rssMover"></div>').appendTo(moverWrapper);
		
		downArrow = $('<div class="rssDownArrow"></div>').appendTo(container);
	
		contentHeight = container.height() - (upArrow.height() + downArrow.height() );
	
		moverWrapper.height(contentHeight);
		moverWrapper.css('overflow', 'hidden');
		
		upArrow.click(function(event){
			scrollContent("up");
		});
		downArrow.click(function(event){
			scrollContent("down");
		});
	}
	else
	{
		mover = $('<div class="rssMover"></div>').appendTo(container);
		contentHeight = container.height();
	}
	
	var scrollbarOn = false;
	var entryHeight = 25;
	var scrollbarThumbMaxHeight = 0;
	var scrollbarThumbMinHeight = 0;
	var ScrollbarWidth = 20;
	var ScrollbarMargin = 0;
	var scrollbarShowArrows = true;
	var scrollbarFloated = true;
	var columns = new Array();
	var titleLength = 1000;
	var truncationDots = false;
	var suppressWarnings = false;
	var currentMoverY = 0;
	var minY = 0;
	var scrollbarOverhangTop = 0;
	var scrollbarOverhangBottom = 0;
	var dragOverhangTop = 0;
	var dragOverhangBottom = 0;
	var callbackFunction;
	columns.push("title");
	
	if(params.scrollbar != null)
	{
		scrollbarOn = params.scrollbar;
	}
	if(params.entryHeight != null)
	{
		entryHeight = params.entryHeight;
	}
	if(params.thumbMaxHeight != null)
	{
		scrollbarThumbMaxHeight = params.thumbMaxHeight;
	}
	
	if(params.thumbMinHeight != null)
	{
		scrollbarThumbMinHeight = params.thumbMinHeight;
	}
	else
	{
		scrollbarThumbMinHeight = scrollbarThumbMaxHeight;
	}
	
	if(params.scrollbarWidth != null)
	{
		ScrollbarWidth = params.scrollbarWidth;
	}
	if(params.scrollbarMargin != null)
	{
		ScrollbarMargin = params.scrollbarMargin;
	}
	if(params.showArrows != null)
	{
		scrollbarShowArrows = params.showArrows;
	}
	if(params.floated != null)
	{
		scrollbarFloated = params.floated;
	}
	if(params.scrollbarOverhangTop != null)
	{
		scrollbarOverhangTop = params.scrollbarOverhangTop;
	}
	if(params.scrollbarOverhangBottom != null)
	{
		scrollbarOverhangBottom = params.scrollbarOverhangBottom;
	}
	if(params.dragOverhangTop != null)
	{
		dragOverhangTop = params.dragOverhangTop;
	}
	if(params.dragOverhangBottom != null)
	{
		dragOverhangBottom = params.dragOverhangBottom;
	}
	
	if(params.columns != null)
	{
		columns = params.columns;
	}
	if(params.titleLength != null)
	{
		titleLength = params.titleLength;
	}
	if(params.truncationDots != null)
	{
		truncationDots = params.truncationDots;
	}	
	if(params.suppressWarnings != null)
	{
		suppressWarnings = params.suppressWarnings;
	}	
	if(params.callback != null)
	{
		callbackFunction = params.callback;
	}	
	if(params.maxEntries != null)
	{
		maxEntries = params.maxEntries;
	}
	
	if(params.xmlPath.search('feedproxy.php') == -1)
	{
		params.xmlPath = params.xmlPath.split('http://').join('feedproxy.php?url=http://');
	}
	
	if(params.linkTarget == null)
	{
		params.linkTarget = "_parent";
	}

	
	$.ajax({
		type: "GET",
		url: params.xmlPath,
		dataType: "xml",
		success: function(d) {
					
			var i = 0;
			var totalEntries = 0;
			
			var itemName = 'item';
			
			if($(d).find('item').length < 1)
			{
				itemName = 'entry';
			}
			
			$(d).find(itemName).each(function() {
	 			
				if(maxEntries == 0 || i < maxEntries)
				{
					var $item = $(this);
					var link = $item.find('link').text();
					if(link == null || link == '')
					{
						$item.find('link').each(function() {
							if($(this).attr('rel') == 'alternate')
							{
								link = $(this).attr('href');
							}
						});
					}
					var title = truncateTitle($item.find('title').text());
					var description = $item.find('description').text();
					var location = $item.find('location').text();
					
					var category = $item.find('category').text().split(' ').join('');
					if(category == null) { category = ""; }
					
					var pubDate = $item.find('pubDate').text();
					var dateSplit = pubDate.split(' ');
					var timeZone = pubDate.slice(-3);
					var dayName = dateSplit[0];
					var dayName = dayName.split(',').join('');
					var date = dateSplit[1] + ' ' + dateSplit[2] + ' ' + dateSplit[3];
					
					
					var oddEvenClass = "";
					
					if(i % 2 != 0)
					{
						oddEvenClass = 'even';
					}
					else
					{
						oddEvenClass = 'odd';
					}
					
					var html = "";
					html += '<div class="entry ' + oddEvenClass + ' ' + category + '">';
					html += '<a href="' + link + '" target="'+params.linkTarget+'">';
					
					var j;
					for(j = 0; j < columns.length; j++)
					{
						var colContents = "";
						
						switch(columns[j])
						{
							case 'title':
								colContents = title;
								break;
							case 'location':
								colContents = location;
								break;
							case 'description':
								colContents = description;
								break;
							case 'date':
								colContents = date;
								break;
						}
						
						html += '<div class="entry'+columns[j]+'">'+colContents+'</div>';
					}
					
					html += '<div style="clear: both;"></div></a></div>';
		 
					mover.append(html);
					/*
					$(".entry:last", mover).click(function(event){
						 event.preventDefault();
						 var localLink = link;
						 window.location = localLink;
					});
					*/
					i++;
					totalEntries = i;
				}
			});
			
			entryHeight = $(".entry", mover).outerHeight();
			minY = -(totalEntries * entryHeight);
			
			if(scrollbarOn)
			{
				var newHeight = i * $(" .entry:last", container).height();
				container.jScrollPane({height:newHeight, dragMaxHeight: scrollbarThumbMaxHeight, dragMinHeight: scrollbarThumbMinHeight, scrollbarWidth: ScrollbarWidth, scrollbarMargin: ScrollbarMargin, animateTo: true, showArrows: scrollbarShowArrows, scrollbarOverhangTop: scrollbarOverhangTop, scrollbarOverhangBottom: scrollbarOverhangBottom, dragOverhangTop: dragOverhangTop, dragOverhangBottom: dragOverhangBottom});
				if(scrollbarFloated)
				{
					container.width('100%');
				}
			}
			
			if(params.rssLoadedFunction != null)
			{
				params.rssLoadedFunction();
			}
			else if(params.callback != null)
			{
				params.callback();
			}
			
		},
		error:function (xhr, ajaxOptions, thrownError){
			if(!suppressWarnings)
			{
				alert('Could not load XML "' + params.xmlPath + '", thrown error: ' + thrownError );
			}
		}
	});
		
	var truncateTitle = function(STRING)
	{
		if(STRING.length > titleLength)
		{
			var newTitleLength = titleLength;
			
			if(truncationDots)
			{
				newTitleLength -= 3;
			}
			
			var done = false;
			var isLetterRegex  = /^[a-z\u00C0-\u00ff]+$/;
			
			while(done == false)
			{
				STRING = STRING.substring(0, newTitleLength);
				var lastSpace = STRING.lastIndexOf(' ');
				STRING = STRING.substring(0, lastSpace);
				
				newTitleLength = STRING.length;
				var testString = STRING.split("");
				
				if(isLetterRegex.test(testString[testString.length-1]))
				{
					done = true;
				}
				else
				{
					newTitleLength--;
				}
			}			
			
			if(truncationDots)
			{
				STRING += "...";
			}
		}
		
		return(STRING);
	}
	
	var selectCategory = function(catString)
	{
		mover.stop().animate(
		{marginTop: 0},
		{duration: 300,
		easing: 'easeOutExpo'});
		
		currentMoverY = 0;
		
		$('.rssFilterTab').removeClass('on');
		$('.rssFilterTab.' + catString).addClass('on');
		
		
		if(catString == 'all')
		{
			
			$('.entry', mover).stop().slideDown(300);
			
			minY = -(totalEntries * entryHeight);
		}
		else
		{
			$('.entry', mover).stop().slideUp(300);
			
			$('.entry.'+catString, mover).stop().slideDown(300);
			
			$('.entry.'+catString, mover).length
			
			minY = -($('.entry.'+catString, mover).length * entryHeight);
			
		}
	}
	this.selectCategory = selectCategory;
	
	var scrollContent = function(direction)
	{
		if(direction == 'down')
		{
			if(currentMoverY - contentHeight > minY)
			{
				currentMoverY -= contentHeight;
				
				mover.stop().animate({
				marginTop: currentMoverY
				}, 500, "easeOutExpo");
			}
		}
		else if (currentMoverY < 0)
		{
			currentMoverY += contentHeight;
			
			mover.stop().animate({
				marginTop: currentMoverY
				}, 500, "easeOutExpo");
		}
	}


}


