var deleteIcon = new Image(); deleteIcon.src = "images/del.gif"; var restoreIcon = new Image(); restoreIcon.src = "images/undo.gif"; function eg_getNextCell(cell, step){ var row = cell.parentElement; var table = row.parentElement; var ci, ri; ci = cell.cellIndex + step; ri = row.rowIndex; if(ci >= row.cells.length) {ci = 0; ri++; } if(ci < 0) { ci = row.cells.length - 1; ri--; } if(ri >= table.rows.length) { ri = table.rows.length - 1; } if(ri < 0) { ri = 0; } return table.rows(ri).cells(ci); } function eg_getCellInNextRow(cell, step){ var row = cell.parentElement; var table = row.parentElement; var ci, ri; ci = cell.cellIndex; ri = row.rowIndex + step; if(ri >= table.rows.length) { ri = table.rows.length - 1; } if(ri < 0) { ri = 0; } return table.rows(ri).cells(ci); } function eg_changeHandler(event){ if(!event)event = window.event; srcElement = event.srcElement ? event.srcElement : event.target; try{ var cell = srcElement.parentNode; var row = cell.parentNode; var table = row.parentNode; var newRow = ""; var tplRow = null; if(table.all) tplRow = table.all['emptyRowTemplate']; else tplRow = table.rows['emptyRowTemplate']; if(row.rowIndex == (table.rows.length - 1)){ newRow = tplRow.cloneNode(true); newRow.style.display = '';//newRow.style.display = 'block'; newRow.id = ''; // в измененную строку вставляем кнопку удаления row.cells[row.cells.length - 1].innerHTML = ""; var rowItemsCnt; var rowItems; var newRowItems; var tplRowItems; if(row.all){ rowItemsCnt = row.all.length; rowItems = row.all; newRowItems = newRow.all; tplRowItems = tplRow.all; }else{ newRowItems = _getAll(newRow); tplRowItems = _getAll(tplRow); rowItems = _getAll(row); rowItemsCnt = rowItems.length; } for(var i =0; i /, table.rows.length); rowItems[i].id = rowItems[i].name; var isMSIE = /*@cc_on!@*/false; if (!isMSIE) { if (!rowItems[i].value.length) { rowItems[i].value = tplRowItems[i].value; } newRowItems[i].value = ''; } cloneEvents(tplRowItems[i], newRowItems[i]); if(rowItems[i].tagName != 'SELECT') rowItems[i].onpropertychange = null; } } if(row.className.indexOf('dark') == -1){ AddClass(newRow,'dark'); }else{ RemoveClass(newRow,'dark'); } if(row.insertAdjacentElement) row.insertAdjacentElement("afterEnd", newRow); else{ row.parentNode.insertBefore(newRow, _getNextTr(row)); } } return true; }catch(e){/*alert('eg_changeHandler: '+e.message);*/} } function cloneEvents(tplRowElement, rowElement){ rowElement.evt = tplRowElement.evt; for(var i in tplRowElement.evt){ _attachEvent(rowElement, i, InvokeEvent); } } function eg_onPropertyChange(event){ if(!event)event=window.event; srcElement = event.srcElement ? event.srcElement : event.target; try{ if(isIE){ if((event.propertyName == 'value' || event.propertyName == 'checked') && srcElement && srcElement.value && srcElement.value.length>0) eg_changeHandler(event); }else{ eg_changeHandler(event); } }catch(e){} } function eg_onFocus(event){ if(!event)event=window.event; srcElement = event.srcElement ? event.srcElement : event.target; try{ srcElement.select(); }catch(e){} } function eg_setEventHandlers(){ var tables = document.getElementsByTagName("TABLE"); for(var i = 0; i < tables.length; i++){ if(tables[i].className == "listtable editable"){ var inputs = tables[i].getElementsByTagName("INPUT"); for(var j = 0; j < inputs.length; j++){ if(inputs[j].egEventAttached)continue; AddEvent(inputs[j], 'onpropertychange', eg_onPropertyChange); AddEvent(inputs[j], 'onchange', eg_onPropertyChange); AddEvent(inputs[j], 'onfocus', eg_onFocus); inputs[j].egEventAttached = true; } inputs = tables[i].getElementsByTagName("TEXTAREA"); for(var j = 0; j < inputs.length; j++){ if(inputs[j].egEventAttached)continue; AddEvent(inputs[j], 'onpropertychange', eg_onPropertyChange); AddEvent(inputs[j], 'onchange', eg_onPropertyChange); AddEvent(inputs[j], 'onfocus', eg_onFocus); inputs[j].egEventAttached = true; } inputs = tables[i].getElementsByTagName("SELECT"); for(var j = 0; j < inputs.length; j++){ if(inputs[j].egEventAttached)continue; AddEvent(inputs[j], 'onpropertychange', eg_onPropertyChange); AddEvent(inputs[j], 'onchange', eg_onPropertyChange); AddEvent(inputs[j], 'onfocus', eg_onFocus); inputs[j].egEventAttached = true; } /*for(var j = 0; j < tables[i].all.length; j++){ if((tables[i].all[j].tagName == "INPUT" || tables[i].all[j].tagName == "TEXTAREA" || tables[i].all[j].tagName == "SELECT") && !tables[i].all[j].egEventAttached){ AddEvent(tables[i].all[j], 'onpropertychange', eg_onPropertyChange); AddEvent(tables[i].all[j], 'onfocus', eg_onFocus); tables[i].all[j].egEventAttached = true; } }*/ } } } function eg_getElementInCell(cell){ var element = null; if(cell.getElementsByTagName("INPUT").length > 0) element = cell.getElementsByTagName("INPUT")[0]; else if(cell.getElementsByTagName("TEXTAREA").length > 0) element = cell.getElementsByTagName("TEXTAREA")[0]; else if(cell.getElementsByTagName("SELECT").length > 0) element = cell.getElementsByTagName("SELECT")[0]; return element; } function eg_kbdHandler(){ return true; var table, nextCell, nextElement; if(!event.shiftKey && !event.altKey && !event.ctrlKey){ switch(event.keyCode){ case 37: //left nextCell = eg_getNextCell(event.srcElement.offsetParent, -1); nextElement = eg_getElementInCell(nextCell); if(nextElement) nextElement.focus(); break; case 38: //up if(event.srcElement.tagName == "SELECT") break; nextCell = eg_getCellInNextRow(event.srcElement.offsetParent, -1); nextElement = eg_getElementInCell(nextCell); event.cancelBubble = true; if(nextElement) nextElement.focus(); break; case 39: // right nextCell = eg_getNextCell(event.srcElement.offsetParent, 1); nextElement = eg_getElementInCell(nextCell); if(nextElement) nextElement.focus(); break; case 40: //down event.cancelBubble = true; if(event.srcElement.tagName == "SELECT") break; nextCell = eg_getCellInNextRow(event.srcElement.offsetParent, 1); nextElement = eg_getElementInCell(nextCell); if(nextElement) nextElement.focus(); break; case 9: event.cancelBubble = true; ActivateNextObject(1); break; case 27: //esc var td = event.srcElement.parentElement; break; } } } function eg_deleteRow(a){ obj = a.parentNode; var table,row; while(obj){ if(obj.tagName == "TR") row = obj; if(obj.tagName == "TABLE" && obj.className == "listtable editable"){ table = obj; break; } obj = obj.parentNode; } if(row.className.indexOf('deletedRow') == -1){ // зачеркиваем удаленную строку AddClass(row,'deletedRow'); inputs = _getAll(row); for(var i=0; i