﻿// JScript File

/************************************************************************************************************
(C) www.dhtmlgoodies.com, September 2005

This is a script from www.dhtmlgoodies.com. You will find this and a lot of other scripts at our website.	

Terms of use:
You are free to use this script as long as the copyright message is kept intact. However, you may not
redistribute, sell or repost it without our permission.

Thank you!

www.dhtmlgoodies.com
Alf Magne Kalleland

************************************************************************************************************/	
var contentHeight = 0; 	// The total height of the content
var visibleContentHeight = 0;	
var scrollActive = false;

var scrollHandleObj = false; // reference to the scroll handle
var scrollHandleHeight = false;
var scrollbarTop = false;
var eventYPos = false;

var scrollbuttonActive = false;
var scrollbuttonDirection = false;
var scrollbuttonSpeed = 2; // How fast the content scrolls when you click the scroll buttons(Up and down arrows)
var scrollTimer = 10;	// Also how fast the content scrolls. By decreasing this value, the content will move faster	

var scrollMoveToActive = false;
var scrollMoveToYPosition = false;

var scrolldivLocation = '';


function ScrollDiv()
{
    this.Container = null;
    this.Content = null;
    
    this.Template = '<div id="dhtmlgoodies_scrolldiv"><div id="scrolldiv_parentContainer"><div id="scrolldiv_content">{Content}</div></div>';
    this.Template += '<div id="scrolldiv_slider"><div id="scrolldiv_scrollUp"></div><div id="scrolldiv_scrollbar">';
    this.Template += '<div id="scrolldiv_theScroll"><span></span></div></div><div id="scrolldiv_scrollDown"></div>';
    this.Template += '</div><div class="clearL"></div></div>';
    
    this.Width = 335;
    this.Height = 425;
    this.ScrollButtonSpeed = 1;
    this.ScrollTimer = 5;
    this.Color = '';
    this.SliderBgColor = '';
    this.ContentBgColor = '';
}

ScrollDiv.prototype.Render = function()
{
    if ((this.Container!=null) && (this.Content!=null))
    {
        //se c'è un altro scrolldiv devo cancellarlo
        if (scrolldivLocation!='') document.getElementById(scrolldivLocation).innerHTML = '';
        
        this.Template = this.Template.replace('{Content}', this.Content);
        this.Container.innerHTML = this.Template;
        
        this.Init();
	    
	    //salvo in scrolldivLocation dove si trova lo scrolldiv
	    scrolldivLocation = this.Container.id;
    }
}

ScrollDiv.prototype.RenderEmpty = function()
{
    this.Content = '';
    this.Render();
}

ScrollDiv.prototype.Init = function()
{
    //funzioni richiamate dallo script
    scrolldiv_setColor(this.Color);	// Setting border color of the scrolling content
    setSliderBgColor(this.SliderBgColor);	// Setting color of the slider div
    setContentBgColor(this.ContentBgColor);	// Setting color of the scrolling content
    setScrollButtonSpeed(this.ScrollButtonSpeed);	// Setting speed of scrolling when someone clicks on the arrow or the slider
    setScrollTimer(this.ScrollTimer);	// speed of 1 and timer of 5 is the same as speed of 2 and timer on 10 - what's the difference? 1 and 5 will make the scroll move a little smoother.
    scrolldiv_setWidth(this.Width);	// Setting total width of scrolling div
    scrolldiv_setHeight(this.Height);	// Setting total height of scrolling div
    scrolldiv_initScroll();	// Initialize javascript functions
}

function scrollDiv_startScroll(e)
{
	if(document.all)e = event;
	scrollbarTop = document.getElementById('scrolldiv_theScroll').offsetTop;
	eventYPos = e.clientY;
	scrollActive = true;
}

function scrollDiv_stopScroll()
{
	scrollActive = false;
	scrollbuttonActive = false;
	scrollMoveToActive = false;
}

