425e28e3d437b9631aeead40b2f45e5796e179d3
[freeside.git] / httemplate / elements / xmlhttp.html
1 <%
2   my ( $url, @subs ) = @_;
3
4   $url .= ( ($url =~ /\?/) ? '&' : '?' ).
5           'sub=';
6
7 %>
8
9 <SCRIPT TYPE="text/javascript">
10
11   function rs_init_object() {
12     var A;
13     try {
14       A=new ActiveXObject("Msxml2.XMLHTTP");
15     } catch (e) {
16       try {
17         A=new ActiveXObject("Microsoft.XMLHTTP");
18       } catch (oc) {
19         A=null;
20       }
21     }
22     if(!A && typeof XMLHttpRequest != "undefined")
23       A = new XMLHttpRequest();
24     if (!A)
25       alert("Can't create XMLHttpRequest object");
26     return A;
27
28   }
29
30   <% foreach my $func (@subs) { 
31
32        my $furl = $url . uri_escape($func);
33        $furl =~ s/\"/\\\\\"/; #javascript escape
34
35   %>
36
37     function <%=$func%>() {
38         // count args; build URL
39         var url = "<%=$furl%>";
40         var a = <%=$func%>.arguments;
41         for (var i = 0; i < a.length-1; i++) 
42             url = url + "&arg=" + escape(a[i]);
43         url = url.replace( /[+]/g, '%2B'); // fix the unescaped plus signs 
44         var xmlhttp = rs_init_object();
45         xmlhttp.open("GET", url, true);
46         xmlhttp.onreadystatechange = function() {
47             if (xmlhttp.readyState != 4) 
48                 return;
49             //rs_debug("received " + x.responseText);
50
51             if (xmlhttp.status != 200) {
52               alert(xmlhttp.status + " status connecting to " + url);
53             } else {
54               var data = xmlhttp.responseText;
55               a[a.length-1](data);
56             }
57         }
58         xmlhttp.send(null);
59         //rs_debug("x_$func_name url = " + url);
60         //rs_debug("x_$func_name waiting..");
61     }
62
63   <% } %>
64
65 </SCRIPT>