hi, i tweaked xhr.js a bit below. interface to rest of kaMap is unchanged.&nbsp; might be cvs worthy.<br>
<br>
'garbage collection' for aXmlHttp via splicing. <br>
closure returned from XmlHttpGen means the ActiveX/xmlttprequest test is performed only on page load. <br>
<br>
may be __slight__ performance gains from the closure. <br>
<br>
// XMLhttpRequest stuff<br>
var aXmlHttp = new Array();<br>
function xmlResult() <br>
{<br>
&nbsp;&nbsp;&nbsp; for(var i=0;i&lt;aXmlHttp.length;i++)<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(aXmlHttp[i][0] &amp;&amp;
aXmlHttp[i][0].readyState==4&amp;&amp;aXmlHttp[i][0].responseText)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var f = aXmlHttp[i][2];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var o = aXmlHttp[i][1];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var s = aXmlHttp[i][0].responseText;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aXmlHttp.splice(i--,1);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f.apply(o,[s]);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; }<br>
//&nbsp;&nbsp;&nbsp; return aXmlHttp.length;<br>
}<br>
<br>
// u -&gt; url<br>
// o -&gt; object (can be null) to invoke function on<br>
// f -&gt; callback function<br>
// p -&gt; optional argument to specify POST<br>
function call(u,o,f)<br>
{<br>
&nbsp;&nbsp;&nbsp; var method = &quot;GET&quot;;<br>
&nbsp;&nbsp;&nbsp; var dat;<br>
&nbsp;&nbsp;&nbsp; if (arguments.length==4){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; method = &quot;POST&quot;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmp = u.split(/\?/);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; u = tmp[0];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dat = tmp[1];<br>
<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; var idx = aXmlHttp.length;<br>
&nbsp;&nbsp;&nbsp; aXmlHttp[idx]=new Array(2);<br>
&nbsp;&nbsp;&nbsp; aXmlHttp[idx][0] = getXMLHTTP();<br>
<br>
&nbsp;&nbsp;&nbsp; aXmlHttp[idx][1] = o;<br>
&nbsp;&nbsp;&nbsp; aXmlHttp[idx][2] = f;<br>
&nbsp;&nbsp;&nbsp; if(aXmlHttp[idx])<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aXmlHttp[idx][0].open(method,u,true);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(method == &quot;POST&quot;){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
aXmlHttp[idx][0].setRequestHeader(&quot;Content-Type&quot;,
&quot;application/x-www-form-urlencoded&quot;);<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aXmlHttp[idx][0].send(dat);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aXmlHttp[idx][0].onreadystatechange=xmlResult;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(method ==&quot;GET&quot;){ aXmlHttp[idx][0].send(null);}<br>
&nbsp;&nbsp;&nbsp; }<br>
}<br>
<br>
<br>
getXMLHTTP = xmlHttpGen();<br>
<br>
<br>
function xmlHttpGen()<br>
{<br>
&nbsp;&nbsp;&nbsp; if(typeof XMLHttpRequest != &quot;undefined&quot;)<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return function(){return new XMLHttpRequest();}<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; var msv= [&quot;Msxml2.XMLHTTP.7.0&quot;, &quot;Msxml2.XMLHTTP.6.0&quot;,<br>
&nbsp;&nbsp;&nbsp; &quot;Msxml2.XMLHTTP.5.0&quot;, &quot;Msxml2.XMLHTTP.4.0&quot;, &quot;MSXML2.XMLHTTP.3.0&quot;,<br>
&nbsp;&nbsp;&nbsp; &quot;MSXML2.XMLHTTP&quot;, &quot;Microsoft.XMLHTTP&quot;];<br>
&nbsp;&nbsp;&nbsp; for(j=0;j&lt;=msv.length;j++){<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A = new ActiveXObject(msv[j]);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(A){ <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return function(){return new ActiveXObject(msv[j]);}<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(e) { }<br>
&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp; return false;<br>
}<br>
<br>