﻿function PopLayer(aoConf){
	var U;
	if(typeof CNMS_Util == "undefined"){
		U = iUtil();
	}else{
		U = CNMS_Util();
	}
	var obj = {};
	obj.dom = {
		popLayer:aoConf.popLayer,
		defaultLayer:null,
		mask:null,
		obstacles:null,
		close:null,
		cancle:null,
		sure:null
	}
	/*
	if(!obj.dom.popLayer){
		return false;
	}*/
	
	obj.ctrl = {};
	obj.ctrl.obstacleTags = ["select","object","embed"];
	obj.ctrl.popLayerWidth = aoConf.width || parseInt(U.getStyle(obj.dom.popLayer,"width").split("px")[0]);
	obj.ctrl.popLayerHeight = aoConf.height ||  parseInt(U.getStyle(obj.dom.popLayer,"height").split("px")[0]);
	obj.ctrl.isIE6 = (document.all && (typeof XMLHttpRequest=="undefined"));
	
	obj.createPopLayer=createPopLayer;
	obj.setPopLayer=setPopLayer;
	obj.listen = listen;
	obj.show = show;
	obj.hide = hide;
	
	return obj;
	
	function listen(){
		U.addEvent(window,"resize",resizePopLayer);
	}
	function defaultListen(){
		if(!obj.dom.popLayer){
			return;//alert("null")
		}
		obj.dom.close=U.byClass("close",obj.dom.popLayer,"img")[0];
		if(obj.dom.close){
			if (obj.cancleHander) {
				U.addEvent(obj.dom.close,"click",obj.cancleHander);
			}else{
				U.addEvent(obj.dom.close,"click",obj.hide);
			}
		}
		var leContrl=U.byClass("layerContrl",obj.dom.popLayer,"dd")[0];
		if(leContrl){/*待改进*/
			obj.dom.sure=U.byClass("cnViBtnBlue",obj.dom.popLayer,"a")[0];
			obj.dom.cancle=U.byClass("cnViBtnSilver",obj.dom.popLayer,"a")[0];
		}
		if(obj.dom.cancle){
			if (obj.cancleHander) {
				U.addEvent(obj.dom.cancle,"click",obj.cancleHander);
			}else{
				U.addEvent(obj.dom.cancle,"click",obj.hide);
			}
			
		}
		//alert(obj.sureHander)
		if(obj.dom.sure){
			if(obj.sureHander){
				U.addEvent(obj.dom.sure,"click",obj.sureHander);
			}else{
				U.addEvent(obj.dom.sure,"click",obj.hide);
			}
		}
	}
	function show(){
		
		defaultListen();
		
		if(obj.ctrl.isIE6){
			hideObstacles();
		}
		if(!obj.dom.mask){
			//obj.dom.mask = document.getElementById("ONLY_FLOWTDIV");
			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);";		
			document.body.insertBefore(obj.dom.mask,document.body.firstChild);
			obj.dom.mask.style.display = "block";
		}else{
			obj.dom.mask.style.display = "block";
		}
		resizePopLayer();
		obj.dom.popLayer.style.display = "block";
		if(obj.onShow){
			obj.onShow();
		}
		
		//U.addEvent(,"keyup",wkeyUp);
	}
	function hide(){	
		if(obj.dom.mask){
			obj.dom.mask.style.display = "none";
			//obj.dom.mask.style.cssText ="";
		}
		obj.dom.popLayer.style.display = "none";
		if(obj.onHide){
			obj.onHide();
		}
		if(obj.ctrl.isIE6){
			showObstacles();
		}
		//document.body.removeChild(document.body.firstChild);
		//obj.dom.mask=null // important
		//clearObj(obj);
		//U=null;
		//delete U;
	}
	function createPopLayer(){
		if(!obj.dom.defaultLayer){
			var lsHtml=
			'<dl class="popLayer">'+
			    '<dt class="clearfix">'+
			        '<img class="close" src="http://xfiles.cdnmyspace.cn/dir/music/v1/img/k_ico_close.gif" alt="" />'+
			        '<span class="text">提示</span>'+
			    '</dt>'+
			    '<dd class="hr"></dd>'+                      
			    '<dd class="layerContend">'+
			    '</dd>'+
			    '<dd class="layerContrl"><a class="cnViBtnBlue popSure" href="javascript:void(0)"><b><i>确  定</i></b></a><a class="cnViBtnSilver popCancle" href="javascript:void(0)"><b><i>取  消</i></b></a></dd>'+
			'</dl>';
			var leLayer=document.createElement("div");
			leLayer.innerHTML=lsHtml;
			document.body.appendChild(leLayer);
			obj.dom.defaultLayer=leLayer.firstChild;//
			
		}
		obj.dom.popLayer=obj.dom.defaultLayer;
	}
	function setPopLayer(){		
		var leTitle=U.byClass("text",obj.dom.popLayer,"span")[0];
		var leContend=U.byClass("layerContend",obj.dom.popLayer,"dd")[0];
		leTitle.innerHTML=arguments[0];
		leContend.innerHTML=arguments[1];
		if(typeof(arguments[2])!="undefined"){
			var leSureButton=U.byClass("popSure",obj.dom.popLayer,"a")[0];	
			if(arguments[2]==""){
				leSureButton.innerHTML="";
			}else{
				leSureButton.getElementsByTagName("i")[0].innerHTML=arguments[2];
			}
		}
		if(typeof(arguments[3])!="undefined"){
			var leCancleButton=U.byClass("popCancle",obj.dom.popLayer,"a")[0];
			if(arguments[3]==""){
				leCancleButton.innerHTML="";
			}else{
				leCancleButton.getElementsByTagName("i")[0].innerHTML=arguments[3];
			}
			
		}
	}
	function clearObj(ao){
		/*
		for(var x in ao){
			alert(x);
			if(typeof(x)=="object"){
				clearObj(x);
			}else{
				x=null;
			}
			x=null;
			delete x;
		}*/
	}
	/*modified by csj*/
	function resizePopLayer(){
		var liPageWidth = U.getPageSize().x;
		var liPageHeight = U.getPageSize().y;
		var liViewWidth = U.getViewPort().x;
		var liViewHeight = U.getViewPort().y;
		
		var liMaxWidth = liPageWidth > liViewWidth ? liPageWidth : liViewWidth;
		liMaxWidth=liPageHeight > liViewHeight ? liMaxWidth-17 : liMaxWidth;
		var liMaxHeight = liPageHeight > liViewHeight ? liPageHeight : liViewHeight;	
		if(obj.dom.mask){
			obj.dom.mask.style.width = liMaxWidth + "px";
			obj.dom.mask.style.height = liMaxHeight + "px";		
		}

		obj.dom.popLayer.style.left = Math.round((liViewWidth - obj.ctrl.popLayerWidth) / 2) + U.getScroll().x + "px";
		obj.dom.popLayer.style.top = Math.round((liViewHeight - obj.ctrl.popLayerHeight) / 2) + U.getScroll().y + "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 iUtil(){
		return {
			addEvent:function(aeTag, asEvt, afHandler){
			    if (!aeTag) {
			        return false;
			    }
			    if (navigator.userAgent.indexOf("IE") != -1) {
			        aeTag.attachEvent("on" + asEvt, afHandler);
			    } else {
			        aeTag.addEventListener(asEvt, afHandler, false);
			    }
			},
			getPageSize:function(){
				var lsObj;		
				if(navigator.userAgent.indexOf("IE")!=-1){
					lsObj = "documentElement";
				}else{
					lsObj = "body";
				}
				return{
					x: document[lsObj].scrollWidth,
					y: document[lsObj].scrollHeight
				};
			},
			getScroll:function(){
				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
					};
				}	
			},	
			getViewPort:function(){
				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
					};
				}		 
				
			},
			byClass:function(asClass, aeP, asTag){
				var lxNew = [];
				asClass = asClass == null ? "" : asClass;
				aeP = aeP == null ? document : aeP;
				asTag = asTag == null ? "*" : asTag;
				
				var lxTag = aeP.getElementsByTagName(asTag);
				var pattern = new RegExp("(^|\s)" + asClass + "(\s|$)");
				for (var i = 0; i < lxTag.length; i++) {
					if ((" " + lxTag[i].className + " ").indexOf(" " + asClass + " ") != -1) {
						lxNew.push(lxTag[i]);
					}
				}
				return lxNew;
			},
			getStyle:function(aeNode,asName){
			    if (typeof(aeNode)=="string"){
					 aeNode=document.getElementById(aeNode);
				}
				var lsIE,lsW3C;
				if(asName.indexOf("-")!=-1){
					lsW3C = asName;
					// to be improved
			        lsIE = asName.split("-")[0]+asName.split("-")[1].charAt(0).toUpperCase()+asName.split("-")[1].substring(1);
				}else{
					lsIE = asName;
			        lsW3C = asName.replace(/([A-Z])/g, "-$1");
				}
			    return navigator.userAgent.indexOf("IE")!=-1 ?aeNode.currentStyle[lsIE]:document.defaultView.getComputedStyle(aeNode, "").getPropertyValue(lsW3C);
			}
		}
	}
}