var TINY={};
TINY.box=function(){
	var popLayer;
	var p,m,b,fn,ic,iu,iw,ih,ia,f=0;
	return{
		show:function(c,u,w,h,a,t){
		  var layerId="ms_pop_layer_wrapper";
		  var maskerId="ms_pop_layer_masker";
		  var layer=$(layerId);
		  var masker=$("ms_pop_layer_masker");
		  if(!layer){
			layer=new Element("div",{
				"id":layerId,
				"styles":{
					"position":"absolute",
					"z-index":100
				}
			});		
			layer.innerHTML=c;
			document.body.appendChild(layer);
			popLayer=MS_PopLayer({
				popLayer:layer
			});
			popLayer.show();
		  }else{
			layer.innerHTML=c;
			masker.style.display = "block";
			layer.style.display="block";
      popLayer.ctrl.isShow = true;
      popLayer.resize();      
		  }
		  
		},		
		hide:function(){
			popLayer.hide();
		}		
	}
}();

function MS_PopLayer(aoConf){
	var obj = {};
	obj.dom = {
		popLayer:aoConf.popLayer,
		mask:null,
		obstacles:null
	}
	obj.event = {};
	obj.ctrl = {};
	obj.ctrl.obstacleTags = ["select","object","embed"];
	if(aoConf.hideObj){
		obj.ctrl.obstacleTags = aoConf.hideObj;
	}
	obj.ctrl.isShowObstacles = true;
	if(typeof(aoConf.isShowObstacles)!="undefined"){
		obj.ctrl.isShowObstacles = aoConf.isShowObstacles;
	}    
	obj.ctrl.isShow = false;
	obj.ctrl.topDiff = aoConf.topDiff||0;
	
	obj.resize = resize;
	obj.show = show;
	obj.hide = hide;
	
	return obj;
	
	function show(){
		if(obj.ctrl.isShowObstacles){
			hideObstacles();
		}			
		if(!obj.dom.mask){
			obj.dom.mask = document.createElement("div");
			obj.dom.mask.style.cssText = "position:absolute;left:0;top:0; z-index:10;background-color:black; opacity:0.5; filter:Alpha(opacity=50);";
		    obj.dom.mask.id="ms_pop_layer_masker";
			document.body.insertBefore(obj.dom.mask,document.body.firstChild);
		}else{
			obj.dom.mask.style.display = "block";
		}
		
		obj.dom.popLayer.style.display = "block";
		obj.ctrl.isShow = true;
		
		obj.resize();			
		if(obj.event.show){
			obj.event.show();
		}
	}
	function hide(){			
		if(obj.dom.mask){
			obj.dom.mask.style.display = "none";
		}
		obj.dom.popLayer.style.display = "none";
		if(obj.ctrl.isShowObstacles){
			showObstacles();
		}
		obj.ctrl.isShow = false;
		if(obj.event.hide){
			obj.event.hide();
		}			
	}
	function resize(){
		if(!obj.ctrl.isShow){
			return;
		}
		var liPageWidth = getPageSize().x;
		var liPageHeight = getPageSize().y;
		var liViewWidth = getViewPort().x;
		var liViewHeight = getViewPort().y;
		var liMaxHeight = liPageHeight > liViewHeight ? liPageHeight : liViewHeight;
		if(obj.dom.mask){
			obj.dom.mask.style.width = "100%";
			obj.dom.mask.style.height = liMaxHeight + "px";	
		}
		//fix profile bug in ie6 html{-overflow:hidden;}
		if(navigator.userAgent.indexOf("IE")!=-1){
			document.documentElement.style.overflow="auto";	
			document.body.style.height="auto";					
		}
		obj.dom.popLayer.style.left = Math.round((liViewWidth - obj.dom.popLayer.offsetWidth) / 2) + getScroll().x + "px";
		obj.dom.popLayer.style.top = Math.round((liViewHeight - obj.dom.popLayer.offsetHeight) / 2) + getScroll().y + obj.ctrl.topDiff + "px";
	}

	function showObstacles(){		
		for(var i=0; i<obj.dom.obstacles.length;i++){
			obj.dom.obstacles[i].style.visibility = "";
		}	
	}
	function hideObstacles(){
		obj.dom.obstacles = filterObstacles();
		for(var i=0; i<obj.dom.obstacles.length;i++){
			obj.dom.obstacles[i].style.visibility = "hidden";
		}	
	}	
	function filterObstacles(){
		var lxFilter = [];
		var lxObstaclesAll = getObstacles(document);
		var lxObstaclesInside = getObstacles(obj.dom.popLayer);
		for(var i=0; i<lxObstaclesAll.length;i++){
			var leObstacle = lxObstaclesAll[i];
			var flag = true;
			for(var j=0;j<lxObstaclesInside.length;j++){
				if(leObstacle == lxObstaclesInside[j]){
					flag = false;
					break;
				}
			}
			if(flag == true && leObstacle.style.visibility != "hidden"){
				lxFilter.push(leObstacle);
			}
		}
		return lxFilter;
		function getObstacles(aeNode){
			var lxObstacles = [];
			for(var i=0; i<obj.ctrl.obstacleTags.length;i++){
				var lxNode = aeNode.getElementsByTagName(obj.ctrl.obstacleTags[i]);
				for(var j=0;j<lxNode.length;j++){
					lxObstacles.push(lxNode[j]);
				}
			}
			return lxObstacles;
		}		
	}
	function getScroll(){
		if(navigator.userAgent.indexOf("IE")!=-1){
			return{
				x: document.documentElement.scrollLeft || document.body.scrollLeft,
				y: document.documentElement.scrollTop || document.body.scrollTop
			};
		}else{
			return{
				x: self.pageXOffset,
				y: self.pageYOffset
			};
		}	
	}
	function getPageSize(){
		var lsObj;		
		if(navigator.userAgent.indexOf("IE")!=-1){
			lsObj = "documentElement";
		}else{
			lsObj = "body";
		}
		return{
			x: document[lsObj].scrollWidth,
			y: document[lsObj].scrollHeight
		};
	}
	function getViewPort(){
		if(navigator.userAgent.indexOf("IE")!=-1){
			return{
				x: document.documentElement.clientWidth || document.body.clientWidth,
				y: document.documentElement.clientHeight || document.body.clientHeight
			};
		}else{
			return{
				x: self.innerWidth,
				y: self.innerHeight
			};
		}		 
		
	}    
}