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