text: /**
   * @author 孙宇
   * 
   * @requires jQuery,EasyUI
   * 
   * panel关闭时回收内存，主要用于layout使用iframe嵌入网页时的内存泄漏问题
   */
  $.fn.panel.defaults.onBeforeDestroy = function() {
  	var frame = $('iframe', this);
  	try {
  		if (frame.length > 0) {
  			for ( var i = 0; i < frame.length; i++) {
  				frame[i].contentWindow.document.write('');
  				frame[i].contentWindow.close();
  			}
  			frame.remove();
  			if ($.browser.msie) {
  				CollectGarbage();
  			}
  		}
  	} catch (e) {
  	}
  };
  
  /**
   * 使panel和datagrid在加载时提示
   * 
   * @author 孙宇
   * 
   * @requires jQuery,EasyUI
   * 
   */
  $.fn.panel.defaults.loadingMessage = '加载中....';
  $.fn.datagrid.defaults.loadMsg = '加载中....';
  
  /**
   * @author 孙宇
   * 
   * @requires jQuery,EasyUI
   * 
   * 通用错误提示
   * 
   * 用于datagrid/treegrid/tree/combogrid/combobox/form加载数据出错时的操作
   */
  var easyuiErrorFunction = function(XMLHttpRequest) {
  	$.messager.progress('close');
  	try{
  		var emsg = XMLHttpRequest.responseText.substring(XMLHttpRequest.responseText.indexOf('错误描述'),XMLHttpRequest.responseText.indexOf('错误信息'));
  		 $.messager.alert('错误',emsg);
  	}catch(ex){
  		 $.messager.alert('错误',XMLHttpRequest.responseText+'');
  	}
  };
  $.fn.datagrid.defaults.onLoadError = easyuiErrorFunction;
  $.fn.treegrid.defaults.onLoadError = easyuiErrorFunction;
  $.fn.tree.defaults.onLoadError = easyuiErrorFunction;
  $.fn.combogrid.defaults.onLoadError = easyuiErrorFunction;
  $.fn.combobox.defaults.onLoadError = easyuiErrorFunction;
  $.fn.form.defaults.onLoadError = easyuiErrorFunction;
  
  /**
   * @author 孙宇
   * 
   * @requires jQuery,EasyUI
   * 
   * 为datagrid、treegrid增加表头菜单，用于显示或隐藏列，注意：冻结列不在此菜单中
   */
  var createGridHeaderContextMenu = function(e, field) {
  	e.preventDefault();
  	var grid = $(this);/* grid本身 */
  	var headerContextMenu = this.headerContextMenu;/* grid上的列头菜单对象 */
  	if (!headerContextMenu) {
  		var tmenu = $('<div style="width:100px;"></div>').appendTo('body');
  		var fields = grid.datagrid('getColumnFields');
  		console.log('id='+grid.attr('id'));
  		 storage=$.localStorage;if(!storage)storage=$.cookieStorage;
  		var cols = storage.get(grid.attr('id')+'hiddenColumns');
  		var init=true;
  		if(cols){
  			init=false;
  		}
  		for ( var i = 0; i < fields.length; i++) {
  			var fildOption = grid.datagrid('getColumnOption', fields[i]);
  			console.log(fields[i]+'='+fildOption.hidden);
  			if (!fildOption.hidden||fildOption.hidden==false) {
  				$('<div iconCls="icon-ok" field="' + fields[i] + '"/>').html(fildOption.title).appendTo(tmenu);
  			} else {
  				if(init==false){
  					for(var j=0;j<cols.length;j++){
  						if(cols[j].field==fields[i]&&cols[j].visible!=false){
  							//console.log(cols[j].field+'=='+cols[j].visible);
  							$('<div iconCls="icon-empty" field="' + fields[i] + '"/>').html(fildOption.title).appendTo(tmenu);
  						}
  					}
  				}
  			}
  		}saveHeader();//龙金波，修改bug 先存一个表头的hidden初始状态，避免隐藏字段第一次保存时就不对了
  		headerContextMenu = this.headerContextMenu = tmenu.menu({
  			onClick : function(item) {
  				var field = $(item.target).attr('field');
  				if (item.iconCls == 'icon-ok') {
  					grid.datagrid('hideColumn', field);
  					$(this).menu('setIcon', {
  						target : item.target,
  						iconCls : 'icon-empty'
  					});saveHeader(field,true);//龙金波添加保存表头
  				} else if (item.iconCls == 'icon-empty') {
  					grid.datagrid('showColumn', field);
  					$(this).menu('setIcon', {
  						target : item.target,
  						iconCls : 'icon-ok'
  					});saveHeader(field,false);//龙金波添加保存表头
  				}else{
  					//恢复表头
  					
  				}
  			}
  		});
  	}
  	headerContextMenu.menu('show', {
  		left : e.pageX,
  		top : e.pageY
  	});
  };
  
  $.fn.datagrid.defaults.onHeaderContextMenu = createGridHeaderContextMenu;
  $.fn.treegrid.defaults.onHeaderContextMenu = createGridHeaderContextMenu;
  
  /**
   * @author 孙宇
   * 
   * @requires jQuery,EasyUI
   * 
   * 扩展validatebox，添加验证两次密码功能
   */
  $.extend($.fn.validatebox.defaults.rules, {
  	eqPwd : {
  		validator : function(value, param) {
  			return value == $(param[0]).val();
  		},
  		message : '密码不一致！'
  	}
  });
  
  /**
   * @author 夏悸
   * 
   * @requires jQuery,EasyUI
   * 
   * 扩展tree，使其支持平滑数据格式
   */
  $.fn.tree.defaults.loadFilter = function(data, parent) {
  	var opt = $(this).data().tree.options;
  	var idFiled, textFiled, parentField;
  	if (opt.parentField) {
  		idFiled = opt.idFiled || 'id';
  		textFiled = opt.textFiled || 'text';
  		parentField = opt.parentField;
  		var i, l, treeData = [], tmpMap = [];
  		for (i = 0, l = data.length; i < l; i++) {
  			tmpMap[data[i][idFiled]] = data[i];
  		}
  		for (i = 0, l = data.length; i < l; i++) {
  			if (tmpMap[data[i][parentField]] && data[i][idFiled] != data[i][parentField]) {
  				if (!tmpMap[data[i][parentField]]['children'])
  					tmpMap[data[i][parentField]]['children'] = [];
  				data[i]['text'] = data[i][textFiled];
  				tmpMap[data[i][parentField]]['children'].push(data[i]);
  			} else {
  				data[i]['text'] = data[i][textFiled];
  				treeData.push(data[i]);
  			}
  		}
  		return treeData;
  	}
  	return data;
  };
  
  /**
   * @author 孙宇
   * 
   * @requires jQuery,EasyUI
   * 
   * 扩展treegrid，使其支持平滑数据格式
   */
  $.fn.treegrid.defaults.loadFilter = function(data, parentId) {
  	var opt = $(this).data().treegrid.options;
  	var idFiled, textFiled, parentField;
  	if (opt.parentField) {
  		idFiled = opt.idFiled || 'id';
  		textFiled = opt.textFiled || 'text';
  		parentField = opt.parentField;
  		var i, l, treeData = [], tmpMap = [];
  		for (i = 0, l = data.length; i < l; i++) {
  			tmpMap[data[i][idFiled]] = data[i];
  		}
  		for (i = 0, l = data.length; i < l; i++) {
  			if (tmpMap[data[i][parentField]] && data[i][idFiled] != data[i][parentField]) {
  				if (!tmpMap[data[i][parentField]]['children'])
  					tmpMap[data[i][parentField]]['children'] = [];
  				data[i]['text'] = data[i][textFiled];
  				tmpMap[data[i][parentField]]['children'].push(data[i]);
  			} else {
  				data[i]['text'] = data[i][textFiled];
  				treeData.push(data[i]);
  			}
  		}
  		return treeData;
  	}
  	return data;
  };
  
  /**
   * @author 孙宇
   * 
   * @requires jQuery,EasyUI
   * 
   * 扩展combotree，使其支持平滑数据格式
   */
  $.fn.combotree.defaults.loadFilter = $.fn.tree.defaults.loadFilter;
  
  /**
   * @author 孙宇
   * 
   * @requires jQuery,EasyUI
   * 
   * 防止panel/window/dialog组件超出浏览器边界
   * @param left
   * @param top
   */
  var easyuiPanelOnMove = function(left, top) {
  	var l = left;
  	var t = top;
  	if (l < 1) {
  		l = 1;
  	}
  	if (t < 1) {
  		t = 1;
  	}
  	var width = parseInt($(this).parent().css('width')) + 14;
  	var height = parseInt($(this).parent().css('height')) + 14;
  	var right = l + width;
  	var buttom = t + height;
  	var browserWidth = $(window).width();
  	var browserHeight = $(window).height();
  	if (right > browserWidth) {
  		l = browserWidth - width;
  	}
  	if (buttom > browserHeight) {
  		t = browserHeight - height;
  	}
  	$(this).parent().css({/* 修正面板位置 */
  		left : l,
  		top : t
  	});
  };
  $.fn.dialog.defaults.onMove = easyuiPanelOnMove;
  $.fn.window.defaults.onMove = easyuiPanelOnMove;
  $.fn.panel.defaults.onMove = easyuiPanelOnMove;
  
  /**
   * @author 孙宇
   * 
   * @requires jQuery,EasyUI,jQuery cookie plugin
   * 
   * 更换EasyUI主题的方法
   * 
   * @param themeName
   *            主题名称
   */
  changeTheme = function(themeName) {
  	var $easyuiTheme = $('#easyuiTheme');
  	var url = $easyuiTheme.attr('href');
  	var href = url.substring(0, url.indexOf('themes')) + 'themes/' + themeName + '/easyui.css';
  	$easyuiTheme.attr('href', href);
  
  	var $iframe = $('iframe');
  	if ($iframe.length > 0) {
  		for ( var i = 0; i < $iframe.length; i++) {
  			var ifr = $iframe[i];
  			$(ifr).contents().find('#easyuiTheme').attr('href', href);
  		}
  	}
  
  	$.cookie('easyuiThemeName', themeName, {
  		expires : 7
  	});
  };
  
  /**
   * @author 孙宇
   * 
   * @requires jQuery
   * 
   * 将form表单元素的值序列化成对象
   * 
   * @returns object
   */
  serializeObject = function(form) {
  	var o = {};
  	$.each(form.serializeArray(), function(index) {
  		if (o[this['name']]) {
  			o[this['name']] = o[this['name']] + "," + this['value'];
  		} else {
  			o[this['name']] = this['value'];
  		}
  	});
  	return o;
  };
  
  /**
   * @author 孙宇
   * 
   * 增加formatString功能
   * 
   * 使用方法：formatString('字符串{0}字符串{1}字符串','第一个变量','第二个变量');
   * 
   * @returns 格式化后的字符串
   */
  formatString = function(str) {
  	for ( var i = 0; i < arguments.length - 1; i++) {
  		str = str.replace("{" + i + "}", arguments[i + 1]);
  	}
  	return str;
  };
  
  /**
   * @author 孙宇
   * 
   * 接收一个以逗号分割的字符串，返回List，list里每一项都是一个字符串
   * 
   * @returns list
   */
  stringToList = function(value) {
  	if (value != undefined && value != '') {
  		var values = [];
  		var t = value.split(',');
  		for ( var i = 0; i < t.length; i++) {
  			values.push('' + t[i]);/* 避免他将ID当成数字 */
  		}
  		return values;
  	} else {
  		return [];
  	}
  };
  
  /**
   * @author 孙宇
   * 
   * @requires jQuery
   * 
   * 改变jQuery的AJAX默认属性和方法
   */
  $.ajaxSetup({
  	type : 'POST',
  	error : function(XMLHttpRequest, textStatus, errorThrown) {
  		$.messager.progress('close');
  		$.messager.alert('错误', XMLHttpRequest.responseText);
  	}
  });
  
  function clearLocalstorage(){
  	storage=$.localStorage; 
  	if(!storage)
  		storage=$.cookieStorage;
  	storage.removeAll();
  	$.messager.alert('信息', "浏览器缓存清除成功!");
  }
  
  //update-begin--Author:钟世云  Date:20150610 for：online支持树配置--------------------
  //如果在最外层页面，创建tools对象
  if (window.top == window) {
  	var tools = {msg : "这是一个工具对象，可以把常用属性放到这个对象上。如：在任意页面用top.currDatagri可以获取当前的datagrid"};
  }
  //update-end--Author:钟世云  Date:20150610 for：online支持树配置----------------------