Text = {
	listeners: [],
	queue: "",
	div: "",
	busy: false,
	pos: 0,
	id: 0,
	
	show: function(name){
		document.getElementById(name+"_link").style.visibility = "hidden";
		document.getElementById(name+"_box").style.visibility = "visible";
		if(!this.busy){
			this.busy = true;
			document.getElementById(name+"_text").style.borderStyle = "solid"
			this.div = name;
			this.addListener(function(){document.getElementById(Text.div+"_text").style.borderStyle = "none";});
			this.scroll(0,name);	
		}
		else{
			this.queue = name;
			this.addListener(function(){Text.runQueue()});	
		}
	},
	
	hide: function(name){
		if(!this.busy){
			this.busy = true;
			var height = -1*parseInt(document.getElementById(name+"_text").style.height.replace("px",""));
			document.getElementById(name+"_text").style.borderStyle = "solid"
			this.div = name;
			this.addListener(function(){document.getElementById(Text.div+"_text").style.borderStyle = "none";});
			this.addListener(function(){document.getElementById(Text.div+"_link").style.visibility = "visible";});
			this.addListener(function(){document.getElementById(Text.div+"_box").style.visibility = "hidden";});
			this.scroll(height,name);	
		}
	},
	
	scroll: function(pos, id){
		if(!document.getElementById(id+"_text")){
			var pos = Text.pos;
			var id = Text.id;
		}
		else{
			Text.pos = pos;
			Text.id = id;
		}

		var elm = parseInt(document.getElementById(id+"_text").style.top.replace("px",""));
		var diff = Math.round((pos-elm)/4);
		document.getElementById(id+"_text").style.top = (elm+diff)+"px";
		if(Math.abs(pos-elm) <= 2){
			document.getElementById(id+"_text").style.top = pos+"px";
			Text.fireListeners();
			Text.busy = false;
		}
		else			
			window.setTimeout(Text.scroll, 100);
		
	},
	
	runQueue: function(){
		if(this.queue != ""){
			Text.busy = false;
			this.hide(this.div);
			this.addListener(function(){Text.show(Text.queue)});	
		}
	},
	
	addListener: function(l){
		this.listeners.push(l);
	},
	
	fireListeners: function(){
		while(this.listeners.length > 0){
			var func = this.listeners.shift();
			func();
		}
	}
}
