Ajax funcionality additions
[fa-stable.git] / js / inserts.js
index a639b2cc3ed623b6f968b856a4a97bc87a42b16d..c3ff6e1f54a5d704b4f1bb0942cb1f9df3cde72f 100644 (file)
-//ajax transfer progress indicator
-var starttabs = new Array();
-var autoload = new Array();
-var onload_script = ""
-var loadstatustext="<img src='js/images/progressbar1.gif' /> Requesting content..."
-var loadedobjects=""
-
-function Querystring(qs) { // optionally pass a querystring to parse
-       this.params = new Object() 
-       this.get=Querystring_get
-       this.set=Querystring_set
-       this.href=window.location.pathname 
-       this.url=Querystring_url
-       
-       if (qs == null)
-               qs=location.search.substring(1,location.search.length)
-
-       if (qs.length == 0) return
-
-// Turn <plus> back to <space>
-// See: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4.1
-       qs = qs.replace(/\+/g, ' ')
-       var args = qs.split('&') // parse out name/value pairs separated via &
-       
-// split out each name=value pair
-       for (var i=0;i<args.length;i++) {
-               var value;
-               var pair = args[i].split('=')
-               var name = unescape(pair[0])
-
-               if (pair.length == 2)
-                       value = unescape(pair[1])
-               else
-                       value = name
-               
-               this.params[name] = value
-       }
-       
-       this.page = this.params.page
-       delete this.params.page
-}
-
-function Querystring_get(key, default_) {
-       // This silly looking line changes UNDEFINED to NULL
-       if (default_ == null) default_ = null;
-       
-       var value=this.params[key]
-       if (value==null) value=default_;
-       
-       return value
-}
-
-function Querystring_set(key, value) {
-       this.params[key] = value;
-}
-
-function Querystring_url() {
- var url = this.href + '?page='+ this.page
- for( key in this.params) {
-       url += '&'+ key + '='+ this.params[key]
- }
- return url
-}
-
 function debug(msg) {
-//alert(msg)
-document.getElementById('debug').innerHTML=msg
+    document.getElementById('msgbox').innerHTML=
+       document.getElementById('msgbox').innerHTML+'<br>'+msg
 }
 
