function xmlhttp(myname) { "use strict"; var $ajax_xmlhttp = false; var $ajax_callback = null; var $ajax_response = null; var _ajax_url = null; /* anz=2 % 0 */ var _ajax_method = "GET"; var _ajax_mode = true; var _ajax_config = false; var _ajax_ctrl = null; var _ajax_responseText = null; var _ajax_responseType = null; var _ajax_myName = false; var _ajax_fifo = null; var _send_unselect = true; var _send_disabled = true; var _send_stack = new Array(); var _ddw = ddw; this.dump = function() { var $alert = ""; $alert += "url: "+_ajax_url+"\n"; $alert += "mode: "+((_ajax_mode)?"true (async)":"false (sync)")+"\n"; $alert += "config: "+((_ajax_config)?"true":"false")+"\n"; $alert += "myName: "+((_ajax_myName)? _ajax_myName:"null")+"\n"; $alert += "callback: "+(($ajax_callback)? $ajax_callback:"null")+"\n"; alert($alert); }; this.myName = function() { if ( _ajax_myName != false ) return true; for ( var o in window ) { if ( window[o] == this ) { if (_ddw) ddw.echo("xmlhttp.js [71] XMLHTTP::my name() found \""+o+"\""); _ajax_myName = o; return true; } } if ( _ajax_myName == false ) { alert("unable to install catch program\nobject not found in global name space\ndont use prefix \"var\" inside of functions"); $ajax_xmlhttp = false; return false; } if (typeof(window[_ajax_myName]) != "function") { alert(_ajax_myName+"::init() fatal error -- "+e); $ajax_xmlhttp = false; return false; } }; this.server = function(url,ctrl) { if (this.myName()) { if ( typeof(url) != "undefined" ) { if ( typeof(ctrl) != "undefined" && ctrl === true ) { $ajax_xmlhttp.open("HEAD",url,true); $ajax_xmlhttp.onreadystatechange = function() { if (this.readyState == this.DONE) { if (this.status != 200) { /* anz=4 % 0 */ alert("fatal error -- " + this.status + " unable to access to server"); $ajax_xmlhttp = false; } } }; $ajax_xmlhttp.send(null); } _ajax_url = url; } else if (_ajax_url != null) { return _ajax_url; } else { $ajax_xmlhttp = false; return false; } } }; this.callback = function(ctrl) { if (typeof(ctrl) != "undefined") { this.myName(); $ajax_callback = ctrl; } else { $ajax_callback = null; } }; this.method = function(ctrl) { if (typeof(ctrl) != "undefined") { this.myName(); var UC_ctrl = ctrl.toUpperCase(); if ( UC_ctrl == "GET" || UC_ctrl == "POST" ) { _ajax_method = ctrl; } } }; this.mode = function(ctrl) { if(typeof(ctrl) == "boolean") ctrl = (ctrl===true) ? "sync":"async"; var lc_ctrl = (typeof(ctrl) != "undefined") ? ctrl.toLowerCase() : "async"; var choise = ",,sync,async,fifo,"; if (choise.indexOf(","+lc_ctrl+",") > 0) { _ajax_ctrl = lc_ctrl; } }; this.responseType = function(ctrl) { if ("responseType" in this) { _ajax_responseType = ctrl; } else { } }; this.init = function (url, mycatch, type, mode) { this.myName(); if ( $ajax_xmlhttp ) { this.server(url); this.callback(mycatch); var $method = (typeof(type) != "undefined") ? type : "GET"; this.method($method); var $mode = (typeof(mode) != "undefined") ? mode : ((typeof($ajax_callback) === "function") ?false:true); this.mode($mode); this.config(); _ajax_config = true; if ($ajax_xmlhttp == false) return false; return true; } else { alert("xmlhttp.js [208] "+_ajax_myName+"::init fatal error -- no xmlhttp object"); return false; } }; this.xmlhttp_catch = function () { if (_ddw) ddw.echo("xmlhttp.js [217] "+_ajax_myName+"::xmlhttp_catch() -- readyState:\""+$ajax_xmlhttp.readyState+"\""); if ( $ajax_xmlhttp.readyState == 1 ) { } else if ( $ajax_xmlhttp.readyState == 4 && $ajax_xmlhttp.status != 0) { if (_ddw) ddw.echo("xmlhttp.js [227] "+_ajax_myName+"::xmlhttp_catch() -- HTML-Status: " + $ajax_xmlhttp.status); if ( $ajax_xmlhttp.status == 200 ) { _ajax_responseText = $ajax_xmlhttp.responseText; if ( typeof(this.responseText) == "string" ) { if ( _ajax_responseText.substr(0,2) == "({" ) { if (_ddw) ddw.echo("xmlhttp.js [236] "+_ajax_myName+"::response() seems to be an object"); var $e; try { var answ = _ajax_responseText; if (answ.indexOf("\n") > -1) { /* anz=2 % 0 */ var answ2 = answ.replace(/\n/g,' '); $e = eval(answ2); } else { $e = eval(answ); } _ajax_responseText = $e; } catch(e) { var $alert = "error in 255"; $alert += "\n"+_ajax_responseText+"\n"; for ( var p in e ) { $alert += "\n"+p+" "+e[p]; } alert($alert); } } } if ( _ajax_mode == false ) { return; } if ( $ajax_callback !== null ) { $ajax_callback(_ajax_responseText); } else { alert("xmlhttp.js [278] "+_ajax_myName+"::xmlhttp_catch()\n catched:\""+_ajax_responseText+"\""); if (_ddw) ddw.echo("xmlhttp.js [279] "+_ajax_myName+"::xmlhttp_catch() received \""+_ajax_responseText+"\""); } } else { var $e = new Object(); $e["call"] = "error"; $e["HTMLstatus"] = $ajax_xmlhttp.status; $e["readyState"] = $ajax_xmlhttp.readyState; $e["responseText"] = $ajax_xmlhttp.responseText; $e["url"] = _ajax_url; $ajax_callback($e); } if ( typeof(_ajax_fifo) == "object" && _ajax_fifo !== null) { if ( _ajax_fifo.length > 0 ) { var url = _ajax_fifo.shift(); } if ( _ajax_fifo.length > 0 ) { if ( _ajax_method == "POST" ) { var text = _ajax_fifo[0]; if (_ddw) ddw.echo("xmlhttp.js [304] "+_ajax_myName+"::xmlhttp_catch() shift from fifo: char count=" + text.length); $ajax_xmlhttp.open("POST",_ajax_url,_ajax_mode); if (_ajax_responseType != null && "responseType" in this) { if (_ddw) ddw.echo("xmlhttp.js [310] "+_ajax_myName+"::xmlhttp_catch() use \""+_ajax_responseType+"\""); $ajax_xmlhttp.responseType = _ajax_responseType; } $ajax_xmlhttp.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded"); $ajax_xmlhttp.send(text); } else { var url = _ajax_fifo[0]; if (_ddw) ddw.echo("xmlhttp.js [320] "+_ajax_myName+"::xmlhttp_catch() shift from fifo:\"" + url + "\""); $ajax_xmlhttp.open("GET",url,true); $ajax_xmlhttp.send(null); } } else { } } } else { } }; this.response = function() { if (typeof($ajax_xmlhttp.getResponseHeader) == "function") { if (_ddw) ddw.echo("xmlhttp.js [342] " + $ajax_xmlhttp.getResponseHeader("Content-Type")); } if (_ddw) ddw.echo("xmlhttp.js [344] "+_ajax_myName+"::response() -- type of responseText="+typeof(_ajax_responseText)); var answ = $ajax_xmlhttp.responseText; if (_ddw) ddw.echo("xmlhttp.js [346] "+_ajax_myName+"::response() "+ answ); if ( answ.substr(0,2) == "({" ) { if (_ddw) ddw.echo("xmlhttp.js [349] "+_ajax_myName+"::response() seems to be an object"); var $e; var $try = ""; try { if (_ddw) ddw.echo("xmlhttp.js [354] "+_ajax_myName+"::response() "+ answ); if (answ.indexOf("\n") > -1) { $try = "try with LF"; /* anz=2 % 0 */ var answ2 = answ.replace(/\n/g,' '); $e = eval(answ2); } else { $try = "try without LF"; $e = eval(answ); } } catch(e) { var $alert = "error in 371 "+$try; $alert += "\n"+e; $alert += "\n"+answ+"\n"; for ( var p in e ) { $alert += "\n"+p+" "+e[p]; } alert($alert); } if (_ddw) ddw.echo("xmlhttp.js [380] "+_ajax_myName+"::response() -- end of job"); if ( typeof($e) == "object" ) { $e["HTMLstatus"] = 200; _ajax_responseText = $e; return $e; } } _ajax_responseText = $ajax_xmlhttp.responseText; return $ajax_xmlhttp.responseText; }; this.config = function() { this.myName(); if (_ddw) ddw.echo("xmlhttp.js [395] "+_ajax_myName+"::config() - mode("+_ajax_ctrl+")"); if ( _ajax_ctrl == "sync" ) { _ajax_mode = false; _ajax_fifo = null; } else if ( _ajax_ctrl == "async" ) { _ajax_mode = true; _ajax_fifo = null; } else if ( _ajax_ctrl == "fifo" ) { _ajax_mode = true; _ajax_fifo = new Array(); } var p = _ajax_myName + ".response"; $ajax_response = eval(p); if ( _ajax_mode ) { $ajax_xmlhttp.onreadystatechange = this.xmlhttp_catch; if (_ddw) ddw.echo("xmlhttp.js [417] "+_ajax_myName+"::init() -- install in \""+ ((_ajax_mode)?"async":"sync")+"\" mode"); } if ( _ajax_mode ) { if ( typeof($ajax_callback) == "function" ) { _ajax_config = true; return true; } else { alert("xmlhttp.js [428] "+_ajax_myName+"::init: fatal error -- schedule not defined "+typeof($ajax_callback)); $ajax_xmlhttp = false; return false; } } else { _ajax_config = true; return true; } }; this.push = function (o) { _send_stack.push(o); }; this.send = function (o) { if (_ajax_config == false) { this.config(); } if (typeof(o) != "undefined") _send_stack.push(o); if ( $ajax_xmlhttp !== false ) { var xtr = ""; var texte = ""; var _http_text = ""; while (_send_stack.length > 0) { var _text = _send_stack.pop(); if ( typeof(_text) == "object" ) { if ( _text.tagName && _text.tagName == "FORM" ) { if (!_text.name) _text.name = "ajaxform_"+ Math.floor(Math.random()*10000); if (_ddw) ddw.echo("xmlhttp.js [468] "+_ajax_myName+"::send() catch all values from FORM \""+_text.name+"\""); for ( var i = 0; i < document.forms[_text.name].elements.length; i++ ) { var cb = ""; if (document.forms[_text.name].elements[i].isArray) { if (_ddw) ddw.echo("xmlhttp.js [474] element is an Array"); } if (document.forms[_text.name].elements[i].name && document.forms[_text.name].elements[i].name != "") { var element_i = document.forms[_text.name].elements[i]; if (_ddw) ddw.echo("xmlhttp.js [480] element "+i+" value is " + element_i.value); var vtmp = element_i.value; var t = encodeURIComponent(vtmp); if (_ddw) ddw.echo("xmlhttp.js [483] element "+i+" value is " + vtmp); var key = element_i.name; var type = element_i.type; var dis = element_i.disabled; var mm = xtr + key + "=" + t; if (_ddw) ddw.echo("xmlhttp.js [488] element "+i+" value is " + mm + " || " + vtmp); if ( type == "radio" || type == "checkbox" ) { if (vtmp.indexOf("|") > 0) { if (element_i.checked == false) { mm = xtr + key + "=" + encodeURIComponent(vtmp.split("|")[1]); } else { mm = xtr + key + "=" + encodeURIComponent(vtmp.split("|")[0]); } } else { if (element_i.checked == false) mm = ""; } cb = "("+i+": \""+element_i.checked+"\")"; } if ( !_send_disabled && dis == true) mm=""; if ( !_send_disabled && type == "button") mm=""; if (mm != "") { if (_ddw) ddw.echo("xmlhttp.js [513] "+_ajax_myName+"::send() ("+type+" "+dis+") "+key+" = \""+t+"\" " +cb); _http_text += mm; xtr = "&"; } } } } else { for ( var key in _text ) { var tmp = _text[key]; var t = encodeURIComponent(tmp); var mm = xtr + key + "=" + t; _http_text += mm; xtr = "&"; } } } } if ( _ajax_method == "GET" ) { var url; if ( _http_text != "" ) { url = _ajax_url + ( ( _ajax_url.indexOf("?") > 0 ) ? "&" : "?" ) + _http_text; } if ( typeof(url) !== "undefined" ) { if ( typeof(_ajax_fifo) == "object" && _ajax_fifo !== null ) { if (_ddw) ddw.echo("xmlhttp.js [545] "+_ajax_myName+"::send() -- fifo type=\""+typeof(_ajax_fifo)+"\""); var len = _ajax_fifo.push(url); if ( _ajax_fifo.length > 1 ) { } else { if (_ddw) ddw.echo("xmlhttp.js [553] "+_ajax_myName+"::send(\"" + typeof(url) + "\")"); $ajax_xmlhttp.open("GET",url,true); $ajax_xmlhttp.send(null); if (_ddw) ddw.echo("xmlhttp.js [557] "+_ajax_myName+"::send() send complete"); } } else { if (_ddw) ddw.echo("xmlhttp.js [562] "+_ajax_myName+"::send(\"" + url + "\")"); $ajax_xmlhttp.open("GET",url,_ajax_mode); $ajax_xmlhttp.send(null); if (_ajax_mode) { return null; } else { $ret = this.response(); if (_ddw) ddw.echo("xmlhttp.js [575] "+_ajax_myName+"::send returned "+$ret); return $ret; } } } } else if ( _ajax_method == "POST" ) { if ( typeof(_http_text) != "undefined" ) { if (typeof(_ajax_fifo) == "object" && _ajax_fifo !== null) { var len = _ajax_fifo.push(_http_text); } if (_ajax_fifo !== null && _ajax_fifo.length > 1 ) { if (_ddw) ddw.echo("xmlhttp.js [591] "+_ajax_myName+"::send(\"" + _ajax_url + "\") push to stack as ["+_ajax_fifo.length+"] charcount="+_http_text.length); } else { if (_ddw) ddw.echo ("xmlhttp.js [595] "+_ajax_myName+"::send() POST "+((_ajax_mode)? "as thread":"wait for response")); $ajax_xmlhttp.open ( _ajax_method, _ajax_url, _ajax_mode ); if (_ajax_responseType != null && _ajax_mode) { if (_ddw) ddw.echo("xmlhttp.js [599] "+_ajax_myName+"::xmlhttp_send() use \""+_ajax_responseType+"\""); $ajax_xmlhttp.responseType = _ajax_responseType; } $ajax_xmlhttp.setRequestHeader ( "Content-Type", "application/x-www-form-urlencoded"); $ajax_xmlhttp.send(_http_text); if (_ajax_mode) return; var $ret = this.response(); if (_ddw) ddw.echo("xmlhttp.js [609] "+_ajax_myName+"::send returned "+$ret); return $ret; } } else { alert("xmlhttp.js [617] "+_ajax_myName+"::send() fatal error -- undefined request for POST"); return false; } } else { alert("xmlhttp.js [623] "+_ajax_myName+"::send() fatal error -- unsupported mode "+_ajax_method); return false; } } else { alert("xmlhttp.js [629] "+_ajax_myName+"::send fatal error -- no xmlhttp object"); return false; } }; this.show = function () { return _ajax_url; }; this.debug = function (ctrl) { _ddw = (ctrl) ? ddw : false; }; try { if ( window.XMLHttpRequest ) { $ajax_xmlhttp = new XMLHttpRequest(); } else if ( window.ActiveXObject ) { $ajax_xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } } catch(e) {} if ( typeof($ajax_xmlhttp) != "object" ) { alert("fatal error -- Your browser does not support XMLHTTP."); $ajax_xmlhttp = false; return false; } if (typeof (myname) != "undefined") { if (_ddw) ddw.echo("xmlhttp.js [667] XMLHTTP::__construct() -- set name to "+myname); _ajax_myName = myname; } } if ( typeof(view) == "undefined" ) { var view = function(...p) { var _argv = p; var e = _argv[0]; var n = (_argv.length > 1) ? _argv[1] : 0; n++; if ( typeof(e) == "object" ) { var _view = ""; var _sp = ""; for (var i=0; i