/* Generic DOM Helpers */
function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {
            if (oldonload) {
                oldonload();
            }
            func();
        }
    }
}

function $(elemId) {
    return document.getElementById(elemId);
}

function addEvent( obj, type, fn ) { 
	if (obj.addEventListener) { 
		obj.addEventListener( type, fn, false );
	}
	else if (obj.attachEvent) { 
		obj["e"+type+fn] = fn; 
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); } 
		obj.attachEvent( "on"+type, obj[type+fn] ); 
	} 
} 

function addClass(element, className) {
	if (!hasClass(element, className)) {
		if (element.className) element.className += " " + className;
		else element.className = className;
	}
}

function removeClass(element, className) {
	var regexp = new RegExp("(^|\\s)" + className + "(\\s|$)");
	element.className = element.className.replace(regexp, "$2");
}

function hasClass(element, className) {
	var regexp = new RegExp("(^|\\s)" + className + "(\\s|$)");
	return regexp.test(element.className);
}

function createElem(elem, options) {
    if(!document.createElement) return false;
    if(typeof options != "object") return false;
    
    var elem = document.createElement(elem);
    
    for (property in options) {
        if (property == "content") {
            if (typeof options.content == "object") {
                if (options.content.length) {
                    for (var i=0; i<options.content.length; i++) {
                        var content = options.content[i];
                        if (typeof content == "string") {
                            elem.appendChild(document.createTextNode(content));
                        } else if (typeof content == "object") {
                            elem.appendChild(content);
                        }
                    }
                } else {
                    elem.appendChild(options.content);
                }
            } else {
                elem.appendChild(document.createTextNode(options.content));
            }
        } else if (property == "cssClass") {
            if (typeof options.cssClass == "object") {
                for (var j=0; j<options.cssClass.length; j++) {
                    var className = options.cssClass[j];
                    addClass(elem, className);
                }
            } else {
                addClass(elem, options.cssClass);
            }
        } else {
            elem.setAttribute(property, options[property]);
        }
    }
    return(elem);
}

function removeChildren(element) {
    while(element.firstChild)
        element.removeChild(element.firstChild)
}

function startHeadlinesDisplay() {
    var xmlconvertor = new XmlToJSONConvertor();
    xmlconvertor.loadXML(magicNewsHeadlinesRssURL, function(data) {
        serializedNewsHeadlines = data;
        showHeadlines(0);
    });
}

function showHeadlines(index) {

	var span = document.getElementById("headerBottomRssArea").getElementsByTagName("span")[0];
   
    removeChildren(span);
    span.appendChild(
        createElem("a", {
            href: serializedNewsHeadlines.rss.channel.item[index].link,
            title: "Read more about this news story",
            content: serializedNewsHeadlines.rss.channel.item[index].title
        })
    );
    
	//$("headerBottomRSSArea").innerHTML = span
    var nextIndex = ++index;

    if(index == serializedNewsHeadlines.rss.channel.item.length) {
        var nextIndex = 0;
    }
    
    setTimeout("showHeadlines(" + nextIndex + ");", 5000);
}

function startHeadlinesDisplayForNewsPage() {
    if($("newsStory1") && newsPageFeeds[0]) {
        var xmlConvertor = new XmlToJSONConvertor();
        xmlConvertor.stripTagsInCDATASections = true;
        xmlConvertor.loadXML(newsPageFeeds[0], function(data) {
            serializedNewsHeadlinesForNewsPage[0] = data;
            showHeadlinesForNewsPage(0, 0, 10);
        })
    }

    if($("newsStory2") && newsPageFeeds[1]) {
        var xmlConvertor = new XmlToJSONConvertor();
        xmlConvertor.stripTagsInCDATASections = true;
        xmlConvertor.loadXML(newsPageFeeds[1], function(data) {
            serializedNewsHeadlinesForNewsPage[1] = data;
            showHeadlinesForNewsPage(1, 0, 13);
        })
    }

    if($("newsStory3") && newsPageFeeds[2]) {
        var xmlConvertor = new XmlToJSONConvertor();
        xmlConvertor.stripTagsInCDATASections = true;
        xmlConvertor.loadXML(newsPageFeeds[2], function(data) {
            serializedNewsHeadlinesForNewsPage[2] = data;
            showHeadlinesForNewsPage(2, 0, 16);
        })
    }
}

