google.load("feeds", "1");

//gather feed info
google.setOnLoadCallback(OnFeatureLoad);

function OnFeatureLoad() {
	//set up the feed	
	var	featureFeed = new google.feeds.Feed("http://www.cia.edu/blog/?feed=rss2&cat=86");
	featureFeed.setNumEntries(20);
	featureFeed.setResultFormat(google.feeds.Feed.XML_FORMAT);
	featureFeed.load(featureFeedLoaded);	
}	

//DataObject Class
function DataObject($id, $order, $title, $description, $image, $linkTo)
{
	this.id = $id;
	this.order = $order;
	this.title = $title;
	this.description = $description;
	this.image = $image;
	this.linkTo = $linkTo;
}

var count = 0;

//create a loop and fill the info in, provided the post is categorized as "featured"
function featureFeedLoaded(result){
	if(!result.error){
		
		// Get all items returned.
		var entries = result.xmlDocument.getElementsByTagName("item");
		
		
		/*
		var imgArray = new Array();
		if(BrowserDetect.browser == 'Firefox' || BrowserDetect.browser == 'Explorer'){
		} else {
			var targetString = (new XMLSerializer()).serializeToString(result.xmlDocument);
			var initNum = 0;
			while (targetString.indexOf('media:thumbnail', initNum) > 0) {
				var initNum = targetString.indexOf('media:thumbnail', initNum);
				
				var subStr = targetString.substr(initNum, targetString.length);
				var num2 = subStr.indexOf('/>');
				
				var miniString = targetString.substr(initNum, num2);
				
				var num3 = miniString.indexOf('http:');
				var subStr2 = miniString.substr(num3, miniString.length);
				var num4 = subStr2.indexOf('"');
				
				var finalString = miniString.substr(num3, num4);
				imgArray.push(finalString);
				
				initNum += 15;
			}
		}
		*/
		var imgArray = new Array();
		if(BrowserDetect.browser == 'Firefox' || BrowserDetect.browser == 'Explorer'){
		} else {
			var targetString = (new XMLSerializer()).serializeToString(result.xmlDocument);
			var initNum = 0;
			while (targetString.indexOf('<item>', initNum) > 0) {
				
				
				var itemNumA = targetString.indexOf('<item>', initNum);
				var itemNumB = targetString.indexOf('item>', itemNumA + 2);
				
				var itemString = targetString.substr(itemNumA, itemNumB);
				
				var mediaNumA = itemString.indexOf('media:thumbnail');
				
				var subStr = itemString.substr(mediaNumA, itemString.length);
				var mediaNumB = subStr.indexOf('/>');
				
				var miniString = itemString.substr(mediaNumA, mediaNumB);
				
				
				var num3 = miniString.indexOf('http:');
				var subStr2 = miniString.substr(num3, miniString.length);
				var num4 = subStr2.indexOf('"');
				
				var finalString = miniString.substr(num3, num4);
				imgArray.push(finalString);
				
				initNum = itemNumB;
			}
		}
		
		
		
		/*
		var items = result.xmlDocument.getElementsByTagName("item");
		for (var i = 0; i < items.length; i++) {
			var titleElement = items[i].getElementsByTagName("title")[0];
			var title = titleElement.firstChild.nodeValue;

			var votesElement = google.feeds.getElementsByTagNameNS(items[i], "http://digg.com/docs/diggrss/", "diggCount")[0];
			var votes = votesElement.firstChild.nodeValue;

			var div = document.createElement("div");
			div.appendChild(document.createTextNode(title + " (" + votes + " votes)"));
			container.appendChild(div);
		}
		*/
		
		
		for (var i = 0; i < entries.length; i++) {
			var entry = entries[i];
			
			//only chose the featured posts
			for(var j = 0; j < entry.getElementsByTagName('category').length; j++){
				var cat = entry.getElementsByTagName('category')[j].firstChild.nodeValue;
				
				if(cat == "Featured"){
					
					count ++;
					
					var index = i;
					
					var featuredTitle = entry.getElementsByTagName('title')[0].firstChild.nodeValue;
					var featuredDesc = entry.getElementsByTagName('description')[0].firstChild.nodeValue;
					
					//shorten the desc
					featuredDesc = featuredDesc.substr(0, 165);
					featuredDesc += '...';
					
					/* OLD
					var featuredThumb = '';
					var media = entry.getElementsByTagName('media:content')[0];
					if(BrowserDetect.browser == 'Firefox' || BrowserDetect.browser == 'Explorer'){
						if(media != undefined){
							//var featuredThumb = entry.getElementsByTagName('media:content')[0].getAttribute('url');
							featuredThumb = media.getElementsByTagName('media:thumbnail')[0].getAttribute('url');
						} else {
							featuredThumb = '';
						}
					} else {
						featuredThumb = imgArray[index];// + 1
					}
					*/
					
					var featuredThumb = "";
					// Note: Loop through all nodes in the feed to get the correct one
					for (var p = 0; p < entry.childNodes.length; p++) {
						if (entry.childNodes[p].nodeName == 'content:encoded') {
							//alert(" - " + entry.childNodes[p].nodeName + ':  ' + entry.childNodes[p].firstChild.nodeValue);
							var srcString 	= entry.childNodes[p].firstChild.nodeValue.toString();
							var srcNumA 	= srcString.indexOf('src="', 0);
							var srcNumB 	= srcString.indexOf('.jpg', srcNumA);
							var srcFinal 	= srcString.substring(srcNumA + 5, srcNumB + 4);
							featuredThumb 	= srcFinal;
							
						}
					}
					
					var featuredLink = entry.getElementsByTagName('link')[0].firstChild.nodeValue;
					
					/**/
					//now create the objects
					//use eval() to create dynamic vars
					//eval('var _obj' + count + ' = new DataObject(' + '"' + count + '"' + ',' + count + ',' + '"' + featuredTitle + '"' + ',' + '"' + featuredDesc + '"' + ',' + '"' + featuredThumb + '"' + ',' + '"' + featuredLink + '"' + ');');
					eval("var _obj" + count + "= new DataObject()");
					
					//create the variables
					var temp = eval("_obj" + count);
					
					//push in the data
					_dataObjects.push(temp);
					
					//construct the object one piece at a time...
					eval('_obj' + count + '.id = "' + count + '"');
					eval('_obj' + count + '.order = ' + count);
					eval('_obj' + count + '.title = "' + featuredTitle + '"');
					eval('_obj' + count + '.description = "' + featuredDesc + '"');
					eval('_obj' + count + '.image = "' + featuredThumb + '"');
					eval('_obj' + count + '.linkTo = "' + featuredLink + '"');
					
				}			
			}			
		}
		//if we have all the data, then write it out
		init();
	}
}

