Bug in tax_types_list (spec_id)
[fa-stable.git] / js / utils.js
1 //
2 //      JsHttpRequest class extensions.
3 //
4     JsHttpRequest.request= function(submit) {
5                 var url = window.location.toString();
6                 url = url.substring(0, url.indexOf('?'));
7
8         JsHttpRequest.query(
9             'POST '+url, // backend
10             this.formValues(submit),
11                         
12             // Function is called when an answer arrives. 
13             function(result, errors) {
14                 // Write the answer.
15                 if (result) {
16                           for(var i in result ) { 
17                           atom = result[i];
18                           cmd = atom['n'];
19                           property = atom['p'];
20                           type = atom['c'];
21                           id = atom['t'];
22                           data = atom['data'];
23 //                              debug(cmd+':'+property+':'+type+':'+id);
24                         // seek element by id if there is no elemnt with given name
25                           objElement = document.getElementsByName(id)[0] || document.getElementById(id);
26                   if(cmd=='as') {
27                                   eval("objElement."+property+"=data;");
28                           } else if(cmd=='up') {
29 //                              if(!objElement) debug('No element "'+id+'"');
30                             if (objElement.tagName == 'INPUT' || objElement.tagName == 'TEXTAREA')
31                                   objElement.value = data;
32                             else
33                                   objElement.innerHTML = data; // selector, div, span etc
34                           } else if(cmd=='di') { // disable/enable element
35                                   objElement.disabled = data;
36                           } else if(cmd=='fc') { // set focus
37                                   _focus = data;
38                           } else if(cmd=='js') {        // evaluate js code
39                                   eval(data);
40                           } else if(cmd=='rd') {        // client-side redirection
41                                   _page_reload = true;
42                                   window.location = data;
43                           } else {
44                                   errors = errors+'<br>Unknown ajax function: '+cmd;
45                         }
46                   }
47         // Write errors to the debug div.
48                   document.getElementById('msgbox').innerHTML = errors;
49
50                   Behaviour.apply();
51                   if (errors.length>0)
52                         window.scrollTo(0,0);
53                         //document.getElementById('msgbox').scrollIntoView(true);
54           // Restore focus if we've just lost focus because of DOM element refresh
55                   setFocus();
56                 }
57             },
58             false  // do not disable caching
59         );
60     }
61         // returns input field values submitted when form button 'name' is pressed
62         //
63         JsHttpRequest.formValues = function(inp)
64         {
65                 var objForm;
66                 var submitObj;
67                 var q = {};
68                 
69                 if (typeof(inp) == "string")
70                         submitObj = document.getElementsByName(inp)[0];
71                 else
72                         submitObj = inp;
73                 if(submitObj) {
74                   objForm = submitObj.form;
75                 }
76                 if (objForm)
77                 {
78                         var formElements = objForm.elements;
79                         for( var i=0; i < formElements.length; i++)
80                         {
81                           var el = formElements[i];
82                                 if (!el.name) continue;
83                                 if (el.type )
84                                   if( 
85                                   ((el.type == 'radio' || el.type == 'checkbox') && el.checked == false)
86                                   || (el.type == 'submit' && el.name!=submitObj.name))
87                                         continue;
88                                 if (el.disabled && el.disabled == true)
89                                         continue;
90                                 var name = el.name;
91                                 if (name)
92                                 {
93                                         if(el.type=='select-multiple')
94                                         {
95                                                 for (var j = 0; j < el.length; j++)
96                                                 {
97                                                         if (el.options[j].selected == true)
98                                                                 q[name] = el.options[j].value;
99                                                 }
100                                         }
101                                         else
102                                         {
103                                                 q[name] = el.value;
104                                         }
105                                 } 
106                         }
107                 }
108                 // this is to avoid caching problems
109                 q['_random'] = Math.random()*1234567;
110                 return q;
111         }
112 //
113 //      User price formatting
114 //
115 function price_format(post, num, dec, label) {
116         //num = num.toString().replace(/\$|\,/g,'');
117         if(isNaN(num))
118                 num = "0";
119         sign = (num == (num = Math.abs(num)));
120         if(dec<0) dec = 2;
121         decsize = Math.pow(10, dec);
122         num = Math.floor(num*decsize+0.50000000001);
123         cents = num%decsize;
124         num = Math.floor(num/decsize).toString();
125         for( i=cents.toString().length; i<dec; i++){
126                 cents = "0" + cents;
127         }
128         for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
129                 num = num.substring(0,num.length-(4*i+3))+user.ts+
130                         num.substring(num.length-(4*i+3));
131          num = ((sign)?'':'-') + num;
132          if(dec!=0) num = num + user.ds + cents;
133         if(label)
134             document.getElementById(post).innerHTML = num;
135         else
136             document.getElementsByName(post)[0].value = num;
137 }
138
139 function get_amount(doc, label) {
140             if(label)
141                 var val = document.getElementById(doc).innerHTML;
142             else
143                 var val = document.getElementsByName(doc)[0].value;
144                 val = val.replace(new RegExp('\\'+user.ts, 'g'),'');
145                 val = val.replace(new RegExp('\\'+user.ds, 'g'),'.');
146                 return 1*val;
147 }
148
149 function goBack() {
150         if (window.history.length <= 1)
151          window.close();
152         else
153          window.history.go(-1);
154 }
155
156 function setFocus(name, byId) {
157
158   if(!name) {
159         if (_focus)     
160                 name = _focus;  // last focus set in onfocus handlers
161         else {  // no current focus -  set it from from hidden var (first page display)
162           var cur = document.getElementsByName('_focus')[0];
163           if(cur) name = cur.value;
164         }
165   }
166   if(byId)
167         el = document.getElementById(name);
168   else
169         el = document.getElementsByName(name)[0];
170
171   if(el && el.focus) {
172     // The timeout is needed to prevent unpredictable behaviour on IE & Gecko.
173     // Using tmp var prevents crash on IE5
174     var tmp = function() {el.focus()};
175         setTimeout(tmp, 0);
176   }
177 }