function cNavigationScroller( strCellPrefix, intCountSlots, strXmlData )
{
	// Parameters
	this.m_strCellPrefix = strCellPrefix;
	this.m_intCountSlots = intCountSlots;
	this.m_strXmlData = strXmlData;

	// Member Variables
	this.dom = (document.getElementById); //modern dom browsers
	this.iebrowser = document.all;

	this.m_displayitems = new Array(); // Array of Html items to navigate through
	this.m_intCountItems = 0;			
	this.m_intStart = 0;
	this.m_intMaxStart = 0;

	// Functions
	
	// Get an object by its ID
	// 
	this.getObject = function( strObjectID )
	{
		return this.iebrowser ? this.iebrowser[strObjectID] : document.getElementById(strObjectID);	
	};
	
	// Refresh the items displayed by the scroller
	//
	this.refresh = function()
	{
		var tmpObj; 
		var strObjId;
		var intIndex;

		for( ii = 0; ii < this.m_intCountSlots; ii++ )
		{
			strObjId = this.m_strCellPrefix + ii;
			tmpObj = this.getObject( strObjId );
			intIndex = this.m_intStart + ii;
			if( intIndex < this.m_intCountItems )
			{
				tmpObj.innerHTML = this.m_displayitems[intIndex];
			}
			else
			{
				tmpObj.innerHTML = '';
			}
		}
	};

	// Scroll to the previous item
	//
	this.scrollPrev = function()
	{
		var intPrevStart = this.m_intStart;

		if( this.m_intStart > 0 ) 
		{
			this.m_intStart -= this.m_intCountSlots;
			if( this.m_intStart < 0 )
			{
				this.m_intStart = 0;
			}
		}		
		if( this.m_intStart != intPrevStart )
		{
			this.refresh();
		}
	};

	// Scroll to the previous item
	//
	this.scrollNext = function()
	{
		var intPrevStart = this.m_intStart;

		if( this.m_intStart < (this.m_intCountItems-1) ) 
		{
			this.m_intStart += this.m_intCountSlots;
			if( this.m_intStart > (this.m_intMaxStart) )
			{
				this.m_intStart = this.m_intMaxStart;
			}
		}		

		if( this.m_intStart != intPrevStart )
		{
			this.refresh();
		}
	};

	// Function that runs when the page loads
	//
	this.onLoad = function()
	{
		var result = SharedUL.parseXML( this.m_strXmlData );
		var objThis = this;
		var objRoot = result.firstChild;
		if( objRoot != null )
		{
			var objNodes = objRoot.getElementsByTagName( "item" );
			var xmlString;

			this.m_intCountItems = objNodes.length;
			if( this.m_intCountItems > 0 )
			{
				for( ii = 0; ii < this.m_intCountItems; ii++ )
				{
					this.m_displayitems[ii] = SharedUL.serializeNode( objNodes[ii].firstChild );
				}
			}

			this.m_intMaxStart = this.m_intCountItems  - this.m_intCountSlots;
			if( this.m_intMaxStart < 0 ) this.m_intMaxStart = 0;

			this.refresh();
		}
	};

	return this;
}