//Add instances of DataObject to array
var _dataObjects = new Array();
//Declare vars
var _activeListItemId = "1";
var _prevItemsList;
var _prev;
var _next;
var _activeItem;
var _prevItemsArray = new Array();
var listCount = 0;

//Add init to window.onload
//addFunctionToOnLoad(init);

//Initialize function
function init()
{
	_prevItemsList = document.getElementById("featured_list");
	_activeItem = document.getElementById("active_featured");
	_prev = document.getElementById("prev");
	_next = document.getElementById("next");
	setActiveListItem(_activeListItemId);
	
	//hide the previous button
	_prev.className = "hidden";
	
	//Set button events
	_prev.onclick = new Function("advanceItemHandler(-1, _prev)");
	_next.onclick = new Function("advanceItemHandler(1), _next");
}


function addPrevItemsList()
{
	var _len = _dataObjects.length;
	for (var i = 0; i < 4; i++)//_len
	{
		var _obj = _dataObjects[i];
		if (_obj.id != _activeListItemId) {
			var _li = document.createElement("li");
			var _a = document.createElement("a");
			_a.href = _obj.linkTo;
			var _txt = document.createTextNode(_obj.title);
			
			_a.onclick = new Function("listItemClickHandler(" + _obj.id + ")");
			_a.appendChild(_txt);
			_li.appendChild(_a);
			_prevItemsList.appendChild(_li);
			_prevItemsArray.push(_li);
		}
	}
}


