/*
 * uoscroll - Custom JavaScript Scrollbars
 *  (c) 2008 Erwin Eggenberger
 * Licensed under the GPL 2.0
*/



function UOSstartScroll( e ) {
	var el = e.element();
	var data = $A(arguments);
	el.sc.scrollTop =  Math.max(Math.min(el.sc.scrollTop+data[1],el.sc.scrollHeight-el.sc.getHeight()),0);
	return false;
}


function UOScroll( c ) {
	//defaults
	
	this.conf = $H({
		scrollbarclass : 'scrollbar',
		upclass : 'sbarrowup',
		downclass : 'sbarrowdown',
		arrowmargin : 2
	});
	
	// update conf with data provieded by user
	var data = $A(arguments);
	this.conf.update( $H(data[0]) );
}

UOScroll.prototype = new Object();
UOScroll.prototype.constructor = UOScroll;


UOScroll.prototype.applyToClass = function( cn ) {
	elements = $$(cn);
	for( var i=0; i<elements.length; ++i ) {
		this.applyToElement(elements[i]);
	}
}


UOScroll.prototype.applyToID = function( id ) {
	e = $(id);
	this.applyToElement(e);
}

UOScroll.prototype.applyToElement = function( se ) {
	Element.extend(se);

	var scrollheight = se.scrollHeight - parseInt(se.getStyle('padding-top'))-parseInt(se.getStyle('padding-bottom'));

	var height = this.getInnerHeight(se);
	
	if( scrollheight <= height ) {
		return;
	}

	var sc = new Element( 'div', { 'class' : 'scrollcontainer', 'style':'height:'+height+'px;overflow:hidden'});

	var children = se.childElements();
	for( var i=0; i<children.length; i++) {
		sc.appendChild(children[i]);
	}

	var sb = new Element( 'div' , {
			'class' : this.conf.get('scrollbarclass'),
			'style' : 'height:'+(height-this.conf.get('arrowmargin'))+'px;position:relative;'
		});

	var up = new Element( 'a', { 'href': '#' });
	up.sc = sc;
	Event.observe( up, 'click', UOSstartScroll.bindAsEventListener(up, -30));
	up.addClassName(this.conf.get('upclass'));
	sb.appendChild(up);
	
	var down = new Element( 'a', { 'href': '#' });
	down.sc = sc;
	Event.observe( down, 'click', UOSstartScroll.bindAsEventListener(down, 30));
	down.addClassName(this.conf.get('downclass'));
	sb.appendChild(down);
	
	se.appendChild(sb);
	se.appendChild(sc);
}

UOScroll.prototype.getInnerHeight = function( e ) {
	padding = parseInt(e.getStyle('padding-top'))+parseInt(e.getStyle('padding-bottom'));
	borders = parseInt(e.getStyle('border-top-width'))+parseInt(e.getStyle('border-bottom-width'));
	return e.getHeight()-padding-borders;
}


