/**
 * RSS JavaScript Ticker Object
 * Author: George at JavaScriptKit.com / DynamicDrive.com
 * Created: Feb 5th, 2006
 * Updated: Feb 5th, 2006
 *
 * NME Bar
 * Author: Sonny Beaumont <sonny.beaumont@sbwd.dyndns.org>
 * version: 1.0.1
 */

function createAjaxObj()
{
	var httprequest = false;
	
	if( window.XMLHttpRequest )
	{ // if not IE
		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, delay, folder )
{
	var cachetime  = 60;
	var divId      = 'nme_ticker_news';
	var divClass   = 'nme_ticker';

	this.feeds     = new Array();
	this.feeds_pos = 0;
	this.exclude   = RSS_id;
	this.url_php   = folder;

	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();

	if( 'vnunet.fr' == RSS_id || 'silicon.fr' == RSS_id || 'gizmodo.fr' == RSS_id || 'the_inquirer.fr' == RSS_id || 'yacapa.fr' == RSS_id || 'channelinsider.fr' == RSS_id )
	{
		document.write( '<div id="nme_ticker"><div id="nme_ticker_links"><a href="http://www.vnunet.fr/">VNUnet.fr</a> | <a href="http://www.silicon.fr/">Silicon.fr</a> | <a href="http://www.gizmodo.fr/">Gizmodo.fr</a> | <a href="http://www.theinquirer.fr/">The Inquirer.fr</a> | <a href="http://telecharger.vnunet.fr/">Telecharger</a> | <a href="http://www.channelinsider.fr/" class="nme_last">Channel Insider.fr</a> | <strong>A la une :</strong></div> <span id="' + divId + '">Initializing ticker...</span></div>' );
		this.feeds[0] = 'vnunet.fr';
		this.feeds[1] = 'silicon.fr';
		this.feeds[2] = 'gizmodo.fr';
		this.feeds[3] = 'the_inquirer.fr';
		this.feeds[4] = 'yacapa.fr';
		this.feeds[5] = 'channelinsider.fr';

		for( var i = 0; i < this.feeds.length; i++ )
		{
			if( this.RSS_id == this.feeds[ i ] )
			{
				this.feeds_pos = i;
			}
		}
	
		this.getAjaxcontent();
	}
}


/**
 * getAjaxcontent()- Makes asynchronous GET request to "rssfetch.php" with the supplied parameters
 */
rss_ticker.prototype.getAjaxcontent = function()
{
	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();
		}
		
		this.ajaxobj.open( 'GET', this.url_php + "rssfetch.php?" + 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()
{
	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 = "<strong>Error:</strong> Fetching remote RSS feed!<br />" + this.ajaxobj.responseText;
				document.getElementById( this.tickerid ).innerHTML = "&nbsp;";

				this.nextfeedid();
				return this.getAjaxcontent();
			}
			else
			{
				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++ )
				{
					if( this.feeditems[ i ].getElementsByTagName("title")[0] != null )
					{
						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 );

						if( this.feeditems[ i ].getElementsByTagName("description")[0] != null )
						{
							this.feeditems[ i ].setAttribute( "cdescription", this.feeditems[ i ].getElementsByTagName("description")[0].firstChild.nodeValue );
						}
						else
						{
							this.feeditems[ i ].setAttribute( "cdescription", "" );
						}
					}
				}
	
				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 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" );
		}

		tickerDiv.innerHTML = tickercontent;

		if( this.pointer < this.feeditems.length - 1 )
		{
			this.pointer++;
		}
		else
		{
			this.pointer = 0;

			this.nextfeedid();
			return this.getAjaxcontent();
		}

		setTimeout( function() { instanceOfTicker.rotatemsg() }, this.delay ); //update container every second
	}
}


/**
 * nextfeedid()- select the next RSS_id to display
 */
rss_ticker.prototype.nextfeedid = function()
{
	this.feeds_pos++;

	if( this.feeds_pos == this.feeds.length )
	{
		this.feeds_pos = 0;
	}
	
	this.RSS_id = this.feeds[ this.feeds_pos ];
}