function scrollDiv_scroll(e)
{
	if(!scrollActive)return;
	if(document.all)e = event;
	if(e.button!=1 && document.all)return;
	var topPos = scrollbarTop + e.clientY - eventYPos; 
	if(topPos<0)topPos=0;
	if(topPos/1>visibleContentHeight-(scrollHandleHeight+4)/1)topPos = visibleContentHeight-(scrollHandleHeight+4);
	document.getElementById('scrolldiv_theScroll').style.top = topPos + 'px';
	document.getElementById('scrolldiv_content').style.top = 0 - Math.floor((contentHeight) * ((topPos)/(visibleContentHeight-scrollHandleHeight)))+'px' 
}

/*
Click on the slider
Move the content to the this point
*/
function scrolldiv_scrollMoveToInit(e)
{		
	if(document.all)e = event;
	scrollMoveToActive = true;
	scrollMoveToYPosition = e.clientY - document.getElementById('scrolldiv_scrollbar').offsetTop;
	if(document.getElementById('scrolldiv_theScroll').offsetTop/1 > scrollMoveToYPosition) scrollbuttonDirection = scrollbuttonSpeed*-2; else  scrollbuttonDirection = scrollbuttonSpeed*2;
	scrolldiv_scrollMoveTo();	
}

function scrolldiv_scrollMoveTo()
{
	if(!scrollMoveToActive || scrollActive)return;
	var topPos = document.getElementById('scrolldiv_theScroll').style.top.replace('px','');
	topPos = topPos/1 + scrollbuttonDirection;
	if(topPos<0){
		topPos=0;
		scrollMoveToActive=false;
	}
	if(topPos/1>visibleContentHeight-(scrollHandleHeight+4)/1){
		topPos = visibleContentHeight-(scrollHandleHeight+4);	
		scrollMoveToActive=false;
	}
	if(scrollbuttonDirection<0 && topPos<scrollMoveToYPosition-scrollHandleHeight/2)return;	
	if(scrollbuttonDirection>0 && topPos>scrollMoveToYPosition-scrollHandleHeight/2)return;			
	document.getElementById('scrolldiv_theScroll').style.top = topPos + 'px';
	document.getElementById('scrolldiv_content').style.top = 0 - Math.floor((contentHeight) * ((topPos)/(visibleContentHeight-scrollHandleHeight)))+'px' 		
	setTimeout('scrolldiv_scrollMoveTo()',scrollTimer);		
}

function cancelEvent()
{
	return false;			
}

function scrolldiv_scrollButton()
{
	if(this.id=='scrolldiv_scrollDown')scrollbuttonDirection = scrollbuttonSpeed; else scrollbuttonDirection = scrollbuttonSpeed*-1;
	scrollbuttonActive=true;
	scrolldiv_scrollButtonScroll();
}
function scrolldiv_scrollButtonScroll()
{
	if(!scrollbuttonActive)return;
	var topPos = document.getElementById('scrolldiv_theScroll').style.top.replace('px','');
	topPos = topPos/1 + scrollbuttonDirection;
	if(topPos<0){
		topPos=0;
		scrollbuttonActive=false;
	}
	if(topPos/1>visibleContentHeight-(scrollHandleHeight+4)/1){
		topPos = visibleContentHeight-(scrollHandleHeight+4);	
		scrollbuttonActive=false;
	}	
	document.getElementById('scrolldiv_theScroll').style.top = topPos + 'px';
	document.getElementById('scrolldiv_content').style.top = 0 - Math.floor((contentHeight) * ((topPos)/(visibleContentHeight-scrollHandleHeight)))+'px' 			
	setTimeout('scrolldiv_scrollButtonScroll()',scrollTimer);
}
function scrolldiv_scrollButtonStop()
{
	scrollbuttonActive = false;
}


