您的位置:首页 > 产品设计 > UI/UE

easyui combogrid 多选加载,保存,显示代码

2015-08-04 16:01 337 查看
1.调用代码

UTIL.SetDict($("#txt_ExcludeIndustry_"), "SECTOR_TYPE", true, true, function () {
var objects = $("#txt_ExcludeIndustry_").val();
if (objects != "") {
objects = objects.split(";");

for (var i = 0; i < objects.length; i++) {
$("#txt_ExcludeIndustry_").combogrid('grid').datagrid('selectRecord', objects[i]);
}
}
});

2.封装代码

function doKey(e) {
var ev = e || window.event; //获取event对象
var obj = ev.target || ev.srcElement; //获取事件源
var t = obj.type || obj.getAttribute('type'); //获取事件源类型
if (ev.keyCode == 8 && t != "password" && t != "text" && t != "textarea") {
return false;
}
}
//禁止后退键 作用于Firefox、Opera
document.onkeypress = doKey;
//禁止后退键 作用于IE、Chrome
document.onkeydown = doKey;
document.onkeypress = doKey;

jQuery.extend({ parseJSON: function (data) {
if (typeof data !== "string" || !data) {
return null;
}

// Make sure leading/trailing whitespace is removed (IE can't handle it)
data = jQuery.trim(data);

try {
// Try to use the native JSON parser first
//return window.JSON && window.JSON.parse ?
// window.JSON.parse( data ) : (new Function("return " + data))();
return (new Function("return " + data))();

} catch (e) {
alert("无效的JSON数据: " + e);
jQuery.error("Invalid JSON: " + data);
}
}
});

//String.prototype.trim=function(){return this.replace(/(^\s+)|\s+$/g,"")}
var PICKER;
function RegisterCallBack() {//for Page Init
if (typeof (OverrideObject) == "function")
OverrideObject();
if (typeof (OverridePostBack) == "function")
__doPostBack = OverridePostBack;

// if (typeof (PICKER) == 'undefined' && typeof (Picker) == 'function') {
// PICKER = new Picker();
// }
if (typeof (PageOnLoad) == "function")
window.setTimeout(function () { PageOnLoad(); }, 100);
if (window.location.href.indexOf('callback=') > 0) {
var timeout = parseInt(UTIL.getUrlParam('callbackTimeout')); //延时调用
if (isNaN(timeout)) timeout = 0;

var cb = 'window.parent.' + UTIL.getUrlParam('callback'); //callback父页
if (cb.indexOf('(') < 0) cb = cb + '(window)'; //若无参数,自动带入默认参数
setTimeout(cb, timeout); //eval(cb);
}
//UTIL.dev();
}

