function TeenyOverlay(template,values,settings){
	var overlay = $TT(template).remove();
	settings = $pick(settings,{});
	var duration = window.ie6? 0: $pick(settings.duration,200);
	var zIndex = $pick(settings.zIndex,5000);
	var backgroundOpacity = window.ie6? 1: $pick(settings.backgroundOpacity,0.5);
	var backgroundColor = $pick(settings.backgroundColor,'#1e1e1e');
	var handle = $pick(settings.handle,'titleBar');
	var container, background, center, box;
	var params = {position:'absolute',left:'0px',top:'0px',width:'100%',height:'100%',border:'none',padding:0,margin:0};
	var hidden;
	overlay.open = function(){
		if(container) return;
		background=new Element('div');
		background.setStyles(params).setStyles({zIndex:zIndex,cursor:'default',background:backgroundColor,opacity:0});
		container=(new Element('div')).setStyles(params).setStyles({zIndex:zIndex+1});
		hidden = [];
		$$('select').each(function(e){
			hidden.push({ e: e, style: e.getStyle('visibility') });
			e.setStyle('visibility','hidden');
		});
		background.injectInside(document.body);
		container.injectInside(document.body);
		box=$(container.appendChild(overlay.visible(false).template));
		box.setStyles({zIndex:zIndex+2,position:'absolute',margin:0});
		center=function(){
			var c=box.getCoordinates();
			var m=container.getCoordinates();
			box.setStyle('left',(m.width/2)-(c.width/2)+'px');
			box.setStyle('top',(m.height/2)-(c.height/2)+'px');
		}
		center();
		window.addEvent('resize',center);
		overlay.set(values).set({closeOverlay:overlay.close});
		(new Fx.Style(box,'opacity',{duration:duration})).start(0,1);
		(new Fx.Style(background,'opacity',{duration:duration})).start(0,backgroundOpacity);
	}
	overlay.close = function(){
		if(!box) return;
		function clean(){
			window.removeEvent('resize',center);
			background.remove();
			container.remove();
			box.remove();
			box=background=container=center=null;
			hidden.each(function(o){
				o.e.setStyle('visibility', o.style);
			});
			hidden = null;
		}
		(new Fx.Style(box,'opacity',{duration:duration})).start(1,0);
		(new Fx.Style(background,'opacity',{duration:duration,onComplete:clean})).start(backgroundOpacity,0);
		box=(new Element('div')).setStyles(params).setStyles({zIndex:zIndex+3, background:backgroundColor,opacity:0.001}).injectInside(document.body);
	}
	overlay.appendTo=overlay.assignTo=overlay.remove=null;
	return overlay;
}
