tension 2007-10-11 17:45
多种自动下拉式菜单
脚本说明:
把如下代码加入<body>区域中
<style>
.BODY
{
FONT-SIZE: 9pt;
}
TABLE.datatable
{
CURSOR: default;
BORDER-COLLAPSE: collapse
}
TABLE.datatable THEAD
{
FONT-SIZE: 9pt;
BACKGROUND-COLOR: #e0e0e0;
TEXT-ALIGN: center
}
TABLE.datatable TBODY
{
FONT-SIZE: 9pt
}
TABLE.datatable TFOOT
{
FONT-SIZE: 9pt;
BACKGROUND-COLOR: #e0e0e0;
TEXT-ALIGN: center
}
TABLE.datatable TR.tr1
{
BACKGROUND-COLOR: white
}
TABLE.datatable TR.tr2
{
BACKGROUND-COLOR: whitesmoke
}
TABLE.datatable TR.active_tr
{
BACKGROUND-COLOR: #e0f0ff;
}
TABLE.datatable TR.current_tr
{
BACKGROUND-COLOR: #ffebcd;
}
TABLE.datatable TD.active_cell
{
BACKGROUND-COLOR: #ffffe0;
}
TABLE.dropdowntable
{
BORDER-RIGHT: gray 1px solid;
BORDER-TOP: gray 1px solid;
BORDER-LEFT: gray 1px solid;
CURSOR: default;
BORDER-BOTTOM: gray 1px solid;
BORDER-COLLAPSE: collapse
}
TABLE.dropdowntable THEAD
{
FONT-WEIGHT: bolder;
FONT-SIZE: 9pt;
BACKGROUND-COLOR: #d7ebeb;
TEXT-ALIGN: center
}
TABLE.dropdowntable TBODY
{
FONT-SIZE: 9pt
}
TABLE.dropdowntable TFOOT
{
FONT-SIZE: 9pt;
BACKGROUND-COLOR: #d7ebeb
}
TABLE.dropdowntable TR.tr1
{
BACKGROUND-COLOR: #f0f9ff
}
TABLE.dropdowntable TR.tr2
{
BACKGROUND-COLOR: #e0f0ff
}
TABLE.dropdowntable TR.active_tr
{
BACKGROUND-COLOR: #ffebcd
}
TABLE.dropdowntable TR.current_tr
{
BACKGROUND-COLOR: #ffebcd;
}
.editor
{
FONT-SIZE: 9pt;
BORDER-RIGHT: DarkGray 1px solid;
BORDER-TOP: DarkGray 1px solid;
SCROLLBAR-FACE-COLOR: window;
SCROLLBAR-HIGHLIGHT-COLOR: lightgrey;
BORDER-LEFT: DarkGray 1px solid;
SCROLLBAR-SHADOW-COLOR: gray;
SCROLLBAR-3DLIGHT-COLOR: window;
BORDER-BOTTOM: DarkGray 1px solid;
SCROLLBAR-DARKSHADOW-COLOR: window;
}
.active_editor
{
FONT-SIZE: 9pt;
BORDER-RIGHT: #333333 1px solid;
BORDER-TOP: #333333 1px solid;
SCROLLBAR-FACE-COLOR: #f0f9ff;
SCROLLBAR-HIGHLIGHT-COLOR: lightgrey;
BORDER-LEFT: #333333 1px solid;
SCROLLBAR-SHADOW-COLOR: gray;
SCROLLBAR-3DLIGHT-COLOR: #f0f9ff;
BORDER-BOTTOM: #333333 1px solid;
SCROLLBAR-DARKSHADOW-COLOR: #f0f9ff;
BACKGROUND-COLOR: #e0f0ff;
}
.dockeditor
{
FONT-SIZE: 9pt;
BORDER-RIGHT: #333333 1px solid;
BORDER-TOP: #333333 1px solid;
SCROLLBAR-FACE-COLOR: window;
SCROLLBAR-HIGHLIGHT-COLOR: lightgrey;
BORDER-LEFT: #333333 1px solid;
SCROLLBAR-SHADOW-COLOR: gray;
SCROLLBAR-3DLIGHT-COLOR: window;
BORDER-BOTTOM: #333333 1px solid;
SCROLLBAR-DARKSHADOW-COLOR: window
}
.button
{
BORDER-RIGHT: DarkGray 1px solid;
BORDER-TOP: DarkGray 1px solid;
FONT-SIZE: 9pt;
BORDER-LEFT: DarkGray 1px solid;
CURSOR: hand;
BORDER-BOTTOM: DarkGray 1px solid;
HEIGHT: 22px;
BACKGROUND-COLOR: #d4d0c8;
}
.button_down
{
BORDER-RIGHT: #dddddd 1px solid;
BORDER-TOP: #666666 1px solid;
FONT-SIZE: 9pt;
BORDER-LEFT: #666666 1px solid;
CURSOR: hand;
BORDER-BOTTOM: #dddddd 1px solid;
HEIGHT: 22px;
BACKGROUND-COLOR: #fff1da
}
TABLE.datapilot
{
CURSOR: default;
}
TABLE.datapilot BUTTON
{
CURSOR: hand;
HEIGHT: 20px
}
.editorholder
{
}
.datascrollbar
{
CURSOR: hand;
}
TABLE.tree
{
BORDER-RIGHT: silver 1px solid;
BORDER-TOP: silver 1px solid;
BORDER-LEFT: silver 1px solid;
CURSOR: default;
BORDER-BOTTOM: silver 1px solid;
BORDER-COLLAPSE: collapse
}
TABLE.tree TBODY
{
FONT-SIZE: 9pt
}
TABLE.tree TR.tr1
{
HEIGHT: 20px;
BACKGROUND-COLOR: white
}
TABLE.tree TR.tr2
{
HEIGHT: 20px;
BACKGROUND-COLOR: white
}
TABLE.tree TR.active_tr
{
HEIGHT: 20px;
BACKGROUND-COLOR: #ffebcd
}
TABLE.tree TR.rightclick_tr
{
HEIGHT: 20px;
BACKGROUND-COLOR: #e0f0ff
}
TABLE.tree BUTTON
{
BORDER-RIGHT: gray 1px solid;
BORDER-TOP: gray 1px solid;
MARGIN-BOTTOM: 2px;
BORDER-LEFT: gray 1px solid;
WIDTH: 11px;
CURSOR: hand;
MARGIN-RIGHT: 3px;
BORDER-BOTTOM: gray 1px solid;
HEIGHT: 15px
}
TABLE.tree IMG
{
MARGIN-RIGHT: 2px
}
.fieldlabel
{
font-size:9pt;
}
.datalabel
{
font-size:9pt;
}
.tabpage
{
border-bottom: gray 1px solid;
font-size:9pt;
cursor: default;
}
#CalendarTable
{
BORDER-COLLAPSE: collapse;
BORDER-RIGHT: gray 1px solid;
BORDER-TOP: gray 1px solid;
FONT-SIZE: 9pt;
BORDER-LEFT: gray 1px solid;
BORDER-BOTTOM: gray 1px solid;
CURSOR: default
}
#CalendarTable .calendar_title
{
BACKGROUND-COLOR: #e4e4e4;
}
#CalendarTable .calendar_footer
{
BACKGROUND-COLOR: #e4e4e4;
}
#CalendarTable .calendar_week
{
BACKGROUND-COLOR: #e4e4e4;
}
#CalendarTable .calendar_data
{
BACKGROUND-COLOR: #f0f9ff;
}
.title1
{
HEIGHT: 26;
FONT-WEIGHT: bold;
FONT-SIZE: 10pt;
COLOR: #2f2f2f;
MARGIN-BOTTOM: 4pt;
filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=1, StartColorStr=silver, EndColorStr=white)
}
.title2
{
HEIGHT: 20;
BACKGROUND-COLOR: #d4d0c8;
BORDER-RIGHT: 1px outset;
BORDER-TOP: 1px outset;
MARGIN-BOTTOM: 2px;
BORDER-LEFT: 1px outset;
BORDER-BOTTOM: 1px outset;
BORDER-COLLAPSE: collapse;
FONT-SIZE: 9pt
}
.footer1
{
BACKGROUND-COLOR: white;
MARGIN-BOTTOM: 2pt;
}
DIV
{
SCROLLBAR-FACE-COLOR: Gainsboro;
SCROLLBAR-HIGHLIGHT-COLOR: gray;
SCROLLBAR-SHADOW-COLOR: gray;
SCROLLBAR-3DLIGHT-COLOR: Gainsboro;
SCROLLBAR-DARKSHADOW-COLOR: Gainsboro;
SCROLLBAR-ARROW-COLOR: gray;
}
</style>
<script language="javascript">
<!--
//---- General Setting ----
var xForm_Library_path = "/xform/_xForm_Library/";
var showSubmitCommand = false;
var disableSystemContextMenu = false;
//---- String Table ----
var constErrType = "错误类型";
var constErrDescription = "错误描述";
var constErrUnknown = "未知错误!";
var constErrDataType = "数据超长或类型不匹配!";
var constErrKeyViolence = "主键或外键约束错误!";
var constErrUnsupportBrowse = "由于您使用的不是 Microsoft Internet Explorer 5.0 或更高版本的浏览器,您将无法获得本页面正确的显示结果!\n本页面中使用的 xForm 技术推荐您使用 Microsoft Internet Explorer 5.5 或更高版本的浏览器,以获得最佳的运行效果。";
var constErrDownLoadFailed = "下载数据失败!";
var constErrUpdateFailed = "保存数据失败!";
var constErrAddDataField = "您不能对已完成初始化的记录集添加字段!";
var constErrEmptyFieldName = "字段名不能为空!";
var constErrCantFindMasterField = "主表字段%s不存在!";
var constErrCantFindDetailField = "从表字段%s不存在!";
var constErrLoadPageOnDetailDataset = "已建立主从绑定的从表记录集不能执行分批下载!";
var constErrLoadPageAfterSort = "已进行客户端排序的记录集不能执行分批下载!";
var constErrFieldValueRequired = "字段[%s]的内容不能为空!";
var constErrKeyFieldRequired = "没有定义主键字段!";
var constErrUpdateFieldRequired = "没有可更新的字段!";
var constErrTypeInt = "您输入的值[%s]不是一个有效的整数!";
var constErrTypeNumber = "您输入的值[%s]不是一个有效的数字!";
var constErrTypeDate = "您输入的值[%s]不是一个有效的日期型值!";
var constErrTypeDateTime = "您输入的值[%s]不是一个有效的日期+时间型值!";
var constErrTypeTime = "您输入的值[%s]不是一个有效的时间型值!";
var constErrOutOfDropDownList = "您输入了无效的值!";
var constErrNoCurrentRecord = "由于记录集没有当前记录而无法修改字段值!";
var constDatasetConfirmCancel = "您确定要撤消对当前记录的修改吗?";
var constDatasetConfirmDelete = "您确定要删除当前记录吗?";
var constDatasetMoveFirst = "移动到第一条记录";
var constDatasetPrevPage = "向前翻页";
var constDatasetMovePrev = "移动到上一条记录";
var constDatasetMoveNext = "移动到下一条记录";
var constDatasetNextPage ="向后翻页";
var constDatasetMoveLast = "移动到最后一条记录";
var constDatasetInsertRecord = "插入一条新记录";
var constDatasetAppendRecord = "添加一条新记录";
var constDatasetDeleteRecord = "删除当前记录";
var constDatasetEditRecord = "修改当前记录";
var constDatasetCancelRecord = "撤销对当前记录的修改";
var constDatasetUpdateRecord = "确认对当前记录的修改";
var constBtnInsertRecord = "插入";
var constBtnAppendRecord = "添加";
var constBtnDeleteRecord = "删除";
var constBtnEditRecord = "修改";
var constBtnCancelRecord = "撤销";
var constBtnUpdateRecord = "确认";
var constJanuary = "一月";
var constFebrary = "二月";
var constMarch = "三月";
var constApril = "四月";
var constMay = "五月";
var constJune = "六月";
var constJuly = "七月";
var constAugust = "八月";
var constSeptember = "九月";
var constOctober= "十月";
var constNovember = "十一月";
var constDecember = "十二月";
var constMonday = "一";
var constTuesday = "二";
var constWednesday = "三";
var constThursday = "四";
var constFriday = "五";
var constSaturday = "六";
var constSunday = "日";
var constLastYear = "上一年";
var constNextYear = "下一年";
var constLastMonth = "上个月";
var constNextMonth = "下个月";
var constToday = "今天";
var constDownLoadingData = "正在下载数据...";
var constCancelSort = "不排序";
//-->
//-----------------------
// xForm v2.0
// Developer: bao yilei
// Nov, 2001
//-----------------------
var _rightclick_row=null;
function initTree(tree){
for (var i=1; i<=8; i++){
var tmpDataset=tree.getAttribute("dataset"+i);
if (typeof(tmpDataset)!="undefined") eval("tree.dataset"+i+"="+tmpDataset+";");
}
tree.repeatrow=tree.rows[0].cloneNode(true);
tree.deleteRow(0);
var nodes=new pArray();
nodes.level=1
nodes.tree=tree;
tree.nodes=nodes;
}
function getTreeNodeStyle(row){
if (row.rowIndex % 2)
return "tr1";
else
return "tr2";
}
function refreshTreeNodeColor(row){
var tree=getTableByRow(row);
var selectNode=tree.selectNode;
if (selectNode && selectNode.row==row){
row.className="active_tr";
}
else{
row.className=getTreeNodeStyle(row);
}
}
function refreshTreeColor(tree, startIndex){
var row;
var maxIndex=tree.rows.length-1;
for(var i=startIndex; i<=maxIndex; i++){
row=tree.rows[i];
refreshTreeNodeColor(row);
}
}
function refreshTree(tree){
clearChildTreeNodes(tree);
expandTreeNode(tree);
var nodes=tree.nodes;
setActiveTreeNode(tree, nodes.firstUnit);
}
function refreshTreeNode(node){
var row=node.row;
if (row){
for(var i=0; i<row.cells.length; i++)
refreshElementValue(row.cells[i]);
}
}
function insertTreeNode(tree, parentNode, label, tag, record, mode, node){
function getSlideNext(node){
if (node){
var result=node.nextUnit;
if (!result) result=getSlideNext(node.parentNode);
return result;
}
}
var nodes, level;
if (parentNode){
if (!parentNode.childNodes) parentNode.childNodes=new pArray();
nodes=parentNode.childNodes;
level=parentNode.level;
}
else{
nodes=tree.nodes;
level=0;
}
if (!nodes) return;
var newNode=new Object();
newNode.tree=tree;
newNode.level=level+1;
newNode.parentNode=parentNode;
newNode.label=label;
newNode.tag=tag;
newNode.record=record;
newNode.hasChild=true;
newNode.expanded=false;
var newRow;
if (!parentNode || (parentNode && (parentNode.expanding || parentNode.expanded))){
var _mode, _node;
switch (mode){
case "begin":{
_node=nodes.firstUnit;
if (_node){
_mode="before";
}
else{
_mode="after";
if (node) _node=node.parentNode;
}
break;
}
case "before":{
_node=node;
_mode="before";
break;
}
case "after":{
_node=node.nextUnit;
if (_node){
_mode="before";
}
else{
_node=getSlideNext(node.parentNode);
if (_node){
_mode="before";
}
else{
_mode="end";
}
}
break;
}
default:{
_node=getSlideNext(parentNode);
if (_node){
_mode="before";
}
else{
_mode="end";
}
break;
}
}
if (!_node){
_mode="end";
}
else{
var row=_node.row;
}
newRow=tree.repeatrow.cloneNode(true);
switch (_mode){
case "begin":{
tree.tBodies[0].insertAdjacentElement("afterBegin", newRow);
break;
}
case "before":{
row.insertAdjacentElement("beforeBegin", newRow);
break;
}
case "after":{
row.insertAdjacentElement("afterEnd", newRow);
break;
}
default:{
tree.tBodies[0].insertAdjacentElement("beforeEnd", newRow);
break;
}
}
newRow.cells[0].node=newNode;
newNode.row=newRow;
}
pArray_insert(nodes, mode, node, newNode);
if (parentNode){
parentNode.hasChild=true;
refreshTreeNode(parentNode);
}
if (tree.selectNode==null) setActiveTreeNode(tree, newNode);
var eventName=getElementEventName(tree, "onInitTreeNode");
fireUserEvent(eventName, [tree, newNode]);
refreshTreeNode(newNode);
if (newRow) refreshTreeColor(tree, newRow.rowIndex);
return newNode;
}
function deleteTreeNode(node){
var tree=node.tree;
var nodes;
if (node.parentNode)
nodes=node.parentNode.childNodes;
else
nodes=tree.nodes;
collapseTreeNode(tree, node);
pArray_delete(nodes, node);
if (node.row){
var rowIndex=node.row.rowIndex;
node.row.removeNode(true);
refreshTreeColor(tree, rowIndex);
node.row=null;
}
if (node==tree.rightSelectNode) tree.rightSelectNode=null;
if (node==tree.selectNode) tree.selectNode=null;
if (node.parentNode){
var parentNode=node.parentNode;
parentNode.hasChild=(parentNode.childNodes)?parentNode.childNodes.length:false;
refreshTreeNode(parentNode);
}
}
function _expandTreeNode(node){
var nodes=node.childNodes;
if (!nodes) return;
var tree=node.tree;
var row=node.row;
var _node=nodes.firstUnit;
while (_node){
var newRow=tree.repeatrow.cloneNode(true);
row.insertAdjacentElement("afterEnd", newRow);
newRow.cells[0].node=_node;
_node.row=newRow;
refreshTreeNode(_node);
row=newRow;
_node=_node.nextUnit;
}
_node=nodes.firstUnit;
while (_node){
if (_node.expanded) _expandTreeNode(_node);
_node=_node.nextUnit;
}
}
function expandTreeNode(tree, node){
try{
if (node){
if (node.expanded) return;
var eventName=getElementEventName(tree, "beforeExpandNode");
var event_result=fireUserEvent(eventName, [tree, node]);
if (event_result) throw event_result;
node.expanding=true;
}
if (node && node.childNodes){
_expandTreeNode(node);
}
else{
var level=(node)?node.level:0;
eval("var child_dataset=tree.getAttribute(\"dataset"+(level+1)+"\");");
if (child_dataset){
if (level>0){
eval("var dataset=tree.getAttribute(\"dataset"+level+"\");");
if (dataset) dataset.setRecord(node.record);
}
var record=child_dataset.getFirstRecord();
while (record){
insertTreeNode(tree, node, record[0], null, record);
record=record.getNextRecord();
}
}
}
var eventName=getElementEventName(tree, "afterExpandNode");
fireUserEvent(eventName, [tree, node]);
if (node){
node.expanded=true;
node.hasChild=(node.childNodes)?node.childNodes.length:false;
refreshTreeColor(node.tree, node.row.rowIndex);
refreshTreeNode(node);
}
}
catch (e){
processException(e);
}
finally{
if (node) node.expanding=false;
}
}
function _collapseTreeNode(node){
if (!node.childNodes) return;
var _node=node.childNodes.firstUnit;
while (_node){
if (_node==_node.tree.selectNode){
_node.tree.selectNode=null;
setActiveTreeNode(_node.tree, _node.tree.nodes.firstUnit);
}
_collapseTreeNode(_node);
if (_node.row) _node.row.removeNode(true);
_node=_node.nextUnit;
}
}
function collapseTreeNode(tree, node){
try{
if (!node) return;
if (!node.expanded) return;
var eventName=getElementEventName(tree, "beforeCollapseNode");
var event_result=fireUserEvent(eventName, [tree, node]);
if (event_result) throw event_result;
_collapseTreeNode(node);
var eventName=getElementEventName(tree, "beforeCollapseNode");
fireUserEvent(eventName, [tree, node]);
node.expanded=false;
refreshTreeColor(node.tree, node.row.rowIndex);
refreshTreeNode(node);
}
catch (e){
processException(e);
}
}
function clearChildTreeNodes(tree, node){
function deleteNodes(nodes){
var unit=nodes.firstUnit;
var _unit;
while (unit){
_unit=unit;
unit=unit.nextUnit;
deleteTreeNode(_unit);
}
}
if (node){
if (node.childNodes){
deleteNodes(node.childNodes);
delete(node.childNodes);
}
}
else{
var nodes=tree.nodes;
if (nodes)
{
deleteNodes(nodes);
}
}
}
function TreeNodeClick(tree, node){
if (node && node.expanded){
collapseTreeNode(tree, node);
}
else{
expandTreeNode(tree, node);
}
}
function setActiveTreeNode(tree, node){
var old_node=tree.selectNode;
var old_row, row;
if (old_node) old_row=old_node.row;
if (node) row=node.row;
if (old_row!=row){
tree.selectNode=node;
if (old_row) refreshTreeNodeColor(old_row);
if (row) refreshTreeNodeColor(row);
clearTimeout(tree.timeout_id);
_stored_element=[tree, node];
var eventName=getElementEventName(tree, "onNodeChanged");
if (isUserEventDefined(eventName))
tree.timeout_id=setTimeout("fireUserEvent("+eventName+", _stored_element);", 400);
}
}
function resetRightClickRow(){
try{
if (_rightclick_row) refreshTreeNodeColor(_rightclick_row);
}
catch (e){
//do nothing
}
finally{
_rightclick_row=null;
}
}
function _tree_expendclick(button){
var cell=button.treenode;
var row=getRowByCell(cell);
var node=row.cells[0].node;
var tree=getTableByRow(row);
TreeNodeClick(tree, node);
event.cancelBubble=true;
}
function _tree_onmousedown(row){
if (event.srcElement.id=="_button_expand") return;
var tree=getTableByRow(row);
var selectNode=tree.selectNode;
var node=row.cells[0].node;
if (event.button==2){
if (isTrue(tree.getAttribute("rightSelect"))){
tree.rightSelectNode=node;
row.className="rightclick_tr";
try{
if (_rightclick_row) refreshTreeNodeColor(_rightclick_row);
}
catch (e){
//do nothing
}
_rightclick_row=row;
setTimeout("resetRightClickRow()", 1000);
}
else
setActiveTreeNode(tree, node);
}
else{
setActiveTreeNode(tree, node);
}
}
function processTreeKeyDown(tree, keycode){
function getCurrentNode(){
var node=tree.selectNode;
if (!node){
var nodes=tree.nodes;
node=nodes.firstUnit;
}
return node;
}
switch (keycode){
//Left
case 37:{
var node=getCurrentNode();
if (node && node.hasChild && node.expanded){
TreeNodeClick(tree, node);
}
break;
}
//Up
case 38:{
var node=getCurrentNode();
var rowIndex=node.row.rowIndex;
if (rowIndex>0){
setActiveTreeNode(tree, tree.rows[rowIndex-1].cells[0].node);
}
break;
}
//Right
case 39:{
var node=getCurrentNode();
if (node && node.hasChild && !node.expanded){
TreeNodeClick(tree, node);
}
break;
}
//Down
case 40:{
var node=getCurrentNode();
var rowIndex=node.row.rowIndex;
if (rowIndex+1<tree.rows.length){
setActiveTreeNode(tree, tree.rows[rowIndex+1].cells[0].node);
}
break;
}
}
}
function _tree_onkeydown(tree){
processTreeKeyDown(tree, event.keyCode);
}
//-----------------------
// xForm v2.0
// Developer: bao yilei
// Nov, 2001
//-----------------------
var _activeElement=null;
var _activeEditor=null;
var _activeTable=null;
var _dropdown_window=null;
var _app_id="", _page_id="";
var _document_loading=false;
var _stored_element=null;
var _array_dataset=new Array();
var _tabpage_list=new Array();
var _skip_activeChanged=false;
function getIEVersion(){
var index=window.clientInformation.userAgent.indexOf("MSIE");
if (index<0){
return "";
}
else{
return window.clientInformation.userAgent.substring(index+5, index+8);
}
}
function getRowByCell(cell){
return cell.parentElement;
}
function getTableByCell(cell){
var tbody=getRowByCell(cell).parentElement;
if (tbody) return tbody.parentElement;
}
function getTableByRow(row){
var tbody=row.parentElement;
if (tbody) return tbody.parentElement;
}
function getElementEventName(element, eventName){
var result="";
if (element.attrib!="dockeditor")
result=element.id+"_"+eventName;
else{
var holder=element.editorHolder;
if (holder) result=holder.id+"_"+eventName;
}
return result;
}
function isUserEventDefined(function_name){
if (function_name=="") return false;
var result;
eval("result=(typeof("+function_name+")!=\"undefined\");");
return result;
}
function fireUserEvent(function_name, param){
var result;
var paramstr="";
for(i=0; i<param.length; i++){
if (i==0)
paramstr="param["+i+"]";
else
paramstr=paramstr+",param["+i+"]";
}
if (isUserEventDefined(function_name))
eval("result="+function_name+"("+paramstr+");");
return result;
}
function processActiveElementChanged(activeElement){
function isChildofTable(obj) {
var result=null;
var tmpObj;
if (obj.getAttribute("attrib")=="dockeditor")
tmpObj=obj.editorHolder;
else
tmpObj=obj;
if (tmpObj.getAttribute("attrib")=="tablecell") result=getTableByCell(tmpObj);
return result;
}
function set_activeEditor(editor){
if (_activeEditor!=editor){
if (_activeEditor){
if (needUpdateEditor){
if (_activeEditor.window==window)
updateEditorInput(_activeEditor);
else
_activeEditor.window.updateEditorInput(_activeEditor);
}
if (typeof(hideDropDownBtn)!="undefined") hideDropDownBtn();
switch (_activeEditor.getAttribute("attrib")){
case "editor":{
_activeEditor.className="editor";
break;
}
case "dockeditor":{
hideDockEditor(_activeEditor);
break;
}
}
_activeEditor.use_keyField=false;
refreshElementValue(_activeEditor);
}
if (editor && !editor.readOnly){
var field=getElementField(editor);
if (editor.getAttribute("attrib")=="editor"){
editor.className="active_editor";
if (field){
editor.dataType=field.dataType;
editor.editorType=field.editorType;
}
}
if (field) editor.maxLength=(field.size>0)?field.size:2147483647;
if (editor.getAttribute("dataType")=="date" || editor.getAttribute("dataType")=="datetime")
editor.dropDown_mode="date";
editor.contentEditable=(!isTrue(editor.getAttribute("dropDown_fixed")));
editor.use_keyField=true;
refreshElementValue(editor);
if (!isTrue(editor.getAttribute("dropDown_fixed")) && !compareText(editor.type, "checkbox")) editor.select();
if (typeof(showDropDownBtn)!="undefined"){
showDropDownBtn(editor);
if (isTrue(editor.getAttribute("autoDropDown"))){ showDropDownBox(editor);}
}
}
_activeEditor=editor;
}
}
function processElementBlur(){
var doblur=(activeElement!=_activeEditor);
if (_activeElement){
if (typeof(_dropdown_btn)!="undefined" && _dropdown_btn){
doblur=doblur && (_activeElement!=_dropdown_btn) &&
(activeElement!=_dropdown_btn);
}
if (typeof(_dropdown_box)!="undefined" && _dropdown_box){
var editor=_dropdown_box.editor;
doblur=doblur && (activeElement!=editor) &&
(!isChild(activeElement, _dropdown_box));
}
if (doblur){
if (_activeEditor && _activeEditor.dropDown_visible){
if (typeof(hideDropDownBox)!="undefined") hideDropDownBox();
hideStatusLabel(window);
}
set_activeEditor(null);
}
}
else{
doblur=false;
}
if (activeElement==document.body && _skip_activeChanged){
_skip_activeChanged=false;
return;
}
if ((doblur || !_activeEditor)){
var activeTable=isChildofTable(activeElement);
if (_activeTable!=activeTable){
if (_activeTable){
_activeTable.focused=false;
var row=_activeTable.activeRow;
if (row) refreshTableRowStyle(row);
var eventName=getElementEventName(_activeTable, "onBlur");
fireUserEvent(eventName, [_activeTable]);
}
_activeTable=activeTable;
if (_activeTable){
_activeTable.focused=true;
var row=_activeTable.activeRow;
if (row) refreshTableRowStyle(row);
var eventName=getElementEventName(_activeTable, "onFocus");
fireUserEvent(eventName, [_activeTable]);
}
}
}
}
try{
if (window.closed) return;
if (activeElement==_activeElement) return;
if (activeElement){
processElementBlur();
switch (activeElement.getAttribute("attrib")){
case "tablecell":{
var row=getRowByCell(activeElement);
var table=getTableByRow(row);
var dataset=getElementDataset(activeElement);
table._activeCell=activeElement;
table._activeCellIndex=activeElement.cellIndex;
if (row.record){
if (dataset.window==window)
_dataset_setRecord(dataset, row.record);
else
dataset.window._dataset_setRecord(dataset, row.record);
}
setActiveTableCell(row, activeElement.cellIndex);
break;
}
case "editor":;
case "dockeditor":{
set_activeEditor(activeElement);
break;
}
}
}
_activeElement=activeElement;
}
catch(e){
processException(e);
}
}
function _document_onpropertychange() {
if (event.propertyName=="activeElement")
processActiveElementChanged(document.activeElement);
}
function _document_onkeydown(){
switch (event.keyCode){
case 123:{
if (_app_id && _page_id){
showModalDialog(xForm_Library_path+"tool/property.asp?app_id="+_app_id+"&page_id="+_page_id+"&modal_mode=1", document,
"dialogHeight: 440px; dialogWidth: 600px; center: Yes; help: No; resizable: Yes; status: No");
}
break;
}
}
}
function _document_oncontextmenu(){
event.returnValue=(!disableSystemContextMenu);
if (typeof(_array_menu)=="undefined") return;
for(var i=0; i<_array_menu.length; i++){
var strHolders=_array_menu[i].popupHolders;
if (getValidStr(strHolders)!=""){
var arrayHolder=strHolders.split(",");
for(var j=0; j<arrayHolder.length; j++){
if (arrayHolder[j]=="") continue;
var needPopup;
eval("needPopup=isChild(event.srcElement,"+arrayHolder[j]+")");
if (needPopup){
showPopupMenu(_array_menu[i]);
event.returnValue=false;
return;
}
}
}
}
}
function _control_onkeydown() {
function getCell(element){
if (element.getAttribute("attrib")=="tablecell")
return element;
else if (element.in_table)
return element.editorHolder;
}
function processTab(element){
var obj=null;
if (element.in_table){
obj=element.editorHolder;
}
else{
obj=element;
}
if (!obj) return;
if (event.shiftKey)
obj=getPriorTabElement(obj);
else
obj=getNextTabElement(obj);
if (obj){
try{
obj.focus();
event.returnValue=false;
}
catch(e){
event.returnValue=true;
}
}
}
element=event.srcElement;
if (isDropdownBoxVisible()){
if (_dropdown_window) _dropdown_window.processDropDownKeyDown(event.keyCode);
event.returnValue=true;
}
else{
var rowindex, colindex;
switch (event.keyCode) {
//Tab
case 9:{
processTab(element);
break;
}
//Enter
case 13:{
if (!compareText(element.tagName, "textarea") || event.shiftKey || event.ctrlKey || event.altKey){
var cell=getCell(element);
if (cell && !event.shiftKey){
var row=getRowByCell(cell);
var table=getTableByRow(row);
var maxIndex=checkTableCellIndex(table, 9999, 9999);
if (row.rowIndex==maxIndex[0] && cell.cellIndex==maxIndex[1] && !isTrue(table.getAttribute("readOnly"))){
var dataset=getElementDataset(element);
dataset.insertRecord("end");
dataset.modified=false;
setActiveTableCell(table.activeRow, 0);
}
else
processTab(element);
}
}
break;
}
//ESC
case 27:{
if (!element.modified){
var dataset=getElementDataset(element);
if (!dataset || dataset.state=="none") break;
var cell=getCell(element);
if (cell && !isTrue(getTableByCell(cell).getAttribute("readOnly"))){
if (isTrue(getTableByCell(cell).getAttribute("confirmCancel"))){
if (confirm(constDatasetConfirmCancel)){
dataset.cancelRecord();
}
}
else{
dataset.cancelRecord();
}
}
}
else{
setElementValue(element, element.old_value);
}
event.returnValue=false;
break;
}
//Left
case 37:{
var cell=getCell(element);
if (cell){
if ((event.ctrlKey) || (event.altKey)){
var table=getTableByCell(cell);
var rowIndex=getRowByCell(cell).rowIndex;
var cellIndex=cell.cellIndex;
cellIndex--;
setFocusTableCell(table, rowIndex, cellIndex);
event.returnValue=false;
}
}
break;
}
//Up
case 38:{
var cell=getCell(element);
if (cell){
var dataset=getElementDataset(element);
if (dataset){
dataset.movePrev();
event.returnValue=false;
}
}
else{
switch (element.getAttribute("dropDown_mode")){
case "staticlist":{
var fieldName=(element.getAttribute("dropDown_mapValue"))?"name":"value";
var tempDataset=getDropDownItems(element);
var record=tempDataset.locate(fieldName, element.value);
if (record){
tempDataset.setRecord(record);
tempDataset.movePrev();
}
processDropDownSelected(element, tempDataset.record, true);
event.returnValue=false;
break;
}
case "dataset":{
var tempDataset=element.getAttribute("dropDown_dataset");
if (typeof(tempDataset)=="string") tempDataset=getDatasetByID(tempDataset);
if (tempDataset) tempDataset.movePrev();
processDropDownSelected(element, tempDataset.record, true);
event.returnValue=false;
break;
}
}
}
break;
}
//Right
case 39:{
var cell=getCell(element);
if (cell){
if ((event.ctrlKey) || (event.altKey)){
var table=getTableByCell(cell);
var rowIndex=getRowByCell(cell).rowIndex;
var cellIndex=cell.cellIndex;
cellIndex++;
setFocusTableCell(table, rowIndex, cellIndex);
event.returnValue=false;
}
}
break;
}
//Down
case 40:{
if (event.altKey){
showDropDownBox(element);
}
else{
var cell=getCell(element);
if (cell){
var table=getTableByCell(cell);
var dataset=getElementDataset(element);
if (dataset){
dataset.moveNext();
if (dataset.eof && !isTrue(table.getAttribute("readOnly")) && !isTrue(dataset.readOnly)){
dataset.insertRecord("end");
dataset.modified=false;
}
event.returnValue=false;
}
}
else{
switch (element.getAttribute("dropDown_mode")){
case "staticlist":{
var fieldName=(element.getAttribute("dropDown_mapValue"))?"name":"value";
var tempDataset=getDropDownItems(element);
var record=tempDataset.locate(fieldName, element.value);
if (record){
tempDataset.setRecord(record);
tempDataset.moveNext();
}
processDropDownSelected(element, tempDataset.record, true);
event.returnValue=false;
break;
}
case "dataset":{
var tempDataset=element.getAttribute("dropDown_dataset");
if (typeof(tempDataset)=="string") tempDataset=getDatasetByID(tempDataset);
if (tempDataset) tempDataset.moveNext();
processDropDownSelected(element, tempDataset.record, true);
event.returnValue=false;
break;
}
}
}
}
break;
}
//Insert
case 45:{
var cell=getCell(element);
if (cell && !isTrue(getTableByCell(cell).getAttribute("readOnly"))){
var dataset=getElementDataset(element);
if (!isTrue(dataset.readOnly)){
dataset.insertRecord("before");
dataset.modified=false;
}
}
break;
}
//Delete
case 46:{
var cell=getCell(element);
if (cell && !isTrue(getTableByCell(cell).getAttribute("readOnly"))){
if (event.ctrlKey){
if (isTrue(getTableByCell(cell).getAttribute("confirmDelete"))){
var dataset=getElementDataset(element);
if (!isTrue(dataset.readOnly) && confirm(constDatasetConfirmDelete)){
dataset.deleteRecord();
}
}
else{
var dataset=getElementDataset(element);
dataset.deleteRecord();
}
event.returnValue=false;
}
}
break;
}
//F2
case 113:;
//F7
case 118:{
showDropDownBox(element);
break;
}
}
}
}
function getAbsPosition(obj, offsetObj){
var _offsetObj=(offsetObj)?offsetObj:document.body;
var x=obj.offsetLeft;
var y=obj.offsetTop;
var tmpObj=obj.offsetParent;
while ((tmpObj!=_offsetObj) && tmpObj){
x+=tmpObj.offsetLeft+tmpObj.clientLeft-tmpObj.scrollLeft;
y+=tmpObj.offsetTop+tmpObj.clientTop-tmpObj.scrollTop;
tmpObj=tmpObj.offsetParent;
}
return ([x, y]);
}
function isChild(obj, parentObj) {
var tmpObj=obj;
var result=false;
if (parentObj) {
while (tmpObj) {
if (tmpObj==parentObj){
result=true;
break;
}
tmpObj=tmpObj.parentElement;
}
}
return result;
}
function disableDocument(window){
if (typeof(_over_label)=="undefined"){
document.body.insertAdjacentHTML("beforeEnd", "<div id=_over_label language=javascript"+
" style=\"position: absolute; background-color: black; left:0; top:0; z-index: 9999; filter:alpha(opacity=30)\"></div>");
}
document.body._documentDisabled=true;
_over_label.style.width=document.body.clientWidth + document.body.scrollLeft;
_over_label.style.height=document.body.clientHeight + document.body.scrollTop;
_over_label.style.visibility="visible";
}
function enableDocument(window){
_over_label.style.visibility="hidden";
document.body._documentDisabled=false;
}
function isDocumentEnable(){
return (!isTrue(document.body._documentDisabled));
}
function initElementDataset(element){
var dataset=element.getAttribute("dataset");
if (dataset) setElementDataset(element, dataset);
}
function initElement(element){
var initChildren=true;
var _attrib=element.getAttribute("attrib");
if (_attrib){
switch (_attrib){
case "fieldlabel":{
if (!element.className) element.className=_attrib;
var dataset;
var _dataset=element.getAttribute("dataset");
if (typeof(_dataset)=="string"){
dataset=getDatasetByID(_dataset);
}
else{
dataset=_dataset;
}
element.dataset=dataset;
refreshElementValue(element);
break;
}
case "columnheader":{
if (!element.className) element.className=_attrib;
element.noWrap=true;
element.onclick=_table_head_onclick;
element.onmouseover=_table_head_onmouseover;
element.onmouseout=_table_head_onmouseout;
refreshElementValue(element);
break;
}
case "columnfooter":{
if (!element.className) element.className=_attrib;
refreshElementValue(element);
break;
}
case "datalabel":{
if (!element.className) element.className=_attrib;
initElementDataset(element);
break;
}
case "editor":;
case "dockeditor":{
if (!element.className) element.className=_attrib;
if (getValidStr(element.getAttribute("dropdown_cached"))=="" && getIEVersion()>"5.0")
element.dropdown_cached=true;
initElementDataset(element);
with (element){
if (tagName.toLowerCase()=="input" && compareText(type, "checkbox")){
style.borderColor="window";
onclick=_checkbox_onclick;
}
language="javascript";
onkeydown=_control_onkeydown;
onkeypress=_editor_onkeypress;
onpropertychange=_editor_onpropertychange;