////重载 __doPostBack
function OverridePostBack(eventTarget, eventArgument) {
if (document.forms.length > 0) {
if (typeof eventTarget == 'object') eventTarget = $(eventTarget.target).attr('id');
var f = document.forms[0];
if (typeof f.__EVENTTARGET != 'undefined') {
f.__EVENTTARGET.value = eventTarget;
f.__EVENTARGUMENT.value = eventArgument;
}
if (GlobalOnSubmit(eventTarget)) {//dispatch
if (eventTarget.indexOf('$') < 0 && eventTarget.indexOf('E8') < 0) {//GridView事件?
var evt = $('#' + eventTarget).not('INPUT,SELECT');
if (evt.find('INPUT:eq(0)').length == 0)//内部无INPUT?
evt.attr('disabled', true).css({ 'color': '#cccccc' }); //disabled它
}
f.submit();
}
}
}
function GlobalOnSubmit(srcId)//dom el
{
if (srcId != '') {//btn_***_D*E*
if (typeof (PageOnSubmit) == "function" && PageOnSubmit(srcId) == false) return false;

var iD = srcId.lastIndexOf('_D');
if (iD > 0)
var dataTag = parseInt(srcId.substring(iD + 2, iD + 3));
if (isNaN(dataTag)) dataTag = undefined;

if (srcId.indexOf('E0') > -1) {//Validate
return BindingControl.validate(dataTag > 0 ? dataTag : 0);
}
else if (srcId.indexOf('btn_Del') > -1) {
dataTag = (dataTag > -1) ? dataTag : '';
var sId = UTIL.getId(dataTag);
if (sId && window.confirm(UTIL.getMessage('CLTMSG_BE_DELETE_ROW'))) {
$('#' + srcId).after('<input type="hidden" name="Id" value="' + sId + '"/>');
return true;
} else
return false;
}
}

return true;
}
var NUTIL=new function() {

this.SetCombo=function (option) {/// <reference path="../Common/JGridJson.cs" />
var entityType = option.entityType;
var textField = option.textField;
var textControl = $(this);
var panelWidth = option.panelWidth;
var idFild = option.idFild;
var valueControl = option.valueControl;
var panelHeight = option.panelHeight;
var columns = option.columns;
var where = option.where;
//var keyword = option.keyword;
var pageSize = option.pageSize;
if (option.pageSize == null) {
pageSize = 10;
}
var obj = valueControl;
if (panelHeight == null) {
panelHeight = 300;
}
var url = '/common/EntityJsonList.ashx?entityType=' + option.entityType + '&_method=entity&tmp=' + Math.random() + '&queryTextFild=' + textField;
if (where) {
url += "&where=" + where;
}
if (panelWidth == null) {
panelWidth = 500;
}
if (valueControl.val() != "") {
url += "&defaultValue=" + escape(valueControl.val());
}
var id = 'Id';
if (idFild != null) {
id = idFild;
}
url += "&idFild=" + id;
var a = textControl.attr("isShow");
if (a == "" || a == null) {
textControl.attr("isShow", "1");
textControl.combogrid({
panelWidth: panelWidth,
panelHeight: panelHeight,
idField: id,
textField: textField,
url: url,
method: 'get',
delay: 1000,
pagination: true, //是否分页
rownumbers: true, //序号
pageSize: pageSize, //每页显示的记录条数,默认为10
pageList: [pageSize, 10, 20, 30, 40, 50, 100, 200], //可以设置每页记录条数的列表
columns: columns,
striped: true,
editable: true,
collapsible: false, //是否可折叠的
fit: true, //自
keyHandler: {
up: function () { //【向上键】押下处理
//取得选中行
var selected = textControl.combogrid('grid').datagrid('getSelected');
if (selected) {
//取得选中行的rowIndex = txtControlex
var index = combogrid('grid').datagrid('getRowIndex', selected);
valueControl.val(UTIL.getJsonByKey(idFild));
textControl.val(UTIL.getJsonByKey(textField));
//向上移动到第一行为止
if (index > 0) {
textControl.combogrid('grid').datagrid('selectRow', index - 1);
}
} else {
var rows = textControl.combogrid('grid').datagrid('getRows');
textControl.combogrid('grid').datagrid('selectRow', rows.length - 1);
}
},
down: function () { //【向下键】押下处理
//取得选中行
var selected = textControl.combogrid('grid').datagrid('getSelected');
if (selected) {
valueControl.val(UTIL.getJsonByKey(idFild));
textControl.val(UTIL.getJsonByKey(textField));
//取得选中行的rowIndex
var index = textControl.combogrid('grid').datagrid('getRowIndex', selected);
//向下移动到当页最后一行为止
if (index < textControl.combogrid('grid').datagrid('getData').rows.length - 1) {
textControl.combogrid('grid').datagrid('selectRow', index + 1);
}
} else {
textControl.combogrid('grid').datagrid('selectRow', 0);
}
},
enter: function () { //【回车键】押下处理
textControl.combogrid('hidePanel');
var selected = txtControlcombogrid('grid').datagrid('getSelected');
if (selected) {
valueControl.val(UTIL.getJsonByKey(idFild));
textControl.val(UTIL.getJsonByKey(textField));
}

},
query: function (keyword) { //【动态搜索】处理
//设置查询参数
var queryParams = textControl.combogrid("grid").datagrid('options').queryParams;
queryParams.keyword = keyword;
textControl.combogrid("grid").datagrid('options').queryParams = queryParams;
//重新加载
textControl.combogrid("grid").datagrid("reload");
textControl.combogrid("setValue", keyword);
}
},
mode: 'remote',
fitColumns: true
});
}

}

}
//-------------------------UTIL control--------------------------------------
var UTIL = new function () {

this.SetDict = function (obj, dicType, multiple, Ischeckbox,callback) {
obj.combogrid({
panelWidth: 250,
idField: 'Code',
textField: 'Name',
url: '/Common/EntityJsonList.ashx?_method=dict&dictType=' + dicType + "&tmp=" + Math.random() + '&queryTextFild=Name',
method: 'get',
delay: 1000,
columns: [[
{ field: 'Name', title: '名称', width: 100 },
{ field: 'Code', title: '编码', width: 100 }
]],
striped: true,
editable: true,
collapsible: false, //是否可折叠的
fit: true, //自动大小
keyHandler: {
up: function() { //【向上键】押下处理
//取得选中行
var selected = obj.combogrid('grid').datagrid('getSelected');
if (selected) {
//取得选中行的rowIndex
var index = obj.combogrid('grid').datagrid('getRowIndex', selected);
//向上移动到第一行为止
if (index > 0) {
obj.combogrid('grid').datagrid('selectRow', index - 1);
}
} else {
var rows = obj.combogrid('grid').datagrid('getRows');
obj.combogrid('grid').datagrid('selectRow', rows.length - 1);
}
},
down: function() { //【向下键】押下处理
//取得选中行
var selected = obj.combogrid('grid').datagrid('getSelected');
if (selected) {
//取得选中行的rowIndex
var index = obj.combogrid('grid').datagrid('getRowIndex', selected);
//向下移动到当页最后一行为止
if (index < obj.combogrid('grid').datagrid('getData').rows.length - 1) {
obj.combogrid('grid').datagrid('selectRow', index + 1);
}
} else {
obj.combogrid('grid').datagrid('selectRow', 0);
}
},
enter: function() { //【回车键】押下处理
obj.combogrid('hidePanel');
},
query: function(keyword) { //【动态搜索】处理
//设置查询参数
var queryParams = obj.combogrid("grid").datagrid('options').queryParams;
queryParams.keyword = keyword;
obj.combogrid("grid").datagrid('options').queryParams = queryParams;
//重新加载
obj.combogrid("grid").datagrid("reload");

obj.combogrid("setValue", keyword);
}
},
mode: 'remote',
fitColumns: true,
multiple: multiple,
checkbox: Ischeckbox,
onLoadSuccess: function () {
if (callback) {
callback();
}
}
});
}
this.popupDiv = function (div_id, width, height) {
var div_obj = $("#" + div_id);
var windowWidth = document.body.clientWidth;
var windowHeight = document.body.clientHeight;
// var popupHeight = div_obj.height();
// var popupWidth = div_obj.width();

var popupHeight = height;
var popupWidth = width;
//添加并显示遮罩层
// $("<div id='mask'></div>").addClass("mask")
// .width(windowWidth + document.body.scrollWidth)
// .height(windowHeight + document.body.scrollHeight)
// .click(function () { hideDiv(div_id); })
// .appendTo("body")
// .fadeIn(200);
div_obj.css({ "position": "absolute", "overflow": "hidden", "width": width + "px", "height": height + "px" })
.animate({ left: ($(window).width() - width) / 2,
top: ($(window).height() - height) / 2, opacity: "show"
}, "slow");

};
this.hideDiv = function (div_id) {
$("#mask").remove();
$("#" + div_id).animate({ left: 0, top: 0, opacity: "hide" }, "slow");
};
this.getJsonByKey = function (obj, key) {
for (var m in obj) {
if (m.toLowerCase() == key.toLowerCase()) {
var exp = new RegExp("\\d{4}-\\d{2}-\\d{2}T*");
if (exp.test(obj[m])) {
obj = obj[m].replace("T", "");
obj = obj.substr(10, 5);
if (obj.substr(4, 1) == ":") {
obj = "0" + obj.substr(0, 4);
}
return obj;
}
return obj[m] == null ? " " : obj[m];
}

}
return "";
};
this.CommonChoice = function (valueControl, nameControl, entityType, textField, defaultWhere, queryHtml) {

},
this.GetChangeTypeJson=function(entityType, idField, textField) {

var jsonDic;
var url = '/common/EntityJsonList.ashx?entityType=' + entityType + '&_method=ChangeType&tmp=' + Math.random() + '&queryTextFild=' + textField + '&idFild=' + idField;
$.ajax({
async: false,
type: "get",
url: url,
data: {},
dataType: "json",
success: function (data) {
jsonDic = data;
}
});
return jsonDic;

},
this.SetEntityCombo = function (obj, entityType, textField, columns, where, idFild, panelWidth, panelHeight,pageSize, queryFild,change) {
var url = '/common/EntityJsonList.ashx?entityType=' + entityType + '&_method=entity&tmp=' + Math.random() + '&queryTextFild=' + textField;
if (where) {
url += "&where=" + where;
}
if (!panelWidth) {
panelWidth = 500;
}
if (obj.val() != "") {
url += "&defaultValue=" + obj.val();
}

var id = 'Id';
if (idFild) {
id = idFild;
}
url += "&idFild=" + id;
// if (queryFild) {
// url += "&queryFild=" + queryFild;
// }
obj.combogrid({
panelWidth: panelWidth,
panelHeight:panelHeight,
idField:id,
textField: textField,
url: url,
method: 'get',
delay:1000,
pagination: true, //是否分页
rownumbers: true, //序号
pageSize: pageSize, //每页显示的记录条数,默认为10
pageList: [pageSize,10,20,30,40,50,100,200], //可以设置每页记录条数的列表
columns: columns,
striped: true,
editable: true,
collapsible: false,
onChange: function(value,index,data) {
if (change) {
change(value,index,data);
}
},
//是否可折叠的
fit: true, //自动大小
keyHandler: {
up: function () { //【向上键】押下处理
//取得选中行
var selected = obj.combogrid('grid').datagrid('getSelected');
if (selected) {
//取得选中行的rowIndex
var index = obj.combogrid('grid').datagrid('getRowIndex', selected);
//向上移动到第一行为止
if (index > 0) {
obj.combogrid('grid').datagrid('selectRow', index - 1);
}
} else {
var rows = obj.combogrid('grid').datagrid('getRows');
obj.combogrid('grid').datagrid('selectRow', rows.length - 1);
}
},
down: function () { //【向下键】押下处理
//取得选中行
var selected = obj.combogrid('grid').datagrid('getSelected');
if (selected) {
//取得选中行的rowIndex
var index = obj.combogrid('grid').datagrid('getRowIndex', selected);
//向下移动到当页最后一行为止
if (index < obj.combogrid('grid').datagrid('getData').rows.length - 1) {
obj.combogrid('grid').datagrid('selectRow', index + 1);
}
} else {
obj.combogrid('grid').datagrid('selectRow', 0);
}
},
enter: function () { //【回车键】押下处理

obj.combogrid('hidePanel');
},
query: function (keyword) { //【动态搜索】处理
//设置查询参数
var queryParams = obj.combogrid("grid").datagrid('options').queryParams;
queryParams.keyword = keyword;
obj.combogrid("grid").datagrid('options').queryParams = queryParams;
//重新加载
obj.combogrid("grid").datagrid("reload");

obj.combogrid("setValue", keyword);
}
},
mode: 'remote',
fitColumns: true
});
}
this.MessageBox = function (messageKey, messageType, extend, callbak) {
var key = UTIL.getMessage(messageKey);
if (extend) {
key = key + extend;
}
$.messager.alert('操作提示', key, messageType, function (r) {
if (callbak) {
callbak();
}
});
};
this.Confirm = function (messageKey, isKey, callBack) {
if (isKey) {
$.messager.confirm('操作提示', UTIL.getMessage(messageKey), function (r) {
if (r) {
callBack();
}
});
}
else {
$.messager.confirm('操作提示', messageKey, function (r) {
if (r) {
callBack();
}
});
}
};

this.msgEnUs = { 'CLTMSG_NO_SELECTED_ROW': 'Please select a record first!'
, 'CLTMSG_BE_DELETE_ROW': 'Are you sure to delete?'
, 'CLTMSG_NO_MASTER_DATA': 'Please save master data first!'
, 'CLTMSG_BE_SAVE_FIRST': 'Please save current data first!'
, 'CLTMSG_BE_LOST_CHANGE': 'Are you sure to lost changes?'
, 'CLTMSG_LOADING': 'Loading data,please wait...'
, 'V_REQUIRED': '\'%FIELDNAME%\' can\'t be empty!'
, 'V_NUMERIC': '\'%FIELDNAME%\' must be numeric!'
, 'V_DATETIME': '\'%FIELDNAME%\' must be datetime!'
, 'V_INVALID': '\'%FIELDNAME%\' is invalid!'
};
this.msgZhCn = { 'CLTMSG_NO_SELECTED_ROW': '请先选择一条记录!'
, 'CLTMSG_BE_DELETE_ROW': '确定要删除该记录?'
, 'CLTMSG_NO_MASTER_DATA': '请先保存主数据!'
, 'CLTMSG_BE_SAVE_FIRST': '请先保存该记录!'
, 'CLTMSG_BE_LOST_CHANGE': '确定要放弃所做的修改吗?'
, 'CLTMSG_LOADING': '正在加载数据,请稍候...'
, 'Search_Error': '查询失败!'
, 'Save_Fail': '保存失败!'
, 'Load_Fail': '加载失败!'
, 'Op_Fail': '操作失败!'
, 'Op_Sucess': '操作成功!'
, 'Import_Sucess': '导入成功!'
, 'Save_Sucess': '保存成功!'
, 'Del_Sucess': '删除成功!'
, 'V_REQUIRED': '%FIELDNAME% 不能为空!'
, 'V_NUMERIC': '%FIELDNAME% 必须为数值型!'
, 'V_DATETIME': '%FIELDNAME% 必须为日期型!'
, 'V_INVALID': '%FIELDNAME% 值无效!'
, 'NO_SELECTED_ROW': '请选择一条记录!'
, 'LOAD_ERROR': '数据加载失败!'
, 'Logout_Comfirm': '确认要退出?'
, 'Login_Sucess': '登录成功。'
};
this.linkString = '<a class="clickA"></a>';
//getMessage for globalization
this.getMessage = function (_msgName) {
if (document.forms[0]) {
var msgArray = document.forms[0].id == 'enUS' ? this.msgEnUs : this.msgZhCn;
var msg = msgArray[_msgName];
}
if (!msg) msg = "#" + _msgName + "#";

return msg;
};
this.isPopup = function (target) {
if (!target) target = this;
return (target.frameElement ? (target.frameElement.id ? true : false) : false);
};
///get param from WIN LOCATION or URL
this.getUrlParam = function (pName, win) {
var sUrl;
if (typeof (win) == 'string') {
sUrl = win;
if (sUrl.indexOf('?') < 0) sUrl = '?' + sUrl;
} else {
if (!win) win = window;
sUrl = win.location.search;
}
var iQ = sUrl.indexOf('?') + 1;
if (iQ > 0) {
sUrl = '&' + sUrl.substring(iQ, sUrl.length);

iQ = sUrl.indexOf('?'); //url参数中还存在url?
var key = '&' + pName + '=';
var i = sUrl.indexOf(key);
if (i > -1) {
var j = sUrl.indexOf('&', i + 1); //&Key=Val&Key2=...
if (j < 0 || (iQ > 1 && j > iQ)) j = sUrl.length;
return unescape(sUrl.substring(i + key.length, j));
}
}
return null;
};
this.getAppRoot = function (win) {//取得相对跟路径, 如中括号路径内的值: http://****/[UrbanWeb],http://******[/] if (!win) win = window;
//if (win.APP_ROOT) return win.APP_ROOT; //cached

var c = win.document.getElementsByTagName('LINK');
if (c) {//get first css rel file URL
for (var i = 0; i < c.length; i++) {
var url = c[i].href;
var k = url.indexOf('App_Themes');
if (k > -1) {
url = url.substring(0, k - 1);
win.APP_ROOT = url;
return url;
}
}
}
//not default & main
if (win.top.location.href.indexOf('efault.aspx') < 0 && win.top.location.href.indexOf('ain.aspx') < 0) {
if (win.top.opener)
win = win.top.opener;
}
sUrl = win.top.location.href;
sUrl = sUrl.substring(0, sUrl.indexOf('.aspx'));
sUrl = sUrl.substring(0, sUrl.lastIndexOf('/'));
win.APP_ROOT = sUrl;
return sUrl;
};
this.initTodoUrl = function (sFormType, grdvIdx, grdv) {
if (!sFormType) sFormType = UTIL.getUrlParam('FormType');
var cache = {};
$.getJSON(UTIL.getAppRoot() + "/ModDev/GetTodoList.ashx?FormType=" + (sFormType ? sFormType : ''),
function (data) {
$.each(data, function (i, item) {
cache[item[0]] = item[1];
});

if (!grdv) grdv = 'grdv';
if (!grdvIdx) grdvIdx = 0;
$('#' + grdv + ' tr').each(function (i, tr) {
var td = $('td:eq(' + grdvIdx + ')', tr);
var id = td.text();
if (cache[id])
td.attr('url', cache[id]);
});
}
);
};
this.getId = function (dataTag, nocheck, idx) {
var s;
if (idx == undefined) idx = 0;
if (!nocheck && dataTag == -1) nocheck = true; //-1等同于 nocheck
var isGrid = (dataTag == -2); //-2 仅查找Grid?

if (dataTag < 0) dataTag = undefined;
if (dataTag == undefined) dataTag = '';
var ctl = $('#txt_Id_' + (dataTag == '' ? '' : ('D' + dataTag)));
if (!isGrid && ctl.length == 1)
s = ctl.val();
else
s = $('.selected > td', '#grdv' + dataTag).eq(idx).text(); //从默认grid取Id,必须是首个TD

if (!nocheck) {
if (s == '') {
alert(UTIL.getMessage('CLTMSG_NO_SELECTED_ROW'));
return false;
}
}
if (s.length == 1 && s.charCodeAt(0) == 160) s = '';

return s;
};
this.setDisabled = function (_array, _condition, _hide)//_hide: null=disabled, true=hide,false=readonly
{
if (_condition && $('#' + _condition).val() != '')//not null?
return;
_array = _array.split(','); //string 'btn_A_,btn_B_'
for (var i = 0; i < _array.length; i++) {
if (!_array[i]) continue; //空串?
var ctl = $('#' + _array[i]);
if (ctl.length > 0) {
if (_hide == null && (ctl.get(0).tagName == 'INPUT' || ctl.get(0).tagName == 'TEXTAREA'))
_hide = false; //set text to readonly by default.

if (_hide == true)
$('#' + _array[i]).hide();
else if (_hide == false)
$('#' + _array[i]).attr('readOnly', 'readOnly').addClass('disabled');
else
$('#' + _array[i]).attr('disabled', 'disabled').addClass('disabled').css('color', '#cccccc');
}
}
$('#' + _array[i]).css("border", "none");
};
this.formatDate = function (dateStr, noHour) {
if (typeof dateStr == 'string') {
if (dateStr.indexOf('/') == 0)
dateStr = 'new ' + dateStr.replace('/', '').replace('/', '');
dateStr = eval(dateStr);
}
var mon = (dateStr.getMonth() + 1);
var date = dateStr.getDate();
var s = dateStr.getFullYear() + '-' + (mon < 10 ? '0' + mon : mon) + '-' + (date < 10 ? '0' + date : date);
if (!noHour) {
var hour = dateStr.getHours();
var min = dateStr.getMinutes();
s += ' ' + (hour < 10 ? '0' + hour : hour) + ':' + (min < 10 ? '0' + min : min)
}
return s;
};

//通过设置span/td为els样式(对应style.css),显示内容为tooltip
this.showEllipsis = function (e) {
var srcElmt = event.srcElement;
if (!srcElmt.tagName || !srcElmt.innerText || srcElmt.tagName == 'BODY') return;
if (srcElmt.offsetWidth < srcElmt.scrollWidth) {
if (!srcElmt.__title) {
if (srcElmt.title == srcElmt.innerText) return;
if (srcElmt.title) srcElmt.__title = srcElmt.title;
}
if (srcElmt.__title)
srcElmt.title = srcElmt.innerText;
else
srcElmt.title = srcElmt.innerText;
}
else {
if (srcElmt.__title) {
srcElmt.title = srcElmt.__title;
srcElmt.__title = null;
}
else if (srcElmt.title == srcElmt.innerText)
srcElmt.title = '';
}
};

//resetByPrefix : reset form elements to default value
this.resetByPrefix = function (_prefix, dataTag) {
if (!dataTag || dataTag == -1) dataTag = '';
$('*[id]', '#bpQry' + dataTag).each(function () {
ctl = this;
if (ctl.id.indexOf(_prefix) == 0) {
if (ctl.type == 'text')
ctl.value = '';
else
if (ctl.type == 'select-one')
ctl.selectedIndex = 0;
else
if (ctl.type == 'checkbox')
ctl.checked = false;
}
});
};

this.refreshParent = function () {
_opener = window.top.opener;
if (!_opener || _opener.closed) {
if (window.parent.PICKER.pickerPad)//has PICKER?
_opener = window.parent;
else {
_opener = window.top;
}
//return; //parent closed?
}
if (_opener.frames['main'] != null) {
_opener = _opener.frames['main'];
}
else {
_opener = window.top.frames['main'];
if (_opener == null || _opener == typeof ("undefined")) _opener = window.top;
}

_opener = _opener.document;
if ($('#btn_Search_', _opener).length == 1)
$('#btn_Search_', _opener).click();
else {
$('#__EVENTTARGET', _opener).val(''); $('#__EVENTARGUMENT', _opener).val(''); //防止事件重复提交
_opener.forms[0].submit();
}
};
this.closePopup = function () {
UTIL.refreshParent();
self.close();
};
this.dynamicAddHead = function (url) {
if (!window.$LoadedHead) window.$LoadedHead = {};
else if (window.$LoadedHead[url]) return;

var filetype = url.indexOf('.css') > 0 ? 'css' : 'js';
if (filetype == "js") {
var fileref = document.createElement('script');
fileref.setAttribute("type", "text/javascript");
fileref.setAttribute("src", url);
} else if (filetype == "css") {
var fileref = document.createElement("link");
fileref.setAttribute("rel", "stylesheet");
fileref.setAttribute("type", "text/css");
fileref.setAttribute("href", url);
}

window.$LoadedHead[url] = true; //loaded
if (typeof fileref != "undefined")
document.getElementsByTagName("head")[0].appendChild(fileref);
else
alert('Dynamic load file [' + url + '] failed!');
};

this.wrapToBottom = function (cfg) {
cfg = cfg || { id: 'trv' }; //default

var obj = typeof (cfg.id) == 'string' ? $('#' + cfg.id) : cfg.id;
if (obj.length != 1 || obj.css('display') == 'none') return;

var SCROLLER_BAR_WIDTH = 19;

var offset = obj.offset();
var height = cfg.height; //已经指定?
if (!height) {//计算
var wHeight = $(window).height() + document.body.scrollTop;
height = wHeight - offset.top - SCROLLER_BAR_WIDTH + 11; //可用高度
}
if (cfg.marginBottom) height = height - cfg.marginBottom;
//宽度
if (cfg.hbar == 'OUTER' && $(window).width() < 500) { cfg.hbar = 'INNER'; } //小窗口显示,滚动条左压
var width = obj.width();
if (obj.height() > height) {//出现垂直滚动条
switch (cfg.hbar) {
case 'OUTER': //div向右加宽
width = width + SCROLLER_BAR_WIDTH;
break;
case 'INNER': //内部元素向左压缩
obj.width(width - SCROLLER_BAR_WIDTH);
break;
default: //内部出现横向滚动条
break;
}
}

if (cfg.addPadding) {//table底部添加一个row,高度到与底边齐平
var cspan = obj.find('tr:first td').length;
if (cspan == 0) cspan = obj.find('tr:first th').length;

var gHeight = height - obj.height() - 8; //隐藏后重新计算
if (!$.browser.msie) gHeight = gHeight - 5;
if (gHeight > 0) {
if (obj.attr('init'))
obj.find('td:last').css('height', gHeight);
else
obj.append('<tr><td colspan="' + cspan + '" style="height:' + gHeight + 'px;"></td></tr>');
}
}

if (obj.get(0).tagName == 'IFRAME' || cfg.nowrap) {//当前元素上设置
obj.css('height', height);
} else {//增加div包裹?
if (obj.attr('init')) {
obj.parent('div').css('height', height);
} else {
var s = '<div style="overflow:auto;overflow-x:hidden;';
if (!$.browser.ie) s += 'padding:1px;';
if (height > SCROLLER_BAR_WIDTH) s += 'height:' + height + 'px;';
s += '"></div>';
obj.wrap(s);
}
}
obj.attr('init', '1');
return { height: height, width: width };
};
this.onAjaxError = function (req, msg) {
if (req.status == 601)
alert(req.statusText);
else {
var i = req.responseText.indexOf('<title>');
if (i > 0) {
i = i + 7;
j = req.responseText.indexOf('</title>');
alert(req.responseText.substring(i, j));
}
}
}
this.dev = function () {
$('.toolbar').dblclick(function (event) {
var path = window.location.pathname.substring(1);
var ModuleUrl = path.substring(path.indexOf('/'));
var file = path.substring(path.indexOf('/') + 1);
var newUrl = window.location.pathname.replace(file, 'advice/BugManagerInfo.aspx?Module=');
// var type=file.substring(file,file.indexOf('.'));
// if(type.indexOf('Detail')==type.length-6)
// type=type.substring(0,type.indexOf('Detail'));
// type = type.length>20?type.substring(type.length-20):type;
var TmpnewUrl = UTIL.getAppRoot() + "/advice/BugManagerInfo.aspx?Module=" + ModuleUrl;
WIN.open(TmpnewUrl, 800, 600);
});
};

/*
* 只读页面转换处理
* Created by cdh 2011.0824
*/
this.parseReadonly = function (containerObj) {
/// <summary>
/// 只读页面转换处理
/// </summary>

// -- 功能区
//$("#divoperate").hide();

// -- 单行输入域
$.each($('input.input01', containerObj), function (i, n) {
if ($(n).css('display') != 'none') {
$(n).replaceWith('<span>' + $(n).val() + '</span>');
}
});

// -- 多行输入域
$.each($('textarea.input02', containerObj), function (i, n) {
if ($(n).css('display') != 'none') {
//$(n).replaceWith('<p style="height:' + $(n).height() + 'px;width:' + $(n).width() + 'px;">' + $(n).val() + '</p>');
$(n).replaceWith('<p style="height:' + $(n).height() + 'px;width:100%;">' + $(n).val() + '</p>');
}
});

// -- 下拉框
$.each($('select', containerObj), function (i, n) {
$(n).replaceWith('<span>' + $(n).children(':selected').text() + '</span>');
});
};

///针对必填项附加星号,附加到前面的td 中,td样式为 listleft01
/// created by cdh 2011.0906
this.appendRequiredStar = function () {
$.each($('input,select,textarea'), function (i, e) {
if (/[\S_]+_V[13]/.test(e.id)) {//带V1,V3的输入域

var star_container = $(e).parent('td').prev('td.listleft01');

if (star_container.children('.star_container').length == 0) {
// var html = $(e).parent('td').prev('td.listleft01').html();
// $(e).parent('td').prev('td.listleft01').html(html.replace(/([^::]+)([::]*)/, '$1' +
// '<span class="star_container" style="color:red">*</span>' + '$2'));
//
$('<span class="star_container" style="color:red">*</span>').appendTo($(e).parent('td').prev('td.listleft01'));
};
}
});
};

/// 限制 textarea 文本长度
this.limitTextareaLength = function () {
$.each($('textarea'), function (i, e) {
var limitlength = $(e).attr('limitlength');
if (limitlength && limitlength > 0) {
$(e).bind('blur', function () {
if (this.value.length > limitlength) {
this.value = this.value.substring(0, limitlength);
alert(this.title + '长度不能大于' + limitlength + ',将自动截取。');
}
});
}
});
};
} ();
//-------------------------window control--------------------------------------
var WIN = new function () {
this.open = function (_url, _width, _height) {//center
var winFeature = 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes';
winFeature += ',width=' + _width + ',height=' + _height;
winFeature += ',left=' + (window.screen.availWidth - _width) / 2 + ',top=' + (window.screen.availHeight - _height) / 2;
return window.open(_url, '', winFeature, '');
};

this.redirect = function (_url, _dataTag, _target) {//redirect, _dataTag=-1等同于不对Id做必须
var _id = UTIL.getId(_dataTag);
if (_id || (_dataTag == -1)) {
var oldIdx = _url.indexOf('&Id=');
if (oldIdx > 0) _url = _url.substring(_url, oldIdx);
else {
oldIdx = _url.indexOf('?Id=');
if (oldIdx > 0) _url = _url.substring(_url, oldIdx);
}

if (_id) {
_url = _url + (_url.indexOf('?') > 0 ? '&' : '?') + 'Id=' + _id;
}
if (!_target) _target = window;
_target.location.href = _url;
}
};

this.openById = function (_url, _width, _height, _dataTag) {//center with Id&Ts
var _id = UTIL.getId(_dataTag);
if (_id || (_dataTag == -1)) {
_url = _url + (_url.indexOf('?') > 0 ? '&' : '?') + 'Id=' + _id;
return this.open(_url, _width, _height);
}
};

this.openAsFull = function (_url)//full & center
{
var winFeature = 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes';
winFeature += ',width=' + (window.screen.availWidth - 12) + ',height=' + (window.screen.availHeight - 26);
winFeature += ',left=0,top=0';
return window.open(_url, 'winId', winFeature, '');
};
this.openInFrame = function (_url, _frameName) {
if (_frameName == null) _frameName = "main";
window.parent.frames[_frameName].document.location.replace(_url);
};
this.showCalendar = function (e, src) {
var txt = e.target ? e.target : e;
PICKER.inline(UTIL.getAppRoot() + '/CommonPage/Calendar.htm', null, txt, 200, 186, src);
};
this.openCalendar = function (src, target) {
if (!src) src = event.srcElement;
if (!target) {
if (src.previousSibling.tagName == 'INPUT')
target = src.previousSibling;
else if (src.previousSibling.previousSibling.tagName == 'INPUT')
target = src.previousSibling.previousSibling;
}
if (target)
PICKER.show(src.src.replace('.ico', '.htm'), null, target, 200, 186);
};
} ();

