function RSSViewerConfig(jsonFile){
	this.url=jsonFile;
	this.pauseDuration = 5000;					// Durration in mill of pause between rotations
	this.displayContainerID = "RSSViewer";		// ID of element to use as a container for HTML rendering
	this.noCategoryLabel = "News";				// Default Tab label if category is missing
	this.objectType = "RSSViewerConObj";
	this.pauseImage = "http://extras.mnginteractive.com/live/media/rssviewer/pause.gif";
	this.playImage = "http://extras.mnginteractive.com/live/media/rssviewer/play.gif";
	this.maxTabs = 4;
	this.sourceTag = "source=rv";
}

var RSSViewerConObj;				// RSSViewer Configuration, contains specific required elements
var RSSViewerRotation; 				// Reference to timeout 
var RSSViewerCurrArrPos = 0; 		// Current position in RSSViewerItemArr array
var RSSViewerItemArr; 				// Array of viewer elements
var RSSViewerItemArrLen;

function RSSViewer(o){
	RSSViewerConObj=o;
	if(RSSViewerConObj && RSSViewerConObj.url && RSSViewerConObj.objectType == "RSSViewerConObj"){
		getRSS(RSSViewerConObj.url);
	}else{
		RSSDisbleViewer();
	}
}

//uses xmlhttpreq to get json file
function getRSS(url){
	var xhr;
	//call the right constructor for the browser being used
	try{
		if (window.ActiveXObject)
			xhr = new ActiveXObject("Microsoft.XMLHTTP");
		else if (window.XMLHttpRequest)
			xhr = new XMLHttpRequest();
	}catch(err){
		RSSDisbleViewer();
		return false;
	}
	//prepare the xmlhttprequest object
	xhr.open("GET",url,true);
	xhr.setRequestHeader("Cache-Control", "no-cache");
	xhr.setRequestHeader("Pragma", "no-cache");
	xhr.onreadystatechange = function() {
		if (xhr.readyState == 4){
			if (xhr.status == 200){
				if (xhr.responseText != null)
					processJSON(xhr.responseText);
				else{
					RSSDisbleViewer();
					return false;
				}
			}
			else{
				RSSDisbleViewer();
				return false;
			}
		}
	}

	//send the request
	xhr.send(null);
}

//processes the received rss xml
function processJSON(json){
	var RSS = eval('(' + json + ')');
	showRSS(RSS);
}

//shows the RSS content in the browser
function showRSS(RSS){
	//default values for html tags used
	var startTitle = "<div class='rssItemTitle'>";
	var startDescription = "<div class='rssItemdescription'>";
	var startPubDate = "<div class='rssItemPubdate'>";
	var startEnclosure = "<div class='rssItemEnclosure'>";
	var endTag = "</div>";
	var tempLabel;
	var displayContainer;
	
	//populate nav
	var HTML='';
	displayContainer = document.getElementById(RSSViewerConObj.displayContainerID);
	if (displayContainer){
		displayContainer.innerHTML="";
	}else{
		return false;
	}
	
	HTML += "<div id='RSSNav'><ul id='RSSNavItems'>";
	for (var i=0; i<RSS.items.length; i++){
		HTML += "<li onmouseover='javascript:RSSViewerOver(this);' onmouseout='javascript:RSSViewerOut(this);' onclick=\"javascript:RSSViewerDisplayItem("+ i +")\" id='RSSNavItem_"+ i +"'"
		HTML += i==0?"class='navOver'":"";
		tempLabel = RSS.items[i].attributes.category?RSS.items[i].attributes.category:config.noCategoryLabel;
		HTML += ">" + tempLabel +  "</li>";
	}
	HTML += "</ul>";
	HTML += "<div id='RSSControls' onclick='RSSViewerToggle();'>";
	HTML += "<img id='RSSControlPause' src='" + RSSViewerConObj.pauseImage + "'>";
	HTML += "</div></div>";
	HTML += "<div style='clear:both;'></div>";
	
	//populate the items
	HTML += "<div class='rssItems'>";
	for (var i=0; i<RSS.items.length; i++){
			if (RSS.items[i].attributes.link){
				RSS.items[i].attributes.link +=  RSS.items[i].attributes.link.search(/\?/)==-1?'?':'&';
				RSS.items[i].attributes.link += RSSViewerConObj.sourceTag;
				HTML += "<div id='item_"+i+"' class='rssItem activeLink' style='display:none;' onclick='javascript:location.href=\""+RSS.items[i].attributes.link+"\";'>";
				HTML += "<div class='rssItemContent'>";			
				HTML += (RSS.items[i].attributes.title) ? startTitle + "<a href='" + RSS.items[i].attributes.link + "'>" + RSS.items[i].attributes.title +"</a>" + endTag : "";
			}else{
				HTML += "<div id='item_"+i+"' class='rssItem' style='display:none;'>";
				HTML += "<div class='rssItemContent'>";			
				HTML += (RSS.items[i].attributes.title) ? startTitle + RSS.items[i].attributes.title + endTag : "";
			}
			HTML += (RSS.items[i].attributes.pubDate) ? startPubDate + RSS.items[i].attributes.pubDate + endTag : "";
			HTML += (RSS.items[i].attributes.description) ? startDescription + unEscapeXML(RSS.items[i].attributes.description) + endTag : "";
		HTML += "</div>";
		if (RSS.items[i].attributes.image_url){
			HTML += startEnclosure + '<img src="' + RSS.items[i].attributes.image_url +'">' + endTag;
		}
		HTML += "<div style='clear:both;'></div>";
		HTML += endTag;	
	}
	HTML += "</div>"
	displayContainer.innerHTML = HTML;
	RSSViewerInit();
	return true;
}



