/*
// +-------------------------------------------------------------------------------------+
// | RSS JavaScript Ticker object														 |
// +-------------------------------------------------------------------------------------+
*/

function createAjaxObj(){
    var httprequest=false
    if (window.XMLHttpRequest){ // if Mozilla, Safari etc
        httprequest=new XMLHttpRequest()
        if (httprequest.overrideMimeType)
        httprequest.overrideMimeType('text/xml')
    }
    else if (window.ActiveXObject){ // if IE
        try {
            httprequest=new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e){
            try{
                httprequest=new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (e){}
        }
    }
    return httprequest
}

// +-------------------------------------------------------------------------------------+
// | Main RSS Ticker Object function													 |
// | rss_ticker(RSS_id, cachetime, divId, divClass, delay, optionalswitch)				 |
// +-------------------------------------------------------------------------------------+

function rss_ticker(RSS_id, cachetime, divId, divClass, delay, optionalswitch, PAGE_FRAME_RSS_FEED, LOAD_RSS_FEED, RSS_FEED_ERROR){
    this.RSS_id=RSS_id //Array key indicating which RSS feed to display
    this.cachetime=cachetime //Time to cache feed, in minutes. 0=no cache.
    this.tickerid=divId //ID of ticker div to display information
    this.delay=delay //Delay between msg change, in miliseconds.
    this.logicswitch=(typeof optionalswitch!="undefined")? optionalswitch : -1
    this.mouseoverBol=0 //Boolean to indicate whether mouse is currently over ticker (and pause it if it is)
    this.pointer=0
    this.ajaxobj=createAjaxObj()
    document.write('<div id="'+divId+'" class="'+divClass+'">'+LOAD_RSS_FEED+'</div>')
    this.getAjaxcontent(PAGE_FRAME_RSS_FEED, RSS_FEED_ERROR)
}

// +-------------------------------------------------------------------------------------+
// | getAjaxcontent()- Makes asynchronous GET request to "rssfetch.php"					 | 
// | with the supplied parameters														 |
// +-------------------------------------------------------------------------------------+

rss_ticker.prototype.getAjaxcontent=function(PAGE_FRAME_RSS_FEED, RSS_FEED_ERROR){
    if (this.ajaxobj){
        var instanceOfTicker=this
        var parameters="id="+encodeURIComponent(this.RSS_id)+"&cachetime="+this.cachetime+"&bustcache="+new Date().getTime()
        this.ajaxobj.onreadystatechange=function(){instanceOfTicker.initialize(RSS_FEED_ERROR)}
        this.ajaxobj.open('GET', PAGE_FRAME_RSS_FEED+"?"+parameters, true)
        this.ajaxobj.send(null)
    }
}

// +-------------------------------------------------------------------------------------+
// | initialize()- Initialize ticker method.											 |
// | - Gets contents of RSS content and parse it using JavaScript DOM methods			 | 
// +-------------------------------------------------------------------------------------+

rss_ticker.prototype.initialize=function(RSS_FEED_ERROR){ 
    if (this.ajaxobj.readyState == 4){ //if request of file completed
        if (this.ajaxobj.status==200){ //if request was successful
            var xmldata=this.ajaxobj.responseXML
            if(xmldata.getElementsByTagName("item").length==0){ //if no <item> elements found in returned content
                document.getElementById(this.tickerid).innerHTML=RSS_FEED_ERROR
                return
            }
            var instanceOfTicker=this
            this.feeditems=xmldata.getElementsByTagName("item")
        
            //Cycle through RSS XML object and store each peice of the item element as an attribute of the element
            for (var i=0; i<this.feeditems.length; i++){
                this.feeditems[i].setAttribute("ctitle", this.feeditems[i].getElementsByTagName("title")[0].firstChild.nodeValue)
                this.feeditems[i].setAttribute("clink", this.feeditems[i].getElementsByTagName("link")[0].firstChild.nodeValue)
                this.feeditems[i].setAttribute("cdescription", this.feeditems[i].getElementsByTagName("description")[0].firstChild.nodeValue)
            }
            document.getElementById(this.tickerid).onmouseover=function(){instanceOfTicker.mouseoverBol=1}
            document.getElementById(this.tickerid).onmouseout=function(){instanceOfTicker.mouseoverBol=0}
            this.rotatemsg()
        }
    }
}

// +-------------------------------------------------------------------------------------+
// | rotatemsg()- Rotate through RSS messages and displays them							 |
// +-------------------------------------------------------------------------------------+

rss_ticker.prototype.rotatemsg=function(){
    var instanceOfTicker=this
    if (this.mouseoverBol==1) //if mouse is currently over ticker, do nothing (pause it)
        setTimeout(function(){instanceOfTicker.rotatemsg()}, 100)
    else{
	    var tickerDiv=document.getElementById(this.tickerid)
	    var tickercontent='<a target="_blank" class="bodyHref" href="'+this.feeditems[this.pointer].getAttribute("clink")+'">'+this.feeditems[this.pointer].getAttribute("ctitle")+'</a>'
        if (this.logicswitch=="showdescription")
            tickercontent+="<br />"+this.feeditems[this.pointer].getAttribute("cdescription")
        for (var i=this.pointer+1; i<this.pointer+5; i++){
	        tickercontent+='<br /><br /><a target="_blank" class="bodyHref" href="'+this.feeditems[i].getAttribute("clink")+'">'+this.feeditems[i].getAttribute("ctitle")+'</a>'
	        if (this.logicswitch=="showdescription")
	            tickercontent+="<br />"+this.feeditems[i].getAttribute("cdescription")
	    }
        tickerDiv.innerHTML=tickercontent
        this.pointer=((this.pointer+5)<this.feeditems.length-1)? this.pointer+5 : 0
        setTimeout(function(){instanceOfTicker.rotatemsg()}, this.delay) //update container every second
    }
}
