1/** 2 * User: shprota 3 * Date: 15.03.11 4 * Time: 19:40 5 */ 6 7Element.implement({ 8 getValue: function(){ 9 switch(this.get('tag')){ 10 case 'select': 11 var values = []; 12 Array.each(this.options, function(option){ 13 if (option.selected) values.push([option.value, option.text].pick()); 14 }); 15 return (this.multiple) ? values : values[0]; 16 case 'input': if (!(this.checked && ['checkbox', 'radio'].contains(this.type)) && !['hidden', 'text', 'password'].contains(this.type)) break; 17 case 'textarea': return this.value; 18 } 19 return false; 20 } 21}); 22 23var SCalc = new Class({ 24 initialize: function(frm, formula, nsigns) { 25 this.form = $(frm); 26 this.formula = formula; 27 this.nsigns = nsigns || 2; 28 var _this = this; 29 this.form.getElements('input, textarea, select').each(function(el){ 30 if(this.isFormulaPart(el)) { 31 el.addEvent('change', _this.calcData.bind(_this)); 32 if(el.get('tag') == 'input' && (el.getAttribute('type') == 'radio' || el.getAttribute('type') == 'checkbox')) 33 el.addEvent('click', _this.calcData.bind(_this)); 34 35 if(el.getAttribute('type') == 'text' || el.get('tag') == 'select') 36 el.addEvent('keyup', _this.calcData.bind(_this)); 37 } 38 }.bind(this)); 39 this.calcData(); 40 } 41 ,isFormulaPart: function(el) { 42 var isPart = false;
43 var regexp = new RegExp('\{'+el.name+'\}'); 44 this.formula.each(function(formula){ 45 if(el.name && formula.match(regexp) !== null) { 46 isPart = true; 47 return false; 48 } 49 }); 50 return isPart; 51 } 52 ,calcData: function() { 53 var vals = []; 54 this.form.getElements('input, textarea, select').each(function(el) { 55 if(el.name) { 56 var v = el.getValue(); 57 if(v!==false)vals[el.name] = v; 58 } 59 }); 60 this.formula.each(function(formula){ 61 var wformula = formula; 62 for(var fld in vals) 63 if(typeof vals[fld] !== 'function') 64 wformula = wformula.replace(new RegExp('{'+fld+'}','gm'), vals[fld]?vals[fld].replace(',', '.'):0); 65 wformula = wformula.replace(/\{.*?\}/g, '0'); 66 var result; 67 try { result = eval(wformula); } 68 catch(e) { result = NaN; } 69 var rfield = formula.split('=')[0]; 70 if(rfield.trim()) 71 this.setResult(rfield, result); 72 }.bind(this)); 73 } 74 ,setResult: function(rfield, result) { 75 if(isFinite(result)) 76 { 77 var divider = Math.pow(10, this.nsigns); 78 result = Math.round(result*divider)/divider; 79 $(rfield).value=result; 80 $(rfield+'_disp').set('text',result); 81 } 82 else 83 { 84 $(rfield+'_disp').set('text',''); 85 $(rfield).value=result; 86 } 87 } 88}); 89 90 91window.addEvent('domready', function(){ 92 if(!__FC_FORMULA)return; 93 var formCheck = new FormCheck('calcForm', { 94 display: { 95 keepFocusOnError: 0, 96 showErrors: 1, 97 checkValueIfEmpty: 0 98 } 99 ,regexp: { 100 number : /^[-+]?\d*(\.|,)?\d+$/ 101 } 102 ,submit: __FC_SUBMIT 103 }); 104 new SCalc('calcForm', __FC_FORMULA); 105 if(!__FC_SUBMIT){ 106 formCheck.addEvent('validateSuccess', function(){ 107 new Request.JSON({ 108 url: __FC_BASE_URL+'/index.php' 109 ,method: 'post' 110 ,data: { 111 option: 'com_formcalc' 112 ,task: 'checkCaptcha' 113 ,format: 'raw' 114 ,captcha: formCheck.form.captcha.value 115 } 116 ,onSuccess: function(r) { 117 //var r = Json.evaluate(resp); 118 if(r.success)$('calcForm').submit(); 119 else alert(__FC_CAPTCHA_TEXT); 120 } 121 }).send(); 122 //$('calcForm').submit(); 123 }); 124 } 125});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.