+/**********************************************************************
+ Copyright (C) FrontAccounting, LLC.
+ Released under the terms of the GNU General Public License, GPL,
+ as published by the Free Software Foundation, either version 3
+ of the License, or (at your option) any later version.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
+***********************************************************************/
//
// JsHttpRequest class extensions.
//
// request is directed to current location
//
JsHttpRequest.request= function(trigger, form) {
-
-
+ var mark = document.getElementById('ajaxmark');
+ if(mark) mark.style.visibility = 'visible';
+ if (trigger.tagName=='A') {
+ var content = {};
+ var upload = 0;
+ var url = trigger.href;
+ if (trigger.id) content[trigger.id] = 1;
+ } else {
var submitObj = typeof(trigger) == "string" ?
document.getElementsByName(trigger)[0] : trigger;
form = form || (submitObj && submitObj.form);
+ var upload = form && form.enctype=='multipart/form-data';
+
var url = form ? form.action :
window.location.toString();
- if (!form) url = url.substring(0, url.indexOf('?'));
+ var content = this.formInputs(trigger, form, upload);
- var values = this.formValues(trigger, form);
+ if (!form) url = url.substring(0, url.indexOf('?'));
+
if (!submitObj)
- values[trigger] = 1;
- // this is to avoid caching problems
- values['_random'] = Math.random()*1234567;
+ content[trigger] = 1;
+
+ }
+ // this is to avoid caching problems
+ content['_random'] = Math.random()*1234567;
+
JsHttpRequest.query(
- 'POST '+url, // backend
- values,
+ (upload ? "form." : "")+"POST "+url, // force form loader
+ content,
// Function is called when an answer arrives.
function(result, errors) {
// Write the answer.
+ var newwin = 0;
if (result) {
for(var i in result ) {
atom = result[i];
if(cmd=='as') {
eval("objElement.setAttribute('"+property+"',"+data+");");
} else if(cmd=='up') {
-// if(!objElement) debug('No element "'+id+'"');
+// if(!objElement) alert('No element "'+id+'"');
+ if(objElement) {
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
objElement.disabled = data;
} else if(cmd=='fc') { // set focus
eval(data);
} else if(cmd=='rd') { // client-side redirection
window.location = data;
+ } else if(cmd=='pu') { // pop-up
+ newwin = 1;
+ window.open(data,'REP_WINDOW','toolbar=no,scrollbar=no,resizable=yes,menubar=no');
} else {
errors = errors+'<br>Unknown ajax function: '+cmd;
}
// Write errors to the debug div.
document.getElementById('msgbox').innerHTML = errors;
+ var mark = document.getElementById('ajaxmark');
+ if(mark) mark.style.visibility = 'hidden';
Behaviour.apply();
+
if (errors.length>0)
window.scrollTo(0,0);
//document.getElementById('msgbox').scrollIntoView(true);
// Restore focus if we've just lost focus because of DOM element refresh
- setFocus();
+ if(!newwin) {
+ setFocus();
+ }
}
},
false // do not disable caching
);
}
- // returns input field values submitted when form button 'name' is pressed
- //
- JsHttpRequest.formValues = function(inp, objForm)
+ // collect all form input values plus inp trigger value
+ JsHttpRequest.formInputs = function(inp, objForm, upload)
{
var submitObj = inp;
var q = {};
-
if (typeof(inp) == "string")
submitObj = document.getElementsByName(inp)[0];
for( var i=0; i < formElements.length; i++)
{
var el = formElements[i];
+ var name = el.name;
if (!el.name) continue;
+ if(upload) { // for form containing file inputs collect all
+ // form elements and add value of trigger submit button
+ // (internally form is submitted via form.submit() not button click())
+ q[name] = submitObj.type=='submit' && el==submitObj ? el.value : el;
+ continue;
+ }
if (el.type )
if(
((el.type == 'radio' || el.type == 'checkbox') && el.checked == false)
continue;
if (el.disabled && el.disabled == true)
continue;
- var name = el.name;
if (name)
{
if(el.type=='select-multiple')
else
var val = document.getElementsByName(doc)[0].value;
val = val.replace(new RegExp('\\'+user.ts, 'g'),'');
- val = val.replace(new RegExp('\\'+user.ds, 'g'),'.');
- return 1*val;
+ val = +val.replace(new RegExp('\\'+user.ds, 'g'),'.');
+ return isNaN(val) ? 0 : val;
}
function goBack() {
}
function setFocus(name, byId) {
-
+ if(document.location.pathname.indexOf('index.php') != -1) {
+ // this is application menu page - set focus on first link
+ // var el = document.getElementById('msgbox');
+ // TODO find first link after msgbox and set focus
+ }
if(!name) {
if (_focus)
name = _focus; // last focus set in onfocus handlers