//-------------------------Tab control Persistantce--------------------------------------
var TAB = new function () {
this.CTL_TAB_IDS = '#txtTabIds';
this.select = function (tabIds) {
if (!tabIds) tabIds = $(this.CTL_TAB_IDS).val();
if (tabIds == undefined) alert('TextBox "txtTabIds" is required!');

ids = tabIds.split(',');
for (var i = 0; i < ids.length; i++)
this.selectById(ids[i]);
};
this.selectById = function (id) {
id = id.split('_');
var tabContainer, tab;
if (id.length == 2) {
tabContainer = id[0];
tab = id[1];
} else {
tabContainer = '#tabs';
tab = id[0];
}
tabIdx = tab.substring(tab.indexOf('tab') + 3);
tabIdx = parseInt(tabIdx);

$(tabContainer).tabs().tabs('select', tab).bind('tabsselect', this.onSelect);
};
this.onSelect = function (event, ui) {
var oldIdx = ui.options.selected;
var oldId = ui.tab.hash.substring(0, ui.tab.hash.length - 1) + oldIdx;
var newId = ui.tab.hash;
var tabIds = $(TAB.CTL_TAB_IDS).val();

if (tabIds.indexOf(oldId) > -1)//exist?
tabIds = tabIds.replace(oldId, newId);
else {
if (tabIds.length > 0)
tabIds = tabIds + ',';
tabIds = tabIds + newId;
}
//alert(tabIds);
$(TAB.CTL_TAB_IDS).val(tabIds); //persist to textbox
};
} ();
//-------------------------gridview control--------------------------------------
var GRID = new function () {
this.grid = null;
this.idIdx = 1;
this.chkIdx = 0;
this.selectedRow = null;
this.oldSelectedClass = null;

this.setup = function (_idIdx, _chkIdx, _grid) {
if (!_grid) _grid = 'grdv'; //default

this.grid = typeof (_grid) == 'string' ? document.getElementById(_grid) : _grid;
this.idIdx = (!_idIdx) ? 1 : _idIdx;
this.chkIdx = (!_chkIdx) ? 0 : _chkIdx;
};
this.setCheckBoxEnable = function (grdvId) {
if (!grdvId) grdvId = 'grdv';
grdvId = '#' + grdvId;

var ctlOldIDs = $('#txtOldIDs');
var _varCheckedIDs = '';
$('input:checkbox', grdvId).each(function (idx, chk) {
var chk = $(chk);
if (chk.attr('checked'))
_varCheckedIDs = _varCheckedIDs + ',' + chk.parent().parent().next().text(); //td/span/chk

chk.attr('disabled', '');
chk.parent().attr('disabled', '');
});

if (_varCheckedIDs.length > 0)// at lease return a char
_varCheckedIDs = _varCheckedIDs.substring(1);
ctlOldIDs.val(_varCheckedIDs);
};

this.getChecked = function (grdvId) {//gridview,textbox to save ids, id index in grdv, chkbox index in grdv
if (!grdvId) grdvId = 'grdv';
grdvId = '#' + grdvId;

var ctlNewIDs = $('#txtIDs');
var _varCheckedIDs = '';
$('input:checkbox', grdvId).each(function (idx, chk) {
var chk = $(chk);
if (chk.attr('checked'))
_varCheckedIDs = _varCheckedIDs + ',' + chk.parent().parent().next().text();

chk.attr('disabled', 'disabled');
});

if (_varCheckedIDs.length > 0)// at lease return a char
_varCheckedIDs = _varCheckedIDs.substring(1);
ctlNewIDs.val(_varCheckedIDs);
};

this.setChecked = function (ctlIDs, idIdx, chkIdx, grid) {//set checkbox status by IDs control
this.setup(idIdx, chkIdx, grid);
if (ctlIDs == null) ctlIDs = document.getElementById('txtIDs');

var _varIDs = ctlIDs.value;
if (this.grid && _varIDs.length > 1) {
if (_varIDs.indexOf(',') != 0) _varIDs = ',' + _varIDs; //add first ',' to match each item

for (var i = 1; i < this.grid.rows.length; i++) {//grid/row/cell/span/checkBox
if (this.grid.rows[i].cells[this.idIdx] && _varIDs.indexOf(',' + this.grid.rows[i].cells[this.idIdx].innerText) > -1) {//exists?
if (this.grid.rows[i].cells[this.chkIdx].childNodes[0].childNodes[0])//span/checkBox in gridview
this.grid.rows[i].cells[this.chkIdx].childNodes[0].childNodes[0].checked = true;
else
this.grid.rows[i].cells[this.chkIdx].childNodes[0].checked = true; //checkBox in datagrid
}
} //end for
}
};

this.deleteRow = function (autoSubmit, grid) {
this.setup(null, null, grid);
if (this.getCellText()) {
if (window.confirm(UTIL.getMessage('CLTMSG_BE_DELETE_ROW'))) {
if (autoSubmit && typeof (__doPostBack) == 'function') {
event.returnValue = false;
__doPostBack('DELETE', this.getCellText() + ',' + this.getCellText(this.idIdx + 1));
}
return true;
}
}
return false;
};

this.select = function (grid) {
if (this.tagName == 'TR')
var tr = $(this);
else
var tr = $(this).parent('tr');
var grid = tr.parents('table');
$('.selected', grid).removeClass('selected');
tr.addClass('selected');
};

///ajax时:drp=DictType, colIdx=IdValue, grid=IsEnum,onSuccess=function
///return: check colIdx value? IdValue => NameValue, null=>DictJson
this.bindDrop = function (drp, colIdx, grid, onSuccess) {
var cache_key = '_CACHED_DICT_' + (typeof (drp) == 'string' ? drp : drp.attr('id'));
var drp = (typeof (drp) == 'string' && typeof (colIdx) == 'number') ? $('#' + drp) : drp;
if (!grid) grid = 'grdv';
var cacheWin = window.top;

//Cache Drop Items
var json = cacheWin[cache_key];
if (!json) {
if (typeof (drp) == 'object') {
json = {};
$('option', drp).each(function (idx, opt) {
var opt = $(opt);
json[opt.val()] = opt.text();
});
cacheWin[cache_key] = json;
} else {//get ajax data
var s = grid ? 'DictType=' : 'EnumType=';
s += drp;
cacheWin[cache_key] = {}; //阻塞当前key的再次请求
$.ajax({
type: "GET",
url: UTIL.getAppRoot() + "/ModDev/BindDropAjax.ashx",
data: s,
error: function (req, msg) { UTIL.onAjaxError(req, msg); cacheWin[cache_key] = null },
success: function (array) {
array = $.parseJSON(array);
json = {};
$.each(array, function (i, row) {
json[row['Code']] = row['Name'];
});
if (typeof onSuccess == 'function')
if (onSuccess(json) == false) return;
cacheWin[cache_key] = json;
}
});
} //end ajax
}

if (json != null) {
if (colIdx != null) {
var bCustomFormat = (typeof PageFormatGrid == 'function');
//Bind to grid
if (typeof (colIdx) == 'number') {
$('tr', '#' + grid).each(function (idx, tr) {
var td = $('td', tr).eq(colIdx);
var dv = td.find('div'); //td内存在div?
if (dv.length == 1) td = dv;
if (bCustomFormat)
td.text(PageFormatGrid(json[td.text()], idx, grid));
else
td.text(json[td.text()]);
});
} else {///ajax时:drp=DictType, colIdx=oldValue, grid=IsEnum
if (bCustomFormat)
return PageFormatGrid(json[colIdx]);
else
return json[colIdx];
}
} else {
if (typeof onSuccess == 'function')
if (onSuccess(json) == false) return;
return json; //all dict
}
}
};

this.getCellText = function (cellIdx, grid) {
this.setup(null, null, grid);
if (!cellIdx) cellIdx = this.idIdx;

if (this.selectedRow) {
if (this.selectedRow.cells[cellIdx])
return this.selectedRow.cells[cellIdx].innerText;
}
else {//serverside select event
for (var i = 0; i < this.grid.rows.length; i++) {
if (this.grid.rows[i].className == 'selected')
return this.grid.rows[i].cells[cellIdx].innerText;
}
}

window.alert(UTIL.getMessage('CLTMSG_NO_SELECTED_ROW'));
return null;
};
//数据为空时加载模板 --EDITED BY BEE
this.setEmptyDataTemp = function (grdv, _array) {
if ($("#" + grdv + " td").text() == '暂无数据' || $("#" + grdv + " td").text() == "") {
var temp = '';
_array = _array.split(',');
for (var i = 0; i < _array.length; i++) {
temp += "<th>" + _array[i] + "</th>";
}
temp = '<table id="' + grdv + '" class="Grid_Table" rules="cols" style="width: 100%; border-collapse: collapse" cellspacing="0" cellpadding="3" border="1" info="0,0,0,0"><tr class="header">' + temp + '</tr></table>';
if ($("#" + grdv).length > 0) {
$("#" + grdv).parent('.bDiv').prev().hide();
$("#" + grdv).replaceWith(temp);
}
else {
$(document.body).append(temp);
}
}
};

this.setEmptyDataMessage = function (grdv, message) {
if ($("#" + grdv + " tr").length <= 1) {
var html = '<div class="nodata" style="width:60%; padding:4% 2%; margin:auto; margin-top:20%; color: #ED6F08; text-align:center; border: 1px solid #FAD8C1; background:#FCEDE0;">' + message + '</div>';
//
$("#" + grdv).replaceWith(html);
}
};

} ();
//-------------------------treeview control--------------------------------------
var TREE = new function () {
//selectedId:设置当前节点父节点;drpSelectedId:设置当前选中节点
this.createOptions = function (drpId, trvId, selectedId, drpSelectedId) {
if (!drpId) alert('Select control is required!');
if (!trvId) trvId = 'trv';
if (typeof (trvId) == 'string')
trvId = $('#' + trvId); //to object

var drpCached = {};
var drp = $('#' + drpId).get(0);

var hasImg = null, hasRoot = null;
$('.trv_0', trvId).each(function (i, ohref) {
if (!ohref.href) return;
if (hasImg == null) {
var img = $(ohref).parent().prev().find('[onclick*=TreeView_SelectNode]');
hasImg = img.length > 0;
}

var shref = ohref.href.substring(32, ohref.href.length - 2); //javascript:__doPostBack('trv','s
var nodes = shref.split('\\\\');
if (nodes[0].length < 10)
nodes[0] = '';

//取得多级缩进
var sHirachy = '';
var sHirachyText = '';
var i = 0;
while (i < nodes.length) {
if (nodes[i]) {
sHirachy += '| - ';
if (i < nodes.length - 1 && drpCached[nodes[i]])//not current node.
sHirachyText += drpCached[nodes[i]].nodeText + '/';
}
i++;
}
//添加选项
var opt = document.createElement('OPTION');
if (nodes.length > 1) {
opt.parentId = nodes[nodes.length - 2];
if (hasRoot && opt.parentId == '')
opt.parentId = 'ROOT';
}
opt.value = nodes[nodes.length - 1];
opt.text = sHirachy + ohref.innerHTML;
if (i < 2 && opt.text && !opt.value)//无Id的根节点
hasRoot = opt.value = 'ROOT';
opt.nodeText = ohref.innerHTML; //可直接访问文本
opt.nodePath = sHirachyText + opt.nodeText; //层级文本

drpCached[opt.value] = opt;

if (hasImg) {
var title = $(ohref).parent().prev().find('img').attr('alt');
if (title == '9') return; //表示无权限的节点
}
drp.options.add(opt);

//title=9 表示无权限的节点
if (ohref.title == '9') {//set unselectable.
$(ohref).css({ 'color': '#000000' }).attr({ 'href': 'javascript:void(0);', 'onclick': 'return false;' }).removeAttr('title');
}
});

//设定为当前节点父节点
var sId = selectedId;
if (sId) {
if (!drpCached[sId]) alert('Selected value is not found in select control.');
else if (drpCached[sId].parentId)
drpCached[drpCached[sId].parentId].selected = 'selected';
} else if (drpSelectedId) {//设定为当前节点
if (!drpCached[drpSelectedId]) alert('Dropdown Selected value is not found in select control.');
else drpCached[drpSelectedId].selected = 'selected';
}
else {//由树节点设置
var node = $('.trv_1', trvId).get(0);
if (node) {
var nodes = node.href.split('\\\\');
if (nodes.length > 1) {
sId = nodes[nodes.length - 1].substring(0, nodes[nodes.length - 1].length - 2); //当前树选中节点
var editModeId = UTIL.getId(-1);
if (editModeId && editModeId == sId) {//录入编辑状态,当前选中应是父节点
if (drpCached[sId] && drpCached[sId].parentId) sId = drpCached[sId].parentId;
}
if (drpCached[sId])
drpCached[sId].selected = 'selected';
}
}
}
drp.cache = drpCached;
};
this.isCirculated = function (drpId, sId) {//当前选中的Id,是当前节点的子节点,构成循环引用?
if (!sId)
sId = UTIL.getId(-1);
if (sId) {
if (!drpId) drpId = 'drp_Parent_V8';
var drp = $('#' + drpId);
var selectedId = drp.val();
var drpCache = drp.get(0).cache;
var bCirculated = false;
while (drpCache[selectedId]) {
if (selectedId == sId) {
bCirculated = true;
break;
}
selectedId = drpCache[selectedId].parentId;

if (!selectedId) break;
}
if (bCirculated)
return "\'%FIELDNAME%\'设置为循环引用,请重新设置!";
}
};
this.currentNode = null;

this.setup = function () {
this.attachNodeEvent();
};
this.attachNodeEvent = function ()//Add event when Node click
{
var nodes = document.getElementsByTagName('A');
for (var i = 0; i < nodes.length; i++) {
if (nodes[i].id.indexOf('trvt') == 0 && nodes[i].href) {
nodes[i].onclick = this.selectedNodeChanged;
}
}
};

this.selectedNodeChanged = function (src)//when node click, do something
{
if (!src) src = event.srcElement;
src.className = 'trv_1';
if (this.currentNode && src != this.currentNode)
this.currentNode.className = 'trv_0';
this.currentNode = src;

if (typeof (OnNodeChanged) == "function")
OnNodeChanged(event, event.srcElement.href.substring(11, event.srcElement.href.length)); //11= length of "javascript:"

return false; //break from href
};

//将制定对象,添加div包裹到特定的长度,宽度
this.wrapScroller = function (cfg) {//{id:'trv',height:null,width:null,margin-bottom:20,margin-right:20}
};
} ();

