var G_Grid = function(oForm, sGridName){ var oGrid = this; this.parent = G_Field; this.parent(oForm, '', sGridName); this.sGridName = sGridName; this.sAJAXPage = oForm.ajaxServer || ''; this.oGrid = document.getElementById(this.sGridName); this.onaddrow = function(iRow){}; this.ondeleterow = function(){}; this.executeEvent = function (element,event) { if ( document.createEventObject ) { // IE var evt = document.createEventObject(); return element.fireEvent('on'+event,evt) } else { // firefox + others var evt = document.createEvent("HTMLEvents"); evt.initEvent(event, true, true ); // event type,bubbling,cancelable return !element.dispatchEvent(evt); } }; this.aFields = []; this.aElements = []; this.aFunctions = []; this.aFormulas = []; this.allDependentFields = ''; //Stores all dependent fields this.countRows = function(){ return this.aElements.length / this.aFields.length; }; this.getObjectName = function(Name){ var arr = Name.split(']['); var aux = arr.pop(); aux = aux.replace(']',''); return aux; }; //Begin SetFields --------------------------------------------------------------------- this.setFields = function (aFields, iRow) { var tableGrid = document.getElementById(this.sGridName); var elem; var elemName = ""; var i = 0; var j = 0; this.aFields = aFields; for (i = iRow || 1; i <= tableGrid.rows.length - 2; i++) { for (j = 0; j <= this.aFields.length - 1; j++) { elemName = this.sGridName + "][" + i + "][" + this.aFields[j].sFieldName; if ((elem = document.getElementById("form[" + elemName + "]"))) { switch (this.aFields[j].sType) { case "text": this.aElements.push(new G_Text(oForm, elem, elemName)); this.aElements[this.aElements.length - 1].validate = this.aFields[j].oProperties.validate; if (this.aFields[j].oProperties.strTo) { this.aElements[this.aElements.length - 1].strTo = this.aFields[j].oProperties.strTo; } if (this.aFields[j].oProperties) { this.aElements[this.aElements.length - 1].mask = this.aFields[j].oProperties.mask; } break; case "currency": this.aElements.push(new G_Currency(oForm, elem, elemName)); if (this.aFields[j].oProperties) { if (this.aFields[j].oProperties.comma_separator) { this.aElements[this.aElements.length - 1].comma_separator = this.aFields[j].oProperties.comma_separator; } this.aElements[this.aElements.length - 1].validate = this.aFields[j].oProperties.validate; this.aElements[this.aElements.length - 1].mask = this.aFields[j].oProperties.mask; } break; case "percentage": this.aElements.push(new G_Percentage(oForm, elem, elemName)); if (this.aFields[j].oProperties) { if (this.aFields[j].oProperties.comma_separator) { this.aElements[this.aElements.length - 1].comma_separator = this.aFields[j].oProperties.comma_separator; } this.aElements[this.aElements.length - 1].validate = this.aFields[j].oProperties.validate; this.aElements[this.aElements.length - 1].mask = this.aFields[j].oProperties.mask; } break; case "dropdown": this.aElements.push(new G_DropDown(oForm, elem, elemName)); if (this.aFields[j].oProperties) { this.aElements[this.aElements.length - 1].mask = this.aFields[j].oProperties.sMask; } break; default: this.aElements.push(new G_Field(oForm, elem, elemName)); if (this.aFields[j].oProperties) { this.aElements[this.aElements.length - 1].mask = this.aFields[j].oProperties.sMask; } break; } } } } //Set dependent fields var sw = false; if (this.allDependentFields == "") { sw = true; //Check if dependent fields are setted. } for (j = 0; j <= this.aFields.length - 1; j++) { i = iRow || 1; while ((elem = document.getElementById("form[" + this.sGridName + "][" + i + "][" + this.aFields[j].sFieldName + "]"))) { if (this.aFields[j].oProperties.dependentFields != "") { this.setDependents(i, this.getElementByName(i, this.aFields[j].sFieldName), aFields[j].oProperties.dependentFields, sw); } i = i + 1; } } }; //End Set Fields -------------------------------------------------------- /////////////////////////////////////////////////////////////////////// this.setDependents = function(iRow, me, theDependentFields, sw) { //alert('Row:' + iRow + ' me: ' + me.name + ' DP: ' + theDependentFields); var i; var dependentFields = theDependentFields || ''; dependentFields = dependentFields.split(','); for (i = 0; i < dependentFields.length; i++) { var oField = this.getElementByName(iRow, dependentFields[i]); if (oField) { me.dependentFields[i] = oField; me.dependentFields[i].addDependencie(me); if (sw){ //Gets all dependent field only first time if (this.allDependentFields != '') this.allDependentFields += ','; this.allDependentFields += dependentFields[i]; } } } }; ////////////////////////////////////////////////////////////////////// this.unsetFields = function() { var i, j = 0, k, l = 0; k = this.aElements.length / this.aFields.length; for (i = 0; i < this.aFields.length; i++) { j += k; l++; this.aElements.splice(j - l, 1); } }; //////////////////////////////////////////////////////////////////// this.getElementByName = function(iRow, sName) { var i; for (i = 0; i < this.aElements.length; i++) { if (this.aElements[i].name === this.sGridName + '][' + iRow + '][' + sName) { return this.aElements[i]; } } return null; }; ///////////////////////////////////////////////////////////////////// this.getElementValueByName = function(iRow, sName) { var oAux = document.getElementById('form[' + this.sGridName + '][' + iRow + '][' + sName + ']'); if (oAux) { return oAux.value; } else { return 'Object not found!'; } }; //////////////////////////////////////////////////////////////////////// this.getFunctionResult = function(sName) { var oAux = document.getElementById('form[SYS_GRID_AGGREGATE_' + this.sGridName + '_' + sName + ']'); if (oAux) { return oAux.value; } else { return 'Object not found!'; } }; this.cloneElement = function (elem) { //input, textarea, select var strHtml = elem.parentNode.innerHTML; var tag = new String(elem.nodeName); var arrayMatch = []; var arrayAux1 = []; var arrayAux2 = []; var strHtmlAux = ""; var strAux = ""; var i = 0; strHtml = stringReplace("\\x0A", "", strHtml); //\n 10 strHtml = stringReplace("\\x0D", "", strHtml); //\r 13 strHtml = stringReplace("\\x09", "", strHtml); //\t 9 if ((arrayMatch = eval("/^.*(<" + tag + ".*id=\"" + elem.id + "\".*>).*$/i").exec(strHtml))) { strHtml = arrayMatch[1]; } strHtml = stringReplace("<" + tag, "", strHtml); strHtml = stringReplace("<" + tag.toLowerCase(), "", strHtml); strHtml = stringReplace("\\/>.*", "", strHtml); strHtml = stringReplace(">.*", "", strHtml); /////// strHtmlAux = strHtml; strAux = ""; while ((arrayMatch = /^(.*)(".*")(.*)$/g.exec(strHtmlAux))) { strHtmlAux = arrayMatch[1]; strAux = stringReplace(" ", "__SPACE__", arrayMatch[2]) + arrayMatch[3] + strAux; } strAux = strHtmlAux + strAux; strHtml = strAux; /////// if (/^.*read[oO]nly.*$/.test(strHtml)) { if (!(/^.*read[oO]nly\=.*$/.test(strHtml))) { strHtml = stringReplace("read[oO]nly", "readonly=\"\"", strHtml); } } if (/^.*disabled.*$/.test(strHtml)) { if (!(/^.*disabled\=.*$/.test(strHtml))) { strHtml = stringReplace("disabled", "disabled=\"\"", strHtml); } } if (/^.*checked.*$/i.test(strHtml)) { strHtml = stringReplace("CHECKED", "checked", strHtml); if (!(/^.*checked\=.*$/.test(strHtml))) { strHtml = stringReplace("checked", "checked=\"\"", strHtml); } } /////// var arrayAttribute = []; var a = ""; var v = ""; arrayAux1 = strHtml.split(" "); for (i = 0; i <= arrayAux1.length - 1; i++) { arrayAux2 = arrayAux1[i].split("="); if (typeof arrayAux2[1] != "undefined") { a = arrayAux2[0].trim(); v = stringReplace("\\\"", "", arrayAux2[1]); v = stringReplace("__SPACE__", " ", v); arrayAttribute.push([a, v]); } } /////// var newElem = document.createElement(tag.toLowerCase()); for (i = 0; i <= arrayAttribute.length - 1; i++) { a = arrayAttribute[i][0]; v = arrayAttribute[i][1]; switch (a.toLowerCase()) { case "id": case "name": newElem.setAttribute("id", elem.id); newElem.setAttribute("name", elem.id); break; case "class": newElem.className = v; break; case "style": newElem.style.cssText = ((/^.*display\s*:\s*none.*$/i.test(strHtml))? "display: none;" : "") + v; break; case "disabled": if (elem.disabled) { newElem.disabled = true; } break; case "readonly": if (elem.readOnly) { newElem.readOnly = true; } break; case "checked": if (elem.checked) { newElem.checked = true; } break; default: newElem.setAttribute(a, v); break; } } switch (tag.toLowerCase()) { case "input": case "textarea": newElem.value = elem.value; break; case "select": if (elem.options.length > 0) { var pos = 0; for (i = 0; i <= elem.options.length - 1; i++) { if (elem.options[i].selected) { pos = i; } newElem.options[i] = new Option(elem.options[i].text, elem.options[i].value, elem.options[i].defaultSelected); } newElem.options[pos].selected = true; } break; } return newElem; }; function replaceHtml(el, html) { var oldEl = typeof el === "string" ? document.getElementById(el) : el; /*Pure innerHTML is slightly faster in IE oldEl.innerHTML = html; return oldEl; */ var newEl = oldEl.cloneNode(false); newEl.innerHTML = html; oldEl.parentNode.replaceChild(newEl, oldEl); /* Since we just removed the old element from the DOM, return a reference to the new element, which can be used to restore variable references. */ return newEl; }; this.addGridRow = function() { this.oGrid = document.getElementById(this.sGridName); var i, aObjects; var defaultValue = ''; var n,a,x; var oRow = document.getElementById('firstRow_' + this.sGridName); var aCells = oRow.getElementsByTagName('td'); var oNewRow = this.oGrid.insertRow(this.oGrid.rows.length - 1); var currentRow = this.oGrid.rows.length - 2; var newID, attributes, img2, gridType; oNewRow.onmouseover=function(){ highlightRow(this, '#D9E8FF'); }; oNewRow.onmouseout=function(){ highlightRow(this, '#fff'); }; // Clone Cells Loop for (i = 0; i < aCells.length; i++) { oNewRow.appendChild(aCells[i].cloneNode(true)); //Clone First Cell exactly. switch (i){ case 0: oNewRow.getElementsByTagName('td')[i].innerHTML = currentRow; break; case aCells.length - 1: oNewRow.getElementsByTagName('td')[i].innerHTML = oNewRow.getElementsByTagName('td')[i].innerHTML.replace(/\[1\]/g, '\[' + currentRow + '\]'); break; default: var eNodeName = aCells[i].innerHTML.substring(aCells[i].innerHTML.indexOf('<')+1, aCells[i].innerHTML.indexOf(' ')); eNodeName = eNodeName.toLowerCase(); switch(eNodeName){ case 'input': aObjects = oNewRow.getElementsByTagName('td')[i].getElementsByTagName('input'); if (aObjects){ newID = aObjects[0].id.replace(/\[1\]/g, '\[' + currentRow + '\]'); aObjects[0].id = newID; aObjects[0].name = newID; attributes = elementAttributesNS(aObjects[0], 'pm'); if (typeof attributes.defaultvalue != "undefined" && attributes.defaultvalue != "") { defaultValue = attributes.defaultvalue; } else { defaultValue = ""; } for(n=0; n < aObjects.length; n++){ switch(aObjects[n].type){ case 'text': //TEXTBOX, CURRENCY, PERCENTAGE, DATEPICKER aObjects[n].className = "module_app_input___gray"; tags = oNewRow.getElementsByTagName('td')[i].getElementsByTagName('a'); if (tags.length == 2){ //DATEPICKER //Copy Images //img1 = tags[0].innerHTML; img2 = tags[1].innerHTML; //Create new trigger name var datePickerTriggerId = tags[1].id.replace(/\[1\]/g, '\[' + currentRow + '\]'); //Remove 'a' tag for date picker trigger oNewRow.getElementsByTagName('td')[i].removeChild(tags[1]); //Capture Script and remove var scriptTags = oNewRow.getElementsByTagName('td')[i].getElementsByTagName('script'); oNewRow.getElementsByTagName('td')[i].removeChild(scriptTags[0]); //Create 'a' to remove Date if (tags[0].onclick){ var onclickevn = new String(tags[0].onclick); eval('tags[0].onclick = ' + onclickevn.replace(/\[1\]/g, '\[' + currentRow + '\]') + ';'); } //Create new 'a' to trigger DatePicker var a2 = document.createElement('a'); if( a2.style.setAttribute ) { var styleText = "position:relative;top:0px;left:-19px;"; a2.style.setAttribute("cssText", styleText ); } else { var styleText = "position:relative;top:0px;left:-22px;"; a2.setAttribute("style", styleText ); } a2.id = datePickerTriggerId; a2.innerHTML = img2; oNewRow.getElementsByTagName('td')[i].appendChild(a2); //Load DatePicker Trigger datePicker4("", newID, attributes.mask, attributes.start, attributes.end, attributes.time); aObjects[n].value = defaultValue; }else{ if (_BROWSER.name == 'msie' && aObjects.length==1){ //Clone new input element if browser is IE var oNewOBJ = this.cloneElement(aObjects[n]); oNewOBJ.value = defaultValue; var parentGG = aObjects[n].parentNode; parentGG.removeChild(aObjects[n]); parentGG.appendChild(oNewOBJ); }else{ if ((attributes.gridtype) && attributes.gridtype == "currency") { var attributesCurrency = elementAttributesNS(aObjects[n], ""); aObjects[n].value = attributesCurrency.value.replace(/[.,0-9\s]/g, ""); } else { aObjects[n].value = defaultValue; } } } aObjectsScript = oNewRow.getElementsByTagName('td')[i].getElementsByTagName('script'); sObjectType = this.aFields[i-1].sType; if (aObjectsScript[0] != 'undefined' && sObjectType == 'suggest') { sObjScript = aObjectsScript[0].innerHTML; sNewObjScript = sObjScript.replace(/\[1\]/g, '\[' + currentRow + '\]'); replaceHtml(aObjectsScript[0], sNewObjScript); eval(aObjectsScript[0].innerHTML); } break; case 'checkbox': //CHECKBOX var attributeCheckBox = elementAttributesNS(aObjects[n], ""); if (defaultValue == "" || (typeof attributeCheckBox.falseValue != "undefined" && defaultValue == attributeCheckBox.falseValue) || (typeof attributeCheckBox.falsevalue != "undefined" && defaultValue == attributeCheckBox.falsevalue)) { aObjects[n].checked = false; } else { aObjects[n].checked = true; } break; case 'hidden': //HIDDEN if ((attributes.gridtype != 'yesno' && attributes.gridtype != 'dropdown') || typeof attributes.gridtype == 'undefined') { aObjects[n].value = defaultValue; newID = aObjects[n].id.replace(/\[1\]/g, '\[' + currentRow + '\]'); aObjects[n].id = newID; aObjects[n].name = newID; } break; case 'button': if (aObjects[n].onclick){ var onclickevn = new String(aObjects[n].onclick); eval('aObjects[n].onclick = ' + onclickevn.replace(/\[1\]/g, '\[' + currentRow + '\]') + ';'); } break; case "file": aObjects[n].value = ""; break; } } } aObjects = null; break; case 'textarea': //TEXTAREA aObjects = oNewRow.getElementsByTagName('td')[i].getElementsByTagName('textarea'); if (aObjects){ aObjects[0].className = "module_app_input___gray"; newID = aObjects[0].id.replace(/\[1\]/g, '\[' + currentRow + '\]'); aObjects[0].id = newID; aObjects[0].name = newID; attributes = elementAttributesNS(aObjects[0], 'pm'); if (attributes.defaultvalue != '' && typeof attributes.defaultvalue != 'undefined'){ defaultValue = attributes.defaultvalue; }else{ defaultValue = ''; } aObjects[0].innerHTML = defaultValue; } aObjects = null; break; case 'select': //DROPDOWN var oNewSelect; aObjects = oNewRow.getElementsByTagName('td')[i].getElementsByTagName('select'); if (aObjects){ newID = aObjects[0].id.replace(/\[1\]/g, '\[' + currentRow + '\]'); aObjects[0].id = newID; aObjects[0].name = newID; oNewSelect = document.createElement(aObjects[0].tagName); oNewSelect.id = newID; oNewSelect.name = newID; oNewSelect.setAttribute('class','module_app_input___gray'); aAttributes = aObjects[0].attributes; for (a=0; a < aAttributes.length; a++){ if (aAttributes[a].name.indexOf('pm:') != -1){ oNewSelect.setAttribute(aAttributes[a].name,aAttributes[a].value); } if (aAttributes[a].name == 'disabled'){ if (_BROWSER.name == 'msie'){ if (aAttributes[a].value=='true'){ oNewSelect.setAttribute(aAttributes[a].name,aAttributes[a].value); } } else{ oNewSelect.setAttribute(aAttributes[a].name,aAttributes[a].value); } } } attributes = elementAttributesNS(aObjects[0], 'pm'); //var MyAtt = attributes; if (attributes.defaultvalue != '' && typeof attributes.defaultvalue != 'undefined'){ defaultValue = attributes.defaultvalue; //Set '' for Default Value when dropdown has dependent fields. //if (attributes.dependent == '1') defaultValue = ''; }else{ defaultValue = ''; } if (attributes.gridtype != '' && typeof attributes.gridtype != 'undefined'){ gridType = attributes.gridtype; }else{ gridType = ''; } var aDependents = this.allDependentFields.split(','); sObject = this.getObjectName(newID); //Check if dropdow is dependent var sw = false; for (x=0; x < aDependents.length; x++){ if (aDependents[x] == sObject) sw = true; } //Delete Options if dropdow is dependent //only remains empty value if (sw){ var oAux = document.createElement(aObjects[0].tagName); for ( var j = 0; j < aObjects[0].options.length; j++) { if (aObjects[0].options[j].value == ''){ var oOption = document.createElement('OPTION'); oOption.value = aObjects[0].options[j].value; oOption.text = aObjects[0].options[j].text; oAux.options.add(oOption); } } oNewSelect.innerHTML = ''; //Delete options //aObjects[0].innerHTML = ''; //Delete options for (var r =0; r < oAux.options.length; r++){ var xOption = document.createElement('OPTION'); xOption.value = oAux.options[r].value; xOption.text = oAux.options[r].text; //aObjects[0].options.add(xOption); oNewSelect.options.add(xOption); } }else{ //Set Default Value if it's not a Dependent Field if (defaultValue != ''){ var oAux = document.createElement(aObjects[0].tagName); for ( var j = 0; j < aObjects[0].options.length; j++) { var oOption = document.createElement('OPTION'); oOption.value = aObjects[0].options[j].value; oOption.text = aObjects[0].options[j].text; if (aObjects[0].options[j].value === defaultValue){ oOption.setAttribute('selected','selected'); } oAux.options.add(oOption); } //aObjects[0].innerHTML = ''; //Delete options oNewSelect.innerHTML = ''; //Delete options for (var r =0; r < oAux.options.length; r++){ var xOption = document.createElement('OPTION'); xOption.value = oAux.options[r].value; xOption.text = oAux.options[r].text; if (_BROWSER.name == 'msie'){ if (oAux.options[r].getAttribute('selected') != ''){ xOption.setAttribute('selected','selected'); } }else{ if (oAux.options[r].getAttribute('selected') == 'selected'){ xOption.setAttribute('selected','selected'); } } //aObjects[0].options.add(xOption); oNewSelect.options.add(xOption); } }else{ //Copy all options var oAux = document.createElement(aObjects[0].tagName); for ( var j = 0; j < aObjects[0].options.length; j++) { var oOption = document.createElement('OPTION'); oOption.value = aObjects[0].options[j].value; oOption.text = aObjects[0].options[j].text; oNewSelect.options.add(oOption); } } //TODO: Implement Default Value and Dependent Fields Trigger for grid dropdowns } var parentSelect = aObjects[0].parentNode; parentSelect.removeChild(aObjects[0]); parentSelect.appendChild(oNewSelect); } aObjects = oNewRow.getElementsByTagName('td')[i].getElementsByTagName('input'); if (aObjects.length > 0){ newID = aObjects[0].id.replace(/\[1\]/g, '\[' + currentRow + '\]'); aObjects[0].id = newID; aObjects[0].name = newID; } aObjects = null; break; case 'a': //LINKS aObjects = oNewRow.getElementsByTagName('td')[i].getElementsByTagName('a'); if (aObjects){ newID = aObjects[0].id.replace(/\[1\]/g, '\[' + currentRow + '\]'); aObjects[0].id = newID; aObjects[0].name = newID; } aObjects = null; break; } break; } } if (this.aFields.length > 0) { this.setFields(this.aFields, currentRow); } if (this.aFunctions.length > 0) { this.assignFunctions(this.aFunctions, 'change', currentRow); } if (this.aFormulas.length > 0) { this.assignFormulas(this.aFormulas, 'change', currentRow); } //Recalculate functions if are declared var oAux; if (this.aFunctions.length > 0) { for (i = 0; i < this.aFunctions.length; i++) { oAux = document.getElementById('form[' + this.sGridName + '][' + currentRow + '][' + this.aFunctions[i].sFieldName + ']'); if (oAux) { switch (this.aFunctions[i].sFunction) { case 'sum': this.sum(false, oAux); break; case 'avg': this.avg(false, oAux); break; } } } } //Fire Update Dependent Fields for any item with dependentfields and not included in dependencie var xIsDependentOf = []; var exist = false; var m; for (i=0; i < this.aFields.length; i++){ var oAux = this.getElementByName(currentRow, this.aFields[i].sFieldName); if (typeof oAux !== 'undefined' && oAux != null) if (typeof oAux.dependentFields !== 'undefined'){ if (oAux.dependentFields.length > 0){ exist = false; for (m=0; m < xIsDependentOf.length; m++) if (xIsDependentOf[m] == oAux.name) exist = true; for (j=0; j < oAux.dependentFields.length; j++){ xIsDependentOf.push(oAux.dependentFields[j].name); } if (!exist){ oAux.updateDepententFields(); } } } } //Set focus the first element in the grid for (var i = 0; i < this.aFields.length; i++) { var fieldName = 'form[' + sGridName + '][' + currentRow + '][' + this.aFields[i].sFieldName + ']'; if (this.aFields[i].sType == 'suggest' ) { fieldName = 'form[' + sGridName + '][' + currentRow + '][' + this.aFields[i].sFieldName + '_label]'; } if (this.aFields[i].sType != 'file' && this.aFields[i].sType != 'hidden' && document.getElementById(fieldName).focus) { document.getElementById(fieldName).focus(); break; } } //Fires OnAddRow Event if (this.onaddrow) { this.onaddrow(currentRow); } }; this.deleteGridRow = function (sRow, bWithoutConfirm) { if (typeof bWithoutConfirm == "undefined") { bWithoutConfirm = false; } if (this.oGrid.rows.length == 3) { new leimnud.module.app.alert().make({ label: G_STRINGS.ID_MSG_NODELETE_GRID_ITEM }); return false; } if (bWithoutConfirm) { this.deleteRowWC(this, sRow); } else { new leimnud.module.app.confirm().make({ label: G_STRINGS.ID_MSG_DELETE_GRID_ITEM, action: function () { this.deleteRowWC(this, sRow); }.extend(this) }); } }; this.deleteRowWC = function (oObj, aRow) { var sRow = new String(aRow); sRow = sRow.replace("[", ""); sRow = sRow.replace("]", ""); var iRow = Number(sRow); var iRowAux = iRow + 1; var lastItem = oObj.oGrid.rows.length - 2; var elem2ParentNode; var elem2Id = ""; var elem2Name = ""; var elemAux; deleteRowOnDynaform(oObj, iRow); while (iRowAux <= (lastItem)) { for (i = 1; i < oObj.oGrid.rows[iRowAux - 1].cells.length; i++) { var oCell1 = oObj.oGrid.rows[iRowAux - 1].cells[i]; var oCell2 = oObj.oGrid.rows[iRowAux].cells[i]; switch (oCell1.innerHTML.replace(/^\s+|\s+$/g, '').substr(0, 6).toLowerCase()){ case ' 0) { if (aObjects[0]) { aObjects[0].id = aObjects[0].id.replace('/\['+ (iRowAux -1 ) + '\]/g', '\[' + iRowAux + '\]'); aObjects[0].name = aObjects[0].id.replace('/\['+ (iRowAux -1 ) + '\]/g', '\[' + iRowAux + '\]'); if (aObjects[0].onclick) { sAux = new String(aObjects[0].onclick); eval('aObjects[0].onclick = ' + sAux.replace('/\['+ (iRowAux -1 ) + '\]/g', '\[' + iRowAux + '\]') + ';'); } } aObjects = oCell1.getElementsByTagName('a'); if (aObjects) { if (aObjects[0]) { if (aObjects[0].onclick) { sAux = new String(aObjects[0].onclick); eval('aObjects[0].onclick = ' + sAux.replace('/\['+ (iRowAux -1 ) + '\]/g', '\[' + iRowAux + '\]') + ';'); } } } } break; case '= 0; j--) { aObjects1[0].options[j] = * null; } */ aObjects1[0].options.length = 0; for ( var j = 0; j < aObjects2[0].options.length; j++) { var optn = $dce("OPTION"); optn.text = aObjects2[0].options[j].text; optn.value = aObjects2[0].options[j].value; aObjects1[0].options[j] = optn; } aObjects1[0].value = vValue; aObjects1[0].className = aObjects2[0].className; } break; case ' 0) { for (i = 0; i <= oObj.aFunctions.length - 1; i++) { elem = document.getElementById("form[" + oObj.sGridName + "][1][" + oObj.aFunctions[i].sFieldName + "]"); if (elem) { switch (oObj.aFunctions[i].sFunction) { case "sum": oObj.sum(false, elem); break; case "avg": oObj.avg(false, elem); break; } } } } //Fires OnAddRow Event if (oObj.ondeleterow) { oObj.ondeleterow(iRow); } }; /////////////////////////////////////////////////////////////////////////////////// this.assignFunctions = function (aFields, sEvent, iRow) { var elem; var i = 0; var j = 0; for (j = 0; j <= aFields.length - 1; j++) { i = iRow || 1; while ((elem = document.getElementById("form[" + this.sGridName + "][" + i + "][" + aFields[j].sFieldName + "]"))) { switch (aFields[j].sFunction) { case "sum": leimnud.event.add(elem, sEvent, { method: this.sum, instance: this, event: true }); break; case "avg": leimnud.event.add(elem, sEvent, { method: this.avg, instance: this, event: true }); break; default: leimnud.event.add(elem, sEvent, { method: aFields[j].sFunction, instance: this, event: true }); break; } i = i + 1; } } }; //////////////////////////////////////////////////////////////////////////////// this.setFunctions = function(aFunctions) { this.aFunctions = aFunctions; this.assignFunctions(this.aFunctions, 'change'); }; this.determineBrowser = function() { var nAgt = navigator.userAgent; var browserName = ""; // In Opera, the true version is after "Opera" or after "Version" if ( nAgt.indexOf("Opera") != -1) { browserName = "Opera"; } else { // In MSIE, the true version is after "MSIE" in userAgent - Microsoft Internet Explorer if ( nAgt.indexOf("MSIE") != -1) { browserName = "MSIE"; } else { // In Chrome, the true version is after "Chrome" if ( nAgt.indexOf("Chrome") != -1) { browserName = "Chrome"; } else { // In Safari, the true version is after "Safari" or after "Version" if ( nAgt.indexOf("Safari") != -1) { browserName = "Safari"; } else { // In Firefox, the true version is after "Firefox" if ( nAgt.indexOf("Firefox") != -1) { browserName = "Firefox"; } } } } } return browserName; }; ///////////////////////////////////////////////////////////////////////////////// this.sum = function(oEvent, oDOM) { oDOM = (oDOM ? oDOM : oEvent.target || window.event.srcElement); var i, aAux, oAux, fTotal, sMask, nnName; aAux = oDOM.name.split(']['); i = 1; fTotal = 0; aAux[2] = aAux[2].replace(']', ''); var j=1; for ( var k = 0; k < this.aElements.length; k++) { nnName= this.aElements[k].name.split(']['); if (aAux[2] == nnName[2] && j <= (this.oGrid.rows.length-2)){ oAux=this.getElementByName(j, nnName[2]); var oAux2 = oAux.value().replace(/[$|a-zA-Z\s]/g,''); if ((oAux != null) && (oAux.value().trim() != "") && (oAux2)) { fTotal = fTotal + parseFloat(G.getValue(oAux)); } j = j + 1; } } /* while (oAux = this.getElementByName(i, aAux[2])) { fTotal += parseFloat(G.cleanMask(oAux.value() || 0, oAux.mask).result.replace(/,/g, '')); sMask = oAux.mask; i++; }*/ fTotal = fTotal.toFixed(2); oAux = document.getElementById('form[SYS_GRID_AGGREGATE_' + oGrid.sGridName + '_' + aAux[2] + ']'); oAux.value = fTotal; oAux = document.getElementById('form[SYS_GRID_AGGREGATE_' + oGrid.sGridName + '__' + aAux[2] + ']'); // oAux.innerHTML = G.toMask(fTotal, sMask).result; if ( this.determineBrowser() == "MSIE" ) { oAux.innerText = fTotal; } else { oAux.innerHTML = fTotal; } }; //////////////////////////////////////////////////////////////////////////////////// this.avg = function(oEvent, oDOM) { oDOM = (oDOM ? oDOM : oEvent.target || window.event.srcElement); var i, aAux, oAux, fTotal, sMask; aAux = oDOM.name.split(']['); i = 1; fTotal = 0; aAux[2] = aAux[2].replace(']', ''); while ((oAux = this.getElementByName(i, aAux[2]))) { if (oAux.value().trim() != "") { fTotal = fTotal + parseFloat(G.getValue(oAux)); } sMask = oAux.mask; i = i + 1; } i--; if (fTotal > 0) { fTotal = (fTotal / i).toFixed(2); oAux = document.getElementById('form[SYS_GRID_AGGREGATE_' + oGrid.sGridName + '_' + aAux[2] + ']'); oAux.value = fTotal; oAux = document.getElementById('form[SYS_GRID_AGGREGATE_' + oGrid.sGridName + '__' + aAux[2] + ']'); // oAux.innerHTML = G.toMask((fTotal / i), sMask).result; if ( this.determineBrowser() == "MSIE" ) { oAux.innerText = fTotal; } else { oAux.innerHTML = fTotal; } } else { oAux = document.getElementById('form[SYS_GRID_AGGREGATE_' + oGrid.sGridName + '_' + aAux[2] + ']'); oAux.value = 0; oAux = document.getElementById('form[SYS_GRID_AGGREGATE_' + oGrid.sGridName + '__' + aAux[2] + ']'); // oAux.innerHTML = G.toMask(0, sMask).result; if ( this.determineBrowser() == "MSIE" ) { oAux.innerText = 0; } else { oAux.innerHTML = 0; } } }; ///////////////////////////////////////////////////////////////////////////////////////// this.assignFormulas = function (aFields, sEvent, iRow) { var elem; var i = 0 var j = 0; for (j = 0; j <= aFields.length - 1; j++) { i = iRow || 1; while ((elem = document.getElementById("form[" + this.sGridName + "][" + i + "][" + aFields[j].sDependentOf + "]"))) { leimnud.event.add(elem, sEvent, { method: this.evaluateFormula, instance: this, args: [elem, aFields[j]], event: true }); i = i + 1; } } }; //////////////////////////////////////////////////////////////////////////////////////////// this.setFormulas = function(aFormulas) { this.aFormulas = aFormulas; this.assignFormulas(this.aFormulas, 'change'); }; ///////////////////////////////////////////////////////////////////////////////////////////// this.evaluateFormula = function(oEvent, oDOM, oField) { oDOM = (oDOM ? oDOM : oEvent.target || window.event.srcElement); var aAux, sAux, i, oAux; var domId = oDOM.id; var oContinue = true; aAux = oDOM.name.split(']['); sAux = oField.sFormula.replace(/\+|\-|\*|\/|\(|\)|\[|\]|\{|\}|\%|\$/g, ' '); sAux = sAux.replace(/^\s+|\s+$/g, ''); sAux = sAux.replace(/ /g, ' '); sAux = sAux.replace(/ /g, ' '); sAux = sAux.replace(/ /g, ' '); sAux = sAux.replace(/ /g, ' '); sAux = sAux.replace(/ /g, ' '); aFields = sAux.split(' '); aFields = aFields.unique(); sAux = oField.sFormula; for (i = 0; i < aFields.length; i++) { if (!isNumber(aFields[i])) { oAux = this.getElementByName(aAux[1], aFields[i]); sAux = sAux.replace(new RegExp(aFields[i], "g"), "parseFloat(G.cleanMask(this.getElementByName(" + aAux[1] + ", '" + aFields[i] + "').value().replace(/[$|a-zA-Z\s]/g,'') || 0, '" + (oAux.sMask ? oAux.sMask : '') + "').result.replace(/,/g, ''))"); eval("if (!document.getElementById('" + aAux[0] + '][' + aAux[1] + '][' + aFields[i] + "]')) { oContinue = false; }"); } } eval("if (!document.getElementById('" + aAux[0] + '][' + aAux[1] + '][' + oField.sFieldName + "]')) { oContinue = false; }"); if (oContinue) { //we're selecting the mask to put in the field with the formula for (i = 0; i < this.aFields.length; i++) { if(oField.sFieldName==this.aFields[i].sFieldName) { maskformula =this.aFields[i].oProperties.mask; } } if(maskformula!=''){ maskDecimal=maskformula.split(";"); if(maskDecimal.length > 1) { maskDecimal=maskDecimal[1].split("."); } else { maskDecimal=maskformula.split("."); } if(typeof maskDecimal[1] != 'undefined') { maskToPut=maskDecimal[1].length; } else { maskToPut=0; } } else { maskToPut=0; } // clean the field and load mask execute event keypress document.getElementById(aAux[0]+']['+ aAux[1] + '][' + oField.sFieldName + ']').value = ''; this.executeEvent(document.getElementById(aAux[0]+']['+ aAux[1] + '][' + oField.sFieldName + ']'), 'keypress'); // execute formula and set decimal eval("document.getElementById('" + aAux[0] + '][' + aAux[1] + '][' + oField.sFieldName + "]').value = (" + sAux + ').toFixed('+maskToPut+');'); // trim value document.getElementById(aAux[0] + '][' + aAux[1] + '][' + oField.sFieldName + ']').value = document.getElementById(aAux[0] + '][' + aAux[1] + '][' + oField.sFieldName + ']').value.replace(/^\s*|\s*$/g,""); // set '' to field if response is NaN if (document.getElementById(aAux[0] + '][' + aAux[1] + '][' + oField.sFieldName + ']').value =='NaN') document.getElementById(aAux[0] + '][' + aAux[1] + '][' + oField.sFieldName + ']').value = ''; // save var symbol the response var symbol = document.getElementById(aAux[0]+']['+ aAux[1] + '][' + oField.sFieldName + ']').value.replace(/[0-9.\s]/g,''); this.executeEvent(document.getElementById(aAux[0]+']['+ aAux[1] + '][' + oField.sFieldName + ']'), 'keypress'); // replace symbol - for '' document.getElementById(aAux[0]+']['+ aAux[1] + '][' + oField.sFieldName + ']').value = document.getElementById(aAux[0]+']['+ aAux[1] + '][' + oField.sFieldName + ']').value.replace('-',''); // set var symbol document.getElementById(aAux[0]+']['+ aAux[1] + '][' + oField.sFieldName + ']').value = symbol+''+document.getElementById(aAux[0]+']['+ aAux[1] + '][' + oField.sFieldName + ']').value; // return focus the field typed if (typeof document.getElementById(domId) != 'undefined') { document.getElementById(domId).focus(); } if (this.aFunctions.length > 0) { for (i = 0; i < this.aFunctions.length; i++) { oAux = document.getElementById('form[' + this.sGridName + '][' + aAux[1] + '][' + this.aFunctions[i].sFieldName + ']'); if (oAux) { if (oAux.name == aAux[0] + '][' + aAux[1] + '][' + oField.sFieldName + ']') { switch (this.aFunctions[i].sFunction) { case 'sum': this.sum(false, oAux); break; case 'avg': this.avg(false, oAux); break; } if (oAux.fireEvent) { oAux.fireEvent('onchange'); } else { var evObj = document.createEvent('HTMLEvents'); evObj.initEvent('change', true, true); oAux.dispatchEvent(evObj); } } } } } } else { new leimnud.module.app.alert().make( { label : "Check your formula!\n\n" + oField.sFormula }); } }; /*add*/ this.deleteGridRownomsg = function(sRow) { var i, iRow, iRowAux, oAux, ooAux; //action : function() { //this.aElements = []; sRow = sRow.replace('[', ''); sRow = sRow.replace(']', ''); iRow = Number(sRow); /* * delete the respective session row grid variables from * Dynaform - by Nyeke 0) { if (aObjects[0]) { aObjects[0].id = aObjects[0].id.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]'); aObjects[0].name = aObjects[0].id.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]'); if (aObjects[0].onclick) { sAux = new String(aObjects[0].onclick); eval('aObjects[0].onclick = ' + sAux.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]') + ';'); } } aObjects = oCell1.getElementsByTagName('a'); if (aObjects) { if (aObjects[0]) { if (aObjects[0].onclick) { sAux = new String(aObjects[0].onclick); eval('aObjects[0].onclick = ' + sAux.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]') + ';'); } } } } //oCell1.innerHTML= aux.innerHTM; break; case '= 0; j--) { aObjects1[0].options[j] = * null; } */ aObjects1[0].options.length = 0; for ( var j = 0; j < aObjects2[0].options.length; j++) { var optn = $dce("OPTION"); optn.text = aObjects2[0].options[j].text; optn.value = aObjects2[0].options[j].value; aObjects1[0].options[j] = optn; } aObjects1[0].value = vValue; } break; case ' 0) { this.unsetFields(); }*/ //this slice of code was added to fill the grid after to delete some row this.aElements = []; for (var k=1;k<= this.oGrid.rows.length-2;k++){ for (var i = 0; i < this.aFields.length; i++) { var j = k; switch (this.aFields[i].sType) { case 'text': this.aElements.push(new G_Text(oForm, document.getElementById('form[' + this.sGridName + '][' + j + '][' + this.aFields[i].sFieldName + ']'), this.sGridName + '][' + j + '][' + this.aFields[i].sFieldName)); this.aElements[this.aElements.length - 1].validate = this.aFields[i].oProperties.validate; if(this.aFields[i].oProperties.strTo) { this.aElements[this.aElements.length - 1].strTo = this.aFields[i].oProperties.strTo; } break; case 'currency': this.aElements.push(new G_Currency(oForm, document.getElementById('form[' + this.sGridName + '][' + j + '][' + this.aFields[i].sFieldName + ']'), this.sGridName + '][' + j + ']['+ this.aFields[i].sFieldName)); break; case 'percentage': this.aElements.push(new G_Percentage(oForm, document.getElementById('form[' + this.sGridName + '][' + j + '][' + this.aFields[i].sFieldName + ']'), this.sGridName + '][' + j+ '][' + this.aFields[i].sFieldName)); break; case 'dropdown': this.aElements.push(new G_DropDown(oForm, document.getElementById('form[' + this.sGridName + '][' + j + '][' + this.aFields[i].sFieldName + ']'), this.sGridName + '][' + j + ']['+ this.aFields[i].sFieldName)); break; } j++; } } if (this.aFunctions.length > 0) { for (i = 0; i < this.aFunctions.length; i++) { oAux = document.getElementById('form[' + this.sGridName + '][1][' + this.aFunctions[i].sFieldName + ']'); if (oAux) { switch (this.aFunctions[i].sFunction) { case 'sum': this.sum(false, oAux); /* aaAux=oAux.name.split(']['); sNamef=aaAux[2].replace(']', ''); var sumaSol = 0; this.aElements.length; var j=1;k=0; for ( var i = 0; i < this.aElements.length; i++) { nnName= this.aElements[i].name.split(']['); if (nnName[2] == sNamef && j <= (this.oGrid.rows.length-2)){ ooAux=this.getElementByName(j, nnName[2]); if(ooAux!=null){ sumaSol += parseFloat(G.cleanMask(ooAux.value() || 0, ooAux.mask).result.replace(/,/g, '')) } j++; } } sumaSol = sumaSol.toFixed(2); oAux = document.getElementById('form[SYS_GRID_AGGREGATE_' + oGrid.sGridName + '_' + sNamef + ']'); oAux.value = sumaSol; oAux = document.getElementById('form[SYS_GRID_AGGREGATE_' + oGrid.sGridName + '__' + sNamef + ']'); oAux.innerHTML = sumaSol;//return; */ break; case 'avg': this.avg(false, oAux); break; } } } } if (this.ondeleterow) { this.ondeleterow(); } //}.extend(this) }; /*add end*/ }; /** * Delete the respective session row grid variables from Dynaform * * @Param grid * [object: grid] * @Param sRow * [integer: row index] * @author Erik Amaru Ortiz */ function deleteRowOnDynaform(grid, sRow) { var oRPC = new leimnud.module.rpc.xmlhttp( { url : '../gulliver/genericAjax', args : 'request=deleteGridRowOnDynaform&gridname=' + grid.sGridName + '&rowpos=' + sRow + '&formID=' + grid.form.id }); oRPC.callback = function(rpc) { if(oPanel) oPanel.loader.hide(); scs = rpc.xmlhttp.responseText.extractScript(); scs.evalScript(); /** * We verify if the debug panel is open, if it is-> update its content */ if ( typeof(oDebuggerPanel) != 'undefined' && oDebuggerPanel != null) { oDebuggerPanel.clearContent(); oDebuggerPanel.loader.show(); var oRPC = new leimnud.module.rpc.xmlhttp( { url : 'cases_Ajax', args : 'action=showdebug' }); oRPC.callback = function(rpc) { oDebuggerPanel.loader.hide(); var scs = rpc.xmlhttp.responseText.extractScript(); oDebuggerPanel.addContent(rpc.xmlhttp.responseText); scs.evalScript(); }.extend(this); oRPC.make(); } }.extend(this); oRPC.make(); }