/* Copyright Scand LLC http://www.scbr.com This version of Software is free for using in non-commercial applications. For commercial use please contact info@scbr.com to obtain license */ var globalActiveDHTMLGridObject; String.prototype._dhx_trim = function(){ return this.replace(/ /g," ").replace(/(^[ \t]*)|([ \t]*$)/g,""); } Array.prototype._dhx_find = function(pattern){ for(var i=0;i=ind;i--){ this[i] = this[i-1] } this[ind] = value } Array.prototype._dhx_removeAt = function(ind){ for(var i=ind;ithis.objBox.scrollHeight){ if(this._xml_ready && this.addRowsFromBuffer()) this.objBox.scrollTop = this.objBox.scrollHeight -(this.hdrSizeA+1+this.objBox.offsetHeight) } } this.attachToObject = function(obj){ obj.appendChild(this.entBox) } this.init = function(fl){ this.editStop() this.lastClicked = null; this.resized = null; this.fldSorted = null; this.gridWidth = 0; this.gridHeight = 0; this.cellWidthPX = new Array(0); this.cellWidthPC = new Array(0); if(this.hdr.rows.length>0){ this.clearAll(); this.hdr.rows[0].removeNode(true); } if(this.cellType._dhx_find("tree")!=-1){ this.loadedKidsHash = new Hashtable(); this.loadedKidsHash.put("hashOfParents",new Hashtable()) } var hdrRow = this.hdr.insertRow(0); for(var i=0;ithis.objBox.offsetHeight)gridWidth-=(this._scrFix||(_isFF?19:16)); var len = this.hdr.rows[0].cells.length for(var i=0;ithis.objBox.offsetHeight)gridWidth-=(this._scrFix||(_isFF?19:16)); if(fcolW>10){ el.style.width = fcolW+"px"; if(this.rowsCol.length>0) this.rowsCol[this.rowsCol._dhx_find(this.obj.rows[0])].cells[el._cellIndex].style.width = fcolW+"px"; if(this.cellWidthType=='px'){ this.cellWidthPX[el._cellIndex]=fcolW; }else{ var pcWidth = Math.round(fcolW/gridWidth*100) this.cellWidthPC[el._cellIndex]=pcWidth; } this.doOnScroll() } this.objBuf.childNodes[0].style.width = ""; } this.setSortImgPos = function(ind){ if(!ind) var el = this.fldSorted; else var el = this.hdr.cells[ind]; if(el!=null){ var pos = this.getPosition(el,this.hdrBox) var wdth = el.offsetWidth; this.sortImg.style.left = Number(pos[0]+wdth-13)+"px"; this.sortImg.defLeft = parseInt(this.sortImg.style.left) this.sortImg.style.top = Number(pos[1]+5)+"px"; this.sortImg.style.display = "inline"; this.sortImg.style.left = this.sortImg.defLeft+"px"; } } this.parseXML = function(xml,startIndex){ this._xml_ready=true; var pid=null; var zpid=null; if(!xml) try{ var xmlDoc = eval(this.entBox.id+"_xml").XMLDocument; }catch(er){ var xmlDoc = this.loadXML(this.xmlFileUrl) } else{ if(typeof(xml)=="object"){ var xmlDoc = xml; }else{ if(xml.indexOf(".")!=-1){ if(this.xmlFileUrl=="") this.xmlFileUrl = xml var xmlDoc = this.loadXML(xml) return; }else var xmlDoc = eval(xml).XMLDocument; } } var rowsCol = this.xmlLoader.doXPath("//rows/row",xmlDoc); if(rowsCol.length==0){ this.recordsNoMore = true; var pid=0; } else{ pid=(rowsCol[0].parentNode.getAttribute("parent")||"0"); zpid=this.getRowById(pid); if(zpid)zpid._xml_await=false; else pid=0; startIndex=this.getRowIndex(pid)+1; } var ar = new Array(); var idAr = new Array(); var gudCol = this.xmlLoader.doXPath("//rows/userdata",xmlDoc); if(gudCol.length>0){ this.UserData["gridglobaluserdata"] = new Hashtable(); for(var j=0;j0){ this.UserData[rId] = new Hashtable(); for(var j=0;jlcRowIndex){ var strt = lcRowIndex; var end = elRowIndex; }else{ var strt = elRowIndex; var end = lcRowIndex; } this.clearSelection(); for(var i=0;i=strt && i<=end){ this.rowsCol[i].className+=" rowselected"; this.selectedRows[this.selectedRows.length] = this.rowsCol[i] } } }else if(selMethod==2){ if(el.parentNode.className.indexOf("rowselected")!= -1){ el.parentNode.className=el.parentNode.className.replace("rowselected",""); this.selectedRows._dhx_removeAt(this.selectedRows._dhx_find(el.parentNode)) var skipRowSelection = true; } } this.editStop() this.cell = el; if(this.row != el.parentNode){ this.row = el.parentNode; if(fl) if(typeof(this.onRowSelect)=="string") setTimeout(this.onRowSelect+"('"+this.row.idd+"',false);",100) else{ var rid = this.row.idd var func = this.onRowSelect setTimeout(function(){func(rid,false);},100) } } if(!skipRowSelection){ this.row.className+= " rowselected" if(this.selectedRows._dhx_find(this.row)==-1) this.selectedRows[this.selectedRows.length] = this.row; } if(this.selBasedOn=="cell"){ if(this.cell.parentNode.className.indexOf("rowselected")!=-1) this.cell.className = "cellselected" } if(selMethod!=1) this.lastClicked = el.parentNode; } this.isActive = true; this.moveToVisible(this.cell) } this.selectCell = function(r,cInd,fl,preserve){ if(!fl) fl = false; if(typeof(r)!="object") r = this.rowsCol[r] var c = r.childNodes[cInd]; if(preserve) this.doClick(c,fl,2) else this.doClick(c,fl) } this.moveToVisible = function(cell_obj){ try{ var distance = cell_obj.offsetLeft+cell_obj.offsetWidth+20; if(distance>(this.objBox.offsetWidth+this.objBox.scrollLeft)){ var scrollLeft = distance - this.objBox.offsetWidth; }else if(cell_obj.offsetLeft(this.objBox.offsetHeight+this.objBox.scrollTop)){ var scrollTop = distance - this.objBox.offsetHeight; }else if(cell_obj.offsetTop(new Date).valueOf())return; this._Opera_stop=null; } if(this.editor && this.editor!=null){ this.cell.className=this.cell.className.replace("editable",""); this.cell.wasChanged = this.editor.detach(); if(typeof(this.onEditCell)=="string") eval(this.onEditCell+"(2,'"+this.row.idd+"',"+this.cell._cellIndex+");") else this.onEditCell(2,this.row.idd,this.cell._cellIndex); } this.editor=null; } this.doKey = function(ev){ if(!ev)return true; if((globalActiveDHTMLGridObject)&&(this!=globalActiveDHTMLGridObject)) return globalActiveDHTMLGridObject.doKey(ev); if(this.isActive==false){ return false; } try{ var type = this.cellType[this.cell._cellIndex] if(ev.keyCode==13 &&(ev.ctrlKey || ev.shiftKey)){ var rowInd = this.rowsCol._dhx_find(this.row) if(window.event.ctrlKey && rowInd!=this.rowsCol.length-1){ if(this.row.rowIndex==this.obj.rows.length-1 && this.dynScroll && this.dynScroll!='false') this.doDynScroll("dn") this.selectCell(this.rowsCol[rowInd+1],this.cell._cellIndex,true); }else if(ev.shiftKey && rowInd!=0){ if(this.row.rowIndex==0 && this.dynScroll && this.dynScroll!='false') this.doDynScroll("up") this.selectCell(this.rowsCol[rowInd-1],this.cell._cellIndex,true); } isIE()?ev.returnValue=false:ev.preventDefault(); } if(ev.keyCode==13 && !ev.ctrlKey && !ev.shiftKey){ this.editStop(); if(typeof(this.onEnter)=="string") eval("window."+this.onEnter+"('"+this.row.idd+"',"+this.cell._cellIndex+")") else this.onEnter(this.row.idd,this.cell._cellIndex); isIE()?ev.returnValue=false:ev.preventDefault(); } if(ev.keyCode==9 && !ev.shiftKey){ this.editStop(); var aind=this.cell._cellIndex+1; var arow=this.row; if(aind==this.row.childNodes.length){ aind=0; arow=this.rowsCol[this.rowsCol._dhx_find(this.row)+1]; if(!arow){ aind=this.row.childNodes.length-1; return true;} } this.selectCell(arow||this.row,aind); this.editCell() _isIE?ev.returnValue=false:ev.preventDefault(); }else if(ev.keyCode==9 && ev.shiftKey){ this.editStop(); var aind=this.cell._cellIndex-1; var arow=this.row; if(aind<0) { aind=this.row.childNodes.length-1; arow=this.rowsCol[this.rowsCol._dhx_find(this.row)-1]; if(!arow){aind=0; return true;} } this.selectCell(arow||this.row,aind); this.editCell() _isIE?ev.returnValue=false:ev.preventDefault(); } if(ev.keyCode==40 || ev.keyCode==38){ if(this.editor && this.editor.combo){ if(ev.keyCode==40)this.editor.shiftNext(); if(ev.keyCode==38)this.editor.shiftPrev(); return true; } else{ var rowInd = this.row.rowIndex; if(ev.keyCode==38 && rowInd!=0){ if(this.row.rowIndex==0 && this.dynScroll && this.dynScroll!='false') this.doDynScroll("up") this.selectCell(this.obj.rows[rowInd-1],this.cell._cellIndex,true); }else if(ev.keyCode==40 && rowInd!=this.rowsCol.length-1){ if(this.row.rowIndex==this.obj.rows.length-1 && this.dynScroll && this.dynScroll!='false') this.doDynScroll("dn") this.selectCell(this.obj.rows[rowInd+1],this.cell._cellIndex,true); } } isIE()?ev.returnValue=false:ev.preventDefault(); } if(ev.keyCode==113){ this.editCell(); return false; } if(ev.keyCode==32){ var c = this.cell eval("var ed = new eXcell_"+this.cellType[c._cellIndex]+"(c)"); if(ed.changeState()!=false) isIE()?ev.returnValue=false:ev.preventDefault(); } if(ev.keyCode==27 && this.oe!=false){ this.editStop(); isIE()?ev.returnValue=false:ev.preventDefault(); } if(ev.keyCode==33 || ev.keyCode==34){ if(ev.keyCode==33) this.doDynScroll("up") else this.doDynScroll("dn") isIE()?ev.returnValue=false:ev.preventDefault(); } if(!this.editor) { if(ev.keyCode==37 && this.cellType._dhx_find("tree")!=-1){ this.collapseKids(this.row) isIE()?ev.returnValue=false:ev.preventDefault(); } if(ev.keyCode==39 && this.cellType._dhx_find("tree")!=-1){ this.expandKids(this.row) isIE()?ev.returnValue=false:ev.preventDefault(); } } return true; }catch(er){return true;} } this.getRow = function(cell){ if(!cell) cell = window.event.srcElement; if(cell.tagName!='TD') cell = cell.parentElement; r = cell.parentElement; if(this.cellType[cell._cellIndex]=='lk') eval(this.onLink+"('"+this.getRowId(r.rowIndex)+"',"+cell._cellIndex+")"); this.selectCell(r,cell._cellIndex,true) } this.selectRow = function(r,fl,preserve){ if(typeof(r)!='object') r = this.rowsCol[r] this.selectCell(r,0,fl,preserve) }; this.sortRows = function(col,type,order){ if(this.cellType._dhx_find("tree")!=-1){ return this.sortTreeRows(col,type,order) } if(type=='str'){ this.rowsCol.sort(function(a,b){ var cA = a.childNodes[col] var cB = b.childNodes[col] var type = a.grid.cellType[col]; eval("var edA = new eXcell_"+type+"(cA)") eval("var edB = new eXcell_"+type+"(cB)") if(order=="asc") return edA.getValue()>edB.getValue()?1:-1 else return edA.getValue()=0;i--){ var node = tmpAr[i] if(!this.deleteRow(node.idd,node)){ this.selectedRows[this.selectedRows.length] = node; }else{ if(node==this.row){ var ind = i; } } } if(ind){ try{ if(ind+1>this.rowsCol.length) ind--; this.selectCell(ind,0,true) }catch(er){ this.row = null this.cell = null } } } this.getSelectedId = function(){ var selAr = new Array(0); for(var i=0;i=this.columnIds.length){ for(var i=0;i0)&&(z.firstChild.nodeType==1)){ this.rowsCol[i].cells[j].firstChild.disabled = ifl; } } } } this.isEditable = !ifl; } this.setSelectedRow = function(row_id,multiFL,show,call){ if(!call) call = false; this.selectCell(this.getRowById(row_id),0,call,multiFL); if(arguments.length>2 && show==true){ this.moveToVisible(this.getRowById(row_id).cells[0]) } } this.clearSelection = function(){ this.editStop() for(var i=0;i=0;i--){ this.obj.firstChild.removeChild(this.rowsCol[i]) this.rowsCol._dhx_removeAt(i); } if(this.loadedKidsHash!=null){ this.loadedKidsHash.clear(); this.loadedKidsHash.put("hashOfParents",new Hashtable()); } len = this.obj.rows.length for(var i=len-1;i>=0;i--){ this.obj.firstChild.removeChild(this.obj.rows[i]) } this.row = null; this.cell = null; this.rowsAr = new Array(0) this.rowsCol = new Array(0) this.rowsAr = new Array(0); this.rowsBuffer = new Array(new Array(0),new Array(0)); this.UserData = new Array(0) } this._sortField = function(ev){ var el = this.getFirstParentOfType(ev.target||ev.srcElement,"TD"); this.sortField(el._cellIndex) } this.sortField = function(ind,repeatFl){ if(this.getRowsNum()==0) return false; var el = this.hdr.rows[0].cells[ind]; if(el.tagName == "TD" &&(this.fldSort.length-1)>=el._cellIndex && this.fldSort[el._cellIndex]!='na'){ if(((this.sortImg.src.indexOf("_desc.gif")==-1 && !repeatFl)||(this.sortImg.style.filter!="" && repeatFl))&& this.fldSorted==el){ var sortType = "desc"; this.sortImg.src = this.imgURL+"sort_desc.gif"; }else{ var sortType = "asc"; this.sortImg.src = this.imgURL+"sort_asc.gif"; } this.sortRows(el._cellIndex,this.fldSort[el._cellIndex],sortType) this.fldSorted = el; this.setSortImgPos(); } } this.setHeader = function(hdrStr){ var arLab = hdrStr.split(this.delim); var arWdth = new Array(0); var arTyp = new Array(0); var arAlg = new Array(0); var arSrt = new Array(0); for(var i=0;ithis.rowsCol.length){ this.addRowsFromBuffer() } this.dynScrollPos+=this.dynScrollPageSize } var start = Math.max(this.dynScrollPos-this.dynScrollPageSize,0); for(var i = start;i=this.dynScrollPos && ithis.objBox.offsetHeight) this.dynScrollPos-=(this.dynScrollPageSize-i) } this.setSizes() } this.setDynScrollPageSize = function(){ if(this.dynScroll && this.dynScroll!='false'){ var rowsH = 0; try{ var rowH = this.obj.rows[0].scrollHeight; }catch(er){ var rowH = 20 } for(var i=0;i<1000;i++){ rowsH = i*rowH; if(this.objBox.offsetHeightthis.rowsCol.length) ind = this.rowsCol.length; } if(typeof(text)!='object') text = text.split(this.delim) if((!this.dynScroll || this.dynScroll=='false' || ind