/* <script language="JavaScript" type="text/javascript">					  */
/* ************************************************************************** **
initialize_scroll adds scrollbuttons to div_element (if needed).
ARGS:
	div_element		: the id of the div tag to scroll
	scroll_speed	: amount of pixels to scroll by, pr 0.01 sec
	scroll_position	: 1 (top/left), 2 (top/right), 3 (bottom/left), 4 (bottom/right)
	side_by_side	: true (up/down buttons shown side by side), false (buttons shown above each other)
	v_offset		: vertical pixel-adjustment in absolute relation to div_element's parent
	h_offset		: horisontal pixel-adjustment in absolute relation to div_element's parent
	opacity			: Between 0 and 100: amount of opacity to apply to the up/down buttons

EXAMPLE:
	initialize_scroll("div_content", "images/arrow_up.png", "images/arrow_dn.png", 8, 8, 5, 4, false, 8, 8, 90);
	(place this at bottom of document - or after div_content)

WARNING:
	* g_up_src and g_dn_src MUST each be paired with a image for "mouseover"-event with 
	  "_active" applied to the end of the name.
	  I.e.: "arrow_up.png" -> "arrow_up_active.png"
	* div_element is contained in a block-style element

CREDITS:
	Owes the mouswheel logic to http://adomas.org/javascript-mouse-wheel/ - thumbs up!
** ************************************************************************** */

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

function initialize_scroll(div_element, img_up_src, img_dn_src, img_w, img_h, scroll_speed, scroll_position, side_by_side, v_offset, h_offset, opacity)
{
	var div_content	 = document.getElementById(div_element);
	var text_height  = div_content.scrollHeight;
	var area_height  = div_content.clientHeight;
	var div_scroll;

	window.g_content = div_element;
	window.g_up_src  = img_up_src;
	window.g_dn_src  = img_dn_src;
	window.g_img_w   = img_w;
	window.g_img_h   = img_h;
	window.g_speed	 = scroll_speed;
	window.g_by_side = side_by_side;
	window.g_opacity = (opacity == null) ? 100 : opacity;

	scroll_position	 = (scroll_position == null) ? 4 : scroll_position;
	v_offset		 = (v_offset == null) ? img_w : v_offset;
	h_offset		 = (h_offset == null) ? img_h : h_offset;

	if (text_height > area_height)
	{
		create_scroll_div();

		div_scroll	= document.getElementById("scroll_div");
		div_scroll.style.display	= "block";
		div_scroll.style.position	= "absolute";

		if (scroll_position == 1 || scroll_position == 3)
			div_scroll.style.left	= h_offset + "px";

		if (scroll_position == 2 || scroll_position == 4)
			div_scroll.style.right	= h_offset + "px";

		if (scroll_position < 3)
			div_scroll.style.top	= v_offset + "px";

		if (scroll_position > 2)
			div_scroll.style.bottom	= v_offset + "px";
	}
	else
	{
		if (document.getElementById("scroll_div"))
		{
			var scroll_div = document.getElementById("scroll_div");
			scroll_div.parentNode.removeChild(scroll_div);
		}
	}
}

function attach_event_listener(obj_id, event_type, func)
{
	var div = document.getElementById(obj_id);

	if (window.attachEvent)
		div.attachEvent("on" + event_type, func);
	else
		div.addEventListener(event_type, func, false);
}

function detach_event_listener(obj_id, event_type, func)
{
	if (window.attachEvent)
		obj_id.detachEvent("on" + event_type, func);
	else
		obj_id.removeEventListener(event_type, func, false);
}

function toggle_image(obj)
{
	var obj_src = obj.src;
	var src_idx	= obj_src.lastIndexOf('.');
	var src_str	= obj_src.substring(0, src_idx);
	var src_ext	= obj_src.substr(src_idx);

	if (window.g_scrolling)
		obj.src = src_str + "_active" + src_ext;
	else
		obj.src = obj_src.replace("_active.", ".");
}

function scroll_event(e)
{
	if(document.all) e = event;

	var event_element = (e.srcElement) ? e.srcElement : e.target;

	window.g_scrolling = (e.type == "mouseover") ? true : false;
	window.g_direction = (event_element.id.substr(0, 9) == "scroll_up") ? -1 : 1;
	window.g_interval;

	if (window.g_scrolling)
		window.g_interval = setInterval("do_scroll()", 10);
	else
		clearInterval(window.g_interval);

	toggle_image(event_element);
}

function do_scroll(pixels)
{
	if (pixels == undefined)
		pixels = window.g_speed;

	var div_content	= document.getElementById(window.g_content);
	var text_height = div_content.scrollHeight;
	var scroll_pos  = div_content.scrollTop;
	var area_height = div_content.clientHeight;

	
	var current_x	= parseInt(scroll_pos);
	var new_x		= current_x + (pixels * window.g_direction);

	div_content.scrollTop = new_x;
}

function do_wheel_scroll(delta)
{
	if (delta < 0)
		window.g_direction = 1;
	else
		window.g_direction = -1;

	do_scroll(10);
}

function wheel_listener(event)
{
	var delta = 0;

	if (!event)
		event = window.event;

	if (event.wheelDelta)
	{
		delta = event.wheelDelta / 120; 

		if (window.opera)
			delta = -delta;
	}
	else if (event.detail)
	{
		delta = -event.detail / 3;
	}

	if (delta)
		do_wheel_scroll(delta);

/*
	// add mechanics for only scrolling when above the the div_content element
	var elm = document.elementFromPoint(event.clientX, event.clientY);
	dbg(elm.id);
	if (event.preventDefault)
		event.preventDefault();

	event.returnValue = false;
*/
}

function create_scroll_div()
{
	var div_element = window.g_content;
	var div_content	= document.getElementById(div_element);

	var up  = document.createElement("img");
	var dn  = document.createElement("img");
	var div = document.createElement("div");

	up.id				= "scroll_up";
	up.src				= window.g_up_src;
	up.style.width		= window.g_img_w + "px";
	up.style.height		= window.g_img_h + "px";
	up.style.cursor		= "hand";
	up.style.cursor		= "pointer";

	dn.id				= "scroll_dn";
	dn.src				= window.g_dn_src;
	dn.style.width		= window.g_img_w + "px";
	dn.style.height		= window.g_img_h + "px";
	dn.style.cursor		= "hand";
	dn.style.cursor		= "pointer";

	div.id				= "scroll_div";
	div.style.display	= "none";
	div.style.width		= (window.g_by_side) ? (window.g_img_h * 2) + "px" : window.g_img_w + "px";
	div.style.height	= (window.g_by_side) ? window.g_img_w + "px" : (window.g_img_h * 2) + "px";
	if (document.all)
		div.style.filter= "alpha(style=0, opacity=" + window.g_opacity + ")";
	else
		div.style.opacity= (window.g_opacity / 100);

	div.appendChild(up);
	div.appendChild(dn);
	div_content.parentNode.appendChild(div);

	attach_event_listener("scroll_up", "mouseover", scroll_event);
	attach_event_listener("scroll_up", "mouseout", scroll_event);
	attach_event_listener("scroll_dn", "mouseover", scroll_event);
	attach_event_listener("scroll_dn", "mouseout", scroll_event);

	if (window.addEventListener)
		window.addEventListener('DOMMouseScroll', wheel_listener, false);
	window.onmousewheel = document.onmousewheel = wheel_listener;
}

