1
2var xcomSites;
3var xcomHeaders;
4var xcom_action_url;
5var xcom_srch_str;
6function xcom_localSave(a_id) {
7
8   var fn_sel = document.getElementById('xcom_sel');
9   /* if function selected, apply function to remote file */
10   if(fn_sel.selectedIndex > 0) {
11       xcom_setValue('xcom_pageid',a_id);
12        xmlrpc('xcom_action');
13        return;
14   }
15
16   /* save remote file to local
17   *  first ask if this is what is wanted
18   */
19   if(a_id) {
20      xcom_setValue('xcom_pageid',a_id);
21      if(!window.confirm(JSINFO['savelocalfile']  + ' ' + a_id)) return;
22   }
23
24  var params = "";
25
26  var id =a_id ? a_id : xcom_getInputValue('xcom_pageid');
27  var params = 'id='+id;
28
29   var jobj = xcom_json_ini('xcom_localpwd','xcom_locuser');
30   jobj['url'] = JSINFO['url'];
31   var str =JSON.stringify(jobj);
32   params +='&local=' + str;
33
34    var jobj = xcom_json_ini('xcom_pwd','xcom_url','xcom_user');
35    str =JSON.stringify(jobj);
36    params +='&remote=' + str;
37   //if(!confirm("params: " + params)) return;
38
39   var status =new Array("Save remote: ("+ id +  ") to Local wiki");
40   xcom_query_status(status);
41
42         jQuery.ajax({
43            url: DOKU_BASE + 'lib/plugins/xcom/scripts/xcom_save.php',
44            data: params,
45            type: 'POST',
46            dataType: 'html',
47            success: function(data)
48            {
49               data = decodeURIComponent(data);
50               xcom_show('xcom_results');
51               xcom_print_data('dokuwiki.copy', data, false,"");
52            }
53        });
54}
55
56function xmlrpc() {
57       var xcom_action = arguments.length ? 'xcom_action' : "";
58       xcom_hide_all_views(xcom_action);
59      /* xcom_hide('xcom_action');
60       xcom_hide('xcom_view');
61       xcom_hide('xcom_pre_title');
62       xcom_hide('xcom_htm_title');
63       xcom_hide('xcom_editable_title');
64       xcom_hide('xcom_action_title');*/
65       xcom_action_url = xcom_getInputValue('xcom_url');
66       xcom_action_url = xcom_action_url.replace(/[\/\\]$/,"");
67	   xcom_action_url += '/doku.php?';
68
69       xcom_clear('xcom_qstatus',false);
70       var options =  xcom_params();
71
72       var func = options[0];
73       xcom_query_status(options);
74
75       var other=false;
76       var params =  'params=' + JSON.stringify(options);
77       params = params.replace(/\s*__comma__\s*/g,',');
78       if(typeof options[2] == 'object' && options[2] !== null ) {
79          try {
80              if(options[2].hasOwnProperty('hash')) {
81                 other = 'hash';
82              }
83          } catch(e) {
84          }
85       }
86       var array_types = {'dokuwiki.getPagelist':1,'plugin.xcom.pageVersions':1,'plugin.xcom.getPageInfo':1,'wiki.getAllPages':1, 'wiki.getAttachmentInfo':1,'wiki.getAttachments':1, 'wiki.getRecentChanges':1,'wiki.listLinks':1,'dokuwiki.search':1,'plugin.xcom.getMedia':1, 'plugin.xcom.listNamespaces':1,'wiki.getBackLinks':1,};
87       var jobj = xcom_json_ini('xcom_pwd','xcom_url','xcom_user');
88       str =JSON.stringify(jobj);
89       params += '&credentials=' + str;
90       params += '&debug=' + document.getElementById('xcom_debug').checked;
91
92       //  if(!confirm(params)) return;
93         jQuery.ajax({
94            url: DOKU_BASE + 'lib/plugins/xcom/scripts/xml.php',
95            data: params,
96            type: 'POST',
97            dataType: 'html',
98            success: function(data)
99            {
100            if(data.match(/XCOM_LAG/)) return;
101            if(!array_types.hasOwnProperty(func)) {
102                try {
103               data = decodeURIComponent(data);
104                }
105                catch(err){
106                    console.log("By-passed decoding string returned by " + func + ': ' + err.message );
107                }
108            }
109               xcom_show('xcom_results');
110               xcom_print_data(func, data,other,xcom_action);
111            }
112        });
113
114        var fn_sel = document.getElementById('xcom_sel');
115        fn_sel.selectedIndex = 0;
116         return false;
117}
118
119function xcom_print_data(fn, data,other,xcom_action) {
120   var id = 'xcom_pre';
121
122   var table_calls = {
123     'dokuwiki_getPagelist': (other=='hash') ? ['id','rev', 'mtime' ,'size','hash'] : ['id','rev', 'mtime' ,'size'] ,
124     'plugin_xcom_pageVersions': ['user','ip','type','sum','modified','version' ],
125     'plugin_xcom_getPageInfo': ['name','lastModified','author','version'],
126     'wiki_getAllPages': ['id', 'perms', 'size', 'lastModified'],
127     'dokuwiki_search': ['id', 'score', 'rev', 'mtime','size','snippet'],
128     'plugin_xcom_getMedia': ['Media files'],
129     'wiki_getAttachments': ['id','size','lastModified'],
130     'wiki_listLinks': ['type', 'page','href'],
131     'wiki_getAttachmentInfo': ['id','lastModified','size'],
132     'plugin_xcom_listNamespaces': ['Namespace Directories'],
133     'wiki_getBackLinks': ['Backlinks'],
134     'wiki_getRecentChanges': ['name', 'lastModified', 'author','version','size'],
135     'wiki_getBackLinks' : ['Backlinks'],
136   };
137   xcomHeaders = table_calls;
138
139	        switch(fn)
140         {
141            case 'wiki.getPage':                 // (string) raw Wiki text
142            case 'wiki.getPageVersion':      // (string) raw Wiki text
143                  id = 'xcom_editable' ;
144                  break;
145            case 'plugin.xcom.GetMetaData':
146            case 'wiki.getPageHTML':      // (string) rendered HTML
147                 id = 'xcom_htm';
148                 break;
149            case 'dokuwiki.getPagelist':
150            case 'plugin.xcom.pageVersions':
151            case 'plugin.xcom.getPageInfo':
152            case 'wiki.getAllPages':
153            case 'dokuwiki.search':
154            case 'plugin.xcom.getMedia':
155            case 'wiki.getAttachments':
156            case  'wiki.listLinks':
157            case  'wiki.getAttachmentInfo':
158            case  'plugin.xcom.listNamespaces':
159            case  'wiki.getRecentChanges':
160            case 'wiki.getBackLinks':
161                 id = xcom_action ? 'xcom_action':'xcom_htm';
162                 try {
163                     var obj = jQuery.parseJSON(data);
164                 } catch(e) {
165                    id = 'xcom_pre';   // not a table, use code view, probably error msg
166                        obj = decodeURIComponent(data);
167                     break;
168                 }
169
170                     //  handle tables
171
172                     if(obj || fn == 'wiki.getBackLinks')
173                    {
174                        var fncall = fn.replace(/\./g,'_');
175                        data = xcom_thead(table_calls[fncall]);
176                         if(fn == 'plugin.xcom.getPageInfo' || fn ==  'wiki.getAttachmentInfo') {
177                                data +=  xcom_hash(obj);  //straight single hash
178                           }
179                          else if (fn == 'plugin.xcom.getMedia' || fn =='plugin.xcom.listNamespaces'
180                                  || fn == 'wiki.getBackLinks') {
181                               data +=  xcom_onedim(obj);
182                           }
183                          else {
184                               data+=xcom_multidim(obj,fn);  // array of arrays
185                          }
186                    }
187                    data += xcom_tclose();  //end tables
188                break;
189             case 'wiki.putPage':
190             case 'dokuwiki.appendPage':
191                  id = 'xcom_editable';
192                  break;
193               default:
194                   break;
195        }   // end switch
196
197    var d = document.getElementById(id);
198    if(id == 'xcom_editable') {
199        xcom_setValue(id,data);
200    }
201    else {
202        d.innerHTML=  data;
203        }
204    xcom_show(id);
205    var title = id + '_title';
206    xcom_show(title);
207}
208
209function xcom_multidim(obj,func) {
210        var data = "";
211
212        for(var i in obj) {
213         data +="\n<tr>";
214         for(var j in obj[i]) {
215             var r = obj[i][j];
216              if(j == 'lastModified' && func == 'wiki.getRecentChanges'
217                    || j == 'modified' && func == 'plugin.xcom.pageVersions') {
218                 r = obj[i]['version'];
219                var date_time = new Date(r * 1000);
220                var month = (date_time.getMonth() + 1) > 9 ? (date_time.getMonth() + 1) : '0' + (date_time.getMonth() + 1);
221                var day =  date_time.getDate() > 9  ? date_time.getDate() : '0'+ date_time.getDate();
222                r = date_time.getFullYear() + "-" + month + "-" + day + " " + date_time.getHours() + ":" + date_time.getMinutes() + ":" + date_time.getSeconds()
223
224              }
225             row = xcom_td(j,r,func);            //type, value, function
226             if(row) data += row;
227         }
228       }
229
230       return data;
231}
232
233function xcom_hash(obj) {
234         var data ="\n<tr>";
235         for(var i in obj) {
236           data += xcom_td(i,obj[i]);
237         }
238         return data;
239}
240
241function xcom_onedim(obj) {
242        var data ="\n<tr>";
243         for(var i in obj) {
244           data += xcom_td(i,obj[i]) + "\n<tr>";
245         }
246         return data;
247}
248
249function xcom_thead(args) {
250  var row = "<table class ='xcom_center'>\n<tr>";
251  for (i=0; i<args.length; i++) {
252     row += '<th>' + args[i] + '</th>';
253  }
254   return row + "</tr>\n";
255}
256
257function xcom_td(type,val,fn) {
258
259     if(fn)
260     {
261         var is_header = false;
262         var fncall = fn.replace(/\./g,'_');
263         var headers = xcomHeaders[fncall];
264         for(var i = 0; i< headers.length; i++) {
265             if(type == headers[i]) {
266                 is_header=true;
267                 break;
268             }
269        }
270        if(!is_header) return;
271    }
272
273    //alert(type + '=' + val);
274    if(type == 'modified' || type == 'lastModified' && typeof val == 'object') {
275      //  var min =val['minute'] ?  val['minute'] : val['minute'];
276	    if (typeof val !== 'undefined' && val['year']) {
277        var d = new Date( val['year'],val['month']-1,val['day'],val['hour'],val['minute'], val['second']);
278        val = d.toUTCString();
279	      }
280
281    }
282    else if(type == 'rev' || type == 'mtime') {
283       var d = new Date(val*1000);
284       val = d.toUTCString();
285    }
286    else if(type == 'size') {
287        val += ' bytes';
288    }
289     else if(type == 'id'  && fn=='dokuwiki.search') {
290          return '<td class ="xcom_id">'+ xcom_search_url(val) +'</td>';
291    }
292    else if(type == 'id' || type == 'href' || (type =='page' && fn == 'wiki.listLinks')) {
293       var display = val;
294       if(val.length > 40) {
295          var a = val.substring(0,40) + ". . . .<br />";
296          var b = val.substring(40);
297          if(b.length > 7) {
298             display = a + '&nbsp;&nbsp;&nbsp;&nbsp;' + b;
299          }
300        }
301         if(type == 'id') {
302            return '<td><a href="javascript:xcom_localSave(\'' + val + '\');void 0;">' +display +'</a></td>';
303         }
304         val =display;
305    }
306    else if(type == 'snippet') {
307        return '<tr><td class="xcom_none">&nbsp;</td><td colspan = "4" class="xcom_snippet">' + val + '</td>';
308    }
309    else if(type == 'title' && fn=='dokuwiki.search') return "";  //skip title, screws up the table design
310    if(typeof val == 'object') val = "none";
311     return '<td>' + val + '</td>'
312}
313
314function xcom_tclose() {
315  return "</table>\n";
316}
317
318function xcom_search_url(pageid) {
319	 if ( typeof xcom_srch_str == 'undefined' ) {
320        xcom_srch_str =xcom_getInputValue('xcom_opts');
321      }
322	 var qs = '&'+ xcom_srch_opts();
323	 return '<a href = "' + xcom_action_url + 'id=' +pageid + qs +'" target = \"_blank\">' + pageid + '</a>';
324}
325
326function xcom_srch_opts() {  // for search function
327	var srch_str =xcom_getInputValue('xcom_opts');
328    srch_str = srch_str.replace(/^\s+/,"");
329    srch_str = srch_str.replace(/\s+$/,"");
330    srch_str = srch_str.replace(/\s+\"/,'\"');
331    srch_str = srch_str.replace(/\"\s+/,'\"');
332
333    var tmp = srch_str.split('\"');
334    if(tmp.length == 1) {
335      tmp = srch_str.split(/\s+/g);
336    }
337    var result = "";
338    for(i=0; i<tmp.length; i++) {
339      if(tmp[i]) {
340       result += "s[]=" + tmp[i];
341       if(tmp[i+1]) {
342         result += '&';
343       }
344      }
345    }
346  result = result.replace(/=\s+/g, '=');
347  result = result.replace(/\s*&\s*/g, '&');
348  return result;
349}
350function xcom_check_opts(fn,page,opts, tmp) {
351    page = page.trim();
352    var regex;
353    var skip_opts_cnt = false;
354    switch(fn) {
355         case 'wiki.getAllPages':
356         case 'dokuwiki.getTitle':
357            if((!page || page.trim().length === 0) && !opts) {
358                return true;
359            }
360           xcom_err_msg('wrong_count',fn,'no_opts');
361             return false;
362        case 'wiki.aclCheck':
363            skip_opts_cnt = true;
364        case 'wiki.getPage':
365        case 'plugin.xcom.getMedia':
366        case 'wiki.getAttachmentInfo':
367        case 'wiki.deleteAttachment':
368        case 'wiki.listLinks':
369        case 'wiki.getBackLinks':
370        case 'plugin.xcom.getPageInfo':
371        case 'wiki.getPageHTML':
372            if(opts && !skip_opts_cnt) {
373                xcom_err_msg('wrong_count',fn,'no_opts');
374                return false;
375            }
376
377             if(page.match(/[^0-9a-z_\:\.\-]+/g)) {
378                xcom_err_msg('bad_id');
379                return false;
380            }
381            return true;
382
383        case 'wiki.getRecentChanges':
384        case 'wiki.getRecentMediaChanges':
385             if(page || page.length) {
386                xcom_err_msg('wrong_count',fn, 'date_only');
387                return false;
388            }
389		     regex = RegExp('^\s*\\d\\d\\d\\d-\\d\\d-\\d\\d\s*$');
390			opt = opts.trim();
391            if(!regex.test(opt)) {
392                xcom_err_msg('date_err');
393                return false;
394            }
395            break;
396
397	    case 'dokuwiki.getPagelist': //(hash),(depth:n)
398            if(!opts) {
399                tmp.push({hash:1});
400            }
401            if(!page) {
402                xcom_err_msg(fn,'param-err');
403                return false;
404            }
405            break;
406
407        case 'dokuwiki.search': //string query
408		if(!opts) {
409                xcom_err_msg('srch_string');
410		        return false;
411			}
412               break;
413        case 'dokuwiki.appendPage':
414        case 'wiki.putPage':
415            if(!page) {
416                alert("Page id missing");
417                return false;
418            }
419            var regex_m = RegExp('\(minor;\s*(1|true)\s*\)');
420            var regex_s = RegExp('\\(sum;[\\w\\s\\d;\\.\\:\\[\\]\\{\\}]+\\)');
421            if(regex_m.test(opts) || regex_s.test(opts)) break;
422            alert("needs sum or minor edit statement");
423            return false;
424
425            break;
426/*
427
428        case 'plugin.xcom.pageVersions': (string) [[doku>:pagename]] , (int) offset
429            break;
430        case 'wiki.getAttachments': (String) namespace, (array) options (#pattern#)
431            break;
432        case 'plugin.acl.addAcl': (String) scope, (String) user|@group
433            break;
434        case 'plugin.acl.delAcl':String) scope, (String) user|@group, (int) permission
435            break;
436        case 'plugin.xcom.listNamespaces':(String) namespace id, (Array) (id1;id2. . .)
437            break;	*/
438        default:
439
440    }
441    return true;
442}
443
444function xcom_params() {
445    var params = new Array(),i=0;
446    var optstring =  xcom_getInputValue('xcom_opts');  //Params from User-created Query/Options box
447
448
449    var opts = "";
450    var matches;
451    optstring = optstring.replace(/\s+$/,"");
452    optstring = optstring.replace(/^\s+/,"");
453    optstring = optstring.replace(/;\s+/,";");
454
455    optstring = optstring.replace(/\((.*?)\)/g,function(a) {
456        return a.replace(/,/g,' __comma__ ');
457    });
458
459    optstring = optstring.replace(/\#(.*?)\#/g,function(a) {
460        return a.replace(/,/g,'__comma__');
461    });
462
463    if(optstring) opts = optstring.split(/,/);
464
465
466    for(var p=0; p<opts.length; p++) {
467        if(!opts[p] || !opts[p].match(/^\s*\(/)) break;
468        var isarray = xcom_getArray(opts[p]);
469         if(isarray) {
470             if(isarray[0] == 'hash')   {
471                opts[p] ={'hash':'1'};
472                break;
473             }
474             else if(isarray[0].match(/#/))   {
475                opts[p] ={'pattern' : isarray[0]};
476                break;
477             }
478             else if(isarray[0].match(/sum/))   {
479                opts[p] ={'sum' : isarray[1]};
480                break;
481             }
482             else if(matches = isarray[0].match(/minor/))   {
483                opts[p] ={'minor': isarray[1]};
484                break;
485             }
486             else {
487                 opts[p] =isarray;
488                 break;
489             }
490          }
491    }
492
493     var fn_sel = document.getElementById('xcom_sel');
494
495     for(var n=0; n<opts.length; n++) {
496        opts[n] = xcom_timeStamp(opts[n]);
497    }
498
499    if(fn_sel.selectedIndex > 0) {
500        params[i]  = fn_sel.options[fn_sel.selectedIndex].value;
501        }
502     else
503     {
504        var regex = RegExp('(wiki|plugin|dokuwiki|xcom)\.');
505        if(!optstring.match(regex)) {
506            xcom_err_msg('nofunc');
507            return false;
508        }
509       else {
510          // alert(optstring);
511       }
512       return params[i] = opts;
513    }
514    var tmpar = new Array();
515    var page = document.getElementById('xcom_pageid').value;
516    var opstatus = xcom_check_opts(params[i],page,optstring,tmpar);
517	if(tmpar.length > 0) {
518        opts = new Array();
519        opts.push(tmpar[0]);
520    }
521	if(!opstatus) return false;
522    if(page)  {
523       if(params[0] == 'dokuwiki.search') {  // add page to search query
524             opts[0] =  opts[0] + " " + page;
525       }
526       else params[++i] = page;
527    }
528     else {
529         if(params[0]=='plugin.xcom.listNamespaces') {
530            params[++i] = '0';
531         }
532    }
533    if(params[0]=='wiki.putPage' || params[0]=='dokuwiki.appendPage') {
534            params[++i] = xcom_escape(xcom_getInputValue('xcom_editable'));
535     }
536
537     //assign options to parameter array
538    if(opts.length) {
539          for(j=0;j<opts.length;j++) {
540            opts[j] = xcom_timeStamp(opts[j]);
541            params[++i] = opts[j];
542          }
543    }
544
545    return params;
546}
547
548function xcom_getArray(opt) {
549
550   if(!opt) return false;
551   var matches;
552   try{
553    if(matches = opt.match(/\((.*?)\)/)) {
554         ar = matches[1].split(/;/);
555          return ar;
556       }
557    }
558    catch(e) { }
559    return false;
560}
561
562 /* returns formatted timestamp if date, otherwise returns the option */
563function xcom_timeStamp(opt) {
564    try{
565        if(opt.match(/\d\d\d\d-\d\d-\d\d/)) {
566           var d = new Date(opt);
567           var unixtime = parseInt(d.getTime() / 1000);
568           if(unixtime) {
569			   unixtime += 86400;	//needs added day for accurate time
570               return unixtime;
571           }
572        }
573    }catch(e) {
574    }
575    return opt;
576}
577
578function xcom_escape(data) {
579   data = data.replace(/&/g,"%26");
580   return  data;
581}
582/**
583  Format and output query on status line
584*/
585function xcom_query_status(options) {
586
587   if(typeof options != 'object'  && !(options instanceof Array)) return;
588
589   var q = options.join(',&nbsp;');
590
591   if(q.length > 70) {
592      q = q.substring(0,70) + '.  .  .';
593   }
594   document.getElementById('xcom_qstatus').innerHTML = q;
595
596}
597
598function xcom_select(sel) {
599    var which =sel.options[sel.selectedIndex].value;
600    if(!which) return;
601    xcom_setValue('xcom_url',xcomSites[which]['url']);
602    xcom_setValue('xcom_pwd',xcomSites[which]['pwd']);
603    xcom_setValue('xcom_user',xcomSites[which]['user']);
604}
605
606function xcom_toggle(which) {
607  jQuery(which).toggle();
608  var state = jQuery(which).css('display');
609  if(state != 'none')  {
610      xcom_show('xcom_results');
611  }
612  var title = which + '_title';
613  jQuery(title).toggle();
614}
615
616function xcom_show(which) {
617   var d = document.getElementById(which);
618   if(d) d.style.display = 'block';
619}
620
621function xcom_hide(which) {
622  var d = document.getElementById(which);
623  if(d) d.style.display = 'none';
624}
625function xcom_hide_all_views(xcom_action) {
626    xcom_hide('xcom_editable');
627    xcom_hide('xcom_pre');
628    if(!xcom_action) {
629    xcom_hide('xcom_htm');
630    }
631    xcom_hide('xcom_editable_title');
632    xcom_hide('xcom_pre_title');
633    xcom_hide('xcom_htm_title');
634    xcom_hide('xcom_results');
635    xcom_hide('xcom_action_title');
636}
637
638function xcom_clear(which) {
639  if(which == 'xcom_editable') {
640     xcom_setValue(which,"");
641     return;
642  }
643  document.getElementById(which).innerHTML= '';
644  if(arguments.length > 1) return;
645  xcom_hide(which);
646 }
647/**
648      creates credentials array for Json encoding
649*/
650function xcom_json_ini() {
651    jobj = {};
652     for (i=0; i<arguments.length; i++) {
653        var val = xcom_getInputValue(arguments[i]);
654        var key = (arguments[i].split(/_/))[1];
655        key = key.replace(/local/,"");
656        key = key.replace(/loc/,"");
657        jobj[key] = val;
658     }
659     return jobj;
660}
661
662function xcom_getInputValue(item) {
663    var d = document.getElementById(item);
664    if(!d) return;
665    return  d.value;
666}
667
668
669function xcom_setValue(item,val) {
670   var d = document.getElementById(item);
671   if(!d) return;
672   d.value = val;
673}
674
675/* used for checking options */
676function xcom_msg(msg) {
677  id ='xcom_pre';
678   xcom_show('xcom_results');
679  var d = document.getElementById(id);
680  d.innerHTML = msg;
681  xcom_show('xcom_pre');
682}
683
684/**
685   JSON.stringify combines elements from both of below:
686      http://blogs.sitepointstatic.com/examples/tech/json-serialization/json-serialization.js
687      https://gist.github.com/chicagoworks/754454
688*/
689var JSON = JSON || {};
690// implement JSON.stringify serialization
691JSON.stringify = JSON.stringify || function (obj) {
692	var t = typeof (obj);
693	if (t != "object" || obj === null) {
694		// simple data type
695		if (t == "string") obj = '"'+obj+'"';
696		return String(obj);
697	} else {
698
699		// recurse array or object
700		var n, v, json = [], arr = (obj && obj.constructor == Array);
701		for (n in obj) {
702                v = obj[n];
703                t = typeof(v);
704                if (obj.hasOwnProperty(n)) {
705                    if (t == "string") {
706                        v = '"' + v + '"';
707                    } else if (t == "object" && v !== null){
708                        v = jQuery.stringify(v);
709                    }
710
711			json.push((arr ? "" : '"' + n + '":') + String(v));
712		}
713            }
714
715		return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
716	}
717};
718
719
720jQuery( document ).ready(function() {
721       /* drop-down function menu with tool tips */
722	   /* xcom_query_types is array of xmlrpc functions below */
723       var sel = document.getElementById('xcom_sel');
724       if(sel) {
725       var titles = JSINFO['xcom_qtitles'];
726       for(i=0; i<xcom_query_types.length; i++) {
727           var text = xcom_query_types[i].match(/^plugin\./) ? xcom_query_types[i].replace(/^plugin\./,"") : (xcom_query_types[i].split('.'))[1];
728            var newopt = new Option(text,xcom_query_types[i]);
729            if(titles[xcom_query_types[i]]) newopt.title = titles[xcom_query_types[i]];
730            else newopt.title = xcom_query_types[i];
731            sel.add(newopt);
732       }
733
734         var selsites = document.getElementById('xcom_selsites');
735         if(selsites) {
736             xcomSites = JSINFO['xcom_sites'];
737             for (var i in xcomSites) {
738                var newopt = new Option(i,i);
739                selsites.add(newopt);
740             }
741           }
742       }  // drop-down menu end
743
744   var img_path = DOKU_BASE + 'lib/plugins/xcom/images/';
745   var eyes  = {
746        'black':  img_path + 'eye_blk.png',
747        'blue':  img_path + 'eye_blue.png',
748   };
749
750   jQuery("img").click(function () {
751      if(jQuery(this).attr("src").match(/eye_blue/)) {
752           var which = jQuery(this).attr("id").match(/loc/) ?  "#xcom_localpwd" : "#xcom_pwd";
753           jQuery(this).attr("src",eyes.black);
754           jQuery(which).attr("type","password");
755           jQuery(this).attr("title",JSINFO['pwdview']);
756       }
757       else if(jQuery(this).attr("src").match(/eye_blk/)) {
758          var which = jQuery(this).attr("id").match(/loc/) ?  "#xcom_localpwd" : "#xcom_pwd";
759          jQuery(this).attr("src",eyes.blue);
760          jQuery(which).attr("type","text");
761           jQuery(this).attr("title",JSINFO['pwdhide']);
762       }
763});
764
765jQuery( "#xcom_eye" ).on( "mouseover", function() {
766jQuery( this ).css( "cursor", "pointer" );
767});
768
769jQuery( "#xcom_eye" ).on( "mouseout", function() {
770jQuery( this ).css( "cursor", "default" );
771});
772
773jQuery( "#xcom_loceye").on( "mouseover", function() {
774jQuery( this ).css( "cursor", "pointer" );
775});
776
777jQuery( "#xcom_loceye" ).on( "mouseout", function() {
778jQuery( this ).css( "cursor", "default" );
779});
780
781});
782
783function xcom_rollover(el,underline) {
784if(underline)
785  el.style.textDecoration ='underline';
786else el.style.textDecoration = 'none';
787
788}
789var xcom_query_types=new Array(
790'dokuwiki.getPagelist',
791'dokuwiki.search',
792'dokuwiki.getTitle',
793'dokuwiki.appendPage',
794'wiki.aclCheck',
795'wiki.getPage',
796'wiki.getPageVersion',
797'plugin.xcom.pageVersions',
798'plugin.xcom.getPageInfo',
799'wiki.getPageHTML',
800'wiki.putPage',
801'wiki.listLinks',
802'wiki.getAllPages',
803'wiki.getBackLinks',
804'wiki.getRecentChanges',
805'wiki.getAttachments',
806'wiki.getAttachmentInfo',
807'wiki.getRecentMediaChanges',
808'plugin.acl.addAcl',
809'plugin.acl.delAcl',
810'plugin.xcom.getMedia',
811'plugin.xcom.listNamespaces',
812'plugin.xcom.GetMetaData',
813);
814
815function xcom_err_msg() {
816    var i,msg="";
817    if(arguments.length == 1) {
818        xcom_msg(LANG.plugins.xcom[arguments[0]]);
819        return;
820    }
821
822    for(i=0; i<arguments.length;i++) {
823       if(typeof LANG.plugins.xcom[arguments[i]] == 'undefined') {
824           msg += '<b>'+ arguments[i] + "</b> ";
825       }
826       else msg+=LANG.plugins.xcom[arguments[i]] + " ";
827    }
828    xcom_msg(msg);
829}