X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=blobdiff_plain;f=js%2Futils.js;h=0bb87d949fc05b8b0d05121061394e96fe095cdf;hb=b32d16b2c0c6c43e569ebe87e2a13ceb892b5788;hp=2bd2cfa5e7c28a1e8a2c920c70963ed0f7614829;hpb=c935a4090e3f152dd5549217d69b5b5036197024;p=fa-stable.git diff --git a/js/utils.js b/js/utils.js index 2bd2cfa5..0bb87d94 100644 --- a/js/utils.js +++ b/js/utils.js @@ -1,14 +1,34 @@ // // JsHttpRequest class extensions. // - JsHttpRequest.request= function(submit) { - var url = window.location.toString(); - url = url.substring(0, url.indexOf('?')); +// Main functions for asynchronus form submitions +// Trigger is the source of request and can have following forms: +// - input object - all form values are also submited +// - arbitrary string - POST var trigger with value 1 is added to request; +// if form parameter exists also form values are submited, otherwise +// request is directed to current location +// + JsHttpRequest.request= function(trigger, form) { + + var submitObj = typeof(trigger) == "string" ? + document.getElementsByName(trigger)[0] : trigger; + + form = form || (submitObj && submitObj.form); + + var url = form ? form.action : + window.location.toString(); + + if (!form) url = url.substring(0, url.indexOf('?')); + + var values = this.formValues(trigger, form); + if (!submitObj) + values[trigger] = 1; + // this is to avoid caching problems + values['_random'] = Math.random()*1234567; JsHttpRequest.query( 'POST '+url, // backend - this.formValues(submit), - + values, // Function is called when an answer arrives. function(result, errors) { // Write the answer. @@ -24,26 +44,26 @@ // seek element by id if there is no elemnt with given name objElement = document.getElementsByName(id)[0] || document.getElementById(id); if(cmd=='as') { - eval("objElement."+property+"=data;"); + eval("objElement.setAttribute('"+property+"',"+data+");"); } else if(cmd=='up') { // if(!objElement) debug('No element "'+id+'"'); if (objElement.tagName == 'INPUT' || objElement.tagName == 'TEXTAREA') objElement.value = data; else objElement.innerHTML = data; // selector, div, span etc - } else if(cmd=='di') { // disable/enable element + } else if(cmd=='di') { // disable/enable element objElement.disabled = data; } else if(cmd=='fc') { // set focus _focus = data; } else if(cmd=='js') { // evaluate js code eval(data); } else if(cmd=='rd') { // client-side redirection - _page_reload = true; window.location = data; } else { errors = errors+'
Unknown ajax function: '+cmd; } } + // Write errors to the debug div. document.getElementById('msgbox').innerHTML = errors; @@ -60,19 +80,19 @@ } // returns input field values submitted when form button 'name' is pressed // - JsHttpRequest.formValues = function(inp) + JsHttpRequest.formValues = function(inp, objForm) { - var objForm; - var submitObj; + var submitObj = inp; var q = {}; + if (typeof(inp) == "string") submitObj = document.getElementsByName(inp)[0]; else submitObj = inp; - if(submitObj) { - objForm = submitObj.form; - } + + objForm = objForm || (submitObj && submitObj.form); + if (objForm) { var formElements = objForm.elements; @@ -83,7 +103,7 @@ if (el.type ) if( ((el.type == 'radio' || el.type == 'checkbox') && el.checked == false) - || (el.type == 'submit' && el.name!=submitObj.name)) + || (el.type == 'submit' && (!submitObj || el.name!=submitObj.name))) continue; if (el.disabled && el.disabled == true) continue; @@ -105,14 +125,13 @@ } } } - // this is to avoid caching problems - q['_random'] = Math.random()*1234567; return q; } // // User price formatting // -function price_format(post, num, dec, label) { +function price_format(post, num, dec, label, color) { + var el = label ? document.getElementById(post) : document.getElementsByName(post)[0]; //num = num.toString().replace(/\$|\,/g,''); if(isNaN(num)) num = "0"; @@ -131,9 +150,12 @@ function price_format(post, num, dec, label) { num = ((sign)?'':'-') + num; if(dec!=0) num = num + user.ds + cents; if(label) - document.getElementById(post).innerHTML = num; + el.innerHTML = num; else - document.getElementsByName(post)[0].value = num; + el.value = num; + if(color) { + el.style.color = (sign) ? '' : '#FF0000'; + } } function get_amount(doc, label) { @@ -171,7 +193,8 @@ function setFocus(name, byId) { if(el && el.focus) { // The timeout is needed to prevent unpredictable behaviour on IE & Gecko. // Using tmp var prevents crash on IE5 - var tmp = function() {el.focus()}; + + var tmp = function() {el.focus(); if (el.select) el.select();}; setTimeout(tmp, 0); } }