Changeset 38420 for lang/javascript

Show
Ignore:
Timestamp:
09/06/10 05:49:27 (3 years ago)
Author:
jimo1001
Message:

XHRのヘッダにContent-Typeを追加

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/javascript/userscripts/fastlookupjpanden.user.js

    r31293 r38420  
    66// ==/UserScript== 
    77 
    8 var VERSION = "2009.03.16"; 
    9 var SITEINFO_IMPORT_URLS = 
    10     [ 
    11         'http://wedata.net/databases/FluJE/items.json', 
    12     ]; 
     8var VERSION = "2010.09.06"; 
     9 
     10var SITEINFO_IMPORT_URLS = [ 
     11    'http://wedata.net/databases/FluJE/items.json', 
     12]; 
     13 
    1314//----------------------------------------------------------------------------- 
    1415// SPACE ALC(英辞郎 on the WEB)はコメントを外せば利用できますが、『英辞郎 on the Web』の利用規約に違反しますので自己責任で行ってください. 
    1516//----------------------------------------------------------------------------- 
    16 var LOCAL_SITEINFO = 
    17     [ 
    18 //      { 
    19 //          name: 'SPACE ALC(英辞郎)', 
    20 //          url: 'http://eow.alc.co.jp/[context]/', 
    21 //          icon: 'data:image/gif;base64,R0lGODlhEAAQALMAABQSFI+Qj8/Pz1FRUbGxsefp53Nzc6KjouDf4GNkY769vvz+/ICCgCQmJJmYmVxaXCH5BAAAAAAALAAAAAAQABAAAwRocElZThqGzC1Pe4cgOE/ALUx2IJtjbASzEIPCObL0SuyZSAHBiUM4oIYcRFCzKfQmhQDhYTAkEg+AI7l9ChJCjsI2YTAKw62EAEYW1IgBEhheOBLoJOMpUTwYBCIHDGpDAgcBDgp5ExEAOw==', 
    22 //          xpath: '(id("searchWord")/strong | id("itemsNumber") | id("resultList")//ul//li[position()<4])', 
    23 //          NGxpath: 'id("resultArea")//ul/div/ul', 
    24 //          lang: 'both', 
    25 //          type: 'dictionary', 
    26 //          enc: 'UTF-8' 
    27 //      }, 
    28     ] 
     17var LOCAL_SITEINFO = [ 
     18    // { 
     19    //  name: "SPACE ALC(英辞郎)", 
     20    //  url: "http://eow.alc.co.jp/[context]/UTF-8/", 
     21    //  icon: "data:image/gif;base64,R0lGODlhEAAQALMAABQSFI+Qj8/Pz1FRUbGxsefp53Nzc6KjouDf4GNkY769vvz+/ICCgCQmJJmYmVxaXCH5BAAAAAAALAAAAAAQABAAAwRocElZThqGzC1Pe4cgOE/ALUx2IJtjbASzEIPCObL0SuyZSAHBiUM4oIYcRFCzKfQmhQDhYTAkEg+AI7l9ChJCjsI2YTAKw62EAEYW1IgBEhheOBLoJOMpUTwYBCIHDGpDAgcBDgp5ExEAOw==", 
     22    //  xpath: "(id('searchWord')/strong | id('itemsNumber') | id('resultsList')//ul//li[position()<4])", 
     23    //  NGxpath: "id('resultArea')//ul/div/ul", 
     24    //  lang: "both", 
     25    //  type: "dictionary", 
     26    //  enc: "UTF-8" 
     27    // }, 
     28]; 
    2929var SITEINFO = []; 
    3030 
     
    3434        ver: VERSION, 
    3535        shortcutkey: { 
    36             navi_toggle: 'A-y',         // show toggle(open/close) navi 
    37             close_all:   'ESC',         // close all element 
    38             QL_run:      'y',           // Run quick Look up 
    39             site:       [], 
     36            navi_toggle: 'A-y',     // show toggle(open/close) navi 
     37            close_all: 'ESC',       // close all element 
     38            QL_run: 'y',            // Run quick Look up 
     39            site: [], 
    4040        }, 
    4141        remove_result_all: true, 
    4242        enable_wheel_button: true, 
    43         enable_modifier_key: true,      // push modifier key when select character strings. 
    44         modifier_key: 'altKey',         // modifier key for selection. 
    45         effect : true, 
    46         lookup: {                       // word, search 
    47             ja: [],                     // default site of input japanese strings 
    48             en: [],                     // default site of input english strings 
     43        enable_modifier_key: true,  // push modifier key when select character strings. 
     44        modifier_key: 'altKey',     // modifier key for selection. 
     45        enable_effect : false, 
     46        lookup: {                   // word, search 
     47            ja: [],                 // default site of input japanese strings 
     48            en: [],                 // default site of input english strings 
    4949            ja_type: 'dictionary', 
    5050            en_type: 'dictionary', 
    5151        }, 
    52         translation: {                  // for select text 
    53             JtoE: true,                 // translate Japanese to English 
    54             ja_chars: '10',             // translate Japanese more than this number of characters 
    55             EtoJ: true,                 // translate English to Japanese 
    56             en_words: '3',              // translate Enlish more than this number of words 
     52        translation: {              // for select text 
     53            JtoE: true,             // translate Japanese to English 
     54            ja_chars: '10',         // translate Japanese more than this number of characters 
     55            EtoJ: true,             // translate English to Japanese 
     56            en_words: '3',          // translate Enlish more than this number of words 
    5757            ja: [], 
    5858            en: [], 
     
    6262} 
    6363 
     64var disableShortcutKey = [ 
     65    { 
     66        url: "http://mail.google.com/", 
     67    }, 
     68    { 
     69        url: "http://docs.google.com/", 
     70    }, 
     71    { 
     72        url: "http://www.google.com/notebook/", 
     73    } 
     74] 
     75 
    6476//=== images === 
    6577var IMAGES = { 
    66     close:              'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAXCAYAAAD6FjQuAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAewQAAHsEBw2lUUwAAAAd0SU1FB9gBFxEPCSG3H1gAAAEXSURBVEjH7ZQxioQwFIb/jELA3trWI2yTC2gnpJrFwwlTCyk8g0fwEBZWivBithCDo7O7MpBU80PQPPPzveQ9w9I0NXCsrusghEC4LAsAwJiVyRh7adh/N8ac1r2KHRUSEXwp1Fr7hx2PaX+kWZYBAJqmsWvzPD/Fjv5jWW5EBCKC1hpa69M7EUEpZaFEZEFKKfzl3+YWHMex2Rd4n9U+O2MMiqKwsbquf22Uo6/v+7Ub322Qd3y3aZpwZUgpAQBVVQEApJS46rWwKxmVZfkE2p5b/KpYFEXOb5BxHNeaBUHg7z/zAeOcr7BhGMA5xzzPzkBJkgBAGwohWgBfjjfXAvhmDw+1um+tf4c/Pd01D4e7+uijf/UDzMDkaVlBIbwAAAAASUVORK5CYII=', 
    67     close_focused:      'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAXCAYAAAD6FjQuAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAewQAAHsEBw2lUUwAAAAd0SU1FB9gBFxEOJH1zcmwAAAI6SURBVEjH7ZWxbhQxEIa/sb23iU4Q5Q3Scd21vAASSJSIJjxDxCvwCikp0l1HQZECiRrpKqR0ES8REuWS3K09ptjZxdnkolyRCkayfPbO/L/n94xPfk6nmSe2TycnTCcTwmqx2CjQAVrMm1i4urx80EFCeDRYjvFhsuXV1dqP3jlwriV1Duf9HR9NiawK2uaZdH2+4eb6uj2VOYmBh6oiOYcT4c3FBQDfd3d7wNfn5wB829np9zqM2DR38FoZm+b2naSEADElvAjiHMfjMW8XC16dnfW/AY7H4/agKZFUiSn9Je7u1PbazMr7sXkERFWCOceU+OI971Lqib6ORj04gOZMzpkIZKCx+ZaMF4NK2zInKS9e9dYaYBUjObdwyWJKkgjcDCo2/CqyGgGVzcFGbXsfDfhQhIOcea/KoUgPtjSiaGNl6+UgmZYV8LbREVUDos8ibANH0uZ5kHMPUBc4JXCpSKgL562CpC5kPRJBgHEROBMhA88K2ZzNZQJVud4pPtQD0k5aAYIITqSv0KxKyplKlVjIHS1WbV3WehibfKEgGdkpvTV28J5QVXjvERG8cyTVvrea5ZKUM16VBGzbnXVF0kv8wxbLdW3fvQ6Dfnys1cDzvT2AeZhOJnPg5RM//PMXp6cfZNZKu1WM2pTsOqErzk5ZKfpVrc2SqdaYgisTawXc7MNvgLAPzawN0nuCqqIr/KCiuz7uYpLFNUMy7mkDZuuz6jJzRUz3/A2zW5Vjf/O/vf/2r9of0FcAZ6gVKMEAAAAASUVORK5CYII=', 
    68     maximize:           'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAXCAYAAAD6FjQuAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAewQAAHsEBw2lUUwAAAAd0SU1FB9gBFxEUA2hUPdwAAAECSURBVEjH7ZU9boQwEIU/ByRL29ClS2txhDRcALmhSscRqSwuQJErcIFcARrMbBEiWbBIoKyp9klT2J4fv3n+UYDkeU5s9H1PCjDPMwAiAoBS6mFAuC4iG79HcyFSgGmauAIpgPf++mLrNoUtLctyN0nbtrvxYY6ntPFo/IbZelchmqbZHJCqqjYyrFn9jU8x29P2FLNxHA857/kdjU/PaFPX9b+0VYDcbrfox34Yhl9mSZJcc8+01pcU01qDMUYA0VoLEMW01mKMEQVQFMU38BmTWdd1KgXIsuwL8M65n+hv40J3tta+Ax6YFvPA5Jx7yrfwZq39WJLOKwv7/sIL8XEHfSOYLUXK0YIAAAAASUVORK5CYII=', 
    69     maximize_focused:   'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAXCAYAAAD6FjQuAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAewQAAHsEBw2lUUwAAAAd0SU1FB9gBFxEQMcTvqVgAAAFCSURBVEjH7ZRLjoJAEIa/mhTplWsS9nIDk7kBh/AcXsJ7eAhOMIln8AAaF2KQV1y0C+WhwODMyKz8EwKprqqPeqQFsMvlks1mw1iaTqcsFgsUoCgKiqLAWguAiHQGNc+ttS2/LhtAnucAV1iWZWRZNlplZW4FSNO0oo+hJElqWJIk5HnealOzpWEY9iYLgqCzzZ2wOI7/1Mah2NPpVMOiKKoqe/yrpmazWWtB1ut1awTNeBHhcDjcw56prG+uQ7HH47GG7XY74jgehG232x/ZS00mkxp2Pp+fms1+v//VTMv8CqCqOI7zbYDneb1nQ7GqWsMcx+m9NV6hCmaMQVVRVQSo9qhktxZTHozS4dS0Xb+NMeD7vgWsMcbePF7+GGOs7/tWXdcV13W/gE/GlciK8TW/vT/m/J/uVnA1YlVvvTWoCzHOs7tnGF6IAAAAAElFTkSuQmCC', 
    70     minimize:           'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAXCAYAAAD6FjQuAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAewQAAHsEBw2lUUwAAAAd0SU1FB9gBFxEXFi6kivQAAAC5SURBVEjH7ZK9DYMwEIU/m0g3BkUaj0DjVRgOsQkNM6DsgZCAS0Vk8eOkwSgSr7J97/R+ZOO916ZpcM5xNh7LYZ5nAFQVAGPM7kI4V9UNb+9tIzaOY7pk0zSlF1vXtK40rOmoxvX+cr+2xsVt6Cp0t/dBYglD7jXJ+r6PEsuyjM6rqvoqZkmITzJr47p1XcddW/u7WJZlaZKJSDKxNs/zous6RIRhGE4REhGM9/4JvIAWKLhx48Zf4w2OIF4eoa/2XgAAAABJRU5ErkJggg==', 
    71     minimize_focused:   'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAXCAYAAAD6FjQuAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAewQAAHsEBw2lUUwAAAAd0SU1FB9gBFxEWDMrdQs8AAAFGSURBVEjH7ZQ9bsJAEIW/RYu2oqRxQxFxBxrfwBdAuZHvEeUCvgENN6DxBRAFINvsrlxsCrTYsbHJ30aKlFd5Zt/MmzcaWcRx7DabDWmakuc5obBcLpE+sNZircU5B4AQ4m5R+9051+PdywEYYxoxrTVa62DOtNaN2OVywRgTTKyqqkasqiqMMb01dVfaXtPQGrv1PbGiKIKusSzLRux0Ot2cdafy6Lptc4cceu7xeHwvFtLZ+XxuxPb7PUVRDJIPh8Nos/l8Pvo+m82Y+KCua0KiruvGmZSS6XQ6SI6iaLTZWK3vL9vkob/GT+AmppS6BlIigNsdee3eYYpOUtwhtXPXbwlsF4vFarfboZTCWhvEmVIKEcfxE5ADW2AV8kjEC/CaJACss2yU7HlfQZZlyGcgedDs0RAfxST5xrSfwW/p/OMP4w3tcqDExRHCHwAAAABJRU5ErkJggg==', 
    72     openSwitch:         'data:image/gif;base64,R0lGODlhEAAQAJECAP///6uopv///wAAACH5BAEAAAIALAAAAAAQABAAAAIbVI6Zpu0PIwRAImoPjrT353nSZpFjlaWqxbAFADs=', 
    73     closeSwitch:        'data:image/gif;base64,R0lGODlhEAAQAJECAP///6uopv///wAAACH5BAEAAAIALAAAAAAQABAAAAIWVI6Zpu0Po5y0JoAzflrbD4aixUxCAQA7', 
    74     o:                  'data:image/gif;base64,R0lGODlhEAAQAIABANLS0////yH5BAEAAAEALAAAAAAQABAAAAIcjI+py+2PgARvznZDVjLS1R0hF26kVZnQyrZQAQA7', 
    75     x:                  'data:image/gif;base64,R0lGODlhEAAQAIABAJ+foP///yH5BAEAAAEALAAAAAAQABAAAAIdjI+py+1vAECSyRluu9px+HkctnSdUh0pxLYuVAAAOw==', 
    76     indicator:          'data:image/gif;base64,R0lGODlhEAAQAPYAAAAAAAEBAQICAgMDAwQEBAgICA0NDRMTEx4eHiAgICIiIiQkJCgoKCkpKSoqKisrKzAwMDExMTU1NTs7Oz4+Pl1dXWpqamtra3FxcZSUlJiYmJmZmZubm5ycnJ2dnaKioqOjo6ioqKmpqaurq66urrCwsLGxsbKysry8vMXFxcrKyuXl5ejo6Orq6v///wYGBgsLCwwMDA4ODhAQEBQUFBUVFRgYGBoaGh0dHSwsLC4uLjIyMjMzM1BQUFZWVlxcXF9fX2BgYGFhYWRkZGZmZmdnZ3Nzc3h4eHp6ent7e4SEhI+Pj8bGxsnJydXV1djY2Nra2t3d3d7e3uLi4ufn5+vr6wkJCScnJzo6Ol5eXmhoaJqamqqqqq2tre3t7QUFBQ8PDxcXF9TU1N/f3+np6XJycgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/i1NYWRlIGJ5IEtyYXNpbWlyYSBOZWpjaGV2YSAod3d3LmxvYWRpbmZvLm5ldCkAIfkEAQoAAAAsAAAAABAAEAAABl9AgHA4IZEmw6RwIDikXK7UQSlkZDQVFrTloAoyq5UJBT0ZqINNWMTAYBBUYQQ0osSHgYlFUrgPFSUqHWd+AIAqHoR+eRddhXgNEASPAAsfIRCUCRwfD5QACQsCn6SlQQAh+QQBCgAAACwAAAAAEAAQAAAHaYAAgoMzPz8zg4mKSVNTSAQ4NwGJMD0+NiMrKyVJUlBDiT1MKkFDT05LKy4uTzeDPk0qRAQ7Ojssq1E4gzJARTWDBEpVVEaTADQ7MYoALzkNA4IvRydCzMzT1dfMNDwG2+Dh4uPk5ebngQAh+QQBCgAAACwAAAAAEAAQAAAHaIAAgoMCCgoCg4mKEyYmEwAEA4oACQsAFioqWhBbGQyJCRwfDA0eHhIfKysZiIILHyEQAAYGVlyqGpKCAg8QBIkUXCdZB5OTVyhVKVjGiRgu0F3Ng8/R04IIJ17L14IyDzTd4uPk5eaBACH5BAEKAAAALAAAAAAQABAAAAdqgACCgwAvL4SIhDRHRzSJiTtdXTsxPj0wjwAGQkIwQCpMPZmERCpNPqODNURBYamDX0MkSWCvO04rYz+vEGK5u6NfEUsnSLWZBEotVEgEqTlkLi5ROKkMK9JPN6kCRmNQQ68AAjg3AeKJgQAh+QQBCgAAACwAAAAAEAAQAAAHZoAAgoOEhYaHiIYCCwmJhA8fHI2OABAhHwuUAAQQDQGagg4XE5+OBh4qJQqUBh2pq44FEhakjhQjIBGICGUYDCIrKxsDhgYnLi4oJsEZAoYOLcgsFRoZDIcHKcgpBwLEiBMkJBOGgQAh+QQBCgAAACwAAAAAEAAQAAAHaIAAgoOEhYaHiImKi4yNjoMGPDSNQidHL4yVl4IDDDmYhTE7kwABRlRVSgSDNUVAMoM4US4uLDs6OwREKk0+gzdPtCtLTk9DQSpMPYRDUFJJJSsrIzY+PTCEATc4BEhTU0mMMz8/M4aBACH5BAEKAAAALAAAAAAQABAAAAdmgACCg4SFhoeIiYqLjIM0DzKMWCleJwiLXS6aGJiaLpyKk1UoV4wHWSdcFIQEEA8CgwMaKytcVgYGABAhHwuDAhm0HxIeHg0MHxwJhAwZWxBaKioWAAvLhQMEABMmJhOMAgoKsIWBACH5BAEKAAAALAAAAAAQABAAAAdqgACCg4SFgwE3OAKGhkNQY0aLjII3Ty4uKwyTgjhRl2Q5mwAESFRVSgSbYEgnSxFfoj9jK2IQogCyK04Rt2BJJEOwtwBhQUQ1wz5NKkTDPUwqQDBCQgaTMD0+MTtdXTvDNEdHNMMALy+MgQA7' 
     78    close: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAXCAYAAAD6FjQuAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAewQAAHsEBw2lUUwAAAAd0SU1FB9gBFxEPCSG3H1gAAAEXSURBVEjH7ZQxioQwFIb/jELA3trWI2yTC2gnpJrFwwlTCyk8g0fwEBZWivBithCDo7O7MpBU80PQPPPzveQ9w9I0NXCsrusghEC4LAsAwJiVyRh7adh/N8ac1r2KHRUSEXwp1Fr7hx2PaX+kWZYBAJqmsWvzPD/Fjv5jWW5EBCKC1hpa69M7EUEpZaFEZEFKKfzl3+YWHMex2Rd4n9U+O2MMiqKwsbquf22Uo6/v+7Ub322Qd3y3aZpwZUgpAQBVVQEApJS46rWwKxmVZfkE2p5b/KpYFEXOb5BxHNeaBUHg7z/zAeOcr7BhGMA5xzzPzkBJkgBAGwohWgBfjjfXAvhmDw+1um+tf4c/Pd01D4e7+uijf/UDzMDkaVlBIbwAAAAASUVORK5CYII=', 
     79    close_focused: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAXCAYAAAD6FjQuAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAewQAAHsEBw2lUUwAAAAd0SU1FB9gBFxEOJH1zcmwAAAI6SURBVEjH7ZWxbhQxEIa/sb23iU4Q5Q3Scd21vAASSJSIJjxDxCvwCikp0l1HQZECiRrpKqR0ES8REuWS3K09ptjZxdnkolyRCkayfPbO/L/n94xPfk6nmSe2TycnTCcTwmqx2CjQAVrMm1i4urx80EFCeDRYjvFhsuXV1dqP3jlwriV1Duf9HR9NiawK2uaZdH2+4eb6uj2VOYmBh6oiOYcT4c3FBQDfd3d7wNfn5wB829np9zqM2DR38FoZm+b2naSEADElvAjiHMfjMW8XC16dnfW/AY7H4/agKZFUiSn9Je7u1PbazMr7sXkERFWCOceU+OI971Lqib6ORj04gOZMzpkIZKCx+ZaMF4NK2zInKS9e9dYaYBUjObdwyWJKkgjcDCo2/CqyGgGVzcFGbXsfDfhQhIOcea/KoUgPtjSiaGNl6+UgmZYV8LbREVUDos8ibANH0uZ5kHMPUBc4JXCpSKgL562CpC5kPRJBgHEROBMhA88K2ZzNZQJVud4pPtQD0k5aAYIITqSv0KxKyplKlVjIHS1WbV3WehibfKEgGdkpvTV28J5QVXjvERG8cyTVvrea5ZKUM16VBGzbnXVF0kv8wxbLdW3fvQ6Dfnys1cDzvT2AeZhOJnPg5RM//PMXp6cfZNZKu1WM2pTsOqErzk5ZKfpVrc2SqdaYgisTawXc7MNvgLAPzawN0nuCqqIr/KCiuz7uYpLFNUMy7mkDZuuz6jJzRUz3/A2zW5Vjf/O/vf/2r9of0FcAZ6gVKMEAAAAASUVORK5CYII=', 
     80    maximize: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAXCAYAAAD6FjQuAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAewQAAHsEBw2lUUwAAAAd0SU1FB9gBFxEUA2hUPdwAAAECSURBVEjH7ZU9boQwEIU/ByRL29ClS2txhDRcALmhSscRqSwuQJErcIFcARrMbBEiWbBIoKyp9klT2J4fv3n+UYDkeU5s9H1PCjDPMwAiAoBS6mFAuC4iG79HcyFSgGmauAIpgPf++mLrNoUtLctyN0nbtrvxYY6ntPFo/IbZelchmqbZHJCqqjYyrFn9jU8x29P2FLNxHA857/kdjU/PaFPX9b+0VYDcbrfox34Yhl9mSZJcc8+01pcU01qDMUYA0VoLEMW01mKMEQVQFMU38BmTWdd1KgXIsuwL8M65n+hv40J3tta+Ax6YFvPA5Jx7yrfwZq39WJLOKwv7/sIL8XEHfSOYLUXK0YIAAAAASUVORK5CYII=', 
     81    maximize_focused: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAXCAYAAAD6FjQuAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAewQAAHsEBw2lUUwAAAAd0SU1FB9gBFxEQMcTvqVgAAAFCSURBVEjH7ZRLjoJAEIa/mhTplWsS9nIDk7kBh/AcXsJ7eAhOMIln8AAaF2KQV1y0C+WhwODMyKz8EwKprqqPeqQFsMvlks1mw1iaTqcsFgsUoCgKiqLAWguAiHQGNc+ttS2/LhtAnucAV1iWZWRZNlplZW4FSNO0oo+hJElqWJIk5HnealOzpWEY9iYLgqCzzZ2wOI7/1Mah2NPpVMOiKKoqe/yrpmazWWtB1ut1awTNeBHhcDjcw56prG+uQ7HH47GG7XY74jgehG232x/ZS00mkxp2Pp+fms1+v//VTMv8CqCqOI7zbYDneb1nQ7GqWsMcx+m9NV6hCmaMQVVRVQSo9qhktxZTHozS4dS0Xb+NMeD7vgWsMcbePF7+GGOs7/tWXdcV13W/gE/GlciK8TW/vT/m/J/uVnA1YlVvvTWoCzHOs7tnGF6IAAAAAElFTkSuQmCC', 
     82    minimize: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAXCAYAAAD6FjQuAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAewQAAHsEBw2lUUwAAAAd0SU1FB9gBFxEXFi6kivQAAAC5SURBVEjH7ZK9DYMwEIU/m0g3BkUaj0DjVRgOsQkNM6DsgZCAS0Vk8eOkwSgSr7J97/R+ZOO916ZpcM5xNh7LYZ5nAFQVAGPM7kI4V9UNb+9tIzaOY7pk0zSlF1vXtK40rOmoxvX+cr+2xsVt6Cp0t/dBYglD7jXJ+r6PEsuyjM6rqvoqZkmITzJr47p1XcddW/u7WJZlaZKJSDKxNs/zous6RIRhGE4REhGM9/4JvIAWKLhx48Zf4w2OIF4eoa/2XgAAAABJRU5ErkJggg==', 
     83    minimize_focused: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAXCAYAAAD6FjQuAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAewQAAHsEBw2lUUwAAAAd0SU1FB9gBFxEWDMrdQs8AAAFGSURBVEjH7ZQ9bsJAEIW/RYu2oqRxQxFxBxrfwBdAuZHvEeUCvgENN6DxBRAFINvsrlxsCrTYsbHJ30aKlFd5Zt/MmzcaWcRx7DabDWmakuc5obBcLpE+sNZircU5B4AQ4m5R+9051+PdywEYYxoxrTVa62DOtNaN2OVywRgTTKyqqkasqiqMMb01dVfaXtPQGrv1PbGiKIKusSzLRux0Ot2cdafy6Lptc4cceu7xeHwvFtLZ+XxuxPb7PUVRDJIPh8Nos/l8Pvo+m82Y+KCua0KiruvGmZSS6XQ6SI6iaLTZWK3vL9vkob/GT+AmppS6BlIigNsdee3eYYpOUtwhtXPXbwlsF4vFarfboZTCWhvEmVIKEcfxE5ADW2AV8kjEC/CaJACss2yU7HlfQZZlyGcgedDs0RAfxST5xrSfwW/p/OMP4w3tcqDExRHCHwAAAABJRU5ErkJggg==', 
     84    openSwitch: 'data:image/gif;base64,R0lGODlhEAAQAJECAP///6uopv///wAAACH5BAEAAAIALAAAAAAQABAAAAIbVI6Zpu0PIwRAImoPjrT353nSZpFjlaWqxbAFADs=', 
     85    closeSwitch: 'data:image/gif;base64,R0lGODlhEAAQAJECAP///6uopv///wAAACH5BAEAAAIALAAAAAAQABAAAAIWVI6Zpu0Po5y0JoAzflrbD4aixUxCAQA7', 
     86    o: 'data:image/gif;base64,R0lGODlhEAAQAIABANLS0////yH5BAEAAAEALAAAAAAQABAAAAIcjI+py+2PgARvznZDVjLS1R0hF26kVZnQyrZQAQA7', 
     87    x: 'data:image/gif;base64,R0lGODlhEAAQAIABAJ+foP///yH5BAEAAAEALAAAAAAQABAAAAIdjI+py+1vAECSyRluu9px+HkctnSdUh0pxLYuVAAAOw==', 
     88    indicator: 'data:image/gif;base64,R0lGODlhEAAQAPYAAAAAAAEBAQICAgMDAwQEBAgICA0NDRMTEx4eHiAgICIiIiQkJCgoKCkpKSoqKisrKzAwMDExMTU1NTs7Oz4+Pl1dXWpqamtra3FxcZSUlJiYmJmZmZubm5ycnJ2dnaKioqOjo6ioqKmpqaurq66urrCwsLGxsbKysry8vMXFxcrKyuXl5ejo6Orq6v///wYGBgsLCwwMDA4ODhAQEBQUFBUVFRgYGBoaGh0dHSwsLC4uLjIyMjMzM1BQUFZWVlxcXF9fX2BgYGFhYWRkZGZmZmdnZ3Nzc3h4eHp6ent7e4SEhI+Pj8bGxsnJydXV1djY2Nra2t3d3d7e3uLi4ufn5+vr6wkJCScnJzo6Ol5eXmhoaJqamqqqqq2tre3t7QUFBQ8PDxcXF9TU1N/f3+np6XJycgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/i1NYWRlIGJ5IEtyYXNpbWlyYSBOZWpjaGV2YSAod3d3LmxvYWRpbmZvLm5ldCkAIfkEAQoAAAAsAAAAABAAEAAABl9AgHA4IZEmw6RwIDikXK7UQSlkZDQVFrTloAoyq5UJBT0ZqINNWMTAYBBUYQQ0osSHgYlFUrgPFSUqHWd+AIAqHoR+eRddhXgNEASPAAsfIRCUCRwfD5QACQsCn6SlQQAh+QQBCgAAACwAAAAAEAAQAAAHaYAAgoMzPz8zg4mKSVNTSAQ4NwGJMD0+NiMrKyVJUlBDiT1MKkFDT05LKy4uTzeDPk0qRAQ7Ojssq1E4gzJARTWDBEpVVEaTADQ7MYoALzkNA4IvRydCzMzT1dfMNDwG2+Dh4uPk5ebngQAh+QQBCgAAACwAAAAAEAAQAAAHaIAAgoMCCgoCg4mKEyYmEwAEA4oACQsAFioqWhBbGQyJCRwfDA0eHhIfKysZiIILHyEQAAYGVlyqGpKCAg8QBIkUXCdZB5OTVyhVKVjGiRgu0F3Ng8/R04IIJ17L14IyDzTd4uPk5eaBACH5BAEKAAAALAAAAAAQABAAAAdqgACCgwAvL4SIhDRHRzSJiTtdXTsxPj0wjwAGQkIwQCpMPZmERCpNPqODNURBYamDX0MkSWCvO04rYz+vEGK5u6NfEUsnSLWZBEotVEgEqTlkLi5ROKkMK9JPN6kCRmNQQ68AAjg3AeKJgQAh+QQBCgAAACwAAAAAEAAQAAAHZoAAgoOEhYaHiIYCCwmJhA8fHI2OABAhHwuUAAQQDQGagg4XE5+OBh4qJQqUBh2pq44FEhakjhQjIBGICGUYDCIrKxsDhgYnLi4oJsEZAoYOLcgsFRoZDIcHKcgpBwLEiBMkJBOGgQAh+QQBCgAAACwAAAAAEAAQAAAHaIAAgoOEhYaHiImKi4yNjoMGPDSNQidHL4yVl4IDDDmYhTE7kwABRlRVSgSDNUVAMoM4US4uLDs6OwREKk0+gzdPtCtLTk9DQSpMPYRDUFJJJSsrIzY+PTCEATc4BEhTU0mMMz8/M4aBACH5BAEKAAAALAAAAAAQABAAAAdmgACCg4SFhoeIiYqLjIM0DzKMWCleJwiLXS6aGJiaLpyKk1UoV4wHWSdcFIQEEA8CgwMaKytcVgYGABAhHwuDAhm0HxIeHg0MHxwJhAwZWxBaKioWAAvLhQMEABMmJhOMAgoKsIWBACH5BAEKAAAALAAAAAAQABAAAAdqgACCg4SFgwE3OAKGhkNQY0aLjII3Ty4uKwyTgjhRl2Q5mwAESFRVSgSbYEgnSxFfoj9jK2IQogCyK04Rt2BJJEOwtwBhQUQ1wz5NKkTDPUwqQDBCQgaTMD0+MTtdXTvDNEdHNMMALy+MgQA7' 
    7789} 
    7890 
     
    133145        var selection = window.getSelection().toString(); 
    134146        if(!selection || !FluJE.selectionFlag) return; 
    135         FluJE.resultCloseFlag = false; 
    136         setTimeout(function(){ FluJE.resultCloseFlag = true }, 100); 
     147        // FluJE.resultCloseFlag = false; 
     148        // setTimeout(function(){ FluJE.resultCloseFlag = true }, 100); 
    137149        if(!force) { 
    138150            if(SETTINGS.enable_modifier_key){ 
     
    150162        else 
    151163            FluJE.showResult(selection, self.autoSelector(selection)); 
    152         window.getSelection().removeAllRanges(); 
     164        // window.getSelection().removeAllRanges(); 
    153165    }, 
    154166    //=== select site(s) automatic  === 
     
    165177            ids = [] 
    166178        str = str.replace(/^\s+|\s+$/g, ""); 
    167         if(!str.match(/^[\S]+\s.*$/i)){ 
     179        if(!str.match(/([a-z-+.!?#$%&\"\'\`*]+[ ]+){2,}/i)){ 
    168180            var re = new RegExp("[^a-z0-9]{"+SETTINGS.translation.ja_chars+",}", "i"); 
    169181            if(/^\s*$|[^a-z\s]/i.test(str)){ 
     
    227239                    cls3,' img.FluJE_site_icon{ position: absolute; -moz-border-radius: 3px; top: 0px; left: 2px; width: 16px; height: 16px; padding: 1px; background-color: #FFF; display: inline; }\n', 
    228240                    cls3,' span.FluJE_msg{ padding-left: 10px; color: #999; }\n', 
    229                     cls3,' span.FluJE_error_msg{ padding-left: 10px; color: #999; }\n', 
    230                     'div#FluJE_flash_msg{ position: fixed; bottom: 0; left: 0; right: 0; color: #9F9; font-weight: normal; font-size: 90%; text-align: center; background-color: #000; padding: 5px 0; margin: 0; opacity: 0.8; }\n', 
    231                     'div#FluJE_flash_error_msg{ position: fixed; bottom: 0; left: 0; right: 0; color: #F99; font-weight: bold; font-size: 120%; text-align: center; background-color: #000; padding: 5px 0; margin: 0; opacity: 0.8; }\n' 
     241                    cls3,' span.FluJE_error_msg{ padding-left: 10px; color: #999; }\n' 
    232242                  ].join(''); 
    233243        return css; 
    234     }, 
    235     showMessage: function(str, param){ 
    236         var self = FluJE; 
    237         if(!str) return; 
    238         if(!self.loaded) loadStyle(self.loaded, self.initCSS()); 
    239         if(param == "error") 
    240             var msg = document.body.appendChild($N('div', {id:'FluJE_flash_error_msg', style:'display: none'}, str)); 
    241         else 
    242             var msg = document.body.appendChild($N('div', {id:'FluJE_flash_msg', style:'display: none'}, str)); 
    243         Effect.flash(msg); 
    244         return; 
    245244    }, 
    246245    showResult: function(str, items){ 
    247246        var self = FluJE; 
    248247        if(!str) return; 
    249         if(loadStyle(self.loaded, self.initCSS(), function(){ self.showResult(str, items); })){ 
    250             self.loaded = true; 
    251             return; 
     248        if(!self.loaded) { 
     249            addStyle(self.initCSS(), self.loaded, function() { 
     250                self.showResult(str, items); 
     251            }).next(function() { 
     252                self.loaded = true; 
     253            }); 
     254            return false; 
    252255        } 
    253256        if(!items){ 
    254257            var items = self.autoSelector(str); 
    255258            if(!items){ 
    256                 var msg = document.body.appendChild($N('div', {id:'FluJE_flash_error_msg', style:'display: none'}, '!!!  Plese select one or more sites. !!!')); 
    257                 Effect.flash(msg); 
     259                Message.show("!!!  Plese select one or more sites. !!!"); 
    258260                return; 
    259261            } 
     
    363365                } 
    364366            } 
     367            console.log(url, method, data); 
    365368            GM_xmlhttpRequest({ 
    366369                overrideMimeType:"text/html; charset="+sites[e].enc, 
     
    369372                headers: { 
    370373                    'User-agent': 'Mozilla/5.0 (compatible)', 
     374                    'Content-Type' : 'application/x-www-form-urlencoded', 
    371375                    'Accept': 'application/atom+xml,application/xml,text/xml', 
    372376                }, 
     
    408412                url: i, 
    409413                onload: function(res) { 
    410                     FluJE.showMessage("import site info."); 
    411414                    return FluJE.getCacheCallback(res, i); 
    412415                }, 
    413                 onerror: function(res){ 
    414                     FluJE.showMessage("import error.", "error"); 
     416                onerror: function(res) { 
     417                    return FluJE.getCacheErrorCallback(i); 
    415418                }, 
    416             } 
    417             GM_xmlhttpRequest(opt); 
    418         }) 
     419            } 
     420            GM_xmlhttpRequest(opt); 
     421        }); 
    419422    }, 
    420423    getCacheCallback: function(res, url) { 
     
    424427        var info = null; 
    425428        try { 
    426             info = eval(res.responseText).map(function(i) { return i.data }) 
     429            info = eval(res.responseText).map(function(i) { return i.data }); 
    427430        } 
    428431        catch(e) { 
    429             info = [] 
    430             var matched = false 
    431             var hdoc = convertToHTMLDocument(res.responseText) 
    432             var textareas = $X('.//*[@class="FluJE_data"]', hdoc) 
    433             textareas.forEach(function(textarea) { 
    434                 var d = parseInfo(textarea.value) 
     432            info = []; 
     433            var matched = false; 
     434            var hdoc = convertToHTMLDocument(res.responseText); 
     435            var textareas = $X('.//*[@class="FluJE_data"]', hdoc); 
     436            textareas.forEach(function(textarea) { 
     437                var d = parseInfo(textarea.value); 
    435438                if (d) { 
    436439                    info.push(d) 
    437440                    if (!matched && location.href.match(d.url)) { 
    438                         matched = d 
     441                        matched = d; 
    439442                    } 
    440443                } 
    441             }) 
     444            }) 
    442445        } 
    443446        if (info.length > 0) { 
    444447            cacheInfo = {} 
    445             cacheInfo[url] = { 
     448            cacheInfo[url] = { 
    446449                url: url, 
    447450                expire: new Date(new Date().getTime()), 
    448451                info: info 
    449             } 
    450             GM_setValue('cacheInfo', cacheInfo.toSource()) 
     452            } 
     453            GM_setValue('cacheInfo', cacheInfo.toSource()); 
    451454            SITEINFO = this.getSiteInfo(); 
    452455        }else { 
    453             this.getCacheErrorCallback(url) 
     456            this.getCacheErrorCallback(url); 
    454457        } 
    455458    }, 
    456459    getCacheErrorCallback: function(url) { 
    457460        var expire = new Date(new Date().getTime()) 
    458         var chacheInfo = {} 
     461        var chacheInfo = {}; 
    459462        if (cacheInfo[url]) { 
    460             cacheInfo[url].expire = expire 
     463            cacheInfo[url].expire = expire; 
    461464        } 
    462465        else { 
    463             cacheInfo[url] = { 
     466            cacheInfo[url] = { 
    464467                url: url, 
    465468                expire: expire, 
    466469                info: [] 
    467             } 
    468         } 
    469         GM_setValue('cacheInfo', cacheInfo.toSource()) 
    470     }, 
    471  
    472     //=== window onLoad === 
    473     onLoad: function(){ 
    474         //== GM_getValue == 
    475         Setting.load(); 
    476         SITEINFO = FluJE.getSiteInfo(); 
    477         //== Userscript command == 
    478         GM_registerMenuCommand('Fast look up JP and EN - reset setting', function(){Setting.reset()}); 
    479         //== Event == 
    480         ShortcutKey.add(window, SETTINGS.shortcutkey.navi_toggle, Navi.toggle); 
    481         ShortcutKey.add(window, SETTINGS.shortcutkey.close_all, FluJE.allRemove, true); 
    482         ShortcutKey.add(window, SETTINGS.shortcutkey.QL_run, QLu.run); 
    483         if(SETTINGS.shortcutkey.site.length){ 
    484             var keys = []; 
    485             if(SETTINGS.shortcutkey.site.length) { 
    486                 SETTINGS.shortcutkey.site.forEach(function(v,i){ 
    487                     var match = false; 
    488                     keys.forEach(function(key, idx){ 
    489                         if(key.shortcutkey == v.shortcutkey) { 
    490                             keys[idx].id.push(v.id); 
    491                             match = true; 
    492                         } 
    493                     }); 
    494                     if(!match) 
    495                         keys.push({shortcutkey:v.shortcutkey, id:[v.id]}); 
    496                 }); 
    497             } 
    498             if(keys.length) { 
    499                 keys.forEach(function(key, idx){ 
    500                     ShortcutKey.add(window, key.shortcutkey, function(evt){ 
    501                         FluJE.selectionEvent(evt, key.id, true); 
    502                     }, false); 
    503                 }); 
    504             } 
    505         } 
    506         window.addEventListener("mouseup", FluJE.selectionEvent, true); 
    507         window.addEventListener('click', FluJE.removeResult, false); 
    508         GM_registerMenuCommand('Fast look up JP and EN - import siteinfo', function(){ 
    509             FluJE.importSiteInfo(); 
    510         }); 
    511         if(SETTINGS.enable_wheel_button) { 
    512             window.addEventListener('click', function(e){ 
    513                 if(e.button==1) 
    514                     FluJE.selectionEvent(e, false, true); 
    515             }, false); 
    516         } 
    517     }, 
    518 } 
    519  
    520 //----------------------------------------------------------------------------- 
    521 // EFFECT 
    522 //----------------------------------------------------------------------------- 
    523 var Effect = { 
    524     flag: true, 
    525     flash: function(node){ 
    526         var self = this; 
    527         this.fadeio(node); 
    528         setTimeout(function(){ self.fadeio(node, null, true); }, 2000); 
    529     }, 
    530     highlight: function(node, bool){ 
    531         if(bool){ 
    532             node.style.backgroundColor = '#CFC'; 
    533             setTimeout(function(){ node.style.backgroundColor='#FFF'; }, 500); 
    534         }else{ 
    535             node.style.backgroundColor = '#F99'; 
    536             setTimeout(function(){ node.style.backgroundColor='#FFF'; }, 500); 
    537         } 
    538     }, 
    539     smoothsize: function(node, original, fixed) { 
    540         var self = this; 
    541         if(original > fixed) { 
    542             node.offsetHeight -= 5; 
    543             orininal -= 5; 
    544             setTimeout(function(){ 
    545                 self.smoothsize(node, original, fixed); 
    546             }, 20); 
    547         } 
    548         return; 
    549     }, 
    550     fadeio: function(node, func, rm, sw, count){ 
    551         var self = this; 
    552         if(!sw){ 
    553             if(!this.flag) return; 
    554             if(!node.style.opacity) node.style.opacity = 0; 
    555             if(node.style.display=='none') node.style.display = 'block'; 
    556             if(parseFloat(node.style.opacity) > 0.5) { 
    557                 sw = 'out', count = 8, this.flag = false; 
    558             }else{ 
    559                 sw = 'in', count = 0, this.flag = false; 
    560             } 
    561         } 
    562         if(!SETTINGS.effect){ 
    563             if(sw=='in') { 
    564                 node.style.opacity = 0.8; 
    565                 this.flag = true; 
    566             }else { 
    567                 node.style.opacity = 0; 
    568                 node.style.display = 'none'; 
    569                 this.flag = true; 
    570             } 
    571             if(func) setTimeout(func, 10); 
    572             return; 
    573         } 
    574         if(sw == 'in'){ 
    575             if(count <= 8){ 
    576                 node.style.opacity = count/10; 
    577                 count++; 
    578                 setTimeout(function(){ 
    579                     self.fadeio(node, func, rm, sw, count); 
    580                 }, 20); 
    581             }else{ 
    582                 if(func) func(); 
    583                 this.flag = true; return; 
    584             } 
    585         }else if(sw == 'out'){ 
    586             if(count >= 0){ 
    587                 node.style.opacity = count/10; 
    588                 count--; 
    589                 setTimeout(function(){ 
    590                     self.fadeio(node, func, rm, sw, count); 
    591                 }, 20); 
    592             }else{ 
    593                 if(func) func(); 
    594                 if(rm) node.parentNode.removeChild(node); 
    595                 else node.style.display = 'none'; 
    596                 this.flag = true; return; 
    597             } 
    598         } 
     470            } 
     471        } 
     472        GM_setValue('cacheInfo', cacheInfo.toSource()); 
    599473    } 
    600474} 
     
    642516                    cls2_1,'{ background-color: #003; width: 16px; text-align: center; vertical-align: middle; cursor: pointer; }\n', 
    643517                    cls2_2,'{ background-color: #300; width: 16px; text-align: center; vertical-align: middle; cursor: pointer; }\n', 
     518                    id3,' button{ border: 1px solid #999; background-color: #333; color: #F33; cursor: pointer; }\n', 
    644519                    id3,' input[type=text]{ width: 75px; float: left; padding-left: 3px; }\n', 
    645520                    id3,' input[type=checkbox]{ width: auto; float: left; }\n', 
     
    690565    //=== crate setting table === 
    691566    createSettingHTML: function() { 
    692         var html = "<div class='FluJE_navi_reset' evt='reset_setting'>reset</div><span class='FluJE_navi_title'>Setting</span>" 
     567        var html = 
     568            "<div class='FluJE_navi_reset' evt='reset_setting'>reset</div><span class='FluJE_navi_title'>Setting</span>" 
    693569            + "<table class='FluJE_navi_table'><tbody>" 
    694570            + "<tr><th title='検索結果をクリック時に、現在表示している結果すべて消すか、クリックした結果のみ消すか'>表示中の結果を全消去</th>" 
     
    699575            + "<td><input class='FluJE_navi_inputtext' type='text' evt='modifier_key' value="+SETTINGS.modifier_key+"></td></tr>" 
    700576            + "<tr><th title='ポップアップ表示時のフェードイン,フェードアウトを有効にするか'>エフェクトを有効</th>" 
    701             + "<td><input type='checkbox' evt='check_effect' "+(function(){ if(SETTINGS['effect']) return 'checked'})()+"></td></tr>" 
     577            + "<td><input type='checkbox' evt='check_effect' "+(function(){ if(SETTINGS['enable_effect']) return 'checked'})()+"></td></tr>" 
    702578            + "<tr><th colspan=2 class='Flu_navi_setting_title'>[ Translation ]</th><td></td></tr>" 
    703579            + "<tr><th title='日英翻訳を有効にするか  チェックしていない場合は辞書引き/検索のみとなります'>日英翻訳を有効</th>" 
     
    716592            + "<tr><th title='ショートカットキーにより「Quick Look up」を起動します'>Quick Lookup</th>" 
    717593            + "<td><input class='FluJE_navi_inputtext' evt='QL_run' type='text' value="+SETTINGS.shortcutkey.QL_run+"></td></tr>" 
     594            + "<tr><th title='サイト個別のショートカットキーを初期化します'>Reset Site's ShortcutKey</th>" 
     595            + "<td><button class='FluJE_Navi_reset_button' evt='reset_site_shortcutkey' type='button'>Reset</button></td></tr>" 
    718596            + "</tbody></table>"; 
    719597        return html; 
    720598    }, 
    721599    getHTML: function() { 
    722         var html = "<div id='FluJE_navi_title'><span>Fast look up JP and EN</span><span id='FluJE_navi_version'>ver."+VERSION+"<span></div>" 
     600        var html = 
     601            "<div id='FluJE_navi_title'><span>Fast look up JP and EN</span><span id='FluJE_navi_version'>ver."+VERSION+"<span></div>" 
    723602            + "<div class='FluJE_navi_button' id='FluJE_navi_minimize_button' evt='minimize'></div>" 
    724603            + "<div class='FluJE_navi_button' id='FluJE_navi_maximize_button' evt='maximize'></div>" 
     
    790669                FluJE.showResult(tnode.value, [parseInt(tnode.name, 10)]); 
    791670                evt.stopPropagation(); 
    792             }, false); break; 
     671            }, true); break; 
    793672        } 
    794673        case 'chenge_site_num': { 
     
    817696        } 
    818697        case 'reset_setting': { 
    819             Setting.reset([['remove_result_all'],['enable_modifier_key'],['modifier_key'],['effect'],['translation','JtoE'],['translation','ja_chars'],['translation','EtoJ'],['translation','en_words'],['shortcutkey']]); 
     698            Setting.reset([['remove_result_all'],['enable_modifier_key'],['modifier_key'],['enable_effect'],['translation','JtoE'],['translation','ja_chars'],['translation','EtoJ'],['translation','en_words'],['shortcutkey']]); 
    820699            $('FluJE_navi_setting').innerHTML = this.createSettingHTML(); 
    821700            break; 
     
    851730        } 
    852731        case 'check_effect': { 
    853             Setting.set('effect', tnode.checked); 
     732            Setting.set('enable_effect', tnode.checked); 
    854733            break; 
    855734        } 
     
    917796            break; 
    918797        } 
     798        case 'reset_site_shortcutkey': { 
     799            SETTINGS.shortcutkey.site = []; 
     800            Navi.remove(); 
     801        } 
    919802        default: break; 
    920803        } 
     
    924807        var self = Navi; 
    925808        var navi = $('FluJE_navi'); 
    926         if(navi){ 
    927             if(navi.style.display != 'none'){ 
    928                 Effect.fadeio(navi); 
    929                 return; 
    930             }else{ 
    931                 Effect.fadeio(navi); 
    932                 return; 
    933             } 
    934         }else{ 
    935             if(loadStyle(self.loaded, self.initCSS(), self.toggle)){ 
    936                 self.loaded = true; 
    937                 return; 
    938             } 
     809        if(navi) 
     810            return Effect.fadeio(navi); 
     811        addStyle(self.initCSS(), self.loaded, function() { 
    939812            var navi = document.body.appendChild($N('div', {id:'FluJE_navi'})); 
    940813            navi.innerHTML = self.getHTML(); 
    941814            Effect.fadeio(navi); 
     815        }).next(function() { 
     816            self.loaded = true; 
     817 
    942818            //== Navi Event Listener == 
     819            var navi = $('FluJE_navi'); 
    943820            navi.addEventListener('keyup', function(evt){ 
    944821                self.events(evt, navi); 
     
    947824                self.events(evt, navi); 
    948825            }, false); 
    949         } 
     826        }); 
     827    }, 
     828    remove: function() { 
     829        var elm = $('FluJE_navi'); 
     830        if(elm) 
     831            document.body.removeChild(elm); 
    950832    } 
    951833} 
     
    997879            cicon.style.display = 'inline'; 
    998880            if(!root){ 
    999                 if(loadStyle(self.loaded, self.initCSS(), function(){ root = self.show(pNode, str); })){ 
     881                if(addStyle(self.initCSS(), self.loaded, function(){ root = self.show(pNode, str); })){ 
    1000882                    self.loaded = true; 
    1001883                    return; 
     
    1062944        Effect.fadeio(elm); 
    1063945    }, 
    1064     createNode: function(){ 
     946    createNode: function(func){ 
    1065947        var self = this; 
    1066948        var title = $N('span', null, 'Quick Lookup:'); 
     
    1086968            FluJE.showResult(input.value); 
    1087969        }); 
    1088         return div; 
    1089     }, 
    1090     run: function() { 
     970        return next(function() { func(div); }); 
     971    }, 
     972    run: function(e) { 
    1091973        var self = QLu; 
    1092974        if($('FluJE_quick_lookup')){ 
     
    1094976                $('FluJE_quick_lookup_input').select(); 
    1095977            }); 
    1096             return; 
    1097         } 
    1098         if(loadStyle(self.loaded, self.initCSS(), self.run)){ 
     978            return true; 
     979        } 
     980        addStyle(self.initCSS(), self.loaded, function() { 
     981            self.createNode(function(div) { 
     982                Effect.fadeio(div, function(){ 
     983                    $('FluJE_quick_lookup_input').select(); 
     984                }); 
     985            }); 
     986        }).next(function() { 
    1099987            self.loaded = true; 
    1100             return; 
    1101         } 
    1102         var div = self.createNode(); 
    1103         Effect.fadeio(div, function(){ 
    1104             $('FluJE_quick_lookup_input').select(); 
    1105988        }); 
    1106989    } 
     
    12201103        } 
    12211104        return array_new; 
    1222     }, 
     1105    } 
    12231106} 
    12241107 
     
    12851168                else kc = sp[evt.keyCode]; 
    12861169                if(m.length) { 
    1287                     if((evt[m[0]] && (m[1]==undefined ? true : evt[m[1]]) && (m[2]==undefined ? true : evt[m[2]])) && kc==keycode) { 
     1170                    if((evt[m[0]] && (m[1]==undefined ? true : evt[m[1]]) && (m[2]==undefined ? true : evt[m[2]])) && kc==keycode) 
    12881171                        func(evt); 
    1289                     } 
    12901172                } else { 
    12911173                    if(kc==keycode && !evt.shiftKey && !evt.altKey && !evt.ctrlKey && !evt.metaKey) { 
    1292                         if(global) func(evt); 
    1293                         else if(elm!=evt.target && /^(?:input|textarea)$/.test(evt.target.nodeName.toLowerCase())) return; 
     1174                        if(!global && elm!=evt.target && /^(?:input|textarea)$/.test(evt.target.nodeName.toLowerCase())) 
     1175                            return; 
     1176                        var f = true; 
     1177                        disableShortcutKey.forEach(function(val) { 
     1178                            if(location.href.match(val.url)) { 
     1179                                if(!val.xpath) f = false; 
     1180                                if($X(val.xpath, document.activeElement).length) f = false; 
     1181                            } 
     1182                        }); 
     1183                        if(!f && !global) return false; 
     1184                        func(evt); 
    12941185                        evt.preventDefault(); 
    1295                         func(evt); 
    12961186                    } 
    12971187                } 
     
    13391229} 
    13401230 
    1341 var checkInputLang = function(num, lang){ 
     1231//----------------------------------------------------------------------------- 
     1232// FluJE Libraries 
     1233//----------------------------------------------------------------------------- 
     1234var Message =  { 
     1235    init: function(str) { 
     1236        var elm = $("FluJE_FLASH_MESSAGE"); 
     1237        if(!elm) { 
     1238            elm = $N("div", {id:"FluJE_FLASH_MESSAGE"}); 
     1239            document.body.appendChild(elm); 
     1240            var css = 'div#FluJE_FLASH_MESSAGE div.FluJE_FLASH_NORMAL_MESSAGE{ position: fixed; bottom: 0; left: 0; right: 0; color: #9F9; font-weight: normal; font-size: 100%; text-align: center; background-color: #000; padding: 5px 0; margin: 0; opacity: 0.8; }' 
     1241                + 'div#FluJE_FLASH_MESSAGE div.FluJE_FLASH_ERROR_MESSAGE{ position: fixed; bottom: 0; left: 0; right: 0; color: #F99; font-weight: bold; font-size: 120%; text-align: center; background-color: #000; padding: 5px 0; margin: 0; opacity: 0.8; }'; 
     1242            addStyle(css); 
     1243        } 
     1244    }, 
     1245    create: function(str, param) { 
     1246        var elm = $("FluJE_FLASH_MESSAGE"); 
     1247        if(!elm) 
     1248            elm = $N("div", {id:"FluJE_FLASH_MESSAGE"}); 
     1249        if(param == "error") 
     1250            var msg = elm.appendChild($N('div', {class:'FluJE_FLASH_ERROR_MESSAGE'}, str)); 
     1251        else 
     1252            var msg = elm.appendChild($N('div', {class:'FluJE_FLASH_NORMAL_MESSAGE'}, str)); 
     1253        msg.style.opacity = 0; 
     1254        msg.addEventListener('click', function(e) { Message.remove(elm, true); }, false); 
     1255        return msg; 
     1256    }, 
     1257    remove: function(elm, force, evt) { 
     1258        if(force) { 
     1259            elm.parentNode.removeChild(elm); 
     1260            return true; 
     1261        } 
     1262        wait(5).next(function() { 
     1263            elm.parentNode.removeChild(elm); 
     1264        }); 
     1265    }, 
     1266    show: function(str, param) { 
     1267        if(!str) return; 
     1268        var self = Message; 
     1269        var elm = null; 
     1270        next(function() { 
     1271            self.init(str); 
     1272        }).next(function() { 
     1273            elm = self.create(str,param); 
     1274        }).next(function() { 
     1275            Effect.flash(elm); 
     1276        }).next(function() { 
     1277            self.remove(elm); 
     1278        }); 
     1279    } 
     1280} 
     1281//=== EFFECT === 
     1282var Effect = { 
     1283    flash: function(node){ 
     1284        var self = Effect; 
     1285        next(function() { 
     1286            self.fadein(node); 
     1287        }).wait(2).next(function() { 
     1288            self.fadeout(node); 
     1289        }); 
     1290    }, 
     1291    highlight: function(node, bool){ 
     1292        if(!SETTINGS.enable_effect) 
     1293            return false; 
     1294        if(bool){ 
     1295            next(function() { 
     1296                node.style.backgroundColor = '#CFC'; 
     1297            }).wait(0.5).next(function() { 
     1298                node.style.backgroundColor='#FFF'; 
     1299            }); 
     1300        }else{ 
     1301            next(function() { 
     1302                node.style.backgroundColor = '#F99'; 
     1303            }).wait(0.5).next(function() { 
     1304                node.style.backgroundColor='#FFF'; 
     1305            }); 
     1306        } 
     1307    }, 
     1308    smoothsize: function(node, original, fixed) { 
     1309        var self = this; 
     1310        if(original > fixed) { 
     1311            node.offsetHeight -= 5; 
     1312            orininal -= 5; 
     1313            setTimeout(function(){ 
     1314                self.smoothsize(node, original, fixed); 
     1315            }, 20); 
     1316        } 
     1317        return; 
     1318    }, 
     1319    fadeio: function(node, func) { 
     1320        var self = Effect; 
     1321        var o = node.style.opacity || node.getAttribute("opacity"); 
     1322        if (!o) { o = 0; node.style.opacity = 0; } 
     1323        if(o <= 0.5) { 
     1324            next(function() { 
     1325                self.fadein(node); 
     1326            }).next(function() { 
     1327                if(func) func(); 
     1328            }); 
     1329        }else { 
     1330            next(function() { 
     1331                self.fadeout(node); 
     1332            }).next(function() { 
     1333                if(func) func(); 
     1334            }); 
     1335        } 
     1336    }, 
     1337    fadein: function(node) { 
     1338        var self = this; 
     1339        node.style.opacity = 0; 
     1340        node.style.display = 'block'; 
     1341        if(SETTINGS.enable_effect){ 
     1342            loop(5, function(n) { 
     1343                node.style.opacity = (n+1) * 0.16; 
     1344                return wait(0.05); 
     1345            }); 
     1346        }else { 
     1347            node.style.opacity  = 0.8; 
     1348        } 
     1349    }, 
     1350    fadeout: function(node) { 
     1351        var self = this; 
     1352        node.style.opacity = 0.8; 
     1353        node.style.display = 'block'; 
     1354        if(SETTINGS.enable_effect){ 
     1355            loop(5, function(n) { 
     1356                node.style.opacity -= 0.16; 
     1357                return wait(0.05); 
     1358            }).next(function() { 
     1359                node.style.opacity = 0; 
     1360                node.style.display = 'none'; 
     1361            }); 
     1362        }else { 
     1363            node.style.opacity = 0; 
     1364            node.style.display = 'none'; 
     1365        } 
     1366    } 
     1367} 
     1368 
     1369function checkInputLang(num, lang) { 
    13421370    var site_lang = SITEINFO[num].lang; 
    13431371    switch(SITEINFO[num].lang) { 
     
    13921420    check: function(tnode, pnode, modifier_key) { 
    13931421        if(tnode.getAttribute('state')!='enable') return; 
    1394         tnode.getAttribute('name').match(/^([^:]+):(.*)$/); 
    1395         var lang = RegExp.$1; 
    1396         var type = RegExp.$2; 
     1422        var ary = []; 
     1423        ary = tnode.getAttribute('name').split(":"); 
     1424        var lang = ary[0], type = ary[1]; 
    13971425        var sort = (type == 'translation') ? 'translation' : 'lookup'; 
    13981426        var node_list = $X('.//td[@class=\"FluJE_site_num_'+lang+'\"][@sort=\"'+sort+'\"]', pnode); 
     
    14011429} 
    14021430 
    1403 var getIcon = function(num){ 
     1431function getIcon(num) { 
    14041432    if(num==undefined || SITEINFO.length<num) 
    14051433        return; 
     
    14101438} 
    14111439 
    1412 //=== load Fast look up JP and EN === 
    1413 if(document.body){ FluJE.onLoad(); } 
    1414  
    14151440//----------------------------------------------------------------------------- 
    14161441// Library 
    14171442//----------------------------------------------------------------------------- 
    1418  
    1419 //=== load CSS === 
    1420 function loadStyle(flag, css, func) { 
    1421     if(flag) 
    1422         return false; 
    1423     if(css) 
    1424         addStyle(css); 
    1425     if(func) { 
    1426         setTimeout(func, 100); 
    1427         return true; 
    1428     } 
    1429 } 
    14301443 
    14311444//=== log for debug (display in firebug) === 
     
    14351448 
    14361449//=== in place of gm_addstyle === 
    1437 function addStyle(css,id) { 
    1438     try{ 
    1439         var link = document.createElement('link'); 
    1440         link.rel = 'stylesheet'; 
    1441         link.href = 'data:text/css,' + escape(css); 
    1442         document.documentElement.childNodes[0].appendChild(link); 
    1443     }catch(e){ 
    1444         if(css) GM_addStyle(css); 
    1445     } 
     1450function addStyle(css, bool, func) { 
     1451    if(!bool) { 
     1452        try{ 
     1453            var link = document.createElement('link'); 
     1454            link.rel = 'stylesheet'; 
     1455            link.href = 'data:text/css,' + escape(css); 
     1456            document.documentElement.childNodes[0].appendChild(link); 
     1457        }catch(e){ 
     1458            if(css) GM_addStyle(css); 
     1459        } 
     1460    } 
     1461    return next(func); 
    14461462} 
    14471463 
     
    15141530} 
    15151531 
     1532// JSDeferred 0.2.2 (c) Copyright (c) 2007 cho45 ( www.lowreal.net ) 
     1533// See http://coderepos.org/share/wiki/JSDeferred 
     1534function Deferred () { return (this instanceof Deferred) ? this.init() : new Deferred() } 
     1535Deferred.ok = function (x) { return x }; 
     1536Deferred.ng = function (x) { throw  x }; 
     1537Deferred.prototype = { 
     1538    init : function () { 
     1539        this._next = null; 
     1540        this.callback = { 
     1541            ok: Deferred.ok, 
     1542            ng: Deferred.ng 
     1543        }; 
     1544        return this; 
     1545    }, 
     1546 
     1547    next  : function (fun) { return this._post("ok", fun) }, 
     1548    error : function (fun) { return this._post("ng", fun) }, 
     1549    call  : function (val) { return this._fire("ok", val) }, 
     1550    fail  : function (err) { return this._fire("ng", err) }, 
     1551 
     1552    cancel : function () { 
     1553        (this.canceller || function () {})(); 
     1554        return this.init(); 
     1555    }, 
     1556 
     1557    _post : function (okng, fun) { 
     1558        this._next =  new Deferred(); 
     1559        this._next.callback[okng] = fun; 
     1560        return this._next; 
     1561    }, 
     1562 
     1563    _fire : function (okng, value) { 
     1564        var next = "ok"; 
     1565        try { 
     1566            value = this.callback[okng].call(this, value); 
     1567        } catch (e) { 
     1568            next  = "ng"; 
     1569            value = e; 
     1570        } 
     1571        if (value instanceof Deferred) { 
     1572            value._next = this._next; 
     1573        } else { 
     1574            if (this._next) this._next._fire(next, value); 
     1575        } 
     1576        return this; 
     1577    } 
     1578}; 
     1579 
     1580Deferred.parallel = function (dl) { 
     1581    var ret = new Deferred(), values = {}, num = 0; 
     1582    for (var i in dl) if (dl.hasOwnProperty(i)) (function (d, i) { 
     1583        d.next(function (v) { 
     1584            values[i] = v; 
     1585            if (--num <= 0) { 
     1586                if (dl instanceof Array) { 
     1587                    values.length = dl.length; 
     1588                    values = Array.prototype.slice.call(values, 0); 
     1589                } 
     1590                ret.call(values); 
     1591            } 
     1592        }).error(function (e) { 
     1593            ret.fail(e); 
     1594        }); 
     1595        num++; 
     1596    })(dl[i], i); 
     1597 
     1598    if (!num) Deferred.next(function () { ret.call() }); 
     1599    ret.canceller = function () { 
     1600        for (var i in dl) if (dl.hasOwnProperty(i)) { 
     1601            dl[i].cancel(); 
     1602        } 
     1603    }; 
     1604    return ret; 
     1605}; 
     1606 
     1607Deferred.wait = function (n) { 
     1608    var d = new Deferred(), t = new Date(); 
     1609    var id = setTimeout(function () { 
     1610        clearTimeout(id); 
     1611        d.call((new Date).getTime() - t.getTime()); 
     1612    }, n * 1000); 
     1613    d.canceller = function () { try { clearTimeout(id) } catch (e) {} }; 
     1614    return d; 
     1615}; 
     1616 
     1617Deferred.next_default = function (fun) { 
     1618    var d = new Deferred(); 
     1619    var id = setTimeout(function () { clearTimeout(id); d.call() }, 0); 
     1620    d.canceller = function () { try { clearTimeout(id) } catch (e) {} }; 
     1621    if (fun) d.callback.ok = fun; 
     1622    return d; 
     1623}; 
     1624Deferred.next_faster_way_Image = ((typeof(Image) != "undefined") && document.addEventListener) && function (fun) { 
     1625    var d = new Deferred(); 
     1626    var img = new Image(); 
     1627    var handler = function () { 
     1628        d.canceller(); 
     1629        d.call(); 
     1630    }; 
     1631    img.addEventListener("load", handler, false); 
     1632    img.addEventListener("error", handler, false); 
     1633    d.canceller = function () { 
     1634        img.removeEventListener("load", handler, false); 
     1635        img.removeEventListener("error", handler, false); 
     1636    }; 
     1637    img.src = "data:,/ _ / X"; 
     1638    if (fun) d.callback.ok = fun; 
     1639    return d; 
     1640}; 
     1641Deferred.next_faster_way_readystatechange = (!window.opera && /\bMSIE\b/.test(navigator.userAgent)) && function (fun) { 
     1642    var d = new Deferred(); 
     1643    var t = new Date().getTime(); 
     1644    if (t - arguments.callee._prev_timeout_called < 150) { 
     1645        var cancel = false; 
     1646        var script = document.createElement("script"); 
     1647        script.type = "text/javascript"; 
     1648        script.src  = "javascript:"; 
     1649        script.onreadystatechange = function () { 
     1650            if (!cancel) { 
     1651                d.canceller(); 
     1652                d.call(); 
     1653            } 
     1654        }; 
     1655        d.canceller = function () { 
     1656            if (!cancel) { 
     1657                cancel = true; 
     1658                script.onreadystatechange = null; 
     1659                document.body.removeChild(script); 
     1660            } 
     1661        }; 
     1662        document.body.appendChild(script); 
     1663    } else { 
     1664        arguments.callee._prev_timeout_called = t; 
     1665        var id = setTimeout(function () { clearTimeout(id); d.call() }, 0); 
     1666        d.canceller = function () { try { clearTimeout(id) } catch (e) {} }; 
     1667    } 
     1668    if (fun) d.callback.ok = fun; 
     1669    return d; 
     1670}; 
     1671Deferred.next = Deferred.next_faster_way_Image || 
     1672    Deferred.next_faster_way_readystatechange || 
     1673    Deferred.next_default; 
     1674 
     1675Deferred.call = function (f, args) { 
     1676    args = Array.prototype.slice.call(arguments); 
     1677    f = args.shift(); 
     1678    return Deferred.next(function () { 
     1679        return f.apply(this, args); 
     1680    }); 
     1681}; 
     1682 
     1683Deferred.loop = function (n, fun) { 
     1684    var o = { 
     1685        begin : n.begin || 0, 
     1686        end   : (typeof n.end == "number") ? n.end : n - 1, 
     1687        step  : n.step  || 1, 
     1688        last  : false, 
     1689        prev  : null 
     1690    }; 
     1691    var ret, step = o.step; 
     1692    return Deferred.next(function () { 
     1693        function _loop (i) { 
     1694            if (i <= o.end) { 
     1695                if ((i + step) > o.end) { 
     1696                    o.last = true; 
     1697                    o.step = o.end - i + 1; 
     1698                } 
     1699                o.prev = ret; 
     1700                ret = fun.call(this, i, o); 
     1701                if (ret instanceof Deferred) { 
     1702                    return ret.next(function (r) { 
     1703                        ret = r; 
     1704                        return Deferred.call(_loop, i + step); 
     1705                    }); 
     1706                } else { 
     1707                    return Deferred.call(_loop, i + step); 
     1708                } 
     1709            } else { 
     1710                return ret; 
     1711            } 
     1712        } 
     1713        return (o.begin <= o.end) ? Deferred.call(_loop, o.begin) : null; 
     1714    }); 
     1715}; 
     1716 
     1717Deferred.register = function (name, fun) { 
     1718    this.prototype[name] = function () { 
     1719        return this.next(Deferred.wrap(fun).apply(null, arguments)); 
     1720    }; 
     1721}; 
     1722 
     1723Deferred.wrap = function (dfun) { 
     1724    return function () { 
     1725        var a = arguments; 
     1726        return function () { 
     1727            return dfun.apply(null, a); 
     1728        }; 
     1729    }; 
     1730}; 
     1731 
     1732Deferred.register("loop", Deferred.loop); 
     1733Deferred.register("wait", Deferred.wait); 
     1734 
     1735Deferred.define = function (obj, list) { 
     1736    if (!list) list = ["parallel", "wait", "next", "call", "loop"]; 
     1737    if (!obj)  obj  = (function getGlobal () { return this })(); 
     1738    for (var i = 0; i < list.length; i++) { 
     1739        var n = list[i]; 
     1740        obj[n] = Deferred[n]; 
     1741    } 
     1742    return Deferred; 
     1743}; 
     1744Deferred.define(); 
     1745 
     1746//=== HTML -> DOM === 
     1747function convertToHTMLDocument(html) { 
     1748    var xml_str = [ 
     1749        '<?xml version="1.0"?>', 
     1750        '<stylesheet version="1.0" xmlns="http://www.w3.org/1999/XSL/Transform">', 
     1751        '<output method="html"/>', 
     1752        '</stylesheet>' 
     1753    ].join('\n'); 
     1754    var xsl = (new DOMParser()).parseFromString(xml_str, 'text/xml'); 
     1755    var xsltp = new XSLTProcessor(); 
     1756    xsltp.importStylesheet(xsl); 
     1757    var doc = xsltp.transformToDocument(document.implementation.createDocument("", "", null)); 
     1758    doc.appendChild(doc.createElement("html")); 
     1759    var range = doc.createRange(); 
     1760    range.selectNodeContents(doc.documentElement); 
     1761    doc.documentElement.appendChild(range.createContextualFragment(html)); 
     1762    return doc; 
     1763} 
     1764 
    15161765//=== extend version of $X === 
    15171766/* $X(exp); 
     
    15221771function $X (exp, context, type /* want type */) { 
    15231772    if (arguments.callee.forceRelative || navigator.userAgent.indexOf("Safari/523.12") != -1) 
    1524         exp = exp.replace(/id\(\s*(["'])([^"']+)\1\s*\)/g, '//*[@id="$2"]'); 
    1525         if (arguments.callee.forceRelative) 
    1526             exp = exp.indexOf("(//") == 0 
     1773        exp = exp.replace(/id\(\s*([\"\'])([^\"\']+)\1\s*\)/g, '//*[@id="$2"]'); 
     1774    if (arguments.callee.forceRelative) 
     1775        exp = exp.indexOf("(//") == 0 
    15271776        ? "(.//" + exp.substring(3) 
    15281777        : (exp[0] == "/" ? "." : "./") + exp; 
    15291778    if (typeof context == "function") { 
    1530         type    = context; 
     1779        type = context; 
    15311780        context = null; 
    15321781    } 
     
    15341783    exp = (context.ownerDocument || context).createExpression(exp, function (prefix) { 
    15351784        return document.createNSResolver((context.ownerDocument == null ? context 
    1536                                           : context.ownerDocument).documentElement) 
     1785                                          : context.ownerDocument).documentElement) 
    15371786            .lookupNamespaceURI(prefix) || document.documentElement.namespaceURI; 
    15381787    }); 
    1539  
    15401788    switch (type) { 
    15411789    case String: 
     
    15741822} 
    15751823 
    1576 //=== HTML -> DOM === 
    1577 function convertToHTMLDocument(html) { 
    1578     var xml_str = [ 
    1579         '<?xml version="1.0"?>', 
    1580         '<stylesheet version="1.0" xmlns="http://www.w3.org/1999/XSL/Transform">', 
    1581         '<output method="html"/>', 
    1582         '</stylesheet>' 
    1583     ].join('\n'); 
    1584     var xsl = (new DOMParser()).parseFromString(xml_str, 'text/xml'); 
    1585     var xsltp = new XSLTProcessor(); 
    1586     xsltp.importStylesheet(xsl); 
    1587  
    1588     var doc = xsltp.transformToDocument(document.implementation.createDocument("", "", null)); 
    1589     doc.appendChild(doc.createElement("html")); 
    1590  
    1591     var range = doc.createRange(); 
    1592     range.selectNodeContents(doc.documentElement); 
    1593     doc.documentElement.appendChild(range.createContextualFragment(html)); 
    1594     return doc; 
    1595 } 
     1824//----------------------------------------------------------------------------- 
     1825// Load script. 
     1826//----------------------------------------------------------------------------- 
     1827if(document.body){ 
     1828    //== GM_getValue == 
     1829    Setting.load(); 
     1830    SITEINFO = FluJE.getSiteInfo(); 
     1831    //== Userscript command == 
     1832    GM_registerMenuCommand('Fast look up JP and EN - reset setting', function(){ 
     1833        Setting.reset() 
     1834        Message.show("Reset all settings."); 
     1835    }); 
     1836    //== Event == 
     1837    ShortcutKey.add(window, SETTINGS.shortcutkey.navi_toggle, Navi.toggle); 
     1838    ShortcutKey.add(window, SETTINGS.shortcutkey.close_all, FluJE.allRemove, true); 
     1839    ShortcutKey.add(window, SETTINGS.shortcutkey.QL_run, QLu.run); 
     1840    if(SETTINGS.shortcutkey.site.length){ 
     1841        var keys = []; 
     1842        if(SETTINGS.shortcutkey.site.length) { 
     1843            SETTINGS.shortcutkey.site.forEach(function(v,i){ 
     1844                var match = false; 
     1845                keys.forEach(function(key, idx){ 
     1846                    if(key.shortcutkey == v.shortcutkey) { 
     1847                        keys[idx].id.push(v.id); 
     1848                        match = true; 
     1849                    } 
     1850                }); 
     1851                if(!match) 
     1852                    keys.push({shortcutkey:v.shortcutkey, id:[v.id]}); 
     1853            }); 
     1854        } 
     1855        if(keys.length) { 
     1856            keys.forEach(function(key, idx){ 
     1857                ShortcutKey.add(window, key.shortcutkey, function(evt){ 
     1858                    FluJE.selectionEvent(evt, key.id, true); 
     1859                }, false); 
     1860            }); 
     1861        } 
     1862    } 
     1863    window.addEventListener("mouseup", FluJE.selectionEvent, true); 
     1864    window.addEventListener('click', FluJE.removeResult, false); 
     1865    GM_registerMenuCommand('Fast look up JP and EN - import siteinfo', function(){ 
     1866        next(function() { 
     1867            FluJE.importSiteInfo(); 
     1868            Message.show("Imported SITEINFO."); 
     1869        }).next(function() { 
     1870            SETTINGS.shortcutkey.site = []; 
     1871            SETTINGS.lookup = Setting._default.lookup; 
     1872            SETTINGS.translation = Setting._default.translation; 
     1873            Navi.remove(); 
     1874        }).next(function() { 
     1875            wait(2).next(function() { 
     1876                Message.show("Reset site shortcutkey and selected site."); 
     1877            }); 
     1878            Setting.save(); 
     1879        }); 
     1880    }); 
     1881    if(SETTINGS.enable_wheel_button) { 
     1882        window.addEventListener('click', function(e){ 
     1883            if(e.button==1) 
     1884                FluJE.selectionEvent(e, false, true); 
     1885        }, false); 
     1886    } 
     1887}