//-------------------------validate control--------------------------------------
BindingControl = new function () {
var validateRegex = new RegExp("V(\\d{1,2})");
var ctlValObjRegex = new RegExp("\\w{3,5}?_(\\w*)_((\\w\\d{1,2})*)$");
var ctlTypes = ['input', 'select', 'textarea'];
var validateErrors;
var bpZeroCache;
function getCVOs(dataTag, panel) {
var ctn;
if (dataTag < 1) dataTag = '';
if (typeof (panel) == 'object')
ctn = panel;
else {
if (!panel) panel = 'bpEdit';
ctn = '#' + panel + dataTag;
if ($(ctn).length < 1) ctn = '.' + panel + dataTag;
if ($(ctn).length < 1) ctn = 'form';

if (dataTag == '' && bpZeroCache != null && bpZeroCache.length > 0) return bpZeroCache; //get cache
}

var array = [];
for (var i = 0; i < ctlTypes.length; i++) {
$(ctlTypes[i], ctn).each(function (i, ctl) {
m = ctl.id.match(ctlValObjRegex); //cvo?
if (m) {
ctl = $(ctl);
initControl(ctl, m[1], m[2]);
array.push(ctl);
}
});
}
if (dataTag == '') bpZeroCache = array; //add cache
return array;
}
function initControl(ctl, dataField, actionFlag) {
if (ctl.attr('F')) return; //inited

ctl.attr('F', dataField);
ctl.attr('A', actionFlag);

if (!actionFlag) return;
var mV = actionFlag.match(validateRegex);
if (mV && mV.length > 1) {//validation control?
ctl.attr('V', mV[1]);
if (!ctl.attr('T')) {
if (ctl.parent().get(0).tagName == "TD")
ctl.attr('T', $.trim(ctl.parent().prev().text())); //prev TD
else
ctl.attr('T', ctl.prev().text()); //text right before cur control
}
if (!ctl.attr('T')) ctl.attr('T', dataField); //DataField Name
}
}
function clearData(dataTag, panel) {
var ctlArray = getCVOs(dataTag, panel);
$.each(ctlArray, function (i, ctl) {
if (ctl.attr('type') == 'checkbox')
ctl.removeAttr('checked');
else
ctl.val('');
});
}
function setData(data, dataTag, panel) {

}
function getDataStr(dataTag, panel, field) {
if (!field) field = 'F'; //F or id?
var s = '';
var ctlArray = getCVOs(dataTag, panel);
$.each(ctlArray, function (i, ctl) {
val = (ctl.attr('type') == 'checkbox') ? (ctl.attr('checked') == true ? 1 : 0) : ctl.val();
s += '&' + ctl.attr(field) + '=' + val;
});
return s.substring(1);
}
function getData(dataTag, panel, field) {
if (!field) field = 'F'; //F or id?
var array = new Array();
var ctlArray = getCVOs(dataTag, panel);
$.each(ctlArray, function (i, ctl) {
val = (ctl.attr('type') == 'checkbox') ? (ctl.attr('checked') == true ? 1 : 0) : ctl.val();
array.push({ name: ctl.attr(field), value: val });
});
return array;
}

//////////validate////////
function validate(dataTag, bAlert) {
if (bAlert == null) bAlert = true;

validateErrors = '';
var ctlArray = getCVOs(dataTag);
$.each(ctlArray, function (i, ctl) {
if (ctl.attr('V'))
val_recheck(ctl);
});

if (validateErrors.length == 0)
return true;
else if (bAlert) {
validateErrors = validateErrors.replace(/\*/g, "");
alert(validateErrors);
}
return false;
}
function val_recheck(control) {
val_resetError(control);

if ((control.attr('V') & 1) > 0 && !val_checkRegex('V_REQUIRED', control))
val_raiseError(control, UTIL.getMessage('V_REQUIRED'));

if (control.val().length == 0) return;

if ((control.attr('V') & 2) > 0 && !val_checkRegex('V_NUMERIC', control))
val_raiseError(control, UTIL.getMessage('V_NUMERIC'));

if ((control.attr('V') & 4) > 0 && !val_checkRegex('V_DATETIME', control))
val_raiseError(control, UTIL.getMessage('V_DATETIME'));

if ((control.attr('V') & 8) > 0) {
if (control.attr('rule') && !val_checkRegex(control.attr('rule'), control))
val_raiseError(control, control.attr('ruleMsg') ? control.attr('ruleMsg') : UTIL.getMessage('V_INVALID'));
else if (control.attr('ruleFunc')) {
var msg = eval(control.attr('ruleFunc'));
if (msg) val_raiseError(control, msg);
}
if (typeof (PageOnValidate) == "function")//custom per page validate
if (PageOnValidate(control) === true) return; //if true, just skip other validation
}
}
function val_checkRegex(valType, control) {
switch (valType) {
case 'V_REQUIRED':
control.val(control.val().replace(/(^\s+)|\s+$/g, ''));
// if(control.get(0).tagName=='SELECT' && control.val()=='0') return false;/edit windshadow
return (control.val().length > 0); // /.+/
break;
case 'V_NUMERIC':
return !isNaN(control.val()); // /^[-\+]?\d+(\.\d+)?$/
break;
case 'V_DATETIME':
return (/^\d{4}-\d{1,2}-\d{1,2}( \d{1,2}:\d{1,2}){0,1}$/).test(control.val());
break;
default:
var regex = new RegExp(valType, 'g');
return regex.test(control.val());
break;
}
}
function val_resetError(control) {
if (control.attr('error') == '1') {
control.attr('error', '0');
control.removeAttr('title');
control.next().remove();
}
}
function val_raiseError(control, resource) {
var msg = resource.replace('%FIELDNAME%', control.attr('T'));
validateErrors += msg + '\n';
if (control.attr('error') != '1') {
control.attr('error', '1');
control.attr('title', msg);
//control.after("<SPAN style='color:red;'>*</SPAN>"); //"<img title=\""+msg+"\" style=\"vertical-align:middle;\" src=\""+UTIL.getAppRoot()+"/images/button/onError.gif\"/>"
}
}

return {
raiseError: val_raiseError,
validate: validate,
getData: getData,
setData: setData,
clearData: clearData
}
} ();