function RSSViewerInit(){	
	RSSViewerItemArr = getElementsByClassName(document, "div", "rssItem");
	RSSViewerItemArrLen = RSSViewerItemArr.length;
	RSSViewerItemArr[RSSViewerCurrArrPos].style.display = 'block';
	RSSViewerRotation=setTimeout("RSSViewerRotate()",RSSViewerConObj.pauseDuration);
}
	
function getElementsByClassName(oElm, strTagName, strClassName){
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for(var i=0; i<arrElements.length; i++){
		oElement = arrElements[i];
		if(oRegExp.test(oElement.className)){
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements)
}

function hideElements(arr){
	for(i=0,j=0;i<arr.length;i++){
		arr[i].style.display = 'none';
		document.getElementById("RSSNavItem_"+i).className="";
	}
}

function RSSViewerRotate(){
	RSSViewerRotation=setTimeout("RSSViewerRotate()",RSSViewerConObj.pauseDuration);
	RSSViewerDisplayNext();
}
function RSSViewerDisplayNext(){
	if(this.RSSViewerItemArrLen){
		RSSViewerCurrArrPos=RSSViewerCurrArrPos<RSSViewerItemArrLen-1?RSSViewerCurrArrPos+1:0;
		hideElements(RSSViewerItemArr);
		changeOpac(0, 'item_'+RSSViewerCurrArrPos);
		RSSViewerItemArr[RSSViewerCurrArrPos].style.display = 'block';
		opacity('item_'+RSSViewerCurrArrPos, 0, 100, 1000);
		document.getElementById("RSSNavItem_"+RSSViewerCurrArrPos).className="navOver";
	}
}
// Originally used for a back nav tab but not used at this point
/*
function RSSViewerDisplayPrev(){
	if(this.RSSViewerItemArrLen){
		RSSViewerCurrArrPos=RSSViewerCurrArrPos>0?RSSViewerCurrArrPos-1:RSSViewerItemArrLen-1;
		hideElements(RSSViewerItemArr);
		changeOpac(0, 'item_'+RSSViewerCurrArrPos);
		RSSViewerItemArr[RSSViewerCurrArrPos].style.display = 'block';
		opacity('item_'+RSSViewerCurrArrPos, 0, 100, 1000);
		document.getElementById("RSSNavItem_"+RSSViewerCurrArrPos).className="navOver";
	}
}
*/
function RSSViewerDisplayItem(item){
//check to make sure item isn't out of range of array
	if(this.RSSViewerItemArrLen){
		RSSViewerCurrArrPos=item;
		RSSViewerDisplayPause();
		hideElements(RSSViewerItemArr);
		RSSViewerItemArr[item].style.display = 'block';
		document.getElementById("RSSNavItem_"+item).className="navOver";
		document.getElementById("RSSControls").innerHTML="<img id='RSSControlPlay' src='" + RSSViewerConObj.playImage + "'>";
	}
}
function RSSViewerDisplayPause(){
	clearTimeout(RSSViewerRotation);
}
function unEscapeXML(s){
	return s?s.replace("&gt;",">").replace("&lt;","<"):"";
}
function RSSDisbleViewer(){
	var d=document.getElementById(config.displayContainerID);
	if (d) d.style.display="none";
}
function RSSViewerToggle(){
	var d=document.getElementById("RSSControls");
	if(document.getElementById("RSSControlPause")){
		//pause
		d.innerHTML="<img id='RSSControlPlay' src='" + RSSViewerConObj.playImage + "'>";	
		RSSViewerDisplayPause();
			
	}else{
		//play
		d.innerHTML="<img id='RSSControlPause' src='" + RSSViewerConObj.pauseImage + "'>";
		RSSViewerRotate();
	}
}
function RSSViewerOver(t){t.className="navOver";}
function RSSViewerOut(t){if ("RSSNavItem_"+RSSViewerCurrArrPos != t.id){t.className=""};}
function opacity(id, opacStart, opacEnd, millisec) { 
    //speed for each frame 
    var speed = Math.round(millisec / 100); 
    var timer = 0; 
	/* ONLY NEED FADE IN AT THIS POINT.  If in the future we need both uncomment this
    if(opacStart > opacEnd) { 
        for(i = opacStart; i >= opacEnd; i--) { 
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed)); 
            timer++; 
        } 
    } else if(opacStart < opacEnd) { 
        for(i = opacStart; i <= opacEnd; i++) 
            { 
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed)); 
            timer++; 
        } 
    } 
	*/
	if(opacStart < opacEnd) { 
        for(i = opacStart; i <= opacEnd; i++) 
            { 
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed)); 
            timer++; 
        } 
    } 
} 

//change the opacity for different browsers 
function changeOpac(opacity, id) { 
    var object = document.getElementById(id).style; 
    object.opacity = (opacity / 100); 
    object.MozOpacity = (opacity / 100); 
    object.KhtmlOpacity = (opacity / 100); 
    object.filter = "alpha(opacity=" + opacity + ")"; 
} 