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