//-------------------------Grid Pager ---------------------------------
var GridPager = function (cfg) {
//配置项:{id,height,callback,filterId,title}
cfg.callback = cfg.callback || __doPostBack; //回调函数

var PageInfo = null;
var pagerBar = null;
function wrap(cfg) {
grid = $('#' + cfg.id);
grid.find('.Grid_Pager').hide(); //old pager link
if (!cfg.marginRight) cfg.marginRight = 2;

if (!cfg.pagerOnly)
return flexigrid(grid);
else {
if (grid.attr('info')) {
cfg.marginBottom = 32; //Pager的高度
cfg.hbar = 'OUTER'; //垂直滚动条出现,内容压缩
cfg.addPadding = true; //底部增加到底的TR
UTIL.wrapToBottom(cfg);
}
addPager(grid);
}
}
function flexigrid(grid) {
//create table to grid
var ths = $('tr:first th:visible', grid);
if ($.browser.msie) ths = ths.not(ths.filter('.hidden'));
var widths = new Array();
ths.each(function () {
widths.push($(this).width());
});
ths.each(function (i) {
var diff = widths[i] - 13; //padding
if (i == widths.length - 1) diff -= cfg.marginRight;
if (diff < 1) diff = 5;
$(this).attr('width', diff);
});

if (!grid.offset()) { return; }

grid.css({ 'width': 'auto', 'borderCollapse': 'separate' }).prepend($('<thead>').append($('tr:eq(0)', grid)));
var height = $(window).height() - 72 - grid.offset().top; //pager,header
if (widths.length == 0) height += 32; //Empty data,only header?
if (ths.find('input').length > 0) height -= 3; //checkbox in header?
if (cfg.marginBottom) height -= cfg.marginBottom;
if (cfg.showColumnDrag == null || typeof (cfg.showColumnDrag) == "undefined") cfg.showColumnDrag = false;
grid.flexigrid({ height: height - 20, showToggleBtn: false, striped: false, showColumnDrag: cfg.showColumnDrag, RestSize: cfg.resetSize });
return addPager(grid);
}
function addPager(grid) {
//create pager
var div = grid.parent();
div.after('<div class="pPager"><div>');
PageInfo = getPageInfo(grid);

pagerBar = div.next();
createPager();
return grid;
}

function getPageInfo(grid) {//jqgrid
var trInfo = grid.attr('info');
var iPageIndex = 1, iPageCount = 1, iPageSize = 0, iRecordCount = 0;
if (trInfo) {
var c = trInfo.split(','); //注意:此处和服务端关联!
if (c && c.length == 4) {
iRecordCount = c[0];
iPageCount = c[1];
iPageSize = c[2];
iPageIndex = c[3];

iRecordCount = parseInt(iRecordCount);
iPageIndex = parseInt(iPageIndex);
iPageCount = parseInt(iPageCount);
iPageSize = parseInt(iPageSize);
if (iRecordCount == 0) {//grid无数据
iPageIndex = 1; iPageCount = 0;
}
if (iPageCount > 0 && iRecordCount % iPageSize == 0)//总页数计算过度
iPageCount--;
}
}
return { PageIndex: iPageIndex, PageCount: iPageCount, PageSize: iPageSize, RecordCount: iRecordCount };
}
function createPager() {
var sPager = '<div class="pDiv" style="clear:both;height:30px"><div class="pDLeft">'
+ '<div class="pGroup pSetting"> 每页显示<select id="pPageSize" name="pPageSize" style="width:50px"><option value="5">5 </option><option value="10">10 </option><option value="15">15 </option><option value="20">20 </option><option value="25">25 </option><option value="40">40 </option><option value="50">50 </option></select>条</div>'
+ '<div class="btnseparator"/> <div class="pPageStat"></div> </div> <div class="pDRight"><span class="pNav">'
+ '<div class="btnseparator"/> <div class="pGroup"> <div class="pFirst pButton"><span/></div><div class="pPrev pButton"><span/></div> </div> <div class="btnseparator"/> <div class="pGroup"> <div class="pNext pButton"><span/></div><div class="pLast pButton"><span/></div> </div> '
+ '<div class="btnseparator"/> <div class="pGroup"><div class="pcontrol" style="float:left;">第<input type="text" style="width:25px" name="pPageIndex" id="pPageIndex"/>页</div><div class="pReload pButton" title="跳转"><span/></div> </div>'
+ '<div class="btnseparator"/> <div class="pGroup"> <span></span></div>'
+ '</span></div><div style="clear: both;"></div></div>';
pagerBar.wrapInner(sPager);
//updatePageInfo();
window.setTimeout(function () { updatePageInfo(); }, 200);
//centerAlign(pagerBar);//caculate margin

$('.pReload', pagerBar).click(function () { changePage('reload'); });
$('.pFirst', pagerBar).click(function () { changePage('first'); });
$('.pPrev', pagerBar).click(function () { changePage('prev'); });
$('.pNext', pagerBar).click(function () { changePage('next'); });
$('.pLast', pagerBar).click(function () { changePage('last'); });
$('#pPageSize', pagerBar).change(function () { changePage('reload'); });
}
function centerAlign(pagerBar) {
var bar = { wleft: 115, wcenter: 95, wright: 222 }; //width of inner div
var SCROLLER_BAR_WIDTH = 19;
var width = pagerBar.width();
var margin = (width - bar.wleft - bar.wright - bar.wcenter - SCROLLER_BAR_WIDTH) / 2 - 6;
if (margin > 10) {//enough margin?
$('.pDLeft', pagerBar).width(bar.wleft + margin);
$('.pPageStat', pagerBar).width(bar.wcenter + margin);
$('.pDRight', pagerBar).width(bar.wright);
}
}
function changePage(sType) {
var pageSize = $('#pPageSize', pagerBar).val();
switch (sType) {
case 'first':
if (PageInfo.PageIndex > 1)
callback(cfg.id, 'Page$First', 1, pageSize);
break;
case 'last':
if (PageInfo.PageIndex < PageInfo.PageCount)
callback(cfg.id, 'Page$Last', PageInfo.PageCount, pageSize);
break;
case 'next':
if (PageInfo.PageIndex < PageInfo.PageCount)
callback(cfg.id, 'Page$Next', PageInfo.PageIndex + 1, pageSize);
break;
case 'prev':
if (PageInfo.PageIndex > 1)
callback(cfg.id, 'Page$Prev', PageInfo.PageIndex - 1, pageSize);
break;
case 'reload':
if (cfg.btnSearch) {
var idx = $('#pPageIndex', pagerBar).val();
if (idx < 1) idx = 1; if (idx > PageInfo.PageCount) idx = PageInfo.PageCount;
callback(cfg.btnSearch, '', idx, pageSize);
}
break;
}
}
function callback(grdv, action, pageIndex, pageSize) {
$('#pPageIndex', pagerBar).val(pageIndex); //set input to server for MVC
cfg.callback(grdv, action, pageIndex, pageSize);
}
function updatePageInfo(pInfo) {
if (pInfo) PageInfo = pInfo;
if (!PageInfo) return;

if (PageInfo.PageSize < 5) PageInfo.PageSize = 10;
$('select option', pagerBar).each(function (idx, opt) {
if (opt.value == PageInfo.PageSize)
opt.selected = true;
});
$('input', pagerBar).val(PageInfo.PageIndex);
$('.pPageStat', pagerBar).html("<span class=\"pPageInfo\">共 " + PageInfo.PageCount + " 页," + PageInfo.RecordCount + "条记录</span>");
};
this.update = updatePageInfo;
//new GridFilter(cfg);
return wrap(cfg);
};
var GridFilter = function (cfg) {
//配置项:{filterId,title}
//查询区显示头
cfg.title = cfg.title || '查询条件';
function wrap(cfg) {
var bp = $('#' + cfg.filterId);

var sFilter = '<div class="pFilter" align="center">'
+ '<div class="handle"><img src="../images/grid/magnifier.png" align="absmiddle" /> <span class="title">' + cfg.title + '</span> [已隐藏]<br/></div>'
+ '<div class="content">'
+ '<fieldset align="center">'
+ ' <div class="hcontent"><img src="../images/grid/magnifier.png" align="absmiddle" /> <span class="title">' + cfg.title + '</span> [已显示]</div>'
+ '</fieldset> </div> </div>';
bp.before(sFilter);
var filter = bp.prev();
filter.find('fieldset').append(bp);

$('.handle', filter).click(function () {
$(this).hide();
$('.content', filter).show();
});
$('.hcontent', filter).click(function () {
$('.content', filter).hide();
$('.handle', filter).show();
});
};

wrap(cfg);
};
//-------------------------Tree Checker-------------------------------------
var TreeChecker = function (cfg) {
var tree;
//配置项:{id,type,clientSelect,level,click}
//type: 限定可选Node类型,null则为全部。 对应服务端Node 的 ToolTip属性.
//levelIndex: null,0,1,...哪个深度的节点开始需要多级返回?
//levelText:0,1,2 返回向上几级的文字
//click 点击事件
cfg.clientSelect = (cfg.clientSelect == false) ? false : true; //是否客户端选定事件
cfg.levelText = 1;
cfg.hideLeaf = window.location.href.indexOf('HideLeaf=1') > 0;
cfg.checkedByInput = UTIL.getUrlParam('CheckInput');

function init(cfg) {
tree = $('#' + cfg.id);
cfg.hasCheckbox = ($(':checkbox', tree).length > 0);

if (cfg.hasCheckbox && cfg.checkedByInput) {//通过父页面控件,控制勾选
var v = $('#' + cfg.checkedByInput, window.parent.document).val();
if (v) {
var checkedValues = {};
var arr = v.split(',');
for (var i = 0; i < arr.length; i++) {
checkedValues[arr[i]] = true;
}
}
}

cfg.checkedValues = checkedValues;
$('.' + cfg.id + '_0', tree).each(processNode);
$("img", tree).click(function () {
window.setTimeout(function () { ShowOrder(); }, 100);
});
}
function processNode(i, n) {//为checkbox设置sName和sId,子结点容器sNode,节点类型sType(服务端ToolTip)
if (i == 0) cfg.prevNodeId = '-';

var node = $(n);
var chk = node.prev(':checkbox');

var id = node.attr('href');
if (id) {
if (!cfg.hasCheckbox)
chk = node;

id = id.substring(32, id.length - 2); //javascript:__doPostBack('trv','s
chk.attr('sId', id.substring(id.lastIndexOf('\\') + 1))
.attr('sName', node.text());

if (cfg.checkedValues && cfg.hasCheckbox) {//根据父页面值,设置勾选
if (cfg.checkedValues[chk.attr('sId')])
chk.attr('checked', true);
}

var sType = node.attr('title'); //设置节点类型sType
node.attr('sType', sType);
chk.attr('sType', sType);
if (sType) {
if (sType.length == 1) {
node.removeAttr('title');
chk.removeAttr('title'); //都拥有相同的title

//title=9 表示无权限的节点
if (sType == '9') {

node.css({ 'color': '#000000' });
node.attr({ 'href': 'javascript:void(0);', 'onclick': 'return false;' });
if (node.parent().length > 0 && node.parent().prev().length > 0) {
$(node).click(function () {
var tmpid = node.attr("id");
var ssj = $("a", node.parent().prev()).attr("href").replace("javascript:", "");
eval(ssj);
window.setTimeout(function () {
ShowOrder();

}, 200);
});
}
}
else {//有权限
if (cfg.clientSelect) {
node.attr({ 'href': 'javascript:void(0);', 'onclick': 'return false;' });
if (!cfg.hasCheckbox) clientSelect(node); //bind event
}

if (cfg.hideLeaf) {//隐藏叶节点
var childDiv = node.parents('div:eq(0)');
var id = childDiv.attr('id');
if (id != cfg.prevNodeId) {
var nid = id.substring(0, id.length - 5); //trvn2Nodes=>trvn2
$('#' + nid).attr('href', '#').replaceWith(node.parent().prev().children());
childDiv.hide();
cfg.prevNodeId = id;
}
} //隐藏节点
} //有权限
} else {//sType长度不为1
if (cfg.click && typeof cfg.click == 'function') {
node.removeAttr('title');
chk.removeAttr('title'); //都拥有相同的title
node.attr('href', 'javascript:void(0);').click(cfg.click);
}
}
} else {//sType==null
if (cfg.clientSelect) {
node.attr({ 'href': 'javascript:void(0);', 'onclick': 'return false;' });
if (!cfg.hasCheckbox) clientSelect(node); //bind event
}
}
}

if (cfg.hasCheckbox) {//记录子节点div容器的id在sNode
chk.attr('sNode', '#' + chk.attr('id').replace('CheckBox', 'Nodes')); //如'#trv04Nodes'
syncClick(chk);
}
}
function syncClick(obj) {
if (obj == null) obj = $(':checkbox', tree);
obj.click(function (e) {
var chk = $(this);
if (chk.attr('sType') == 9 && $(chk.attr('sNode') + ' :checkbox').length == 0 || (chk.attr('sType') == 9 && chk.attr("checked"))) {//异步展开节点
window.setTimeout(function () {
var s = { id: '', name: '' };
$(':checkbox', tree).each(function (i, o) {
var chk = $(o);
if (chk.attr("checked")) {
if ((cfg.type == null//未配置
|| chk.attr('sType').length > 1 //非配置类型?
|| cfg.type == chk.attr('sType'))//当前配置类型?
&& chk.attr('sId')) {
s.id = chk.attr('sId');
s.name = getLevelText(cfg, chk).substring(1);
if ($("#" + s.id).length == 0) {
$("#" + cfg.UserList).append("<a href='javascript:void(0);' style='color:blue' id='" + s.id + "'><strong>" + s.name + "</strong><img id='id" + s.id + "' src='../images/att_del.gif'></a>  ");
$("#" + s.id).click(function () {
var id = $(this).attr("id");
$(this).remove();
$("[type='checkbox'][checked]", tree).each(function (i, o) {
var chk = $(o);
if (chk.attr('sId') == id) {
chk.attr("checked", false);
}
});
});
}
}
}
});
ShowOrder();
}, 100);
}

if (cfg.type && chk.attr('sType') == cfg.type) return true; //bug todo:忽略子结点选择,提高性能
var bChecked = chk.attr('checked');
$(chk.attr('sNode') + ' :checkbox').each(function (i, o) {
if (!$(o).attr("checked")) { $(o).click(); }
}); //同步子节点
$(chk.attr('sNode') + ' :checkbox').attr('checked', bChecked); //同步子节点

// return true; //bug todo:忽略子结点选择,提高性能
while ((chk = chk.parents('div:eq(0)')) && chk.length > 0) {//同步父节点
$('#' + chk.attr('id').replace('Nodes', 'CheckBox'), tree)
.attr('checked',
$(':checked', chk).length == $(':checkbox', chk).length); //子已经全选?
}
});
}
function clientSelect(obj) {
if (typeof pick != 'function') pick = function () { };
if (obj == null) obj = '.' + cfg.id + '_0'; //all node
$(obj).click(function () {
$('.' + cfg.id + '_1').removeClass(cfg.id + '_1');
$(this).addClass(cfg.id + '_1');
}).dblclick(pick);

}
function getLevelText(cfg, chk) {
var val;
if (!cfg.levelIndex)//未设置
val = chk.attr('sName');
else {
val = chk.attr('sName');
var p = chk.parents('div[id]^="trvn"');
if (p.length > cfg.levelIndex) {
var j = 0;
while (j < cfg.levelText && j < p.length) {
val = p.eq(j).prev().find('a').text() + '/' + val;
j++;
}
}
}
return ',' + val;
}

init(cfg);
ShowOrder();
function ShowOrder() {
var s = { id: '', name: '' };
if (cfg.hasCheckbox) {
$(':checkbox', tree).change(function () {
var chk = $(this);
if (chk.attr("checked")) {
if ((cfg.type == null//未配置
|| chk.attr('sType').length > 1 //非配置类型?
|| cfg.type == chk.attr('sType'))//当前配置类型?
&& chk.attr('sId')) {
s.id = chk.attr('sId');
s.name = getLevelText(cfg, chk).substring(1);
if ($("#" + s.id).length == 0) {
$("#" + cfg.UserList).append("<a href='javascript:void(0);' style='color:blue' id='" + s.id + "'><strong>" + s.name + "</strong><img id='id" + s.id + "' src='../images/att_del.gif'></a>  ");
$("#" + s.id).click(function () {
var id = $(this).attr('id');
$(this).remove();
$("[type='checkbox'][checked]", tree).each(function (i, o) {
var chk = $(o);
if (chk.attr('sId') == id) {
chk.attr("checked", false);
}
});
});
}
}
}
else {
s.id = chk.attr('sId');
s.name = getLevelText(cfg, chk);
$("#" + s.id).remove();
}
});
}
};
return {
get: function () {//取得选中节点obj:{id:'11,22',name:'aa,bb'}
var s = { id: '', name: '' };
if (cfg.hasCheckbox)
$(':checked', tree).each(function (idx, chk) {
chk = $(chk);
if ((cfg.type == null//未配置
|| chk.attr('sType').length > 1 //非配置类型?
|| cfg.type == chk.attr('sType'))//当前配置类型?
&& chk.attr('sId')) {
s.id += ',' + chk.attr('sId');
s.name += getLevelText(cfg, chk);
}
});
else {
var node = $('.' + cfg.id + '_1');
if (node.length && (cfg.type == null || node.attr('sType').length > 1 || cfg.type == node.attr('sType')) && node.attr('sId')) {
s.id = ',' + node.attr('sId');
s.name += getLevelText(cfg, node);
} else
alert('选定了无效的值! (是否树未加载?)');
}

s.id = s.id.substring(1); //trim ','
s.name = s.name.substring(1);
if (s.id == 'undefined') { s.id = ''; s.name = ''; }
return s;
},
processNode: processNode
}
};
//-------------------------pop up control--------------------------------------
var Picker = function (cfg) {
var source, targetID, targetName;
this.offset = {};
this.event = {};
this.pickerPad = null;
this.targetID = null;
this.targetName = null;
this.cfg = cfg;
function addPickerPad() {
var ctlPickerPad = document.createElement("DIV");
ctlPickerPad.className = 'p_pad';
ctlPickerPad.style.cssText = 'position:absolute;display:none;z-index:89;';
ctlPickerPad.innerHTML = '<div class="p_h"><u class="corner"><u class="l1"></u><u class="l2"></u><u class="l3"></u><u class="l4"></u></u>'
+ '<div class="p_cb"><ul><li title="关闭"><a href="javascript:void(0);" id="p_Close"></a></li>'
+ '<li title="刷新"><a href="javascript:void(0);" id="p_Refresh"></a></li>'
+ '<li title="返回"><a href="javascript:void(0);" id="p_Select"></a></li></ul><div style="clear:both;"></div> </div></div>'
+ '<div class="p_c"><iframe id="p_frm" name="p_frm" scrolling="auto" frameBorder="0"></iframe></div>'
+ '<div class="mask"></div>';
$(window.document.forms[0] || window.document.body).append(ctlPickerPad);
return ctlPickerPad;
}

function setDragable(pickerPad) {
$(pickerPad).draggable({ iframeFix: false });
}

function getPosition(source, pickerPad) {
if (source == null || source == window) {
if (source == null) source = window;
var win = $(source);
pad = $(pickerPad);
var calTop = (win.height() - pad.height()) / 2 + document.body.scrollTop, calLeft = (win.width() - pad.width()) / 2 + document.body.scrollLeft;
} else {
var offset = $(source).offset();
var avail = { top: offset.top - document.body.scrollTop, left: offset.left - document.body.scrollLeft }; //可见区域
var calTop = 0, calLeft = 0;

if ((avail.top + pickerPad.height) > document.body.clientHeight) {//下方空间无法放Picker?
if (avail.top - pickerPad.height < 10)//上方也无法放Picker
calTop = offset.top + 10; //下方撑开
else
calTop = offset.top - pickerPad.height - 10;
} else
calTop = offset.top + 10; //下方可放下

if ((avail.left + pickerPad.width) > document.body.clientWidth) {//右方空间无法放Picker?
var srcWidth = $(source).width();
if (avail.left + srcWidth - pickerPad.width < 1)//左方也无法放Picker
calLeft = offset.left; //右方撑开
else
calLeft = offset.left + srcWidth - pickerPad.width;
} else
calLeft = offset.left; //右方可放下
}
if ($('.p_h', pickerPad).css('display') == 'none') calTop += 11;
return { top: calTop, left: calLeft };
}

function addCssFile(url) {
if (!url)
UTIL.dynamicAddHead(UTIL.getAppRoot() + '/App_Themes/Popup/popup.css');
}
function reset() {
this.offset.hide = true;
this.show('about:blank', null, null, 20, 20);
}

function setFrame(options, picker) {
//if(!targetName && !source && !targetID) { alert("Receiver control should be setted!"); return false;}//Verify
var tID = options.tID, tName = options.tName, source = options.source, url = options.url;
var pickerPad = options.pickerPad;
if (tName) {
options.tName = typeof (tName) == 'string' ? document.getElementById(tName) : tName;
if (!options.tName) alert("[Name] control can't be found.");
}
if (tID) {
options.tID = typeof (tID) == 'string' ? document.getElementById(tID) : tID;
if (!options.tID) alert("[ID] control can't be found.");
}
if (options.source) {
options.source = typeof (source) == 'string' ? document.getElementById(source) : source;
//if (!source) alert("[source] control can't be found.");
}
else if (options.tName)
options.source = options.tName;
else options.source = options.tID;
//URL rewrite
var pickerFrm = $('#p_frm', pickerPad);

//Place Content
var bClearOldChecked = options.tID ? true : false; //是否是Picker.pick弹出
if (typeof (url) == 'string' && url.lastIndexOf('.') > 0) {//Url string
if (url.indexOf('postback=1') > 0 && options.tID)//传递参数
url = url + '&TID=' + options.tID.value;

if (pickerFrm.get(0).tagName != 'IFRAME') {
pickerFrm.replaceWith('<iframe id="p_frm" scrolling="auto" frameBorder="0"></iframe>');
pickerFrm = $('#p_frm', pickerPad); //div=>ifm
}
var ifm = pickerFrm.get(0);
var subUrl = url.substring(2);
var i = ifm.src.indexOf(subUrl);
if (i < 0 || ifm.src.length - i > subUrl.length) {//url不同
ifm.src = url;
bClearOldChecked = false; //页面已经重载
}
if (typeof options.event.load == 'function') {
pickerFrm.load(function () {
options.event.load(this.contentWindow, this.src, picker);
});
} else
pickerFrm.unbind('load');
//ifm.src="about:blank";
pickerPad['type'] = '1'; //标志它已经启用
} else {
if (pickerFrm.get(0).tagName != 'DIV')//iframe=>div
pickerFrm.replaceWith('<div id="p_frm" style="overflow:hidden;"/>');
pickerFrm = $('#p_frm', pickerPad); //ifm=>div
if (typeof (url) == 'string') {
url = $('#' + url, window.document).show(); //find by id
} else url = $(url).show();
pickerFrm.append(url);
pickerPad['type'] = '2'; //标志它已经启用
}
//清除checkbox
if (bClearOldChecked)
$("input:checked", pickerPad['type'] == '1' ? pickerFrm.get(0).contentWindow.document : pickerFrm).attr('checked', false);

//set Position
if (options.width == 0) options.offset.hide = true;
if (!options.offset.hide) {
if (options.width == null)//auto width?
options.width = $(options.source).width();
pickerFrm.width(options.width);
if (options.height)//auto height?
pickerFrm.height(options.height);

var offset = getPosition(options.source, pickerPad); //show picker
$(pickerPad).css(offset).show();

setDragable(pickerPad);
$(pickerPad).dblclick(hide);
$('#p_Refresh', pickerPad).click(refresh);
} else {//Firefox: iframe should be display before loading
$(pickerPad).css({ top: -options.height - 100, left: -options.width - 100 }).show();
}
}
function getTextareaDiv(options, tName) {
var tbId = 'taBigtext';
if ($('#' + tbId).length == 0) {
var s = '<textarea id="' + tbId + '" class="textarea"></textarea>';
$(window.document.forms).append(s);
}
$('#' + tbId).val($('#' + tName).val());
options.overlayClick = function () { PICKER.pick(null, $('#' + tbId).val()); };
options.show = function () { $('#' + tbId).focus(); };
return tbId;
}
function getDropdownDiv(options, drpId, tID, tName) {
var tbId = 'tb' + drpId;
if ($('#' + tbId).length == 0) {
var s = '<table id="' + tbId + '" class="dropdown">';
$('#' + drpId + ' option').each(function (i, opt) {
if (opt.text)
s += '<tr><td val="' + opt.value + '">' + opt.text + '</td></tr>';
});
s += '<tr><td><a onclick="PICKER.pick(\'\',\'\');" href="#" style="float:left;width:50%;">清空</a><div style="float:right;width:50%;" align="right"><a onclick="PICKER.hide();" href="#">关闭</a></div></td></tr>';
s += '</table>';
$(window.document.forms).append(s);

$('#' + tbId + ' td:not(:last)').click(function () {
var ctl = $(this);
PICKER.pick(ctl.attr('val'), ctl.text());
}).hover(function () {//over
$(this).addClass('over');
}, function () {//out
$(this).removeClass('over');
});
}
$('#' + tbId + ' td.over').removeClass('over');
return tbId;
}
function inline(url, tID, tName, width, height, source, callback) {
if (!this.pickerPad || this.pickerPad.isWin) { //Init on first load
addCssFile();
this.pickerPad = addPickerPad();
}
if (this.pickerPad.style.display != "none") { this.hide(); return false; } //Toggle picker
toggleStyle(this.pickerPad, true);
var options = { pickerPad: this.pickerPad, url: url
, tID: tID, tName: tName, width: width, height: height, source: source, callback: callback
, event: { load: this.event.load }
, offset: this.offset, overlayClick: function () { PICKER.hide(); }
};

if (url == tName)
options.url = getTextareaDiv(options, tName);
else if (typeof (url) == 'string' && $('#' + url).length == 1 && $('#' + url).get(0).tagName == 'SELECT')//options -> inline selection
options.url = getDropdownDiv(options, url, tID, tName);

this.event.pick = (typeof (callback) == 'function') ? callback : null;

setFrame(options, this);
if (typeof options.show == 'function') options.show();
this.offset.hide = false;
this.targetID = options.tID; //id=>control
this.targetName = options.tName;
this.event.load = null;
this.event.hide = function () { $('#PickerOverlay').hide(); };
setStorage(getPadId(this.pickerPad), this);

if ($('#PickerOverlay').length == 0) {
var overlayOpacity = 0;
$(document.body).append('<div id="PickerOverlay" style="z-index:59;display:block;position:fixed;width:99%;height:99%;top:0;left:0;background-color:gray;filter:alpha(opacity=' + overlayOpacity + ');-moz-opacity: 0.' + overlayOpacity + ';opacity: 0.' + overlayOpacity + ';"></div>');
$('#PickerOverlay').click(options.overlayClick);
}
$('#PickerOverlay').show();
}
function toggleStyle(pickerPad, isInline) {
if (isInline) {
$('.p_h', pickerPad).hide();
$('.p_c', pickerPad).addClass('p_cInline');
} else {
$('.p_h', pickerPad).show();
$('.p_c', pickerPad).removeClass('p_cInline');
}
}
///show(string url,string/input tID,string/input tName,
/// int width,int height,string/input source,function callback)
function show(url, tID, tName, width, height, source, callback) {
if (!this.pickerPad || this.pickerPad.isWin) { //Init on first load
addCssFile();
this.pickerPad = addPickerPad();
}
if (this.pickerPad.style.display != "none") { this.hide(); return false; } //Toggle picker
toggleStyle(this.pickerPad);

if (typeof (callback) == 'function') this.event.pick = callback;
var options = { pickerPad: this.pickerPad, url: url
, tID: tID, tName: tName, width: width, height: height, source: source, callback: callback
, event: { load: this.event.load }
, offset: this.offset
};
setFrame(options, this);

$('#p_Close,#p_Select', this.pickerPad).unbind('click');
$('#p_Close', this.pickerPad).click(hide);
$('#p_Select', this.pickerPad).click(select);
this.offset.hide = false;
this.targetID = options.tID; //id=>control
this.targetName = options.tName;
this.event.load = null;
setStorage(getPadId(this.pickerPad), this);
return this;
}

///可以仅提供对象{}的url参数。具体项参考dwindow
///默认则url为div的Id或者url的字符串
function open(url, tID, tName, width, height, source, callback) {
if (!this.offset.multi) {//不允许同时多个?
var childWins = window.$pickerStorage; //hide child windows
var curUrl = url.substring(url.indexOf('/') + 1);
for (var winId in childWins) {
var p = childWins[winId];
if (typeof p.pickerPad.getFrame == 'function') {
var u = p.pickerPad.getFrame().attr('src');
if (u && u.indexOf(curUrl) > 0)
return this;
else if (url.indexOf('/') < 0 && p.pickerPad.getFrame().find('#' + url).length > 0)
return this;
}
}
}
var options = { width: width + 20, height: height + 60, left: this.offset.left, top: this.offset.top, maximizable: false, minimizable: false, draggable: false, resizable: false };

if (typeof (url) == 'string') {
if (url.lastIndexOf('.') > 0) {//Url string
// if (url.indexOf("?") < 0)
// url += "?randtmpurl=1";
// url += "&_tmprand=" + Math.random();
if (url.indexOf('postback=1') > 0 && tID) {//传递参数
var v = $('#' + tID).val();
if (v) url = url + '&TID=' + v;
}
options.url = url;
var onIframeEnd = null;
if (typeof this.event.load == 'function') {
var oldLoad = this.event.load;
options.onIframeEnd = function (me, url) {
var win = me.getFrame().get(0).contentWindow;
oldLoad(win, url);
}
this.event.load = null;
}
//if (width < 1) this.offset.hide = true;
if (url.indexOf('&AutoAccept=1') > 0) this.offset.hide = true;
if (this.offset.hide) {
options.x = -options.width;
options.y = -options.height;
this.offset.hide = false;
} else if (!options.title && !options.onIframeEnd) {
if (this.offset.max) {
options.maxOpen = true;
this.offset.max = null;
}
options.onIframeEnd = function (me, url) {//自动加上窗体标题
var win = me.getFrame().get(0).contentWindow;
me.setTitle(win.document.title);
}
}
} else {
options.content = $('#' + url); //move obj to window
}
} else
options = url;

options.containerClass = "p_pad"; //getPicker查找方式
this.targetID = typeof (tID) == 'string' ? document.getElementById(tID) : tID;
this.targetName = typeof (tName) == 'string' ? document.getElementById(tName) : tName;
if (typeof (callback) == 'function') this.event.pick = callback;

options.onClose = function (me) {
if (options.content) {
var opts = this;
if ($(window.document.forms).length > 0)
$(window.document.forms).append(opts.content.hide());
else
$(window.document.body).append(opts.content.hide());
}

var winId = me.getWindowId();
var picker = getStorage(winId);
if (typeof picker.event.hide == 'function') {//有关闭事件?
if (picker.event.hide() == false)
return false; //返回false则不关闭
}
if (options.url)
picker.pickerPad.getFrame().attr('src', 'javascript:false').parent().empty();
removeStorage(winId);
};
if (cfg != null && cfg.checkHide != null) {
options.checkHide = cfg.checkHide;
}
if (cfg != null && cfg.closeParam != null) {
options.closeParam = cfg.closeParam;
}
var win = $.dwindow(options);
if (win.getContainer().length == 0) { alert('窗体容器添加失败,请确认所有HTML标记正确关闭.'); }

var instance = { event: this.event, hide: this.hide, pick: this.pick, toggle: this.toggle, getPickerId: this.getPickerId, targetID: this.targetID, targetName: this.targetName, closable: true };
instance.pickerPad = win;
var pId = win.getWindowId();
setStorage(pId, instance);

this.pickerPad = { isWin: true, windowId: pId }; //notify popup inited
return instance;
}
function openAt(url, tID, tName, width, height, left, top, callback) {
if (height > 520) height = 520;
return this.open(url, tID, tName, width, height, null, callback);
}

function pick(vID, vName, e) {
var picker = getPicker(e || this);

if (picker.pickerPad) {
if (vID != null && picker.targetID) {
picker.targetID.value = vID; $(picker.targetID).change(); //fireEvent
picker.targetID.title = vName;
}
if (vName != null && picker.targetName) { picker.targetName.value = vName; $(picker.targetName).change(); }

if (typeof picker.event.pick == 'function') picker.event.pick(vID, vName);
picker.hide();
} else
alert("Returning window not found!");
}

function hide(e) {
var picker = getPicker(e || this);
if (!picker) return;
if (picker.pickerPad) {//已经启用
if (!picker.pickerPad.tagName) {//picker.pickerPad 与PICKER.pickerpad不同
picker.pickerPad.getFrame().attr('src', 'javascript:false').parent().empty();
picker.pickerPad.close();
} else {
if (typeof picker.event.hide == 'function') {//有关闭事件?
if (picker.event.hide() == false)
return false; //返回false则不关闭
}

if (picker.pickerPad['type'] == '2') {//div,hide时将内容重新保存回body,防止其他Picker导致它丢失
var ifm = $('#p_frm', picker.pickerPad);
$(window.document.forms).append(ifm.contents().hide());
} else {
$('#p_frm', picker.pickerPad).attr('src', 'about:blank');
}
picker.pickerPad.style.display = "none";
picker.event.pick = null;
picker.event.hide = null;
removeStorage(getPadId(picker.pickerPad));
}
}
}

function toggle(e, bShow) {
var picker = getPicker(e || this);
if (!picker) return;

if (picker.pickerPad && !picker.pickerPad.tagName) {
var pad = picker.pickerPad.getContainer();
var offset = pad.offset();
if (bShow && offset.left > 0) return;
pad.css({ top: -offset.top - 1000, left: -offset.left - 1000 });
}
}

function refresh(e) {
var picker = getPicker(e || this);

if (picker.pickerPad) {//已经启用
if (picker.pickerPad['type'] == '1') {
var ifm = $('#p_frm', picker.pickerPad).get(0);
var _opener = ifm.contentWindow.document;
if (!$(_opener.forms[0]).hasClass('norefresh')) {//form 具有norefresh样式,则禁用刷新功能
$('#__EVENTTARGET', _opener).val(''); $('#__EVENTARGUMENT', _opener).val(''); //防止事件重复提交
_opener.forms[0].submit();
}
} else
picker.hide();
}
}
function select(e) {
var picker = getPicker(e || this);

if (picker.pickerPad) {//已经启用
if (picker.pickerPad['type'] == '1') {
var ifm = $('#p_frm', picker.pickerPad).get(0);
if (typeof ifm.contentWindow.pick == 'function')
ifm.contentWindow.pick();
else
picker.hide();
} else
picker.hide();
}
}
function getPickerId(e) {//从给定控件、事件(默认为window)往上找到容器Picker的Id
var picker = getPicker(e || this);
if (picker) {
if (!picker.pickerPad.tagName)//picker.pickerPad 与PICKER.pickerpad不同
return picker.pickerPad.getWindowId();
return $(picker.pickerPad).attr('id');
}
}

///find picker up from eventTarget
function getPicker(e, win) {
//inner function
function getPadFrame(win) {
var f;
$('iframe', win.parent.document).each(function (idx, fm) {
if (fm.contentWindow == win) {
f = fm;
return false;
}
});
return f;
}
if (e && e.pickerPad && e.pickerPad.isWin) {//pick win时, 操作的是子picker,重新转回源对象. window.parent.PICKER=>PICKER
var pad = $('.p_pad');
if (pad.length == 1) {
var ifm = pad.find('IFRAME');
if (ifm.length == 1) {
e = ifm;
}
}
}

var src = e ? (e.target ? e.target : e) : this;
if (src.pickerPad) {
if (src.pickerPad.isWin) {
if (src.pickerPad.windowId) {
var p = getStorage(src.pickerPad.windowId);
if (p) return p;
}
} else
return src; //real picker
}

if (!win) win = src.location ? src : window;
var pad = $(src).parents('.p_pad'); //div?
while (pad.length == 0) {//iframe
var ifm = getPadFrame(win);
if (ifm) {
pad = $(ifm).parents('.p_pad');
if (win != win.parent)
win = win.parent;
else
break;
} else
break;
}

if (pad.length == 1) {
var picker = getStorage(getPadId(pad), win);
if (!picker) alert("Picker can't be found in the Storage.");
return picker;
}
}
function getPadId(pad) {//内部方法,根据Pad设置并取得id
pad = $(pad);
var winId = pad.attr('id');
if (!winId) {
pad.attr('id', 'picker_' + new Date().getTime());
winId = pad.attr('id');
}
return winId;
}

function removeStorage(winId, win) {
if (win == null) win = window;
if (win.$pickerStorage)
delete win.$pickerStorage[winId];
}
function setStorage(winId, picker, win) {//将Picker按id索引存储
if (win == null) win = window;
if (!win.$pickerStorage)
win.$pickerStorage = {};
win.$pickerStorage[winId] = picker;
}
function getStorage(winId, win) {//根据id、控件取得Picker
if (win == null) win = window;
if (typeof winId != 'string')
return getPicker(winId || this, win);
return win.$pickerStorage[winId];
}

this.reset = reset;
this.open = open;
this.show = show;
this.inline = inline;
this.hide = hide
this.pick = pick;
this.getPickerId = getPickerId; //根据给定控件、事件取得最近的PickerId
this.getPicker = getStorage; //根据pickerId、控件 取得Picker
this.toggle = toggle; //更改可见性display
this.openPosition = openAt; //此方法慎用
};

