// 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();
	}
};