function scrolldiv_initScroll()
{
	visibleContentHeight = document.getElementById('scrolldiv_scrollbar').offsetHeight ;
	//alert('visibleContentHeight = ' + visibleContentHeight);
	contentHeight = document.getElementById('scrolldiv_content').offsetHeight - visibleContentHeight;
	//alert('contentHeight = ' + contentHeight);
	scrollHandleObj = document.getElementById('scrolldiv_theScroll');
	scrollHandleHeight = scrollHandleObj.offsetHeight;
	//alert('scrollHandleHeight = ' + scrollHandleHeight);
	scrollbarTop = document.getElementById('scrolldiv_scrollbar').offsetTop;		
	document.getElementById('scrolldiv_theScroll').onmousedown = scrollDiv_startScroll;
	document.body.onmousemove = scrollDiv_scroll;
	document.getElementById('scrolldiv_scrollbar').onselectstart = cancelEvent;
	document.getElementById('scrolldiv_theScroll').onmouseup = scrollDiv_stopScroll;
	if(document.all)document.body.onmouseup = scrollDiv_stopScroll; else document.documentElement.onmouseup = scrollDiv_stopScroll;
	document.getElementById('scrolldiv_scrollDown').onmousedown = scrolldiv_scrollButton;
	document.getElementById('scrolldiv_scrollUp').onmousedown = scrolldiv_scrollButton;
	document.getElementById('scrolldiv_scrollDown').onmouseup = scrolldiv_scrollButtonStop;
	document.getElementById('scrolldiv_scrollUp').onmouseup = scrolldiv_scrollButtonStop;
	document.getElementById('scrolldiv_scrollUp').onselectstart = cancelEvent;
	document.getElementById('scrolldiv_scrollDown').onselectstart = cancelEvent;
	document.getElementById('scrolldiv_scrollbar').onmousedown = scrolldiv_scrollMoveToInit;
	
	document.getElementById('scrolldiv_theScroll').style.display = (contentHeight<0) ? 'none' : 'block';
}
/*
Change from the default color
*/	
function scrolldiv_setColor(rgbColor)
{
	document.getElementById('scrolldiv_scrollbar').style.borderColor = rgbColor;
	document.getElementById('scrolldiv_theScroll').style.backgroundColor = rgbColor;
	document.getElementById('scrolldiv_scrollUp').style.borderColor = rgbColor;
	document.getElementById('scrolldiv_scrollDown').style.borderColor = rgbColor;
	document.getElementById('scrolldiv_scrollUp').style.color = rgbColor;
	document.getElementById('scrolldiv_scrollDown').style.color = rgbColor;
	document.getElementById('scrolldiv_parentContainer').style.borderColor = rgbColor;
}
/*
Setting total width of scrolling div
*/
function scrolldiv_setWidth(newWidth)
{
	document.getElementById('dhtmlgoodies_scrolldiv').style.width = newWidth + 'px';
	document.getElementById('scrolldiv_parentContainer').style.width = newWidth-30 + 'px';		
}

/*
Setting total height of scrolling div
*/
function scrolldiv_setHeight(newHeight)
{
	document.getElementById('dhtmlgoodies_scrolldiv').style.height = newHeight + 'px';
	document.getElementById('scrolldiv_parentContainer').style.height = newHeight + 'px';
	document.getElementById('scrolldiv_slider').style.height = newHeight + 'px';
	document.getElementById('scrolldiv_scrollbar').style.height = newHeight-40 + 'px';		
}
/*
Setting new background color to the slider 
*/
function setSliderBgColor(rgbColor)
{
	document.getElementById('scrolldiv_scrollbar').style.backgroundColor = rgbColor;
	document.getElementById('scrolldiv_scrollUp').style.backgroundColor = rgbColor;
	document.getElementById('scrolldiv_scrollDown').style.backgroundColor = rgbColor;
}
/*
Setting new content background color
*/
function setContentBgColor(rgbColor)
{
	document.getElementById('scrolldiv_parentContainer').style.backgroundColor = rgbColor;
}

/*
Setting scroll button speed
*/
function setScrollButtonSpeed(newScrollButtonSpeed)
{
	scrollbuttonSpeed = newScrollButtonSpeed;
}
/*
Setting interval of the scroll
*/
function setScrollTimer(newInterval)
{
	scrollTimer = newInterval;
}