// -------------------------------------Toolbar---------------------------------------

function setToolbar(imgPath, btnFilter, toolbar) {
//addCancelButton()
if (!toolbar) toolbar = '.toolbar';
if (typeof (OnToolbarInit) == "function")//toobar额外处理在utils2.js此函数中进行
OnToolbarInit();

function getButtonKey(id) {
if (id.indexOf("_Del") > 0)
return "Del";
if (id.indexOf("_Edit") > 0)
return "Edit";
if (id.indexOf("_Save") > 0)
return "Save";
if (id.indexOf("_Accept") > 0)
return "Accept";
if (id.indexOf("_New") > 0)
return "New";
if (id.indexOf("_Search") > 0)
return "Search";
if (id.indexOf("_Reset") > 0)
return "Reset";
if (id.indexOf("_Export") > 0)
return "Export";
return "tmp";
}

function getButton(btnKey) {
var tItem = { name: '', cls: '' };
if (typeof (getToolbarButton) == "function")
tItem = getToolbarButton(btnKey);
if (!tItem.name) {
switch (btnKey) {
//1. 仅出现3次以下的按钮应在页面直接定义: <button id='btn_Name_' imgCls='image_Class' style='width:54px'>按钮名称</button>
//2. 非ZA用到的按钮,都写到utils2.js getToolbarButton 方法的switch中
//3. 要覆盖ZA里定义的按钮样式, 请在utils2.js中直接再次定义按钮,如: case "Save": tItem.name = '我的保存'; tItem.cls = 'SM_Save';
case "Signature": tItem.name = '盖章'; tItem.cls = "Ico_Stamp"; break;
case "SignatureHand": tItem.name = '签章'; tItem.cls = "Ico_Sign_L"; break;
case "New": tItem.name = '新增'; tItem.cls = 'Ico_Add'; break;
case "Original": tItem.name = '查看原始信息'; tItem.cls = 'Ico_Diary'; break;
case "Attachment": tItem.name = '附件管理'; tItem.cls = 'Ico_Upload'; break;
case "Del":
case "MyDel": tItem.name = '删除'; tItem.cls = 'Ico_Del'; break;
case "Edit": tItem.name = '编辑'; tItem.cls = 'Ico_Edit'; break;
case "Submit": tItem.name = '提交'; tItem.cls = 'Ico_Submit'; break;
case "Save": tItem.name = '保存'; tItem.cls = 'Ico_Save'; break;
case "Filter": tItem.name = '搜索'; tItem.cls = 'Ico_Filter'; break;
case "Cut": tItem.name = '剪切'; tItem.cls = 'Ico_Cut'; break;
case "Close": tItem.name = '关闭'; tItem.cls = 'Ico_Return'; break;
case "Return": tItem.name = '返回'; tItem.cls = 'Ico_Return'; break;
case "Select": tItem.name = '选择'; tItem.cls = 'Ico_Sign_L'; break;
case "ViewSelected": tItem.name = '查看选中'; tItem.cls = 'Ico_Exam'; break;
case "ComeIntoBegin": tItem.name = '生成借阅申请单'; tItem.cls = 'Ico_Slip'; break;
case "Reject": tItem.name = '退回'; tItem.cls = 'Ico_Back'; break;
case "Reply": tItem.name = '回复'; tItem.cls = 'Ico_Reply'; break;
case "Send": tItem.name = '发送'; tItem.cls = 'Ico_Send'; break;
case "Revert": tItem.name = '还原'; tItem.cls = 'Ico_Reback'; break;
case "Transfer": tItem.name = '转发'; tItem.cls = 'Ico_Repeat'; break;
case "Hold": tItem.name = '暂存'; tItem.cls = 'Ico_Hold'; break;
case "BorrowBook": tItem.name = '借出'; tItem.cls = 'Ico_BorrowBook'; break;
case "ReturnBook": tItem.name = '归还'; tItem.cls = 'Ico_ReturnBook'; break;
case "LockedBy": tItem.name = '签收'; tItem.cls = 'Ico_LockedBy'; break;
case "Accept": tItem.name = '提交'; tItem.cls = 'Ico_Submit'; break;
case "Print": tItem.name = '打印'; tItem.cls = 'Ico_Print'; break;
case "UpFile": tItem.name = '上传附件'; tItem.cls = 'Ico_Upload'; break;
case "Cancel": tItem.name = '撤回'; tItem.cls = 'Ico_Slip_Del'; break;
case "ShowLog": tItem.name = '日志'; tItem.cls = 'Ico_Diary'; break;
case "EventShowLog": tItem.name = '日志'; tItem.cls = 'Ico_Diary'; break;
case "ExportWord": tItem.name = '导出文档'; tItem.cls = 'Ico_De_Word'; break;
case "NewEmail": tItem.name = '新邮件'; tItem.cls = 'Ico_New'; break;
case "btn_Transfer": tItem.name = '转发'; tItem.cls = 'Ico_Repeat'; break;
case "Move": tItem.name = '导出Word'; tItem.cls = "Ico_Del"; break;
case "Erase": tItem.name = '彻底删除'; tItem.cls = "Ico_Del"; break;
case "Sadve": tItem.name = '保存'; tItem.cls = "Ico_Save"; break;
case "Query":
case "Search": tItem.name = '查询'; tItem.cls = "Ico_File_S"; break;
case "Read": tItem.name = '阅读'; tItem.cls = "Ico_Readed"; break;
case "Temp": tItem.name = '模板'; tItem.cls = "Ico_Save"; break;
case "Lock": tItem.name = '签收'; tItem.cls = "Ico_Re_Sign"; break;
case "Cancel": tItem.name = '取消'; tItem.cls = "Ico_Withdraw"; break;
case "Export": tItem.name = '导出'; tItem.cls = "Ico_De_Excel"; break;
case "ExportExcel":
case "Excel": tItem.name = '导出表格'; tItem.cls = "Ico_De_Excel"; break;
case "ExportWord":
case "Word": tItem.name = '导出Word'; tItem.cls = "Ico_De_Word"; break;
case "Reset": tItem.name = '重置'; tItem.cls = "Ico_Clear"; break;
case "TopTopic": tItem.name = '置顶'; tItem.cls = "Ico_Upload"; break;
case "TopTopic2": tItem.name = '取消置顶'; tItem.cls = "Ico_Upload"; break;
case "AccecptUseCarShip": tItem.name = '通过'; tItem.cls = "Submit"; break;
case "Select": tItem.name = '选择'; tItem.cls = "Ico_Submit"; break;
case "Drawback": tItem.name = '抽取'; tItem.cls = "Ico_Withdraw"; break;
case "TemplateDesign": tItem.name = '模板设计'; tItem.cls = "Ico_Workflow"; break;
case "WorkFlowDesign": tItem.name = '工作流设计'; tItem.cls = "Ico_Workflow"; break;
case "Open": tItem.name = '打开'; tItem.cls = "Ico_Revision"; break;
case "SavePwd": tItem.name = '保存密码'; tItem.cls = "Ico_Reset"; break;
case "ResetPwd": tItem.name = '重置密码'; tItem.cls = "Ico_Reset"; break;
case "ViewLog": tItem.name = '日志'; tItem.cls = "Ico_Diary"; break;
case "Week": tItem.name = '周日程'; tItem.cls = "Ico_Calendar"; break;
case "Month": tItem.name = '月日程'; tItem.cls = "Ico_Calendar"; break;
case "Last": tItem.name = '上周'; tItem.cls = "Ico_Last"; break;
case "Next": tItem.name = '下周'; tItem.cls = "Ico_Next"; break;
case "ClosePage": tItem.name = '关闭'; tItem.cls = 'Ico_Return'; break;
case "SaveUpdateLog": tItem.name = '保存'; tItem.cls = 'Ico_Exam'; break;
case "CheckUpdate": tItem.name = '修改痕迹'; tItem.cls = 'Ico_Re_Sign'; break;
case "Preview": tItem.name = '预览'; tItem.cls = 'Ico_Preview'; break;
}
}
if (!tItem.name && !tItem.cls)
tItem.cls = 'Ico_Spatial';
return tItem;
}

function getButtonIcon(imgPath, key, imgType) {
return imgType != null ? imgPath + key + "." + imgType : imgPath + key + ".ico";
}

var divFilter = $('#bpQry'); //查询区
if (divFilter.length == 0) divFilter = $(".filter");
// if (divFilter.length > 0) {
// if (!btnFilter) btnFilter = 'btn_Filter_'; //默认显示查询区按钮
// btnFilter = $("#" + btnFilter);
// if (btnFilter.length == 0 && !divFilter.hasClass('hidden')) {//如果toobar上显示查询按钮不存在,自动添加
// divFilter.before('<button type="button" id="btn_Filter_"></button>');
// btnFilter = $("#btn_Filter_");
// }
// btnFilter.click(function() { divFilter.slideToggle("slow"); });
// }
if (!imgPath) imgPath = UTIL.getAppRoot() + '/images/';
$(toolbar + " button").each(function (i) {
var key = getButtonKey($(this).attr("id"));
if ($(this).text().indexOf("查看") >= 0)
key = getButtonKey("btn_Search");
var btnItem = getButton(key);

var btnText = $(this).text().replace(/(^\s*)|(\s*$)/g, ""); //默认取button内文本,去空格
if (!btnText) btnText = btnItem.name;
var btnClass = $(this).attr('imgCls'); //在button定义属性imgCls ,设置按钮的图片class
if (!btnClass) btnClass = btnItem.cls;

var btnImg = $('img', this);
if (btnImg.length > 0) {
var btnIcon = $('img', this).attr('src'); //默认取button内图片
if (!btnIcon) btnIcon = getButtonIcon(imgPath, key, $(this).attr("imgType"));
$(this).html("<img align='absMiddle' src='" + btnIcon + "'>" + "<label>" + btnText + "</label>");
} else if ($('div', this).length == 0) {
$(this).html('<div style="float:left;" class="' + btnClass + '"></div><span style="line-height:20px;">' + btnText + '</span>');
}
$(this).width(15 * btnText.length + 24);
$(this).mouseover(function () { $(this).css("color", "blue") }).mouseout(function () { $(this).css("color", "black") });
//$(this).mouseover(function() { $(this).css({"border":"solid 0.5px #768ebf","color":"blue"}).width(15 * btnText.length + 24); }).mouseout(function() { $(this).css({"border":"0px","color":"black"}).width(15 * btnText.length + 24) });
$(this).after(" "); //bugfix for toolbar auto wrap.
});
$(toolbar + " .split").each(function () { $(this).html("<img class='splitImg'/>") });
UTIL.wrapToBottom({ id: 'trv', hbar: 'OUTER' }); //扩展,所有树添加Div垂直滚动控制,水平无滚动
}

