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