function getObject(objectId) {
    // cross-browser function to get an object's style object given its id
    if(document.getElementById) 
    {
		return document.getElementById(objectId);
		// W3C DOM	
    } 
    else if (document.all && document.all(objectId)) 
    {
		// MSIE 4 DOM
		return document.all(objectId);
    } 
    else if (document.layers && document.layers[objectId]) 
    {
		// NN 4 DOM.. note: this won't find nested layers
		return document.layers[objectId];
    } 
    else 
    {
		return false;
    }
}

function getObjectStyle(objectId) {
    // cross-browser function to get an object's style object given its id
    if(document.getElementById) 
    {
		return document.getElementById(objectId).style;
		// W3C DOM	
    } 
    else if (document.all && document.all(objectId)) 
    {
		// MSIE 4 DOM
		return document.all(objectId).style;
    } 
    else if (document.layers && document.layers[objectId]) 
    {
		// NN 4 DOM.. note: this won't find nested layers
		return document.layers[objectId];
    } 
    else 
    {
		return false;
    }
}

function changeObjectVisibility(objectId, newVisibility) {
    // get a reference to the cross-browser style object and make sure the object exists
    var styleObject = objectId;
    
    if(styleObject)
    {
		styleObject.visibility = newVisibility;
		return true;
    } 
    else 
    {
		//alert("we couldn't find the object, so we can't very well move it");
		return false;
    }
}

function moveObject(objectId, newXCoordinate, newYCoordinate) {
    // get a reference to the cross-browser style object and make sure the object exists
    var styleObject = objectId;
    
    if(styleObject) 
    {
		if ((navigator.appName == "Microsoft Internet Explorer") && (navigator.platform == "MacPPC"))
		{
			styleObject.pixelLeft = newXCoordinate;
			styleObject.pixelTop = newYCoordinate;
			return true;
		}
		else
		{
			styleObject.left = newXCoordinate;
			styleObject.top = newYCoordinate;
			return true;		
		}		
    } 
    else 
    {
		//alert("we couldn't find the object, so we can't very well move it");
		return false;
    }
} 

function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

// INTERNAL VARIABLES
var arrCurPos = new Array();
var dir;
var objTimer;
var objMySlidingList;
var intScrollerWidth;

// USER CUSTOMISABLE VARIABLES
var arrPageScrollers = new Array(); // Array of Scrollers on the page
var intXOffset = 15; // Scrolling Jump in Pixels: Low Numbers (10) = Slow Smooth Scrolling, High Numbers (100+) = Fast Scrolling
var intTimeout = 33; // Scrolling Framerate in Milliseconds
var intElementWidth = 141;
var intScrollerWidth = 0;
var intTargetPostion = 0;
var intDisplayElementCount = 5;
var intInitialOffset = 0;

function initScrollers()
{
    for (var i = 0; i < arrPageScrollers.length; i++) 
    {
        var objMyScroller = getObject(arrPageScrollers[i]);
        
        if (objMyScroller)
        {
            
            var objMyScrollerElements = objMyScroller.getElementsByTagName("li").length;            
            var objMyScrollerStyle = getObjectStyle(arrPageScrollers[i]);
            
            objMyScrollerStyle.width = (objMyScrollerElements * intElementWidth) + 'px';
        }
    }
    
    arrCurPos = new Array(arrPageScrollers.length);
    
    for (var i = 0; i < arrCurPos.length; i++) 
    {
        arrCurPos[i] = 0;
    }
    
    setStartOffset(arrPageScrollers[0], intInitialOffset);
}
Event.observe(window, 'load', initScrollers, false);

function StartScroll(target, direction, maskWidth)
{
    intScrollerWidth = maskWidth;
    objMySlidingList = target;
    dir = direction;
	
	var objStyle = getObjectStyle(objMySlidingList);
	if (objStyle)
    {
		var objWidth = parseInt(objStyle.width);
		if (dir == 'R')
		{
			intTargetPostion = (arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] - (intElementWidth * intDisplayElementCount));	
			if (intTargetPostion < ((0 - objWidth)))
			{
			    //+ (intElementWidth * intDisplayElementCount)
				//intTargetPostion = ((0 - objWidth) + (intElementWidth * intDisplayElementCount));
				return false;
			}
		}
		else if (dir == 'L')
		{
			intTargetPostion = (arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] + (intElementWidth * intDisplayElementCount));		
			if (intTargetPostion > 0)
			{
				intTargetPostion = 0;
			}
		}
		//alert(intTargetPostion);
		DoScroll();
		//StopScroll();
	}
}

function DoScroll()
{   
    				
	var blnEndScroll = 0;
	var objStyle = getObjectStyle(objMySlidingList);
    
    if (objStyle)
    {                                           
        if (dir == 'R')
        {
            var objWidth = parseInt(objStyle.width);
			
            if ((arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] - intXOffset) > intTargetPostion)
            {				
                arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] -= intXOffset;
                moveObject(objStyle, arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] + 'px', '0px');
            }
            else
            {
                arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] = intTargetPostion;
                moveObject(objStyle, arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] + 'px', '0px');
				blnEndScroll = 1;				
            }
        }
        else if (dir == 'L')
        {
            if (arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] + intXOffset < intTargetPostion)
            {
                arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] += intXOffset;
                moveObject(objStyle, arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] + 'px', '0px');
            }
            else
            {
                arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] = intTargetPostion;
                moveObject(objStyle, arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] + 'px', '0px');
				blnEndScroll = 1;
            }
        }
		if (blnEndScroll == 0)
		{
			objTimer = setTimeout("DoScroll()", intTimeout);
		}
		else
		{			
			StopScroll();
		}
    }
}

function setStartOffset(objMySlidingList, intOffset) {
    var objStyle = getObjectStyle(objMySlidingList);
    var intOffsetPage = 0;
    
    intOffsetPage = Math.floor(intOffset / intDisplayElementCount);
    
    if (objStyle)
    {
        arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] -= (intElementWidth * (intOffsetPage * intDisplayElementCount));
        moveObject(objStyle, arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] + 'px', '0px');
    }
}


function StopScroll()
{
    clearTimeout(objTimer);
}