 //We wrap all the code in an object so that it doesn't interfere with any other code
function auraScroller(content, container, scroller, scrollArea, noScrollContentSize, noScrollContainerSize, scrollContentSize, scrollContainerSize, step) {
		document.getElementById(content).style.width = noScrollContentSize;
	    document.getElementById(container).style.width = noScrollContainerSize;
	    document.getElementById(scrollArea).style.display = 'none';
//collect the variables
	     docH = document.getElementById(content).offsetHeight;
	     contH = document.getElementById(container).offsetHeight;
		document.getElementById(content).style.top = '0px';
		document.getElementById(scroller).style.top = '0px';

	if (docH > contH) {
   	    document.getElementById(scrollArea).style.display = 'block';
		document.getElementById(content).style.width = scrollContentSize;
	    document.getElementById(container).style.width = scrollContainerSize;
	     docH = document.getElementById(content).offsetHeight;
	     contH = document.getElementById(container).offsetHeight;
		scrollAreaH = document.getElementById(scrollArea).offsetHeight;
	     //calculate height of scroller and resize the scroller div
	     //(however, we make sure that it isn't to small for long pages)
	     scrollH = (contH * scrollAreaH) / docH;
	     //if(scrollH < 15) scrollH = 15;
	     document.getElementById(scroller).style.height = Math.round(scrollH) + "px";
     
	     //what is the effective scroll distance once the scoller's height has been taken into account
	     scrollDist = Math.round(scrollAreaH-scrollH);
	     //make the scroller div draggable
	     Drag.init(document.getElementById(scroller),null,0,0,-1,scrollDist);
     
	     //add ondrag function
	     if (step > 0) {
			//add ondrag function
	     	document.getElementById(scroller).onDrag = function (x,y) {
    	   		var scrollY = parseInt(document.getElementById(scroller).style.top);
		   		document.getElementById(content).style.top = 100; 
				var docY = (Math.round(( ( 0 - (scrollY * (docH - contH) / scrollDist))+(step/2)) / step )*step)-step;
	       		if (docY > 1) {document.getElementById(content).style.top = "0px"} else {document.getElementById(content).style.top = docY + "px"};
	     	}
		 } else {
		 	document.getElementById(scroller).onDrag = function (x,y) {
	    	   var scrollY = parseInt(document.getElementById(scroller).style.top);
			   document.getElementById(content).style.top = 100;
	    	   var docY = 0 - (scrollY * (docH - contH) / scrollDist);
		       document.getElementById(content).style.top = docY + "px";
		     }
		 }
	}
}

function auraScrollerPalleteSafari(content, container, scroller, scrollArea, noScrollContentSize, noScrollContainerSize, scrollContentSize, scrollContainerSize) {
//This is only for safari when scrolling through dollop flash files. This steps through scrolling 100px at a time.
		document.getElementById(content).style.width = noScrollContentSize;
	    document.getElementById(container).style.width = noScrollContainerSize;
	    document.getElementById(scrollArea).style.display = 'none';
//collect the variables
	     docH = document.getElementById(content).offsetHeight;
	     contH = document.getElementById(container).offsetHeight;
		document.getElementById(content).style.top = '0px';
		document.getElementById(scroller).style.top = '0px';

	if (docH > contH) {
   	    document.getElementById(scrollArea).style.display = 'block';
		document.getElementById(content).style.width = scrollContentSize;
	    document.getElementById(container).style.width = scrollContainerSize;
	     docH = document.getElementById(content).offsetHeight;
	     contH = document.getElementById(container).offsetHeight;
		scrollAreaH = document.getElementById(scrollArea).offsetHeight;
	     //calculate height of scroller and resize the scroller div
	     //(however, we make sure that it isn't to small for long pages)
	     scrollH = (contH * scrollAreaH) / docH;
	     //if(scrollH < 15) scrollH = 15;
	     document.getElementById(scroller).style.height = Math.round(scrollH) + "px";
     
	     //what is the effective scroll distance once the scoller's height has been taken into account
	     scrollDist = Math.round(scrollAreaH-scrollH);
	     //make the scroller div draggable
	     Drag.init(document.getElementById(scroller),null,0,0,-1,scrollDist);
     
	     //add ondrag function
	     document.getElementById(scroller).onDrag = function (x,y) {
    	   var scrollY = parseInt(document.getElementById(scroller).style.top);
		   document.getElementById(content).style.top = 100; 
		
			var docY = Math.round((( 0 - (scrollY * (docH - contH) / scrollDist))+50)/100)*100;
	       if (docY < 1) document.getElementById(content).style.top = docY + "px";
	     }
	}
}

/**
 * function onmousewheel,
 *	onmousewheel(element:Object [, callback:Function]):Void
 * @param	Object		window, document or DOM.element to use with callback
 * @param	Function	callback function with element scope (.call(...)) and delta wheel value as single parameter
 * @return	Void
 */
function onmousewheel(element, content, container, scroller, scrollArea) {

	callback = function test(delta) {
		if (delta < 0) { 
			auraScrollerMouse(content, container, scroller, scrollArea, 'down'); 
		} else {
			auraScrollerMouse(content, container, scroller, scrollArea, 'up');
		}
	}
	function __onwheel(event) {
		var	delta = 0;
		if(event.wheelDelta) {
			delta = event.wheelDelta / 120;
			if(window.opera)
				delta = -delta;
		}
		else if(event.detail)
			delta = -event.detail / 3;
		if(delta)
			callback.call(element, delta);
		if(event.preventDefault)
			event.preventDefault();
		event.returnValue = false;
		return false;
	};
	
	if(element.addEventListener && !window.opera)
		element.addEventListener("DOMMouseScroll", __onwheel, false);
	else
		element.onmousewheel = (function(base){return function(evt){
			if(!evt) evt = window.event;
			if(base) base.call(element, evt);
			return __onwheel(evt);
		}})(element.onmousewheel);
};

function auraScrollerMouse(content, container, scroller, scrollArea, direction) {
    docH = document.getElementById(content).offsetHeight;
    contH = document.getElementById(container).offsetHeight;
    scrollAreaH = document.getElementById(scrollArea).offsetHeight;
		if (docH > contH) {
	     scrollH = (contH * scrollAreaH) / docH;
	     //if(scrollH < 15) scrollH = 15;
	     scrollDist = Math.round(scrollAreaH-scrollH);
		var scrollerTop = parseInt(document.getElementById(scroller).style.top);
		var contentTop = parseInt(document.getElementById(content).style.top);
		var scrollerDistance = Math.round(scrollDist/((docH-contH)/20));
		var contentDistance = scrollerDistance * Math.round(((docH-contH)/scrollDist));
		if (direction == 'down') {
			if (scrollerTop < (scrollAreaH - scrollH)) {
				document.getElementById(scroller).style.top = parseInt(scrollerTop) + scrollerDistance + 'px';
			}
			if (contentTop > ((docH - docH * 2) + contH)) {
				document.getElementById(content).style.top = parseInt(contentTop) - contentDistance + 'px';
			}
		}
		if (direction == 'up') {
			if (scrollerTop > 0) {
				document.getElementById(scroller).style.top = parseInt(scrollerTop) - scrollerDistance + 'px';
			}
			if (contentTop < 0) {
				document.getElementById(content).style.top = parseInt(contentTop) + contentDistance + 'px';
			}
		}
	}	
}


