function main_runner(speed){
	main_runner.storage = new Array();
	main_runner.speed = speed;
}

main_runner.add = function(f){
	main_runner.storage[main_runner.storage.length] = f;
	if(main_runner.storage.length == 1) this.timerID = window.setInterval("main_runner.control()",main_runner.speed);
}

var count = 0;

main_runner.remove = function(f){
	for(var i=0;this.storage[i];i++){
		if(f == this.storage[i]){
			this.storage = this.storage.slice(0,i).concat(this.storage.slice(i+1));
			//break;
		}
	}
	if(this.storage.length == 0){
		window.clearInterval(this.timerID);
		this.timerID=null;
	}
	
}

main_runner.control = function(){
	var now = new Date().getTime();
	for(var i=0; this.storage[i]; i++){
		if(typeof this.storage[i] == "function") {
			this.storage[i]();
		} else {
			eval(this.storage[i]);
		}
	}
	
}


function slider(id,x,y,d){
	this.id = id;
	this.duration = d;
	this.x = x;
	this.y = y;
	this.checkPos = slider.checkPos;
	this.initObj = slider.initObj;
	if (!slider.storage) slider.storage = new Array();
	slider.remove(this.id);
	slider.add(this);
	slider.init();
	return this;
}

slider.init = function(){
	for(var i=0; slider.storage.length > i;i++){
		var thisObj = slider.storage[i];
		if(thisObj) thisObj.initObj();
	}
	main_runner.remove(slider.control);
	main_runner.add(slider.control);
}

slider.initObj = function(){
	this.el = document.getElementById(this.id);
	this.xp = parseInt(this.el.style.left.replace('px',''))|| 0;
	this.yp = parseInt(this.el.style.top.replace('px','')) || 0;
	this.ww = parseInt(this.el.style.width.replace('px','')) || "auto";
	this.hh = parseInt(this.el.style.height.replace('px','')) || "auto";
}

slider.reInit = function(){
	this.initTime = new Date().getTime();
}

slider.checkPos = function(){	
	if(!this.el) return;
	this.yy = parseInt(this.el.style.top.replace('px',''));
	this.yd = getScrollY() + this.yp;
	this.yd = (this.yd + this.y > this.yp) ? this.yd + this.y : this.yp;
	if (this.yd != this.yy) {
		//var last = this.now;
		//this.now = new Date().getTime();
		var speed = parseInt(this.duration / main_runner.speed);
		var delta = (this.yd - this.yy);
		var mv = (delta < 0) ? -4 : 4 ;
		mv = (Math.abs(delta) >= 8) ? mv : delta;
		this.ny = (Math.abs((delta/speed)) >= 4) ? (this.yy + parseInt((delta/speed))) : this.yy + mv;
		this.el.style.top = this.ny + 'px';
	}
}

slider.add = function(o){
	slider.storage[slider.storage.length] = o;
}

slider.remove = function(o){
	for(var i=0;this.storage[i];i++){
		
		if(o == this.storage[i].id){
			this.storage[i].el.style.top = this.storage[i].yp;
			this.storage = this.storage.slice(0,i).concat(this.storage.slice(i+1));
		}
	}
	if(this.storage.length == 0){
		main_runner.remove(slider.control);
	}
}

slider.control = function(){
	var function_name = "slider.control";
	for(var i=0; slider.storage.length > i;i++){
		var thisObj = slider.storage[i];
		if(thisObj) thisObj.checkPos();
	}
}

/********************************************************************
* Commun															*
********************************************************************/

// good getScrollY
function getScrollY(){
	var y=0;
	if(document.documentElement&&document.documentElement.scrollTop)
		y=document.documentElement.scrollTop;
	else if(document.body&&document.body.scrollTop)
		y=document.body.scrollTop;
	else if(window.pageYOffset)
		y=window.pageYOffset;
	else if(window.scrollY)
		y=window.scrollY;
	return parseInt(y);
}

function slideMe(id){
	new slider(id,0,0,1000);
}


function this_init(){
	main_runner(42); // 24/s: 42 12/s: 84 50=20/s
	new slider("menuFix",0,-200,500);
	
}

function unSlideMe(id){
	slider.remove(id);
}

window.onload = this_init;