///////////////////// ///////////////
function RefreshMainPageGridView(url) {
try {

var ob = window.parent.frames["main"];
if (ob == null)
ob = window.parent.parent.frames["main"];
$("#btn_Search_", ob.document).click();
if (url != null) {
window.location.href = UTIL.getAppRoot() + "/" + url;
}

}
catch (e) {
}
}

var AjaxPad = new function () {
t = null;
source = null;
_url = null;
x = 0;
y = 0;
tr = null;
timer = null;
function show(div, __url, _x, _y, _tr) {
if (tr && tr != _tr && timer) {
clearInterval(timer);
}
source = div;
_url = __url;
x = _x;
y = _y;
tr = _tr;
if (t == null) {
t = new Date();
timer = setInterval('AjaxPad.xSleep()', 3000);
}
};

function xSleep() {
var v = new Date(t.getFullYear(), t.getMonth(), t.getDate(), t.getHours(), t.getMinutes(), t.getSeconds() + 3);

if (v < t) return;
clearInterval(timer);

var sH = document.body.offsetHeight; //窗口的高度
var sW = document.body.scrollWidth; //窗口的宽度

x = 50;
source.style.display = 'block';
source.innerHTML = $.ajax({
url: _url,
async: false
}).responseText;

if (source.offsetHeight >= sH) {
this.y += 10;
}
else if ((y + source.offsetHeight) >= sH) //当鼠标点击时的y坐标的值加上div的高度大于窗口的高度
{
y = sH - source.offsetHeight - 10;
}
else {
y += 10;
}
y = document.body.scrollTop + y; //鼠标Y轴的值
source.style.position = 'absolute';
source.style.left = x + "px";
source.style.top = y + "px";
t = null;
};
return {
show: show,
xSleep: xSleep
}
} ();
//如果formid不为空的话就取formid的值,否则UTIL.getUrlParam("Id");
function GetFormLogs(DivId, Pagesize, OrderbyProperty, FormId) {
// if(OrderbyProperty==null||typeof(OrderbyProperty)=="undefined"){
// OrderbyProperty="OperateOn";
// }
if (Pagesize == null) Pagesize = 5;
var id;
if (FormId == null)
id = UTIL.getUrlParam("Id");
else
id = FormId;
if (id == null) return;
var url = UTIL.getAppRoot() + "/EveryOne/GetFormLogs.ashx?Id=" + id;
if (OrderbyProperty != null) url += "&OrderbyProperty=" + OrderbyProperty;
$.getJSON(url, function (data) {
if (data) {
var table = "<div id='workflow' style='text-align:center; margin:0 auto;clear:both; margin-top:5px;'><table style='margin:auto;' align='center' cellpadding='0' cellspacing='1' class='table' id='flowTable' >";

var tr = "<tr class='header' style='color:#FFFFFF'>"
+ "<th>序号</th><th scope='col'>操作人</th>"
+ "<th scope='col'>意见</th>"
+ "<th scope='col'>处理步骤</th>"
+ "<th scope='col'>操作类型</th>"
+ "<th scope='col'>操作时间</th></tr>";
for (var i = 0; i < data.length; i++) {
if (i % 2 == 0)
tr += "<tr class='normal' style='text-align:center'>";
else
tr += "<tr class='alternate' style='text-align:center'>";
var Rec = data[i].TargetUser;
if (Rec != null)//userId,,@userName,,
{
Rec = Rec.split('@');
Rec = Rec[1];
}
else Rec = "";
var status = data[i].Status;
if (status == null || status == "null") status = " ";
Rec = (data[i].OpRemark == null || data[i].OpRemark == null) ? "" : data[i].OpRemark;
tr += "<td>" + (i + 1) + "</td>";
tr += "<td>" + data[i].OperateBy + "</td>";
tr += "<td title='" + Rec + "'>" + ((Rec.length > 20) ? Rec.substring(0, 20) + "。。" : Rec) + " </td>";
tr += "<td>" + status + " </td>";
tr += "<td>" + data[i].OpType + "</td>";
tr += "<td>" + data[i].RequestArgs + " </td></tr>";
}

var button = "<tr style='background:#a1b8d7;border:0px solid #6F725B;color:#FFFFFF;height:21px;line-height:21px;padding-left:0px;'><td colspan='6'><span style='text-align:left;line-height:21px; padding-left:10px; float:left; width:100px; height:21px;'><button type='button' id='btn_Nextpage'>下一页</button><button type='button' id='btn_Prepage'>上一页</button></span><span style='text-align:right; float:right; width:100px;'><button type='button' id='btn_Grah'>图形日志</button></span></td></tr>";
table += button + tr + "</table></div>";
UTIL.wrapToBottom({ id: 'workflow' });
var i = 1;

var tmpdiv = $("#bpEdit");
if (DivId == null || typeof (DivId) == "undefined") {
if (tmpdiv.length > 0) {
$(tmpdiv).append(table);
}
else
$(document.body).append(table);
}
else
$("#" + DivId).html(table);
tr = $("#flowTable tr");
$("#btn_Prepage").hide();
for (var j = Pagesize + 2; j < tr.length; j++) {
$(tr[j]).hide();
}
if (tr.length <= Pagesize + 2) $("#btn_Nextpage").hide();
var m = 0;
$("#btn_Nextpage").click(function () {
m++;
for (var jj = 2; jj < tr.length; jj++) {
$(tr[jj]).hide();
}
for (var k = m * Pagesize + 2; k < tr.length && k < (m + 1) * Pagesize + 2; k++) {
$(tr[k]).show();
}
if ((m + 1) * Pagesize + 2 >= tr.length) $("#btn_Nextpage").hide();
$("#btn_Prepage").show();

});
$("#btn_Prepage").click(function () {
m--;

for (var jj = 2; jj < tr.length; jj++) {
$(tr[jj]).hide();
}
for (var k = m * Pagesize + 2; k < tr.length && k < (m + 1) * Pagesize + 2; k++) {
$(tr[k]).show();
}
if ((m + 1) * Pagesize + 2 >= tr.length) $("#btn_Prepage").hide();
if (m == 0) {
$("#btn_Nextpage").show();
$("#btn_Prepage").hide();
}
$("#btn_Nextpage").show();

});
$(document.body).css("overflow", "auto");
$("#btn_Grah").click(function () {
var url = UTIL.getAppRoot() + "/ModDev/WorkFlowProgress.aspx?Node=" + UTIL.getUrlParam("Node") + "&FormCode=" + UTIL.getUrlParam("FormCode") + "&FormType=" + UTIL.getUrlParam("FormType") + "&Id=" + id;
window.top.PICKER.offset.max = true;
window.top.PICKER.open(url, null, null, 500, 500);
});
}
});

}
function PrintFormByTempalate(FormCode, FlowRemark, Id, subTable, subTableBookMark) {
var url = UTIL.getAppRoot() + "/CommonPage/PrintFormByDoc.aspx?FormCode=" + FormCode;
if (FlowRemark != null) url += "&FlowRemark=" + FlowRemark;
if (Id == null) Id = UTIL.getUrlParam("Id");
url += "&Id=" + Id;
if (subTable != null) {
url += "&subTable=" + subTable;
if (subTableBookMark != null) {
url += "&subTableBookMark=" + subTableBookMark;
}
else {
alert("子表书签不能为空");
return;
}
}
window.open(url, 'newwindow', 'height=1024, width=1000, top=0, left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no');
}
function addCancelButton() {

if (UTIL.getUrlParam("View") == "TRACK") {
if ($("#txt_FormType_").length > 0 && $("#txt_Id_").length > 0 && $("#txt_Id_").val() != "") {
var buttonList = $(".toolbar button");
var exist = false;
for (var i = 0; i < buttonList.length; i++) {
if ($(buttonList[i]).attr("id").indexOf("Cancel") >= 0) {
exist = true;
break;
}
}
if (!exist) {
var button = "<button type='button' id='btn_Cancel_'></button>";
$(".toolbar").append(button);
$("#btn_Cancel_").click(function () {
var url = window.location.href;
var tmpUrl = UTIL.getAppRoot() + "/EveryOne/CancelBack.ashx";
$.post(tmpUrl, { "Url": url, "Id": UTIL.getUrlParam("Id"), "FormCode": UTIL.getUrlParam("FormCode"), "FormType": UTIL.getUrlParam("FormType") }, function (data) {
alert(data);
if (data == "撤回成功")
PICKER.hide();

});
});
}
}
}
}
function WorkFlowAccept(id, formtype, btnId) {
if (id == typeof ("undefined") || id == null) id = $("#txt_Id_").val();
if (formtype == typeof ("undefined") || formtype == null) {
formtype = $("#txt_FormType_").val();
}
var url = UTIL.getAppRoot();
if (btnId == typeof ("undefined") || btnId == null) btnId = "btn_Accept_E0";
if ($(".IsEndCooparate").val() == "1") {
url += "/ModDev/CooparetRemark.aspx"
}
else {
url += "/ModDev/FlowNodeSelection.aspx";
}
url += "?FormId=" + id;
url += "&FormType=" + formtype;
PICKER.open(url, null, null, 500, 350, 'btn_Accept_E0', function (vId, vName) {
$('#txtTargetFlowNode').val(vId);
$('#txtTargetFlowRemark').val(vName);
var tmpid = '#txt_Remark' + UTIL.getUrlParam('Node') + '_';
var obj = $(tmpid);
if (obj.length > 0) {
var s = $(obj).val();
if (s != "") {
s += "\r\n" + vName;
$(obj).val(s);
}
else $(obj).val(vName);

}
PageOnSubmit = null; //下次直接提交
$("#" + btnId).click();
});
return false;
}
function setDataFormate() {

var obj = $("input");
for (var i = 0; i < obj.length; i++) {
var ob = $(obj[i]).val();
if (ob.IsDate()) {
if (ob.indexOf(" 0:00:00") >= 0) {

ob = ob.substr(0, ob.indexOf(" 0:00:00"));
$(obj[i]).val(ob);
}
}
}

}
String.prototype.IsDate = function () {
var regexp = /^2[0-9]{3}-([1-9]{1}|0[1-9]{1}|1[12]{1})-[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}$/g;
return regexp.test(this);
}
function ShowDialogWindow(url, width, height, SearchId) {
if (typeof (width) == "undefined") {
width = document.body.clientWidth;
height = window.top.document.body.clientHeight;
}
var features = "dialogWidth=" + width + "px;dialogHeight=" + height + "px;help=0;scroll=auto;;status=0;resizable=no";
if (url.indexOf("?") < 0) url += "?tmprad=" + Math.random();
else url += "&tmprad=" + Math.random();
var fresh = window.showModalDialog(url, null, features);
if (!(typeof (SearchId) == "undefined" || SearchId == null)) {
if (fresh && (fresh == "1" || fresh.indexOf(".aspx") > 0)) {
if (fresh.indexOf(".aspx") > 0) {
var url = fresh;
ShowDialogWindow(url, width, height, SearchId);
}
$("#" + SearchId).trigger("click")
}
}
return fresh;

}
function CloseWindow(url) {
;
if ((typeof (url) == "undefined" || url == null)) url = "1";
window.returnValue = url;
window.opener = null;
window.close();
}
function SetTodoView(FormType, IdColumnsIndex, grdv, func) {
var url = UTIL.getAppRoot() + "/EveryOne/userToDo.ashx?FormType=" + FormType;
$.getJSON(url, function (data) {
if (data) {
$("#" + grdv + " .LinkTitle").each(function (j, o) {
var obj = $("td", $(o).parent());
for (var i = 0; i < data.length; i++) {
if (data[i].FormId == obj.eq(IdColumnsIndex).text()) {
$(o).attr("url", data[i].Properties.Url);
break;
}
}
});
}
if (!(func == null || typeof (func) == "undefined")) {
func();
}
});
}
var UserManageCallBack = function (vid, vname) {
}

