﻿// JScript File

// Set the Event listeners for Both Firefox and Internet Explorer
if (window.addEventListener) {
window.addEventListener("DOMMouseScroll", getWheelFF, false); 
window.addEventListener("mousedown", getObjectDownFF, false);
window.addEventListener("mouseup", getObjectUpFF, false);
window.addEventListener("mousemove", getObjectMoveFF, false);
}
else 
{
document.onmousewheel = getWheelIE;
document.onmousedown = getObjectDownIE;
document.onmouseup = getObjectUpIE;
document.onmousemove = getObjectMoveIE;
}


// Global Variables.
var scrollableObject = "";
var scrollerObject = "";
var scrollableHeight = 0;
var scrollfactor = 20;
var currentTop = 0;
var totalScrolls = 0;
var maxScrolls = 0;
var scrollBarFactor = 5;
var movingObject = false;
var previousPosition = 0;


function getWheelIE()
{
    var e = window.event.srcElement;
    var found = false;
       
  if (window.event.type == "mousewheel") {
        
      // check to see if scollableObject is a parentNode of this object
      while(e.parentNode != null && found == false)
      {
        //alert(e.id);
        if(e.id == scrollableObject)
        {
            found = true;
        }
        else
        {
            e = e.parentNode;
        }
      }
      // if scrollableObject is a node of this preform scroll
       if (window.event && window.event.wheelDelta && found ) 
      {
        window.event.returnValue = false;
        if (window.event.wheelDelta > 0)
        {
            if(scrollUp())
            {
                window.event.returnValue = false;
            }
            else
            {
                window.event.returnValue = true;
            }
        }
        else 
        {
            if(scrollDown())
            {
                window.event.returnValue = false;
            }
            else
            {
                window.event.returnValue = true;
            }
        }
      }
 }
}


function getWheelFF(e)
{
  var e2 = e.target;
  var found = false;
  
  // check to see if scollableObject is a parentNode of this object
  while(e2.parentNode != null && found == false)
  {
    if(e2.id == scrollableObject)
    {
        found = true;
    }
    else
    {
        e2= e2.parentNode;
    }
  }
  // if scrollableObject is a node of this preform scroll
  if(found)
  { 
    if ( e.wheelDelta <= 0 || e.detail > 0) 
    {
        if(scrollDown())
        {
            e.preventDefault();            
        }
    }
    else 
    {
        if(scrollUp())
        {
            e.preventDefault();            
        }
    }
  }    
}

function getObjectDownIE()
{
    // if object clicked is the scrollerObject and the Left Mouse Button is click allow object to move.
    if(window.event.srcElement.id == scrollerObject && window.event.button == 1)
    {   
        movingObject = true;
        previousPosition = window.event.clientY;
    }
}

function getObjectUpIE()
{
    // When mouse button is depressed then stop the ability for the object to move when Mouse moves
    movingObject = false;
    previousPosition = 0;
}

function getObjectMoveIE()
{
    // WHen object has the ability to move then check to see if the difference between previous and current is positive or negative.
    if(movingObject == true)
    {
        if(previousPosition - window.event.clientY < 0)
        {
            scrollDown();
            previousPosition = window.event.clientY;
        }
        else if(previousPosition - window.event.clientY > 0)
        {
            scrollUp();
            previousPosition = window.event.clientY;
        }
    }
}

function getObjectDownFF(e)
{
     // if object clicked is the scrollerObject and the Left Mouse Button is click allow object to move.
   
    if(e.target.id == scrollerObject && e.button == 0)
    {   
        movingObject = true;
        previousPosition = e.clientY;
    }
}

function getObjectUpFF(e)
{
     // When mouse button is depressed then stop the ability for the object to move when Mouse moves
   
    movingObject = false;
    previousPosition = 0;
}

function getObjectMoveFF(e)
{
     // WHen object has the ability to move then check to see if the difference between previous and current is positive or negative.
    
    if(movingObject == true)
    {
        if(previousPosition - e.clientY < 0)
        {
            scrollDown();
            previousPosition = e.clientY;
        }
        else if(previousPosition - e.clientY > 0)
        {
            scrollUp();
            previousPosition = e.clientY;
        }
    }
}

function setScrollerSize(scrollobject, scroller, scrollobjectContainer)
{
    // set the scroller size and the objects define the scrollableObject and scrollerObject
    var x = document.getElementById(scrollobject);
    var y = document.getElementById(scroller);
    var z = document.getElementById(scrollobjectContainer);
    
    scrollableObject = scrollobject;
    scrollerObject = scroller;
    
    scrollableHeight = z.offsetHeight;
    
    if(x.offsetHeight < scrollableHeight)
    {
        document.getElementById("ScrollBarContainer").style.visibility = "hidden";
        return;
    }
    
    if(Math.ceil((x.offsetHeight - scrollableHeight)/scrollfactor) > (scrollableHeight/scrollBarFactor))
    {
        scrollBarFactor = 2;
    }
    
    maxScrolls = Math.ceil((x.offsetHeight - scrollableHeight)/scrollfactor);
    
    y.style.height = ((scrollableHeight - 10) - (maxScrolls * scrollBarFactor)) + "px";
    
    //alert(x.offsetHeight);
}

function scrollUp()
{
    // Scroll information in ScrollableObject up.
   if(scrollableObject != "")
   {
        var x = document.getElementById(scrollableObject);
        var y = document.getElementById(scrollerObject);
        
        if((totalScrolls - 1) < 0 )
        {
            x.style.top = "0px";
            currentTop = 0;            
            y.style.top = "0px";
            return false
            
        }
        else
        {
            x.style.top = currentTop + scrollfactor + "px";
            y.style.top = ((totalScrolls * scrollBarFactor) - scrollBarFactor) + "px";           
            currentTop = currentTop + scrollfactor;
            totalScrolls = totalScrolls - 1;
            return true;
            
        }
   }
}


function scrollDown()
{
    // scroll Information in ScrollableObject down.
   if(scrollableObject != "")
   {
        var x = document.getElementById(scrollableObject);
        var y = document.getElementById(scrollerObject);
        
        if((totalScrolls + 1) <= maxScrolls)
        {   
            x.style.top = currentTop - scrollfactor + "px";
            y.style.top = ((totalScrolls * scrollBarFactor) + scrollBarFactor) + "px";
            currentTop = currentTop - scrollfactor;
            totalScrolls = totalScrolls + 1;
            return true
        }
        return false
   }
}

