/* ajaxcontentmws.js - Foteos Macrides (author and Copyright holder) Initial: June 22, 2006 - Last Revised: March 24, 2008 Wrapper function set for getting and using the responseText and / or responseXML from a GET or POST XMLHttpRequest, which can be used to generate dynamic content for overlib or overlib2 calls, or to modify the content of a displayed STICKY popup dynamically. For GET Use: onmouseover="return OLgetAJAX(url, command, delay, css);" onmouseout="OLclearAJAX();" (if delay > 0) or: onclick="OLgetAJAX(url, command, 0, css); return false;" or: onload="OLgetAJAX(url, command, 0, css); Where: url (required) is a quoted string, or unquoted string variable name or array entry, with the full, relative, or partial URL for a file or a server-side script (php, asp, or cgi, e.g. perl), and may have a query string appended (e.g., 'http://my.domain.com/scripts/myScript.php?foo=bar&life=grand'). And: command (required) is the function reference (unquoted name without parens) of a function to be called when the server's response has been received (it could instead be an inline function, i.e., defined within the 2nd argument, or a quoted string for a function with parens and any args) And: delay (may be omitted unless css is included) is an unquoted number indicating the number of millisecs to wait before initiating an XMLHttpRequest GET request. It should be 0 when using onclick or onload, but may be a modest value such as 300 for onmouseover to avoid any chatter of requests. When used with onmouseover, include: onmouseout="OLclearAJAX();" to clear the request if the user does not hover for at least that long. If the popup is not STICKY, include an nd or nd2 call, e.g., onmouseout="OLclearAJAX(); nd();" And: css (may be omitted) is a quoted string with the CSS class (e.g. 'ovfl510' for .ovfl510 {width:510px; height:145px; overflow:auto; ...} ) for a div to encase the responseText and set the width, height and scrollbars in the main text area of the popup, or the unquoted number 0 if no encasing div is to be used. For POST substitute OLpostAJAX(url, qry, command, delay, css); Where qry (required) is the string to be posted, typically a query string (without a lead ?) and the other arguments are as above. See http://www.macridesweb.com/oltest/AJAX.html for more information. */ // Initialize our global variables for this function set. var OLhttp=false,OLcommandAJAX=null,OLdelayidAJAX=0,OLclassAJAX='', OLresponseAJAX='',OLabortAJAX=0,OLdebugAJAX=0; // Create a series of wrapper functions (e.g. OLcmdT#() for ones which // use OLhttp.responseText via the OLresponseAJAX global, and OLcmdX#() // for ones which use OLhttp.responseXML) whose reference (unquoted name // without parens) is the 2nd argument in OLgetAJAX(url,command,delay,css) // calls. This one is for the first example in the AJAX.html support // document, to use the OLresponseAJAX global as the lead argument for an // overlib popup. Put your functions in the head, or in another imported // .js file, so that they will not be affected by updates of this .js file. // function OLcmdExT1() { return overlib(OLresponseAJAX, TEXTPADDING,0, CAPTIONPADDING,4, CAPTION,'Example with AJAX content via responseText.  Popup scrolls with the window.', WRAP, BORDER,2, STICKY, CLOSECLICK, SCROLL, MIDX,0, RELY,100, STATUS,'Example with AJAX content via responseText of XMLHttpResponse'); } // Alert for old browsers which lack XMLHttpRequest support. function OLsorryAJAX() { alert('Sorry, AJAX is not supported by your browser.'); return false; } // Check 2nd arg for function function OLchkFuncAJAX(ar){ var t=typeof ar;return (((t=='function'))||((t=='string')&&(/.+\(.*\)/.test(ar)))); } // Alert for bad 2nd argument function OLnotFuncAJAX(m) { if(over)cClick(); alert('The 2nd arg of OL'+m+'AJAX is not a function reference, nor an inline function, ' +'nor a quoted string with a function indicated.'); return OLclearAJAX(); } // Alert for indicating an XMLHttpRequest network error. function OLerrorAJAX() { if(OLhttp.status&&OLhttp.status!=2147746065)alert('Network error '+OLhttp.status+'. Try again later.'); return false; } // Returns a new XMLHttpRequest object, or false for older browsers // which did not yet support it. Called as OLhttp=OLnewXMLHttp() via // the OLgetAJAX(url,command,delay,css) wrapper function. // function OLnewXMLHttp() { var f=false,req=f; if(window.XMLHttpRequest)eval(new Array('try{', 'req=new XMLHttpRequest();','}catch(e){','req=f;','}').join('\n')); /*@cc_on @if(@_jscript_version>=5)if(!req) eval(new Array('try{','req=new ActiveXObject("Msxml2.XMLHTTP");', '}catch(e){','try{','req=new ActiveXObject("Microsoft.XMLHTTP");', '}catch(e){','req=f;','}}').join('\n')); @end @*/ return req; } // Handle the OLhttp.responseText string from the XMLHttpRequest object. function OLdoAJAX() { if(OLhttp.readyState==4){ if(OLdebugAJAX)alert( 'OLhttp.status = '+OLhttp.status+'\n' +'OLhttp.statusText = '+OLhttp.statusText+'\n' +'OLhttp.getAllResponseHeaders() = \n' +OLhttp.getAllResponseHeaders()+'\n' +'OLhttp.getResponseHeader("Content-Type") = ' +OLhttp.getResponseHeader("Content-Type")+'\n'); if(OLhttp.status==200||(OLhttp.status==0&&!OLabortAJAX&&!OLie55)){ OLresponseAJAX=OLclassAJAX?'
':''; OLresponseAJAX += OLhttp.responseText; OLresponseAJAX += OLclassAJAX?'
':''; if(OLdebugAJAX)alert('OLresponseAJAX = \n'+OLresponseAJAX); OLclassAJAX=0; return (typeof OLcommandAJAX=='string')?eval(OLcommandAJAX):OLcommandAJAX(); }else{ OLclassAJAX=0; OLabortAJAX=0; return OLerrorAJAX(); } } } // Actually make the request initiated via OLgetAJAX or OLpostAJAX, or // invoke a "permission denied" alert if a cross-domain URL was used. function OLsetAJAX(url,qry) { if(window.location.protocol.indexOf('http')==0&& (url.indexOf('file:')==0||url.indexOf('ftp:')==0)){ alert('[object Error]\n(Cross-domain access not permitted)');return false;} qry=(qry||null);var s='',m=(qry)?'POST':'GET';OLabortAJAX=0; OLdelayidAJAX=0;eval(new Array('try{','OLhttp.open(m,url,true);', '}catch(e){','s=e','OLhttp=false;','}').join('\n'));if(!OLhttp){ alert(s+'\n(Cross-domain access not permitted)');return false;}if(qry) OLhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded'); OLhttp.onreadystatechange=OLdoAJAX; OLhttp.send(qry); } // Clear or abort any delayed OLsetAJAX call or pending request. function OLclearAJAX() { if(OLdelayidAJAX){clearTimeout(OLdelayidAJAX);OLdelayidAJAX=0;} if(OLhttp&&!OLdebugAJAX){OLabortAJAX=1;OLhttp.abort();} return false; } // Load a new XMLHttpRequest object into the OLhttp global, load the // OLcommandAJAX and OLclassAJAX globals, and initiate a GET request // via OLsetAJAX(url) to populate OLhttp. function OLgetAJAX(url,command,delay,css) { if(!OLchkFuncAJAX(command))return OLnotFuncAJAX('get'); OLclearAJAX();OLhttp=OLnewXMLHttp();if(!OLhttp)return OLsorryAJAX(); OLcommandAJAX=command;delay=(delay||0);css=(css||0);OLclassAJAX=css; if(delay)OLdelayidAJAX=setTimeout("OLsetAJAX('"+url+"')",delay); else OLsetAJAX(url); } // Load a new XMLHttpRequest object into the OLhttp global, load the // OLcommandAJAX and OLclassAJAX globals, and initiate a POST request // via OLsetAJAX(url,qry) to populate OLhttp. function OLpostAJAX(url,qry,command,delay,css) { if(!OLchkFuncAJAX(command))return OLnotFuncAJAX('post'); OLclearAJAX();OLhttp=OLnewXMLHttp();if(!OLhttp)return OLsorryAJAX(); qry=(qry||0);OLcommandAJAX=command;delay=(delay||0);css=(css||0);OLclassAJAX=css; if(delay)OLdelayidAJAX=setTimeout("OLsetAJAX('"+url+"','"+qry+"')",delay); else OLsetAJAX(url,qry); }