
// DIV Scrollbar Javascript
// (c) 2005: MOKKA Medienagentur <office@mokka.at>
// Author: Kraft Bernhard <kraftb@mokka.at>

var currentScrollObj = 0;

var speed = 10;
var delay = 50;
var timeout = 0;

var drag_height = 22;
var drag_true_height = 24;
var drag_width = 7;
var container_height = 0;
var content_height = 0;

function debug(val, values) {
	cnt = 0;
	out = '';
	for (prop in val) {
		out = out + prop;
		if (values) {
			out = out + ' : ' + val[prop];
		}
		out = out + '        ';
		cnt++;
		if (!(cnt%5)) out = out + '\n';
	}
	alert(out);
}

function mka_divscrollbar(id, scrollbar_div, scrollbar_track, scrollbar_drag, scroll_div, up, down) {
	this.id = id;
	this.scrollbar_div = scrollbar_div;
	this.scrollbar_track = scrollbar_track;
	this.scrollbar_drag = scrollbar_drag;
	this.scroll_div = scroll_div;
	this.content = document.getElementById(this.scroll_div);
	this.drag = document.getElementById(this.scrollbar_drag);
	this.track = document.getElementById(this.scrollbar_track);
	this.drag_height = this.drag.offsetHeight;
	this.track_height = this.track.offsetHeight;
	this.max_top = this.track_height - this.drag_height;
	this.ref = 'mka_divscrollbar_'+this.id;
	eval(this.ref+'=this');
	this.drag.obj = this;
	this.drag.onmousedown = this.start_drag;

		// Up and Down Arrows
	this.up = document.getElementById(up);
	this.down = document.getElementById(down);
	this.up.obj = this;
	this.down.obj = this;
	this.up.onmouseover = this.move_up;
	this.up.onmouseout = this.move_stop;
	this.down.onmouseover = this.move_down;
	this.down.onmouseout = this.move_stop;
}

mka_divscrollbar.prototype.start_drag = function(event) {
	if (!event) event = window.event;
	var yPos = event.pageY ? event.pageY : event.clientY;
	this.oldPos = yPos;
	this.startDragOffset = yPos;
	top_val = parseInt(this.style.top);
	if (isNaN(top_val)) top_val = 0;
	this.startDragTop = top_val;
	currentScrollObj = this.obj;
	document.onmousemove = this.obj.do_drag;
	document.onmouseup = this.obj.stop_drag;
	return false;
}

mka_divscrollbar.prototype.do_drag = function(event) {
	if (!event) event = window.event;
	var yPos = event.pageY ? event.pageY : event.clientY;
	var obj = currentScrollObj;
	if (yPos!=obj.drag.oldPos) {
		obj.drag.oldPos = yPos;
		top_val = obj.drag.startDragTop;
		var diff = yPos - obj.drag.startDragOffset;
		if ((diff+top_val)<=0) {
			obj.drag.style.top = '0px';
			new_top = 0;
		} else if ((diff+top_val)>obj.max_top) {
			obj.drag.style.top = obj.max_top+'px';
			new_top = obj.max_top;
		} else {
			obj.drag.style.top = (diff+top_val)+'px';
			new_top = diff+top_val;
		}
		yfact = new_top/obj.track_height;
//		alert(yfact);
//		alert(content_height);
		ctop = -(yfact*content_height);
//		alert(ctop);
		obj.content.style.top = ctop+'px';
	}
	return false;
}


mka_divscrollbar.prototype.stop_drag = function(event) {
	this.onmousemove = '';
	this.onmouseup = '';
	currentScrollObj = '';
	return false;
}


mka_divscrollbar.prototype.move_up = function(event) {
	if (this.obj) obj = this.obj;
	else obj = this;
	var top_val = parseInt(obj.content.style.top);
	if (isNaN(top_val)) top_val = 0;
	if (top_val < 0) {
		new_top = top_val+speed;
		if (new_top>0) new_top = 0;
		obj.content.style.top = new_top+'px';
		obj.set_scroll(new_top);
		timeout = window.setTimeout(obj.ref+'.move_up()', delay);
	}
	return false;
}

mka_divscrollbar.prototype.move_down = function(event) {
	if (this.obj) obj = this.obj;
	else obj = this;
	var top_val = parseInt(obj.content.style.top);
	if (isNaN(top_val)) top_val = 0;
	if ((top_val-speed) > (-(content_height-container_height))) {
		obj.content.style.top = (top_val-speed)+'px';
		obj.set_scroll(top_val-speed);
		timeout = window.setTimeout(obj.ref+'.move_down()', delay);
	}
	return false;
}

mka_divscrollbar.prototype.set_scroll = function(top_val) {
	yfact = (-top_val)/content_height;
	slider_top = Math.round(this.track_height*yfact);
	this.drag.style.top = slider_top+'px';
}

mka_divscrollbar.prototype.move_stop = function(event) {
	window.clearTimeout(timeout);
	return true;
}

function init_scroll(name, scroll_ar, scroll_cont, scroll, track, slider, scrolldrag_top, scrolldrag_bottom, up, down) {
	var content = document.getElementById(scroll_ar);
	var container = document.getElementById(scroll_cont);
	var trackobj = document.getElementById(track);
	var track_height = trackobj.offsetHeight;
	container_height = container.offsetHeight;
	content_height = content.offsetHeight;

	var scroll_obj = document.getElementById(scroll);
	if (content_height < container_height) {
	} else {
		scroll_obj.style.visibility = 'visible';
		fact = container_height/content_height;
		drag_s_height = Math.round(track_height*fact);
		if (drag_s_height > (drag_height+2)) {
			topbot_height = Math.round((drag_s_height-drag_height)/2);
			var top = document.getElementById(scrolldrag_top);
			var bot = document.getElementById(scrolldrag_bottom);
			top.height = topbot_height;
			top.width = drag_width;
			bot.height = topbot_height;
			bot.width = drag_width;
		}
		new mka_divscrollbar(name, scroll, track, slider, scroll_ar, up, down);
	}
}


