1 //ajax transfer progress indicator
2 var starttabs = new Array();
3 var autoload = new Array();
5 var loadstatustext="<img src='js/images/progressbar1.gif' /> Requesting content..."
8 function Querystring(qs) { // optionally pass a querystring to parse
9 this.params = new Object()
10 this.get=Querystring_get
11 this.set=Querystring_set
12 this.href=window.location.pathname
13 this.url=Querystring_url
16 qs=location.search.substring(1,location.search.length)
18 if (qs.length == 0) return
20 // Turn <plus> back to <space>
21 // See: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4.1
22 qs = qs.replace(/\+/g, ' ')
23 var args = qs.split('&') // parse out name/value pairs separated via &
25 // split out each name=value pair
26 for (var i=0;i<args.length;i++) {
28 var pair = args[i].split('=')
29 var name = unescape(pair[0])
32 value = unescape(pair[1])
36 this.params[name] = value
39 this.page = this.params.page
40 delete this.params.page
43 function Querystring_get(key, default_) {
44 // This silly looking line changes UNDEFINED to NULL
45 if (default_ == null) default_ = null;
47 var value=this.params[key]
48 if (value==null) value=default_;
53 function Querystring_set(key, value) {
54 this.params[key] = value;
57 function Querystring_url() {
58 var url = this.href + '?page='+ this.page
59 for( key in this.params) {
60 url += '&'+ key + '='+ this.params[key]
67 document.getElementById('debug').innerHTML=msg
70 function ajaxloader(url,vars,div) {
71 var container = document.getElementById(div)
72 var callback=function(response,headers,context) {
73 container.innerHTML=response;
77 container.innerHTML=loadstatustext
78 ajaxCaller.postForPlainText(url,vars,callback)
81 function loadobjs(revattribute){
82 if (revattribute!=null && revattribute!=""){ //if "rev" attribute is defined (load external .js or .css files)
83 var objectlist=revattribute.split(/\s*,\s*/) //split the files and store as array
84 for (var i=0; i<objectlist.length; i++){
85 var file=objectlist[i]
87 if (loadedobjects.indexOf(file)==-1){ //Check to see if this object has not already been added to page before proceeding
88 if (file.indexOf(".js")!=-1){ //If object is a js file
89 fileref=document.createElement('script')
90 fileref.setAttribute("type","text/javascript");
91 fileref.setAttribute("src", file);
93 else if (file.indexOf(".css")!=-1){ //If object is a css file
94 fileref=document.createElement("link")
95 fileref.setAttribute("rel", "stylesheet");
96 fileref.setAttribute("type", "text/css");
97 fileref.setAttribute("href", file);
101 document.getElementsByTagName("head").item(0).appendChild(fileref)
102 loadedobjects+=file+" " //Remember this object as being already added to page
108 function _expand(tabobj) {
109 var alltabs=tabobj.parentNode.parentNode.getElementsByTagName("a")
111 if (tabobj.getAttribute("rel")){
112 for (var i=0; i<alltabs.length; i++){
113 alltabs[i].className= "other" //deselect all tabs
115 tabobj.className="current"
116 ajaxloader(tabobj.getAttribute("href"), {}, tabobj.getAttribute("rel"))
117 //loadobjs(tabobj.getAttribute("rev"))
121 function expandtab(tabcontentid, tabnumber){ //interface for selecting a tab (plus expand corresponding content)
122 var alltabs=document.getElementById(tabcontentid).getElementsByTagName("a")
123 var thetab=alltabs[tabnumber]
124 //debug(tabcontentid+' '+tabnumber)
125 if (thetab.getAttribute("rel")){
126 for (var i=0; i<alltabs.length; i++){
127 alltabs[i].className= i==tabnumber?"current":"other" //deselect all tabs
129 ajaxloader(thetab.getAttribute("href"), {}, thetab.getAttribute("rel"))
130 loadobjs(thetab.getAttribute("rev"))
135 //---------------------
136 function _setlink(element){
137 if (element.getAttribute("rel")){
138 var modifiedurl=element.getAttribute("href").replace(/^http:\/\/[^\/]+\//i, "http://"+window.location.hostname+"/")
139 modifiedurl +="&ajax="+element.getAttribute('id');
141 element.setAttribute("href", modifiedurl) //replace URL's root domain with dynamic root domain, for ajax security sake
142 element.onclick=function(){
143 ajaxloader(this.getAttribute("href"), {}, this.getAttribute("rel"))
144 loadobjs(this.getAttribute("rev"))
150 function _settabs(tab) {
151 var ulist=tab.getElementsByTagName("li") //array containing the LI elements within UL
152 for (var x=0; x<ulist.length; x++){ //loop through each LI element
153 var ulistlink=ulist[x].getElementsByTagName("a")[0]
154 //if (ulistlink.getAttribute("rel"))
155 if(ulistlink.onclick==undefined) {
156 var modifiedurl=ulistlink.getAttribute("href").replace(/^http:\/\/[^\/]+\//i, "http://"+window.location.hostname+"/")
157 modifiedurl += "&ajax="+ulistlink.getAttribute('id');
158 ulistlink.setAttribute("href", modifiedurl) //replace URL's root domain with dynamic root domain, for ajax security sake
160 ulistlink.onclick=function(){
164 if (ulistlink.className=="current"){
165 starttabs.push(ulistlink)
171 function _TableRowSelector(table,row) {
172 var sels = table.getAttribute('selector').split(',') // tablica selektorów
173 var cols = table.getElementsByTagName('th') //identyfikatory kolumn
174 var colvals = row.getElementsByTagName("td")
176 for(s=0; s<sels.length; s++) {
177 selector += '&' + sels[s] + '='
178 for(c=0; c<cols.length; c++) {
179 if(cols[c].getAttribute('id')==sels[s]) {
180 selector += colvals[c].innerHTML
188 Ajax elements behaviour definitions
191 'div.ajax-component': function(element) { // automatic ajax component init
192 if(element.innerHTML=='') {
193 autoload.push(element.id)
197 'form.ajaxform': function(element) {
198 element.onsubmit=function(){
199 var url=element.action;
200 var div=element.getAttribute("rel")
202 var Query = new Querystring();
204 // url.replace(/^http:\/\/[^\/]+\//i, "http://"+window.location.hostname+"/")
205 // url=window.location
206 var vars = new Array();
207 for(i=0; i<element.length; i++) {
208 vars[element.elements[i].name]=element.elements[i].value;
209 if(element.elements[i].name=='submit')
210 submit=element.elements[i].id // obsolete
212 Query.set('ajax', element.id);
213 Query.set('action', 'update');
214 ajaxloader(Query.url(),vars, div)
217 element.onreset=function(){
218 var url=element.action;
219 var div=element.getAttribute("rel")
220 url.replace(/^http:\/\/[^\/]+\//i, "http://"+window.location.hostname+"/")
221 url = url + "&ajax=" + element.id + "&action=reset";
222 // var vars = new Array();
223 // for(i=0; i<element.length; i++) {
224 // vars[element.elements[i].name]=element.elements[i].value;
227 ajaxloader(url,vars, div)
232 'a.ajaxlink': function(element) {
233 // if onclick is defined this element is initialized
234 if(element.onclick==undefined) _setlink(element);
237 'ul.ajaxtabs': function(element) {
241 'table.ajaxgrid': function(element) {
242 var rows = element.getElementsByTagName('tr')
243 for(i=1;i<rows.length-1; i++) {
244 rows[i].onmouseover=function() {this.className='row2' }
245 rows[i].onmouseout=function() {this.className='row1' }
246 rows[i].ondblclick=function() {
247 var table = this.parentNode.parentNode
248 var url = table.getAttribute('editor')
250 url += '&action=select'
251 url += _TableRowSelector(table,this)
253 if( table.getAttribute('editor').indexOf('ajax=')>-1) {
254 ajaxloader(url,vars, table.getAttribute('rel'))
255 } else { // this is external 'select' handler
256 window.location = url;
262 'table.ajaxgrid th': function(element) {
263 element.onclick=function(){
264 var table = this.parentNode.parentNode.parentNode
265 var url = table.getAttribute('href')
267 url+='&ajax='+table.id+'&action=sort&id='+ this.id
270 ajaxloader(url, {}, table.getAttribute("rel"))
271 // loadobjs(this.getAttribute("href"))
275 'a.ajaxgrid-navi': function(element) {
276 if(element.onclick==undefined)
277 if (element.getAttribute("rel")){
278 var modifiedurl=element.getAttribute("href").replace(/^http:\/\/[^\/]+\//i, "http://"+window.location.hostname+"/")
279 element.setAttribute("href", modifiedurl) //replace URL's root domain with dynamic root domain, for ajax security sake
280 if( modifiedurl.indexOf('ajax=')>-1) {
281 element.onclick=function(){ // set ajax handler
282 // debug(this.getAttribute("href"))
283 ajaxloader(this.getAttribute("href"), {}, this.getAttribute("rel"))
284 loadobjs(this.getAttribute("href"))
290 'a.ajaxgrid-select': function(element) {
291 if(element.onclick==undefined) {
292 var modifiedurl=element.getAttribute("href").replace(/^http:\/\/[^\/]+\//i, "http://"+window.location.hostname+"/")
293 element.setAttribute("href", modifiedurl) //replace URL's root domain with dynamic root domain, for ajax security sake
294 element.onclick=function(){
295 var row = this.parentNode.parentNode
296 var table = row.parentNode.parentNode
298 var url = this.getAttribute('href')
303 // url += '&ajax='+table.id
304 url += _TableRowSelector(table,row)
305 // alert( this.getAttribute('rel'))
306 ajaxloader(url,vars, this.getAttribute('rel'))
309 element.tooltip = element.getAttribute('title') // save tooltip
310 element.removeAttribute('title') // native tooltip off
311 element.onmouseover=function() {
312 ddrivetip(this.tooltip)
314 element.onmouseout=function() {
319 '.amount': function(element) {
320 if(element.onblur==undefined) {
321 var dec = element.getAttribute("dec");
322 element.onblur = function() {
323 price_format(this.name, get_amount(this.name), dec);
329 Behaviour.register(inserts);
330 // open selected tabs on load
331 Behaviour.addLoadEvent(function() {
332 for(i=0; i<starttabs.length; i++) {
333 _expand(starttabs[i]);
338 Behaviour.addLoadEvent(function() {
339 for(i=0; i<autoload.length; i++) {
341 var Query = new Querystring();
342 Query.set('ajax', autoload[i]);
343 delete Query.params.action
345 ajaxloader(Query.url(), {}, autoload[i]);