﻿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 arrCurBarPos = new Array();
var arrScrollBarScaleFactors = new Array();
var dir;
var objTimer;
var objMySlidingList;
var intScrollerWidth;

// USER CUSTOMISABLE VARIABLES
var arrPageScrollers = new Array(); // Array of Scrollers on the page
var arrScrollerWidths = new Array();
var arrScrollBarWidths = new Array();
var intXOffset = 10; // Scrolling Jump in Pixels: Low Numbers (10) = Slow Smooth Scrolling, High Numbers (100+) = Fast Scrolling
var intTimeout = 33; // Scrolling Framerate in Milliseconds
var intScrollerWidth = 0;

function initScrollers()
{
    for (var i = 0; i < arrPageScrollers.length; i++) 
    {
        var objMyScroller = getObject(arrPageScrollers[i]);        
        
        if (objMyScroller)
        {
            
            var objMyScrollerElements = (objMyScroller.getElementsByTagName("div").length / 2);            
            var objMyScrollerStyle = getObjectStyle(arrPageScrollers[i]);
            
            objMyScrollerStyle.width = (objMyScrollerElements * arrScrollerWidths[i]) + 'px';
        }
    }
    
    arrCurPos = new Array(arrPageScrollers.length);
    arrCurBarPos = new Array(arrPageScrollers.length);
    arrScrollBarScaleFactors = new Array(arrPageScrollers.length);
    
    for (var i = 0; i < arrCurPos.length; i++) 
    {
        arrCurPos[i] = 0;
        arrCurBarPos[i] = 0;
        arrScrollBarScaleFactors[i] = 0;
    }
}

$(document).ready(function(){   
	initScrollers();
	//initScrollBar();
	//initMouseFinder();
});

function ScrollLeft(target) { StartScroll(target, 'L') }
function ScrollRight(target) { StartScroll(target, 'R') }

function StartScroll(target, direction)
{
    StopScroll();    
    objMySlidingList = target;
    intScrollerWidth = arrMaskWidths[arrPageScrollers.indexOf(objMySlidingList)];
    dir = direction;
    DoScroll();
}

function DoScroll()
{   
    var objStyle = getObjectStyle(objMySlidingList);   
    
    if (objStyle)
    {               
        if (dir == 'R')
        {
            var objWidth = parseInt(objStyle.width);
            
            if (objWidth > intScrollerWidth)
            {            
                if (objWidth + (arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] - intXOffset) > intScrollerWidth)
                {
                    arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] -= intXOffset;
                    moveObject(objStyle, arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] + 'px', '0px');
                    //doScrollBar(intXOffset, (intXOffset / arrScrollBarScaleFactors[arrPageScrollers.indexOf(objMySlidingList)]));
                }
                else
                {
                    arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] = intScrollerWidth - objWidth;
                    moveObject(objStyle, arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] + 'px', '0px');
                }
            }
        }
        else if (dir == 'L')
        {
            if (arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] + intXOffset < 0)
            {
                arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] += intXOffset;
                moveObject(objStyle, arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] + 'px', '0px');
                //doScrollBar((intXOffset - (intXOffset * 2)), ((intXOffset - (intXOffset * 2)) / arrScrollBarScaleFactors[arrPageScrollers.indexOf(objMySlidingList)]));
            }
            else
            {
                arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] = 0;
                moveObject(objStyle, arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] + 'px', '0px');
            }
        }
    objTimer = setTimeout("DoScroll()", intTimeout);
    }
}

function StopScroll()
{
    clearTimeout(objTimer);
}

function StartAutoScroll(target)
{         
    objMySlidingList = target;
    intScrollerWidth = arrMaskWidths[arrPageScrollers.indexOf(objMySlidingList)];    
    dir = 'R';
    
    var objStyle = getObjectStyle(objMySlidingList);
    var objSlider = getObject(objMySlidingList);
    
    if (parseInt(objStyle.width) > intScrollerWidth)
    {       
        objSlider.innerHTML += objSlider.innerHTML;
        var objMyScrollerWidth = (parseInt(objStyle.width) * 2);
        objStyle.width = objMyScrollerWidth + 'px';
        
                //var objMyScrollerBarStyle = getObjectStyle(objMySlidingList + '_bar');                                        
                
                //arrScrollBarScaleFactors[arrPageScrollers.indexOf(objMySlidingList)] = (objMyScrollerWidth / arrMaskWidths[arrPageScrollers.indexOf(objMySlidingList)]);            
                
                //if (objMyScrollerWidth > arrMaskWidths[arrPageScrollers.indexOf(objMySlidingList)]) {
                //    objMyScrollerBarStyle.width = (arrScrollBarWidths[arrPageScrollers.indexOf(objMySlidingList)] / arrScrollBarScaleFactors[arrPageScrollers.indexOf(objMySlidingList)]) + 'px';
                //}
                //else {
                //    objMyScrollerBarStyle.width = '0px'//arrScrollBarWidths[arrPageScrollers.indexOf(objMySlidingList)] + 'px';
                //}
        
        AutoScroll();
    }
}
    
