Array.prototype.shuffle = function() {
	for ( var rnd, tmp, i = this.length; i; rnd = parseInt(Math.random() * i), tmp = this[--i], this[i] = this[rnd], this[rnd] = tmp)
		;
};

if (!document.getElementById && document.all) {
	document.getElementById = function(id) {
		return document.all[id];
	};
}


var tabOrder = new Array();
var nf_feeds = new Object();
var tabs = {};
var currentSelection = gup("up_selected", "info");
var MAX_COUNT = 10;
var SHOW_IMAGES = true;
var SHUFFLE = true;
var DESC_LENGTH = 2048;

function addTab(id, title) {
	tabs[id] = title;
	if (!displayNav()) {
		setTimeout("display()", 500);
		return;
	}
	if (nf_feeds[id]) {
		displayPane(id);
	}
	show(currentSelection);
}

function getItems(feed) {
	var feedList;
	if (!feed || !feed.channel || !feed.channel.item) {
		feedList =  new Array();
	} else if (!feed.channel.item.length) { // it is not an array
		feedList = new Array(feed.channel.item);
	} else {
		feedList = feed.channel.item;
	}
	feedList.startPos = 0;
	
	return feedList;
}

function load(callBack, url) {
	try {
		var req;
        if (typeof window.ActiveXObject != 'undefined' ) {
        	req = new ActiveXObject("Microsoft.XMLHTTP");
        } else {
        	req = new XMLHttpRequest();
        }
		req.open(
						"GET",
						"/gadgets/xmlJsonProxy.php?callBack=" + callBack + "&url=" + encodeURIComponent(url),
						true);
		req.onreadystatechange = function() {
			if (req.readyState == 4 /*complete*/) {
				eval('(' + req.responseText + ')');
			}
		};
		req.send(/*no params*/null);
	} catch (error) {
	}
}


function getDesc(pane, index, item) {
	var desc = parseDesc(item.description);
	var descDiv = "<div class='desc'>";
	descDiv += desc.substring(0, Math.min(desc.length, DESC_LENGTH));
	if (DESC_LENGTH < desc.length) {
		var txtDesc = desc.substring(DESC_LENGTH);
		descDiv += "<span id='d_" + pane + "_" + index + "' class='moreDesc'>" +
		(!SHOW_IMAGES?"<table><tr><td>" + getImage(pane, index, item) + "</td><td>" + txtDesc + "</td></tr></table>" : txtDesc) +
		"</span>";
	}
	descDiv += "</div>";

	return descDiv;
}

function parseHtml(html) {
	return html.replace(/&lt;/g, '<').
	replace(/&gt;/g, '>').
	replace(/&amp;/g, '&').
	replace(/&quot;/g, '"');
}

function parseDesc(html) {
	var desc = parseHtml(html).
		replace(/<a[^>]+><img[^>]+\/><\/a>(<br>)?/g,'');

	return desc;
}

function getImageLink(html) {
	return html.replace(/^.*img src=&quot;([^;]+)&quot;\/&gt;.*$/g, '$1');
}

function gup(name, dft) {
	name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
	var regexS = "[\\?&]" + name + "=([^&#]*)";
	var regex = new RegExp(regexS);
	var results = regex.exec(window.location.href);
	if (results == null || results.length < 1) {
		return (dft ? dft : "");
	} else {
		return decodeURIComponent(results[1]);
	}
}

function setOpts() {
	MAX_COUNT = parseInt(gup("up_count", MAX_COUNT));
	SHOW_IMAGES = "true" == (gup("up_showImages", "true"));
	SHUFFLE = "true" == (gup("up_shuffle", "true"));
	DESC_LENGTH = parseInt(gup("up_descLength", DESC_LENGTH));
}

