Context = {
	
};
Zjport = {};

// 设置为收藏
Zjport.setFavorite = function(title,url){
	if (window.sidebar) {
		window.sidebar.addPanel(title, url,"");
	} else if( document.all ) {
		window.external.AddFavorite(url,title);
	} else if( window.opera && window.print ) {
		return true;
	}
}

// 设置为首页
Zjport.setHomepage = function(url){
	if (document.all) {
		document.body.style.behavior='url(#default#homepage)';
  		document.body.setHomePage(url);
    }
    else if(window.sidebar){
    	if(window.netscape){
         	try{ 
            	netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); 
         	} 
         	catch (e){ 
    			alert( "该操作被浏览器拒绝，如果想启用该功能，请在地址栏内输入 about:config,然后将项 signed.applets.codebase_principal_support 值该为true" ); 
         	}
    	}
    	var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components. interfaces.nsIPrefBranch);
    	prefs.setCharPref('browser.startup.homepage',url);
 	}
}

Zjport.urlEncode = function(str) {
	return escape(str).replace(/\+/g,"%2B").replace(/%20/g, "+").replace(/\*/g, "%2A").replace(/\//g, "%2F").replace(/@/g, "%40");
}

Zjport.urlDecode = function(str) {
	return unescape(str.replace("+", " "));
}

Zjport.htmlDecode = function(str){
	var s = "";  
	if (str.length == 0)
		return "";  
 	s = str.replace(/&gt;/g, "&");  
   	s = s.replace(/&lt;/g, "<");  
  	s = s.replace(/&gt;/g, ">");  
	s = s.replace(/&nbsp;/g, "    ");  
  	s = s.replace(/&#39;/g, "\'");  
 	s = s.replace(/&quot;/g, "\"");  
	s = s.replace(/<br>/g, "\n");  
  	return s;  
}

Zjport.htmlEncode = function(str){
	var s = "";  
	if (str.length == 0)
		return "";  
	s = str.replace(/&/g,"&gt;");  
	s = s.replace(/</g,"&lt;");  
	s = s.replace(/>/g,"&gt;");  
	s = s.replace(/    /g,"&nbsp;");  
  	s = s.replace(/\'/g,"&#39;");  
	s = s.replace(/\"/g,"&quot;");  
	s = s.replace(/\n/g,"<br>");  
	return s;  
} 

Zjport.alert = function(str){
	var oPopup = window.createPopup();
	var oPopBody = oPopup.document;
	oPopBody.style.backgroundColor = "lightyellow";
	oPopBody.style.border = "solid black 1px";	
	oPopBody.innerHTML = str;
	oPopup.show(100, 100, 800, 300, document.body);
}

// 获得cookie值
Zjport.getCookie = function(name){
	var aCookie = document.cookie.split("; ");
 	for(var i=0;i<aCookie.length;i++){      
     	var aCrumb = aCookie[i].split("=");
      	if(name==aCrumb[0]){
      		return unescape(aCrumb[1]);   
      	}      
   	}
	return null;  
}

// 判断字符串是否为json格式
Zjport.isJSON = function(str) {
    if (str == "") return false;
	str = str.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
    return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
};

// 把字符串转换为json对象
Zjport.evalJSON = function(str) {
  	var json=window["eval"]("(" + str + ")");
    return json;
};

// 把按钮设为disable
Zjport.disableButtons = function(buttons){
	if (buttons) {
		$(buttons).each(
		  	function(){
		  		if($("#"+this)){
		  			$("#"+this).attr("disabled",true);
		  		}	
			}
		);
	}
}

// 恢复按钮
Zjport.enableButtons = function(buttons){
	if (buttons) {
		$(buttons).each(
		  	function(){
		  		if($("#"+this)){
		    		$("#"+this).attr("disabled",false);
		    	}
			}
		);
	}
}

// 验证窗体并提交，返回结果HTML或者弹出消息。
//options: 
//validate ：是否需要验证表单，不填为需要验证
//asynchronous : 是否是异步发送，默认为true，为异步发送
//buttons ：在执行时需要disable，执行完需要enable的按钮数组
//appendParam ：需要额外提交的请求参数
//beforeRequest ：在执行request之前，表单验证等操作之后需要执行的方法
//onInfo ：当返回结果是消息时(action中返回MESSAGE)，会调用的方法。
//receiver ：当返回结果是html块时会更新的div
//replace ：如果设为"true"，更新时会把div标签一起更新（如同更新outerHTML），否则更新innerHTML，默认为false
//afterUpdate ：当更新完div后会调用的方法
//afterReceive ：不论是更新div还是返回消息后都会调用的方法
//asynchronous : true=异步，false=同步
//onResponse : 如果定义当请求返回时仅进入该方法，不进去其他方法。
//useAjax : 是否使用ajax默认为true
Zjport.doSubmit = function(form, url, options) {
	options = options || {};
	Zjport.disableButtons(options.buttons);
	var useAjax=true;
	if (form!="") {
		// 如果加载了FCKeditor为editor控件设值
		if(typeof FCKeditorAPI != "undefined"){
			$("#"+form+" input[id=zjport_editor_names_recorder]").each(function (index, domEle) { 
				var editorId=$(domEle).val();
				$("[id="+editorId+"]").val(FCKeditorAPI.GetInstance(editorId).GetXHTML(false));
			});
		}
		if (options.validate != false && !Validator.Validate(form, 2)) {
			Zjport.enableButtons(options.buttons);
			return;
		}
	}
	var submitUrl = url;
	if(url.charAt(0)=="/" && Context.base){
		submitUrl = Context.base + url;
	}
	var useAjax=true;
	if(options.useAjax==false){
		useAjax=false;	
	}
	if(useAjax){
		var param;
		if (form!="") {
			param = $("#"+form).serialize();
			param = options.appendParam ? param + "&" + options.appendParam : param;
		} else{
			param = options.appendParam ? options.appendParam :"";
		}
		if (options.beforeRequest) {
			options.beforeRequest();
		}	
		var asynchronous=true;
		if(options.asynchronous==false){
			asynchronous=false;
		}
		var showError=false;
		if(options.showError==true){
			showError=true;
		}
		
		$.ajax({
			url : submitUrl,
			type : 'POST',
			async : asynchronous,
			data : param,
			dataType : "text",
			complete : function(transport,status){
				if(status=="success"){
					// 如果session已经关闭了就转到登录页面
					if( transport.getResponseHeader("sessionstatus") == "timeout"){ 
						//alert(Context.appTimeOut);
						top.window.location.href=top.window.location.pathname;
						return;
					} 
					if(options.onResponse){
						options.onResponse(transport.responseText);
					}
					else if (Zjport.isJSON(transport.responseText)) {
						var json=Zjport.evalJSON(transport.responseText);
						if (options.onInfo ) {
							options.onInfo(json.message,json.messageType);
						}
						else {
							if(json.message){
								alert(json.message);
							}
						}
					} 
					else if (options.receiver) {
						if(options.replace==true){
							$("#"+options.receiver).replaceWith(transport.responseText);
						}
						else{
							$("#"+options.receiver).html(transport.responseText);
						}
						if (options.afterUpdate) {
							options.afterUpdate();
						}	
					}
					if (options.afterReceive) {
						options.afterReceive();
					}
					Zjport.enableButtons(options.buttons);
				}
				else if(status=="error"){
					if(Context.service505Error){
						if(showError){
							alert(Context.service505Error);
						}
					}
					Zjport.enableButtons(options.buttons);
				}
			}
		});
	}
	// 使用非ajax方法提交
	else{
		submitUrl += options.appendParam?options.appendParam:"";
		if (form=="") {
			window.location = submitUrl;
		}
		else{
			$("#"+form).attr("action",submitUrl);
			$("#"+form).attr("method","post");
			$("#"+form).submit();
		}
		
	}
}

// 设置默认回车按钮
Zjport.clickWhenEnterPress = function(event,id) {
	if(document.all){
		if(event.keyCode==13) { 
			document.getElementById(id).click();
		}
	}
	else{
		if(event.which==13) { 
			var evt = document.createEvent("MouseEvents");
			evt.initEvent("click", true, true);
			document.getElementById(id).dispatchEvent(evt);
		} 
  	}  
}

// 把所有名称为name并且enable状态下的checkbox控件标记isCheck
Zjport.checkAll = function(name,isCheck){
	$(":checkbox:enabled[name=\""+name+"\"]").attr("checked",isCheck);
}

// 必须并且只能选择一条，否则提示并返回false
Zjport.isCheckedOne = function (name){
	var checkbox = $(":checkbox:enabled:checked[name=\""+name+"\"]");
	if(checkbox.length==0){
		alert("您还未选中数据!");
		return false;
	}
	else if(checkbox.length>1){
		alert("您只能同时修改一条数据!");
		return false;
	}
	else{
		return true;
	}
}

// 必须选中一条，否则提示并返回false
Zjport.isChecked = function (name){
	var checkbox = $(":checkbox:enabled:checked[name=\""+name+"\"]");
	if(checkbox.length==0){
		alert("您还未选中数据!");
		return false;
	}
	else{
		return true;
	}
}

// 取radio控件的值
Zjport.getRadioValue = function (name){
	var radio = $(":radio:enabled:checked[name=\""+name+"\"]");
	if(radio.length!=0){
		return radio.attr("value");
	}
	else{
		return undefined;
	}
}

//起始日期比较
Zjport.compareDate = function(startDate,endDate,msg) {
	var end = $("#"+endDate);
	var start = $("#"+startDate);
	if (start.val() =="" || end.val() == "") {
    	return true;// 如果有一个为空，就没必要进行比较,
	}
	var result = (end.val().replace(/-/g, "")*1 >= start.val().replace(/-/g, "")*1);
	if (!result) {
  		if(msg){
  			alert(msg);
  		}
  		else{
  			alert("起始时间不能大于结束时间，请核对！");
  		}
    	start[0].focus();
  	}
  	return result;
}

//数值起始比较
Zjport.compareNumber = function(startNumber,endNumber,fieldName) {
  	var d1 = $("#"+startNumber);
  	var d2 = $("#"+endNumber);
    
  	if (d1.val() =="" || d2.val() == "") {
    	return true;// 如果有一个为空，就没必要进行比较,
  	}
  	var re = /^[0-9]+.?[0-9]*$/;
  	if(!re.test(d1)){
     	alert(fieldName+"上限请输入数值！");
     	return false;
  	}
  	if(!re.test(d2)){
    	alert(fieldName+"下限请输入数值！");
     	return false;
  	}
  	var result = (parseFloat(d2)>=parseFloat(d1));
  	if (!result) {
    	alert(fieldName+"下限值应大于等于下限值！");
    	d1[0].focus();
  	}
  	return result;
}

// 表格控件相关方法
Zjport.Table = {};

// 显示加载图片
Zjport.Table.loadingPic = function(tBody, columnSpan) {
	tBody=$("#"+tBody);
	tBody.empty();
	if(columnSpan){
		tBody.append('<tr class="dynatable_tr"><td align="center" colSpan="'+columnSpan+'"><img src="'+Context.base+Context.theme+'/pic/loading.gif"></td></tr>');
	}
	else{
		tBody.append('<center><img src="'+Context.base+Context.theme+'/pic/loading.gif"></center>');
	}
}

// 分页调用的函数
Zjport.Table.gotoPage = function(formName, pg, divName, url) {
	Zjport.Table.loadingPic(divName);
	Zjport.doSubmit(formName, url, {
		receiver: divName,
		appendParam: "currPage="+pg
	});
}

Zjport.Table.onUpdateEvents={};

// 添加事件
Zjport.Table.addEvent = function(formName,func){
	Zjport.Table.onUpdateEvents[formName]=func;
};

// 获得返回值
Zjport.Table.getResultValue = function(formName,key){
	var tBody=$("#"+formName+"_tBody");
	var a;
	if(tBody){
		a=eval("("+tBody[0].resultValues+")")[key];
	}
	if(a != null && a != "undefind"){
		return a;
	}else{
		return "";
	}
};

// 设置标题
Zjport.Table.setTitle = function(formName,title){
	document.getElementById(formName+"_tHead_title").innerHTML=title;
}

// 选择显示列
Zjport.Table.columnSelect = function(formName){
	var form=document.getElementById(formName);
	form["__operation"].value = "column_select";
	var url =  form["__dynaQueryUri"].value;
	var result = window.showModalDialog(Context.base + url + "?"+$(form).serialize(),window,"dialogWidth=300px;dialogHeight=360px;center=yes;middle=yes;help=no;status=no;");
	if(result!=undefined){
		form["__showColumnIds"].value = result;
		form["__operation"].value = "table";
		var table = formName+"_table";
		var tBody = formName+"_tBody";
		Zjport.doSubmit(formName, url, {
			receiver: table,
			replace : true,
			afterUpdate: function() {
			  	Zjport.Table.onAfterUpdate(tBody);
			  	if(Zjport.Table.onUpdateEvents[formName]){
			  		Zjport.Table.onUpdateEvents[formName]();
			  	}
			},
			beforeRequest: function(){
				Zjport.Table.loadingPic(tBody,100);
			}
		});
	}
};

// 显示表格
Zjport.Table.showTable = function(formName){
	document.getElementById(formName+'_table').style.display = '';
	document.getElementById(formName)["__isDisplay"].value="true";
};

// 查询，内部调用，不暴露给外部使用
Zjport.Table.query = function(formName){
	var form = document.getElementById(formName);
	var isUseAjax = form["__isUseAjax"].value;
	if(isUseAjax=="true"){
		var url = form["__dynaQueryUri"].value;
		var tBody = formName+"_tBody";
		Zjport.doSubmit(formName, url, {
			receiver: tBody,
			replace : true,
			afterUpdate: function() {
			  	Zjport.Table.onAfterUpdate(tBody);
			  	if(Zjport.Table.onUpdateEvents[formName]){
			  		Zjport.Table.onUpdateEvents[formName]();
			  	}
			},
			beforeRequest: function(){
				Zjport.Table.loadingPic(tBody,100);
			}
		});
	}
	else{
		//window.location = "?"+$(form).serialize()
		form.method = "get";
		form.target = "_self";
		form.action = "";
		form.submit();
	}
}

// 分页查询
Zjport.Table.pageQuery = function(formName,currPage){
	var form = document.getElementById(formName);
	if(currPage<1){
		currPage=1;
	}
	else if(form["__pageCount"]&&currPage>form["__pageCount"].value){
		currPage=form["__pageCount"].value;
	}
	form["__paged"].value = "true";
	form["__operation"].value = "query";
	form["__currPage"].value = currPage;
	Zjport.Table.query(formName);
};



// 表格页面加载结束后执行的方法
Zjport.Table.onAfterUpdate = function(tBody){
	//Effect.Appear($(tBody).parentNode);
};

// 全查询
Zjport.Table.allQuery = function(formName){
	var form = document.getElementById(formName);
	form["__paged"].value = "false";
	form["__operation"].value = "query";
	Zjport.Table.query(formName);
};

// 设置每页的行数
Zjport.Table.setPagesize = function(formName) {
	var form = document.getElementById(formName);
	var pagesize = form["__pageSize"].value;
	if(pagesize<0){
		pagesize = 15;
	}
	var r=window.prompt("请设定每页的行数,最多支持每页20行。",pagesize);
	if(r==null){
		return false;
	}
	else if(0<r && r<=20 ){
		var form=document.getElementById(formName);
		form["__pageSize"].value = r;
		Zjport.Table.pageQuery(formName,1);
	}
	else{
		alert("必须输入1-20之间的整数！");
		Zjport.Table.setPagesize(formName);
	}
};

// 获得查询结果的记录数
Zjport.Table.getCount = function(formName) {
	var form = document.getElementById(formName);
	if(form["__count"]){
		return form["__count"].value;
	}
	else{
		alert("没有找到记录总数！");
		return false;
	}
};

// 导出excel
Zjport.Table.excelExport = function(formName) {
	var form = document.getElementById(formName);
	if(form["__count"]){
		var count = form["__count"].value;
		if (count>1000) {
			alert("当前数据量超过1000条，无法导出，请调整结果数量后重新导出！");
			return false;
		}
	}
	var __paged=form["__paged"].value;
	form["__paged"].value = "false";
	form["__operation"].value = "excel";
	form.action = Context.base + form["__dynaQueryUri"].value;
	form.target = "";
	form.method = "post";
	form.submit();
	form["__paged"].value=__paged;
};

//打印
Zjport.Table.print = function(formName){
	var form = document.getElementById(formName);
	if(form["__count"]){
		var count = form["__count"].value;
		if (count>1000) {
			alert("当前数据量超过1000条，无法打印，请调整结果数量后重新选择打印！");
			return false;
		}
	}
	var __paged=form["__paged"].value;
	form["__paged"].value = "false";
	form["__operation"].value = "print";
	form.action = Context.base + form["__dynaQueryUri"].value;
	form.target = "_blank";
	form.method = "post";
	form.submit();
	form["__paged"].value=__paged;
};

// 显示排序图片,td:dom对象
Zjport.Table.addOrderByPic = function(td,formName){
	var img= document.getElementById(formName+"_orderpic_"+td.columnIndex);
	if(img){
		if(td.getAttribute('asc')=='true'){
			img.src=Context.base+Context.theme+"/pic/dynatable_order_down.gif";
		}
		else if(td.getAttribute('asc')=='false'){
			img.src=Context.base+Context.theme+"/pic/dynatable_order_up.gif";
		}
		img.style.display="";
	}
};

// 隐藏排序图片
Zjport.Table.removeOrderByPic = function(td,formName){
	var img= document.getElementById(formName+"_orderpic_"+td.columnIndex);
	if(img){
		img.style.display="none"
	}
};

// 按字段排序
Zjport.Table.sortTable = function(td, formName) {
	var form = document.getElementById(formName);
  	var cells = $(td.parentNode.childNodes);
  	// 设定按钮css
 	cells.each(
 		function(i,node){
	    	if (node != td) {
	      		Zjport.Table.removeOrderByPic(node,formName);
    		} else {
    			var asc=node.getAttribute("asc");
    			var orderBy=node.getAttribute("orderBy");
      			if (asc == '' || asc == 'false') {
      				asc = "true";
      			} else {
      				asc = "false";
      			}
      			node.setAttribute('asc',asc);
      			form["__orderBy"].value = orderBy;
      			form["__asc"].value = asc;
      			Zjport.Table.addOrderByPic(node,formName);
    		}
  		}
  	);
  	form["__operation"].value = "query";
  	// 如果排序的话，是否需要返回第一页？
	// form["__currPage"].value = 1;
	Zjport.Table.query(formName);
};

// 树相关方法
Zjport.Tree = {};

// 显示加载图片
Zjport.Tree.loadingPic = function(id) {
	id=$("#"+id);
	id.empty();
  	id.append('<img src="'+Context.base+Context.theme+'/pic/loading.gif">');
}

Zjport.Tree.query = function(formName){
	// 异步更新div
	var form = document.getElementById(formName);
	form["__operation"].value = "query";
	var url = form["__dynaQueryUri"].value;
	Zjport.doSubmit(formName, url, {
		receiver : formName+"_t",
		replace : true
	});
	
}

Zjport.Tree.openChildren = function(formName,id){
	var div=$("#"+id);
	var children=$("#"+id+"_children");
	$("#"+id+"_o").show();
	$("#"+id+"_c").hide();
	children.show();	
	// 如果子节点还没有打开
	if(children.attr("isLazy")=="true"){
		// 异步更新div
		var form = document.getElementById(formName);
		form["__operation"].value = "list";
		var params = {
			"__depth":div.attr("depth"),
			"__treeNodeId":div.attr("id"),
			"__nodeId":div.attr("nodeId"),
			"__isFirstNode":div.attr("isFirstNode"),
			"__isLastNode":div.attr("isLastNode")
		};
		var url = form["__dynaQueryUri"].value;
		Zjport.doSubmit(formName, url, {
			onInfo : function(message){
				alert(message);
				children.empty();
				Zjport.Tree.closeChildren(formName,id);
			},
			receiver : id+"_children",
			appendParam : $.param(params),
			beforeRequest : function(){
				Zjport.Tree.loadingPic(id+"_children");
			},
			afterUpdate : function(){
				children.attr("childrenSize",children.children().length);
				children.attr("isLazy","false");	
			}
		});
	}
	
};

Zjport.Tree.closeChildren = function(formName,id){
	$("#"+id+"_o").hide();
	$("#"+id+"_c").show();
	$("#"+id+"_children").hide();
};

// isLeaf:是否是叶子节点（无子节点）
Zjport.Tree.addNode = function(formName,id,isLeaf,params){
	var div=$("#"+formName+" div[nodeId="+id+"]");
	if(div.length==0){
		alert("输入的id ("+id+") 不存在，无法新增！");
		return false;
	}
	var children=$("#"+div.attr("id")+"_children");
	if(children.length==0){
		alert("输入的id ("+id+") 节点无法新增子节点！");
		return false;
	}
	var lastNode=children.children("div:last-child");
	var form = document.getElementById(formName);
	form["__operation"].value = "addNode";
	params = $.extend(params,{
		"__isLeaf":isLeaf,
		"__depth":div.attr("depth"),
		"__childrenSize":children.attr("childrenSize"),
		"__treeNodeId":div.attr("id"),
		"__parentNodeId":div.attr("nodeId"),
		"__isFirstNode":div.attr("isFirstNode"),
		"__isLastNode":div.attr("isLastNode")
	});
	var url = form["__dynaQueryUri"].value;
	
	Zjport.doSubmit(formName, url, {
		appendParam : $.param(params),
		onResponse : function(html){
			children.append(html);	
		}
	});
};

Zjport.Tree.removeNode = function(formName,id){
	var div=$("#"+formName+" div[nodeId="+id+"]");
	if(div.length==0){
		alert("输入的id ("+id+") 不存在，无法删除！");
		return false;
	}
	var form = document.getElementById(formName);
	form["__operation"].value = "removeNode";
	var url = form["__dynaQueryUri"].value;
	Zjport.doSubmit(formName, url, {
		appendParam : $.param({"__nodeId":id})
	});
	div.remove();
};


// 下面是文件操作相关方法
Zjport.File = {};

// 验证文件后缀是否正确，file控件值变化时调用该方法
Zjport.File.vldFileValue = function(obj,accept){
	if(accept==""){
		return true;
	}
	if(obj.value==""){
		return true;
	}
	var fileSuffix=obj.value.substring(obj.value.lastIndexOf(".")+1,obj.value.length);
	var acceptArray=accept.split("/");
	for (var a in acceptArray){
		if(fileSuffix.toUpperCase()==acceptArray[a].toUpperCase()){
			return true;
		}
	}
	alert("不支持后缀名为\""+fileSuffix+"\"的文件，请重试！");
	obj=$(obj);
 	obj.after(obj.clone());
	obj.remove(); 
	return false;
}
//验证文件上传大小
Zjport.File.vldFileSize =function(obj,filesize){
	if(filesize==""){
		return true;
	}
	if(obj.value==""){
		return true;
	}
	var image=new Image();
	var size = new Number(filesize)
	if(Zjport.Browser.checkOS()=='MSIE'){//IE浏览器
	    image.dynsrc=obj.value;  
	    var real = image.fileSize;
	    if(real <= size){
	    	return true;
    	}
    	alert("上传的文件大小为"+(real/1024).toFixed(2)+"K,超过最大"+(size/1024).toFixed(2)+"K的许可");
    	obj=$(obj);
	 	obj.after(obj.clone());
		obj.remove(); 
	}else if(Zjport.Browser.checkOS()=='Firefox'){
		if(obj.files.item(0).fileSize <= new Number(filesize)){
	    	return true;
    	}
		alert("上传的文件大小为"+(obj.files.item(0).fileSize/1024).toFixed(2)+"K,超过最大"+(size/1024).toFixed(2)+"K的许可");
		obj.value="";
	}
    
    return false;
}

//浏览器特性操作
Zjport.Browser ={};
//检查浏览器版本
Zjport.Browser.checkOS = function(){
	if(navigator.userAgent.indexOf("MSIE")>0) { 
        return "MSIE"; 
   } 
   if(isFirefox=navigator.userAgent.indexOf("Firefox")>0){ 
        return "Firefox"; 
   } 
   if(isSafari=navigator.userAgent.indexOf("Safari")>0) { 
        return "Safari"; 
   }  
   if(isCamino=navigator.userAgent.indexOf("Camino")>0){ 
        return "Camino"; 
   } 
   if(isMozilla=navigator.userAgent.indexOf("Gecko/")>0){ 
        return "Gecko"; 
   } 
}

// 重写window.createPopup方法以兼容firefox
window.createPopup = function(){
	var setElementStyles = function( element, styleDict ) { 
		var style = element.style ; 
		for ( var styleName in styleDict ) 
			style[ styleName ] = styleDict[ styleName ] ; 
	}; 
	var eDiv = document.createElement( 'div' ); 
	setElementStyles( eDiv, {
	 	'position': 'absolute', 
	 	'top': 0 + 'px', 
	 	'left': 0 + 'px', 
	 	'width': 0 + 'px', 
	 	'height': 0 + 'px', 
	 	'zIndex': 200, 
	 	'display' : 'none', 
	 	'overflow' : 'hidden'
	 }); 
	 eDiv.body = eDiv ; 
	 var opened = false ; 
	 var setOpened = function( b ) { 
	 	opened = b; 
	 } ; 
	 var getOpened = function() { 
	 	return opened ; 
	 } 
	 var getCoordinates = function( oElement ) { 
	 	var coordinates = {x:0,y:0} ; 
	 	while( oElement ) { 
	 		coordinates.x += oElement.offsetLeft ; 
	 		coordinates.y += oElement.offsetTop ; 
	 		oElement = oElement.offsetParent ; 
	 	} ; 
	 	return coordinates ; 
	 } ; 
	 return { 
	 	htmlTxt : '', 
	 	document : eDiv, 
	 	isOpen : getOpened(), 
	 	isShow : false, 
	 	hide : function() { 
	 		eDiv.style.display = 'none'; 
	 		this.isShow = false ;
	 	},
	 	show : function( iX, iY, iWidth, iHeight, oElement ) { 
	 		if (!getOpened()) { 
	 			document.body.appendChild( eDiv ) ; 
	 			setOpened( true ) ; 
	 		}; 
	 		eDiv.innerHTML  = Zjport.htmlEncode(eDiv.innerHTML) ;
	 		var coordinates = getCoordinates(oElement) ; 
	 		eDiv.style.top = (iX + coordinates.x ) + 'px' ; 
	 		eDiv.style.left = (iY + coordinates.y ) + 'px' ; 
	 		eDiv.style.width = iWidth + 'px'; 
	 		eDiv.style.height = iHeight + 'px'; 
	 		eDiv.style.display = 'block'; 
	 		this.isShow = true ; 
	 		eDiv.ondblclick=this.hide;
	 	}
	}; 
}; 