function showHeadlinesForNewsPage(feedIndex, newsItemIndex, delay) {
    if(newsPageFeedsTimeout[feedIndex])
        clearTimeout(newsPageFeedsTimeout[feedIndex]);

    var feedItemCount = serializedNewsHeadlinesForNewsPage[feedIndex].rss.channel.item.length>10?10:serializedNewsHeadlinesForNewsPage[feedIndex].rss.channel.item.length;

    if(newsItemIndex < 0)
        newsItemIndex = feedItemCount;
    else if(newsItemIndex >= feedItemCount)
        newsItemIndex = 0;
    
    var feedSpace = $("newsStory" + (feedIndex+1));
    removeChildren(feedSpace);
    
    if(serializedNewsHeadlinesForNewsPage[feedIndex].rss.channel.item[newsItemIndex].title) {
        feedSpace.appendChild(
            createElem("h3", {content: serializedNewsHeadlinesForNewsPage[feedIndex].rss.channel.item[newsItemIndex].title})
        );
    }
    
    if(serializedNewsHeadlinesForNewsPage[feedIndex].rss.channel.item[newsItemIndex].description) {
        feedSpace.appendChild(
            createElem("p", {content: serializedNewsHeadlinesForNewsPage[feedIndex].rss.channel.item[newsItemIndex].description})
        );
    }
    
    if(serializedNewsHeadlinesForNewsPage[feedIndex].rss.channel.item[newsItemIndex].link) {
        feedSpace.appendChild(
            createElem("a", {
                href: serializedNewsHeadlinesForNewsPage[feedIndex].rss.channel.item[newsItemIndex].link,
                content: "Full Story",
                cssClass: "moreLink",
                title: "Read more"
            })
        );
    }
    
    if(newsItemIndex == 0)
        var prevNewsItemIndex = feedItemCount - 1;
    else
        var prevNewsItemIndex = newsItemIndex - 1;
    
    if(newsItemIndex == 9)
        var nextNewsItemIndex = 0;
    else
        var nextNewsItemIndex = newsItemIndex + 1;
    
    
    feedSpace.appendChild(
        createElem("p", {
            cssClass: "scroller",
            content: [
                "Story " + (newsItemIndex+1) + " of " + feedItemCount,
                createElem("a", {
                    href: "javascript: showHeadlinesForNewsPage(" + feedIndex + ", " + prevNewsItemIndex + ", 0)",
                    content: createElem("img", {src: "/media/kings/nav-left-arrow.gif", alt: "«", title: "View the previous story"})
                }),
                createElem("a", {
                    href: "javascript: showHeadlinesForNewsPage(" + feedIndex + ", " + nextNewsItemIndex + ", 0)",
                    content: createElem("img", {src: "/media/kings/nav-right-arrow.gif", alt: "»", title: "View the next story"})
                })
            ]
        })
    );
    
    if(delay == 0) delay = 5;
    newsPageFeedsTimeout[feedIndex] = setTimeout("showHeadlinesForNewsPage(" + feedIndex + ", " + nextNewsItemIndex + ", 10)", (delay*1000));
}

var topFeedTabStrip;
var bottomFeedTabStrip;
// Currently only supports 3 feeds for the news page. Remaining feeds will ignored.
var magicNewsHeadlinesRssURL = "/magic/magic-ticker.xml";

var serializedNewsHeadlines;
var serializedNewsHeadlinesForNewsPage = [];
var newsPageFeedsTimeout = [];
var imagePath = "/media/magic/"

addLoadEvent(function() {
   
})


