
var ScrollControl = new Object();

ScrollControl.scroll_distance = 15;
ScrollControl.scroll_interval = 100;

ScrollControl.activate_scroller =
function (oScroller)
{
	var sID = new String(oScroller.id);

	var mode = "";
	if (/_up$/.test(sID))
		mode = "up";
	if (/_down$/.test(sID))
		mode = "down";

	var target_id = sID.replace(/_(up|down)$/,"");
	var oTarget = document.getElementById(target_id);
	if (oTarget)
	{
		var obj = oTarget;
		obj.scroll_mode = "off";
		if (mode == "down")
		{
			oScroller.onmousedown = function ()
			{
				obj.scroll_mode =  "down";
				ScrollControl.scroll(obj);
			}
		}
		if (mode == "up")
		{
			oScroller.onmousedown = function ()
			{
				obj.scroll_mode =  "up";
				ScrollControl.scroll(obj);
			}
		}
		oScroller.onmouseout = oScroller.onmouseup = function ()
		{
			obj.scroll_mode = "off"
		}

	}
}

ScrollControl.scroll =
function (oTarget)
{
	var _scroll = function () {
		if (oTarget.scroll_mode == "down")
		{
			oTarget.scrollTop += ScrollControl.scroll_distance;
		}
		if (oTarget.scroll_mode == "up")
		{
			oTarget.scrollTop -= ScrollControl.scroll_distance;
		}
		if (oTarget.scroll_mode != "off")
		{
			setTimeout(_scroll, ScrollControl.scroll_interval);
		}
	}
	_scroll();
}

	

ScrollControl.activate_all =
function ()
{
	var scrollers = getElementsByTagAndClass(document, "*", "scroll_control");
	for (var i=0; i < scrollers.length; i++)
	{
		var scroller = scrollers[i];
		ScrollControl.activate_scroller(scroller);
	}
}

//***************************************************************************************
//***************************************************************************************

/*
 *
 * DOMComplete - Load Event
 *
 * Author: Diego Perini (diego.perini@gmail.com)
 * Updated: 06/08/2006
 * Version: 0.99.6-mini
 *
 */

/*
	This function is used to cause a function to load after the DOM
	has been loaded, but before binary files load. This will keep
	things like images, ads, etc slowing down the execution of your
	js
*/
function onDOMComplete(w, f) {
	var d = w.document, done = false;
	w.$DOMC = f;
	wait();

	if ((/WebKit|KHTML|MSIE/i).test(navigator.userAgent)) {
		poll();
	}

	function load(e) {
		if (!done) {
			done = true; stop(); w.$DOMC(e);
		}
	}

	function has(p) { return typeof d[p] != 'undefined'; }

	function poll() {
		if (d.body !== null && d.getElementsByTagName) {
			if (has('fileSize') && typeof d.fileSize != 'unknown') { load('fileSize'); }
			if (has('readyState') && (/loaded|complete/).test(d.readyState)) { load('readyState'); }
		}
		if (!done) { setTimeout(poll, 10); }
	}

	function stop() {
		if (typeof d.removeEventListener == 'function') {
			d.removeEventListener('DOMContentLoaded', load, false);
		}
	}

	function wait() {
		if (typeof d.addEventListener == 'function') {
			d.addEventListener('DOMContentLoaded', load, false);
		}
		var oldonload = w.onload;
		w.onload = function (e) {
			if (typeof oldonload == 'function') {
				oldonload();
			}
			load(e || this.event);
		};
	}
}

function DOMLoadHandler ()
{
	ScrollControl.activate_all(); //Activates the scroll buttons
}
//***************************************************************************************
//***************************************************************************************
// Gets the child elements of a certain tag and type from a dom object.
function getElementsByClassName(dom, tag_name, class_name)
{
	var classRE = new RegExp('\\b'+class_name+'\\b');
	var results = [];
	var temp_tags = dom.getElementsByTagName(tag_name);
	for (var i=0; i < temp_tags.length; i++)
	{
		if (classRE.test(temp_tags[i].className))
		{
			results.push(temp_tags[i]);
		}
	}
	return results;
}

function getElementsByTagAndClass(dom, tag_name, class_name)
{
	if (typeof(tag_name) == 'undefined' || tag_name == null )
	{
		tag_name = '*';
	}
	var children = (dom.getElementsByTagName(tag_name) 
		|| dom.all);

	var results = [];
	var count = 0;
	for (var i=0; i < children.length; i++)
	{
		var child = children[i];
		var classNames = child.className.split(" ");
		for (var j=0; j < classNames.length; j++)
		{
			if (classNames[j] == class_name)
			{
				results[count] = child;
				count++;
				break;
			}
		}
	}
	return results;
}

//***************************************************************************************
//***************************************************************************************