function BindDrop(value, drp) {
drp = $("#" + drp).get(0);
for (var i = 0; i < drp.options.length; i++) {
if (drp.options[i].value == value) {
return drp.options[i].text;
}
}
return "";
}

function BindDictDrop(value, data,idFieldValue,textFieldValue) {

//alert(drp.combogrid('grid').datagrid.Length);

for (var i = 0; i < data.length; i++) {
if (data[i][idFieldValue] == value) {
return data[i][textFieldValue];
}
}
return "";
}
function SetMenuButtonStatus(buttonId) {
//$(".datagrid-toolbar a").hide();
if (buttonId != null) {
buttonId = buttonId.split(',');
$(".datagrid-toolbar a").each(function (i, o) {
o = $(o);
var id = o.attr("id");
var exists = false;
for (var k = 0; k < buttonId.length; k++) {
var btn = buttonId[k];
if (id == btn) {
exists = true;
break;
}
}
if (!exists) {
o.hide();
}
});
}
else {
$(".datagrid-toolbar a").hide();
}
$("#btn_close").show();
}
jQuery.validator.addMethod("combogrid", function (value, element) {
var obj = $("input", $(element).parent().parent()).eq(0);
var val = $(obj).combogrid('getValue');
if (val == null || val == "") {
return false;
}
else {
return true;
}
});

$.fn.fileUpLoad = function (option) {
var html = "<div id='uploadControl'></div>";
var max_file_size = "5mb";
var files = [];
var errors = [];
var type = 'file';
var filters = { title: "文档", extensions: "zip,doc,docx,xls,xlsx,ppt,pptx" };
var chunk = false;
if (option.filters) {
filters = option.filters;
}
var url = "/upload.ashx";
if (option.url) {
url = option.url;
}
if (option.max_file_size) {
max_file_size = max_file_size;
}
$(this).pluploadQueue($.extend({
runtimes: 'flash,html4,html5',
url: url,
max_file_size: max_file_size,
file_data_name: 'file',
unique_names: true,
filters: [filters],
flash_swf_url: '/Scripts/plupload/plupload.flash.swf',
init: {
FileUploaded: function (uploader, file, response) {
if (response.response) {
var rs = $.parseJSON(response.response);
if (rs.status) {
files.push(file.name);
} else {
errors.push(file.name);
}
}
},
UploadComplete: function (uploader, fs) {
var e = errors.length ? ",失败" + errors.length + "个(" + errors.join("、") + ")。" : "。";
$.messager.alert('操作提示', "上传完成!共" + fs.length + "个。成功" + files.length + e, "info");
if (option.callBack) {
option.callBack();
}
artDialog.close();
}
}
}, (chunk ? { chunk_size: '1mb'} : {})));
}

3.

//保存操作
$("#btn_Save_").click(function () {
if (!$("#form1").validate().form()) {
return;
}
var txt_ExcludeIndustry_ = "";
var row = $("#txt_ExcludeIndustry_").combogrid("grid").datagrid("getSelections");
if (row != null) {

for (var i = 0; i < row.length; i++) {
if (i == 0) {
txt_ExcludeIndustry_ = row[i].Code;
}
else {
txt_ExcludeIndustry_ += ";" + row[i].Code;
}
}
$("#txt_ExcludeIndustry_").val(txt_ExcludeIndustry_);
}
//保存操作页面地址,该方法的参数具体查看/scripts/datagrid.js
JDataGrid.SavePage("/CCR/CcrFilterEdit.aspx?_method=Save", null);
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: