text: function initEnv() {
  	$("body").append(DWZ.frag["dwzFrag"]);
  
  	$(window).resize(function() {
  		initLayout();
  		$(this).trigger(DWZ.eventType.resizeGrid);
  	});
  
  	var ajaxbg = $("#background,#progressBar");
  	ajaxbg.hide();
  	$(document).ajaxStart(function() {
  		ajaxbg.show();
  	}).ajaxStop(function() {
  		ajaxbg.hide();
  	});
  
  	if($.fn.jBar) $("#leftside").jBar({
  		minW: 150,
  		maxW: 700
  	});
  
  	if($.taskBar) $.taskBar.init();
  	if($.fn.switchEnv) $("#switchEnvBox").switchEnv();
  	if($.fn.navMenu) $("#navMenu").navMenu();
  
  	setTimeout(function() {
  		initLayout();
  		if(window.navTab) navTab.init();
  
  		// 注册DWZ插件。
  		DWZ.regPlugins.push(initUI); //第三方jQuery插件注册方法：DWZ.regPlugins.push(function($p){});
  
  		DWZ.regPlugins.push(function($p) {
  			$("a[iconClass]", $p).each(function() {
  				var imageName = $(this).attr("iconClass");
  				var $span = $("span", this);
  				if($span.length == 0) {
  					// 用作<td>中的<a>     
  					$(this).css({
  						"background": "url(../images/button/" + imageName + ".png) no-repeat",
  						"background-position": "50% 50%",
  						"width": "22px",
  						"height": "20px",
  						"text-indent": "-1000px",
  						"overflow": "hidden",
  						"display": "block",
  						"float": "left"
  					});
  				} else {
  					// 用作panelBar toolBar中的<span>     
  					$span.css({
  						"background-image": "url(../images/button/" + imageName + ".png)",
  						"background-position": "0 3px"
  					});
  				}
  			});
  			if($.fn.pictureview) $(".ui-pictureview", $p).pictureview();
  		});
  
  		// 首次初始化插件
  		$(document).initUI();
  
  		// navTab styles
  		var jTabsPH = $("div.tabsPageHeader");
  		jTabsPH.find(".tabsLeft").hoverClass("tabsLeftHover");
  		jTabsPH.find(".tabsRight").hoverClass("tabsRightHover");
  		jTabsPH.find(".tabsMore").hoverClass("tabsMoreHover");
  
  		$(document).trigger(DWZ.eventType.initEnvAfter);
  	}, 10);
  
  }
  
  function initLayout() {
  	var iContentW = $(window).width() - (DWZ.ui.sbar ? $("#sidebar").width() + 10 : 34) - 5;
  	var iContentH = $(window).height() - $("#header").height() - 34;
  
  	$("#container").width(iContentW);
  	$("#container .tabsPageContent").height(iContentH - 34).find("[layoutH]").layoutH();
  	$("#sidebar, #sidebar_s .collapse, #splitBar, #splitBarProxy").height(iContentH - 5);
  	$("#taskbar").css({
  		top: iContentH + $("#header").height() + 5,
  		width: $(window).width()
  	});
  }
  
  function initUI($p) {
  	//tables
  	if($.fn.jTable) $("table.table", $p).jTable();
  	if($.fn.fixedTable) $("table.tablefixed", $p).fixedTable();
  
  	// css tables
  	if($.fn.cssTable) $('table.list', $p).not('.nowrap').cssTable();
  
  	if($.fn.jPanel) $("div.panel", $p).jPanel();
  
  	//auto bind tabs
  	$("div.tabs", $p).each(function() {
  		var $this = $(this);
  		var options = {};
  		options.currentIndex = $this.attr("currentIndex") || 0;
  		options.eventType = $this.attr("eventType") || "click";
  		$this.tabs(options);
  	});
  
  	if($.fn.jTree) $("ul.tree", $p).jTree();
  
  	if($.fn.jTree) {
  		$('div.accordion', $p).each(function() {
  			var $this = $(this);
  			$this.accordion({
  				fillSpace: $this.attr("fillSpace"),
  				alwaysOpen: true,
  				active: 0
  			});
  		});
  	}
  
  	if($.fn.checkboxCtrl) {
  		$(":button.checkboxCtrl, :checkbox.checkboxCtrl", $p).checkboxCtrl($p);
  	}
  
  	if($.fn.combox) $("select.combox", $p).combox();
  
  	if($.fn.xheditor) {
  		$("textarea.editor", $p).each(function() {
  			var $this = $(this);
  			var op = {
  				html5Upload: false,
  				skin: 'nostyle',
  				tools: $this.attr("tools") || 'full'
  			};
  			var upAttrs = [
  				["upLinkUrl", "upLinkExt", "zip,rar,txt"],
  				["upImgUrl", "upImgExt", "jpg,jpeg,gif,png"],
  				["upFlashUrl", "upFlashExt", "swf"],
  				["upMediaUrl", "upMediaExt", "avi"]
  			];
  
  			$(upAttrs).each(function(i) {
  				var urlAttr = upAttrs[i][0];
  				var extAttr = upAttrs[i][1];
  
  				if($this.attr(urlAttr)) {
  					op[urlAttr] = $this.attr(urlAttr);
  					op[extAttr] = $this.attr(extAttr) || upAttrs[i][2];
  				}
  			});
  
  			$this.xheditor(op);
  		});
  	}
  
  	if($.fn.uploadify) {
  		$(":file[uploaderOption]", $p).each(function() {
  			var $this = $(this);
  			var options = {
  				fileObjName: $this.attr("name") || "file",
  				auto: true,
  				multi: true,
  				onUploadError: uploadifyError
  			};
  
  			var uploaderOption = DWZ.jsonEval($this.attr("uploaderOption"));
  			$.extend(options, uploaderOption);
  
  			DWZ.debug("uploaderOption: " + DWZ.obj2str(uploaderOption));
  
  			$this.uploadify(options);
  		});
  	}
  
  	// init styles
  	$("input[type=text], input[type=password], textarea", $p).addClass("textInput").focusClass("focus");
  
  	$("input[readonly], textarea[readonly]", $p).addClass("readonly");
  	$("input[disabled=true], textarea[disabled=true]", $p).addClass("disabled");
  
  	$("input[type=text]", $p).not("div.tabs input[type=text]", $p).filter("[alt]").inputAlert();
  
  	//Grid ToolBar
  	$("div.panelBar li, div.panelBar", $p).hoverClass("hover");
  
  	//Button
  	$("div.button", $p).hoverClass("buttonHover");
  	$("div.buttonActive", $p).hoverClass("buttonActiveHover");
  
  	//tabsPageHeader
  	$("div.tabsHeader li, div.tabsPageHeader li, div.accordionHeader, div.accordion", $p).hoverClass("hover");
  
  	//validate form
  	if($.fn.validate) {
  		$("form.required-validate", $p).each(function() {
  			var $form = $(this);
  			$form.validate({
  				onsubmit: false,
  				focusInvalid: false,
  				focusCleanup: true,
  				errorElement: "span",
  				ignore: ".ignore",
  				invalidHandler: function(form, validator) {
  					var errors = validator.numberOfInvalids();
  					if(errors) {
  						var message = DWZ.msg("validateFormError", [errors]);
  						alertMsg.error(message);
  					}
  				}
  			});
  
  			$form.find('input[customvalid]').each(function() {
  				var $input = $(this);
  				$input.rules("add", {
  					customvalid: $input.attr("customvalid")
  				})
  			});
  		});
  	}
  
  	if($.fn.datepicker) {
  		$('input.date', $p).each(function() {
  			var $this = $(this);
  			var opts = {};
  			if($this.attr("dateFmt")) opts.pattern = $this.attr("dateFmt");
  			if($this.attr("minDate")) opts.minDate = $this.attr("minDate");
  			if($this.attr("maxDate")) opts.maxDate = $this.attr("maxDate");
  			if($this.attr("mmStep")) opts.mmStep = $this.attr("mmStep");
  			if($this.attr("ssStep")) opts.ssStep = $this.attr("ssStep");
  			if($this.attr("defaultTime")) opts.defaultTime = $this.attr("defaultTime");
  			$this.datepicker(opts);
  		});
  	}
  
  	// navTab
  	$("a[target=navTab]", $p).each(function() {
  		$(this).click(function(event) {
  			var $this = $(this);
  			if($this.hasClass('disabled') || $this.hasClass('buttonDisabled')) {
  				return false;
  			}
  
  			var title = $this.attr("title") || $this.text();
  			var tabid = $this.attr("rel") || "_blank";
  			var fresh = eval($this.attr("fresh") || "true");
  			var external = eval($this.attr("external") || "false");
  			var url = unescape($this.attr("href")).replaceTmById($(event.target).parents(".unitBox:first"));
  			DWZ.debug(url);
  			if(!url.isFinishedTm()) {
  				alertMsg.error($this.attr("warn") || DWZ.msg("alertSelectMsg"));
  				return false;
  			}
  			navTab.openTab(tabid, url, {
  				title: title,
  				fresh: fresh,
  				external: external
  			});
  
  			event.preventDefault();
  		});
  	});
  
  	//dialogs
  	$("a[target=dialog]", $p).each(function() {
  		$(this).click(function(event) {
  			var $this = $(this);
  
  			if($this.hasClass('disabled') || $this.hasClass('buttonDisabled')) {
  				return false;
  			}
  
  			var title = $this.attr("title") || $this.text();
  			var rel = $this.attr("rel") || "_blank";
  			var options = {};
  			var w = $this.attr("width");
  			var h = $this.attr("height");
  			if(w) options.width = w;
  			if(h) options.height = h;
  			options.max = eval($this.attr("max") || "false");
  			options.mask = eval($this.attr("mask") || "false");
  			options.maxable = eval($this.attr("maxable") || "true");
  			options.minable = eval($this.attr("minable") || "true");
  			options.fresh = eval($this.attr("fresh") || "true");
  			options.resizable = eval($this.attr("resizable") || "true");
  			options.resizable = eval($this.attr("resizable") || "true");
  			options.drawable = eval($this.attr("drawable") || "true");
  			options.close = eval($this.attr("close") || "");
  			options.param = $this.attr("param") || "";
  
  			var url = unescape($this.attr("href")).replaceTmById($(event.target).parents(".unitBox:first"));
  			DWZ.debug(url);
  			if(!url.isFinishedTm()) {
  				alertMsg.error($this.attr("warn") || DWZ.msg("alertSelectMsg"));
  				return false;
  			}
  			$.pdialog.open(url, rel, title, options);
  
  			return false;
  		});
  	});
  	$("a[target=ajax], tr[target=ajax]", $p).each(function() {
  		$(this).click(function(event) {
  			var $this = $(this);
  			if($this.hasClass('disabled') || $this.hasClass('buttonDisabled')) {
  				return false;
  			}
  
  			var rel = $this.attr("rel");
  			if(rel) {
  				var $rel = $("#" + rel);
  				var url = unescape($this.attr("href")).replaceTmById($(event.target).parents(".unitBox:first"));
  				DWZ.debug(url);
  				if(!url.isFinishedTm()) {
  					alertMsg.error($this.attr("warn") || DWZ.msg("alertSelectMsg"));
  					return false;
  				}
  
  				$rel.loadUrl(url, {}, function() {
  					$rel.find("[layoutH]").layoutH();
  				});
  			}
  
  			event.preventDefault();
  		});
  	});
  
  	$("div.pagination", $p).each(function() {
  		var $this = $(this);
  		$this.pagination({
  			targetType: $this.attr("targetType"),
  			rel: $this.attr("rel"),
  			totalCount: $this.attr("totalCount"),
  			numPerPage: $this.attr("numPerPage"),
  			pageNumShown: $this.attr("pageNumShown") || 10,
  			currentPage: $this.attr("currentPage")
  		});
  	});
  
  	if($.fn.sortDrag) $("div.sortDrag", $p).sortDrag();
  
  	// dwz.ajax.js
  	if($.fn.ajaxTodo) $("a[target=ajaxTodo]", $p).ajaxTodo();
  	if($.fn.dwzExport) $("a[target=dwzExport]", $p).dwzExport();
  
  	if($.fn.lookup) $("a[lookupGroup]", $p).lookup();
  	if($.fn.multLookup) $("[multLookup]:button", $p).multLookup();
  	if($.fn.suggest) $("input[suggestFields]", $p).suggest();
  	if($.fn.itemDetail) $("table.itemDetail", $p).itemDetail();
  	if($.fn.selectedTodo) $("a[target=selectedTodo]", $p).selectedTodo();
  	if($.fn.selectedBlank) $("a[target=selectedBlank]", $p).selectedBlank();
  	if($.fn.pagerForm) $("form[rel=pagerForm]", $p).pagerForm({
  		parentBox: $p
  	});
  
  }