-function       ajaxloader(url,vars,div) {
-               var container = document.getElementById(div)
-               var callback=function(response,headers,context) {
-                container.innerHTML=response;
-                Behaviour.apply();
-               }
- debug(url)
-               container.innerHTML=loadstatustext
-               ajaxCaller.postForPlainText(url,vars,callback)
-}
-
-function loadobjs(revattribute){
-if (revattribute!=null && revattribute!=""){ //if "rev" attribute is defined (load external .js or .css files)
-var objectlist=revattribute.split(/\s*,\s*/) //split the files and store as array
-for (var i=0; i<objectlist.length; i++){
-var file=objectlist[i]
-var fileref=""
-if (loadedobjects.indexOf(file)==-1){ //Check to see if this object has not already been added to page before proceeding
-if (file.indexOf(".js")!=-1){ //If object is a js file
-fileref=document.createElement('script')
-fileref.setAttribute("type","text/javascript");
-fileref.setAttribute("src", file);
-}
-else if (file.indexOf(".css")!=-1){ //If object is a css file
-fileref=document.createElement("link")
-fileref.setAttribute("rel", "stylesheet");
-fileref.setAttribute("type", "text/css");
-fileref.setAttribute("href", file);
-}
-}
-if (fileref!=""){
-document.getElementsByTagName("head").item(0).appendChild(fileref)
-loadedobjects+=file+" " //Remember this object as being already added to page
-}
-}
-}
+function progbar(container) {
+    container.innerHTML= "<center><img src='"+
+       user.theme+"images/progressbar1.gif' /> "+
+       user.loadtxt+"</center>";
 }
 
 function _expand(tabobj) {
-var alltabs=tabobj.parentNode.parentNode.getElementsByTagName("a")
 
-if (tabobj.getAttribute("rel")){
-for (var i=0; i<alltabs.length; i++){
-alltabs[i].className= "other"  //deselect all tabs
-}
-tabobj.className="current"
-ajaxloader(tabobj.getAttribute("href"), {}, tabobj.getAttribute("rel"))
-//loadobjs(tabobj.getAttribute("rev"))
-}
-}
+  var ul = tabobj.parentNode.parentNode;
+  var alltabs=ul.getElementsByTagName("input");
+  var frm = tabobj.form;
 
-function expandtab(tabcontentid, tabnumber){ //interface for selecting a tab (plus expand corresponding content)
-var alltabs=document.getElementById(tabcontentid).getElementsByTagName("a")
-var thetab=alltabs[tabnumber]
-//debug(tabcontentid+' '+tabnumber)
-if (thetab.getAttribute("rel")){
- for (var i=0; i<alltabs.length; i++){
-alltabs[i].className= i==tabnumber?"current":"other"  //deselect all tabs
-}
-ajaxloader(thetab.getAttribute("href"), {}, thetab.getAttribute("rel"))
-loadobjs(thetab.getAttribute("rev"))
-
-}
-}
-
-//---------------------
-function _setlink(element){
-if (element.getAttribute("rel")){
-var modifiedurl=element.getAttribute("href").replace(/^http:\/\/[^\/]+\//i, "http://"+window.location.hostname+"/")
-modifiedurl +="&ajax="+element.getAttribute('id');
-//debug(modifiedurl)
-element.setAttribute("href", modifiedurl) //replace URL's root domain with dynamic root domain, for ajax security sake
-element.onclick=function(){
-ajaxloader(this.getAttribute("href"), {}, this.getAttribute("rel"))
-loadobjs(this.getAttribute("rev"))
-return false
-}
-}
-}
-
-function _settabs(tab) {
-var ulist=tab.getElementsByTagName("li") //array containing the LI elements within UL
-for (var x=0; x<ulist.length; x++){ //loop through each LI element
-var ulistlink=ulist[x].getElementsByTagName("a")[0]
-//if (ulistlink.getAttribute("rel"))
-if(ulistlink.onclick==undefined)         {
-var modifiedurl=ulistlink.getAttribute("href").replace(/^http:\/\/[^\/]+\//i, "http://"+window.location.hostname+"/")
-modifiedurl += "&ajax="+ulistlink.getAttribute('id');
-ulistlink.setAttribute("href", modifiedurl) //replace URL's root domain with dynamic root domain, for ajax security sake
-
-ulistlink.onclick=function(){
-_expand(this);
-return false
-}
-if (ulistlink.className=="current"){
-starttabs.push(ulistlink)
-}
-}
-}
-}
-
-function _TableRowSelector(table,row) {
-                var sels = table.getAttribute('selector').split(',') // tablica selektorów
-                var cols = table.getElementsByTagName('th') //identyfikatory kolumn
-                var colvals = row.getElementsByTagName("td")
-                selector =''
-                for(s=0; s<sels.length; s++) {
-                               selector += '&' + sels[s] + '='
-                 for(c=0; c<cols.length; c++) {
-                        if(cols[c].getAttribute('id')==sels[s]) {
-                               selector += colvals[c].innerHTML
-                               break;          
-                  }
+  if (ul.getAttribute("rel")){
+       for (var i=0; i<alltabs.length; i++){
+         alltabs[i].className = "ajaxbutton"  //deselect all tabs
+       }
+       tabobj.className = "current";
+       JsHttpRequest.request(tabobj.name)
+  }
+}
+
+//interface for selecting a tab (plus expand corresponding content)
+function expandtab(tabcontentid, tabnumber) {
+  var tabs = document.getElementById(tabcontentid);
+ _expand(tabs.getElementsByTagName("input")[tabnumber]);
+}
+
+function _set_combo_input(e) {
+//               e.onkeydown=function(event) { 
+                 e.onblur=function(event) { 
+                       event = event||window.event;
+                       if(!this.back) {
+                         var but_name = this.name.substring(0, this.name.length-4)+'button';
+                         var button = document.getElementsByName(but_name)[0];
+                         var select = document.getElementsByName(this.getAttribute('rel'))[0];
+                         var byid = this.className=='combo';
+                         if(button) { // if *_button set submit search request
+                           JsHttpRequest.request(but_name);
+                         }
+                         return false;
                        }
-                }
-                return selector;
-}
-/*
- Ajax elements behaviour definitions
-*/
-var inserts = {
-       'div.ajax-component': function(element) { // automatic ajax component init
-        if(element.innerHTML=='') {
-               autoload.push(element.id)
-        }
-       },
-       
-  'form.ajaxform': function(element) {
-               element.onsubmit=function(){
-                var url=element.action;
-                var div=element.getAttribute("rel")
-                var submit
-                var Query = new Querystring();
-
-//               url.replace(/^http:\/\/[^\/]+\//i, "http://"+window.location.hostname+"/")
-//              url=window.location
-                 var vars = new Array();
-                       for(i=0; i<element.length; i++) {
-                        vars[element.elements[i].name]=element.elements[i].value;
-                        if(element.elements[i].name=='submit') 
-                               submit=element.elements[i].id // obsolete
+                 };
+                 e.onkeyup = function() {
+                       var select = document.getElementsByName(this.getAttribute('rel'))[0];
+                       if(select && select.selectedIndex>=0) {
+                         var len = select.length;
+                         var byid = this.className=='combo';
+                         var ac = this.value.toUpperCase();
+                         select.options[select.selectedIndex].selected = false;
+                         for (i = 0; i < len; i++) {
+                               var txt = byid ? select.options[i].value : select.options[i].text;
+                               if (txt.toUpperCase().indexOf(ac) >= 0) {
+                                 select.options[i].selected = true;
+                                 break;
+                               }
+                         }
                        }
-                Query.set('ajax', element.id);
-                Query.set('action', 'update');
-                ajaxloader(Query.url(),vars, div)
+                 };
+         e.onkeydown = function(ev) { 
+//       this.lastkey = event.keyCode;
+                         this.back = (ev||window.event).shiftKey; // save shift state for onblur handler
+                 }
+}
+
+function _set_combo_select(e) {
+
+               e.onblur = function(event) {
+                       event = event||window.event;
+                       if(!this.back && this.selectedIndex>=0) {
+                               var sname = '_'+this.name+'_update';
+                               var box = document.getElementsByName(this.getAttribute('rel'))[0];
+                               var opt = this.options[this.selectedIndex];
+                               var byid = this.className=='combo';
+                               var update = document.getElementsByName(sname)[0];
+                               if (opt.value != 0) {
+                                 if(box) box.value = byid ? opt.value : opt.text;
+                                 if(update) {
+                                       if(update.className == 'combo_select') {
+                                         document.getElementsByName('_focus')[0].value=this.name;
+                                           JsHttpRequest.request(sname);
+                                       } else {
+                                         update.click();
+                                         this.focus();
+                                       }
+                                 } 
+                               }
+                               this.size = 1;
+                       }
+                               return true;
                }
-
-               element.onreset=function(){
-                var url=element.action;
-                var div=element.getAttribute("rel")
-                 url.replace(/^http:\/\/[^\/]+\//i, "http://"+window.location.hostname+"/")
-                 url = url + "&ajax=" + element.id + "&action=reset";
-//               var vars = new Array();
-//                     for(i=0; i<element.length; i++) {
-//                      vars[element.elements[i].name]=element.elements[i].value;
-//                     }
-                       var vars = {}
-                       ajaxloader(url,vars, div)
+               e.onchange = function() {
+                       if (this.options[this.selectedIndex].value==0)
+                               document.getElementsByName(this.getAttribute('rel'))[0].value='';
                }
-               return false;
-        },
-
-       'a.ajaxlink': function(element) {
-       // if onclick is defined this element is initialized
-                 if(element.onclick==undefined) _setlink(element);
-        },
-
-  'ul.ajaxtabs': function(element) {
-               _settabs(element)
-        },
-
-       'table.ajaxgrid': function(element) {
-               var rows = element.getElementsByTagName('tr')
-               for(i=1;i<rows.length-1; i++) {
-               rows[i].onmouseover=function() {this.className='row2' }
-               rows[i].onmouseout=function() {this.className='row1' }
-               rows[i].ondblclick=function() {
-                var table = this.parentNode.parentNode
-                var url = table.getAttribute('editor')
-                var vars = {}
-                url += '&action=select'
-                url += _TableRowSelector(table,this)
-
-                if( table.getAttribute('editor').indexOf('ajax=')>-1) {
-                       ajaxloader(url,vars, table.getAttribute('rel'))
-                } else { // this is external 'select' handler
-                       window.location = url;
-                }
-
+/*             e.onkeydown = function(event) {
+                       event = event||window.event;
+                   if(event.keyCode==13) {
+                       var box = document.getElementsByName(this.getAttribute('rel'))[0];                      
+                       this.style.display='none';
+                       box.style.display='';
+                       this.back=true;
+                       box.focus();
+                   }
                }
-        }
-       },
-  'table.ajaxgrid th':  function(element) {
-               element.onclick=function(){
-                var table = this.parentNode.parentNode.parentNode
-                var url = table.getAttribute('href')
-                var vars = {}
-                url+='&ajax='+table.id+'&action=sort&id='+ this.id
-// debug(url)
+*/}
 
-                ajaxloader(url, {}, table.getAttribute("rel"))
-//              loadobjs(this.getAttribute("href"))
-                return false
-        }
-       },
-       'a.ajaxgrid-navi': function(element) {
-  if(element.onclick==undefined)
-        if (element.getAttribute("rel")){
-               var modifiedurl=element.getAttribute("href").replace(/^http:\/\/[^\/]+\//i, "http://"+window.location.hostname+"/")
-               element.setAttribute("href", modifiedurl) //replace URL's root domain with dynamic root domain, for ajax security sake
-         if( modifiedurl.indexOf('ajax=')>-1) {
-                element.onclick=function(){ // set ajax handler 
-// debug(this.getAttribute("href"))
-                 ajaxloader(this.getAttribute("href"), {}, this.getAttribute("rel"))
-                 loadobjs(this.getAttribute("href"))
-                 return false
-                }
-         }
-        }
-       },
-  'a.ajaxgrid-select':  function(element) {
-        if(element.onclick==undefined) {
-               var modifiedurl=element.getAttribute("href").replace(/^http:\/\/[^\/]+\//i, "http://"+window.location.hostname+"/")
-               element.setAttribute("href", modifiedurl) //replace URL's root domain with dynamic root domain, for ajax security sake
-               element.onclick=function(){
-                var row = this.parentNode.parentNode
-                var table = row.parentNode.parentNode
-
-                var url = this.getAttribute('href')
-                var vars = {}
-
-                hideddrivetip() 
-
-//              url += '&ajax='+table.id
-                url += _TableRowSelector(table,row)
-//      alert( this.getAttribute('rel'))
-                ajaxloader(url,vars, this.getAttribute('rel'))
-                return false
-               }
-         element.tooltip = element.getAttribute('title') // save tooltip
-               element.removeAttribute('title') // native tooltip off
-               element.onmouseover=function() {
-                ddrivetip(this.tooltip)
-               }
-         element.onmouseout=function() { 
-                hideddrivetip() 
-               }
-        }
-       },
-  '.amount': function(element) {
+/*
+ Behaviour definitions
+*/
+var inserts = {
+    '.amount': function(element) {
                if(element.onblur==undefined) {
                  var dec = element.getAttribute("dec");
                  element.onblur = function() {
                        price_format(this.name, get_amount(this.name), dec);
                  };
                }
+       },
+       'select': function(element) {
+               if(element.onfocus==undefined) {
+                       element.onfocus = function() {
+                               document.getElementsByName('_focus')[0].value = element.name;
+                       };
+                       element.onkeydown = function(event) { 
+                         event = event||window.event;
+                         this.back = event.shiftKey; // save shift state for onblur handler
+                         this.lastkey = event.keyCode; 
+                         if (event.keyCode==32) {
+                          if(this.init_size==undefined)
+                               this.init_size = this.size;
+                         if(this.init_size<=1) {
+                          if(this.size>1) {
+                               this.size = 1;
+                          } else{
+                               var sel = this.selectedIndex;
+                               this.size = this.options.length;
+                               if(this.size>10) this.size = 10;
+                               this.selectedIndex = sel;
+                          }
+                         }
+                        }
+                       };
+                       element.onblur = function() { 
+                           if(this.init_size<=1)
+                               this.size = 1;
+                       };
+               var c = element.className;
+               if (c == 'combo' || c == 'combo2')
+//             if (element.onblur==undefined) {
+                       _set_combo_select(element);
+//             }
+               }
+       },
+       'input': function(element) { // we do not want to change focus on submit
+               if(element.type!='submit' && element.onfocus==undefined) {
+                       element.onfocus = function() {
+                               document.getElementsByName('_focus')[0].value = element.name;
+                       };
+                 var c = element.className;
+                 if (c == 'combo' || c == 'combo2') {
+                         if(element.onkeydown==undefined) {
+                               _set_combo_input(element);
+                         }
+                 }
+               }
+       },
+       'input.combo_submit': function(element) {
+           // this hides search button for js enabled browsers
+           element.style.display = 'none';
+       },
+       'input.combo_select': function(element) {
+           // this hides select button for js enabled browsers
+           element.style.display = 'none';
+       },
+       'input.combo_reload': function(element) {
+           element.style.display = 'none';
+       },
+       'input.ajaxsubmit': function(e) {
+           e.onclick = function() {
+               JsHttpRequest.request(this.name);
+               return false;
+           }
+       },
+       'input.editbutton': function(e) {
+           e.onclick = function() {
+               JsHttpRequest.request(this.name);
+               return false;
+           }
+       },
+       'ul.ajaxtabs':  function(ul) {
+           var ulist=ul.getElementsByTagName("li");
+           for (var x=0; x<ulist.length; x++){ //loop through each LI element
+               var ulistlink=ulist[x].getElementsByTagName("input")[0];
+               if(ulistlink.onclick==undefined) {
+// ?  var modifiedurl=ulistlink.getAttribute("href").replace(/^http:\/\/[^\/]+\//i, "http://"+window.location.hostname+"/")
+                   var url = ulistlink.form.action
+                   ulistlink.onclick=function(){
+                       _expand(this);
+                       return false;
+                   }
+               }
+           }
+       },
+       'input.navibutton': function(e) {
+           if(e.onclick==undefined) {
+            e.onclick = function() {
+               JsHttpRequest.request(this.name);
+               return false;
+            }
+           }
+       }
+//
+/* TODO
+       'a.date_picker':  function(element) {
+           // this un-hides data picker for js enabled browsers
+           element.href = date_picker(this.getAttribute('rel'));
+           element.style.display = '';
+           element.tabindex = -1; // skip in tabbing order
        }
+*/
 };
 
 Behaviour.register(inserts);
-// open selected tabs on load
-Behaviour.addLoadEvent(function() {
-for(i=0; i<starttabs.length; i++) {
-_expand(starttabs[i]);
-}
+
+function setFocus(name, byId) {
+  if(byId)
+       input = document.getElementById(name);
+  else
+       input = document.getElementsByName(name)[0];
+
+  if(input && input.focus)
+       input.focus();
 }
-);
 
 Behaviour.addLoadEvent(function() {
-for(i=0; i<autoload.length; i++) {
-       var vars = {}
-        var Query = new Querystring();
-        Query.set('ajax', autoload[i]);
-        delete Query.params.action
-//alert(Query.url())
-        ajaxloader(Query.url(), {}, autoload[i]);
-}
-}
+    var inp = document.getElementsByName('_focus')[0];
+         if(inp!=null) {
+               setFocus(inp.value, 0);
+         }
+       }
 );