Ajax funcionality additions
[fa-stable.git] / js / inserts.js
1 function debug(msg) {
2     document.getElementById('msgbox').innerHTML=
3         document.getElementById('msgbox').innerHTML+'<br>'+msg
4 }
5
6 function progbar(container) {
7     container.innerHTML= "<center><img src='"+
8         user.theme+"images/progressbar1.gif' /> "+
9         user.loadtxt+"</center>";
10 }
11
12 function _expand(tabobj) {
13
14   var ul = tabobj.parentNode.parentNode;
15   var alltabs=ul.getElementsByTagName("input");
16   var frm = tabobj.form;
17
18   if (ul.getAttribute("rel")){
19         for (var i=0; i<alltabs.length; i++){
20           alltabs[i].className = "ajaxbutton"  //deselect all tabs
21         }
22         tabobj.className = "current";
23         JsHttpRequest.request(tabobj.name)
24   }
25 }
26
27 //interface for selecting a tab (plus expand corresponding content)
28 function expandtab(tabcontentid, tabnumber) {
29   var tabs = document.getElementById(tabcontentid);
30  _expand(tabs.getElementsByTagName("input")[tabnumber]);
31 }
32
33 function _set_combo_input(e) {
34 //                e.onkeydown=function(event) { 
35                   e.onblur=function(event) { 
36                         event = event||window.event;
37                         if(!this.back) {
38                           var but_name = this.name.substring(0, this.name.length-4)+'button';
39                           var button = document.getElementsByName(but_name)[0];
40                           var select = document.getElementsByName(this.getAttribute('rel'))[0];
41                           var byid = this.className=='combo';
42                           if(button) { // if *_button set submit search request
43                             JsHttpRequest.request(but_name);
44                           }
45                           return false;
46                         }
47                   };
48                   e.onkeyup = function() {
49                         var select = document.getElementsByName(this.getAttribute('rel'))[0];
50                         if(select && select.selectedIndex>=0) {
51                           var len = select.length;
52                           var byid = this.className=='combo';
53                           var ac = this.value.toUpperCase();
54                           select.options[select.selectedIndex].selected = false;
55                           for (i = 0; i < len; i++) {
56                                 var txt = byid ? select.options[i].value : select.options[i].text;
57                                 if (txt.toUpperCase().indexOf(ac) >= 0) {
58                                   select.options[i].selected = true;
59                                   break;
60                                 }
61                           }
62                         }
63                   };
64           e.onkeydown = function(ev) { 
65 //        this.lastkey = event.keyCode;
66                           this.back = (ev||window.event).shiftKey; // save shift state for onblur handler
67                   }
68 }
69
70 function _set_combo_select(e) {
71
72                 e.onblur = function(event) {
73                         event = event||window.event;
74                         if(!this.back && this.selectedIndex>=0) {
75                                 var sname = '_'+this.name+'_update';
76                                 var box = document.getElementsByName(this.getAttribute('rel'))[0];
77                                 var opt = this.options[this.selectedIndex];
78                                 var byid = this.className=='combo';
79                                 var update = document.getElementsByName(sname)[0];
80                                 if (opt.value != 0) {
81                                   if(box) box.value = byid ? opt.value : opt.text;
82                                   if(update) {
83                                         if(update.className == 'combo_select') {
84                                           document.getElementsByName('_focus')[0].value=this.name;
85                                             JsHttpRequest.request(sname);
86                                         } else {
87                                           update.click();
88                                           this.focus();
89                                         }
90                                   } 
91                                 }
92                                 this.size = 1;
93                         }
94                                 return true;
95                 }
96                 e.onchange = function() {
97                         if (this.options[this.selectedIndex].value==0)
98                                 document.getElementsByName(this.getAttribute('rel'))[0].value='';
99                 }
100 /*              e.onkeydown = function(event) {
101                         event = event||window.event;
102                     if(event.keyCode==13) {
103                         var box = document.getElementsByName(this.getAttribute('rel'))[0];                      
104                         this.style.display='none';
105                         box.style.display='';
106                         this.back=true;
107                         box.focus();
108                     }
109                 }
110 */}
111
112 /*
113  Behaviour definitions
114 */
115 var inserts = {
116     '.amount': function(element) {
117                 if(element.onblur==undefined) {
118                   var dec = element.getAttribute("dec");
119                   element.onblur = function() {
120                         price_format(this.name, get_amount(this.name), dec);
121                   };
122                 }
123         },
124         'select': function(element) {
125                 if(element.onfocus==undefined) {
126                         element.onfocus = function() {
127                                 document.getElementsByName('_focus')[0].value = element.name;
128                         };
129                         element.onkeydown = function(event) { 
130                           event = event||window.event;
131                           this.back = event.shiftKey; // save shift state for onblur handler
132                           this.lastkey = event.keyCode; 
133                           if (event.keyCode==32) {
134                            if(this.init_size==undefined)
135                                 this.init_size = this.size;
136                           if(this.init_size<=1) {
137                            if(this.size>1) {
138                                 this.size = 1;
139                            } else{
140                                 var sel = this.selectedIndex;
141                                 this.size = this.options.length;
142                                 if(this.size>10) this.size = 10;
143                                 this.selectedIndex = sel;
144                            }
145                           }
146                          }
147                         };
148                         element.onblur = function() { 
149                             if(this.init_size<=1)
150                                 this.size = 1;
151                         };
152                 var c = element.className;
153                 if (c == 'combo' || c == 'combo2')
154 //              if (element.onblur==undefined) {
155                         _set_combo_select(element);
156 //              }
157                 }
158         },
159         'input': function(element) { // we do not want to change focus on submit
160                 if(element.type!='submit' && element.onfocus==undefined) {
161                         element.onfocus = function() {
162                                 document.getElementsByName('_focus')[0].value = element.name;
163                         };
164                   var c = element.className;
165                   if (c == 'combo' || c == 'combo2') {
166                           if(element.onkeydown==undefined) {
167                                 _set_combo_input(element);
168                           }
169                   }
170                 }
171         },
172         'input.combo_submit': function(element) {
173             // this hides search button for js enabled browsers
174             element.style.display = 'none';
175         },
176         'input.combo_select': function(element) {
177             // this hides select button for js enabled browsers
178             element.style.display = 'none';
179         },
180         'input.combo_reload': function(element) {
181             element.style.display = 'none';
182         },
183         'input.ajaxsubmit': function(e) {
184             e.onclick = function() {
185                 JsHttpRequest.request(this.name);
186                 return false;
187             }
188         },
189         'input.editbutton': function(e) {
190             e.onclick = function() {
191                 JsHttpRequest.request(this.name);
192                 return false;
193             }
194         },
195         'ul.ajaxtabs':  function(ul) {
196             var ulist=ul.getElementsByTagName("li");
197             for (var x=0; x<ulist.length; x++){ //loop through each LI element
198                 var ulistlink=ulist[x].getElementsByTagName("input")[0];
199                 if(ulistlink.onclick==undefined) {
200 // ?  var modifiedurl=ulistlink.getAttribute("href").replace(/^http:\/\/[^\/]+\//i, "http://"+window.location.hostname+"/")
201                     var url = ulistlink.form.action
202                     ulistlink.onclick=function(){
203                         _expand(this);
204                         return false;
205                     }
206                 }
207             }
208         },
209         'input.navibutton': function(e) {
210             if(e.onclick==undefined) {
211              e.onclick = function() {
212                 JsHttpRequest.request(this.name);
213                 return false;
214              }
215             }
216         }
217 //
218 /* TODO
219         'a.date_picker':  function(element) {
220             // this un-hides data picker for js enabled browsers
221             element.href = date_picker(this.getAttribute('rel'));
222             element.style.display = '';
223             element.tabindex = -1; // skip in tabbing order
224         }
225 */
226 };
227
228 Behaviour.register(inserts);
229
230 function setFocus(name, byId) {
231   if(byId)
232         input = document.getElementById(name);
233   else
234         input = document.getElementsByName(name)[0];
235
236   if(input && input.focus)
237         input.focus();
238 }
239
240 Behaviour.addLoadEvent(function() {
241     var inp = document.getElementsByName('_focus')[0];
242           if(inp!=null) {
243                 setFocus(inp.value, 0);
244           }
245         }
246 );