diff --git a/gulliver/js/form/core/form.js b/gulliver/js/form/core/form.js index ef1cbd8ec..cda923535 100755 --- a/gulliver/js/form/core/form.js +++ b/gulliver/js/form/core/form.js @@ -3,1297 +3,1443 @@ function G_Form ( element, id ) { - var me=this; - this.info = { - name:'G_Fom', - version :'1.0' - }; - /*this.module=RESERVED*/ - this.formula=''; - this.element=element; - if (!element) return; - this.id=id; - this.aElements=[]; - this.ajaxServer=''; - this.getElementIdByName = function (name) { - if (name=='') return -1; - var j; - for(j=0;j=0) return me.aElements[i]; else return null; + return -1; + }; + this.getElementByName = function (name) { + var i=me.getElementIdByName(name); + if (i>=0) return me.aElements[i]; else return null; + }; + this.hideGroup = function( group, parentLevel ){ + if (typeof(parentLevel)==='undefined') parentLevel = 1; + for( var r=0 ; r < me.aElements.length ; r++ ) { + if ((typeof(me.aElements[r].group)!=='undefined') && (me.aElements[r].group == group )) + me.aElements[r].hide(parentLevel); } - this.hideGroup = function( group, parentLevel ){ - if (typeof(parentLevel)==='undefined') parentLevel = 1; - for( var r=0 ; r < me.aElements.length ; r++ ) { - if ((typeof(me.aElements[r].group)!=='undefined') && (me.aElements[r].group == group )) - me.aElements[r].hide(parentLevel); - } + }; + this.showGroup = function( group, parentLevel ){ + if (typeof(parentLevel)==='undefined') parentLevel = 1; + for( var r=0 ; r < me.aElements.length ; r++ ) { + if ((typeof(me.aElements[r].group)!=='undefined') && (me.aElements[r].group == group )) + me.aElements[r].show(parentLevel); } - this.showGroup = function( group, parentLevel ){ - if (typeof(parentLevel)==='undefined') parentLevel = 1; - for( var r=0 ; r < me.aElements.length ; r++ ) { - if ((typeof(me.aElements[r].group)!=='undefined') && (me.aElements[r].group == group )) - me.aElements[r].show(parentLevel); - } + }; + this.verifyRequiredFields=function(){ + var valid=true; + for(var i=0;i -1) { + dependentFields = dependentFields.split(','); } - this.show = function( parentLevel ){ - if (typeof(parentLevel)==='undefined') parentLevel = 1; - var parent = me.element; - for( var r=0; r< parentLevel ; r++ ) - parent = parent.parentNode; - parent.style.display = ''; + else { + dependentFields = dependentFields.split('|'); } - this.setDependentFields = function(dependentFields) { - var i; - if (dependentFields.indexOf(',') > -1) { - dependentFields = dependentFields.split(','); - } - else { - dependentFields = dependentFields.split('|'); - } - for(i=0;i=0) { - me.dependentFields[i] = me.form.getElementByName(dependentFields[i]); - me.dependentFields[i].addDependencie(me); - } - } + for(i=0;i=0) { + me.dependentFields[i] = me.form.getElementByName(dependentFields[i]); + me.dependentFields[i].addDependencie(me); + } } - this.addDependencie = function (field) { - var exists = false; - for (i=0;i -1) { + var aAux = oAux.name.split(']['); + grid = aAux[0]; + row = aAux[1]; + eval("var oAux2 = {" + aAux[2] + ":'" + oAux.value() + "'}"); + fields = fields.concat(oAux2); + } + else { + fields = fields.concat(me.dependentFields[i].dependentOf); + } + } + } } - this.updateDepententFields=function(event) { - var tempValue; - if (me.dependentFields.length===0) return true; - var fields=[],i,grid='',row=0; - for(i in me.dependentFields) { - if (me.dependentFields[i].dependentOf) { - for (var j = 0; j < me.dependentFields[i].dependentOf.length; j++) { - var oAux = me.dependentFields[i].dependentOf[j]; - if (oAux.name.indexOf('][') > -1) { - var aAux = oAux.name.split(']['); - grid = aAux[0]; - row = aAux[1]; - eval("var oAux2 = {" + aAux[2] + ":'" + oAux.value() + "'}"); - fields = fields.concat(oAux2); - } - else { - fields = fields.concat(me.dependentFields[i].dependentOf); - } - } - } + var callServer; + callServer = new leimnud.module.rpc.xmlhttp({ + url : me.form.ajaxServer, + async : false, + method : "POST", + args : "function=reloadField&" + 'form='+encodeURIComponent(me.form.id)+'&fields='+encodeURIComponent(fields.toJSONString())+(grid!=''?'&grid='+grid:'')+(row>0?'&row='+row:'') + }); + callServer.make(); + var response = callServer.xmlhttp.responseText; + //Validate the response + if (response.substr(0,1)==='[') { + var newcont; + eval('newcont=' + response + ';'); + if (grid == '') { + //alert('1'); + for(var i=0;i0?'&row='+row:'') - }); - callServer.make(); - var response = callServer.xmlhttp.responseText; - //Validate the response - if (response.substr(0,1)==='[') { - var newcont; - eval('newcont=' + response + ';'); - if (grid == '') { - for(var i=0;i0?'&row='+row:'') - }); - checkCallServer.make(); - - var dependentList = eval(checkCallServer.xmlhttp.responseText); - var field ; - var oAuxJs; - for ( index in dependentList ){ - field = 'form[grid]['+ row +']['+dependentList[index]+']'; - // alert(field); - oAuxJs = document.getElementById(field); - // alert (oAuxJs.value); - if ( oAuxJs!=null ){ - if (oAuxJs.value!="") { - if ( oAuxJs.fireEvent ) { - oAuxJs.fireEvent("onchange"); - } else { - var evObj = document.createEvent( 'HTMLEvents' ); - evObj.initEvent( 'change', true, true ); - oAuxJs.dispatchEvent(evObj); - } + } + else { + //alert('2: ' + newcont.length); + for(var i=0;i0?'&row='+row:'') + }); + checkCallServer.make(); + + var dependentList = eval(checkCallServer.xmlhttp.responseText); + var field ; + var oAuxJs; + for ( index in dependentList ){ + field = 'form[grid]['+ row +']['+dependentList[index]+']'; + // alert(field); + oAuxJs = document.getElementById(field); + // alert (oAuxJs.value); + if ( oAuxJs!=null ){ + if (oAuxJs.value!="") { + if ( oAuxJs.fireEvent ) { + oAuxJs.fireEvent("onchange"); + } else { + var evObj = document.createEvent( 'HTMLEvents' ); + evObj.initEvent( 'change', true, true ); + oAuxJs.dispatchEvent(evObj); + } + } + } + } } + return true; + }; + this.setValue = function(newValue) { + me.element.value = newValue; + }; + this.setContent = function(newContent) { - this.setAttributes = function (attributes) { - for(var a in attributes) { - if(a=='formula' && attributes[a]){ - //here we called a this function if it has a formula - sumaformu(this.element,attributes[a],attributes['mask']); - }//end formula - - switch (typeof(attributes[a])) { - case 'string': - case 'int': - case 'boolean': - if (a != 'strTo') { - switch (true) { - case typeof(me[a])==='undefined': - case typeof(me[a])==='object': - case typeof(me[a])==='function': - case a==='isObject': - case a==='isArray': - break; - default: - me[a] = attributes[a]; - } - } - else { - me[a] = attributes[a]; - } + }; + + this.setAttributes = function (attributes) { + for(var a in attributes) { + if(a=='formula' && attributes[a]){ + //here we called a this function if it has a formula + sumaformu(this.element,attributes[a],attributes['mask']); + }//end formula + + switch (typeof(attributes[a])) { + case 'string': + case 'int': + case 'boolean': + if (a != 'strTo') { + switch (true) { + case typeof(me[a])==='undefined': + case typeof(me[a])==='object': + case typeof(me[a])==='function': + case a==='isObject': + case a==='isArray': + break; + default: + me[a] = attributes[a]; } - - } + } + else { + me[a] = attributes[a]; + } + } + } - this.value=function() { - return me.element.value; - } - this.toJSONString=function() { - return '{'+me.name+':'+me.element.value.toJSONString()+'}'; - } - this.highLight=function(){ - try{ - G.highLight(me.element); - if (G.autoFirstField) { - me.element.focus(); - G.autoFirstField=false; - setTimeout("G.autoFirstField=true;",1000); - } - } catch (e){ - } + }; + this.value=function() { + return me.element.value; + }; + this.toJSONString=function() { + return '{'+me.name+':'+me.element.value.toJSONString()+'}'; + }; + this.highLight=function(){ + try{ + G.highLight(me.element); + if (G.autoFirstField) { + me.element.focus(); + G.autoFirstField=false; + setTimeout("G.autoFirstField=true;",1000); + } + } catch (e){ } + }; } function G_DropDown( form, element, name ) { - var me=this; - this.parent = G_Field; - this.parent( form, element, name ); - this.setContent=function(content) { - var dd=me.element; - var browser = getBrowserClient(); - if (browser.name=='msie'){ - while(dd.options.length>1) dd.remove(0); - } else { - for (var key in dd.options){ - dd.options[key] = null; - } - } - // the remove function is no longer reliable - // while(dd.options.length>1) dd.remove(0); - for(var o=0;o1) dd.remove(0); + } else { + for (var key in dd.options){ + dd.options[key] = null; } } - if (!element) return; - leimnud.event.add(this.element,'change',this.updateDepententFields); + // the remove function is no longer reliable + // while(dd.options.length>1) dd.remove(0); + for(var o=0;o 57) && (keyCode != 8 && keyCode != 0 && keyCode != 46)) return false; - if((keyCode===118 || keyCode===86) && event.ctrlKey) return false; - if (event.ctrlKey) return true; - if (event.altKey) return true; - if (event.shiftKey) return true; - } //alert(keyCode +" \n"+event.ctrlKey); - if ((keyCode===0) ) if (event.keyCode===46) return true; else return true; - if ( (keyCode===8)) return true; - if (me.mask ==='') { - if (me.validate == 'NodeName') { - if (me.getCursorPos() == 0) { - if ((keyCode >= 48) && (keyCode <= 57)) { - return false; - } - } - var k=new leimnud.module.validator({ - valid :['Field'], - key :event, - lang :(typeof(me.language)!=='undefined')?me.language:"en" - }); - return k.result(); - } - else { - switch(me.validate){ - case "Int": - if ((keyCode > 47) && (keyCode < 58) || ( keyCode == 118 && event.ctrlKey)|| (keyCode == 120 && event.ctrlKey)) { - return true; - }else{ - return false; - } - break; - case "Alpha": - if (keyCode==8) return true; - patron =/[A-Za-z\sáéíóúäëïöüñçÇÑ�É�ÓÚÄË�ÖÜ]/; - te = String.fromCharCode(keyCode); - return patron.test(te); - break; - case "AlphaNum": - if (keyCode==8) return true; - patron =/[A-Za-z0-9\sáéíóúäëïöüñçÇÑ�É�ÓÚÄË�ÖÜ]/; - te = String.fromCharCode(keyCode); - return patron.test(te); - break; - default: - var k=new leimnud.module.validator({ - valid :[me.validate], - key :event, - lang :(typeof(me.language)!=='undefined')?me.language:"en" - }); - return k.result(); - break; - } - } - } else { - //return true; - if (doubleChange) { - doubleChange=false; - return false; - } - if(navigator.appName!='Microsoft Internet Explorer') - var sel = me.getSelectionRange(); - else - var sel = me.getCursorP(me.element); - - var myValue = String.fromCharCode(keyCode); - var startPos=sel.selectionStart; - var endPos=sel.selectionEnd; - var myField = me.element; - var newValue = myField.value - if (keyCode===8) { - if (startPos>0) - newValue = myField.value.substring(0, startPos + ((startPos==endPos)?-1:0) ) - + myField.value.substring(endPos, myField.value.length); - } else { - newValue = myField.value.substring(0, startPos) - + myValue - + myField.value.substring(endPos, myField.value.length); - } - var Esperado = newValue; - startPos++; -//alert( newValue.result +'\n'+ me.mask +'\n'+ startPos ); - var newValue2=G.cleanMask( newValue, me.mask, startPos ); -//alert( newValue2.result +'\n'+ me.mask +'\n'+ startPos ); - newValue2=G.toMask( newValue2.result, me.mask, newValue2.cursor ); -//alert( newValue2.result +'\n'+ newValue2.cursor +'\n'+ newValue2.cursor ); - me.element.value=newValue2.result; - me.setSelectionRange(newValue2.cursor, newValue2.cursor); -//alert( me.element.value +'\n'+ me.mask +'\n'+ newValue2.cursor ); - - if (me.element.fireEvent) { - me.element.fireEvent("onchange"); - } else { - var evObj = document.createEvent('HTMLEvents'); - evObj.initEvent( 'change', true, true ); - me.element.dispatchEvent(evObj); - } - - return false; - } - } - -function replaceAll( text, busca, reemplaza ){ - while (text.toString().indexOf(busca) != -1) - text = text.toString().replace(busca,reemplaza); - return text; -} - -function isNumberMask (mask){ - for ( var key in mask){ - if (mask[key]!='#'&&mask[key]!=','&&mask[key]!='.'&&typeof(mask[key])=='string'){ - return false; - } + var me=this; + this.parent = G_Field; + this.parent( form, element, name ); + if (element) { + this.prev = element.value; } - return true; -} - - this.putFormatNumber =function (evt) { - if((typeof(evt)==="undefined" || evt===0) && me.mask!='' ){ - var numberSet=me.element.value.split('.'); -// if(numberSet.length >=2)return; - - maskD = me.mask.split(';'); - maskL = (maskD.length >1)?maskD[1]:maskD[0]; - if (maskL.search(",")==-1){ - return false; + this.validate = 'Any'; + this.mask=''; + this.required=false; + this.formula=''; + this.key_Change = false; + var doubleChange=false; + + //FUNCTIONS + + function IsUnsignedInteger(YourNumber){ + var Template = /^d+$/; //Formato de numero entero sin signo + return (Template.test(YourNumber)) ? 1 : 0; //Compara "YourNumber" con el formato "Template" y si coincidevuelve verdadero si no devuelve falso + } + + function replaceAll( text, busca, reemplaza ){ + while (text.toString().indexOf(busca) != -1) + text = text.toString().replace(busca,reemplaza); + return text; + } + + function isNumberMask (mask){ + for ( var key in mask){ + if (mask[key]!='#'&&mask[key]!=','&&mask[key]!='.'&&typeof(mask[key])=='string'){ + return false; } - maskWithoutC =replaceAll(maskL,",",""); - //maskWithoutC =replaceAll(maskWithoutC,".",""); - //maskWithoutC =replaceAll(maskWithoutC,"#",""); -// maskWithoutC =replaceAll(maskWithoutC,"%",""); - maskWithoutC =replaceAll(maskWithoutC," ",""); - maskWithoutPto=replaceAll(maskWithoutC,".",""); - if(numberSet.length >=2){ - if(maskWithoutPto.substr( (maskWithoutPto.length -1) ,maskWithoutPto.length) =="%") - me.element.value = me.element.value+' '+maskWithoutPto.substr( (maskWithoutPto.length -1) ,maskWithoutPto.length); - return; + } + return true; + } + + function renderNewValue(element, keyCode){ + var myField = element; + var myValue = myField.value; + var cursorPos = 0; + var csel; + var newValue = ''; + var csel = me.getCursorPosition(); + var startPos = csel.selectionStart; + var endPos = csel.selectionEnd; + switch(keyCode){ + case 8: + if (startPos>0) { + newValue = myValue.substring(0, startPos-1); + newValue = newValue + myValue.substring(endPos, myField.value.length); + } + break; + case 46: + newValue = myValue.substring(0, startPos); + newValue = newValue + myValue.substring(endPos+1, myField.value.length); + break; + } + return {result: newValue, cursor: startPos}; + } + + //MEMBERS + + this.setContent = function(content) { + me.element.value = ''; + if (content.options) { + if (content.options[0]) { + me.element.value = content.options[0].value; } - - maskElemnts = maskWithoutC.split('.'); - maskpartInt = maskElemnts[0].split(''); - //in here is the int part maskpartInt - //numberwc = me.element.value.replaceAll(".","").replaceAll(",",""); - numberwc = replaceAll(me.element.value,",", ""); - numberwc = replaceAll(numberwc,".", ""); - onlynumber = replaceAll(numberwc,".", ""); - onlynumber = replaceAll(numberwc," ", ""); - onlynumber = replaceAll(numberwc,"%", ""); - if(onlynumber=='') return false; - cd = parseInt(Math.log(onlynumber)/Math.LN10+1); - var auxnumber = onlynumber; - var cdaux=0; - while(auxnumber > 0){ - cdaux++; - auxnumber =parseInt(auxnumber / 10); - } - cd=cdaux; - /* - ///we added this slice of code to complete with zeros a number if is needed - var cdnum = cdaux; - while(cdnum < maskWithoutPto.length){ - onlynumber=parseInt(onlynumber)*10; - cdnum++; - } - var numberFormat=''; - var r=maskL.length -1 ; - while(r >= 0){ - var slicemask=maskL.substr(r,1); - switch(slicemask){ - case '#': - lastdig = onlynumber % 10; - numberFormat = lastdig.toString() + numberFormat; - onlynumber = parseInt(onlynumber / 10); - break; - default: - numberFormat = slicemask + numberFormat; - break; - } - r--; - } - me.element.value = numberFormat; - ///////// end the slice code ... complete with zeros - return; - */ - if (isNumberMask(maskpartInt)){ - if(cd < maskpartInt.length && cd >= 4 && cd !=3){ - var newNumber=''; - var cc=1; - //alert (onlynumber); - while (onlynumber > 0){ - lastdigito = onlynumber % 10; - if (cc%3==0 && cd != cc){ - newNumber = ','+lastdigito.toString() + newNumber; - } else { - newNumber = lastdigito.toString() + newNumber; - } - onlynumber =parseInt(onlynumber / 10); - cc++; - } - if(maskWithoutPto.substr( (maskWithoutPto.length -1) ,maskWithoutPto.length) =="%") - me.element.value = newNumber+' '+maskWithoutPto.substr( (maskWithoutPto.length -1) ,maskWithoutPto.length); - else - me.element.value = newNumber; - } else { - if(maskWithoutPto.substr( (maskWithoutPto.length -1) ,maskWithoutPto.length) =="%") - var spaceString; - if (me.element.value.substr( (me.element.value.length -1) ,me.element.value.length) == '%' ){ - spaceString =''; - me.element.value = onlynumber + spaceString + maskWithoutPto.substr( (maskWithoutPto.length -1) ,maskWithoutPto.length); - } else { - spaceString =' '; - me.element.value = onlynumber; - } + } + }; + + this.validateKey = function(event){ + attributes = elementAttributesNS(element, 'pm'); + if(me.element.readOnly) return true; + me.prev = me.element.value; + if (window.event) event=window.event; + var keyCode= window.event ? event.keyCode : event.which ; + me.mask = typeof(me.mask)==='undefined'?'':me.mask; + if(me.mask=='yyyy-mm-dd'){ + attributes.mask=attributes.mask.replace('%d','dd'); + attributes.mask=attributes.mask.replace('%m','mm'); + attributes.mask=attributes.mask.replace('%y','yy'); + attributes.mask=attributes.mask.replace('%Y','yyyy'); + me.mask=attributes.mask; + } + if (me.mask !=='' ) { + if ((keyCode < 48 || keyCode > 57) && (keyCode != 8 && keyCode != 0 && keyCode != 46)) return false; + if((keyCode===118 || keyCode===86) && event.ctrlKey) return false; + if (event.ctrlKey) return true; + if (event.altKey) return true; + if (event.shiftKey) return true; + } + if ((keyCode===0) ) if (event.keyCode===46) return true; else return true; + if ( (keyCode===8)) return true; + if (me.mask ==='') { + if (me.validate == 'NodeName') { + if (me.getCursorPos() == 0) { + if ((keyCode >= 48) && (keyCode <= 57)) { + return false; } } + var k=new leimnud.module.validator({ + valid :['Field'], + key :event, + lang :(typeof(me.language)!=='undefined')?me.language:"en" + }); + return k.result(); + }else{ + switch(me.validate){ + case "Int": + if ((keyCode > 47) && (keyCode < 58) || ( keyCode == 118 && event.ctrlKey)|| (keyCode == 120 && event.ctrlKey)) { + return true; + }else{ + return false; + } + break; + case "Alpha": + if (keyCode==8) return true; + patron =/[A-Za-z\sáéíóúäëïöüñçÇÑ�É�ÓÚÄË�ÖÜ]/; + te = String.fromCharCode(keyCode); + return patron.test(te); + break; + case "AlphaNum": + if (keyCode==8) return true; + patron =/[A-Za-z0-9\sáéíóúäëïöüñçÇÑ�É�ÓÚÄË�ÖÜ]/; + te = String.fromCharCode(keyCode); + return patron.test(te); + break; + default: + var k=new leimnud.module.validator({ + valid :[me.validate], + key :event, + lang :(typeof(me.language)!=='undefined')?me.language:"en" + }); + return k.result(); + break; + } + } + }else{ + var csel = me.getCursorPosition(); + var myValue = String.fromCharCode(keyCode); + var startPos = csel.selectionStart; + var endPos = csel.selectionEnd; + var myField = me.element; + var oldValue = myField.value; + var newValue = ''; + + newValue = oldValue.substring(0, startPos); + newValue = newValue + myValue; + newValue = newValue + oldValue.substring(endPos, oldValue.length); + + startPos++; + + var newValue2; + newValue2 = G.toMask(newValue, me.mask, startPos); + me.element.value = newValue2.result; + me.setSelectionRange(newValue2.cursor, newValue2.cursor); + + if (me.element.fireEvent){ + me.element.fireEvent("onchange"); + }else{ + var evObj = document.createEvent('HTMLEvents'); + evObj.initEvent( 'change', true, true ); + me.element.dispatchEvent(evObj); + } + return false; + } + }; + + this.putFormatNumber =function (evt) { + if((typeof(evt)==="undefined" || evt===0) && me.mask!='' ){ +// var numberSet=me.element.value.split('.'); +// maskD = me.mask.split(';'); +// maskL = (maskD.length >1)?maskD[1]:maskD[0]; +// if (maskL.search(",")==-1){ +// return false; +// } +// maskWithoutC =replaceAll(maskL,",",""); +// maskWithoutC =replaceAll(maskWithoutC," ",""); +// maskWithoutPto=replaceAll(maskWithoutC,".",""); +// if(numberSet.length >=2){ +// if(maskWithoutPto.substr( (maskWithoutPto.length -1) ,maskWithoutPto.length) =="%") +// me.element.value = me.element.value+' '+maskWithoutPto.substr( (maskWithoutPto.length -1) ,maskWithoutPto.length); +// return; +// } +// +// maskElemnts = maskWithoutC.split('.'); +// maskpartInt = maskElemnts[0].split(''); +// numberwc = replaceAll(me.element.value,",", ""); +// numberwc = replaceAll(numberwc,".", ""); +// onlynumber = replaceAll(numberwc,".", ""); +// onlynumber = replaceAll(numberwc," ", ""); +// onlynumber = replaceAll(numberwc,"%", ""); +// if(onlynumber=='') return false; +// cd = parseInt(Math.log(onlynumber)/Math.LN10+1); +// var auxnumber = onlynumber; +// var cdaux=0; +// while(auxnumber > 0){ +// cdaux++; +// auxnumber =parseInt(auxnumber / 10); +// } +// cd=cdaux; +// +// if (isNumberMask(maskpartInt)){ +// if(cd < maskpartInt.length && cd >= 4 && cd !=3){ +// var newNumber=''; +// var cc=1; +// while (onlynumber > 0){ +// lastdigito = onlynumber % 10; +// if (cc%3==0 && cd != cc){ +// newNumber = ','+lastdigito.toString() + newNumber; +// } else { +// newNumber = lastdigito.toString() + newNumber; +// } +// onlynumber =parseInt(onlynumber / 10); +// cc++; +// } +// if(maskWithoutPto.substr( (maskWithoutPto.length -1) ,maskWithoutPto.length) =="%") +// me.element.value = newNumber+' '+maskWithoutPto.substr( (maskWithoutPto.length -1) ,maskWithoutPto.length); +// else +// me.element.value = newNumber; +// }else{ +// if(maskWithoutPto.substr( (maskWithoutPto.length -1) ,maskWithoutPto.length) =="%") +// var spaceString; +// if (me.element.value.substr( (me.element.value.length -1) ,me.element.value.length) == '%' ){ +// spaceString =''; +// me.element.value = onlynumber + spaceString + maskWithoutPto.substr( (maskWithoutPto.length -1) ,maskWithoutPto.length); +// } else { +// spaceString =' '; +// me.element.value = onlynumber; +// } +// } +// } + } + }; + + this.preValidateChange=function(event) { + var oNewValue; + var newValueR; + me.putFormatNumber(event); + if(me.element.readOnly) return true; + if (me.mask ==='') return true; + if (event.keyCode === 8){ + oNewValue = renderNewValue(me.element,event.keyCode); + newValueR = G.toMask(oNewValue.result, me.mask, oNewValue.cursor ); + me.element.value=newValueR.result; + me.setSelectionRange(oNewValue.cursor - 1, oNewValue.cursor - 1); + return false; + } + if (event.keyCode === 46){ + oNewValue = renderNewValue(me.element,event.keyCode); + newValueR = G.toMask(oNewValue.result, me.mask, oNewValue.cursor ); + me.element.value=newValueR.result; + me.setSelectionRange(oNewValue.cursor, oNewValue.cursor); + return false; + } + me.prev=me.element.value; + return true; + }; + + this.execFormula=function(event) { + if( me.formula != ''){ + leimnud.event.add(getField('faa'),'keypress',function(){ + alert(getField('faa').value); + }); + } + return false; + }; + + this.validateChange=function(event) { + if (me.mask ==='') return true; + var sel=me.getSelectionRange(); + var newValue2=G.cleanMask( me.element.value, me.mask, sel.selectionStart ); + newValue2=G.toMask( newValue2.result, me.mask, newValue2.cursor); + me.element.value = newValue2.result; + me.setSelectionRange(newValue2.cursor, newValue2.cursor); + return true; + }; + + this.value=function() + { + return me.element.value; + }; + + //Get Cursor Position + this.getCursorPos = function () { + var textElement=me.element; + if (!document.selection) return textElement.selectionStart; + //save off the current value to restore it later, + var sOldText = textElement.value; + //create a range object and save off it's text + var objRange = document.selection.createRange(); + var sOldRange = objRange.text; + //set this string to a small string that will not normally be encountered + var sWeirdString = '#%~'; + //insert the weirdstring where the cursor is at + objRange.text = sOldRange + sWeirdString; + objRange.moveStart('character', (0 - sOldRange.length - sWeirdString.length)); + //save off the new string with the weirdstring in it + var sNewText = textElement.value; + //set the actual text value back to how it was + objRange.text = sOldRange; + //look through the new string we saved off and find the location of + //the weirdstring that was inserted and return that value + for (i=0; i <= sNewText.length; i++) { + var sTemp = sNewText.substring(i, i + sWeirdString.length); + if (sTemp == sWeirdString) { + var cursorPos = (i - sOldRange.length); + return cursorPos; } } - - this.preValidateChange=function(event) { //alert(event.keyCode); - me.putFormatNumber(event); - /* if(cd < maskpartInt.length && cd >= 4 && cd !=3){ - var newnamber=''; - var cc=1; - while (onlynumber >0){ - lastdigito = onlynumber % 10; - - if (cc%3==0 && cd != cc){ - newnamber = ','+lastdigito.toString() + newnamber; - } else { - newnamber = lastdigito.toString() + newnamber; - } - - onlynumber =parseInt(onlynumber / 10); - cc++; - } - me.element.value = newnamber; - } - }//end me.mask - }*/ - if(me.element.readOnly) return true; - if (me.mask ==='') return true; - if (event.keyCode===46) { - var sel=me.getSelectionRange(); - var startPos = sel.selectionStart; - var endPos = sel.selectionEnd; - var myField = me.element; - var newValue = myField.value - if (startPos0) { - newValue = myField.value.substring(0, startPos-1) - + myField.value.substring(endPos, myField.value.length); - newValue2=G.cleanMask( newValue, me.mask, startPos ); - newValue2=G.toMask( newValue2.result, me.mask, newValue2.cursor ); - me.element.value=newValue2.result; - me.setSelectionRange(startPos-1, startPos-1); - } - }else{ - var sel=me.getSelectionRange(); - //var sel = me.getCursorP(me.element); - var startPos = sel.selectionStart; - var endPos = sel.selectionEnd; - var myField = me.element; - var newValue = myField.value; - if (startPos>0) { - //newValue = myField.value.substring(0, startPos-1) - newValue = myField.value.substring(0, startPos); - //+ myField.value.substring(endPos, myField.value.length); - + myField.value.substring(endPos+1, myField.value.length); - newValue2=G.cleanMask( newValue, me.mask, startPos ); - newValue2=G.toMask( newValue2.result, me.mask, newValue2.cursor ); - //me.element.value=newValue2.result; ///it was commented because it is putting a incomplete number - //me.setSelectionRange(startPos-1, startPos-1); - me.setSelectionRange(startPos, startPos); - } - } - return false; - } - me.prev=me.element.value; - return true; + } + }else{ + var sel={ + selectionStart: 0, + selectionEnd: 0 + }; + sel.selectionStart = me.element.selectionStart; + sel.selectionEnd = me.element.selectionEnd; + return sel; } - this.execFormula=function(event) { - - //alert(me.formula); return; - - if( me.formula != ''){ - - leimnud.event.add(getField('faa'),'keypress',function(){ - alert(getField('faa').value); - }); - } - return false; - - } - this.validateChange=function(event) { - if (me.mask ==='') return true; - var sel=me.getSelectionRange(); - var newValue2=G.cleanMask( me.element.value, me.mask, sel.selectionStart ); - newValue2=G.toMask( newValue2.result, me.mask, newValue2.cursor); - me.element.value = newValue2.result; - me.setSelectionRange(newValue2.cursor, newValue2.cursor); - return true; - } - - this.value=function() - { - return me.element.value; - } - - this.getCursorPos = function () { + }; + + //FUNCTION MAYBE IT'S DEPRECATED + this.getCursorP =function (field) { + if (document.selection) { + field.focus(); + var oSel = document.selection.createRange(); + oSel.moveStart('character', -field.value.length); + field.selectionEnd = oSel.text.length; + oSel.setEndPoint('EndToStart', document.selection.createRange() ); + field.selectionStart = oSel.text.length; + } + return {selectionStart: field.selectionStart, selectionEnd: field.selectionEnd}; + }; + + //Gets cursor position + this.getCursorPosition = function(){ + if(navigator.appName == 'Microsoft Internet Explorer'){ + var field = me.element; + if (document.selection) { + field.focus(); + var oSel = document.selection.createRange(); + oSel.moveStart('character', -field.value.length); + field.selectionEnd = oSel.text.length; + oSel.setEndPoint('EndToStart', document.selection.createRange() ); + field.selectionStart = oSel.text.length; + } + return {selectionStart: field.selectionStart, selectionEnd: field.selectionEnd}; + }else{ + if (document.selection) { var textElement=me.element; - if (!document.selection) return textElement.selectionStart; - //save off the current value to restore it later, var sOldText = textElement.value; - - //create a range object and save off it's text var objRange = document.selection.createRange(); var sOldRange = objRange.text; - - //set this string to a small string that will not normally be encountered var sWeirdString = '#%~'; - - //insert the weirdstring where the cursor is at objRange.text = sOldRange + sWeirdString; objRange.moveStart('character', (0 - sOldRange.length - sWeirdString.length)); - - //save off the new string with the weirdstring in it var sNewText = textElement.value; - - //set the actual text value back to how it was objRange.text = sOldRange; - - //look through the new string we saved off and find the location of - //the weirdstring that was inserted and return that value for (i=0; i <= sNewText.length; i++) { - var sTemp = sNewText.substring(i, i + sWeirdString.length); - if (sTemp == sWeirdString) { - var cursorPos = (i - sOldRange.length); - return cursorPos; - } - } - } - this.setSelectionRange = function(selectionStart, selectionEnd) { - var input=me.element; - if (input.createTextRange) { - var range = input.createTextRange(); - range.collapse(true); - range.moveEnd('character', selectionEnd); - range.moveStart('character', selectionStart); - range.select(); - } - else if (input.setSelectionRange) { - input.focus(); - input.setSelectionRange(selectionStart, selectionEnd); - } - } - this.getSelectionRange = function() { - if (document.selection) { - var textElement=me.element; - var sOldText = textElement.value; - var objRange = document.selection.createRange(); - var sOldRange = objRange.text; - var sWeirdString = '#%~'; - objRange.text = sOldRange + sWeirdString; - objRange.moveStart('character', (0 - sOldRange.length - sWeirdString.length)); - var sNewText = textElement.value; - objRange.text = sOldRange; - for (i=0; i <= sNewText.length; i++) { - var sTemp = sNewText.substring(i, i + sWeirdString.length); - if (sTemp == sWeirdString) { - var cursorPos = (i - sOldRange.length); - return { - selectionStart: cursorPos, - selectionEnd: cursorPos+sOldRange.length - }; - } - } - } else { - var sel={ - selectionStart: 0, - selectionEnd: 0 + var sTemp = sNewText.substring(i, i + sWeirdString.length); + if (sTemp == sWeirdString) { + var cursorPos = (i - sOldRange.length); + return { + selectionStart: cursorPos, + selectionEnd: cursorPos+sOldRange.length }; - sel.selectionStart = me.element.selectionStart; - sel.selectionEnd = me.element.selectionEnd; - return sel; - } - } - - this.getCursorP =function (field) { - if (document.selection) { - field.focus(); - var oSel = document.selection.createRange(); - oSel.moveStart('character', -field.value.length); - field.selectionEnd = oSel.text.length; - oSel.setEndPoint('EndToStart', document.selection.createRange() ); - field.selectionStart = oSel.text.length; - } - return {selectionStart: field.selectionStart, selectionEnd: field.selectionEnd}; - } - - - - if (!element) return; - if (!window.event) - this.element.onkeypress = this.validateKey; - else - leimnud.event.add(this.element,'keypress',this.validateKey); - leimnud.event.add(this.element,'change',this.updateDepententFields); - - - - this.element.onblur=function(event) - { - var evt = event || window.event; - var keyPressed = evt.which || evt.keyCode; - me.putFormatNumber(keyPressed); - ////////////////////////////////////////// - /* - if(this.validate == 'Int'|| this.validate == 'Real'){ - alert(this.formula); - symOp=typeOperation(this.formula); - if(this.formula){ - operations=this.formula.split(symOp); - - var resdo=iniAcum(symOp); - for (var i=0;i=0;r--) num+= num0.substr(r,1); - return num; + /*MASK*/ + var reserved=['_',';','#','.','0','d','m','y','-']; + //Invert String + function invertir(num) + { + var num0=''; + num0=num; + num=""; + for(r=num0.length-1;r>=0;r--) num+= num0.substr(r,1); + return num; + } + + function __toMask(num, mask, cursor) + { + var inv=false; + if (mask.substr(0,1)==='_') { + mask=mask.substr(1); + inv=true; } - function __toMask(num, mask, cursor) + var re; + if (inv) { + mask=invertir(mask); + num=invertir(num); + } + var minAdd=-1; + var minLoss=-1; + var newCursorPosition=cursor; + var betterOut=""; + for(var r0=0;r0< mask.length; r0++){ + var out=""; var j=0; + var loss=0; + var add=0; + var cursorPosition=cursor; var i=-1; var dayPosition=0; var mounthPosition=0; + var dayAnalized =''; var mounthAnalized =''; + var blocks={}; //Declares empty object + for(var r=0;r< r0 ;r++) { + var e=false; + var m=mask.substr(r,1); + __parseMask(); + } + i=0; + for(r=r0;r< mask.length;r++) { + j++; + if (j>200) break; + e=num.substr(i,1); + e=(e==='')?false:e; + m=mask.substr(r,1); + __parseMask(); + } + var io=num.length - i; + io=(io<0)?0:io; + loss+=io; + loss=loss+add/1000; + //var_dump(loss); + if (loss===0) { + betterOut=out; + minLoss=0; + newCursorPosition=cursorPosition; + break; + } + if ((minLoss===-1)||(loss< minLoss)) { + minLoss=loss; + betterOut=out; + newCursorPosition=cursorPosition; + } + //echo('min:');var_dump($minLoss); + } + // var_dump($minLoss); + out=betterOut; + if (inv) { + out=invertir(out); + mask=invertir(mask); + } + return { + 'result':out, + 'cursor':newCursorPosition, + 'value':minLoss, + 'mask':mask + }; + function searchBlock( where , what ) { - var inv=false; - if (mask.substr(0,1)==='_') { - mask=mask.substr(1); - inv=true; - } - var re; - if (inv) { - mask=invertir(mask); - num=invertir(num); - } - var minAdd=-1; - var minLoss=-1; - var newCursorPosition=cursor; - var betterOut=""; - for(var r0=0;r0< mask.length; r0++) { - var out=""; - var j=0; - var loss=0; - var add=0; - loss=0; - add=0; - var cursorPosition=cursor; - var i=-1; - var dayPosition=0; - var mounthPosition=0; - var dayAnalized =''; - var mounthAnalized =''; - var blocks={}; - for(var r=0;r< r0 ;r++) { - var e=false; - var m=mask.substr(r,1); - __parseMask(); - } - i=0; - for(r=r0;r< mask.length;r++) { - j++; - if (j>200) break; - e=num.substr(i,1); - e=(e==='')?false:e; - m=mask.substr(r,1); - __parseMask(); - } - var io=num.length - i; - io=(io<0)?0:io; - loss+=io; - loss=loss+add/1000; - //var_dump($loss); - if (loss===0) { - betterOut=out; - minLoss=0; - newCursorPosition=cursorPosition; - break; - } - if ((minLoss===-1)||(loss< minLoss)) { - minLoss=loss; - betterOut=out; - newCursorPosition=cursorPosition; - } - //echo('min:');var_dump($minLoss); - } - // var_dump($minLoss); - out=betterOut; - if (inv) { - out=invertir(out); - mask=invertir(mask); - } - return { - 'result':out, - 'cursor':newCursorPosition, - 'value':minLoss, - 'mask':mask - }; - function searchBlock( where , what ) - { - for(var r=0; r < where.length ; r++ ) { - if (where[r].key === what) return where[r]; - } - } - function __parseMask() - { - var ok=true; - switch(false) { - case m==='d': - dayAnalized=''; - break; - case m==='m': - mounthAnalized=''; - break; - default: - } - if ( e!==false ) { - if (typeof(blocks[m])==='undefined') blocks[m] = e; else blocks[m] += e; - } - switch(m) { - case '0': - if (e===false) { - out+='0'; - add++; - break; - } - case 'y': - case '#': - if (e===false) { - out+=''; - break; - } - //Use direct comparition to increse speed of processing - if ((e==='0')||(e==='1')||(e==='2')||(e==='3')||(e==='4')||(e==='5')||(e==='6')||(e==='7')||(e==='8')||(e==='9')||(e==='-')) { - out+=e; - i++; - } else { - //loss - loss++; - i++; - r--; - } - break; - case '(': - if (e===false) { - out+=''; - break; - } - out+=m; - if (i3) ok=false - //dayPosition=(dayPosition+1) | 1; - if (ok) dayAnalized = dayAnalized + e; - if ((ok) && (parseInt(dayAnalized)>31)) ok = false; - if (ok) { - out+=e; - i++; + for(var r=0; r < where.length ; r++ ) { + if (where[r].key === what) return where[r]; + } + } + function __parseMask() + { + var ok=true; + switch(false) { + case m==='d': + dayAnalized=''; + break; + case m==='m': + mounthAnalized=''; + break; + default: + } + if ( e!==false ) { + if (typeof(blocks[m])==='undefined') blocks[m] = e; else blocks[m] += e; + } + switch(m) { + case '0': + if (e===false) { + out+='0'; + add++; + break; + } + case 'y': + case '#': + if (e===false) { + out+=''; + break; + } + //Use direct comparition to increse speed of processing + if ((e==='0')||(e==='1')||(e==='2')||(e==='3')||(e==='4')||(e==='5')||(e==='6')||(e==='7')||(e==='8')||(e==='9')||(e==='-')) { + out+=e; + i++; + } else { + //loss + loss++; + i++; + r--; + } + break; + case '(': + if (e===false) { + out+=''; + break; + } + out+=m; + if (i3) ok=false + //dayPosition=(dayPosition+1) | 1; + if (ok) dayAnalized = dayAnalized + e; + if ((ok) && (parseInt(dayAnalized)>31)) ok = false; + if (ok) { + out+=e; + i++; + + } else { + //loss + loss++; + i++; + r--; + } + break; + case 'm': + if (e===false) { + out+=''; + break; + } + if ((e==='0')||(e==='1')||(e==='2')||(e==='3')||(e==='4')||(e==='5')||(e==='6')||(e==='7')||(e==='8')||(e==='9')) ok=true; else ok=false; + if (ok) mounthAnalized = mounthAnalized + e; + if ((ok) && (parseInt(mounthAnalized)>12)) ok=false; + if (ok) { + out+=e; + i++; + } else { + //loss + loss++; + i++; + r--; + } + break; - } else { - //loss - loss++; - i++; - r--; - } - break; - case 'm': - if (e===false) { - out+=''; - break; - } - if ((e==='0')||(e==='1')||(e==='2')||(e==='3')||(e==='4')||(e==='5')||(e==='6')||(e==='7')||(e==='8')||(e==='9')) ok=true; else ok=false; - if (ok) mounthAnalized = mounthAnalized + e; - if ((ok) && (parseInt(mounthAnalized)>12)) ok=false; - if (ok) { - out+=e; - i++; - } else { - //loss - loss++; - i++; - r--; - } - break; - - default: - if (e===false) { - out+=''; - break; - } - if (e===m) { - out+=e; - i++; - }else { - - //if (m==='.') alert(i.toString() +'.'+ cursor.toString()); - out+=m; - /////here was krlos - add++; - if (i0){ //Mask has .0 + eMask = aMask.replace(__DECIMAL_SEP, ''); + eNum = aNum.replace(__DECIMAL_SEP, ''); + if (eNum.length > eMask.length){ + _outM = aNum.substring(0, eMask.length +1); + } + }else{ //Mask hasn't .0 + if (aMask.indexOf(__DECIMAL_SEP)>0){ // Mask contains decimal separator + iMask = aMask.split(__DECIMAL_SEP); + if (aNum.indexOf(__DECIMAL_SEP)>0){ //Number has decimal separator + iNum = aNum.split(__DECIMAL_SEP); + if (iNum[1].length > iMask[1].length){ + _outM = iNum[0] + __DECIMAL_SEP + iNum[1].substr(0,iMask[1].length); + }else{ + if (iNum[0].length > iMask[0].length){ + _outM = iNum[0].substr(0, iMask[0].length) + __DECIMAL_SEP + iNum[1]; + } + } + }else{ //Number has not decimal separator + if (aNum.length > iMask[0].length){ + _outM = aNum.substr(0, iMask[0].length); + } } - var betterResult=0; - for(r=1; r0){ + iNum = aNum.split(__DECIMAL_SEP); + if (iNum[0].length > aMask.length){ + _outM = iNum[0].substr(0,aMask.length); + } + }else{ + if (aNum.length > aMask.length){ + _outM = aNum.substr(0,aMask.length); + } } - return result[betterResult]; + } } - this.cleanMask = function (num, mask, cursor) - { - mask = typeof(mask)==='undefined'?'':mask; - if (mask==='') return { - 'result':new String(num), - 'cursor':cursor - }; - var a,r,others=[]; - num = new String(num); - //alert(oDebug.var_dump(num)); - if (typeof(cursor)==='undefined') cursor=0; - a = num.substr(0,cursor); - for(r=0; r0) { - r=others.length; - others[r] = mask.substr(0,1); - mask= mask.split(others[r]).join(''); - num = num.split(others[r]).join(''); - cursor -= a.split(others[r]).length-1;//alert(cursor) - } - return { - 'result':num, - 'cursor':cursor - }; - } - this.getId=function(element){ - var re=/(\[(\w+)\])+/; - var res=re.exec(element.id); - return res?res[2]:element.id; - } - this.getObject=function(element){ - var objId=G.getId(element); - switch (element.tagName){ - case 'FORM': - return eval('form_'+objId); - break; + //alert(_outM); + return _outM; + } + + //Apply a mask to a number + function _ApplyMask(num, mask, cursor){ + var __DECIMAL_SEP = '.'; + var osize = num.length; + num = _checkNumber(num, mask); + num = _getOnlyNumbers(num,__DECIMAL_SEP); + if (num.length == 0) return {result: '', cursor: 0}; + var iNum = invertir(num); + var iMask = invertir(mask); + if (iMask.indexOf('0'+__DECIMAL_SEP)> 0){ //Mask has .0 and will applied complete + aMask = iMask; + iNum = _getOnlyNumbers(iNum,'*'); + aNum = iNum; + eMask = aMask.split(''); + eNum = aNum.split(''); + _cout = ''; + for (e=0; e < eMask.length; e++){ + switch(eMask[e]){ + case '#': case '0': case 'd': case 'm': case 'y': + if (eNum.length > 0){ + key = eNum.shift(); + _cout += key; + } + break; + case '.': case ',': + if (eMask[e] != __DECIMAL_SEP){ + if (eNum.length > 0){ + _cout += eMask[e]; + } + }else{ + _cout += eMask[e]; + } + break; default: - if (element.form) { - var formId=G.getId(element.form); - return eval('form_'+objId+'.getElementByName("'+objId+'")'); - } + _cout += eMask[e]; + break; + } + } + _out = _cout; + }else{ + sw_d = false; + aMask = iMask.split(__DECIMAL_SEP); + aNum = iNum.split(__DECIMAL_SEP); + if (aMask.length==1){ + dMask = ''; + cMask = aMask[0]; + }else{ + dMask = aMask[0]; + cMask = aMask[1]; + } + if (aNum.length == 1){ + dNum = ''; + cNum = aNum[0]; + }else{ + sw_d = true; + dNum = aNum[0]; + cNum = aNum[1]; + } + _dout = ''; + + pMask = dMask.split(''); + pNum = dNum.split(''); + for (p=0; p < pMask.length; p++){ + switch(pMask[p]){ + case '#': case '0': + if (pNum.length > 0){ + key = pNum.shift(); + _dout += key; + } + break; + case ',': case '.': + if (pMask[p] != __DECIMAL_SEP){ + if (pNum.length > 0){ + _dout += pMask[p]; + } + }else{ + + } + break; + default: + _dout += pMask[p]; + break; + } + } + _cout = ''; + sw_c = false; + pMask = cMask.split(''); + pNum = cNum.split(''); + for (p=0; p < pMask.length; p++){ + switch(pMask[p]){ + case '#': case '0': case 'd': case 'm': case 'y': + if (pNum.length > 0){ + key = pNum.shift(); + _cout += key; + sw_c = true; + } + break; + case ',': case '.': + if (pMask[p] != __DECIMAL_SEP){ + if (pNum.length > 0){ + _cout += pMask[p]; + } + } + break; + default: + _cout += pMask[p]; + } + } + if (sw_c && sw_d){ + _out = _dout + __DECIMAL_SEP + _cout; + }else{ + _out = _dout + _cout; + } + } + _out = invertir(_out); + if (_out.length > osize){ + cursor = cursor + (_out.length - osize); + } + return { + 'result': _out, + 'cursor': cursor + }; + } + + //Manage Multiple Mask and Integer/Real Number restrictions + this.toMask = function(num, mask, cursor){ + if (mask==='') return { + 'result': new String(num), + 'cursor': cursor + }; + num = new String(num); + var result = []; + var subMasks=mask.split(';'); + for(var r=0; r0) { + r=others.length; + others[r] = mask.substr(0,1); + mask= mask.split(others[r]).join(''); + num = num.split(others[r]).join(''); + cursor -= a.split(others[r]).length-1;//alert(cursor) + } + return { + 'result':num, + 'cursor':cursor + }; + }; + this.getId=function(element){ + var re=/(\[(\w+)\])+/; + var res=re.exec(element.id); + return res?res[2]:element.id; + }; + this.getObject=function(element){ + var objId=G.getId(element); + switch (element.tagName){ + case 'FORM': + return eval('form_'+objId); + break; + default: + if (element.form) { + var formId=G.getId(element.form); + return eval('form_'+objId+'.getElementByName("'+objId+'")'); } } - - /*BLINK EFECT*/ - this.blinked=[]; - this.blinkedt0=[]; - this.autoFirstField=true; - this.pi=Math.atan(1)*4; - this.highLight = function(element){ - var newdiv = $dce('div'); - newdiv.style.position="absolute"; - newdiv.style.display="inline"; - newdiv.style.height=element.clientHeight+2; - newdiv.style.width=element.clientWidth+2; - newdiv.style.background = "#FF5555"; - element.style.backgroundColor='#FFCACA'; - element.parentNode.insertBefore(newdiv,element); - G.doBlinkEfect(newdiv,1000); + }; + + /*BLINK EFECT*/ + this.blinked=[]; + this.blinkedt0=[]; + this.autoFirstField=true; + this.pi=Math.atan(1)*4; + this.highLight = function(element){ + var newdiv = $dce('div'); + newdiv.style.position="absolute"; + newdiv.style.display="inline"; + newdiv.style.height=element.clientHeight+2; + newdiv.style.width=element.clientWidth+2; + newdiv.style.background = "#FF5555"; + element.style.backgroundColor='#FFCACA'; + element.parentNode.insertBefore(newdiv,element); + G.doBlinkEfect(newdiv,1000); + }; + this.setOpacity=function(e,o){ + e.style.filter='alpha'; + if (e.filters) { + e.filters['alpha'].opacity=o*100; + } else { + e.style.opacity=o; } - this.setOpacity=function(e,o){ - e.style.filter='alpha'; - if (e.filters) { - e.filters['alpha'].opacity=o*100; - } else { - e.style.opacity=o; + }; + this.doBlinkEfect=function(div,T){ + var f=1/T; + var j=G.blinked.length; + G.blinked[j]=div; + G.blinkedt0[j]=(new Date()).getTime(); + for(var i=1;i<=20;i++){ + setTimeout("G.setOpacity(G.blinked["+j+"],0.3-0.3*Math.cos(2*G.pi*((new Date()).getTime()-G.blinkedt0["+j+"])*"+f+"));",T/20*i); + } + setTimeout("G.blinked["+j+"].parentNode.removeChild(G.blinked["+j+"]);G.blinked["+j+"]=null;",T/20*i); + }; + var alertPanel; + this.alert=function(html, title , width, height, autoSize, modal, showModalColor, runScripts) + { + html='
'+html+'
'; + width = (width)?width:300; + height = (height)?height:200; + autoSize = (showModalColor===false)?false:true; + modal = (modal===false)?false:true; + showModalColor = (showModalColor===true)?true:false; + var alertPanel = new leimnud.module.panel(); + alertPanel.options = { + size:{ + w:width, + h:height + }, + position:{ + center:true + }, + title: title, + theme: "processmaker", + control: { + close :true, + roll :false, + drag :true, + resize :true + }, + fx: { + blinkToFront:true, + opacity :true, + drag:true, + modal: modal } - } - this.doBlinkEfect=function(div,T){ - var f=1/T; - var j=G.blinked.length; - G.blinked[j]=div; - G.blinkedt0[j]=(new Date()).getTime(); - for(var i=1;i<=20;i++){ - setTimeout("G.setOpacity(G.blinked["+j+"],0.3-0.3*Math.cos(2*G.pi*((new Date()).getTime()-G.blinkedt0["+j+"])*"+f+"));",T/20*i); - } - setTimeout("G.blinked["+j+"].parentNode.removeChild(G.blinked["+j+"]);G.blinked["+j+"]=null;",T/20*i); - } - var alertPanel; - this.alert=function(html, title , width, height, autoSize, modal, showModalColor, runScripts) + }; + if(showModalColor===false) { - html='
'+html+'
'; - width = (width)?width:300; - height = (height)?height:200; - autoSize = (showModalColor===false)?false:true; - modal = (modal===false)?false:true; - showModalColor = (showModalColor===true)?true:false; - var alertPanel = new leimnud.module.panel(); - alertPanel.options = { - size:{ - w:width, - h:height - }, - position:{ - center:true - }, - title: title, - theme: "processmaker", - control: { - close :true, - roll :false, - drag :true, - resize :true - }, - fx: { - blinkToFront:true, - opacity :true, - drag:true, - modal: modal - } - }; - if(showModalColor===false) - { - alertPanel.styles.fx.opacityModal.Static='0'; + alertPanel.styles.fx.opacityModal.Static='0'; + } + alertPanel.make(); + alertPanel.addContent(html); + if(runScripts) + { + var myScripts=alertPanel.elements.content.getElementsByTagName('SCRIPT'); + var sMyScripts=[]; + for(var rr=0; rr:'+obj[o]+"
\n"; - } - else - dump=obj; - debugDiv = document.getElementById('debug'); - if (debugDiv) debugDiv.innerHTML=dump; - return dump; - } + this.var_dump = function(obj) + { + var o,dump; + dump=''; + if (typeof(obj)=='object') + for(o in obj) + { + dump+=''+o+':'+obj[o]+"
\n"; + } + else + dump=obj; + debugDiv = document.getElementById('debug'); + if (debugDiv) debugDiv.innerHTML=dump; + return dump; + }; } var oDebug = new G_Debugger(); @@ -1326,219 +1472,219 @@ var oDebug = new G_Debugger(); var datePickerPanel; function showDatePicker(ev, formId, idName, value, min, max ) { - var coor = leimnud.dom.mouse(ev); - var coorx = ( coor.x - 50 ); - var coory = ( coor.y - 40 ); - datePickerPanel=new leimnud.module.panel(); - datePickerPanel.options={ - size:{ - w:275, - h:240 - }, - position:{ - x:coorx, - y:coory - }, - title:"Date Picker", - theme:"panel", - control:{ - close:true, - drag:true - }, - fx:{ - modal:true - } - }; - - datePickerPanel.setStyle={ - containerWindow:{ - borderWidth:0 - } - }; - datePickerPanel.make(); - datePickerPanel.idName = idName; - datePickerPanel.formId = formId; - - var sUrl = "/controls/calendar.php?v="+value+"&d="+value+"&min="+min+"&max="+max; - var r = new leimnud.module.rpc.xmlhttp({ - url: sUrl - }); - r.callback=leimnud.closure({ - Function:function(rpc){ - datePickerPanel.addContent(rpc.xmlhttp.responseText); - }, - args:r - }) - r.make(); - + var coor = leimnud.dom.mouse(ev); + var coorx = ( coor.x - 50 ); + var coory = ( coor.y - 40 ); + datePickerPanel=new leimnud.module.panel(); + datePickerPanel.options={ + size:{ + w:275, + h:240 + }, + position:{ + x:coorx, + y:coory + }, + title:"Date Picker", + theme:"panel", + control:{ + close:true, + drag:true + }, + fx:{ + modal:true + } + }; + + datePickerPanel.setStyle={ + containerWindow:{ + borderWidth:0 + } + }; + datePickerPanel.make(); + datePickerPanel.idName = idName; + datePickerPanel.formId = formId; + + var sUrl = "/controls/calendar.php?v="+value+"&d="+value+"&min="+min+"&max="+max; + var r = new leimnud.module.rpc.xmlhttp({ + url: sUrl + }); + r.callback=leimnud.closure({ + Function:function(rpc){ + datePickerPanel.addContent(rpc.xmlhttp.responseText); + }, + args:r + }); + r.make(); + } function moveDatePicker( n_datetime ) { - var dtmin_value = document.getElementById ( 'dtmin_value' ); - var dtmax_value = document.getElementById ( 'dtmax_value' ); - - var sUrl = "/controls/calendar.php?d="+n_datetime + '&min='+dtmin_value.value + '&max='+dtmax_value.value; - var r = new leimnud.module.rpc.xmlhttp({ - url:sUrl - }); - r.callback=leimnud.closure({ - Function:function(rpc){ - datePickerPanel.clearContent(); - datePickerPanel.addContent(rpc.xmlhttp.responseText); - }, - args:r - }) - r.make(); + var dtmin_value = document.getElementById ( 'dtmin_value' ); + var dtmax_value = document.getElementById ( 'dtmax_value' ); + + var sUrl = "/controls/calendar.php?d="+n_datetime + '&min='+dtmin_value.value + '&max='+dtmax_value.value; + var r = new leimnud.module.rpc.xmlhttp({ + url:sUrl + }); + r.callback=leimnud.closure({ + Function:function(rpc){ + datePickerPanel.clearContent(); + datePickerPanel.addContent(rpc.xmlhttp.responseText); + }, + args:r + }); + r.make(); } function selectDate( day ) { - var obj = document.getElementById ( 'span['+datePickerPanel.formId+'][' + datePickerPanel.idName + ']' ); - getField(datePickerPanel.idName, datePickerPanel.formId ).value = day; - obj.innerHTML = day; - datePickerPanel.remove(); + var obj = document.getElementById ( 'span['+datePickerPanel.formId+'][' + datePickerPanel.idName + ']' ); + getField(datePickerPanel.idName, datePickerPanel.formId ).value = day; + obj.innerHTML = day; + datePickerPanel.remove(); } function set_datetime(n_datetime, b_close) { - moveDatePicker(n_datetime); + moveDatePicker(n_datetime); } /* Functions for show and hide rows of a simple xmlform. * @author David Callizaya */ function getRow( name ){ - try{ - var element = null; - if (typeof(name)==='string'){ - element = getField(name); - /** Set to hide/show of objects "checkgroup" and "radiogroup" + try{ + var element = null; + if (typeof(name)==='string'){ + element = getField(name); + /** Set to hide/show of objects "checkgroup" and "radiogroup" @author: Hector Cortez - */ - if(element == null){ - aElements = document.getElementsByName('form['+ name +'][]'); - if( aElements.length == 0) - aElements = document.getElementsByName('form['+ name +']'); - if( aElements.length ){ - element = aElements[aElements.length-1]; - } else - element = null; - } - } - if( element != null){ - while ( element.tagName !== 'TR' ) { - element=element.parentNode; - } - return element; - } else { - return null; - } - } catch(e){ - alert(e); + */ + if(element == null){ + aElements = document.getElementsByName('form['+ name +'][]'); + if( aElements.length == 0) + aElements = document.getElementsByName('form['+ name +']'); + if( aElements.length ){ + element = aElements[aElements.length-1]; + } else + element = null; + } + } + if( element != null){ + while ( element.tagName !== 'TR' ) { + element=element.parentNode; + } + return element; + } else { + return null; } + } catch(e){ + alert(e); + } } var getRowById=getRow; function hideRow( element ){ //neyek - var row=getRow(element); - if (row) row.style.display='none'; - removeRequiredById(element); - delete row; + var row=getRow(element); + if (row) row.style.display='none'; + removeRequiredById(element); + delete row; } var hideRowById=hideRow; function showRow( element ){ - var row=getRow(element); - requiredFields = []; - sRequiredFields = document.getElementById('DynaformRequiredFields').value.replace(/%27/gi, '"'); - - fields = new String(sRequiredFields); - fields = stripslashes(fields); - requiredFieldsList = eval(fields); + var row=getRow(element); + requiredFields = []; + sRequiredFields = document.getElementById('DynaformRequiredFields').value.replace(/%27/gi, '"'); - for(i=0; i 0 ){ sRequiredFields = sRequiredFields.replace(/%39/gi, "'"); } - aRequiredFields = eval(sRequiredFields); - - var sMessage = ''; - var invalid_fields = Array(); + aRequiredFields = eval(sRequiredFields); - for (var i = 0; i < aRequiredFields.length; i++) { - aRequiredFields[i].label=(aRequiredFields[i].label=='')?aRequiredFields[i].name:aRequiredFields[i].label; - if (!notValidateThisFields.inArray(aRequiredFields[i].name)) { - switch(aRequiredFields[i].type) { - case 'suggest': - var vtext1 = new input(getField(aRequiredFields[i].name+'_suggest')); - if(getField(aRequiredFields[i].name).value==''){ - invalid_fields.push(aRequiredFields[i].label); - vtext1.failed(); - } else { - vtext1.passed(); - } - break; - case 'text': - var vtext = new input(getField(aRequiredFields[i].name)); - if(getField(aRequiredFields[i].name).value==''){ - invalid_fields.push(aRequiredFields[i].label); - vtext.failed(); - } else { - vtext.passed(); - } - break; - - case 'dropdown': - var vtext = new input(getField(aRequiredFields[i].name)); - if(getField(aRequiredFields[i].name).value==''){ - invalid_fields.push(aRequiredFields[i].label); - vtext.failed(); - } else { - vtext.passed(); - } - break; - - case 'textarea': - - var vtext = new input(getField(aRequiredFields[i].name)); - if(getField(aRequiredFields[i].name).value==''){ - invalid_fields.push(aRequiredFields[i].label); - vtext.failed(); - } else { - vtext.passed(); - } - - break; - - case 'password': - var vpass = new input(getField(aRequiredFields[i].name)); - if(getField(aRequiredFields[i].name).value==''){ - invalid_fields.push(aRequiredFields[i].label); - vpass.failed(); - } else { - vpass.passed(); - } - break; - - case 'currency': - var vcurr = new input(getField(aRequiredFields[i].name)); - if(getField(aRequiredFields[i].name).value==''){ - invalid_fields.push(aRequiredFields[i].label); - vcurr.failed(); - } else { - vcurr.passed(); - } - break; - - case 'percentage': - var vper = new input(getField(aRequiredFields[i].name)); - if(getField(aRequiredFields[i].name).value==''){ - invalid_fields.push(aRequiredFields[i].label); - vper.failed(); - } else { - vper.passed(); - } - break; - - case 'yesno': - var vtext = new input(getField(aRequiredFields[i].name)); - if(getField(aRequiredFields[i].name).value==''){ - invalid_fields.push(aRequiredFields[i].label); - vtext.failed(); - } else { - vtext.passed(); - } - break; - - case 'date': - var vtext = new input(getField(aRequiredFields[i].name)); - if(getField(aRequiredFields[i].name).value==''){ - invalid_fields.push(aRequiredFields[i].label); - vtext.failed(); - } else { - vtext.passed(); - } - break; - - case 'file': - var vtext = new input(getField(aRequiredFields[i].name)); - if(getField(aRequiredFields[i].name).value==''){ - invalid_fields.push(aRequiredFields[i].label); - vtext.failed(); - } else { - vtext.passed(); - } - break; - - case 'listbox': - var oAux = getField(aRequiredFields[i].name); - var bOneSelected = false; - for (var j = 0; j < oAux.options.length; j++) { - if (oAux.options[j].selected) { - bOneSelected = true; - j = oAux.options.length; - } - } - if(bOneSelected == false) - invalid_fields.push(aRequiredFields[i].label); - break; - - case 'radiogroup': - var x=aRequiredFields[i].name; - var oAux = document.getElementsByName('form['+ x +']'); - var bOneChecked = false; - for (var k = 0; k < oAux.length; k++) { - var r = oAux[k]; - if (r.checked) { - bOneChecked = true; - k = oAux.length; - } - } - - if(bOneChecked == false) - invalid_fields.push(aRequiredFields[i].label); - - break; - - case 'checkgroup': - var bOneChecked = false; - var aAux = document.getElementsByName('form[' + aRequiredFields[i].name + '][]'); - for (var k = 0; k < aAux.length; k++) { - if (aAux[k].checked) { - bOneChecked = true; - k = aAux.length; - } - } - if(!bOneChecked) { - invalid_fields.push(aRequiredFields[i].label); - } - break; + var sMessage = ''; + var invalid_fields = Array(); + + for (var i = 0; i < aRequiredFields.length; i++) { + aRequiredFields[i].label=(aRequiredFields[i].label=='')?aRequiredFields[i].name:aRequiredFields[i].label; + if (!notValidateThisFields.inArray(aRequiredFields[i].name)) { + switch(aRequiredFields[i].type) { + case 'suggest': + var vtext1 = new input(getField(aRequiredFields[i].name+'_suggest')); + if(getField(aRequiredFields[i].name).value==''){ + invalid_fields.push(aRequiredFields[i].label); + vtext1.failed(); + } else { + vtext1.passed(); + } + break; + case 'text': + var vtext = new input(getField(aRequiredFields[i].name)); + if(getField(aRequiredFields[i].name).value==''){ + invalid_fields.push(aRequiredFields[i].label); + vtext.failed(); + } else { + vtext.passed(); + } + break; + + case 'dropdown': + var vtext = new input(getField(aRequiredFields[i].name)); + if(getField(aRequiredFields[i].name).value==''){ + invalid_fields.push(aRequiredFields[i].label); + vtext.failed(); + } else { + vtext.passed(); + } + break; + + case 'textarea': + + var vtext = new input(getField(aRequiredFields[i].name)); + if(getField(aRequiredFields[i].name).value==''){ + invalid_fields.push(aRequiredFields[i].label); + vtext.failed(); + } else { + vtext.passed(); + } + + break; + + case 'password': + var vpass = new input(getField(aRequiredFields[i].name)); + if(getField(aRequiredFields[i].name).value==''){ + invalid_fields.push(aRequiredFields[i].label); + vpass.failed(); + } else { + vpass.passed(); + } + break; + + case 'currency': + var vcurr = new input(getField(aRequiredFields[i].name)); + if(getField(aRequiredFields[i].name).value==''){ + invalid_fields.push(aRequiredFields[i].label); + vcurr.failed(); + } else { + vcurr.passed(); + } + break; + + case 'percentage': + var vper = new input(getField(aRequiredFields[i].name)); + if(getField(aRequiredFields[i].name).value==''){ + invalid_fields.push(aRequiredFields[i].label); + vper.failed(); + } else { + vper.passed(); + } + break; + + case 'yesno': + var vtext = new input(getField(aRequiredFields[i].name)); + if(getField(aRequiredFields[i].name).value==''){ + invalid_fields.push(aRequiredFields[i].label); + vtext.failed(); + } else { + vtext.passed(); + } + break; + + case 'date': + var vtext = new input(getField(aRequiredFields[i].name)); + if(getField(aRequiredFields[i].name).value==''){ + invalid_fields.push(aRequiredFields[i].label); + vtext.failed(); + } else { + vtext.passed(); + } + break; + + case 'file': + var vtext = new input(getField(aRequiredFields[i].name)); + if(getField(aRequiredFields[i].name).value==''){ + invalid_fields.push(aRequiredFields[i].label); + vtext.failed(); + } else { + vtext.passed(); + } + break; + + case 'listbox': + var oAux = getField(aRequiredFields[i].name); + var bOneSelected = false; + for (var j = 0; j < oAux.options.length; j++) { + if (oAux.options[j].selected) { + bOneSelected = true; + j = oAux.options.length; } - } + } + if(bOneSelected == false) + invalid_fields.push(aRequiredFields[i].label); + break; + + case 'radiogroup': + var x=aRequiredFields[i].name; + var oAux = document.getElementsByName('form['+ x +']'); + var bOneChecked = false; + for (var k = 0; k < oAux.length; k++) { + var r = oAux[k]; + if (r.checked) { + bOneChecked = true; + k = oAux.length; + } + } + + if(bOneChecked == false) + invalid_fields.push(aRequiredFields[i].label); + + break; + + case 'checkgroup': + var bOneChecked = false; + var aAux = document.getElementsByName('form[' + aRequiredFields[i].name + '][]'); + for (var k = 0; k < aAux.length; k++) { + if (aAux[k].checked) { + bOneChecked = true; + k = aAux.length; + } + } + if(!bOneChecked) { + invalid_fields.push(aRequiredFields[i].label); + } + break; + } } - // call added by gustavo - cruz, gustavo-at-colosa.com validate grid forms - invalid_fields = validateGridForms(invalid_fields); - - if (invalid_fields.length > 0) { - //alert(G_STRINGS.ID_REQUIRED_FIELDS + ": \n\n" + sMessage); + } + // call added by gustavo - cruz, gustavo-at-colosa.com validate grid forms + invalid_fields = validateGridForms(invalid_fields); + + if (invalid_fields.length > 0) { + //alert(G_STRINGS.ID_REQUIRED_FIELDS + ": \n\n" + sMessage); - for(j=0; j 0)? ', ': ''; - sMessage += invalid_fields[j]; - } - - /* new leimnud.module.app.alert().make({ + for(j=0; j 0)? ', ': ''; + sMessage += invalid_fields[j]; + } + + /* new leimnud.module.app.alert().make({ label:G_STRINGS.ID_REQUIRED_FIELDS + ":

[ " + sMessage + " ]", width:450, height:140 + (parseInt(invalid_fields.length/10)*10) });*/ - - alert(G_STRINGS.ID_REQUIRED_FIELDS + ": \n \n [ " + sMessage + " ]"); - return false; - } - else { - return true; - } + + alert(G_STRINGS.ID_REQUIRED_FIELDS + ": \n \n [ " + sMessage + " ]"); + return false; + } + else { + return true; + } }; var getObject = function(sObject) { - var i; - var oAux = null; - var iLength = __aObjects__.length; - for (i = 0; i < iLength; i++) { - oAux = __aObjects__[i].getElementByName(sObject); - if (oAux) { - return oAux; - } + var i; + var oAux = null; + var iLength = __aObjects__.length; + for (i = 0; i < iLength; i++) { + oAux = __aObjects__[i].getElementByName(sObject); + if (oAux) { + return oAux; } - return oAux; + } + return oAux; }; var saveAndRefreshForm = function(oObject) { - if (oObject) { - oObject.form.action += '&_REFRESH_=1'; - oObject.form.submit(); - } - else { - var oAux = window.document.getElementsByTagName('form'); - if (oAux.length > 0) { - oAux[0].action += '&_REFRESH_=1'; - oAux[0].submit(); - } + if (oObject) { + oObject.form.action += '&_REFRESH_=1'; + oObject.form.submit(); + } + else { + var oAux = window.document.getElementsByTagName('form'); + if (oAux.length > 0) { + oAux[0].action += '&_REFRESH_=1'; + oAux[0].submit(); } + } }; /** @@ -1876,7 +2033,7 @@ var saveAndRefreshForm = function(oObject) { var saveForm = function(oObject) { if (oObject) { - ajax_post(oObject.form.action,oObject.form,'POST'); + ajax_post(oObject.form.action,oObject.form,'POST'); } else { var oAux = window.document.getElementsByTagName('form'); @@ -1896,15 +2053,15 @@ var saveForm = function(oObject) { **/ var validateURL = function (url){ - //var regexp = /https?:\/\/([-\w\.]+)+(:\d+)?(\/([\w/_\.]*(\?\S+)?)?)?/; - if (regexp.test('https?:\/\/([-\w\.]+)+(:\d+)?(\/([\w/_\.]*(\?\S+)?)?)?')){ - return true; - } - else - { - return false; - } -} + //var regexp = /https?:\/\/([-\w\.]+)+(:\d+)?(\/([\w/_\.]*(\?\S+)?)?)?/; + if (regexp.test('https?:\/\/([-\w\.]+)+(:\d+)?(\/([\w/_\.]*(\?\S+)?)?)?')){ + return true; + } + else + { + return false; + } +}; @@ -1922,243 +2079,243 @@ var validateURL = function (url){ **/ var saveAndRedirectForm = function(oObject, oLocation) { - saveForm(oObject); - if (validateURL(oLocation)){ - document.location.href = oLocation; - } + saveForm(oObject); + if (validateURL(oLocation)){ + document.location.href = oLocation; + } }; var removeRequiredById = function(sFieldName) { - if (!notValidateThisFields.inArray(sFieldName)) { - notValidateThisFields.push(sFieldName); - var oAux = document.getElementById('__notValidateThisFields__'); - if (oAux) { - oAux.value = notValidateThisFields.toJSONString(); - } + if (!notValidateThisFields.inArray(sFieldName)) { + notValidateThisFields.push(sFieldName); + var oAux = document.getElementById('__notValidateThisFields__'); + if (oAux) { + oAux.value = notValidateThisFields.toJSONString(); } + } }; var enableRequiredById = function(sFieldName) { - if (notValidateThisFields.inArray(sFieldName)) { - var i; - var aAux = []; - for(i = 0; i < notValidateThisFields.length; i++) { - if(notValidateThisFields[i] != sFieldName) { - aAux.push(notValidateThisFields[i]); - } - } - notValidateThisFields = aAux; - var oAux = document.getElementById('__notValidateThisFields__'); - if (oAux) { - oAux.value = notValidateThisFields.toJSONString(); - } + if (notValidateThisFields.inArray(sFieldName)) { + var i; + var aAux = []; + for(i = 0; i < notValidateThisFields.length; i++) { + if(notValidateThisFields[i] != sFieldName) { + aAux.push(notValidateThisFields[i]); + } } + notValidateThisFields = aAux; + var oAux = document.getElementById('__notValidateThisFields__'); + if (oAux) { + oAux.value = notValidateThisFields.toJSONString(); + } + } }; function dynaformVerifyFieldName(){ - pme_validating = true; - setTimeout('verifyFieldName1();',0); - return true; + pme_validating = true; + setTimeout('verifyFieldName1();',0); + return true; } function verifyFieldName1(){ - var newFieldName=fieldName.value; - var validatedFieldName=getField("PME_VALIDATE_NAME",fieldForm).value; - var dField = new input(getField('PME_XMLNODE_NAME')); + var newFieldName=fieldName.value; + var validatedFieldName=getField("PME_VALIDATE_NAME",fieldForm).value; + var dField = new input(getField('PME_XMLNODE_NAME')); - var valid=(newFieldName!=='')&&(((newFieldName!==savedFieldName)&&(validatedFieldName===''))||((newFieldName===savedFieldName))); - if (valid){ - dField.passed(); - getField("PME_ACCEPT",fieldForm).disabled=false; - }else{ - getField("PME_ACCEPT",fieldForm).disabled=true; - dField.failed(); - new leimnud.module.app.alert().make({ - label: G_STRINGS.DYNAFIELD_ALREADY_EXIST - }); - dField.focus(); - } - pme_validating=false; - return valid; + var valid=(newFieldName!=='')&&(((newFieldName!==savedFieldName)&&(validatedFieldName===''))||((newFieldName===savedFieldName))); + if (valid){ + dField.passed(); + getField("PME_ACCEPT",fieldForm).disabled=false; + }else{ + getField("PME_ACCEPT",fieldForm).disabled=true; + dField.failed(); + new leimnud.module.app.alert().make({ + label: G_STRINGS.DYNAFIELD_ALREADY_EXIST + }); + dField.focus(); + } + pme_validating=false; + return valid; } var objectsWithFormula = Array(); function sumaformu(ee,fma,mask){ - //copy the formula - afma=fma; - var operators=['+','-','*','/','(','[','{','}',']',')',',','Math.pow','Math.PI','Math.sqrt']; - var wos; - //replace the operators symbols for empty space - for(var i=0 ; i < operators.length ; i++) { - var j=0; - while(j < fma.length){ - nfma=fma.replace(operators[i]," "); - nfma=nfma.replace(" "," "); - fma=nfma; - j++; - } - + //copy the formula + afma=fma; + var operators=['+','-','*','/','(','[','{','}',']',')',',','Math.pow','Math.PI','Math.sqrt']; + var wos; + //replace the operators symbols for empty space + for(var i=0 ; i < operators.length ; i++) { + var j=0; + while(j < fma.length){ + nfma=fma.replace(operators[i]," "); + nfma=nfma.replace(" "," "); + fma=nfma; + j++; } - //without spaces in the inicio of the formula - wos=nfma.replace(/^\s+/g,''); - nfma=wos.replace(/\s+$/g,''); - theelemts=nfma.split(" "); - - objectsWithFormula[objectsWithFormula.length]= {ee:ee,fma:afma,mask:mask,theElements:theelemts}; - - for (var i=0; i < theelemts.length; i++){ - leimnud.event.add(getField(theelemts[i]),'keyup',function(){ - //leimnud.event.add(getField(objectsWithFormula[objectsWithFormula.length-1].theElements[i]),'keyup',function(){ - myId=this.id.replace("form[","").replace("]",""); - + + } + //without spaces in the inicio of the formula + wos=nfma.replace(/^\s+/g,''); + nfma=wos.replace(/\s+$/g,''); + theelemts=nfma.split(" "); + + objectsWithFormula[objectsWithFormula.length]= {ee:ee,fma:afma,mask:mask,theElements:theelemts}; + + for (var i=0; i < theelemts.length; i++){ + leimnud.event.add(getField(theelemts[i]),'keyup',function(){ + //leimnud.event.add(getField(objectsWithFormula[objectsWithFormula.length-1].theElements[i]),'keyup',function(){ + myId=this.id.replace("form[","").replace("]",""); + for(i_elements=0;i_elements < objectsWithFormula.length; i_elements++){ - - + + for(i_elements2=0;i_elements2 < objectsWithFormula[i_elements].theElements.length;i_elements2++){ if(objectsWithFormula[i_elements].theElements[i_elements2]==myId) { - - //calValue(afma,nfma,ee,mask); - - formula = objectsWithFormula[i_elements].fma; - ans = objectsWithFormula[i_elements].ee; - theelemts=objectsWithFormula[i_elements].theElements; - - nfk = ''; - //to replace the field for the value and to evaluate the formula - for (var i=0; i < theelemts.length; i++){ - if(!isnumberk(theelemts[i])){//alert(getField(theelemts[i]).name); - val = (getField(theelemts[i]).value == '')? 0 : getField(theelemts[i]).value; - formula=formula.replace(theelemts[i],val); + + //calValue(afma,nfma,ee,mask); + + formula = objectsWithFormula[i_elements].fma; + ans = objectsWithFormula[i_elements].ee; + theelemts=objectsWithFormula[i_elements].theElements; + + nfk = ''; + //to replace the field for the value and to evaluate the formula + for (var i=0; i < theelemts.length; i++){ + if(!isnumberk(theelemts[i])){//alert(getField(theelemts[i]).name); + val = (getField(theelemts[i]).value == '')? 0 : getField(theelemts[i]).value; + formula=formula.replace(theelemts[i],val); + } } - } - - var rstop=eval(formula); - if(mask!=''){ - putmask(rstop,mask,ans); - }else{ - ans.value=rstop; - } - + + var rstop=eval(formula); + if(mask!=''){ + putmask(rstop,mask,ans); + }else{ + ans.value=rstop; + } + } } } }); - } + } } function calValue(afma,nfma,ans,mask){ - theelemts=nfma.split(" "); - //to replace the field for the value and to evaluate the formula - for (var i=0; i < theelemts.length; i++){ - if(!isnumberk(theelemts[i])){//alert(getField(theelemts[i]).name); - if(getField(theelemts[i]).value){ - nfk=afma.replace(theelemts[i],getField(theelemts[i]).value) - afma=nfk; - } - } + theelemts=nfma.split(" "); + //to replace the field for the value and to evaluate the formula + for (var i=0; i < theelemts.length; i++){ + if(!isnumberk(theelemts[i])){//alert(getField(theelemts[i]).name); + if(getField(theelemts[i]).value){ + nfk=afma.replace(theelemts[i],getField(theelemts[i]).value); + afma=nfk; + } } - - //ans.value=eval(nfk); - var rstop=eval(nfk); - if(mask!=''){ - putmask(rstop,mask,ans); - }else{ - //alert('without mask'); - ans.value=rstop; - } - + } + + //ans.value=eval(nfk); + var rstop=eval(nfk); + if(mask!=''){ + putmask(rstop,mask,ans); + }else{ + //alert('without mask'); + ans.value=rstop; + } + } function isnumberk(texto){ - var numberk="0123456789."; - var letters="abcdefghijklmnopqrstuvwxyz"; - var i=0; - var sw=1; - - //for(var i=0; i 1) { - maskDecimal=maskDecimal[1].split("."); - } else { - maskDecimal=mask.split("."); - } - numDecimal=maskDecimal[1].length; - - ans.value=numb.toFixed(numDecimal); - return; - var nnum='',i=0,j=0; - //we get the number of digits - cnumb=numb.toString(); - cd = parseInt(Math.log(numb)/Math.LN10+1); - //now we're runing the mask and cd - fnb=cnumb.split("."); - maskp=mask.split(";"); - mask = (maskp.length > 1)? maskp[1]:mask; - while(i < numb.toString().length && j < mask.length){ - //alert(cnumb.charAt(i)+' ** '+mask.charAt(i)); - switch(mask.charAt(j)){ - case '#': - if(cnumb.charAt(i)!='.') { - nnum+=cnumb.charAt(i).toString(); - i++; - } - break; - - case '.': - nnum+=mask.charAt(j).toString(); - i=cd+1; - cd=i +4; - break - - default: - //alert(mask.charAt(i)); - nnum+=mask.charAt(j).toString(); - break; - } - - j++; - } + var nnum=''; + var i=0; + var j=0; - ans.value=nnum; + maskDecimal=mask.split(";"); + if(maskDecimal.length > 1) { + maskDecimal=maskDecimal[1].split("."); + } else { + maskDecimal=mask.split("."); + } + numDecimal=maskDecimal[1].length; + + ans.value=numb.toFixed(numDecimal); + return; + var nnum='',i=0,j=0; + //we get the number of digits + cnumb=numb.toString(); + cd = parseInt(Math.log(numb)/Math.LN10+1); + //now we're runing the mask and cd + fnb=cnumb.split("."); + maskp=mask.split(";"); + mask = (maskp.length > 1)? maskp[1]:mask; + while(i < numb.toString().length && j < mask.length){ + //alert(cnumb.charAt(i)+' ** '+mask.charAt(i)); + switch(mask.charAt(j)){ + case '#': + if(cnumb.charAt(i)!='.') { + nnum+=cnumb.charAt(i).toString(); + i++; + } + break; + + case '.': + nnum+=mask.charAt(j).toString(); + i=cd+1; + cd=i +4; + break; + + default: + //alert(mask.charAt(i)); + nnum+=mask.charAt(j).toString(); + break; + } + + j++; + } + + ans.value=nnum; } function showRowsById(aFields){ - - for(i=0; i',''); + txt = txt.replace('>',''); + aTxt = txt.split(' '); + + newField = document.createElement(''); + + for (var a=0; a < aTxt.length; a++){ + if (aTxt[a].indexOf('=')>0){ + aVals = aTxt[a].split('='); + if (aVals[0] != 'id' && aVals[0] != 'name' && aVals[0] != 'class'){ + newField.setAttribute(aVals[0], aVals[1].replace('"','').replace('"','')); + } + } + } + return newField; + }; + this.addGridRow = function() { var i, aObjects, aDatePicker; var defaultValue = ''; @@ -186,11 +210,11 @@ var G_Grid = function(oForm, sGridName){ break; default: 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){ + 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; @@ -226,8 +250,18 @@ var G_Grid = function(oForm, sGridName){ oNewRow.getElementsByTagName('td')[i].appendChild(a2); //Load DatePicker Trigger datePicker4("", newID, attributes.mask, attributes.start, attributes.end, attributes.time); + aObjects[0].value = defaultValue; + }else{ + if (_BROWSER.name == 'msie'){ //Clone new input element if browser is IE + oNewOBJ = this.cloneInput(aObjects[0]); + oNewOBJ.value = defaultValue; + parentGG = aObjects[0].parentNode; + parentGG.removeChild(aObjects[0]); + parentGG.appendChild(oNewOBJ); + }else{ + aObjects[0].value = defaultValue; + } } - aObjects[0].value = defaultValue; break; case 'checkbox': //CHECKBOX aObjects[0].checked = false; @@ -604,7 +638,7 @@ var G_Grid = function(oForm, sGridName){ if (aAux[2] == nnName[2] && j <= (this.oGrid.rows.length-2)){ oAux=this.getElementByName(j, nnName[2]); if(oAux!=null){ - fTotal += parseFloat(G.cleanMask(oAux.value() || 0, oAux.mask).result.replace(/,/g, '')); + fTotal += parseFloat(G.getValue(oAux.value())); } j++; } @@ -632,7 +666,7 @@ var G_Grid = function(oForm, sGridName){ fTotal = 0; aAux[2] = aAux[2].replace(']', ''); while (oAux = this.getElementByName(i, aAux[2])) { - fTotal += parseFloat(G.cleanMask(oAux.value() || 0, oAux.mask).result.replace(/,/g, '')); + fTotal += parseFloat(G.getValue(oAux.value())); sMask = oAux.mask; i++; } diff --git a/gulliver/methods/defaultAjax.php b/gulliver/methods/defaultAjax.php index de292b6e2..dd1026872 100644 --- a/gulliver/methods/defaultAjax.php +++ b/gulliver/methods/defaultAjax.php @@ -52,12 +52,10 @@ } } } - $G_FORM=new form( $xmlFile , $sPath ); $G_FORM->id=urlDecode($_POST['form']); //$G_FORM->values=isset($_SESSION[$G_FORM->id]) ? $_SESSION[$G_FORM->id] : array(); $newValues=($json->decode(urlDecode(stripslashes($_POST['fields'])))); - if (isset($_POST['grid'])) { $_POST['row'] = (int)$_POST['row']; $aAux = array(); @@ -84,6 +82,7 @@ //Search dependent fields foreach($newValues[$r] as $k => $v) { if (!is_array($v)) { + //echo 'NoASrray'; $myDependentFields = subDependencies( $k , $G_FORM , $aux ); $_SESSION[$G_FORM->id][$k] = $v; } @@ -97,6 +96,7 @@ //$_SESSION[$G_FORM->id][$k] = $v; } } + //g::pr($myDependentFields); $G_FORM->values=isset($_SESSION[$G_FORM->id]) ? $_SESSION[$G_FORM->id] : array(); @@ -195,9 +195,9 @@ if ($myDependentFields[$r]=="") unset($myDependentFields[$r]); } $mD = $myDependentFields; - foreach( $mD as $ki) { - $myDependentFields = array_merge( $myDependentFields , subDependencies( $ki , $G_FORM , $aux, $grid) ); - } +// foreach( $mD as $ki) { +// $myDependentFields = array_merge( $myDependentFields , subDependencies( $ki , $G_FORM , $aux, $grid) ); +// } } return $myDependentFields; } diff --git a/gulliver/system/class.xmlform.php b/gulliver/system/class.xmlform.php index 3922ec43a..f1f34f027 100644 --- a/gulliver/system/class.xmlform.php +++ b/gulliver/system/class.xmlform.php @@ -39,6 +39,7 @@ class XmlForm_Field { var $mode = ''; var $defaultValue = NULL; var $gridFieldType = ''; + var $gridLabel = ''; /*to change the presentation*/ var $enableHtml = false; var $style = ''; @@ -668,6 +669,45 @@ class XmlForm_Field { } return $sValue; } + + /** + * Prepares NS Required Value + * @author Enrique Ponce de Leon + * @param boolean optional (true = always show, false = show only if not empty) + * @return string + */ + + function NSRequiredValue($show = false){ + if (isset($this->required)){ + $req = ($this->required)? '1':'0'; + }else{ + $req = '0'; + } + $idv = 'pm:required="'.$req.'"'; + if ($show){ + return $idv; + }else{ + return ($req != '0')? $idv : ''; + } + } + + + /** + * Prepares NS Required Value + * @author Enrique Ponce de Leon + * @param boolean optional (true = always show, false = show only if not empty) + * @return string + */ + + function NSGridLabel($show = false){ + $idv = 'pm:label="'.$this->label.'"'; + if ($show){ + return $idv; + }else{ + return ($this->label != '')? $idv : ''; + } + } + /** * Prepares NS Default Text @@ -801,11 +841,11 @@ class XmlForm_Field_SimpleText extends XmlForm_Field $onkeypress = G::replaceDataField ( $this->onkeypress, $owner->values ); if ($this->mode === 'edit') { if ($this->readOnly) - return 'maxLength ) ? ' maxlength="' . $this->maxLength . '"' : '') . ' value=\'' . htmlentities ( $value, ENT_COMPAT, 'utf-8' ) . '\' readOnly="readOnly" style="' . htmlentities ( $this->style, ENT_COMPAT, 'utf-8' ) . '" onkeypress="' . htmlentities ( $onkeypress, ENT_COMPAT, 'utf-8' ) . '"/>'; + return 'maxLength ) ? ' maxlength="' . $this->maxLength . '"' : '') . ' value=\'' . htmlentities ( $value, ENT_COMPAT, 'utf-8' ) . '\' '.$this->NSRequiredValue().' readOnly="readOnly" style="' . htmlentities ( $this->style, ENT_COMPAT, 'utf-8' ) . '" onkeypress="' . htmlentities ( $onkeypress, ENT_COMPAT, 'utf-8' ) . '"/>'; else - return 'maxLength ) ? ' maxlength="' . $this->maxLength . '"' : '') . ' value=\'' . htmlentities ( $value, ENT_COMPAT, 'utf-8' ) . '\' style="' . htmlentities ( $this->style, ENT_COMPAT, 'utf-8' ) . '" onkeypress="' . htmlentities ( $onkeypress, ENT_COMPAT, 'utf-8' ) . '"/>'; + return 'maxLength ) ? ' maxlength="' . $this->maxLength . '"' : '') . ' value=\'' . htmlentities ( $value, ENT_COMPAT, 'utf-8' ) . '\' '.$this->NSRequiredValue().' style="' . htmlentities ( $this->style, ENT_COMPAT, 'utf-8' ) . '" onkeypress="' . htmlentities ( $onkeypress, ENT_COMPAT, 'utf-8' ) . '"/>'; } elseif ($this->mode === 'view') { - return 'maxLength ) ? ' maxlength="' . $this->maxLength . '"' : '') . ' value=\'' . htmlentities ( $value, ENT_COMPAT, 'utf-8' ) . '\' style="display:none;' . htmlentities ( $this->style, ENT_COMPAT, 'utf-8' ) . '" onkeypress="' . htmlentities ( $onkeypress, ENT_COMPAT, 'utf-8' ) . '"/>' . htmlentities ( $value, ENT_COMPAT, 'utf-8' ); + return 'maxLength ) ? ' maxlength="' . $this->maxLength . '"' : '') . ' value=\'' . htmlentities ( $value, ENT_COMPAT, 'utf-8' ) . '\' '.$this->NSRequiredValue().' style="display:none;' . htmlentities ( $this->style, ENT_COMPAT, 'utf-8' ) . '" onkeypress="' . htmlentities ( $onkeypress, ENT_COMPAT, 'utf-8' ) . '"/>' . htmlentities ( $value, ENT_COMPAT, 'utf-8' ); } else { return $this->htmlentities ( $value, ENT_COMPAT, 'utf-8' ); } @@ -835,18 +875,15 @@ class XmlForm_Field_SimpleText extends XmlForm_Field // also the fields rendered in a grid needs now have an attribute required set to 0 or 1 // that it means not required or required respectively. $this->mode = $this->modeForGrid; - if (isNewDynaform($owner)=='1'){ - $values = array(); - $values[] = $this->defaultValue; - } + foreach ( $values as $v ) { if ($this->mode === 'edit' && $owner->modeGrid != 'view') { if ($this->readOnly) - $result [] = 'NSDefaultValue().' '.$this->NSGridType().'/>'; + $result [] = 'NSRequiredValue().' readOnly="readOnly" style="' . htmlentities ( $this->style, ENT_COMPAT, 'utf-8' ) . '" '.$this->NSDefaultValue().' '.$this->NSGridType().' '.$this->NSGridLabel().'/>'; else - $result [] = 'NSDefaultValue().' '.$this->NSGridType().'/>'; + $result [] = 'NSRequiredValue().' style="' . htmlentities ( $this->style, ENT_COMPAT, 'utf-8' ) . '" '.$this->NSDefaultValue().' '.$this->NSGridType().' '.$this->NSGridLabel().'/>'; } elseif ($this->mode === 'view' || $owner->modeGrid === 'view') { - $result [] = 'NSDefaultValue().' '.$this->NSGridType().'/>' . htmlentities ( $v, ENT_COMPAT, 'utf-8' ); + $result [] = 'NSRequiredValue().' style="display:none;' . htmlentities ( $this->style, ENT_COMPAT, 'utf-8' ) . '" '.$this->NSDefaultValue().' '.$this->NSGridType().' '.$this->NSGridLabel().'/>' . htmlentities ( $v, ENT_COMPAT, 'utf-8' ); } else { $result [] = $this->htmlentities ( $v, ENT_COMPAT, 'utf-8' ); } @@ -969,11 +1006,11 @@ class XmlForm_Field_Text extends XmlForm_Field_SimpleText $v =($v!='')?$v:$this->defaultValue; if ($this->mode === 'edit' && $owner->modeGrid != 'view') { if ($this->readOnly) - $result [] = 'NSDefaultValue().'/>'; + $result [] = 'NSDefaultValue().' '.$this->NSGridLabel().'/>'; else - $result [] = 'NSDefaultValue().'/>'; + $result [] = 'NSDefaultValue().' '.$this->NSGridLabel().'/>'; } elseif ($this->mode === 'view' || $owner->modeGrid === 'view') { - $result [] = 'NSDefaultValue().'/>' . htmlentities ( $v, ENT_COMPAT, 'utf-8' ); + $result [] = 'NSDefaultValue().' '.$this->NSGridLabel().'/>' . htmlentities ( $v, ENT_COMPAT, 'utf-8' ); } else { $result [] = $this->htmlentities ( $v, ENT_COMPAT, 'utf-8' ); } @@ -1368,7 +1405,7 @@ class XmlForm_Field_Textarea extends XmlForm_Field { if ($this->readOnly) return ''; else{ - $html = ''; + $html = ''; if($this->hint){ $html .= ' @@ -1400,10 +1437,7 @@ class XmlForm_Field_Textarea extends XmlForm_Field { $isRequired = '0'; } - if (isNewDynaform($owner)==1){ - $values = array(); - $values[] = $this->defaultValue; - } + // Note added by Gustavo Cruz // also the fields rendered in a grid needs now have an attribute required set to 0 or 1 // that it means not required or required respectively. @@ -1415,9 +1449,9 @@ class XmlForm_Field_Textarea extends XmlForm_Field { if ($this->mode === 'edit' && $owner->modeGrid != 'view') { if (is_null($v)) $v = $this->defaultValue; if ($this->readOnly) - $result [] = ''; + $result [] = ''; else - $result [] = ''; + $result [] = ''; } elseif ($this->mode === 'view' || $owner->modeGrid === 'view') { if (stristr ( $_SERVER ['HTTP_USER_AGENT'], 'iPhone' )) { @@ -1425,7 +1459,7 @@ class XmlForm_Field_Textarea extends XmlForm_Field { $result [] = $this->htmlentities ( $v, ENT_COMPAT, 'utf-8' ); } else { //start add Alvaro - $varaux = ''; + $varaux = ''; $result [] = $this->htmlentities ( $v, ENT_COMPAT, 'utf-8' ).'
'.$varaux.'
'; //end add Alvaro } @@ -1468,16 +1502,14 @@ class XmlForm_Field_Currency extends XmlForm_Field_SimpleText { */ function render( $value = NULL, $owner = NULL) { //$this->gridFieldType = 'currency'; - if (isNewDynaform($owner)==1){ - $value = $this->defaultValue; - } + $onkeypress = G::replaceDataField ( $this->onkeypress, $owner->values ); if ($this->mode === 'edit') { if ($this->readOnly) - return 'htmlentities ( $value, ENT_QUOTES, 'utf-8' ) . '\' readOnly="readOnly" style="' . htmlentities ( $this->style, ENT_COMPAT, 'utf-8' ) . '" onkeypress="' . htmlentities ( $onkeypress, ENT_COMPAT, 'utf-8' ) . '" '.$this->NSDefaultValue().' '.$this->NSGridType().'/>'; + return 'htmlentities ( $value, ENT_QUOTES, 'utf-8' ) . '\' readOnly="readOnly" style="' . htmlentities ( $this->style, ENT_COMPAT, 'utf-8' ) . '" onkeypress="' . htmlentities ( $onkeypress, ENT_COMPAT, 'utf-8' ) . '" '.$this->NSRequiredValue().' '.$this->NSDefaultValue().' '.$this->NSGridType().'/>'; else { - $html = 'htmlentities ( $value, ENT_QUOTES, 'utf-8' ) . '\' style="' . htmlentities ( $this->style, ENT_COMPAT, 'utf-8' ) . '" onkeypress="' . htmlentities ( $onkeypress, ENT_COMPAT, 'utf-8' ) . '" '.$this->NSDefaultValue().' '.$this->NSGridType().'/>'; + $html = 'htmlentities ( $value, ENT_QUOTES, 'utf-8' ) . '\' style="' . htmlentities ( $this->style, ENT_COMPAT, 'utf-8' ) . '" onkeypress="' . htmlentities ( $onkeypress, ENT_COMPAT, 'utf-8' ) . '" '.$this->NSRequiredValue().' '.$this->NSDefaultValue().' '.$this->NSGridType().'/>'; if($this->hint){ $html .= '
@@ -1848,11 +1880,6 @@ class XmlForm_Field_YesNo extends XmlForm_Field $result = array (); $r = 1; - if (isNewDynaform($owner)==1){ - $values = array(); - $values[] = $this->defaultValue; - } - $this->mode = $this->modeForGrid; foreach ( $values as $v ) { $html = (($this->mode == 'view' || $owner->modeGrid == 'view')? ($v === '0' ? 'NO' : 'YES') : '') . '