source: DASISH/t5.6/client/trunk/chrome/markingcollection/content/markingcollection/markingcollection.js @ 2780

Last change on this file since 2780 was 2780, checked in by olof, 11 years ago

added logging for development.
inserted function calls for insert, update

File size: 119.8 KB
Line 
1var bitsMarkingCollection = {
2/////////////////////////////////////////////////////////////////////
3        _location : null,
4        _init     : false,
5        _removefile : [],
6        _homepage : "http://www.wired-marker.org/index.cgi",
7        _version : "",
8        _contentWindow : null,
9        _markingtimer  : null,
10        _uncategorized : {      //未分類フォルダ甚定矩
11                dbtype : "_uncategorized"
12        },
13        _app_version : 2,
14
15/////////////////////////////////////////////////////////////////////
16        get STRING()     { return document.getElementById("MarkingCollectionOverlayString"); },
17        get DEF_STRING() { return document.getElementById("bitsDefaultString"); },
18        get DataSource() { return bitsObjectMng.DataSource; },
19        get Common()     { return bitsObjectMng.Common;     },
20        get XPath()      { return bitsObjectMng.XPath;      },
21        get Database()   { return bitsObjectMng.Database;   },
22        get gBrowser()   { return bitsObjectMng.getBrowser();},
23
24        get BROWSER()       { return document.getElementById("MarkingCollectionBrowser"); },
25        get ProgressPanel() { return document.getElementById("MarkingCollectionProgressPanel"); },
26        get Progressmeter() { return document.getElementById("MarkingCollectionProgressmeter"); },
27
28        get BOOKMARKS_MENU_2() { return document.getElementById("bookmarks-menu"); }, /* Ver2.0 */
29        get BOOKMARKS_MENU_3() { return document.getElementById("bookmarksMenu"); },  /* Ver3.0 */
30
31        get BROADCASTER() { return document.getElementById("viewMarkingCollection"); },
32
33        localfolder : {
34                get id(){ return "0"; },
35                get about(){ return bitsObjectMng.DataSource.ABOUT_ITEM+"00000000000000"; },
36                get title(){ return bitsObjectMng.STRING.getString("LOCAL_FOLDER"); },
37        },
38
39        sharedfolder : {
40                _id : 0,
41                get id(){ return this._id; },
42                get title(){ return bitsObjectMng.STRING.getString("SHARED_FOLDER"); },
43
44                init : function(){
45                        this._id = 1;
46                },
47                about : function(aID){
48                        if(aID == undefined) return "";
49                        aID = ""+aID;
50                        while(aID.length<14) aID = "0"+aID;
51                        return bitsObjectMng.DataSource.ABOUT_ITEM+aID;
52                },
53        },
54
55        dbinfo : {
56                _xmldoc : undefined,
57                _xmlfolder : undefined,
58
59                get dbFolder()   { return this._xmlfolder; },
60
61                init : function(aForced){
62                        if(aForced == undefined) aForced = false;
63                        var hasHidden = false;
64                        var addon_info_arr = null;
65                        var extensionDir = bitsMarkingCollection.Common.getExtensionDir().clone();
66                        if(extensionDir){
67                                this._xmlfolder = extensionDir;
68                                var xmlfile = extensionDir.clone();
69                                xmlfile.append("db.xml");
70                                var defaultMode = bitsMarkingCollection.Database._defaultMode;
71                                if(!xmlfile.exists()){
72                                        var db_order = 0;
73                                        db_order++;
74                                        var aContent = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n';
75                                        aContent += '<!DOCTYPE DATABASES>\n<DATABASES>\n';
76                                        aContent += '  <DATABASE id="' + defaultMode + '" disabled="false" hidden="false" db_default="true" db_contextmenu="true" db_order="' + db_order + '">\n';
77                                        aContent += '    <DATABASE_TITLE>'  + bitsMarkingCollection.localfolder.title + '</DATABASE_TITLE>\n';
78                                        aContent += '    <DATABASE_DBTYPE>' + defaultMode + '</DATABASE_DBTYPE>\n';
79                                        aContent += '    <DATABASE_FILE>'   + bitsMarkingCollection.Common.convertFilePathToURL(bitsMarkingCollection.Database._getConnectFile(defaultMode).path) + '</DATABASE_FILE>\n';
80                                        aContent += '    <DATABASE_ICON>chrome://markingcollection/skin/localfolder.png</DATABASE_ICON>\n';
81                                        aContent += '  </DATABASE>\n';
82                                        aContent += '</DATABASES>\n';
83                                        bitsMarkingCollection.Common.writeFile(xmlfile,aContent,"UTF-8");
84                                }
85                                if(xmlfile.exists()){
86                                        function _loadXMLDocument(pUri){
87                                                if(pUri == undefined) return undefined;
88                                                var xmlDocument = bitsMarkingCollection.loadXMLDocument(pUri);
89                                                if(xmlDocument){
90                                                        return xmlDocument.documentElement;
91                                                }else{
92                                                        return undefined;
93                                                }
94                                        }
95                                        function _createXMLDocument(aXMLFile){
96                                                if(!aXMLFile) return undefined;
97                                                try{
98                                                        return _loadXMLDocument(bitsMarkingCollection.Common.IO.newFileURI(aXMLFile).spec);
99                                                }catch(ex){
100                                                        bitsMarkingCollection._dump("bitsMarkingCollection._createXMLDocument():"+ ex);
101                                                        return undefined;
102                                                }
103                                        }
104                                        this._xmldoc = _createXMLDocument(xmlfile);
105
106                                        if(this._xmldoc && bitsMarkingCollection._uncategorized.use){
107                                                var elem = bitsContextMenu._contextMenuUncategorized;
108                                                if(elem){
109                                                        elem.setAttribute("fid","0");
110                                                        elem.setAttribute("_style",bitsMarkingCollection._uncategorized.style);
111                                                        elem.setAttribute("dbtype",bitsMarkingCollection._uncategorized.dbtype);
112                                                }
113                                                bitsMarkingCollection.Database.init(bitsMarkingCollection._uncategorized.dbtype,bitsMarkingCollection._uncategorized.file);
114                                        }
115                                        if(this._xmldoc){
116                                                var alldbunused = nsPreferences.getBoolPref("wiredmarker.startup.alldbunused", false);
117                                                var elemDBs = this._xmldoc.getElementsByTagName("DATABASE");
118                                                if(elemDBs && elemDBs.length>0){
119                                                        var check_init = false;
120                                                        var check_default = false;
121                                                        var check_contextmenu = false;
122                                                        var i,j;
123                                                        for(i=0;i<elemDBs.length;i++){
124                                                                var elemDB = elemDBs[i];
125                                                                var id = elemDB.getAttribute("id");
126                                                                if(!id) continue;
127
128                                                                if(!elemDB.hasAttribute("hidden")){
129                                                                        hasHidden = true;
130                                                                        elemDB.setAttribute("hidden","false");
131                                                                }
132
133                                                                var elemDBTYPE = elemDB.getElementsByTagName("DATABASE_DBTYPE")[0];
134                                                                var elemFILE = elemDB.getElementsByTagName("DATABASE_FILE")[0];
135                                                                if(!elemDBTYPE || !elemFILE) continue;
136                                                                if(elemDBTYPE.textContent == "" || elemFILE.textContent == "") continue;
137
138                                                                var db_default = (elemDB.getAttribute("db_default")=="true"?true:false);
139                                                                if(!aForced && !db_default && alldbunused) elemDB.setAttribute("disabled",true);
140                                                                var db_contextmenu = (elemDB.getAttribute("db_contextmenu")=="true"?true:false);
141
142                                                                check_default |= db_default;
143                                                                check_contextmenu |= db_contextmenu;
144
145                                                                var disabled = elemDB.getAttribute("disabled");
146                                                                if(disabled == "true"){
147                                                                        bitsMarkingCollection.Database.done(elemDBTYPE.textContent);
148                                                                        continue;
149                                                                }
150                                                                bitsMarkingCollection.Database.init(elemDBTYPE.textContent,bitsMarkingCollection.Common.convertURLToFile(elemFILE.textContent));
151
152                                                                check_init = true;
153                                                                try{
154                                                                        var version = bitsMarkingCollection.Database.getVersion(elemDBTYPE.textContent);
155                                                                        if(parseFloat(version?version:0)<parseFloat(bitsMarkingCollection.Database.version)){
156                                                                                bitsMarkingCollection.Database.convert( elemDBTYPE.textContent );
157                                                                                aForced = false;
158                                                                                alldbunused = true;
159                                                                        }
160                                                                }catch(ex){
161                                                                        bitsMarkingCollection._dump("bitsMarkingCollection.dbinfo.init():"+ ex);
162                                                                }
163                                                        }
164                                                        if(!check_init || !check_default){
165                                                                for(i=0;i<elemDBs.length;i++){
166                                                                        var elemDB = elemDBs[i];
167                                                                        var id = elemDB.getAttribute("id");
168                                                                        if(!id) continue;
169
170                                                                        var elemDBTYPE = elemDB.getElementsByTagName("DATABASE_DBTYPE")[0];
171                                                                        var elemFILE = elemDB.getElementsByTagName("DATABASE_FILE")[0];
172                                                                        if(!elemDBTYPE || !elemFILE) continue;
173                                                                        if(elemDBTYPE.textContent == "" || elemFILE.textContent == "") continue;
174                                                                        elemDB.removeAttribute("disabled");
175                                                                        if(!check_default) elemDB.setAttribute("db_default",true);
176                                                                        if(!check_contextmenu) elemDB.setAttribute("db_contextmenu",true);
177                                                                        if(check_init) break;
178                                                                        bitsMarkingCollection.Database.init(elemDBTYPE.textContent,bitsMarkingCollection.Common.convertURLToFile(elemFILE.textContent));
179                                                                        try{
180                                                                                var version = bitsMarkingCollection.Database.getVersion(elemDBTYPE.textContent);
181                                                                                if(parseFloat(version?version:0)<parseFloat(bitsMarkingCollection.Database.version)){
182                                                                                        bitsMarkingCollection.Database.convert( elemDBTYPE.textContent );
183                                                                                }
184                                                                        }catch(ex){
185                                                                                bitsMarkingCollection._dump("bitsMarkingCollection.dbinfo.init():"+ ex);
186                                                                        }
187                                                                        aForced = false;
188                                                                        alldbunused = true;
189                                                                        break;
190                                                                }
191                                                        }
192                                                }
193
194                                                if(hasHidden || (!aForced && alldbunused)){
195                                                        var s = new XMLSerializer();
196                                                        var xml = s.serializeToString(this._xmldoc);
197                                                        bitsMarkingCollection.Common.writeFile(xmlfile, xml+"\n","UTF-8");
198                                                }
199                                        }
200                                }
201                        }
202                },
203
204                getAddonInfo : function(aDBType){
205                        if(aDBType == undefined) return undefined;
206                        if(this._xmldoc == undefined) this.init();;
207                        if(this._xmldoc == undefined) return undefined;
208                        var rtn = undefined;
209                        var elemDBs = this._xmldoc.getElementsByTagName("DATABASE");
210                        if(elemDBs && elemDBs.length>0){
211                                var i,j;
212                                for(i=0;i<elemDBs.length;i++){
213                                        var elemDB = elemDBs[i];
214                                        var id = elemDB.getAttribute("id");
215                                        if(!id || id != aDBType) continue;
216                                        for(j=0;j<elemDB.childNodes.length;j++){
217                                                var elem = elemDB.childNodes[j];
218                                                if(!elem.nodeName.match(/^ADDON_(.+)$/)) continue;
219                                                if(rtn == undefined) rtn = {};
220                                                var key = RegExp.$1.toLowerCase();
221                                                rtn[key] = elem.textContent;
222                                        }
223                                }
224                        }
225                        return rtn;
226                },
227
228                getAllDBInfo : function(){
229                        if(this._xmldoc == undefined) this.init();;
230                        if(this._xmldoc == undefined) return undefined;
231                        var rtn = undefined;
232                        var attr = undefined;
233                        var use_addon_dbtype = [];
234                        if(bitsScrapPartyAddonService && bitsScrapPartyAddonService.existsAddon()){
235                                var addon_info_arr = bitsScrapPartyAddonService.getAddonInfo();
236                                if(addon_info_arr && addon_info_arr.length > 0){
237                                        var i;
238                                        for(i=0;i<addon_info_arr.length;i++){
239                                                if(addon_info_arr[i].dbtype == undefined) continue;
240                                                use_addon_dbtype[addon_info_arr[i].dbtype.value] = addon_info_arr[i].id.value;
241                                        }
242                                }
243                        }
244                        if(bitsMarkingCollection._uncategorized.use){
245                                if(rtn == undefined) rtn = [];
246                                if(attr == undefined) attr = {};
247                                attr.db_order = "0";
248                                attr.db_default = false;
249                                attr.db_contextmenu = false;
250                                attr.database_title = bitsMarkingCollection._uncategorized.title;
251                                attr.database_dbtype = bitsMarkingCollection._uncategorized.dbtype;
252                                attr.database_file = bitsMarkingCollection.Common.IO.newFileURI(bitsMarkingCollection._uncategorized.file).spec;
253                                rtn.push(attr);
254                                attr = undefined;
255                        }
256                        var elemDBs = this._xmldoc.getElementsByTagName("DATABASE");
257                        if(elemDBs && elemDBs.length>0){
258                                var i,j;
259                                for(i=0;i<elemDBs.length;i++){
260                                        var elemDB = elemDBs[i];
261                                        var id = elemDB.getAttribute("id");
262                                        if(!id) continue;
263                                        var disabled = elemDB.getAttribute("disabled");
264                                        if(disabled == "true") continue;
265                                        var db_order = parseInt(elemDB.getAttribute("db_order"));
266                                        var db_default = (elemDB.getAttribute("db_default")=="true"?true:false);
267                                        var db_contextmenu = (elemDB.getAttribute("db_contextmenu")=="true"?true:false);
268                                        for(j=0;j<elemDB.childNodes.length;j++){
269                                                var elem = elemDB.childNodes[j];
270                                                if(elem.nodeType != elem.ELEMENT_NODE) continue;
271                                                if(rtn == undefined) rtn = [];
272                                                if(attr == undefined) attr = {};
273                                                var key = elem.nodeName.toLowerCase();
274                                                attr[key] = elem.textContent;
275                                        }
276                                        if(attr["addon_dbtype"] && use_addon_dbtype[attr["addon_dbtype"]] == undefined){
277                                                attr = undefined;
278                                        }
279                                        if(rtn != undefined && attr != undefined){
280                                                if(db_order != undefined) attr["db_order"] = db_order;
281                                                if(db_default != undefined) attr["db_default"] = db_default;
282                                                if(db_default != undefined) attr["db_contextmenu"] = db_contextmenu;
283                                                rtn.push(attr);
284                                                attr = undefined;
285                                        }
286                                }
287                        }
288                        return rtn;
289                },
290        },
291
292        Observer : {
293                domain  : 'wiredmarker', //"objectmng.xxx"ずいう名前の蚭定が倉曎された堎合党おで凊理を行う
294                observe : function(aSubject, aTopic, aPrefstring) {
295                        try{
296                                if (aTopic == 'nsPref:changed') {
297                                        switch (aPrefstring){
298                                                case "wiredmarker.menu.position":
299                                                        bitsMarkingCollection.disMainMenu()
300                                                        break;
301                                                case "wiredmarker.uncategorized.use":
302                                                        bitsMarkingCollection._uncategorized.use = nsPreferences.getBoolPref("wiredmarker.uncategorized.use", true);
303                                                        bitsMarkingCollection.dbinfo.init();
304                                                        break;
305                                                case "wiredmarker.uncategorized.style":
306                                                        bitsMarkingCollection._uncategorized.style = nsPreferences.copyUnicharPref("wiredmarker.uncategorized.style", bitsMarkingCollection.STRING.getString("UN_FOLDER_STYLE"));
307                                                        break;
308                                                case "wiredmarker.uncategorized.title":
309                                                        bitsMarkingCollection._uncategorized.title = nsPreferences.copyUnicharPref("wiredmarker.uncategorized.title", bitsMarkingCollection.STRING.getString("UN_FOLDER"));
310                                                        break;
311                                                default:
312                                                        break;
313                                        }
314                                }
315                        }catch(ex){
316                                window.top.bitsObjectMng.Common.alert("mcDatabaseObserver:"+ex);
317                        }
318                },
319        },
320
321/////////////////////////////////////////////////////////////////////
322        progressListener : {
323                QueryInterface : function(aIID){
324                        if(aIID.equals(Components.interfaces.nsIWebProgressListener) || aIID.equals(Components.interfaces.nsISupportsWeakReference) || aIID.equals(Components.interfaces.nsISupports)) return this;
325                        throw Components.results.NS_NOINTERFACE;
326                },
327                onLocationChange : function(webProgress, aRequest, aURI){
328                        annotationProxy.getAnnotations(webProgress.DOMWindow.document.URL);//Get alla remote annotations
329                        if(webProgress.isLoadingDocument) return;
330                        bitsMarkingCollection.marking(webProgress.DOMWindow.document);
331                        bitsObjectMng.Common.pageshow(webProgress.DOMWindow.document);
332                },
333                onStateChange : function(webProgress, request, stateFlags, status){
334                        if(webProgress.isLoadingDocument) return;
335                        bitsMarkingCollection.marking(webProgress.DOMWindow.document);
336                        bitsObjectMng.Common.pageshow(webProgress.DOMWindow.document);
337                },
338                onProgressChange : function(){},
339                onStatusChange : function(){},
340                onSecurityChange : function(){},
341                onLinkIconAvailable : function(){}
342        },
343
344/////////////////////////////////////////////////////////////////////
345        getProfDir : function(){
346                var dir = this.Common.DIR.get("ProfD", Components.interfaces.nsIFile);
347                return dir;
348        },
349
350/////////////////////////////////////////////////////////////////////
351        getTmpDir : function(){
352                var dir = this.Common.DIR.get("TmpD", Components.interfaces.nsIFile);
353                return dir;
354        },
355
356/////////////////////////////////////////////////////////////////////
357        getTempDir : function(){
358                try{
359                        var file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("TmpD", Components.interfaces.nsIFile);
360                        file.append(this.STRING.getString("APP_TITLE"));
361                        file.createUnique(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0700);
362                        return file;
363                }catch(ex){
364                        throw new Error("bitsMarkingCollection.getTempDir():"+ex);
365                }
366                return null;
367        },
368
369/////////////////////////////////////////////////////////////////////
370        getExtInstDir : function(){
371                var dir = null;
372                var id = bitsMarkingCollection.STRING.getString("APP_ID");
373                try{
374                        dir = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager).getInstallLocation(id).getItemLocation(id);
375                }catch(ex){
376                        dir = bitsMarkingCollection.getProfDir();
377                        if(dir){
378                                dir.append("extensions");
379                                dir.append(id);
380                        }
381                }
382                return dir;
383        },
384
385/////////////////////////////////////////////////////////////////////
386        getExtensionDir : function(){
387                var dir;
388                try {
389                        var isDefault = nsPreferences.getBoolPref("wiredmarker.data.default");
390                        dir = nsPreferences.getLocalizedUnicharPref("wiredmarker.data.path", Components.interfaces.nsIPrefLocalizedString).data;
391                        dir = this.Common.convertPathToFile(dir);
392                }catch(ex){
393                        isDefault = true;
394                }
395                if(isDefault){
396                        var profDir = this.getProfDir();
397                        if(profDir){
398                                var oldAppDir = profDir.clone();
399                                oldAppDir.append("ScrapParty");
400                                if(oldAppDir && oldAppDir.exists()) oldAppDir.moveTo(profDir, this.STRING.getString("APP_TITLE"));
401                        }
402                        if(profDir){
403                                dir = profDir.clone();
404                                if(dir) dir.append(this.STRING.getString("APP_TITLE"));
405                        }
406                }
407                if(dir && !dir.exists()) dir.create(dir.DIRECTORY_TYPE, 0700);
408                return dir;
409        },
410
411/////////////////////////////////////////////////////////////////////
412        getContentDir : function(aID, aSuppressCreate){
413                var dir = this.getExtensionDir().clone();
414                dir.append("data");
415                if(!dir.exists()) dir.create(dir.DIRECTORY_TYPE, 0700);
416                return dir;
417        },
418
419/////////////////////////////////////////////////////////////////////
420        disMainMenu : function(){
421                var disp = nsPreferences.getBoolPref("wiredmarker.menu.topmenu", true);
422                var position = nsPreferences.copyUnicharPref("wiredmarker.menu.position", null);
423                if(position == null){
424                        position = this._app_version<4?"topmenu":"appmenu";
425                        var isXp = false;
426                        var res = window.navigator.oscpu.match(/Windows NT (.+)/);
427                        if(res && res[1]<6) isXp = true;
428                        if(this._app_version>=4 && isXp) position = "topmenu";
429                        setTimeout(function(){nsPreferences.setUnicharPref("wiredmarker.menu.position", position);},0);
430                        return;
431                }
432                if(position == "appmenu" &&
433                        Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULRuntime).OS != "WINNT"){
434                        position = "topmenu";
435                        setTimeout(function(){nsPreferences.setUnicharPref("wiredmarker.menu.position", position);},0);
436                        return;
437                }
438                var menu_AppBits = window.top.document.getElementById("bitsExtensionsAppMenu");
439                var menu_MainBits = window.top.document.getElementById("bitsExtensionsMainMenu");
440                var menu_ToolsBits = window.top.document.getElementById("bitsExtensionsToolsMenu");
441                var menu_BookmarksBits = window.top.document.getElementById("bitsExtensionsBookmarksMenu");
442                var menuseparator_BookmarksBits = window.top.document.getElementById("bitsExtensionsBookmarksMenuseparator");
443                if(!menu_MainBits || !menu_ToolsBits || !menu_BookmarksBits) return;
444
445                var menu_child;
446                if(position != "appmenu" && menu_AppBits && menu_AppBits.hasChildNodes()){
447                        menu_child = menu_AppBits.firstChild.cloneNode(true);
448                }else if(position != "topmenu" && menu_MainBits.hasChildNodes()){
449                        menu_child = menu_MainBits.firstChild.cloneNode(true);
450                }else if(position != "tools" && menu_ToolsBits.hasChildNodes()){
451                        menu_child = menu_ToolsBits.firstChild.cloneNode(true);
452                }else if(position != "bookmarks" && menu_BookmarksBits.hasChildNodes()){
453                        menu_child = menu_BookmarksBits.firstChild.cloneNode(true);
454                }
455
456                if(menu_AppBits) menu_AppBits.setAttribute("hidden",true);
457                menu_MainBits.setAttribute("hidden",true);
458                menu_ToolsBits.setAttribute("hidden",true);
459                menu_BookmarksBits.setAttribute("hidden",true);
460                if(menuseparator_BookmarksBits) menuseparator_BookmarksBits.setAttribute("hidden","true");
461
462                switch(position){
463                        case "bookmarks":
464                                if(menu_child) menu_BookmarksBits.appendChild(menu_child);
465                                menu_BookmarksBits.removeAttribute("hidden");
466                                if(menuseparator_BookmarksBits) menuseparator_BookmarksBits.removeAttribute("hidden");
467                                break;
468                        case "tools":
469                                if(menu_child) menu_ToolsBits.appendChild(menu_child);
470                                menu_ToolsBits.removeAttribute("hidden");
471                                break;
472                        case "appmenu":
473                                if(menu_AppBits){
474                                        if(menu_child) menu_AppBits.appendChild(menu_child);
475                                        menu_AppBits.removeAttribute("hidden");
476                                }
477                                break;
478                        default:
479                                if(menu_child) menu_MainBits.appendChild(menu_child);
480                                menu_MainBits.removeAttribute("hidden");
481                                break;
482                }
483
484                if(!menu_child) return;
485
486                if(position != "appmenu" && menu_AppBits && menu_AppBits.hasChildNodes()){
487                        while(menu_AppBits.hasChildNodes()){
488                                menu_AppBits.removeChild(menu_AppBits.lastChild);
489                        }
490                }
491                if(position != "topmenu" && menu_MainBits.hasChildNodes()){
492                        while(menu_MainBits.hasChildNodes()){
493                                menu_MainBits.removeChild(menu_MainBits.lastChild);
494                        }
495                }
496                if(position != "tools" && menu_ToolsBits.hasChildNodes()){
497                        while(menu_ToolsBits.hasChildNodes()){
498                                menu_ToolsBits.removeChild(menu_ToolsBits.lastChild);
499                        }
500                }
501                if(position != "bookmarks" && menu_BookmarksBits.hasChildNodes()){
502                        while(menu_BookmarksBits.hasChildNodes()){
503                                menu_BookmarksBits.removeChild(menu_BookmarksBits.lastChild);
504                        }
505                }
506
507        },
508
509/////////////////////////////////////////////////////////////////////
510        dispHP : function(addon){
511                var self = bitsMarkingCollection;
512                self._version = addon.version;
513                //最初のむンストヌル埌にホヌムペヌゞを開く
514                var version = nsPreferences.copyUnicharPref("wiredmarker.version");
515                if(version == null || version != self._version){
516                        if(parseFloat(version) <= parseFloat("3.1.09020400")){
517                                var textplain_display = nsPreferences.copyUnicharPref("wiredmarker.textplain.display","usually");
518                                if(textplain_display != "usually") nsPreferences.setUnicharPref("wiredmarker.textplain.display", "usually");
519                        }
520                        self.Common.loadURL(self._homepage+"?version="+encodeURIComponent(self._version)+"&locale="+encodeURIComponent(self.DEF_STRING.getString("general.useragent.locale")),true);
521                        nsPreferences.setUnicharPref("wiredmarker.version", self._version);
522                }
523        },
524
525/////////////////////////////////////////////////////////////////////
526        init : function(aEvent){
527                if(bitsMarkingCollection._init) return;
528                try{
529                        if(!bitsObjectMng){
530                                setTimeout(function(){bitsMarkingCollection.init(aEvent)},1000);
531                                return;
532                        }
533                }catch(ex){
534                        setTimeout(function(){bitsMarkingCollection.init(aEvent)},1000);
535                        return;
536                }
537                try{
538                        var info = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo);
539                        this._app_version = parseInt(info.version);
540                }catch(e){}
541                try{
542                        /* ver2.0 ず ver3.0 ではブックマヌクメニュヌのIDが違う為、動的にメニュヌを生成 */
543                        var insertafter = null;
544                        var menuelem = this.BOOKMARKS_MENU_2;
545                        if(menuelem){
546                                var elem = document.getElementById("bookmarkAllCmd");
547                                if(elem){
548                                        if(elem.nextSibling && elem.nextSibling.nextSibling) insertafter = elem.nextSibling.nextSibling;
549                                }else{
550                                        menuelem = undefined;
551                                }
552                        }else{
553                                menuelem = this.BOOKMARKS_MENU_3;
554                                var elem = document.getElementById("organizeBookmarksSeparator");
555                                if(elem){
556                                        insertafter = elem;
557                                }else{
558                                        menuelem = undefined;
559                                }
560                        }
561                        if(menuelem && menuelem.hasChildNodes()){
562                                var childnode = menuelem.firstChild;
563                                while(childnode){
564                                        if(childnode.nodeName.toLowerCase() == "menupopup") break;
565                                        childnode = menuelem.nextSibling;
566                                }
567                                if(childnode){
568                                        var doc = menuelem.ownerDocument;
569                                        var menu = doc.createElement("menu");
570                                        var menuseparator = doc.createElement("menuseparator");
571                                        if(menu && menuseparator){
572                                                menu.setAttribute("id","bitsExtensionsBookmarksMenu");
573                                                /* menu.setAttribute("class","menu-iconic");
574                                                menu.setAttribute("image","chrome://markingcollection/skin/icon_16.gif"); */
575                                                menu.setAttribute("hidden","true");
576                                                menu.setAttribute("label",this.STRING.getString("APP_DISP_TITLE"));
577                                                menu.setAttribute("accesskey","M");
578                                                menuseparator.setAttribute("id","bitsExtensionsBookmarksMenuseparator");
579                                                menuseparator.setAttribute("hidden","true");
580                                                if(insertafter && insertafter.nextSibling){
581                                                        var nextSibling = insertafter.nextSibling;
582                                                        childnode.insertBefore(menu,nextSibling);
583                                                        childnode.insertBefore(menuseparator,nextSibling);
584                                                }else{
585                                                        childnode.appendChild(menu);
586                                                        childnode.appendChild(menuseparator);
587                                                }
588                                        }
589                                }
590                        }
591                }catch(ex){
592                        this.Common.alert("bitsMarkingCollection.init():"+ex);
593                }
594                if(nsPreferences.getBoolPref("wiredmarker.debug", false)) this.showConsole();
595                try{
596                        var em = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager);
597                        this.dispHP(em.getItemForID(this.STRING.getString("APP_ID")));
598                }catch(ex){
599                        Components.utils.import("resource://gre/modules/AddonManager.jsm");
600                        AddonManager.getAddonByID(this.STRING.getString("APP_ID"), bitsMarkingCollection.dispHP);
601                }
602
603                //叀い蚭定を削陀
604                var i;
605                var userPrefs = [
606                        "scrapparty.menu.topmenu",
607                        "objectmng.last_update",
608                        "markingcollection.viewmode",
609                        "markingcollection.rootfolder",
610                        "markingcollection.rootfolder_dbtype",
611                        "markingcollection.folderautoopen",
612                        "markingcollection.filter.folder",
613                        "markingcollection.folderstyleindex",
614                        "markingcollection.filter.folder",
615                        "markingcollection.filter.keyword",
616                        "markingcollection.propertyview",
617                        "markingcollection.multidocument",
618                        "scrappartymerge.merge",
619                        "scrappartymerge.conditionMerge",
620                        "scrappartymerge.confirmMerge",
621                        "scrapparty.startup.alldbunused",
622                        "wiredmarker.autocache.manually.exec",
623                        "wiredmarker.autocache.manually.confirm",
624                ];
625                for(i=8;i>0;i--){
626                        userPrefs.push("markingcollection.marker.style." + i);
627                }
628                for(i=0;i<userPrefs.length;i++){
629                        try{
630                                this.Common.PREF.clearUserPref(userPrefs[i]);
631                        }catch(ex){}
632                }
633                this._uncategorized.use = nsPreferences.getBoolPref("wiredmarker.uncategorized.use", true);
634                this._uncategorized.style = nsPreferences.copyUnicharPref("wiredmarker.uncategorized.style", this.STRING.getString("UN_FOLDER_STYLE"));
635                this._uncategorized.title = nsPreferences.copyUnicharPref("wiredmarker.uncategorized.title", this.STRING.getString("UN_FOLDER"));
636                this._uncategorized.file = this.getExtensionDir().clone();
637                this._uncategorized.file.append(this._uncategorized.dbtype+".sqlite");
638                try{
639                        //メニュヌ衚瀺䜍眮の凊理
640                        this.disMainMenu();
641                        try{
642                                bitsObjectMng.getBrowser().addEventListener("pageshow", bitsMarkingCollection.load,   false);
643                                bitsObjectMng.getBrowser().addEventListener("pagehide", bitsMarkingCollection.unload, false);
644                                bitsObjectMng.getBrowser().addEventListener("select",   bitsMarkingCollection.select, false);
645                        }catch(ex2){
646                                this.Common.alert("bitsMarkingCollection.init(4):"+ex2);
647                        }
648                        if(this._app_version<4) bitsObjectMng.getBrowser().addProgressListener(bitsMarkingCollection.progressListener, Components.interfaces.nsIWebProgress.NOTIFY_STATE_DOCUMENT);
649                        else bitsObjectMng.getBrowser().addProgressListener(bitsMarkingCollection.progressListener);
650                        try{
651                                bitsMarkingCollection.sharedfolder.init();
652                        }catch(ex2){
653                                this.Common.alert("bitsMarkingCollection.init(5):"+ex2);
654                        }
655                        bitsHTML2XHTMLService.init();
656                        bitsMarkingCollection.dbinfo.init();
657                        bitsMarker.init();
658                        bitsContextMenu.init();
659                        bitsMenuTree.init();
660                        bitsTreeListService.init();
661                        bitsTreeExportService.init();
662                        bitsSubstitutionTree.init();
663                        bitsTreeProjectService.init();
664                        bitsAutocacheService.init();
665                        bitsShortcutService.init();
666                        bitsMetaCapture.init();
667                        bitsPubmedCentralService.init();
668                        bitsScrapPartyAddonService.init(aEvent);
669                        // ダミヌHYPER-ANCHOR凊理
670                        try{
671                                if(!bitsHyperAnchor || bitsHyperAnchor.clickLinkIcon == undefined) bitsHyperAnchorDummy.init(aEvent);
672                        }catch(ex2){
673                                bitsHyperAnchorDummy.init(aEvent);
674                        }
675                        bitsMarkingCollection._init = true;
676                        bitsMarkingCollection.Common.addPrefListener(bitsMarkingCollection.Observer);
677                }catch(ex){
678                        this.Common.alert("bitsMarkingCollection.init():"+ex);
679                }
680        },
681
682/////////////////////////////////////////////////////////////////////
683        done : function(aEvent){
684                if(bitsMarkingCollection._init){
685                        bitsObjectMng.getBrowser().removeProgressListener(bitsMarkingCollection.progressListener);
686                        bitsObjectMng.getBrowser().removeEventListener("pageshow", bitsMarkingCollection.load,   false);
687                        bitsObjectMng.getBrowser().removeEventListener("pagehide", bitsMarkingCollection.unload, false);
688                        bitsObjectMng.getBrowser().removeEventListener("select",   bitsMarkingCollection.select, false);
689                        bitsMarkingCollection.Common.removePrefListener(bitsMarkingCollection.Observer);
690                        bitsSubstitutionTree.done();
691                        bitsTreeExportService.done();
692                        bitsTreeListService.done();
693                        bitsMenuTree.done();
694                        bitsContextMenu.done();
695                        bitsAutocacheService.done();
696                        bitsShortcutService.done();
697                        bitsMetaCapture.done();
698                        bitsPubmedCentralService.done();
699                        bitsScrapPartyAddonService.done(aEvent);
700                        try{
701                                if(!bitsHyperAnchor || bitsHyperAnchor.clickLinkIcon == undefined) bitsHyperAnchorDummy.done(aEvent);
702                        }catch(ex2){
703                                bitsHyperAnchorDummy.done(aEvent);
704                        }
705                }
706                for(var i=0;i<this._removefile.length;i++){
707                        if(this._removefile[i].exists()) this._removefile[i].remove(true);
708                }
709        },
710
711/////////////////////////////////////////////////////////////////////
712        load : function(event){
713                var aEvent = event;
714                bitsScrapPartyAddonService.eventListener(aEvent,0);
715                var rtn = bitsMarkingCollection.marking(aEvent.target);
716                bitsScrapPartyAddonService.eventListener(aEvent,1);
717        },
718
719/////////////////////////////////////////////////////////////////////
720        marking : function(aDoc, aContentURLString){
721                var url;
722               
723                if(aContentURLString){
724                        url = aContentURLString;
725                }else{
726                        url = this.Common.getURLStringFromDocument(aDoc);
727                }
728               
729                if(url.indexOf("chrome:") >= 0 || url.indexOf("about:") >= 0) return;
730                if(bitsObjectMng.getBrowser().contentDocument.location == aDoc.location) bitsMarkingCollection._location = aDoc.location;
731//this._dump("marking():url=["+url+"]");
732                //alert('marking: '+url+' aDoc '+aDoc.location);
733                var rtnObj = bitsMarkingCollection.Database.getAllObjectFormContentURL(url);
734                if(rtnObj){
735                        if(this._markingtimer) clearTimeout(this._markingtimer);
736                        this._markingtimer = null;
737                        this.endProgessmeter();
738                        if(rtnObj.length>0) rtnObj.sort(function(a,b){return parseInt(a.oid)-parseInt(b.oid);});
739                        if(rtnObj.length>=100){
740                                this.initProgressmeter();
741                                var self = this;
742                                this._markingtimer = setTimeout(function(){ self.marking_proc(aDoc,rtnObj,0,aContentURLString); },0);
743                        }else{
744                                var cnt;
745this._dump("marking():rtnObj=["+rtnObj.length+"]");
746                                for(cnt=0;cnt<rtnObj.length;cnt++){
747                                        var rObj = rtnObj[cnt];
748                                        if(rObj.oid_type.match(/^image\/(.+)$/)) continue;
749                                        if(!aDoc.defaultView) return;
750                                        var style;
751                                        if(rObj.pfid == "0" && rObj.dbtype == bitsMarkingCollection._uncategorized.dbtype){
752                                                style = bitsMarkingCollection._uncategorized.style;
753                                        }else{
754                                                style = rObj.fid_style;
755                                        }
756                                        var rtnContent = bitsMarker.xPathMarker(
757                                                aDoc,
758                                                {
759                                                        start   : rObj.bgn_dom,
760                                                        end     : rObj.end_dom,
761                                                        context : rObj.oid_txt,
762                                                        con_url : (aContentURLString ? this.Common.getURLStringFromDocument(aDoc) : rObj.con_url)
763                                                },
764                                                {
765                                                        id     : rObj.oid,
766                                                        dbtype : rObj.dbtype,
767                                                        pfid   : rObj.pfid,
768                                                        style  : style
769                                                }
770                                        );
771                                        if(rtnContent){
772                                                for(var key in rtnContent){
773                                                        this._dump("marking():rtnContent["+key+"]=["+rtnContent[key]+"]");
774                                                }
775                                        }else{
776this._dump("marking():rtnContent=["+rtnContent+"]");
777                                        }
778                                }
779                        }
780                }
781                return true;
782        },
783
784/////////////////////////////////////////////////////////////////////
785        marking_proc : function(aDoc,aArr,aIndex,aContentURLString){
786                if(aIndex>=aArr.length || !this._markingtimer){
787                        this.endProgessmeter();
788                        return;
789                }
790                var endNum = aIndex+20;
791                for(;aIndex<aArr.length && aIndex<endNum;aIndex++){
792                        var rObj = aArr[aIndex];
793                        if(rObj.oid_type.match(/^image\/(.+)$/)) continue;
794                        if(!aDoc.defaultView) return;
795                        var style;
796                        if(rObj.pfid == "0" && rObj.dbtype == bitsMarkingCollection._uncategorized.dbtype){
797                                style = bitsMarkingCollection._uncategorized.style;
798                        }else{
799                                style = rObj.fid_style;
800                        }
801                        var rtnContent = bitsMarker.xPathMarker(
802                                        aDoc,
803                                        {
804                                                start   : rObj.bgn_dom,
805                                                end     : rObj.end_dom,
806                                                context : rObj.oid_txt,
807                                                con_url : (aContentURLString ? this.Common.getURLStringFromDocument(aDoc) : rObj.con_url)
808                                        },
809                                        {
810                                                id     : rObj.oid,
811                                                dbtype : rObj.dbtype,
812                                                pfid   : rObj.pfid,
813                                                style  : style
814                                        }
815                                );
816                }
817                var self = this;
818                this._markingtimer = setTimeout(function(){ self.marking_proc(aDoc,aArr,aIndex,aContentURLString); },0);
819                this.execProgressmeter(parseInt((aIndex/aArr.length)*100));
820        },
821
822/////////////////////////////////////////////////////////////////////
823        unload : function(event){
824                bitsScrapPartyAddonService.eventListener(event,1);
825        },
826
827/////////////////////////////////////////////////////////////////////
828        select : function(event){
829                bitsScrapPartyAddonService.eventListener(event,1);
830        },
831
832/////////////////////////////////////////////////////////////////////
833        openPrefWindow : function(){
834                var self = this;
835                setTimeout(function(){
836                        var lastModifiedTime = 0;
837                        var xmlfile = self.Common.getExtensionDir().clone();
838                        xmlfile.append("db.xml");
839                        if(xmlfile.exists()) lastModifiedTime = xmlfile.lastModifiedTime;
840                        var uncategorized_use = nsPreferences.getBoolPref("wiredmarker.uncategorized.use", true);
841                        var result = {};
842                        window.openDialog(
843                                "chrome://markingcollection/content/settingDialog.xul", "AllMarker:Setting",
844                                "chrome,titlebar,toolbar,centerscreen,modal",result
845                        );
846                        if(result.reboot){
847                                if(self.Common.confirm(self.STRING.getString("CONFIRM_SETTING_CHANGE_RESTART_APP"))){
848                                        self.reboot();
849                                        return;
850                                }
851                        }
852                        self.dbinfo.init(true);
853                        bitsContextMenu.rebuildCSS();
854                        //ファむルが曎新されおいるので衚瀺内容を曎新する。
855                        if((xmlfile.exists() && lastModifiedTime != xmlfile.lastModifiedTime) || (uncategorized_use != nsPreferences.getBoolPref("wiredmarker.uncategorized.use", true))){
856                                var contentWindow = null;
857                                var mcTreeViewModeService = null;
858                                var bitsTreeDate = null;
859                                if(self._contentWindow) contentWindow = self._contentWindow;
860                                if(contentWindow && contentWindow.mcTreeViewModeService) mcTreeViewModeService = contentWindow.mcTreeViewModeService;
861                                if(contentWindow && contentWindow.bitsTreeDate) bitsTreeDate = contentWindow.bitsTreeDate;
862                                if(mcTreeViewModeService) mcTreeViewModeService.rebuild();
863                                if(bitsTreeDate) bitsTreeDate.refresh();
864                        }
865                        xmlfile = undefined;
866                },100); //onpopuphidingむベントが発生するたで100ms必芁
867        },
868
869/////////////////////////////////////////////////////////////////////
870        reboot : function(){
871                var os = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
872                var cancelQuit = Components.classes["@mozilla.org/supports-PRBool;1"].createInstance(Components.interfaces.nsISupportsPRBool);
873                os.notifyObservers(cancelQuit, "quit-application-requested", "restart");
874                if (cancelQuit.data) return;
875                var nsIAppStartup = Components.interfaces.nsIAppStartup;
876                Components.classes["@mozilla.org/toolkit/app-startup;1"].getService(nsIAppStartup).quit(nsIAppStartup.eRestart | nsIAppStartup.eAttemptQuit);
877        },
878
879/////////////////////////////////////////////////////////////////////
880        reOrder : function(aParRes){
881                try{
882                        var dbtype;
883                        var pfid_order = 1;
884                        var pfid = this.DataSource.getProperty(aParRes,"id");
885                        var listContRes = this.DataSource.seqResources(aParRes);
886                        var i;
887                        for(i=0;i<listContRes.length;i++){
888                                var dbitem = {};
889                                dbitem.pfid = pfid;
890                                dbitem.pfid_order = pfid_order;
891                                if(this.DataSource.isContainer(listContRes[i])){
892                                        dbitem.fid = this.DataSource.getProperty(listContRes[i],"id");
893                                        dbtype = this.DataSource.getProperty(listContRes[i],"dbtype");
894                                        var changed = this.Database.updateFolder(dbitem,dbtype);
895                                }else{
896                                        dbitem.oid = this.DataSource.getProperty(listContRes[i],"id");
897                                        dbtype = this.DataSource.getProperty(listContRes[i],"dbtype");
898                                        var changed = this.Database.updateObject(dbitem,dbtype);
899                                }
900                                pfid_order++;
901                        }
902                }catch(ex){
903                }
904        },
905
906/////////////////////////////////////////////////////////////////////
907        addPDFText : function(aParName, aIdx, aRow, aXferString, aRebuild, aIsCacheConfirm){
908                var MIMEType = "application/pdf";
909                var PrimaryExtension = "pdf";
910                if(this.gBrowser.contentDocument.contentType != MIMEType) return undefined;
911                try{
912                        if(aRebuild == undefined) aRebuild = true;
913                        if(aIsCacheConfirm == undefined) aIsCacheConfirm = true;
914                        var rtn = false;
915                        var url = this.Common.getURLStringFromDocument(this.gBrowser.contentDocument);
916                        var url_title = aXferString;
917                        var comment_url = url;
918                        var doc_url = url;
919                        var con_url = url;
920                        if(aIsCacheConfirm && !bitsAutocacheService.isMarking(doc_url)) return true;
921                        var stXPath = null;
922                        var enXPath = null;
923                        var hyperAnchor = null;
924                        var rtnNewRes = [];
925                        var parentID  = 0;
926                        var style = "";
927                        var dbtype = "";
928                        if(typeof aParName == "string"){
929                                var aRes = this.Common.RDF.GetResource(aParName);
930                                style = this.DataSource.getProperty(aRes,"style");
931                                dbtype = this.DataSource.getProperty(aRes,"dbtype");
932                                if(aParName != this.DataSource.ABOUT_ROOT) parentID = this.DataSource.getProperty(aRes,"id");
933                        }else{
934                                parentID = aParName.fid;
935                                style = aParName.fid_style;
936                                dbtype = aParName.dbtype;
937                        }
938                        var pfid_order = this.Database.getMaxOrderFormPID(parentID);
939                        url_title = url_title.replace(/^\s+/mg,"").replace(/\s+$/mg,"");
940                        var rObj = this.Database.newObject(undefined,dbtype);
941                        if(rObj){
942                                rObj.pfid = parentID;
943                                rObj.doc_url = bitsAutocacheService.convertCacheURLToOriginalURL(doc_url);
944                                rObj.doc_title = this.gBrowser.contentDocument.title?this.gBrowser.contentDocument.title:rObj.doc_url;
945                                if(bitsAutocacheService.isCacheURL(doc_url)){
946                                        var info = bitsAutocacheService.getSaveCacheInfo(doc_url);
947                                        if(info && info.TITLE) rObj.doc_title = info.TITLE;
948                                }
949                                rObj.con_url = bitsAutocacheService.convertCacheURLToOriginalURL(con_url);
950                                if(stXPath && enXPath){
951                                        rObj.bgn_dom = stXPath.xpath + "("+stXPath.offset+")" + "("+stXPath.type+")";
952                                        rObj.end_dom = enXPath.xpath + "("+enXPath.offset+")" + "("+enXPath.type+")";
953                                }
954                                rObj.oid_title = url_title;
955                                if(rObj.oid_title == "") rObj.oid_title = decodeURIComponent(this.Common.getFileName(url));
956                                if(rObj.oid_title == "") rObj.oid_title = decodeURIComponent(url);
957                                rObj.oid_type = MIMEType;
958                                rObj.oid_property = "";
959
960                                var parser = new DOMParser();
961                                var xmldoc = parser.parseFromString("<PROPERTY/>","text/xml");
962                                if(xmldoc){
963                                        if(xmldoc.documentElement){
964                                                var icon = "";
965                                                try{
966                                                        var pext = this.Common.MIME.getPrimaryExtension(MIMEType,PrimaryExtension)
967                                                        icon = "d."+pext;
968                                                }catch(e){
969                                                        icon = "d.pdf";
970                                                }
971                                                var xmlnode = xmldoc.createElement("ICON");
972                                                if(xmlnode){
973                                                        xmlnode.appendChild(xmldoc.createTextNode("moz-icon://"+icon+"?size=16"));
974                                                        xmldoc.documentElement.appendChild(xmlnode);
975                                                }
976                                                var s = new XMLSerializer();
977                                                rObj.oid_property = s.serializeToString(xmldoc);
978                                                s = undefined;
979                                        }
980                                }
981                                parser = undefined;
982                                xmldoc = undefined;
983
984                                rObj.oid_mode = "0";
985                                rObj.oid_title = this.Common.exceptCode(aXferString.replace(/[\r\n\t]+/mg," ").replace(/\s{2,}/mg," "));
986                                rObj.oid_txt = this.Common.exceptCode(aXferString.replace(/\s+$/mg,"").replace(/^\s+/mg,""));
987                                rObj.oid_date = bitsAutocacheService.getURLTimeStampFormatDate(doc_url);
988                                rObj.pfid_order = ++pfid_order;
989                        }
990
991                        if(rObj){
992                                var rtnObj = bitsPubmedCentralService.getPubmedInfoSync(rObj);
993                                rObj = this.setInitMarkerData(rtnObj?rtnObj:rObj,false);
994                                var result = {
995                                        con_url   : rObj.con_url,
996                                        title     : rObj.oid_title,
997                                        property  : rObj.oid_property,
998                                        doc_title : rObj.doc_title
999                                };
1000                                window.openDialog("chrome://markingcollection/content/confirmAddTextDialog.xul", "", "chrome,centerscreen,modal", result);
1001                                if(!result.accept) return true;
1002                                rObj.oid_title = result.title;
1003                                rObj.doc_title = result.doc_title;
1004                                rObj.oid_property = result.property;
1005                        }
1006                        if(rObj){
1007                                var rtn = this.Database.addObject(rObj,dbtype);
1008                                if(rtn){
1009                                        rObj = this.Database.getObject({oid:rObj.oid,pfid:rObj.pfid},dbtype)[0];
1010                                }else{
1011                                        rObj = undefined;
1012                                }
1013                        }
1014                        if(rObj){
1015                                bitsAutocacheService.createCache(rObj.doc_url,undefined,aRebuild);
1016                                var newDCitem = this.Database.makeObjectToItem(rObj);
1017                                if(url.indexOf("file://") == 0){
1018                                        newDCitem.title = rObj.oid_title;
1019                                }else{
1020                                        newDCitem.icon = this.Database.getFavicon(rObj.doc_url,dbtype);
1021                                }
1022                                var rtnContent = null;
1023                                if(rtnContent && rtnContent.length && rtnContent.length>0) newDCitem.source = rtnContent[0].id;
1024                                var newRes = null;
1025                                if(typeof aParName != "string"){
1026                                        var f_pfid = undefined;
1027                                        var rtnFolder = this.Database.getFolder({fid:parentID},dbtype);
1028                                        if(rtnFolder && rtnFolder.length) f_pfid = rtnFolder[0].pfid;
1029                                        rtnFolder = undefined;
1030                                        aParName = bitsObjectMng.DataSource.getID2About(parentID,f_pfid,dbtype);
1031                                }
1032                                var contentWindow = null;
1033                                var mcTreeHandler = null;
1034                                var bitsItemView = null;
1035                                var bitsTreeDate = null;
1036                                if(this._contentWindow) contentWindow = this._contentWindow;
1037                                if(contentWindow && contentWindow.mcTreeHandler) mcTreeHandler = contentWindow.mcTreeHandler;
1038                                if(contentWindow && contentWindow.bitsItemView) bitsItemView = contentWindow.bitsItemView;
1039                                if(contentWindow && contentWindow.bitsTreeDate) bitsTreeDate = contentWindow.bitsTreeDate;
1040                                if(!bitsItemView || !bitsItemView.isChecked){
1041                                        if(rtn) newRes = this.DataSource.addItem(newDCitem, aParName, aIdx, dbtype);
1042                                        if(newRes){
1043                                                this.DataSource.flush();
1044                                                //远加したObjectにフォヌカスを移す
1045                                                var mcPropertyView = null;
1046                                                if(contentWindow && contentWindow.mcPropertyView) mcPropertyView = contentWindow.mcPropertyView;
1047                                                if(mcTreeHandler){
1048                                                        var folderautoopen = nsPreferences.getBoolPref("wiredmarker.folderautoopen", true);
1049                                                        if(!folderautoopen){
1050                                                                var parentRes = this.DataSource.findParentResource(newRes);
1051                                                                var parentIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(parentRes);
1052                                                                if(parentIdx>=0) folderautoopen = mcTreeHandler.TREE.view.isContainerOpen(parentIdx);
1053                                                        }
1054                                                        if(folderautoopen){
1055                                                                var resArr = [];
1056                                                                var parentRes = newRes;
1057                                                                do{
1058                                                                        parentRes = this.DataSource.findParentResource(parentRes);
1059                                                                        if(parentRes) resArr.push(parentRes);
1060                                                                }while(parentRes && parentRes.Value != this.DataSource.ABOUT_ROOT);
1061                                                                var i;
1062                                                                for(i=resArr.length-1;i>=0;i--){
1063                                                                        var selectIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(resArr[i]);
1064                                                                        if(selectIdx>=0 && !mcTreeHandler.TREE.view.isContainerOpen(selectIdx)) mcTreeHandler.TREE.view.toggleOpenState(selectIdx);
1065                                                                }
1066                                                                var selectIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(newRes);
1067                                                                if(selectIdx>=0){
1068                                                                        mcTreeHandler.TREE.currentIndex = selectIdx;
1069                                                                        if(!mcTreeHandler.TREE.view.selection.isSelected(mcTreeHandler.TREE.currentIndex)) mcTreeHandler.TREE.view.selection.select(mcTreeHandler.TREE.currentIndex);
1070                                                                        mcTreeHandler.TREE.focus();
1071                                                                        mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(selectIdx);
1072                                                                        if(mcPropertyView) mcPropertyView.dispProperty(mcTreeHandler.object);
1073                                                                }
1074                                                        }
1075                                                }
1076                                                rtnNewRes.push(newRes);
1077                                        }
1078                                }else if(bitsItemView && bitsItemView.isChecked){
1079                                        if(mcTreeHandler){
1080                                                var resArr = [];
1081                                                var parentRes = this.Common.RDF.GetResource(aParName);
1082                                                do{
1083                                                        parentRes = this.DataSource.findParentResource(parentRes);
1084                                                        if(parentRes) resArr.push(parentRes);
1085                                                }while(parentRes && parentRes.Value != this.DataSource.ABOUT_ROOT);
1086                                                var i;
1087                                                for(i=resArr.length-1;i>=0;i--){
1088                                                        var selectIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(resArr[i]);
1089                                                        if(selectIdx>=0 && !mcTreeHandler.TREE.view.isContainerOpen(selectIdx)) mcTreeHandler.TREE.view.toggleOpenState(selectIdx);
1090                                                }
1091                                                var selectIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(this.Common.RDF.GetResource(aParName));
1092                                                if(selectIdx>=0){
1093                                                        mcTreeHandler.TREE.currentIndex = selectIdx;
1094                                                        if(!mcTreeHandler.TREE.view.selection.isSelected(mcTreeHandler.TREE.currentIndex)) mcTreeHandler.TREE.view.selection.select(mcTreeHandler.TREE.currentIndex);
1095                                                        mcTreeHandler.TREE.focus();
1096                                                        mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(selectIdx);
1097                                                        if(mcPropertyView) mcPropertyView.dispProperty(mcTreeHandler.object);
1098                                                }
1099                                        }
1100                                        try{
1101                                                if(aRebuild && bitsItemView){
1102                                                        if(bitsTreeDate && bitsTreeDate.isChecked){
1103                                                                var param = {dbtype:dbtype};
1104                                                                for(var key in rObj){
1105                                                                        param[key] = rObj[key];
1106                                                                }
1107                                                                bitsTreeDate.onSelectTab(param);
1108                                                        }else{
1109                                                                var aRes = this.Common.RDF.GetResource(aParName);
1110                                                                var viewmode = this._contentWindow.mcTreeViewModeService.viewmode;
1111                                                                var fid = this.DataSource.getProperty(aRes, "id");
1112                                                                var dbtype = this.DataSource.getProperty(aRes, "dbtype");
1113                                                                var oid = rObj.oid;
1114                                                                bitsItemView.onTreeClick({viewmode:viewmode,fid:fid,dbtype:dbtype,res:aRes});
1115                                                                bitsItemView.setSelection(oid,dbtype);
1116                                                                setTimeout(function(){ bitsItemView.setSelection(oid,dbtype); },500);
1117                                                        }
1118                                                }
1119                                        }catch(ex){ bitsMarkingCollection._dump("bitsMarkingCollection.addURLText():"+ex); }
1120                                }
1121                                var param = {
1122                                        id      : rObj.oid,
1123                                        dbtype  : dbtype,
1124                                        rebuild : aRebuild,
1125                                };
1126                                if(bitsItemView && !bitsItemView.isChecked){
1127                                        if(newRes) param.res = newRes;
1128                                }else if(bitsItemView){
1129                                        param.res = this.Common.RDF.GetResource(aParName);
1130                                }
1131                                if(url.indexOf("http://") == 0 || url.indexOf("https://") == 0 || url.indexOf("ftp://") == 0){
1132                                        this.getContentTypeFromURL(this.gBrowser.contentDocument, url, param);
1133                                }else if(url.indexOf("file://") == 0){
1134                                        this._oID = rObj.oid;
1135                                        this._dbtype = dbtype;
1136                                        this.BROWSER.addEventListener("pageshow", bitsMarkingCollection.loadFile, true);
1137                                        this.BROWSER.loadURI(url);
1138                                }
1139                                rObj = undefined;
1140                                newDCitem = undefined;
1141                                rtn = true;
1142                        }
1143                }catch(ex){
1144                        bitsMarkingCollection._dump("bitsMarkingCollection.addPDFText():"+ex);
1145                }
1146                if(rtn)
1147                        return rtn;
1148                else
1149                        return undefined;
1150        },
1151
1152/////////////////////////////////////////////////////////////////////
1153        addURLText : function(aParName, aIdx, aRow, aXferString, aOriginalTarget, aRebuild, aIsCacheConfirm){
1154                try{
1155                        if(aRebuild == undefined) aRebuild = true;
1156                        if(aIsCacheConfirm == undefined) aIsCacheConfirm = true;
1157                        var rtn = false;
1158                        var url = aXferString.split("\n")[0];
1159                        var url_title = aXferString.split("\n")[1];
1160                        if(!url_title || url == url_title) url_title = "";
1161                        var comment_url = url;
1162                        var doc_url = url;
1163                        var con_url = url;
1164                        var doc_url_hash = "";
1165                        if(aOriginalTarget){
1166                                doc_url = this.Common.getURLStringFromDocument(this.gBrowser.contentDocument);
1167                                doc_url_hash = this.Common.getURLHashStringFromDocument(this.gBrowser.contentDocument);
1168                                if(aIsCacheConfirm && !bitsAutocacheService.isMarking(doc_url)) return undefined;
1169                        }
1170                        var stXPath = null;
1171                        var enXPath = null;
1172                        var hyperAnchor = null;
1173                        var rtnNewRes = [];
1174                        var parentID  = 0;
1175                        var style = "";
1176                        var dbtype = "";
1177                        if(typeof aParName == "string"){
1178                                var aRes = this.Common.RDF.GetResource(aParName);
1179                                style = this.DataSource.getProperty(aRes,"style");
1180                                dbtype = this.DataSource.getProperty(aRes,"dbtype");
1181                                if(aParName != this.DataSource.ABOUT_ROOT) parentID = this.DataSource.getProperty(aRes,"id");
1182                        }else{
1183                                parentID = aParName.fid;
1184                                style = aParName.fid_style;
1185                                dbtype = aParName.dbtype;
1186                        }
1187                        var pfid_order = this.Database.getMaxOrderFormPID(parentID);
1188                        if(aOriginalTarget && (aOriginalTarget.nodeName == "IMG" || aOriginalTarget.nodeName == "A")){
1189                                if(aOriginalTarget.nodeName == "IMG"){
1190                                        url = aOriginalTarget.src;
1191                                        if(aOriginalTarget.alt) url_title = aOriginalTarget.alt;
1192                                }
1193                                var doc = aOriginalTarget.ownerDocument;
1194                                var range = doc.createRange();
1195                                if(aOriginalTarget.nodeName == "IMG"){
1196                                        range.selectNodeContents(aOriginalTarget);
1197                                }else if(aOriginalTarget.nodeName == "A"){
1198                                        range.selectNodeContents(aOriginalTarget);
1199                                }
1200                                stXPath = this.XPath.getOffsetFromParentNode(range.startContainer,range.startOffset);
1201                                enXPath = this.XPath.getOffsetFromParentNode(range.endContainer,range.endOffset);
1202                                con_url = this.Common.getURLStringFromDocument(doc);
1203                                var attribute = "";
1204                                if (aOriginalTarget.nodeName == "IMG") {
1205                                        attribute = aOriginalTarget.getAttribute("src");
1206                                }else if (aOriginalTarget.nodeName == "A") {
1207                                        attribute = aOriginalTarget.getAttribute("href");
1208                                }
1209                                try{
1210                                        hyperAnchor = bitsHyperAnchor._getAnchorURL({node:range.startContainer,offset:range.startOffset,style:style,prefix:"b",contents:attribute},{node:range.endContainer,offset:range.endOffset,prefix:"e",contents:attribute});
1211                                }catch(ex3){
1212                                        try{
1213                                                hyperAnchor = bitsHyperAnchorDummy._getAnchorURL({node:range.startContainer,offset:range.startOffset,style:style,prefix:"b",contents:attribute},{node:range.endContainer,offset:range.endOffset,prefix:"e",contents:attribute});
1214                                        }catch(ex3){
1215                                                hyperAnchor = null;
1216                                        }
1217                                }
1218                                hyperAnchor = bitsAutocacheService.convertCacheURLToOriginalURL(hyperAnchor);
1219                        }
1220                        url_title = url_title.replace(/^\s+/mg,"").replace(/\s+$/mg,"");
1221                        var rObj = this.Database.newObject(undefined,dbtype);
1222                        if(rObj){
1223                                rObj.pfid = parentID;
1224                                rObj.doc_url = bitsAutocacheService.convertCacheURLToOriginalURL(doc_url);
1225                                rObj.doc_title = this.gBrowser.contentDocument.title?this.gBrowser.contentDocument.title:rObj.doc_url;
1226                                if(bitsAutocacheService.isCacheURL(doc_url)){
1227                                        var info = bitsAutocacheService.getSaveCacheInfo(doc_url);
1228                                        if(info && info.TITLE) rObj.doc_title = info.TITLE;
1229                                }
1230                                rObj.con_url = bitsAutocacheService.convertCacheURLToOriginalURL(con_url);
1231                                if(stXPath && enXPath){
1232                                        rObj.bgn_dom = stXPath.xpath + "("+stXPath.offset+")" + "("+stXPath.type+")";
1233                                        rObj.end_dom = enXPath.xpath + "("+enXPath.offset+")" + "("+enXPath.type+")";
1234                                }
1235                                rObj.oid_title = url_title;
1236                                if(rObj.oid_title == "") rObj.oid_title = decodeURIComponent(this.Common.getFileName(url));
1237                                if(rObj.oid_title == "") rObj.oid_title = decodeURIComponent(url);
1238                                rObj.oid_property = "";
1239                                var frame_name;
1240                                var frame_id;
1241                                if(doc_url != con_url){
1242                                        var win = this.gBrowser.contentWindow;
1243                                        if(win.frames != null){
1244                                                var i;
1245                                                for(i=0;i<win.frames.length;i++){
1246                                                        if(bitsAutocacheService.convertCacheURLToOriginalURL(this.Common.getURLStringFromDocument(win.frames[i].document)) != con_url) continue;
1247                                                        frame_name = win.frames[i].name;
1248                                                        frame_id = win.frames[i].id;
1249                                                        break;
1250                                                }
1251                                        }
1252                                }
1253                                if(url != comment_url || hyperAnchor || frame_name || frame_id || doc_url_hash){
1254                                        var parser = new DOMParser();
1255                                        var xmldoc = parser.parseFromString("<PROPERTY></PROPERTY>","text/xml");
1256                                        if(xmldoc){
1257                                                if(xmldoc.documentElement){
1258                                                        if(url != comment_url){
1259                                                                var xmlnode = xmldoc.createElement("LINK");
1260                                                                if(xmlnode){
1261                                                                        xmlnode.appendChild(xmldoc.createTextNode(comment_url));
1262                                                                        xmldoc.documentElement.appendChild(xmlnode);
1263                                                                }
1264                                                        }
1265                                                        if(frame_name){
1266                                                                var xmlnode = xmldoc.createElement("FRAME_NAME");
1267                                                                if(xmlnode){
1268                                                                        xmlnode.appendChild(xmldoc.createTextNode(frame_name));
1269                                                                        xmldoc.documentElement.appendChild(xmlnode);
1270                                                                }
1271                                                        }
1272                                                        if(frame_id){
1273                                                                var xmlnode = xmldoc.createElement("FRAME_ID");
1274                                                                if(xmlnode){
1275                                                                        xmlnode.appendChild(xmldoc.createTextNode(frame_id));
1276                                                                        xmldoc.documentElement.appendChild(xmlnode);
1277                                                                }
1278                                                        }
1279                                                        if(hyperAnchor){
1280                                                                var xmlnode = xmldoc.createElement("HYPER_ANCHOR");
1281                                                                if(xmlnode){
1282                                                                        xmlnode.appendChild(xmldoc.createTextNode(hyperAnchor));
1283                                                                        xmldoc.documentElement.appendChild(xmlnode);
1284                                                                }
1285                                                        }
1286                                                        if(doc_url_hash){
1287                                                                var xmlnode = xmldoc.createElement("LOCATION_HASH");
1288                                                                if(xmlnode){
1289                                                                        xmlnode.appendChild(xmldoc.createTextNode(doc_url_hash));
1290                                                                        xmldoc.documentElement.appendChild(xmlnode);
1291                                                                }
1292                                                        }
1293                                                        var s = new XMLSerializer();
1294                                                        rObj.oid_property = s.serializeToString(xmldoc);
1295                                                        s = undefined;
1296                                                }
1297                                        }
1298                                        parser = undefined;
1299                                        xmldoc = undefined;
1300                                }
1301                                rObj.oid_mode = "0";
1302                                try{ rObj.oid_type = this.Common.MIME.getTypeFromURI(this.Common.convertURLToObject(url)); }catch(e){ rObj.oid_type=null; }
1303                                if(!rObj.oid_type) rObj.oid_type = "url";
1304                                rObj.oid_txt = bitsAutocacheService.convertCacheURLToOriginalURL(url);
1305                                rObj.oid_date = bitsAutocacheService.getURLTimeStampFormatDate(doc_url);
1306                                rObj.pfid_order = ++pfid_order;
1307                                if(aOriginalTarget && (aOriginalTarget.nodeName == "IMG" || aOriginalTarget.nodeName == "A")){
1308                                        rObj.oid_property = bitsMetaCapture.capture(this.gBrowser.contentDocument,rObj.oid_property);
1309                                }
1310                                rObj = this.setInitMarkerData(rObj);
1311                        }
1312                        if(rObj){
1313                                var rtn = this.Database.addObject(rObj,dbtype);
1314                                if(rtn){
1315                                        rObj = this.Database.getObject({oid:rObj.oid,pfid:rObj.pfid},dbtype)[0];
1316                                }else{
1317                                        rObj = undefined;
1318                                }
1319                        }
1320                        if(rObj){
1321                                bitsAutocacheService.createCache(rObj.doc_url,undefined,aRebuild);
1322                                var newDCitem = this.Database.makeObjectToItem(rObj);
1323                                if(url.indexOf("file://") == 0){
1324                                        newDCitem.title = rObj.oid_title;
1325                                }else{
1326                                        newDCitem.icon = this.Database.getFavicon(rObj.doc_url,dbtype);
1327                                }
1328                                var rtnContent = null;
1329                                if(stXPath && enXPath && (aOriginalTarget && aOriginalTarget.nodeName != "IMG")){
1330                                        rtnContent = bitsMarker.xPathMarker(
1331                                                stXPath.node.ownerDocument,
1332                                                {
1333                                                        start   : rObj.bgn_dom,
1334                                                        end     : rObj.end_dom,
1335                                                        context : rObj.oid_txt,
1336                                                        con_url : this.Common.getURLStringFromDocument(stXPath.node.ownerDocument)
1337                                                },
1338                                                {
1339                                                        id     : rObj.oid,
1340                                                        dbtype : dbtype,
1341                                                        style  : ""
1342                                                }
1343                                        );
1344                                }
1345                                if(rtnContent && rtnContent.length && rtnContent.length>0) newDCitem.source = rtnContent[0].id;
1346                                var newRes = null;
1347
1348                                if(typeof aParName != "string"){
1349                                        var f_pfid = undefined;
1350                                        var rtnFolder = this.Database.getFolder({fid:parentID},dbtype);
1351                                        if(rtnFolder && rtnFolder.length) f_pfid = rtnFolder[0].pfid;
1352                                        rtnFolder = undefined;
1353                                        aParName = this.DataSource.getID2About(parentID,f_pfid,dbtype);
1354                                }
1355                                var contentWindow = null;
1356                                var mcTreeHandler = null;
1357                                var bitsItemView = null;
1358                                var bitsTreeDate = null;
1359                                if(this._contentWindow) contentWindow = this._contentWindow;
1360                                if(contentWindow && contentWindow.mcTreeHandler) mcTreeHandler = contentWindow.mcTreeHandler;
1361                                if(contentWindow && contentWindow.bitsItemView) bitsItemView = contentWindow.bitsItemView;
1362                                if(contentWindow && contentWindow.bitsTreeDate) bitsTreeDate = contentWindow.bitsTreeDate;
1363                                if(!bitsItemView || !bitsItemView.isChecked){
1364                                        if(rtn) newRes = this.DataSource.addItem(newDCitem, aParName, aIdx, dbtype);
1365                                        if(newRes){
1366                                                this.DataSource.flush();
1367                                                //远加したObjectにフォヌカスを移す
1368                                                var mcPropertyView = null;
1369                                                if(contentWindow && contentWindow.mcPropertyView) mcPropertyView = contentWindow.mcPropertyView;
1370                                                if(mcTreeHandler){
1371                                                        var folderautoopen = nsPreferences.getBoolPref("wiredmarker.folderautoopen", true);
1372                                                        if(!folderautoopen){
1373                                                                var parentRes = this.DataSource.findParentResource(newRes);
1374                                                                var parentIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(parentRes);
1375                                                                if(parentIdx>=0) folderautoopen = mcTreeHandler.TREE.view.isContainerOpen(parentIdx);
1376                                                        }
1377                                                        if(folderautoopen){
1378                                                                var resArr = [];
1379                                                                var parentRes = newRes;
1380                                                                do{
1381                                                                        parentRes = this.DataSource.findParentResource(parentRes);
1382                                                                        if(parentRes) resArr.push(parentRes);
1383                                                                }while(parentRes && parentRes.Value != this.DataSource.ABOUT_ROOT);
1384                                                                var i;
1385                                                                for(i=resArr.length-1;i>=0;i--){
1386                                                                        var selectIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(resArr[i]);
1387                                                                        if(selectIdx>=0 && !mcTreeHandler.TREE.view.isContainerOpen(selectIdx)) mcTreeHandler.TREE.view.toggleOpenState(selectIdx);
1388                                                                }
1389                                                                var selectIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(newRes);
1390                                                                if(selectIdx>=0){
1391                                                                        mcTreeHandler.TREE.currentIndex = selectIdx;
1392                                                                        if(!mcTreeHandler.TREE.view.selection.isSelected(mcTreeHandler.TREE.currentIndex)) mcTreeHandler.TREE.view.selection.select(mcTreeHandler.TREE.currentIndex);
1393                                                                        mcTreeHandler.TREE.focus();
1394                                                                        mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(selectIdx);
1395                                                                        if(mcPropertyView) mcPropertyView.dispProperty(mcTreeHandler.object);
1396                                                                }
1397                                                        }
1398                                                }
1399                                                rtnNewRes.push(newRes);
1400                                        }
1401                                }else if(bitsItemView && bitsItemView.isChecked){
1402                                        if(mcTreeHandler){
1403                                                var resArr = [];
1404                                                var parentRes = this.Common.RDF.GetResource(aParName);
1405                                                do{
1406                                                        parentRes = this.DataSource.findParentResource(parentRes);
1407                                                        if(parentRes) resArr.push(parentRes);
1408                                                }while(parentRes && parentRes.Value != this.DataSource.ABOUT_ROOT);
1409                                                var i;
1410                                                for(i=resArr.length-1;i>=0;i--){
1411                                                        var selectIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(resArr[i]);
1412                                                        if(selectIdx>=0 && !mcTreeHandler.TREE.view.isContainerOpen(selectIdx)) mcTreeHandler.TREE.view.toggleOpenState(selectIdx);
1413                                                }
1414                                                var selectIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(this.Common.RDF.GetResource(aParName));
1415                                                if(selectIdx>=0){
1416                                                        mcTreeHandler.TREE.currentIndex = selectIdx;
1417                                                        if(!mcTreeHandler.TREE.view.selection.isSelected(mcTreeHandler.TREE.currentIndex)) mcTreeHandler.TREE.view.selection.select(mcTreeHandler.TREE.currentIndex);
1418                                                        mcTreeHandler.TREE.focus();
1419                                                        mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(selectIdx);
1420                                                        if(mcPropertyView) mcPropertyView.dispProperty(mcTreeHandler.object);
1421                                                }
1422                                        }
1423                                        try{
1424                                                if(aRebuild && bitsItemView){
1425                                                        if(bitsTreeDate && bitsTreeDate.isChecked){
1426                                                                var param = {dbtype:dbtype};
1427                                                                for(var key in rObj){
1428                                                                        param[key] = rObj[key];
1429                                                                }
1430                                                                bitsTreeDate.onSelectTab(param);
1431                                                        }else{
1432                                                                var aRes = this.Common.RDF.GetResource(aParName);
1433                                                                var viewmode = this._contentWindow.mcTreeViewModeService.viewmode;
1434                                                                var fid = this.DataSource.getProperty(aRes, "id");
1435                                                                var dbtype = this.DataSource.getProperty(aRes, "dbtype");
1436                                                                var oid = rObj.oid;
1437                                                                bitsItemView.onTreeClick({viewmode:viewmode,fid:fid,dbtype:dbtype,res:aRes});
1438                                                                bitsItemView.setSelection(oid,dbtype);
1439                                                                setTimeout(function(){ bitsItemView.setSelection(oid,dbtype); },500);
1440                                                        }
1441                                                }
1442                                        }catch(ex){ bitsMarkingCollection._dump("bitsMarkingCollection.addURLText():"+ex); }
1443                                }
1444                                var param = {
1445                                        id      : rObj.oid,
1446                                        dbtype  : dbtype,
1447                                        rebuild : aRebuild,
1448                                };
1449                                if(bitsItemView && !bitsItemView.isChecked){
1450                                        if(newRes) param.res = newRes;
1451                                }else if(bitsItemView){
1452                                        param.res = this.Common.RDF.GetResource(aParName);
1453                                }
1454                                if(aOriginalTarget && (url.indexOf("http://") == 0 || url.indexOf("https://") == 0 || url.indexOf("ftp://") == 0)){
1455                                        this.getContentTypeFromURL(aOriginalTarget.ownerDocument, url, param);
1456                                }else if(url.indexOf("file://") == 0){
1457                                        this._oID = rObj.oid;
1458                                        this._dbtype = dbtype;
1459                                        this.BROWSER.addEventListener("pageshow", bitsMarkingCollection.loadFile, true);
1460                                        this.BROWSER.loadURI(url);
1461                                }
1462                                if(aOriginalTarget && aOriginalTarget.nodeName != "IMG" && aOriginalTarget.blur) aOriginalTarget.blur();
1463                                var tempObj = {dbtype : dbtype};
1464                                for(var key in rObj){
1465                                        tempObj[key] = rObj[key];
1466                                }
1467                                bitsPubmedCentralService.getPubmedInfo(tempObj);
1468                                rObj = undefined;
1469                                newDCitem = undefined;
1470                                rtn = true;
1471                        }
1472                }catch(ex){
1473                        bitsMarkingCollection._dump("bitsMarkingCollection.addURLText():"+ex);
1474                }
1475                if(rtnNewRes.length>0)
1476                        return rtnNewRes;
1477                else
1478                        return undefined;
1479        },
1480
1481/////////////////////////////////////////////////////////////////////
1482        _makeURI : function(aURL, aOriginCharset, aBaseURI){
1483                var ioService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
1484                return ioService.newURI(aURL, aOriginCharset, aBaseURI);
1485        },
1486
1487/////////////////////////////////////////////////////////////////////
1488        _getImageProperties : function(aDoc, aUrlString){
1489                if(!aDoc) return;
1490                if(!aUrlString || aUrlString == "") return undefined;
1491                var aSelf = this;
1492                if(!aUrlString.match(/^[a-z]{3,5}:\/\//)){
1493                        var docURI = aSelf._makeURI(aDoc.location.href, aDoc.characterSet);
1494                        aUrlString = aSelf.Common.resolveURL(docURI.spec, aUrlString);
1495                }
1496                if(!aUrlString.match(/^[a-z]{3,5}:\/\//)){
1497                        return undefined;
1498                }
1499                var imgURI = aSelf._makeURI(aUrlString, aDoc.characterSet);
1500                var contentType = null;
1501                var contentDisposition = null;
1502                try{
1503                        var imageCache = Components.classes["@mozilla.org/image/cache;1"].getService(Components.interfaces.imgICache);
1504                        var props = imageCache.findEntryProperties(imgURI);
1505                        if(props){
1506                                contentType = props.get("type", nsISupportsCString);
1507                                contentDisposition = props.get("content-disposition", nsISupportsCString);
1508                        }
1509                }catch(e){}
1510                return {
1511                        URI : imgURI,
1512                        contentType : contentType && contentType.type == contentType.TYPE_CSTRING ? contentType.data : null,
1513                        contentDisposition : contentDisposition && contentDisposition.type == contentDisposition.TYPE_CSTRING ? contentDisposition.data : null,
1514                };
1515        },
1516
1517/////////////////////////////////////////////////////////////////////
1518        getContentTypeFromURL : function(aDoc, aUrl, aParam, aAsync, aInfo){
1519                if(aAsync == undefined) aAsync = true;
1520                var uri = aUrl;
1521                var xmlhttp = null;
1522                var rtn = "";
1523                if(aParam && aParam.rebuild == undefined) aParam.rebuild = true;
1524                xmlhttp = new XMLHttpRequest();
1525                if(xmlhttp){
1526                        if(aAsync){
1527                                xmlhttp.onreadystatechange = function (){
1528                                        if(xmlhttp.readyState == 4){
1529                                                if(xmlhttp.status == 200){
1530                                                        var imgProp = bitsMarkingCollection._getImageProperties(aDoc, aUrl)
1531                                                        var contentType = imgProp.contentType;
1532                                                        var id = aParam.id;
1533                                                        var dbtype = aParam.dbtype;
1534                                                        var type = "url";
1535                                                        var ext = "txt";
1536                                                        if(contentType){
1537                                                                if(contentType.match(/^image\/(\S+)/)){
1538                                                                        type = "image";
1539                                                                        ext = RegExp.$1;
1540                                                                }else if(contentType.match(/^text\/(\S+)/)){
1541                                                                        ext = RegExp.$1;
1542                                                                        ext = ext.replace(/[^A-Za-z0-9]+$/mg,"");
1543                                                                }
1544                                                        }
1545                                                        var bytes = [];
1546                                                        var filestream = xmlhttp.responseText;
1547                                                        var i;
1548                                                        for(i=0; i<filestream.length;i++){
1549                                                                bytes[i] = filestream.charCodeAt(i) & 0xff;
1550                                                        }
1551                                                        if(type == "image"){
1552                                                                bitsMarkingCollection.Database.updateObject({oid:id,oid_type:contentType},dbtype);
1553                                                                bitsMarkingCollection.Database.updateObjectBLOB(id,bytes,dbtype);
1554                                                                if(aParam.res){
1555                                                                        var contentWindow = null;
1556                                                                        var bitsItemView = null;
1557                                                                        var bitsTreeDate = null;
1558                                                                        if(bitsMarkingCollection._contentWindow) contentWindow = bitsMarkingCollection._contentWindow;
1559                                                                        if(contentWindow && contentWindow.bitsItemView) bitsItemView = contentWindow.bitsItemView;
1560                                                                        if(contentWindow && contentWindow.bitsTreeDate) bitsTreeDate = contentWindow.bitsTreeDate;
1561                                                                        if(bitsItemView && !bitsItemView.isChecked){
1562                                                                                bitsMarkingCollection.DataSource.flush();
1563                                                                        }else{
1564                                                                                if(bitsTreeDate && bitsTreeDate.isChecked){
1565                                                                                        var idx = bitsTreeDate.TREE.currentIndex;
1566                                                                                        var rows = bitsTreeDate.getSelection();
1567                                                                                        if(rows && rows.length && rows[0]<bitsTreeDate.rowCount){
1568                                                                                                var row = {value:rows[0]};
1569                                                                                                var mcTreeViewModeService = bitsMarkingCollection._contentWindow.mcTreeViewModeService;
1570                                                                                                var viewmode = mcTreeViewModeService.viewmode;
1571                                                                                                var param = {
1572                                                                                                        viewmode : viewmode,
1573                                                                                                        dbtype   : bitsTreeDate.itemObjects[row.value].dbtype,
1574                                                                                                        where    : [],
1575                                                                                                };
1576                                                                                                if(bitsMarkingCollection._uncategorized.use){
1577                                                                                                        param.res = bitsMarkingCollection.Common.RDF.GetResource(bitsMarkingCollection.DataSource.getID2About("0",undefined,bitsMarkingCollection._uncategorized.dbtype));
1578                                                                                                }
1579                                                                                                if(bitsTreeDate.itemObjects && bitsTreeDate.itemObjects[row.value]){
1580                                                                                                        if(bitsTreeDate.itemObjects[row.value].date){
1581                                                                                                                param.where.push({
1582                                                                                                                        key : "substr(om_object.oid_date,7,4)",
1583                                                                                                                        val : bitsTreeDate.itemObjects[row.value].date.year
1584                                                                                                                });
1585                                                                                                                if(bitsTreeDate.itemObjects[row.value].date.month){
1586                                                                                                                        param.where.push({
1587                                                                                                                                key : "substr(om_object.oid_date,1,2)",
1588                                                                                                                                val : bitsTreeDate.itemObjects[row.value].date.month
1589                                                                                                                        });
1590                                                                                                                        if(bitsTreeDate.itemObjects[row.value].date.day){
1591                                                                                                                                param.where.push({
1592                                                                                                                                        key : "substr(om_object.oid_date,4,2)",
1593                                                                                                                                        val : bitsTreeDate.itemObjects[row.value].date.day
1594                                                                                                                                });
1595                                                                                                                        }
1596                                                                                                                }
1597                                                                                                        }
1598                                                                                                }
1599                                                                                                bitsItemView.onTreeDateClick(param);
1600                                                                                        }else{
1601                                                                                                bitsItemView.onTreeDateClick();
1602                                                                                        }
1603                                                                                }else{
1604                                                                                        try{
1605                                                                                                var mcTreeViewModeService = bitsMarkingCollection._contentWindow.mcTreeViewModeService;
1606                                                                                                var aRes = aParam.res;
1607                                                                                                var viewmode = mcTreeViewModeService.viewmode;
1608                                                                                                var fid = bitsMarkingCollection.DataSource.getProperty(aRes, "id");
1609                                                                                                var dbtype = bitsMarkingCollection.DataSource.getProperty(aRes, "dbtype");
1610                                                                                                if(aParam.rebuild && bitsItemView) bitsItemView.onTreeClick({viewmode:viewmode,fid:fid,dbtype:dbtype,res:aRes});
1611                                                                                        }catch(ex){}
1612                                                                                }
1613                                                                        }
1614                                                                }
1615                                                        }else{
1616                                                        }
1617                                                }else{
1618                                                }
1619                                        }else{
1620                                        }
1621                                };
1622                        }
1623                        xmlhttp.open("GET", uri , aAsync);
1624                        xmlhttp.overrideMimeType('text/plain; charset=x-user-defined');
1625                        xmlhttp.send(null);
1626                        if(!aAsync){
1627                                if(xmlhttp.status == 200){
1628                                        var imgProp = this._getImageProperties(aDoc, aUrl)
1629                                        aInfo.contentType = imgProp.contentType;
1630                                        if(aInfo.contentType.match(/^image\/(\S+)/)){
1631                                                var bytes = [];
1632                                                var filestream = xmlhttp.responseText;
1633                                                var i;
1634                                                for(i=0; i<filestream.length;i++){
1635                                                        bytes[i] = filestream.charCodeAt(i) & 0xff;
1636                                                }
1637                                                aInfo.bytes = bytes;
1638                                        }
1639                                }
1640                        }
1641                }
1642        },
1643
1644/////////////////////////////////////////////////////////////////////
1645        loadFile : function(aEvent) {
1646                var doc = bitsMarkingCollection.BROWSER.contentDocument;
1647                var contentType = doc.contentType;
1648                var type = "url";
1649                if(contentType.match(/^image\/(\S+)/)) type = "image";
1650                if(type == "image"){
1651                        try{
1652                                var istream = Components.classes['@mozilla.org/network/file-input-stream;1'].createInstance(Components.interfaces.nsIFileInputStream);
1653                                istream.init(bitsMarkingCollection.Common.convertURLToFile(bitsMarkingCollection.Common.getURLStringFromDocument(doc)), 1, 0, false);
1654                                var sstream = Components.classes['@mozilla.org/scriptableinputstream;1'].createInstance(Components.interfaces.nsIScriptableInputStream);
1655                                sstream.init(istream);
1656                                var bstream = Components.classes['@mozilla.org/binaryinputstream;1'].createInstance(Components.interfaces.nsIBinaryInputStream);
1657                                bstream.setInputStream(istream);
1658                                var len = sstream.available();
1659                                var bytes = bstream.readByteArray(len);
1660                                sstream.close();
1661                                istream.close();
1662                        }catch(ex){bitsMarkingCollection.Common.alert(ex);}
1663                        bitsMarkingCollection.Database.updateObject({oid:bitsMarkingCollection._oID,oid_type:contentType}, bitsMarkingCollection._dbtype);
1664                        bitsMarkingCollection.Database.updateObjectBLOB(bitsMarkingCollection._oID, bytes, bitsMarkingCollection._dbtype);
1665                }
1666                bitsMarkingCollection.BROWSER.removeEventListener("pageshow", bitsMarkingCollection.loadFile, true);
1667                bitsMarkingCollection.BROWSER.loadURI("about:blank");
1668        },
1669
1670/////////////////////////////////////////////////////////////////////
1671        addSelectedText : function(aParName, aIdx, aRow, aRebuild, aIsCacheConfirm){
1672                if(aRebuild == undefined) aRebuild = true;
1673                if(aIsCacheConfirm == undefined) aIsCacheConfirm = true;
1674                var targetWindow = this.Common.getFocusedWindow();
1675                var parentID  = 0;
1676                var style = "";
1677                var dbtype = "";
1678                if(typeof aParName == "string"){
1679                        var aRes = this.Common.RDF.GetResource(aParName);
1680                        style = this.DataSource.getProperty(aRes,"style");
1681                        dbtype = this.DataSource.getProperty(aRes,"dbtype");
1682                        if(aParName != this.DataSource.ABOUT_ROOT) parentID = this.DataSource.getProperty(aRes,"id");
1683                }else{
1684                        parentID = aParName.fid;
1685                        style = aParName.fid_style;
1686                        dbtype = aParName.dbtype;
1687                }
1688                var pfid_order = this.Database.getMaxOrderFormPID(parentID);
1689                var selection = targetWindow.getSelection();
1690                if(!selection) return undefined;
1691                var selectText = selection.toString();
1692                if(selectText == "") return undefined;
1693                var doc_url = this.Common.getURLStringFromDocument(this.gBrowser.contentDocument);
1694                if(aIsCacheConfirm && !bitsAutocacheService.isMarking(doc_url)) return undefined;
1695                var doc_url_hash = this.Common.getURLHashStringFromDocument(this.gBrowser.contentDocument);
1696                var selectimportimage = nsPreferences.copyUnicharPref("wiredmarker.selectimportimage","none");
1697                var rtnNewRes = [];
1698                var rtnNewObj = [];
1699                var r;
1700                var ranges = [];
1701                for(r=selection.rangeCount-1;r>=0;r--){
1702                        var range   = selection.getRangeAt(r);
1703                        var obj = {
1704                                startContainer : range.startContainer,
1705                                startOffset    : range.startOffset,
1706                                endContainer   : range.endContainer,
1707                                endOffset      : range.endOffset,
1708                                collapsed      : range.collapsed,
1709                                commonAncestorContainer : range.commonAncestorContainer
1710                        };
1711                        ranges.unshift(obj);
1712                }
1713                for(r=ranges.length-1;r>=0;r--){
1714                        var context = "";
1715                        var contextArray = [];
1716                        var range = this.gBrowser.contentDocument.createRange();
1717                        range.setStart(ranges[r].startContainer, ranges[r].startOffset);
1718                        range.setEnd(ranges[r].endContainer, ranges[r].endOffset);
1719                        if(selectimportimage == "none"){
1720                                context = range.toString();
1721                                contextArray.push(range.toString());
1722                        }else{
1723                                var nodeWalker = this.gBrowser.contentDocument.createTreeWalker(range.cloneContents(),NodeFilter.SHOW_ALL,null,false);
1724                                var txtNode; 
1725                                for(txtNode=nodeWalker.nextNode();txtNode;txtNode = nodeWalker.nextNode()){
1726                                        if(txtNode.nodeName == "#text"){
1727                                                context += txtNode.nodeValue;
1728                                                contextArray.push(txtNode.nodeValue);
1729                                        }else if(txtNode.nodeName == "IMG"){
1730                                                if(selectimportimage == "alt"){
1731                                                        contextArray.push(txtNode.alt);
1732                                                }else{
1733                                                        contextArray.push(bitsSubstitutionTree.getSubstitutionText(txtNode));
1734                                                }
1735                                        }
1736                                }
1737                        }
1738                        var startContainer = range.startContainer;
1739                        var startOffset = range.startOffset;
1740                        var endContainer = range.endContainer;
1741                        var endOffset = range.endOffset;
1742                        try{
1743                                var imgElems = [];
1744                                var tableElems = [];
1745                                var contentDocument = startContainer.ownerDocument;
1746                                var nodeWalker = contentDocument.createTreeWalker(range.cloneContents(),NodeFilter.SHOW_ELEMENT,null,false);
1747                                var elemNode=nodeWalker.nextNode();
1748                                for(;elemNode;elemNode = nodeWalker.nextNode()){
1749                                        if(elemNode.nodeName == "IMG"){
1750                                                imgElems.push(elemNode);
1751                                                continue;
1752                                        }
1753                                        if(elemNode.nodeName == "TABLE"){
1754                                                var border = elemNode.getAttribute("border");
1755                                                if(border == "" || border == "0") elemNode.setAttribute("border","1");
1756                                                tableElems.push(elemNode);
1757                                                continue;
1758                                        }
1759                                }
1760                                var structure = "";
1761                                if(
1762                                        range.commonAncestorContainer.nodeName == "TABLE" ||
1763                                        range.commonAncestorContainer.nodeName == "THEAD" ||
1764                                        range.commonAncestorContainer.nodeName == "TBODY" ||
1765                                        range.commonAncestorContainer.nodeName == "TFOOT" ||
1766                                        (tableElems && tableElems.length > 0)
1767                                ){
1768                                        var divNode = this.gBrowser.contentDocument.createElement("div");
1769                                        if(divNode){
1770                                                if(tableElems.length > 0){
1771                                                        divNode.appendChild(range.cloneContents());
1772                                                }else{
1773                                                        var tableNode = range.commonAncestorContainer;
1774                                                        if(range.commonAncestorContainer.nodeName != "TABLE") tableNode = tableNode.parentNode;
1775                                                        var parentNode = tableNode.cloneNode(false);
1776                                                        parentNode.appendChild(range.cloneContents());
1777                                                        divNode.appendChild(parentNode);
1778                                                }
1779                                                var elemImg = divNode.getElementsByTagName("IMG");
1780                                                if(elemImg && elemImg.length>0){
1781                                                        var imgcnt;
1782                                                        for(imgcnt=0;imgcnt<elemImg.length;imgcnt++){
1783                                                                if(!elemImg[imgcnt].src) continue;
1784                                                                elemImg[imgcnt].src = elemImg[imgcnt].src;
1785                                                                if(!(elemImg[imgcnt].src.match(/^http/) || elemImg[imgcnt].src.match(/^file/))) continue;
1786                                                                if(elemImg[imgcnt].src.indexOf("http://") == 0 || elemImg[imgcnt].src.indexOf("https://") == 0){
1787                                                                        var aInfo = {};
1788                                                                        if(!aInfo.contentType) this.getContentTypeFromURL(contentDocument, elemImg[imgcnt].src, undefined, false, aInfo);
1789                                                                        if(!aInfo.contentType || !aInfo.contentType.match(/^image\/(\S+)/)) continue;
1790                                                                        var images = String.fromCharCode.apply(String, aInfo.bytes);
1791                                                                        var image_b64 = btoa(images); // base64 encoding
1792                                                                        elemImg[imgcnt].src = 'data:' + aInfo.contentType + ';base64,' + image_b64;
1793                                                                }else if(elemImg[imgcnt].src.indexOf("file://") == 0){
1794                                                                        try{
1795                                                                                var file = bitsMarkingCollection.Common.convertURLToFile(elemImg[imgcnt].src);
1796                                                                                var ext = "???";
1797                                                                                var n;
1798                                                                                if((n = file.path.lastIndexOf(".")) != -1){
1799                                                                                        ext = file.path.substring(n+1);
1800                                                                                        if(!ext.match(/^[A-Za-z0-9]+$/)) ext = "???";
1801                                                                                }
1802                                                                                var istream = Components.classes['@mozilla.org/network/file-input-stream;1'].createInstance(Components.interfaces.nsIFileInputStream);
1803                                                                                istream.init(file, 1, 0, false);
1804                                                                                var sstream = Components.classes['@mozilla.org/scriptableinputstream;1'].createInstance(Components.interfaces.nsIScriptableInputStream);
1805                                                                                sstream.init(istream);
1806                                                                                var bstream = Components.classes['@mozilla.org/binaryinputstream;1'].createInstance(Components.interfaces.nsIBinaryInputStream);
1807                                                                                bstream.setInputStream(istream);
1808                                                                                var len = sstream.available();
1809                                                                                var bytes = bstream.readByteArray(len);
1810                                                                                var images = String.fromCharCode.apply(String, bytes);
1811                                                                                var image_b64 = btoa(images); // base64 encoding
1812                                                                                elemImg[imgcnt].src = 'data:image/'+ext+';base64,' + image_b64;
1813                                                                                sstream.close();
1814                                                                                istream.close();
1815                                                                        }catch(ex3){
1816                                                                                bitsMarkingCollection._dump("bitsMarkingCollection.addSelectedText():"+ex3);
1817                                                                        }
1818                                                                }
1819                                                        }
1820                                                }
1821                                                var removeTags = new Array("script","form","select","input","textarea");
1822                                                for(var tagCnt=0;tagCnt<removeTags.length;tagCnt++){
1823                                                        var elems = divNode.getElementsByTagName(removeTags[tagCnt]);
1824                                                        if(elems && elems.length>0){
1825                                                                var scrcnt;
1826                                                                for(scrcnt=elems.length-1;scrcnt>=0;scrcnt--){
1827                                                                        elems[scrcnt].parentNode.removeChild(elems[scrcnt]);
1828                                                                }
1829                                                        }
1830                                                }
1831                                                var styleHash = [];
1832                                                var styleSheets = contentDocument.styleSheets;
1833                                                if(styleSheets && styleSheets.length>0){
1834                                                        try{
1835                                                                var sheet_cnt;
1836                                                                var css_cnt;
1837                                                                var selector_cnt;
1838                                                                var selector_arr = [];
1839                                                                var selector;
1840                                                                var style_cnt;
1841                                                                var cssRules;
1842                                                                var cssRule;
1843                                                                for(sheet_cnt=0;sheet_cnt<styleSheets.length;sheet_cnt++){
1844                                                                        if(styleSheets[sheet_cnt].disabled) continue;
1845                                                                        cssRules = styleSheets[sheet_cnt].cssRules;
1846                                                                        if(cssRules && cssRules.length>0){
1847                                                                                for(css_cnt=0;css_cnt<cssRules.length;css_cnt++){
1848                                                                                        if(cssRules[css_cnt].type != cssRules[css_cnt].STYLE_RULE) continue;
1849                                                                                        cssRule = cssRules[css_cnt].style;
1850                                                                                        if(cssRule && cssRule.length>0){
1851                                                                                                selector_arr = cssRules[css_cnt].selectorText.split(",");
1852                                                                                                for(selector_cnt=0;selector_cnt<selector_arr.length;selector_cnt++){
1853                                                                                                        selector = selector_arr[selector_cnt].replace(/^\s*/mg,"").replace(/\s*$/mg,"");
1854                                                                                                        if(!styleHash[selector]) styleHash[selector] = "";
1855                                                                                                        for(style_cnt=0;style_cnt<cssRule.length;style_cnt++){
1856                                                                                                                styleHash[selector] += cssRule[style_cnt] + ":" + cssRule.getPropertyValue(cssRule[style_cnt]) + ";";
1857                                                                                                        }
1858                                                                                                }
1859                                                                                        }
1860                                                                                }
1861                                                                        }
1862                                                                }
1863                                                        }catch(ex3){
1864                                                                bitsMarkingCollection._dump("bitsMarkingCollection.addSelectedText():"+ex3);
1865                                                        }
1866                                                        var elems = divNode.getElementsByTagName("*");
1867                                                        if(elems && elems.length>0){
1868                                                                var nodeClass;
1869                                                                var nodeID;
1870                                                                var nodeName;
1871                                                                var nodeStyle;
1872                                                                var elem_cnt;
1873                                                                for(elem_cnt=0;elem_cnt<elems.length;elem_cnt++){
1874                                                                        nodeClass = elems[elem_cnt].getAttribute("class");
1875                                                                        nodeID = elems[elem_cnt].getAttribute("id");
1876                                                                        nodeStyle = elems[elem_cnt].getAttribute("style");
1877                                                                        if(!nodeStyle) nodeStyle = "";
1878                                                                        nodeName = elems[elem_cnt].nodeName.toLowerCase();
1879                                                                        if(nodeClass && nodeClass != ""){
1880                                                                                if(styleHash[nodeName+"."+nodeClass]){
1881                                                                                        nodeStyle += styleHash[nodeName+"."+nodeClass]+";";
1882                                                                                }else if(styleHash["."+nodeClass]){
1883                                                                                        nodeStyle += styleHash["."+nodeClass]+";";
1884                                                                                }
1885                                                                        }
1886                                                                        if(nodeID && nodeID != ""){
1887                                                                                if(styleHash[nodeName+"#"+nodeID]){
1888                                                                                        nodeStyle += styleHash[nodeName+"#"+nodeID]+";";
1889                                                                                }else if(styleHash["#"+nodeID]){
1890                                                                                        nodeStyle += styleHash["#"+nodeID]+";";
1891                                                                                }
1892                                                                        }
1893                                                                        if((!nodeClass || nodeClass == "") && (!nodeID || nodeID == "")){
1894                                                                                if(styleHash[nodeName]) nodeStyle += styleHash[nodeName]+";";
1895                                                                        }
1896                                                                        if(nodeName == "a"){
1897                                                                                if(elems[elem_cnt].href) elems[elem_cnt].href = elems[elem_cnt].href;
1898                                                                                if(styleHash["a:link"]) nodeStyle += styleHash[":link"]+";";
1899                                                                                if(styleHash["a:visited"]) nodeStyle += styleHash[":visited"]+";";
1900                                                                                if(styleHash["a:active"]) nodeStyle += styleHash[":active"]+";";
1901                                                                                if(styleHash["a:hover"]) nodeStyle += styleHash[":hover"]+";";
1902                                                                        }
1903                                                                        if(nodeStyle != "") elems[elem_cnt].setAttribute("style",nodeStyle);
1904                                                                }
1905                                                        }
1906                                                }
1907                                                try{
1908                                                        structure = bitsHTML2XHTMLService.get_xhtml(divNode);
1909                                                        structure = structure.replace(/&nbsp;/mg," ").replace(/[\r\n]+/mg,"\n").replace(/\s+?\n/mg,"\n").replace(/\n+/mg,"");
1910                                                }catch(ex3){
1911                                                        bitsMarkingCollection._dump("bitsMarkingCollection.addSelectedText():"+ex3);
1912                                                }
1913                                                parentNode = undefined;
1914                                        }
1915                                        divNode = undefined;
1916                                }
1917                                tableElems = undefined;
1918                        }catch(ex2){
1919                                bitsMarkingCollection._dump("bitsMarkingCollection.addSelectedText():"+ex2);
1920                        }
1921                        try{
1922                                if(startContainer.nodeType != startContainer.TEXT_NODE || endContainer.nodeType != endContainer.TEXT_NODE){
1923                                        var docRange = range.cloneRange();
1924                                        var startRange = range.cloneRange();
1925                                        var stopRange = range.cloneRange();
1926                                        startRange.collapse(true)
1927                                        stopRange.collapse(false)
1928                                        var findRange = bitsMarker._getFindRange();
1929                                        var result = findRange.Find(range.toString().replace(/^\s*/g,"").replace(/\s*$/g,""), docRange, startRange, stopRange);
1930                                        if(result){
1931                                                range = result.cloneRange();
1932                                                startContainer = range.startContainer;
1933                                                startOffset = range.startOffset;
1934                                                endContainer = range.endContainer;
1935                                                endOffset = range.endOffset;
1936                                        }
1937                                }
1938                                var stXPath = this.XPath.getOffsetFromParentNode(startContainer,startOffset);
1939                                var enXPath = this.XPath.getOffsetFromParentNode(endContainer,endOffset);
1940                                try{
1941                                        var hyperAnchor =  bitsHyperAnchor._getAnchorURL({node:startContainer,offset:startOffset,style:style,prefix:"b",contents:range.toString()},{node:endContainer,offset:endOffset,prefix:"e",contents:range.toString()});
1942                                }catch(ex3){
1943                                        try{
1944                                                var hyperAnchor =  bitsHyperAnchorDummy._getAnchorURL({node:startContainer,offset:startOffset,style:style,prefix:"b",contents:range.toString()},{node:endContainer,offset:endOffset,prefix:"e",contents:range.toString()});
1945                                        }catch(ex3){
1946                                                hyperAnchor = null;
1947                                        }
1948                                }
1949                                hyperAnchor = bitsAutocacheService.convertCacheURLToOriginalURL(hyperAnchor);
1950                                var con_url = this.Common.getURLStringFromDocument(stXPath.node.ownerDocument);
1951                                var rObj = this.Database.newObject();
1952                                if(rObj){
1953                                        rObj.pfid = parentID;
1954                                        rObj.doc_url = bitsAutocacheService.convertCacheURLToOriginalURL(doc_url);
1955                                        rObj.con_url = bitsAutocacheService.convertCacheURLToOriginalURL(con_url);
1956                                        rObj.doc_title = this.gBrowser.contentDocument.title?this.gBrowser.contentDocument.title:rObj.doc_url;
1957                                        if(bitsAutocacheService.isCacheURL(doc_url)){
1958                                                var info = bitsAutocacheService.getSaveCacheInfo(doc_url);
1959                                                if(info && info.TITLE) rObj.doc_title = info.TITLE;
1960                                        }
1961                                        rObj.bgn_dom = stXPath.xpath + "("+stXPath.offset+")" + "("+stXPath.type+")";
1962                                        rObj.end_dom = enXPath.xpath + "("+enXPath.offset+")" + "("+enXPath.type+")";
1963
1964                                        rObj.oid_title = contextArray.join("");
1965                                        rObj.oid_title = this.Common.exceptCode(rObj.oid_title.replace(/[\r\n\t]+/mg," ").replace(/\s{2,}/mg," "));
1966
1967                                        rObj.oid_txt = contextArray.join("");
1968                                        rObj.oid_txt = this.Common.exceptCode(rObj.oid_txt.replace(/\s+$/mg,"").replace(/^\s+/mg,""));
1969
1970                                        rObj.oid_date = bitsAutocacheService.getURLTimeStampFormatDate(doc_url);
1971                                        rObj.pfid_order = ++pfid_order;
1972                                        rObj.oid_mode = "0";
1973                                        rObj.con_doc = stXPath.node.ownerDocument;
1974                                        var frame_name;
1975                                        var frame_id;
1976                                        if(doc_url != con_url){
1977                                                var win = this.gBrowser.contentWindow;
1978                                                if(win.frames != null){
1979                                                        var i;
1980this._dump("addSelectedText():win.frames.length=["+win.frames.length+"]");
1981                                                        for(i=0;i<win.frames.length;i++){
1982this._dump("addSelectedText():win.frames["+i+"].document.URL=["+win.frames[i].document.URL+"]");
1983                                                                if(bitsAutocacheService.convertCacheURLToOriginalURL(this.Common.getURLStringFromDocument(win.frames[i].document)) != con_url) continue;
1984                                                                frame_name = win.frames[i].name;
1985this._dump("addSelectedText():frame_name=["+frame_name+"]");
1986                                                                var nodes = bitsObjectMng.XPath.evaluate('//*[@name="'+win.frames[i].name+'"]',this.gBrowser.contentDocument);
1987this._dump("addSelectedText():nodes=["+nodes+"]["+(nodes?nodes.snapshotLength:0)+"]");
1988                                                                if(nodes && nodes.snapshotLength == 1){
1989                                                                        frame_id = nodes.snapshotItem(0).id;
1990                                                                }
1991                                                                break;
1992                                                        }
1993                                                }
1994                                        }
1995this._dump("addSelectedText():frame_id=["+frame_id+"]");
1996                                        var parser = new DOMParser();
1997                                        var xmldoc = null;
1998                                        if(!structure || structure == ""){
1999                                                rObj.oid_type = "text";
2000                                                if(hyperAnchor || frame_name || frame_id || doc_url_hash){
2001                                                        xmldoc = parser.parseFromString("<PROPERTY></PROPERTY>","text/xml");
2002                                                }
2003                                        }else{
2004                                                rObj.oid_type = "structure";
2005                                                xmldoc = parser.parseFromString("<PROPERTY><STRUCTURE>"+structure+"</STRUCTURE></PROPERTY>","text/xml");
2006                                        }
2007                                        if(xmldoc){
2008                                                if(xmldoc.documentElement){
2009                                                        if(frame_name){
2010                                                                var xmlnode = xmldoc.createElement("FRAME_NAME");
2011                                                                if(xmlnode){
2012                                                                        xmlnode.appendChild(xmldoc.createTextNode(frame_name));
2013                                                                        xmldoc.documentElement.appendChild(xmlnode);
2014                                                                }
2015                                                        }
2016                                                        if(frame_id){
2017                                                                var xmlnode = xmldoc.createElement("FRAME_ID");
2018                                                                if(xmlnode){
2019                                                                        xmlnode.appendChild(xmldoc.createTextNode(frame_id));
2020                                                                        xmldoc.documentElement.appendChild(xmlnode);
2021                                                                }
2022                                                        }
2023                                                        if(hyperAnchor){
2024                                                                var xmlnode = xmldoc.createElement("HYPER_ANCHOR");
2025                                                                if(xmlnode){
2026                                                                        xmlnode.appendChild(xmldoc.createTextNode(hyperAnchor));
2027                                                                        xmldoc.documentElement.appendChild(xmlnode);
2028                                                                }
2029                                                        }
2030                                                        if(doc_url_hash){
2031                                                                var xmlnode = xmldoc.createElement("LOCATION_HASH");
2032                                                                if(xmlnode){
2033                                                                        xmlnode.appendChild(xmldoc.createTextNode(doc_url_hash));
2034                                                                        xmldoc.documentElement.appendChild(xmlnode);
2035                                                                }
2036                                                        }
2037                                                }
2038                                                var s = new XMLSerializer();
2039                                                rObj.oid_property = s.serializeToString(xmldoc);
2040                                                s = undefined;
2041                                        }
2042                                        parser = undefined;
2043                                        rtnNewObj.unshift(rObj);
2044                                }
2045                        }catch(ex2){
2046                                bitsMarkingCollection._dump("bitsMarkingCollection.addSelectedText():"+ex2);
2047                        }
2048                }
2049
2050                var objArr = [];
2051                for(r=0;r<rtnNewObj.length;r++){
2052                        var rObj = this.Database.newObject();
2053                        for(var key in rtnNewObj[r]){
2054                                if(key == "oid") continue;
2055                                if(key == "con_doc") continue;
2056                                rObj[key] = rtnNewObj[r][key];
2057                        }
2058                        rObj = this.setInitMarkerData(rObj);
2059                        if(!rObj) return;
2060                        objArr.push(rObj);
2061                }
2062
2063                bitsAutocacheService.createCache(undefined,undefined,aRebuild);
2064
2065                if(typeof aParName != "string"){
2066                        var f_pfid = undefined;
2067                        var rtnFolder = this.Database.getFolder({fid:parentID},dbtype);
2068                        if(rtnFolder && rtnFolder.length) f_pfid = rtnFolder[0].pfid;
2069                        rtnFolder = undefined;
2070                        aParName = this.DataSource.getID2About(parentID,f_pfid,dbtype);
2071                }
2072
2073                var contentWindow = null;
2074                var bitsItemView = null;
2075                var mcTreeHandler = null;
2076                var mcPropertyView = null;
2077                var mcItemView = null;
2078                var bitsTreeDate = null;
2079                if(this._contentWindow){
2080                        if(this._contentWindow) contentWindow = this._contentWindow;
2081                        if(contentWindow && contentWindow.bitsItemView) bitsItemView = contentWindow.bitsItemView;
2082                        if(bitsItemView){
2083                                if(contentWindow && contentWindow.mcTreeHandler) mcTreeHandler = contentWindow.mcTreeHandler;
2084                                if(contentWindow && contentWindow.mcPropertyView) mcPropertyView = contentWindow.mcPropertyView;
2085                                if(contentWindow && contentWindow.mcItemView) mcItemView = contentWindow.mcItemView;
2086                                if(contentWindow && contentWindow.bitsTreeDate) bitsTreeDate = contentWindow.bitsTreeDate;
2087                        }
2088                }
2089
2090                var pfid_order = this.Database.getMaxOrderFormPID(parentID);
2091                for(r=0;r<objArr.length;r++){
2092                        var rObj = objArr[r];
2093                        rObj.oid_property = bitsMetaCapture.capture(this.gBrowser.contentDocument,rObj.oid_property);
2094                        rObj.pfid_order = ++pfid_order;
2095                        var rtn = this.Database.addObject(rObj,dbtype);
2096                        if(!rtn) rObj = undefined;
2097                        if(!rObj) continue;
2098                        rObj = this.Database.getObject({oid:rObj.oid,pfid:rObj.pfid},dbtype)[0];
2099                        if(!rObj) continue;
2100                        try{
2101                                var rtnContent = bitsMarker.xPathMarker(
2102                                        rtnNewObj[r].con_doc,
2103                                        {
2104                                                start   : rObj.bgn_dom,
2105                                                end     : rObj.end_dom,
2106                                                context : this.Common.exceptCode(context.replace(/\s+$/mg,"").replace(/^\s+/mg,"")),
2107                                                con_url : this.Common.getURLStringFromDocument(rtnNewObj[r].con_doc)
2108                                        },
2109                                        {
2110                                                id     : rObj.oid,
2111                                                dbtype : dbtype,
2112                                                pfid   : rObj.pfid,
2113                                                style  : style
2114                                        }
2115                                );
2116                                if(rtnContent){
2117                                        if(this._contentWindow){
2118                                                if(bitsItemView){
2119                                                        if(bitsItemView.isChecked){
2120                                                                if(mcTreeHandler){
2121                                                                        var resArr = [];
2122                                                                        var parentRes = this.Common.RDF.GetResource(aParName);
2123                                                                        do{
2124                                                                                parentRes = this.DataSource.findParentResource(parentRes);
2125                                                                                if(parentRes) resArr.push(parentRes);
2126                                                                        }while(parentRes && parentRes.Value != this.DataSource.ABOUT_ROOT);
2127                                                                        var i;
2128                                                                        for(i=resArr.length-1;i>=0;i--){
2129                                                                                var selectIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(resArr[i]);
2130                                                                                if(selectIdx>=0 && !mcTreeHandler.TREE.view.isContainerOpen(selectIdx)) mcTreeHandler.TREE.view.toggleOpenState(selectIdx);
2131                                                                        }
2132                                                                        var selectIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(this.Common.RDF.GetResource(aParName));
2133                                                                        if(selectIdx>=0){
2134                                                                                mcTreeHandler.TREE.currentIndex = selectIdx;
2135                                                                                if(!mcTreeHandler.TREE.view.selection.isSelected(mcTreeHandler.TREE.currentIndex)) mcTreeHandler.TREE.view.selection.select(mcTreeHandler.TREE.currentIndex);
2136                                                                                mcTreeHandler.TREE.focus();
2137                                                                                mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(selectIdx);
2138                                                                                if(mcPropertyView) mcPropertyView.dispProperty(mcTreeHandler.object);
2139                                                                        }
2140                                                                }
2141                                                                if(!aRebuild) aRebuild = ((r==rtnNewObj.length-1)?true:false);
2142                                                                if(aRebuild && mcItemView){
2143                                                                        if(bitsTreeDate && bitsTreeDate.isChecked){
2144                                                                                var param = {dbtype:dbtype};
2145                                                                                for(var key in rObj){
2146                                                                                        param[key] = rObj[key];
2147                                                                                }
2148                                                                                bitsTreeDate.onSelectTab(param);
2149                                                                        }else{
2150                                                                                mcItemView.onTreeClick();
2151                                                                        }
2152                                                                        var oid = rObj.oid;
2153                                                                        mcItemView.setSelection(oid,dbtype);
2154                                                                        setTimeout(function(){ mcItemView.setSelection(oid,dbtype); },500);
2155                                                                }
2156                                                        }else{
2157                                                                var newDCitem = this.Database.makeObjectToItem(rObj);
2158                                                                if(rtnContent.length && rtnContent.length>0){
2159                                                                        newDCitem.source = rtnContent[0].id;
2160                                                                }else{
2161                                                                        newDCitem.source = rtnContent.id;
2162                                                                }
2163                                                                var newRes = this.DataSource.addItem(newDCitem, aParName, aIdx, dbtype);
2164                                                                if(newRes){
2165                                                                        this.DataSource.flush();
2166                                                                        if(mcTreeHandler){
2167                                                                                var folderautoopen = nsPreferences.getBoolPref("wiredmarker.folderautoopen", true);
2168                                                                                if(!folderautoopen){
2169                                                                                        var parentRes = this.DataSource.findParentResource(newRes);
2170                                                                                        var parentIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(parentRes);
2171                                                                                        if(parentIdx>=0) folderautoopen = mcTreeHandler.TREE.view.isContainerOpen(parentIdx);
2172                                                                                }
2173                                                                                if(folderautoopen){
2174                                                                                        var resArr = [];
2175                                                                                        var parentRes = newRes;
2176                                                                                        do{
2177                                                                                                parentRes = this.DataSource.findParentResource(parentRes);
2178                                                                                                if(parentRes) resArr.push(parentRes);
2179                                                                                        }while(parentRes && parentRes.Value != this.DataSource.ABOUT_ROOT);
2180                                                                                        var i;
2181                                                                                        for(i=resArr.length-1;i>=0;i--){
2182                                                                                                var selectIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(resArr[i]);
2183                                                                                                if(selectIdx>=0 && !mcTreeHandler.TREE.view.isContainerOpen(selectIdx)) mcTreeHandler.TREE.view.toggleOpenState(selectIdx);
2184                                                                                        }
2185                                                                                        var selectIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(newRes);
2186                                                                                        if(selectIdx>=0){
2187                                                                                                mcTreeHandler.TREE.currentIndex = selectIdx;
2188                                                                                                if(!mcTreeHandler.TREE.view.selection.isSelected(mcTreeHandler.TREE.currentIndex)) mcTreeHandler.TREE.view.selection.select(mcTreeHandler.TREE.currentIndex);
2189                                                                                                mcTreeHandler.TREE.focus();
2190                                                                                                mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(selectIdx);
2191                                                                                                if(mcPropertyView) mcPropertyView.dispProperty(mcTreeHandler.object);
2192                                                                                        }
2193                                                                                }
2194                                                                        }
2195                                                                        rtnNewRes.push(newRes);
2196                                                                }
2197                                                                newDCitem = undefined;
2198                                                        }
2199                                                }else{
2200                                                        try{
2201                                                                var aRes = this.Common.RDF.GetResource(aParName);
2202                                                                var viewmode = this._contentWindow.mcTreeViewModeService.viewmode;
2203                                                                var fid = this.DataSource.getProperty(aRes, "id");
2204                                                                var dbtype = this.DataSource.getProperty(aRes, "dbtype");
2205                                                                if(!aRebuild) aRebuild = ((r==rtnNewObj.length-1)?true:false);
2206                                                                if(aRebuild && bitsItemView) bitsItemView.onTreeClick({viewmode:viewmode,fid:fid,dbtype:dbtype,res:aRes});
2207                                                        }catch(ex){}
2208                                                }
2209                                        }
2210                                        var tempObj = {dbtype : dbtype};
2211                                        for(var key in rObj){
2212                                                tempObj[key] = rObj[key];
2213                                        }
2214                                        bitsPubmedCentralService.getPubmedInfo(tempObj);
2215                                }else{
2216                                        var rtn = this.Database.removeObject(rObj,dbtype);
2217                                }
2218                        }catch(ex2){
2219                                bitsMarkingCollection._dump("bitsMarkingCollection.addSelectedText():"+ex2);
2220                        }
2221                }
2222                selection.removeAllRanges();
2223                if(rtnNewRes.length>0)
2224                        return rtnNewRes;
2225                else
2226                        return undefined;
2227        },
2228
2229/////////////////////////////////////////////////////////////////////
2230        updateSelectedText : function(aElem){
2231                var dbtype = aElem.getAttribute("dbtype");
2232                var pfid = aElem.getAttribute("pfid");
2233                var style = aElem.style.cssText;
2234                var oid = "";
2235                var match_exp = new RegExp("^"+bitsMarker.id_key+"\\D+(\\d+)$","m");
2236                if(aElem.id.match(match_exp)){
2237                        var match_dbtype = aElem.getAttribute("dbtype");
2238                        match_exp = new RegExp("^"+bitsMarker.id_key+match_dbtype+"(\\d+)$","m");
2239                        if(match_exp.test(aElem.id)) oid = RegExp.$1;
2240                }
2241                if(oid == "") return;
2242                var targetWindow = this.Common.getFocusedWindow();
2243                var contentWindow = null;
2244                var mcTreeHandler = null;
2245                var mcPropertyView = null;
2246                var currentIndex = -1;
2247                var aRes = null;
2248                if(this._contentWindow) contentWindow = this._contentWindow;
2249                if(contentWindow && contentWindow.mcTreeHandler) mcTreeHandler = contentWindow.mcTreeHandler;
2250                if(contentWindow && contentWindow.mcPropertyView) mcPropertyView = contentWindow.mcPropertyView;
2251                if(mcTreeHandler) currentIndex = mcTreeHandler.TREE.currentIndex;
2252                if(currentIndex >= 0) aRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(currentIndex);
2253                var selection = targetWindow.getSelection();
2254                if(!selection) return false;
2255                var selectText = selection.toString();
2256                if(selectText == "") return false;
2257                var xpath = [];
2258                for(var r=0;r<selection.rangeCount;r++){
2259                        var range = selection.getRangeAt(r);
2260                        if(range.startContainer.nodeType != range.startContainer.TEXT_NODE || range.endContainer.nodeType != range.endContainer.TEXT_NODE){
2261                                var docRange = range.cloneRange();
2262                                var startRange = range.cloneRange();
2263                                var stopRange = range.cloneRange();
2264                                startRange.collapse(true)
2265                                stopRange.collapse(false)
2266                                var findRange = bitsMarker._getFindRange();
2267                                var result = findRange.Find(range.toString().replace(/^\s*/g,"").replace(/\s*$/g,""), docRange, startRange, stopRange);
2268                                if(result) range = result.cloneRange();
2269                        }
2270                        var context = this.Common.exceptCode(range.toString().replace(/\s+$/mg,"").replace(/^\s+/mg,""));
2271                        var stXPath = this.XPath.getOffsetFromParentNode(range.startContainer,range.startOffset);
2272                        var enXPath = this.XPath.getOffsetFromParentNode(range.endContainer,range.endOffset);
2273                        if(!stXPath || !enXPath) continue;
2274                        var bgn_dom = stXPath.xpath + "("+stXPath.offset+")" + "("+stXPath.type+")";
2275                        var end_dom = enXPath.xpath + "("+enXPath.offset+")" + "("+enXPath.type+")";
2276                        var con_url = this.Common.getURLStringFromDocument(stXPath.node.ownerDocument);
2277                        try{
2278                                var hyperAnchor = bitsHyperAnchor._getAnchorURL({node:range.startContainer,offset:range.startOffset,style:style,prefix:"b",contents:range.toString()},{node:range.endContainer,offset:range.endOffset,prefix:"e",contents:range.toString()});
2279                        }catch(ex3){
2280                                try{
2281                                        var hyperAnchor = bitsHyperAnchorDummy._getAnchorURL({node:range.startContainer,offset:range.startOffset,style:style,prefix:"b",contents:range.toString()},{node:range.endContainer,offset:range.endOffset,prefix:"e",contents:range.toString()});
2282                                }catch(ex3){
2283                                        hyperAnchor = null;
2284                                        bitsMarkingCollection._dump("bitsMarkingCollection.updateSelectedText():ex3=["+ex3 +"]");
2285                                }
2286                        }
2287                        if(hyperAnchor) hyperAnchor = bitsAutocacheService.convertCacheURLToOriginalURL(hyperAnchor);
2288                        xpath.push({doc:stXPath.node.ownerDocument,context:context,bgn_dom:bgn_dom,end_dom:end_dom,con_url:con_url,hyperAnchor:hyperAnchor});
2289                        break; //最初の遞択テキストのみ有効
2290                }
2291                selection.removeAllRanges();
2292                if(xpath.length == 0) return;
2293
2294                var rValue = this.Database.getObjectFormID(oid,dbtype);
2295                if(!rValue) return;
2296                rValue[0].oid_title = xpath[0].context;
2297                rValue[0].oid_txt = xpath[0].context;
2298                rValue[0] = this.setInitMarkerData(rValue[0]);
2299                if(!rValue[0]) return;
2300
2301                bitsMarker.unmarkerWindow(aElem.id);
2302                var rtn = false;
2303                var r;
2304                for(r=0;r<xpath.length;r++){
2305                        var rtnContent = bitsMarker.xPathMarker(
2306                                xpath[r].doc,
2307                                {
2308                                        start   : xpath[r].bgn_dom,
2309                                        end     : xpath[r].end_dom,
2310                                        context : xpath[r].context,
2311                                        con_url : xpath[r].con_url
2312                                },{
2313                                        id     : oid,
2314                                        dbtype : dbtype,
2315                                        pfid   : pfid,
2316                                        style  : style
2317                                });
2318                        if(!rtnContent) continue;
2319                        var oid_property = "";
2320                        if(rValue) oid_property = rValue[0].oid_property;
2321                        if(xpath[r].hyperAnchor){
2322                                var parser = new DOMParser();
2323                                try{ var xmldoc = parser.parseFromString(oid_property,"text/xml"); }catch(e){xmldoc = null; }
2324                                if(!xmldoc) xmldoc = parser.parseFromString("<PROPERTY/>","text/xml");
2325                                if(xmldoc){
2326                                        if(xmldoc.documentElement && hyperAnchor){
2327                                                var xmlnode = xmldoc.getElementsByTagName("HYPER_ANCHOR")[0];
2328                                                if(xmlnode){
2329                                                        while(xmlnode.hasChildNodes()){
2330                                                                xmlnode.removeChild(xmlnode.lastChild);
2331                                                        }
2332                                                }else{
2333                                                        xmlnode = xmldoc.createElement("HYPER_ANCHOR");
2334                                                        xmldoc.documentElement.appendChild(xmlnode);
2335                                                }
2336                                                xmlnode.appendChild(xmldoc.createTextNode(xpath[r].hyperAnchor));
2337                                        }
2338                                        var s = new XMLSerializer();
2339                                        oid_property = s.serializeToString(xmldoc);
2340                                        s = undefined;
2341                                }
2342                                parser = undefined;
2343                        }
2344                        rtn = this.Database.updateObject({
2345                                oid:oid,
2346                                oid_type     : "text",
2347                                oid_txt      : xpath[r].context,
2348                                bgn_dom      : xpath[r].bgn_dom,
2349                                end_dom      : xpath[r].end_dom,
2350                                con_url      : bitsAutocacheService.convertCacheURLToOriginalURL(xpath[r].con_url),
2351                                oid_property : oid_property
2352                        },dbtype);
2353                }
2354                if(currentIndex>=0){
2355                        mcTreeHandler.TREE.currentIndex = currentIndex;
2356                        if(!mcTreeHandler.TREE.view.selection.isSelected(mcTreeHandler.TREE.currentIndex)) mcTreeHandler.TREE.view.selection.select(mcTreeHandler.TREE.currentIndex);
2357                        mcTreeHandler.TREE.focus();
2358                        mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(currentIndex);
2359                        if(mcPropertyView) mcPropertyView.dispProperty(mcTreeHandler.object);
2360                }
2361        },
2362
2363/////////////////////////////////////////////////////////////////////
2364        setInitMarkerData : function(aObject,aEdit){
2365                if(aEdit == undefined) aEdit = true;
2366                var initdata_edit = nsPreferences.getBoolPref("wiredmarker.marker.initdata.edit", true);
2367                if(!aEdit) initdata_edit = false;
2368                var title_mode = nsPreferences.copyUnicharPref("wiredmarker.marker.initdata.title","WM_TITLE");
2369                var note_mode = nsPreferences.copyUnicharPref("wiredmarker.marker.initdata.note","WM_TEXT");
2370                var title_format = nsPreferences.copyUnicharPref("wiredmarker.marker.initdata.title_format","");
2371                var note_format = nsPreferences.copyUnicharPref("wiredmarker.marker.initdata.note_format","");
2372                try{
2373                        aObject.doc_title = decodeURIComponent(aObject.doc_title);
2374                }catch(e){
2375                        this._dump("setInitMarkerData():e="+e);
2376                        aObject.doc_title = aObject.doc_title;
2377                }
2378                var wm_text = aObject.oid_title;
2379                switch(title_mode){
2380                        case "WM_TITLE":
2381                                aObject.oid_title = aObject.doc_title;
2382                                break;
2383                        case "WM_DATE":
2384                                aObject.oid_title = aObject.oid_date;
2385                                break;
2386                        case "WM_FORMAT":
2387                                if(title_format || initdata_edit){
2388                                        aObject.oid_title = title_format.replace(/WM_TEXT/gi,wm_text).replace(/WM_TITLE/gi,aObject.doc_title).replace(/WM_DATE/gi,aObject.oid_date);
2389                                }
2390                                break;
2391                }
2392                var note = wm_text;
2393                var parser = new DOMParser();
2394                try{var xmldoc = parser.parseFromString(aObject.oid_property,"text/xml");}catch(e){xmldoc=null;}
2395                if(xmldoc){
2396                        var xmlnode = xmldoc.getElementsByTagName("NOTE")[0];
2397                        if(xmlnode) note = xmlnode.textContent;
2398                }
2399                if(note_mode){
2400                        switch(note_mode){
2401                                case "WM_TEXT":
2402                                        note = wm_text;
2403                                        break;
2404                                case "WM_TITLE":
2405                                        note = aObject.doc_title;
2406                                        break;
2407                                case "WM_DATE":
2408                                        note = aObject.oid_date;
2409                                        break;
2410                                case "WM_FORMAT":
2411                                        if(note_format || initdata_edit){
2412                                                note = note_format.replace(/WM_TEXT/gi,wm_text).replace(/WM_TITLE/gi,aObject.doc_title).replace(/WM_DATE/gi,aObject.oid_date);
2413                                        }
2414                                        break;
2415                        }
2416                        if(note){
2417                                if(!xmldoc) xmldoc = parser.parseFromString("<PROPERTY/>","text/xml");
2418                                var xmlnode = xmldoc.getElementsByTagName("NOTE")[0]
2419                                if(!xmlnode){
2420                                        xmlnode = xmldoc.createElement("NOTE");
2421                                        xmldoc.documentElement.appendChild(xmlnode);
2422                                }else{
2423                                        while(xmlnode.lastChild){ xmlnode.removeChild(xmlnode.lastChild); }
2424                                }
2425                                xmlnode.appendChild(xmldoc.createTextNode(note));
2426                                var s = new XMLSerializer();
2427                                aObject.oid_property = s.serializeToString(xmldoc);
2428                                s = undefined;
2429                        }
2430                }else{
2431                        note = "";
2432                }
2433                if(initdata_edit){
2434                        var result = {};
2435                        result.accept = false;
2436                        result.title = aObject.oid_title;
2437                        result.note = note;
2438                        window.openDialog("chrome://markingcollection/content/markerInitDataDialog.xul", "", "chrome,centerscreen,modal,dialog,resizable=yes", result);
2439                        if(result.accept){
2440                                result.title = result.title.replace(/\t/mg,"        ");
2441                                result.title = this.Common.exceptCode(result.title);
2442                                result.title = result.title.replace(/\x0D\x0A|\x0D|\x0A/g, " ").replace(/^\s*/g,"").replace(/\s*$/g,"");
2443                                result.note = result.note.replace(/\t/mg,"        ");
2444                                result.note = result.note.replace(/\x0D\x0A|\x0D|\x0A/g," __BR__ ");
2445                                result.note = this.Common.exceptCode(result.note);
2446                                result.note = result.note.replace(/[\r\n]/mg, " ").replace(/ __BR__ /mg,"\n");
2447                                aObject.oid_title = result.title;
2448                                var parser = new DOMParser();
2449                                try{var xmldoc = parser.parseFromString(aObject.oid_property,"text/xml");}catch(e){xmldoc=null;}
2450                                if(!xmldoc) xmldoc = parser.parseFromString("<PROPERTY/>","text/xml");
2451                                parser = undefined;
2452                                if(result.note){
2453                                        var xmlnode = xmldoc.getElementsByTagName("NOTE")[0]
2454                                        if(!xmlnode){
2455                                                xmlnode = xmldoc.createElement("NOTE");
2456                                                xmldoc.documentElement.appendChild(xmlnode);
2457                                        }else{
2458                                                while(xmlnode.lastChild){ xmlnode.removeChild(xmlnode.lastChild); }
2459                                        }
2460                                        xmlnode.appendChild(xmldoc.createTextNode(result.note));
2461                                }else{
2462                                        var xmlnode = xmldoc.getElementsByTagName("NOTE")[0]
2463                                        if(xmlnode) xmlnode.parentNode.removeChild(xmlnode);
2464                                }
2465                                var s = new XMLSerializer();
2466                                aObject.oid_property = s.serializeToString(xmldoc);
2467                                s = undefined;
2468                        }else{
2469                                return undefined;
2470                        }
2471                }
2472                parser = undefined;
2473                return aObject;
2474        },
2475
2476/////////////////////////////////////////////////////////////////////
2477        getFolderFromPFID : function(aPFID){
2478                if(!aPFID || aPFID == "0") return null;
2479                var rtnFolder = bitsMarkingCollection.Database.getFolderFormID(aPFID,undefined,bitsMarkingCollection.Database._defaultMode);
2480                if(!rtnFolder) return null;
2481                var rtnArr = bitsMarkingCollection.getFolderFromPFID(rtnFolder[0].pfid);
2482                if(rtnArr) rtnFolder = rtnFolder.concat(rtnArr);
2483                return rtnFolder;
2484        },
2485
2486/////////////////////////////////////////////////////////////////////
2487        checkFolderNameRepetition  : function(aDBType){
2488                if(aDBType == undefined) return;
2489                var rtnFolder = bitsMarkingCollection.Database.getAllFolder(aDBType);
2490                if(rtnFolder && rtnFolder.length>1){
2491                        var folders_name = [];
2492                        var i;
2493                        for(i=0;i<rtnFolder.length;i++){
2494                                var chkid = rtnFolder[i].pfid.toString() + "\t" + rtnFolder[i].fid_title;
2495                                if(!folders_name[chkid]) folders_name[chkid] = [];
2496                                folders_name[chkid].push(rtnFolder[i].fid);
2497                        }
2498                        for(i=0;i<rtnFolder.length;i++){
2499                                var folder = rtnFolder[i];
2500                                var chkid = folder.pfid.toString() + "\t" + folder.fid_title;
2501                                if(folders_name[chkid] && folders_name[chkid].length>1){
2502                                        var cnt;
2503                                        var folders_name_arr = folders_name[chkid];
2504                                        for(cnt=0;cnt<folders_name_arr.length;cnt++){
2505                                                if(folders_name_arr[cnt] != folder.fid || cnt==0) continue;
2506                                                var chkid = folder.pfid.toString() + "\t" + folder.fid_title + " (" + (cnt+1).toString() + ")";
2507                                                while(folders_name[chkid]){
2508                                                        cnt++;
2509                                                        chkid = folder.pfid.toString() + "\t" + folder.fid_title + " (" + (cnt+1).toString() + ")";
2510                                                }
2511                                                folder.fid_title += " (" + (cnt+1).toString() + ")";
2512                                                folders_name[chkid] = [];
2513                                                folders_name[chkid].push(folder.fid);
2514                                                if(folder.dbtype) delete folder.dbtype;
2515                                                bitsMarkingCollection.Database.updateFolder(folder,aDBType);
2516                                                break;
2517                                        }
2518                                }
2519                        }
2520                }
2521                rtnFolder = undefined;
2522                return;
2523        },
2524
2525/////////////////////////////////////////////////////////////////////
2526        rebuildRdf : function(aFunc){
2527                try{
2528                        var aFile = this.DataSource.file;
2529                        this.Database.initSeq();
2530                        var refRootfolder = nsPreferences.copyUnicharPref("wiredmarker.rootfolder","");
2531                        var rootFolder = undefined;
2532                        var rootFolder_dbtype = undefined;
2533                        if(!refRootfolder || refRootfolder.match(/^0+$/)){
2534                                rootFolder = undefined;
2535                        }else{
2536                                rootFolder = refRootfolder;
2537                                rootFolder_dbtype = nsPreferences.copyUnicharPref("wiredmarker.rootfolder_dbtype","");
2538                                if(!rootFolder_dbtype || rootFolder_dbtype == "") rootFolder_dbtype = this.Database._defaultMode;
2539                                //ルヌトフォルダが存圚するかチェック
2540                                if(!this.Database.isOpenDB(rootFolder_dbtype) || !this.Database._fidExists(rootFolder_dbtype, rootFolder)){
2541                                        rootFolder = undefined;
2542                                        rootFolder_dbtype = undefined;
2543                                        nsPreferences.setUnicharPref("wiredmarker.rootfolder","");
2544                                        nsPreferences.setUnicharPref("wiredmarker.rootfolder_dbtype","");
2545                                }
2546                        }
2547                        var tmpFolderFilter = nsPreferences.copyUnicharPref("wiredmarker.filter.folder","");
2548                        var tmpFolderFilterArr = tmpFolderFilter.split("\t");
2549                        var folderFilterHash = [];
2550                        var i;
2551                        for(i=0;i<tmpFolderFilterArr.length;i++){
2552                                if(!tmpFolderFilterArr[i].match(/^(\d+):(\d+):(.+)$/)) continue;
2553                                var filter_fid = RegExp.$1;
2554                                var filter_casesensitive = RegExp.$2;
2555                                var filter_keyword = RegExp.$3;
2556                                folderFilterHash[filter_fid] = new RegExp(filter_keyword,(filter_casesensitive==1)?"mg":"img");
2557                        }
2558                        tmpFolderFilterArr = undefined;
2559                        tmpFolderFilter = undefined;
2560                        var contentWindow = null;
2561                        var mcTreeSharedFolder = null;
2562                        var mcTreeViewModeService = null;
2563                        if(this._contentWindow) contentWindow = this._contentWindow;
2564                        if(contentWindow && contentWindow.mcTreeSharedFolder) mcTreeSharedFolder = contentWindow.mcTreeSharedFolder;
2565                        if(contentWindow && contentWindow.mcTreeViewModeService) mcTreeViewModeService = contentWindow.mcTreeViewModeService;
2566//フォルダ名称重耇チェック
2567                        this.checkFolderNameRepetition(this.Database._defaultMode);
2568                        if(bitsScrapPartyAddonService && bitsScrapPartyAddonService.existsAddon()){
2569                                var extensionDir = bitsMarkingCollection.Common.getExtensionDir().clone();
2570                                if(extensionDir){
2571                                        var dbtype_arr = bitsScrapPartyAddonService.getAddonDBType();
2572                                        if(dbtype_arr && dbtype_arr.length > 0){
2573                                                while(dbtype_arr.length > 0){
2574                                                        var addon_dbtype = dbtype_arr.shift();
2575                                                        var regexp = new RegExp("^("+ addon_dbtype +")(\\d*)\\.sqlite$", "m");
2576                                                        var entries = extensionDir.directoryEntries;
2577                                                        while(entries.hasMoreElements()){
2578                                                                var entry = entries.getNext().QueryInterface(Components.interfaces.nsILocalFile);
2579                                                                if(entry.isFile() && entry.leafName.match(regexp)){
2580                                                                        var dbtype = RegExp.$1;
2581                                                                        var dbversion = RegExp.$2;
2582                                                                        this.checkFolderNameRepetition(dbtype+dbversion);
2583                                                                }
2584                                                        }
2585                                                }
2586                                        }
2587                                }
2588                        }
2589                        var rtn = null;
2590                        var viewmode = "all";
2591                        if(mcTreeViewModeService) viewmode = mcTreeViewModeService.viewmode;
2592
2593/////////////////////////////////////////////////////////////////////
2594                        var rdf_hash = [];
2595                        var dbtype_arr = [];
2596                        if(viewmode == "single" || viewmode == "all"){
2597                                var dbinfo = this.dbinfo.getAllDBInfo();
2598                                if(dbinfo){
2599                                        var i;
2600                                        for(i=0;i<dbinfo.length;i++){
2601                                                if(rdf_hash[""+dbinfo[i].database_dbtype]) continue;
2602                                                dbtype_arr.push(dbinfo[i].database_dbtype);
2603                                                rdf_hash[""+dbinfo[i].database_dbtype] = {};
2604                                                rdf_hash[""+dbinfo[i].database_dbtype].title = dbinfo[i].database_title;
2605                                                rdf_hash[""+dbinfo[i].database_dbtype].icon  = dbinfo[i].database_icon;
2606                                        }
2607                                }
2608                                if(dbtype_arr.length>0){
2609                                        var i;
2610                                        var dbtype_cnt;
2611                                        for(dbtype_cnt=0;dbtype_cnt<dbtype_arr.length;dbtype_cnt++){
2612                                                var dbtype = dbtype_arr[dbtype_cnt];
2613                                                if(rootFolder_dbtype && rootFolder_dbtype != dbtype) continue;
2614                                                var rtnFolder = [];
2615                                                var rtnObj = [];
2616                                                var pfid2Folder = [];
2617                                                var fid2Folder = [];
2618                                                var pfid2Object = [];
2619                                                var rtnArr = this.Database.getAllFolder(dbtype);
2620                                                if(rtnArr) rtnFolder = rtnFolder.concat(rtnArr);
2621                                                rtnArr = undefined;
2622                                                if(rtnObj && rtnObj.length>0){
2623                                                        for(i=0;i<rtnObj.length;i++){
2624                                                                if(pfid2Object[rtnObj[i].pfid] == undefined) pfid2Object[rtnObj[i].pfid] = [];
2625                                                                if(folderFilterHash[rtnObj[i].pfid] && !rtnObj[i].oid_title.match(folderFilterHash[rtnObj[i].pfid])) continue;
2626                                                                pfid2Object[rtnObj[i].pfid].push(rtnObj[i]);
2627                                                        }
2628                                                        if(rtnFolder && rtnFolder.length>0){
2629                                                                var hash = [];
2630                                                                for(i=0;i<rtnObj.length;i++){
2631                                                                        if(hash[rtnObj[i].pfid]) continue;
2632                                                                        hash[rtnObj[i].pfid] = rtnObj[i].oid;
2633                                                                        var rtnArr = bitsMarkingCollection.getFolderFromPFID(rtnObj[i].pfid);
2634                                                                        if(rtnArr) rtnFolder = rtnFolder.concat(rtnArr);
2635                                                                }
2636                                                        }
2637                                                }
2638                                                if(rtnFolder && rtnFolder.length>0){
2639                                                        rtnFolder.sort(
2640                                                                function(a,b){
2641                                                                        var len = parseFloat(a.pfid_order)-parseFloat(b.pfid_order);
2642                                                                        return len;
2643                                                                }
2644                                                        );
2645                                                        for(i=0;i<rtnFolder.length;i++){
2646                                                                if(fid2Folder[rtnFolder[i].fid]) continue;
2647                                                                fid2Folder[rtnFolder[i].fid] = [];
2648                                                                fid2Folder[rtnFolder[i].fid].push(rtnFolder[i]);
2649                                                                if(folderFilterHash[rtnFolder[i].pfid] && !rtnFolder[i].fid_title.match(folderFilterHash[rtnFolder[i].pfid])) continue;
2650                                                                if(pfid2Folder[rtnFolder[i].pfid] == undefined) pfid2Folder[rtnFolder[i].pfid] = [];
2651                                                                pfid2Folder[rtnFolder[i].pfid].push(rtnFolder[i]);
2652                                                        }
2653                                                }
2654                                                rtnFolder = undefined;
2655                                                if(rootFolder){
2656                                                        rdf_hash[""+rootFolder_dbtype].rdf = this.Database.makeRdf(rootFolder,true,false,pfid2Folder,fid2Folder,pfid2Object,undefined,rootFolder_dbtype);
2657                                                }else{
2658                                                        rdf_hash[""+dbtype].rdf = this.Database.makeRdf(undefined,true,false,pfid2Folder,fid2Folder,pfid2Object,undefined,dbtype);
2659                                                }
2660                                                rtnFolder = undefined;
2661                                                rtnObj = undefined;
2662                                                pfid2Folder = undefined;
2663                                                fid2Folder = undefined;
2664                                                pfid2Object = undefined;
2665                                        }
2666                                }
2667                        }
2668/////////////////////////////////////////////////////////////////////
2669
2670                        var rtnShared = null;
2671                        if((viewmode == "single" || viewmode == "all") && mcTreeSharedFolder && mcTreeSharedFolder.isChecked){
2672                                var rtnFolder = [];
2673                                var rtnObj = [];
2674                                var pfid2Folder = [];
2675                                var fid2Folder = [];
2676                                var pfid2Object = [];
2677                                var i;
2678                                var rtnFolder = bitsMarkingCollection.Database.getAllFolder(this.Database._sharedMode);
2679                                if(viewmode == "single"){
2680                                        rtnObj = bitsMarkingCollection.Database.getObjectFormURL(this.Common.getURLStringFromDocument(this.gBrowser.contentDocument),this.Database._sharedMode);
2681                                }else if(viewmode == "all"){
2682                                        rtnObj = bitsMarkingCollection.Database.getAllObject(this.Database._sharedMode);
2683                                }
2684                                if(rtnObj){
2685                                        rtnObj.sort(
2686                                                function(a,b){
2687                                                        var len = parseFloat(a.pfid_order)-parseFloat(b.pfid_order);
2688                                                        return len;
2689                                                }
2690                                        );
2691                                        for(i=0;i<rtnObj.length;i++){
2692                                                if(pfid2Object[rtnObj[i].pfid] == undefined) pfid2Object[rtnObj[i].pfid] = [];
2693                                                if(folderFilterHash[rtnObj[i].pfid] && !rtnObj[i].oid_title.match(folderFilterHash[rtnObj[i].pfid])) continue;
2694                                                pfid2Object[rtnObj[i].pfid].push(rtnObj[i]);
2695                                        }
2696                                        if(rtnFolder){
2697                                                var hash = [];
2698                                                for(i=0;i<rtnObj.length;i++){
2699                                                        if(hash[rtnObj[i].pfid]) continue;
2700                                                        hash[rtnObj[i].pfid] = rtnObj[i].oid;
2701                                                        var rtnArr = bitsMarkingCollection.getFolderFromPFID(rtnObj[i].pfid);
2702                                                        if(rtnArr) rtnFolder = rtnFolder.concat(rtnArr);
2703                                                }
2704                                        }
2705                                }
2706                                if(rtnFolder){
2707                                        rtnFolder.sort(
2708                                                function(a,b){
2709                                                        var len = parseFloat(a.pfid_order)-parseFloat(b.pfid_order);
2710                                                        return len;
2711                                                }
2712                                        );
2713                                        for(i=0;i<rtnFolder.length;i++){
2714                                                if(fid2Folder[rtnFolder[i].fid]) continue;
2715                                                fid2Folder[rtnFolder[i].fid] = [];
2716                                                fid2Folder[rtnFolder[i].fid].push(rtnFolder[i]);
2717                                                if(folderFilterHash[rtnFolder[i].pfid] && !rtnFolder[i].fid_title.match(folderFilterHash[rtnFolder[i].pfid])) continue;
2718                                                if(pfid2Folder[rtnFolder[i].pfid] == undefined) pfid2Folder[rtnFolder[i].pfid] = [];
2719                                                pfid2Folder[rtnFolder[i].pfid].push(rtnFolder[i]);
2720                                        }
2721                                }
2722                                rtnFolder = undefined;
2723                                rtnShared = this.Database.makeRdf(rootFolder,true,false,pfid2Folder,fid2Folder,pfid2Object,undefined,this.Database._sharedMode);
2724                        }
2725
2726                        if(viewmode == "single" || viewmode == "all"){
2727                                var results = null;
2728                                if(rtn && rtn.list) results = rtn.list;
2729                                var out_txt = "";
2730                                var out_txt_utf8 = "";
2731                                out_txt += '<?xml version="1.0"?>\n';
2732                                out_txt += '<RDF:RDF xmlns:NS1="' + bitsObjectMng.NS_OBJECTMANAGEMENT + '"\n';
2733                                out_txt += '         xmlns:NC="http://home.netscape.com/NC-rdf#"\n';
2734                                out_txt += '         xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#">\n';
2735
2736                                if(rootFolder == undefined){
2737                                        var shared_id = this.sharedfolder.id + dbtype_arr.length;
2738                                        var shared_about = this.sharedfolder.about(shared_id);
2739                                        out_txt += '  <RDF:Seq RDF:about="'+ bitsObjectMng.DataSource.ABOUT_ROOT +'">\n';
2740                                        if(dbtype_arr.length>0){
2741                                                var dbtype_cnt;
2742                                                for(dbtype_cnt=0;dbtype_cnt<dbtype_arr.length;dbtype_cnt++){
2743                                                        var local_about = this.sharedfolder.about(dbtype_cnt);
2744                                                        out_txt += '    <RDF:li RDF:resource="'+ local_about +'"/>\n';
2745                                                }
2746                                        }
2747                                        if(mcTreeSharedFolder && mcTreeSharedFolder.isChecked) out_txt += '    <RDF:li RDF:resource="'+ shared_about +'"/>\n';
2748                                        out_txt += '  </RDF:Seq>\n';
2749                                        if(dbtype_arr.length>0){
2750                                                var dbtype_cnt;
2751                                                for(dbtype_cnt=0;dbtype_cnt<dbtype_arr.length;dbtype_cnt++){
2752                                                        var dbtype = dbtype_arr[dbtype_cnt];
2753                                                        var local_id = dbtype_cnt;
2754                                                        var local_about = this.sharedfolder.about(local_id);
2755                                                        this.DataSource.setID2About("0",undefined,local_about,dbtype);
2756                                                        var resultsLocal = null;
2757                                                        if(rdf_hash[""+dbtype] && rdf_hash[""+dbtype].rdf && rdf_hash[""+dbtype].rdf.list) resultsLocal = rdf_hash[""+dbtype].rdf.list;
2758                                                        out_txt += '  <RDF:Seq RDF:about="'+ local_about +'">\n';
2759                                                        if(resultsLocal){
2760                                                                resultsLocal.sort(
2761                                                                        function(a,b){
2762                                                                                var len = parseFloat(a.pfid_order)-parseFloat(b.pfid_order);
2763                                                                                return len;
2764                                                                        }
2765                                                                );
2766                                                                var cnt;
2767                                                                for(cnt=0;cnt<resultsLocal.length;cnt++){
2768                                                                        out_txt += '    <RDF:li RDF:resource="'+ resultsLocal[cnt].about +'"/>\n';
2769                                                                }
2770                                                        }
2771                                                        out_txt += '  </RDF:Seq>\n';
2772                                                        if(dbtype == this._uncategorized.dbtype){
2773                                                                out_txt += '  <RDF:Description RDF:about="' + local_about +'"';
2774                                                                out_txt += '\n                   NS1:id="0"';
2775                                                                out_txt += '\n                   NS1:title="'+rdf_hash[""+dbtype].title+'"';
2776                                                                out_txt += '\n                   NS1:type="'+dbtype+'"';
2777                                                                out_txt += '\n                   NS1:icon=""';
2778                                                                out_txt += '\n                   NS1:editmode="'+ (""+0x0004) +'"';
2779                                                                out_txt += '\n                   NS1:cssrule="css_'+dbtype+'_0"';
2780                                                                out_txt += '\n                   NS1:style="'+this._uncategorized.style+'"';
2781                                                                out_txt += '\n                   NS1:source=""';
2782                                                                out_txt += '\n                   NS1:addon_id=""';
2783                                                                out_txt += '\n                   NS1:pfid=""';
2784                                                                out_txt += '\n                   NS1:pfid_order=""';
2785                                                                out_txt += '\n                   NS1:uri=""';
2786                                                                out_txt += '\n                   NS1:comment=""';
2787                                                                out_txt += '\n                   NS1:chars=""';
2788                                                                out_txt += '\n                   NS1:shortcut=""';
2789                                                                out_txt += '\n                   NS1:contextmenu=""';
2790                                                                out_txt += '\n                   NS1:dbtype="'+dbtype+'"';
2791                                                                out_txt += '/>\n';
2792                                                        }else{
2793                                                                out_txt += '  <RDF:Description RDF:about="' + local_about +'"';
2794                                                                out_txt += '\n                   NS1:id="0"';
2795                                                                out_txt += '\n                   NS1:title="'+rdf_hash[""+dbtype].title+'"';
2796                                                                out_txt += '\n                   NS1:type="localfolder"';
2797                                                                out_txt += '\n                   NS1:icon="'+rdf_hash[""+dbtype].icon+'"';
2798                                                                out_txt += '\n                   NS1:editmode="'+ (""+0x1F03) +'"';
2799                                                                out_txt += '\n                   NS1:cssrule="css_'+dbtype+'_0"';
2800                                                                out_txt += '\n                   NS1:style=""';
2801                                                                out_txt += '\n                   NS1:source=""';
2802                                                                out_txt += '\n                   NS1:addon_id=""';
2803                                                                out_txt += '\n                   NS1:pfid=""';
2804                                                                out_txt += '\n                   NS1:pfid_order=""';
2805                                                                out_txt += '\n                   NS1:uri=""';
2806                                                                out_txt += '\n                   NS1:comment=""';
2807                                                                out_txt += '\n                   NS1:chars=""';
2808                                                                out_txt += '\n                   NS1:shortcut=""';
2809                                                                out_txt += '\n                   NS1:contextmenu=""';
2810                                                                out_txt += '\n                   NS1:dbtype="'+dbtype+'"';
2811                                                                out_txt += '/>\n';
2812                                                        }
2813
2814                                                        if(resultsLocal) out_txt += this.Database._outputRDF(resultsLocal);
2815                                                        resultsLocal = undefined;
2816                                                }
2817                                        }
2818
2819                                        if(mcTreeSharedFolder && mcTreeSharedFolder.isChecked){
2820                                                var resultsShared = null;
2821                                                if(rtnShared && rtnShared.list) resultsShared = rtnShared.list;
2822                                                out_txt += '  <RDF:Seq RDF:about="'+ shared_about +'">\n';
2823                                                if(resultsShared){
2824                                                        resultsShared.sort(
2825                                                                function(a,b){
2826                                                                        var len = parseFloat(a.pfid_order)-parseFloat(b.pfid_order);
2827                                                                        return len;
2828                                                                }
2829                                                        );
2830                                                        var cnt;
2831                                                        for(cnt=0;cnt<resultsShared.length;cnt++){
2832                                                                out_txt += '    <RDF:li RDF:resource="'+ resultsShared[cnt].about +'"/>\n';
2833                                                        }
2834                                                }
2835                                                out_txt += '  </RDF:Seq>\n';
2836                                                out_txt += '  <RDF:Description RDF:about="' + shared_about +'"';
2837                                                out_txt += '\n                   NS1:id="0"';
2838                                                out_txt += '\n                   NS1:title="'+this.sharedfolder.title+'"';
2839                                                out_txt += '\n                   NS1:type="sharedfolder"';
2840                                                out_txt += '\n                   NS1:icon="chrome://markingcollection/skin/sharedfolder.png"';
2841                                                out_txt += '\n                   NS1:editmode="'+ (""+0x1003) +'"';
2842                                                out_txt += '\n                   NS1:cssrule="css_'+this.Database._sharedMode+'_0"';
2843                                                out_txt += '\n                   NS1:style=""';
2844                                                out_txt += '\n                   NS1:source=""';
2845                                                out_txt += '\n                   NS1:addon_id=""';
2846                                                out_txt += '\n                   NS1:pfid=""';
2847                                                out_txt += '\n                   NS1:pfid_order=""';
2848                                                out_txt += '\n                   NS1:uri=""';
2849                                                out_txt += '\n                   NS1:comment=""';
2850                                                out_txt += '\n                   NS1:chars=""';
2851                                                out_txt += '\n                   NS1:shortcut=""';
2852                                                out_txt += '\n                   NS1:dbtype="'+this.Database._sharedMode+'"';
2853                                                out_txt += '/>\n';
2854                                                if(resultsShared) out_txt += this.Database._outputRDF(resultsShared);
2855                                        }
2856                                }else{
2857                                        if(dbtype_arr.length>0){
2858                                                var dbtype_cnt;
2859                                                for(dbtype_cnt=0;dbtype_cnt<dbtype_arr.length;dbtype_cnt++){
2860                                                        var dbtype = dbtype_arr[dbtype_cnt];
2861                                                        if(dbtype != rootFolder_dbtype) continue;
2862                                                        var local_id = dbtype_cnt;
2863                                                        var local_about = this.sharedfolder.about(local_id);
2864                                                        var resultsLocal = null;
2865                                                        if(rdf_hash[""+dbtype] && rdf_hash[""+dbtype].rdf && rdf_hash[""+dbtype].rdf.list) resultsLocal = rdf_hash[""+dbtype].rdf.list;
2866                                                        if(!resultsLocal) continue;
2867                                                        out_txt += '  <RDF:Seq RDF:about="'+ bitsObjectMng.DataSource.ABOUT_ROOT +'">\n';
2868                                                        if(resultsLocal){
2869                                                                resultsLocal.sort(
2870                                                                        function(a,b){
2871                                                                                var len = parseFloat(a.pfid_order)-parseFloat(b.pfid_order);
2872                                                                                return len;
2873                                                                        }
2874                                                                );
2875                                                                var cnt;
2876                                                                for(cnt=0;cnt<resultsLocal.length;cnt++){
2877                                                                        out_txt += '    <RDF:li RDF:resource="'+ resultsLocal[cnt].about +'"/>\n';
2878                                                                }
2879                                                        }
2880                                                        out_txt += '  </RDF:Seq>\n';
2881                                                        out_txt += '  <RDF:Description RDF:about="' + local_about +'"';
2882                                                        out_txt += '\n                   NS1:id="0"';
2883                                                        out_txt += '\n                   NS1:title="'+rdf_hash[""+dbtype].title+'"';
2884                                                        out_txt += '\n                   NS1:type="localfolder"';
2885                                                        out_txt += '\n                   NS1:icon="'+rdf_hash[""+dbtype].icon+'"';
2886                                                        out_txt += '\n                   NS1:editmode="'+ (""+0x1F03) +'"';
2887                                                        out_txt += '\n                   NS1:cssrule="css'+dbtype+'_0"';
2888                                                        out_txt += '\n                   NS1:style=""';
2889                                                        out_txt += '\n                   NS1:source=""';
2890                                                        out_txt += '\n                   NS1:addon_id=""';
2891                                                        out_txt += '\n                   NS1:pfid=""';
2892                                                        out_txt += '\n                   NS1:pfid_order=""';
2893                                                        out_txt += '\n                   NS1:uri=""';
2894                                                        out_txt += '\n                   NS1:comment=""';
2895                                                        out_txt += '\n                   NS1:chars=""';
2896                                                        out_txt += '\n                   NS1:shortcut=""';
2897                                                        out_txt += '\n                   NS1:dbtype="'+dbtype+'"';
2898                                                        out_txt += '/>\n';
2899                                                        if(resultsLocal) out_txt += this.Database._outputRDF(resultsLocal);
2900                                                        resultsLocal = undefined;
2901                                                        break;
2902                                                }
2903                                        }
2904                                }
2905                                out_txt += '</RDF:RDF>\n';
2906                                this.Common.writeFile(aFile,out_txt,"UTF-8");
2907                        }
2908                }catch(ex){
2909                        bitsMarkingCollection._dump("bitsMarkingCollection.rebuildRdf():"+ex);
2910                }
2911        },
2912
2913/////////////////////////////////////////////////////////////////////
2914        loadXMLDocument : function(pUri){
2915                try{
2916                        var aFile = this.Common.convertURLToFile(pUri);
2917                        var fileContents = this.Common.readFile(aFile);
2918                        var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
2919                        converter.charset = "UTF-8";
2920                        fileContents = converter.ConvertToUnicode(fileContents);
2921
2922                        var domParser = new DOMParser();
2923                        var xmlDocument = domParser.parseFromString(fileContents, "text/xml");
2924                        domParser = undefined;
2925                        return xmlDocument;
2926                }catch(ex2){
2927                        bitsMarkingCollection._dump("bitsMarkingCollection.loadXMLDocument("+pUri+"):"+ ex2);
2928                        return undefined;
2929                }
2930        },
2931
2932/////////////////////////////////////////////////////////////////////
2933        initProgressmeter : function(){
2934                var prog = bitsMarkingCollection.ProgressPanel;
2935                if(prog){
2936                        prog.removeAttribute("hidden");
2937                        prog = bitsMarkingCollection.Progressmeter;
2938                        if(prog) prog.setAttribute("value", "0");
2939                }
2940        },
2941
2942/////////////////////////////////////////////////////////////////////
2943        execProgressmeter : function(aValue){
2944                var prog = bitsMarkingCollection.Progressmeter;
2945                if(prog) prog.value = aValue;
2946        },
2947
2948/////////////////////////////////////////////////////////////////////
2949        endProgessmeter : function(){
2950                var prog = bitsMarkingCollection.ProgressPanel;
2951                if(prog) prog.setAttribute("hidden", true);
2952        },
2953
2954/////////////////////////////////////////////////////////////////////
2955        showConsole : function () {
2956                window.open("chrome://global/content/console.xul", "_blank", "chrome,extrachrome,menubar,resizable,scrollbars,status,toolbar");
2957        },
2958
2959/////////////////////////////////////////////////////////////////////
2960        _dump : function(aString){
2961                if(!nsPreferences.getBoolPref("wiredmarker.debug", false)) return;
2962                var dumpString = new String(aString);
2963                var aConsoleService = Components.classes["@mozilla.org/consoleservice;1"]
2964                                      .getService(Components.interfaces.nsIConsoleService);
2965                aConsoleService.logStringMessage(dumpString);
2966                window.dump(aString+"\n");
2967        },
2968};
Note: See TracBrowser for help on using the repository browser.