function show(id) {
	for(i in tabs) {
		var div = document.getElementById(i);
		if (div) div.style.display = "none";
		var tabDiv = document.getElementById('a_' + i);
		if (tabDiv) {
			tabDiv.style.backgroundColor = '#E8EBF0';				
			tabDiv.style.color = '#666';				
			tabDiv.style.borderBottom = '1px solid #ccc';				
		}
	}
	if (currentSelection != id) {
		if (nf_feeds[id] && nf_feeds[id].startPos && nf_feeds[id].startPos != 0) {
			nf_feeds[id].startPos = 0;
			displayPane(id);
		}
	}
	var divSelected = document.getElementById(id);
	if (divSelected) divSelected.style.display = "block";
	var tabDivSelected = document.getElementById('a_' + id);
	if (tabDivSelected) {
		tabDivSelected.style.backgroundColor = '#FFF';				
		tabDivSelected.style.color = '#000';				
		tabDivSelected.style.borderBottom = '1px solid #fff';				
	}
	currentSelection = id;

	return false;
}

function displayNav() {
	var div = document.getElementById("navPanel");
	if (!div) return false;
	var contentDiv = document.getElementById("content");
	if (!contentDiv) return false;
	
	var html = "<ul id='navlist'>";
	var contentDivHtml = contentDiv.innerHTML;
	var countTabs = 0;
	for(var j = 0; j < tabOrder.length; j++) {
		var i = tabOrder[j];
		if (!tabs[i]) continue;
		countTabs++;
		if (!document.getElementById(i)) {
			contentDivHtml += "<div id='" + i + "'> </div>";
		}
		html += "<li><a id='a_" + i + "' class='' href='/' onclick='return show(\"" + i + "\");'>" + tabs[i] + "</a></li>";
	}
	html += "</ul>";
	contentDiv.innerHTML = contentDivHtml;
	div.innerHTML = html;
	return countTabs > 0;
}

function nextPage(tab) {
	nf_feeds[tab].startPos += MAX_COUNT;
	displayPane(tab);

	return false;
}

function prevPage(tab) {
	nf_feeds[tab].startPos -= MAX_COUNT;
	nf_feeds[tab].startPos  = Math.max(nf_feeds[tab].startPos, 0);
	displayPane(tab);

	return false;
}

function showDesc(id) {
	var span = document.getElementById(id);
	if (!span) return false;
	if ("inline" != span.style.display) {
		span.style.display = "inline";
	} else {
		span.style.display = "none";
	}
	return false;
}


function displayPane(pane) {
	var div = document.getElementById(pane);
	if (!div) {
		return;
	}
	var html = "<table boder='0' cellpadding='0' cellspacing='0' width='100%'>";
	var items = nf_feeds[pane];
	for (var i = items.startPos; i < items.length && (i-items.startPos) < MAX_COUNT; i++) {
		html += "<tr class='d" + (i%2) + "'>" + 
		(SHOW_IMAGES?"<td class='image'>" + getImage(pane, i, items[i])+ "</td>":"") + 
		"<td>" +
		"<table class='title'><tr><td><a target='_blank' href='" + getLink(pane, i, items[i]) + "'>" + getDisplayName(items[i]) + "</a></td><td align='right'><span class='titleRight'>" + getMenuRight(pane, i, items[i]) + "</span></td></tr></table>" +
		getDesc(pane, i, items[i]) +
		"</td>" +				
		"</tr>";
	}
	html += "</table>";
	html+= "<center>" + 
	(items.startPos > 0 ? "<a href='/' class='prevnext' onclick='return prevPage(\"" + pane + "\")'>prev</a>" : "") +
	"&nbsp;&nbsp;&nbsp;&nbsp;" + 
	((items.startPos+MAX_COUNT) < items.length  ? "<a href='/' class='prevnext' onclick='return nextPage(\"" + pane + "\")'>next</a>" : "") +
	"</center>";
	div.innerHTML = html;		
}

function display() {
	if (!displayNav()) {
		setTimeout("display()", 500);
		return;
	}
	for (var j in nf_feeds) {
		displayPane(j);
	}
	show(currentSelection);
}

function getImage(section, index, item) {
	return "<a target='_blank' href='" + item.link + "'><img src='" + getImageLink(item.description)  + "'/></a>";	
}

function getLink(section, index, item) {
	return item.link;	
}

function getMenuRight(section, index, item) {
	return "";	
}

function getDisplayName(item) {
	return item.title;
}

setOpts();

