/**
 * layer_id - Node ID
 * type  - horizontal or vertical
 * speed - 1..100
 */
function make_carousel(layer_id, type, speed) {

	var div  = document.getElementById(layer_id);
	var cpos = {x:0, y:0}, delta = 0, interval = null;

	var make_speed = function(inp) {
	  var out = 0;
		out = parseInt(inp, 10);
		if(!out || out <= 0) {
		  out = 1;
		}
		if(out > 100) {
		  out = 100;
		}
	  out = parseInt(250 / (out / 2), 10);
		return out;
	}
	
	var coords  = function(e) {
    var body  = document.body || document.getElementsByTagName('body')[0]; 
		var scrlX = document.documentElement.scrollLeft + body.scrollLeft;
    var scrlY = document.documentElement.scrollTop  + body.scrollTop;
    return {
      x: e.pageX ? e.pageX : e.x + scrlX,
      y: e.pageY ? e.pageY : e.y + scrlY
    };
	}
	
	var offset = function(node) {
    var x = node.offsetLeft, y = node.offsetTop;
    if(node.offsetParent) {
      var pos = offset(node.offsetParent);
      x += pos.x; y += pos.y;
    }
    return {x:x, y:y};
	}

	var move = function() {
		if(type=='horizontal') {
			var sl = 0;
			sl = div.scrollLeft + (delta / speed);
			if(sl < 0) {
			  sl = 0;
			}
			if(sl > div.scrollWidth) {
			  sl = div.scrollWidth;
			}
			div.scrollLeft = sl;
		} else {
			var st = 0;
			st = div.scrollTop + (delta / speed);
			if(st < 0) {
			  st = 0;
			}
			if(st > div.scrollHeight) {
			  st = div.scrollHeight;
			}
			div.scrollTop = st;
		}	
	}
	
	var handler = function(e) {
		var crds = coords(e);
		delta = type=='horizontal' ? crds.x - cpos.x : crds.y - cpos.y;
	}
	
	var event = function(obj, event, handler) {
    var ievent = 'on'+event;
    if(obj.attachEvent) {
      obj.attachEvent(ievent, handler);
    } else if(obj.addEventListener) {
      obj.addEventListener(event, handler, false);
    } else {
      var older = obj[ievent];
      obj[ievent] = function(e) {
        e = e || window.event;
				older(e);
        handler(e);
      }
    }
	}

	if(div && (type=='vertical' || type=='horizontal')) {
	  speed = make_speed(speed);
		div.style.overflow = 'hidden';
		event(div, 'mouseover', function(e) {
			cpos = offset(div);
			cpos.x += div.offsetWidth  / 2;
			cpos.y += div.offsetHeight / 2;
			interval = setInterval(move, 10);
		});
		event(div, 'mouseout', function(e) {
		  clearInterval(interval);
		});
		event(div, 'mousemove', handler);
	}

}
