// Create scrolling variable if it doesn't exist
if (!Scrolling) var Scrolling = {};

//Scroller constructor
Scrolling.Scroller = function (o, w, h, t) {
	//get the container
	
	if (o != null) {
		var list = o.getElementsByTagName("div");
		for (var i = 0; i < list.length; i++) {
			if (list[i].className.indexOf("Scroller-Container") > -1) {
				o = list[i];
			}
		}
	
		//private variables
		var self  = this;
		var _vwidth   = w;
		var _vheight  = h;
		var _twidth   = o.offsetWidth
		var _theight  = o.offsetHeight;
		var _hasTween = t ? true : false;
		var _timer, _x, _y;
		
		//public variables
		this.onScrollStart = function (){};
		this.onScrollStop  = function (){};
		this.onScroll      = function (){};
		this.scrollSpeed   = 30;
	
		//private functions
		function setPosition (x, y) {
			if (x < _vwidth - _twidth) 
				x = _vwidth - _twidth;
			if (x > 0) x = 0;
			if (y < _vheight - _theight) 
				y = _vheight - _theight;
			if (y > 0) y = 0;
			
			_x = x;
			_y = y;
			
			o.style.left = _x +"px";
			o.style.top  = _y +"px";
		};
		
		//public functions
		this.scrollBy = function (x, y) { 
			setPosition(_x - x, _y - y);
			this.onScroll();
		};
		
		this.scrollTo = function (x, y) { 
			setPosition(-x, -y);
			this.onScroll();
		};
		
		this.startScroll = function (x, y) {
			this.stopScroll();
			this.onScrollStart();
			_timer = window.setInterval(
				function () { self.scrollBy(x, y); }, this.scrollSpeed
			);
		};
			
		this.stopScroll  = function () { 
			if (_timer) window.clearInterval(_timer);
			this.onScrollStop();
		};
		
		this.reset = function () {
			_twidth  = o.offsetWidth
			_theight = o.offsetHeight;
			_x = 0;
			_y = 0;
			
			o.style.left = "0px";
			o.style.top  = "0px";
			
			if (_hasTween) t.apply(this);
		};
		
		this.swapContent = function (c, w, h) {
			o = c;
			var list = o.getElementsByTagName("div");
			for (var i = 0; i < list.length; i++) {
				if (list[i].className.indexOf("Scroller-Container") > -1) {
					o = list[i];
				}
			}
			
			if (w) _vwidth  = w;
			if (h) _vheight = h;
			reset();
		};
		
		this.getDimensions = function () {
			return {
				vwidth  : _vwidth,
				vheight : _vheight,
				twidth  : _twidth,
				theight : _theight,
				x : -_x, y : -_y
			};
		};
		
		this.getContent = function () {
			return o;
		};
		
		this.reset();
		
	}
};