function AutoScroll()
{    
    var objSlider = getObject(objMySlidingList);
    var objStyle = getObjectStyle(objMySlidingList);
    var intAutoSpeed = 3;
    
    if (objStyle)
    {                     
        if (dir == 'R')
        {
            var objWidth = parseInt(objStyle.width);
            
            if (objWidth > intScrollerWidth)
            {   
                if (objWidth + (arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] - intAutoSpeed) > (objWidth / 2))         
                {
                    arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] -= intAutoSpeed;
                    moveObject(objStyle, arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] + 'px', '0px');
                    //doScrollBar(intAutoSpeed, (intAutoSpeed / arrScrollBarScaleFactors[arrPageScrollers.indexOf(objMySlidingList)]));
                }
                else
                {
                    arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] = 0;
                    moveObject(objStyle, arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] + 'px', '0px');                    
                    //resetScrollBar();
                }
            }
        }        
        objTimer = setTimeout("AutoScroll()", intTimeout);
    }
}

if(!Array.indexOf){
    Array.prototype.indexOf = function(obj){
        for(var i=0; i<this.length; i++){
            if(this[i]==obj){
                return i;
            }
        }
        return -1;
    }
}

function initScrollBar() {
    
    for (var i = 0; i < arrPageScrollers.length; i++) 
    {
        var objMyScroller = getObject(arrPageScrollers[i]);
        
        if (objMyScroller)
        {                      
            var objMyScrollerStyle = getObjectStyle(arrPageScrollers[i]);
            var objMyScrollerBarStyle = getObjectStyle(arrPageScrollers[i] + '_bar');
            
            var objMyScrollerWidth = (parseInt(objMyScrollerStyle.width));                             
            
            arrScrollBarScaleFactors[i] = (objMyScrollerWidth / arrMaskWidths[i]);            
            
            if (objMyScrollerWidth > arrMaskWidths[i]) {
                objMyScrollerBarStyle.width = (arrScrollBarWidths[i] / arrScrollBarScaleFactors[i]) + 'px';
            }
            else {
                objMyScrollerBarStyle.width = '0px'//arrScrollBarWidths[i] + 'px';
            }
        }
    }
}

function setScrollBar(target) {
    StopScroll();
    objMySlidingList = target;
    intScrollerWidth = arrMaskWidths[arrPageScrollers.indexOf(objMySlidingList)];  
    
    tmpMouseClickStart = tempX;
    blnDoDrag = true;        
}

function clearScrollBar() {
    blnDoDrag = false;
}

function scrollBar(e) {    
    getMouseXY(e);      
    
    if (blnDoDrag == true)
    {
        var xScrollerOffSet = 0;
        var xScrollBarOffSet = 0;
        
        xScrollerOffSet = ((tempLastX - tempX) * arrScrollBarScaleFactors[arrPageScrollers.indexOf(objMySlidingList)]);
        xScrollBarOffSet = tempX - tempLastX;        
    
        var objMyScrollerStyle = getObjectStyle(objMySlidingList);
        var objWidth = parseInt(objMyScrollerStyle.width);
        
        if (objMyScrollerStyle)
        {
            if ((objWidth + (arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] + xScrollerOffSet) > intScrollerWidth) && (arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] + xScrollerOffSet < 0))
            {                
                arrCurPos[arrPageScrollers.indexOf(objMySlidingList)] += xScrollerOffSet;                
                moveObject(objMyScrollerStyle, (arrCurPos[arrPageScrollers.indexOf(objMySlidingList)])  + 'px', '0px');
                doScrollBar(xScrollerOffSet, xScrollBarOffSet);                        
            }           
        }    
    }
    tempLastX = tempX;   
}

function doScrollBar(xScrollerOffSet, xScrollBarOffSet) {
           
    var objMyScrollerBarStyle = getObjectStyle(objMySlidingList + '_bar');

    if (objMyScrollerBarStyle) {
        arrCurBarPos[arrPageScrollers.indexOf(objMySlidingList)] += xScrollBarOffSet;
        moveObject(objMyScrollerBarStyle, (arrCurBarPos[arrPageScrollers.indexOf(objMySlidingList)])  + 'px', '0px');
    }
         
}

function resetScrollBar() {
           
    var objMyScrollerBarStyle = getObjectStyle(objMySlidingList + '_bar');

    if (objMyScrollerBarStyle) {
        arrCurBarPos[arrPageScrollers.indexOf(objMySlidingList)] = 0;
        moveObject(objMyScrollerBarStyle, (arrCurBarPos[arrPageScrollers.indexOf(objMySlidingList)])  + 'px', '0px');
    }
         
}

var tempX = 0;
var tempLastX = 0;
var tempY = 0;
var tmpMouseClickStart = 0;
var blnDoDrag = false;
var IE = document.all?true:false

function initMouseFinder() {
    if (!IE) document.captureEvents(Event.MOUSEMOVE)
    document.onmousemove = scrollBar;
    document.onmouseup = clearScrollBar;
}

function getMouseXY(e) {
    if (IE) { // grab the x-y pos.s if browser is IE
        tempX = event.clientX + document.body.scrollLeft
        tempY = event.clientY + document.body.scrollTop
    } else {  // grab the x-y pos.s if browser is NS
        tempX = e.pageX
        tempY = e.pageY
    }  
    // catch possible negative values in NS4
    if (tempX < 0){tempX = 0}
    if (tempY < 0){tempY = 0}
    
    return true
}

function disabletext(e){
    return false
}

function reEnable(){
    return true
}

//if the browser is IE4+
//document.onselectstart=new Function ("return false")

//if the browser is NS6
//if (window.sidebar){
//    document.onmousedown=disabletext
//    document.onclick=reEnable
//}
