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