function removePrevItemsList()
{
	var _len = _prevItemsArray.length;
	for (var i = 0; i < _len; i++)
	{
		_prevItemsList.removeChild(_prevItemsArray[i]);
	}
	//Wipe the _prevItemsArray
	_prevItemsArray = [];
}


function createActiveItem()
{
	//Get active object
	var _obj = getDataObjectById(_activeListItemId);
	//Set the active item's HTML
	_activeItem.innerHTML = "<h3 class='featured'>" + _obj.title + "</h3>" +
							"<div class='left-col-featured'>" +
                       		"<img class='feat-thumb' src='" + _obj.image + "' />" + 
                    		"</div>" + 
                    		"<div class='right-col-featured'>" + 
                        	"<p class='featured'>" + _obj.description + "</p>" + 
                        	"<span class='readmore'><a href='" + _obj.linkTo + "'>Read More</a></span>" +
                    		"</div>";
}


function getDataObjectById($id)
{
	var _len = _dataObjects.length;
	for (var i = 0; i < _len; i++)
	{
		var _obj = _dataObjects[i];
		if (_obj.id == $id) {
			return _obj;
		}
	}
	//If there's no match, return null
	return null;
}


function getDataObjectByOrder($order)
{
	var _len = _dataObjects.length;
	for (var i = 0; i < _len; i++)
	{
		var _obj = _dataObjects[i];
		if (_obj.order == $order) {
			return _obj;
		}
	}
	//If there's no match, return null
	return null;
}


function setActiveListItem($id)
{
	_activeListItemId = $id;
	//Resort dataObjects array keeping active item at the top...
	_dataObjects = resortDataObjects();
	//Add the previous items list
	addPrevItemsList();
	//Create the active item
	createActiveItem();
}


/**
 * listItemClickHandler - Handles click for list item
 * Removes any existing list items, then resets list, as well as activeItem
 * @param	$id:String, ID of the listItem to set as active
 */
function listItemClickHandler($id)
{
	//removePrevItemsList();
	//setActiveListItem($id);
}

function advanceItemHandler($num, $btn)
{
	removePrevItemsList();
	//Get active object
	var _activeObj = getDataObjectById(_activeListItemId);
	var _newOrder;
	
	//count handling
	if($btn == _prev){
		listCount--;
		if(listCount <= 0){
			_next.className = "visible";
			_prev.className = "hidden";
		} else {
			_next.className = "visible";
			_prev.className = "visible";
		}
	} else {
		listCount++;
		if(listCount >= count - 1){
			_next.className = "hidden";
			_prev.className = "visible";
		} else {
			_next.className = "visible";
			_prev.className = "visible";
		}
	}
	
	//list movement handling
	if (_activeObj.order + $num > _dataObjects.length) {
		_newOrder = 1;		
	} else if (_activeObj.order + $num < 1) {
		_newOrder = _dataObjects.length;		
	} else {
		_newOrder = _activeObj.order + $num;
	}
	
	var _newObj = getDataObjectByOrder(_newOrder);
	setActiveListItem(_newObj.id);
}


function resortDataObjects()
{
	//Get active object
	var _activeObj = getDataObjectById(_activeListItemId);
	var _activeOrder = _activeObj.order;
	//Contains all objects including/after active object
	var _tempArr1 = new Array(_activeObj);
	//Contains all objects currently ordered before the active object
	var _tempArr2 = new Array();
	
	var _len = _dataObjects.length;
	for (var i = 0; i < _len; i++)
	{
		var _obj = _dataObjects[i];
		if (_obj.order > _activeOrder) {
			_tempArr1.push(_obj);
		} else if (_obj.order < _activeOrder) {
			_tempArr2.push(_obj);
		}
	}
	//Re-sort arrays
	_tempArr1.sort(function(a,b){return a.order - b.order});
	_tempArr2.sort(function(a,b){return a.order - b.order});
	//Return sorted, combined array
	return _tempArr1.concat(_tempArr2)
}