Διαφορά μεταξύ των αναθεωρήσεων του «MediaWiki:Common.js»

Από PWMN
Μετάβαση στην πλοήγηση Πήδηση στην αναζήτηση
(New page: →‎P Wiki MN Support by korkakak: →‎Source for wysiwyg editor: →‎<pre><nowiki>: // version info window.wikEdProgramVersion = '0.9.44f'; window.wikEdProgramDate = 'September ...)
 
Γραμμή 2: Γραμμή 2:
  
 
/* Source for wysiwyg editor */
 
/* Source for wysiwyg editor */
 +
/* <pre><nowiki> */
  
/* <pre><nowiki> */
 
 
 
// version info
 
// version info
 
window.wikEdProgramVersion = '0.9.44f';
 
window.wikEdProgramVersion = '0.9.44f';
 
window.wikEdProgramDate    = 'September 24, 2007';
 
window.wikEdProgramDate    = 'September 24, 2007';
+
 
 
/*
 
/*
+
 
 
Program description and Greasemonkey metadata
 
Program description and Greasemonkey metadata
+
 
 
wikEd is a full-featured JavaScript in-browser editor for Wikipedia and other MediaWiki edit pages.
 
wikEd is a full-featured JavaScript in-browser editor for Wikipedia and other MediaWiki edit pages.
 
The program works currently ONLY for Mozilla-based browsers (Mozilla, Mozilla Firefox, and Mozilla SeaMonkey)
 
The program works currently ONLY for Mozilla-based browsers (Mozilla, Mozilla Firefox, and Mozilla SeaMonkey)
 
The code has to be saved as UTF-8 in your editor to preserve Unicode characters like ♥ (heart)
 
The code has to be saved as UTF-8 in your editor to preserve Unicode characters like ♥ (heart)
+
 
 
// ==UserScript==
 
// ==UserScript==
 
// @name        wikEd
 
// @name        wikEd
Γραμμή 29: Γραμμή 28:
 
// @license    Released into the public domain
 
// @license    Released into the public domain
 
// ==/UserScript==
 
// ==/UserScript==
+
 
 
== Installation on a certain MediaWiki wiki (using monobook.js) ==
 
== Installation on a certain MediaWiki wiki (using monobook.js) ==
+
 
 
1. PLEASE DO NOT COPY THE WHOLE PROGRAM (in order to get the frequent updates and bug fixes and to save disk space)
 
1. PLEASE DO NOT COPY THE WHOLE PROGRAM (in order to get the frequent updates and bug fixes and to save disk space)
 
2. See http://en.wikipedia.org/wiki/User:Cacycle/wikEd for more detailed instructions
 
2. See http://en.wikipedia.org/wiki/User:Cacycle/wikEd for more detailed instructions
Γραμμή 37: Γραμμή 36:
 
4. Click SHIFT-Reload to update to the newest version
 
4. Click SHIFT-Reload to update to the newest version
 
5. Optional: customize the program by adding user settings to your monobook.je page
 
5. Optional: customize the program by adding user settings to your monobook.je page
+
 
 
// ---- START wikEd INSTALLATION CODE ----
 
// ---- START wikEd INSTALLATION CODE ----
+
 
 
// install [[User:Cacycle/wikEd]] in-browser text editor
 
// install [[User:Cacycle/wikEd]] in-browser text editor
 
document.write('<script type="text/javascript" src="'
 
document.write('<script type="text/javascript" src="'
 
+ 'http://en.wikipedia.org/w/index.php?title=User:Cacycle/wikEd.js'
 
+ 'http://en.wikipedia.org/w/index.php?title=User:Cacycle/wikEd.js'
 
+ '&action=raw&ctype=text/javascript"></script>');
 
+ '&action=raw&ctype=text/javascript"></script>');
+
 
 
// ---- END wikEd INSTALLATION CODE ----
 
// ---- END wikEd INSTALLATION CODE ----
+
 
 
== General installation for all MediaWiki wikis (using Greasemonkey) ==
 
== General installation for all MediaWiki wikis (using Greasemonkey) ==
+
 
 
1. Install Greasemonkey for Firefox and SeaMonkey from:
 
1. Install Greasemonkey for Firefox and SeaMonkey from:
 
     https://addons.mozilla.org/en-US/firefox/addon/748
 
     https://addons.mozilla.org/en-US/firefox/addon/748
Γραμμή 55: Γραμμή 54:
 
3. Optional: customize the program by adding user settings to the Greasemonkey customization section below
 
3. Optional: customize the program by adding user settings to the Greasemonkey customization section below
 
     (these settings will be overwritten by updates!)
 
     (these settings will be overwritten by updates!)
+
 
 
*/
 
*/
+
 
 
//
 
//
 
// Greasemonkey customization section: add customization settings here
 
// Greasemonkey customization section: add customization settings here
 
//  example: window.wikEdAutoUpdate = false; window.wikEdAutoUpdateHours = 7 * 24;
 
//  example: window.wikEdAutoUpdate = false; window.wikEdAutoUpdateHours = 7 * 24;
 
//
 
//
+
 
+
 
 
//
 
//
 
// WikEdInitGlobalsConfigs: initialize user configurable variables
 
// WikEdInitGlobalsConfigs: initialize user configurable variables
 
//
 
//
+
 
 
window.WikEdInitGlobalConfigs = function() {
 
window.WikEdInitGlobalConfigs = function() {
+
 
 
// user readable texts, copy changes to http://en.wikipedia.org/wiki/User:Cacycle/wikEd_international_en.js, also defined in wikEdDiff.js
 
// user readable texts, copy changes to http://en.wikipedia.org/wiki/User:Cacycle/wikEd_international_en.js, also defined in wikEdDiff.js
 
window.wikEdText = window.wikEdText || [];
 
window.wikEdText = window.wikEdText || [];
+
 
// WikedInitText: define built-in user interface texts
 
// WikedInitText: define built-in user interface texts
 
window.WikedInitText = function() {
 
window.WikedInitText = function() {
 
WikEdInitObject(wikEdText, {
 
WikEdInitObject(wikEdText, {
+
 
// logo
 
// logo
 
'wikEdLogo alt':              'wikEd',
 
'wikEdLogo alt':              'wikEd',
Γραμμή 86: Γραμμή 85:
 
'wikEdLogo disabled alt':      '(wikEd)',
 
'wikEdLogo disabled alt':      '(wikEd)',
 
'wikEdLogo disabled title':    'Disabled - wikEd {wikEdProgramVersion} ({wikEdProgramDate}) Click to enable',
 
'wikEdLogo disabled title':    'Disabled - wikEd {wikEdProgramVersion} ({wikEdProgramDate}) Click to enable',
+
 
// top jumper
 
// top jumper
 
'wikEdScrollToEdit4 alt':      'Scroll to edit',
 
'wikEdScrollToEdit4 alt':      'Scroll to edit',
 
'wikEdScrollToEdit4 title':    'Scroll to edit field',
 
'wikEdScrollToEdit4 title':    'Scroll to edit field',
+
 
// button bar grip titles
 
// button bar grip titles
 
'wikEdGripFormat title':      'Formatting buttons (click to hide or show)',
 
'wikEdGripFormat title':      'Formatting buttons (click to hide or show)',
Γραμμή 98: Γραμμή 97:
 
'wikEdGripCustom2 title':      'Custom buttons (click to hide or show)',
 
'wikEdGripCustom2 title':      'Custom buttons (click to hide or show)',
 
'wikEdGripControl title':      'wikEd control buttons (click to hide or show)',
 
'wikEdGripControl title':      'wikEd control buttons (click to hide or show)',
+
 
// formatting buttons, top row
 
// formatting buttons, top row
 
'wikEdUndo alt':              'Undo',
 
'wikEdUndo alt':              'Undo',
Γραμμή 127: Γραμμή 126:
 
'wikEdRedoAll alt':            'Redo all',
 
'wikEdRedoAll alt':            'Redo all',
 
'wikEdRedoAll title':          'Redo all changes',
 
'wikEdRedoAll title':          'Redo all changes',
+
 
// formatting buttons, bottom row
 
// formatting buttons, bottom row
 
'wikEdWikiLink alt':          'Link',
 
'wikEdWikiLink alt':          'Link',
Γραμμή 153: Γραμμή 152:
 
'wikEdTextify alt':            'Textify',
 
'wikEdTextify alt':            'Textify',
 
'wikEdTextify title':          'Convert pasted content to plain text, update highlighting',
 
'wikEdTextify title':          'Convert pasted content to plain text, update highlighting',
+
 
// find and replace buttons, top row
 
// find and replace buttons, top row
 
'wikEdFindAll alt':            'Find all',
 
'wikEdFindAll alt':            'Find all',
Γραμμή 166: Γραμμή 165:
 
'wikEdJumpNext alt':          'Selected next',
 
'wikEdJumpNext alt':          'Selected next',
 
'wikEdJumpNext title':        'Find the selected text forwards',
 
'wikEdJumpNext title':        'Find the selected text forwards',
+
 
// find and replace buttons, bottom row
 
// find and replace buttons, bottom row
 
'wikEdReplaceAll alt':        'Replace all',
 
'wikEdReplaceAll alt':        'Replace all',
Γραμμή 181: Γραμμή 180:
 
'wikEdFindAhead alt':          'Find ahead',
 
'wikEdFindAhead alt':          'Find ahead',
 
'wikEdFindAhead title':        'Find ahead as you type (case-insensitive non-regexp search)',
 
'wikEdFindAhead title':        'Find ahead as you type (case-insensitive non-regexp search)',
+
 
// fix buttons, top row
 
// fix buttons, top row
 
'wikEdFixBasic alt':          'Fix basic',
 
'wikEdFixBasic alt':          'Fix basic',
Γραμμή 195: Γραμμή 194:
 
'wikEdFixRegExTypo alt':      'Fix typos',
 
'wikEdFixRegExTypo alt':      'Fix typos',
 
'wikEdFixRegExTypo title':    'Fix typos using the AutoWikiBrowser RegExTypoFixer rules',
 
'wikEdFixRegExTypo title':    'Fix typos using the AutoWikiBrowser RegExTypoFixer rules',
+
 
// fix buttons, bottom row
 
// fix buttons, bottom row
 
'wikEdFixDashes alt':          'Fix dashes',
 
'wikEdFixDashes alt':          'Fix dashes',
Γραμμή 207: Γραμμή 206:
 
'wikEdFixUnits alt':          'Fix units',
 
'wikEdFixUnits alt':          'Fix units',
 
'wikEdFixUnits title':        'Fix units',
 
'wikEdFixUnits title':        'Fix units',
+
 
// wikEd control buttons, top row
 
// wikEd control buttons, top row
 
'wikEdRefHide alt':            'Hide <ref>',
 
'wikEdRefHide alt':            'Hide <ref>',
Γραμμή 219: Γραμμή 218:
 
'wikEdScrollToEdit alt':      'Scroll to edit',
 
'wikEdScrollToEdit alt':      'Scroll to edit',
 
'wikEdScrollToEdit title':    'Scroll to edit field',
 
'wikEdScrollToEdit title':    'Scroll to edit field',
+
 
// wikEd control buttons, bottom row
 
// wikEd control buttons, bottom row
 
'wikEdUseWikEd alt':          'Use wikEd',
 
'wikEdUseWikEd alt':          'Use wikEd',
Γραμμή 235: Γραμμή 234:
 
'wikEdFullScreen alt':        'Fullscreen',
 
'wikEdFullScreen alt':        'Fullscreen',
 
'wikEdFullScreen title':      'Toggle the fullscreen mode',
 
'wikEdFullScreen title':      'Toggle the fullscreen mode',
+
 
// summary buttons
 
// summary buttons
 
'wikEdClearSummary alt':      'Clear summary',
 
'wikEdClearSummary alt':      'Clear summary',
Γραμμή 246: Γραμμή 245:
 
],
 
],
 
'wikEdSummaryUsing':          '…using [[en:User:Cacycle/wikEd|wikEd]]',
 
'wikEdSummaryUsing':          '…using [[en:User:Cacycle/wikEd|wikEd]]',
+
 
// button title acceskey  
 
// button title acceskey  
 
'alt-shift':                  'alt-shift-',
 
'alt-shift':                  'alt-shift-',
+
 
// submit buttons
 
// submit buttons
 
'wikEdLocalPreviewImg alt':    'Preview below',
 
'wikEdLocalPreviewImg alt':    'Preview below',
Γραμμή 256: Γραμμή 255:
 
'wikEdLocalDiff title':        'Show current changes below',
 
'wikEdLocalDiff title':        'Show current changes below',
 
'wikEdHelpPageLink':          ' | <a href="http://en.wikipedia.org/wiki/User:Cacycle/wikEd_help" target="helpwindow">wikEd help</a>',
 
'wikEdHelpPageLink':          ' | <a href="http://en.wikipedia.org/wiki/User:Cacycle/wikEd_help" target="helpwindow">wikEd help</a>',
+
 
// preview and changes buttons, top
 
// preview and changes buttons, top
 
'wikEdClose alt':              'Close',
 
'wikEdClose alt':              'Close',
Γραμμή 264: Γραμμή 263:
 
'wikEdScrollToEdit2 alt':      'Scroll to edit',
 
'wikEdScrollToEdit2 alt':      'Scroll to edit',
 
'wikEdScrollToEdit2 title':    'Scroll to edit field',
 
'wikEdScrollToEdit2 title':    'Scroll to edit field',
+
 
// preview and changes buttons, bottom
 
// preview and changes buttons, bottom
 
'wikEdClose alt':              'Close',
 
'wikEdClose alt':              'Close',
Γραμμή 272: Γραμμή 271:
 
'wikEdScrollToEdit3 alt':      'Scroll to edit',
 
'wikEdScrollToEdit3 alt':      'Scroll to edit',
 
'wikEdScrollToEdit3 title':    'Scroll to edit field',
 
'wikEdScrollToEdit3 title':    'Scroll to edit field',
+
 
// formatting functions
 
// formatting functions
 
'image filename':              'filename',
 
'image filename':              'filename',
Γραμμή 280: Γραμμή 279:
 
'table cell':                  'cell',
 
'table cell':                  'cell',
 
'redirect article link':      'article link',
 
'redirect article link':      'article link',
+
 
// fixing functions
 
// fixing functions
 
'External links':              'External links',
 
'External links':              'External links',
 
'See also':                    'See also',
 
'See also':                    'See also',
 
'References':                  'References',
 
'References':                  'References',
+
 
// language specific wiki code
 
// language specific wiki code
 
'wikicode Image':              'Image',
 
'wikicode Image':              'Image',
Γραμμή 291: Γραμμή 290:
 
'wikicode Template':          'Template',
 
'wikicode Template':          'Template',
 
'wikEdReferencesSection':      '\n== References ==\n\n<div class="references-small">\n<references/>\n</div>\n',
 
'wikEdReferencesSection':      '\n== References ==\n\n<div class="references-small">\n<references/>\n</div>\n',
+
 
// shortened button texts
 
// shortened button texts
 
'shortenedPreview':            'Preview',
 
'shortenedPreview':            'Preview',
 
'shortenedChanges':            'Changes',
 
'shortenedChanges':            'Changes',
+
 
// follow link popup
 
// follow link popup
 
'followLink':                  '(Ctrl-click)'
 
'followLink':                  '(Ctrl-click)'
 
});
 
});
 
}
 
}
+
 
// use local copies of images for testing (set to true in local copy of edit page), also defined in wikEdDiff.js
 
// use local copies of images for testing (set to true in local copy of edit page), also defined in wikEdDiff.js
 
if (typeof(wikEdUseLocalImages) == 'undefined') { window.wikEdUseLocalImages = false; }
 
if (typeof(wikEdUseLocalImages) == 'undefined') { window.wikEdUseLocalImages = false; }
+
 
// path to local images for testing, also defined in wikEdDiff.js
 
// path to local images for testing, also defined in wikEdDiff.js
 
window.wikEdImagePathLocal = window.wikEdImagePathLocal || 'file:///D:/wikEd/images/';
 
window.wikEdImagePathLocal = window.wikEdImagePathLocal || 'file:///D:/wikEd/images/';
+
 
// path to images, also defined in wikEdDiff.js
 
// path to images, also defined in wikEdDiff.js
 
window.wikEdImagePath = window.wikEdImagePath || 'http://upload.wikimedia.org/wikipedia/commons/';
 
window.wikEdImagePath = window.wikEdImagePath || 'http://upload.wikimedia.org/wikipedia/commons/';
+
 
// image filenames, also defined in wikEdDiff.js
 
// image filenames, also defined in wikEdDiff.js
 
window.wikEdImage = window.wikEdImage || [];
 
window.wikEdImage = window.wikEdImage || [];
+
 
// WikedInitImage: define built-in image URLs
 
// WikedInitImage: define built-in image URLs
 
window.WikedInitImage = function() {
 
window.WikedInitImage = function() {
Γραμμή 395: Γραμμή 394:
 
});
 
});
 
}
 
}
+
 
// edit-frame css rules
 
// edit-frame css rules
 
window.wikEdFrameCSS = window.wikEdFrameCSS || [];
 
window.wikEdFrameCSS = window.wikEdFrameCSS || [];
+
 
// WikedInitFrameCSS: define built-in edit frame css
 
// WikedInitFrameCSS: define built-in edit frame css
 
window.WikedInitFrameCSS = function() {
 
window.WikedInitFrameCSS = function() {
 
WikEdInitObject(wikEdFrameCSS, {
 
WikEdInitObject(wikEdFrameCSS, {
+
 
// frame body
 
// frame body
 
'.wikedFrameBody':    'background: #FFFFFF; margin: 0px; padding: 0.2em; overflow: -moz-scrollbars-vertical; overflow-x: auto; font-family: monospace;',
 
'.wikedFrameBody':    'background: #FFFFFF; margin: 0px; padding: 0.2em; overflow: -moz-scrollbars-vertical; overflow-x: auto; font-family: monospace;',
+
 
// syntax highlighting
 
// syntax highlighting
 
'.wikEdBlock':        'background-color: #e8e8e8;',
 
'.wikEdBlock':        'background-color: #e8e8e8;',
Γραμμή 422: Γραμμή 421:
 
'.wikEdNowiki':      'background-color: #e8e8e8;',
 
'.wikEdNowiki':      'background-color: #e8e8e8;',
 
'.wikEdRGB':          '',
 
'.wikEdRGB':          '',
+
 
// horizontal rule
 
// horizontal rule
 
'.wikEdHR':          'background-color: #d0d0d0;',
 
'.wikEdHR':          'background-color: #d0d0d0;',
 
'.wikEdHRInline':    'background-color: #d0d0d0;',
 
'.wikEdHRInline':    'background-color: #d0d0d0;',
+
 
// wiki code
 
// wiki code
 
'.wikEdWiki':        'color: #0000e0;',
 
'.wikEdWiki':        'color: #0000e0;',
 
'.wikEdWikiRedir':    'color: #0000e0; background-color: #ffffff; font-weight: bold;',
 
'.wikEdWikiRedir':    'color: #0000e0; background-color: #ffffff; font-weight: bold;',
 
'.wikEdMagic':        'color: #0000e0; background-color: #e0e0e0; font-weight: bold;',
 
'.wikEdMagic':        'color: #0000e0; background-color: #e0e0e0; font-weight: bold;',
+
 
// headings
 
// headings
 
'.wikEdHeading':      'background-color: #e0e0e0; font-weight: bold;',
 
'.wikEdHeading':      'background-color: #e0e0e0; font-weight: bold;',
 
'.wikEdHeadingWp':    'background-color: #d8e0ff; font-weight: bold;',
 
'.wikEdHeadingWp':    'background-color: #d8e0ff; font-weight: bold;',
+
 
// tables
 
// tables
 
'.wikEdTableBlock':  'background-color: #e8e8e8;',
 
'.wikEdTableBlock':  'background-color: #e8e8e8;',
 
'.wikEdTableLine':    'background-color: #e8e8e8;',
 
'.wikEdTableLine':    'background-color: #e8e8e8;',
 
'.wikEdTableTag':    'background-color: #e8e8e8; color: #0000e0;',
 
'.wikEdTableTag':    'background-color: #e8e8e8; color: #0000e0;',
+
 
// list
 
// list
 
'.wikEdListBlock':    'background-color: #e8e8e8;',
 
'.wikEdListBlock':    'background-color: #e8e8e8;',
 
'.wikEdListLine':    'background-color: #f0f0f0',
 
'.wikEdListLine':    'background-color: #f0f0f0',
 
'.wikEdListTag':      'background-color: #e8e8e8; color: #0000e0; font-weight: bold;',
 
'.wikEdListTag':      'background-color: #e8e8e8; color: #0000e0; font-weight: bold;',
+
 
// space-pre
 
// space-pre
 
'.wikEdSpaceBlock':  'background-color: #e8e8e8;',
 
'.wikEdSpaceBlock':  'background-color: #e8e8e8;',
 
'.wikEdSpaceLine':    'background-color: #e8e8e8;',
 
'.wikEdSpaceLine':    'background-color: #e8e8e8;',
 
'.wikEdSpaceTag':    'color: #0000e0; font-weight: bold;',
 
'.wikEdSpaceTag':    'color: #0000e0; font-weight: bold;',
+
 
// wiki links, images, categories, templates
 
// wiki links, images, categories, templates
 
'.wikEdLinkTag':      'color: #0000e0;',
 
'.wikEdLinkTag':      'color: #0000e0;',
Γραμμή 458: Γραμμή 457:
 
'.wikEdTemplTag':    'color: #0000e0;',
 
'.wikEdTemplTag':    'color: #0000e0;',
 
'.wikEdTempl':        'background-color: #e0e8ff;',
 
'.wikEdTempl':        'background-color: #e0e8ff;',
+
 
// interlanguage
 
// interlanguage
 
'.wikEdInter':        'color: #000000;',
 
'.wikEdInter':        'color: #000000;',
Γραμμή 465: Γραμμή 464:
 
'.wikEdCatInter':    'background-color: #c8c8ff;',
 
'.wikEdCatInter':    'background-color: #c8c8ff;',
 
'.wikEdTemplInter':  'background-color: #c8c8ff;',
 
'.wikEdTemplInter':  'background-color: #c8c8ff;',
+
 
// name
 
// name
 
'.wikEdLinkName':    'color: #f00000; font-weight: bold;',
 
'.wikEdLinkName':    'color: #f00000; font-weight: bold;',
Γραμμή 472: Γραμμή 471:
 
'.wikEdTemplName':    'color: #f00000; font-weight: bold;',
 
'.wikEdTemplName':    'color: #f00000; font-weight: bold;',
 
'.wikEdURLLink':      'color: #f00000; font-weight: bold;',
 
'.wikEdURLLink':      'color: #f00000; font-weight: bold;',
+
 
// links
 
// links
 
'.wikEdHighlightLink': 'text-decoration: none; color: #909090;',
 
'.wikEdHighlightLink': 'text-decoration: none; color: #909090;',
 
':hover.wikEdHighlightLink': 'text-decoration: underline; color: #909090;',
 
':hover.wikEdHighlightLink': 'text-decoration: underline; color: #909090;',
+
 
// pasted html
 
// pasted html
 
'.wikEdPastedHtml':  'background-color: #ffc080;',
 
'.wikEdPastedHtml':  'background-color: #ffc080;',
+
 
// text and parameters
 
// text and parameters
 
'.wikEdLinkText':    'color: #000000; font-weight: bold;',
 
'.wikEdLinkText':    'color: #000000; font-weight: bold;',
Γραμμή 487: Γραμμή 486:
 
'.wikEdTemplText':    'color: #000000;',
 
'.wikEdTemplText':    'color: #000000;',
 
'.wikEdURLText':      'color: #000000; font-weight: bold;',
 
'.wikEdURLText':      'color: #000000; font-weight: bold;',
+
 
// insert wikicode here
 
// insert wikicode here
 
'.wikEdInsertHere':  'background-color: orange; font-style: italic;',
 
'.wikEdInsertHere':  'background-color: orange; font-style: italic;',
+
 
// colors
 
// colors
 
'.wikEdColorsLight':  'color: black;',
 
'.wikEdColorsLight':  'color: black;',
 
'.wikEdColorsDark':  'color: white;',
 
'.wikEdColorsDark':  'color: white;',
+
 
// invisibles, control chars, and strange spaces
 
// invisibles, control chars, and strange spaces
 
'.wikEdTab':          'white-space: pre; background-image: url({wikEdTab}); background-position: right bottom; background-repeat: no-repeat;',
 
'.wikEdTab':          'white-space: pre; background-image: url({wikEdTab}); background-position: right bottom; background-repeat: no-repeat;',
Γραμμή 503: Γραμμή 502:
 
});
 
});
 
}
 
}
+
 
// main window css rules
 
// main window css rules
 
window.wikEdMainCSS = window.wikEdMainCSS || [];
 
window.wikEdMainCSS = window.wikEdMainCSS || [];
+
 
// WikedInitMainCSS: define built-in main window css
 
// WikedInitMainCSS: define built-in main window css
 
window.WikedInitMainCSS = function() {
 
window.WikedInitMainCSS = function() {
 
WikEdInitObject(wikEdMainCSS, {
 
WikEdInitObject(wikEdMainCSS, {
+
 
// combo input box
 
// combo input box
 
'.wikEdCombo':                'font-size: smaller; padding-left: 0.1em; padding-right: 0.1em; margin: 0 0.1em 0 0.1em; height: 1.6em; vertical-align: bottom;',
 
'.wikEdCombo':                'font-size: smaller; padding-left: 0.1em; padding-right: 0.1em; margin: 0 0.1em 0 0.1em; height: 1.6em; vertical-align: bottom;',
+
 
// wikEd button areas
 
// wikEd button areas
+
 
// button bar margins
 
// button bar margins
 
'.wikEdButtonBarFormat':      'margin: 0 8px 3px 0; float: left;',
 
'.wikEdButtonBarFormat':      'margin: 0 8px 3px 0; float: left;',
Γραμμή 527: Γραμμή 526:
 
'.wikEdButtonBarPreview2':    'margin: 0.2em 0 0.4em 0; float: right;',
 
'.wikEdButtonBarPreview2':    'margin: 0.2em 0 0.4em 0; float: right;',
 
'.wikEdButtonBarJump':        'margin: 0 0 0 0.6em; float: right;',
 
'.wikEdButtonBarJump':        'margin: 0 0 0 0.6em; float: right;',
+
 
// button bar inner wrapper: border (hidden: invisible)
 
// button bar inner wrapper: border (hidden: invisible)
 
'.wikedButtonBarInnerWrapperVisible':  'border: 1px solid; border-color: #e0e0e0 #808080 #808080 #e0e0e0;',
 
'.wikedButtonBarInnerWrapperVisible':  'border: 1px solid; border-color: #e0e0e0 #808080 #808080 #e0e0e0;',
 
'.wikedButtonBarInnerWrapperHidden':    '',
 
'.wikedButtonBarInnerWrapperHidden':    '',
+
 
// button bar grip wrapper: invisible (hidden: border)
 
// button bar grip wrapper: invisible (hidden: border)
 
'.wikedButtonBarGripWrapperVisible':    'float: left;',
 
'.wikedButtonBarGripWrapperVisible':    'float: left;',
 
'.wikedButtonBarGripWrapperHidden':    'float: left; border: 1px solid; border-color: #e0e0e0 #808080 #808080 #e0e0e0;',
 
'.wikedButtonBarGripWrapperHidden':    'float: left; border: 1px solid; border-color: #e0e0e0 #808080 #808080 #e0e0e0;',
+
 
// button bar buttons wrapper: invisible (hidden: border)
 
// button bar buttons wrapper: invisible (hidden: border)
 
'.wikedButtonBarButtonsWrapperVisible': 'float: left; background: #d4d0cc; ',
 
'.wikedButtonBarButtonsWrapperVisible': 'float: left; background: #d4d0cc; ',
 
'.wikedButtonBarButtonsWrapperHidden':  'float: left; background: #d4d0cc; border: 1px solid; border-color: #e0e0e0 #808080 #808080 #e0e0e0; z-index: 4;',
 
'.wikedButtonBarButtonsWrapperHidden':  'float: left; background: #d4d0cc; border: 1px solid; border-color: #e0e0e0 #808080 #808080 #e0e0e0; z-index: 4;',
+
 
// button bar grip
 
// button bar grip
 
'.wikedButtonBarGrip':        'background: #d4d0cc; padding: 0; background-image: url({wikEdGrip}); background-repeat: repeat-y; cursor: pointer;',
 
'.wikedButtonBarGrip':        'background: #d4d0cc; padding: 0; background-image: url({wikEdGrip}); background-repeat: repeat-y; cursor: pointer;',
+
 
// button bar buttons
 
// button bar buttons
 
'.wikEdButtonsFormat':        'background: #d4d0cc; padding: 2px 2px 0 0px;',
 
'.wikEdButtonsFormat':        'background: #d4d0cc; padding: 2px 2px 0 0px;',
Γραμμή 550: Γραμμή 549:
 
'.wikEdButtonsCustom2':        'background: #d4d0cc; padding: 2px 2px 0 0px;',
 
'.wikEdButtonsCustom2':        'background: #d4d0cc; padding: 2px 2px 0 0px;',
 
'.wikEdButtonsControl':        'background: #d4d0cc; padding: 2px 2px 0 1px;',
 
'.wikEdButtonsControl':        'background: #d4d0cc; padding: 2px 2px 0 1px;',
+
 
'.wikEdButtonsPreview':        'background: #d4d0cc; padding: 2px; border: 1px solid; border-color: #e0e0e0 #808080 #808080 #e0e0e0;',
 
'.wikEdButtonsPreview':        'background: #d4d0cc; padding: 2px; border: 1px solid; border-color: #e0e0e0 #808080 #808080 #e0e0e0;',
 
'.wikEdButtonsPreviewFull':    'background: #d4d0cc; padding: 2px; border: 1px solid; border-color: #e0e0e0 #808080 #808080 #e0e0e0;',
 
'.wikEdButtonsPreviewFull':    'background: #d4d0cc; padding: 2px; border: 1px solid; border-color: #e0e0e0 #808080 #808080 #e0e0e0;',
 
'.wikEdButtonsPreview2':      'background: #d4d0cc; padding: 2px; border: 1px solid; border-color: #e0e0e0 #808080 #808080 #e0e0e0;',
 
'.wikEdButtonsPreview2':      'background: #d4d0cc; padding: 2px; border: 1px solid; border-color: #e0e0e0 #808080 #808080 #e0e0e0;',
 
'.wikEdButtonsJump':          'background: #d4d0cc; padding: 2px; border: 1px solid; border-color: #e0e0e0 #808080 #808080 #e0e0e0;',
 
'.wikEdButtonsJump':          'background: #d4d0cc; padding: 2px; border: 1px solid; border-color: #e0e0e0 #808080 #808080 #e0e0e0;',
+
 
// wikEd buttons
 
// wikEd buttons
 
'.wikEdButton':                'vertical-align: text-top; font-size: small; text-decoration: underline; margin: 1px 2px; padding: 0; background: #d4d0cc; border: 1px #d4d0cc solid; cursor: pointer;',
 
'.wikEdButton':                'vertical-align: text-top; font-size: small; text-decoration: underline; margin: 1px 2px; padding: 0; background: #d4d0cc; border: 1px #d4d0cc solid; cursor: pointer;',
Γραμμή 569: Γραμμή 568:
 
'.wikEdLocalDiff':            'vertical-align: top; margin: 0 0.33em 0 -0.18em; padding: 0;',
 
'.wikEdLocalDiff':            'vertical-align: top; margin: 0 0.33em 0 -0.18em; padding: 0;',
 
'.wikEdButtonDummy':          'vertical-align: text-top; margin: 1px 2px; padding: 1px; background: #d4d0cc;',
 
'.wikEdButtonDummy':          'vertical-align: text-top; margin: 1px 2px; padding: 1px; background: #d4d0cc;',
+
 
// preview box
 
// preview box
 
'.wikEdPreviewBoxOuter':      'clear: both; margin: 0; border-width: 1px; border-style: solid; border-color: #808080 #d0d0d0 #d0d0d0 #808080;',
 
'.wikEdPreviewBoxOuter':      'clear: both; margin: 0; border-width: 1px; border-style: solid; border-color: #808080 #d0d0d0 #d0d0d0 #808080;',
 
'.wikEdPreviewBox':            'background-color: #faf8f6; padding: 5px; border-width: 1px; border-style: solid; border-color: #404040 #ffffff #ffffff #404040;',
 
'.wikEdPreviewBox':            'background-color: #faf8f6; padding: 5px; border-width: 1px; border-style: solid; border-color: #404040 #ffffff #ffffff #404040;',
+
 
// find field
 
// find field
 
'.wikEdFindComboInput':        'position: relative; padding: 0; margin: 0 0.2em; font-style: normal; white-space: nowrap;',
 
'.wikEdFindComboInput':        'position: relative; padding: 0; margin: 0 0.2em; font-style: normal; white-space: nowrap;',
 
'#wikEdFindText':              'height: 1.4em; font-family: monospace; padding: 0; margin: 0; position: absolute; width: 170px; left: 0; top: 0; z-index: 2;',
 
'#wikEdFindText':              'height: 1.4em; font-family: monospace; padding: 0; margin: 0; position: absolute; width: 170px; left: 0; top: 0; z-index: 2;',
 
'#wikEdFindSelect':            'height: 1.5em; font-family: monospace; padding: 0; margin: 0; position: relative; border: none; vertical-align: baseline; z-index: 1;',
 
'#wikEdFindSelect':            'height: 1.5em; font-family: monospace; padding: 0; margin: 0; position: relative; border: none; vertical-align: baseline; z-index: 1;',
+
 
// replace field
 
// replace field
 
'.wikEdReplaceComboInput':    'position: relative; padding: 0; margin: 0 0.2em; font-style: normal; white-space: nowrap;',
 
'.wikEdReplaceComboInput':    'position: relative; padding: 0; margin: 0 0.2em; font-style: normal; white-space: nowrap;',
 
'#wikEdReplaceText':          'height: 1.4em; font-family: monospace; padding: 0; margin: 0; position: absolute; width: 170px; left: 0; top: 0; z-index: 2;',
 
'#wikEdReplaceText':          'height: 1.4em; font-family: monospace; padding: 0; margin: 0; position: absolute; width: 170px; left: 0; top: 0; z-index: 2;',
 
'#wikEdReplaceSelect':        'height: 1.5em; font-family: monospace; padding: 0; margin: 0; position: relative; border: none; vertical-align: baseline; z-index: 1;',
 
'#wikEdReplaceSelect':        'height: 1.5em; font-family: monospace; padding: 0; margin: 0; position: relative; border: none; vertical-align: baseline; z-index: 1;',
+
 
// summary field
 
// summary field
 
'.wikEdSummaryComboInput':    'position: relative; white-space: nowrap; margin: 0 0 0 0.1em;',
 
'.wikEdSummaryComboInput':    'position: relative; white-space: nowrap; margin: 0 0 0 0.1em;',
 
'.wikEdSummaryText':          'padding: 0; margin: 0; position: absolute; left: 0; top: 0; z-index: 2;',
 
'.wikEdSummaryText':          'padding: 0; margin: 0; position: absolute; left: 0; top: 0; z-index: 2;',
 
'.wikEdSummarySelect':        'border: none; padding: 0; margin: 0; position: relative; vertical-align: middle; z-index: 1;',
 
'.wikEdSummarySelect':        'border: none; padding: 0; margin: 0; position: relative; vertical-align: middle; z-index: 1;',
+
 
// space around submit buttons
 
// space around submit buttons
 
'.editButtons':                'margin: 0;',
 
'.editButtons':                'margin: 0;',
+
 
// frame
 
// frame
 
'.wikEdFrameOuter':            'width: 100%; margin: 0; border-width: 1px; border-style: solid; border-color: #808080 #d0d0d0 #d0d0d0 #808080;',
 
'.wikEdFrameOuter':            'width: 100%; margin: 0; border-width: 1px; border-style: solid; border-color: #808080 #d0d0d0 #d0d0d0 #808080;',
 
'.wikEdFrameInner':            'padding: 0; border-width: 1px; border-style: solid; border-color: #404040 #ffffff #ffffff #404040;',
 
'.wikEdFrameInner':            'padding: 0; border-width: 1px; border-style: solid; border-color: #404040 #ffffff #ffffff #404040;',
 
'.wikEdFrame':                'width: 100%; padding: 0; margin: 0; border: none;',
 
'.wikEdFrame':                'width: 100%; padding: 0; margin: 0; border: none;',
+
 
// summary
 
// summary
 
'.wikEdSummaryWrapper':        'margin: 0 0 0.4em 0;',
 
'.wikEdSummaryWrapper':        'margin: 0 0 0.4em 0;',
Γραμμή 604: Γραμμή 603:
 
'.wikEdClearSummaryForm':      'display: inline;',
 
'.wikEdClearSummaryForm':      'display: inline;',
 
'.wikEdClearSummary':          'vertical-align: middle; margin: 0 0.1em 0 0.5em; padding: 0 0 0.2em 0;',
 
'.wikEdClearSummary':          'vertical-align: middle; margin: 0 0.1em 0 0.5em; padding: 0 0 0.2em 0;',
+
 
// input wrapper
 
// input wrapper
 
'.wikEdInputWrapper':          'z-index: 100; clear: both; margin-top: 0.5em;',
 
'.wikEdInputWrapper':          'z-index: 100; clear: both; margin-top: 0.5em;',
 
'.wikEdInputWrapperFull':      'position: fixed; top: 0; left: 0; right: 0; padding: 4px; background: white; z-index: 100;',
 
'.wikEdInputWrapperFull':      'position: fixed; top: 0; left: 0; right: 0; padding: 4px; background: white; z-index: 100;',
+
 
// other wrappers
 
// other wrappers
 
'.wikEdToolbarWrapper':        'margin: 0 0 0.25em 0;',
 
'.wikEdToolbarWrapper':        'margin: 0 0 0.25em 0;',
Γραμμή 622: Γραμμή 621:
 
'.wikEdLocalPrevWrapper':      '',
 
'.wikEdLocalPrevWrapper':      '',
 
'.wikEdInsertWrapper':        '',
 
'.wikEdInsertWrapper':        '',
+
 
// various
 
// various
 
'.wikEdEditOptions':          'display: inline; vertical-align: baseline; margin-right: 0.75em; white-space: nowrap;',
 
'.wikEdEditOptions':          'display: inline; vertical-align: baseline; margin-right: 0.75em; white-space: nowrap;',
Γραμμή 629: Γραμμή 628:
 
});
 
});
 
}
 
}
+
 
// buttons (id, class, popup title, image src, width, height, alt text, click code)
 
// buttons (id, class, popup title, image src, width, height, alt text, click code)
 
window.wikEdButton = window.wikEdButton || [];
 
window.wikEdButton = window.wikEdButton || [];
+
 
// WikedInitButton: define built-in buttons (id, class, popup title, image src, width, height, alt text, click handler code were obj is the button element)
 
// WikedInitButton: define built-in buttons (id, class, popup title, image src, width, height, alt text, click handler code were obj is the button element)
 
window.WikedInitButton = function() {
 
window.WikedInitButton = function() {
 
WikEdInitObject(wikEdButton, {
 
WikEdInitObject(wikEdButton, {
+
 
// format top
 
// format top
 
1: ['wikEdUndo',            'wikEdButtonInactive',  wikEdText['wikEdUndo title'],            wikEdImage['undo'],                '16', '16', wikEdText['wikEdUndo alt'],            'javascript:WikEdEditButton(obj, obj.id);' ],
 
1: ['wikEdUndo',            'wikEdButtonInactive',  wikEdText['wikEdUndo title'],            wikEdImage['undo'],                '16', '16', wikEdText['wikEdUndo alt'],            'javascript:WikEdEditButton(obj, obj.id);' ],
Γραμμή 652: Γραμμή 651:
 
13: ['wikEdUndoAll',          'wikEdButton',          wikEdText['wikEdUndoAll title'],          wikEdImage['undoAll'],            '16', '16', wikEdText['wikEdUndoAll alt'],          'javascript:WikEdEditButton(obj, obj.id);' ],
 
13: ['wikEdUndoAll',          'wikEdButton',          wikEdText['wikEdUndoAll title'],          wikEdImage['undoAll'],            '16', '16', wikEdText['wikEdUndoAll alt'],          'javascript:WikEdEditButton(obj, obj.id);' ],
 
14: ['wikEdRedoAll',          'wikEdButtonInactive',  wikEdText['wikEdRedoAll title'],          wikEdImage['redoAll'],            '16', '16', wikEdText['wikEdRedoAll alt'],          'javascript:WikEdEditButton(obj, obj.id);' ],
 
14: ['wikEdRedoAll',          'wikEdButtonInactive',  wikEdText['wikEdRedoAll title'],          wikEdImage['redoAll'],            '16', '16', wikEdText['wikEdRedoAll alt'],          'javascript:WikEdEditButton(obj, obj.id);' ],
+
 
// format bottom
 
// format bottom
 
15: ['wikEdWikiLink',        'wikEdButton',          wikEdText['wikEdWikiLink title'],        wikEdImage['wikiLink'],            '16', '16', wikEdText['wikEdWikiLink alt'],        'javascript:WikEdEditButton(obj, obj.id);' ],
 
15: ['wikEdWikiLink',        'wikEdButton',          wikEdText['wikEdWikiLink title'],        wikEdImage['wikiLink'],            '16', '16', wikEdText['wikEdWikiLink alt'],        'javascript:WikEdEditButton(obj, obj.id);' ],
Γραμμή 666: Γραμμή 665:
 
26: ['wikEdWikify',          'wikEdButton',          wikEdText['wikEdWikify title'],          wikEdImage['wikify'],              '16', '16', wikEdText['wikEdWikify alt'],          'javascript:WikEdEditButton(obj, obj.id);' ],
 
26: ['wikEdWikify',          'wikEdButton',          wikEdText['wikEdWikify title'],          wikEdImage['wikify'],              '16', '16', wikEdText['wikEdWikify alt'],          'javascript:WikEdEditButton(obj, obj.id);' ],
 
27: ['wikEdTextify',          'wikEdButton',          wikEdText['wikEdTextify title'],          wikEdImage['textify'],            '16', '16', wikEdText['wikEdTextify alt'],          'javascript:WikEdEditButton(obj, obj.id);' ],
 
27: ['wikEdTextify',          'wikEdButton',          wikEdText['wikEdTextify title'],          wikEdImage['textify'],            '16', '16', wikEdText['wikEdTextify alt'],          'javascript:WikEdEditButton(obj, obj.id);' ],
+
 
// control top
 
// control top
 
77: ['wikEdRefHide',          'wikEdButtonUnchecked', wikEdText['wikEdRefHide title'],          wikEdImage['refHide'],            '16', '16', wikEdText['wikEdRefHide alt'],          'javascript:WikEdButton(obj, obj.id, true);' ],
 
77: ['wikEdRefHide',          'wikEdButtonUnchecked', wikEdText['wikEdRefHide title'],          wikEdImage['refHide'],            '16', '16', wikEdText['wikEdRefHide alt'],          'javascript:WikEdButton(obj, obj.id, true);' ],
Γραμμή 673: Γραμμή 672:
 
31: ['wikEdScrollToPreview',  'wikEdButton',          wikEdText['wikEdScrollToPreview title'],  wikEdImage['scrollToPreviewDown'], '16', '16', wikEdText['wikEdScrollToPreview alt'],  'javascript:WikEdButton(obj, obj.id);' ],
 
31: ['wikEdScrollToPreview',  'wikEdButton',          wikEdText['wikEdScrollToPreview title'],  wikEdImage['scrollToPreviewDown'], '16', '16', wikEdText['wikEdScrollToPreview alt'],  'javascript:WikEdButton(obj, obj.id);' ],
 
32: ['wikEdScrollToEdit',    'wikEdButton',          wikEdText['wikEdScrollToEdit title'],    wikEdImage['scrollToEditDown'],    '16', '16', wikEdText['wikEdScrollToEdit alt'],    'javascript:WikEdButton(obj, obj.id);' ],
 
32: ['wikEdScrollToEdit',    'wikEdButton',          wikEdText['wikEdScrollToEdit title'],    wikEdImage['scrollToEditDown'],    '16', '16', wikEdText['wikEdScrollToEdit alt'],    'javascript:WikEdButton(obj, obj.id);' ],
+
 
// control bottom
 
// control bottom
 
33: ['wikEdUseWikEd',        'wikEdButtonChecked',  wikEdText['wikEdUseWikEd title'],        wikEdImage['useWikEd'],            '16', '16', wikEdText['wikEdUseWikEd alt'],        'javascript:WikEdButton(obj, obj.id, true);' ],
 
33: ['wikEdUseWikEd',        'wikEdButtonChecked',  wikEdText['wikEdUseWikEd title'],        wikEdImage['useWikEd'],            '16', '16', wikEdText['wikEdUseWikEd alt'],        'javascript:WikEdButton(obj, obj.id, true);' ],
Γραμμή 681: Γραμμή 680:
 
36: ['wikEdUsing',            'wikEdButtonUnchecked', wikEdText['wikEdUsing title'],            wikEdImage['using'],              '16', '16', wikEdText['wikEdUsing alt'],            'javascript:WikEdButton(obj, obj.id, true);' ],
 
36: ['wikEdUsing',            'wikEdButtonUnchecked', wikEdText['wikEdUsing title'],            wikEdImage['using'],              '16', '16', wikEdText['wikEdUsing alt'],            'javascript:WikEdButton(obj, obj.id, true);' ],
 
37: ['wikEdFullScreen',      'wikEdButtonUnchecked', wikEdText['wikEdFullScreen title'],      wikEdImage['fullScreen'],          '16', '16', wikEdText['wikEdFullScreen alt'],      'javascript:WikEdButton(obj, obj.id, true);' ],
 
37: ['wikEdFullScreen',      'wikEdButtonUnchecked', wikEdText['wikEdFullScreen title'],      wikEdImage['fullScreen'],          '16', '16', wikEdText['wikEdFullScreen alt'],      'javascript:WikEdButton(obj, obj.id, true);' ],
+
 
// find top
 
// find top
 
39: ['wikEdFindAll',          'wikEdButton',          wikEdText['wikEdFindAll title'],          wikEdImage['findAll'],            '16', '16', wikEdText['wikEdFindAll alt'],          'javascript:WikEdEditButton(obj, obj.id);' ],
 
39: ['wikEdFindAll',          'wikEdButton',          wikEdText['wikEdFindAll title'],          wikEdImage['findAll'],            '16', '16', wikEdText['wikEdFindAll alt'],          'javascript:WikEdEditButton(obj, obj.id);' ],
Γραμμή 688: Γραμμή 687:
 
43: ['wikEdJumpPrev',        'wikEdButton',          wikEdText['wikEdJumpPrev title'],        wikEdImage['jumpPrev'],            '16', '16', wikEdText['wikEdJumpPrev alt'],        'javascript:WikEdEditButton(obj, obj.id);' ],
 
43: ['wikEdJumpPrev',        'wikEdButton',          wikEdText['wikEdJumpPrev title'],        wikEdImage['jumpPrev'],            '16', '16', wikEdText['wikEdJumpPrev alt'],        'javascript:WikEdEditButton(obj, obj.id);' ],
 
44: ['wikEdJumpNext',        'wikEdButton',          wikEdText['wikEdJumpNext title'],        wikEdImage['jumpNext'],            '16', '16', wikEdText['wikEdJumpNext alt'],        'javascript:WikEdEditButton(obj, obj.id);' ],
 
44: ['wikEdJumpNext',        'wikEdButton',          wikEdText['wikEdJumpNext title'],        wikEdImage['jumpNext'],            '16', '16', wikEdText['wikEdJumpNext alt'],        'javascript:WikEdEditButton(obj, obj.id);' ],
+
 
// find bottom
 
// find bottom
 
46: ['wikEdReplaceAll',      'wikEdButton',          wikEdText['wikEdReplaceAll title'],      wikEdImage['replaceAll'],          '16', '16', wikEdText['wikEdReplaceAll alt'],      'javascript:WikEdEditButton(obj, obj.id);' ],
 
46: ['wikEdReplaceAll',      'wikEdButton',          wikEdText['wikEdReplaceAll title'],      wikEdImage['replaceAll'],          '16', '16', wikEdText['wikEdReplaceAll alt'],      'javascript:WikEdEditButton(obj, obj.id);' ],
Γραμμή 696: Γραμμή 695:
 
50: ['wikEdRegExp',          'wikEdButtonUnchecked', wikEdText['wikEdRegExp title'],          wikEdImage['regExp'],              '16', '16', wikEdText['wikEdRegExp alt'],          'javascript:WikEdButton(obj, obj.id, true);' ],
 
50: ['wikEdRegExp',          'wikEdButtonUnchecked', wikEdText['wikEdRegExp title'],          wikEdImage['regExp'],              '16', '16', wikEdText['wikEdRegExp alt'],          'javascript:WikEdButton(obj, obj.id, true);' ],
 
51: ['wikEdFindAhead',        'wikEdButtonUnchecked', wikEdText['wikEdFindAhead title'],        wikEdImage['findAhead'],          '16', '16', wikEdText['wikEdFindAhead alt'],        'javascript:WikEdButton(obj, obj.id, true);' ],
 
51: ['wikEdFindAhead',        'wikEdButtonUnchecked', wikEdText['wikEdFindAhead title'],        wikEdImage['findAhead'],          '16', '16', wikEdText['wikEdFindAhead alt'],        'javascript:WikEdButton(obj, obj.id, true);' ],
+
 
// fix top
 
// fix top
 
52: ['wikEdFixBasic',        'wikEdButton',          wikEdText['wikEdFixBasic title'],        wikEdImage['fixBasic'],            '16', '16', wikEdText['wikEdFixBasic alt'],        'javascript:WikEdEditButton(obj, obj.id);' ],
 
52: ['wikEdFixBasic',        'wikEdButton',          wikEdText['wikEdFixBasic title'],        wikEdImage['fixBasic'],            '16', '16', wikEdText['wikEdFixBasic alt'],        'javascript:WikEdEditButton(obj, obj.id);' ],
Γραμμή 704: Γραμμή 703:
 
56: ['wikEdFixAll',          'wikEdButton',          wikEdText['wikEdFixAll title'],          wikEdImage['fixAll'],              '16', '16', wikEdText['wikEdFixAll alt'],          'javascript:WikEdEditButton(obj, obj.id);' ],
 
56: ['wikEdFixAll',          'wikEdButton',          wikEdText['wikEdFixAll title'],          wikEdImage['fixAll'],              '16', '16', wikEdText['wikEdFixAll alt'],          'javascript:WikEdEditButton(obj, obj.id);' ],
 
57: ['wikEdFixRegExTypo',    'wikEdButton',          wikEdText['wikEdFixRegExTypo title'],    wikEdImage['fixRegExTypo'],        '16', '16', wikEdText['wikEdFixRegExTypo alt'],    'javascript:WikEdEditButton(obj, obj.id);' ],
 
57: ['wikEdFixRegExTypo',    'wikEdButton',          wikEdText['wikEdFixRegExTypo title'],    wikEdImage['fixRegExTypo'],        '16', '16', wikEdText['wikEdFixRegExTypo alt'],    'javascript:WikEdEditButton(obj, obj.id);' ],
+
 
// fix bottom
 
// fix bottom
 
58: ['wikEdFixDashes',        'wikEdButton',          wikEdText['wikEdFixDashes title'],        wikEdImage['fixDash'],            '16', '16', wikEdText['wikEdFixDashes alt'],        'javascript:WikEdEditButton(obj, obj.id);' ],
 
58: ['wikEdFixDashes',        'wikEdButton',          wikEdText['wikEdFixDashes title'],        wikEdImage['fixDash'],            '16', '16', wikEdText['wikEdFixDashes alt'],        'javascript:WikEdEditButton(obj, obj.id);' ],
Γραμμή 711: Γραμμή 710:
 
61: ['wikEdFixChem',          'wikEdButton',          wikEdText['wikEdFixChem title'],          wikEdImage['fixChem'],            '16', '16', wikEdText['wikEdFixChem alt'],          'javascript:WikEdEditButton(obj, obj.id);' ],
 
61: ['wikEdFixChem',          'wikEdButton',          wikEdText['wikEdFixChem title'],          wikEdImage['fixChem'],            '16', '16', wikEdText['wikEdFixChem alt'],          'javascript:WikEdEditButton(obj, obj.id);' ],
 
62: ['wikEdFixUnits',        'wikEdButton',          wikEdText['wikEdFixUnits title'],        wikEdImage['fixUnits'],            '16', '16', wikEdText['wikEdFixUnits alt'],        'javascript:WikEdEditButton(obj, obj.id);' ],
 
62: ['wikEdFixUnits',        'wikEdButton',          wikEdText['wikEdFixUnits title'],        wikEdImage['fixUnits'],            '16', '16', wikEdText['wikEdFixUnits alt'],        'javascript:WikEdEditButton(obj, obj.id);' ],
+
 
// preview top
 
// preview top
 
65: ['wikEdClose',            'wikEdButton',          wikEdText['wikEdClose title'],            wikEdImage['close'],              '16', '16', wikEdText['wikEdClose alt'],            'javascript:WikEdButton(obj, obj.id);' ],
 
65: ['wikEdClose',            'wikEdButton',          wikEdText['wikEdClose title'],            wikEdImage['close'],              '16', '16', wikEdText['wikEdClose alt'],            'javascript:WikEdButton(obj, obj.id);' ],
 
66: ['wikEdScrollToPreview2', 'wikEdButton',          wikEdText['wikEdScrollToPreview2 title'], wikEdImage['scrollToPreviewDown'], '16', '16', wikEdText['wikEdScrollToPreview2 alt'], 'javascript:WikEdButton(obj, obj.id);' ],
 
66: ['wikEdScrollToPreview2', 'wikEdButton',          wikEdText['wikEdScrollToPreview2 title'], wikEdImage['scrollToPreviewDown'], '16', '16', wikEdText['wikEdScrollToPreview2 alt'], 'javascript:WikEdButton(obj, obj.id);' ],
 
67: ['wikEdScrollToEdit2',    'wikEdButton',          wikEdText['wikEdScrollToEdit2 title'],    wikEdImage['scrollToEdit'],        '16', '16', wikEdText['wikEdScrollToEdit2 alt'],    'javascript:WikEdButton(obj, obj.id);' ],
 
67: ['wikEdScrollToEdit2',    'wikEdButton',          wikEdText['wikEdScrollToEdit2 title'],    wikEdImage['scrollToEdit'],        '16', '16', wikEdText['wikEdScrollToEdit2 alt'],    'javascript:WikEdButton(obj, obj.id);' ],
+
 
// preview bottom
 
// preview bottom
 
70: ['wikEdClose2',          'wikEdButton',          wikEdText['wikEdClose2 title'],          wikEdImage['close'],              '16', '16', wikEdText['wikEdClose2 alt'],          'javascript:WikEdButton(obj, obj.id);' ],
 
70: ['wikEdClose2',          'wikEdButton',          wikEdText['wikEdClose2 title'],          wikEdImage['close'],              '16', '16', wikEdText['wikEdClose2 alt'],          'javascript:WikEdButton(obj, obj.id);' ],
 
71: ['wikEdScrollToPreview3', 'wikEdButton',          wikEdText['wikEdScrollToPreview3 title'], wikEdImage['scrollToPreview'],    '16', '16', wikEdText['wikEdScrollToPreview3 alt'], 'javascript:WikEdButton(obj, obj.id);' ],
 
71: ['wikEdScrollToPreview3', 'wikEdButton',          wikEdText['wikEdScrollToPreview3 title'], wikEdImage['scrollToPreview'],    '16', '16', wikEdText['wikEdScrollToPreview3 alt'], 'javascript:WikEdButton(obj, obj.id);' ],
 
72: ['wikEdScrollToEdit3',    'wikEdButton',          wikEdText['wikEdScrollToEdit3 title'],    wikEdImage['scrollToEdit'],        '16', '16', wikEdText['wikEdScrollToEdit3 alt'],    'javascript:WikEdButton(obj, obj.id);' ],
 
72: ['wikEdScrollToEdit3',    'wikEdButton',          wikEdText['wikEdScrollToEdit3 title'],    wikEdImage['scrollToEdit'],        '16', '16', wikEdText['wikEdScrollToEdit3 alt'],    'javascript:WikEdButton(obj, obj.id);' ],
+
 
// jump
 
// jump
 
78: ['wikEdDiff',            'wikEdButtonUnchecked', wikEdText['wikEdDiff title'],            wikEdImage['wikEdDiff'],          '16', '16', wikEdText['wikEdDiff alt'],            'javascript:WikEdButton(obj, obj.id, true);' ],
 
78: ['wikEdDiff',            'wikEdButtonUnchecked', wikEdText['wikEdDiff title'],            wikEdImage['wikEdDiff'],          '16', '16', wikEdText['wikEdDiff alt'],            'javascript:WikEdButton(obj, obj.id, true);' ],
 
74: ['wikEdScrollToEdit4',    'wikEdButtonSolo',      wikEdText['wikEdScrollToEdit4 title'],    wikEdImage['scrollToEditDown'],    '16', '16', wikEdText['wikEdScrollToEdit4 alt'],    'javascript:WikEdButton(obj, obj.id);' ],
 
74: ['wikEdScrollToEdit4',    'wikEdButtonSolo',      wikEdText['wikEdScrollToEdit4 title'],    wikEdImage['scrollToEditDown'],    '16', '16', wikEdText['wikEdScrollToEdit4 alt'],    'javascript:WikEdButton(obj, obj.id);' ],
+
 
// dummy
 
// dummy
 
76: ['wikEdDummy',            'wikEdButtonDummy',    '',                                      wikEdImage['dummy'],              '16', '16', '',                                    '' ]
 
76: ['wikEdDummy',            'wikEdButtonDummy',    '',                                      wikEdImage['dummy'],              '16', '16', '',                                    '' ]
 
});
 
});
 
}
 
}
+
 
// button access keys
 
// button access keys
 
window.wikEdButtonKey = window.wikEdButtonKey || [];
 
window.wikEdButtonKey = window.wikEdButtonKey || [];
+
 
// WikedInitButtonKey: define accesskeys for edit buttons (wikEd button number: key string, JS key code)
 
// WikedInitButtonKey: define accesskeys for edit buttons (wikEd button number: key string, JS key code)
 
window.WikedInitButtonKey = function() {
 
window.WikedInitButtonKey = function() {
Γραμμή 745: Γραμμή 744:
 
});
 
});
 
}
 
}
+
 
// button bars (id, class, button numbers)
 
// button bars (id, class, button numbers)
 
window.wikEdButtonBar = window.wikEdButtonBar || [];
 
window.wikEdButtonBar = window.wikEdButtonBar || [];
+
 
// WikedInitButtonBar: define built-in button bars (id outer, class outer, id inner, class inner, height, grip title, button numbers)
 
// WikedInitButtonBar: define built-in button bars (id outer, class outer, id inner, class inner, height, grip title, button numbers)
 
window.WikedInitButtonBar = function() {
 
window.WikedInitButtonBar = function() {
Γραμμή 763: Γραμμή 762:
 
});
 
});
 
}
 
}
+
 
// history length for find, replace, and summary fields
 
// history length for find, replace, and summary fields
 
window.wikEdHistoryLength = window.wikEdHistoryLength || [];
 
window.wikEdHistoryLength = window.wikEdHistoryLength || [];
Γραμμή 769: Γραμμή 768:
 
wikEdHistoryLength['replace'] = 10;
 
wikEdHistoryLength['replace'] = 10;
 
wikEdHistoryLength['summary'] = 10;
 
wikEdHistoryLength['summary'] = 10;
+
 
// presets for combo input fields dropdown options, {wikEdUsing} appends a link to this script
 
// presets for combo input fields dropdown options, {wikEdUsing} appends a link to this script
 
window.wikEdComboPresetOptions = window.wikEdComboPresetOptions || [];
 
window.wikEdComboPresetOptions = window.wikEdComboPresetOptions || [];
 
wikEdComboPresetOptions['summary'] = window.wikEdComboPresetOptions['summary'] || wikEdText['wikEdPresetSummary'];
 
wikEdComboPresetOptions['summary'] = window.wikEdComboPresetOptions['summary'] || wikEdText['wikEdPresetSummary'];
+
 
// text for summary link to this script
 
// text for summary link to this script
 
window.wikEdSummaryUsing = window.wikEdSummaryUsing || wikEdText['wikEdSummaryUsing'];
 
window.wikEdSummaryUsing = window.wikEdSummaryUsing || wikEdText['wikEdSummaryUsing'];
+
 
// expiration time span for permanent cookies in seconds
 
// expiration time span for permanent cookies in seconds
 
window.wikEdCookieExpireSec = window.wikEdCookieExpireSec || (30 * 24 * 60 * 60);
 
window.wikEdCookieExpireSec = window.wikEdCookieExpireSec || (30 * 24 * 60 * 60);
+
 
// find ahead as you type checkbox preset
 
// find ahead as you type checkbox preset
 
if (typeof(wikEdHighlightSyntaxPreset) == 'undefined') { window.wikEdFindAheadSelected = true; }
 
if (typeof(wikEdHighlightSyntaxPreset) == 'undefined') { window.wikEdFindAheadSelected = true; }
+
 
// highlight syntax preset
 
// highlight syntax preset
 
window.wikEdHighlightSyntaxPreset = window.wikEdHighlightSyntaxPreset || true;
 
window.wikEdHighlightSyntaxPreset = window.wikEdHighlightSyntaxPreset || true;
+
 
// enable wikEd preset
 
// enable wikEd preset
 
if (typeof(wikEdUseWikEdPreset) == 'undefined') { window.wikEdUseWikEdPreset = true; }
 
if (typeof(wikEdUseWikEdPreset) == 'undefined') { window.wikEdUseWikEdPreset = true; }
+
 
// add '...using wikEd' to summary preset (set to true by single-session saved setting wikEdSummaryUsing)
 
// add '...using wikEd' to summary preset (set to true by single-session saved setting wikEdSummaryUsing)
 
if (typeof(wikEdUsingPreset) == 'undefined') { window.wikEdUsingPreset = false; }
 
if (typeof(wikEdUsingPreset) == 'undefined') { window.wikEdUsingPreset = false; }
+
 
// wikEdDiff preset
 
// wikEdDiff preset
 
if (typeof(wikEdDiffPreset) == 'undefined') { window.wikEdDiffPreset = false; }
 
if (typeof(wikEdDiffPreset) == 'undefined') { window.wikEdDiffPreset = false; }
+
 
// fullscreen mode preset
 
// fullscreen mode preset
 
if (typeof(wikEdFullScreenModePreset) == 'undefined') { window.wikEdFullScreenModePreset = false; }
 
if (typeof(wikEdFullScreenModePreset) == 'undefined') { window.wikEdFullScreenModePreset = false; }
+
 
// show MediaWiki toolbar preset
 
// show MediaWiki toolbar preset
 
if (typeof(wikEdCloseToolbarPreset) == 'undefined') { window.wikEdCloseToolbarPreset = false; }
 
if (typeof(wikEdCloseToolbarPreset) == 'undefined') { window.wikEdCloseToolbarPreset = false; }
+
 
// hide ref tags preset
 
// hide ref tags preset
 
if (typeof(wikEdRefHidePreset) == 'undefined') { window.wikEdRefHidePreset = false; }
 
if (typeof(wikEdRefHidePreset) == 'undefined') { window.wikEdRefHidePreset = false; }
+
 
// initial text zoom for edit window (percentage)
 
// initial text zoom for edit window (percentage)
 
window.wikEdTextZoom = window.wikEdTextZoom || 100;
 
window.wikEdTextZoom = window.wikEdTextZoom || 100;
+
 
// remove invisible syntax highlighting comments after closing tag
 
// remove invisible syntax highlighting comments after closing tag
 
if (typeof(wikEdRemoveHighlightComments) == 'undefined') { window.wikEdRemoveHighlightComments = true; }
 
if (typeof(wikEdRemoveHighlightComments) == 'undefined') { window.wikEdRemoveHighlightComments = true; }
+
 
// show the text-to-source button for testing purposes
 
// show the text-to-source button for testing purposes
 
if (typeof(wikEdShowSourceButton) == 'undefined') { window.wikEdShowSourceButton = false; }
 
if (typeof(wikEdShowSourceButton) == 'undefined') { window.wikEdShowSourceButton = false; }
+
 
// show the using-wiked button
 
// show the using-wiked button
 
if (typeof(wikEdShowUsingButton) == 'undefined') { window.wikEdShowUsingButton = false; }
 
if (typeof(wikEdShowUsingButton) == 'undefined') { window.wikEdShowUsingButton = false; }
+
 
// the wikEd help page link to be displayed after the editing help link, an empty string disables the link
 
// the wikEd help page link to be displayed after the editing help link, an empty string disables the link
 
window.wikEdHelpPageLink = window.wikEdHelpPageLink || wikEdText['wikEdHelpPageLink'];
 
window.wikEdHelpPageLink = window.wikEdHelpPageLink || wikEdText['wikEdHelpPageLink'];
+
 
// display the wikEd button bars on top of the edit box
 
// display the wikEd button bars on top of the edit box
 
if (typeof(wikEdButtonsOnTop) == 'undefined') { window.wikEdButtonsOnTop = true; }
 
if (typeof(wikEdButtonsOnTop) == 'undefined') { window.wikEdButtonsOnTop = true; }
+
 
// enable external diff script
 
// enable external diff script
 
if (typeof(wikEdLoadDiffScript) == 'undefined') { window.wikEdLoadDiffScript = true; }
 
if (typeof(wikEdLoadDiffScript) == 'undefined') { window.wikEdLoadDiffScript = true; }
+
 
// diff script URL
 
// diff script URL
 
window.wikEdDiffScriptSrc = window.wikEdDiffScriptSrc || 'http://en.wikipedia.org/w/index.php?title=User:Cacycle/diff.js&action=raw&ctype=text/javascript';
 
window.wikEdDiffScriptSrc = window.wikEdDiffScriptSrc || 'http://en.wikipedia.org/w/index.php?title=User:Cacycle/diff.js&action=raw&ctype=text/javascript';
+
 
// enable external wikEdDiff script
 
// enable external wikEdDiff script
 
if (typeof(wikEdLoadDiff) == 'undefined') { window.wikEdLoadDiff = true; }
 
if (typeof(wikEdLoadDiff) == 'undefined') { window.wikEdLoadDiff = true; }
+
 
// wikEdDiff script URL, also defined in wikEdDiff.js
 
// wikEdDiff script URL, also defined in wikEdDiff.js
 
window.wikEdDiffSrc = window.wikEdDiffSrc || 'http://en.wikipedia.org/w/index.php?title=User:Cacycle/wikEdDiff.js&action=raw&ctype=text/javascript';
 
window.wikEdDiffSrc = window.wikEdDiffSrc || 'http://en.wikipedia.org/w/index.php?title=User:Cacycle/wikEdDiff.js&action=raw&ctype=text/javascript';
+
 
// enable external InstaView script
 
// enable external InstaView script
 
if (typeof(wikEdLoadInstaView) == 'undefined') { window.wikEdLoadInstaView = true; }
 
if (typeof(wikEdLoadInstaView) == 'undefined') { window.wikEdLoadInstaView = true; }
+
 
// InstaView script URL
 
// InstaView script URL
 
window.wikEdInstaViewSrc = window.wikEdInstaViewSrc || 'http://en.wikipedia.org/w/index.php?title=User:Pilaf/include/instaview.js&action=raw&ctype=text/javascript';
 
window.wikEdInstaViewSrc = window.wikEdInstaViewSrc || 'http://en.wikipedia.org/w/index.php?title=User:Pilaf/include/instaview.js&action=raw&ctype=text/javascript';
+
 
// RegExTypoFix rules page, the address must have the exact same domain name as the used wiki
 
// RegExTypoFix rules page, the address must have the exact same domain name as the used wiki
 
window.wikEdRegExTypoFixURL = window.wikEdRegExTypoFixURL || 'http://en.wikipedia.org/w/index.php?title=Wikipedia:AutoWikiBrowser/Typos&action=raw';
 
window.wikEdRegExTypoFixURL = window.wikEdRegExTypoFixURL || 'http://en.wikipedia.org/w/index.php?title=Wikipedia:AutoWikiBrowser/Typos&action=raw';
+
 
// enable RegExTypoFix button (http://en.wikipedia.org/wiki/User:Mboverload/RegExTypoFix)
 
// enable RegExTypoFix button (http://en.wikipedia.org/wiki/User:Mboverload/RegExTypoFix)
 
if (typeof(wikEdRegExTypoFix) == 'undefined') { window.wikEdRegExTypoFix = false; }
 
if (typeof(wikEdRegExTypoFix) == 'undefined') { window.wikEdRegExTypoFix = false; }
 
if (typeof(wikEdLoadRegExTypoFix) == 'boolean') { window.wikEdRegExTypoFix = window.wikEdLoadRegExTypoFix; }
 
if (typeof(wikEdLoadRegExTypoFix) == 'boolean') { window.wikEdRegExTypoFix = window.wikEdLoadRegExTypoFix; }
+
 
// enable highlighting as links
 
// enable highlighting as links
 
if (typeof(wikEdFollowHighlightedLinks) == 'undefined') { window.wikEdFollowHighlightedLinks = false; }
 
if (typeof(wikEdFollowHighlightedLinks) == 'undefined') { window.wikEdFollowHighlightedLinks = false; }
+
 
// skip the browser detection to run wikEd under IE and Opera
 
// skip the browser detection to run wikEd under IE and Opera
 
if (typeof(wikEdSkipBrowserTest) == 'undefined') { window.wikEdSkipBrowserTest = false; }
 
if (typeof(wikEdSkipBrowserTest) == 'undefined') { window.wikEdSkipBrowserTest = false; }
+
 
// set the button bar grip width in px
 
// set the button bar grip width in px
 
window.wikEdButtonBarGripWidth = window.wikEdButtonBarGripWidth || 8;
 
window.wikEdButtonBarGripWidth = window.wikEdButtonBarGripWidth || 8;
+
 
// enable local preview (Pilaf's InstaView)
 
// enable local preview (Pilaf's InstaView)
 
if (typeof(wikEdUseLocalPreview) == 'undefined') { window.wikEdUseLocalPreview = true; }
 
if (typeof(wikEdUseLocalPreview) == 'undefined') { window.wikEdUseLocalPreview = true; }
+
 
// allow ajax requests from local copy for testing, also defined in wikEdDiff.js
 
// allow ajax requests from local copy for testing, also defined in wikEdDiff.js
 
if (typeof(wikEdAllowLocalAjax) == 'undefined') { window.wikEdAllowLocalAjax = false; }
 
if (typeof(wikEdAllowLocalAjax) == 'undefined') { window.wikEdAllowLocalAjax = false; }
+
 
// enable server preview (Ajax)
 
// enable server preview (Ajax)
 
if (typeof(wikEdUseAjaxPreview) == 'undefined') { window.wikEdUseAjaxPreview = true; }
 
if (typeof(wikEdUseAjaxPreview) == 'undefined') { window.wikEdUseAjaxPreview = true; }
+
 
// enable auto update (Ajax)
 
// enable auto update (Ajax)
 
if (typeof(wikEdAutoUpdate) == 'undefined') { window.wikEdAutoUpdate = true; }
 
if (typeof(wikEdAutoUpdate) == 'undefined') { window.wikEdAutoUpdate = true; }
+
 
// hours between update check (monobook.js)
 
// hours between update check (monobook.js)
 
window.wikEdAutoUpdateHours = window.wikEdAutoUpdateHours || 20;
 
window.wikEdAutoUpdateHours = window.wikEdAutoUpdateHours || 20;
+
 
// hours between update check (Greasemonkey)
 
// hours between update check (Greasemonkey)
 
window.wikEdAutoUpdateHoursGM = window.wikEdAutoUpdateHoursGM || 40;
 
window.wikEdAutoUpdateHoursGM = window.wikEdAutoUpdateHoursGM || 40;
+
 
// auto update: version url (Ajax)
 
// auto update: version url (Ajax)
 
window.wikEdAutoUpdateUrl = window.wikEdAutoUpdateUrl || 'http://en.wikipedia.org/w/index.php?title=User:Cacycle/wikEd_current_version&action=raw&maxage=0';
 
window.wikEdAutoUpdateUrl = window.wikEdAutoUpdateUrl || 'http://en.wikipedia.org/w/index.php?title=User:Cacycle/wikEd_current_version&action=raw&maxage=0';
+
 
 
// auto update: script url for Greasemonkey update
 
// auto update: script url for Greasemonkey update
 
window.wikEdAutoUpdateScriptUrl = window.wikEdAutoUpdateScriptUrl || 'http://en.wikipedia.org/w/index.php?action=raw&ctype=text/javascript&title=User:Cacycle/wikEd.user.js';
 
window.wikEdAutoUpdateScriptUrl = window.wikEdAutoUpdateScriptUrl || 'http://en.wikipedia.org/w/index.php?action=raw&ctype=text/javascript&title=User:Cacycle/wikEd.user.js';
+
 
 
// show complete unshortened article text for local diff, also defined in wikEdDiff.js
 
// show complete unshortened article text for local diff, also defined in wikEdDiff.js
 
if (typeof(wikEdFullDiff) == 'undefined') { window.wikEdFullDiff = false; }
 
if (typeof(wikEdFullDiff) == 'undefined') { window.wikEdFullDiff = false; }
+
 
// make links ctrl-clickable
 
// make links ctrl-clickable
 
if (typeof(wikEdFollowLinks) == 'undefined') { window.wikEdFollowLinks = true; }
 
if (typeof(wikEdFollowLinks) == 'undefined') { window.wikEdFollowLinks = true; }
+
 
// correct tab order between check boxes and submit buttons
 
// correct tab order between check boxes and submit buttons
 
if (typeof(wikEdSubmitTabOrder) == 'undefined') { window.wikEdSubmitTabOrder = false; }
 
if (typeof(wikEdSubmitTabOrder) == 'undefined') { window.wikEdSubmitTabOrder = false; }
+
 
 
// wikify table parameters, replaces original table parameters with this string
 
// wikify table parameters, replaces original table parameters with this string
 
window.wikEdWikifyTableParameters = window.wikEdWikifyTableParameters || '';
 
window.wikEdWikifyTableParameters = window.wikEdWikifyTableParameters || '';
+
 
return;
 
return;
 
}
 
}
+
 
 
//
 
//
 
// end of user configurable variables
 
// end of user configurable variables
 
//
 
//
+
 
+
 
 
//
 
//
 
// WikEdInitGlobals: initialize non-configurable variables
 
// WikEdInitGlobals: initialize non-configurable variables
 
//
 
//
+
 
 
window.WikEdInitGlobals = function() {
 
window.WikEdInitGlobals = function() {
+
 
 
// global variables
 
// global variables
+
 
window.wikEdTurnedOn = null;
 
window.wikEdTurnedOn = null;
 
window.wikEdDisabled = null;
 
window.wikEdDisabled = null;
+
 
// history
 
// history
 
window.wikEdFieldHist = [];
 
window.wikEdFieldHist = [];
Γραμμή 916: Γραμμή 915:
 
window.wikEdInputElement = [];
 
window.wikEdInputElement = [];
 
window.wikEdSelectElement = [];
 
window.wikEdSelectElement = [];
+
 
window.wikEdCheckMarker = [];
 
window.wikEdCheckMarker = [];
 
window.wikEdCheckMarker[true] = '♦';
 
window.wikEdCheckMarker[true] = '♦';
 
window.wikEdCheckMarker[false] = '◊';
 
window.wikEdCheckMarker[false] = '◊';
+
 
// cache the parsed DOM object
 
// cache the parsed DOM object
 
window.wikEdFrameDOMCache = null;
 
window.wikEdFrameDOMCache = null;
+
 
// undo all, redo all
 
// undo all, redo all
 
window.wikEdOrigVersion = '';
 
window.wikEdOrigVersion = '';
 
window.wikEdLastVersion = null;
 
window.wikEdLastVersion = null;
+
 
// global dom elements
 
// global dom elements
 
window.wikEdLogo = null;
 
window.wikEdLogo = null;
 
window.wikEdLogoList = null;
 
window.wikEdLogoList = null;
+
 
window.wikEdDebug = null;
 
window.wikEdDebug = null;
 
window.wikEdTextarea = null;
 
window.wikEdTextarea = null;
Γραμμή 938: Γραμμή 937:
 
window.wikEdFrameDocument = null;
 
window.wikEdFrameDocument = null;
 
window.wikEdFrameWindow = null;
 
window.wikEdFrameWindow = null;
+
 
window.wikEdInputWrapper = null;
 
window.wikEdInputWrapper = null;
 
window.wikEdToolbarWrapper = null;
 
window.wikEdToolbarWrapper = null;
Γραμμή 953: Γραμμή 952:
 
window.wikEdLocalPrevWrapper = null;
 
window.wikEdLocalPrevWrapper = null;
 
window.wikEdInsertWrapper = null;
 
window.wikEdInsertWrapper = null;
+
 
window.wikEdButtonBarFormat = null;
 
window.wikEdButtonBarFormat = null;
 
window.wikEdButtonBarCustom1 = null;
 
window.wikEdButtonBarCustom1 = null;
Γραμμή 966: Γραμμή 965:
 
window.wikEdClearSummary = null;
 
window.wikEdClearSummary = null;
 
window.wikEdClearSummaryImg = null;
 
window.wikEdClearSummaryImg = null;
+
 
window.wikEdCaseSensitive = null;
 
window.wikEdCaseSensitive = null;
 
window.wikEdRegExp = null;
 
window.wikEdRegExp = null;
 
window.wikEdFindAhead = null;
 
window.wikEdFindAhead = null;
+
 
window.wikEdFindText = null;
 
window.wikEdFindText = null;
 
window.wikEdReplaceText = null;
 
window.wikEdReplaceText = null;
Γραμμή 976: Γραμμή 975:
 
window.wikEdSummarySelect = null;
 
window.wikEdSummarySelect = null;
 
window.wikEdSummaryTextWidth = null;
 
window.wikEdSummaryTextWidth = null;
+
 
window.wikEdEditOptions = null;
 
window.wikEdEditOptions = null;
 
window.wikEdEditHelp = null;
 
window.wikEdEditHelp = null;
+
 
window.wikEdSaveButton = null;
 
window.wikEdSaveButton = null;
 
window.wikEdPreviewButton = null;
 
window.wikEdPreviewButton = null;
Γραμμή 987: Γραμμή 986:
 
window.wikEdDiffPreviewButton = null;
 
window.wikEdDiffPreviewButton = null;
 
window.wikEdSummaryLabel = null;
 
window.wikEdSummaryLabel = null;
+
 
 
window.wikEdGetGlobalNode = null;
 
window.wikEdGetGlobalNode = null;
+
 
// various
 
// various
 
window.wikEdEditButtonHandler = {};
 
window.wikEdEditButtonHandler = {};
Γραμμή 1.005: Γραμμή 1.004:
 
window.wikEdFollowLinkHash = {};
 
window.wikEdFollowLinkHash = {};
 
window.wikEdWikiGlobals = window.wikEdWikiGlobals || [];
 
window.wikEdWikiGlobals = window.wikEdWikiGlobals || [];
+
 
// wikEd settings
 
// wikEd settings
 
window.wikEdRefHide = null;
 
window.wikEdRefHide = null;
Γραμμή 1.013: Γραμμή 1.012:
 
window.wikEdHighlightSyntax = null;
 
window.wikEdHighlightSyntax = null;
 
window.wikEdDiff = null;
 
window.wikEdDiff = null;
+
 
// unicode fixing
 
// unicode fixing
 
window.wikEdControlCharsStr = '';
 
window.wikEdControlCharsStr = '';
Γραμμή 1.021: Γραμμή 1.020:
 
window.wikEdControlChars = null;
 
window.wikEdControlChars = null;
 
window.wikEdStrangeSpaces = null;
 
window.wikEdStrangeSpaces = null;
+
 
// RegExTypoFix rules
 
// RegExTypoFix rules
 
window.wikEdTypoRulesFind = [];
 
window.wikEdTypoRulesFind = [];
 
window.wikEdTypoRulesReplace = [];
 
window.wikEdTypoRulesReplace = [];
+
 
// debugging time measurement, usage: wikEdDebugTimer.push([1234, new Date]); WikEdDebugTimer();
 
// debugging time measurement, usage: wikEdDebugTimer.push([1234, new Date]); WikEdDebugTimer();
 
window.wikEdDebugTimer = [];
 
window.wikEdDebugTimer = [];
+
 
// MediaWiki file paths for use in regexps
 
// MediaWiki file paths for use in regexps
 
window.wikEdServer = '';
 
window.wikEdServer = '';
Γραμμή 1.034: Γραμμή 1.033:
 
window.wikEdScriptPath = '';
 
window.wikEdScriptPath = '';
 
window.wikEdArticlePrefix = '';
 
window.wikEdArticlePrefix = '';
+
 
// hash of loaded scripts, also defined in wikEdDiff.js
 
// hash of loaded scripts, also defined in wikEdDiff.js
 
return;
 
return;
 
}
 
}
+
 
 
// variables needed during startup
 
// variables needed during startup
 
window.wikEdExternalScripts = window.wikEdExternalScripts || [];
 
window.wikEdExternalScripts = window.wikEdExternalScripts || [];
 
window.wikEdStartup = window.wikEdStartup || false;
 
window.wikEdStartup = window.wikEdStartup || false;
+
 
 
// check if this is executed under Greasemonkey
 
// check if this is executed under Greasemonkey
 
window.wikEdGreasemonkey = false;
 
window.wikEdGreasemonkey = false;
Γραμμή 1.048: Γραμμή 1.047:
 
wikEdGreasemonkey = true;
 
wikEdGreasemonkey = true;
 
}
 
}
+
 
 
//
 
//
 
// WikEdInitObject: initialize object, keep pre-defined values
 
// WikEdInitObject: initialize object, keep pre-defined values
 
//
 
//
+
 
 
window.WikEdInitObject = function(array, preset) {
 
window.WikEdInitObject = function(array, preset) {
+
 
 
for (var key in preset) {
 
for (var key in preset) {
 
if (array[key] == null) {
 
if (array[key] == null) {
Γραμμή 1.062: Γραμμή 1.061:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdInitImage: initialize images, keep pre-defined values
 
// WikEdInitImage: initialize images, keep pre-defined values
 
//
 
//
+
 
 
window.WikEdInitImage = function(array, preset) {
 
window.WikEdInitImage = function(array, preset) {
+
 
 
for (var key in preset) {
 
for (var key in preset) {
 
if (array[key] == null) {
 
if (array[key] == null) {
+
 
 
// remove MediaWiki path prefixes and add local path
 
// remove MediaWiki path prefixes and add local path
 
if (wikEdUseLocalImages == true) {
 
if (wikEdUseLocalImages == true) {
 
array[key] = wikEdImagePathLocal + preset[key].replace(/^[0-9a-f]+\/[0-9a-f]+\//, '');
 
array[key] = wikEdImagePathLocal + preset[key].replace(/^[0-9a-f]+\/[0-9a-f]+\//, '');
 
}
 
}
+
 
 
// add path
 
// add path
 
else {
 
else {
Γραμμή 1.086: Γραμμή 1.085:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdStartup: wikEd startup code, called during page load
 
// WikEdStartup: wikEd startup code, called during page load
 
//
 
//
+
 
 
window.WikEdStartup = function() {
 
window.WikEdStartup = function() {
+
 
 
// check if this has already been run
 
// check if this has already been run
 
if (window.wikEdStartup == true) {
 
if (window.wikEdStartup == true) {
Γραμμή 1.099: Γραμμή 1.098:
 
}
 
}
 
window.wikEdStartup = true;
 
window.wikEdStartup = true;
+
 
 
// redirect WED shortcut to WikEdDebug(objectName, object, popup)
 
// redirect WED shortcut to WikEdDebug(objectName, object, popup)
 
window.WED = WikEdDebug;
 
window.WED = WikEdDebug;
+
 
 
// redirect missing Greasemonkey debugging function to WikEdDebug
 
// redirect missing Greasemonkey debugging function to WikEdDebug
 
if (wikEdGreasemonkey == false) {
 
if (wikEdGreasemonkey == false) {
 
window.GM_log = window.WikEdDebug;
 
window.GM_log = window.WikEdDebug;
 
}
 
}
+
 
 
// schedule the setup routine
 
// schedule the setup routine
 
if (window.addEventListener != null) {
 
if (window.addEventListener != null) {
Γραμμή 1.118: Γραμμή 1.117:
 
window.onload = WikEdSetup;
 
window.onload = WikEdSetup;
 
}
 
}
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdSetup: basic setup routine, scheduled after page load
 
// WikEdSetup: basic setup routine, scheduled after page load
 
//
 
//
+
 
 
window.WikEdSetup = function() {
 
window.WikEdSetup = function() {
+
 
 
// check if this has already been run
 
// check if this has already been run
 
if (document.getElementById('wikEdSetupFlag') != null) {
 
if (document.getElementById('wikEdSetupFlag') != null) {
Γραμμή 1.138: Γραμμή 1.137:
 
flag.style.visibility = 'hidden';
 
flag.style.visibility = 'hidden';
 
document.body.appendChild(flag);
 
document.body.appendChild(flag);
+
 
 
// check if this is a MediaWiki page >= v1.4.0
 
// check if this is a MediaWiki page >= v1.4.0
 
if (
 
if (
Γραμμή 1.150: Γραμμή 1.149:
 
return;
 
return;
 
}
 
}
+
 
 
// initialize user configurable variables
 
// initialize user configurable variables
 
WikEdInitGlobalConfigs();
 
WikEdInitGlobalConfigs();
+
 
 
// initialize non-configurable variables
 
// initialize non-configurable variables
 
WikEdInitGlobals();
 
WikEdInitGlobals();
+
 
 
// parse global MediaWiki globals into hash
 
// parse global MediaWiki globals into hash
 
var variable = ['wgServer', 'wgTitle', 'wgCanonicalNamespace', 'wgArticlePath', 'wgScriptPath', 'wgUserName', 'wgCurRevisionId'];
 
var variable = ['wgServer', 'wgTitle', 'wgCanonicalNamespace', 'wgArticlePath', 'wgScriptPath', 'wgUserName', 'wgCurRevisionId'];
Γραμμή 1.162: Γραμμή 1.161:
 
wikEdWikiGlobals[ variable[i] ] = WikEdGetGlobal(variable[i]);
 
wikEdWikiGlobals[ variable[i] ] = WikEdGetGlobal(variable[i]);
 
}
 
}
+
 
 
// check for updates
 
// check for updates
 
WikEdAutoUpdate();
 
WikEdAutoUpdate();
+
 
// initialize texts and images (needed here for logo)
 
// initialize texts and images (needed here for logo)
 
WikedInitText();
 
WikedInitText();
 
WikedInitImage();
 
WikedInitImage();
+
 
 
// add image path to image filename
 
// add image path to image filename
 
if (wikEdLogo == null) {
 
if (wikEdLogo == null) {
+
 
 
// insert logo into personal toolbar
 
// insert logo into personal toolbar
 
wikEdLogo = document.createElement('img');
 
wikEdLogo = document.createElement('img');
 
wikEdLogo.id = 'wikEdLogoImg';
 
wikEdLogo.id = 'wikEdLogoImg';
+
 
 
wikEdLogoList = document.createElement('li');
 
wikEdLogoList = document.createElement('li');
 
wikEdLogoList.id = 'wikEdLogoList';
 
wikEdLogoList.id = 'wikEdLogoList';
 
wikEdLogoList.appendChild(wikEdLogo);
 
wikEdLogoList.appendChild(wikEdLogo);
+
 
 
var personalTools = document.getElementById('p-personal');
 
var personalTools = document.getElementById('p-personal');
 
if (personalTools != null) {
 
if (personalTools != null) {
 
personalTools.getElementsByTagName('ul')[0].appendChild(wikEdLogoList);
 
personalTools.getElementsByTagName('ul')[0].appendChild(wikEdLogoList);
 
}
 
}
+
 
 
// add event listener to logo
 
// add event listener to logo
 
if (window.addEventListener != null) {
 
if (window.addEventListener != null) {
Γραμμή 1.194: Γραμμή 1.193:
 
}
 
}
 
}
 
}
+
 
 
// detect already loaded external scripts
 
// detect already loaded external scripts
 
if (wikEdExternalScripts == null) {
 
if (wikEdExternalScripts == null) {
Γραμμή 1.208: Γραμμή 1.207:
 
}
 
}
 
}
 
}
+
 
 
// load the external diff script
 
// load the external diff script
 
var head = document.getElementsByTagName('head')[0];
 
var head = document.getElementsByTagName('head')[0];
Γραμμή 1.220: Γραμμή 1.219:
 
wikEdExternalScripts['diff.js'] = true;
 
wikEdExternalScripts['diff.js'] = true;
 
}
 
}
+
 
 
// load the external wikEdDiff script
 
// load the external wikEdDiff script
 
if ( (wikEdLoadDiff == true) && (wikEdExternalScripts['wikEdDiff.js'] == null) ) {
 
if ( (wikEdLoadDiff == true) && (wikEdExternalScripts['wikEdDiff.js'] == null) ) {
Γραμμή 1.231: Γραμμή 1.230:
 
wikEdExternalScripts['wikEdDiff.js'] = true;
 
wikEdExternalScripts['wikEdDiff.js'] = true;
 
}
 
}
+
 
 
// check if disabled
 
// check if disabled
 
var disabled = WikEdGetPersistent('wikEdDisabled');
 
var disabled = WikEdGetPersistent('wikEdDisabled');
Γραμμή 1.240: Γραμμή 1.239:
 
return;
 
return;
 
}
 
}
+
 
 
// continue setup
 
// continue setup
 
WikEdTurnOn();
 
WikEdTurnOn();
+
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdTurnOn: continue setup, can be called repeatedly
 
// WikEdTurnOn: continue setup, can be called repeatedly
 
//
 
//
+
 
 
window.WikEdTurnOn = function(scrollToText) {
 
window.WikEdTurnOn = function(scrollToText) {
+
 
 
// check if setup was already run
 
// check if setup was already run
 
if (wikEdTurnedOn == true) {
 
if (wikEdTurnedOn == true) {
 
return;
 
return;
 
}
 
}
+
 
 
// set error logo
 
// set error logo
 
WikEdSetLogo('error');
 
WikEdSetLogo('error');
+
 
 
// at the moment this works only for Mozilla browsers (Mozilla, Mozilla Firefox, Mozilla SeaMonkey)
 
// at the moment this works only for Mozilla browsers (Mozilla, Mozilla Firefox, Mozilla SeaMonkey)
 
if (wikEdSkipBrowserTest != true) {
 
if (wikEdSkipBrowserTest != true) {
+
 
 
// no id no wikEd
 
// no id no wikEd
 
if (navigator.appName == null) {
 
if (navigator.appName == null) {
Γραμμή 1.270: Γραμμή 1.269:
 
}
 
}
 
else {
 
else {
+
 
 
// check if it is a Netscape descendant
 
// check if it is a Netscape descendant
 
var origin = navigator.appName.match(/Netscape/i);
 
var origin = navigator.appName.match(/Netscape/i);
Γραμμή 1.276: Γραμμή 1.275:
 
wikEdBrowserNotSupported = true;
 
wikEdBrowserNotSupported = true;
 
}
 
}
+
 
 
// check the generation
 
// check the generation
 
var generation = navigator.appVersion.match(/\d+(\.\d+)/);
 
var generation = navigator.appVersion.match(/\d+(\.\d+)/);
Γραμμή 1.282: Γραμμή 1.281:
 
wikEdBrowserNotSupported = true;
 
wikEdBrowserNotSupported = true;
 
}
 
}
+
 
 
// check if it is a Gecko browser
 
// check if it is a Gecko browser
 
var geckoDate = navigator.userAgent.match(/\bGecko\/(\d+)/i);
 
var geckoDate = navigator.userAgent.match(/\bGecko\/(\d+)/i);
Γραμμή 1.290: Γραμμή 1.289:
 
}
 
}
 
}
 
}
+
 
 
// check browser and version
 
// check browser and version
 
var agent = navigator.userAgent.match(/(Firefox|Netscape|SeaMonkey)\/(\d+\.\d+)/i);
 
var agent = navigator.userAgent.match(/(Firefox|Netscape|SeaMonkey)\/(\d+\.\d+)/i);
Γραμμή 1.305: Γραμμή 1.304:
 
}
 
}
 
}
 
}
+
 
 
// browser not supported, set error message
 
// browser not supported, set error message
 
if (wikEdBrowserNotSupported == true) {
 
if (wikEdBrowserNotSupported == true) {
Γραμμή 1.312: Γραμμή 1.311:
 
}
 
}
 
}
 
}
+
 
 
// check if this is an edit page
 
// check if this is an edit page
 
wikEdTextarea = document.getElementsByName('wpTextbox1')[0];
 
wikEdTextarea = document.getElementsByName('wpTextbox1')[0];
Γραμμή 1.318: Γραμμή 1.317:
 
wikEdSaveButton = document.getElementById('wpSave');
 
wikEdSaveButton = document.getElementById('wpSave');
 
if ( (wikEdTextarea == null) || (wpEditform == null) || (wikEdSaveButton == null) ) {
 
if ( (wikEdTextarea == null) || (wpEditform == null) || (wikEdSaveButton == null) ) {
+
 
 
// reset error indicator
 
// reset error indicator
 
WikEdSetLogo();
 
WikEdSetLogo();
 
return;
 
return;
 
}
 
}
+
 
 
// initialize frame css, main css, buttons, and button bars
 
// initialize frame css, main css, buttons, and button bars
 
WikedInitFrameCSS();
 
WikedInitFrameCSS();
Γραμμή 1.330: Γραμμή 1.329:
 
WikedInitButtonKey();
 
WikedInitButtonKey();
 
WikedInitButtonBar();
 
WikedInitButtonBar();
+
 
 
// define Unicode characters for fixing function
 
// define Unicode characters for fixing function
 
WikEdInitUnicode();
 
WikEdInitUnicode();
+
 
 
// detect if we add a new section (+ tab)
 
// detect if we add a new section (+ tab)
 
if (/(\?|&)section=new\b/.test(window.location.search) == true) {
 
if (/(\?|&)section=new\b/.test(window.location.search) == true) {
 
wikEdAddNewSection = true;
 
wikEdAddNewSection = true;
 
}
 
}
+
 
 
// load the external InstaView script
 
// load the external InstaView script
 
var head = document.getElementsByTagName('head')[0];
 
var head = document.getElementsByTagName('head')[0];
Γραμμή 1.348: Γραμμή 1.347:
 
head.appendChild(script);
 
head.appendChild(script);
 
}
 
}
+
 
wikEdExternalScripts['instaview.js'] = true;
 
wikEdExternalScripts['instaview.js'] = true;
 
}
 
}
Γραμμή 1.354: Γραμμή 1.353:
 
wikEdUseLocalPreview = false;
 
wikEdUseLocalPreview = false;
 
}
 
}
+
 
 
// get initial textarea height
 
// get initial textarea height
 
wikEdTextareaHeight = wikEdTextarea.offsetHeight;
 
wikEdTextareaHeight = wikEdTextarea.offsetHeight;
+
 
 
// setup the undo buffers and save the original text for local changes view
 
// setup the undo buffers and save the original text for local changes view
 
wikEdOrigVersion = wikEdTextarea.value;
 
wikEdOrigVersion = wikEdTextarea.value;
+
 
 
// add stylesheet definitions
 
// add stylesheet definitions
 
var mainStyle = new WikEdStyleSheet();
 
var mainStyle = new WikEdStyleSheet();
Γραμμή 1.373: Γραμμή 1.372:
 
}
 
}
 
mainStyle.addRules(rules);
 
mainStyle.addRules(rules);
+
 
 
// get button settings from saved settings
 
// get button settings from saved settings
 
wikEdUsing = WikEdGetSavedSetting('wikEdSummaryUsing', wikEdUsingPreset);
 
wikEdUsing = WikEdGetSavedSetting('wikEdSummaryUsing', wikEdUsingPreset);
Γραμμή 1.382: Γραμμή 1.381:
 
wikEdRefHide = WikEdGetSavedSetting('wikEdRefHide', wikEdRefHidePreset);
 
wikEdRefHide = WikEdGetSavedSetting('wikEdRefHide', wikEdRefHidePreset);
 
wikEdDiff = WikEdGetSavedSetting('wikEdDiff', wikEdDiffPreset);
 
wikEdDiff = WikEdGetSavedSetting('wikEdDiff', wikEdDiffPreset);
+
 
 
// no fullscreen for preview pages
 
// no fullscreen for preview pages
 
if (window.location.search.match(/(\?|&)action=submit\b/) != null) {
 
if (window.location.search.match(/(\?|&)action=submit\b/) != null) {
 
wikEdFullScreenMode = false;
 
wikEdFullScreenMode = false;
 
}
 
}
+
 
 
// disable wikEd for js pages
 
// disable wikEd for js pages
 
if (/\.js$/.test(wikEdWikiGlobals['wgTitle']) == true) {
 
if (/\.js$/.test(wikEdWikiGlobals['wgTitle']) == true) {
Γραμμή 1.399: Γραμμή 1.398:
 
}
 
}
 
}
 
}
+
 
 
// preset frame related styles to avoid browser crashes
 
// preset frame related styles to avoid browser crashes
 
var styleFrameBody;
 
var styleFrameBody;
Γραμμή 1.429: Γραμμή 1.428:
 
inputWrapperClass = 'wikEdInputWrapper';
 
inputWrapperClass = 'wikEdInputWrapper';
 
}
 
}
+
 
 
// create wikEd element wrappers
 
// create wikEd element wrappers
+
 
 
// create input wrapper, this contains the whole fullscreen content
 
// create input wrapper, this contains the whole fullscreen content
 
wikEdInputWrapper = document.createElement('div');
 
wikEdInputWrapper = document.createElement('div');
Γραμμή 1.437: Γραμμή 1.436:
 
wikEdInputWrapper.className = inputWrapperClass;
 
wikEdInputWrapper.className = inputWrapperClass;
 
wikEdTextarea.parentNode.insertBefore(wikEdInputWrapper, wikEdTextarea);
 
wikEdTextarea.parentNode.insertBefore(wikEdInputWrapper, wikEdTextarea);
+
 
 
// create toolbar wrapper
 
// create toolbar wrapper
 
wikEdToolbarWrapper = document.createElement('div');
 
wikEdToolbarWrapper = document.createElement('div');
Γραμμή 1.443: Γραμμή 1.442:
 
wikEdToolbarWrapper.className = 'wikEdToolbarWrapper';
 
wikEdToolbarWrapper.className = 'wikEdToolbarWrapper';
 
wikEdInputWrapper.appendChild(wikEdToolbarWrapper);
 
wikEdInputWrapper.appendChild(wikEdToolbarWrapper);
+
 
 
// create debug textarea wrapper
 
// create debug textarea wrapper
 
wikEdDebugWrapper = document.createElement('div');
 
wikEdDebugWrapper = document.createElement('div');
Γραμμή 1.451: Γραμμή 1.450:
 
wikEdDebugWrapper.style.visibility = 'hidden';
 
wikEdDebugWrapper.style.visibility = 'hidden';
 
wikEdInputWrapper.appendChild(wikEdDebugWrapper);
 
wikEdInputWrapper.appendChild(wikEdDebugWrapper);
+
 
 
// create textarea wrapper
 
// create textarea wrapper
 
wikEdTextareaWrapper = document.createElement('div');
 
wikEdTextareaWrapper = document.createElement('div');
Γραμμή 1.459: Γραμμή 1.458:
 
wikEdTextareaWrapper.style.visibility = styleTextareaWrapperVisibility;
 
wikEdTextareaWrapper.style.visibility = styleTextareaWrapperVisibility;
 
wikEdInputWrapper.appendChild(wikEdTextareaWrapper);
 
wikEdInputWrapper.appendChild(wikEdTextareaWrapper);
+
 
 
// create frame wrapper
 
// create frame wrapper
 
wikEdFrameWrapper = document.createElement('div');
 
wikEdFrameWrapper = document.createElement('div');
Γραμμή 1.467: Γραμμή 1.466:
 
wikEdFrameWrapper.style.visibility = styleFrameWrapperVisibility;
 
wikEdFrameWrapper.style.visibility = styleFrameWrapperVisibility;
 
wikEdInputWrapper.appendChild(wikEdFrameWrapper);
 
wikEdInputWrapper.appendChild(wikEdFrameWrapper);
+
 
 
// create console wrapper for buttons, summary, and submit
 
// create console wrapper for buttons, summary, and submit
 
wikEdConsoleWrapper = document.createElement('div');
 
wikEdConsoleWrapper = document.createElement('div');
Γραμμή 1.473: Γραμμή 1.472:
 
wikEdConsoleWrapper.className = 'wikEdConsoleWrapper';
 
wikEdConsoleWrapper.className = 'wikEdConsoleWrapper';
 
wikEdInputWrapper.appendChild(wikEdConsoleWrapper);
 
wikEdInputWrapper.appendChild(wikEdConsoleWrapper);
+
 
 
// create buttons wrapper for wikEd buttons
 
// create buttons wrapper for wikEd buttons
 
wikEdButtonsWrapper = document.createElement('div');
 
wikEdButtonsWrapper = document.createElement('div');
Γραμμή 1.484: Γραμμή 1.483:
 
wikEdConsoleWrapper.appendChild(wikEdButtonsWrapper);
 
wikEdConsoleWrapper.appendChild(wikEdButtonsWrapper);
 
}
 
}
+
 
 
// create summary wrapper for summary, minor edit, and watch this page
 
// create summary wrapper for summary, minor edit, and watch this page
 
wikEdSummaryWrapper = document.createElement('div');
 
wikEdSummaryWrapper = document.createElement('div');
 
wikEdSummaryWrapper.id = 'wikEdSummaryWrapper';
 
wikEdSummaryWrapper.id = 'wikEdSummaryWrapper';
+
 
 
// add summary above the edit field if we add a new section (+ tab)
 
// add summary above the edit field if we add a new section (+ tab)
 
if (wikEdAddNewSection == true) {
 
if (wikEdAddNewSection == true) {
Γραμμή 1.498: Γραμμή 1.497:
 
wikEdConsoleWrapper.appendChild(wikEdSummaryWrapper);
 
wikEdConsoleWrapper.appendChild(wikEdSummaryWrapper);
 
}
 
}
+
 
 
// create summary input wrapper
 
// create summary input wrapper
 
wikEdSummaryInputWrapper = document.createElement('div');
 
wikEdSummaryInputWrapper = document.createElement('div');
Γραμμή 1.504: Γραμμή 1.503:
 
wikEdSummaryInputWrapper.className = 'wikEdSummaryInputWrapper';
 
wikEdSummaryInputWrapper.className = 'wikEdSummaryInputWrapper';
 
wikEdSummaryWrapper.appendChild(wikEdSummaryInputWrapper);
 
wikEdSummaryWrapper.appendChild(wikEdSummaryInputWrapper);
+
 
 
// create minor edit and watch page wrapper
 
// create minor edit and watch page wrapper
 
wikEdSummaryOptions = document.createElement('div');
 
wikEdSummaryOptions = document.createElement('div');
Γραμμή 1.510: Γραμμή 1.509:
 
wikEdSummaryOptions.className = 'wikEdSummaryOptions';
 
wikEdSummaryOptions.className = 'wikEdSummaryOptions';
 
wikEdSummaryWrapper.appendChild(wikEdSummaryOptions);
 
wikEdSummaryWrapper.appendChild(wikEdSummaryOptions);
+
 
 
// create submit wrapper for submit elements
 
// create submit wrapper for submit elements
 
wikEdSubmitWrapper = document.createElement('div');
 
wikEdSubmitWrapper = document.createElement('div');
Γραμμή 1.516: Γραμμή 1.515:
 
wikEdSubmitWrapper.className = 'wikEdSubmitWrapper';
 
wikEdSubmitWrapper.className = 'wikEdSubmitWrapper';
 
wikEdConsoleWrapper.appendChild(wikEdSubmitWrapper);
 
wikEdConsoleWrapper.appendChild(wikEdSubmitWrapper);
+
 
 
// create submit buttons wrapper for submit buttons and help links
 
// create submit buttons wrapper for submit buttons and help links
 
wikEdSubmitButtonsWrapper = document.createElement('div');
 
wikEdSubmitButtonsWrapper = document.createElement('div');
Γραμμή 1.522: Γραμμή 1.521:
 
wikEdSubmitButtonsWrapper.className = 'wikEdSubmitButtonsWrapper';
 
wikEdSubmitButtonsWrapper.className = 'wikEdSubmitButtonsWrapper';
 
wikEdSubmitWrapper.appendChild(wikEdSubmitButtonsWrapper);
 
wikEdSubmitWrapper.appendChild(wikEdSubmitButtonsWrapper);
+
 
 
// create preview wrapper for preview and diff box
 
// create preview wrapper for preview and diff box
 
wikEdLocalPrevWrapper = document.createElement('div');
 
wikEdLocalPrevWrapper = document.createElement('div');
Γραμμή 1.529: Γραμμή 1.528:
 
wikEdLocalPrevWrapper.style.display = 'none';
 
wikEdLocalPrevWrapper.style.display = 'none';
 
wikEdInputWrapper.appendChild(wikEdLocalPrevWrapper);
 
wikEdInputWrapper.appendChild(wikEdLocalPrevWrapper);
+
 
 
// create insert wrapper for insert special chars links
 
// create insert wrapper for insert special chars links
 
wikEdInsertWrapper = document.createElement('div');
 
wikEdInsertWrapper = document.createElement('div');
Γραμμή 1.535: Γραμμή 1.534:
 
wikEdInsertWrapper.className = 'wikEdInsertWrapper';
 
wikEdInsertWrapper.className = 'wikEdInsertWrapper';
 
wikEdInputWrapper.appendChild(wikEdInsertWrapper);
 
wikEdInputWrapper.appendChild(wikEdInsertWrapper);
+
 
 
// append input wrapper to document
 
// append input wrapper to document
 
wpEditform.insertBefore(wikEdInputWrapper, wpEditform.firstChild);
 
wpEditform.insertBefore(wikEdInputWrapper, wpEditform.firstChild);
+
 
 
// fill the wrappers
 
// fill the wrappers
+
 
 
// wikEdDiff enhanced ajax diff
 
// wikEdDiff enhanced ajax diff
 
if (typeof(wikEdDiffTable) == 'object') {
 
if (typeof(wikEdDiffTable) == 'object') {
Γραμμή 1.549: Γραμμή 1.548:
 
}
 
}
 
}
 
}
+
 
 
// add toolbar to toolbar wrapper
 
// add toolbar to toolbar wrapper
 
var wpToolbar = document.getElementById('toolbar');
 
var wpToolbar = document.getElementById('toolbar');
Γραμμή 1.561: Γραμμή 1.560:
 
wikEdToolbarWrapper.appendChild(wpToolbar);
 
wikEdToolbarWrapper.appendChild(wpToolbar);
 
}
 
}
+
 
 
// call wikibits:mwSetupToolbar() now because it would terminate with an error after setting textarea to display: none
 
// call wikibits:mwSetupToolbar() now because it would terminate with an error after setting textarea to display: none
 
if (wpToolbar != null) {
 
if (wpToolbar != null) {
Γραμμή 1.571: Γραμμή 1.570:
 
}
 
}
 
}
 
}
+
 
 
wikEdEditOptions = document.getElementsByName('wpSummary')[0].parentNode;
 
wikEdEditOptions = document.getElementsByName('wpSummary')[0].parentNode;
 
wikEdEditOptions.className = 'wikEdEditOptions';
 
wikEdEditOptions.className = 'wikEdEditOptions';
+
 
 
// add summary elements to summary input wrapper
 
// add summary elements to summary input wrapper
 
wikEdSummaryLabel = document.getElementById('wpSummaryLabel');
 
wikEdSummaryLabel = document.getElementById('wpSummaryLabel');
Γραμμή 1.580: Γραμμή 1.579:
 
wikEdSummaryInputWrapper.appendChild(wikEdSummaryLabel);
 
wikEdSummaryInputWrapper.appendChild(wikEdSummaryLabel);
 
}
 
}
+
 
 
wikEdSummaryText = document.getElementsByName('wpSummary')[0];
 
wikEdSummaryText = document.getElementsByName('wpSummary')[0];
 
wikEdSummaryInputWrapper.appendChild(wikEdSummaryText);
 
wikEdSummaryInputWrapper.appendChild(wikEdSummaryText);
+
 
 
// move editpage-copywarn out of summary wrapper
 
// move editpage-copywarn out of summary wrapper
 
// needs to be done before appending editOptions to summary wrapper otherwise a linebreak stays (Mozilla bug)
 
// needs to be done before appending editOptions to summary wrapper otherwise a linebreak stays (Mozilla bug)
Γραμμή 1.590: Γραμμή 1.589:
 
wikEdInputWrapper.parentNode.insertBefore(copywarn, wikEdInputWrapper.nextSibling);
 
wikEdInputWrapper.parentNode.insertBefore(copywarn, wikEdInputWrapper.nextSibling);
 
}
 
}
+
 
 
// add submit buttons to submit wrapper
 
// add submit buttons to submit wrapper
 
var wpEditButtons = wikEdSaveButton.parentNode;
 
var wpEditButtons = wikEdSaveButton.parentNode;
 
wikEdSubmitWrapper.insertBefore(wpEditButtons, wikEdSubmitButtonsWrapper);
 
wikEdSubmitWrapper.insertBefore(wpEditButtons, wikEdSubmitButtonsWrapper);
+
 
 
// move edit options after submit buttons; crashes Mozilla when appended after filling the iframe
 
// move edit options after submit buttons; crashes Mozilla when appended after filling the iframe
 
var previewButton = document.getElementById('wpDiff');
 
var previewButton = document.getElementById('wpDiff');
 
previewButton.parentNode.insertBefore(wikEdEditOptions, previewButton.nextSibling);
 
previewButton.parentNode.insertBefore(wikEdEditOptions, previewButton.nextSibling);
+
 
 
// remove linebreak before minor edit checkbox
 
// remove linebreak before minor edit checkbox
 
var node = wikEdEditOptions.firstChild;
 
var node = wikEdEditOptions.firstChild;
Γραμμή 1.610: Γραμμή 1.609:
 
node = node.nextSibling;
 
node = node.nextSibling;
 
}
 
}
+
 
 
// correct tab order between check boxes and submits
 
// correct tab order between check boxes and submits
 
wikEdPreviewButton = document.getElementById('wpPreview');
 
wikEdPreviewButton = document.getElementById('wpPreview');
Γραμμή 1.627: Γραμμή 1.626:
 
}
 
}
 
}
 
}
+
 
 
// create debug textarea and add to debug wrapper
 
// create debug textarea and add to debug wrapper
 
wikEdDebug = document.createElement('textarea');
 
wikEdDebug = document.createElement('textarea');
Γραμμή 1.633: Γραμμή 1.632:
 
wikEdDebug.style.display = 'none';
 
wikEdDebug.style.display = 'none';
 
wikEdDebugWrapper.appendChild(wikEdDebug);
 
wikEdDebugWrapper.appendChild(wikEdDebug);
+
 
 
// add textarea to textarea wrapper
 
// add textarea to textarea wrapper
 
wikEdTextareaWrapper.appendChild(wikEdTextarea);
 
wikEdTextareaWrapper.appendChild(wikEdTextarea);
+
 
 
// add edit-frame to frame wrapper
 
// add edit-frame to frame wrapper
 
// any DOM changes to a starting iframe in designmode may crash mozilla, including DOM move, display: none; and position: absolute;
 
// any DOM changes to a starting iframe in designmode may crash mozilla, including DOM move, display: none; and position: absolute;
+
 
 
// create the iframe
 
// create the iframe
 
var html = '';
 
var html = '';
Γραμμή 1.649: Γραμμή 1.648:
 
wikEdFrameWrapper.innerHTML = html;
 
wikEdFrameWrapper.innerHTML = html;
 
wikEdInputWrapper.insertBefore(wikEdTextareaWrapper, wikEdFrameWrapper);
 
wikEdInputWrapper.insertBefore(wikEdTextareaWrapper, wikEdFrameWrapper);
+
 
 
// fill the frame with content
 
// fill the frame with content
 
html = '';
 
html = '';
Γραμμή 1.655: Γραμμή 1.654:
 
html += '<body id="wikEdFrameBody" class="wikedFrameBody"' + styleFrameBody + 'onload="window.document.designMode = \'on\'; window.document.execCommand(\'styleWithCSS\', false, false);">';
 
html += '<body id="wikEdFrameBody" class="wikedFrameBody"' + styleFrameBody + 'onload="window.document.designMode = \'on\'; window.document.execCommand(\'styleWithCSS\', false, false);">';
 
html += '</body></html>';
 
html += '</body></html>';
+
 
 
wikEdFrame = document.getElementById('wikEdFrame');
 
wikEdFrame = document.getElementById('wikEdFrame');
 
wikEdFrameWindow = wikEdFrame.contentWindow;
 
wikEdFrameWindow = wikEdFrame.contentWindow;
Γραμμή 1.663: Γραμμή 1.662:
 
wikEdFrameDocument.close();
 
wikEdFrameDocument.close();
 
wikEdFrameBody = wikEdFrameDocument.body;
 
wikEdFrameBody = wikEdFrameDocument.body;
+
 
 
// generate button bars and add them to the buttons wrapper
 
// generate button bars and add them to the buttons wrapper
 
// form wrapper has been added against summary input submit defaulting to this button
 
// form wrapper has been added against summary input submit defaulting to this button
 
wikEdButtonBarFormat = MakeButtonBar(wikEdButtonBar['format']);
 
wikEdButtonBarFormat = MakeButtonBar(wikEdButtonBar['format']);
 
wikEdButtonsWrapper.appendChild(wikEdButtonBarFormat);
 
wikEdButtonsWrapper.appendChild(wikEdButtonBarFormat);
+
 
 
wikEdButtonBarControl = MakeButtonBar(wikEdButtonBar['control']);
 
wikEdButtonBarControl = MakeButtonBar(wikEdButtonBar['control']);
 
wikEdButtonsWrapper.appendChild(wikEdButtonBarControl);
 
wikEdButtonsWrapper.appendChild(wikEdButtonBarControl);
+
 
 
if (wikEdButtonBar['custom1'][6].length > 0) {
 
if (wikEdButtonBar['custom1'][6].length > 0) {
 
wikEdButtonBarCustom1 = MakeButtonBar(wikEdButtonBar['custom1']);
 
wikEdButtonBarCustom1 = MakeButtonBar(wikEdButtonBar['custom1']);
 
wikEdButtonsWrapper.appendChild(wikEdButtonBarCustom1);
 
wikEdButtonsWrapper.appendChild(wikEdButtonBarCustom1);
 
}
 
}
+
 
 
wikEdButtonBarFind = MakeButtonBar(wikEdButtonBar['find']);
 
wikEdButtonBarFind = MakeButtonBar(wikEdButtonBar['find']);
 
wikEdButtonsWrapper.appendChild(wikEdButtonBarFind);
 
wikEdButtonsWrapper.appendChild(wikEdButtonBarFind);
+
 
 
wikEdButtonBarFix = MakeButtonBar(wikEdButtonBar['fix']);
 
wikEdButtonBarFix = MakeButtonBar(wikEdButtonBar['fix']);
 
wikEdButtonsWrapper.appendChild(wikEdButtonBarFix);
 
wikEdButtonsWrapper.appendChild(wikEdButtonBarFix);
+
 
 
if (wikEdButtonBar['custom2'][6].length > 0) {
 
if (wikEdButtonBar['custom2'][6].length > 0) {
 
wikEdButtonBarCustom2 = MakeButtonBar(wikEdButtonBar['custom2']);
 
wikEdButtonBarCustom2 = MakeButtonBar(wikEdButtonBar['custom2']);
 
wikEdButtonsWrapper.appendChild(wikEdButtonBarCustom2);
 
wikEdButtonsWrapper.appendChild(wikEdButtonBarCustom2);
 
}
 
}
+
 
 
var br = document.createElement('br');
 
var br = document.createElement('br');
 
br.style.clear = 'both';
 
br.style.clear = 'both';
 
wikEdButtonsWrapper.appendChild(br);
 
wikEdButtonsWrapper.appendChild(br);
+
 
 
wikEdCaseSensitive = document.getElementById('wikEdCaseSensitive');
 
wikEdCaseSensitive = document.getElementById('wikEdCaseSensitive');
 
wikEdRegExp = document.getElementById('wikEdRegExp');
 
wikEdRegExp = document.getElementById('wikEdRegExp');
Γραμμή 1.697: Γραμμή 1.696:
 
wikEdFindText = document.getElementById('wikEdFindText');
 
wikEdFindText = document.getElementById('wikEdFindText');
 
wikEdReplaceText = document.getElementById('wikEdReplaceText');
 
wikEdReplaceText = document.getElementById('wikEdReplaceText');
+
 
 
// add preview box top bar to submit wrapper
 
// add preview box top bar to submit wrapper
 
wikEdButtonBarPreview = MakeButtonBar(wikEdButtonBar['preview']);
 
wikEdButtonBarPreview = MakeButtonBar(wikEdButtonBar['preview']);
 
wikEdSubmitWrapper.insertBefore(wikEdButtonBarPreview, wikEdSubmitWrapper.firstChild);
 
wikEdSubmitWrapper.insertBefore(wikEdButtonBarPreview, wikEdSubmitWrapper.firstChild);
+
 
 
// add preview box and its bottom bar to preview wrapper
 
// add preview box and its bottom bar to preview wrapper
 
var div = document.createElement('div');
 
var div = document.createElement('div');
Γραμμή 1.707: Γραμμή 1.706:
 
div.className = 'wikEdPreviewBoxOuter';
 
div.className = 'wikEdPreviewBoxOuter';
 
wikEdLocalPrevWrapper.appendChild(div);
 
wikEdLocalPrevWrapper.appendChild(div);
+
 
 
wikEdPreviewBox = document.createElement('div');
 
wikEdPreviewBox = document.createElement('div');
 
wikEdPreviewBox.id = 'wikEdPreviewBox';
 
wikEdPreviewBox.id = 'wikEdPreviewBox';
 
wikEdPreviewBox.className = 'wikEdPreviewBox';
 
wikEdPreviewBox.className = 'wikEdPreviewBox';
 
div.appendChild(wikEdPreviewBox);
 
div.appendChild(wikEdPreviewBox);
+
 
 
wikEdButtonBarPreview2 = MakeButtonBar(wikEdButtonBar['preview2']);
 
wikEdButtonBarPreview2 = MakeButtonBar(wikEdButtonBar['preview2']);
 
wikEdLocalPrevWrapper.appendChild(wikEdButtonBarPreview2);
 
wikEdLocalPrevWrapper.appendChild(wikEdButtonBarPreview2);
+
 
 
// add jump box to standard preview
 
// add jump box to standard preview
 
var wikiPreview = document.getElementById('wikiPreview');
 
var wikiPreview = document.getElementById('wikiPreview');
Γραμμή 1.724: Γραμμή 1.723:
 
}
 
}
 
}
 
}
+
 
 
// add insert special chars to insert wrapper
 
// add insert special chars to insert wrapper
 
var wpSpecialchars = document.getElementById('editpage-specialchars');
 
var wpSpecialchars = document.getElementById('editpage-specialchars');
Γραμμή 1.730: Γραμμή 1.729:
 
wikEdInsertWrapper.appendChild(wpSpecialchars);
 
wikEdInsertWrapper.appendChild(wpSpecialchars);
 
}
 
}
+
 
 
// wrappers filled
 
// wrappers filled
+
 
 
// add local preview button next to submit button
 
// add local preview button next to submit button
 
wikEdLocalPreview = document.createElement('button');
 
wikEdLocalPreview = document.createElement('button');
Γραμμή 1.738: Γραμμή 1.737:
 
wikEdLocalPreview.title = wikEdText['wikEdLocalPreview title'];
 
wikEdLocalPreview.title = wikEdText['wikEdLocalPreview title'];
 
wikEdLocalPreview.className = 'wikEdLocalPreview';
 
wikEdLocalPreview.className = 'wikEdLocalPreview';
+
 
 
var localPreviewImg = document.createElement('img');
 
var localPreviewImg = document.createElement('img');
 
localPreviewImg.id = 'wikEdLocalPreviewImg';
 
localPreviewImg.id = 'wikEdLocalPreviewImg';
Γραμμή 1.744: Γραμμή 1.743:
 
localPreviewImg.alt = wikEdText['wikEdLocalPreviewImg alt'];
 
localPreviewImg.alt = wikEdText['wikEdLocalPreviewImg alt'];
 
localPreviewImg.title = wikEdText['wikEdLocalPreviewImg title'];
 
localPreviewImg.title = wikEdText['wikEdLocalPreviewImg title'];
+
 
 
wikEdLocalPreview.appendChild(localPreviewImg);
 
wikEdLocalPreview.appendChild(localPreviewImg);
 
wikEdPreviewButton.parentNode.insertBefore(wikEdLocalPreview, wikEdPreviewButton.nextSibling);
 
wikEdPreviewButton.parentNode.insertBefore(wikEdLocalPreview, wikEdPreviewButton.nextSibling);
+
 
 
// add local diff button next to submit button
 
// add local diff button next to submit button
 
wikEdLocalDiff = document.createElement('button');
 
wikEdLocalDiff = document.createElement('button');
Γραμμή 1.753: Γραμμή 1.752:
 
wikEdLocalDiff.title = wikEdText['wikEdLocalDiff title'];
 
wikEdLocalDiff.title = wikEdText['wikEdLocalDiff title'];
 
wikEdLocalDiff.className = 'wikEdLocalDiff';
 
wikEdLocalDiff.className = 'wikEdLocalDiff';
+
 
 
var localDiffImg = document.createElement('img');
 
var localDiffImg = document.createElement('img');
 
localDiffImg.id = 'wikEdLocalDiffImg';
 
localDiffImg.id = 'wikEdLocalDiffImg';
Γραμμή 1.759: Γραμμή 1.758:
 
localDiffImg.alt = wikEdText['wikEdLocalDiffImg alt'];
 
localDiffImg.alt = wikEdText['wikEdLocalDiffImg alt'];
 
localDiffImg.title = wikEdText['wikEdLocalDiffImg title'];
 
localDiffImg.title = wikEdText['wikEdLocalDiffImg title'];
+
 
 
wikEdLocalDiff.appendChild(localDiffImg);
 
wikEdLocalDiff.appendChild(localDiffImg);
 
wikEdDiffPreviewButton.parentNode.insertBefore(wikEdLocalDiff, wikEdDiffPreviewButton.nextSibling);
 
wikEdDiffPreviewButton.parentNode.insertBefore(wikEdLocalDiff, wikEdDiffPreviewButton.nextSibling);
+
 
 
// initialize image buttons
 
// initialize image buttons
 
WikEdButton(document.getElementById('wikEdDiff'),            'wikEdDiff', null, wikEdDiff);
 
WikEdButton(document.getElementById('wikEdDiff'),            'wikEdDiff', null, wikEdDiff);
Γραμμή 1.776: Γραμμή 1.775:
 
WikEdButton(document.getElementById('wikEdClose'),          'wikEdClose', null, false, 'wikEdButton');
 
WikEdButton(document.getElementById('wikEdClose'),          'wikEdClose', null, false, 'wikEdButton');
 
WikEdButton(document.getElementById('wikEdClose2'),          'wikEdClose2', null, false, 'wikEdButton');
 
WikEdButton(document.getElementById('wikEdClose2'),          'wikEdClose2', null, false, 'wikEdButton');
+
 
 
// hide typo fix button until typo fix rules are loaded and parsed
 
// hide typo fix button until typo fix rules are loaded and parsed
 
document.getElementById('wikEdFixRegExTypo').style.display = 'none';
 
document.getElementById('wikEdFixRegExTypo').style.display = 'none';
+
 
 
// add a clear summary button left to the summary input field
 
// add a clear summary button left to the summary input field
 
var clearSummaryForm = document.createElement('form');
 
var clearSummaryForm = document.createElement('form');
Γραμμή 1.785: Γραμμή 1.784:
 
clearSummaryForm.className = 'wikEdClearSummaryForm';
 
clearSummaryForm.className = 'wikEdClearSummaryForm';
 
wikEdSummaryText.parentNode.insertBefore(clearSummaryForm, wikEdSummaryText);
 
wikEdSummaryText.parentNode.insertBefore(clearSummaryForm, wikEdSummaryText);
+
 
 
wikEdClearSummary = document.createElement('button');
 
wikEdClearSummary = document.createElement('button');
 
wikEdClearSummary.id = 'wikEdClearSummary';
 
wikEdClearSummary.id = 'wikEdClearSummary';
Γραμμή 1.793: Γραμμή 1.792:
 
wikEdClearSummary.style.height = (wikEdSummaryText.clientHeight + 1) +'px';
 
wikEdClearSummary.style.height = (wikEdSummaryText.clientHeight + 1) +'px';
 
clearSummaryForm.appendChild(wikEdClearSummary);
 
clearSummaryForm.appendChild(wikEdClearSummary);
+
 
 
wikEdClearSummaryImg = document.createElement('img');
 
wikEdClearSummaryImg = document.createElement('img');
 
wikEdClearSummaryImg.id = 'wikEdClearSummaryImg';
 
wikEdClearSummaryImg.id = 'wikEdClearSummaryImg';
Γραμμή 1.799: Γραμμή 1.798:
 
wikEdClearSummaryImg.alt = 'Clear summary';
 
wikEdClearSummaryImg.alt = 'Clear summary';
 
wikEdClearSummary.appendChild(wikEdClearSummaryImg);
 
wikEdClearSummary.appendChild(wikEdClearSummaryImg);
+
 
 
// remember button width, might be without image
 
// remember button width, might be without image
 
wikEdClearSummaryWidth = wikEdClearSummary.offsetWidth;
 
wikEdClearSummaryWidth = wikEdClearSummary.offsetWidth;
+
 
 
// make the summary a combo box
 
// make the summary a combo box
 
var summaryComboInput = document.createElement('span');
 
var summaryComboInput = document.createElement('span');
Γραμμή 1.808: Γραμμή 1.807:
 
summaryComboInput.className = 'wikEdSummaryComboInput';
 
summaryComboInput.className = 'wikEdSummaryComboInput';
 
summaryComboInput = wikEdSummaryText.parentNode.insertBefore(summaryComboInput, wikEdSummaryText);
 
summaryComboInput = wikEdSummaryText.parentNode.insertBefore(summaryComboInput, wikEdSummaryText);
+
 
 
wikEdSummaryText = wikEdSummaryText.parentNode.removeChild(wikEdSummaryText);
 
wikEdSummaryText = wikEdSummaryText.parentNode.removeChild(wikEdSummaryText);
 
wikEdSummaryText.className = 'wikEdSummaryText';
 
wikEdSummaryText.className = 'wikEdSummaryText';
Γραμμή 1.816: Γραμμή 1.815:
 
}
 
}
 
wikEdSummaryText.style.width = wikEdSummaryTextWidth + 'px';
 
wikEdSummaryText.style.width = wikEdSummaryTextWidth + 'px';
+
 
 
wikEdSummarySelect = document.createElement('select');
 
wikEdSummarySelect = document.createElement('select');
 
wikEdSummarySelect.id = 'wikEdSummarySelect';
 
wikEdSummarySelect.id = 'wikEdSummarySelect';
 
wikEdSummarySelect.className = 'wikEdSummarySelect';
 
wikEdSummarySelect.className = 'wikEdSummarySelect';
+
 
 
summaryComboInput.appendChild(wikEdSummaryText);
 
summaryComboInput.appendChild(wikEdSummaryText);
 
summaryComboInput.appendChild(wikEdSummarySelect);
 
summaryComboInput.appendChild(wikEdSummarySelect);
+
 
 
// shorten submit button texts
 
// shorten submit button texts
 
wikEdPreviewButton.value = wikEdText['shortenedPreview'];
 
wikEdPreviewButton.value = wikEdText['shortenedPreview'];
 
wikEdDiffPreviewButton.value = wikEdText['shortenedChanges'];
 
wikEdDiffPreviewButton.value = wikEdText['shortenedChanges'];
+
 
 
// set up combo input boxes with history
 
// set up combo input boxes with history
 
wikEdFieldHist ['find'] = [];
 
wikEdFieldHist ['find'] = [];
Γραμμή 1.835: Γραμμή 1.834:
 
wikEdSelectElement['find'].style.height = (wikEdInputElement['find'].clientHeight + 1) +'px';
 
wikEdSelectElement['find'].style.height = (wikEdInputElement['find'].clientHeight + 1) +'px';
 
wikEdSelectElement['find'].title = wikEdText['wikEdFindSelect title'];
 
wikEdSelectElement['find'].title = wikEdText['wikEdFindSelect title'];
+
 
 
wikEdFieldHist ['replace'] = [];
 
wikEdFieldHist ['replace'] = [];
 
wikEdSavedName['replace'] = 'wikEdReplaceHistory';
 
wikEdSavedName['replace'] = 'wikEdReplaceHistory';
Γραμμή 1.842: Γραμμή 1.841:
 
wikEdSelectElement['replace'].style.height = (wikEdInputElement['replace'].clientHeight + 1) +'px';
 
wikEdSelectElement['replace'].style.height = (wikEdInputElement['replace'].clientHeight + 1) +'px';
 
wikEdSelectElement['replace'].title = wikEdText['wikEdReplaceSelect title'];
 
wikEdSelectElement['replace'].title = wikEdText['wikEdReplaceSelect title'];
+
 
 
wikEdFieldHist ['summary'] = [];
 
wikEdFieldHist ['summary'] = [];
 
wikEdSavedName['summary'] = 'wikEdSummaryHistory';
 
wikEdSavedName['summary'] = 'wikEdSummaryHistory';
Γραμμή 1.849: Γραμμή 1.848:
 
wikEdSelectElement['summary'].style.height = (wikEdInputElement['summary'].clientHeight + 1) +'px';
 
wikEdSelectElement['summary'].style.height = (wikEdInputElement['summary'].clientHeight + 1) +'px';
 
wikEdSelectElement['summary'].title = wikEdText['wikEdSummarySelect title'];
 
wikEdSelectElement['summary'].title = wikEdText['wikEdSummarySelect title'];
+
 
 
// adjust the select field widths to that of the text input fields
 
// adjust the select field widths to that of the text input fields
 
WikEdResizeComboInput('find');
 
WikEdResizeComboInput('find');
 
WikEdResizeComboInput('replace');
 
WikEdResizeComboInput('replace');
 
WikEdResizeComboInput('summary');
 
WikEdResizeComboInput('summary');
+
 
 
// hide the button bars per saved setting
 
// hide the button bars per saved setting
 
WikEdButtonBarInit(wikEdButtonBarFormat);
 
WikEdButtonBarInit(wikEdButtonBarFormat);
Γραμμή 1.866: Γραμμή 1.865:
 
WikEdButtonBarInit(wikEdButtonBarCustom2);
 
WikEdButtonBarInit(wikEdButtonBarCustom2);
 
}
 
}
+
 
 
// display only the textarea or the iframe, dont change the frame
 
// display only the textarea or the iframe, dont change the frame
 
if (wikEdUseWikEd == true) {
 
if (wikEdUseWikEd == true) {
Γραμμή 1.874: Γραμμή 1.873:
 
WikEdSetEditArea(false, true);
 
WikEdSetEditArea(false, true);
 
}
 
}
+
 
 
// add a link to the wikEd help page
 
// add a link to the wikEd help page
 
if ( (wikEdHelpPageLink != '') && (wikEdHelpPageLink != null) ) {
 
if ( (wikEdHelpPageLink != '') && (wikEdHelpPageLink != null) ) {
Γραμμή 1.881: Γραμμή 1.880:
 
editHelpParent = editHelpParent.nextSibling;
 
editHelpParent = editHelpParent.nextSibling;
 
} while (editHelpParent.tagName != 'SPAN');
 
} while (editHelpParent.tagName != 'SPAN');
+
 
 
var editHelp = editHelpParent.lastChild;
 
var editHelp = editHelpParent.lastChild;
 
while (editHelp.tagName != 'A') {
 
while (editHelp.tagName != 'A') {
 
editHelp = editHelp.previousSibling;
 
editHelp = editHelp.previousSibling;
 
}
 
}
+
 
 
wikEdHelpSpan = document.createElement('span');
 
wikEdHelpSpan = document.createElement('span');
 
wikEdHelpSpan.id = 'wikEdHelpSpan';
 
wikEdHelpSpan.id = 'wikEdHelpSpan';
Γραμμή 1.892: Γραμμή 1.891:
 
wikEdHelpSpan.innerHTML = wikEdHelpPageLink;
 
wikEdHelpSpan.innerHTML = wikEdHelpPageLink;
 
editHelpParent.insertBefore(wikEdHelpSpan, editHelp.nextSibling);
 
editHelpParent.insertBefore(wikEdHelpSpan, editHelp.nextSibling);
+
 
 
wikEdEditHelp = wikEdHelpSpan.parentNode;
 
wikEdEditHelp = wikEdHelpSpan.parentNode;
 
wikEdEditHelp.id = 'wikEdEditHelp';
 
wikEdEditHelp.id = 'wikEdEditHelp';
 
wikEdEditHelp.className = 'wikEdEditHelp';
 
wikEdEditHelp.className = 'wikEdEditHelp';
 
}
 
}
+
 
 
// add frame stylesheet definition
 
// add frame stylesheet definition
 
wikEdFrameBody.style.fontSize = parseInt(wikEdTextZoom) + '%;';
 
wikEdFrameBody.style.fontSize = parseInt(wikEdTextZoom) + '%;';
Γραμμή 1.915: Γραμμή 1.914:
 
}
 
}
 
frameStyle.addRules(rules);
 
frameStyle.addRules(rules);
+
 
 
// copy the textarea content to the iframe
 
// copy the textarea content to the iframe
 
if (wikEdUseWikEd == true) {
 
if (wikEdUseWikEd == true) {
 
window.WikEdUpdateFrame();
 
window.WikEdUpdateFrame();
 
}
 
}
+
 
 
// register edit button click events
 
// register edit button click events
 
for (var buttonId in wikEdEditButtonHandler) {
 
for (var buttonId in wikEdEditButtonHandler) {
Γραμμή 1.931: Γραμμή 1.930:
 
}
 
}
 
}
 
}
+
 
 
// register summary shrinking event after loading the 'Clear summary' image handler
 
// register summary shrinking event after loading the 'Clear summary' image handler
 
wikEdClearSummaryImg.addEventListener('load', WikEdShrinkSummaryHandler, true);
 
wikEdClearSummaryImg.addEventListener('load', WikEdShrinkSummaryHandler, true);
+
 
 
// register summary resize event for window resizing
 
// register summary resize event for window resizing
 
window.addEventListener('resize', WikEdResizeSummaryHandler, true);
 
window.addEventListener('resize', WikEdResizeSummaryHandler, true);
+
 
 
// register frame events
 
// register frame events
 
wikEdFrameDocument.addEventListener('keydown', WikEdKeyFrameHandler, true);
 
wikEdFrameDocument.addEventListener('keydown', WikEdKeyFrameHandler, true);
Γραμμή 1.944: Γραμμή 1.943:
 
wikEdFrameDocument.addEventListener('mouseup', WikEdKeyFrameHandler, true);
 
wikEdFrameDocument.addEventListener('mouseup', WikEdKeyFrameHandler, true);
 
wikEdFrameDocument.addEventListener('keydown', WikEdShiftAltHandler, true);
 
wikEdFrameDocument.addEventListener('keydown', WikEdShiftAltHandler, true);
+
 
 
// register document events
 
// register document events
 
document.addEventListener('keydown', WikEdShiftAltHandler, true);
 
document.addEventListener('keydown', WikEdShiftAltHandler, true);
+
 
 
// register find ahead events
 
// register find ahead events
 
wikEdFindText.addEventListener('keyup', WikEdFindAhead, true);
 
wikEdFindText.addEventListener('keyup', WikEdFindAhead, true);
+
 
 
// register submit button events
 
// register submit button events
 
wikEdSaveButton.addEventListener('click', WikEdSaveButtonHandler, true);
 
wikEdSaveButton.addEventListener('click', WikEdSaveButtonHandler, true);
Γραμμή 1.957: Γραμμή 1.956:
 
wikEdLocalPreview.addEventListener('click', WikEdLocalPreviewHandler, true);
 
wikEdLocalPreview.addEventListener('click', WikEdLocalPreviewHandler, true);
 
wikEdLocalDiff.addEventListener('click', WikEdLocalDiffHandler, true);
 
wikEdLocalDiff.addEventListener('click', WikEdLocalDiffHandler, true);
+
 
 
// unload (leaving page) events
 
// unload (leaving page) events
 
window.addEventListener('unload', WikEdUnloadHandler, false);
 
window.addEventListener('unload', WikEdUnloadHandler, false);
+
 
 
// set button bar grip area events
 
// set button bar grip area events
 
wikEdButtonBarFormat.firstChild.firstChild.addEventListener('click', WikEdButtonBarGripHandler, false);
 
wikEdButtonBarFormat.firstChild.firstChild.addEventListener('click', WikEdButtonBarGripHandler, false);
Γραμμή 1.976: Γραμμή 1.975:
 
}
 
}
 
}
 
}
+
 
 
// register combo box events
 
// register combo box events
 
wikEdSummarySelect.addEventListener('change', function() { WikEdChangeComboInput('summary'); }, false);
 
wikEdSummarySelect.addEventListener('change', function() { WikEdChangeComboInput('summary'); }, false);
 
wikEdSummarySelect.addEventListener('focus', function() { WikEdSetComboOptions('summary'); }, false);
 
wikEdSummarySelect.addEventListener('focus', function() { WikEdSetComboOptions('summary'); }, false);
+
 
 
wikEdSelectElement['find'].addEventListener('change', function() { WikEdChangeComboInput('find'); }, false);
 
wikEdSelectElement['find'].addEventListener('change', function() { WikEdChangeComboInput('find'); }, false);
 
wikEdSelectElement['find'].addEventListener('focus', function() { WikEdSetComboOptions('find'); }, false);
 
wikEdSelectElement['find'].addEventListener('focus', function() { WikEdSetComboOptions('find'); }, false);
+
 
 
wikEdSelectElement['replace'].addEventListener('change', function() { WikEdChangeComboInput('replace'); }, false);
 
wikEdSelectElement['replace'].addEventListener('change', function() { WikEdChangeComboInput('replace'); }, false);
 
wikEdSelectElement['replace'].addEventListener('focus', function() { WikEdSetComboOptions('replace'); }, false);
 
wikEdSelectElement['replace'].addEventListener('focus', function() { WikEdSetComboOptions('replace'); }, false);
+
 
 
// register the clear summary click handler
 
// register the clear summary click handler
 
wikEdClearSummary.addEventListener('click', WikEdClearSummaryHandler, true);
 
wikEdClearSummary.addEventListener('click', WikEdClearSummaryHandler, true);
+
 
 
// select the text on focus for find and replace fields
 
// select the text on focus for find and replace fields
 
wikEdFindText.addEventListener('focus', WikEdFindReplaceHandler, true);
 
wikEdFindText.addEventListener('focus', WikEdFindReplaceHandler, true);
 
wikEdReplaceText.addEventListener('focus', WikEdFindReplaceHandler, true);
 
wikEdReplaceText.addEventListener('focus', WikEdFindReplaceHandler, true);
+
 
 
// tab / shift-tab between find and replace fields
 
// tab / shift-tab between find and replace fields
 
wikEdFindText.addEventListener('keydown', WikEdFindReplaceHandler, true);
 
wikEdFindText.addEventListener('keydown', WikEdFindReplaceHandler, true);
 
wikEdReplaceText.addEventListener('keydown', WikEdFindReplaceHandler, true);
 
wikEdReplaceText.addEventListener('keydown', WikEdFindReplaceHandler, true);
+
 
 
// scroll to edit window if it is not a preview page
 
// scroll to edit window if it is not a preview page
 
if (scrollToText != false) {
 
if (scrollToText != false) {
Γραμμή 2.003: Γραμμή 2.002:
 
window.scroll(0, WikEdGetOffsetTop(wikEdInputWrapper) - 2);
 
window.scroll(0, WikEdGetOffsetTop(wikEdInputWrapper) - 2);
 
}
 
}
+
 
 
// focus the edit area
 
// focus the edit area
 
if (wikEdUseWikEd == true) {
 
if (wikEdUseWikEd == true) {
Γραμμή 2.013: Γραμμή 2.012:
 
}
 
}
 
}
 
}
+
 
 
// init MediaWiki file paths for use in regexps
 
// init MediaWiki file paths for use in regexps
 
if (wikEdWikiGlobals['wgServer'] != null) {
 
if (wikEdWikiGlobals['wgServer'] != null) {
Γραμμή 2.029: Γραμμή 2.028:
 
wikEdArticlePath = wikEdArticlePath.replace(/(\W)/g, '\\$1');
 
wikEdArticlePath = wikEdArticlePath.replace(/(\W)/g, '\\$1');
 
wikEdScriptPath = wikEdScriptPath.replace(/(\W)/g, '\\$1');
 
wikEdScriptPath = wikEdScriptPath.replace(/(\W)/g, '\\$1');
+
 
 
// fullscreen mode
 
// fullscreen mode
 
if (wikEdFullScreenMode == true) {
 
if (wikEdFullScreenMode == true) {
 
WikEdFullScreen(wikEdFullScreenMode, true);
 
WikEdFullScreen(wikEdFullScreenMode, true);
 
}
 
}
+
 
 
// overwrite the insertTags function in wikibits.js used by the standard button toolbar and the editpage special chars
 
// overwrite the insertTags function in wikibits.js used by the standard button toolbar and the editpage special chars
 
if (typeof(insertTags) == 'function') {
 
if (typeof(insertTags) == 'function') {
Γραμμή 2.040: Γραμμή 2.039:
 
insertTags = window.WikEdInsertTags;
 
insertTags = window.WikEdInsertTags;
 
}
 
}
+
 
 
// reset error indicator
 
// reset error indicator
 
WikEdSetLogo();
 
WikEdSetLogo();
 
wikEdTurnedOn = true;
 
wikEdTurnedOn = true;
+
 
 
// load and parse RegExTypoFix rules if the button is enabled
 
// load and parse RegExTypoFix rules if the button is enabled
 
WikEdLoadTypoFixRules();
 
WikEdLoadTypoFixRules();
+
 
 
// setup finished
 
// setup finished
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdAutoUpdate: check for the latest version and force-reload to update
 
// WikEdAutoUpdate: check for the latest version and force-reload to update
 
//
 
//
+
 
 
window.WikEdAutoUpdate = function() {
 
window.WikEdAutoUpdate = function() {
+
 
 
// check only on non-interaction pages
 
// check only on non-interaction pages
 
if (/(\?|&)action=/.test(window.location.search) == true) {
 
if (/(\?|&)action=/.test(window.location.search) == true) {
 
return;
 
return;
 
}
 
}
+
 
 
// check if autoupdate is enabled
 
// check if autoupdate is enabled
 
if (wikEdAutoUpdate != true) {
 
if (wikEdAutoUpdate != true) {
 
return;
 
return;
 
}
 
}
+
 
 
// get date of last update check
 
// get date of last update check
 
var lastCheckStr = WikEdGetPersistent('wikEdAutoUpdate');
 
var lastCheckStr = WikEdGetPersistent('wikEdAutoUpdate');
 
var lastCheckDate = new Date(lastCheckStr);
 
var lastCheckDate = new Date(lastCheckStr);
+
 
 
// fix missing or corrupt saved setting
 
// fix missing or corrupt saved setting
 
if (isNaN(lastCheckDate.valueOf()) == true) {
 
if (isNaN(lastCheckDate.valueOf()) == true) {
Γραμμή 2.078: Γραμμή 2.077:
 
return;
 
return;
 
}
 
}
+
 
 
// get the hours since last update check
 
// get the hours since last update check
 
var currentDate = new Date();
 
var currentDate = new Date();
 
var diffHours = (currentDate - lastCheckDate) / 1000 / 60 / 60;
 
var diffHours = (currentDate - lastCheckDate) / 1000 / 60 / 60;
+
 
 
if (wikEdGreasemonkey == true) {
 
if (wikEdGreasemonkey == true) {
 
if (diffHours < wikEdAutoUpdateHoursGM) {
 
if (diffHours < wikEdAutoUpdateHoursGM) {
Γραμμή 2.091: Γραμμή 2.090:
 
return;
 
return;
 
}
 
}
+
 
 
// save current update check date
 
// save current update check date
 
WikEdSetPersistent('wikEdAutoUpdate', currentDate.toUTCString(), 0, '/');
 
WikEdSetPersistent('wikEdAutoUpdate', currentDate.toUTCString(), 0, '/');
+
 
 
// make the ajax request
 
// make the ajax request
 
WikEdAjaxRequest('GET', wikEdAutoUpdateUrl, null, null, null, null, function(ajax) {
 
WikEdAjaxRequest('GET', wikEdAutoUpdateUrl, null, null, null, null, function(ajax) {
+
 
// get response
 
// get response
 
var html = ajax.responseText;
 
var html = ajax.responseText;
+
 
 
// get current version number from string
 
// get current version number from string
 
var ver = wikEdProgramVersion.match(/(\d+)\.(\d+)\.(\d+)(\w?)/);
 
var ver = wikEdProgramVersion.match(/(\d+)\.(\d+)\.(\d+)(\w?)/);
Γραμμή 2.107: Γραμμή 2.106:
 
}
 
}
 
var currentVersion = ((Number(ver[1]) * 1000 + Number(ver[2])) * 1000 + Number(ver[3])) * 100 + (ver[4] + '0').charCodeAt(0);
 
var currentVersion = ((Number(ver[1]) * 1000 + Number(ver[2])) * 1000 + Number(ver[3])) * 100 + (ver[4] + '0').charCodeAt(0);
+
 
 
// get new version number from string
 
// get new version number from string
 
var ver = html.match(/(\d+)\.(\d+)\.(\d+)(\w?)/);
 
var ver = html.match(/(\d+)\.(\d+)\.(\d+)(\w?)/);
Γραμμή 2.114: Γραμμή 2.113:
 
}
 
}
 
var newVersion = ((Number(ver[1]) * 1000 + Number(ver[2])) * 1000 + Number(ver[3])) * 100 + (ver[4] + '0').charCodeAt(0);
 
var newVersion = ((Number(ver[1]) * 1000 + Number(ver[2])) * 1000 + Number(ver[3])) * 100 + (ver[4] + '0').charCodeAt(0);
+
 
 
// compare the versions
 
// compare the versions
 
if (currentVersion >= newVersion) {
 
if (currentVersion >= newVersion) {
 
return;
 
return;
 
}
 
}
+
 
 
// update Greasemonkey script by navigating to the script code page
 
// update Greasemonkey script by navigating to the script code page
 
if (wikEdGreasemonkey == true) {
 
if (wikEdGreasemonkey == true) {
 
window.location.href = wikEdAutoUpdateScriptUrl;
 
window.location.href = wikEdAutoUpdateScriptUrl;
 
}
 
}
+
 
 
// update wikEd by reloading the page with cache bypassing (equivalent to Shift-Reload or Shift-F5)
 
// update wikEd by reloading the page with cache bypassing (equivalent to Shift-Reload or Shift-F5)
 
else {
 
else {
Γραμμή 2.130: Γραμμή 2.129:
 
}
 
}
 
});
 
});
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdLoadTypoFixRules: load and parse RegExTypoFix rules if the button is enabled
 
// WikEdLoadTypoFixRules: load and parse RegExTypoFix rules if the button is enabled
 
//
 
//
+
 
 
window.WikEdLoadTypoFixRules = function() {
 
window.WikEdLoadTypoFixRules = function() {
+
 
 
// load RegExTypoFix rules per Ajax if enabled
 
// load RegExTypoFix rules per Ajax if enabled
 
if ( (wikEdRegExTypoFix == true) && (wikEdTypoRulesFind.length == 0) ) {
 
if ( (wikEdRegExTypoFix == true) && (wikEdTypoRulesFind.length == 0) ) {
+
 
 
// make the ajax request
 
// make the ajax request
 
WikEdAjaxRequest('GET', wikEdRegExTypoFixURL, null, null, null, null, function(ajax) {
 
WikEdAjaxRequest('GET', wikEdRegExTypoFixURL, null, null, null, null, function(ajax) {
+
 
 
// get response
 
// get response
 
var rulesTxt = ajax.responseText;
 
var rulesTxt = ajax.responseText;
+
 
 
// parse regexp rules
 
// parse regexp rules
 
var regExp = new RegExp('^<Typo +word="(.+?)" +find="(.+?)" +replace="(.+?)" +/>', 'gim');
 
var regExp = new RegExp('^<Typo +word="(.+?)" +find="(.+?)" +replace="(.+?)" +/>', 'gim');
 
while ( (regExpMatch = regExp.exec(rulesTxt)) != null) {
 
while ( (regExpMatch = regExp.exec(rulesTxt)) != null) {
+
 
 
// check if this is a valid regexp
 
// check if this is a valid regexp
 
var regExpFind;
 
var regExpFind;
Γραμμή 2.162: Γραμμή 2.161:
 
continue;
 
continue;
 
}
 
}
+
 
 
// save regexp and replace
 
// save regexp and replace
 
wikEdTypoRulesFind.push(regExpFind);
 
wikEdTypoRulesFind.push(regExpFind);
 
wikEdTypoRulesReplace.push(regExpMatch[3]);
 
wikEdTypoRulesReplace.push(regExpMatch[3]);
 
}
 
}
+
 
 
// display typo fix button
 
// display typo fix button
 
if (wikEdTypoRulesFind.length > 0) {
 
if (wikEdTypoRulesFind.length > 0) {
Γραμμή 2.177: Γραμμή 2.176:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdEditButtonHandler: handler for clicks on edit buttons
 
// WikEdEditButtonHandler: handler for clicks on edit buttons
 
//
 
//
+
 
 
window.WikEdEditButtonHandler = function(event) {
 
window.WikEdEditButtonHandler = function(event) {
+
 
 
// execute the button click handler code
 
// execute the button click handler code
 
var obj = event.currentTarget;
 
var obj = event.currentTarget;
Γραμμή 2.190: Γραμμή 2.189:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdShrinkSummaryHandler: shrink the summary after loading the 'Clear summary' image
 
// WikEdShrinkSummaryHandler: shrink the summary after loading the 'Clear summary' image
 
//
 
//
+
 
 
window.WikEdShrinkSummaryHandler = function(event) {
 
window.WikEdShrinkSummaryHandler = function(event) {
+
 
 
var diffWidth = wikEdClearSummary.offsetWidth - wikEdClearSummaryWidth;
 
var diffWidth = wikEdClearSummary.offsetWidth - wikEdClearSummaryWidth;
 
wikEdInputElement['summary'].style.width = (wikEdInputElement['summary'].clientWidth - diffWidth) + 'px';
 
wikEdInputElement['summary'].style.width = (wikEdInputElement['summary'].clientWidth - diffWidth) + 'px';
Γραμμή 2.204: Γραμμή 2.203:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdResizeSummaryHandler: adjust the summary width after resizing the window
 
// WikEdResizeSummaryHandler: adjust the summary width after resizing the window
 
//
 
//
+
 
 
window.WikEdResizeSummaryHandler = function(event) {
 
window.WikEdResizeSummaryHandler = function(event) {
+
 
 
WikEdResizeSummary();
 
WikEdResizeSummary();
 
return;
 
return;
 
}
 
}
+
 
+
 
+
 
+
 
 
//
 
//
 
// WikEdUnloadHandler: save editing frame to cached textarea
 
// WikEdUnloadHandler: save editing frame to cached textarea
 
//
 
//
+
 
 
window.WikEdUnloadHandler = function(event) {
 
window.WikEdUnloadHandler = function(event) {
+
 
 
// update textarea if not already done in submit handlers
 
// update textarea if not already done in submit handlers
 
if (wikEdUseWikEd == true) {
 
if (wikEdUseWikEd == true) {
Γραμμή 2.233: Γραμμή 2.232:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdSaveButtonHandler: 'Save page' click handler
 
// WikEdSaveButtonHandler: 'Save page' click handler
 
//
 
//
+
 
 
window.WikEdSaveButtonHandler = function(event) {
 
window.WikEdSaveButtonHandler = function(event) {
+
 
 
wikEdSaveButton.removeEventListener('click', WikEdSaveButtonHandler, true);
 
wikEdSaveButton.removeEventListener('click', WikEdSaveButtonHandler, true);
+
 
 
// update textarea
 
// update textarea
 
if (wikEdUseWikEd == true) {
 
if (wikEdUseWikEd == true) {
Γραμμή 2.248: Γραμμή 2.247:
 
wikEdTextareaUpdated = true;
 
wikEdTextareaUpdated = true;
 
}
 
}
+
 
 
// add "using wikEd" to summary, not for adding a new section (+ tab)
 
// add "using wikEd" to summary, not for adding a new section (+ tab)
 
var text = wikEdSummaryText.value;
 
var text = wikEdSummaryText.value;
Γραμμή 2.254: Γραμμή 2.253:
 
text = text.replace(/[, ]+$/, '');
 
text = text.replace(/[, ]+$/, '');
 
WikEdAddToHistory('summary');
 
WikEdAddToHistory('summary');
+
 
 
if ( (wikEdUsing == true) && (text != '') ) {
 
if ( (wikEdUsing == true) && (text != '') ) {
 
if (text.lastIndexOf(wikEdSummaryUsing) < 0) {
 
if (text.lastIndexOf(wikEdSummaryUsing) < 0) {
Γραμμή 2.263: Γραμμή 2.262:
 
}
 
}
 
wikEdSummaryText.value = text;
 
wikEdSummaryText.value = text;
+
 
 
// submit
 
// submit
 
wikEdSaveButton.click();
 
wikEdSaveButton.click();
+
 
 
// reinstate handler in case the browser back button will be used
 
// reinstate handler in case the browser back button will be used
 
wikEdSaveButton.addEventListener('click', WikEdSaveButtonHandler, true);
 
wikEdSaveButton.addEventListener('click', WikEdSaveButtonHandler, true);
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdPreviewButtonHandler: 'Show preview' click handler
 
// WikEdPreviewButtonHandler: 'Show preview' click handler
 
//
 
//
+
 
 
window.WikEdPreviewButtonHandler = function(event) {
 
window.WikEdPreviewButtonHandler = function(event) {
+
 
 
if (wikEdUseWikEd == true) {
 
if (wikEdUseWikEd == true) {
 
WikEdUpdateTextarea();
 
WikEdUpdateTextarea();
 
wikEdTextareaUpdated = true;
 
wikEdTextareaUpdated = true;
 
}
 
}
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// wikEdDiffPreviewButtonHandler: 'Show changes' click handler
 
// wikEdDiffPreviewButtonHandler: 'Show changes' click handler
 
//
 
//
+
 
 
window.wikEdDiffPreviewButtonHandler = function(event) {
 
window.wikEdDiffPreviewButtonHandler = function(event) {
 
if (wikEdFullScreenMode == true) {
 
if (wikEdFullScreenMode == true) {
Γραμμή 2.301: Γραμμή 2.300:
 
wikEdTextareaUpdated = true;
 
wikEdTextareaUpdated = true;
 
}
 
}
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdFollowLinkHandler: open highlighted link in new window/tab
 
// WikEdFollowLinkHandler: open highlighted link in new window/tab
 
//
 
//
+
 
 
window.WikEdFollowLinkHandler = function(event) {
 
window.WikEdFollowLinkHandler = function(event) {
+
 
if (event.ctrlKey == true) {
 
if (event.ctrlKey == true) {
 
var linkId = event.currentTarget.id;
 
var linkId = event.currentTarget.id;
Γραμμή 2.326: Γραμμή 2.325:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdLocalPreviewHandler: local 'Show preview' image button click handler
 
// WikEdLocalPreviewHandler: local 'Show preview' image button click handler
 
//
 
//
+
 
 
window.WikEdLocalPreviewHandler = function(event) {
 
window.WikEdLocalPreviewHandler = function(event) {
 
event.preventDefault();
 
event.preventDefault();
Γραμμή 2.337: Γραμμή 2.336:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdLocalDiffHandler: local 'Show changes' image button click handler
 
// WikEdLocalDiffHandler: local 'Show changes' image button click handler
 
//
 
//
+
 
 
window.WikEdLocalDiffHandler = function(event) {
 
window.WikEdLocalDiffHandler = function(event) {
 
event.preventDefault();
 
event.preventDefault();
Γραμμή 2.348: Γραμμή 2.347:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdButtonBarGripHandler: click, mouseover handler, see also WikEdButtonBarInit()
 
// WikEdButtonBarGripHandler: click, mouseover handler, see also WikEdButtonBarInit()
 
//
 
//
+
 
 
window.WikEdButtonBarGripHandler = function(event) {
 
window.WikEdButtonBarGripHandler = function(event) {
+
 
 
event.stopPropagation();
 
event.stopPropagation();
+
 
 
var grip = event.target;
 
var grip = event.target;
 
var gripWrapper = grip.parentNode;
 
var gripWrapper = grip.parentNode;
Γραμμή 2.364: Γραμμή 2.363:
 
var barInnerWrapper = gripWrapper.parentNode;
 
var barInnerWrapper = gripWrapper.parentNode;
 
var bar = barInnerWrapper.parentNode;
 
var bar = barInnerWrapper.parentNode;
+
 
 
if (event.type == 'click') {
 
if (event.type == 'click') {
 
buttonsWrapper.style.position = 'static';
 
buttonsWrapper.style.position = 'static';
+
 
 
// hide the buttons bar
 
// hide the buttons bar
 
if (buttonsWrapper.minimized != true) {
 
if (buttonsWrapper.minimized != true) {
Γραμμή 2.379: Γραμμή 2.378:
 
WikEdSetPersistent(bar.id + 'Hidden', '1', null, '/');
 
WikEdSetPersistent(bar.id + 'Hidden', '1', null, '/');
 
}
 
}
+
 
 
// unhide the buttons bar
 
// unhide the buttons bar
 
else {
 
else {
Γραμμή 2.391: Γραμμή 2.390:
 
}
 
}
 
}
 
}
+
 
 
// show the buttons bar on mouseover
 
// show the buttons bar on mouseover
 
else if (event.type == 'mouseover') {
 
else if (event.type == 'mouseover') {
 
if (buttonsWrapper.minimized == true) {
 
if (buttonsWrapper.minimized == true) {
 
bar.addEventListener('mouseout', WikEdButtonBarHandler, false);
 
bar.addEventListener('mouseout', WikEdButtonBarHandler, false);
+
 
 
// show buttons to the right
 
// show buttons to the right
 
if (bar.offsetParent.clientWidth > grip.offsetLeft + grip.offsetWidth + buttonsWrapper.widthOriginal) {
 
if (bar.offsetParent.clientWidth > grip.offsetLeft + grip.offsetWidth + buttonsWrapper.widthOriginal) {
 
buttonsWrapper.style.left = (grip.offsetLeft + grip.offsetWidth) + 'px';
 
buttonsWrapper.style.left = (grip.offsetLeft + grip.offsetWidth) + 'px';
 
}
 
}
+
 
 
// show buttons to the left
 
// show buttons to the left
 
else {
 
else {
 
buttonsWrapper.style.left = (gripWrapper.offsetLeft - buttonsWrapper.widthOriginal) + 'px';
 
buttonsWrapper.style.left = (gripWrapper.offsetLeft - buttonsWrapper.widthOriginal) + 'px';
 
}
 
}
+
 
 
// a mozilla bug sometimes gives offsetTop - 1 when the wikEdToolbarWrapper is hidden
 
// a mozilla bug sometimes gives offsetTop - 1 when the wikEdToolbarWrapper is hidden
 
buttonsWrapper.style.top = gripWrapper.offsetTop + 'px';
 
buttonsWrapper.style.top = gripWrapper.offsetTop + 'px';
Γραμμή 2.415: Γραμμή 2.414:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdButtonBarGripHandler: mouseout handler
 
// WikEdButtonBarGripHandler: mouseout handler
 
//
 
//
+
 
 
window.WikEdButtonBarHandler = function(event) {
 
window.WikEdButtonBarHandler = function(event) {
+
 
 
event.stopPropagation();
 
event.stopPropagation();
+
 
 
var bar = event.currentTarget;
 
var bar = event.currentTarget;
 
var barInnerWrapper = bar.firstChild;
 
var barInnerWrapper = bar.firstChild;
Γραμμή 2.431: Γραμμή 2.430:
 
var buttonsWrapper = gripWrapper.nextSibling;
 
var buttonsWrapper = gripWrapper.nextSibling;
 
var buttons = buttonsWrapper.firstChild;
 
var buttons = buttonsWrapper.firstChild;
+
 
 
// hide the buttons
 
// hide the buttons
 
if (event.type == 'mouseout') {
 
if (event.type == 'mouseout') {
 
if (buttonsWrapper.minimized == true) {
 
if (buttonsWrapper.minimized == true) {
+
 
 
// filter the events for mouseouts actually leaving the bar
 
// filter the events for mouseouts actually leaving the bar
 
if (
 
if (
Γραμμή 2.455: Γραμμή 2.454:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// clear the summary click handler
 
// clear the summary click handler
 
//
 
//
+
 
 
window.WikEdClearSummaryHandler = function(event) {
 
window.WikEdClearSummaryHandler = function(event) {
+
 
 
event.preventDefault();
 
event.preventDefault();
+
 
 
// clear the summary if it is only a paragraph name
 
// clear the summary if it is only a paragraph name
 
if ( /^\/\* .*? \*\/ *$/.test(wikEdSummaryText.value) ) {
 
if ( /^\/\* .*? \*\/ *$/.test(wikEdSummaryText.value) ) {
 
wikEdSummaryText.value = '';
 
wikEdSummaryText.value = '';
 
}
 
}
+
 
 
// clear the summary but leave paragraph names
 
// clear the summary but leave paragraph names
 
else {
 
else {
Γραμμή 2.484: Γραμμή 2.483:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdFindReplaceHandler: find and replace: tab and shift-tab between fields, select on focus
 
// WikEdFindReplaceHandler: find and replace: tab and shift-tab between fields, select on focus
 
//
 
//
+
 
 
window.WikEdFindReplaceHandler = function(event) {
 
window.WikEdFindReplaceHandler = function(event) {
+
 
 
// tab / shift-tab between fields
 
// tab / shift-tab between fields
 
if (event.type == 'keydown') {
 
if (event.type == 'keydown') {
Γραμμή 2.509: Γραμμή 2.508:
 
}
 
}
 
}
 
}
+
 
 
// select on focus
 
// select on focus
 
else if (event.type == 'focus') {
 
else if (event.type == 'focus') {
Γραμμή 2.516: Γραμμή 2.515:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdSetLogo: set the logo on top of the page
 
// WikEdSetLogo: set the logo on top of the page
 
//
 
//
+
 
 
window.WikEdSetLogo = function(state) {
 
window.WikEdSetLogo = function(state) {
+
 
 
if (state == 'error') {
 
if (state == 'error') {
 
wikEdLogo.src = wikEdImage['error'];
 
wikEdLogo.src = wikEdImage['error'];
Γραμμή 2.552: Γραμμή 2.551:
 
wikEdLogo.title = wikEdLogo.title.replace(/\{wikEdProgramVersion\}/g, version);
 
wikEdLogo.title = wikEdLogo.title.replace(/\{wikEdProgramVersion\}/g, version);
 
wikEdLogo.title = wikEdLogo.title.replace(/\{wikEdProgramDate\}/g, wikEdProgramDate);
 
wikEdLogo.title = wikEdLogo.title.replace(/\{wikEdProgramDate\}/g, wikEdProgramDate);
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// MakeButtonBar: generate button bar div element
 
// MakeButtonBar: generate button bar div element
 
//
 
//
+
 
 
window.MakeButtonBar = function(bar)  {
 
window.MakeButtonBar = function(bar)  {
+
 
 
// id outer, class outer, id inner, class inner, alt, button numbers
 
// id outer, class outer, id inner, class inner, alt, button numbers
 
var barId = bar[0];
 
var barId = bar[0];
Γραμμή 2.571: Γραμμή 2.570:
 
var gripTitle = bar[5];
 
var gripTitle = bar[5];
 
var buttonNumbers = bar[6];
 
var buttonNumbers = bar[6];
+
 
// collect the buttons
 
// collect the buttons
 
var buttons = '';
 
var buttons = '';
Γραμμή 2.608: Γραμμή 2.607:
 
break;
 
break;
 
}
 
}
+
 
 
// add accesskey information to button title and
 
// add accesskey information to button title and
 
var accessKey = '';
 
var accessKey = '';
 
if (wikEdButtonKey[buttonNo] != null) {
 
if (wikEdButtonKey[buttonNo] != null) {
 
accessKey = ' [' + wikEdText['alt-shift'] + wikEdButtonKey[buttonNo][0] + ']';
 
accessKey = ' [' + wikEdText['alt-shift'] + wikEdButtonKey[buttonNo][0] + ']';
+
 
 
// initialize wikEdButtonKeyCode[keyCode] = id
 
// initialize wikEdButtonKeyCode[keyCode] = id
 
wikEdButtonKeyCode[ (wikEdButtonKey[buttonNo][1]) ] = currButton[0];
 
wikEdButtonKeyCode[ (wikEdButtonKey[buttonNo][1]) ] = currButton[0];
 
}
 
}
+
 
// add button html code
 
// add button html code
 
buttons += '<img id="' + currButton[0] + '" class="' + currButton[1] + '" title="' + currButton[2] + accessKey +'" src="' + currButton[3] + '" width="' + currButton[4] + '" height="' + currButton[5] + '" alt="' + currButton[6] + '">';
 
buttons += '<img id="' + currButton[0] + '" class="' + currButton[1] + '" title="' + currButton[2] + accessKey +'" src="' + currButton[3] + '" width="' + currButton[4] + '" height="' + currButton[5] + '" alt="' + currButton[6] + '">';
+
 
 
// collect click event info
 
// collect click event info
 
wikEdEditButtonHandler[ currButton[0] ] = currButton[7];
 
wikEdEditButtonHandler[ currButton[0] ] = currButton[7];
+
 
 
}
 
}
 
}
 
}
+
 
 
// create the button bar div
 
// create the button bar div
 
var div = document.createElement('div');
 
var div = document.createElement('div');
 
div.id = barId;
 
div.id = barId;
 
div.className = barClass;
 
div.className = barClass;
+
 
 
var buttonsStyle = '';
 
var buttonsStyle = '';
 
if (barHeight > 0) {
 
if (barHeight > 0) {
 
buttonsStyle = ' style="height: ' + barHeight + 'px;"';
 
buttonsStyle = ' style="height: ' + barHeight + 'px;"';
 
}
 
}
+
 
 
// make a grip bar
 
// make a grip bar
 
var html = '';
 
var html = '';
Γραμμή 2.647: Γραμμή 2.646:
 
gripStyle = ' style="' + gripStyle + '"';
 
gripStyle = ' style="' + gripStyle + '"';
 
}
 
}
+
 
 
html += '<div class="wikedButtonBarInnerWrapperVisible" style="height: ' + barHeight + 'px;">';
 
html += '<div class="wikedButtonBarInnerWrapperVisible" style="height: ' + barHeight + 'px;">';
+
 
 
html += '<div class="wikedButtonBarGripWrapperVisible">';
 
html += '<div class="wikedButtonBarGripWrapperVisible">';
 
html += '<div class="wikedButtonBarGrip"' + gripStyle + ' title="' + gripTitle + '">';
 
html += '<div class="wikedButtonBarGrip"' + gripStyle + ' title="' + gripTitle + '">';
Γραμμή 2.655: Γραμμή 2.654:
 
html += '</div>';
 
html += '</div>';
 
html += '</div>';
 
html += '</div>';
+
 
 
html += '<div class="wikedButtonBarButtonsWrapperVisible"' + buttonsStyle + '>';
 
html += '<div class="wikedButtonBarButtonsWrapperVisible"' + buttonsStyle + '>';
 
html += '<div id="' + buttonsId + '" class="' + buttonsClass + '" style="">';
 
html += '<div id="' + buttonsId + '" class="' + buttonsClass + '" style="">';
Γραμμή 2.661: Γραμμή 2.660:
 
html += '</div>';
 
html += '</div>';
 
html += '</div>';
 
html += '</div>';
+
 
 
html += '</div>';
 
html += '</div>';
 
}
 
}
+
 
 
// make a standard no-grip bar
 
// make a standard no-grip bar
 
else {
 
else {
Γραμμή 2.672: Γραμμή 2.671:
 
}
 
}
 
div.innerHTML = html;
 
div.innerHTML = html;
+
 
 
return(div);
 
return(div);
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdButtonBarInit: hide buttons bar, see also WikEdButtonBarGripHandler()
 
// WikEdButtonBarInit: hide buttons bar, see also WikEdButtonBarGripHandler()
 
//
 
//
+
 
 
window.WikEdButtonBarInit = function(bar) {
 
window.WikEdButtonBarInit = function(bar) {
+
 
 
var setting = WikEdGetPersistent(bar.id + 'Hidden');
 
var setting = WikEdGetPersistent(bar.id + 'Hidden');
 
if (setting != '') {
 
if (setting != '') {
Γραμμή 2.690: Γραμμή 2.689:
 
var buttonsWrapper = gripWrapper.nextSibling;
 
var buttonsWrapper = gripWrapper.nextSibling;
 
var buttons = buttonsWrapper.firstChild;
 
var buttons = buttonsWrapper.firstChild;
+
 
 
barInnerWrapper.className = 'wikedButtonBarInnerWrapperHidden';
 
barInnerWrapper.className = 'wikedButtonBarInnerWrapperHidden';
 
gripWrapper.className = 'wikedButtonBarGripWrapperHidden';
 
gripWrapper.className = 'wikedButtonBarGripWrapperHidden';
Γραμμή 2.701: Γραμμή 2.700:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdSetEditArea: apply css changes to switch between classic textarea and rich text frame
 
// WikEdSetEditArea: apply css changes to switch between classic textarea and rich text frame
 
//
 
//
+
 
 
window.WikEdSetEditArea = function(useFrame, notFrame) {
 
window.WikEdSetEditArea = function(useFrame, notFrame) {
+
 
 
// turn rich text frame on
 
// turn rich text frame on
 
if (useFrame == true) {
 
if (useFrame == true) {
Γραμμή 2.714: Γραμμή 2.713:
 
wikEdTextareaWrapper.style.visibility = 'hidden';
 
wikEdTextareaWrapper.style.visibility = 'hidden';
 
wikEdTextarea.style.display = 'none';
 
wikEdTextarea.style.display = 'none';
+
 
 
if (notFrame != true) {
 
if (notFrame != true) {
 
wikEdFrameWrapper.style.position = 'static';
 
wikEdFrameWrapper.style.position = 'static';
Γραμμή 2.720: Γραμμή 2.719:
 
wikEdFrameBody.style.display = 'block';
 
wikEdFrameBody.style.display = 'block';
 
}
 
}
+
 
 
if (document.getElementById('toolbar') != null) {
 
if (document.getElementById('toolbar') != null) {
 
if (wikEdCloseToolbar == true) {
 
if (wikEdCloseToolbar == true) {
Γραμμή 2.740: Γραμμή 2.739:
 
wikEdButtonBarControl.style.display = 'block';
 
wikEdButtonBarControl.style.display = 'block';
 
}
 
}
+
 
 
// turn classic textarea on
 
// turn classic textarea on
 
else {
 
else {
Γραμμή 2.752: Γραμμή 2.751:
 
wikEdTextareaWrapper.style.visibility = 'visible';
 
wikEdTextareaWrapper.style.visibility = 'visible';
 
wikEdTextarea.style.display = 'block';
 
wikEdTextarea.style.display = 'block';
+
 
 
if (document.getElementById('toolbar') != null) {
 
if (document.getElementById('toolbar') != null) {
 
wikEdToolbarWrapper.style.display = 'block';
 
wikEdToolbarWrapper.style.display = 'block';
Γραμμή 2.767: Γραμμή 2.766:
 
wikEdButtonBarControl.style.display = 'block';
 
wikEdButtonBarControl.style.display = 'block';
 
}
 
}
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdButton: toggle or set button checked state
 
// WikEdButton: toggle or set button checked state
 
//  used for buttons that do not require nor change the text. Faster than WikEdEditButton()
 
//  used for buttons that do not require nor change the text. Faster than WikEdEditButton()
 
//
 
//
+
 
 
window.WikEdButton = function(buttonObj, buttonId, toggleButton, setButton, classButton, doButton) {
 
window.WikEdButton = function(buttonObj, buttonId, toggleButton, setButton, classButton, doButton) {
+
 
 
if (buttonObj != null) {
 
if (buttonObj != null) {
+
 
 
// check if the button is disabled
 
// check if the button is disabled
 
if (buttonObj.className == 'wikEdButtonInactive') {
 
if (buttonObj.className == 'wikEdButtonInactive') {
 
return;
 
return;
 
}
 
}
+
 
 
// set button to pressed, set cursor to hourglass
 
// set button to pressed, set cursor to hourglass
 
buttonObj.style.cursor = 'wait';
 
buttonObj.style.cursor = 'wait';
+
 
 
// init the button
 
// init the button
 
if (setButton != null) {
 
if (setButton != null) {
Γραμμή 2.807: Γραμμή 2.806:
 
buttonObj.className = classButton;
 
buttonObj.className = classButton;
 
}
 
}
+
 
 
// toggle the button
 
// toggle the button
 
if (toggleButton != null) {
 
if (toggleButton != null) {
Γραμμή 2.822: Γραμμή 2.821:
 
}
 
}
 
}
 
}
+
 
 
// perform specific actions
 
// perform specific actions
 
if ( ( (setButton == null) && (classButton == null) ) || (doButton == true) ) {
 
if ( ( (setButton == null) && (classButton == null) ) || (doButton == true) ) {
+
 
 
// remove active content
 
// remove active content
 
WikEdRemoveElements(['script', 'object', 'applet', 'embed']);
 
WikEdRemoveElements(['script', 'object', 'applet', 'embed']);
+
 
 
switch (buttonId) {
 
switch (buttonId) {
+
 
 
// switch between syntax highlighting and plain text
 
// switch between syntax highlighting and plain text
 
case 'wikEdHighlightSyntax':
 
case 'wikEdHighlightSyntax':
Γραμμή 2.853: Γραμμή 2.852:
 
wikEdFrameBody.innerHTML = obj.html;
 
wikEdFrameBody.innerHTML = obj.html;
 
break;
 
break;
+
 
 
// align textbox with display top
 
// align textbox with display top
 
case 'wikEdScrollToPreview':
 
case 'wikEdScrollToPreview':
Γραμμή 2.860: Γραμμή 2.859:
 
window.scroll(0, WikEdGetOffsetTop(wikEdSubmitWrapper));
 
window.scroll(0, WikEdGetOffsetTop(wikEdSubmitWrapper));
 
break;
 
break;
+
 
 
// align edit buttons with display top
 
// align edit buttons with display top
 
case 'wikEdScrollToEdit':
 
case 'wikEdScrollToEdit':
Γραμμή 2.868: Γραμμή 2.867:
 
window.scroll(0, WikEdGetOffsetTop(wikEdInputWrapper));
 
window.scroll(0, WikEdGetOffsetTop(wikEdInputWrapper));
 
break;
 
break;
+
 
 
// cycle through different font sizes
 
// cycle through different font sizes
 
case 'wikEdTextZoomDown':
 
case 'wikEdTextZoomDown':
Γραμμή 2.877: Γραμμή 2.876:
 
wikEdFrameBody.style.fontSize = parseInt(wikEdTextZoom) + '%;';
 
wikEdFrameBody.style.fontSize = parseInt(wikEdTextZoom) + '%;';
 
break;
 
break;
+
 
 
// cycle through different font sizes
 
// cycle through different font sizes
 
case 'wikEdTextZoomUp':
 
case 'wikEdTextZoomUp':
Γραμμή 2.886: Γραμμή 2.885:
 
wikEdFrameBody.style.fontSize = parseInt(wikEdTextZoom) + '%;';
 
wikEdFrameBody.style.fontSize = parseInt(wikEdTextZoom) + '%;';
 
break;
 
break;
+
 
 
// display local preview box
 
// display local preview box
 
case 'wikEdLocalPreview':
 
case 'wikEdLocalPreview':
Γραμμή 2.895: Γραμμή 2.894:
 
WikEdUpdateTextarea();
 
WikEdUpdateTextarea();
 
}
 
}
+
 
 
// scroll to edit or preview field
 
// scroll to edit or preview field
 
if (buttonId == 'wikEdLocalPreview') {
 
if (buttonId == 'wikEdLocalPreview') {
Γραμμή 2.904: Γραμμή 2.903:
 
}
 
}
 
wikEdPreviewIsAjax = false;
 
wikEdPreviewIsAjax = false;
+
 
 
// prepare ajax preview
 
// prepare ajax preview
 
if (wikEdUseAjaxPreview == true) {
 
if (wikEdUseAjaxPreview == true) {
+
 
 
// prepare the data
 
// prepare the data
 
var boundary = '--(fR*3briuStOum6#v)--';
 
var boundary = '--(fR*3briuStOum6#v)--';
 
var postData = document.getElementById('wpTextbox1').value;
 
var postData = document.getElementById('wpTextbox1').value;
 
postData = '--' + boundary + '\nContent-Disposition: form-data; name="wpTextbox1"\n\n' + postData + '\n--' + boundary;
 
postData = '--' + boundary + '\nContent-Disposition: form-data; name="wpTextbox1"\n\n' + postData + '\n--' + boundary;
+
 
 
// make the ajax request
 
// make the ajax request
 
WikEdAjaxRequest( 'POST', document.getElementById('editform').action + '&live',
 
WikEdAjaxRequest( 'POST', document.getElementById('editform').action + '&live',
 
'Content-Type', 'multipart/form-data; boundary=' + boundary, postData, 'text/html', function(ajax) {
 
'Content-Type', 'multipart/form-data; boundary=' + boundary, postData, 'text/html', function(ajax) {
+
 
 
wikEdPreviewIsAjax = true;
 
wikEdPreviewIsAjax = true;
+
 
 
// get response
 
// get response
 
var html = ajax.responseText;
 
var html = ajax.responseText;
+
 
 
// html-ize
 
// html-ize
 
html = html.replace(/&lt;/g, '<');
 
html = html.replace(/&lt;/g, '<');
Γραμμή 2.929: Γραμμή 2.928:
 
html = html.replace(/&apos;/g, '\'');
 
html = html.replace(/&apos;/g, '\'');
 
html = html.replace(/(<preview>)<h2>.*?<\/h2>(.|\n)*?<div class=\'previewnote\'>(.|\n)*?<\/div>/, '$1');
 
html = html.replace(/(<preview>)<h2>.*?<\/h2>(.|\n)*?<div class=\'previewnote\'>(.|\n)*?<\/div>/, '$1');
+
 
 
// update the preview
 
// update the preview
 
wikEdPreviewBox.innerHTML = html;
 
wikEdPreviewBox.innerHTML = html;
Γραμμή 2.935: Γραμμή 2.934:
 
});
 
});
 
}
 
}
+
 
 
// prepare a local preview (Pilaf's InstaView), will be overwritten by Ajax version
 
// prepare a local preview (Pilaf's InstaView), will be overwritten by Ajax version
 
if ( (wikEdUseLocalPreview == true) && (typeof(InstaView) == 'object') ) {
 
if ( (wikEdUseLocalPreview == true) && (typeof(InstaView) == 'object') ) {
Γραμμή 2.946: Γραμμή 2.945:
 
}
 
}
 
break;
 
break;
+
 
 
// display local diff box
 
// display local diff box
 
case 'wikEdDiffPreview':
 
case 'wikEdDiffPreview':
Γραμμή 2.960: Γραμμή 2.959:
 
WikEdUpdateTextarea();
 
WikEdUpdateTextarea();
 
}
 
}
+
 
 
// scroll to edit or preview field
 
// scroll to edit or preview field
 
if (buttonId == 'wikEdLocalDiff') {
 
if (buttonId == 'wikEdLocalDiff') {
Γραμμή 2.968: Γραμμή 2.967:
 
window.scroll(0, WikEdGetOffsetTop(wikEdSubmitWrapper));
 
window.scroll(0, WikEdGetOffsetTop(wikEdSubmitWrapper));
 
}
 
}
+
 
 
// call external diff program
 
// call external diff program
 
var diffText = WDiffString(wikEdOrigVersion, wikEdTextarea.value);
 
var diffText = WDiffString(wikEdOrigVersion, wikEdTextarea.value);
Γραμμή 2.974: Γραμμή 2.973:
 
diffText = WDiffShortenOutput(diffText);
 
diffText = WDiffShortenOutput(diffText);
 
}
 
}
+
 
 
wikEdPreviewBox.innerHTML = diffText;
 
wikEdPreviewBox.innerHTML = diffText;
 
wikEdLocalPrevWrapper.style.display = 'block';
 
wikEdLocalPrevWrapper.style.display = 'block';
 
break;
 
break;
+
 
 
// toggle wikEdDiff
 
// toggle wikEdDiff
 
case 'wikEdDiff':
 
case 'wikEdDiff':
+
 
 
// turn wikEdDiff off
 
// turn wikEdDiff off
 
if (buttonObj.getAttribute('checked') != 'true') {
 
if (buttonObj.getAttribute('checked') != 'true') {
Γραμμή 2.993: Γραμμή 2.992:
 
window.scroll(0, WikEdGetOffsetTop(wikEdInputWrapper));
 
window.scroll(0, WikEdGetOffsetTop(wikEdInputWrapper));
 
}
 
}
+
 
 
// turn wikEdDiff on
 
// turn wikEdDiff on
 
else {
 
else {
Γραμμή 3.007: Γραμμή 3.006:
 
}
 
}
 
break;
 
break;
+
 
 
// close the preview / diff box
 
// close the preview / diff box
 
case 'wikEdClose':
 
case 'wikEdClose':
Γραμμή 3.014: Γραμμή 3.013:
 
wikEdLocalPrevWrapper.style.display = 'none';
 
wikEdLocalPrevWrapper.style.display = 'none';
 
break;
 
break;
+
 
 
// switch between textarea and frame display
 
// switch between textarea and frame display
 
//  switching an iframe in design mode immediately after initialization between absolute/static may crash mozilla
 
//  switching an iframe in design mode immediately after initialization between absolute/static may crash mozilla
 
case 'wikEdUseWikEd':
 
case 'wikEdUseWikEd':
+
 
 
// enble wikEd
 
// enble wikEd
 
if (buttonObj.getAttribute('checked') == 'true') {
 
if (buttonObj.getAttribute('checked') == 'true') {
 
WikEdUpdateFrame();
 
WikEdUpdateFrame();
+
 
 
// turn rich text frame on
 
// turn rich text frame on
 
WikEdSetEditArea(true);
 
WikEdSetEditArea(true);
Γραμμή 3.028: Γραμμή 3.027:
 
WikEdSetPersistent('wikEdUseClassic', '', -1, '/');
 
WikEdSetPersistent('wikEdUseClassic', '', -1, '/');
 
}
 
}
+
 
 
// turn classic textarea on, disable wikEd
 
// turn classic textarea on, disable wikEd
 
else {
 
else {
Γραμμή 3.037: Γραμμή 3.036:
 
}
 
}
 
break;
 
break;
+
 
 
// add "using wikEd" to summaries
 
// add "using wikEd" to summaries
 
case 'wikEdUsing':
 
case 'wikEdUsing':
Γραμμή 3.049: Γραμμή 3.048:
 
}
 
}
 
break;
 
break;
+
 
 
// hide ref tags
 
// hide ref tags
 
case 'wikEdRefHide':
 
case 'wikEdRefHide':
Γραμμή 3.064: Γραμμή 3.063:
 
}
 
}
 
break;
 
break;
+
 
 
// close the toolbar
 
// close the toolbar
 
case 'wikEdCloseToolbar':
 
case 'wikEdCloseToolbar':
Γραμμή 3.085: Γραμμή 3.084:
 
}
 
}
 
break;
 
break;
+
 
 
// just toggle the case sensitive search button
 
// just toggle the case sensitive search button
 
case 'wikEdCaseSensitive':
 
case 'wikEdCaseSensitive':
 
break;
 
break;
+
 
 
// just toggle the regexp search button
 
// just toggle the regexp search button
 
case 'wikEdRegExp':
 
case 'wikEdRegExp':
 
break;
 
break;
+
 
 
// just toggle the find-ahead-as-you-type search button
 
// just toggle the find-ahead-as-you-type search button
 
case 'wikEdFindAhead':
 
case 'wikEdFindAhead':
 
break;
 
break;
+
 
 
// switch to fullscreen edit area
 
// switch to fullscreen edit area
 
case 'wikEdFullScreen':
 
case 'wikEdFullScreen':
Γραμμή 3.109: Γραμμή 3.108:
 
}
 
}
 
break;
 
break;
+
 
 
// clear the saved settings for find, replace, and summary history
 
// clear the saved settings for find, replace, and summary history
 
case 'wikEdClearHistory':
 
case 'wikEdClearHistory':
Γραμμή 3.116: Γραμμή 3.115:
 
WikEdClearHistory('summary');
 
WikEdClearHistory('summary');
 
break;
 
break;
+
 
 
// for testing
 
// for testing
 
case 'wikEdPlaceholder':
 
case 'wikEdPlaceholder':
Γραμμή 3.122: Γραμμή 3.121:
 
}
 
}
 
}
 
}
+
 
 
// reset the frame DOM cache because the frame content might have changed
 
// reset the frame DOM cache because the frame content might have changed
 
wikEdFrameDOMCache = null;
 
wikEdFrameDOMCache = null;
+
 
 
// reset cursor to normal
 
// reset cursor to normal
 
if (buttonObj != null) {
 
if (buttonObj != null) {
 
buttonObj.style.cursor = 'pointer';
 
buttonObj.style.cursor = 'pointer';
 
}
 
}
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdEditButton: editing functions
 
// WikEdEditButton: editing functions
 
//  used for buttons that require or change the text, more time consuming than WikEdButton()
 
//  used for buttons that require or change the text, more time consuming than WikEdButton()
 
//
 
//
+
 
 
window.WikEdEditButton = function(buttonObj, buttonId, parameters, CustomHandler) {
 
window.WikEdEditButton = function(buttonObj, buttonId, parameters, CustomHandler) {
+
 
 
// check if button is disabled
 
// check if button is disabled
 
if (buttonObj != null) {
 
if (buttonObj != null) {
Γραμμή 3.148: Γραμμή 3.147:
 
}
 
}
 
}
 
}
+
 
 
// remove active and non-text content
 
// remove active and non-text content
 
WikEdRemoveElements(['script', 'object', 'applet', 'embed', 'textarea']);
 
WikEdRemoveElements(['script', 'object', 'applet', 'embed', 'textarea']);
+
 
 
// select the appropriate text change targets (whole, selection, cursor, focusWord, focusLine, selectionWord, or selectionLine)
 
// select the appropriate text change targets (whole, selection, cursor, focusWord, focusLine, selectionWord, or selectionLine)
 
var obj = {};
 
var obj = {};
 
obj.changed = {};
 
obj.changed = {};
+
 
 
switch (buttonId) {
 
switch (buttonId) {
+
 
 
// undo, redo: whole
 
// undo, redo: whole
 
case 'wikEdUndo':
 
case 'wikEdUndo':
Γραμμή 3.166: Γραμμή 3.165:
 
obj.changed = obj.whole;
 
obj.changed = obj.whole;
 
break;
 
break;
+
 
 
// basic wiki character formatting: selection / focusWord / cursor
 
// basic wiki character formatting: selection / focusWord / cursor
 
case 'wikEdBold':
 
case 'wikEdBold':
Γραμμή 3.191: Γραμμή 3.190:
 
}
 
}
 
break;
 
break;
+
 
 
// reference: selection / cursor
 
// reference: selection / cursor
 
case 'wikEdRef':
 
case 'wikEdRef':
Γραμμή 3.202: Γραμμή 3.201:
 
}
 
}
 
break;
 
break;
+
 
 
// references and small references: selection / cursor
 
// references and small references: selection / cursor
 
case 'wikEdReferences':
 
case 'wikEdReferences':
Γραμμή 3.214: Γραμμή 3.213:
 
}
 
}
 
break;
 
break;
+
 
 
// character formatting: selection / focusWord / cursor
 
// character formatting: selection / focusWord / cursor
 
case 'wikEdCase':
 
case 'wikEdCase':
Γραμμή 3.231: Γραμμή 3.230:
 
}
 
}
 
break;
 
break;
+
 
 
// multiple line changes: selectionLine / focusLine / cursor
 
// multiple line changes: selectionLine / focusLine / cursor
 
case 'wikEdDecreaseHeading':
 
case 'wikEdDecreaseHeading':
Γραμμή 3.257: Γραμμή 3.256:
 
}
 
}
 
break;
 
break;
+
 
 
// image: selectionWord (if text is selected) / cursor
 
// image: selectionWord (if text is selected) / cursor
 
case 'wikEdImage':
 
case 'wikEdImage':
Γραμμή 3.269: Γραμμή 3.268:
 
}
 
}
 
break;
 
break;
+
 
 
// table: selectionLine / cursor
 
// table: selectionLine / cursor
 
case 'wikEdTable':
 
case 'wikEdTable':
Γραμμή 3.282: Γραμμή 3.281:
 
}
 
}
 
break;
 
break;
+
 
 
// wikify: selection / whole
 
// wikify: selection / whole
 
case 'wikEdWikify':
 
case 'wikEdWikify':
Γραμμή 3.300: Γραμμή 3.299:
 
}
 
}
 
break;
 
break;
+
 
 
// textify: selection / whole, without wikifying
 
// textify: selection / whole, without wikifying
 
case 'wikEdTextify':
 
case 'wikEdTextify':
Γραμμή 3.312: Γραμμή 3.311:
 
}
 
}
 
break;
 
break;
+
 
 
// redirect: whole
 
// redirect: whole
 
case 'wikEdRedirect':
 
case 'wikEdRedirect':
Γραμμή 3.321: Γραμμή 3.320:
 
obj.changed = obj.whole;
 
obj.changed = obj.whole;
 
break;
 
break;
+
 
 
// find and replace: selection / focusWord / cursor
 
// find and replace: selection / focusWord / cursor
 
case 'wikEdFindPrev':
 
case 'wikEdFindPrev':
Γραμμή 3.344: Γραμμή 3.343:
 
}
 
}
 
break;
 
break;
+
 
 
// replace all: selection / whole
 
// replace all: selection / whole
 
case 'wikEdReplaceAll':
 
case 'wikEdReplaceAll':
Γραμμή 3.356: Γραμμή 3.355:
 
}
 
}
 
break;
 
break;
+
 
 
// fixing buttons: selection / whole
 
// fixing buttons: selection / whole
 
case 'wikEdFixBasic':
 
case 'wikEdFixBasic':
Γραμμή 3.372: Γραμμή 3.371:
 
}
 
}
 
break;
 
break;
+
 
 
// fixing buttons: selection / focusLine / cursor
 
// fixing buttons: selection / focusLine / cursor
 
case 'wikEdFixPunct':
 
case 'wikEdFixPunct':
Γραμμή 3.394: Γραμμή 3.393:
 
}
 
}
 
break;
 
break;
+
 
 
// fixing buttons: selection / focusWord / cursor
 
// fixing buttons: selection / focusWord / cursor
 
WikEdGetText(obj, 'selection, cursor');
 
WikEdGetText(obj, 'selection, cursor');
Γραμμή 3.410: Γραμμή 3.409:
 
}
 
}
 
break;
 
break;
+
 
 
// source: selection / whole
 
// source: selection / whole
 
case 'wikEdSource':
 
case 'wikEdSource':
Γραμμή 3.422: Γραμμή 3.421:
 
}
 
}
 
break;
 
break;
+
 
 
// insert tags: selection / focusWord / cursor
 
// insert tags: selection / focusWord / cursor
 
case 'wikEdInsertTags':
 
case 'wikEdInsertTags':
Γραμμή 3.439: Γραμμή 3.438:
 
}
 
}
 
break;
 
break;
+
 
 
// custom edit functions have to call WikEdGetText() themselves
 
// custom edit functions have to call WikEdGetText() themselves
 
default:
 
default:
Γραμμή 3.446: Γραμμή 3.445:
 
break;
 
break;
 
}
 
}
+
 
 
// exit
 
// exit
 
if (obj.changed == null) {
 
if (obj.changed == null) {
 
wikEdFrameWindow.focus();
 
wikEdFrameWindow.focus();
+
 
 
// reset button to active, reset cursor
 
// reset button to active, reset cursor
 
if (buttonObj != null) {
 
if (buttonObj != null) {
Γραμμή 3.459: Γραμμή 3.458:
 
return;
 
return;
 
}
 
}
+
 
 
// set local syntax highlighting flag
 
// set local syntax highlighting flag
 
var highlightSyntax = wikEdHighlightSyntax;
 
var highlightSyntax = wikEdHighlightSyntax;
+
 
 
// manipulate the text
 
// manipulate the text
 
var selectChange = true;
 
var selectChange = true;
 
switch (buttonId) {
 
switch (buttonId) {
+
 
 
// undo
 
// undo
 
case 'wikEdUndo':
 
case 'wikEdUndo':
Γραμμή 3.477: Γραμμή 3.476:
 
obj.changed.keepSel = true;
 
obj.changed.keepSel = true;
 
break;
 
break;
+
 
 
// redo
 
// redo
 
case 'wikEdRedo':
 
case 'wikEdRedo':
Γραμμή 3.485: Γραμμή 3.484:
 
obj.changed.keepSel = true;
 
obj.changed.keepSel = true;
 
break;
 
break;
+
 
 
// bold
 
// bold
 
case 'wikEdBold':
 
case 'wikEdBold':
Γραμμή 3.498: Γραμμή 3.497:
 
obj.changed.keepSel = true;
 
obj.changed.keepSel = true;
 
break;
 
break;
+
 
 
// italic
 
// italic
 
case 'wikEdItalic':
 
case 'wikEdItalic':
Γραμμή 3.514: Γραμμή 3.513:
 
obj.changed.keepSel = true;
 
obj.changed.keepSel = true;
 
break;
 
break;
+
 
 
// underline
 
// underline
 
case 'wikEdUnderline':
 
case 'wikEdUnderline':
Γραμμή 3.526: Γραμμή 3.525:
 
obj.changed.keepSel = true;
 
obj.changed.keepSel = true;
 
break;
 
break;
+
 
 
// strikethrough
 
// strikethrough
 
case 'wikEdStrikethrough':
 
case 'wikEdStrikethrough':
Γραμμή 3.538: Γραμμή 3.537:
 
obj.changed.keepSel = true;
 
obj.changed.keepSel = true;
 
break;
 
break;
+
 
 
// nowiki
 
// nowiki
 
case 'wikEdNowiki':
 
case 'wikEdNowiki':
Γραμμή 3.550: Γραμμή 3.549:
 
obj.changed.keepSel = true;
 
obj.changed.keepSel = true;
 
break;
 
break;
+
 
 
// superscript
 
// superscript
 
case 'wikEdSuperscript':
 
case 'wikEdSuperscript':
Γραμμή 3.562: Γραμμή 3.561:
 
obj.changed.keepSel = true;
 
obj.changed.keepSel = true;
 
break;
 
break;
+
 
 
// subscript
 
// subscript
 
case 'wikEdSubscript':
 
case 'wikEdSubscript':
Γραμμή 3.574: Γραμμή 3.573:
 
obj.changed.keepSel = true;
 
obj.changed.keepSel = true;
 
break;
 
break;
+
 
 
// in-text reference
 
// in-text reference
 
case 'wikEdRef':
 
case 'wikEdRef':
Γραμμή 3.592: Γραμμή 3.591:
 
obj.changed.keepSel = true;
 
obj.changed.keepSel = true;
 
break;
 
break;
+
 
 
// references location
 
// references location
 
case 'wikEdReferences':
 
case 'wikEdReferences':
Γραμμή 3.604: Γραμμή 3.603:
 
refEscaped = refEscaped.replace(/(\n)/g, '\\n');
 
refEscaped = refEscaped.replace(/(\n)/g, '\\n');
 
var regExp = new RegExp(refEscaped, 'gi');
 
var regExp = new RegExp(refEscaped, 'gi');
+
 
 
// plain references tag
 
// plain references tag
 
if (buttonId == 'wikEdReferences') {
 
if (buttonId == 'wikEdReferences') {
Γραμμή 3.621: Γραμμή 3.620:
 
}
 
}
 
}
 
}
+
 
 
// complete references code
 
// complete references code
 
else {
 
else {
Γραμμή 3.640: Γραμμή 3.639:
 
obj.changed.keepSel = true;
 
obj.changed.keepSel = true;
 
break;
 
break;
+
 
 
// toggle lowercase / uppercase
 
// toggle lowercase / uppercase
 
case 'wikEdCase':
 
case 'wikEdCase':
+
 
 
// lowercase all uppercased text
 
// lowercase all uppercased text
 
if (obj.changed.plain == '') {
 
if (obj.changed.plain == '') {
Γραμμή 3.652: Γραμμή 3.651:
 
obj.changed.plain = obj.changed.plain.toLowerCase();
 
obj.changed.plain = obj.changed.plain.toLowerCase();
 
}
 
}
+
 
 
// first-letter-uppercase all lowercased text
 
// first-letter-uppercase all lowercased text
 
else if (obj.changed.plain.toLowerCase() == obj.changed.plain) {
 
else if (obj.changed.plain.toLowerCase() == obj.changed.plain) {
Γραμμή 3.661: Γραμμή 3.660:
 
);
 
);
 
}
 
}
+
 
 
// uppercase mixed upper and lowercased text
 
// uppercase mixed upper and lowercased text
 
else {
 
else {
Γραμμή 3.669: Γραμμή 3.668:
 
obj.changed.keepSel = true;
 
obj.changed.keepSel = true;
 
break;
 
break;
+
 
 
// undo all
 
// undo all
 
case 'wikEdUndoAll':
 
case 'wikEdUndoAll':
Γραμμή 3.680: Γραμμή 3.679:
 
obj.changed.plain = obj.changed.plain.replace(/</g, '&lt;');
 
obj.changed.plain = obj.changed.plain.replace(/</g, '&lt;');
 
break;
 
break;
+
 
 
// redo all
 
// redo all
 
case 'wikEdRedoAll':
 
case 'wikEdRedoAll':
Γραμμή 3.687: Γραμμή 3.686:
 
}
 
}
 
break;
 
break;
+
 
 
// create wikilink
 
// create wikilink
 
case 'wikEdWikiLink':
 
case 'wikEdWikiLink':
Γραμμή 3.699: Γραμμή 3.698:
 
obj.changed.keepSel = true;
 
obj.changed.keepSel = true;
 
break;
 
break;
+
 
 
// create weblink
 
// create weblink
 
case 'wikEdWebLink':
 
case 'wikEdWebLink':
Γραμμή 3.711: Γραμμή 3.710:
 
obj.changed.keepSel = true;
 
obj.changed.keepSel = true;
 
break;
 
break;
+
 
 
// decrease heading level
 
// decrease heading level
 
case 'wikEdDecreaseHeading':
 
case 'wikEdDecreaseHeading':
+
 
 
// decrease heading
 
// decrease heading
 
obj.changed.plain = obj.changed.plain.replace(/(^|\n)=(=+) *([^\n]*?) *=+(?=\n|$)/g, '$1$2 $3 $2');
 
obj.changed.plain = obj.changed.plain.replace(/(^|\n)=(=+) *([^\n]*?) *=+(?=\n|$)/g, '$1$2 $3 $2');
+
 
 
// remove heading
 
// remove heading
 
obj.changed.plain = obj.changed.plain.replace(/(^|\n)=(?!=) *([^\n]*?) *=+(?=\n|$)/g, '$1$2');
 
obj.changed.plain = obj.changed.plain.replace(/(^|\n)=(?!=) *([^\n]*?) *=+(?=\n|$)/g, '$1$2');
+
 
 
// adjust closing tags
 
// adjust closing tags
 
obj.changed.plain = obj.changed.plain.replace(/(^|\n)(=+) *([^\n]*?) *=+(?=\n|$)/g, '$1$2 $3 $2');
 
obj.changed.plain = obj.changed.plain.replace(/(^|\n)(=+) *([^\n]*?) *=+(?=\n|$)/g, '$1$2 $3 $2');
 
obj.changed.keepSel = true;
 
obj.changed.keepSel = true;
 
break;
 
break;
+
 
 
// increase heading level
 
// increase heading level
 
case 'wikEdIncreaseHeading':
 
case 'wikEdIncreaseHeading':
+
 
 
// increase heading
 
// increase heading
 
obj.changed.plain = obj.changed.plain.replace(/(^|\n)(=+) *([^\n]*?) *=+(?=\n|$)/g, '$1=$2 $3 $2=');
 
obj.changed.plain = obj.changed.plain.replace(/(^|\n)(=+) *([^\n]*?) *=+(?=\n|$)/g, '$1=$2 $3 $2=');
+
 
 
// create new heading
 
// create new heading
 
if (/\n/.test(obj.changed.plain) == false) {
 
if (/\n/.test(obj.changed.plain) == false) {
 
obj.changed.plain = obj.changed.plain.replace(/(^|\n)([^=\n\s][^\n]*?)(?=\n|$)/g, '$1== $2 ==');
 
obj.changed.plain = obj.changed.plain.replace(/(^|\n)([^=\n\s][^\n]*?)(?=\n|$)/g, '$1== $2 ==');
 
}
 
}
+
 
 
// adjust closing tags
 
// adjust closing tags
 
obj.changed.plain = obj.changed.plain.replace(/(^|\n)(=+) *([^\n]*?) *=+(?=\n|$)/g, '$1$2 $3 $2');
 
obj.changed.plain = obj.changed.plain.replace(/(^|\n)(=+) *([^\n]*?) *=+(?=\n|$)/g, '$1$2 $3 $2');
 
obj.changed.keepSel = true;
 
obj.changed.keepSel = true;
 
break;
 
break;
+
 
 
// increase bullet list
 
// increase bullet list
 
case 'wikEdIncreaseBulletList':
 
case 'wikEdIncreaseBulletList':
Γραμμή 3.752: Γραμμή 3.751:
 
obj.changed.keepSel = true;
 
obj.changed.keepSel = true;
 
break;
 
break;
+
 
 
// decrease bullet list
 
// decrease bullet list
 
case 'wikEdDecreaseBulletList':
 
case 'wikEdDecreaseBulletList':
Γραμμή 3.763: Γραμμή 3.762:
 
obj.changed.keepSel = true;
 
obj.changed.keepSel = true;
 
break;
 
break;
+
 
 
// increase numbered list
 
// increase numbered list
 
case 'wikEdIncreaseNumberList':
 
case 'wikEdIncreaseNumberList':
Γραμμή 3.774: Γραμμή 3.773:
 
obj.changed.keepSel = true;
 
obj.changed.keepSel = true;
 
break;
 
break;
+
 
 
// decrease numbered list
 
// decrease numbered list
 
case 'wikEdDecreaseNumberList':
 
case 'wikEdDecreaseNumberList':
Γραμμή 3.785: Γραμμή 3.784:
 
obj.changed.keepSel = true;
 
obj.changed.keepSel = true;
 
break;
 
break;
+
 
 
// increase indented list
 
// increase indented list
 
case 'wikEdIncreaseIndentList':
 
case 'wikEdIncreaseIndentList':
Γραμμή 3.796: Γραμμή 3.795:
 
obj.changed.keepSel = true;
 
obj.changed.keepSel = true;
 
break;
 
break;
+
 
 
// decrease indented list
 
// decrease indented list
 
case 'wikEdDecreaseIndentList':
 
case 'wikEdDecreaseIndentList':
Γραμμή 3.807: Γραμμή 3.806:
 
obj.changed.keepSel = true;
 
obj.changed.keepSel = true;
 
break;
 
break;
+
 
 
// create definition list
 
// create definition list
 
case 'wikEdDefinitionList':
 
case 'wikEdDefinitionList':
Γραμμή 3.817: Γραμμή 3.816:
 
);
 
);
 
break;
 
break;
+
 
 
// create image
 
// create image
 
case 'wikEdImage':
 
case 'wikEdImage':
Γραμμή 3.832: Γραμμή 3.831:
 
}
 
}
 
break;
 
break;
+
 
 
// create table
 
// create table
 
case 'wikEdTable':
 
case 'wikEdTable':
Γραμμή 3.847: Γραμμή 3.846:
 
}
 
}
 
break;
 
break;
+
 
 
// wikify: always done above
 
// wikify: always done above
 
case 'wikEdWikify':
 
case 'wikEdWikify':
 
break;
 
break;
+
 
 
// textify: strip html from pasted content
 
// textify: strip html from pasted content
 
case 'wikEdTextify':
 
case 'wikEdTextify':
 
WikEdTextify(obj.changed);
 
WikEdTextify(obj.changed);
 
break;
 
break;
+
 
 
// redirect
 
// redirect
 
case 'wikEdRedirect':
 
case 'wikEdRedirect':
Γραμμή 3.869: Γραμμή 3.868:
 
linkTarget = '<span class="wikEdInsertHere">' + wikEdText['redirect article link'] + '</span>';
 
linkTarget = '<span class="wikEdInsertHere">' + wikEdText['redirect article link'] + '</span>';
 
}
 
}
+
 
 
// remove link text after |
 
// remove link text after |
 
linkTarget = linkTarget.replace(/\|.*()/, '');
 
linkTarget = linkTarget.replace(/\|.*()/, '');
+
 
 
// remove formatting and spaces
 
// remove formatting and spaces
 
linkTarget = linkTarget.replace(/^(=+|\'+|<[^>]*>|\s+|\[)+(.*?)(=+|\'+|<[^>]*>|\s+|\])+$/g, '$2');
 
linkTarget = linkTarget.replace(/^(=+|\'+|<[^>]*>|\s+|\[)+(.*?)(=+|\'+|<[^>]*>|\s+|\])+$/g, '$2');
+
 
 
obj.changed.plain = '#redirect [[' + linkTarget + ']]';
 
obj.changed.plain = '#redirect [[' + linkTarget + ']]';
+
 
 
// append to summary
 
// append to summary
 
if ( (obj.selection.plain != '') || (obj.selectionWord.plain != '') ) {
 
if ( (obj.selection.plain != '') || (obj.selectionWord.plain != '') ) {
Γραμμή 3.888: Γραμμή 3.887:
 
selectChange = false;
 
selectChange = false;
 
break;
 
break;
+
 
 
// find and replace
 
// find and replace
 
case 'wikEdFindPrev':
 
case 'wikEdFindPrev':
Γραμμή 3.898: Γραμμή 3.897:
 
case 'wikEdFindAll':
 
case 'wikEdFindAll':
 
case 'wikEdReplaceAll':
 
case 'wikEdReplaceAll':
+
 
 
// get the find text
 
// get the find text
 
var findText;
 
var findText;
+
 
 
// unescape <, >, and &
 
// unescape <, >, and &
 
obj.changed.plain = obj.changed.plain.replace(/&lt;/g, '<');
 
obj.changed.plain = obj.changed.plain.replace(/&lt;/g, '<');
 
obj.changed.plain = obj.changed.plain.replace(/&gt;/g, '>');
 
obj.changed.plain = obj.changed.plain.replace(/&gt;/g, '>');
 
obj.changed.plain = obj.changed.plain.replace(/&amp;/g, '&');
 
obj.changed.plain = obj.changed.plain.replace(/&amp;/g, '&');
+
 
 
// copy selection/word under cursor to find field
 
// copy selection/word under cursor to find field
 
if ( (parameters == 'shift') && ( (buttonId == 'wikEdFindNext') || (buttonId == 'wikEdReplaceNext') ) ) {
 
if ( (parameters == 'shift') && ( (buttonId == 'wikEdFindNext') || (buttonId == 'wikEdReplaceNext') ) ) {
Γραμμή 3.921: Γραμμή 3.920:
 
}
 
}
 
}
 
}
+
 
 
// get the find text from the find field
 
// get the find text from the find field
 
if ( (buttonId == 'wikEdJumpPrev') || (buttonId == 'wikEdJumpNext') ) {
 
if ( (buttonId == 'wikEdJumpPrev') || (buttonId == 'wikEdJumpNext') ) {
Γραμμή 3.931: Γραμμή 3.930:
 
}
 
}
 
}
 
}
+
 
 
// get the find text from the find field
 
// get the find text from the find field
 
else {
 
else {
Γραμμή 3.942: Γραμμή 3.941:
 
}
 
}
 
}
 
}
+
 
 
// handle newlines and special blanks for built-in search
 
// handle newlines and special blanks for built-in search
 
if (wikEdRegExp.getAttribute('checked') == 'false') {
 
if (wikEdRegExp.getAttribute('checked') == 'false') {
Γραμμή 3.948: Γραμμή 3.947:
 
findText = findText.replace(/\s/g, ' ');
 
findText = findText.replace(/\s/g, ' ');
 
}
 
}
+
 
 
// get the replace text
 
// get the replace text
 
var replaceText = wikEdInputElement['replace'].value;
 
var replaceText = wikEdInputElement['replace'].value;
 
var regExpFind;
 
var regExpFind;
+
 
 
// set regexp flags
 
// set regexp flags
 
var regExpFlags = 'g';
 
var regExpFlags = 'g';
Γραμμή 3.958: Γραμμή 3.957:
 
regExpFlags += 'i';
 
regExpFlags += 'i';
 
}
 
}
+
 
 
// format the find and replace texts for a plain text search
 
// format the find and replace texts for a plain text search
 
if ( (wikEdRegExp.getAttribute('checked') == 'false') || (buttonId == 'wikEdJumpPrev') || (buttonId == 'wikEdJumpNext') ) {
 
if ( (wikEdRegExp.getAttribute('checked') == 'false') || (buttonId == 'wikEdJumpPrev') || (buttonId == 'wikEdJumpNext') ) {
 
regExpFind = new RegExp(findText.replace(/([\\^\$\*\+\?\.\(\)\[\]\{\}\:\=\!\|\,\-])/g, '\\$1'), regExpFlags);
 
regExpFind = new RegExp(findText.replace(/([\\^\$\*\+\?\.\(\)\[\]\{\}\:\=\!\|\,\-])/g, '\\$1'), regExpFlags);
 
}
 
}
+
 
 
// format the find and replace texts for a regular expression search
 
// format the find and replace texts for a regular expression search
 
else {
 
else {
Γραμμή 3.969: Γραμμή 3.968:
 
replaceText = replaceText.replace(/((^|[^\\])(\\\\)*)\\n/g, '$1\n');
 
replaceText = replaceText.replace(/((^|[^\\])(\\\\)*)\\n/g, '$1\n');
 
}
 
}
+
 
 
// replace all
 
// replace all
 
var replacedFlag = false;
 
var replacedFlag = false;
Γραμμή 3.981: Γραμμή 3.980:
 
}
 
}
 
}
 
}
+
 
 
// replace an existing selection
 
// replace an existing selection
 
else if ( (buttonId == 'wikEdReplacePrev') || (buttonId == 'wikEdReplaceNext') ) {
 
else if ( (buttonId == 'wikEdReplacePrev') || (buttonId == 'wikEdReplaceNext') ) {
Γραμμή 4.004: Γραμμή 4.003:
 
obj.changed.plain = null;
 
obj.changed.plain = null;
 
}
 
}
+
 
 
if (
 
if (
 
(buttonId == 'wikEdFindNext') || (buttonId == 'wikEdFindPrev') ||
 
(buttonId == 'wikEdFindNext') || (buttonId == 'wikEdFindPrev') ||
Γραμμή 4.012: Γραμμή 4.011:
 
) {
 
) {
 
if (replacedFlag == false) {
 
if (replacedFlag == false) {
+
 
 
// get direction
 
// get direction
 
var backwards = false;
 
var backwards = false;
Γραμμή 4.018: Γραμμή 4.017:
 
backwards = true;
 
backwards = true;
 
}
 
}
+
 
 
// get case sensitive
 
// get case sensitive
 
var caseSensitive = false;
 
var caseSensitive = false;
Γραμμή 4.024: Γραμμή 4.023:
 
caseSensitive = true;
 
caseSensitive = true;
 
}
 
}
+
 
 
// find all
 
// find all
 
if (buttonId == 'wikEdFindAll') {
 
if (buttonId == 'wikEdFindAll') {
 
var found;
 
var found;
 
var foundRanges = [];
 
var foundRanges = [];
+
 
 
// start at top of text
 
// start at top of text
 
obj.sel.removeAllRanges();
 
obj.sel.removeAllRanges();
Γραμμή 4.036: Γραμμή 4.035:
 
range.collapse(true);
 
range.collapse(true);
 
range = obj.sel.addRange(range);
 
range = obj.sel.addRange(range);
+
 
 
// cycle through matches
 
// cycle through matches
 
var scrollTop = wikEdFrameBody.scrollTop;
 
var scrollTop = wikEdFrameBody.scrollTop;
 
do {
 
do {
+
 
 
// use regexp seach
 
// use regexp seach
 
if (wikEdRegExp.getAttribute('checked') == 'true') {
 
if (wikEdRegExp.getAttribute('checked') == 'true') {
 
found = WikEdFind(obj, findText, caseSensitive, false, false, regExpFind);
 
found = WikEdFind(obj, findText, caseSensitive, false, false, regExpFind);
 
}
 
}
+
 
 
// use built-in sarch
 
// use built-in sarch
 
else {
 
else {
Γραμμή 4.054: Γραμμή 4.053:
 
}
 
}
 
} while (found == true);
 
} while (found == true);
+
 
 
// scroll back
 
// scroll back
 
if (wikEdRegExp.getAttribute('checked') == 'false') {
 
if (wikEdRegExp.getAttribute('checked') == 'false') {
 
wikEdFrameBody.scrollTop = scrollTop;
 
wikEdFrameBody.scrollTop = scrollTop;
 
}
 
}
+
 
 
// add the found ranges
 
// add the found ranges
 
obj.sel.removeAllRanges();
 
obj.sel.removeAllRanges();
Γραμμή 4.067: Γραμμή 4.066:
 
obj.changed.plain = null;
 
obj.changed.plain = null;
 
}
 
}
+
 
 
// normal find
 
// normal find
 
else {
 
else {
Γραμμή 4.080: Γραμμή 4.079:
 
}
 
}
 
}
 
}
+
 
 
// escape <, >, and &
 
// escape <, >, and &
 
if (obj.changed.plain != null) {
 
if (obj.changed.plain != null) {
Γραμμή 4.087: Γραμμή 4.086:
 
obj.changed.plain = obj.changed.plain.replace(/>/g, '&gt;');
 
obj.changed.plain = obj.changed.plain.replace(/>/g, '&gt;');
 
}
 
}
+
 
 
// save search history to settings
 
// save search history to settings
 
if ( (buttonId == 'wikEdFindPrev') || (buttonId == 'wikEdFindNext') || (buttonId == 'wikEdFindAll') ) {
 
if ( (buttonId == 'wikEdFindPrev') || (buttonId == 'wikEdFindNext') || (buttonId == 'wikEdFindAll') ) {
Γραμμή 4.098: Γραμμή 4.097:
 
obj.changed.keepSel = true;
 
obj.changed.keepSel = true;
 
break;
 
break;
+
 
 
// fixbasic: fix characters, spaces, empty lines, certain headings, needed for all fixing functions
 
// fixbasic: fix characters, spaces, empty lines, certain headings, needed for all fixing functions
 
// to do: only certain changes in multiline tags: comments, tables, subst
 
// to do: only certain changes in multiline tags: comments, tables, subst
Γραμμή 4.150: Γραμμή 4.149:
 
obj.changed.keepSel = true;
 
obj.changed.keepSel = true;
 
break;
 
break;
+
 
 
// source on
 
// source on
 
case 'wikEdSource':
 
case 'wikEdSource':
Γραμμή 4.160: Γραμμή 4.159:
 
highlightSyntax = false;
 
highlightSyntax = false;
 
break;
 
break;
+
 
 
// insert tags
 
// insert tags
 
case 'wikEdInsertTags':
 
case 'wikEdInsertTags':
Γραμμή 4.175: Γραμμή 4.174:
 
tagsampleText = sampleText.replace(/</g, '&lt;');
 
tagsampleText = sampleText.replace(/</g, '&lt;');
 
tagsampleText = sampleText.replace(/>/g, '&gt;');
 
tagsampleText = sampleText.replace(/>/g, '&gt;');
+
 
 
// single string to insert
 
// single string to insert
 
if ( (tagOpen.length > 0) && (tagClose.length == 0) && (sampleText.length == 0) ) {
 
if ( (tagOpen.length > 0) && (tagClose.length == 0) && (sampleText.length == 0) ) {
Γραμμή 4.181: Γραμμή 4.180:
 
obj.changed.plain = tagOpen;
 
obj.changed.plain = tagOpen;
 
}
 
}
+
 
 
// opening and closing strings
 
// opening and closing strings
 
else if ( (obj.changed.plain == '') && (sampleText.length > 0) ) {
 
else if ( (obj.changed.plain == '') && (sampleText.length > 0) ) {
Γραμμή 4.190: Γραμμή 4.189:
 
}
 
}
 
break;
 
break;
+
 
 
// custom edit functions
 
// custom edit functions
 
default:
 
default:
Γραμμή 4.201: Γραμμή 4.200:
 
break;
 
break;
 
}
 
}
+
 
 
// update the selection only, do not change the text
 
// update the selection only, do not change the text
 
if (obj.changed.plain == null) {
 
if (obj.changed.plain == null) {
Γραμμή 4.207: Γραμμή 4.206:
 
obj.sel.removeAllRanges();
 
obj.sel.removeAllRanges();
 
obj.sel.addRange(obj.changed.range);
 
obj.sel.addRange(obj.changed.range);
+
 
 
// scroll the selected text into the viewport by using a backwards find
 
// scroll the selected text into the viewport by using a backwards find
 
if (selectChange != false) {
 
if (selectChange != false) {
+
 
 
// get the plain text of the selection
 
// get the plain text of the selection
 
var plainText = obj.sel.getRangeAt(obj.sel.rangeCount - 1).cloneContents().textContent;
 
var plainText = obj.sel.getRangeAt(obj.sel.rangeCount - 1).cloneContents().textContent;
+
 
 
// collapse the selection to the end and search backwards
 
// collapse the selection to the end and search backwards
 
if (plainText.length > 0) {
 
if (plainText.length > 0) {
 
plainText = plainText.replace(/\n/g, '');
 
plainText = plainText.replace(/\n/g, '');
 
obj.changed.range.collapse(false);
 
obj.changed.range.collapse(false);
+
 
 
// parameters: window.find(string, caseSensitive, backwards, wrapAround, wholeWord, searchInFrames, showDialog)
 
// parameters: window.find(string, caseSensitive, backwards, wrapAround, wholeWord, searchInFrames, showDialog)
 
wikEdFrameWindow.find(plainText, true, true, false, false, false, false);
 
wikEdFrameWindow.find(plainText, true, true, false, false, false, false);
Γραμμή 4.225: Γραμμή 4.224:
 
}
 
}
 
}
 
}
+
 
 
// apply text changes
 
// apply text changes
 
else {
 
else {
+
 
 
// a text change erases the last version for redo all
 
// a text change erases the last version for redo all
 
if ( (buttonId != 'wikEdUndo') && (buttonId != 'wikEdRedo') && (buttonId != 'wikEdUndoAll') ) {
 
if ( (buttonId != 'wikEdUndo') && (buttonId != 'wikEdRedo') && (buttonId != 'wikEdUndoAll') ) {
 
wikEdLastVersion = null;
 
wikEdLastVersion = null;
 
}
 
}
+
 
 
// highlight the syntax
 
// highlight the syntax
 
obj.html = obj.changed.plain;
 
obj.html = obj.changed.plain;
Γραμμή 4.242: Γραμμή 4.241:
 
WikEdHighlightSyntax(obj);
 
WikEdHighlightSyntax(obj);
 
}
 
}
+
 
 
// display tabs
 
// display tabs
 
else {
 
else {
 
obj.html = obj.html.replace(/(\t)/g, '<span class="wikEdTabPlain">$1</span><!--wikEdTabPlain-->');
 
obj.html = obj.html.replace(/(\t)/g, '<span class="wikEdTabPlain">$1</span><!--wikEdTabPlain-->');
 
}
 
}
+
 
 
// display multiple blanks as blank-&nbsp;
 
// display multiple blanks as blank-&nbsp;
 
obj.html = obj.html.replace(/  /g, '&nbsp; ');
 
obj.html = obj.html.replace(/  /g, '&nbsp; ');
 
obj.html = obj.html.replace(/  /g, '&nbsp; ');
 
obj.html = obj.html.replace(/  /g, '&nbsp; ');
+
 
 
// newlines to <br />
 
// newlines to <br />
 
obj.html = obj.html.replace(/\n/g, '<br />');
 
obj.html = obj.html.replace(/\n/g, '<br />');
+
 
 
// make changed range text the current selection
 
// make changed range text the current selection
 
obj.sel.removeAllRanges();
 
obj.sel.removeAllRanges();
 
obj.sel.addRange(obj.changed.range);
 
obj.sel.addRange(obj.changed.range);
+
 
 
// get the scroll position
 
// get the scroll position
 
var scrollTop;
 
var scrollTop;
Γραμμή 4.264: Γραμμή 4.263:
 
scrollTop = wikEdFrameBody.scrollTop;
 
scrollTop = wikEdFrameBody.scrollTop;
 
}
 
}
+
 
 
// replace the selection with changed text
 
// replace the selection with changed text
 
if (obj.html != '') {
 
if (obj.html != '') {
Γραμμή 4.272: Γραμμή 4.271:
 
WikEdFrameExecCommand('delete');
 
WikEdFrameExecCommand('delete');
 
}
 
}
+
 
 
// select the whole text after replacing the whole text and scroll to same height
 
// select the whole text after replacing the whole text and scroll to same height
 
if (obj.changed.from == 'whole') {
 
if (obj.changed.from == 'whole') {
Γραμμή 4.283: Γραμμή 4.282:
 
selectChange = false;
 
selectChange = false;
 
}
 
}
+
 
 
// select the changed text and scroll it into the viewport by using a backwards find
 
// select the changed text and scroll it into the viewport by using a backwards find
 
if (selectChange != false) {
 
if (selectChange != false) {
+
 
 
// get the text content of the changed text
 
// get the text content of the changed text
 
var div = document.createElement('div');
 
var div = document.createElement('div');
 
div.innerHTML = obj.changed.plain;
 
div.innerHTML = obj.changed.plain;
 
var plainText = div.textContent;
 
var plainText = div.textContent;
+
 
 
// find the text
 
// find the text
 
if (plainText.length > 0) {
 
if (plainText.length > 0) {
 
plainText = plainText.replace(/\n/g, '');
 
plainText = plainText.replace(/\n/g, '');
+
 
 
// parameters: window.find(string, caseSensitive, backwards, wrapAround, wholeWord, searchInFrames, showDialog)
 
// parameters: window.find(string, caseSensitive, backwards, wrapAround, wholeWord, searchInFrames, showDialog)
 
wikEdFrameWindow.find(plainText, true, true, false, false, false, false);
 
wikEdFrameWindow.find(plainText, true, true, false, false, false, false);
Γραμμή 4.301: Γραμμή 4.300:
 
}
 
}
 
}
 
}
+
 
 
// remove selection, keep whole text auto-selection as warning
 
// remove selection, keep whole text auto-selection as warning
 
if (
 
if (
Γραμμή 4.308: Γραμμή 4.307:
 
( (buttonId == 'wikEdWikify') && (parameters == 'whole') )
 
( (buttonId == 'wikEdWikify') && (parameters == 'whole') )
 
) {
 
) {
+
 
 
// workaround for Firefox 1.5 bug using: obj.sel.getRangeAt(obj.sel.rangeCount - 1).collapse(false);
 
// workaround for Firefox 1.5 bug using: obj.sel.getRangeAt(obj.sel.rangeCount - 1).collapse(false);
 
var range = document.createRange();
 
var range = document.createRange();
Γραμμή 4.316: Γραμμή 4.315:
 
obj.sel.addRange(range);
 
obj.sel.addRange(range);
 
}
 
}
+
 
 
// reset button to active, reset cursor
 
// reset button to active, reset cursor
 
if (buttonObj != null) {
 
if (buttonObj != null) {
Γραμμή 4.324: Γραμμή 4.323:
 
buttonObj.style.cursor = 'auto';
 
buttonObj.style.cursor = 'auto';
 
}
 
}
+
 
 
// grey out inactive buttons
 
// grey out inactive buttons
 
WikEdInactiveButtons();
 
WikEdInactiveButtons();
+
 
 
// reset the frame DOM cache because the frame content has been changed
 
// reset the frame DOM cache because the frame content has been changed
 
wikEdFrameDOMCache = null;
 
wikEdFrameDOMCache = null;
+
 
 
// focus the frame
 
// focus the frame
 
if (wikEdUseWikEd == true) {
 
if (wikEdUseWikEd == true) {
 
wikEdFrameWindow.focus();
 
wikEdFrameWindow.focus();
 
}
 
}
+
 
 
// add event handler to make highlighted frame links ctrl-clickable
 
// add event handler to make highlighted frame links ctrl-clickable
 
if ( (highlightSyntax == true) && (obj.changed.plain != null) ) {
 
if ( (highlightSyntax == true) && (obj.changed.plain != null) ) {
 
WikEdFollowLinks();
 
WikEdFollowLinks();
 
}
 
}
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdFollowLinks: register click handlers to make highlighted frame links ctrl-clickable
 
// WikEdFollowLinks: register click handlers to make highlighted frame links ctrl-clickable
 
//
 
//
+
 
 
window.WikEdFollowLinks = function() {
 
window.WikEdFollowLinks = function() {
+
 
 
if (wikEdFollowLinks == true) {
 
if (wikEdFollowLinks == true) {
 
for (var linkId in wikEdFollowLinkHash) {
 
for (var linkId in wikEdFollowLinkHash) {
Γραμμή 4.364: Γραμμή 4.363:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdGetText: get the text fragments to manipulate
 
// WikEdGetText: get the text fragments to manipulate
 
//
 
//
+
 
 
window.WikEdGetText = function(obj, whichFragment, noWikify) {
 
window.WikEdGetText = function(obj, whichFragment, noWikify) {
+
 
 
// get selection object
 
// get selection object
 
if (obj.sel == null) {
 
if (obj.sel == null) {
 
obj.sel = wikEdFrameWindow.getSelection();
 
obj.sel = wikEdFrameWindow.getSelection();
 
}
 
}
+
 
 
// cursor for the cursor position (always done)
 
// cursor for the cursor position (always done)
 
if (obj.cursor == null) {
 
if (obj.cursor == null) {
Γραμμή 4.387: Γραμμή 4.386:
 
obj.cursor.plain = '';
 
obj.cursor.plain = '';
 
}
 
}
+
 
 
// whole for the whole text
 
// whole for the whole text
 
if (obj.whole == null) {
 
if (obj.whole == null) {
Γραμμή 4.397: Γραμμή 4.396:
 
obj.whole.from = 'whole';
 
obj.whole.from = 'whole';
 
obj.whole.keepSel = false;
 
obj.whole.keepSel = false;
+
 
 
// set whole range
 
// set whole range
 
obj.whole.range = document.createRange();
 
obj.whole.range = document.createRange();
 
obj.whole.range.setStartBefore(wikEdFrameBody.firstChild);
 
obj.whole.range.setStartBefore(wikEdFrameBody.firstChild);
 
obj.whole.range.setEndAfter(wikEdFrameBody.lastChild);
 
obj.whole.range.setEndAfter(wikEdFrameBody.lastChild);
+
 
 
// get whole plain text
 
// get whole plain text
 
WikEdGetInnerHTML(obj.whole, wikEdFrameBody);
 
WikEdGetInnerHTML(obj.whole, wikEdFrameBody);
Γραμμή 4.412: Γραμμή 4.411:
 
}
 
}
 
}
 
}
+
 
 
// selection for the selected text
 
// selection for the selected text
 
if (obj.selection == null) {
 
if (obj.selection == null) {
Γραμμή 4.419: Γραμμή 4.418:
 
obj.selection.from = 'selection';
 
obj.selection.from = 'selection';
 
obj.selection.keepSel = false;
 
obj.selection.keepSel = false;
+
 
 
// copy range to document fragment
 
// copy range to document fragment
 
obj.selection.range = obj.sel.getRangeAt(obj.sel.rangeCount - 1);
 
obj.selection.range = obj.sel.getRangeAt(obj.sel.rangeCount - 1);
 
var documentFragment = obj.selection.range.cloneContents();
 
var documentFragment = obj.selection.range.cloneContents();
+
 
 
// get selected text
 
// get selected text
 
WikEdGetInnerHTML(obj.selection, documentFragment);
 
WikEdGetInnerHTML(obj.selection, documentFragment);
Γραμμή 4.433: Γραμμή 4.432:
 
}
 
}
 
}
 
}
+
 
 
// focusWord and focusLine for the complete words and lines under the cursor
 
// focusWord and focusLine for the complete words and lines under the cursor
 
if (obj.focusWord == null) {
 
if (obj.focusWord == null) {
Γραμμή 4.440: Γραμμή 4.439:
 
obj.focusWord.from = 'focusWord';
 
obj.focusWord.from = 'focusWord';
 
obj.focusWord.range = document.createRange();
 
obj.focusWord.range = document.createRange();
+
 
 
// setup focusLine object for the line under the cursor
 
// setup focusLine object for the line under the cursor
 
obj.focusLine = {};
 
obj.focusLine = {};
Γραμμή 4.446: Γραμμή 4.445:
 
obj.focusLine.keepSel = false;
 
obj.focusLine.keepSel = false;
 
obj.focusLine.range = document.createRange();
 
obj.focusLine.range = document.createRange();
+
 
 
// find the word and line boundaries
 
// find the word and line boundaries
 
WikEdFindBoundaries(obj.focusWord, obj.focusLine, obj.whole, obj.cursor);
 
WikEdFindBoundaries(obj.focusWord, obj.focusLine, obj.whole, obj.cursor);
+
 
 
// get the wikified plain text for the word under the cursor
 
// get the wikified plain text for the word under the cursor
 
var documentFragment = obj.focusWord.range.cloneContents();
 
var documentFragment = obj.focusWord.range.cloneContents();
Γραμμή 4.458: Γραμμή 4.457:
 
obj.focusWord.plain = obj.focusWord.plain.replace(/<br\b[^>]*>[\n ]*()/g, '\n');
 
obj.focusWord.plain = obj.focusWord.plain.replace(/<br\b[^>]*>[\n ]*()/g, '\n');
 
obj.focusWord.plain = obj.focusWord.plain.replace(/\u00a0/g, ' ');
 
obj.focusWord.plain = obj.focusWord.plain.replace(/\u00a0/g, ' ');
+
 
 
// get the wikified plain text for the line under the cursor
 
// get the wikified plain text for the line under the cursor
 
var documentFragment = obj.focusLine.range.cloneContents();
 
var documentFragment = obj.focusLine.range.cloneContents();
Γραμμή 4.469: Γραμμή 4.468:
 
}
 
}
 
}
 
}
+
 
 
// selectionWord and selectionLine for the complete words and lines under the selection
 
// selectionWord and selectionLine for the complete words and lines under the selection
 
if (obj.selectionWord == null) {
 
if (obj.selectionWord == null) {
 
if (/selectionWord|selectionLine/.test(whichFragment) == true) {
 
if (/selectionWord|selectionLine/.test(whichFragment) == true) {
+
 
 
// setup selectionWord object for the words under the selection
 
// setup selectionWord object for the words under the selection
 
obj.selectionWord = {};
 
obj.selectionWord = {};
Γραμμή 4.479: Γραμμή 4.478:
 
obj.selectionWord.keepSel = false;
 
obj.selectionWord.keepSel = false;
 
obj.selectionWord.range = document.createRange();
 
obj.selectionWord.range = document.createRange();
+
 
 
// setup selectionLine object for the lines under the selection
 
// setup selectionLine object for the lines under the selection
 
obj.selectionLine = {};
 
obj.selectionLine = {};
 
obj.selectionLine.from = 'selectionLine';
 
obj.selectionLine.from = 'selectionLine';
 
obj.selectionLine.range = document.createRange();
 
obj.selectionLine.range = document.createRange();
+
 
 
// find the word and line boundaries
 
// find the word and line boundaries
 
WikEdFindBoundaries(obj.selectionWord, obj.selectionLine, obj.whole, obj.selection);
 
WikEdFindBoundaries(obj.selectionWord, obj.selectionLine, obj.whole, obj.selection);
+
 
 
// get the wikified plain text for the words under the selection
 
// get the wikified plain text for the words under the selection
 
var documentFragment = obj.selectionWord.range.cloneContents();
 
var documentFragment = obj.selectionWord.range.cloneContents();
Γραμμή 4.496: Γραμμή 4.495:
 
obj.selectionWord.plain = obj.selectionWord.plain.replace(/<br\b[^>]*>[\n ]*()/g, '\n');
 
obj.selectionWord.plain = obj.selectionWord.plain.replace(/<br\b[^>]*>[\n ]*()/g, '\n');
 
obj.selectionWord.plain = obj.selectionWord.plain.replace(/\u00a0/g, ' ');
 
obj.selectionWord.plain = obj.selectionWord.plain.replace(/\u00a0/g, ' ');
+
 
 
// get the wikified plain text for the lines under the selection
 
// get the wikified plain text for the lines under the selection
 
var documentFragment = obj.selectionLine.range.cloneContents();
 
var documentFragment = obj.selectionLine.range.cloneContents();
Γραμμή 4.509: Γραμμή 4.508:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdFind: custom find function with regexp properties, sets obj.changed.range, uses obj ranges
 
// WikEdFind: custom find function with regexp properties, sets obj.changed.range, uses obj ranges
 
//
 
//
+
 
 
window.WikEdFind = function(obj, findText, caseSensitive, backwards, wrap, regExp) {
 
window.WikEdFind = function(obj, findText, caseSensitive, backwards, wrap, regExp) {
+
 
 
var range = obj.sel.getRangeAt(obj.sel.rangeCount - 1);
 
var range = obj.sel.getRangeAt(obj.sel.rangeCount - 1);
 
var found = false;
 
var found = false;
+
 
 
// empty the range to avoid error messages for reverse direction ranges
 
// empty the range to avoid error messages for reverse direction ranges
 
///////////// obj.changed.range = document.createRange();
 
///////////// obj.changed.range = document.createRange();
+
 
 
// use the fast built-in find function for non-regexp searches
 
// use the fast built-in find function for non-regexp searches
 
if (regExp == null) {
 
if (regExp == null) {
+
 
 
// parameters: window.find(string, caseSensitive, backwards, wrapAround, wholeWord, searchInFrames, showDialog)
 
// parameters: window.find(string, caseSensitive, backwards, wrapAround, wholeWord, searchInFrames, showDialog)
 
found = wikEdFrameWindow.find(findText, caseSensitive, backwards, wrap, false, true, false);
 
found = wikEdFrameWindow.find(findText, caseSensitive, backwards, wrap, false, true, false);
Γραμμή 4.533: Γραμμή 4.532:
 
obj.changed.range = range.cloneRange();
 
obj.changed.range = range.cloneRange();
 
}
 
}
+
 
 
// slow javascript regexp find and replace
 
// slow javascript regexp find and replace
 
else {
 
else {
+
 
 
// perform find
 
// perform find
 
if (obj.plainArray === undefined) {
 
if (obj.plainArray === undefined) {
Γραμμή 4.542: Γραμμή 4.541:
 
}
 
}
 
var regExpMatch = [];
 
var regExpMatch = [];
+
 
 
// find next, search to the right
 
// find next, search to the right
 
if (backwards == false) {
 
if (backwards == false) {
+
 
 
// set start position for search to right
 
// set start position for search to right
 
regExpMatch = regExp.exec(obj.plain);
 
regExpMatch = regExp.exec(obj.plain);
 
regExp.lastIndex = obj.plainFocus;
 
regExp.lastIndex = obj.plainFocus;
+
 
 
// execute the regexp search to the right
 
// execute the regexp search to the right
 
regExpMatch = regExp.exec(obj.plain);
 
regExpMatch = regExp.exec(obj.plain);
+
 
 
// remember position for repeated searches
 
// remember position for repeated searches
 
obj.plainFocus = regExp.lastIndex;
 
obj.plainFocus = regExp.lastIndex;
+
 
 
// wrap around, start at beginning
 
// wrap around, start at beginning
 
if ( (wrap == true) && (regExpMatch == null) ) {
 
if ( (wrap == true) && (regExpMatch == null) ) {
Γραμμή 4.562: Γραμμή 4.561:
 
}
 
}
 
}
 
}
+
 
 
// find previous, search to the left
 
// find previous, search to the left
 
else {
 
else {
+
 
 
// cycle through the matches to the left
 
// cycle through the matches to the left
 
var regExpMatchNext;
 
var regExpMatchNext;
Γραμμή 4.575: Γραμμή 4.574:
 
}
 
}
 
} while (regExpMatchNext.index < obj.plainAnchor);
 
} while (regExpMatchNext.index < obj.plainAnchor);
+
 
 
// wrap around, find last occurrence
 
// wrap around, find last occurrence
 
if ( (wrap == true) && (regExpMatch == null) ) {
 
if ( (wrap == true) && (regExpMatch == null) ) {
Γραμμή 4.584: Γραμμή 4.583:
 
}
 
}
 
}
 
}
+
 
 
// select the find
 
// select the find
 
if (regExpMatch != null) {
 
if (regExpMatch != null) {
Γραμμή 4.602: Γραμμή 4.601:
 
return(found);
 
return(found);
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdTextify: strip html off of text
 
// WikEdTextify: strip html off of text
 
//
 
//
+
 
 
window.WikEdTextify = function(obj) {
 
window.WikEdTextify = function(obj) {
+
 
 
// convert html to plain
 
// convert html to plain
 
obj.plain = obj.html;
 
obj.plain = obj.html;
 
obj.plain = obj.plain.replace(/\n/g, ' ');
 
obj.plain = obj.plain.replace(/\n/g, ' ');
+
 
 
// delete tags
 
// delete tags
 
obj.plain = obj.plain.replace(/<(style|script|object|applet|embed)\b[^>]*>.*?<\/\1>/g, '');
 
obj.plain = obj.plain.replace(/<(style|script|object|applet|embed)\b[^>]*>.*?<\/\1>/g, '');
+
 
 
// newlines
 
// newlines
 
obj.plain = obj.plain.replace(/<br\b[^>]*> *()/g, '\n');
 
obj.plain = obj.plain.replace(/<br\b[^>]*> *()/g, '\n');
+
 
 
// remove highlighting pre tags
 
// remove highlighting pre tags
 
var isRemove = [];
 
var isRemove = [];
Γραμμή 4.638: Γραμμή 4.637:
 
}
 
}
 
);
 
);
+
 
 
// blocks
 
// blocks
 
obj.plain = obj.plain.replace(/<\/?(address|blockquote|center|div|hr|isindex|p|pre)\b[^>]*>/g, '\u0000\u0000');
 
obj.plain = obj.plain.replace(/<\/?(address|blockquote|center|div|hr|isindex|p|pre)\b[^>]*>/g, '\u0000\u0000');
+
 
 
// keep headings only if starting with a newline
 
// keep headings only if starting with a newline
 
obj.html = obj.html.replace(/[\s|\u0000]*(^|\n|\u0000)[\s|\u0000]*<h[1-6]\b[^>]*>(.*?)<\/h[1-6]>[\s|\u0000]*()/g, '\u0000\u0000$2\u0000\u0000');
 
obj.html = obj.html.replace(/[\s|\u0000]*(^|\n|\u0000)[\s|\u0000]*<h[1-6]\b[^>]*>(.*?)<\/h[1-6]>[\s|\u0000]*()/g, '\u0000\u0000$2\u0000\u0000');
+
 
 
// lists
 
// lists
 
obj.plain = obj.plain.replace(/<\/?(dir|dl|menu|ol|ul)\b[^>]*>/g, '\u0000');
 
obj.plain = obj.plain.replace(/<\/?(dir|dl|menu|ol|ul)\b[^>]*>/g, '\u0000');
 
obj.plain = obj.plain.replace(/<\/(dd|dt|li)>/g, '\u0000');
 
obj.plain = obj.plain.replace(/<\/(dd|dt|li)>/g, '\u0000');
+
 
 
// forms
 
// forms
 
obj.plain = obj.plain.replace(/<\/?(select|textarea)\b[^>]*>/g, '\u0000');
 
obj.plain = obj.plain.replace(/<\/?(select|textarea)\b[^>]*>/g, '\u0000');
 
obj.plain = obj.plain.replace(/<\/(option|legend|optgroup)>/g, '\u0000');
 
obj.plain = obj.plain.replace(/<\/(option|legend|optgroup)>/g, '\u0000');
+
 
 
// table
 
// table
 
obj.plain = obj.plain.replace(/<\/?(table|caption)\b[^>]*>/g, '\u0000');
 
obj.plain = obj.plain.replace(/<\/?(table|caption)\b[^>]*>/g, '\u0000');
 
obj.plain = obj.plain.replace(/<\/(tr|th|td)>/g, '\u0000');
 
obj.plain = obj.plain.replace(/<\/(tr|th|td)>/g, '\u0000');
+
 
 
// finish html to plain conversion
 
// finish html to plain conversion
 
obj.plain = obj.plain.replace(/<[^>]*>/g, '');
 
obj.plain = obj.plain.replace(/<[^>]*>/g, '');
+
 
 
// remove spaces
 
// remove spaces
 
obj.plain = obj.plain.replace(/[ \t\u00a0]+(\u0000)/g, '$1');
 
obj.plain = obj.plain.replace(/[ \t\u00a0]+(\u0000)/g, '$1');
 
obj.plain = obj.plain.replace(/(\u0000)[ \t\u00a0]+/g, '$1');
 
obj.plain = obj.plain.replace(/(\u0000)[ \t\u00a0]+/g, '$1');
+
 
 
// trim down \u0000 and \n
 
// trim down \u0000 and \n
 
obj.plain = obj.plain.replace(/\u0000{3,}/g, '\n\n');
 
obj.plain = obj.plain.replace(/\u0000{3,}/g, '\n\n');
 
obj.plain = obj.plain.replace(/\u0000/g, '\n');
 
obj.plain = obj.plain.replace(/\u0000/g, '\n');
+
 
 
// remove empty lines and spaces from article start and end
 
// remove empty lines and spaces from article start and end
 
if (obj.from == 'whole') {
 
if (obj.from == 'whole') {
 
obj.html = obj.html.replace(/^\s+|\s+$/g, '');
 
obj.html = obj.html.replace(/^\s+|\s+$/g, '');
 
}
 
}
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdInactiveButtons: grey out inactive buttons, called after every change and click
 
// WikEdInactiveButtons: grey out inactive buttons, called after every change and click
 
//
 
//
+
 
 
window.WikEdInactiveButtons = function() {
 
window.WikEdInactiveButtons = function() {
+
 
 
// undo
 
// undo
 
if (wikEdFrameDocument.queryCommandEnabled('undo') == true ) {
 
if (wikEdFrameDocument.queryCommandEnabled('undo') == true ) {
Γραμμή 4.692: Γραμμή 4.691:
 
document.getElementById('wikEdUndoAll').className = 'wikEdButtonInactive';
 
document.getElementById('wikEdUndoAll').className = 'wikEdButtonInactive';
 
}
 
}
+
 
 
// redo
 
// redo
 
if (wikEdFrameDocument.queryCommandEnabled('redo') == true ) {
 
if (wikEdFrameDocument.queryCommandEnabled('redo') == true ) {
Γραμμή 4.700: Γραμμή 4.699:
 
document.getElementById('wikEdRedo').className = 'wikEdButtonInactive';
 
document.getElementById('wikEdRedo').className = 'wikEdButtonInactive';
 
}
 
}
+
 
 
// redo all
 
// redo all
 
if (wikEdLastVersion != null) {
 
if (wikEdLastVersion != null) {
Γραμμή 4.710: Γραμμή 4.709:
 
return;
 
return;
 
}
 
}
+
 
 
//
 
//
 
// WikEdFixBasic: fix characters, spaces, empty lines, certain headings, needed for all fixing functions
 
// WikEdFixBasic: fix characters, spaces, empty lines, certain headings, needed for all fixing functions
 
//
 
//
+
 
 
/// change: double spaces ok after dot
 
/// change: double spaces ok after dot
+
 
 
window.WikEdFixBasic = function(obj) {
 
window.WikEdFixBasic = function(obj) {
+
 
 
// non-breaking space character to normal space
 
// non-breaking space character to normal space
 
obj.plain = obj.plain.replace(/\u00a0/g, ' ');
 
obj.plain = obj.plain.replace(/\u00a0/g, ' ');
+
 
 
// tab to space
 
// tab to space
 
obj.plain = obj.plain.replace(/ *\t[ \t]*()/g, ' ');
 
obj.plain = obj.plain.replace(/ *\t[ \t]*()/g, ' ');
+
 
 
// remove trailing spaces
 
// remove trailing spaces
 
obj.plain = obj.plain.replace(/(\t| |&nbsp;)+\n/g, '\n');
 
obj.plain = obj.plain.replace(/(\t| |&nbsp;)+\n/g, '\n');
+
 
 
// remove spaces in empty lines
 
// remove spaces in empty lines
 
obj.plain = obj.plain.replace(/\n( |&nbsp;|\t)+\n/g, '\n\n');
 
obj.plain = obj.plain.replace(/\n( |&nbsp;|\t)+\n/g, '\n\n');
+
 
 
// empty line before and after headings, spaces around word (lookahead)
 
// empty line before and after headings, spaces around word (lookahead)
 
obj.plain = obj.plain.replace(/\n+(=+) *([^\n]*?) *(=+)(?=\n)/g, '\n\n$1 $2 $3\n\n');
 
obj.plain = obj.plain.replace(/\n+(=+) *([^\n]*?) *(=+)(?=\n)/g, '\n\n$1 $2 $3\n\n');
+
 
 
// uppercase well known headings
 
// uppercase well known headings
 
var regExp = new RegExp('\\n=+ ' + wikEdText['External links'] + '? =+\\n', 'gi');
 
var regExp = new RegExp('\\n=+ ' + wikEdText['External links'] + '? =+\\n', 'gi');
Γραμμή 4.741: Γραμμή 4.740:
 
regExp = new RegExp('\\n=+ ' + wikEdText['References'] + '? =+\\n', 'gi');
 
regExp = new RegExp('\\n=+ ' + wikEdText['References'] + '? =+\\n', 'gi');
 
obj.plain = obj.plain.replace(regExp, '\n== ' + wikEdText['References'] + ' ==\n');
 
obj.plain = obj.plain.replace(regExp, '\n== ' + wikEdText['References'] + ' ==\n');
+
 
 
// add space after * # : ; (list) and after {| |- | (table)
 
// add space after * # : ; (list) and after {| |- | (table)
 
obj.plain = obj.plain.replace(/(^|\n)([\*\#\:\;]+|\{\||\|\-|\|\}|\|) *()/g, '$1$2 ');
 
obj.plain = obj.plain.replace(/(^|\n)([\*\#\:\;]+|\{\||\|\-|\|\}|\|) *()/g, '$1$2 ');
 
obj.plain = obj.plain.replace(/ +\n/g, '\n');
 
obj.plain = obj.plain.replace(/ +\n/g, '\n');
+
 
 
// empty line before and after tables
 
// empty line before and after tables
 
obj.plain = obj.plain.replace(/\n+(\{\|)/g, '\n\n$1');
 
obj.plain = obj.plain.replace(/\n+(\{\|)/g, '\n\n$1');
 
obj.plain = obj.plain.replace(/(\n\|\}([^\}]|$)) *([^\n]*)[\n|$]+/g, '$1\n\n$3\n\n');
 
obj.plain = obj.plain.replace(/(\n\|\}([^\}]|$)) *([^\n]*)[\n|$]+/g, '$1\n\n$3\n\n');
+
 
 
// empty line before and after lists
 
// empty line before and after lists
 
obj.plain = obj.plain.replace(/(^|\n)([^\*\#\:\;\n][^\n]*)(?=\n[\*\#\:\;])/g, '$1$2\n\n');
 
obj.plain = obj.plain.replace(/(^|\n)([^\*\#\:\;\n][^\n]*)(?=\n[\*\#\:\;])/g, '$1$2\n\n');
 
obj.plain = obj.plain.replace(/(^|\n)([\*\#\:\;][^\n]*?)(?=\n[^\*\#\:\;\n])/g, '$1$2\n\n');
 
obj.plain = obj.plain.replace(/(^|\n)([\*\#\:\;][^\n]*?)(?=\n[^\*\#\:\;\n])/g, '$1$2\n\n');
+
 
 
// split into lines and change single lines, used to handle tables
 
// split into lines and change single lines, used to handle tables
 
var lines = obj.plain.split('\n');
 
var lines = obj.plain.split('\n');
Γραμμή 4.760: Γραμμή 4.759:
 
for (var i = 0; i < lines.length; i++) {
 
for (var i = 0; i < lines.length; i++) {
 
var line = lines[i];
 
var line = lines[i];
+
 
 
// do not change lines starting with a blank
 
// do not change lines starting with a blank
 
if (/^ /.test(line) == false) {
 
if (/^ /.test(line) == false) {
+
 
 
// detect table
 
// detect table
 
if ( line.match(/^(\{\||\!|\|[^}])/) ) {
 
if ( line.match(/^(\{\||\!|\|[^}])/) ) {
Γραμμή 4.771: Γραμμή 4.770:
 
tableflag = false;
 
tableflag = false;
 
}
 
}
+
 
 
// changes only to be done in tables
 
// changes only to be done in tables
 
if (tableflag) {
 
if (tableflag) {
+
 
 
// add spaces around ||
 
// add spaces around ||
 
line = line.replace(/ *\|\| *()/g, ' || ');
 
line = line.replace(/ *\|\| *()/g, ' || ');
 
}
 
}
+
 
 
// changes not to be done in tables
 
// changes not to be done in tables
 
if (! tableflag) {
 
if (! tableflag) {
+
 
 
// empty line before and after images
 
// empty line before and after images
 
var regExp = new RegExp('^(\\[\\[' + wikEdText['wikicode Image'] + ':.*?\\]\\])', 'ig');
 
var regExp = new RegExp('^(\\[\\[' + wikEdText['wikicode Image'] + ':.*?\\]\\])', 'ig');
 
line = line.replace(regExp, '\n$1');
 
line = line.replace(regExp, '\n$1');
+
 
 
regExp = new RegExp('(\\[\\[' + wikEdText['wikicode Image'] + ':.*?(\\[\\[.*?\\]\\].*?)*\\]\\])$', 'ig');
 
regExp = new RegExp('(\\[\\[' + wikEdText['wikicode Image'] + ':.*?(\\[\\[.*?\\]\\].*?)*\\]\\])$', 'ig');
 
line = line.replace(regExp, '$1\n');
 
line = line.replace(regExp, '$1\n');
+
 
 
// empty line before and after includes
 
// empty line before and after includes
 
line = line.replace(/^(\{\{.*?\}\})/g, '\n$1');
 
line = line.replace(/^(\{\{.*?\}\})/g, '\n$1');
Γραμμή 4.794: Γραμμή 4.793:
 
}
 
}
 
}
 
}
+
 
 
// concatenate the lines
 
// concatenate the lines
 
obj.plain += line;
 
obj.plain += line;
Γραμμή 4.801: Γραμμή 4.800:
 
}
 
}
 
}
 
}
+
 
 
// remove underscores in wikilinks
 
// remove underscores in wikilinks
 
obj.plain = obj.plain.replace(/\[\[(.*?)(\|.*?)?\]\]/g,
 
obj.plain = obj.plain.replace(/\[\[(.*?)(\|.*?)?\]\]/g,
Γραμμή 4.809: Γραμμή 4.808:
 
}
 
}
 
);
 
);
+
 
 
// remove spaces in wikilinks
 
// remove spaces in wikilinks
 
obj.plain = obj.plain.replace(/\[\[ *([^\n]*?) *\]\]/g, '[[$1]]');
 
obj.plain = obj.plain.replace(/\[\[ *([^\n]*?) *\]\]/g, '[[$1]]');
+
 
 
// remove spaces in external links
 
// remove spaces in external links
 
obj.plain = obj.plain.replace(/\[ *([^\n]*?) *\]/g, '[$1]');
 
obj.plain = obj.plain.replace(/\[ *([^\n]*?) *\]/g, '[$1]');
+
 
 
// no space around pipes before brackets
 
// no space around pipes before brackets
 
obj.plain = obj.plain.replace(/ +\| +\]\]/g, '|]]');
 
obj.plain = obj.plain.replace(/ +\| +\]\]/g, '|]]');
+
 
 
// no space around pipes before curly brackets
 
// no space around pipes before curly brackets
 
obj.plain = obj.plain.replace(/ +\| +\}\}/g, '|}}');
 
obj.plain = obj.plain.replace(/ +\| +\}\}/g, '|}}');
+
 
 
// no empty line between headings and includes
 
// no empty line between headings and includes
 
obj.plain = obj.plain.replace(/\n(=+ [^\n]*? =+\n)\n+(\{\{.*?\}\})/g, '\n$1$2');
 
obj.plain = obj.plain.replace(/\n(=+ [^\n]*? =+\n)\n+(\{\{.*?\}\})/g, '\n$1$2');
+
 
 
// spaces in comments
 
// spaces in comments
 
obj.plain = obj.plain.replace(/(&lt;!--) *([^\n]*?) *(--&gt;)/g, '$1 $2 $3');
 
obj.plain = obj.plain.replace(/(&lt;!--) *([^\n]*?) *(--&gt;)/g, '$1 $2 $3');
+
 
 
// empty line before and after categories
 
// empty line before and after categories
 
var regExp = new RegExp('( |\\n)*(\\[\\[' + wikEdText['wikicode Category'] + ':[^\\n]*?\\]\\])( |\\n)*', 'gi');
 
var regExp = new RegExp('( |\\n)*(\\[\\[' + wikEdText['wikicode Category'] + ':[^\\n]*?\\]\\])( |\\n)*', 'gi');
 
obj.plain = obj.plain.replace(regExp, '\n\n$2\n\n');
 
obj.plain = obj.plain.replace(regExp, '\n\n$2\n\n');
+
 
 
// categories not separated by empty lines (lookahead)
 
// categories not separated by empty lines (lookahead)
 
regExp = new RegExp('(\\[\\[category:[^\\n]*?\\]\\])\\n*(?=\\[\\[' + wikEdText['wikicode Category'] + ':[^\\n]*?\\]\\])', 'gi');
 
regExp = new RegExp('(\\[\\[category:[^\\n]*?\\]\\])\\n*(?=\\[\\[' + wikEdText['wikicode Category'] + ':[^\\n]*?\\]\\])', 'gi');
 
obj.plain = obj.plain.replace(regExp, '$1\n');
 
obj.plain = obj.plain.replace(regExp, '$1\n');
+
 
 
// single empty lines only
 
// single empty lines only
 
obj.plain = obj.plain.replace(/\n{3,}/g, '\n\n');
 
obj.plain = obj.plain.replace(/\n{3,}/g, '\n\n');
+
 
 
// remove leading and trailing newlines
 
// remove leading and trailing newlines
 
obj.plain = obj.plain.replace(/^\n+/, '');
 
obj.plain = obj.plain.replace(/^\n+/, '');
 
obj.plain = obj.plain.replace(/\n{2,}$/, '\n');
 
obj.plain = obj.plain.replace(/\n{2,}$/, '\n');
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdFixPunct: remove space before .,:;
 
// WikEdFixPunct: remove space before .,:;
 
//
 
//
+
 
 
window.WikEdFixPunct = function(obj) {
 
window.WikEdFixPunct = function(obj) {
+
 
 
WikEdFixBasic(obj);
 
WikEdFixBasic(obj);
+
 
 
obj.plain = obj.plain.replace(/([\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9\'\"”\]\}\)]) +([\.\,\:\;])(\s+|$)/g, '$1$2 ');
 
obj.plain = obj.plain.replace(/([\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9\'\"”\]\}\)]) +([\.\,\:\;])(\s+|$)/g, '$1$2 ');
 
obj.plain = obj.plain.replace(/\s+$/g, '');
 
obj.plain = obj.plain.replace(/\s+$/g, '');
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdFixUnicode: fix unicode character representations
 
// WikEdFixUnicode: fix unicode character representations
 
//
 
//
+
 
 
window.WikEdFixUnicode = function(obj) {
 
window.WikEdFixUnicode = function(obj) {
+
 
 
// replace supported chars: change decimal, hex, and character entities into actual char
 
// replace supported chars: change decimal, hex, and character entities into actual char
 
for (var i = 0; i < wikEdSupportedChars.length; i ++) {
 
for (var i = 0; i < wikEdSupportedChars.length; i ++) {
 
var replaceChar = String.fromCharCode(parseInt(wikEdSupportedChars[i][0], 16));
 
var replaceChar = String.fromCharCode(parseInt(wikEdSupportedChars[i][0], 16));
+
 
 
// decimal representation
 
// decimal representation
 
var regExpStr = '&#0*' + parseInt(wikEdSupportedChars[i][0], 16) + ';|';
 
var regExpStr = '&#0*' + parseInt(wikEdSupportedChars[i][0], 16) + ';|';
+
 
 
// hex representation
 
// hex representation
 
regExpStr += '&#x0*' + wikEdSupportedChars[i][0] + ';';
 
regExpStr += '&#x0*' + wikEdSupportedChars[i][0] + ';';
+
 
 
// case insensitive replace
 
// case insensitive replace
 
var regExp = new RegExp(regExpStr, 'gi');
 
var regExp = new RegExp(regExpStr, 'gi');
 
obj.plain = obj.plain.replace(regExp, replaceChar);
 
obj.plain = obj.plain.replace(regExp, replaceChar);
+
 
 
// character entity representation
 
// character entity representation
 
regExpStr = '&amp;' + wikEdSupportedChars[i][1] + ';';
 
regExpStr = '&amp;' + wikEdSupportedChars[i][1] + ';';
+
 
 
// case sensitive replace
 
// case sensitive replace
 
regExp = new RegExp(regExpStr, 'g');
 
regExp = new RegExp(regExpStr, 'g');
 
obj.plain = obj.plain.replace(regExp, replaceChar);
 
obj.plain = obj.plain.replace(regExp, replaceChar);
 
}
 
}
+
 
 
// replace unsupported chars in IE6: change decimal, hex, and chars into character entities
 
// replace unsupported chars in IE6: change decimal, hex, and chars into character entities
 
for (var i = 0; i < wikEdProblemChars.length; i ++) {
 
for (var i = 0; i < wikEdProblemChars.length; i ++) {
 
replaceChar = '&' + wikEdProblemChars[i][1] + ';';
 
replaceChar = '&' + wikEdProblemChars[i][1] + ';';
+
 
 
// decimal representation
 
// decimal representation
 
regExpStr = '&#0*' + parseInt(wikEdProblemChars[i][0], 16) + ';|';
 
regExpStr = '&#0*' + parseInt(wikEdProblemChars[i][0], 16) + ';|';
+
 
 
// hex representation
 
// hex representation
 
regExpStr += '&#x0*' + wikEdProblemChars[i][0] + ';';
 
regExpStr += '&#x0*' + wikEdProblemChars[i][0] + ';';
+
 
 
// case insensitive replace
 
// case insensitive replace
 
regExp = new RegExp(regExpStr, 'gi');
 
regExp = new RegExp(regExpStr, 'gi');
 
obj.plain = obj.plain.replace(regExp, replaceChar);
 
obj.plain = obj.plain.replace(regExp, replaceChar);
+
 
 
// actual character representation
 
// actual character representation
 
regExpStr = '\\u' + wikEdProblemChars[i][0];
 
regExpStr = '\\u' + wikEdProblemChars[i][0];
+
 
 
// case sensitive replace
 
// case sensitive replace
 
regExp = new RegExp(regExpStr, 'g');
 
regExp = new RegExp(regExpStr, 'g');
 
obj.plain = obj.plain.replace(regExp, replaceChar);
 
obj.plain = obj.plain.replace(regExp, replaceChar);
 
}
 
}
+
 
 
// replace special chars (spaces and invisible characters): change decimal, hex, and chars into character entities
 
// replace special chars (spaces and invisible characters): change decimal, hex, and chars into character entities
 
for (var i = 0; i < wikEdSpecialChars.length; i ++) {
 
for (var i = 0; i < wikEdSpecialChars.length; i ++) {
 
var replaceChar = '&amp;' + wikEdSpecialChars[i][1] + ';';
 
var replaceChar = '&amp;' + wikEdSpecialChars[i][1] + ';';
+
 
 
// decimal representation
 
// decimal representation
 
var regExpStr = '&#0*' + parseInt(wikEdSpecialChars[i][0], 16) + ';|';
 
var regExpStr = '&#0*' + parseInt(wikEdSpecialChars[i][0], 16) + ';|';
+
 
 
// hex representation
 
// hex representation
 
regExpStr += '&#x0*' + wikEdSpecialChars[i][0] + ';';
 
regExpStr += '&#x0*' + wikEdSpecialChars[i][0] + ';';
+
 
 
// case insensitive replace
 
// case insensitive replace
 
var regExp = new RegExp(regExpStr, 'gi');
 
var regExp = new RegExp(regExpStr, 'gi');
 
obj.plain = obj.plain.replace(regExp, replaceChar);
 
obj.plain = obj.plain.replace(regExp, replaceChar);
+
 
 
// actual character representation
 
// actual character representation
 
regExpStr = '\\u' + wikEdSpecialChars[i][0];
 
regExpStr = '\\u' + wikEdSpecialChars[i][0];
+
 
 
// case sensitive replace
 
// case sensitive replace
 
var regExp = new RegExp(regExpStr, 'g');
 
var regExp = new RegExp(regExpStr, 'g');
 
obj.plain = obj.plain.replace(regExp, replaceChar);
 
obj.plain = obj.plain.replace(regExp, replaceChar);
 
}
 
}
+
 
 
// unicode line separator and paragraph separator
 
// unicode line separator and paragraph separator
 
obj.plain = obj.plain.replace(/\u2028/g, '\n');
 
obj.plain = obj.plain.replace(/\u2028/g, '\n');
 
obj.plain = obj.plain.replace(/\u2029/g, '\n\n');
 
obj.plain = obj.plain.replace(/\u2029/g, '\n\n');
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdFixMath: math character fixer, originally from User:Omegatron
 
// WikEdFixMath: math character fixer, originally from User:Omegatron
 
//
 
//
+
 
 
window.WikEdFixMath = function(obj) {
 
window.WikEdFixMath = function(obj) {
+
 
 
WikEdFixBasic(obj);
 
WikEdFixBasic(obj);
+
 
 
// change only outside <math> </math> wikicode
 
// change only outside <math> </math> wikicode
 
obj.plain = obj.plain.replace(/(.*?)((&lt;math(\b.*?)&gt;.*?&lt;\/math&gt;)|$)/gi,
 
obj.plain = obj.plain.replace(/(.*?)((&lt;math(\b.*?)&gt;.*?&lt;\/math&gt;)|$)/gi,
 
function (p, p1, p2) {
 
function (p, p1, p2) {
+
 
 
// convert html entities into actual dash characters
 
// convert html entities into actual dash characters
 
p1 = p1.replace(/&plus;/g, '+');
 
p1 = p1.replace(/&plus;/g, '+');
 
p1 = p1.replace(/&minus;/g, '\u2212');
 
p1 = p1.replace(/&minus;/g, '\u2212');
 
p1 = p1.replace(/&middot;/g, '·');
 
p1 = p1.replace(/&middot;/g, '·');
+
 
 
// convert dash next to a number into a minus sign character
 
// convert dash next to a number into a minus sign character
 
p1 = p1.replace(/([^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9\,\{])-(\d)/g, '$1\u2212$2');
 
p1 = p1.replace(/([^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9\,\{])-(\d)/g, '$1\u2212$2');
+
 
 
// changes 2x3 to 2×3
 
// changes 2x3 to 2×3
 
p1 = p1.replace(/(\d *)x( *\d)/g, '$1\u00d7$2');
 
p1 = p1.replace(/(\d *)x( *\d)/g, '$1\u00d7$2');
+
 
 
// changes 10^3 to 10<sup>3</sup>
 
// changes 10^3 to 10<sup>3</sup>
 
p1 = p1.replace(/(\d*\.?\d+)\^(\u2212?\d+\.?\d*)/g, '$1&lt;sup&gt;$2&lt;/sup&gt;');
 
p1 = p1.replace(/(\d*\.?\d+)\^(\u2212?\d+\.?\d*)/g, '$1&lt;sup&gt;$2&lt;/sup&gt;');
+
 
 
// change x^3 to x<sup>3</sup>
 
// change x^3 to x<sup>3</sup>
 
p1 = p1.replace(/([\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9])\^(\u2212?\d+\.?\d*) /g, '$1&lt;sup&gt;$2&lt;/sup&gt;');
 
p1 = p1.replace(/([\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9])\^(\u2212?\d+\.?\d*) /g, '$1&lt;sup&gt;$2&lt;/sup&gt;');
+
 
 
// change +/- to ±
 
// change +/- to ±
 
p1 = p1.replace(/( |\d)\+\/(-|\u2212)( |\d)/g, '$1\u00b1$3');
 
p1 = p1.replace(/( |\d)\+\/(-|\u2212)( |\d)/g, '$1\u00b1$3');
+
 
 
// htmlize single char superscripts
 
// htmlize single char superscripts
 
p1 = p1.replace(/(\u00b9|&sup1;)/g, '&lt;sup&gt;1&lt;/sup&gt;');
 
p1 = p1.replace(/(\u00b9|&sup1;)/g, '&lt;sup&gt;1&lt;/sup&gt;');
 
p1 = p1.replace(/(\u00b2|&sup2;)/g, '&lt;sup&gt;2&lt;/sup&gt;');
 
p1 = p1.replace(/(\u00b2|&sup2;)/g, '&lt;sup&gt;2&lt;/sup&gt;');
 
p1 = p1.replace(/(\u00b3|&sup3;)/g, '&lt;sup&gt;3&lt;/sup&gt;');
 
p1 = p1.replace(/(\u00b3|&sup3;)/g, '&lt;sup&gt;3&lt;/sup&gt;');
+
 
 
return(p1 + p2);
 
return(p1 + p2);
 
}
 
}
Γραμμή 4.984: Γραμμή 4.983:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdFixChem: fix chemical formulas
 
// WikEdFixChem: fix chemical formulas
 
//
 
//
+
 
 
window.WikEdFixChem = function(obj) {
 
window.WikEdFixChem = function(obj) {
+
 
 
WikEdFixBasic(obj);
 
WikEdFixBasic(obj);
+
 
 
var realElements = 'H|He|Li|Be|B|C|N|O|F|Ne|Na|Mg|Al|Si|P|S|Cl|Ar|K|Ca|Sc|Ti|V|Cr|Mn|Fe|Co|Ni|Cu|Zn|Ga|Ge|As|Se|Br|Kr|Rb|Sr|Y|Zr|Nb|Mo|Tc|Ru|Rh|Pd|Ag|Cd|In|Sn|Sb|Te|I|Xe|Cs|Ba|Hf|Ta|W|Re|Os|Ir|Pt|Au|Hg|Tl|Pb|Bi|Po|At|Rn|Fr|Ra|Rf|Db|Sg|Bh|Hs|Mt|Ds|Rg|La|Ce|Pr|Nd|Pm|Sm|Eu|Gd|Tb|Dy|Ho|Er|Tm|Yb|Lu|Ac|Th|Pa|U|Np|Pu|Am|Cm|Bk|Cf|Es|Fm|Md|No|Lr';
 
var realElements = 'H|He|Li|Be|B|C|N|O|F|Ne|Na|Mg|Al|Si|P|S|Cl|Ar|K|Ca|Sc|Ti|V|Cr|Mn|Fe|Co|Ni|Cu|Zn|Ga|Ge|As|Se|Br|Kr|Rb|Sr|Y|Zr|Nb|Mo|Tc|Ru|Rh|Pd|Ag|Cd|In|Sn|Sb|Te|I|Xe|Cs|Ba|Hf|Ta|W|Re|Os|Ir|Pt|Au|Hg|Tl|Pb|Bi|Po|At|Rn|Fr|Ra|Rf|Db|Sg|Bh|Hs|Mt|Ds|Rg|La|Ce|Pr|Nd|Pm|Sm|Eu|Gd|Tb|Dy|Ho|Er|Tm|Yb|Lu|Ac|Th|Pa|U|Np|Pu|Am|Cm|Bk|Cf|Es|Fm|Md|No|Lr';
 
var pseudoElements = '|Me|Et|Pr|Bu|e';
 
var pseudoElements = '|Me|Et|Pr|Bu|e';
+
 
 
// fix common typos
 
// fix common typos
 
obj.plain = obj.plain.replace(/(^|[^a-z])h2o([^a-z]|$)/g, '$1H2O$2');
 
obj.plain = obj.plain.replace(/(^|[^a-z])h2o([^a-z]|$)/g, '$1H2O$2');
 
obj.plain = obj.plain.replace(/(^|[^a-z])h3o+/g, '$1H3O+');
 
obj.plain = obj.plain.replace(/(^|[^a-z])h3o+/g, '$1H3O+');
 
obj.plain = obj.plain.replace(/(^|[^a-z])oh-/g, '$1OH+');
 
obj.plain = obj.plain.replace(/(^|[^a-z])oh-/g, '$1OH+');
+
 
 
// uppercase lowercased elements
 
// uppercase lowercased elements
 
var regExp = new RegExp('(^|[^a-zA-Z])(' + realElements.toLowerCase() + pseudoElements.toLowerCase() + ')([^a-zA-Z]|$)', 'g');
 
var regExp = new RegExp('(^|[^a-zA-Z])(' + realElements.toLowerCase() + pseudoElements.toLowerCase() + ')([^a-zA-Z]|$)', 'g');
Γραμμή 5.012: Γραμμή 5.011:
 
}
 
}
 
);
 
);
+
 
 
// fix superscripts
 
// fix superscripts
 
obj.plain = obj.plain.replace(/&plus;/g, '+');
 
obj.plain = obj.plain.replace(/&plus;/g, '+');
Γραμμή 5.024: Γραμμή 5.023:
 
}
 
}
 
);
 
);
+
 
 
// fix indices
 
// fix indices
 
regExp = new RegExp('(' + realElements + pseudoElements + '|\\))(\\d+)', 'g');
 
regExp = new RegExp('(' + realElements + pseudoElements + '|\\))(\\d+)', 'g');
 
obj.plain = obj.plain.replace(regExp, '$1&lt;sub&gt;$2&lt;/sub&gt;');
 
obj.plain = obj.plain.replace(regExp, '$1&lt;sub&gt;$2&lt;/sub&gt;');
+
 
 
// fix prefixes
 
// fix prefixes
 
regExp = new RegExp('(\\d+) *(\\(|' + realElements + pseudoElements + ')', 'g');
 
regExp = new RegExp('(\\d+) *(\\(|' + realElements + pseudoElements + ')', 'g');
 
obj.plain = obj.plain.replace(regExp, '$1$2');
 
obj.plain = obj.plain.replace(regExp, '$1$2');
+
 
 
// fix arrows
 
// fix arrows
 
obj.plain = obj.plain.replace(/ *-+&gt; *()/g, ' \u2192 ');
 
obj.plain = obj.plain.replace(/ *-+&gt; *()/g, ' \u2192 ');
 
obj.plain = obj.plain.replace(/ *&lt;-+ *()/g, ' \u2190 ');
 
obj.plain = obj.plain.replace(/ *&lt;-+ *()/g, ' \u2190 ');
+
 
 
// &hdarr; and "leftwards harpoon over rightwards harpoon" not supported in IE6
 
// &hdarr; and "leftwards harpoon over rightwards harpoon" not supported in IE6
 
// obj.plain = obj.plain.replace(/ *(&lt;=+&gt;|&hdarr;|&harr;|\u2190 *\u2192) *()/g, ' \u21cc ');
 
// obj.plain = obj.plain.replace(/ *(&lt;=+&gt;|&hdarr;|&harr;|\u2190 *\u2192) *()/g, ' \u21cc ');
 
obj.plain = obj.plain.replace(/ *(&lt;==+&gt;|&hdarr;|&harr;|\u21cc|\u2190 *\u2192) *()/g, ' <=> ');
 
obj.plain = obj.plain.replace(/ *(&lt;==+&gt;|&hdarr;|&harr;|\u21cc|\u2190 *\u2192) *()/g, ' <=> ');
+
 
 
// fix -
 
// fix -
 
obj.plain = obj.plain.replace(/([\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|\)|&gt;) +(-|\u2212) +([\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|\()/g, '$1 \u2212 $3');
 
obj.plain = obj.plain.replace(/([\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|\)|&gt;) +(-|\u2212) +([\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|\()/g, '$1 \u2212 $3');
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdFixUnits: unit formatter
 
// WikEdFixUnits: unit formatter
 
//
 
//
+
 
 
window.WikEdFixUnits = function(obj) {
 
window.WikEdFixUnits = function(obj) {
+
 
 
WikEdFixBasic(obj);
 
WikEdFixBasic(obj);
+
 
 
// convert into actual characters
 
// convert into actual characters
 
obj.plain = obj.plain.replace(/&amp;deg;|&amp;#00b0;/g, '°');
 
obj.plain = obj.plain.replace(/&amp;deg;|&amp;#00b0;/g, '°');
 
obj.plain = obj.plain.replace(/&amp;#00b5;|&amp;mu;|&amp;micro;/g, 'µ');
 
obj.plain = obj.plain.replace(/&amp;#00b5;|&amp;mu;|&amp;micro;/g, 'µ');
 
obj.plain = obj.plain.replace(/&amp;Omega;|&amp;#8486;/g, '\u03a9');
 
obj.plain = obj.plain.replace(/&amp;Omega;|&amp;#8486;/g, '\u03a9');
+
 
 
// add space before units, remove space around /, and use abreviations
 
// add space before units, remove space around /, and use abreviations
 
obj.plain = obj.plain.replace(/( *\/ *|\d *)(Y|yotta|Z|zetta|E|exa|P|peta|T|tera|G|giga|M|mega|k|kilo|K|h|hecto|da|deca|d|deci|c|centi|m|mill?i|micro|u|µ|n|nano|p|pico|f|femto|a|atto|z|zepto|y|yocto|mibi|mebi|)(gramm?s?|g|metres?|meters?|m|amperes?|Amperes?|amps?|Amps?|A|Angstroms?|Angströms?|Å|Kelvins?|kelvins?|K|moles?|Moles?|mol|candelas?|cd|rad|Ci|sr|Hert?z|hert?z|Hz|newtons?|Newtons?|N|Joules?|joules?|J|watts?|Watts?|W|pascals?|Pascals?|Pa|lm|lx|C|volts?|Volts?|V|O|Farads?|F|Wb|T|H|S|bequerels?|Bequerels?|Bq|Gy|Sv|kat|centigrades?|°C|decibels?|db|dB|M|ohms?|Ohms?|\u03a9|sec|seconds?|s|minutes?|min|hour?|h|bits?|Bits?|bit|bytes?|Bytes?|B|bps|Bps)(?=[^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|$)/g,
 
obj.plain = obj.plain.replace(/( *\/ *|\d *)(Y|yotta|Z|zetta|E|exa|P|peta|T|tera|G|giga|M|mega|k|kilo|K|h|hecto|da|deca|d|deci|c|centi|m|mill?i|micro|u|µ|n|nano|p|pico|f|femto|a|atto|z|zepto|y|yocto|mibi|mebi|)(gramm?s?|g|metres?|meters?|m|amperes?|Amperes?|amps?|Amps?|A|Angstroms?|Angströms?|Å|Kelvins?|kelvins?|K|moles?|Moles?|mol|candelas?|cd|rad|Ci|sr|Hert?z|hert?z|Hz|newtons?|Newtons?|N|Joules?|joules?|J|watts?|Watts?|W|pascals?|Pascals?|Pa|lm|lx|C|volts?|Volts?|V|O|Farads?|F|Wb|T|H|S|bequerels?|Bequerels?|Bq|Gy|Sv|kat|centigrades?|°C|decibels?|db|dB|M|ohms?|Ohms?|\u03a9|sec|seconds?|s|minutes?|min|hour?|h|bits?|Bits?|bit|bytes?|Bytes?|B|bps|Bps)(?=[^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|$)/g,
 
function (p, p1, p2, p3) {
 
function (p, p1, p2, p3) {
+
 
 
p1 = p1.replace(/ *\/ *()/g, '/');
 
p1 = p1.replace(/ *\/ *()/g, '/');
 
p1 = p1.replace(/(\d) *()/g, '$1 ');
 
p1 = p1.replace(/(\d) *()/g, '$1 ');
+
 
 
p2 = p2.replace(/yotta/g, 'Y');
 
p2 = p2.replace(/yotta/g, 'Y');
 
p2 = p2.replace(/zetta/g, 'Z');
 
p2 = p2.replace(/zetta/g, 'Z');
Γραμμή 5.090: Γραμμή 5.089:
 
p2 = p2.replace(/yocto/g, 'y');
 
p2 = p2.replace(/yocto/g, 'y');
 
p2 = p2.replace(/mibi/g, 'mebi');
 
p2 = p2.replace(/mibi/g, 'mebi');
+
 
 
p3 = p3.replace(/gramm?s?/g, 'g');
 
p3 = p3.replace(/gramm?s?/g, 'g');
 
p3 = p3.replace(/metres?|meters?/g, 'm');
 
p3 = p3.replace(/metres?|meters?/g, 'm');
Γραμμή 5.115: Γραμμή 5.114:
 
p3 = p3.replace(/bps/g, 'bit/s');
 
p3 = p3.replace(/bps/g, 'bit/s');
 
p3 = p3.replace(/Bps/g, 'B/s');
 
p3 = p3.replace(/Bps/g, 'B/s');
+
 
 
return(p1 + p2 + p3);
 
return(p1 + p2 + p3);
 
}
 
}
 
);
 
);
+
 
 
// fix prefix casing
 
// fix prefix casing
 
obj.plain = obj.plain.replace(/ K(bit\/s|B\/s)([^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|$)/g, ' k$1$2');
 
obj.plain = obj.plain.replace(/ K(bit\/s|B\/s)([^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|$)/g, ' k$1$2');
Γραμμή 5.126: Γραμμή 5.125:
 
obj.plain = obj.plain.replace(/ t(bit\/s|B\/s)([^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|$)/g, ' T$1$2');
 
obj.plain = obj.plain.replace(/ t(bit\/s|B\/s)([^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|$)/g, ' T$1$2');
 
obj.plain = obj.plain.replace(/ e(bit\/s|B\/s)([^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|$)/g, ' E$1$2');
 
obj.plain = obj.plain.replace(/ e(bit\/s|B\/s)([^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|$)/g, ' E$1$2');
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdFixDashes: fixes dashes and minus signs
 
// WikEdFixDashes: fixes dashes and minus signs
 
//
 
//
+
 
 
window.WikEdFixDashes = function(obj) {
 
window.WikEdFixDashes = function(obj) {
+
 
 
WikEdFixBasic(obj);
 
WikEdFixBasic(obj);
+
 
 
// convert html character entities into actual dash characters
 
// convert html character entities into actual dash characters
 
obj.plain = obj.plain.replace(/&amp;mdash;/g, '—');
 
obj.plain = obj.plain.replace(/&amp;mdash;/g, '—');
 
obj.plain = obj.plain.replace(/&amp;ndash;/g, '–');
 
obj.plain = obj.plain.replace(/&amp;ndash;/g, '–');
 
obj.plain = obj.plain.replace(/&amp;minus;/g, '\u2212');
 
obj.plain = obj.plain.replace(/&amp;minus;/g, '\u2212');
+
 
 
// remove spaces around em dashes
 
// remove spaces around em dashes
 
obj.plain = obj.plain.replace(/([a-zA-Z\'\"”\]\}\)])( |&amp;nbsp;)*—( |&amp;nbsp;)*([a-zA-Z\'\"“\[\{\(])/g, '$1—$4');
 
obj.plain = obj.plain.replace(/([a-zA-Z\'\"”\]\}\)])( |&amp;nbsp;)*—( |&amp;nbsp;)*([a-zA-Z\'\"“\[\{\(])/g, '$1—$4');
+
 
 
// convert -- to en dashes
 
// convert -- to en dashes
 
obj.plain = obj.plain.replace(/([a-zA-Z\'\"”\]\}\)])( |&amp;nbsp;)*--( |&amp;nbsp;)*([a-zA-Z\'\"“\[\{\(])/g, '$1 – $4');
 
obj.plain = obj.plain.replace(/([a-zA-Z\'\"”\]\}\)])( |&amp;nbsp;)*--( |&amp;nbsp;)*([a-zA-Z\'\"“\[\{\(])/g, '$1 – $4');
+
 
 
// convert hyphen next to lone number into a minus sign character
 
// convert hyphen next to lone number into a minus sign character
 
obj.plain = obj.plain.replace(/([a-zA-Z\'\"”\]\>] ) *(\u2212|–)(\d)/g, '$1\u2212$3');
 
obj.plain = obj.plain.replace(/([a-zA-Z\'\"”\]\>] ) *(\u2212|–)(\d)/g, '$1\u2212$3');
+
 
 
// convert minus or en dashes to dashes with spaces
 
// convert minus or en dashes to dashes with spaces
 
obj.plain = obj.plain.replace(/([a-zA-Z\'\"”\]\}])( |&amp;nbsp;)*(\u2212|–)( |&amp;nbsp;)*([a-zA-Z\'\"“\[\{])/g, '$1 – $5');
 
obj.plain = obj.plain.replace(/([a-zA-Z\'\"”\]\}])( |&amp;nbsp;)*(\u2212|–)( |&amp;nbsp;)*([a-zA-Z\'\"“\[\{])/g, '$1 – $5');
+
 
 
// convert dashes to en dashes in dates
 
// convert dashes to en dashes in dates
 
obj.plain = obj.plain.replace(/(^|[ \(\|])(\d\d(\d\d)?)(\u2212|-|–)(\d\d)(\u2212|-|–)(\d\d(\d\d)?)([ \)\}\|,.;—]|$)/gm, '$1$2–$5–$7$9');
 
obj.plain = obj.plain.replace(/(^|[ \(\|])(\d\d(\d\d)?)(\u2212|-|–)(\d\d)(\u2212|-|–)(\d\d(\d\d)?)([ \)\}\|,.;—]|$)/gm, '$1$2–$5–$7$9');
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdFixHTML: fix html to wikicode
 
// WikEdFixHTML: fix html to wikicode
 
//
 
//
+
 
 
window.WikEdFixHTML = function(obj) {
 
window.WikEdFixHTML = function(obj) {
+
 
 
WikEdFixBasic(obj);
 
WikEdFixBasic(obj);
+
 
 
// remove syntax highlighting
 
// remove syntax highlighting
 
obj.html = obj.plain;
 
obj.html = obj.plain;
 
obj.html = obj.html.replace(/\n/g, '<br />');
 
obj.html = obj.html.replace(/\n/g, '<br />');
 
WikEdRemoveHighlighting(obj);
 
WikEdRemoveHighlighting(obj);
+
 
 
// turn visible html code into real html, exclude comments
 
// turn visible html code into real html, exclude comments
 
obj.html = obj.html.replace(/&lt;(\/?\w.*?)&gt;/g, '<$1>');
 
obj.html = obj.html.replace(/&lt;(\/?\w.*?)&gt;/g, '<$1>');
+
 
 
// wikify, keep user added attribute
 
// wikify, keep user added attribute
 
WikEdWikifyHTML(obj, true);
 
WikEdWikifyHTML(obj, true);
+
 
 
// turn real html into visible html code
 
// turn real html into visible html code
 
obj.html = obj.html.replace(/<br\b[^>]*>[\n ]*()/g, '\n');
 
obj.html = obj.html.replace(/<br\b[^>]*>[\n ]*()/g, '\n');
Γραμμή 5.187: Γραμμή 5.186:
 
obj.html = obj.html.replace(/>/g, '&gt;');
 
obj.html = obj.html.replace(/>/g, '&gt;');
 
obj.plain = obj.html;
 
obj.plain = obj.html;
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdFixCaps: fix capitalizing of lists, linklists, images, headings
 
// WikEdFixCaps: fix capitalizing of lists, linklists, images, headings
 
//
 
//
+
 
 
window.WikEdFixCaps = function(obj) {
 
window.WikEdFixCaps = function(obj) {
+
 
 
WikEdFixBasic(obj);
 
WikEdFixBasic(obj);
+
 
 
// uppercase lists
 
// uppercase lists
 
// start (listcode (char-ent|tag|category..|digit|non-word,non-ret))(word,non-digit..) end
 
// start (listcode (char-ent|tag|category..|digit|non-word,non-ret))(word,non-digit..) end
Γραμμή 5.210: Γραμμή 5.209:
 
}
 
}
 
);
 
);
+
 
 
// uppercase link lists (link)
 
// uppercase link lists (link)
 
obj.plain = obj.plain.replace(/^([\*\#\:\;]+ \[\[)([^\n]*?)(\]\])/gm,
 
obj.plain = obj.plain.replace(/^([\*\#\:\;]+ \[\[)([^\n]*?)(\]\])/gm,
 
function (p, p1, p2, p3) {
 
function (p, p1, p2, p3) {
+
 
 
// uppercase link
 
// uppercase link
 
p2 = p2.replace(/^((\&\w+\;|[^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|\d)*)([a-zA-ZÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9_].*)$/,
 
p2 = p2.replace(/^((\&\w+\;|[^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|\d)*)([a-zA-ZÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9_].*)$/,
Γραμμή 5.224: Γραμμή 5.223:
 
}
 
}
 
);
 
);
+
 
 
// uppercase comment
 
// uppercase comment
 
p2 = p2.replace(/(\| *(\&\w+\;|&lt;[^\n]*?&gt;|[^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|\d)*)([a-zA-ZÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9_].*)$/,
 
p2 = p2.replace(/(\| *(\&\w+\;|&lt;[^\n]*?&gt;|[^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|\d)*)([a-zA-ZÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9_].*)$/,
Γραμμή 5.237: Γραμμή 5.236:
 
}
 
}
 
);
 
);
+
 
 
// uppercase headings
 
// uppercase headings
 
obj.plain = obj.plain.replace(/^(=+ (\&\w+\;|&lt;[^\n]*?&gt;|\d|[^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9\n])*)([a-zA-ZÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9_].*? =+)$/gm,
 
obj.plain = obj.plain.replace(/^(=+ (\&\w+\;|&lt;[^\n]*?&gt;|\d|[^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9\n])*)([a-zA-ZÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9_].*? =+)$/gm,
Γραμμή 5.247: Γραμμή 5.246:
 
}
 
}
 
);
 
);
+
 
 
// uppercase images
 
// uppercase images
 
regExp = new RegExp('(\\[\\[)' + wikEdText['wikicode Image'] + ':([\\wÀ-ÖØ-öø-\\u0220\\u0222-\\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\\u0400-\\u0481\\u048a-\\u04ce\\u04d0-\\u04f5\\u04f8\\u04f9])([^\\n]*\\]\\])', 'igm');
 
regExp = new RegExp('(\\[\\[)' + wikEdText['wikicode Image'] + ':([\\wÀ-ÖØ-öø-\\u0220\\u0222-\\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\\u0400-\\u0481\\u048a-\\u04ce\\u04d0-\\u04f5\\u04f8\\u04f9])([^\\n]*\\]\\])', 'igm');
Γραμμή 5.255: Γραμμή 5.254:
 
}
 
}
 
);
 
);
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdFixTypos: fix typos using the AutoWikiBrowser/RegExTypoFix list (.test() is not faster)
 
// WikEdFixTypos: fix typos using the AutoWikiBrowser/RegExTypoFix list (.test() is not faster)
 
//
 
//
+
 
 
window.WikEdFixTypos = function(obj) {
 
window.WikEdFixTypos = function(obj) {
+
 
 
WikEdFixBasic(obj);
 
WikEdFixBasic(obj);
+
 
 
// split into alternating plain text and {{lang}} template fragments (does not support nested templates)
 
// split into alternating plain text and {{lang}} template fragments (does not support nested templates)
 
var fragment = [];
 
var fragment = [];
Γραμμή 5.278: Γραμμή 5.277:
 
}
 
}
 
fragment.push(obj.plain.substring(nextPos));
 
fragment.push(obj.plain.substring(nextPos));
+
 
 
// cycle through the RegExTypoFix rules
 
// cycle through the RegExTypoFix rules
 
for (var i = 0; i < wikEdTypoRulesFind.length; i ++) {
 
for (var i = 0; i < wikEdTypoRulesFind.length; i ++) {
+
 
 
// cycle through the fragments, jump over {{lang}} templates
 
// cycle through the fragments, jump over {{lang}} templates
 
for (var j = 0; j < fragment.length; j = j + 2) {
 
for (var j = 0; j < fragment.length; j = j + 2) {
Γραμμή 5.287: Γραμμή 5.286:
 
}
 
}
 
}
 
}
+
 
 
// re-assemble text
 
// re-assemble text
 
obj.plain = fragment.join('');
 
obj.plain = fragment.join('');
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdFixAll:
 
// WikEdFixAll:
 
//
 
//
+
 
 
window.WikEdFixAll = function(obj) {
 
window.WikEdFixAll = function(obj) {
 
WikEdFixBasic(obj);
 
WikEdFixBasic(obj);
Γραμμή 5.306: Γραμμή 5.305:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdRemoveElements: remove elements by tag name
 
// WikEdRemoveElements: remove elements by tag name
 
//
 
//
+
 
 
window.WikEdRemoveElements = function(tagNameArray) {
 
window.WikEdRemoveElements = function(tagNameArray) {
+
 
 
// cycle through the element names
 
// cycle through the element names
 
for (var property in tagNameArray) {
 
for (var property in tagNameArray) {
Γραμμή 5.326: Γραμμή 5.325:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdFindBoundaries: find word boundaries and line boundaries starting from selection.range
 
// WikEdFindBoundaries: find word boundaries and line boundaries starting from selection.range
 
//
 
//
+
 
 
window.WikEdFindBoundaries = function(word, line, whole, selection) {
 
window.WikEdFindBoundaries = function(word, line, whole, selection) {
+
 
 
// get the start node and offset
 
// get the start node and offset
 
var startNode = selection.range.startContainer;
 
var startNode = selection.range.startContainer;
 
var startNodeOffset = selection.range.startOffset;
 
var startNodeOffset = selection.range.startOffset;
+
 
 
// get the end node and offset
 
// get the end node and offset
 
var endNode = selection.range.endContainer;
 
var endNode = selection.range.endContainer;
 
var endNodeOffset = selection.range.endOffset;
 
var endNodeOffset = selection.range.endOffset;
+
 
 
if (startNode.nodeType == 1) {
 
if (startNode.nodeType == 1) {
 
startNode = startNode.childNodes[startNodeOffset];
 
startNode = startNode.childNodes[startNodeOffset];
Γραμμή 5.350: Γραμμή 5.349:
 
endNodeOffset = 0;
 
endNodeOffset = 0;
 
}
 
}
+
 
 
// find the start and end nodes in the whole plain text arrays
 
// find the start and end nodes in the whole plain text arrays
 
var startNodeIndex;
 
var startNodeIndex;
Γραμμή 5.363: Γραμμή 5.362:
 
}
 
}
 
}
 
}
+
 
 
// find last previous word and line boundary
 
// find last previous word and line boundary
 
var foundWord = false;
 
var foundWord = false;
Γραμμή 5.369: Γραμμή 5.368:
 
var regExp = new RegExp('.*[^\\wÀ-ÖØ-öø-\\u0220\\u0222-\\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\\u0400-\\u0481\\u048a-\\u04ce\\u04d0-\\u04f5\\u04f8\\u04f9\\-]', 'g');
 
var regExp = new RegExp('.*[^\\wÀ-ÖØ-öø-\\u0220\\u0222-\\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\\u0400-\\u0481\\u048a-\\u04ce\\u04d0-\\u04f5\\u04f8\\u04f9\\-]', 'g');
 
var plain = '';
 
var plain = '';
+
 
 
// check text nodes left-wise for a boundary
 
// check text nodes left-wise for a boundary
 
for (var i = startNodeIndex; i >= 0; i --) {
 
for (var i = startNodeIndex; i >= 0; i --) {
 
plain = whole.plainArray[i];
 
plain = whole.plainArray[i];
+
 
 
plain = plain.replace(/&amp;/g, '&');
 
plain = plain.replace(/&amp;/g, '&');
 
plain = plain.replace(/&lt;/g, '<');
 
plain = plain.replace(/&lt;/g, '<');
 
plain = plain.replace(/&gt;/g, '>');
 
plain = plain.replace(/&gt;/g, '>');
+
 
 
// boundary is a newline
 
// boundary is a newline
 
if (plain == '\n') {
 
if (plain == '\n') {
+
 
 
// current newline is the start node
 
// current newline is the start node
 
if (i == startNodeIndex) {
 
if (i == startNodeIndex) {
Γραμμή 5.399: Γραμμή 5.398:
 
break;
 
break;
 
}
 
}
+
 
 
// check text node for a word boundary
 
// check text node for a word boundary
 
else if (! foundWord) {
 
else if (! foundWord) {
 
if (i == startNodeIndex) {
 
if (i == startNodeIndex) {
 
plain = plain.substr(0, startNodeOffset);
 
plain = plain.substr(0, startNodeOffset);
+
 
 
plain = plain.replace(/&amp;/g, '&');
 
plain = plain.replace(/&amp;/g, '&');
 
plain = plain.replace(/&lt;/g, '<');
 
plain = plain.replace(/&lt;/g, '<');
Γραμμή 5.416: Γραμμή 5.415:
 
}
 
}
 
}
 
}
+
 
 
// boundary is start of text
 
// boundary is start of text
 
if (! foundLine) {
 
if (! foundLine) {
Γραμμή 5.424: Γραμμή 5.423:
 
}
 
}
 
}
 
}
+
 
 
// find next word and line boundary
 
// find next word and line boundary
 
regExp = new RegExp('[^\\wÀ-ÖØ-öø-\\u0220\\u0222-\\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\\u0400-\\u0481\\u048a-\\u04ce\\u04d0-\\u04f5\\u04f8\\u04f9\\-]', 'g');
 
regExp = new RegExp('[^\\wÀ-ÖØ-öø-\\u0220\\u0222-\\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\\u0400-\\u0481\\u048a-\\u04ce\\u04d0-\\u04f5\\u04f8\\u04f9\\-]', 'g');
 
foundWord = false;
 
foundWord = false;
 
foundLine = false;
 
foundLine = false;
+
 
 
// check text nodes right-wise for a boundary
 
// check text nodes right-wise for a boundary
 
for (var i = endNodeIndex; i < whole.plainArray.length; i ++) {
 
for (var i = endNodeIndex; i < whole.plainArray.length; i ++) {
 
plain = whole.plainArray[i];
 
plain = whole.plainArray[i];
+
 
 
plain = plain.replace(/&amp;/g, '&');
 
plain = plain.replace(/&amp;/g, '&');
 
plain = plain.replace(/&lt;/g, '<');
 
plain = plain.replace(/&lt;/g, '<');
 
plain = plain.replace(/&gt;/g, '>');
 
plain = plain.replace(/&gt;/g, '>');
+
 
 
// boundary is a newline
 
// boundary is a newline
 
if (plain == '\n') {
 
if (plain == '\n') {
Γραμμή 5.448: Γραμμή 5.447:
 
break;
 
break;
 
}
 
}
+
 
 
// check text node for a word boundary
 
// check text node for a word boundary
 
else if (! foundWord) {
 
else if (! foundWord) {
Γραμμή 5.464: Γραμμή 5.463:
 
}
 
}
 
}
 
}
+
 
 
// boundary is end of text
 
// boundary is end of text
 
if (! foundLine) {
 
if (! foundLine) {
Γραμμή 5.474: Γραμμή 5.473:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// remove syntax highlighting and wikify
 
// remove syntax highlighting and wikify
 
//
 
//
+
 
 
window.WikEdRemoveHighlightingWikify = function(obj, noWikify) {
 
window.WikEdRemoveHighlightingWikify = function(obj, noWikify) {
+
 
 
if (obj.html != '') {
 
if (obj.html != '') {
+
 
 
// remove syntax highlighting
 
// remove syntax highlighting
 
WikEdRemoveHighlighting(obj);
 
WikEdRemoveHighlighting(obj);
+
 
 
// wikify, don't allow many attributes
 
// wikify, don't allow many attributes
 
if ( (obj.htmlCode == true) && (noWikify != true) ) {
 
if ( (obj.htmlCode == true) && (noWikify != true) ) {
Γραμμή 5.494: Γραμμή 5.493:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdWikifyHTML:
 
// WikEdWikifyHTML:
Γραμμή 5.501: Γραμμή 5.500:
 
//  expects < > &lt; &gt; &amp;  spaces instead of &nbsp; <br> (not \n)
 
//  expects < > &lt; &gt; &amp;  spaces instead of &nbsp; <br> (not \n)
 
//  returns <br> (not \n)
 
//  returns <br> (not \n)
+
 
 
/*
 
/*
 
allowed and converted tags:
 
allowed and converted tags:
Γραμμή 5.519: Γραμμή 5.518:
 
nowiki|math|gallery|noinclude|includeonly|ref|references
 
nowiki|math|gallery|noinclude|includeonly|ref|references
 
*/
 
*/
+
 
 
window.WikEdWikifyHTML = function(obj, relaxed) {
 
window.WikEdWikifyHTML = function(obj, relaxed) {
+
 
 
var regExpStr;
 
var regExpStr;
 
var regExp;
 
var regExp;
 
var regExpMatch;
 
var regExpMatch;
+
 
 
// delete tags: <style>
 
// delete tags: <style>
 
obj.html = obj.html.replace(/<(style)\b[^>]*>.*?<\/\1>/g, '');
 
obj.html = obj.html.replace(/<(style)\b[^>]*>.*?<\/\1>/g, '');
+
 
 
// remove MediaWiki section edit spans
 
// remove MediaWiki section edit spans
 
obj.html = obj.html.replace(/<span[^>]*class=\"editsection\"[^>]*>.*?<\/span>\s*()/g, '');
 
obj.html = obj.html.replace(/<span[^>]*class=\"editsection\"[^>]*>.*?<\/span>\s*()/g, '');
+
 
 
// remove MediaWiki heading spans
 
// remove MediaWiki heading spans
 
obj.html = obj.html.replace(/<span\b[^>]*\bclass=\"mw-headline\"[^>]*>(.*?)<\/span>\s*()/g, '$1');
 
obj.html = obj.html.replace(/<span\b[^>]*\bclass=\"mw-headline\"[^>]*>(.*?)<\/span>\s*()/g, '$1');
+
 
 
// remove MediaWiki divs from article top
 
// remove MediaWiki divs from article top
 
obj.html = obj.html.replace(/<h3\b[^>]*\bid=\"siteSub\"[^>]*>.*?<\/h3>\s*()/g, '');
 
obj.html = obj.html.replace(/<h3\b[^>]*\bid=\"siteSub\"[^>]*>.*?<\/h3>\s*()/g, '');
 
obj.html = obj.html.replace(/<div\b[^>]*\bid=\"contentSub\"[^>]*>.*?<\/div>\s*()/g, '');
 
obj.html = obj.html.replace(/<div\b[^>]*\bid=\"contentSub\"[^>]*>.*?<\/div>\s*()/g, '');
 
obj.html = obj.html.replace(/<div\b[^>]*\bid=\"jump-to-nav\"[^>]*>.*?<\/div>\s*()/g, '');
 
obj.html = obj.html.replace(/<div\b[^>]*\bid=\"jump-to-nav\"[^>]*>.*?<\/div>\s*()/g, '');
+
 
 
// remove MediaWiki table of contents
 
// remove MediaWiki table of contents
 
obj.html = obj.html.replace(/<table\b[^>]*?\bid=\"toc\"[^>]*>.*?<\/table>\s*()/g, '');
 
obj.html = obj.html.replace(/<table\b[^>]*?\bid=\"toc\"[^>]*>.*?<\/table>\s*()/g, '');
+
 
 
// remove MediaWiki print footer
 
// remove MediaWiki print footer
 
obj.html = obj.html.replace(/<div\b[^>]*?\bclass=\"printfooter\"[^>]*>[^<>\"]+\"<a\b[^>]*>[^<]+<\/a>\"<\/div>\s*()/g, '');
 
obj.html = obj.html.replace(/<div\b[^>]*?\bclass=\"printfooter\"[^>]*>[^<>\"]+\"<a\b[^>]*>[^<]+<\/a>\"<\/div>\s*()/g, '');
+
 
 
// remove MediaWiki category list tags
 
// remove MediaWiki category list tags
 
regExp = /<div\b[^>]*\bid=\"catlinks\"[^>]*>(.*?)<\/div>\s*()/g;
 
regExp = /<div\b[^>]*\bid=\"catlinks\"[^>]*>(.*?)<\/div>\s*()/g;
Γραμμή 5.555: Γραμμή 5.554:
 
obj.html = obj.html.replace(regExp, '$1$2');
 
obj.html = obj.html.replace(regExp, '$1$2');
 
}
 
}
+
 
 
// convert MS-Word non-standard lists: *
 
// convert MS-Word non-standard lists: *
 
obj.html = obj.html.replace(/\s*<p [^>]*>\s*<!--\[if !supportLists\]-->.*?<!--\[endif\]-->\s*(.*?)\s*<\/p>\s*()/g, '* $1\n');
 
obj.html = obj.html.replace(/\s*<p [^>]*>\s*<!--\[if !supportLists\]-->.*?<!--\[endif\]-->\s*(.*?)\s*<\/p>\s*()/g, '* $1\n');
+
 
 
// sanitize <span> <div> <p>
 
// sanitize <span> <div> <p>
 
obj.html = obj.html.replace(/<(span|div|p)\b *(.*?) *\/?>/g,
 
obj.html = obj.html.replace(/<(span|div|p)\b *(.*?) *\/?>/g,
Γραμμή 5.565: Γραμμή 5.564:
 
}
 
}
 
);
 
);
+
 
 
// remove <span> ... </span> pairs withhout attributes
 
// remove <span> ... </span> pairs withhout attributes
 
var isRemove = [];
 
var isRemove = [];
Γραμμή 5.584: Γραμμή 5.583:
 
}
 
}
 
);
 
);
+
 
 
// remove <p> ... </p> pairs withhout attributes
 
// remove <p> ... </p> pairs withhout attributes
 
var isRemove = [];
 
var isRemove = [];
Γραμμή 5.603: Γραμμή 5.602:
 
}
 
}
 
);
 
);
+
 
 
// escape character entities
 
// escape character entities
 
obj.html = obj.html.replace(/&(?!(amp;|lt;|gt;))/g, '&amp;');
 
obj.html = obj.html.replace(/&(?!(amp;|lt;|gt;))/g, '&amp;');
+
 
 
// remove comments
 
// remove comments
 
obj.html = obj.html.replace(/<!--.*?-->/g, '');
 
obj.html = obj.html.replace(/<!--.*?-->/g, '');
+
 
 
// <hr> horizontal rule
 
// <hr> horizontal rule
 
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<hr\b[^>]*>(\s|<br\b[^>]*>|\u0000)*()/i, '\u0000\u0000----\u0000\u0000');
 
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<hr\b[^>]*>(\s|<br\b[^>]*>|\u0000)*()/i, '\u0000\u0000----\u0000\u0000');
+
 
 
// <i> <em> <dfn> <var> <cite> italic
 
// <i> <em> <dfn> <var> <cite> italic
 
obj.html = obj.html.replace(/<(i|em|dfn|var|cite)\b[^>]*>/g, '\'\'');
 
obj.html = obj.html.replace(/<(i|em|dfn|var|cite)\b[^>]*>/g, '\'\'');
 
obj.html = obj.html.replace(/<\/(i|em|dfn|var|cite)\b[^>]*>/g, '\'\'');
 
obj.html = obj.html.replace(/<\/(i|em|dfn|var|cite)\b[^>]*>/g, '\'\'');
+
 
 
// <b> <strong> bold
 
// <b> <strong> bold
 
obj.html = obj.html.replace(/<(b|strong)\b[^>]*>/g, '\'\'\'');
 
obj.html = obj.html.replace(/<(b|strong)\b[^>]*>/g, '\'\'\'');
 
obj.html = obj.html.replace(/<\/(b|strong)\b[^>]*>/g, '\'\'\'');
 
obj.html = obj.html.replace(/<\/(b|strong)\b[^>]*>/g, '\'\'\'');
+
 
 
// <h1> .. <h6> headings
 
// <h1> .. <h6> headings
 
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*(^|\n|<br\b[^>]*>|\u0000)(\s|<br\b[^>]*>|\u0000)*<h1\b[^>]*>(.*?)<\/h1>(\s|<br\b[^>]*>|\u0000)*()/g, '\u0000\u0000= $4 =\u0000\u0000');
 
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*(^|\n|<br\b[^>]*>|\u0000)(\s|<br\b[^>]*>|\u0000)*<h1\b[^>]*>(.*?)<\/h1>(\s|<br\b[^>]*>|\u0000)*()/g, '\u0000\u0000= $4 =\u0000\u0000');
Γραμμή 5.628: Γραμμή 5.627:
 
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*(^|\n|<br\b[^>]*>|\u0000)(\s|<br\b[^>]*>|\u0000)*<h5\b[^>]*>(.*?)<\/h5>(\s|<br\b[^>]*>|\u0000)*()/g, '\u0000\u0000===== $4 =====\u0000\u0000');
 
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*(^|\n|<br\b[^>]*>|\u0000)(\s|<br\b[^>]*>|\u0000)*<h5\b[^>]*>(.*?)<\/h5>(\s|<br\b[^>]*>|\u0000)*()/g, '\u0000\u0000===== $4 =====\u0000\u0000');
 
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*(^|\n|<br\b[^>]*>|\u0000)(\s|<br\b[^>]*>|\u0000)*<h6\b[^>]*>(.*?)<\/h6>(\s|<br\b[^>]*>|\u0000)*()/g, '\u0000\u0000====== $4 ======\u0000\u0000');
 
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*(^|\n|<br\b[^>]*>|\u0000)(\s|<br\b[^>]*>|\u0000)*<h6\b[^>]*>(.*?)<\/h6>(\s|<br\b[^>]*>|\u0000)*()/g, '\u0000\u0000====== $4 ======\u0000\u0000');
+
 
 
obj.html = obj.html.replace(/<(h[0-6])\b[^>]*>(.*?)<\/\1>/g, '$2');
 
obj.html = obj.html.replace(/<(h[0-6])\b[^>]*>(.*?)<\/\1>/g, '$2');
+
 
 
// remove <thead> <tbody> <tfoot>
 
// remove <thead> <tbody> <tfoot>
 
obj.html = obj.html.replace(/(\s|\u0000|<br\b[^>]*>)<\/?(thead|tbody|tfoot)\b[^>]*>(\s|\u0000|<br\b[^>]*>)*()/g, '$1');
 
obj.html = obj.html.replace(/(\s|\u0000|<br\b[^>]*>)<\/?(thead|tbody|tfoot)\b[^>]*>(\s|\u0000|<br\b[^>]*>)*()/g, '$1');
+
 
 
// remove <col></col> and <colgroup></colgroup>\s
 
// remove <col></col> and <colgroup></colgroup>\s
 
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<(col)\b[^>]*>.*?<\/\2>(|<br\b[^>]*>|\u0000)*()/g, '');
 
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<(col)\b[^>]*>.*?<\/\2>(|<br\b[^>]*>|\u0000)*()/g, '');
 
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<(colgroup)\b[^>]*>.*?<\/\2>(|<br\b[^>]*>|\u0000)*()/g, '');
 
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<(colgroup)\b[^>]*>.*?<\/\2>(|<br\b[^>]*>|\u0000)*()/g, '');
+
 
 
// line breaks in table cells
 
// line breaks in table cells
 
obj.html = obj.html.replace(/(<(td|th|caption)\b[^>]*>)(.*?)(<\/\2>)/g,
 
obj.html = obj.html.replace(/(<(td|th|caption)\b[^>]*>)(.*?)(<\/\2>)/g,
Γραμμή 5.647: Γραμμή 5.646:
 
}
 
}
 
);
 
);
+
 
 
// remove table closing tags
 
// remove table closing tags
 
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<\/(tr|thead|tbody|tfoot)>(\s|<br\b[^>]*>|\u0000)*()/g, '');
 
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<\/(tr|thead|tbody|tfoot)>(\s|<br\b[^>]*>|\u0000)*()/g, '');
+
 
 
// <td> table cells
 
// <td> table cells
 
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<td>(\s|<br\b[^>]*>|\u0000)*()/g, '\u0000| ');
 
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<td>(\s|<br\b[^>]*>|\u0000)*()/g, '\u0000| ');
Γραμμή 5.664: Γραμμή 5.663:
 
}
 
}
 
);
 
);
+
 
 
// <th> table cells
 
// <th> table cells
 
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<th>(\s|<br\b[^>]*>|\u0000)*()/g, '\u0000| ');
 
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<th>(\s|<br\b[^>]*>|\u0000)*()/g, '\u0000| ');
Γραμμή 5.678: Γραμμή 5.677:
 
}
 
}
 
);
 
);
+
 
 
// <tr> table rows
 
// <tr> table rows
 
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<tr>(\s|<br\b[^>]*>|\u0000)*()/g, '\u0000|-\u0000');
 
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<tr>(\s|<br\b[^>]*>|\u0000)*()/g, '\u0000|-\u0000');
Γραμμή 5.686: Γραμμή 5.685:
 
}
 
}
 
);
 
);
+
 
 
// <caption> table caption
 
// <caption> table caption
 
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<caption>(\s|<br\b[^>]*>|\u0000)*()/g, '\u0000|+ ');
 
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<caption>(\s|<br\b[^>]*>|\u0000)*()/g, '\u0000|+ ');
Γραμμή 5.700: Γραμμή 5.699:
 
}
 
}
 
);
 
);
+
 
 
// remove closing tags
 
// remove closing tags
 
obj.html = obj.html.replace(/\s*<\/(td|th|caption)>\s*()/g, '');
 
obj.html = obj.html.replace(/\s*<\/(td|th|caption)>\s*()/g, '');
+
 
 
// line breaks, also in table cells (continued)
 
// line breaks, also in table cells (continued)
 
obj.html = obj.html.replace(/<br\b[^>]*>[\n ]*()/g, '\u0000');
 
obj.html = obj.html.replace(/<br\b[^>]*>[\n ]*()/g, '\u0000');
+
 
 
// <table>
 
// <table>
 
obj.html = obj.html.replace(/[\s\u0000]*<table>[\s\u0000]*(\|-(?=[\n\u0000]))?/g, '\u0000\u0000{|\u0000');
 
obj.html = obj.html.replace(/[\s\u0000]*<table>[\s\u0000]*(\|-(?=[\n\u0000]))?/g, '\u0000\u0000{|\u0000');
Γραμμή 5.722: Γραμμή 5.721:
 
);
 
);
 
obj.html = obj.html.replace(/[\s\u0000]*<\/table>[\s\u0000]*()/g, '\u0000|}\u0000\u0000');
 
obj.html = obj.html.replace(/[\s\u0000]*<\/table>[\s\u0000]*()/g, '\u0000|}\u0000\u0000');
+
 
 
// convert links
 
// convert links
 
var regExpMatch = [];
 
var regExpMatch = [];
Γραμμή 5.737: Γραμμή 5.736:
 
var imgWidth = '';
 
var imgWidth = '';
 
var paramLink = false;
 
var paramLink = false;
+
 
 
// check if it is a wiki article link, get path article name and url parameters
 
// check if it is a wiki article link, get path article name and url parameters
 
regExpStr = ' href=\\"(' + wikEdServer + '|\\.|(\\.\\.\/)*\\.\\.)(' + wikEdArticlePath + '([^\\"\\?]+)|' + wikEdScriptPath + 'index\\.php)(\\?([^\\"]*))?(\\"|#)';
 
regExpStr = ' href=\\"(' + wikEdServer + '|\\.|(\\.\\.\/)*\\.\\.)(' + wikEdArticlePath + '([^\\"\\?]+)|' + wikEdScriptPath + 'index\\.php)(\\?([^\\"]*))?(\\"|#)';
Γραμμή 5.747: Γραμμή 5.746:
 
pathArticle = regExpMatch[4];
 
pathArticle = regExpMatch[4];
 
}
 
}
+
 
 
// check for links with special parameters, not title, action=edit, isbn
 
// check for links with special parameters, not title, action=edit, isbn
 
regExp = new RegExp('(\\?|&amp;)(\\w+)=([^\\"\\&]+)', 'g');
 
regExp = new RegExp('(\\?|&amp;)(\\w+)=([^\\"\\&]+)', 'g');
Γραμμή 5.757: Γραμμή 5.756:
 
}
 
}
 
}
 
}
+
 
 
// get article name from path: /article
 
// get article name from path: /article
 
if (paramLink != true) {
 
if (paramLink != true) {
Γραμμή 5.765: Γραμμή 5.764:
 
linkArticle = decodeURIComponent(linkArticle);
 
linkArticle = decodeURIComponent(linkArticle);
 
}
 
}
+
 
 
// get article name from title="" html parameter
 
// get article name from title="" html parameter
 
else {
 
else {
Γραμμή 5.772: Γραμμή 5.771:
 
linkArticle = regExpMatch[1];
 
linkArticle = regExpMatch[1];
 
}
 
}
+
 
 
// get article name from title= url parameter
 
// get article name from title= url parameter
 
else if (urlPar != '') {
 
else if (urlPar != '') {
Γραμμή 5.780: Γραμμή 5.779:
 
linkArticle = linkArticle.replace(/_/g, ' ');
 
linkArticle = linkArticle.replace(/_/g, ' ');
 
linkArticle = decodeURIComponent(linkArticle);
 
linkArticle = decodeURIComponent(linkArticle);
+
 
 
// ISBN links
 
// ISBN links
 
regExpMatch = /(^|&amp;)isbn=(\\d+)/.exec(urlPar);
 
regExpMatch = /(^|&amp;)isbn=(\\d+)/.exec(urlPar);
Γραμμή 5.795: Γραμμή 5.794:
 
}
 
}
 
}
 
}
+
 
 
// format wiki link
 
// format wiki link
 
if (linkArticle != '') {
 
if (linkArticle != '') {
+
 
 
// check for wiki image
 
// check for wiki image
 
regExpStr = '^<img\\b[^>]*?\\bwidth=\\"(\\d+)\\"[^>]*?>$';
 
regExpStr = '^<img\\b[^>]*?\\bwidth=\\"(\\d+)\\"[^>]*?>$';
Γραμμή 5.814: Γραμμή 5.813:
 
}
 
}
 
}
 
}
+
 
 
// category link
 
// category link
 
var regExp = new RegExp('^' + wikEdText['wikicode Category'] + ':(.*)','i');
 
var regExp = new RegExp('^' + wikEdText['wikicode Category'] + ':(.*)','i');
Γραμμή 5.821: Γραμμή 5.820:
 
return('[[' + wikEdText['wikicode Category'] + ':' + regExpMatch[1].substr(0, 1).toUpperCase() + linkText.substr(1) + ']]');
 
return('[[' + wikEdText['wikicode Category'] + ':' + regExpMatch[1].substr(0, 1).toUpperCase() + linkText.substr(1) + ']]');
 
}
 
}
+
 
 
// wiki link
 
// wiki link
 
if (linkArticle == linkText.substr(0, 1).toUpperCase() + linkText.substr(1)) {
 
if (linkArticle == linkText.substr(0, 1).toUpperCase() + linkText.substr(1)) {
 
return('[[' + linkText + ']]');
 
return('[[' + linkText + ']]');
 
}
 
}
+
 
 
// date link (English only)
 
// date link (English only)
 
regExpMatch = /^(January|February|March|April|May|June|July|August|September|October|November|December) (\d{1,2})$/.exec(linkArticle);
 
regExpMatch = /^(January|February|March|April|May|June|July|August|September|October|November|December) (\d{1,2})$/.exec(linkArticle);
Γραμμή 5.836: Γραμμή 5.835:
 
}
 
}
 
}
 
}
+
 
 
// lowercase the article name if the first char of the link text can exist in lower/uppercase and is lowercase
 
// lowercase the article name if the first char of the link text can exist in lower/uppercase and is lowercase
 
if ( linkText.substr(0, 1).toLowerCase() != linkText.substr(0, 1).toUpperCase() ) {
 
if ( linkText.substr(0, 1).toLowerCase() != linkText.substr(0, 1).toUpperCase() ) {
Γραμμή 5.843: Γραμμή 5.842:
 
}
 
}
 
}
 
}
+
 
 
// suffix links
 
// suffix links
 
regExpStr = '^' + linkArticle.replace(/(\W)/g, '\\$1') + '([\\wÀ-ÖØ-öø-\\u0220\\u0222-\\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\\u0400-\\u0481\\u048a-\\u04ce\\u04d0-\\u04f5\\u04f8\\u04f9]+)$';
 
regExpStr = '^' + linkArticle.replace(/(\W)/g, '\\$1') + '([\\wÀ-ÖØ-öø-\\u0220\\u0222-\\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\\u0400-\\u0481\\u048a-\\u04ce\\u04d0-\\u04f5\\u04f8\\u04f9]+)$';
Γραμμή 5.853: Γραμμή 5.852:
 
return('[[' + linkArticle + '|' + linkText + ']]');
 
return('[[' + linkArticle + '|' + linkText + ']]');
 
}
 
}
+
 
 
// external link
 
// external link
 
regExpMatch = linkPar.match(/ href=\"([^\">]*)\"/);
 
regExpMatch = linkPar.match(/ href=\"([^\">]*)\"/);
Γραμμή 5.859: Γραμμή 5.858:
 
var linkAddr = regExpMatch[1];
 
var linkAddr = regExpMatch[1];
 
if (linkAddr != '') {
 
if (linkAddr != '') {
+
 
 
// PubMed link
 
// PubMed link
 
regExpMatch = /^http:\/\/www\.ncbi\.nlm\.nih\.gov\/entrez\/query\.fcgi\?cmd=Retrieve&amp;db=pubmed&amp;.*?&amp;list_uids=(\d+)/.exec(linkAddr);
 
regExpMatch = /^http:\/\/www\.ncbi\.nlm\.nih\.gov\/entrez\/query\.fcgi\?cmd=Retrieve&amp;db=pubmed&amp;.*?&amp;list_uids=(\d+)/.exec(linkAddr);
Γραμμή 5.865: Γραμμή 5.864:
 
return('PMID ' + regExpMatch[1]);
 
return('PMID ' + regExpMatch[1]);
 
}
 
}
+
 
 
// DOI link
 
// DOI link
 
regExpMatch = /^http:\/\/dx\.doi\.org\/(.*)/.exec(linkAddr);
 
regExpMatch = /^http:\/\/dx\.doi\.org\/(.*)/.exec(linkAddr);
Γραμμή 5.871: Γραμμή 5.870:
 
return('{{doi|' + regExpMatch[1] + '}}');
 
return('{{doi|' + regExpMatch[1] + '}}');
 
}
 
}
+
 
 
// other external link
 
// other external link
 
return('[' + linkAddr + ' ' + linkText + ']');
 
return('[' + linkAddr + ' ' + linkText + ']');
 
}
 
}
 
}
 
}
+
 
 
// return unchanged text
 
// return unchanged text
 
return(p1);
 
return(p1);
 
}
 
}
 
);
 
);
+
 
 
// clean up MediaWiki category list
 
// clean up MediaWiki category list
 
var regExp = new RegExp('<span\\b[^>]*>(\\[\\[' + wikEdText['wikicode Category'] + ':[^\\]]+\\]\\])<\\/span>[\\s\\u0000\\|]*', 'gi');
 
var regExp = new RegExp('<span\\b[^>]*>(\\[\\[' + wikEdText['wikicode Category'] + ':[^\\]]+\\]\\])<\\/span>[\\s\\u0000\\|]*', 'gi');
 
obj.html = obj.html.replace(regExp, '$1\u0000');
 
obj.html = obj.html.replace(regExp, '$1\u0000');
+
 
 
// clean up DOI
 
// clean up DOI
 
obj.html = obj.html.replace(/\[\[Digital object identifier\|DOI\]\]:(\{\{doi\|[^\}\s]+\}\})/gi, '$1');
 
obj.html = obj.html.replace(/\[\[Digital object identifier\|DOI\]\]:(\{\{doi\|[^\}\s]+\}\})/gi, '$1');
+
 
 
// convert images
 
// convert images
 
obj.html = obj.html.replace(/<img\b([^>]*)>/g,
 
obj.html = obj.html.replace(/<img\b([^>]*)>/g,
 
function (p, p1) {
 
function (p, p1) {
+
 
 
// get and format parameters
 
// get and format parameters
 
var address = '';
 
var address = '';
Γραμμή 5.899: Γραμμή 5.898:
 
address = regExpMatch[2].replace(/^ +| +$/g, '');
 
address = regExpMatch[2].replace(/^ +| +$/g, '');
 
}
 
}
+
 
 
var imgAlt = '';
 
var imgAlt = '';
 
regExpMatch = /\balt\s*=\s*(\'|\")([^\'\"]*)(\'|\")/i.exec(p1);
 
regExpMatch = /\balt\s*=\s*(\'|\")([^\'\"]*)(\'|\")/i.exec(p1);
Γραμμή 5.911: Γραμμή 5.910:
 
}
 
}
 
}
 
}
+
 
 
var imgWidth = '';
 
var imgWidth = '';
 
regExpMatch = /\bwidth\s*=\s*(\'|\")([^\'\"]*)(\'|\")/i.exec(p1);
 
regExpMatch = /\bwidth\s*=\s*(\'|\")([^\'\"]*)(\'|\")/i.exec(p1);
Γραμμή 5.917: Γραμμή 5.916:
 
imgWidth = '|' + regExpMatch[2].replace(/^ +| +$/g, '') + 'px';
 
imgWidth = '|' + regExpMatch[2].replace(/^ +| +$/g, '') + 'px';
 
}
 
}
+
 
 
var imgLink = '';
 
var imgLink = '';
 
regExpMatch = /([^\/]+)$/.exec(address);
 
regExpMatch = /([^\/]+)$/.exec(address);
Γραμμή 5.929: Γραμμή 5.928:
 
}
 
}
 
);
 
);
+
 
 
// convert lists: * # : ;
 
// convert lists: * # : ;
 
var listObj = {};
 
var listObj = {};
Γραμμή 5.964: Γραμμή 5.963:
 
);
 
);
 
obj.html = obj.html.replace(/[\n|\u0000]+[#\*:\;]+ (?=[\n|\u0000])/g, '');
 
obj.html = obj.html.replace(/[\n|\u0000]+[#\*:\;]+ (?=[\n|\u0000])/g, '');
+
 
 
// <> remove not allowed tags
 
// <> remove not allowed tags
 
obj.html = obj.html.replace(/(<\/?)(\/?)(\w+)(.*?>)/g,
 
obj.html = obj.html.replace(/(<\/?)(\/?)(\w+)(.*?>)/g,
Γραμμή 5.976: Γραμμή 5.975:
 
}
 
}
 
);
 
);
+
 
 
// sanitize attributes in opening html tags
 
// sanitize attributes in opening html tags
 
obj.html = obj.html.replace(/<(\w+) +(.*?) *(\/?)>/g,
 
obj.html = obj.html.replace(/<(\w+) +(.*?) *(\/?)>/g,
Γραμμή 5.986: Γραμμή 5.985:
 
}
 
}
 
);
 
);
+
 
 
// unformat underlined, italic or bold blanks
 
// unformat underlined, italic or bold blanks
 
obj.html = obj.html.replace(/<u>(\'\'\'|\'\'|\s|\u0000)*([\s\u0000]+)(\'\'\'|\'\'|\s|\u0000)*<\/u>/g, '$2');
 
obj.html = obj.html.replace(/<u>(\'\'\'|\'\'|\s|\u0000)*([\s\u0000]+)(\'\'\'|\'\'|\s|\u0000)*<\/u>/g, '$2');
 
obj.html = obj.html.replace(/\'\'\'(\'\'|\s|\u0000)*([\s\u0000]+)(\'\'|\s|\u0000)*\'\'\'/g, '$2');
 
obj.html = obj.html.replace(/\'\'\'(\'\'|\s|\u0000)*([\s\u0000]+)(\'\'|\s|\u0000)*\'\'\'/g, '$2');
 
obj.html = obj.html.replace(/\'\'([\s\u0000]+)\'\'/g, '$1');
 
obj.html = obj.html.replace(/\'\'([\s\u0000]+)\'\'/g, '$1');
+
 
 
// fix MS Word non-style heading formatting
 
// fix MS Word non-style heading formatting
 
obj.html = obj.html.replace(/(\u0000(={1,6}) *)(<u>|\'\'\'|\'\')+(.*?)(<\/u>|\'\'\'|\'\')+( *\2\u0000)/g, '$1$4$6');
 
obj.html = obj.html.replace(/(\u0000(={1,6}) *)(<u>|\'\'\'|\'\')+(.*?)(<\/u>|\'\'\'|\'\')+( *\2\u0000)/g, '$1$4$6');
+
 
 
// remove empty headings
 
// remove empty headings
 
obj.html = obj.html.replace(/\u0000(={1,6})\s+\1\u0000/g, '\u0000');
 
obj.html = obj.html.replace(/\u0000(={1,6})\s+\1\u0000/g, '\u0000');
+
 
 
// remove space-only lines
 
// remove space-only lines
 
obj.html = obj.html.replace(/([\s\u0000]*\u0000[\s\u0000]*)/g,
 
obj.html = obj.html.replace(/([\s\u0000]*\u0000[\s\u0000]*)/g,
Γραμμή 6.006: Γραμμή 6.005:
 
obj.html = obj.html.replace(/\u0000\s+/g, '\u0000');
 
obj.html = obj.html.replace(/\u0000\s+/g, '\u0000');
 
obj.html = obj.html.replace(/\s+(?=\u0000)/g, '\u0000');
 
obj.html = obj.html.replace(/\s+(?=\u0000)/g, '\u0000');
+
 
 
// remove trailing linebreaks from table cells
 
// remove trailing linebreaks from table cells
 
obj.html = obj.html.replace(/\u0000{2,}(\|)/g, '\u0000$1');
 
obj.html = obj.html.replace(/\u0000{2,}(\|)/g, '\u0000$1');
+
 
 
// remove leading and trailing spaces
 
// remove leading and trailing spaces
 
obj.html = obj.html.replace(/>\s+\u0000/g, '>\u0000');
 
obj.html = obj.html.replace(/>\s+\u0000/g, '>\u0000');
 
obj.html = obj.html.replace(/\u0000\s+</g, '\u0000<');
 
obj.html = obj.html.replace(/\u0000\s+</g, '\u0000<');
+
 
 
// remove empty inline and block tag pairs
 
// remove empty inline and block tag pairs
 
obj.html = obj.html.replace(/( *)<(big|colgroup|code|del|font|ins|pre|s|small|span|strike|sub|sup|tt|u|rb|rp|rt|ruby|nowiki)\b[^>]*><\/\1> *()/g, '$1');
 
obj.html = obj.html.replace(/( *)<(big|colgroup|code|del|font|ins|pre|s|small|span|strike|sub|sup|tt|u|rb|rp|rt|ruby|nowiki)\b[^>]*><\/\1> *()/g, '$1');
 
obj.html = obj.html.replace(/[\s\u0000]*<(blockquote|center|div|math|gallery|noinclude|includeonly|ref|references)\b[^>]*><\/\1>[\s\u0000]*()/g, '\u0000\u0000');
 
obj.html = obj.html.replace(/[\s\u0000]*<(blockquote|center|div|math|gallery|noinclude|includeonly|ref|references)\b[^>]*><\/\1>[\s\u0000]*()/g, '\u0000\u0000');
+
 
 
// remove empty lines from div tags
 
// remove empty lines from div tags
 
obj.html = obj.html.replace(/(<div\b[^>]*>)[\s\u0000]+/g, '$1');
 
obj.html = obj.html.replace(/(<div\b[^>]*>)[\s\u0000]+/g, '$1');
 
obj.html = obj.html.replace(/[\s\u0000]+(<\/div>)/g, '$1');
 
obj.html = obj.html.replace(/[\s\u0000]+(<\/div>)/g, '$1');
+
 
 
// escape < >
 
// escape < >
 
obj.html = obj.html.replace(/</g, '&lt;');
 
obj.html = obj.html.replace(/</g, '&lt;');
 
obj.html = obj.html.replace(/>/g, '&gt;');
 
obj.html = obj.html.replace(/>/g, '&gt;');
+
 
 
// newlines to <br />
 
// newlines to <br />
 
obj.html = obj.html.replace(/\n{2,}\u0000+\n/g, '\n\n');
 
obj.html = obj.html.replace(/\n{2,}\u0000+\n/g, '\n\n');
Γραμμή 6.036: Γραμμή 6.035:
 
obj.html = obj.html.replace(/\u0000/g, '\n');
 
obj.html = obj.html.replace(/\u0000/g, '\n');
 
obj.html = obj.html.replace(/\n/g, '<br />');
 
obj.html = obj.html.replace(/\n/g, '<br />');
+
 
 
// remove empty lines from article start and end
 
// remove empty lines from article start and end
 
if (obj.from == 'whole') {
 
if (obj.from == 'whole') {
Γραμμή 6.042: Γραμμή 6.041:
 
obj.html = obj.html.replace(/(<br\b[^>]*>)+$/g, '');
 
obj.html = obj.html.replace(/(<br\b[^>]*>)+$/g, '');
 
}
 
}
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdSanitizeAttributes: see Sanitizer.php
 
// WikEdSanitizeAttributes: see Sanitizer.php
 
//
 
//
+
 
 
window.WikEdSanitizeAttributes = function(tag, attributes, relaxed) {
 
window.WikEdSanitizeAttributes = function(tag, attributes, relaxed) {
 
var common;
 
var common;
Γραμμή 6.079: Γραμμή 6.078:
 
}
 
}
 
var valid = false;
 
var valid = false;
+
 
 
// relaxed, for existing text tags
 
// relaxed, for existing text tags
 
if (relaxed == true) {
 
if (relaxed == true) {
Γραμμή 6.145: Γραμμή 6.144:
 
}
 
}
 
}
 
}
+
 
 
// strict, for html code to be wikified from external sources (websites, Word)
 
// strict, for html code to be wikified from external sources (websites, Word)
 
else {
 
else {
Γραμμή 6.201: Γραμμή 6.200:
 
}
 
}
 
}
 
}
+
 
 
// clean up
 
// clean up
 
if (valid == true) {
 
if (valid == true) {
+
 
 
// clean up defaults for align
 
// clean up defaults for align
 
if (attrib == 'align') {
 
if (attrib == 'align') {
Γραμμή 6.213: Γραμμή 6.212:
 
}
 
}
 
}
 
}
+
 
 
// clean up defaults for valign
 
// clean up defaults for valign
 
else if (attrib == 'valign') {
 
else if (attrib == 'valign') {
Γραμμή 6.222: Γραμμή 6.221:
 
}
 
}
 
}
 
}
+
 
 
// clean up style
 
// clean up style
 
else if (attrib == 'style') {
 
else if (attrib == 'style') {
+
 
 
// remove non-standard Mozilla styles
 
// remove non-standard Mozilla styles
 
attribValue = attribValue.replace(/(^| )(-moz-[\w\-]+): [\w\-]+; *()/g, '$1');
 
attribValue = attribValue.replace(/(^| )(-moz-[\w\-]+): [\w\-]+; *()/g, '$1');
 
attribValue = attribValue.replace(/(^| )([\w\-]+): [^;]*(-moz-[\w\-]+|windowtext)[^;]*; *()/g, '$1');
 
attribValue = attribValue.replace(/(^| )([\w\-]+): [^;]*(-moz-[\w\-]+|windowtext)[^;]*; *()/g, '$1');
+
 
 
// remove dimensions from null values
 
// remove dimensions from null values
 
attribValue = attribValue.replace(/\b0(%|in|cm|mm|em|ex|pt|pc|px)\b/g, '0');
 
attribValue = attribValue.replace(/\b0(%|in|cm|mm|em|ex|pt|pc|px)\b/g, '0');
+
 
 
// remove empty definitions and spaces
 
// remove empty definitions and spaces
 
attribValue = attribValue.replace(/[\w\-]+ *\: *\; *()/g, '');
 
attribValue = attribValue.replace(/[\w\-]+ *\: *\; *()/g, '');
Γραμμή 6.238: Γραμμή 6.237:
 
attribValue = attribValue.replace(/( |;)+$/g, ';');
 
attribValue = attribValue.replace(/( |;)+$/g, ';');
 
}
 
}
+
 
 
// clean up class
 
// clean up class
 
else if (attrib == 'class') {
 
else if (attrib == 'class') {
+
 
 
// remove MS Word classes
 
// remove MS Word classes
 
attribValue = attribValue.replace(/^Ms.*$/g, '');
 
attribValue = attribValue.replace(/^Ms.*$/g, '');
 
}
 
}
+
 
 
if (attribValue != '') {
 
if (attribValue != '') {
 
sanitized += ' ' + attrib + '="' + attribValue + '"';
 
sanitized += ' ' + attrib + '="' + attribValue + '"';
Γραμμή 6.253: Γραμμή 6.252:
 
return(sanitized);
 
return(sanitized);
 
}
 
}
+
 
+
 
 
//
 
//
 
//
 
//
 
// WikEdRemoveHighlighting: remove syntax highlighting in obj.html; sets obj.htmlCode if text contains html code
 
// WikEdRemoveHighlighting: remove syntax highlighting in obj.html; sets obj.htmlCode if text contains html code
 
//    expects <br /> instead of \n
 
//    expects <br /> instead of \n
+
 
 
window.WikEdRemoveHighlighting = function(obj) {
 
window.WikEdRemoveHighlighting = function(obj) {
+
 
 
// remove highlighting and atttribute-free span tags
 
// remove highlighting and atttribute-free span tags
 
var isRemove = [];
 
var isRemove = [];
Γραμμή 6.280: Γραμμή 6.279:
 
}
 
}
 
);
 
);
+
 
 
// remove highlighting div tags
 
// remove highlighting div tags
 
var isRemove = [];
 
var isRemove = [];
Γραμμή 6.299: Γραμμή 6.298:
 
}
 
}
 
);
 
);
+
 
 
// remove highlighting pre tags
 
// remove highlighting pre tags
 
var isRemove = [];
 
var isRemove = [];
Γραμμή 6.318: Γραμμή 6.317:
 
}
 
}
 
);
 
);
+
 
 
// comments
 
// comments
 
obj.html = obj.html.replace(/<!--wikEd\w+-->/g, '');
 
obj.html = obj.html.replace(/<!--wikEd\w+-->/g, '');
+
 
 
// newlines
 
// newlines
 
obj.html = obj.html.replace(/[\n\r ]+/g, ' ');
 
obj.html = obj.html.replace(/[\n\r ]+/g, ' ');
+
 
 
// non-breaking spaces
 
// non-breaking spaces
 
obj.html = obj.html.replace(/&nbsp;/g, '\u00a0');
 
obj.html = obj.html.replace(/&nbsp;/g, '\u00a0');
+
 
 
// check for pasted html content
 
// check for pasted html content
 
if (obj.html.match(/<(?!br\b)/)) {
 
if (obj.html.match(/<(?!br\b)/)) {
Γραμμή 6.337: Γραμμή 6.336:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdHighlightSyntax: highlight syntax in obj.html; if singleLine is set, no block syntax will be highlighted; call WikEdRemoveHighlighting first
 
// WikEdHighlightSyntax: highlight syntax in obj.html; if singleLine is set, no block syntax will be highlighted; call WikEdRemoveHighlighting first
 
//  expects < > &lt; &gt; &amp;  \u00a0 instead of &nbsp;  \n instead of <br />
 
//  expects < > &lt; &gt; &amp;  \u00a0 instead of &nbsp;  \n instead of <br />
+
 
 
window.WikEdHighlightSyntax = function(obj, singleLine) {
 
window.WikEdHighlightSyntax = function(obj, singleLine) {
+
 
 
// &lt; and &gt; to \u0000 and \u0001
 
// &lt; and &gt; to \u0000 and \u0001
 
obj.html = obj.html.replace(/&lt;/g, '\u0000');
 
obj.html = obj.html.replace(/&lt;/g, '\u0000');
 
obj.html = obj.html.replace(/&gt;/g, '\u0001');
 
obj.html = obj.html.replace(/&gt;/g, '\u0001');
+
 
 
// #redirect
 
// #redirect
 
obj.html = obj.html.replace(/(^|\n)(#)(redirect\b)/g, '$1<span class="wikEdWikiRedir">$3</span><!--wikEdWikiRedir-->');
 
obj.html = obj.html.replace(/(^|\n)(#)(redirect\b)/g, '$1<span class="wikEdWikiRedir">$3</span><!--wikEdWikiRedir-->');
+
 
 
// nowiki (no html highlighting)
 
// nowiki (no html highlighting)
 
obj.html = obj.html.replace(/(\u0000nowiki\b.*?\u0001)(.*?)(\u0000\/nowiki\b.*?\u0001)/gi,
 
obj.html = obj.html.replace(/(\u0000nowiki\b.*?\u0001)(.*?)(\u0000\/nowiki\b.*?\u0001)/gi,
Γραμμή 6.360: Γραμμή 6.359:
 
}
 
}
 
);
 
);
+
 
 
// blocks
 
// blocks
+
 
 
// lists * # : ;
 
// lists * # : ;
 
obj.html = obj.html.replace(/^((\u0000!--.*?--\u0001)*)([\*\#\:\;]+)(.*?)$/gm, '<span class="wikEdListLine">$1<span class="wikEdListTag">$3</span><!--wikEdListTag-->$4</span><!--wikEdListLine-->');
 
obj.html = obj.html.replace(/^((\u0000!--.*?--\u0001)*)([\*\#\:\;]+)(.*?)$/gm, '<span class="wikEdListLine">$1<span class="wikEdListTag">$3</span><!--wikEdListTag-->$4</span><!--wikEdListLine-->');
Γραμμή 6.369: Γραμμή 6.368:
 
obj.html = obj.html.replace(/(<span class=\"wikEdListLine\">[^\n]*)(\n)(?!<span class=\"wikEdListLine\">)/g, '$1</span><!--wikEdListBlock-->$2');
 
obj.html = obj.html.replace(/(<span class=\"wikEdListLine\">[^\n]*)(\n)(?!<span class=\"wikEdListLine\">)/g, '$1</span><!--wikEdListBlock-->$2');
 
}
 
}
+
 
 
// #redirect (finish)
 
// #redirect (finish)
 
obj.html = obj.html.replace(/(<span class=\"wikEdWikiRedir\">)(.*?<\/span><!--wikEdWikiRedir-->)/g, '$1#$2');
 
obj.html = obj.html.replace(/(<span class=\"wikEdWikiRedir\">)(.*?<\/span><!--wikEdWikiRedir-->)/g, '$1#$2');
+
 
 
// various blocks
 
// various blocks
 
if (singleLine != true) {
 
if (singleLine != true) {
 
obj.html = obj.html.replace(/(\u0000(blockquote|center|div|pre|timeline|imagemap)\b[^\u0001]*\u0001.*?\u0000\/\2\u0001)/gi, '<span class="wikEdBlock">$1</span><!--wikEdBlock-->');
 
obj.html = obj.html.replace(/(\u0000(blockquote|center|div|pre|timeline|imagemap)\b[^\u0001]*\u0001.*?\u0000\/\2\u0001)/gi, '<span class="wikEdBlock">$1</span><!--wikEdBlock-->');
 
}
 
}
+
 
 
// space-pre
 
// space-pre
 
if (singleLine != true) {
 
if (singleLine != true) {
Γραμμή 6.384: Γραμμή 6.383:
 
obj.html = obj.html.replace(/(<span class=\"wikEdSpaceLine\">[^\n]*)(\n)(?!<span class="wikEdSpaceLine">)/g, '$1</span><!--wikEdSpaceBlock-->$2');
 
obj.html = obj.html.replace(/(<span class=\"wikEdSpaceLine\">[^\n]*)(\n)(?!<span class="wikEdSpaceLine">)/g, '$1</span><!--wikEdSpaceBlock-->$2');
 
}
 
}
+
 
 
// ---- <hr> horizontal rule
 
// ---- <hr> horizontal rule
 
obj.html = obj.html.replace(/(^|\n)((\u0000!--.*?--\u0001|<[^>]*>)*)(----)((\u0000!--.*?--\u0001|<[^>]*>)*)(\n|$)/g, '$1<span class="wikEdHR">$2$4</span><!--wikEdHR-->$5$7');
 
obj.html = obj.html.replace(/(^|\n)((\u0000!--.*?--\u0001|<[^>]*>)*)(----)((\u0000!--.*?--\u0001|<[^>]*>)*)(\n|$)/g, '$1<span class="wikEdHR">$2$4</span><!--wikEdHR-->$5$7');
 
obj.html = obj.html.replace(/(\u0000hr\u0001)/g, '<span class="wikEdHRInline">$1</span><!--wikEdHRInline-->');
 
obj.html = obj.html.replace(/(\u0000hr\u0001)/g, '<span class="wikEdHRInline">$1</span><!--wikEdHRInline-->');
+
 
 
// == headings
 
// == headings
 
obj.html = obj.html.replace(/(^|\n)((\u0000!--.*?--\u0001|<[^>]*>)*)(=+[\u00a0 ]*)([^\n]*?)([\u00a0 ]*=+)(?=([\u00a0 ]|<[^>]*>|\u0000!--.*?--\u0001)*(\n|$))/g,
 
obj.html = obj.html.replace(/(^|\n)((\u0000!--.*?--\u0001|<[^>]*>)*)(=+[\u00a0 ]*)([^\n]*?)([\u00a0 ]*=+)(?=([\u00a0 ]|<[^>]*>|\u0000!--.*?--\u0001)*(\n|$))/g,
Γραμμή 6.406: Γραμμή 6.405:
 
}
 
}
 
);
 
);
+
 
 
// tables                                                  {|  |+  |-  ! |}            |
 
// tables                                                  {|  |+  |-  ! |}            |
 
obj.html = obj.html.replace(/^((\u0000!--.*?--\u0001)*)(\{\||\|\+|\|\-|\!|\|\}([^\}]|$)|\|)(.*?)$/gm, '<span class="wikEdTableLine">$1<span class="wikEdTableTag">$3</span><!--wikEdTableTag-->$5</span><!--wikEdTableLine-->');
 
obj.html = obj.html.replace(/^((\u0000!--.*?--\u0001)*)(\{\||\|\+|\|\-|\!|\|\}([^\}]|$)|\|)(.*?)$/gm, '<span class="wikEdTableLine">$1<span class="wikEdTableTag">$3</span><!--wikEdTableTag-->$5</span><!--wikEdTableLine-->');
Γραμμή 6.415: Γραμμή 6.414:
 
obj.html = obj.html.replace(/(\u0000\/table\u0001)/gi, '$1</span><!--wikEdTableBlock-->');
 
obj.html = obj.html.replace(/(\u0000\/table\u0001)/gi, '$1</span><!--wikEdTableBlock-->');
 
}
 
}
+
 
 
// <gallery> wiki markup
 
// <gallery> wiki markup
 
if (singleLine != true) {
 
if (singleLine != true) {
Γραμμή 6.421: Γραμμή 6.420:
 
obj.html = obj.html.replace(/(\u0000\/(gallery)\u0001)/gi, '$1</span><!--wikEdWiki-->');
 
obj.html = obj.html.replace(/(\u0000\/(gallery)\u0001)/gi, '$1</span><!--wikEdWiki-->');
 
}
 
}
+
 
 
// various block tags
 
// various block tags
 
obj.html = obj.html.replace(/(\u0000\/?(blockquote|center|div|pre|timeline|imagemap)\b[^\u0001]*\u0001)/gi, '<span class="wikEdBlockTag">$1</span><!--wikEdBlockTag-->');
 
obj.html = obj.html.replace(/(\u0000\/?(blockquote|center|div|pre|timeline|imagemap)\b[^\u0001]*\u0001)/gi, '<span class="wikEdBlockTag">$1</span><!--wikEdBlockTag-->');
+
 
 
// <p> ... </p> pairs with (wikEdBlockTag) and withhout attributes (wikEdUnknown)
 
// <p> ... </p> pairs with (wikEdBlockTag) and withhout attributes (wikEdUnknown)
 
var isRemove = [];
 
var isRemove = [];
Γραμμή 6.446: Γραμμή 6.445:
 
}
 
}
 
);
 
);
+
 
 
// inline elements
 
// inline elements
+
 
 
// magic words
 
// magic words
 
obj.html = obj.html.replace(/(__(NOTOC|FORCETOC|TOC|NOEDITSECTION|NEWSECTIONLINK|NOCONTENTCONVERT|NOCC|NOGALLERY|NOTITLECONVERT|NOTC|END|START)__)/gi, '<span class="wikEdMagic">$1</span><!--wikEdMagic-->');
 
obj.html = obj.html.replace(/(__(NOTOC|FORCETOC|TOC|NOEDITSECTION|NEWSECTIONLINK|NOCONTENTCONVERT|NOCC|NOGALLERY|NOTITLECONVERT|NOTC|END|START)__)/gi, '<span class="wikEdMagic">$1</span><!--wikEdMagic-->');
+
 
 
// <sup> </sub> <ins> <del>
 
// <sup> </sub> <ins> <del>
 
obj.html = obj.html.replace(/(\u0000sup\b[^\u0001]*\u0001((.|\n)*?)\u0000\/sup\u0001)/gi, '<span class="wikEdSuperscript">$1</span><!--wikEdSuperscript-->');
 
obj.html = obj.html.replace(/(\u0000sup\b[^\u0001]*\u0001((.|\n)*?)\u0000\/sup\u0001)/gi, '<span class="wikEdSuperscript">$1</span><!--wikEdSuperscript-->');
Γραμμή 6.457: Γραμμή 6.456:
 
obj.html = obj.html.replace(/(\u0000(ins|u)\b[^\u0001]*\u0001((.|\n)*?)\u0000\/(ins|u)\u0001)/gi, '<span class="wikEdIns">$1</span><!--wikEdIns-->');
 
obj.html = obj.html.replace(/(\u0000(ins|u)\b[^\u0001]*\u0001((.|\n)*?)\u0000\/(ins|u)\u0001)/gi, '<span class="wikEdIns">$1</span><!--wikEdIns-->');
 
obj.html = obj.html.replace(/(\u0000(del|s|strike)\b[^\u0001]*\u0001((.|\n)*?)\u0000\/(del|s|strike)\u0001)/gi, '<span class="wikEdDel">$1</span><!--wikEdDel-->');
 
obj.html = obj.html.replace(/(\u0000(del|s|strike)\b[^\u0001]*\u0001((.|\n)*?)\u0000\/(del|s|strike)\u0001)/gi, '<span class="wikEdDel">$1</span><!--wikEdDel-->');
+
 
 
// <ref /> and <ref> wiki markup
 
// <ref /> and <ref> wiki markup
 
if (wikEdRefHide != true) {
 
if (wikEdRefHide != true) {
Γραμμή 6.463: Γραμμή 6.462:
 
obj.html = obj.html.replace(/(\u0000ref\b[^\u0001]*\u0001((.|\n)*?)\u0000\/ref\u0001)/gi, '<span class="wikEdRef">$1</span><!--wikEdRef-->');
 
obj.html = obj.html.replace(/(\u0000ref\b[^\u0001]*\u0001((.|\n)*?)\u0000\/ref\u0001)/gi, '<span class="wikEdRef">$1</span><!--wikEdRef-->');
 
}
 
}
+
 
 
// various inline tags
 
// various inline tags
 
obj.html = obj.html.replace(/(\u0000\/?(sub|sup|ins|u|del|s|strike|big|br|colgroup|code|font|small|span|tt|rb|rp|rt|ruby|ref)\b[^\u0001]*\u0001)/gi, '<span class="wikEdInlineTag">$1</span><!--wikEdInlineTag-->');
 
obj.html = obj.html.replace(/(\u0000\/?(sub|sup|ins|u|del|s|strike|big|br|colgroup|code|font|small|span|tt|rb|rp|rt|ruby|ref)\b[^\u0001]*\u0001)/gi, '<span class="wikEdInlineTag">$1</span><!--wikEdInlineTag-->');
+
 
 
// <references/> wiki markup
 
// <references/> wiki markup
 
obj.html = obj.html.replace(/\u0000((references)\b[^\u0001]*?\/)\u0001/gi, '<span class="wikEdWiki">&lt;$1&gt;</span><!--wikEdWiki-->');
 
obj.html = obj.html.replace(/\u0000((references)\b[^\u0001]*?\/)\u0001/gi, '<span class="wikEdWiki">&lt;$1&gt;</span><!--wikEdWiki-->');
+
 
 
// <math> <noinclude> <includeonly> <references> wiki markup
 
// <math> <noinclude> <includeonly> <references> wiki markup
 
obj.html = obj.html.replace(/(\u0000(math|gallery|noinclude|includeonly|references)\b[^\u0001]*\u0001((.|\n)*?)(\u0000)\/\2\u0001)/gi, '<span class="wikEdWiki">$1</span><!--wikEdWiki-->');
 
obj.html = obj.html.replace(/(\u0000(math|gallery|noinclude|includeonly|references)\b[^\u0001]*\u0001((.|\n)*?)(\u0000)\/\2\u0001)/gi, '<span class="wikEdWiki">$1</span><!--wikEdWiki-->');
+
 
 
// unsupported or not needed <> tags
 
// unsupported or not needed <> tags
 
obj.html = obj.html.replace(/(\u0000\/?)(\w+)(.*?\/?\u0001)/g,
 
obj.html = obj.html.replace(/(\u0000\/?)(\w+)(.*?\/?\u0001)/g,
Γραμμή 6.483: Γραμμή 6.482:
 
}
 
}
 
);
 
);
+
 
 
// comments
 
// comments
 
obj.html = obj.html.replace(/(\u0000!--(.|\n)*?--\u0001)/g, '<span class="wikEdComment">$1</span><!--wikEdComment-->');
 
obj.html = obj.html.replace(/(\u0000!--(.|\n)*?--\u0001)/g, '<span class="wikEdComment">$1</span><!--wikEdComment-->');
+
 
 
// clear array of link addresses
 
// clear array of link addresses
 
if (obj.whole == true) {
 
if (obj.whole == true) {
Γραμμή 6.493: Γραμμή 6.492:
 
}
 
}
 
obj.whole = false;
 
obj.whole = false;
+
 
 
// URLs, allowed chars: \w / . & ? = - @ # % ~ + : (; allowed because of &amp; and common misuse, : allowed for wikipedia links)
 
// URLs, allowed chars: \w / . & ? = - @ # % ~ + : (; allowed because of &amp; and common misuse, : allowed for wikipedia links)
 
obj.html = obj.html.replace(/((http:\/\/|https:\/\/|ftp:\/\/|irc:\/\/|gopher:\/\/|news:|mailto:)[^\u0000-\u0020\!\"\$\'\(\)\*\,\<\>\[\\\]\^\`\{-\|\}\u007f-\uffff]*)/gi,
 
obj.html = obj.html.replace(/((http:\/\/|https:\/\/|ftp:\/\/|irc:\/\/|gopher:\/\/|news:|mailto:)[^\u0000-\u0020\!\"\$\'\(\)\*\,\<\>\[\\\]\^\`\{-\|\}\u007f-\uffff]*)/gi,
Γραμμή 6.500: Γραμμή 6.499:
 
}
 
}
 
);
 
);
+
 
 
// URLs with text
 
// URLs with text
 
obj.html = obj.html.replace(/(\[)( *<span class=\"wikEdURLLink\"[^>]*>.*?<\!--wikEdURLLink--> *)([^\]\n]*?)( *\])/gi,
 
obj.html = obj.html.replace(/(\[)( *<span class=\"wikEdURLLink\"[^>]*>.*?<\!--wikEdURLLink--> *)([^\]\n]*?)( *\])/gi,
 
function (p, p1, p2, p3, p4) {
 
function (p, p1, p2, p3, p4) {
+
 
 
// link text
 
// link text
 
p3 = p3.replace(/(.*)/, '<span class="wikEdURLText">$1</span><!--wikEdURLText-->');
 
p3 = p3.replace(/(.*)/, '<span class="wikEdURLText">$1</span><!--wikEdURLText-->');
+
 
 
// link tags
 
// link tags
 
p1 = p1.replace(/(\[)/, '<span class="wikEdLinkTag">$1</span><!--wikEdLinkTag-->');
 
p1 = p1.replace(/(\[)/, '<span class="wikEdLinkTag">$1</span><!--wikEdLinkTag-->');
 
p4 = p4.replace(/(\])/, '<span class="wikEdLinkTag">$1</span><!--wikEdLinkTag-->');
 
p4 = p4.replace(/(\])/, '<span class="wikEdLinkTag">$1</span><!--wikEdLinkTag-->');
+
 
 
return(p1 + p2 + p3 + p4);
 
return(p1 + p2 + p3 + p4);
 
}
 
}
 
);
 
);
+
 
 
// [[Image: ]] images
 
// [[Image: ]] images
 
var regExpImg = new RegExp('(\\[\\[)(' + wikEdText['wikicode Image'] + ' *: *)([^\\]\\[\\|]*? *)(\\|(\\[[^\\]]*\\]|\\[\\[[^\\]]*\\]\\]|[^\\[\\]\\|]+|\\|)*)?(\\]\\])', 'gi');
 
var regExpImg = new RegExp('(\\[\\[)(' + wikEdText['wikicode Image'] + ' *: *)([^\\]\\[\\|]*? *)(\\|(\\[[^\\]]*\\]|\\[\\[[^\\]]*\\]\\]|[^\\[\\]\\|]+|\\|)*)?(\\]\\])', 'gi');
 
obj.html = obj.html.replace(regExpImg,
 
obj.html = obj.html.replace(regExpImg,
 
function (p, p1, p2, p3, p4, p5, p6) {
 
function (p, p1, p2, p3, p4, p5, p6) {
+
 
 
var linkTitle = p3;
 
var linkTitle = p3;
 
linkTitle = linkTitle.replace(/\|.*()/g, '');
 
linkTitle = linkTitle.replace(/\|.*()/g, '');
 
linkTitle = linkTitle.replace(/\n.*()/g, '');
 
linkTitle = linkTitle.replace(/\n.*()/g, '');
+
 
 
p1 = '<span class="wikEdImage"' + WikEdFollowLinkUrl(p2, linkTitle) + '>' + p1;
 
p1 = '<span class="wikEdImage"' + WikEdFollowLinkUrl(p2, linkTitle) + '>' + p1;
 
p6 = p6 + '</span><!--wikEdImage-->';
 
p6 = p6 + '</span><!--wikEdImage-->';
 
p2 = '<span class="wikEdImageName">' + p2;
 
p2 = '<span class="wikEdImageName">' + p2;
 
p3 = p3 + '</span><!--wikEdImageName-->';
 
p3 = p3 + '</span><!--wikEdImageName-->';
+
 
 
// parameters and capture
 
// parameters and capture
 
p4 = p4.replace(/((\[[^\]]\]|\[\[[^\]]\]\]|[^\]\|])+)/g,
 
p4 = p4.replace(/((\[[^\]]\]|\[\[[^\]]\]\]|[^\]\|])+)/g,
Γραμμή 6.542: Γραμμή 6.541:
 
}
 
}
 
);
 
);
+
 
 
// link tags
 
// link tags
 
p1 = p1.replace(/(\[+)/, '<span class="wikEdLinkTag">$1</span><!--wikEdLinkTag-->');
 
p1 = p1.replace(/(\[+)/, '<span class="wikEdLinkTag">$1</span><!--wikEdLinkTag-->');
Γραμμή 6.550: Γραμμή 6.549:
 
}
 
}
 
);
 
);
+
 
 
// [[ ]] links, categories
 
// [[ ]] links, categories
 
obj.html = obj.html.replace(/(\[\[)([^\[\]]*)(\]\])/g,
 
obj.html = obj.html.replace(/(\[\[)([^\[\]]*)(\]\])/g,
 
function (p, p1, p2, p3) {
 
function (p, p1, p2, p3) {
+
 
 
// omit image tags
 
// omit image tags
 
var regExpImg = new RegExp('^(<[^>]*>)*' + wikEdText['wikicode Image'] + '\\s*:', 'i');
 
var regExpImg = new RegExp('^(<[^>]*>)*' + wikEdText['wikicode Image'] + '\\s*:', 'i');
Γραμμή 6.560: Γραμμή 6.559:
 
return(p1 + p2 + p3);
 
return(p1 + p2 + p3);
 
}
 
}
+
 
 
// get url
 
// get url
 
var linkParam = '';
 
var linkParam = '';
Γραμμή 6.569: Γραμμή 6.568:
 
linkParam = WikEdFollowLinkUrl(linkInter, linkMatch[3])
 
linkParam = WikEdFollowLinkUrl(linkInter, linkMatch[3])
 
}
 
}
+
 
 
// category
 
// category
 
var regExpCat = new RegExp('^\\s*' + wikEdText['wikicode Category'] + '\\s*:', 'i');
 
var regExpCat = new RegExp('^\\s*' + wikEdText['wikicode Category'] + '\\s*:', 'i');
Γραμμή 6.591: Γραμμή 6.590:
 
);
 
);
 
}
 
}
+
 
 
// wikilink
 
// wikilink
 
else {
 
else {
Γραμμή 6.611: Γραμμή 6.610:
 
);
 
);
 
}
 
}
+
 
 
// link tags
 
// link tags
 
p1 = p1.replace(/(\[+)/, '<span class="wikEdLinkTag">$1</span><!--wikEdLinkTag-->');
 
p1 = p1.replace(/(\[+)/, '<span class="wikEdLinkTag">$1</span><!--wikEdLinkTag-->');
Γραμμή 6.619: Γραμμή 6.618:
 
}
 
}
 
);
 
);
+
 
 
// {{ }} simple non-nested templates
 
// {{ }} simple non-nested templates
 
obj.html = obj.html.replace(/(\{{2,3})([^\{\}\<\>\u0000\u0001\n]+)(\}{2,3})/g,
 
obj.html = obj.html.replace(/(\{{2,3})([^\{\}\<\>\u0000\u0001\n]+)(\}{2,3})/g,
 
function (p, p1, p2, p3) {
 
function (p, p1, p2, p3) {
+
 
 
// get url
 
// get url
 
var linkParam = '';
 
var linkParam = '';
Γραμμή 6.648: Γραμμή 6.647:
 
}
 
}
 
);
 
);
+
 
 
// template tags
 
// template tags
 
p2 = p2.replace(/(\|)/g, '<span class="wikEdTemplTag">$1</span><!--wikEdTemplTag-->');
 
p2 = p2.replace(/(\|)/g, '<span class="wikEdTemplTag">$1</span><!--wikEdTemplTag-->');
+
 
 
return(p1 + p2 + p3);
 
return(p1 + p2 + p3);
 
}
 
}
 
);
 
);
+
 
 
// highlighting curly template brackets at template start
 
// highlighting curly template brackets at template start
 
obj.html = obj.html.replace(/(\{{2,})(\s*[^\{\}\<\>\u0000\u0001\n\|]+)/g,
 
obj.html = obj.html.replace(/(\{{2,})(\s*[^\{\}\<\>\u0000\u0001\n\|]+)/g,
Γραμμή 6.669: Γραμμή 6.668:
 
}
 
}
 
);
 
);
+
 
 
// highlighting curly template brackets at template end
 
// highlighting curly template brackets at template end
 
obj.html = obj.html.replace(/(\}{2,})(?!<\/span><!--wikEdTemplTag-->)/g, '<span class="wikEdTemplTag">$1</span><!--wikEdTemplTag--></span><!--wikEdTempl-->');
 
obj.html = obj.html.replace(/(\}{2,})(?!<\/span><!--wikEdTemplTag-->)/g, '<span class="wikEdTemplTag">$1</span><!--wikEdTemplTag--></span><!--wikEdTempl-->');
+
 
 
// <b> <i>
 
// <b> <i>
 
obj.html = obj.html.replace(/(\'\'\')(\'*)(.*?)(\'*)(\'\'\')/g, '<span class="wikEdBold">$2$3$4</span><!--wikEdBold-->');
 
obj.html = obj.html.replace(/(\'\'\')(\'*)(.*?)(\'*)(\'\'\')/g, '<span class="wikEdBold">$2$3$4</span><!--wikEdBold-->');
Γραμμή 6.679: Γραμμή 6.678:
 
obj.html = obj.html.replace(/(<\/span><!--wikEdBold-->)/g, '\'\'\'$1');
 
obj.html = obj.html.replace(/(<\/span><!--wikEdBold-->)/g, '\'\'\'$1');
 
obj.html = obj.html.replace(/(\'{2,})/g, '<span class="wikEdWiki">$1</span><!--wikEdWiki-->');
 
obj.html = obj.html.replace(/(\'{2,})/g, '<span class="wikEdWiki">$1</span><!--wikEdWiki-->');
+
 
 
// named html colors
 
// named html colors
 
obj.html = obj.html.replace(/(\'|\")(aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|blanchedalmond|burlywood|chartreuse|coral|cornsilk|cyan|darkgray|darkgrey|darkkhaki|darkorange|darksalmon|darkseagreen|floralwhite|fuchsia|gainsboro|ghostwhite|gold|goldenrod|greenyellow|honeydew|hotpink|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightskyblue|lightsteelblue|lightyellow|lime|linen|magenta|mediumaquamarine|mediumspringgreen|mediumturquoise|mintcream|mistyrose|moccasin|navajowhite|oldlace|orange|palegoldenrod|palegreen|paleturquoise|papayawhip|peachpuff|peru|pink|plum|powderblue|salmon|sandybrown|seashell|silver|skyblue|snow|springgreen|tan|thistle|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen)(\1)/g, '$1<span style="background-color: $2;" class="wikEdColorsLight">$2</span><!--wikEdColorsLight-->$3');
 
obj.html = obj.html.replace(/(\'|\")(aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|blanchedalmond|burlywood|chartreuse|coral|cornsilk|cyan|darkgray|darkgrey|darkkhaki|darkorange|darksalmon|darkseagreen|floralwhite|fuchsia|gainsboro|ghostwhite|gold|goldenrod|greenyellow|honeydew|hotpink|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightskyblue|lightsteelblue|lightyellow|lime|linen|magenta|mediumaquamarine|mediumspringgreen|mediumturquoise|mintcream|mistyrose|moccasin|navajowhite|oldlace|orange|palegoldenrod|palegreen|paleturquoise|papayawhip|peachpuff|peru|pink|plum|powderblue|salmon|sandybrown|seashell|silver|skyblue|snow|springgreen|tan|thistle|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen)(\1)/g, '$1<span style="background-color: $2;" class="wikEdColorsLight">$2</span><!--wikEdColorsLight-->$3');
 
obj.html = obj.html.replace(/(\'|\")(black|blue|blueviolet|brown|cadetblue|chocolate|cornflowerblue|crimson|darkblue|darkcyan|darkgoldenrod|darkgreen|darkmagenta|darkolivegreen|darkorchid|darkred|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|forestgreen|gray|green|grey|indianred|indigo|lightseagreen|lightslategray|lightslategrey|limegreen|maroon|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumvioletred|midnightblue|navy|olive|olivedrab|orangered|orchid|palevioletred|purple|red|rosybrown|royalblue|saddlebrown|seagreen|sienna|slateblue|slategray|slategrey|steelblue|teal|tomato)(\1)/g, '$1<span style="background-color: $2;" class="wikEdColorsDark">$2</span><!--wikEdColorsDark-->$3');
 
obj.html = obj.html.replace(/(\'|\")(black|blue|blueviolet|brown|cadetblue|chocolate|cornflowerblue|crimson|darkblue|darkcyan|darkgoldenrod|darkgreen|darkmagenta|darkolivegreen|darkorchid|darkred|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|forestgreen|gray|green|grey|indianred|indigo|lightseagreen|lightslategray|lightslategrey|limegreen|maroon|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumvioletred|midnightblue|navy|olive|olivedrab|orangered|orchid|palevioletred|purple|red|rosybrown|royalblue|saddlebrown|seagreen|sienna|slateblue|slategray|slategrey|steelblue|teal|tomato)(\1)/g, '$1<span style="background-color: $2;" class="wikEdColorsDark">$2</span><!--wikEdColorsDark-->$3');
+
 
 
// RGB hex colors #d4d0cc
 
// RGB hex colors #d4d0cc
 
obj.html = obj.html.replace(/(^|[^\/\w])(#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2}))(?=(\W|$))/g,
 
obj.html = obj.html.replace(/(^|[^\/\w])(#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2}))(?=(\W|$))/g,
Γραμμή 6.696: Γραμμή 6.695:
 
}
 
}
 
);
 
);
+
 
 
// RGB hex colors #ddc
 
// RGB hex colors #ddc
 
obj.html = obj.html.replace(/(^|[^\/\w])(#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F]))(?=(\W|$))/g,
 
obj.html = obj.html.replace(/(^|[^\/\w])(#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F]))(?=(\W|$))/g,
Γραμμή 6.709: Γραμμή 6.708:
 
}
 
}
 
);
 
);
+
 
 
// RGB decimal colors rgb(128,64,265)
 
// RGB decimal colors rgb(128,64,265)
 
obj.html = obj.html.replace(/(rgb\(\s*(\d+),\s*(\d+),\s*(\d+)\s*\))/gi,
 
obj.html = obj.html.replace(/(rgb\(\s*(\d+),\s*(\d+),\s*(\d+)\s*\))/gi,
Γραμμή 6.722: Γραμμή 6.721:
 
}
 
}
 
);
 
);
+
 
 
// nowiki (remove highlighting)
 
// nowiki (remove highlighting)
 
obj.html = obj.html.replace(/(\u0000nowiki\b[^\u0001]*\u0001)((.|\n)*?)(\u0000\/nowiki\u0001)/gi,
 
obj.html = obj.html.replace(/(\u0000nowiki\b[^\u0001]*\u0001)((.|\n)*?)(\u0000\/nowiki\u0001)/gi,
Γραμμή 6.732: Γραμμή 6.731:
 
}
 
}
 
);
 
);
+
 
 
// hide (fade) <ref>
 
// hide (fade) <ref>
 
if (wikEdRefHide == true) {
 
if (wikEdRefHide == true) {
+
 
 
// escape <ref />
 
// escape <ref />
 
obj.html = obj.html.replace(/\u0000(ref\b[^\u0001]*?\/)\u0001/g, '<span class="wikEdRefHide">&lt;$1&gt;</span><!--wikEdRefHide-->');
 
obj.html = obj.html.replace(/\u0000(ref\b[^\u0001]*?\/)\u0001/g, '<span class="wikEdRefHide">&lt;$1&gt;</span><!--wikEdRefHide-->');
+
 
 
// remove <ref> inner highlighting
 
// remove <ref> inner highlighting
 
obj.html = obj.html.replace(/(\u0000ref\b[^\u0001]*\u0001)((.|\n)*?)(\u0000\/ref\u0001)/gi,
 
obj.html = obj.html.replace(/(\u0000ref\b[^\u0001]*\u0001)((.|\n)*?)(\u0000\/ref\u0001)/gi,
Γραμμή 6.748: Γραμμή 6.747:
 
);
 
);
 
}
 
}
+
 
 
// \u0000 and \u0001 back to &lt; and &gt;
 
// \u0000 and \u0001 back to &lt; and &gt;
 
obj.html = obj.html.replace(/\u0000/g, '&lt;');
 
obj.html = obj.html.replace(/\u0000/g, '&lt;');
 
obj.html = obj.html.replace(/\u0001/g, '&gt;');
 
obj.html = obj.html.replace(/\u0001/g, '&gt;');
+
 
 
// display control chars with popup title
 
// display control chars with popup title
 
var regExp = new RegExp('([' + wikEdControlCharsStr + '])', 'g');
 
var regExp = new RegExp('([' + wikEdControlCharsStr + '])', 'g');
Γραμμή 6.766: Γραμμή 6.765:
 
}
 
}
 
);
 
);
+
 
 
// display strange spaces with popup title
 
// display strange spaces with popup title
 
var regExpStr = '';
 
var regExpStr = '';
Γραμμή 6.784: Γραμμή 6.783:
 
}
 
}
 
);
 
);
+
 
 
// remove comments
 
// remove comments
 
if (wikEdRemoveHighlightComments == true) {
 
if (wikEdRemoveHighlightComments == true) {
 
obj.html = obj.html.replace(/<!--wikEd\w+-->/g, '');
 
obj.html = obj.html.replace(/<!--wikEd\w+-->/g, '');
 
}
 
}
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdFollowLinkUrl: prepare the span tag parameters for ctrl-click opening of highlighted links
 
// WikEdFollowLinkUrl: prepare the span tag parameters for ctrl-click opening of highlighted links
 
//  add support for [[/subpage]]
 
//  add support for [[/subpage]]
+
 
 
window.WikEdFollowLinkUrl = function(linkPrefix, linkTitle, linkUrl) {//////////////////////
 
window.WikEdFollowLinkUrl = function(linkPrefix, linkTitle, linkUrl) {//////////////////////
+
 
 
var linkName = '';
 
var linkName = '';
+
 
 
// generate url from interlanguage or namespace prefix and title
 
// generate url from interlanguage or namespace prefix and title
 
if (linkUrl == null) {
 
if (linkUrl == null) {
+
 
 
// test for templates
 
// test for templates
 
if ( (/\{|\}/.test(linkPrefix) == true) || (/\{|\}/.test(linkTitle) ) == true) {
 
if ( (/\{|\}/.test(linkPrefix) == true) || (/\{|\}/.test(linkTitle) ) == true) {
 
return('');
 
return('');
 
}
 
}
+
 
 
// remove highlighting code
 
// remove highlighting code
 
linkPrefix = linkPrefix.replace(/<[^>]*>/g, '');
 
linkPrefix = linkPrefix.replace(/<[^>]*>/g, '');
 
linkTitle = linkTitle.replace(/<[^>]*>/g, '');
 
linkTitle = linkTitle.replace(/<[^>]*>/g, '');
+
 
 
// remove control chars
 
// remove control chars
 
var regExp = new RegExp('[' + wikEdControlCharsStr + ']', 'g');
 
var regExp = new RegExp('[' + wikEdControlCharsStr + ']', 'g');
 
linkPrefix = linkPrefix.replace(regExp, '');
 
linkPrefix = linkPrefix.replace(regExp, '');
 
linkTitle = linkTitle.replace(regExp, '');
 
linkTitle = linkTitle.replace(regExp, '');
+
 
 
// remove strange white spaces
 
// remove strange white spaces
 
linkPrefix = linkPrefix.replace(/\s/, ' ');
 
linkPrefix = linkPrefix.replace(/\s/, ' ');
 
linkTitle = linkTitle.replace(/\s/, ' ');
 
linkTitle = linkTitle.replace(/\s/, ' ');
+
 
 
linkPrefix = linkPrefix.replace(/\s/g, '');
 
linkPrefix = linkPrefix.replace(/\s/g, '');
 
linkPrefix = linkPrefix.replace(/^:+/g, '');
 
linkPrefix = linkPrefix.replace(/^:+/g, '');
Γραμμή 6.840: Γραμμή 6.839:
 
}
 
}
 
}
 
}
+
 
 
// url provided
 
// url provided
 
else {
 
else {
+
 
 
// test for templates
 
// test for templates
 
if (/\{|\}/.test(linkUrl) == true) {
 
if (/\{|\}/.test(linkUrl) == true) {
Γραμμή 6.853: Γραμμή 6.852:
 
linkUrl = linkUrl.replace(/\'/g, '%27');
 
linkUrl = linkUrl.replace(/\'/g, '%27');
 
}
 
}
+
 
 
linkName = linkName.replace(/</g, '&lt;');
 
linkName = linkName.replace(/</g, '&lt;');
 
linkName = linkName.replace(/>/g, '&gt;');
 
linkName = linkName.replace(/>/g, '&gt;');
 
linkName = linkName.replace(/\"/g, '&quot;');
 
linkName = linkName.replace(/\"/g, '&quot;');
 
linkName = linkName.replace(/\'/g, '\\u0027');
 
linkName = linkName.replace(/\'/g, '\\u0027');
+
 
 
var linkParam = '';
 
var linkParam = '';
 
if (linkUrl != '') {
 
if (linkUrl != '') {
 
var linkId = 'wikEdFollowLink' + wikEdFollowLinkIdNo;
 
var linkId = 'wikEdFollowLink' + wikEdFollowLinkIdNo;
 
wikEdFollowLinkIdNo ++;
 
wikEdFollowLinkIdNo ++;
+
 
linkParam += 'id="' + linkId + '" title="' + linkName + ' ' + wikEdText['followLink'] + '"';
 
linkParam += 'id="' + linkId + '" title="' + linkName + ' ' + wikEdText['followLink'] + '"';
 
wikEdFollowLinkHash[linkId] = linkUrl;
 
wikEdFollowLinkHash[linkId] = linkUrl;
Γραμμή 6.869: Γραμμή 6.868:
 
return(linkParam)
 
return(linkParam)
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdUpdateTextarea: copy frame content to textarea
 
// WikEdUpdateTextarea: copy frame content to textarea
 
//
 
//
+
 
 
window.WikEdUpdateTextarea = function() {
 
window.WikEdUpdateTextarea = function() {
+
 
 
// get frame content
 
// get frame content
 
var obj = {};
 
var obj = {};
 
obj.html = wikEdFrameBody.innerHTML;
 
obj.html = wikEdFrameBody.innerHTML;
 
obj.html = obj.html.replace(/(<br\b[^>]*>)\n* *()/g, '$1');
 
obj.html = obj.html.replace(/(<br\b[^>]*>)\n* *()/g, '$1');
+
 
 
// textify so that no html formatting is submitted
 
// textify so that no html formatting is submitted
 
WikEdTextify(obj);
 
WikEdTextify(obj);
Γραμμή 6.888: Γραμμή 6.887:
 
obj.plain = obj.plain.replace(/&gt;/g, '>');
 
obj.plain = obj.plain.replace(/&gt;/g, '>');
 
obj.plain = obj.plain.replace(/&amp;/g, '&');
 
obj.plain = obj.plain.replace(/&amp;/g, '&');
+
 
 
// copy to textarea
 
// copy to textarea
 
wikEdTextarea.value = obj.plain;
 
wikEdTextarea.value = obj.plain;
+
 
 
// remember frame scroll position
 
// remember frame scroll position
 
wikEdFrameScrollTop = wikEdFrameBody.scrollTop;
 
wikEdFrameScrollTop = wikEdFrameBody.scrollTop;
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdUpdateFrame: copy textarea content to frame
 
// WikEdUpdateFrame: copy textarea content to frame
 
//
 
//
+
 
 
window.WikEdUpdateFrame = function() {
 
window.WikEdUpdateFrame = function() {
+
 
 
// get textarea content
 
// get textarea content
 
var obj = {};
 
var obj = {};
Γραμμή 6.911: Γραμμή 6.910:
 
obj.html = obj.html.replace(/>/g, '&gt;');
 
obj.html = obj.html.replace(/>/g, '&gt;');
 
obj.html = obj.html.replace(/</g, '&lt;');
 
obj.html = obj.html.replace(/</g, '&lt;');
+
 
 
// highlight the syntax
 
// highlight the syntax
 
if (wikEdHighlightSyntax == true) {
 
if (wikEdHighlightSyntax == true) {
Γραμμή 6.917: Γραμμή 6.916:
 
WikEdHighlightSyntax(obj);
 
WikEdHighlightSyntax(obj);
 
}
 
}
+
 
 
// display tabs
 
// display tabs
 
else {
 
else {
 
obj.html = obj.html.replace(/(\t)/g, '<span class="wikEdTabPlain">$1</span><!--wikEdTabPlain-->');
 
obj.html = obj.html.replace(/(\t)/g, '<span class="wikEdTabPlain">$1</span><!--wikEdTabPlain-->');
 
}
 
}
+
 
 
// multiple blanks to blank-&nbsp;
 
// multiple blanks to blank-&nbsp;
 
obj.html = obj.html.replace(/  /g, '&nbsp; ');
 
obj.html = obj.html.replace(/  /g, '&nbsp; ');
 
obj.html = obj.html.replace(/  /g, '&nbsp; ');
 
obj.html = obj.html.replace(/  /g, '&nbsp; ');
 
obj.html = obj.html.replace(/ \n/g, '&nbsp;\n');
 
obj.html = obj.html.replace(/ \n/g, '&nbsp;\n');
+
 
 
// newlines to <br />
 
// newlines to <br />
 
obj.html = obj.html.replace(/\n/g, '<br />');
 
obj.html = obj.html.replace(/\n/g, '<br />');
+
 
 
// select the whole text after replacing the whole text and scroll to same height
 
// select the whole text after replacing the whole text and scroll to same height
 
obj.sel = wikEdFrameWindow.getSelection();
 
obj.sel = wikEdFrameWindow.getSelection();
 
obj.sel.removeAllRanges();
 
obj.sel.removeAllRanges();
+
 
 
// insert content into empty frame
 
// insert content into empty frame
 
if ( (wikEdFrameBody.firstChild == null) || (wikEdFrameBody.innerHTML == '<br>') ) {
 
if ( (wikEdFrameBody.firstChild == null) || (wikEdFrameBody.innerHTML == '<br>') ) {
 
wikEdFrameBody.innerHTML = obj.html;
 
wikEdFrameBody.innerHTML = obj.html;
 
}
 
}
+
 
 
// insert content into frame, preserve history
 
// insert content into frame, preserve history
 
else {
 
else {
Γραμμή 6.946: Γραμμή 6.945:
 
range.setEndAfter(wikEdFrameBody.lastChild);
 
range.setEndAfter(wikEdFrameBody.lastChild);
 
obj.sel.addRange(range);
 
obj.sel.addRange(range);
+
 
 
// replace the frame content with the new text
 
// replace the frame content with the new text
 
if (obj.html != '') {
 
if (obj.html != '') {
Γραμμή 6.955: Γραμμή 6.954:
 
}
 
}
 
obj.sel.removeAllRanges();
 
obj.sel.removeAllRanges();
+
 
 
// scroll to previous position
 
// scroll to previous position
 
if (wikEdFrameScrollTop != null) {
 
if (wikEdFrameScrollTop != null) {
Γραμμή 6.962: Γραμμή 6.961:
 
}
 
}
 
wikEdFrameScrollTop = null;
 
wikEdFrameScrollTop = null;
+
 
 
// add event handler to make highlighted frame links ctrl-clickable
 
// add event handler to make highlighted frame links ctrl-clickable
 
if (wikEdHighlightSyntax == true) {
 
if (wikEdHighlightSyntax == true) {
 
WikEdFollowLinks();
 
WikEdFollowLinks();
 
}
 
}
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdKeyFrameHandler: event handler for key and mouse events in the frame
 
// WikEdKeyFrameHandler: event handler for key and mouse events in the frame
 
//
 
//
+
 
 
window.WikEdKeyFrameHandler = function(event) {
 
window.WikEdKeyFrameHandler = function(event) {
+
 
 
if (wikEdUseWikEd == true) {
 
if (wikEdUseWikEd == true) {
 
switch (event.type) {
 
switch (event.type) {
+
 
 
// trap the tab key
 
// trap the tab key
 
case 'keydown':
 
case 'keydown':
Γραμμή 6.987: Γραμμή 6.986:
 
if (event.shiftKey == false) {
 
if (event.shiftKey == false) {
 
event.preventDefault();
 
event.preventDefault();
+
 
 
// scroll to text input top
 
// scroll to text input top
 
if (wikEdFullScreenMode == false) {
 
if (wikEdFullScreenMode == false) {
Γραμμή 6.993: Γραμμή 6.992:
 
window.scroll(0, inputWrapperTop);
 
window.scroll(0, inputWrapperTop);
 
}
 
}
+
 
 
// focus the summary
 
// focus the summary
 
wikEdSummaryText.focus();
 
wikEdSummaryText.focus();
Γραμμή 7.000: Γραμμή 6.999:
 
}
 
}
 
break;
 
break;
+
 
 
// trap any other frame event
 
// trap any other frame event
 
case 'keyup':
 
case 'keyup':
 
case 'keypress':
 
case 'keypress':
 
case 'mouseup':
 
case 'mouseup':
+
 
 
// grey out inactive buttons
 
// grey out inactive buttons
 
WikEdInactiveButtons();
 
WikEdInactiveButtons();
+
 
 
// reset the frame DOM cache
 
// reset the frame DOM cache
 
wikEdFrameDOMCache = null;
 
wikEdFrameDOMCache = null;
Γραμμή 7.014: Γραμμή 7.013:
 
}
 
}
 
}
 
}
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdShiftAltHandler: event handler for emulated accesskey keydown events in main document and frame
 
// WikEdShiftAltHandler: event handler for emulated accesskey keydown events in main document and frame
 
//
 
//
+
 
 
window.WikEdShiftAltHandler = function(event) {
 
window.WikEdShiftAltHandler = function(event) {
+
 
 
if (wikEdUseWikEd == true) {
 
if (wikEdUseWikEd == true) {
 
if ( (event.shiftKey == true) && (event.ctrlKey == false) && (event.altKey == true) ) {
 
if ( (event.shiftKey == true) && (event.ctrlKey == false) && (event.altKey == true) ) {
+
 
 
// get wikEd button id from keycode
 
// get wikEd button id from keycode
 
var buttonId = wikEdButtonKeyCode[event.keyCode];
 
var buttonId = wikEdButtonKeyCode[event.keyCode];
Γραμμή 7.033: Γραμμή 7.032:
 
event.preventDefault();
 
event.preventDefault();
 
event.stopPropagation();
 
event.stopPropagation();
+
 
 
// execute the button click handler code
 
// execute the button click handler code
 
var obj = document.getElementById(buttonId);
 
var obj = document.getElementById(buttonId);
Γραμμή 7.042: Γραμμή 7.041:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdFrameExecCommand: wrapper for execCommand method
 
// WikEdFrameExecCommand: wrapper for execCommand method
 
//
 
//
+
 
 
window.WikEdFrameExecCommand = function(command, option) {
 
window.WikEdFrameExecCommand = function(command, option) {
+
 
 
wikEdFrameDocument.execCommand(command, false, option);
 
wikEdFrameDocument.execCommand(command, false, option);
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdFindAhead: non-regexp and case-insensitive find-as-you-type, event handler for find field
 
// WikEdFindAhead: non-regexp and case-insensitive find-as-you-type, event handler for find field
 
//
 
//
+
 
 
window.WikEdFindAhead = function() {
 
window.WikEdFindAhead = function() {
+
 
 
if (wikEdFindAhead.getAttribute('checked') == 'true') {
 
if (wikEdFindAhead.getAttribute('checked') == 'true') {
+
 
 
// get the find text
 
// get the find text
 
var findText = wikEdFindText.value;
 
var findText = wikEdFindText.value;
Γραμμή 7.068: Γραμμή 7.067:
 
return;
 
return;
 
}
 
}
+
 
 
// remember position
 
// remember position
 
var sel = wikEdFrameWindow.getSelection();
 
var sel = wikEdFrameWindow.getSelection();
Γραμμή 7.077: Γραμμή 7.076:
 
sel.addRange(range);
 
sel.addRange(range);
 
range.collapse(true);
 
range.collapse(true);
+
 
 
// parameters: window.find(string, caseSensitive, backwards, wrapAround, wholeWord, searchInFrames, showDialog)
 
// parameters: window.find(string, caseSensitive, backwards, wrapAround, wholeWord, searchInFrames, showDialog)
 
// Mozilla bug: searchInFrames must be true, otherwise wrapAround does not work
 
// Mozilla bug: searchInFrames must be true, otherwise wrapAround does not work
 
var found = wikEdFrameWindow.find(findText, false, false, true, false, true, false);
 
var found = wikEdFrameWindow.find(findText, false, false, true, false, true, false);
+
 
 
// add original selection
 
// add original selection
 
if (found == false) {
 
if (found == false) {
Γραμμή 7.091: Γραμμή 7.090:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdMainSwitch: click handler for program logo
 
// WikEdMainSwitch: click handler for program logo
 
//
 
//
+
 
 
window.WikEdMainSwitch = function() {
 
window.WikEdMainSwitch = function() {
+
 
 
// disable function if browser is incompatible
 
// disable function if browser is incompatible
 
if (wikEdBrowserNotSupported == true) {
 
if (wikEdBrowserNotSupported == true) {
 
return;
 
return;
 
}
 
}
+
 
 
// enable wikEd
 
// enable wikEd
 
if (wikEdDisabled == true) {
 
if (wikEdDisabled == true) {
 
wikEdDisabled = false;
 
wikEdDisabled = false;
 
WikEdSetPersistent('wikEdDisabled', '', -1, '/');
 
WikEdSetPersistent('wikEdDisabled', '', -1, '/');
+
 
 
// turn rich text frame on
 
// turn rich text frame on
 
if (wikEdTurnedOn == true) {
 
if (wikEdTurnedOn == true) {
Γραμμή 7.120: Γραμμή 7.119:
 
}
 
}
 
}
 
}
+
 
 
// setup wikEd
 
// setup wikEd
 
else {
 
else {
Γραμμή 7.127: Γραμμή 7.126:
 
}
 
}
 
}
 
}
+
 
 
// disable wikEd
 
// disable wikEd
 
else {
 
else {
Γραμμή 7.137: Γραμμή 7.136:
 
WikEdFullScreen(false);
 
WikEdFullScreen(false);
 
}
 
}
+
 
 
// turn classic textarea on
 
// turn classic textarea on
 
WikEdUpdateTextarea();
 
WikEdUpdateTextarea();
Γραμμή 7.149: Γραμμή 7.148:
 
}
 
}
 
}
 
}
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdFullScreen: change to fullscreen edit area or back to normal view
 
// WikEdFullScreen: change to fullscreen edit area or back to normal view
 
//
 
//
+
 
 
window.WikEdFullScreen = function(fullscreen, notFrame) {
 
window.WikEdFullScreen = function(fullscreen, notFrame) {
+
 
 
// hide or show elements
 
// hide or show elements
 
var displayStyle;
 
var displayStyle;
Γραμμή 7.168: Γραμμή 7.167:
 
displayStyle = 'block';
 
displayStyle = 'block';
 
}
 
}
+
 
 
// elements above input wrapper
 
// elements above input wrapper
 
var node = document.getElementById('editform').previousSibling;
 
var node = document.getElementById('editform').previousSibling;
Γραμμή 7.178: Γραμμή 7.177:
 
}
 
}
 
document.getElementsByTagName('H1')[0].style.display = displayStyle;
 
document.getElementsByTagName('H1')[0].style.display = displayStyle;
+
 
 
// divs below input wrapper
 
// divs below input wrapper
 
var node = wikEdInputWrapper.nextSibling;
 
var node = wikEdInputWrapper.nextSibling;
Γραμμή 7.187: Γραμμή 7.186:
 
node = node.nextSibling;
 
node = node.nextSibling;
 
}
 
}
+
 
 
// divs below input wrapper, some levels up
 
// divs below input wrapper, some levels up
 
var node = document.getElementById('column-one');
 
var node = document.getElementById('column-one');
Γραμμή 7.196: Γραμμή 7.195:
 
node = node.nextSibling;
 
node = node.nextSibling;
 
}
 
}
+
 
 
// insert wrapper
 
// insert wrapper
 
document.getElementById('wikEdInsertWrapper').style.display = displayStyle;
 
document.getElementById('wikEdInsertWrapper').style.display = displayStyle;
+
 
 
// change styles
 
// change styles
 
if (fullscreen) {
 
if (fullscreen) {
Γραμμή 7.213: Γραμμή 7.212:
 
wikEdButtonBarPreview.className = 'wikEdButtonBarPreview';
 
wikEdButtonBarPreview.className = 'wikEdButtonBarPreview';
 
}
 
}
+
 
 
// resize the frame
 
// resize the frame
 
if (fullscreen) {
 
if (fullscreen) {
Γραμμή 7.227: Γραμμή 7.226:
 
wikEdFrame.style.height = wikEdTextareaHeight + 'px';
 
wikEdFrame.style.height = wikEdTextareaHeight + 'px';
 
}
 
}
+
 
 
// scroll to edit-frame
 
// scroll to edit-frame
 
if (fullscreen == false) {
 
if (fullscreen == false) {
 
window.scroll(0, WikEdGetOffsetTop(wikEdInputWrapper) - 2);
 
window.scroll(0, WikEdGetOffsetTop(wikEdInputWrapper) - 2);
 
}
 
}
+
 
 
// set the fullscreen button state
 
// set the fullscreen button state
 
WikEdButton(document.getElementById('wikEdFullScreen'), 'wikEdFullScreen', null, fullscreen);
 
WikEdButton(document.getElementById('wikEdFullScreen'), 'wikEdFullScreen', null, fullscreen);
+
 
 
// grey out or re-activate scroll-to buttons
 
// grey out or re-activate scroll-to buttons
 
var buttonClass;
 
var buttonClass;
Γραμμή 7.248: Γραμμή 7.247:
 
document.getElementById('wikEdScrollToEdit').className = buttonClass;
 
document.getElementById('wikEdScrollToEdit').className = buttonClass;
 
document.getElementById('wikEdScrollToEdit2').className = buttonClass;
 
document.getElementById('wikEdScrollToEdit2').className = buttonClass;
+
 
 
// resize the summary field
 
// resize the summary field
 
WikEdResizeSummary();
 
WikEdResizeSummary();
+
 
 
wikEdFullScreenMode = fullscreen;
 
wikEdFullScreenMode = fullscreen;
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdResizeSummary: recalculate the summary width after resizing the window
 
// WikEdResizeSummary: recalculate the summary width after resizing the window
 
//
 
//
+
 
 
window.WikEdResizeSummary = function() {
 
window.WikEdResizeSummary = function() {
+
 
 
wikEdSummaryText.style.width = '';
 
wikEdSummaryText.style.width = '';
 
wikEdSummarySelect.style.width = '';
 
wikEdSummarySelect.style.width = '';
Γραμμή 7.274: Γραμμή 7.273:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdResizeComboInput: set the size of the background select boxes so that the button is visible
 
// WikEdResizeComboInput: set the size of the background select boxes so that the button is visible
 
//
 
//
+
 
 
window.WikEdResizeComboInput = function(field) {
 
window.WikEdResizeComboInput = function(field) {
+
 
 
// add a dummy option if no options have been added yet
 
// add a dummy option if no options have been added yet
 
var dummy;
 
var dummy;
Γραμμή 7.290: Γραμμή 7.289:
 
dummy = true;
 
dummy = true;
 
}
 
}
+
 
 
// set option widths to 0
 
// set option widths to 0
 
for (var i = 0; i < wikEdSelectElement[field].options.length; i ++) {
 
for (var i = 0; i < wikEdSelectElement[field].options.length; i ++) {
 
wikEdSelectElement[field].options[i].style.width = '0';
 
wikEdSelectElement[field].options[i].style.width = '0';
 
}
 
}
+
 
 
// calculate select width
 
// calculate select width
 
var inputWidth = wikEdInputElement[field].clientWidth;
 
var inputWidth = wikEdInputElement[field].clientWidth;
Γραμμή 7.303: Γραμμή 7.302:
 
selectWidth = selectWidth - optionWidth + inputWidth - border + 1;
 
selectWidth = selectWidth - optionWidth + inputWidth - border + 1;
 
var buttonWidth = selectWidth - inputWidth;
 
var buttonWidth = selectWidth - inputWidth;
+
 
 
if (inputWidth - buttonWidth > 150) {
 
if (inputWidth - buttonWidth > 150) {
 
wikEdInputElement[field].style.width = (inputWidth - buttonWidth) + 'px';
 
wikEdInputElement[field].style.width = (inputWidth - buttonWidth) + 'px';
Γραμμή 7.311: Γραμμή 7.310:
 
wikEdSelectElement[field].style.width = selectWidth + 'px';
 
wikEdSelectElement[field].style.width = selectWidth + 'px';
 
}
 
}
+
 
 
// delete dummy option
 
// delete dummy option
 
if (dummy == true) {
 
if (dummy == true) {
 
wikEdSelectElement[field].options[0] = null;
 
wikEdSelectElement[field].options[0] = null;
 
}
 
}
+
 
 
// set option widths to auto
 
// set option widths to auto
 
for (var i = 0; i < wikEdSelectElement[field].options.length; i ++) {
 
for (var i = 0; i < wikEdSelectElement[field].options.length; i ++) {
Γραμμή 7.323: Γραμμή 7.322:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdChangeComboInput: set the input value to selected option; onchange event handler for select boxes
 
// WikEdChangeComboInput: set the input value to selected option; onchange event handler for select boxes
 
//
 
//
+
 
 
window.WikEdChangeComboInput = function(field) {
 
window.WikEdChangeComboInput = function(field) {
+
 
 
wikEdInputElement[field].focus;
 
wikEdInputElement[field].focus;
+
 
 
// get selection index (-1 for unselected)
 
// get selection index (-1 for unselected)
 
var selected = wikEdSelectElement[field].selectedIndex;
 
var selected = wikEdSelectElement[field].selectedIndex;
 
if (selected >= 0) {
 
if (selected >= 0) {
 
wikEdSelectElement[field].selectedIndex = -1;
 
wikEdSelectElement[field].selectedIndex = -1;
+
 
 
// get selected option
 
// get selected option
 
var option = wikEdSelectElement[field].options[selected];
 
var option = wikEdSelectElement[field].options[selected];
 
if (option.text != '') {
 
if (option.text != '') {
+
 
 
// jump to heading
 
// jump to heading
 
if (/^=/.test(option.value) == true) {
 
if (/^=/.test(option.value) == true) {
+
 
 
// parameters: window.find(string, caseSensitive, backwards, wrapAround, wholeWord, searchInFrames, showDialog)
 
// parameters: window.find(string, caseSensitive, backwards, wrapAround, wholeWord, searchInFrames, showDialog)
 
// Mozilla bug: searchInFrames must be true, otherwise wrapAround does not work
 
// Mozilla bug: searchInFrames must be true, otherwise wrapAround does not work
 
wikEdFrameWindow.find(option.value, true, false, true, false, true, false);
 
wikEdFrameWindow.find(option.value, true, false, true, false, true, false);
 
}
 
}
+
 
 
// update input field
 
// update input field
 
else {
 
else {
+
 
 
// add a tag to the summary box
 
// add a tag to the summary box
 
if (field == 'summary') {
 
if (field == 'summary') {
 
wikEdInputElement[field].value = WikEdAppendToSummary(wikEdInputElement[field].value, option.text);
 
wikEdInputElement[field].value = WikEdAppendToSummary(wikEdInputElement[field].value, option.text);
 
}
 
}
+
 
 
// add case and regexp checkboxes to find / replace fields
 
// add case and regexp checkboxes to find / replace fields
 
else if (option.value == 'setcheck') {
 
else if (option.value == 'setcheck') {
Γραμμή 7.364: Γραμμή 7.363:
 
wikEdInputElement[field].value = option.text.substr(3);
 
wikEdInputElement[field].value = option.text.substr(3);
 
}
 
}
+
 
 
// add option text
 
// add option text
 
else {
 
else {
 
wikEdInputElement[field].value = option.text;
 
wikEdInputElement[field].value = option.text;
 
}
 
}
+
 
 
// find the new text
 
// find the new text
 
if ( (field == 'find') && (wikEdFindAhead.getAttribute('checked') == 'true') ) {
 
if ( (field == 'find') && (wikEdFindAhead.getAttribute('checked') == 'true') ) {
Γραμμή 7.379: Γραμμή 7.378:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdAppendToSummary: append a phrase to the summary text
 
// WikEdAppendToSummary: append a phrase to the summary text
 
//
 
//
+
 
 
window.WikEdAppendToSummary = function(summary, append) {
 
window.WikEdAppendToSummary = function(summary, append) {
+
 
 
summary = summary.replace(/^[, ]+/, '');
 
summary = summary.replace(/^[, ]+/, '');
 
summary = summary.replace(/[, ]+$/, '');
 
summary = summary.replace(/[, ]+$/, '');
Γραμμή 7.404: Γραμμή 7.403:
 
}
 
}
 
summary += append;
 
summary += append;
+
 
 
return(summary);
 
return(summary);
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdAddToHistory: add an input value to the saved history
 
// WikEdAddToHistory: add an input value to the saved history
 
//
 
//
+
 
 
window.WikEdAddToHistory = function(field) {
 
window.WikEdAddToHistory = function(field) {
+
 
 
if (wikEdInputElement[field].value != '') {
 
if (wikEdInputElement[field].value != '') {
+
 
 
// load history from saved settings
 
// load history from saved settings
 
WikEdLoadHistoryFromSettings(field);
 
WikEdLoadHistoryFromSettings(field);
+
 
 
// add current value to history
 
// add current value to history
 
wikEdFieldHist[field].unshift(wikEdInputElement[field].value);
 
wikEdFieldHist[field].unshift(wikEdInputElement[field].value);
+
 
 
// add case and regexp checkboxes to find / replace value
 
// add case and regexp checkboxes to find / replace value
 
if ( (field == 'find') || (field == 'replace') ) {
 
if ( (field == 'find') || (field == 'replace') ) {
Γραμμή 7.430: Γραμμή 7.429:
 
' ' + wikEdFieldHist[field][0];
 
' ' + wikEdFieldHist[field][0];
 
}
 
}
+
 
 
// remove paragraph names from summary
 
// remove paragraph names from summary
 
if (field == 'summary') {
 
if (field == 'summary') {
 
wikEdFieldHist[field][0] = wikEdFieldHist[field][0].replace(/^\/\* .*? \*\/ *()/, '');
 
wikEdFieldHist[field][0] = wikEdFieldHist[field][0].replace(/^\/\* .*? \*\/ *()/, '');
 
}
 
}
+
 
 
// remove multiple old copies from history
 
// remove multiple old copies from history
 
var i = 1;
 
var i = 1;
Γραμμή 7.446: Γραμμή 7.445:
 
}
 
}
 
}
 
}
+
 
 
// remove new value if it is a preset value
 
// remove new value if it is a preset value
 
if (wikEdComboPresetOptions[field] != null) {
 
if (wikEdComboPresetOptions[field] != null) {
Γραμμή 7.460: Γραμμή 7.459:
 
}
 
}
 
}
 
}
+
 
 
// cut history number to maximal history length
 
// cut history number to maximal history length
 
wikEdFieldHist[field] = wikEdFieldHist[field].slice(0, wikEdHistoryLength[field]);
 
wikEdFieldHist[field] = wikEdFieldHist[field].slice(0, wikEdHistoryLength[field]);
+
 
 
// save history to settings
 
// save history to settings
 
if (wikEdFieldHist[field][0] != '') {
 
if (wikEdFieldHist[field][0] != '') {
Γραμμή 7.471: Γραμμή 7.470:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdSetComboOptions: generate the select options from saved history; onfocus handler for select box
 
// WikEdSetComboOptions: generate the select options from saved history; onfocus handler for select box
 
//
 
//
+
 
 
window.WikEdSetComboOptions = function(field) {
 
window.WikEdSetComboOptions = function(field) {
+
 
 
// load history from saved settings
 
// load history from saved settings
 
WikEdLoadHistoryFromSettings(field);
 
WikEdLoadHistoryFromSettings(field);
+
 
 
var option = {};
 
var option = {};
 
var selectedOption = null;
 
var selectedOption = null;
+
 
 
// delete options
 
// delete options
 
var options = wikEdSelectElement[field].options;
 
var options = wikEdSelectElement[field].options;
Γραμμή 7.490: Γραμμή 7.489:
 
wikEdSelectElement[field].remove(i);
 
wikEdSelectElement[field].remove(i);
 
}
 
}
+
 
 
// delete optgroup
 
// delete optgroup
 
option = document.getElementById(field + 'Optgroup');
 
option = document.getElementById(field + 'Optgroup');
Γραμμή 7.496: Γραμμή 7.495:
 
wikEdSelectElement[field].removeChild(option);
 
wikEdSelectElement[field].removeChild(option);
 
}
 
}
+
 
 
// workaround for onchange not firing when selecting first option from unselected dropdown
 
// workaround for onchange not firing when selecting first option from unselected dropdown
 
option = document.createElement('option');
 
option = document.createElement('option');
Γραμμή 7.502: Γραμμή 7.501:
 
j = 0;
 
j = 0;
 
wikEdSelectElement[field].options[j++] = option;
 
wikEdSelectElement[field].options[j++] = option;
+
 
 
// add history entries
 
// add history entries
 
for (var i = 0; i < wikEdFieldHist[field].length; i ++) {
 
for (var i = 0; i < wikEdFieldHist[field].length; i ++) {
Γραμμή 7.517: Γραμμή 7.516:
 
}
 
}
 
}
 
}
+
 
 
// add preset entries
 
// add preset entries
 
var startPreset = 0;
 
var startPreset = 0;
Γραμμή 7.524: Γραμμή 7.523:
 
for (var i = 0; i < wikEdComboPresetOptions[field].length; i ++) {
 
for (var i = 0; i < wikEdComboPresetOptions[field].length; i ++) {
 
if (wikEdComboPresetOptions[field][i] != null) {
 
if (wikEdComboPresetOptions[field][i] != null) {
+
 
 
// replace spaces with nbsp to allow for multiple and trailing spaces
 
// replace spaces with nbsp to allow for multiple and trailing spaces
 
wikEdComboPresetOptions[field][i] = wikEdComboPresetOptions[field][i].replace(/ /g, '\u00a0');
 
wikEdComboPresetOptions[field][i] = wikEdComboPresetOptions[field][i].replace(/ /g, '\u00a0');
+
 
 
// select a dropdown value
 
// select a dropdown value
 
if (wikEdComboPresetOptions[field][i] == wikEdInputElement[field].value) {
 
if (wikEdComboPresetOptions[field][i] == wikEdInputElement[field].value) {
 
selectedOption = j;
 
selectedOption = j;
 
}
 
}
+
 
 
option = document.createElement('option');
 
option = document.createElement('option');
 
option.text = wikEdComboPresetOptions[field][i];
 
option.text = wikEdComboPresetOptions[field][i];
Γραμμή 7.542: Γραμμή 7.541:
 
}
 
}
 
}
 
}
+
 
 
// set the selection
 
// set the selection
 
wikEdSelectElement[field].selectedIndex = selectedOption;
 
wikEdSelectElement[field].selectedIndex = selectedOption;
+
 
 
// add a blank preset separator
 
// add a blank preset separator
 
if ( (startPreset > 1) && (startPreset < j) ) {
 
if ( (startPreset > 1) && (startPreset < j) ) {
Γραμμή 7.553: Γραμμή 7.552:
 
wikEdSelectElement[field].insertBefore(option, wikEdSelectElement[field].options[startPreset]);
 
wikEdSelectElement[field].insertBefore(option, wikEdSelectElement[field].options[startPreset]);
 
}
 
}
+
 
 
// add the TOC jumper to the find field
 
// add the TOC jumper to the find field
 
var startTOC = 0;
 
var startTOC = 0;
 
if (field == 'find') {
 
if (field == 'find') {
 
startTOC = j;
 
startTOC = j;
+
 
 
// get the whole plain text
 
// get the whole plain text
 
var plain = wikEdFrameBody.innerHTML;
 
var plain = wikEdFrameBody.innerHTML;
 
plain = plain.replace(/<br\b[^>]*>/g, '\n');
 
plain = plain.replace(/<br\b[^>]*>/g, '\n');
 
plain = plain.replace(/<.*?>/g, '');
 
plain = plain.replace(/<.*?>/g, '');
+
 
 
// cycle through the headings
 
// cycle through the headings
 
var heading = plain.match(/(^|\n)=+[^\n]+?=+[^\n=]*[ =\t]*(?=(\n|$))/g);
 
var heading = plain.match(/(^|\n)=+[^\n]+?=+[^\n=]*[ =\t]*(?=(\n|$))/g);
Γραμμή 7.571: Γραμμή 7.570:
 
headingIndent = headingIndent.replace(/^=/g, '');
 
headingIndent = headingIndent.replace(/^=/g, '');
 
headingIndent = headingIndent.replace(/=/g, '\u00a0');
 
headingIndent = headingIndent.replace(/=/g, '\u00a0');
+
 
 
// add headings to the select element
 
// add headings to the select element
 
option = document.createElement('option');
 
option = document.createElement('option');
Γραμμή 7.579: Γραμμή 7.578:
 
}
 
}
 
}
 
}
+
 
 
// add a blank TOC separator
 
// add a blank TOC separator
 
if ( (startTOC > 1) && (startTOC < j) ) {
 
if ( (startTOC > 1) && (startTOC < j) ) {
Γραμμή 7.587: Γραμμή 7.586:
 
wikEdSelectElement[field].insertBefore(option, wikEdSelectElement[field].options[startTOC]);
 
wikEdSelectElement[field].insertBefore(option, wikEdSelectElement[field].options[startTOC]);
 
}
 
}
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdClearHistory: clear the history of combo input fields
 
// WikEdClearHistory: clear the history of combo input fields
 
//
 
//
+
 
 
window.WikEdClearHistory = function(field) {
 
window.WikEdClearHistory = function(field) {
 
WikEdSetPersistent(wikEdSavedName[field], '', 0, '/');
 
WikEdSetPersistent(wikEdSavedName[field], '', 0, '/');
Γραμμή 7.601: Γραμμή 7.600:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdLoadHistoryFromSettings: get the input box history from the respective saved settings
 
// WikEdLoadHistoryFromSettings: get the input box history from the respective saved settings
 
//
 
//
+
 
 
window.WikEdLoadHistoryFromSettings = function(field) {
 
window.WikEdLoadHistoryFromSettings = function(field) {
 
var setting = WikEdGetPersistent(wikEdSavedName[field]);
 
var setting = WikEdGetPersistent(wikEdSavedName[field]);
Γραμμή 7.618: Γραμμή 7.617:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdSaveHistoryToSetting: save the input box history to the respective saved settings
 
// WikEdSaveHistoryToSetting: save the input box history to the respective saved settings
 
//
 
//
+
 
 
window.WikEdSaveHistoryToSetting = function(field) {
 
window.WikEdSaveHistoryToSetting = function(field) {
 
var setting = '';
 
var setting = '';
Γραμμή 7.632: Γραμμή 7.631:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
// WikEdGetStyle: get computed style properties for non-inline css definitions
 
// WikEdGetStyle: get computed style properties for non-inline css definitions
 
window.WikEdGetStyle = function(element, styleProperty) {
 
window.WikEdGetStyle = function(element, styleProperty) {
Γραμμή 7.642: Γραμμή 7.641:
 
return(style);
 
return(style);
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdGetSavedSetting: get a wikEd setting depending on the presence of a cookie
 
// WikEdGetSavedSetting: get a wikEd setting depending on the presence of a cookie
 
//
 
//
+
 
 
window.WikEdGetSavedSetting = function(settingName, preset) {
 
window.WikEdGetSavedSetting = function(settingName, preset) {
+
 
 
var setting;
 
var setting;
 
if (WikEdGetPersistent(settingName) != '') {
 
if (WikEdGetPersistent(settingName) != '') {
Γραμμή 7.659: Γραμμή 7.658:
 
return(preset);
 
return(preset);
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdGetPersistent: get a cookie or a Greasemonkey persistent value (code copied to wikEdDiff.js)
 
// WikEdGetPersistent: get a cookie or a Greasemonkey persistent value (code copied to wikEdDiff.js)
 
//
 
//
+
 
 
window.WikEdGetPersistent = function(name) {
 
window.WikEdGetPersistent = function(name) {
+
 
var getStr = '';
 
var getStr = '';
+
 
 
// get a Greasemonkey persistent value
 
// get a Greasemonkey persistent value
 
if (wikEdGreasemonkey == true) {
 
if (wikEdGreasemonkey == true) {
 
getStr = GM_getValue(name, '');
 
getStr = GM_getValue(name, '');
 
}
 
}
+
 
 
// get a cookie value
 
// get a cookie value
 
else {
 
else {
Γραμμή 7.680: Γραμμή 7.679:
 
return(getStr);
 
return(getStr);
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdSetPersistent: set a cookie or a Greasemonkey persistent value, deletes the value for expire = -1
 
// WikEdSetPersistent: set a cookie or a Greasemonkey persistent value, deletes the value for expire = -1
 
//
 
//
+
 
 
window.WikEdSetPersistent = function(name, value, expires, path, domain, secure) {
 
window.WikEdSetPersistent = function(name, value, expires, path, domain, secure) {
+
 
 
// set a Greasemonkey persistent value
 
// set a Greasemonkey persistent value
 
if (wikEdGreasemonkey == true) {
 
if (wikEdGreasemonkey == true) {
Γραμμή 7.697: Γραμμή 7.696:
 
}
 
}
 
}
 
}
+
 
 
// set a cookie value
 
// set a cookie value
 
else {
 
else {
Γραμμή 7.704: Γραμμή 7.703:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdGetCookie: get a cookie (code copied to wikEdDiff.js)
 
// WikEdGetCookie: get a cookie (code copied to wikEdDiff.js)
 
//
 
//
+
 
 
window.WikEdGetCookie = function(cookieName) {
 
window.WikEdGetCookie = function(cookieName) {
+
 
 
var cookie = ' ' + document.cookie;
 
var cookie = ' ' + document.cookie;
 
var search = ' ' + cookieName + '=';
 
var search = ' ' + cookieName + '=';
Γραμμή 7.730: Γραμμή 7.729:
 
return(cookieValue);
 
return(cookieValue);
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdSetCookie: set a cookie, deletes a cookie for expire = -1
 
// WikEdSetCookie: set a cookie, deletes a cookie for expire = -1
 
//
 
//
+
 
 
window.WikEdSetCookie = function(name, value, expires, path, domain, secure) {
 
window.WikEdSetCookie = function(name, value, expires, path, domain, secure) {
+
 
 
var cookie = name + '=' + encodeURIComponent(value);
 
var cookie = name + '=' + encodeURIComponent(value);
+
 
 
if (expires != null) {
 
if (expires != null) {
+
 
 
// generate a date 1 hour ago to delete the cookie
 
// generate a date 1 hour ago to delete the cookie
 
if (expires == -1) {
 
if (expires == -1) {
Γραμμή 7.748: Γραμμή 7.747:
 
expires = cookieExpire.toUTCString();
 
expires = cookieExpire.toUTCString();
 
}
 
}
+
 
 
// get date from expiration preset
 
// get date from expiration preset
 
else if (expires == 0) {
 
else if (expires == 0) {
Γραμμή 7.769: Γραμμή 7.768:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdGetOffsetTop: get element offset relative to window top (code copied to wikEdDiff.js)
 
// WikEdGetOffsetTop: get element offset relative to window top (code copied to wikEdDiff.js)
 
//
 
//
+
 
 
window.WikEdGetOffsetTop = function(element) {
 
window.WikEdGetOffsetTop = function(element) {
 
var offset = 0;
 
var offset = 0;
Γραμμή 7.782: Γραμμή 7.781:
 
return(offset);
 
return(offset);
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdGetOffsetLeft: get element offset relative to left window border
 
// WikEdGetOffsetLeft: get element offset relative to left window border
 
//
 
//
+
 
 
window.WikEdGetOffsetLeft = function(element) {
 
window.WikEdGetOffsetLeft = function(element) {
 
var offset = 0;
 
var offset = 0;
Γραμμή 7.795: Γραμμή 7.794:
 
return(offset);
 
return(offset);
 
}
 
}
+
 
+
 
 
// define leaf elements for WikEdGetInnerHTML
 
// define leaf elements for WikEdGetInnerHTML
 
window.wikEdLeafElements = [];
 
window.wikEdLeafElements = [];
Γραμμή 7.803: Γραμμή 7.802:
 
wikEdLeafElements['BR'] = true;
 
wikEdLeafElements['BR'] = true;
 
wikEdLeafElements['INPUT'] = true;
 
wikEdLeafElements['INPUT'] = true;
+
 
+
 
 
//
 
//
 
// WikEdParseDOM: parses a DOM subtree and and adds plain text into a complex data structure
 
// WikEdParseDOM: parses a DOM subtree and and adds plain text into a complex data structure
 
//  wikEdFrameDOMCache contains the last parse if the frame has not changed
 
//  wikEdFrameDOMCache contains the last parse if the frame has not changed
 
//
 
//
+
 
 
window.WikEdParseDOM = function(obj, topNode) {
 
window.WikEdParseDOM = function(obj, topNode) {
+
 
 
/* problematic because of obj.changed //////////////////////
 
/* problematic because of obj.changed //////////////////////
 
if (wikEdFrameDOMCache != null) {
 
if (wikEdFrameDOMCache != null) {
Γραμμή 7.818: Γραμμή 7.817:
 
}
 
}
 
*/
 
*/
+
 
 
obj.plainLength = 0;
 
obj.plainLength = 0;
 
obj.plainArray = [];
 
obj.plainArray = [];
Γραμμή 7.829: Γραμμή 7.828:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdParseDOMRecursive: parses a DOM tree and and adds plain text into the data structure
 
// WikEdParseDOMRecursive: parses a DOM tree and and adds plain text into the data structure
 
//
 
//
+
 
 
window.WikEdParseDOMRecursive = function(obj, currentNode) {
 
window.WikEdParseDOMRecursive = function(obj, currentNode) {
+
 
 
// cycle through the child nodes of currentNode
 
// cycle through the child nodes of currentNode
 
for (var property in currentNode.childNodes) {
 
for (var property in currentNode.childNodes) {
Γραμμή 7.846: Γραμμή 7.845:
 
break;
 
break;
 
}
 
}
+
 
 
// check for selection
 
// check for selection
 
if (childNode == obj.sel.focusNode) {
 
if (childNode == obj.sel.focusNode) {
Γραμμή 7.855: Γραμμή 7.854:
 
}
 
}
 
var value = null;
 
var value = null;
+
 
 
// get text of child node
 
// get text of child node
 
switch (childNode.nodeType) {
 
switch (childNode.nodeType) {
Γραμμή 7.876: Γραμμή 7.875:
 
break;
 
break;
 
}
 
}
+
 
 
// add text to text object
 
// add text to text object
 
if (value != null) {
 
if (value != null) {
+
 
 
// array of text fragments
 
// array of text fragments
 
obj.plainArray.push(value);
 
obj.plainArray.push(value);
+
 
 
// array of text fragment node references
 
// array of text fragment node references
 
obj.plainNode.push(childNode);
 
obj.plainNode.push(childNode);
+
 
 
// array of text fragment text positions
 
// array of text fragment text positions
 
obj.plainStart.push(obj.plainLength);
 
obj.plainStart.push(obj.plainLength);
+
 
 
// node references containing text positions
 
// node references containing text positions
 
obj.plainPos[childNode] = obj.plainLength;
 
obj.plainPos[childNode] = obj.plainLength;
+
 
 
// current text length
 
// current text length
 
obj.plainLength += value.length;
 
obj.plainLength += value.length;
Γραμμή 7.898: Γραμμή 7.897:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdGetInnerHTML: get the innerHTML from a document fragment
 
// WikEdGetInnerHTML: get the innerHTML from a document fragment
 
//
 
//
+
 
 
window.WikEdGetInnerHTML = function(obj, currentNode) {
 
window.WikEdGetInnerHTML = function(obj, currentNode) {
+
 
 
// initialize string
 
// initialize string
 
if (obj.html == null) {
 
if (obj.html == null) {
Γραμμή 7.918: Γραμμή 7.917:
 
obj.plainStart = [];
 
obj.plainStart = [];
 
}
 
}
+
 
 
for (var i = 0; i < currentNode.childNodes.length; i ++) {
 
for (var i = 0; i < currentNode.childNodes.length; i ++) {
 
var childNode = currentNode.childNodes.item(i);
 
var childNode = currentNode.childNodes.item(i);
Γραμμή 7.973: Γραμμή 7.972:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdStyleSheet: create a new style sheet object (code copied to wikEdDiff.js)
 
// WikEdStyleSheet: create a new style sheet object (code copied to wikEdDiff.js)
 
//
 
//
+
 
 
window.WikEdStyleSheet = function(documentObject) {
 
window.WikEdStyleSheet = function(documentObject) {
+
 
 
this.styleElement = null;
 
this.styleElement = null;
 
if (documentObject == null) {
 
if (documentObject == null) {
 
documentObject = document;
 
documentObject = document;
 
}
 
}
+
 
 
// IE
 
// IE
 
if (documentObject.createStyleSheet) {
 
if (documentObject.createStyleSheet) {
 
this.styleElement = documentObject.createStyleSheet();
 
this.styleElement = documentObject.createStyleSheet();
 
}
 
}
+
 
 
// standards compliant browsers
 
// standards compliant browsers
 
else {
 
else {
Γραμμή 8.001: Γραμμή 8.000:
 
}
 
}
 
}
 
}
+
 
 
// addRule: add one rule at the time using DOM method, very slow
 
// addRule: add one rule at the time using DOM method, very slow
+
 
 
// IE
 
// IE
 
this.addRule = function(selector, declaration) {
 
this.addRule = function(selector, declaration) {
Γραμμή 8.009: Γραμμή 8.008:
 
this.styleElement.addRule(selector, declaration);
 
this.styleElement.addRule(selector, declaration);
 
}
 
}
+
 
 
// standards compliant browsers
 
// standards compliant browsers
 
else {
 
else {
Γραμμή 8.019: Γραμμή 8.018:
 
}
 
}
 
};
 
};
+
 
 
// addRules: add all rules at once, much faster
 
// addRules: add all rules at once, much faster
 
this.addRules = function(rules) {
 
this.addRules = function(rules) {
Γραμμή 8.026: Γραμμή 8.025:
 
}
 
}
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdAjaxRequest: cross browser wrapper for Ajax requests (code copied to wikEdDiff.js)
 
// WikEdAjaxRequest: cross browser wrapper for Ajax requests (code copied to wikEdDiff.js)
 
//
 
//
+
 
 
window.WikEdAjaxRequest = function(requestMethod, requestUrl, headerName, headerValue, bodyData, overrideMimeType, responseHandler) {
 
window.WikEdAjaxRequest = function(requestMethod, requestUrl, headerName, headerValue, bodyData, overrideMimeType, responseHandler) {
+
 
 
var request;
 
var request;
+
 
// use Greasemonkey GM_xmlhttpRequest
 
// use Greasemonkey GM_xmlhttpRequest
 
if (wikEdGreasemonkey == true) {
 
if (wikEdGreasemonkey == true) {
+
 
 
var headerArray = { 'User-Agent': navigator.userAgent }
 
var headerArray = { 'User-Agent': navigator.userAgent }
 
if (headerName != null) {
 
if (headerName != null) {
Γραμμή 8.058: Γραμμή 8.057:
 
});
 
});
 
}
 
}
+
 
 
// use standard XMLHttpRequest
 
// use standard XMLHttpRequest
 
else {
 
else {
+
 
 
// allow ajax request from local copy for testing
 
// allow ajax request from local copy for testing
 
if (wikEdAllowLocalAjax == true) {
 
if (wikEdAllowLocalAjax == true) {
Γραμμή 8.068: Γραμμή 8.067:
 
}
 
}
 
}
 
}
+
 
 
// new ajax request object
 
// new ajax request object
 
  try {
 
  try {
 
request = new XMLHttpRequest();
 
request = new XMLHttpRequest();
 
}
 
}
+
 
 
// IE 6
 
// IE 6
 
catch(err) {
 
catch(err) {
Γραμμή 8.079: Γραμμή 8.078:
 
request = new ActiveXObject('Microsoft.XMLHTTP');
 
request = new ActiveXObject('Microsoft.XMLHTTP');
 
}
 
}
+
 
 
// IE 5.5
 
// IE 5.5
 
catch(err) {
 
catch(err) {
Γραμμή 8.108: Γραμμή 8.107:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdGetGlobal: access values of global variables from Greasemonkey scripts using the 'location hack' (code copied to wikEdDiff.js)
 
// WikEdGetGlobal: access values of global variables from Greasemonkey scripts using the 'location hack' (code copied to wikEdDiff.js)
 
//
 
//
+
 
 
window.WikEdGetGlobal = function(globalName) {
 
window.WikEdGetGlobal = function(globalName) {
 
var globalValue;
 
var globalValue;
Γραμμή 8.138: Γραμμή 8.137:
 
return(globalValue);
 
return(globalValue);
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdDebug: print the value of variables
 
// WikEdDebug: print the value of variables
Γραμμή 8.145: Γραμμή 8.144:
 
//  popup = true: use alert popup if debug textarea is not yet setup
 
//  popup = true: use alert popup if debug textarea is not yet setup
 
//
 
//
+
 
 
window.WikEdDebug = function(objectName, object, popup) {
 
window.WikEdDebug = function(objectName, object, popup) {
+
 
 
var useDebug;
 
var useDebug;
 
if (typeof(wikEdDebug) != 'undefined') {
 
if (typeof(wikEdDebug) != 'undefined') {
Γραμμή 8.180: Γραμμή 8.179:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdDebugTimer: show all measured timepoints
 
// WikEdDebugTimer: show all measured timepoints
 
//  add a new time measurement: wikEdDebugTimer.push([1234, new Date]);
 
//  add a new time measurement: wikEdDebugTimer.push([1234, new Date]);
+
 
 
window.WikEdDebugTimer = function() {
 
window.WikEdDebugTimer = function() {
 
var times = '';
 
var times = '';
Γραμμή 8.198: Γραμμή 8.197:
 
WikEdDebug(times);
 
WikEdDebug(times);
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdInsertTags: overrides the insertTags function in wikibits.js used by the standard button toolbar and the editpage special chars
 
// WikEdInsertTags: overrides the insertTags function in wikibits.js used by the standard button toolbar and the editpage special chars
 
//
 
//
+
 
 
window.WikEdInsertTags = function(tagOpen, tagClose, sampleText) {
 
window.WikEdInsertTags = function(tagOpen, tagClose, sampleText) {
+
 
 
if (wikEdUseWikEd == true) {
 
if (wikEdUseWikEd == true) {
 
WikEdEditButton(document.getElementById('wikEdInsertTags'), 'wikEdInsertTags', [tagOpen, tagClose, sampleText]);
 
WikEdEditButton(document.getElementById('wikEdInsertTags'), 'wikEdInsertTags', [tagOpen, tagClose, sampleText]);
Γραμμή 8.214: Γραμμή 8.213:
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// WikEdInitUnicode: define character tables used in WikedFixUnicode()
 
// WikEdInitUnicode: define character tables used in WikedFixUnicode()
 
//  see http://kmi.open.ac.uk/projects/ceryle/doc/docs/NOTE-charents.html
 
//  see http://kmi.open.ac.uk/projects/ceryle/doc/docs/NOTE-charents.html
 
//  removed because of internal use: < ['003c', 'lt']; > ['003e', 'gt']; & ['0026', 'amp'], ['00a0', 'nbsp']
 
//  removed because of internal use: < ['003c', 'lt']; > ['003e', 'gt']; & ['0026', 'amp'], ['00a0', 'nbsp']
+
 
 
window.WikEdInitUnicode = function() {
 
window.WikEdInitUnicode = function() {
+
 
 
// define only once
 
// define only once
 
if (wikEdSupportedChars != null) {
 
if (wikEdSupportedChars != null) {
 
return;
 
return;
 
}
 
}
+
 
 
// supported chars in Mozilla and IE
 
// supported chars in Mozilla and IE
 
wikEdSupportedChars = [
 
wikEdSupportedChars = [
Γραμμή 8.448: Γραμμή 8.447:
 
['2666', 'diams']  // ♦
 
['2666', 'diams']  // ♦
 
];
 
];
+
 
 
// special chars (spaces and invisible characters)
 
// special chars (spaces and invisible characters)
 
wikEdSpecialChars = [
 
wikEdSpecialChars = [
Γραμμή 8.460: Γραμμή 8.459:
 
['200f', 'rlm']    // ‏ right-to-left mark
 
['200f', 'rlm']    // ‏ right-to-left mark
 
];
 
];
+
 
 
// unsupported chars in IE6
 
// unsupported chars in IE6
 
wikEdProblemChars = [
 
wikEdProblemChars = [
Γραμμή 8.489: Γραμμή 8.488:
 
['232a', 'rang']      // 〉
 
['232a', 'rang']      // 〉
 
];
 
];
+
 
 
// ASCII control characters and invisibles, used for syntax highlighting
 
// ASCII control characters and invisibles, used for syntax highlighting
 
wikEdControlChars = {
 
wikEdControlChars = {
Γραμμή 8.538: Γραμμή 8.537:
 
wikEdControlCharsStr += String.fromCharCode(decimalValue);
 
wikEdControlCharsStr += String.fromCharCode(decimalValue);
 
}
 
}
+
 
 
// strange spaces, used for syntax highlighting
 
// strange spaces, used for syntax highlighting
 
wikEdStrangeSpaces = {
 
wikEdStrangeSpaces = {
Γραμμή 8.546: Γραμμή 8.545:
 
'8201': 'thin space'        // \u2009
 
'8201': 'thin space'        // \u2009
 
};
 
};
+
 
 
return;
 
return;
 
}
 
}
+
 
+
 
 
//
 
//
 
// call wikEd startup
 
// call wikEd startup
 
//
 
//
+
 
 
WikEdStartup();
 
WikEdStartup();
+
 
+
 
 
/* </nowiki></pre> */
 
/* </nowiki></pre> */

Αναθεώρηση της 01:28, 5 Οκτωβρίου 2007

/* P Wiki MN Support by korkakak */

/* Source for wysiwyg editor */
/* <pre><nowiki> */

// version info
window.wikEdProgramVersion = '0.9.44f';
window.wikEdProgramDate    = 'September 24, 2007';

/*

Program description and Greasemonkey metadata

wikEd is a full-featured JavaScript in-browser editor for Wikipedia and other MediaWiki edit pages.
The program works currently ONLY for Mozilla-based browsers (Mozilla, Mozilla Firefox, and Mozilla SeaMonkey)
The code has to be saved as UTF-8 in your editor to preserve Unicode characters like ♥ (heart)

// ==UserScript==
// @name        wikEd
// @namespace   http://en.wikipedia.org/wiki/User:Cacycle/
// @description A full-featured in-browser editor for Wikipedia and other MediaWiki edit pages
// @include     *
// @exclude      
//
// @homepage    http://en.wikipedia.org/wiki/User:Cacycle/wikEd
// @source      http://en.wikipedia.org/wiki/User:Cacycle/wikEd.js
// @author      Cacycle (http://en.wikipedia.org/wiki/User:Cacycle)
// @license     Released into the public domain
// ==/UserScript==

== Installation on a certain MediaWiki wiki (using monobook.js) ==

1. PLEASE DO NOT COPY THE WHOLE PROGRAM (in order to get the frequent updates and bug fixes and to save disk space)
2. See http://en.wikipedia.org/wiki/User:Cacycle/wikEd for more detailed instructions
3. Copy the following short block of code to [[User:YOURUSERNAME/monobook.js]]
4. Click SHIFT-Reload to update to the newest version
5. Optional: customize the program by adding user settings to your monobook.je page

// ---- START wikEd INSTALLATION CODE ----

// install [[User:Cacycle/wikEd]] in-browser text editor
document.write('<script type="text/javascript" src="'
+ 'http://en.wikipedia.org/w/index.php?title=User:Cacycle/wikEd.js'
+ '&action=raw&ctype=text/javascript"></script>');

// ---- END wikEd INSTALLATION CODE ----

== General installation for all MediaWiki wikis (using Greasemonkey) ==

1. Install Greasemonkey for Firefox and SeaMonkey from:
     https://addons.mozilla.org/en-US/firefox/addon/748
2. Install wikEd by opening this address:
     http://en.wikipedia.org/w/index.php?action=raw&ctype=text/javascript&title=User:Cacycle/wikEd.user.js
3. Optional: customize the program by adding user settings to the Greasemonkey customization section below
     (these settings will be overwritten by updates!)

*/

//
// Greasemonkey customization section: add customization settings here
//   example: window.wikEdAutoUpdate = false; window.wikEdAutoUpdateHours = 7 * 24;
//


//
// WikEdInitGlobalsConfigs: initialize user configurable variables
//

window.WikEdInitGlobalConfigs = function() {

// user readable texts, copy changes to http://en.wikipedia.org/wiki/User:Cacycle/wikEd_international_en.js, also defined in wikEdDiff.js
	window.wikEdText = window.wikEdText || [];
	
// WikedInitText: define built-in user interface texts
	window.WikedInitText = function() {
		WikEdInitObject(wikEdText, {
	
// logo
			'wikEdLogo alt':               'wikEd',
			'wikEdLogo title':             'wikEd {wikEdProgramVersion} ({wikEdProgramDate}) Click to disable',
			'wikEdLogo error alt':         'wikEd error',
			'wikEdLogo error title':       'Loading error - wikEd {wikEdProgramVersion} ({wikEdProgramDate}) Click to disable',
			'wikEdLogo browser alt':       '(wikEd)',
			'wikEdLogo browser title':     'Browser not supported - wikEd {wikEdProgramVersion} ({wikEdProgramDate})',
			'wikEdLogo disabled alt':      '(wikEd)',
			'wikEdLogo disabled title':    'Disabled - wikEd {wikEdProgramVersion} ({wikEdProgramDate}) Click to enable',
	
// top jumper
			'wikEdScrollToEdit4 alt':      'Scroll to edit',
			'wikEdScrollToEdit4 title':    'Scroll to edit field',
	
// button bar grip titles
			'wikEdGripFormat title':       'Formatting buttons (click to hide or show)',
			'wikEdGripCustom1 title':      'Custom buttons (click to hide or show)',
			'wikEdGripFind title':         'Find buttons (click to hide or show)',
			'wikEdGripFix title':          'Fixing buttons (click to hide or show)',
			'wikEdGripCustom2 title':      'Custom buttons (click to hide or show)',
			'wikEdGripControl title':      'wikEd control buttons (click to hide or show)',
	
// formatting buttons, top row
			'wikEdUndo alt':               'Undo',
			'wikEdUndo title':             'Undo',
			'wikEdRedo alt':               'Redo',
			'wikEdRedo title':             'Redo',
			'wikEdBold title':             'Bold text',
			'wikEdItalic alt':             'Italic',
			'wikEdItalic title':           'Italic text',
			'wikEdUnderline alt':          'Underline',
			'wikEdUnderline title':        'Underline text',
			'wikEdStrikethrough alt':      'Strikethrough',
			'wikEdStrikethrough title':    'Strikethrough text',
			'wikEdNowiki alt':             'Nowiki',
			'wikEdNowiki title':           'Nowiki markup text',
			'wikEdSuperscript alt':        'Superscript',
			'wikEdSuperscript title':      'Superscript text',
			'wikEdSubscript alt':          'Subscript',
			'wikEdSubscript title':        'Subscript text',
			'wikEdRef alt':                'Ref',
			'wikEdRef title':              'In-text reference',
			'wikEdCase alt':               'Case',
			'wikEdCase title':             'Toggle between lowercase, uppercase first, and uppercase',
			'wikEdRedirect alt':           'Redirect',
			'wikEdRedirect title':         'Create redirect, deletes whole text',
			'wikEdUndoAll alt':            'Undo all',
			'wikEdUndoAll title':          'Undo all changes',
			'wikEdRedoAll alt':            'Redo all',
			'wikEdRedoAll title':          'Redo all changes',
	
// formatting buttons, bottom row
			'wikEdWikiLink alt':           'Link',
			'wikEdWikiLink title':         'Wiki link',
			'wikEdWebLink alt':            'Weblink',
			'wikEdWebLink title':          'External weblink',
			'wikEdHeading alt':            'Heading',
			'wikEdHeading title':          'Increase heading levels (shift-click: decrease)',
			'wikEdBulletList alt':         'Bullet list',
			'wikEdBulletList title':       'Increase bulleted list level (shift-click: decrease)',
			'wikEdNumberList alt':         'Number list',
			'wikEdNumberList title':       'Increase numbered list level (shift-click: decrease)',
			'wikEdIndentList alt':         'Indent list',
			'wikEdIndentList title':       'Increase indention (shift-click: decrease)',
			'wikEdDefinitionList alt':     'Def list',
			'wikEdDefinitionList title':   'Definition list',
			'wikEdImage alt':              'Image',
			'wikEdImage title':            'Image',
			'wikEdTable alt':              'Table',
			'wikEdTable title':            'Table',
			'wikEdReferences alt':         'References',
			'wikEdReferences title':       'References location (shift-click: small Wikipedia style)',
			'wikEdWikify alt':             'Wikify',
			'wikEdWikify title':           'Convert pasted content to wiki code, update highlighting',
			'wikEdTextify alt':            'Textify',
			'wikEdTextify title':          'Convert pasted content to plain text, update highlighting',
	
// find and replace buttons, top row
			'wikEdFindAll alt':            'Find all',
			'wikEdFindAll title':          'Find all matches',
			'wikEdFindPrev alt':           'Find prev',
			'wikEdFindPrev title':         'Find previous match',
			'wikEdFindSelect title':       'Select a previous search or jump to a heading',
			'wikEdFindNext alt':           'Find next',
			'wikEdFindNext title':         'Find next match (shift-click: get selection)',
			'wikEdJumpPrev alt':           'Selected prev',
			'wikEdJumpPrev title':         'Find the selected text backwards',
			'wikEdJumpNext alt':           'Selected next',
			'wikEdJumpNext title':         'Find the selected text forwards',
	
// find and replace buttons, bottom row
			'wikEdReplaceAll alt':         'Replace all',
			'wikEdReplaceAll title':       'Replace all matches in whole text or selection',
			'wikEdReplacePrev alt':        'Replace prev',
			'wikEdReplacePrev title':      'Replace previous match',
			'wikEdReplaceSelect title':    'Select a previous replacement',
			'wikEdReplaceNext alt':        'Replace next (shift-click: get selection)',
			'wikEdReplaceNext title':      'Replace next match',
			'wikEdCaseSensitive alt':      'Case sensitive',
			'wikEdCaseSensitive title':    'Search is case sensitive',
			'wikEdRegExp alt':             'RegExp',
			'wikEdRegExp title':           'Search field is a regular expression',
			'wikEdFindAhead alt':          'Find ahead',
			'wikEdFindAhead title':        'Find ahead as you type (case-insensitive non-regexp search)',
	
// fix buttons, top row
			'wikEdFixBasic alt':           'Fix basic',
			'wikEdFixBasic title':         'Fix blanks and empty lines, also done by other fixing functions',
			'wikEdFixHtml alt':            'Fix html',
			'wikEdFixHtml title':          'Fix html to wikicode',
			'wikEdFixCaps alt':            'Fix caps',
			'wikEdFixCaps title':          'Fix caps in headers and lists',
			'wikEdfixUnicode alt':         'Fix Unicode',
			'wikEdfixUnicode title':       'Fix Unicode character representations',
			'wikEdFixAll alt':             'Fix all',
			'wikEdFixAll title':           'Fix basic, html, capitalization, and Unicode',
			'wikEdFixRegExTypo alt':       'Fix typos',
			'wikEdFixRegExTypo title':     'Fix typos using the AutoWikiBrowser RegExTypoFixer rules',
	
// fix buttons, bottom row
			'wikEdFixDashes alt':          'Fix dashes',
			'wikEdFixDashes title':        'Fix dashes',
			'wikEdFixPunct alt':           'Fix punctuation',
			'wikEdFixPunct title':         'Fix spaces before punctuation',
			'wikEdFixMath alt':            'Fix math',
			'wikEdFixMath title':          'Fix math',
			'wikEdFixChem alt':            'Fix chem',
			'wikEdFixChem title':          'Fix chemical formulas',
			'wikEdFixUnits alt':           'Fix units',
			'wikEdFixUnits title':         'Fix units',
	
// wikEd control buttons, top row
			'wikEdRefHide alt':            'Hide <ref>',
			'wikEdRefHide title':          'Toggle <ref> tag hiding',
			'wikEdTextZoom alt':           'Text zoom',
			'wikEdTextZoom title':         'Text zoom cycling (shift-click: reverse)',
			'wikEdClearHistory alt':       'Clear history',
			'wikEdClearHistory title':     'Clear the find, replace, and summary history',
			'wikEdScrollToPreview alt':    'Scroll to preview',
			'wikEdScrollToPreview title':  'Scroll to preview field',
			'wikEdScrollToEdit alt':       'Scroll to edit',
			'wikEdScrollToEdit title':     'Scroll to edit field',
	
// wikEd control buttons, bottom row
			'wikEdUseWikEd alt':           'Use wikEd',
			'wikEdUseWikEd title':         'Toggle between classic text area and wikEd',
			'wikEdHighlightSyntax alt':    'Syntax',
			'wikEdHighlightSyntax title':  'Toggle automatic syntax highlighting',
			'wikEdSource alt':             'Source',
			'wikEdCloseToolbar title':     'Close the standard non-wikEd toolbar',
			'wikEdCloseToolbar alt':       'Close toolbar',
			'wikEdSource title':           'Show the source code for testing purposes',
			'wikEdUsing alt':              'Using',
			'wikEdUsing title':            'Automatically add \'\'…using wikEd\'\' to summaries',
			'wikEdDiff alt':               'wikEdDiff',
			'wikEdDiff title':             'Toggle automatic improved diff view',
			'wikEdFullScreen alt':         'Fullscreen',
			'wikEdFullScreen title':       'Toggle the fullscreen mode',
	
// summary buttons
			'wikEdClearSummary alt':       'Clear summary',
			'wikEdClearSummary title':     'Clear the summary field',
			'wikEdSummarySelect title':    'Select a previous summary',
			'wikEdPresetSummary': [
				'/*  */ ', 'copyedit', 'reply', 'article created', 'intro rewrite',
				'linkfix', 'fixing typos', 'removing linkspam', 'reverting test',
				'reverting vandalism', 'formatting source text', '{wikEdUsing}'
			],
			'wikEdSummaryUsing':           '…using [[en:User:Cacycle/wikEd|wikEd]]',
			
// button title acceskey 
			'alt-shift':                   'alt-shift-',
	
// submit buttons
			'wikEdLocalPreviewImg alt':    'Preview below',
			'wikEdLocalPreview title':     'Show preview below',
			'wikEdLocalDiffImg alt':       'Changes below',
			'wikEdLocalDiff title':        'Show current changes below',
			'wikEdHelpPageLink':           ' | <a href="http://en.wikipedia.org/wiki/User:Cacycle/wikEd_help" target="helpwindow">wikEd help</a>',
	
// preview and changes buttons, top
			'wikEdClose alt':              'Close',
			'wikEdClose title':            'Close preview box',
			'wikEdScrollToPreview2 alt':   'Scroll to preview',
			'wikEdScrollToPreview2 title': 'Scroll to preview field',
			'wikEdScrollToEdit2 alt':      'Scroll to edit',
			'wikEdScrollToEdit2 title':    'Scroll to edit field',
	
// preview and changes buttons, bottom
			'wikEdClose alt':              'Close',
			'wikEdClose title':            'Close preview box',
			'wikEdScrollToPreview3 alt':   'Scroll to preview',
			'wikEdScrollToPreview3 title': 'Scroll to preview field',
			'wikEdScrollToEdit3 alt':      'Scroll to edit',
			'wikEdScrollToEdit3 title':    'Scroll to edit field',
	
// formatting functions
			'image filename':              'filename',
			'image width':                 'width',
			'table caption':               'caption',
			'table heading':               'heading',
			'table cell':                  'cell',
			'redirect article link':       'article link',
	
// fixing functions
			'External links':              'External links',
			'See also':                    'See also',
			'References':                  'References',
	
// language specific wiki code
			'wikicode Image':              'Image',
			'wikicode Category':           'Category',
			'wikicode Template':           'Template',
			'wikEdReferencesSection':      '\n== References ==\n\n<div class="references-small">\n<references/>\n</div>\n',
	
// shortened button texts
			'shortenedPreview':            'Preview',
			'shortenedChanges':            'Changes',
	
// follow link popup
			'followLink':                  '(Ctrl-click)'
		});
	}
	
// use local copies of images for testing (set to true in local copy of edit page), also defined in wikEdDiff.js
	if (typeof(wikEdUseLocalImages) == 'undefined') { window.wikEdUseLocalImages = false; }
	
// path to local images for testing, also defined in wikEdDiff.js
	window.wikEdImagePathLocal = window.wikEdImagePathLocal || 'file:///D:/wikEd/images/';
	
// path to images, also defined in wikEdDiff.js
	window.wikEdImagePath = window.wikEdImagePath || 'http://upload.wikimedia.org/wikipedia/commons/';
	
// image filenames, also defined in wikEdDiff.js
	window.wikEdImage = window.wikEdImage || [];
	
// WikedInitImage: define built-in image URLs
	window.WikedInitImage = function() {
		WikEdInitImage(wikEdImage, {
			'blank':               '5/51/WikEd_blank.png',
			'bold':                '5/59/WikEd_bold.png',
			'browser':             '0/07/WikEd_disabled.png',
			'bulletList':          '6/62/WikEd_bullet_list.png',
			'case':                'a/aa/WikEd_case.png',
			'caseSensitive':       '0/0d/WikEd_case_sensitive.png',
			'clearHistory':        'c/c8/WikEd_clear_history.png',
			'clearSummary':        '2/2c/WikEd_clear_summary.png',
			'close':               '9/97/WikEd_close.png',
			'closeToolbar':        '1/1d/WikEd_close_toolbar.png',
			'ctrl':                '1/10/WikEd_ctrl.png',
			'definitionList':      'f/f5/WikEd_definition_list.png',
			'diff':                'd/db/WikEd_diff.png',
			'disabled':            '0/07/WikEd_disabled.png',
			'dummy':               'c/c5/WikEd_dummy.png',
			'error':               '3/3e/WikEd_error.png',
			'findAhead':           '3/34/WikEd_find_ahead.png',
			'findAll':             '7/75/WikEd_find_all.png',
			'findNext':            'a/ad/WikEd_find_next.png',
			'findPrev':            'f/f5/WikEd_find_prev.png',
			'fixAll':              '8/86/WikEd_fix_all.png',
			'fixBasic':            '3/30/WikEd_fix_basic.png',
			'fixCaps':             '0/00/WikEd_fix_caps.png',
			'fixUnicode':          'd/d4/WikEd_fix_unicode.png',
			'fixChem':             'e/e7/WikEd_fix_chem.png',
			'fixDash':             'e/e5/WikEd_fix_dash.png',
			'fixHtml':             '0/05/WikEd_fix_html.png',
			'fixMath':             '3/3f/WikEd_fix_math.png',
			'fixPunct':            'd/db/WikEd_fix_punct.png',
			'fixRegExTypo':        '9/94/WikEd_fix_reg-ex-typo.png',
			'fixUnits':            '6/69/WikEd_fix_units.png',
			'textZoom':            '7/71/WikEd_font_size.png',
			'fullScreen':          'd/d3/WikEd_fullscreen.png',
			'getFind':             '9/96/WikEd_get_selection.png',
			'grip':                'a/ad/WikEd_grip.png',
			'heading':             '0/07/WikEd_heading.png',
			'highlightSyntax':     '6/67/WikEd_syntax.png',
			'image':               '3/37/WikEd_image.png',
			'indentList':          '7/7a/WikEd_indent_list.png',
			'italic':              'd/d4/WikEd_italic.png',
			'jumpNext':            '5/54/WikEd_jump_next.png',
			'logo':                '6/67/WikEd_logo.png',
			'nowiki':              '5/5a/WikEd_nowiki.png',
			'numberList':          '3/3b/WikEd_number_list.png',
			'jumpPrev':            'c/c7/WikEd_jump_prev.png',
			'preview':             '3/31/WikEd_preview.png',
			'redirect':            'f/fa/WikEd_redirect.png',
			'redo':                'd/d7/WikEd_redo.png',
			'ref':                 'b/ba/WikEd_ref.png',
			'refHide':             '0/0b/WikEd_ref_hide.png',
			'references':          '6/66/WikEd_references.png',
			'redoAll':             '2/2d/WikEd_redo_all.png',
			'regExp':              '6/6a/WikEd_regexp.png',
			'replaceAll':          '2/2a/WikEd_replace_all.png',
			'replaceNext':         'b/b0/WikEd_replace_next.png',
			'replacePrev':         'a/a1/WikEd_replace_prev.png',
			'scrollToEdit':        '1/13/WikEd_align_top.png',
			'scrollToPreview':     '3/37/WikEd_align_preview.png',
			'scrollToEditDown':    'a/a8/WikEd_align_down.png',
			'scrollToPreviewDown': '5/58/WikEd_align_preview_down.png',
			'source':              '0/02/WikEd_source.png',
			'strikethrough':       '0/06/WikEd_strikethrough.png',
			'subscript':           '9/9e/WikEd_subscript.png',
			'superscript':         'b/bf/WikEd_superscript.png',
			'tab':                 'e/e7/WikEd_tab.png',
			'table':               'b/bd/WikEd_table.png',
			'textify':             'c/cd/WikEd_textify.png',
			'underline':           '2/21/WikEd_underline.png',
			'undo':                'e/e6/WikEd_undo.png',
			'undoAll':             '0/08/WikEd_undo_all.png',
			'unknown':             '8/8a/WikEd_unknown.png',
			'useWikEd':            '6/67/WikEd_logo.png',
			'using':               'e/e0/WikEd_using.png',
			'webLink':             '1/16/WikEd_weblink.png',
			'wikEdDiff':           'c/c6/WikEdDiff.png',
			'wikify':              '9/9f/WikEd_wikify.png',
			'wikiLink':            '2/21/WikEd_wikilink.png'
		});
	}
	
// edit-frame css rules
	window.wikEdFrameCSS = window.wikEdFrameCSS || [];
	
// WikedInitFrameCSS: define built-in edit frame css
	window.WikedInitFrameCSS = function() {
		WikEdInitObject(wikEdFrameCSS, {
	
// frame body
			'.wikedFrameBody':    'background: #FFFFFF; margin: 0px; padding: 0.2em; overflow: -moz-scrollbars-vertical; overflow-x: auto; font-family: monospace;',
	
// syntax highlighting
			'.wikEdBlock':        'background-color: #e8e8e8;',
			'.wikEdBlockTag':     'color: #0000e0;',
			'.wikEdInlineTag':    'color: #0000e0;',
			'.wikEdUnknown':      'background-image: url({wikEdUnknown});',
			'.wikEdSubscript':    'position: relative; top: 0.3em;',
			'.wikEdSuperscript':  'position: relative; top: -0.3em;',
			'.wikEdBold':         'font-weight: bold;',
			'.wikEdRef':          'color: #808080; background-color: #e8e8e8;',
			'.wikEdRefHide':      'color: #c0c0c0;',
			'.wikEdComment':      'background-color: #fff0d0;',
			'.wikEdDel':          'text-decoration: line-through;',
			'.wikEdIns':          'text-decoration: underline;',
			'.wikEdItalic':       'font-style: italic;',
			'.wikEdNowiki':       'background-color: #e8e8e8;',
			'.wikEdRGB':          '',
	
// horizontal rule
			'.wikEdHR':           'background-color: #d0d0d0;',
			'.wikEdHRInline':     'background-color: #d0d0d0;',
	
// wiki code
			'.wikEdWiki':         'color: #0000e0;',
			'.wikEdWikiRedir':    'color: #0000e0; background-color: #ffffff; font-weight: bold;',
			'.wikEdMagic':        'color: #0000e0; background-color: #e0e0e0; font-weight: bold;',
	
// headings
			'.wikEdHeading':      'background-color: #e0e0e0; font-weight: bold;',
			'.wikEdHeadingWp':    'background-color: #d8e0ff; font-weight: bold;',
	
// tables
			'.wikEdTableBlock':   'background-color: #e8e8e8;',
			'.wikEdTableLine':    'background-color: #e8e8e8;',
			'.wikEdTableTag':     'background-color: #e8e8e8; color: #0000e0;',
	
// list
			'.wikEdListBlock':    'background-color: #e8e8e8;',
			'.wikEdListLine':     'background-color: #f0f0f0',
			'.wikEdListTag':      'background-color: #e8e8e8; color: #0000e0; font-weight: bold;',
	
// space-pre
			'.wikEdSpaceBlock':   'background-color: #e8e8e8;',
			'.wikEdSpaceLine':    'background-color: #e8e8e8;',
			'.wikEdSpaceTag':     'color: #0000e0; font-weight: bold;',
	
// wiki links, images, categories, templates
			'.wikEdLinkTag':      'color: #0000e0;',
			'.wikEdLink':         '',
			'.wikEdImage':        'background-color: #d5ffaa;',
			'.wikEdCat':          'background-color: #d0d8ff;',
			'.wikEdTemplTag':     'color: #0000e0;',
			'.wikEdTempl':        'background-color: #e0e8ff;',
	
// interlanguage
			'.wikEdInter':        'color: #000000;',
			'.wikEdLinkInter':    'background-color: #c8c8ff;',
			'.wikEdImageInter':   'background-color: #c8c8ff;',
			'.wikEdCatInter':     'background-color: #c8c8ff;',
			'.wikEdTemplInter':   'background-color: #c8c8ff;',
	
// name
			'.wikEdLinkName':     'color: #f00000; font-weight: bold;',
			'.wikEdImageName':    'color: #000000; font-weight: bold;',
			'.wikEdCatName':      'color: #f00000; font-weight: bold;',
			'.wikEdTemplName':    'color: #f00000; font-weight: bold;',
			'.wikEdURLLink':      'color: #f00000; font-weight: bold;',
	
// links
			'.wikEdHighlightLink': 'text-decoration: none; color: #909090;',
			':hover.wikEdHighlightLink': 'text-decoration: underline; color: #909090;',
	
// pasted html
			'.wikEdPastedHtml':   'background-color: #ffc080;',
	
// text and parameters
			'.wikEdLinkText':     'color: #000000; font-weight: bold;',
			'.wikEdImageParam':   'color: #0000e0;',
			'.wikEdImageCaption': 'color: #000000;',
			'.wikEdCatText':      'color: #000000;',
			'.wikEdTemplText':    'color: #000000;',
			'.wikEdURLText':      'color: #000000; font-weight: bold;',
	
// insert wikicode here
			'.wikEdInsertHere':   'background-color: orange; font-style: italic;',
	
// colors
			'.wikEdColorsLight':  'color: black;',
			'.wikEdColorsDark':   'color: white;',
	
// invisibles, control chars, and strange spaces
			'.wikEdTab':          'white-space: pre; background-image: url({wikEdTab}); background-position: right bottom; background-repeat: no-repeat;',
			'.wikEdTabPlain':     'white-space: pre;',
			'.wikEdCtrl':         'white-space: pre; background-image: url({wikEdCtrl}); background-position: left center; background-repeat: repeat-x; background-color: white;',
			'.wikEdCtrl:before':  'content: \'\u00a0\'',
			'.wikEdBlank':        'white-space: -moz-pre-wrap; background-image: url({wikEdBlank}); background-position: left center; background-repeat: repeat-x; background-color: white;'
		});
	}
	
// main window css rules
	window.wikEdMainCSS = window.wikEdMainCSS || [];
	
// WikedInitMainCSS: define built-in main window css
	window.WikedInitMainCSS = function() {
		WikEdInitObject(wikEdMainCSS, {
	
// combo input box
			'.wikEdCombo':                 'font-size: smaller; padding-left: 0.1em; padding-right: 0.1em; margin: 0 0.1em 0 0.1em; height: 1.6em; vertical-align: bottom;',
	
// wikEd button areas
	
// button bar margins
			'.wikEdButtonBarFormat':       'margin: 0 8px 3px 0; float: left;',
			'.wikEdButtonBarCustom1':      'margin: 0 8px 3px 0; float: left;',
			'.wikEdButtonBarFind':         'margin: 0 8px 3px 0; float: left;',
			'.wikEdButtonBarFix':          'margin: 0 8px 3px 0; float: left;',
			'.wikEdButtonBarCustom2':      'margin: 0 8px 3px 0; float: left;',
			'.wikEdButtonBarControl':      'margin: 0 0 3px 0; float: right;',
			'.wikEdButtonBarPreview':      'margin: 0 0 0.15em 0.6em; float: right;',
			'.wikEdButtonBarPreviewFull':  'margin: -0.2em 0 0 0.6em; float: right;',
			'.wikEdButtonBarPreview2':     'margin: 0.2em 0 0.4em 0; float: right;',
			'.wikEdButtonBarJump':         'margin: 0 0 0 0.6em; float: right;',
	
// button bar inner wrapper: border (hidden: invisible)
			'.wikedButtonBarInnerWrapperVisible':   'border: 1px solid; border-color: #e0e0e0 #808080 #808080 #e0e0e0;',
			'.wikedButtonBarInnerWrapperHidden':    '',
	
// button bar grip wrapper: invisible (hidden: border)
			'.wikedButtonBarGripWrapperVisible':    'float: left;',
			'.wikedButtonBarGripWrapperHidden':     'float: left; border: 1px solid; border-color: #e0e0e0 #808080 #808080 #e0e0e0;',
	
// button bar buttons wrapper: invisible (hidden: border)
			'.wikedButtonBarButtonsWrapperVisible': 'float: left; background: #d4d0cc; ',
			'.wikedButtonBarButtonsWrapperHidden':  'float: left; background: #d4d0cc; border: 1px solid; border-color: #e0e0e0 #808080 #808080 #e0e0e0; z-index: 4;',
	
// button bar grip
			'.wikedButtonBarGrip':         'background: #d4d0cc; padding: 0; background-image: url({wikEdGrip}); background-repeat: repeat-y; cursor: pointer;',
	
// button bar buttons
			'.wikEdButtonsFormat':         'background: #d4d0cc; padding: 2px 2px 0 0px;',
			'.wikEdButtonsCustom1':        'background: #d4d0cc; padding: 2px 2px 0 0px;',
			'.wikEdButtonsFind':           'background: #d4d0cc; padding: 0px 2px 0 0px;',
			'.wikEdButtonsFix':            'background: #d4d0cc; padding: 2px 2px 0 0px;',
			'.wikEdButtonsCustom2':        'background: #d4d0cc; padding: 2px 2px 0 0px;',
			'.wikEdButtonsControl':        'background: #d4d0cc; padding: 2px 2px 0 1px;',
	
			'.wikEdButtonsPreview':        'background: #d4d0cc; padding: 2px; border: 1px solid; border-color: #e0e0e0 #808080 #808080 #e0e0e0;',
			'.wikEdButtonsPreviewFull':    'background: #d4d0cc; padding: 2px; border: 1px solid; border-color: #e0e0e0 #808080 #808080 #e0e0e0;',
			'.wikEdButtonsPreview2':       'background: #d4d0cc; padding: 2px; border: 1px solid; border-color: #e0e0e0 #808080 #808080 #e0e0e0;',
			'.wikEdButtonsJump':           'background: #d4d0cc; padding: 2px; border: 1px solid; border-color: #e0e0e0 #808080 #808080 #e0e0e0;',
	
// wikEd buttons
			'.wikEdButton':                'vertical-align: text-top; font-size: small; text-decoration: underline; margin: 1px 2px; padding: 0; background: #d4d0cc; border: 1px #d4d0cc solid; cursor: pointer;',
			'.wikEdButton:hover':          'background: #e4e0dd; border: 1px outset; cursor: pointer;',
			'.wikEdButton:active':         'background: #e4e0dc; border: 1px inset;  cursor: pointer;',
			'.wikEdButtonSolo':            'vertical-align: text-top; font-size: small; text-decoration: underline; margin: 1px 2px; padding: 0; background: #d4d0cc; border: 1px #d4d0cc solid; cursor: pointer;',
			'.wikEdButtonSolo:hover':      'background: #e4e0dd; border: 1px outset; cursor: pointer;',
			'.wikEdButtonChecked':         'vertical-align: text-top; font-size: small; text-decoration: none; margin: 1px 2px; padding: 0; background: #ccc8c3; border: 1px solid; border-color: black white white black; cursor: pointer;',
			'.wikEdButtonUnchecked':       'vertical-align: text-top; font-size: small; text-decoration: none; margin: 1px 2px; padding: 0; background: #ddd8d3; border: 1px solid; border-color: white black black white; cursor: pointer;',
			'.wikEdButtonPressed':         'vertical-align: text-top; font-size: small; text-decoration: none; margin: 1px 2px; padding: 0; background: #ccc8c3; border: 1px solid; border-color: black white white black; cursor: wait;',
			'.wikEdButtonInactive':        'vertical-align: text-top; font-size: small; text-decoration: underline; margin: 1px 2px; padding: 0; background: #c0c0c0; border: 1px #b0b0b0 solid; cursor: not-allowed',
			'.wikEdLocalPreview':          'vertical-align: top; margin: 0 0.33em 0 0.15em; padding: 0;',
			'.wikEdLocalDiff':             'vertical-align: top; margin: 0 0.33em 0 -0.18em; padding: 0;',
			'.wikEdButtonDummy':           'vertical-align: text-top; margin: 1px 2px; padding: 1px; background: #d4d0cc;',
	
// preview box
			'.wikEdPreviewBoxOuter':       'clear: both; margin: 0; border-width: 1px; border-style: solid; border-color: #808080 #d0d0d0 #d0d0d0 #808080;',
			'.wikEdPreviewBox':            'background-color: #faf8f6; padding: 5px; border-width: 1px; border-style: solid; border-color: #404040 #ffffff #ffffff #404040;',
	
// find field
			'.wikEdFindComboInput':        'position: relative; padding: 0; margin: 0 0.2em; font-style: normal; white-space: nowrap;',
			'#wikEdFindText':              'height: 1.4em; font-family: monospace; padding: 0; margin: 0; position: absolute; width: 170px; left: 0; top: 0; z-index: 2;',
			'#wikEdFindSelect':            'height: 1.5em; font-family: monospace; padding: 0; margin: 0; position: relative; border: none; vertical-align: baseline; z-index: 1;',
	
// replace field
			'.wikEdReplaceComboInput':     'position: relative; padding: 0; margin: 0 0.2em; font-style: normal; white-space: nowrap;',
			'#wikEdReplaceText':           'height: 1.4em; font-family: monospace; padding: 0; margin: 0; position: absolute; width: 170px; left: 0; top: 0; z-index: 2;',
			'#wikEdReplaceSelect':         'height: 1.5em; font-family: monospace; padding: 0; margin: 0; position: relative; border: none; vertical-align: baseline; z-index: 1;',
	
// summary field
			'.wikEdSummaryComboInput':     'position: relative; white-space: nowrap; margin: 0 0 0 0.1em;',
			'.wikEdSummaryText':           'padding: 0; margin: 0; position: absolute; left: 0; top: 0; z-index: 2;',
			'.wikEdSummarySelect':         'border: none; padding: 0; margin: 0; position: relative; vertical-align: middle; z-index: 1;',
	
// space around submit buttons
			'.editButtons':                'margin: 0;',
	
// frame
			'.wikEdFrameOuter':            'width: 100%; margin: 0; border-width: 1px; border-style: solid; border-color: #808080 #d0d0d0 #d0d0d0 #808080;',
			'.wikEdFrameInner':            'padding: 0; border-width: 1px; border-style: solid; border-color: #404040 #ffffff #ffffff #404040;',
			'.wikEdFrame':                 'width: 100%; padding: 0; margin: 0; border: none;',
	
// summary
			'.wikEdSummaryWrapper':        'margin: 0 0 0.4em 0;',
			'.wikEdSummaryWrapperTop':     'margin: 0.1em 0 0.4em 0;',
			'#wpSummaryLabel':             'margin: 0 0.2em 0 0;',
			'.editOptions':                'position: relative; top: 0.1em;',
			'.wikEdClearSummaryForm':      'display: inline;',
			'.wikEdClearSummary':          'vertical-align: middle; margin: 0 0.1em 0 0.5em; padding: 0 0 0.2em 0;',
	
// input wrapper
			'.wikEdInputWrapper':          'z-index: 100; clear: both; margin-top: 0.5em;',
			'.wikEdInputWrapperFull':      'position: fixed; top: 0; left: 0; right: 0; padding: 4px; background: white; z-index: 100;',
	
// other wrappers
			'.wikEdToolbarWrapper':        'margin: 0 0 0.25em 0;',
			'.wikEdDebugWrapper':          'margin: 0 0 0.35em 0;',
			'.wikEdTextareaWrapper':       'margin: 0 0 0.35em 0;',
			'.wikEdFrameWrapper':          'margin: 0 0 0.35em 0;',
			'.wikEdConsoleWrapper':        '',
			'.wikEdButtonsWrapper':        '',
			'.wikEdSummaryInputWrapper':   'display: inline; white-space: nowrap;',
			'.wikEdSummaryOptions':        'display: inline;',
			'.wikEdSubmitWrapper':         'margin: 0 0 0.25em 0;',
			'.wikEdSubmitButtonsWrapper':  '',
			'.wikEdLocalPrevWrapper':      '',
			'.wikEdInsertWrapper':         '',
	
// various
			'.wikEdEditOptions':           'display: inline; vertical-align: baseline; margin-right: 0.75em; white-space: nowrap;',
			'.wikEdEditHelp':              'vertical-align: baseline; margin-right: 0.5em; white-space: nowrap;',
			'#editpage-specialchars':      'clear: both;'
		});
	}
	
// buttons (id, class, popup title, image src, width, height, alt text, click code)
	window.wikEdButton = window.wikEdButton || [];
	
// WikedInitButton: define built-in buttons (id, class, popup title, image src, width, height, alt text, click handler code were obj is the button element)
	window.WikedInitButton = function() {
		WikEdInitObject(wikEdButton, {
	
// format top
			 1: ['wikEdUndo',             'wikEdButtonInactive',  wikEdText['wikEdUndo title'],             wikEdImage['undo'],                '16', '16', wikEdText['wikEdUndo alt'],             'javascript:WikEdEditButton(obj, obj.id);' ],
			 2: ['wikEdRedo',             'wikEdButtonInactive',  wikEdText['wikEdRedo title'],             wikEdImage['redo'],                '16', '16', wikEdText['wikEdRedo alt'],             'javascript:WikEdEditButton(obj, obj.id);' ],
			 3: ['wikEdBold',             'wikEdButton',          wikEdText['wikEdBold title'],             wikEdImage['bold'],                '16', '16', wikEdText['wikEdBold alt'],             'javascript:WikEdEditButton(obj, obj.id);' ],
			 4: ['wikEdItalic',           'wikEdButton',          wikEdText['wikEdItalic title'],           wikEdImage['italic'],              '16', '16', wikEdText['wikEdItalic alt'],           'javascript:WikEdEditButton(obj, obj.id);' ],
			 5: ['wikEdUnderline',        'wikEdButton',          wikEdText['wikEdUnderline title'],        wikEdImage['underline'],           '16', '16', wikEdText['wikEdUnderline alt'],        'javascript:WikEdEditButton(obj, obj.id);' ],
			 6: ['wikEdStrikethrough',    'wikEdButton',          wikEdText['wikEdStrikethrough title'],    wikEdImage['strikethrough'],       '16', '16', wikEdText['wikEdStrikethrough alt'],    'javascript:WikEdEditButton(obj, obj.id);' ],
			 7: ['wikEdNowiki',           'wikEdButton',          wikEdText['wikEdNowiki title'],           wikEdImage['nowiki'],              '16', '16', wikEdText['wikEdNowiki alt'],           'javascript:WikEdEditButton(obj, obj.id);' ],
			 8: ['wikEdSuperscript',      'wikEdButton',          wikEdText['wikEdSuperscript title'],      wikEdImage['superscript'],         '16', '16', wikEdText['wikEdSuperscript alt'],      'javascript:WikEdEditButton(obj, obj.id);' ],
			 9: ['wikEdSubscript',        'wikEdButton',          wikEdText['wikEdSubscript title'],        wikEdImage['subscript'],           '16', '16', wikEdText['wikEdSubscript alt'],        'javascript:WikEdEditButton(obj, obj.id);' ],
			10: ['wikEdRef',              'wikEdButton',          wikEdText['wikEdRef title'],              wikEdImage['ref'],                 '16', '16', wikEdText['wikEdRef alt'],              'javascript:WikEdEditButton(obj, obj.id);' ],
			12: ['wikEdCase',             'wikEdButton',          wikEdText['wikEdCase title'],             wikEdImage['case'],                '16', '16', wikEdText['wikEdCase alt'],             'javascript:WikEdEditButton(obj, obj.id);' ],
			25: ['wikEdRedirect',         'wikEdButton',          wikEdText['wikEdRedirect title'],         wikEdImage['redirect'],            '16', '16', wikEdText['wikEdRedirect alt'],         'javascript:WikEdEditButton(obj, obj.id);' ],
			13: ['wikEdUndoAll',          'wikEdButton',          wikEdText['wikEdUndoAll title'],          wikEdImage['undoAll'],             '16', '16', wikEdText['wikEdUndoAll alt'],          'javascript:WikEdEditButton(obj, obj.id);' ],
			14: ['wikEdRedoAll',          'wikEdButtonInactive',  wikEdText['wikEdRedoAll title'],          wikEdImage['redoAll'],             '16', '16', wikEdText['wikEdRedoAll alt'],          'javascript:WikEdEditButton(obj, obj.id);' ],
	
// format bottom
			15: ['wikEdWikiLink',         'wikEdButton',          wikEdText['wikEdWikiLink title'],         wikEdImage['wikiLink'],            '16', '16', wikEdText['wikEdWikiLink alt'],         'javascript:WikEdEditButton(obj, obj.id);' ],
			16: ['wikEdWebLink',          'wikEdButton',          wikEdText['wikEdWebLink title'],          wikEdImage['webLink'],             '16', '16', wikEdText['wikEdWebLink alt'],          'javascript:WikEdEditButton(obj, obj.id);' ],
			17: ['wikEdHeading',          'wikEdButton',          wikEdText['wikEdHeading title'],          wikEdImage['heading'],             '16', '16', wikEdText['wikEdHeading alt'],          'if (!event.shiftKey) { javascript:WikEdEditButton(obj, \'wikEdIncreaseHeading\'); } else { javascript:WikEdEditButton(obj, \'wikEdDecreaseHeading\'); }' ],
			19: ['wikEdBulletList',       'wikEdButton',          wikEdText['wikEdBulletList title'],       wikEdImage['bulletList'],          '16', '16', wikEdText['wikEdBulletList alt'],       'if (!event.shiftKey) { javascript:WikEdEditButton(obj, \'wikEdIncreaseBulletList\'); } else { javascript:WikEdEditButton(obj, \'wikEdDecreaseBulletList\'); }' ],
			20: ['wikEdNumberList',       'wikEdButton',          wikEdText['wikEdNumberList title'],       wikEdImage['numberList'],          '16', '16', wikEdText['wikEdNumberList alt'],       'if (!event.shiftKey) { javascript:WikEdEditButton(obj, \'wikEdIncreaseNumberList\'); } else { javascript:WikEdEditButton(obj, \'wikEdDecreaseNumberList\'); }' ],
			21: ['wikEdIndentList',       'wikEdButton',          wikEdText['wikEdIndentList title'],       wikEdImage['indentList'],          '16', '16', wikEdText['wikEdIndentList alt'],       'if (!event.shiftKey) { javascript:WikEdEditButton(obj, \'wikEdIncreaseIndentList\'); } else { javascript:WikEdEditButton(obj, \'wikEdDecreaseIndentList\'); }' ],
			22: ['wikEdDefinitionList',   'wikEdButton',          wikEdText['wikEdDefinitionList title'],   wikEdImage['definitionList'],      '16', '16', wikEdText['wikEdDefinitionList alt'],   'javascript:WikEdEditButton(obj, obj.id);' ],
			23: ['wikEdImage',            'wikEdButton',          wikEdText['wikEdImage title'],            wikEdImage['image'],               '16', '16', wikEdText['wikEdImage alt'],            'javascript:WikEdEditButton(obj, obj.id);' ],
			24: ['wikEdTable',            'wikEdButton',          wikEdText['wikEdTable title'],            wikEdImage['table'],               '16', '16', wikEdText['wikEdTable alt'],            'javascript:WikEdEditButton(obj, obj.id);' ],
			11: ['wikEdReferences',       'wikEdButton',          wikEdText['wikEdReferences title'],       wikEdImage['references'],          '16', '16', wikEdText['wikEdReferences alt'],       'if (!event.shiftKey) { javascript:WikEdEditButton(obj, obj.id); } else { javascript:WikEdEditButton(obj, \'wikEdReferencesSection\'); }' ],
			26: ['wikEdWikify',           'wikEdButton',          wikEdText['wikEdWikify title'],           wikEdImage['wikify'],              '16', '16', wikEdText['wikEdWikify alt'],           'javascript:WikEdEditButton(obj, obj.id);' ],
			27: ['wikEdTextify',          'wikEdButton',          wikEdText['wikEdTextify title'],          wikEdImage['textify'],             '16', '16', wikEdText['wikEdTextify alt'],          'javascript:WikEdEditButton(obj, obj.id);' ],
	
// control top
			77: ['wikEdRefHide',          'wikEdButtonUnchecked', wikEdText['wikEdRefHide title'],          wikEdImage['refHide'],             '16', '16', wikEdText['wikEdRefHide alt'],          'javascript:WikEdButton(obj, obj.id, true);' ],
			29: ['wikEdTextZoom',         'wikEdButton',          wikEdText['wikEdTextZoom title'],         wikEdImage['textZoom'],            '16', '16', wikEdText['wikEdTextZoom alt'],         'if (!event.shiftKey) { javascript:WikEdButton(obj, \'wikEdTextZoomDown\'); } else { javascript:WikEdButton(obj, \'wikEdTextZoomUp\'); }' ],
			30: ['wikEdClearHistory',     'wikEdButton',          wikEdText['wikEdClearHistory title'],     wikEdImage['clearHistory'],        '16', '16', wikEdText['wikEdClearHistory alt'],     'javascript:WikEdButton(obj, obj.id);' ],
			31: ['wikEdScrollToPreview',  'wikEdButton',          wikEdText['wikEdScrollToPreview title'],  wikEdImage['scrollToPreviewDown'], '16', '16', wikEdText['wikEdScrollToPreview alt'],  'javascript:WikEdButton(obj, obj.id);' ],
			32: ['wikEdScrollToEdit',     'wikEdButton',          wikEdText['wikEdScrollToEdit title'],     wikEdImage['scrollToEditDown'],    '16', '16', wikEdText['wikEdScrollToEdit alt'],     'javascript:WikEdButton(obj, obj.id);' ],
	
// control bottom
			33: ['wikEdUseWikEd',         'wikEdButtonChecked',   wikEdText['wikEdUseWikEd title'],         wikEdImage['useWikEd'],            '16', '16', wikEdText['wikEdUseWikEd alt'],         'javascript:WikEdButton(obj, obj.id, true);' ],
			34: ['wikEdHighlightSyntax',  'wikEdButtonUnchecked', wikEdText['wikEdHighlightSyntax title'],  wikEdImage['highlightSyntax'],     '16', '16', wikEdText['wikEdHighlightSyntax alt'],  'javascript:WikEdButton(obj, obj.id, true);' ],
			35: ['wikEdSource',           'wikEdButton',          wikEdText['wikEdSource title'],           wikEdImage['source'],              '16', '16', wikEdText['wikEdSource alt'],           'javascript:WikEdEditButton(obj, obj.id);' ],
			75: ['wikEdCloseToolbar',     'wikEdButtonUnchecked', wikEdText['wikEdCloseToolbar title'],     wikEdImage['closeToolbar'],        '16', '16', wikEdText['wikEdCloseToolbar alt'],     'javascript:WikEdButton(obj, obj.id, true);' ],
			36: ['wikEdUsing',            'wikEdButtonUnchecked', wikEdText['wikEdUsing title'],            wikEdImage['using'],               '16', '16', wikEdText['wikEdUsing alt'],            'javascript:WikEdButton(obj, obj.id, true);' ],
			37: ['wikEdFullScreen',       'wikEdButtonUnchecked', wikEdText['wikEdFullScreen title'],       wikEdImage['fullScreen'],          '16', '16', wikEdText['wikEdFullScreen alt'],       'javascript:WikEdButton(obj, obj.id, true);' ],
	
// find top
			39: ['wikEdFindAll',          'wikEdButton',          wikEdText['wikEdFindAll title'],          wikEdImage['findAll'],             '16', '16', wikEdText['wikEdFindAll alt'],          'javascript:WikEdEditButton(obj, obj.id);' ],
			40: ['wikEdFindPrev',         'wikEdButton',          wikEdText['wikEdFindPrev title'],         wikEdImage['findPrev'],            '16', '16', wikEdText['wikEdFindPrev alt'],         'javascript:WikEdEditButton(obj, obj.id);' ],
			41: ['wikEdFindNext',         'wikEdButton',          wikEdText['wikEdFindNext title'],         wikEdImage['findNext'],            '16', '16', wikEdText['wikEdFindNext alt'],         'if (event.shiftKey) { javascript:WikEdEditButton(obj, obj.id, \'shift\'); } else { javascript:WikEdEditButton(obj, obj.id); }' ],
			43: ['wikEdJumpPrev',         'wikEdButton',          wikEdText['wikEdJumpPrev title'],         wikEdImage['jumpPrev'],            '16', '16', wikEdText['wikEdJumpPrev alt'],         'javascript:WikEdEditButton(obj, obj.id);' ],
			44: ['wikEdJumpNext',         'wikEdButton',          wikEdText['wikEdJumpNext title'],         wikEdImage['jumpNext'],            '16', '16', wikEdText['wikEdJumpNext alt'],         'javascript:WikEdEditButton(obj, obj.id);' ],
	
// find bottom
			46: ['wikEdReplaceAll',       'wikEdButton',          wikEdText['wikEdReplaceAll title'],       wikEdImage['replaceAll'],          '16', '16', wikEdText['wikEdReplaceAll alt'],       'javascript:WikEdEditButton(obj, obj.id);' ],
			47: ['wikEdReplacePrev',      'wikEdButton',          wikEdText['wikEdReplacePrev title'],      wikEdImage['replacePrev'],         '16', '16', wikEdText['wikEdReplacePrev alt'],      'javascript:WikEdEditButton(obj, obj.id);' ],
			48: ['wikEdReplaceNext',      'wikEdButton',          wikEdText['wikEdReplaceNext title'],      wikEdImage['replaceNext'],         '16', '16', wikEdText['wikEdReplaceNext alt'],      'if (event.shiftKey) { javascript:WikEdEditButton(obj, obj.id, \'shift\'); } else { javascript:WikEdEditButton(obj, obj.id); }' ],
			49: ['wikEdCaseSensitive',    'wikEdButtonUnchecked', wikEdText['wikEdCaseSensitive title'],    wikEdImage['caseSensitive'],       '16', '16', wikEdText['wikEdCaseSensitive alt'],    'javascript:WikEdButton(obj, obj.id, true);' ],
			50: ['wikEdRegExp',           'wikEdButtonUnchecked', wikEdText['wikEdRegExp title'],           wikEdImage['regExp'],              '16', '16', wikEdText['wikEdRegExp alt'],           'javascript:WikEdButton(obj, obj.id, true);' ],
			51: ['wikEdFindAhead',        'wikEdButtonUnchecked', wikEdText['wikEdFindAhead title'],        wikEdImage['findAhead'],           '16', '16', wikEdText['wikEdFindAhead alt'],        'javascript:WikEdButton(obj, obj.id, true);' ],
	
// fix top
			52: ['wikEdFixBasic',         'wikEdButton',          wikEdText['wikEdFixBasic title'],         wikEdImage['fixBasic'],            '16', '16', wikEdText['wikEdFixBasic alt'],         'javascript:WikEdEditButton(obj, obj.id);' ],
			53: ['wikEdFixHtml',          'wikEdButton',          wikEdText['wikEdFixHtml title'],          wikEdImage['fixHtml'],             '16', '16', wikEdText['wikEdFixHtml alt'],          'javascript:WikEdEditButton(obj, obj.id);' ],
			54: ['wikEdFixCaps',          'wikEdButton',          wikEdText['wikEdFixCaps title'],          wikEdImage['fixCaps'],             '16', '16', wikEdText['wikEdFixCaps alt'],          'javascript:WikEdEditButton(obj, obj.id);' ],
			55: ['wikEdfixUnicode',       'wikEdButton',          wikEdText['wikEdfixUnicode title'],       wikEdImage['fixUnicode'],          '16', '16', wikEdText['wikEdfixUnicode alt'],       'javascript:WikEdEditButton(obj, obj.id);' ],
			56: ['wikEdFixAll',           'wikEdButton',          wikEdText['wikEdFixAll title'],           wikEdImage['fixAll'],              '16', '16', wikEdText['wikEdFixAll alt'],           'javascript:WikEdEditButton(obj, obj.id);' ],
			57: ['wikEdFixRegExTypo',     'wikEdButton',          wikEdText['wikEdFixRegExTypo title'],     wikEdImage['fixRegExTypo'],        '16', '16', wikEdText['wikEdFixRegExTypo alt'],     'javascript:WikEdEditButton(obj, obj.id);' ],
	
// fix bottom
			58: ['wikEdFixDashes',        'wikEdButton',          wikEdText['wikEdFixDashes title'],        wikEdImage['fixDash'],             '16', '16', wikEdText['wikEdFixDashes alt'],        'javascript:WikEdEditButton(obj, obj.id);' ],
			59: ['wikEdFixPunct',         'wikEdButton',          wikEdText['wikEdFixPunct title'],         wikEdImage['fixPunct'],            '16', '16', wikEdText['wikEdFixPunct alt'],         'javascript:WikEdEditButton(obj, obj.id);' ],
			60: ['wikEdFixMath',          'wikEdButton',          wikEdText['wikEdFixMath title'],          wikEdImage['fixMath'],             '16', '16', wikEdText['wikEdFixMath alt'],          'javascript:WikEdEditButton(obj, obj.id);' ],
			61: ['wikEdFixChem',          'wikEdButton',          wikEdText['wikEdFixChem title'],          wikEdImage['fixChem'],             '16', '16', wikEdText['wikEdFixChem alt'],          'javascript:WikEdEditButton(obj, obj.id);' ],
			62: ['wikEdFixUnits',         'wikEdButton',          wikEdText['wikEdFixUnits title'],         wikEdImage['fixUnits'],            '16', '16', wikEdText['wikEdFixUnits alt'],         'javascript:WikEdEditButton(obj, obj.id);' ],
	
// preview top
			65: ['wikEdClose',            'wikEdButton',          wikEdText['wikEdClose title'],            wikEdImage['close'],               '16', '16', wikEdText['wikEdClose alt'],            'javascript:WikEdButton(obj, obj.id);' ],
			66: ['wikEdScrollToPreview2', 'wikEdButton',          wikEdText['wikEdScrollToPreview2 title'], wikEdImage['scrollToPreviewDown'], '16', '16', wikEdText['wikEdScrollToPreview2 alt'], 'javascript:WikEdButton(obj, obj.id);' ],
			67: ['wikEdScrollToEdit2',    'wikEdButton',          wikEdText['wikEdScrollToEdit2 title'],    wikEdImage['scrollToEdit'],        '16', '16', wikEdText['wikEdScrollToEdit2 alt'],    'javascript:WikEdButton(obj, obj.id);' ],
	
// preview bottom
			70: ['wikEdClose2',           'wikEdButton',          wikEdText['wikEdClose2 title'],           wikEdImage['close'],               '16', '16', wikEdText['wikEdClose2 alt'],           'javascript:WikEdButton(obj, obj.id);' ],
			71: ['wikEdScrollToPreview3', 'wikEdButton',          wikEdText['wikEdScrollToPreview3 title'], wikEdImage['scrollToPreview'],     '16', '16', wikEdText['wikEdScrollToPreview3 alt'], 'javascript:WikEdButton(obj, obj.id);' ],
			72: ['wikEdScrollToEdit3',    'wikEdButton',          wikEdText['wikEdScrollToEdit3 title'],    wikEdImage['scrollToEdit'],        '16', '16', wikEdText['wikEdScrollToEdit3 alt'],    'javascript:WikEdButton(obj, obj.id);' ],
	
// jump
			78: ['wikEdDiff',             'wikEdButtonUnchecked', wikEdText['wikEdDiff title'],             wikEdImage['wikEdDiff'],           '16', '16', wikEdText['wikEdDiff alt'],             'javascript:WikEdButton(obj, obj.id, true);' ],
			74: ['wikEdScrollToEdit4',    'wikEdButtonSolo',      wikEdText['wikEdScrollToEdit4 title'],    wikEdImage['scrollToEditDown'],    '16', '16', wikEdText['wikEdScrollToEdit4 alt'],    'javascript:WikEdButton(obj, obj.id);' ],
	
// dummy
			76: ['wikEdDummy',            'wikEdButtonDummy',     '',                                       wikEdImage['dummy'],               '16', '16', '',                                     '' ]
		});
	}
	
// button access keys
	window.wikEdButtonKey = window.wikEdButtonKey || [];
	
// WikedInitButtonKey: define accesskeys for edit buttons (wikEd button number: key string, JS key code)
	window.WikedInitButtonKey = function() {
		WikEdInitObject(wikEdButtonKey, {
			26: ['b', 66], // wikify
			27: ['o', 79], // textify
			67: ['g', 71], // scrolltoedit2
			72: ['g', 71], // scrolltoedit3
			74: ['g', 71], // scrolltoedit4
			32: ['g', 71]  // scrolltoedit, overwrites previous wikEd buttons for same key
		});
	}
	
// button bars (id, class, button numbers)
	window.wikEdButtonBar = window.wikEdButtonBar || [];
	
// WikedInitButtonBar: define built-in button bars (id outer, class outer, id inner, class inner, height, grip title, button numbers)
	window.WikedInitButtonBar = function() {
		WikEdInitObject(wikEdButtonBar, {
			'format':    ['wikEdButtonBarFormat',    'wikEdButtonBarFormat',    'wikEdButtonsFormat',    'wikEdButtonsFormat',    44, wikEdText['wikEdGripFormat title'],  [1,2,3,4,5,6,7,8,9,10,12,13,14,'br',15,16,17,19,20,21,22,23,24,11,25,26,27] ],
			'custom1':   ['wikEdButtonBarCustom1',   'wikEdButtonBarCustom1',   'wikEdButtonsCustom1',   'wikEdButtonsCustom1',   44, wikEdText['wikEdGripCustom1 title'], [ ] ],
			'find':      ['wikEdButtonBarFind',      'wikEdButtonBarFind',      'wikEdButtonsFind',      'wikEdButtonsFind',      44, wikEdText['wikEdGripFind title'],    [39,40,'find',41,76,43,44,'br',46,47,'replace',48,49,50,51] ],
			'fix':       ['wikEdButtonBarFix',       'wikEdButtonBarFix',       'wikEdButtonsFix',       'wikEdButtonsFix',       44, wikEdText['wikEdGripFix title'],     [52,53,54,55,56,57,'br',58,59,60,61,62] ],
			'custom2':   ['wikEdButtonBarCustom2',   'wikEdButtonBarCustom2',   'wikEdButtonsCustom2',   'wikEdButtonsCustom2',   44, wikEdText['wikEdGripCustom2 title'], [ ] ],
			'control':   ['wikEdButtonBarControl',   'wikEdButtonBarControl',   'wikEdButtonsControl',   'wikEdButtonsControl',   44, wikEdText['wikEdGripControl title'], [77,29,30,31,32,'br',33,34,35,75,36,78,37] ],
			'preview':   ['wikEdButtonBarPreview',   'wikEdButtonBarPreview',   'wikEdButtonsPreview',   'wikEdButtonsPreview',    0, null,                                [66,67,65] ],
			'preview2':  ['wikEdButtonBarPreview2',  'wikEdButtonBarPreview2',  'wikEdButtonsPreview2',  'wikEdButtonsPreview2',   0, null,                                [71,72,70] ],
			'jump':      ['wikEdButtonBarJump',      'wikEdButtonBarJump',      'wikEdButtonsJump',      'wikEdButtonsJump',       0, null,                                [74] ]
		});
	}
	
// history length for find, replace, and summary fields
	window.wikEdHistoryLength = window.wikEdHistoryLength || [];
	wikEdHistoryLength['find'] = 10;
	wikEdHistoryLength['replace'] = 10;
	wikEdHistoryLength['summary'] = 10;
	
// presets for combo input fields dropdown options, {wikEdUsing} appends a link to this script
	window.wikEdComboPresetOptions = window.wikEdComboPresetOptions || [];
	wikEdComboPresetOptions['summary'] = window.wikEdComboPresetOptions['summary'] || wikEdText['wikEdPresetSummary'];
	
// text for summary link to this script
	window.wikEdSummaryUsing = window.wikEdSummaryUsing || wikEdText['wikEdSummaryUsing'];
	
// expiration time span for permanent cookies in seconds
	window.wikEdCookieExpireSec = window.wikEdCookieExpireSec || (30 * 24 * 60 * 60);
	
// find ahead as you type checkbox preset
	if (typeof(wikEdHighlightSyntaxPreset) == 'undefined') { window.wikEdFindAheadSelected = true; }
	
// highlight syntax preset
	window.wikEdHighlightSyntaxPreset = window.wikEdHighlightSyntaxPreset || true;
	
// enable wikEd preset
	if (typeof(wikEdUseWikEdPreset) == 'undefined') { window.wikEdUseWikEdPreset = true; }
	
// add '...using wikEd' to summary preset (set to true by single-session saved setting wikEdSummaryUsing)
	if (typeof(wikEdUsingPreset) == 'undefined') { window.wikEdUsingPreset = false; }
	
// wikEdDiff preset
	if (typeof(wikEdDiffPreset) == 'undefined') { window.wikEdDiffPreset = false; }
	
// fullscreen mode preset
	if (typeof(wikEdFullScreenModePreset) == 'undefined') { window.wikEdFullScreenModePreset = false; }
	
// show MediaWiki toolbar preset
	if (typeof(wikEdCloseToolbarPreset) == 'undefined') { window.wikEdCloseToolbarPreset = false; }
	
// hide ref tags preset
	if (typeof(wikEdRefHidePreset) == 'undefined') { window.wikEdRefHidePreset = false; }
	
// initial text zoom for edit window (percentage)
	window.wikEdTextZoom = window.wikEdTextZoom || 100;
	
// remove invisible syntax highlighting comments after closing tag
	if (typeof(wikEdRemoveHighlightComments) == 'undefined') { window.wikEdRemoveHighlightComments = true; }
	
// show the text-to-source button for testing purposes
	if (typeof(wikEdShowSourceButton) == 'undefined') { window.wikEdShowSourceButton = false; }
	
// show the using-wiked button
	if (typeof(wikEdShowUsingButton) == 'undefined') { window.wikEdShowUsingButton = false; }
	
// the wikEd help page link to be displayed after the editing help link, an empty string disables the link
	window.wikEdHelpPageLink = window.wikEdHelpPageLink || wikEdText['wikEdHelpPageLink'];
	
// display the wikEd button bars on top of the edit box
	if (typeof(wikEdButtonsOnTop) == 'undefined') { window.wikEdButtonsOnTop = true; }
	
// enable external diff script
	if (typeof(wikEdLoadDiffScript) == 'undefined') { window.wikEdLoadDiffScript = true; }
	
// diff script URL
	window.wikEdDiffScriptSrc = window.wikEdDiffScriptSrc || 'http://en.wikipedia.org/w/index.php?title=User:Cacycle/diff.js&action=raw&ctype=text/javascript';
	
// enable external wikEdDiff script
	if (typeof(wikEdLoadDiff) == 'undefined') { window.wikEdLoadDiff = true; }
	
// wikEdDiff script URL, also defined in wikEdDiff.js
	window.wikEdDiffSrc = window.wikEdDiffSrc || 'http://en.wikipedia.org/w/index.php?title=User:Cacycle/wikEdDiff.js&action=raw&ctype=text/javascript';
	
// enable external InstaView script
	if (typeof(wikEdLoadInstaView) == 'undefined') { window.wikEdLoadInstaView = true; }
	
// InstaView script URL
	window.wikEdInstaViewSrc = window.wikEdInstaViewSrc || 'http://en.wikipedia.org/w/index.php?title=User:Pilaf/include/instaview.js&action=raw&ctype=text/javascript';
	
// RegExTypoFix rules page, the address must have the exact same domain name as the used wiki
	window.wikEdRegExTypoFixURL = window.wikEdRegExTypoFixURL || 'http://en.wikipedia.org/w/index.php?title=Wikipedia:AutoWikiBrowser/Typos&action=raw';
	
// enable RegExTypoFix button (http://en.wikipedia.org/wiki/User:Mboverload/RegExTypoFix)
	if (typeof(wikEdRegExTypoFix) == 'undefined') { window.wikEdRegExTypoFix = false; }
	if (typeof(wikEdLoadRegExTypoFix) == 'boolean') { window.wikEdRegExTypoFix = window.wikEdLoadRegExTypoFix; }
	
// enable highlighting as links
	if (typeof(wikEdFollowHighlightedLinks) == 'undefined') { window.wikEdFollowHighlightedLinks = false; }
	
// skip the browser detection to run wikEd under IE and Opera
	if (typeof(wikEdSkipBrowserTest) == 'undefined') { window.wikEdSkipBrowserTest = false; }
	
// set the button bar grip width in px
	window.wikEdButtonBarGripWidth = window.wikEdButtonBarGripWidth || 8;
	
// enable local preview (Pilaf's InstaView)
	if (typeof(wikEdUseLocalPreview) == 'undefined') { window.wikEdUseLocalPreview = true; }
	
// allow ajax requests from local copy for testing, also defined in wikEdDiff.js
	if (typeof(wikEdAllowLocalAjax) == 'undefined') { window.wikEdAllowLocalAjax = false; }
	
// enable server preview (Ajax)
	if (typeof(wikEdUseAjaxPreview) == 'undefined') { window.wikEdUseAjaxPreview = true; }
	
// enable auto update (Ajax)
	if (typeof(wikEdAutoUpdate) == 'undefined') { window.wikEdAutoUpdate = true; }
	
// hours between update check (monobook.js)
	window.wikEdAutoUpdateHours = window.wikEdAutoUpdateHours || 20;
	
// hours between update check (Greasemonkey)
	window.wikEdAutoUpdateHoursGM = window.wikEdAutoUpdateHoursGM || 40;
	
// auto update: version url (Ajax)
	window.wikEdAutoUpdateUrl = window.wikEdAutoUpdateUrl || 'http://en.wikipedia.org/w/index.php?title=User:Cacycle/wikEd_current_version&action=raw&maxage=0';

// auto update: script url for Greasemonkey update
	window.wikEdAutoUpdateScriptUrl = window.wikEdAutoUpdateScriptUrl || 'http://en.wikipedia.org/w/index.php?action=raw&ctype=text/javascript&title=User:Cacycle/wikEd.user.js';

// show complete unshortened article text for local diff, also defined in wikEdDiff.js
	if (typeof(wikEdFullDiff) == 'undefined') { window.wikEdFullDiff = false; }
	
// make links ctrl-clickable
	if (typeof(wikEdFollowLinks) == 'undefined') { window.wikEdFollowLinks = true; }
	
// correct tab order between check boxes and submit buttons
	if (typeof(wikEdSubmitTabOrder) == 'undefined') { window.wikEdSubmitTabOrder = false; }

// wikify table parameters, replaces original table parameters with this string
	window.wikEdWikifyTableParameters = window.wikEdWikifyTableParameters || '';
	
	return;
}

//
// end of user configurable variables
//


//
// WikEdInitGlobals: initialize non-configurable variables
//

window.WikEdInitGlobals = function() {

// global variables
	
	window.wikEdTurnedOn = null;
	window.wikEdDisabled = null;
	
// history
	window.wikEdFieldHist = [];
	window.wikEdSavedName = [];
	window.wikEdInputElement = [];
	window.wikEdSelectElement = [];
	
	window.wikEdCheckMarker = [];
	window.wikEdCheckMarker[true] = '♦';
	window.wikEdCheckMarker[false] = '◊';
	
// cache the parsed DOM object
	window.wikEdFrameDOMCache = null;
	
// undo all, redo all
	window.wikEdOrigVersion = '';
	window.wikEdLastVersion = null;
	
// global dom elements
	window.wikEdLogo = null;
	window.wikEdLogoList = null;
	
	window.wikEdDebug = null;
	window.wikEdTextarea = null;
	window.wikEdFrame = null;;
	window.wikEdFrameBody = null;
	window.wikEdFrameDocument = null;
	window.wikEdFrameWindow = null;
	
	window.wikEdInputWrapper = null;
	window.wikEdToolbarWrapper = null;
	window.wikEdDebugWrapper = null;
	window.wikEdTextareaWrapper = null;
	window.wikEdFrameWrapper = null;
	window.wikEdConsoleWrapper = null;
	window.wikEdButtonsWrapper = null;
	window.wikEdSummaryWrapper = null;
	window.wikEdSummaryInputWrapper = null;
	window.wikEdSummaryOptions = null;
	window.wikEdSubmitWrapper = null;
	window.wikEdSubmitButtonsWrapper = null;
	window.wikEdLocalPrevWrapper = null;
	window.wikEdInsertWrapper = null;
	
	window.wikEdButtonBarFormat = null;
	window.wikEdButtonBarCustom1 = null;
	window.wikEdButtonBarFind = null;
	window.wikEdButtonBarFix = null;
	window.wikEdButtonBarCustom2 = null;
	window.wikEdButtonBarControl = null;
	window.wikEdButtonBarPreview = null;
	window.wikEdButtonBarPreview2 = null;
	window.wikEdButtonBarJump = null;
	window.wikEdPreviewBox = null;
	window.wikEdClearSummary = null;
	window.wikEdClearSummaryImg = null;
	
	window.wikEdCaseSensitive = null;
	window.wikEdRegExp = null;
	window.wikEdFindAhead = null;
	
	window.wikEdFindText = null;
	window.wikEdReplaceText = null;
	window.wikEdSummaryText = null;
	window.wikEdSummarySelect = null;
	window.wikEdSummaryTextWidth = null;
	
	window.wikEdEditOptions = null;
	window.wikEdEditHelp = null;
	
	window.wikEdSaveButton = null;
	window.wikEdPreviewButton = null;
	window.wikEdLDiffButton = null;
	window.wikEdLocalPreview = null;
	window.wikEdLocalDiff = null;
	window.wikEdDiffPreviewButton = null;
	window.wikEdSummaryLabel = null;

	window.wikEdGetGlobalNode = null;
	
// various
	window.wikEdEditButtonHandler = {};
	window.wikEdTextareaHeight = null;
	window.wikEdClearSummaryWidth = null;
	window.wikEdFullScreenMode = false;
	window.wikEdInsertTagsOriginal = null;
	window.wikEdAddNewSection = null;
	window.wikEdBrowserNotSupported = null;
	window.wikEdFrameScrollTop = null;
	window.wikEdTextareaUpdated = null;
	window.wikEdPreviewIsAjax = null;
	window.wikEdButtonKeyCode = [];
	window.wikEdFollowLinkIdNo = 0;
	window.wikEdFollowLinkHash = {};
	window.wikEdWikiGlobals = window.wikEdWikiGlobals || [];
	
// wikEd settings
	window.wikEdRefHide = null;
	window.wikEdUsing = null;
	window.wikEdUseWikEd = null;
	window.wikEdCloseToolbar = null;
	window.wikEdHighlightSyntax = null;
	window.wikEdDiff = null;
	
// unicode fixing
	window.wikEdControlCharsStr = '';
	window.wikEdSupportedChars = null;
	window.wikEdSpecialChars = null;
	window.wikEdProblemChars = null;
	window.wikEdControlChars = null;
	window.wikEdStrangeSpaces = null;
	
// RegExTypoFix rules
	window.wikEdTypoRulesFind = [];
	window.wikEdTypoRulesReplace = [];
	
// debugging time measurement, usage: wikEdDebugTimer.push([1234, new Date]); WikEdDebugTimer();
	window.wikEdDebugTimer = [];
	
// MediaWiki file paths for use in regexps
	window.wikEdServer = '';
	window.wikEdArticlePath = '';
	window.wikEdScriptPath = '';
	window.wikEdArticlePrefix = '';
	
// hash of loaded scripts, also defined in wikEdDiff.js
	return;
}

// variables needed during startup
window.wikEdExternalScripts = window.wikEdExternalScripts || [];
window.wikEdStartup = window.wikEdStartup || false;

// check if this is executed under Greasemonkey
window.wikEdGreasemonkey = false;
if (typeof(GM_getValue) == 'function' ) {
	wikEdGreasemonkey = true;
}

//
// WikEdInitObject: initialize object, keep pre-defined values
//

window.WikEdInitObject = function(array, preset) {

	for (var key in preset) {
		if (array[key] == null) {
			array[key] = preset[key];
		}
	}
	return;
}


//
// WikEdInitImage: initialize images, keep pre-defined values
//

window.WikEdInitImage = function(array, preset) {

	for (var key in preset) {
		if (array[key] == null) {

// remove MediaWiki path prefixes and add local path
			if (wikEdUseLocalImages == true) {
				array[key] = wikEdImagePathLocal + preset[key].replace(/^[0-9a-f]+\/[0-9a-f]+\//, '');
			}

// add path
			else {
				array[key] = wikEdImagePath + preset[key];
			}
		}
	}
	return;
}


//
// WikEdStartup: wikEd startup code, called during page load
//

window.WikEdStartup = function() {

// check if this has already been run
	if (window.wikEdStartup == true) {
		return;
	}
	window.wikEdStartup = true;

// redirect WED shortcut to WikEdDebug(objectName, object, popup)
	window.WED = WikEdDebug;

// redirect missing Greasemonkey debugging function to WikEdDebug
	if (wikEdGreasemonkey == false) {
		window.GM_log = window.WikEdDebug;
	}

// schedule the setup routine
	if (window.addEventListener != null) {
		window.addEventListener('load', WikEdSetup, false);
	}
	else if (window.attachEvent != null) {
		window.attachEvent('onload', WikEdSetup);
	}
	else {
		window.onload = WikEdSetup;
	}

	return;
}


//
// WikEdSetup: basic setup routine, scheduled after page load
//

window.WikEdSetup = function() {

// check if this has already been run
	if (document.getElementById('wikEdSetupFlag') != null) {
		return;
	}
	var flag = document.createElement('span');
	flag.id = 'wikEdSetupFlag';
	flag.style.display = 'none';
	flag.style.visibility = 'hidden';
	document.body.appendChild(flag);

// check if this is a MediaWiki page >= v1.4.0
	if (
		(document.getElementById('globalWrapper') == null) ||
		(document.getElementById('column-content') == null) ||
		(document.getElementById('content') == null) ||
		(document.getElementById('bodyContent') == null) ||
		(document.getElementById('siteSub') == null) ||
		(document.getElementById('contentSub') == null)
	) {
		return;
	}

// initialize user configurable variables
	WikEdInitGlobalConfigs();

// initialize non-configurable variables
	WikEdInitGlobals();

// parse global MediaWiki globals into hash
	var variable = ['wgServer', 'wgTitle', 'wgCanonicalNamespace', 'wgArticlePath', 'wgScriptPath', 'wgUserName', 'wgCurRevisionId'];
	for (var i = 0; i < variable.length; i ++) {
		wikEdWikiGlobals[ variable[i] ] = WikEdGetGlobal(variable[i]);
	}

// check for updates
	WikEdAutoUpdate();
	
// initialize texts and images (needed here for logo)
	WikedInitText();
	WikedInitImage();

// add image path to image filename
	if (wikEdLogo == null) {

// insert logo into personal toolbar
		wikEdLogo = document.createElement('img');
		wikEdLogo.id = 'wikEdLogoImg';

		wikEdLogoList = document.createElement('li');
		wikEdLogoList.id = 'wikEdLogoList';
		wikEdLogoList.appendChild(wikEdLogo);

		var personalTools = document.getElementById('p-personal');
		if (personalTools != null) {
			personalTools.getElementsByTagName('ul')[0].appendChild(wikEdLogoList);
		}

// add event listener to logo
		if (window.addEventListener != null) {
			wikEdLogo.addEventListener('click', WikEdMainSwitch, false);
		}
		else {
			wikEdLogo.onclick = WikEdMainSwitch; // IE7 fix
		}
	}

// detect already loaded external scripts
	if (wikEdExternalScripts == null) {
		var pageScripts = document.getElementsByTagName('script');
		for (var i = 0; i < pageScripts.length; i ++) {
			var nameMatch = pageScripts[i].src.match(/\/([^\/]*?)($|\?)/);
			if (nameMatch != null) {
				var scriptName = nameMatch[1];
				if (scriptName != '') {
					wikEdExternalScripts[scriptName] = true;
				}
			}
		}
	}

// load the external diff script
	var head = document.getElementsByTagName('head')[0];
	if ( (wikEdLoadDiffScript == true) && (wikEdExternalScripts['diff.js'] == null) ) {
		if(typeof(WDiffString) == 'undefined') {
			var script = document.createElement('script');
			script.type = 'text/javascript';
			script.src  = wikEdDiffScriptSrc;
			head.appendChild(script);
		}
		wikEdExternalScripts['diff.js'] = true;
	}

// load the external wikEdDiff script
	if ( (wikEdLoadDiff == true) && (wikEdExternalScripts['wikEdDiff.js'] == null) ) {
		if(typeof(WikEdDiff) == 'undefined') {
			var script = document.createElement('script');
			script.type = 'text/javascript';
			script.src  = wikEdDiffSrc;
			head.appendChild(script);
		}
		wikEdExternalScripts['wikEdDiff.js'] = true;
	}

// check if disabled
	var disabled = WikEdGetPersistent('wikEdDisabled');
	if (disabled != '') {
		wikEdDisabled = true;
		wikEdUseWikEd = false;
		WikEdSetLogo();
		return;
	}

// continue setup
	WikEdTurnOn();
	
	return;
}


//
// WikEdTurnOn: continue setup, can be called repeatedly
//

window.WikEdTurnOn = function(scrollToText) {

// check if setup was already run
	if (wikEdTurnedOn == true) {
		return;
	}

// set error logo
	WikEdSetLogo('error');

// at the moment this works only for Mozilla browsers (Mozilla, Mozilla Firefox, Mozilla SeaMonkey)
	if (wikEdSkipBrowserTest != true) {

// no id no wikEd
		if (navigator.appName == null) {
			wikEdBrowserNotSupported = true;
		}
		else {

// check if it is a Netscape descendant
			var origin = navigator.appName.match(/Netscape/i);
			if ( (origin == null) || (origin == '') ) {
				wikEdBrowserNotSupported = true;
			}

// check the generation
			var generation = navigator.appVersion.match(/\d+(\.\d+)/);
			if ( (generation == null) || (generation[0] < 5.0) ) {
				wikEdBrowserNotSupported = true;
			}

// check if it is a Gecko browser
			var geckoDate = navigator.userAgent.match(/\bGecko\/(\d+)/i);
			if (geckoDate != null) {
				if ( (geckoDate[1] != '') && (geckoDate[1] < 20050000) ) {
					wikEdBrowserNotSupported = true;
				}
			}

// check browser and version
			var agent = navigator.userAgent.match(/(Firefox|Netscape|SeaMonkey)\/(\d+\.\d+)/i);
			if (agent != null) {
				var browser = agent[1];
				var version = agent[2];
				if (
					(browser == 'Firefox') && (version < 1.5) ||
					(browser == 'Netscape') && (version < 8.0) ||
					(browser == 'SeaMonkey') && (version < 1.0)
				) {
					wikEdBrowserNotSupported = true;
				}
			}
		}

// browser not supported, set error message
		if (wikEdBrowserNotSupported == true) {
			WikEdSetLogo('browser');
			return;
		}
	}

// check if this is an edit page
	wikEdTextarea = document.getElementsByName('wpTextbox1')[0];
	var wpEditform = document.getElementById('editform');
	wikEdSaveButton = document.getElementById('wpSave');
	if ( (wikEdTextarea == null) || (wpEditform == null) || (wikEdSaveButton == null) ) {

// reset error indicator
		WikEdSetLogo();
		return;
	}

// initialize frame css, main css, buttons, and button bars
	WikedInitFrameCSS();
	WikedInitMainCSS();
	WikedInitButton();
	WikedInitButtonKey();
	WikedInitButtonBar();

// define Unicode characters for fixing function
	WikEdInitUnicode();

// detect if we add a new section (+ tab)
	if (/(\?|&)section=new\b/.test(window.location.search) == true) {
		wikEdAddNewSection = true;
	}

// load the external InstaView script
	var head = document.getElementsByTagName('head')[0];
	if ( (wikEdGreasemonkey == false) && (wikEdLoadInstaView == true) && (wikEdExternalScripts['instaview.js'] == null) ) {
		if (typeof(InstaView) == 'undefined') {
			var script = document.createElement('script');
			script.type = 'text/javascript';
			script.src  = wikEdInstaViewSrc;
			head.appendChild(script);
		}
		
		wikEdExternalScripts['instaview.js'] = true;
	}
	else if ( (wikEdGreasemonkey == false) || (wikEdLoadInstaView != true) ) {
		wikEdUseLocalPreview = false;
	}

// get initial textarea height
	wikEdTextareaHeight = wikEdTextarea.offsetHeight;

// setup the undo buffers and save the original text for local changes view
	wikEdOrigVersion = wikEdTextarea.value;

// add stylesheet definitions
	var mainStyle = new WikEdStyleSheet();
	var rules = '';
	for (var ruleName in wikEdMainCSS) {
		var ruleStyle = wikEdMainCSS[ruleName];
		if (typeof(ruleStyle) != 'string') {
			continue;
		}
		ruleStyle = ruleStyle.replace(/\{wikEdGrip\}/g, wikEdImage['grip']);
		rules += ruleName + ' {' + ruleStyle + '}\n';
	}
	mainStyle.addRules(rules);

// get button settings from saved settings
	wikEdUsing = WikEdGetSavedSetting('wikEdSummaryUsing', wikEdUsingPreset);
	wikEdUseWikEd = WikEdGetSavedSetting('wikEdUseClassic', wikEdUseWikEdPreset);
	wikEdHighlightSyntax = WikEdGetSavedSetting('wikEdSyntaxOff', wikEdHighlightSyntaxPreset);
	wikEdFullScreenMode = WikEdGetSavedSetting('wikEdFullscreen', wikEdFullScreenModePreset);
	wikEdCloseToolbar = WikEdGetSavedSetting('wikEdCloseToolbar', wikEdCloseToolbarPreset);
	wikEdRefHide = WikEdGetSavedSetting('wikEdRefHide', wikEdRefHidePreset);
	wikEdDiff = WikEdGetSavedSetting('wikEdDiff', wikEdDiffPreset);

// no fullscreen for preview pages
	if (window.location.search.match(/(\?|&)action=submit\b/) != null) {
		wikEdFullScreenMode = false;
	}

// disable wikEd for js pages
	if (/\.js$/.test(wikEdWikiGlobals['wgTitle']) == true) {
		if ( (wikEdWikiGlobals['wgCanonicalNamespace'] != 'User_talk') && (wikEdWikiGlobals['wgCanonicalNamespace'] != 'Talk') ) {
			if (wikEdOrigVersion.length > 20000) {
				wikEdUseWikEd = false;
			}
			else {
				wikEdHighlightSyntax = false;
			}
		}
	}

// preset frame related styles to avoid browser crashes
	var styleFrameBody;
	var styleFrameWrapperPosition;
	var styleFrameWrapperVisibility;
	var styleDebugWrapperPosition;
	var styleDebugWrapperVisibility;
	var styleTextareaWrapperPosition;
	var styleTextareaWrapperVisibility;
	if (wikEdUseWikEd == true) {
		styleFrameBody = 'style="display: block;" ';
		styleFrameWrapperPosition = 'static';
		styleFrameWrapperVisibility = 'visible';
		styleTextareaWrapperPosition = 'absolute';
		styleTextareaWrapperVisibility = 'hidden';
	}
	else {
		styleFrameBody = 'style="display: none;" ';
		styleFrameWrapperPosition = 'absolute';
		styleFrameWrapperVisibility = 'hidden';
		styleTextareaWrapperPosition = 'static';
		styleTextareaWrapperVisibility = 'visible';
	}
	var inputWrapperClass;
	if (wikEdFullScreenMode == true) {
		inputWrapperClass = 'wikEdInputWrapperFull';
	}
	else {
		inputWrapperClass = 'wikEdInputWrapper';
	}

// create wikEd element wrappers

// create input wrapper, this contains the whole fullscreen content
	wikEdInputWrapper = document.createElement('div');
	wikEdInputWrapper.id = 'wikEdInputWrapper';
	wikEdInputWrapper.className = inputWrapperClass;
	wikEdTextarea.parentNode.insertBefore(wikEdInputWrapper, wikEdTextarea);

// create toolbar wrapper
	wikEdToolbarWrapper = document.createElement('div');
	wikEdToolbarWrapper.id = 'wikEdToolbarWrapper';
	wikEdToolbarWrapper.className = 'wikEdToolbarWrapper';
	wikEdInputWrapper.appendChild(wikEdToolbarWrapper);

// create debug textarea wrapper
	wikEdDebugWrapper = document.createElement('div');
	wikEdDebugWrapper.id = 'wikEdDebugWrapper';
	wikEdDebugWrapper.className = 'wikEdDebugWrapper';
	wikEdDebugWrapper.style.position = 'static';
	wikEdDebugWrapper.style.visibility = 'hidden';
	wikEdInputWrapper.appendChild(wikEdDebugWrapper);

// create textarea wrapper
	wikEdTextareaWrapper = document.createElement('div');
	wikEdTextareaWrapper.id = 'wikEdTextareaWrapper';
	wikEdTextareaWrapper.className = 'wikEdTextareaWrapper';
	wikEdTextareaWrapper.style.position = styleTextareaWrapperPosition;
	wikEdTextareaWrapper.style.visibility = styleTextareaWrapperVisibility;
	wikEdInputWrapper.appendChild(wikEdTextareaWrapper);

// create frame wrapper
	wikEdFrameWrapper = document.createElement('div');
	wikEdFrameWrapper.id = 'wikEdFrameWrapper';
	wikEdFrameWrapper.className = 'wikEdFrameWrapper';
	wikEdFrameWrapper.style.position = styleFrameWrapperPosition;
	wikEdFrameWrapper.style.visibility = styleFrameWrapperVisibility;
	wikEdInputWrapper.appendChild(wikEdFrameWrapper);

// create console wrapper for buttons, summary, and submit
	wikEdConsoleWrapper = document.createElement('div');
	wikEdConsoleWrapper.id = 'wikEdConsoleWrapper';
	wikEdConsoleWrapper.className = 'wikEdConsoleWrapper';
	wikEdInputWrapper.appendChild(wikEdConsoleWrapper);

// create buttons wrapper for wikEd buttons
	wikEdButtonsWrapper = document.createElement('div');
	wikEdButtonsWrapper.id = 'wikEdButtonsWrapper';
	wikEdButtonsWrapper.className = 'wikEdButtonsWrapper';
	if (wikEdButtonsOnTop == true) {
		wikEdInputWrapper.insertBefore(wikEdButtonsWrapper, wikEdTextareaWrapper);
	}
	else {
		wikEdConsoleWrapper.appendChild(wikEdButtonsWrapper);
	}

// create summary wrapper for summary, minor edit, and watch this page
	wikEdSummaryWrapper = document.createElement('div');
	wikEdSummaryWrapper.id = 'wikEdSummaryWrapper';

// add summary above the edit field if we add a new section (+ tab)
	if (wikEdAddNewSection == true) {
		wikEdSummaryWrapper.className = 'wikEdSummaryWrapperTop';
		wikEdInputWrapper.insertBefore(wikEdSummaryWrapper, wikEdFrameWrapper);
	}
	else {
	wikEdSummaryWrapper.className = 'wikEdSummaryWrapper';
		wikEdConsoleWrapper.appendChild(wikEdSummaryWrapper);
	}

// create summary input wrapper
	wikEdSummaryInputWrapper = document.createElement('div');
	wikEdSummaryInputWrapper.id = 'wikEdSummaryInputWrapper';
	wikEdSummaryInputWrapper.className = 'wikEdSummaryInputWrapper';
	wikEdSummaryWrapper.appendChild(wikEdSummaryInputWrapper);

// create minor edit and watch page wrapper
	wikEdSummaryOptions = document.createElement('div');
	wikEdSummaryOptions.id = 'wikEdSummaryOptions';
	wikEdSummaryOptions.className = 'wikEdSummaryOptions';
	wikEdSummaryWrapper.appendChild(wikEdSummaryOptions);

// create submit wrapper for submit elements
	wikEdSubmitWrapper = document.createElement('div');
	wikEdSubmitWrapper.id = 'wikEdSubmitWrapper';
	wikEdSubmitWrapper.className = 'wikEdSubmitWrapper';
	wikEdConsoleWrapper.appendChild(wikEdSubmitWrapper);

// create submit buttons wrapper for submit buttons and help links
	wikEdSubmitButtonsWrapper = document.createElement('div');
	wikEdSubmitButtonsWrapper.id = 'wikEdSubmitButtonsWrapper';
	wikEdSubmitButtonsWrapper.className = 'wikEdSubmitButtonsWrapper';
	wikEdSubmitWrapper.appendChild(wikEdSubmitButtonsWrapper);

// create preview wrapper for preview and diff box
	wikEdLocalPrevWrapper = document.createElement('div');
	wikEdLocalPrevWrapper.id = 'wikEdLocalPrevWrapper';
	wikEdLocalPrevWrapper.className = 'wikEdLocalPrevWrapper';
	wikEdLocalPrevWrapper.style.display = 'none';
	wikEdInputWrapper.appendChild(wikEdLocalPrevWrapper);

// create insert wrapper for insert special chars links
	wikEdInsertWrapper = document.createElement('div');
	wikEdInsertWrapper.id = 'wikEdInsertWrapper';
	wikEdInsertWrapper.className = 'wikEdInsertWrapper';
	wikEdInputWrapper.appendChild(wikEdInsertWrapper);

// append input wrapper to document
	wpEditform.insertBefore(wikEdInputWrapper, wpEditform.firstChild);

// fill the wrappers

// wikEdDiff enhanced ajax diff
	if (typeof(wikEdDiffTable) == 'object') {
		if ( (wikEdDiffTable != null) && (wikEdDiff == true) ) {
			if (typeof(WikEdDiff) == 'function') {
				WikEdDiff();
			}
		}
	}

// add toolbar to toolbar wrapper
	var wpToolbar = document.getElementById('toolbar');
	if (wikEdCloseToolbar == true) {
		wikEdToolbarWrapper.style.display = 'none';
	}
	else {
		wikEdToolbarWrapper.style.display = 'block';
	}
	if (wpToolbar != null) {
		wikEdToolbarWrapper.appendChild(wpToolbar);
	}

// call wikibits:mwSetupToolbar() now because it would terminate with an error after setting textarea to display: none
	if (wpToolbar != null) {
		if (wpToolbar.getElementsByTagName('IMG').length == 0) {
			if (typeof(mwSetupToolbar) == 'function') {
				mwSetupToolbar();
				window.removeEventListener('load', mwSetupToolbar, false);
			}
		}
	}

	wikEdEditOptions = document.getElementsByName('wpSummary')[0].parentNode;
	wikEdEditOptions.className = 'wikEdEditOptions';

// add summary elements to summary input wrapper
	wikEdSummaryLabel = document.getElementById('wpSummaryLabel');
	if (wikEdSummaryLabel != null) {
		wikEdSummaryInputWrapper.appendChild(wikEdSummaryLabel);
	}

	wikEdSummaryText = document.getElementsByName('wpSummary')[0];
	wikEdSummaryInputWrapper.appendChild(wikEdSummaryText);

// move editpage-copywarn out of summary wrapper
// needs to be done before appending editOptions to summary wrapper otherwise a linebreak stays (Mozilla bug)
	var copywarn = document.getElementById('editpage-copywarn');
	if (copywarn != null) {
		wikEdInputWrapper.parentNode.insertBefore(copywarn, wikEdInputWrapper.nextSibling);
	}

// add submit buttons to submit wrapper
	var wpEditButtons = wikEdSaveButton.parentNode;
	wikEdSubmitWrapper.insertBefore(wpEditButtons, wikEdSubmitButtonsWrapper);

// move edit options after submit buttons; crashes Mozilla when appended after filling the iframe
	var previewButton = document.getElementById('wpDiff');
	previewButton.parentNode.insertBefore(wikEdEditOptions, previewButton.nextSibling);

// remove linebreak before minor edit checkbox
	var node = wikEdEditOptions.firstChild;
	while (node != null) {
		if (node.tagName != null) {
			if (node.tagName == 'BR') {
				node.parentNode.removeChild(node);
				break;
			}
		}
		node = node.nextSibling;
	}

// correct tab order between check boxes and submits
	wikEdPreviewButton = document.getElementById('wpPreview');
	wikEdDiffPreviewButton = document.getElementById('wpDiff');
	if (wikEdSubmitTabOrder == true) {
		var wpMinoredit = document.getElementById('wpMinoredit');
		var wpWatchthis = document.getElementById('wpWatchthis');
		if ( (wpMinoredit != null) && (wpWatchthis != null) ) {
			var tabIndex = [];
			tabIndex.push(wpMinoredit.tabIndex, wpWatchthis.tabIndex, wikEdSaveButton.tabIndex, wikEdPreviewButton.tabIndex, wikEdDiffPreviewButton.tabIndex);
			wikEdSaveButton.tabIndex = tabIndex.shift();
			wikEdPreviewButton.tabIndex = tabIndex.shift();
			wikEdDiffPreviewButton.tabIndex = tabIndex.shift();
			wpMinoredit.tabIndex = tabIndex.shift();
			wpWatchthis.tabIndex = tabIndex.shift();
		}
	}

// create debug textarea and add to debug wrapper
	wikEdDebug = document.createElement('textarea');
	wikEdDebug.rows = 20;
	wikEdDebug.style.display = 'none';
	wikEdDebugWrapper.appendChild(wikEdDebug);

// add textarea to textarea wrapper
	wikEdTextareaWrapper.appendChild(wikEdTextarea);

// add edit-frame to frame wrapper
// any DOM changes to a starting iframe in designmode may crash mozilla, including DOM move, display: none; and position: absolute;

// create the iframe
	var html = '';
	html += '<div id="wikEdFrameOuter" class="wikEdFrameOuter">';
	html += '<div id="wikEdFrameInner" class="wikEdFrameInner">';
	html += '<iframe id="wikEdFrame" class="wikEdFrame" name="wikEdFrame" style="height: ' + wikEdTextareaHeight + 'px;"></iframe>';
	html += '</div>';
	html += '</div>';
	wikEdFrameWrapper.innerHTML = html;
	wikEdInputWrapper.insertBefore(wikEdTextareaWrapper, wikEdFrameWrapper);

// fill the frame with content
	html = '';
	html += '<html><head></head>';
	html += '<body id="wikEdFrameBody" class="wikedFrameBody"' + styleFrameBody + 'onload="window.document.designMode = \'on\'; window.document.execCommand(\'styleWithCSS\', false, false);">';
	html += '</body></html>';

	wikEdFrame = document.getElementById('wikEdFrame');
	wikEdFrameWindow = wikEdFrame.contentWindow;
	wikEdFrameDocument = wikEdFrameWindow.document;
	wikEdFrameDocument.open();
	wikEdFrameDocument.write(html);
	wikEdFrameDocument.close();
	wikEdFrameBody = wikEdFrameDocument.body;

// generate button bars and add them to the buttons wrapper
// form wrapper has been added against summary input submit defaulting to this button
	wikEdButtonBarFormat = MakeButtonBar(wikEdButtonBar['format']);
	wikEdButtonsWrapper.appendChild(wikEdButtonBarFormat);

	wikEdButtonBarControl = MakeButtonBar(wikEdButtonBar['control']);
	wikEdButtonsWrapper.appendChild(wikEdButtonBarControl);

	if (wikEdButtonBar['custom1'][6].length > 0) {
		wikEdButtonBarCustom1 = MakeButtonBar(wikEdButtonBar['custom1']);
		wikEdButtonsWrapper.appendChild(wikEdButtonBarCustom1);
	}

	wikEdButtonBarFind = MakeButtonBar(wikEdButtonBar['find']);
	wikEdButtonsWrapper.appendChild(wikEdButtonBarFind);

	wikEdButtonBarFix = MakeButtonBar(wikEdButtonBar['fix']);
	wikEdButtonsWrapper.appendChild(wikEdButtonBarFix);

	if (wikEdButtonBar['custom2'][6].length > 0) {
		wikEdButtonBarCustom2 = MakeButtonBar(wikEdButtonBar['custom2']);
		wikEdButtonsWrapper.appendChild(wikEdButtonBarCustom2);
	}

	var br = document.createElement('br');
	br.style.clear = 'both';
	wikEdButtonsWrapper.appendChild(br);

	wikEdCaseSensitive = document.getElementById('wikEdCaseSensitive');
	wikEdRegExp = document.getElementById('wikEdRegExp');
	wikEdFindAhead = document.getElementById('wikEdFindAhead');
	wikEdFindText = document.getElementById('wikEdFindText');
	wikEdReplaceText = document.getElementById('wikEdReplaceText');

// add preview box top bar to submit wrapper
	wikEdButtonBarPreview = MakeButtonBar(wikEdButtonBar['preview']);
	wikEdSubmitWrapper.insertBefore(wikEdButtonBarPreview, wikEdSubmitWrapper.firstChild);

// add preview box and its bottom bar to preview wrapper
	var div = document.createElement('div');
	div.id = 'wikEdPreviewBoxOuter';
	div.className = 'wikEdPreviewBoxOuter';
	wikEdLocalPrevWrapper.appendChild(div);

	wikEdPreviewBox = document.createElement('div');
	wikEdPreviewBox.id = 'wikEdPreviewBox';
	wikEdPreviewBox.className = 'wikEdPreviewBox';
	div.appendChild(wikEdPreviewBox);

	wikEdButtonBarPreview2 = MakeButtonBar(wikEdButtonBar['preview2']);
	wikEdLocalPrevWrapper.appendChild(wikEdButtonBarPreview2);

// add jump box to standard preview
	var wikiPreview = document.getElementById('wikiPreview');
	if (wikiPreview != null) {
		if (wikiPreview.firstChild != null) {
			wikEdButtonBarJump = MakeButtonBar(wikEdButtonBar['jump']);
			wikiPreview.insertBefore(wikEdButtonBarJump, wikiPreview.firstChild);
		}
	}

// add insert special chars to insert wrapper
	var wpSpecialchars = document.getElementById('editpage-specialchars');
	if (wpSpecialchars != null) {
		wikEdInsertWrapper.appendChild(wpSpecialchars);
	}

// wrappers filled

// add local preview button next to submit button
	wikEdLocalPreview = document.createElement('button');
	wikEdLocalPreview.id = 'wikEdLocalPreview';
	wikEdLocalPreview.title = wikEdText['wikEdLocalPreview title'];
	wikEdLocalPreview.className = 'wikEdLocalPreview';

	var localPreviewImg = document.createElement('img');
	localPreviewImg.id = 'wikEdLocalPreviewImg';
	localPreviewImg.src = wikEdImage['preview'];
	localPreviewImg.alt = wikEdText['wikEdLocalPreviewImg alt'];
	localPreviewImg.title = wikEdText['wikEdLocalPreviewImg title'];

	wikEdLocalPreview.appendChild(localPreviewImg);
	wikEdPreviewButton.parentNode.insertBefore(wikEdLocalPreview, wikEdPreviewButton.nextSibling);

// add local diff button next to submit button
	wikEdLocalDiff = document.createElement('button');
	wikEdLocalDiff.id = 'wikEdLocalDiff';
	wikEdLocalDiff.title = wikEdText['wikEdLocalDiff title'];
	wikEdLocalDiff.className = 'wikEdLocalDiff';

	var localDiffImg = document.createElement('img');
	localDiffImg.id = 'wikEdLocalDiffImg';
	localDiffImg.src = wikEdImage['diff'];
	localDiffImg.alt = wikEdText['wikEdLocalDiffImg alt'];
	localDiffImg.title = wikEdText['wikEdLocalDiffImg title'];

	wikEdLocalDiff.appendChild(localDiffImg);
	wikEdDiffPreviewButton.parentNode.insertBefore(wikEdLocalDiff, wikEdDiffPreviewButton.nextSibling);

// initialize image buttons
	WikEdButton(document.getElementById('wikEdDiff'),            'wikEdDiff', null, wikEdDiff);
	WikEdButton(document.getElementById('wikEdRefHide'),         'wikEdRefHide', null, wikEdRefHide);
	WikEdButton(document.getElementById('wikEdHighlightSyntax'), 'wikEdHighlightSyntax', null, wikEdHighlightSyntax);
	WikEdButton(document.getElementById('wikEdUseWikEd'),        'wikEdUseWikEd', null, wikEdUseWikEd);
	WikEdButton(document.getElementById('wikEdCloseToolbar'),    'wikEdCloseToolbar', null, wikEdCloseToolbar);
	WikEdButton(document.getElementById('wikEdFullScreen'),      'wikEdFullScreen', null, wikEdFullScreenMode);
	WikEdButton(document.getElementById('wikEdUsing'),           'wikEdUsing', null, wikEdUsing);
	WikEdButton(document.getElementById('wikEdCaseSensitive'),   'wikEdCaseSensitive', null, false);
	WikEdButton(document.getElementById('wikEdRegExp'),          'wikEdRegExp', null, false);
	WikEdButton(document.getElementById('wikEdFindAhead'),       'wikEdFindAhead', null, wikEdFindAheadSelected);
	WikEdButton(document.getElementById('wikEdClose'),           'wikEdClose', null, false, 'wikEdButton');
	WikEdButton(document.getElementById('wikEdClose2'),          'wikEdClose2', null, false, 'wikEdButton');

// hide typo fix button until typo fix rules are loaded and parsed
	document.getElementById('wikEdFixRegExTypo').style.display = 'none';

// add a clear summary button left to the summary input field
	var clearSummaryForm = document.createElement('form');
	clearSummaryForm.id = 'wikEdClearSummaryForm';
	clearSummaryForm.className = 'wikEdClearSummaryForm';
	wikEdSummaryText.parentNode.insertBefore(clearSummaryForm, wikEdSummaryText);

	wikEdClearSummary = document.createElement('button');
	wikEdClearSummary.id = 'wikEdClearSummary';
	wikEdClearSummary.className = 'wikEdClearSummary';
	wikEdClearSummary.alt = wikEdText['wikEdClearSummary alt'];
	wikEdClearSummary.title = wikEdText['wikEdClearSummary title'];
	wikEdClearSummary.style.height = (wikEdSummaryText.clientHeight + 1) +'px';
	clearSummaryForm.appendChild(wikEdClearSummary);

	wikEdClearSummaryImg = document.createElement('img');
	wikEdClearSummaryImg.id = 'wikEdClearSummaryImg';
	wikEdClearSummaryImg.src = wikEdImage['clearSummary'];
	wikEdClearSummaryImg.alt = 'Clear summary';
	wikEdClearSummary.appendChild(wikEdClearSummaryImg);

// remember button width, might be without image
	wikEdClearSummaryWidth = wikEdClearSummary.offsetWidth;

// make the summary a combo box
	var summaryComboInput = document.createElement('span');
	summaryComboInput.id = 'wikEdSummaryComboInput';
	summaryComboInput.className = 'wikEdSummaryComboInput';
	summaryComboInput = wikEdSummaryText.parentNode.insertBefore(summaryComboInput, wikEdSummaryText);

	wikEdSummaryText = wikEdSummaryText.parentNode.removeChild(wikEdSummaryText);
	wikEdSummaryText.className = 'wikEdSummaryText';
	wikEdSummaryTextWidth = wikEdSummaryWrapper.offsetWidth - wikEdSummaryInputWrapper.offsetWidth;
	if (wikEdSummaryTextWidth < 150) {
		wikEdSummaryTextWidth = 150;
	}
	wikEdSummaryText.style.width = wikEdSummaryTextWidth + 'px';

	wikEdSummarySelect = document.createElement('select');
	wikEdSummarySelect.id = 'wikEdSummarySelect';
	wikEdSummarySelect.className = 'wikEdSummarySelect';

	summaryComboInput.appendChild(wikEdSummaryText);
	summaryComboInput.appendChild(wikEdSummarySelect);

// shorten submit button texts
	wikEdPreviewButton.value = wikEdText['shortenedPreview'];
	wikEdDiffPreviewButton.value = wikEdText['shortenedChanges'];

// set up combo input boxes with history
	wikEdFieldHist ['find'] = [];
	wikEdSavedName['find'] = 'wikEdFindHistory';
	wikEdInputElement['find'] = new Object(wikEdFindText);
	wikEdSelectElement['find'] = new Object(document.getElementById('wikEdFindSelect'));
	wikEdSelectElement['find'].style.height = (wikEdInputElement['find'].clientHeight + 1) +'px';
	wikEdSelectElement['find'].title = wikEdText['wikEdFindSelect title'];

	wikEdFieldHist ['replace'] = [];
	wikEdSavedName['replace'] = 'wikEdReplaceHistory';
	wikEdInputElement['replace'] = new Object(wikEdReplaceText);
	wikEdSelectElement['replace'] = new Object(document.getElementById('wikEdReplaceSelect'));
	wikEdSelectElement['replace'].style.height = (wikEdInputElement['replace'].clientHeight + 1) +'px';
	wikEdSelectElement['replace'].title = wikEdText['wikEdReplaceSelect title'];

	wikEdFieldHist ['summary'] = [];
	wikEdSavedName['summary'] = 'wikEdSummaryHistory';
	wikEdInputElement['summary'] = new Object(wikEdSummaryText);
	wikEdSelectElement['summary'] = new Object(document.getElementById('wikEdSummarySelect'));
	wikEdSelectElement['summary'].style.height = (wikEdInputElement['summary'].clientHeight + 1) +'px';
	wikEdSelectElement['summary'].title = wikEdText['wikEdSummarySelect title'];

// adjust the select field widths to that of the text input fields
	WikEdResizeComboInput('find');
	WikEdResizeComboInput('replace');
	WikEdResizeComboInput('summary');

// hide the button bars per saved setting
	WikEdButtonBarInit(wikEdButtonBarFormat);
	WikEdButtonBarInit(wikEdButtonBarControl);
	if (wikEdButtonBarCustom1 != null) {
		WikEdButtonBarInit(wikEdButtonBarCustom1);
	}
	WikEdButtonBarInit(wikEdButtonBarFind);
	WikEdButtonBarInit(wikEdButtonBarFix);
	if (wikEdButtonBarCustom2 != null) {
		WikEdButtonBarInit(wikEdButtonBarCustom2);
	}

// display only the textarea or the iframe, dont change the frame
	if (wikEdUseWikEd == true) {
		WikEdSetEditArea(true, true);
	}
	else {
		WikEdSetEditArea(false, true);
	}

// add a link to the wikEd help page
	if ( (wikEdHelpPageLink != '') && (wikEdHelpPageLink != null) ) {
		var editHelpParent = previewButton;
		do {
			editHelpParent = editHelpParent.nextSibling;
		} while (editHelpParent.tagName != 'SPAN');

		var editHelp = editHelpParent.lastChild;
		while (editHelp.tagName != 'A') {
			editHelp = editHelp.previousSibling;
		}

		wikEdHelpSpan = document.createElement('span');
		wikEdHelpSpan.id = 'wikEdHelpSpan';
		wikEdHelpSpan.className = 'wikEdHelpSpan';
		wikEdHelpSpan.innerHTML = wikEdHelpPageLink;
		editHelpParent.insertBefore(wikEdHelpSpan, editHelp.nextSibling);

		wikEdEditHelp = wikEdHelpSpan.parentNode;
		wikEdEditHelp.id = 'wikEdEditHelp';
		wikEdEditHelp.className = 'wikEdEditHelp';
	}

// add frame stylesheet definition
	wikEdFrameBody.style.fontSize = parseInt(wikEdTextZoom) + '%;';
	var frameStyle = new WikEdStyleSheet(wikEdFrameDocument);
	var rules = '';
	for (var ruleName in wikEdFrameCSS) {
		var ruleStyle = wikEdFrameCSS[ruleName];
		if (typeof(ruleStyle) != 'string') {
			continue;
		}
		ruleStyle = ruleStyle.replace(/\{wikEdUnknown\}/g, wikEdImage['unknown']);
		ruleStyle = ruleStyle.replace(/\{wikEdTab\}/g, wikEdImage['tab']);
		ruleStyle = ruleStyle.replace(/\{wikEdCtrl\}/g, wikEdImage['ctrl']);
		ruleStyle = ruleStyle.replace(/\{wikEdBlank\}/g, wikEdImage['blank']);
		ruleStyle = ruleStyle.replace(/\{wikEdGrip\}/g, wikEdImage['grip']);
		rules += ruleName + ' {' + ruleStyle + '}\n';
	}
	frameStyle.addRules(rules);

// copy the textarea content to the iframe
	if (wikEdUseWikEd == true) {
		window.WikEdUpdateFrame();
	}

// register edit button click events
	for (var buttonId in wikEdEditButtonHandler) {
		if (typeof(wikEdEditButtonHandler[buttonId]) != 'string') {
			continue;
		}
		var buttonObj = document.getElementById(buttonId);
		if (buttonObj != null) {
			buttonObj.addEventListener('click', WikEdEditButtonHandler, true);
		}
	}

// register summary shrinking event after loading the 'Clear summary' image handler
	wikEdClearSummaryImg.addEventListener('load', WikEdShrinkSummaryHandler, true);

// register summary resize event for window resizing
	window.addEventListener('resize', WikEdResizeSummaryHandler, true);

// register frame events
	wikEdFrameDocument.addEventListener('keydown', WikEdKeyFrameHandler, true);
	wikEdFrameDocument.addEventListener('keyup', WikEdKeyFrameHandler, true);
	wikEdFrameDocument.addEventListener('keypress', WikEdKeyFrameHandler, true);
	wikEdFrameDocument.addEventListener('mouseup', WikEdKeyFrameHandler, true);
	wikEdFrameDocument.addEventListener('keydown', WikEdShiftAltHandler, true);

// register document events
	document.addEventListener('keydown', WikEdShiftAltHandler, true);

// register find ahead events
	wikEdFindText.addEventListener('keyup', WikEdFindAhead, true);

// register submit button events
	wikEdSaveButton.addEventListener('click', WikEdSaveButtonHandler, true);
	wikEdPreviewButton.addEventListener('click', WikEdPreviewButtonHandler, true);
	wikEdDiffPreviewButton.addEventListener('click', wikEdDiffPreviewButtonHandler, true);
	wikEdLocalPreview.addEventListener('click', WikEdLocalPreviewHandler, true);
	wikEdLocalDiff.addEventListener('click', WikEdLocalDiffHandler, true);

// unload (leaving page) events
	window.addEventListener('unload', WikEdUnloadHandler, false);

// set button bar grip area events
	wikEdButtonBarFormat.firstChild.firstChild.addEventListener('click', WikEdButtonBarGripHandler, false);
	wikEdButtonBarControl.firstChild.firstChild.addEventListener('click', WikEdButtonBarGripHandler, false);
	if (wikEdButtonBarCustom1 != null) {
		if (wikEdButtonBarCustom1.firstChild.firstChild != null) {
			wikEdButtonBarCustom1.firstChild.firstChild.addEventListener('click', WikEdButtonBarGripHandler, false);
		}
	}
	wikEdButtonBarFind.firstChild.firstChild.addEventListener('click', WikEdButtonBarGripHandler, false);
	wikEdButtonBarFix.firstChild.firstChild.addEventListener('click', WikEdButtonBarGripHandler, false);
	if (wikEdButtonBarCustom2 != null) {
		if (wikEdButtonBarCustom2.firstChild.firstChild != null) {
			wikEdButtonBarCustom2.firstChild.firstChild.addEventListener('click', WikEdButtonBarGripHandler, false);
		}
	}

// register combo box events
	wikEdSummarySelect.addEventListener('change', function() { WikEdChangeComboInput('summary'); }, false);
	wikEdSummarySelect.addEventListener('focus', function() { WikEdSetComboOptions('summary'); }, false);

	wikEdSelectElement['find'].addEventListener('change', function() { WikEdChangeComboInput('find'); }, false);
	wikEdSelectElement['find'].addEventListener('focus', function() { WikEdSetComboOptions('find'); }, false);

	wikEdSelectElement['replace'].addEventListener('change', function() { WikEdChangeComboInput('replace'); }, false);
	wikEdSelectElement['replace'].addEventListener('focus', function() { WikEdSetComboOptions('replace'); }, false);

// register the clear summary click handler
	wikEdClearSummary.addEventListener('click', WikEdClearSummaryHandler, true);

// select the text on focus for find and replace fields
	wikEdFindText.addEventListener('focus', WikEdFindReplaceHandler, true);
	wikEdReplaceText.addEventListener('focus', WikEdFindReplaceHandler, true);

// tab / shift-tab between find and replace fields
	wikEdFindText.addEventListener('keydown', WikEdFindReplaceHandler, true);
	wikEdReplaceText.addEventListener('keydown', WikEdFindReplaceHandler, true);

// scroll to edit window if it is not a preview page
	if (scrollToText != false) {
		if (window.location.search.match(/(\?|&)action=submit\b/) == null) {
			window.scroll(0, WikEdGetOffsetTop(wikEdInputWrapper) - 2);
		}

// focus the edit area
		if (wikEdUseWikEd == true) {
			wikEdFrameWindow.focus();
		}
		else {
			wikEdTextarea.setSelectionRange(0, 0);
			wikEdTextarea.focus();
		}
	}

// init MediaWiki file paths for use in regexps
	if (wikEdWikiGlobals['wgServer'] != null) {
		wikEdServer = wikEdWikiGlobals['wgServer'].replace(/(\W)/g, '\\$1');
	}
	if (wikEdWikiGlobals['wgArticlePath'] != null) {
		wikEdArticlePath = wikEdWikiGlobals['wgArticlePath'].replace(wikEdWikiGlobals['wgServer'], '');
		wikEdArticlePrefix = wikEdWikiGlobals['wgArticlePath'].replace(/\$1$/, '');
	}
	if (wikEdWikiGlobals['wgScriptPath'] != null) {
		wikEdScriptPath = wikEdWikiGlobals['wgScriptPath'].replace(wikEdWikiGlobals['wgServer'], '');
	}
	wikEdArticlePath = wikEdArticlePath.replace(/\$1$/, '');
	wikEdScriptPath = wikEdScriptPath.replace(/\/?$/, '/');
	wikEdArticlePath = wikEdArticlePath.replace(/(\W)/g, '\\$1');
	wikEdScriptPath = wikEdScriptPath.replace(/(\W)/g, '\\$1');

// fullscreen mode
	if (wikEdFullScreenMode == true) {
		WikEdFullScreen(wikEdFullScreenMode, true);
	}

// overwrite the insertTags function in wikibits.js used by the standard button toolbar and the editpage special chars
	if (typeof(insertTags) == 'function') {
		wikEdInsertTagsOriginal = insertTags;
		insertTags = window.WikEdInsertTags;
	}

// reset error indicator
	WikEdSetLogo();
	wikEdTurnedOn = true;

// load and parse RegExTypoFix rules if the button is enabled
	WikEdLoadTypoFixRules();

// setup finished
	return;
}


//
// WikEdAutoUpdate: check for the latest version and force-reload to update
//

window.WikEdAutoUpdate = function() {

// check only on non-interaction pages
	if (/(\?|&)action=/.test(window.location.search) == true) {
		return;
	}

// check if autoupdate is enabled
	if (wikEdAutoUpdate != true) {
		return;
	}

// get date of last update check
	var lastCheckStr = WikEdGetPersistent('wikEdAutoUpdate');
	var lastCheckDate = new Date(lastCheckStr);

// fix missing or corrupt saved setting
	if (isNaN(lastCheckDate.valueOf()) == true) {
		WikEdSetPersistent('wikEdAutoUpdate', 'January 1, 1970', 0, '/');
		return;
	}

// get the hours since last update check
	var currentDate = new Date();
	var diffHours = (currentDate - lastCheckDate) / 1000 / 60 / 60;

	if (wikEdGreasemonkey == true) {
		if (diffHours < wikEdAutoUpdateHoursGM) {
			return;
		}
	}
	else if (diffHours < wikEdAutoUpdateHours) {
		return;
	}

// save current update check date
	WikEdSetPersistent('wikEdAutoUpdate', currentDate.toUTCString(), 0, '/');

// make the ajax request
	WikEdAjaxRequest('GET', wikEdAutoUpdateUrl, null, null, null, null, function(ajax) {
		
// get response
		var html = ajax.responseText;

// get current version number from string
		var ver = wikEdProgramVersion.match(/(\d+)\.(\d+)\.(\d+)(\w?)/);
		if (ver == null) {
			return;
		}
		var currentVersion = ((Number(ver[1]) * 1000 + Number(ver[2])) * 1000 + Number(ver[3])) * 100 + (ver[4] + '0').charCodeAt(0);

// get new version number from string
		var ver = html.match(/(\d+)\.(\d+)\.(\d+)(\w?)/);
		if (ver == null) {
			return;
		}
		var newVersion = ((Number(ver[1]) * 1000 + Number(ver[2])) * 1000 + Number(ver[3])) * 100 + (ver[4] + '0').charCodeAt(0);

// compare the versions
		if (currentVersion >= newVersion) {
			return;
		}

// update Greasemonkey script by navigating to the script code page
		if (wikEdGreasemonkey == true) {
			window.location.href = wikEdAutoUpdateScriptUrl;
		}

// update wikEd by reloading the page with cache bypassing (equivalent to Shift-Reload or Shift-F5)
		else {
			window.location.reload(true);
		}
	});

	return;
}


//
// WikEdLoadTypoFixRules: load and parse RegExTypoFix rules if the button is enabled
//

window.WikEdLoadTypoFixRules = function() {

// load RegExTypoFix rules per Ajax if enabled
	if ( (wikEdRegExTypoFix == true) && (wikEdTypoRulesFind.length == 0) ) {

// make the ajax request
		WikEdAjaxRequest('GET', wikEdRegExTypoFixURL, null, null, null, null, function(ajax) {

// get response
			var rulesTxt = ajax.responseText;

// parse regexp rules
			var regExp = new RegExp('^<Typo +word="(.+?)" +find="(.+?)" +replace="(.+?)" +/>', 'gim');
			while ( (regExpMatch = regExp.exec(rulesTxt)) != null) {

// check if this is a valid regexp
				var regExpFind;
				try {
					regExpFind = new RegExp(regExpMatch[2], 'gim');
				}
				catch (err) {
					continue;
				}

// save regexp and replace
				wikEdTypoRulesFind.push(regExpFind);
				wikEdTypoRulesReplace.push(regExpMatch[3]);
			}

// display typo fix button
			if (wikEdTypoRulesFind.length > 0) {
				document.getElementById('wikEdFixRegExTypo').style.display = 'inline';
			}
			return;
		});
	}
	return;
}


//
// WikEdEditButtonHandler: handler for clicks on edit buttons
//

window.WikEdEditButtonHandler = function(event) {

// execute the button click handler code
	var obj = event.currentTarget;
	eval(wikEdEditButtonHandler[obj.id]);
	return;
}


//
// WikEdShrinkSummaryHandler: shrink the summary after loading the 'Clear summary' image
//

window.WikEdShrinkSummaryHandler = function(event) {

	var diffWidth = wikEdClearSummary.offsetWidth - wikEdClearSummaryWidth;
	wikEdInputElement['summary'].style.width = (wikEdInputElement['summary'].clientWidth - diffWidth) + 'px';
	wikEdSelectElement['summary'].style.width = (wikEdSelectElement['summary'].clientWidth - diffWidth) + 'px';
	wikEdClearSummaryWidth = wikEdClearSummary.offsetWidth;
	return;
}


//
// WikEdResizeSummaryHandler: adjust the summary width after resizing the window
//

window.WikEdResizeSummaryHandler = function(event) {

	WikEdResizeSummary();
	return;
}




//
// WikEdUnloadHandler: save editing frame to cached textarea
//

window.WikEdUnloadHandler = function(event) {

// update textarea if not already done in submit handlers
	if (wikEdUseWikEd == true) {
		if (wikEdTextareaUpdated != true) {
			WikEdUpdateTextarea();
		}
	}
	return;
}


//
// WikEdSaveButtonHandler: 'Save page' click handler
//

window.WikEdSaveButtonHandler = function(event) {

	wikEdSaveButton.removeEventListener('click', WikEdSaveButtonHandler, true);

// update textarea
	if (wikEdUseWikEd == true) {
		WikEdUpdateTextarea();
		wikEdTextareaUpdated = true;
	}

// add "using wikEd" to summary, not for adding a new section (+ tab)
	var text = wikEdSummaryText.value;
	text = text.replace(/^[, ]+/, '');
	text = text.replace(/[, ]+$/, '');
	WikEdAddToHistory('summary');

	if ( (wikEdUsing == true) && (text != '') ) {
		if (text.lastIndexOf(wikEdSummaryUsing) < 0) {
			if (wikEdAddNewSection != true) {
				text += ' ' + wikEdSummaryUsing;
			}
		}
	}
	wikEdSummaryText.value = text;

// submit
	wikEdSaveButton.click();

// reinstate handler in case the browser back button will be used
	wikEdSaveButton.addEventListener('click', WikEdSaveButtonHandler, true);

	return;
}


//
// WikEdPreviewButtonHandler: 'Show preview' click handler
//

window.WikEdPreviewButtonHandler = function(event) {

	if (wikEdUseWikEd == true) {
		WikEdUpdateTextarea();
		wikEdTextareaUpdated = true;
	}

	return;
}


//
// wikEdDiffPreviewButtonHandler: 'Show changes' click handler
//

window.wikEdDiffPreviewButtonHandler = function(event) {
	if (wikEdFullScreenMode == true) {
		WikEdFullScreen(false);
	}
	if (wikEdUseWikEd == true) {
		WikEdUpdateTextarea();
		wikEdTextareaUpdated = true;
	}

	return;
}


//
// WikEdFollowLinkHandler: open highlighted link in new window/tab
//

window.WikEdFollowLinkHandler = function(event) {
	
	if (event.ctrlKey == true) {
		var linkId = event.currentTarget.id;
//// todo: find the lowest span that triggered this event for links in templates
		if (linkId != null) {
			var linkUrl = wikEdFollowLinkHash[linkId];
			if (linkUrl != null) {
				event.stopPropagation();
				window.open(linkUrl);
				window.focus();
			}
		}
	}
	return;
}


//
// WikEdLocalPreviewHandler: local 'Show preview' image button click handler
//

window.WikEdLocalPreviewHandler = function(event) {
	event.preventDefault();
	WikEdButton(wikEdLocalPreview, 'wikEdLocalPreview');
	return;
}


//
// WikEdLocalDiffHandler: local 'Show changes' image button click handler
//

window.WikEdLocalDiffHandler = function(event) {
	event.preventDefault();
	WikEdButton(wikEdLocalDiff, 'wikEdLocalDiff');
	return;
}


//
// WikEdButtonBarGripHandler: click, mouseover handler, see also WikEdButtonBarInit()
//

window.WikEdButtonBarGripHandler = function(event) {

	event.stopPropagation();

	var grip = event.target;
	var gripWrapper = grip.parentNode;
	var buttonsWrapper = gripWrapper.nextSibling;
	var buttons = buttonsWrapper.firstChild;
	var barInnerWrapper = gripWrapper.parentNode;
	var bar = barInnerWrapper.parentNode;

	if (event.type == 'click') {
		buttonsWrapper.style.position = 'static';

// hide the buttons bar
		if (buttonsWrapper.minimized != true) {
			barInnerWrapper.className = 'wikedButtonBarInnerWrapperHidden';
			gripWrapper.className = 'wikedButtonBarGripWrapperHidden';
			buttonsWrapper.className = 'wikedButtonBarButtonsWrapperHidden';
			buttonsWrapper.widthOriginal = buttonsWrapper.offsetWidth;
			buttonsWrapper.style.display = 'none';
			buttonsWrapper.minimized = true;
			grip.addEventListener('mouseover', WikEdButtonBarGripHandler, false);
			WikEdSetPersistent(bar.id + 'Hidden', '1', null, '/');
		}

// unhide the buttons bar
		else {
			barInnerWrapper.className = 'wikedButtonBarInnerWrapperVisible';
			gripWrapper.className = 'wikedButtonBarGripWrapperVisible';
			buttonsWrapper.className = 'wikedButtonBarButtonsWrapperVisible';
			buttonsWrapper.style.display = 'block';
			buttonsWrapper.minimized = false;
			grip.removeEventListener('mouseover', WikEdButtonBarGripHandler, false);
			WikEdSetPersistent(bar.id + 'Hidden', '', -1, '/');
		}
	}

// show the buttons bar on mouseover
	else if (event.type == 'mouseover') {
		if (buttonsWrapper.minimized == true) {
			bar.addEventListener('mouseout', WikEdButtonBarHandler, false);

// show buttons to the right
			if (bar.offsetParent.clientWidth > grip.offsetLeft + grip.offsetWidth + buttonsWrapper.widthOriginal) {
				buttonsWrapper.style.left = (grip.offsetLeft + grip.offsetWidth) + 'px';
			}

// show buttons to the left
			else {
				buttonsWrapper.style.left = (gripWrapper.offsetLeft - buttonsWrapper.widthOriginal) + 'px';
			}

// a mozilla bug sometimes gives offsetTop - 1 when the wikEdToolbarWrapper is hidden
			buttonsWrapper.style.top = gripWrapper.offsetTop + 'px';
			buttonsWrapper.style.position = 'absolute';
			buttonsWrapper.style.display = 'block';
		}
	}
	return;
}


//
// WikEdButtonBarGripHandler: mouseout handler
//

window.WikEdButtonBarHandler = function(event) {

	event.stopPropagation();

	var bar = event.currentTarget;
	var barInnerWrapper = bar.firstChild;
	var gripWrapper = barInnerWrapper.firstChild;
	var grip = gripWrapper.firstChild;
	var buttonsWrapper = gripWrapper.nextSibling;
	var buttons = buttonsWrapper.firstChild;

// hide the buttons
	if (event.type == 'mouseout') {
		if (buttonsWrapper.minimized == true) {

// filter the events for mouseouts actually leaving the bar
			if (
				(
					( (event.target == grip) || (event.target == gripWrapper) ) &&
					(event.relatedTarget != gripWrapper) && (event.relatedTarget != buttonsWrapper) && (event.relatedTarget != buttons) && (event.relatedTarget.parentNode != buttons)
				) ||
				(
					( (event.target.parentNode.parentNode == buttons) || (event.target.parentNode == buttons) || (event.target == buttons) || (event.target == buttonsWrapper) ) &&
					(event.relatedTarget.parentNode.parentNode != buttons) && (event.relatedTarget.parentNode != buttons) && (event.relatedTarget != buttons) && (event.relatedTarget != buttonsWrapper) && (event.relatedTarget != gripWrapper) && (event.relatedTarget != grip)
				)
			) {
				bar.removeEventListener('mouseout', WikEdButtonBarHandler, false);
				buttonsWrapper.style.display = 'none';
				buttonsWrapper.style.position = 'static';
			}
		}
	}
	return;
}


//
// clear the summary click handler
//

window.WikEdClearSummaryHandler = function(event) {

	event.preventDefault();

// clear the summary if it is only a paragraph name
	if ( /^\/\* .*? \*\/ *$/.test(wikEdSummaryText.value) ) {
		wikEdSummaryText.value = '';
	}

// clear the summary but leave paragraph names
	else {
		wikEdSummaryText.value = wikEdSummaryText.value.replace(/^((\/\* .*? \*\/ *)?).*()/,
			function (p, p1, p2) {
				if (p1.length > 0) {
					p1 = p1 + ' ';
				}
				return(p1);
			}
		);
	}
	wikEdSummaryText.focus();
	return;
}


//
// WikEdFindReplaceHandler: find and replace: tab and shift-tab between fields, select on focus
//

window.WikEdFindReplaceHandler = function(event) {

// tab / shift-tab between fields
	if (event.type == 'keydown') {
		if (event.keyCode == 9) {
			if (event.target == wikEdFindText) {
				event.preventDefault();
				wikEdReplaceText.removeEventListener('focus', WikEdFindReplaceHandler, true);
				wikEdReplaceText.focus();
				wikEdReplaceText.addEventListener('focus', WikEdFindReplaceHandler, true);
			}
			else if (event.target == wikEdReplaceText) {
				event.preventDefault();
				wikEdFindText.removeEventListener('focus', WikEdFindReplaceHandler, true);
				wikEdFindText.focus();
				wikEdFindText.addEventListener('focus', WikEdFindReplaceHandler, true);
			}
		}
	}

// select on focus
	else if (event.type == 'focus') {
		event.target.setSelectionRange(0, this.textLength);
	}
	return;
}


//
// WikEdSetLogo: set the logo on top of the page
//

window.WikEdSetLogo = function(state) {

	if (state == 'error') {
		wikEdLogo.src = wikEdImage['error'];
		wikEdLogo.alt = wikEdText['wikEdLogo error alt'];
		wikEdLogo.title = wikEdText['wikEdLogo error title'];
	}
	else if (state == 'browser') {
		wikEdLogo.src = wikEdImage['browser'];
		wikEdLogo.alt = wikEdText['wikEdLogo browser alt'];
		wikEdLogo.title = wikEdText['wikEdLogo browser title'];
	}
	else {
		if (wikEdDisabled == true) {
			wikEdLogo.src = wikEdImage['disabled'];
			wikEdLogo.alt = wikEdText['wikEdLogo disabled alt'];
			wikEdLogo.title = wikEdText['wikEdLogo disabled title'];
		}
		else {
			wikEdLogo.src = wikEdImage['logo'];
			wikEdLogo.alt = wikEdText['wikEdLogo alt'];
			wikEdLogo.title = wikEdText['wikEdLogo title'];
		}
	}
	var version = wikEdProgramVersion;
	if (wikEdGreasemonkey == true) {
		version += ' GM';
	}
	wikEdLogo.title = wikEdLogo.title.replace(/\{wikEdProgramVersion\}/g, version);
	wikEdLogo.title = wikEdLogo.title.replace(/\{wikEdProgramDate\}/g, wikEdProgramDate);

	return;
}


//
// MakeButtonBar: generate button bar div element
//

window.MakeButtonBar = function(bar)  {

// id outer, class outer, id inner, class inner, alt, button numbers
	var barId = bar[0];
	var barClass = bar[1];
	var buttonsId = bar[2];
	var buttonsClass = bar[3];
	var barHeight = bar[4];
	var gripTitle = bar[5];
	var buttonNumbers = bar[6];
	
// collect the buttons
	var buttons = '';
	for (var property in buttonNumbers) {
		if ( (typeof(buttonNumbers[property]) != 'string') && (typeof(buttonNumbers[property]) != 'number') ) {
			continue;
		}
		var buttonNo = buttonNumbers[property];
		switch (buttonNo) {
			case 'br':
				buttons += '<br />';
				break;
			case 'find':
				buttons += '<span class="wikEdFindComboInput" id="wikEdFindComboInput">';
				buttons += '<input class="wikEdCombo" id="wikEdFindText" type="text" value="">';
				buttons += '<select class="wikEdCombo" id="wikEdFindSelect">';
				buttons += '</select>';
				buttons += '</span>';
				break;
			case 'replace':
				buttons += '<span class="wikEdReplaceComboInput" id="wikEdReplaceComboInput">';
				buttons += '<input class="wikEdCombo" id="wikEdReplaceText" type="text" value="">';
				buttons += '<select class="wikEdCombo" id="wikEdReplaceSelect">';
				buttons += '</select>';
				buttons += '</span>';
				break;
			default:
				var currButton = wikEdButton[buttonNo];
				if (typeof(currButton) != 'object') {
					alert('Loading error: The button "' + buttonNumbers[property] + '" is not defined.');
				}
				if ( (currButton[0] == 'wikEdSource') && (wikEdShowSourceButton != true) ) {
					break;
				}
				if ( (currButton[0] == 'wikEdUsing') && (wikEdShowUsingButton != true) ) {
					break;
				}

// add accesskey information to button title and
				var accessKey = '';
				if (wikEdButtonKey[buttonNo] != null) {
					accessKey = ' [' + wikEdText['alt-shift'] + wikEdButtonKey[buttonNo][0] + ']';

// initialize wikEdButtonKeyCode[keyCode] = id
					wikEdButtonKeyCode[ (wikEdButtonKey[buttonNo][1]) ] = currButton[0];
				}
				
// add button html code
				buttons += '<img id="' + currButton[0] + '" class="' + currButton[1] + '" title="' + currButton[2] + accessKey +'" src="' + currButton[3] + '" width="' + currButton[4] + '" height="' + currButton[5] + '" alt="' + currButton[6] + '">';

// collect click event info
				wikEdEditButtonHandler[ currButton[0] ] = currButton[7];

		}
	}

// create the button bar div
	var div = document.createElement('div');
	div.id = barId;
	div.className = barClass;

	var buttonsStyle = '';
	if (barHeight > 0) {
		buttonsStyle = ' style="height: ' + barHeight + 'px;"';
	}

// make a grip bar
	var html = '';
	if (gripTitle != null) {
		var gripStyle = 'width: ' + wikEdButtonBarGripWidth + 'px; ';
		if (barHeight > 0) {
			gripStyle += 'height: ' + barHeight + 'px; ';
		}
		if (gripStyle.length > 0){
			gripStyle = ' style="' + gripStyle + '"';
		}

		html += '<div class="wikedButtonBarInnerWrapperVisible" style="height: ' + barHeight + 'px;">';

		html += '<div class="wikedButtonBarGripWrapperVisible">';
		html += '<div class="wikedButtonBarGrip"' + gripStyle + ' title="' + gripTitle + '">';
		html += '&nbsp;';
		html += '</div>';
		html += '</div>';

		html += '<div class="wikedButtonBarButtonsWrapperVisible"' + buttonsStyle + '>';
		html += '<div id="' + buttonsId + '" class="' + buttonsClass + '" style="">';
		html += buttons;
		html += '</div>';
		html += '</div>';

		html += '</div>';
	}

// make a standard no-grip bar
	else {
		html += '<div id="' + buttonsId + '" class="' + buttonsClass + '"' + buttonsStyle + '">';
		html += buttons;
		html += '</div>';
	}
	div.innerHTML = html;

	return(div);
}


//
// WikEdButtonBarInit: hide buttons bar, see also WikEdButtonBarGripHandler()
//

window.WikEdButtonBarInit = function(bar) {

	var setting = WikEdGetPersistent(bar.id + 'Hidden');
	if (setting != '') {
		var barInnerWrapper = bar.firstChild;
		var gripWrapper = barInnerWrapper.firstChild;
		var grip = gripWrapper.firstChild;
		var buttonsWrapper = gripWrapper.nextSibling;
		var buttons = buttonsWrapper.firstChild;

		barInnerWrapper.className = 'wikedButtonBarInnerWrapperHidden';
		gripWrapper.className = 'wikedButtonBarGripWrapperHidden';
		buttonsWrapper.className = 'wikedButtonBarButtonsWrapperHidden';
		buttonsWrapper.widthOriginal = buttonsWrapper.offsetWidth;
		buttonsWrapper.style.display = 'none';
		buttonsWrapper.minimized = true;
		grip.addEventListener('mouseover', WikEdButtonBarGripHandler, true);
	}
	return;
}


//
// WikEdSetEditArea: apply css changes to switch between classic textarea and rich text frame
//

window.WikEdSetEditArea = function(useFrame, notFrame) {

// turn rich text frame on
	if (useFrame == true) {
		wikEdTextareaWrapper.style.position = 'absolute';
		wikEdTextareaWrapper.style.visibility = 'hidden';
		wikEdTextarea.style.display = 'none';

		if (notFrame != true) {
			wikEdFrameWrapper.style.position = 'static';
			wikEdFrameWrapper.style.visibility = 'visible';
			wikEdFrameBody.style.display = 'block';
		}

		if (document.getElementById('toolbar') != null) {
			if (wikEdCloseToolbar == true) {
				wikEdToolbarWrapper.style.display = 'none';
			}
			else {
				wikEdToolbarWrapper.style.display = 'block';
			}
		}
		wikEdButtonBarFormat.style.display = 'block';
		if (wikEdButtonBarCustom1 != null) {
			wikEdButtonBarCustom1.style.display = 'block';
		}
		wikEdButtonBarFind.style.display = 'block';
		wikEdButtonBarFix.style.display = 'block';
		if (wikEdButtonBarCustom2 != null) {
			wikEdButtonBarCustom2.style.display = 'block';
		}
		wikEdButtonBarControl.style.display = 'block';
	}

// turn classic textarea on
	else {
		if (notFrame != true) {
			wikEdFrameWrapper.style.position = 'absolute';
			wikEdFrameWrapper.style.visibility = 'hidden';
// Mozilla or wikEd bug: <br> insertion before text a while after setting display to 'none', test with setTimeout('alert(wikEdFrameBody.innerHTML)', 1000);
//			wikEdFrameBody.style.display = 'none';
		}
		wikEdTextareaWrapper.style.position = 'static';
		wikEdTextareaWrapper.style.visibility = 'visible';
		wikEdTextarea.style.display = 'block';

		if (document.getElementById('toolbar') != null) {
			wikEdToolbarWrapper.style.display = 'block';
		}
		wikEdButtonBarFormat.style.display = 'none';
		if (wikEdButtonBarCustom1 != null) {
			wikEdButtonBarCustom1.style.display = 'none';
		}
		wikEdButtonBarFind.style.display = 'none';
		wikEdButtonBarFix.style.display = 'none';
		if (wikEdButtonBarCustom2 != null) {
			wikEdButtonBarCustom2.style.display = 'none';
		}
		wikEdButtonBarControl.style.display = 'block';
	}

	return;
}


//
// WikEdButton: toggle or set button checked state
//   used for buttons that do not require nor change the text. Faster than WikEdEditButton()
//

window.WikEdButton = function(buttonObj, buttonId, toggleButton, setButton, classButton, doButton) {

	if (buttonObj != null) {

// check if the button is disabled
		if (buttonObj.className == 'wikEdButtonInactive') {
			return;
		}

// set button to pressed, set cursor to hourglass
		buttonObj.style.cursor = 'wait';

// init the button
		if (setButton != null) {
			if (setButton == false) {
				buttonObj.setAttribute('checked', false);
				if (classButton == null) {
					buttonObj.className = 'wikEdButtonUnchecked';
				}
			}
			else {
				buttonObj.setAttribute('checked', true);
				if (classButton == null) {
					buttonObj.className = 'wikEdButtonChecked';
				}
			}
		}
		else if (classButton != null) {
			buttonObj.className = classButton;
		}

// toggle the button
		if (toggleButton != null) {
			if (toggleButton == true) {
				if (buttonObj.getAttribute('checked') == 'true') {
					buttonObj.setAttribute('checked', false);
					buttonObj.className = 'wikEdButtonUnchecked';
				}
				else {
					buttonObj.setAttribute('checked', true);
					buttonObj.className = 'wikEdButtonChecked';
				}
			}
		}
	}

// perform specific actions
	if ( ( (setButton == null) && (classButton == null) ) || (doButton == true) ) {

// remove active content
		WikEdRemoveElements(['script', 'object', 'applet', 'embed']);

		switch (buttonId) {

// switch between syntax highlighting and plain text
			case 'wikEdHighlightSyntax':
				var obj = {};
				obj.html = wikEdFrameBody.innerHTML;
				obj.html = obj.html.replace(/(<br\b[^>]*>)\n* *()/g, '$1');
				if (buttonObj.getAttribute('checked') == 'true') {
					WikEdRemoveHighlighting(obj);
					wikEdHighlightSyntax = true;
					obj.html = obj.html.replace(/<br\b[^>]*>[\n ]*()/g, '\n');
					obj.whole = true;
					WikEdHighlightSyntax(obj);
					obj.html = obj.html.replace(/\n/g, '<br />');
					WikEdSetPersistent('wikEdSyntaxOff', '', -1, '/');
				}
				else {
					wikEdHighlightSyntax = false;
					WikEdRemoveHighlighting(obj);
					obj.html = obj.html.replace(/(\t)/g, '<span class="wikEdTabPlain">$1</span><!--wikEdTabPlain-->');
					WikEdSetPersistent('wikEdSyntaxOff', '1', 0, '/');
				}
				wikEdFrameBody.innerHTML = obj.html;
				break;

// align textbox with display top
			case 'wikEdScrollToPreview':
			case 'wikEdScrollToPreview2':
			case 'wikEdScrollToPreview3':
				window.scroll(0, WikEdGetOffsetTop(wikEdSubmitWrapper));
				break;

// align edit buttons with display top
			case 'wikEdScrollToEdit':
			case 'wikEdScrollToEdit2':
			case 'wikEdScrollToEdit3':
			case 'wikEdScrollToEdit4':
				window.scroll(0, WikEdGetOffsetTop(wikEdInputWrapper));
				break;

// cycle through different font sizes
			case 'wikEdTextZoomDown':
				wikEdTextZoom = wikEdTextZoom / 1.2;
				if (wikEdTextZoom < 100 / 1.2 / 1.2) {
					wikEdTextZoom = 100 * 1.2 * 1.2;
				}
				wikEdFrameBody.style.fontSize = parseInt(wikEdTextZoom) + '%;';
				break;

// cycle through different font sizes
			case 'wikEdTextZoomUp':
				wikEdTextZoom = wikEdTextZoom * 1.2;
				if (wikEdTextZoom > 100 * 1.2 * 1.2) {
					wikEdTextZoom = 100 / 1.2 / 1.2;
				}
				wikEdFrameBody.style.fontSize = parseInt(wikEdTextZoom) + '%;';
				break;

// display local preview box
			case 'wikEdLocalPreview':
				if (wikEdFullScreenMode == true) {
					WikEdFullScreen(false);
				}
				if (wikEdUseWikEd == true) {
					WikEdUpdateTextarea();
				}

// scroll to edit or preview field
				if (buttonId == 'wikEdLocalPreview') {
					window.scroll(0, WikEdGetOffsetTop(wikEdInputWrapper));
				}
				else {
					window.scroll(0, WikEdGetOffsetTop(wikEdSubmitWrapper));
				}
				wikEdPreviewIsAjax = false;

// prepare ajax preview
				if (wikEdUseAjaxPreview == true) {

// prepare the data
					var boundary = '--(fR*3briuStOum6#v)--';
					var postData = document.getElementById('wpTextbox1').value;
					postData = '--' + boundary + '\nContent-Disposition: form-data; name="wpTextbox1"\n\n' + postData + '\n--' + boundary;

// make the ajax request
					WikEdAjaxRequest( 'POST', document.getElementById('editform').action + '&live',
						'Content-Type', 'multipart/form-data; boundary=' + boundary, postData, 'text/html', function(ajax) {

						wikEdPreviewIsAjax = true;

// get response
						var html = ajax.responseText;

// html-ize
						html = html.replace(/&lt;/g, '<');
						html = html.replace(/&gt;/g, '>');
						html = html.replace(/&amp;/g, '&');
						html = html.replace(/&quot;/g, '"')
						html = html.replace(/&apos;/g, '\'');
						html = html.replace(/(<preview>)<h2>.*?<\/h2>(.|\n)*?<div class=\'previewnote\'>(.|\n)*?<\/div>/, '$1');

// update the preview
						wikEdPreviewBox.innerHTML = html;
						wikEdLocalPrevWrapper.style.display = 'block';
					});
				}

// prepare a local preview (Pilaf's InstaView), will be overwritten by Ajax version
				if ( (wikEdUseLocalPreview == true) && (typeof(InstaView) == 'object') ) {
					InstaView.conf.user.name = wikEdWikiGlobals['wgUserName'];
					var instaView = InstaView.convert(wikEdTextarea.value);
					if (wikEdPreviewIsAjax != true) {
						wikEdPreviewBox.innerHTML = instaView;
						wikEdLocalPrevWrapper.style.display = 'block';
					}
				}
				break;

// display local diff box
			case 'wikEdDiffPreview':
			case 'wikEdDiffPreview2':
			case 'wikEdLocalDiff':
				if (typeof(WDiffString) != 'function') {
					break;
				}
				if (wikEdFullScreenMode == true) {
					WikEdFullScreen(false);
				}
				if (wikEdUseWikEd == true) {
					WikEdUpdateTextarea();
				}

// scroll to edit or preview field
				if (buttonId == 'wikEdLocalDiff') {
					window.scroll(0, WikEdGetOffsetTop(wikEdInputWrapper));
				}
				else {
					window.scroll(0, WikEdGetOffsetTop(wikEdSubmitWrapper));
				}

// call external diff program
				var diffText = WDiffString(wikEdOrigVersion, wikEdTextarea.value);
				if (wikEdFullDiff != true) {
					diffText = WDiffShortenOutput(diffText);
				}

				wikEdPreviewBox.innerHTML = diffText;
				wikEdLocalPrevWrapper.style.display = 'block';
				break;

// toggle wikEdDiff
			case 'wikEdDiff':

// turn wikEdDiff off
				if (buttonObj.getAttribute('checked') != 'true') {
					wikEdDiff = false;
					WikEdSetPersistent('wikEdDiff', '', -1, '/');
					if (typeof(wikEdDiffDiv) == 'object') {
						if (wikEdDiffDiv != null) {
							wikEdDiffDiv.style.display = 'none';
						}
					}
					window.scroll(0, WikEdGetOffsetTop(wikEdInputWrapper));
				}

// turn wikEdDiff on
				else {
					wikEdDiff = true;
					WikEdSetPersistent('wikEdDiff', '1', 0, '/');
					if (typeof(wikEdDiffDiv) == 'object') {
						if (wikEdDiffDiv != null) {
							wikEdDiffDiv.style.display = 'block';
							window.scroll(0, WikEdGetOffsetTop(wikEdDiffDiv));
							WikEdDiff();
						}
					}
				}
				break;

// close the preview / diff box
			case 'wikEdClose':
			case 'wikEdClose2':
				window.scroll(0, WikEdGetOffsetTop(wikEdInputWrapper));
				wikEdLocalPrevWrapper.style.display = 'none';
				break;

// switch between textarea and frame display
//   switching an iframe in design mode immediately after initialization between absolute/static may crash mozilla
			case 'wikEdUseWikEd':

// enble wikEd
				if (buttonObj.getAttribute('checked') == 'true') {
					WikEdUpdateFrame();

// turn rich text frame on
					WikEdSetEditArea(true);
					wikEdUseWikEd = true;
					WikEdSetPersistent('wikEdUseClassic', '', -1, '/');
				}

// turn classic textarea on, disable wikEd
				else {
					WikEdUpdateTextarea();
					WikEdSetEditArea(false);
					wikEdUseWikEd = false;
					WikEdSetPersistent('wikEdUseClassic', '1', 0, '/');
				}
				break;

// add "using wikEd" to summaries
			case 'wikEdUsing':
				if (buttonObj.getAttribute('checked') == 'true') {
					wikEdUsing = true;
					WikEdSetPersistent('wikEdSummaryUsing', '1', 0, '/');
				}
				else {
					wikEdUsing = false;
					WikEdSetPersistent('wikEdSummaryUsing', '', -1, '/');
				}
				break;

// hide ref tags
			case 'wikEdRefHide':
				if (buttonObj.getAttribute('checked') == 'true') {
					wikEdRefHide = true;
					WikEdSetPersistent('wikEdRefHide', '1', 0, '/');
				}
				else {
					wikEdRefHide = false;
					WikEdSetPersistent('wikEdRefHide', '', -1, '/');
				}
				if (wikEdUseWikEd == true) {
					WikEdEditButton(null, 'wikEdWikify', 'whole');
				}
				break;

// close the toolbar
			case 'wikEdCloseToolbar':
				if (buttonObj.getAttribute('checked') == 'true') {
					wikEdCloseToolbar = true;
					if (document.getElementById('toolbar') != null) {
						wikEdToolbarWrapper.style.display = 'none';
					}
					WikEdSetPersistent('wikEdCloseToolbar', '1', 0, '/');
				}
				else {
					wikEdCloseToolbar = false;
					if (document.getElementById('toolbar') != null) {
						wikEdToolbarWrapper.style.display = 'block';
					}
					WikEdSetPersistent('wikEdCloseToolbar', '', -1, '/');
				}
				if (wikEdFullScreenMode == true) {
					WikEdFullScreen(wikEdFullScreenMode);
				}
				break;

// just toggle the case sensitive search button
			case 'wikEdCaseSensitive':
				break;

// just toggle the regexp search button
			case 'wikEdRegExp':
				break;

// just toggle the find-ahead-as-you-type search button
			case 'wikEdFindAhead':
				break;

// switch to fullscreen edit area
			case 'wikEdFullScreen':
				if (buttonObj.getAttribute('checked') == 'true') {
					WikEdFullScreen(true);
					WikEdSetPersistent('wikEdFullscreen', '1', 0, '/');
				}
				else {
					WikEdFullScreen(false);
					WikEdSetPersistent('wikEdFullscreen', '', -1, '/');
				}
				break;

// clear the saved settings for find, replace, and summary history
			case 'wikEdClearHistory':
				WikEdClearHistory('find');
				WikEdClearHistory('replace');
				WikEdClearHistory('summary');
				break;

// for testing
			case 'wikEdPlaceholder':
				break;
		}
	}

// reset the frame DOM cache because the frame content might have changed
	wikEdFrameDOMCache = null;

// reset cursor to normal
	if (buttonObj != null) {
		buttonObj.style.cursor = 'pointer';
	}

	return;
}


//
// WikEdEditButton: editing functions
//   used for buttons that require or change the text, more time consuming than WikEdButton()
//

window.WikEdEditButton = function(buttonObj, buttonId, parameters, CustomHandler) {

// check if button is disabled
	if (buttonObj != null) {
		if (buttonObj.className == 'wikEdButtonInactive') {
			return;
		}
	}

// remove active and non-text content
	WikEdRemoveElements(['script', 'object', 'applet', 'embed', 'textarea']);

// select the appropriate text change targets (whole, selection, cursor, focusWord, focusLine, selectionWord, or selectionLine)
	var obj = {};
	obj.changed = {};

	switch (buttonId) {

// undo, redo: whole
		case 'wikEdUndo':
		case 'wikEdRedo':
		case 'wikEdUndoAll':
		case 'wikEdRedoAll':
			WikEdGetText(obj, 'whole');
			obj.changed = obj.whole;
			break;

// basic wiki character formatting: selection / focusWord / cursor
		case 'wikEdBold':
		case 'wikEdItalic':
		case 'wikEdUnderline':
		case 'wikEdStrikethrough':
		case 'wikEdNowiki':
		case 'wikEdSuperscript':
		case 'wikEdSubscript':
		case 'wikEdWikiLink':
		case 'wikEdWebLink':
			WikEdGetText(obj, 'selection, cursor');
			if (obj.selection.plain != '') {
				obj.changed = obj.selection;
			}
			else {
				WikEdGetText(obj, 'focusWord');
				if (obj.focusWord.plain != '') {
					obj.changed = obj.focusWord;
				}
				else  {
					obj.changed = obj.cursor;
				}
			}
			break;

// reference: selection / cursor
		case 'wikEdRef':
			WikEdGetText(obj, 'selection, cursor');
			if (obj.selection.plain != '') {
				obj.changed = obj.selection;
			}
			else {
				obj.changed = obj.cursor;
			}
			break;

// references and small references: selection / cursor
		case 'wikEdReferences':
		case 'wikEdReferencesSection':
			WikEdGetText(obj, 'selection, cursor');
			if (obj.selection.plain != '') {
				obj.changed = obj.selection;
			}
			else {
				obj.changed = obj.cursor;
			}
			break;

// character formatting: selection / focusWord / cursor
		case 'wikEdCase':
			WikEdGetText(obj, 'selection, cursor');
			if (obj.selection.plain != '') {
				obj.changed = obj.selection;
			}
			else {
				WikEdGetText(obj, 'focusWord');
				if (obj.focusWord.plain != '') {
					obj.changed = obj.focusWord;
				}
				else {
					obj.changed = obj.cursor;
				}
			}
			break;

// multiple line changes: selectionLine / focusLine / cursor
		case 'wikEdDecreaseHeading':
		case 'wikEdIncreaseHeading':
		case 'wikEdIncreaseBulletList':
		case 'wikEdDecreaseBulletList':
		case 'wikEdIncreaseNumberList':
		case 'wikEdDecreaseNumberList':
		case 'wikEdIncreaseIndentList':
		case 'wikEdDecreaseIndentList':
		case 'wikEdDefinitionList':
			WikEdGetText(obj, 'selection, cursor');
			if (obj.selection.plain != '') {
				WikEdGetText(obj, 'selectionLine');
				obj.changed = obj.selectionLine;
			}
			else {
				WikEdGetText(obj, 'focusLine');
				if (obj.focusLine.plain != '') {
					obj.changed = obj.focusLine;
				}
				else {
					obj.changed = obj.cursor;
				}
			}
			break;

// image: selectionWord (if text is selected) / cursor
		case 'wikEdImage':
			WikEdGetText(obj, 'selection, cursor');
			if (obj.selection.plain != '') {
				WikEdGetText(obj, 'selectionWord');
				obj.changed = obj.selectionWord;
			}
			else  {
				obj.changed = obj.cursor;
			}
			break;

// table: selectionLine / cursor
		case 'wikEdTable':
			WikEdGetText(obj, 'selection, cursor');
			if (obj.selection.plain != '') {
				WikEdGetText(obj, 'selectionLine');
				obj.changed = obj.selectionLine;
			}
			else  {
				WikEdGetText(obj, 'focusLine');
				obj.changed = obj.cursor;
			}
			break;

// wikify: selection / whole
		case 'wikEdWikify':
			if (parameters == 'whole') {
				WikEdGetText(obj, 'whole');
				obj.changed = obj.whole;
			}
			else {
				WikEdGetText(obj, 'selection');
				if (obj.selection.plain != '') {
					obj.changed = obj.selection;
				}
				else {
					WikEdGetText(obj, 'whole');
					obj.changed = obj.whole;
				}
			}
			break;

// textify: selection / whole, without wikifying
		case 'wikEdTextify':
			WikEdGetText(obj, 'selection', true);
			if (obj.selection.plain != '') {
				obj.changed = obj.selection;
			}
			else {
				WikEdGetText(obj, 'whole', true);
				obj.changed = obj.whole;
			}
			break;

// redirect: whole
		case 'wikEdRedirect':
			WikEdGetText(obj, 'whole, selection, cursor');
			if (obj.selection.plain == '') {
				WikEdGetText(obj, 'selectionWord');
			}
			obj.changed = obj.whole;
			break;

// find and replace: selection / focusWord / cursor
		case 'wikEdFindPrev':
		case 'wikEdFindNext':
		case 'wikEdJumpPrev':
		case 'wikEdJumpNext':
		case 'wikEdReplacePrev':
		case 'wikEdReplaceNext':
		case 'wikEdFindAll':
			WikEdGetText(obj, 'selection');
			if (obj.selection.plain != '') {
				obj.changed = obj.selection;
			}
			else {
				WikEdGetText(obj, 'focusWord');
				if (obj.focusWord.plain != '') {
					obj.changed = obj.focusWord;
				}
				else {
					obj.changed = obj.cursor;
				}
			}
			break;

// replace all: selection / whole
		case 'wikEdReplaceAll':
			WikEdGetText(obj, 'selection');
			if (obj.selection.plain != '') {
				obj.changed = obj.selection;
			}
			else {
				WikEdGetText(obj, 'whole');
				obj.changed = obj.whole;
			}
			break;

// fixing buttons: selection / whole
		case 'wikEdFixBasic':
		case 'wikEdfixUnicode':
		case 'wikEdFixAll':
		case 'wikEdFixHtml':
		case 'wikEdFixRegExTypo':
			WikEdGetText(obj, 'selection');
			if (obj.selection.plain != '') {
				obj.changed = obj.selection;
			}
			else {
				WikEdGetText(obj, 'whole');
				obj.changed = obj.whole
			}
			break;

// fixing buttons: selection / focusLine / cursor
		case 'wikEdFixPunct':
		case 'wikEdFixMath':
		case 'wikEdFixUnits':
		case 'wikEdFixDashes':
		case 'wikEdFixCaps':
		case 'wikEdFixChem':
			WikEdGetText(obj, 'selection, cursor');
			if (obj.selection.plain != '') {
				obj.changed = obj.selection;
			}
			else {
				WikEdGetText(obj, 'focusLine');
				if (obj.focusLine.plain != '') {
					obj.changed = obj.focusLine;
				}
				else {
					obj.changed = obj.cursor;
				}
			}
			break;

// fixing buttons: selection / focusWord / cursor
			WikEdGetText(obj, 'selection, cursor');
			if (obj.selection.plain != '') {
				obj.changed = obj.selection;
			}
			else {
				WikEdGetText(obj, 'focusWord');
				if (obj.focusWord.plain != '') {
					obj.changed = obj.focusWord;
				}
				else {
					obj.changed = obj.cursor;
				}
			}
			break;

// source: selection / whole
		case 'wikEdSource':
			WikEdGetText(obj, 'selection');
			if (obj.selection.plain != '') {
				obj.changed = obj.selection;
			}
			else {
				WikEdGetText(obj, 'whole');
				obj.changed = obj.whole;
			}
			break;

// insert tags: selection / focusWord / cursor
		case 'wikEdInsertTags':
			WikEdGetText(obj, 'selection, cursor');
			if (obj.selection.plain != '') {
				obj.changed = obj.selection;
			}
			else {
				WikEdGetText(obj, 'focusWord');
				if (obj.focusWord.plain != '') {
					obj.changed = obj.focusWord;
				}
				else {
					obj.changed = obj.selection;
				}
			}
			break;

// custom edit functions have to call WikEdGetText() themselves
		default:
			WikEdGetText(obj, 'cursor');
			obj.changed = obj.cursor;
			break;
	}

// exit
	if (obj.changed == null) {
		wikEdFrameWindow.focus();

// reset button to active, reset cursor
		if (buttonObj != null) {
			if (buttonObj.className != 'wikEdButtonInactive') {
				buttonObj.className = 'wikEdButton';
			}
		}
		return;
	}

// set local syntax highlighting flag
	var highlightSyntax = wikEdHighlightSyntax;

// manipulate the text
	var selectChange = true;
	switch (buttonId) {

// undo
		case 'wikEdUndo':
			if (wikEdLastVersion == null) {
				wikEdLastVersion = obj.changed.plain;
			}
			WikEdFrameExecCommand('undo');
			obj.changed.range = obj.sel.getRangeAt(obj.sel.rangeCount - 1);
			obj.changed.plain = null;
			obj.changed.keepSel = true;
			break;

// redo
		case 'wikEdRedo':
			WikEdFrameExecCommand('redo');
			obj.changed.range = obj.sel.getRangeAt(obj.sel.rangeCount - 1);
			obj.changed.plain = null;
			obj.changed.keepSel = true;
			break;

// bold
		case 'wikEdBold':
			if ( /\'\'\'([^\'].*?)\'\'\'/.test(obj.changed.plain) ) {
				obj.changed.plain = obj.changed.plain.replace(/\'\'\'([^\'].*?)\'\'\'/g, '$1');
			}
			else {
				obj.changed.plain = '\'\'\'' + obj.changed.plain + '\'\'\'';
				obj.changed.plain = obj.changed.plain.replace(/(\'\'\')( *)(.*?)( *)(\'\'\')/, '$2$1$3$5$4');
			}
			obj.changed.plain = obj.changed.plain.replace(/\'{6,}/g, '\'\'\'\'\'');
			obj.changed.keepSel = true;
			break;

// italic
		case 'wikEdItalic':
			if ( /(\'{3,})\'\'([^\'].*?)\'\'(\'{3,})/.test(obj.changed.plain) ) {
				obj.changed.plain = obj.changed.plain.replace(/(\'{3,})\'\'([^\'].*?)\'\'(\'{3,})/g, '$1$2$3');
			}
			else if ( /(^|[^\'])\'\'([^\'].*?)\'\'([^\']|$)/.test(obj.changed.plain) ) {
				obj.changed.plain = obj.changed.plain.replace(/(^|[^\'])\'\'([^\'].*?)\'\'([^\']|$)/g, '$1$2$3');
			}
			else {
				obj.changed.plain = '\'\'' + obj.changed.plain + '\'\'';
				obj.changed.plain = obj.changed.plain.replace(/(\'\')( *)(.*?)( *)(\'\')/, '$2$1$3$5$4');
			}
			obj.changed.plain = obj.changed.plain.replace(/\'{6,}/g, '\'\'\'\'\'');
			obj.changed.keepSel = true;
			break;

// underline
		case 'wikEdUnderline':
			if ( /&lt;u&gt;(.*?)&lt;\/u&gt;/i.test(obj.changed.plain) ) {
				obj.changed.plain = obj.changed.plain.replace(/&lt;u&gt;(.*?)&lt;\/u&gt;/gi, '$1');
			}
			else {
				obj.changed.plain = '&lt;u&gt;' + obj.changed.plain + '&lt;\/u&gt;';
				obj.changed.plain = obj.changed.plain.replace(/(&lt;u&gt;)( *)(.*?)( *)(&lt;\/u&gt;)/, '$2$1$3$5$4');
			}
			obj.changed.keepSel = true;
			break;

// strikethrough
		case 'wikEdStrikethrough':
			if ( /&lt;s&gt;(.*?)&lt;\/s&gt;/i.test(obj.changed.plain) ) {
				obj.changed.plain = obj.changed.plain.replace(/&lt;s&gt;(.*?)&lt;\/s&gt;/gi, '$1');
			}
			else {
				obj.changed.plain = '&lt;s&gt;' + obj.changed.plain + '&lt;\/s&gt;';
				obj.changed.plain = obj.changed.plain.replace(/(&lt;s&gt;)( *)(.*?)( *)(&lt;\/s&gt;)/, '$2$1$3$5$4');
			}
			obj.changed.keepSel = true;
			break;

// nowiki
		case 'wikEdNowiki':
			if ( /&lt;nowiki&gt;(.*?)&lt;\/nowiki&gt;/i.test(obj.changed.plain) ) {
				obj.changed.plain = obj.changed.plain.replace(/&lt;nowiki&gt;(.*?)&lt;\/nowiki&gt;/gi, '$1');
			}
			else {
				obj.changed.plain = '&lt;nowiki&gt;' + obj.changed.plain + '&lt;\/nowiki&gt;';
				obj.changed.plain = obj.changed.plain.replace(/(&lt;nowiki&gt;)( *)(.*?)( *)(&lt;\/nowiki&gt;)/, '$2$1$3$5$4');
			}
			obj.changed.keepSel = true;
			break;

// superscript
		case 'wikEdSuperscript':
			if ( /&lt;sup&gt;(.*?)&lt;\/sup&gt;/i.test(obj.changed.plain) ) {
				obj.changed.plain = obj.changed.plain.replace(/&lt;sup&gt;(.*?)&lt;\/sup&gt;/gi, '$1');
			}
			else {
				obj.changed.plain = '&lt;sup&gt;' + obj.changed.plain + '&lt;/sup&gt;';
				obj.changed.plain = obj.changed.plain.replace(/(&lt;sup&gt;)( *)(.*?)( *)(&lt;\/sup&gt;)/, '$2$1$3$5$4');
			}
			obj.changed.keepSel = true;
			break;

// subscript
		case 'wikEdSubscript':
			if ( /&lt;sub&gt;(.*?)&lt;\/sub&gt;/i.test(obj.changed.plain) ) {
				obj.changed.plain = obj.changed.plain.replace(/&lt;sub&gt;(.*?)&lt;\/sub&gt;/gi, '$1');
			}
			else {
				obj.changed.plain = '&lt;sub&gt;' + obj.changed.plain + '&lt;/sub&gt;';
				obj.changed.plain = obj.changed.plain.replace(/(&lt;sub&gt;)( *)(.*?)( *)(&lt;\/sub&gt;)/, '$2$1$3$5$4');
			}
			obj.changed.keepSel = true;
			break;

// in-text reference
		case 'wikEdRef':
			if (obj.changed.plain == '') {
				obj.changed.plain = '&lt;ref name=\"\"/&gt;';
			}
			else if ( /&lt;ref name=\"\" ?\/&gt;/i.test(obj.changed.plain) ) {
				obj.changed.plain = '';
			}
			else if ( /&lt;ref( name=\"\")?&gt;(.*?)&lt;\/ref&gt;/i.test(obj.changed.plain) ) {
				obj.changed.plain = obj.changed.plain.replace(/&lt;ref( name=\"\")?&gt;(.*?)&lt;\/ref&gt;/gi, '$2');
			}
			else {
				obj.changed.plain = '&lt;ref name=\"\"&gt;' + obj.changed.plain + '&lt;/ref&gt;';
				obj.changed.plain = obj.changed.plain.replace(/(&lt;ref name=\"\"&gt;)( *)(.*?)( *)(&lt;\/ref&gt;)/, '$2$1$3$5$4');
			}
			obj.changed.keepSel = true;
			break;

// references location
		case 'wikEdReferences':
		case 'wikEdReferencesSection':
			var ref = wikEdText['wikEdReferencesSection'];
			ref = ref.replace(/</g, '&lt;');
			ref = ref.replace(/>/g, '&gt;');
			var refEscaped = ref;
			refEscaped = refEscaped.replace(/([^\w\s\;\&])/g, '\\$1');
			refEscaped = refEscaped.replace(/^\n|\n$/g, '\\n*');
			refEscaped = refEscaped.replace(/(\n)/g, '\\n');
			var	regExp = new RegExp(refEscaped, 'gi');

// plain references tag
			if (buttonId == 'wikEdReferences') {
				if (obj.changed.plain == '') {
					obj.changed.plain = '&lt;references/&gt;';
				}
				else if (regExp.test(obj.changed.plain)) {
					obj.changed.plain = obj.changed.plain.replace(regExp, '');
				}
				else if ( /&lt;references ?\/&gt;/i.test(obj.changed.plain) ) {
					obj.changed.plain = obj.changed.plain.replace(/&lt;references ?\/&gt;/gi, '');
				}
				else {
					obj.changed = obj.cursor;
					obj.changed.plain = '&lt;references/&gt;';
				}
			}

// complete references code
			else {
				if (obj.changed.plain == '') {
					obj.changed.plain = ref;
				}
				else if (regExp.test(obj.changed.plain)) {
					obj.changed.plain = obj.changed.plain.replace(regExp, '');
				}
				else if ( /&lt;references ?\/&gt;/i.test(obj.changed.plain) ) {
					obj.changed.plain = obj.changed.plain.replace(/&lt;references ?\/&gt;/gi, '');
				}
				else {
					obj.changed = obj.cursor;
					obj.changed.plain = ref;
				}
			}
			obj.changed.keepSel = true;
			break;

// toggle lowercase / uppercase
		case 'wikEdCase':

// lowercase all uppercased text
			if (obj.changed.plain == '') {
				obj.changed.plain = null;
			}
			else {
				if (obj.changed.plain.toUpperCase() == obj.changed.plain) {
					obj.changed.plain = obj.changed.plain.toLowerCase();
				}

// first-letter-uppercase all lowercased text
				else if (obj.changed.plain.toLowerCase() == obj.changed.plain) {
					obj.changed.plain = obj.changed.plain.replace(/\b([\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9])([\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]*)/g,
						function (p, p1, p2) {
							return(p1.toUpperCase() + p2.toLowerCase());
						}
					);
				}

// uppercase mixed upper and lowercased text
				else {
					obj.changed.plain = obj.changed.plain.toUpperCase();
				}
			}
			obj.changed.keepSel = true;
			break;

// undo all
		case 'wikEdUndoAll':
			if (wikEdLastVersion == null) {
				wikEdLastVersion = obj.changed.plain;
			}
			obj.changed.plain = wikEdOrigVersion;
			obj.changed.plain = obj.changed.plain.replace(/&/g, '&amp;');
			obj.changed.plain = obj.changed.plain.replace(/>/g, '&gt;');
			obj.changed.plain = obj.changed.plain.replace(/</g, '&lt;');
			break;

// redo all
		case 'wikEdRedoAll':
			if (wikEdLastVersion != null) {
				obj.changed.plain = wikEdLastVersion;
			}
			break;

// create wikilink
		case 'wikEdWikiLink':
			if ( /\[\[(.*?)\]\]/.test(obj.changed.plain) ) {
				obj.changed.plain = obj.changed.plain.replace(/\[\[(.*?)\]\]/g, '$1');
			}
			else {
				obj.changed.plain = '\[\[' + obj.changed.plain + '\]\]';
				obj.changed.plain = obj.changed.plain.replace(/(\[\[)( *)(.*?)( *)(\]\])/, '$2$1$3$5$4');
			}
			obj.changed.keepSel = true;
			break;

// create weblink
		case 'wikEdWebLink':
			if ( /\[(.*?)\]/.test(obj.changed.plain) ) {
				obj.changed.plain = obj.changed.plain.replace(/\[(.*?)\]/g, '$1');
			}
			else {
				obj.changed.plain = '\[' + obj.changed.plain + '\]';
				obj.changed.plain = obj.changed.plain.replace(/(\[)( *)(.*?)( *)(\])/, '$2$1$3$5$4');
			}
			obj.changed.keepSel = true;
			break;

// decrease heading level
		case 'wikEdDecreaseHeading':

// decrease heading
			obj.changed.plain = obj.changed.plain.replace(/(^|\n)=(=+) *([^\n]*?) *=+(?=\n|$)/g, '$1$2 $3 $2');

// remove heading
			obj.changed.plain = obj.changed.plain.replace(/(^|\n)=(?!=) *([^\n]*?) *=+(?=\n|$)/g, '$1$2');

// adjust closing tags
			obj.changed.plain = obj.changed.plain.replace(/(^|\n)(=+) *([^\n]*?) *=+(?=\n|$)/g, '$1$2 $3 $2');
			obj.changed.keepSel = true;
			break;

// increase heading level
		case 'wikEdIncreaseHeading':

// increase heading
			obj.changed.plain = obj.changed.plain.replace(/(^|\n)(=+) *([^\n]*?) *=+(?=\n|$)/g, '$1=$2 $3 $2=');

// create new heading
			if (/\n/.test(obj.changed.plain) == false) {
				obj.changed.plain = obj.changed.plain.replace(/(^|\n)([^=\n\s][^\n]*?)(?=\n|$)/g, '$1== $2 ==');
			}

// adjust closing tags
			obj.changed.plain = obj.changed.plain.replace(/(^|\n)(=+) *([^\n]*?) *=+(?=\n|$)/g, '$1$2 $3 $2');
			obj.changed.keepSel = true;
			break;

// increase bullet list
		case 'wikEdIncreaseBulletList':
			obj.changed.plain = obj.changed.plain.replace(/([^\n]+)/g,
				function (p, p1) {
					p1 = p1.replace(/^ *([\*\#\:\;]*) *()/g, '*$1 ');
					return(p1);
				}
			);
			obj.changed.keepSel = true;
			break;

// decrease bullet list
		case 'wikEdDecreaseBulletList':
			obj.changed.plain = obj.changed.plain.replace(/([^\n]+)/g,
				function (p, p1) {
					p1 = p1.replace(/^\* *()/g, '');
					return(p1);
				}
			);
			obj.changed.keepSel = true;
			break;

// increase numbered list
		case 'wikEdIncreaseNumberList':
			obj.changed.plain = obj.changed.plain.replace(/([^\n]+)/g,
				function (p, p1) {
					p1 = p1.replace(/^ *([\*\#\:\;]*) *()/g, '#$1 ');
					return(p1);
				}
			);
			obj.changed.keepSel = true;
			break;

// decrease numbered list
		case 'wikEdDecreaseNumberList':
			obj.changed.plain = obj.changed.plain.replace(/([^\n]+)/g,
				function (p, p1) {
					p1 = p1.replace(/^\# *()/g, '');
					return(p1);
				}
			);
			obj.changed.keepSel = true;
			break;

// increase indented list
		case 'wikEdIncreaseIndentList':
			obj.changed.plain = obj.changed.plain.replace(/([^\n]+)/g,
				function (p, p1) {
					p1 = p1.replace(/^ *([\*\#\:\;]*) *()/g, ':$1 ');
					return(p1);
				}
			);
			obj.changed.keepSel = true;
			break;

// decrease indented list
		case 'wikEdDecreaseIndentList':
			obj.changed.plain = obj.changed.plain.replace(/([^\n]+)/g,
				function (p, p1) {
					p1 = p1.replace(/^\# *()/g, '');
					return(p1);
				}
			);
			obj.changed.keepSel = true;
			break;

// create definition list
		case 'wikEdDefinitionList':
			obj.changed.plain = obj.changed.plain.replace(/([^\n]+)/g,
				function (p, p1) {
					p1 = p1.replace(/^ *([^\s\;]+) *()/g, '; $1 : ');
					return(p1);
				}
			);
			break;

// create image
		case 'wikEdImage':
			if (obj.changed.plain != '') {
				obj.changed.plain = '[[Image:<span class="wikEdInsertHere">' + wikEdText['image filename'] + '</span>|thumb|<span class="wikEdInsertHere">' + wikEdText['image width'] + '</span>px|' + obj.changed.plain + ']]';
			}
			else {
				obj.changed.plain = '[[Image:<span class="wikEdInsertHere">' + wikEdText['image filename'] + '</span>|thumb|<span class="wikEdInsertHere">' + wikEdText['image width'] + '</span>px|<span class="wikEdInsertHere"> </span>]]';
				if (obj.focusWord != null) {
					if (obj.focusWord.plain != '') {
						obj.changed.plain = ' ' + obj.changed.plain + ' ';
					}
				}
			}
			break;

// create table
		case 'wikEdTable':
			if (obj.changed.plain != '') {
				obj.changed.plain = obj.changed.plain.replace(/(^|\n) *()/g, '\n|-\n| ');
				obj.changed.plain = obj.changed.plain.replace(/^\n\|\-\n/, '\n{| class="wikitable"\n');
				obj.changed.plain = obj.changed.plain.replace(/$/g, '\n|}\n');
			}
			else {
				obj.changed.plain = '\n{| class="wikitable"\n|+ <span class="wikEdInsertHere">' + wikEdText['table caption'] + '</span>\n! <span class="wikEdinserthere">' + wikEdText['table heading'] + '</span> !! <span class="wikEdInsertHere">' + wikEdText['table heading'] + '</span>\n|-\n| <span class="wikEdInsertHere">' + wikEdText['table cell'] + '</span> || <span class="wikEdInsertHere">' + wikEdText['table cell'] + '</span>\n|-\n| <span class="wikEdInsertHere">' + wikEdText['table cell'] + '</span> || <span class="wikEdInsertHere">' + wikEdText['table cell'] + '</span>\n|}\n';
				if (obj.focusLine.plain != '') {
					obj.changed.plain = '\n' + obj.changed.plain + '\n';
				}
			}
			break;

// wikify: always done above
		case 'wikEdWikify':
			break;

// textify: strip html from pasted content
		case 'wikEdTextify':
			WikEdTextify(obj.changed);
			break;

// redirect
		case 'wikEdRedirect':
			var linkTarget;
			if (obj.selection.plain != '') {
				linkTarget = obj.selection.plain;
			}
			else if (obj.selectionWord.plain != '') {
				linkTarget = obj.selectionWord.plain;
			}
			else {
				linkTarget = '<span class="wikEdInsertHere">' + wikEdText['redirect article link'] + '</span>';
			}

// remove link text after |
			linkTarget = linkTarget.replace(/\|.*()/, '');

// remove formatting and spaces
			linkTarget = linkTarget.replace(/^(=+|\'+|<[^>]*>|\s+|\[)+(.*?)(=+|\'+|<[^>]*>|\s+|\])+$/g, '$2');

			obj.changed.plain = '#redirect [[' + linkTarget + ']]';

// append to summary
			if ( (obj.selection.plain != '') || (obj.selectionWord.plain != '') ) {
				wikEdInputElement['summary'].value = wikEdInputElement['summary'].value.replace(/#redirect( \[\[[^\]]*\]\])?(, *)?/g, '');
				wikEdInputElement['summary'].value = WikEdAppendToSummary(wikEdInputElement['summary'].value, '#redirect [[' + linkTarget + ']]');
			}
			else {
				wikEdInputElement['summary'].value = WikEdAppendToSummary(wikEdInputElement['summary'].value, '#redirect');
			}
			selectChange = false;
			break;

// find and replace
		case 'wikEdFindPrev':
		case 'wikEdFindNext':
		case 'wikEdJumpPrev':
		case 'wikEdJumpNext':
		case 'wikEdReplacePrev':
		case 'wikEdReplaceNext':
		case 'wikEdFindAll':
		case 'wikEdReplaceAll':

// get the find text
			var findText;

// unescape <, >, and &
			obj.changed.plain = obj.changed.plain.replace(/&lt;/g, '<');
			obj.changed.plain = obj.changed.plain.replace(/&gt;/g, '>');
			obj.changed.plain = obj.changed.plain.replace(/&amp;/g, '&');

// copy selection/word under cursor to find field
			if ( (parameters == 'shift') && ( (buttonId == 'wikEdFindNext') || (buttonId == 'wikEdReplaceNext') ) ) {
				if (/\n/.test(obj.changed.plain) == false) {
					if (buttonId == 'wikEdFindNext') {
						wikEdInputElement['find'].value = obj.changed.plain;
					}
					else {
						wikEdInputElement['replace'].value = obj.changed.plain;
					}
					obj.changed.keepSel = true;
					obj.changed.plain = null;
					break;
				}
			}

// get the find text from the find field
			if ( (buttonId == 'wikEdJumpPrev') || (buttonId == 'wikEdJumpNext') ) {
				findText = obj.changed.plain;
				if (obj.selection.plain == '') {
					obj.changed.keepSel = true;
					obj.changed.plain = null;
					break;
				}
			}

// get the find text from the find field
			else {
				if (wikEdInputElement['find'].value != '') {
					findText = wikEdInputElement['find'].value;
				}
				else {
					obj.changed.plain = null;
					break;
				}
			}

// handle newlines and special blanks for built-in search
			if (wikEdRegExp.getAttribute('checked') == 'false') {
				findText = findText.replace(/\n/g, '');
				findText = findText.replace(/\s/g, ' ');
			}

// get the replace text
			var replaceText = wikEdInputElement['replace'].value;
			var regExpFind;

// set regexp flags
			var regExpFlags = 'g';
			if (wikEdCaseSensitive.getAttribute('checked') == 'false') {
				regExpFlags += 'i';
			}

// format the find and replace texts for a plain text search
			if ( (wikEdRegExp.getAttribute('checked') == 'false') || (buttonId == 'wikEdJumpPrev') || (buttonId == 'wikEdJumpNext') ) {
				regExpFind = new RegExp(findText.replace(/([\\^\$\*\+\?\.\(\)\[\]\{\}\:\=\!\|\,\-])/g, '\\$1'), regExpFlags);
			}

// format the find and replace texts for a regular expression search
			else {
				regExpFind = new RegExp(findText, regExpFlags);
				replaceText = replaceText.replace(/((^|[^\\])(\\\\)*)\\n/g, '$1\n');
			}

// replace all
			var replacedFlag = false;
			if (buttonId == 'wikEdReplaceAll') {
				if (regExpFind.test(obj.changed.plain)) {
					obj.changed.plain = obj.changed.plain.replace(regExpFind, replaceText);
					replacedFlag = true;
				}
				else {
					obj.changed.plain = null;
				}
			}

// replace an existing selection
			else if ( (buttonId == 'wikEdReplacePrev') || (buttonId == 'wikEdReplaceNext') ) {
				if (regExpFind.test(obj.selection.plain)) {
					var replaced = obj.selection.plain.replace(regExpFind, replaceText);
					if (obj.changed.plain != replaced) {
						obj.changed.plain = replaced;
						replacedFlag = true;
					}
					else {
						obj.changed.plain = null;
					}
				}
				else {
					obj.changed.plain = null;
				}
			}
			else if (
				(buttonId == 'wikEdFindNext') || (buttonId == 'wikEdFindPrev') ||
				(buttonId == 'wikEdJumpNext') || (buttonId == 'wikEdJumpPrev')
			) {
				obj.changed.plain = null;
			}

			if (
				(buttonId == 'wikEdFindNext') || (buttonId == 'wikEdFindPrev') ||
				(buttonId == 'wikEdJumpNext') || (buttonId == 'wikEdJumpPrev') ||
				(buttonId == 'wikEdReplaceNext') || (buttonId == 'wikEdReplacePrev') ||
				(buttonId == 'wikEdFindAll')
			) {
				if (replacedFlag == false) {

// get direction
					var backwards = false;
					if ( (buttonId == 'wikEdFindPrev') || (buttonId == 'wikEdJumpPrev') || (buttonId == 'wikEdReplacePrev') ) {
						backwards = true;
					}

// get case sensitive
					var caseSensitive = false;
					if (wikEdCaseSensitive.getAttribute('checked') == 'true') {
						caseSensitive = true;
					}

// find all
					if (buttonId == 'wikEdFindAll') {
						var found;
						var foundRanges = [];

// start at top of text
						obj.sel.removeAllRanges();
						var range = document.createRange();
						range.setStartBefore(wikEdFrameBody.firstChild);
						range.collapse(true);
						range = obj.sel.addRange(range);

// cycle through matches
						var scrollTop = wikEdFrameBody.scrollTop;
						do {

// use regexp seach
							if (wikEdRegExp.getAttribute('checked') == 'true') {
								found = WikEdFind(obj, findText, caseSensitive, false, false, regExpFind);
							}

// use built-in sarch
							else {
								found = WikEdFind(obj, findText, caseSensitive, false, false, null);
							}
							if (found == true) {
								foundRanges.push(obj.changed.range.cloneRange());
							}
						} while (found == true);

// scroll back
						if (wikEdRegExp.getAttribute('checked') == 'false') {
							wikEdFrameBody.scrollTop = scrollTop;
						}

// add the found ranges
						obj.sel.removeAllRanges();
						for (range in foundRanges) {
							obj.sel.addRange(foundRanges[range]);
						}
						obj.changed.plain = null;
					}

// normal find
					else {
						if (wikEdRegExp.getAttribute('checked') == 'true') {
							WikEdFind(obj, findText, caseSensitive, backwards, true, regExpFind);
						}
						else {
							WikEdFind(obj, findText, caseSensitive, backwards, true, null);
							selectChange = false;
						}
					}
				}
			}

// escape <, >, and &
			if (obj.changed.plain != null) {
				obj.changed.plain = obj.changed.plain.replace(/&/g, '&amp;');
				obj.changed.plain = obj.changed.plain.replace(/</g, '&lt;');
				obj.changed.plain = obj.changed.plain.replace(/>/g, '&gt;');
			}

// save search history to settings
			if ( (buttonId == 'wikEdFindPrev') || (buttonId == 'wikEdFindNext') || (buttonId == 'wikEdFindAll') ) {
				WikEdAddToHistory('find');
			}
			if ( (buttonId == 'wikEdReplacePrev') || (buttonId == 'wikEdReplaceNext') || (buttonId == 'wikEdReplaceAll') ) {
				WikEdAddToHistory('find');
				WikEdAddToHistory('replace');
			}
			obj.changed.keepSel = true;
			break;

// fixbasic: fix characters, spaces, empty lines, certain headings, needed for all fixing functions
// to do: only certain changes in multiline tags: comments, tables, subst
		case 'wikEdFixBasic':
			WikEdFixBasic(obj.changed);
			obj.changed.keepSel = true;
			break;
		case 'wikEdFixPunct':
			WikEdFixPunct(obj.changed);
			obj.changed.keepSel = true;
			break;
		case 'wikEdFixMath':
			WikEdFixMath(obj.changed);
			obj.changed.keepSel = true;
			break;
		case 'wikEdFixChem':
			WikEdFixChem(obj.changed);
			obj.changed.keepSel = true;
			break;
		case 'wikEdfixUnicode':
			WikEdFixUnicode(obj.changed);
			obj.changed.keepSel = true;
			break;
		case 'wikEdFixUnits':
			WikEdFixUnits(obj.changed);
			obj.changed.keepSel = true;
			break;
		case 'wikEdFixDashes':
			WikEdFixDashes(obj.changed);
			obj.changed.keepSel = true;
			break;
		case 'wikEdFixHtml':
			WikEdFixHTML(obj.changed);
			obj.changed.keepSel = true;
			break;
		case 'wikEdFixRegExTypo':
			if ( (wikEdRegExTypoFix == true) && (wikEdTypoRulesFind.length > 0) ) {
				WikEdFixTypos(obj.changed);
			}
			else {
				obj.changed.plain = null;
			}
			obj.changed.keepSel = true;
			break;
		case 'wikEdFixCaps':
			WikEdFixCaps(obj.changed);
			obj.changed.keepSel = true;
			break;
		case 'wikEdFixAll':
			WikEdFixAll(obj.changed);
			obj.changed.keepSel = true;
			break;

// source on
		case 'wikEdSource':
			obj.changed.plain = obj.changed.code;
			obj.changed.plain = obj.changed.plain.replace(/(<(br|p)\b[^>]*>)/g, '$1\n');
			obj.changed.plain = obj.changed.plain.replace(/&/g, '&amp;');
			obj.changed.plain = obj.changed.plain.replace(/</g, '&lt;');
			obj.changed.plain = obj.changed.plain.replace(/>/g, '&gt;');
			highlightSyntax = false;
			break;

// insert tags
		case 'wikEdInsertTags':
			var tagOpen = parameters[0] || '';
			var tagClose = parameters[1] || '';
			var sampleText = parameters[2] || '';
			tagOpen = tagOpen.replace(/&/g, '&amp;');
			tagOpen = tagOpen.replace(/</g, '&lt;');
			tagOpen = tagOpen.replace(/>/g, '&gt;');
			tagClose = tagClose.replace(/&/g, '&amp;');
			tagClose = tagClose.replace(/</g, '&lt;');
			tagClose = tagClose.replace(/>/g, '&gt;');
			tagsampleText = sampleText.replace(/&/g, '&amp;');
			tagsampleText = sampleText.replace(/</g, '&lt;');
			tagsampleText = sampleText.replace(/>/g, '&gt;');

// single string to insert
			if ( (tagOpen.length > 0) && (tagClose.length == 0) && (sampleText.length == 0) ) {
				obj.changed = obj.cursor;
				obj.changed.plain = tagOpen;
			}

// opening and closing strings
			else if ( (obj.changed.plain == '') && (sampleText.length > 0) ) {
				obj.changed.plain = tagOpen + sampleText + tagClose;
			}
			else {
				obj.changed.plain = tagOpen + obj.changed.plain + tagClose;
			}
			break;

// custom edit functions
		default:
			if (CustomHandler != null) {
				CustomHandler(obj);
			}
			else {
				alert('Unknown edit function \'' + buttonId + '\'');
			}
			break;
	}

// update the selection only, do not change the text
	if (obj.changed.plain == null) {
		if (buttonId != 'wikEdFindAll') {
			obj.sel.removeAllRanges();
			obj.sel.addRange(obj.changed.range);

// scroll the selected text into the viewport by using a backwards find
			if (selectChange != false) {

// get the plain text of the selection
				var plainText = obj.sel.getRangeAt(obj.sel.rangeCount - 1).cloneContents().textContent;

// collapse the selection to the end and search backwards
				if (plainText.length > 0) {
					plainText = plainText.replace(/\n/g, '');
					obj.changed.range.collapse(false);

// parameters: window.find(string, caseSensitive, backwards, wrapAround, wholeWord, searchInFrames, showDialog)
					wikEdFrameWindow.find(plainText, true, true, false, false, false, false);
				}
			}
		}
	}

// apply text changes
	else {

// a text change erases the last version for redo all
		if ( (buttonId != 'wikEdUndo') && (buttonId != 'wikEdRedo') && (buttonId != 'wikEdUndoAll') ) {
			wikEdLastVersion = null;
		}

// highlight the syntax
		obj.html = obj.changed.plain;
		if (highlightSyntax == true) {
			if (obj.changed.from == 'whole') {
				obj.whole = true;
			}
			WikEdHighlightSyntax(obj);
		}

// display tabs
		else {
			obj.html = obj.html.replace(/(\t)/g, '<span class="wikEdTabPlain">$1</span><!--wikEdTabPlain-->');
		}

// display multiple blanks as blank-&nbsp;
		obj.html = obj.html.replace(/  /g, '&nbsp; ');
		obj.html = obj.html.replace(/  /g, '&nbsp; ');

// newlines to <br />
		obj.html = obj.html.replace(/\n/g, '<br />');

// make changed range text the current selection
		obj.sel.removeAllRanges();
		obj.sel.addRange(obj.changed.range);

// get the scroll position
		var scrollTop;
		if (obj.changed.from == 'whole') {
			scrollTop = wikEdFrameBody.scrollTop;
		}

// replace the selection with changed text
		if (obj.html != '') {
			WikEdFrameExecCommand('inserthtml', obj.html);
		}
		else {
			WikEdFrameExecCommand('delete');
		}

// select the whole text after replacing the whole text and scroll to same height
		if (obj.changed.from == 'whole') {
			obj.sel.removeAllRanges();
			wikEdFrameBody.scrollTop = scrollTop;
			var range = document.createRange();
			range.setStartBefore(wikEdFrameBody.firstChild);
			range.setEndAfter(wikEdFrameBody.lastChild);
			obj.sel.addRange(range);
			selectChange = false;
		}

// select the changed text and scroll it into the viewport by using a backwards find
		if (selectChange != false) {

// get the text content of the changed text
			var div = document.createElement('div');
			div.innerHTML = obj.changed.plain;
			var plainText = div.textContent;

// find the text
			if (plainText.length > 0) {
				plainText = plainText.replace(/\n/g, '');

// parameters: window.find(string, caseSensitive, backwards, wrapAround, wholeWord, searchInFrames, showDialog)
				wikEdFrameWindow.find(plainText, true, true, false, false, false, false);
			}
		}
	}

// remove selection, keep whole text auto-selection as warning
	if (
		( (obj.changed.keepSel != true) && (obj.changed.from != 'whole') ) ||
		(buttonId == 'wikEdRedirect') ||
		( (buttonId == 'wikEdWikify') && (parameters == 'whole') )
	) {

// workaround for Firefox 1.5 bug using: obj.sel.getRangeAt(obj.sel.rangeCount - 1).collapse(false);
		var range = document.createRange();
		range.setStart(obj.sel.focusNode, obj.sel.focusOffset);
		range.collapse(true);
		obj.sel.removeAllRanges();
		obj.sel.addRange(range);
	}

// reset button to active, reset cursor
	if (buttonObj != null) {
		if (buttonObj.className != 'wikEdButtonInactive') {
			buttonObj.className = 'wikEdButton';
		}
		buttonObj.style.cursor = 'auto';
	}

// grey out inactive buttons
	WikEdInactiveButtons();

// reset the frame DOM cache because the frame content has been changed
	wikEdFrameDOMCache = null;

// focus the frame
	if (wikEdUseWikEd == true) {
		wikEdFrameWindow.focus();
	}

// add event handler to make highlighted frame links ctrl-clickable
	if ( (highlightSyntax == true) && (obj.changed.plain != null) ) {
		WikEdFollowLinks();
	}

	return;
}


//
// WikEdFollowLinks: register click handlers to make highlighted frame links ctrl-clickable
//

window.WikEdFollowLinks = function() {

	if (wikEdFollowLinks == true) {
		for (var linkId in wikEdFollowLinkHash) {
			if (typeof(wikEdFollowLinkHash[linkId]) != 'string') {
				continue;
			}
			var linkSpan = wikEdFrameDocument.getElementById(linkId);
			if (linkSpan != null) {
				linkSpan.addEventListener('click', WikEdFollowLinkHandler, true);
			}
		}
	}
	return;
}


//
// WikEdGetText: get the text fragments to manipulate
//

window.WikEdGetText = function(obj, whichFragment, noWikify) {

// get selection object
	if (obj.sel == null) {
		obj.sel = wikEdFrameWindow.getSelection();
	}

// cursor for the cursor position (always done)
	if (obj.cursor == null) {
		obj.cursor = {};
		obj.cursor.from = 'cursor';
		obj.cursor.keepSel = false;
		obj.cursor.range = document.createRange();
		obj.cursor.range.setStart(obj.sel.focusNode, obj.sel.focusOffset);
		obj.cursor.range.setEnd(obj.sel.focusNode, obj.sel.focusOffset);
		obj.cursor.plain = '';
	}

// whole for the whole text
	if (obj.whole == null) {
		if (/whole|selectionWord|selectionLine|focusWord|focusLine/.test(whichFragment) == true) {
			obj.whole = {};
			obj.whole.plainArray = [];
			obj.whole.plainNode = [];
			obj.whole.plainStart = [];
			obj.whole.from = 'whole';
			obj.whole.keepSel = false;

// set whole range
			obj.whole.range = document.createRange();
			obj.whole.range.setStartBefore(wikEdFrameBody.firstChild);
			obj.whole.range.setEndAfter(wikEdFrameBody.lastChild);

// get whole plain text
			WikEdGetInnerHTML(obj.whole, wikEdFrameBody);
			obj.whole.code = obj.whole.html;
			WikEdRemoveHighlightingWikify(obj.whole, noWikify);
			obj.whole.plain = obj.whole.html;
			obj.whole.plain = obj.whole.plain.replace(/<br\b[^>]*>[\n ]*()/g, '\n');
			obj.whole.plain = obj.whole.plain.replace(/\u00a0/g, ' ');
		}
	}

// selection for the selected text
	if (obj.selection == null) {
		if (/selection\b|selectionWord|selectionLine/.test(whichFragment) == true) {
			obj.selection = {};
			obj.selection.from = 'selection';
			obj.selection.keepSel = false;

// copy range to document fragment
			obj.selection.range = obj.sel.getRangeAt(obj.sel.rangeCount - 1);
			var documentFragment = obj.selection.range.cloneContents();

// get selected text
			WikEdGetInnerHTML(obj.selection, documentFragment);
			obj.selection.code = obj.selection.html;
			WikEdRemoveHighlightingWikify(obj.selection, noWikify);
			obj.selection.plain = obj.selection.html;
			obj.selection.plain = obj.selection.plain.replace(/<br\b[^>]*>[\n ]*()/g, '\n');
			obj.selection.plain = obj.selection.plain.replace(/\u00a0/g, ' ');
		}
	}

// focusWord and focusLine for the complete words and lines under the cursor
	if (obj.focusWord == null) {
		if (/focusWord|focusLine/.test(whichFragment) == true) {
			obj.focusWord = {};
			obj.focusWord.from = 'focusWord';
			obj.focusWord.range = document.createRange();

// setup focusLine object for the line under the cursor
			obj.focusLine = {};
			obj.focusLine.from = 'focusLine';
			obj.focusLine.keepSel = false;
			obj.focusLine.range = document.createRange();

// find the word and line boundaries
			WikEdFindBoundaries(obj.focusWord, obj.focusLine, obj.whole, obj.cursor);

// get the wikified plain text for the word under the cursor
			var documentFragment = obj.focusWord.range.cloneContents();
			WikEdGetInnerHTML(obj.focusWord, documentFragment);
			obj.focusWord.code = obj.focusWord.html;
			WikEdRemoveHighlightingWikify(obj.focusWord, noWikify);
			obj.focusWord.plain = obj.focusWord.html;
			obj.focusWord.plain = obj.focusWord.plain.replace(/<br\b[^>]*>[\n ]*()/g, '\n');
			obj.focusWord.plain = obj.focusWord.plain.replace(/\u00a0/g, ' ');

// get the wikified plain text for the line under the cursor
			var documentFragment = obj.focusLine.range.cloneContents();
			WikEdGetInnerHTML(obj.focusLine, documentFragment);
			obj.focusLine.code = obj.focusLine.html;
			WikEdRemoveHighlightingWikify(obj.focusLine, noWikify);
			obj.focusLine.plain = obj.focusLine.html;
			obj.focusLine.plain = obj.focusLine.plain.replace(/<br\b[^>]*>[\n ]*()/g, '\n');
			obj.focusLine.plain = obj.focusLine.plain.replace(/\u00a0/g, ' ');
		}
	}

// selectionWord and selectionLine for the complete words and lines under the selection
	if (obj.selectionWord == null) {
		if (/selectionWord|selectionLine/.test(whichFragment) == true) {

// setup selectionWord object for the words under the selection
			obj.selectionWord = {};
			obj.selectionWord.from = 'selectionWord';
			obj.selectionWord.keepSel = false;
			obj.selectionWord.range = document.createRange();

// setup selectionLine object for the lines under the selection
			obj.selectionLine = {};
			obj.selectionLine.from = 'selectionLine';
			obj.selectionLine.range = document.createRange();

// find the word and line boundaries
			WikEdFindBoundaries(obj.selectionWord, obj.selectionLine, obj.whole, obj.selection);

// get the wikified plain text for the words under the selection
			var documentFragment = obj.selectionWord.range.cloneContents();
			WikEdGetInnerHTML(obj.selectionWord, documentFragment);
			obj.selectionWord.code = obj.selectionWord.html;
			WikEdRemoveHighlightingWikify(obj.selectionWord, noWikify);
			obj.selectionWord.plain = obj.selectionWord.html;
			obj.selectionWord.plain = obj.selectionWord.plain.replace(/<br\b[^>]*>[\n ]*()/g, '\n');
			obj.selectionWord.plain = obj.selectionWord.plain.replace(/\u00a0/g, ' ');

// get the wikified plain text for the lines under the selection
			var documentFragment = obj.selectionLine.range.cloneContents();
			WikEdGetInnerHTML(obj.selectionLine, documentFragment);
			obj.selectionLine.code = obj.selectionLine.html;
			WikEdRemoveHighlightingWikify(obj.selectionLine, noWikify);
			obj.selectionLine.plain = obj.selectionLine.html;
			obj.selectionLine.plain = obj.selectionLine.plain.replace(/<br\b[^>]*>[\n ]*()/g, '\n');
			obj.selectionLine.plain = obj.selectionLine.plain.replace(/\u00a0/g, ' ');
		}
	}
	return;
}


//
// WikEdFind: custom find function with regexp properties, sets obj.changed.range, uses obj ranges
//

window.WikEdFind = function(obj, findText, caseSensitive, backwards, wrap, regExp) {

	var range = obj.sel.getRangeAt(obj.sel.rangeCount - 1);
	var found = false;

// empty the range to avoid error messages for reverse direction ranges
/////////////	obj.changed.range = document.createRange();

// use the fast built-in find function for non-regexp searches
	if (regExp == null) {

// parameters: window.find(string, caseSensitive, backwards, wrapAround, wholeWord, searchInFrames, showDialog)
		found = wikEdFrameWindow.find(findText, caseSensitive, backwards, wrap, false, true, false);
		if (found == true) {
			range = obj.sel.getRangeAt(obj.sel.rangeCount - 1);
		}
		obj.changed.range = range.cloneRange();
	}

// slow javascript regexp find and replace
	else {

// perform find
		if (obj.plainArray === undefined) {
			WikEdParseDOM(obj, wikEdFrameBody);
		}
		var regExpMatch = [];

// find next, search to the right
		if (backwards == false) {

// set start position for search to right
			regExpMatch = regExp.exec(obj.plain);
			regExp.lastIndex = obj.plainFocus;

// execute the regexp search to the right
			regExpMatch = regExp.exec(obj.plain);

// remember position for repeated searches
			obj.plainFocus = regExp.lastIndex;

// wrap around, start at beginning
			if ( (wrap == true) && (regExpMatch == null) ) {
				regExp.lastIndex = 0;
				regExpMatch = regExp.exec(obj.plain);
			}
		}

// find previous, search to the left
		else {

// cycle through the matches to the left
			var regExpMatchNext;
			do {
				regExpMatch = regExpMatchNext;
				regExpMatchNext = regExp.exec(obj.plain);
				if (regExpMatchNext == null) {
					break;
				}
			} while (regExpMatchNext.index < obj.plainAnchor);

// wrap around, find last occurrence
			if ( (wrap == true) && (regExpMatch == null) ) {
				do {
					regExpMatch = regExpMatchNext;
					regExpMatchNext = regExp.exec(obj.plain);
				} while (regExpMatchNext != null);
			}
		}

// select the find
		if (regExpMatch != null) {
			found = true;
			var i = 0;
			while ( (obj.plainStart[i + 1] <= regExpMatch.index) && (obj.plainStart[i + 1] != null) ) {
				i ++;
			}
			var j = i;
			while ( (obj.plainStart[j + 1] <= regExpMatch.index + regExpMatch[0].length) && (obj.plainStart[j + 1] != null) ) {
				j ++;
			}
			obj.changed.range.setEnd  (obj.plainNode[j], regExpMatch.index + regExpMatch[0].length - obj.plainStart[j]);
			obj.changed.range.setStart(obj.plainNode[i], regExpMatch.index - obj.plainStart[i]);
		}
	}
	return(found);
}


//
// WikEdTextify: strip html off of text
//

window.WikEdTextify = function(obj) {

// convert html to plain
	obj.plain = obj.html;
	obj.plain = obj.plain.replace(/\n/g, ' ');

// delete tags
	obj.plain = obj.plain.replace(/<(style|script|object|applet|embed)\b[^>]*>.*?<\/\1>/g, '');

// newlines
	obj.plain = obj.plain.replace(/<br\b[^>]*> *()/g, '\n');

// remove highlighting pre tags
	var isRemove = [];
	obj.plain = obj.plain.replace(/(<(\/?)pre\b([^>]*)>)/g,
		function (p, p1, p2, p3) {
			if (p2 == '') {
				if (/\bclass=\"wikEd\w+\"/.test(p3)) {
					isRemove.push(true);
					return('');
				}
				isRemove.push(false);
				return(p1);
			}
			if (isRemove.pop() == true) {
				return('');
			}
			return(p1);
		}
	);

// blocks
	obj.plain = obj.plain.replace(/<\/?(address|blockquote|center|div|hr|isindex|p|pre)\b[^>]*>/g, '\u0000\u0000');

// keep headings only if starting with a newline
	obj.html = obj.html.replace(/[\s|\u0000]*(^|\n|\u0000)[\s|\u0000]*<h[1-6]\b[^>]*>(.*?)<\/h[1-6]>[\s|\u0000]*()/g, '\u0000\u0000$2\u0000\u0000');

// lists
	obj.plain = obj.plain.replace(/<\/?(dir|dl|menu|ol|ul)\b[^>]*>/g, '\u0000');
	obj.plain = obj.plain.replace(/<\/(dd|dt|li)>/g, '\u0000');

// forms
	obj.plain = obj.plain.replace(/<\/?(select|textarea)\b[^>]*>/g, '\u0000');
	obj.plain = obj.plain.replace(/<\/(option|legend|optgroup)>/g, '\u0000');

// table
	obj.plain = obj.plain.replace(/<\/?(table|caption)\b[^>]*>/g, '\u0000');
	obj.plain = obj.plain.replace(/<\/(tr|th|td)>/g, '\u0000');

// finish html to plain conversion
	obj.plain = obj.plain.replace(/<[^>]*>/g, '');

// remove spaces
	obj.plain = obj.plain.replace(/[ \t\u00a0]+(\u0000)/g, '$1');
	obj.plain = obj.plain.replace(/(\u0000)[ \t\u00a0]+/g, '$1');

// trim down \u0000 and \n
	obj.plain = obj.plain.replace(/\u0000{3,}/g, '\n\n');
	obj.plain = obj.plain.replace(/\u0000/g, '\n');

// remove empty lines and spaces from article start and end
	if (obj.from == 'whole') {
		obj.html = obj.html.replace(/^\s+|\s+$/g, '');
	}

	return;
}


//
// WikEdInactiveButtons: grey out inactive buttons, called after every change and click
//

window.WikEdInactiveButtons = function() {

// undo
	if (wikEdFrameDocument.queryCommandEnabled('undo') == true ) {
		document.getElementById('wikEdUndo').className = 'wikEdButton';
		document.getElementById('wikEdUndoAll').className = 'wikEdButton';
	}
	else {
		document.getElementById('wikEdUndo').className = 'wikEdButtonInactive';
		document.getElementById('wikEdUndoAll').className = 'wikEdButtonInactive';
	}

// redo
	if (wikEdFrameDocument.queryCommandEnabled('redo') == true ) {
		document.getElementById('wikEdRedo').className = 'wikEdButton';
	}
	else {
		document.getElementById('wikEdRedo').className = 'wikEdButtonInactive';
	}

// redo all
	if (wikEdLastVersion != null) {
		document.getElementById('wikEdRedoAll').className = 'wikEdButton';
	}
	else {
		document.getElementById('wikEdRedoAll').className = 'wikEdButtonInactive';
	}
	return;
}

//
// WikEdFixBasic: fix characters, spaces, empty lines, certain headings, needed for all fixing functions
//

/// change: double spaces ok after dot

window.WikEdFixBasic = function(obj) {

// non-breaking space character to normal space
	obj.plain = obj.plain.replace(/\u00a0/g, ' ');

// tab to space
	obj.plain = obj.plain.replace(/ *\t[ \t]*()/g, ' ');

// remove trailing spaces
	obj.plain = obj.plain.replace(/(\t| |&nbsp;)+\n/g, '\n');

// remove spaces in empty lines
	obj.plain = obj.plain.replace(/\n( |&nbsp;|\t)+\n/g, '\n\n');

// empty line before and after headings, spaces around word (lookahead)
	obj.plain = obj.plain.replace(/\n+(=+) *([^\n]*?) *(=+)(?=\n)/g, '\n\n$1 $2 $3\n\n');

// uppercase well known headings
	var regExp = new RegExp('\\n=+ ' + wikEdText['External links'] + '? =+\\n', 'gi');
	obj.plain = obj.plain.replace(regExp, '\n== ' + wikEdText['External links'] + ' ==\n');
	regExp = new RegExp('\\n=+ ' + wikEdText['See also'] + ' =+\\n', 'gi');
	obj.plain = obj.plain.replace(regExp, '\n== ' + wikEdText['See also'] + ' ==\n');
	regExp = new RegExp('\\n=+ ' + wikEdText['References'] + '? =+\\n', 'gi');
	obj.plain = obj.plain.replace(regExp, '\n== ' + wikEdText['References'] + ' ==\n');

// add space after * # : ; (list) and after {| |- | (table)
	obj.plain = obj.plain.replace(/(^|\n)([\*\#\:\;]+|\{\||\|\-|\|\}|\|) *()/g, '$1$2 ');
	obj.plain = obj.plain.replace(/ +\n/g, '\n');

// empty line before and after tables
	obj.plain = obj.plain.replace(/\n+(\{\|)/g, '\n\n$1');
	obj.plain = obj.plain.replace(/(\n\|\}([^\}]|$)) *([^\n]*)[\n|$]+/g, '$1\n\n$3\n\n');

// empty line before and after lists
	obj.plain = obj.plain.replace(/(^|\n)([^\*\#\:\;\n][^\n]*)(?=\n[\*\#\:\;])/g, '$1$2\n\n');
	obj.plain = obj.plain.replace(/(^|\n)([\*\#\:\;][^\n]*?)(?=\n[^\*\#\:\;\n])/g, '$1$2\n\n');

// split into lines and change single lines, used to handle tables
	var lines = obj.plain.split('\n');
	obj.plain = '';
	var tableflag = false;
	for (var i = 0; i < lines.length; i++) {
		var line = lines[i];

// do not change lines starting with a blank
		if (/^ /.test(line) == false) {

// detect table
			if ( line.match(/^(\{\||\!|\|[^}])/) ) {
				tableflag = true;
			}
			else if ( line.match(/^\|\}/) ) {
				tableflag = false;
			}

// changes only to be done in tables
			if (tableflag) {

// add spaces around ||
				line = line.replace(/ *\|\| *()/g, ' || ');
			}

// changes not to be done in tables
			if (! tableflag) {

// empty line before and after images
				var regExp = new RegExp('^(\\[\\[' + wikEdText['wikicode Image'] + ':.*?\\]\\])', 'ig');
				line = line.replace(regExp, '\n$1');

				regExp = new RegExp('(\\[\\[' + wikEdText['wikicode Image'] + ':.*?(\\[\\[.*?\\]\\].*?)*\\]\\])$', 'ig');
				line = line.replace(regExp, '$1\n');

// empty line before and after includes
				line = line.replace(/^(\{\{.*?\}\})/g, '\n$1');
				line = line.replace(/(\{\{.*?\}\})$/g, '$1\n');
			}
		}

// concatenate the lines
		obj.plain += line;
		if (i < lines.length - 1) {
			obj.plain += '\n';
		}
	}

// remove underscores in wikilinks
	obj.plain = obj.plain.replace(/\[\[(.*?)(\|.*?)?\]\]/g,
		function (p, p1, p2) {
			p1 = p1.replace(/_/g, ' ');
			return('[[' + p1 + p2 + ']]');
		}
	);

// remove spaces in wikilinks
	obj.plain = obj.plain.replace(/\[\[ *([^\n]*?) *\]\]/g, '[[$1]]');

// remove spaces in external links
	obj.plain = obj.plain.replace(/\[ *([^\n]*?) *\]/g, '[$1]');

// no space around pipes before brackets
	obj.plain = obj.plain.replace(/ +\| +\]\]/g, '|]]');

// no space around pipes before curly brackets
	obj.plain = obj.plain.replace(/ +\| +\}\}/g, '|}}');

// no empty line between headings and includes
	obj.plain = obj.plain.replace(/\n(=+ [^\n]*? =+\n)\n+(\{\{.*?\}\})/g, '\n$1$2');

// spaces in comments
	obj.plain = obj.plain.replace(/(&lt;!--) *([^\n]*?) *(--&gt;)/g, '$1 $2 $3');

// empty line before and after categories
	var regExp = new RegExp('( |\\n)*(\\[\\[' + wikEdText['wikicode Category'] + ':[^\\n]*?\\]\\])( |\\n)*', 'gi');
	obj.plain = obj.plain.replace(regExp, '\n\n$2\n\n');

// categories not separated by empty lines (lookahead)
	regExp = new RegExp('(\\[\\[category:[^\\n]*?\\]\\])\\n*(?=\\[\\[' + wikEdText['wikicode Category'] + ':[^\\n]*?\\]\\])', 'gi');
	obj.plain = obj.plain.replace(regExp, '$1\n');

// single empty lines only
	obj.plain = obj.plain.replace(/\n{3,}/g, '\n\n');

// remove leading and trailing newlines
	obj.plain = obj.plain.replace(/^\n+/, '');
	obj.plain = obj.plain.replace(/\n{2,}$/, '\n');

	return;
}


//
// WikEdFixPunct: remove space before .,:;
//

window.WikEdFixPunct = function(obj) {

	WikEdFixBasic(obj);

	obj.plain = obj.plain.replace(/([\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9\'\"”\]\}\)]) +([\.\,\:\;])(\s+|$)/g, '$1$2 ');
	obj.plain = obj.plain.replace(/\s+$/g, '');

	return;
}


//
// WikEdFixUnicode: fix unicode character representations
//

window.WikEdFixUnicode = function(obj) {

// replace supported chars: change decimal, hex, and character entities into actual char
	for (var i = 0; i < wikEdSupportedChars.length; i ++) {
		var replaceChar = String.fromCharCode(parseInt(wikEdSupportedChars[i][0], 16));

// decimal representation
		var regExpStr = '&#0*' + parseInt(wikEdSupportedChars[i][0], 16) + ';|';

// hex representation
		regExpStr += '&#x0*' + wikEdSupportedChars[i][0] + ';';

// case insensitive replace
		var regExp = new RegExp(regExpStr, 'gi');
		obj.plain = obj.plain.replace(regExp, replaceChar);

// character entity representation
		regExpStr = '&amp;' + wikEdSupportedChars[i][1] + ';';

// case sensitive replace
		regExp = new RegExp(regExpStr, 'g');
		obj.plain = obj.plain.replace(regExp, replaceChar);
	}

// replace unsupported chars in IE6: change decimal, hex, and chars into character entities
	for (var i = 0; i < wikEdProblemChars.length; i ++) {
		replaceChar = '&' + wikEdProblemChars[i][1] + ';';

// decimal representation
		regExpStr = '&#0*' + parseInt(wikEdProblemChars[i][0], 16) + ';|';

// hex representation
		regExpStr += '&#x0*' + wikEdProblemChars[i][0] + ';';

// case insensitive replace
		regExp = new RegExp(regExpStr, 'gi');
		obj.plain = obj.plain.replace(regExp, replaceChar);

// actual character representation
		regExpStr = '\\u' + wikEdProblemChars[i][0];

// case sensitive replace
		regExp = new RegExp(regExpStr, 'g');
		obj.plain = obj.plain.replace(regExp, replaceChar);
	}

// replace special chars (spaces and invisible characters): change decimal, hex, and chars into character entities
	for (var i = 0; i < wikEdSpecialChars.length; i ++) {
		var replaceChar = '&amp;' + wikEdSpecialChars[i][1] + ';';

// decimal representation
		var regExpStr = '&#0*' + parseInt(wikEdSpecialChars[i][0], 16) + ';|';

// hex representation
		regExpStr += '&#x0*' + wikEdSpecialChars[i][0] + ';';

// case insensitive replace
		var regExp = new RegExp(regExpStr, 'gi');
		obj.plain = obj.plain.replace(regExp, replaceChar);

// actual character representation
		regExpStr = '\\u' + wikEdSpecialChars[i][0];

// case sensitive replace
		var regExp = new RegExp(regExpStr, 'g');
		obj.plain = obj.plain.replace(regExp, replaceChar);
	}

// unicode line separator and paragraph separator
	obj.plain = obj.plain.replace(/\u2028/g, '\n');
	obj.plain = obj.plain.replace(/\u2029/g, '\n\n');

	return;
}


//
// WikEdFixMath: math character fixer, originally from User:Omegatron
//

window.WikEdFixMath = function(obj) {

	WikEdFixBasic(obj);

// change only outside <math> </math> wikicode
	obj.plain = obj.plain.replace(/(.*?)((&lt;math(\b.*?)&gt;.*?&lt;\/math&gt;)|$)/gi,
		function (p, p1, p2) {

// convert html entities into actual dash characters
			p1 = p1.replace(/&plus;/g, '+');
			p1 = p1.replace(/&minus;/g, '\u2212');
			p1 = p1.replace(/&middot;/g, '·');

// convert dash next to a number into a minus sign character
			p1 = p1.replace(/([^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9\,\{])-(\d)/g, '$1\u2212$2');

// changes 2x3 to 2×3
			p1 = p1.replace(/(\d *)x( *\d)/g, '$1\u00d7$2');

// changes 10^3 to 10<sup>3</sup>
			p1 = p1.replace(/(\d*\.?\d+)\^(\u2212?\d+\.?\d*)/g, '$1&lt;sup&gt;$2&lt;/sup&gt;');

// change x^3 to x<sup>3</sup>
			p1 = p1.replace(/([\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9])\^(\u2212?\d+\.?\d*) /g, '$1&lt;sup&gt;$2&lt;/sup&gt;');

// change +/- to ±
			p1 = p1.replace(/( |\d)\+\/(-|\u2212)( |\d)/g, '$1\u00b1$3');

// htmlize single char superscripts
			p1 = p1.replace(/(\u00b9|&sup1;)/g, '&lt;sup&gt;1&lt;/sup&gt;');
			p1 = p1.replace(/(\u00b2|&sup2;)/g, '&lt;sup&gt;2&lt;/sup&gt;');
			p1 = p1.replace(/(\u00b3|&sup3;)/g, '&lt;sup&gt;3&lt;/sup&gt;');

			return(p1 + p2);
		}
	);
	return;
}


//
// WikEdFixChem: fix chemical formulas
//

window.WikEdFixChem = function(obj) {

	WikEdFixBasic(obj);

	var realElements = 'H|He|Li|Be|B|C|N|O|F|Ne|Na|Mg|Al|Si|P|S|Cl|Ar|K|Ca|Sc|Ti|V|Cr|Mn|Fe|Co|Ni|Cu|Zn|Ga|Ge|As|Se|Br|Kr|Rb|Sr|Y|Zr|Nb|Mo|Tc|Ru|Rh|Pd|Ag|Cd|In|Sn|Sb|Te|I|Xe|Cs|Ba|Hf|Ta|W|Re|Os|Ir|Pt|Au|Hg|Tl|Pb|Bi|Po|At|Rn|Fr|Ra|Rf|Db|Sg|Bh|Hs|Mt|Ds|Rg|La|Ce|Pr|Nd|Pm|Sm|Eu|Gd|Tb|Dy|Ho|Er|Tm|Yb|Lu|Ac|Th|Pa|U|Np|Pu|Am|Cm|Bk|Cf|Es|Fm|Md|No|Lr';
	var pseudoElements = '|Me|Et|Pr|Bu|e';

// fix common typos
	obj.plain = obj.plain.replace(/(^|[^a-z])h2o([^a-z]|$)/g, '$1H2O$2');
	obj.plain = obj.plain.replace(/(^|[^a-z])h3o+/g, '$1H3O+');
	obj.plain = obj.plain.replace(/(^|[^a-z])oh-/g, '$1OH+');

// uppercase lowercased elements
	var regExp = new RegExp('(^|[^a-zA-Z])(' + realElements.toLowerCase() + pseudoElements.toLowerCase() + ')([^a-zA-Z]|$)', 'g');
	obj.plain = obj.plain.replace(regExp,
		function (p, p1, p2, p3) {
			if (p2 != 'e') {
				p2 = p2.substr(0, 1).toUpperCase() + p2.substr(1).toLowerCase();
			}
			return(p1 + p2 + p3);
		}
	);

// fix superscripts
	obj.plain = obj.plain.replace(/&plus;/g, '+');
	obj.plain = obj.plain.replace(/&minus;/g, '\u2212');
	obj.plain = obj.plain.replace(/&middot;/g, '·');
	regExp = new RegExp('(' + realElements + pseudoElements + '|\\))(\\d*(\\+|-|\\u2212))', 'g');
	obj.plain = obj.plain.replace(regExp,
		function (p, p1, p2, p3) {
			p2 = p2.replace(/-/g, '\u2212');
			return(p1 + '&lt;sup&gt;' + p2 + '&lt;/sup&gt;');
		}
	);

// fix indices
	regExp = new RegExp('(' + realElements + pseudoElements + '|\\))(\\d+)', 'g');
	obj.plain = obj.plain.replace(regExp, '$1&lt;sub&gt;$2&lt;/sub&gt;');

// fix prefixes
	regExp = new RegExp('(\\d+) *(\\(|' + realElements + pseudoElements + ')', 'g');
	obj.plain = obj.plain.replace(regExp, '$1$2');

// fix arrows
	obj.plain = obj.plain.replace(/ *-+&gt; *()/g, ' \u2192 ');
	obj.plain = obj.plain.replace(/ *&lt;-+ *()/g, ' \u2190 ');

// &hdarr; and "leftwards harpoon over rightwards harpoon" not supported in IE6
//	obj.plain = obj.plain.replace(/ *(&lt;=+&gt;|&hdarr;|&harr;|\u2190 *\u2192) *()/g, ' \u21cc ');
	obj.plain = obj.plain.replace(/ *(&lt;==+&gt;|&hdarr;|&harr;|\u21cc|\u2190 *\u2192) *()/g, ' <=> ');

// fix -
	obj.plain = obj.plain.replace(/([\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|\)|&gt;) +(-|\u2212) +([\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|\()/g, '$1 \u2212 $3');

	return;
}


//
// WikEdFixUnits: unit formatter
//

window.WikEdFixUnits = function(obj) {

	WikEdFixBasic(obj);

// convert into actual characters
	obj.plain = obj.plain.replace(/&amp;deg;|&amp;#00b0;/g, '°');
	obj.plain = obj.plain.replace(/&amp;#00b5;|&amp;mu;|&amp;micro;/g, 'µ');
	obj.plain = obj.plain.replace(/&amp;Omega;|&amp;#8486;/g, '\u03a9');

// add space before units, remove space around /, and use abreviations
	obj.plain = obj.plain.replace(/( *\/ *|\d *)(Y|yotta|Z|zetta|E|exa|P|peta|T|tera|G|giga|M|mega|k|kilo|K|h|hecto|da|deca|d|deci|c|centi|m|mill?i|micro|u|µ|n|nano|p|pico|f|femto|a|atto|z|zepto|y|yocto|mibi|mebi|)(gramm?s?|g|metres?|meters?|m|amperes?|Amperes?|amps?|Amps?|A|Angstroms?|Angströms?|Å|Kelvins?|kelvins?|K|moles?|Moles?|mol|candelas?|cd|rad|Ci|sr|Hert?z|hert?z|Hz|newtons?|Newtons?|N|Joules?|joules?|J|watts?|Watts?|W|pascals?|Pascals?|Pa|lm|lx|C|volts?|Volts?|V|O|Farads?|F|Wb|T|H|S|bequerels?|Bequerels?|Bq|Gy|Sv|kat|centigrades?|°C|decibels?|db|dB|M|ohms?|Ohms?|\u03a9|sec|seconds?|s|minutes?|min|hour?|h|bits?|Bits?|bit|bytes?|Bytes?|B|bps|Bps)(?=[^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|$)/g,
		function (p, p1, p2, p3) {

			p1 = p1.replace(/ *\/ *()/g, '/');
			p1 = p1.replace(/(\d) *()/g, '$1 ');

			p2 = p2.replace(/yotta/g, 'Y');
			p2 = p2.replace(/zetta/g, 'Z');
			p2 = p2.replace(/exa/g, 'E');
			p2 = p2.replace(/peta/g, 'P');
			p2 = p2.replace(/tera/g, 'T');
			p2 = p2.replace(/giga/g, 'G');
			p2 = p2.replace(/mega/g, 'M');
			p2 = p2.replace(/kilo/g, 'k');
			p2 = p2.replace(/K/g, 'k');
			p2 = p2.replace(/hecto/g, 'h');
			p2 = p2.replace(/deca/g, 'da');
			p2 = p2.replace(/deci/g, 'd');
			p2 = p2.replace(/centi/g, 'c');
			p2 = p2.replace(/mill?i/g, 'm');
			p2 = p2.replace(/micro|u/g, 'µ');
			p2 = p2.replace(/nano/g, 'n');
			p2 = p2.replace(/pico/g, 'p');
			p2 = p2.replace(/femto/g, 'f');
			p2 = p2.replace(/atto/g, 'a');
			p2 = p2.replace(/zepto/g, 'z');
			p2 = p2.replace(/yocto/g, 'y');
			p2 = p2.replace(/mibi/g, 'mebi');

			p3 = p3.replace(/gramm?s?/g, 'g');
			p3 = p3.replace(/metres?|meters?/g, 'm');
			p3 = p3.replace(/amperes?|Amperes?|amps?|Amps?/g, 'A');
			p3 = p3.replace(/Angstroms?|Angströms?/g, 'Å');
			p3 = p3.replace(/Kelvins?|kelvins?/g, 'K');
			p3 = p3.replace(/moles?|Moles?/g, 'mol');
			p3 = p3.replace(/candelas?/g, 'cd');
			p3 = p3.replace(/Hert?z|hert?z/g, 'Hz');
			p3 = p3.replace(/newtons?|Newtons?/g, 'N');
			p3 = p3.replace(/Joules?|joules?/g, 'J');
			p3 = p3.replace(/watts?|Watts?/g, 'W');
			p3 = p3.replace(/pascals?|Pascals?/g, 'Pa');
			p3 = p3.replace(/volts?|Volts?/g, 'V');
			p3 = p3.replace(/ohms?|Ohms?/g, '\u03a9');
			p3 = p3.replace(/bequerels?|Bequerels?/g, 'Bq');
			p3 = p3.replace(/Farads?/g, 'F');
			p3 = p3.replace(/bits?|Bits?/g, 'bit');
			p3 = p3.replace(/bytes?|Bytes?/g, 'B');
			p3 = p3.replace(/sec|seconds?/g, 's');
			p3 = p3.replace(/minutes?/g, 'min');
			p3 = p3.replace(/hours?/g, 'h');
			p3 = p3.replace(/sec|seconds?/g, 's');
			p3 = p3.replace(/bps/g, 'bit/s');
			p3 = p3.replace(/Bps/g, 'B/s');

			return(p1 + p2 + p3);
		}
	);

// fix prefix casing
	obj.plain = obj.plain.replace(/ K(bit\/s|B\/s)([^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|$)/g, ' k$1$2');
	obj.plain = obj.plain.replace(/ m(bit\/s|B\/s)([^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|$)/g, ' M$1$2');
	obj.plain = obj.plain.replace(/ g(bit\/s|B\/s)([^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|$)/g, ' G$1$2');
	obj.plain = obj.plain.replace(/ t(bit\/s|B\/s)([^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|$)/g, ' T$1$2');
	obj.plain = obj.plain.replace(/ e(bit\/s|B\/s)([^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|$)/g, ' E$1$2');

	return;
}


//
// WikEdFixDashes: fixes dashes and minus signs
//

window.WikEdFixDashes = function(obj) {

	WikEdFixBasic(obj);

// convert html character entities into actual dash characters
	obj.plain = obj.plain.replace(/&amp;mdash;/g, '—');
	obj.plain = obj.plain.replace(/&amp;ndash;/g, '–');
	obj.plain = obj.plain.replace(/&amp;minus;/g, '\u2212');

// remove spaces around em dashes
	obj.plain = obj.plain.replace(/([a-zA-Z\'\"”\]\}\)])( |&amp;nbsp;)*—( |&amp;nbsp;)*([a-zA-Z\'\"“\[\{\(])/g, '$1—$4');

// convert -- to en dashes
	obj.plain = obj.plain.replace(/([a-zA-Z\'\"”\]\}\)])( |&amp;nbsp;)*--( |&amp;nbsp;)*([a-zA-Z\'\"“\[\{\(])/g, '$1 – $4');

// convert hyphen next to lone number into a minus sign character
	obj.plain = obj.plain.replace(/([a-zA-Z\'\"”\]\>] ) *(\u2212|–)(\d)/g, '$1\u2212$3');

// convert minus or en dashes to dashes with spaces
	obj.plain = obj.plain.replace(/([a-zA-Z\'\"”\]\}])( |&amp;nbsp;)*(\u2212|–)( |&amp;nbsp;)*([a-zA-Z\'\"“\[\{])/g, '$1 – $5');

// convert dashes to en dashes in dates
	obj.plain = obj.plain.replace(/(^|[ \(\|])(\d\d(\d\d)?)(\u2212|-|–)(\d\d)(\u2212|-|–)(\d\d(\d\d)?)([ \)\}\|,.;—]|$)/gm, '$1$2–$5–$7$9');

	return;
}


//
// WikEdFixHTML: fix html to wikicode
//

window.WikEdFixHTML = function(obj) {

	WikEdFixBasic(obj);

// remove syntax highlighting
	obj.html = obj.plain;
	obj.html = obj.html.replace(/\n/g, '<br />');
	WikEdRemoveHighlighting(obj);

// turn visible html code into real html, exclude comments
	obj.html = obj.html.replace(/&lt;(\/?\w.*?)&gt;/g, '<$1>');

// wikify, keep user added attribute
	WikEdWikifyHTML(obj, true);

// turn real html into visible html code
	obj.html = obj.html.replace(/<br\b[^>]*>[\n ]*()/g, '\n');
	obj.html = obj.html.replace(/</g, '&lt;');
	obj.html = obj.html.replace(/>/g, '&gt;');
	obj.plain = obj.html;

	return;
}


//
// WikEdFixCaps: fix capitalizing of lists, linklists, images, headings
//

window.WikEdFixCaps = function(obj) {

	WikEdFixBasic(obj);

// uppercase lists
// start (listcode (char-ent|tag|category..|digit|non-word,non-ret))(word,non-digit..) end
	obj.plain = obj.plain.replace(/^([\*\#\:\;]+ (\&\w+\;|&lt;[^\n]*?&gt;|\{\{.*?\}\}[^\n]*|\d|[^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9\n])*)([^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9\d].*?)?$/gm,
		function (p, p1, p2, p3) {
			if ( ! p3.match(/^(http|ftp|alpha|beta|gamma|delta|epsilon|kappa|lambda|$)/) ) {
				p3 = p3.substr(0, 1).toUpperCase() + p3.substr(1);
			}
			return(p1 + p3);
		}
	);

// uppercase link lists (link)
	obj.plain = obj.plain.replace(/^([\*\#\:\;]+ \[\[)([^\n]*?)(\]\])/gm,
		function (p, p1, p2, p3) {

// uppercase link
			p2 = p2.replace(/^((\&\w+\;|[^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|\d)*)([a-zA-ZÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9_].*)$/,
				function (p, p1, p2, p3) {
					if ( ! p3.match(/^(http|ftp|alpha|beta|gamma|delta|epsilon|kappa|lambda)/) ) {
						p3 = p3.substr(0, 1).toUpperCase() + p3.substr(1);
					}
					return(p1 + p3);
				}
			);

// uppercase comment
			p2 = p2.replace(/(\| *(\&\w+\;|&lt;[^\n]*?&gt;|[^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|\d)*)([a-zA-ZÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9_].*)$/,
				function (p, p1, p2, p3) {
					if ( ! p3.match(/^(http|ftp|alpha|beta|gamma|delta|epsilon|kappa|lambda)/) ) {
						p3 = p3.substr(0, 1).toUpperCase() + p3.substr(1);
					}
					return(p1 + p3);
				}
			);
			return(p1 + p2 + p3);
		}
	);

// uppercase headings
	obj.plain = obj.plain.replace(/^(=+ (\&\w+\;|&lt;[^\n]*?&gt;|\d|[^\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9\n])*)([a-zA-ZÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9_].*? =+)$/gm,
		function (p, p1, p2, p3) {
			if ( ! p3.match(/^(http|ftp|alpha|beta|gamma|delta|epsilon|kappa|lambda)/) ) {
				p3 = p3.substr(0, 1).toUpperCase() + p3.substr(1);
			}
			return(p1 + p3);
		}
	);

// uppercase images
	regExp = new RegExp('(\\[\\[)' + wikEdText['wikicode Image'] + ':([\\wÀ-ÖØ-öø-\\u0220\\u0222-\\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\\u0400-\\u0481\\u048a-\\u04ce\\u04d0-\\u04f5\\u04f8\\u04f9])([^\\n]*\\]\\])', 'igm');
	obj.plain = obj.plain.replace(regExp,
		function (p, p1, p2, p3) {
			return(p1 + wikEdText['wikicode Image'] + ':' + p2.toUpperCase() + p3);
		}
	);

	return;
}


//
// WikEdFixTypos: fix typos using the AutoWikiBrowser/RegExTypoFix list (.test() is not faster)
//

window.WikEdFixTypos = function(obj) {

	WikEdFixBasic(obj);

//	split into alternating plain text and {{lang}} template fragments (does not support nested templates)
	var fragment = [];
	var nextPos = 0;
	var regExp = new RegExp('{{\\s*lang\\s*\\|(.|\\n)*?}}', 'g');
	while ( (regExpMatch = regExp.exec(obj.plain)) != null) {
		fragment.push(obj.plain.substring(nextPos, regExpMatch.index));
		fragment.push(regExpMatch[0]);
		nextPos = regExp.lastIndex;
	}
	fragment.push(obj.plain.substring(nextPos));

// cycle through the RegExTypoFix rules
	for (var i = 0; i < wikEdTypoRulesFind.length; i ++) {

// cycle through the fragments, jump over {{lang}} templates
		for (var j = 0; j < fragment.length; j = j + 2) {
			fragment[j] = fragment[j].replace(wikEdTypoRulesFind[i], wikEdTypoRulesReplace[i]);
		}
	}

// re-assemble text
	obj.plain = fragment.join('');

	return;
}


//
// WikEdFixAll:
//

window.WikEdFixAll = function(obj) {
	WikEdFixBasic(obj);
	WikEdFixUnicode(obj);
	WikEdFixHTML(obj);
	WikEdFixCaps(obj);
	return;
}


//
// WikEdRemoveElements: remove elements by tag name
//

window.WikEdRemoveElements = function(tagNameArray) {

// cycle through the element names
	for (var property in tagNameArray) {
		if ((tagNameArray[property]) != 'string') {
			continue;
		}
		var elementArray = wikEdFrameDocument.getElementsByTagName(tagNameArray[property]);
		for (var i = 0; i < elementArray.length; i ++) {
			elementArray[i].parentNode.removeChild(elementArray[i]);
		}
	}
	return;
}


//
// WikEdFindBoundaries: find word boundaries and line boundaries starting from selection.range
//

window.WikEdFindBoundaries = function(word, line, whole, selection) {

// get the start node and offset
	var startNode = selection.range.startContainer;
	var startNodeOffset = selection.range.startOffset;

// get the end node and offset
	var endNode = selection.range.endContainer;
	var endNodeOffset = selection.range.endOffset;

	if (startNode.nodeType == 1) {
		startNode = startNode.childNodes[startNodeOffset];
		startNodeOffset = 0;
	}
	if (endNode.nodeType == 1) {
		endNode = endNode.childNodes[endNodeOffset];
		endNodeOffset = 0;
	}

// find the start and end nodes in the whole plain text arrays
	var startNodeIndex;
	var endNodeIndex;
	for (var i = 0; i < whole.plainNode.length; i ++) {
		if (startNode == whole.plainNode[i]) {
			startNodeIndex = i;
		}
		if (endNode == whole.plainNode[i]) {
			endNodeIndex = i;
			break;
		}
	}

// find last previous word and line boundary
	var foundWord = false;
	var foundLine = false;
	var regExp = new RegExp('.*[^\\wÀ-ÖØ-öø-\\u0220\\u0222-\\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\\u0400-\\u0481\\u048a-\\u04ce\\u04d0-\\u04f5\\u04f8\\u04f9\\-]', 'g');
	var plain = '';

// check text nodes left-wise for a boundary
	for (var i = startNodeIndex; i >= 0; i --) {
		plain = whole.plainArray[i];

				plain = plain.replace(/&amp;/g, '&');
				plain = plain.replace(/&lt;/g, '<');
				plain = plain.replace(/&gt;/g, '>');

// boundary is a newline
		if (plain == '\n') {

// current newline is the start node
			if (i == startNodeIndex) {
				if (! foundWord) {
					word.range.setStartBefore(whole.plainNode[i]);
					foundWord = true;
				}
				line.range.setStartBefore(whole.plainNode[i]);
			}
			else {
				if (! foundWord) {
					word.range.setStartAfter(whole.plainNode[i]);
					foundWord = true;
				}
				line.range.setStartAfter(whole.plainNode[i]);
			}
			foundLine = true;
			break;
		}

// check text node for a word boundary
		else if (! foundWord) {
			if (i == startNodeIndex) {
				plain = plain.substr(0, startNodeOffset);

				plain = plain.replace(/&amp;/g, '&');
				plain = plain.replace(/&lt;/g, '<');
				plain = plain.replace(/&gt;/g, '>');
			}
			regExp.lastIndex = 0;
			if (regExp.exec(plain) != null) {
				word.range.setStart(whole.plainNode[i], regExp.lastIndex);
				foundWord = true;
			}
		}
	}

// boundary is start of text
	if (! foundLine) {
		line.range.setStartBefore(whole.plainNode[0]);
		if (! foundWord) {
			word.range.setStartBefore(whole.plainNode[0]);
		}
	}

// find next word and line boundary
	regExp = new RegExp('[^\\wÀ-ÖØ-öø-\\u0220\\u0222-\\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\\u0400-\\u0481\\u048a-\\u04ce\\u04d0-\\u04f5\\u04f8\\u04f9\\-]', 'g');
	foundWord = false;
	foundLine = false;

// check text nodes right-wise for a boundary
	for (var i = endNodeIndex; i < whole.plainArray.length; i ++) {
		plain = whole.plainArray[i];

				plain = plain.replace(/&amp;/g, '&');
				plain = plain.replace(/&lt;/g, '<');
				plain = plain.replace(/&gt;/g, '>');

// boundary is a newline
		if (plain == '\n') {
			if (! foundWord) {
				word.range.setEndBefore(whole.plainNode[i]);
				foundWord = true;
			}
			line.range.setEndBefore(whole.plainNode[i]);
			foundLine = true;
			break;
		}

// check text node for a word boundary
		else if (! foundWord) {
			if (i == endNodeIndex) {
				regExp.lastIndex = endNodeOffset;
			}
			else {
				regExp.lastIndex = 0;
			}
			var regExpArray = regExp.exec(plain);
			if (regExpArray != null) {
				word.range.setEnd(whole.plainNode[i], regExpArray.index);
				foundWord = true;
			}
		}
	}

// boundary is end of text
	if (! foundLine) {
		line.range.setEndAfter(whole.plainNode[whole.plainArray.length - 1]);
		if (! foundWord) {
			word.range.setEndAfter(whole.plainNode[whole.plainArray.length - 1]);
		}
	}
	return;
}


//
// remove syntax highlighting and wikify
//

window.WikEdRemoveHighlightingWikify = function(obj, noWikify) {

	if (obj.html != '') {

// remove syntax highlighting
		WikEdRemoveHighlighting(obj);

// wikify, don't allow many attributes
		if ( (obj.htmlCode == true) && (noWikify != true) ) {
			WikEdWikifyHTML(obj, false);
		}
	}
	return;
}


//
// WikEdWikifyHTML:
//   obj.html contains the text to be wikified
//   expects < > &lt; &gt; &amp;  spaces instead of &nbsp; <br> (not \n)
//   returns <br> (not \n)

/*
	allowed and converted tags:
			br|p
			h1|h2|h3|h4|h5|h6
			hr
			i|dfn|cite|em|var
			b|strong
			table|caption|col|thead|tfoot|tbody|tr|td|th
			dl|dt|dd|li|ol|ul
			a
	not allowed yet:
			bdo|q|kbd|samp|abbr|acronym|label
	other allowed tags:
			big|blockquote|colgroup|center|code|del|div|font|ins|pre|s|small|span|strike|sub|sup|tt|u|rb|rp|rt|ruby
	mediawiki tags:
			nowiki|math|gallery|noinclude|includeonly|ref|references
*/

window.WikEdWikifyHTML = function(obj, relaxed) {

	var regExpStr;
	var regExp;
	var regExpMatch;

// delete tags: <style>
	obj.html = obj.html.replace(/<(style)\b[^>]*>.*?<\/\1>/g, '');

// remove MediaWiki section edit spans
	obj.html = obj.html.replace(/<span[^>]*class=\"editsection\"[^>]*>.*?<\/span>\s*()/g, '');

// remove MediaWiki heading spans
	obj.html = obj.html.replace(/<span\b[^>]*\bclass=\"mw-headline\"[^>]*>(.*?)<\/span>\s*()/g, '$1');

// remove MediaWiki divs from article top
	obj.html = obj.html.replace(/<h3\b[^>]*\bid=\"siteSub\"[^>]*>.*?<\/h3>\s*()/g, '');
	obj.html = obj.html.replace(/<div\b[^>]*\bid=\"contentSub\"[^>]*>.*?<\/div>\s*()/g, '');
	obj.html = obj.html.replace(/<div\b[^>]*\bid=\"jump-to-nav\"[^>]*>.*?<\/div>\s*()/g, '');

// remove MediaWiki table of contents
	obj.html = obj.html.replace(/<table\b[^>]*?\bid=\"toc\"[^>]*>.*?<\/table>\s*()/g, '');

// remove MediaWiki print footer
	obj.html = obj.html.replace(/<div\b[^>]*?\bclass=\"printfooter\"[^>]*>[^<>\"]+\"<a\b[^>]*>[^<]+<\/a>\"<\/div>\s*()/g, '');

// remove MediaWiki category list tags
	regExp = /<div\b[^>]*\bid=\"catlinks\"[^>]*>(.*?)<\/div>\s*()/g;
	while(regExp.test(obj.html) == true) {
		obj.html = obj.html.replace(regExp, '$1');
	}
	regExp = /<p\b[^>]*?\bclass=\"catlinks\"[^>]*>(.*?)<a\b[^>]*>[^<>]+<\/a>: (.*?)<\/p>/g;
	while(regExp.test(obj.html) == true) {
		obj.html = obj.html.replace(regExp, '$1$2');
	}

// convert MS-Word non-standard lists: *
	obj.html = obj.html.replace(/\s*<p [^>]*>\s*<!--\[if !supportLists\]-->.*?<!--\[endif\]-->\s*(.*?)\s*<\/p>\s*()/g, '* $1\n');

// sanitize <span> <div> <p>
	obj.html = obj.html.replace(/<(span|div|p)\b *(.*?) *\/?>/g,
		function (p, p1, p2) {
			return('<' + p1 + WikEdSanitizeAttributes(p1, p2, relaxed) +  '>');
		}
	);

// remove <span> ... </span> pairs withhout attributes
	var isRemove = [];
	obj.html = obj.html.replace(/(<(\/?)span\b([^>]*)>)/g,
		function (p, p1, p2, p3) {
			if (p2 == '') {
				if (p3 == '') {
					isRemove.push(true);
					return('');
				}
				isRemove.push(false);
				return(p1);
			}
			if (isRemove.pop() == true) {
				return('');
			}
			return(p1);
		}
	);

// remove <p> ... </p> pairs withhout attributes
	var isRemove = [];
	obj.html = obj.html.replace(/(<(\/?)p\b([^>]*)>)/g,
		function (p, p1, p2, p3) {
			if (p2 == '') {
				if (p3 == '') {
					isRemove.push(true);
					return('\u0000\u0000');
				}
				isRemove.push(false);
				return(p1);
			}
			if (isRemove.pop() == true) {
				return('\u0000\u0000');
			}
			return(p1);
		}
	);

// escape character entities
	obj.html = obj.html.replace(/&(?!(amp;|lt;|gt;))/g, '&amp;');

// remove comments
	obj.html = obj.html.replace(/<!--.*?-->/g, '');

// <hr> horizontal rule
	obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<hr\b[^>]*>(\s|<br\b[^>]*>|\u0000)*()/i, '\u0000\u0000----\u0000\u0000');

// <i> <em> <dfn> <var> <cite> italic
	obj.html = obj.html.replace(/<(i|em|dfn|var|cite)\b[^>]*>/g, '\'\'');
	obj.html = obj.html.replace(/<\/(i|em|dfn|var|cite)\b[^>]*>/g, '\'\'');

// <b> <strong> bold
	obj.html = obj.html.replace(/<(b|strong)\b[^>]*>/g, '\'\'\'');
	obj.html = obj.html.replace(/<\/(b|strong)\b[^>]*>/g, '\'\'\'');

// <h1> .. <h6> headings
	obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*(^|\n|<br\b[^>]*>|\u0000)(\s|<br\b[^>]*>|\u0000)*<h1\b[^>]*>(.*?)<\/h1>(\s|<br\b[^>]*>|\u0000)*()/g, '\u0000\u0000= $4 =\u0000\u0000');
	obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*(^|\n|<br\b[^>]*>|\u0000)(\s|<br\b[^>]*>|\u0000)*<h2\b[^>]*>(.*?)<\/h2>(\s|<br\b[^>]*>|\u0000)*()/g, '\u0000\u0000== $4 ==\u0000\u0000');
	obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*(^|\n|<br\b[^>]*>|\u0000)(\s|<br\b[^>]*>|\u0000)*<h3\b[^>]*>(.*?)<\/h3>(\s|<br\b[^>]*>|\u0000)*()/g, '\u0000\u0000=== $4 ===\u0000\u0000');
	obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*(^|\n|<br\b[^>]*>|\u0000)(\s|<br\b[^>]*>|\u0000)*<h4\b[^>]*>(.*?)<\/h4>(\s|<br\b[^>]*>|\u0000)*()/g, '\u0000\u0000==== $4 ====\u0000\u0000');
	obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*(^|\n|<br\b[^>]*>|\u0000)(\s|<br\b[^>]*>|\u0000)*<h5\b[^>]*>(.*?)<\/h5>(\s|<br\b[^>]*>|\u0000)*()/g, '\u0000\u0000===== $4 =====\u0000\u0000');
	obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*(^|\n|<br\b[^>]*>|\u0000)(\s|<br\b[^>]*>|\u0000)*<h6\b[^>]*>(.*?)<\/h6>(\s|<br\b[^>]*>|\u0000)*()/g, '\u0000\u0000====== $4 ======\u0000\u0000');

	obj.html = obj.html.replace(/<(h[0-6])\b[^>]*>(.*?)<\/\1>/g, '$2');

// remove <thead> <tbody> <tfoot>
	obj.html = obj.html.replace(/(\s|\u0000|<br\b[^>]*>)<\/?(thead|tbody|tfoot)\b[^>]*>(\s|\u0000|<br\b[^>]*>)*()/g, '$1');

// remove <col></col> and <colgroup></colgroup>\s
	obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<(col)\b[^>]*>.*?<\/\2>(|<br\b[^>]*>|\u0000)*()/g, '');
	obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<(colgroup)\b[^>]*>.*?<\/\2>(|<br\b[^>]*>|\u0000)*()/g, '');

// line breaks in table cells
	obj.html = obj.html.replace(/(<(td|th|caption)\b[^>]*>)(.*?)(<\/\2>)/g,
		function(p, p1, p2, p3, p4) {
			p3 = p3.replace(/^(\s|<br\b[^>]*>|\u0000>)+/g, '');
			p3 = p3.replace(/(\s|<br\b[^>]*>|\u0000>)+$/g, '');
			p3 = p3.replace(/<br\b[^>]*> *()/g, '&lt;br /&gt;');
			return(p1 + p3 + p4);
		}
	);

// remove table closing tags
	obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<\/(tr|thead|tbody|tfoot)>(\s|<br\b[^>]*>|\u0000)*()/g, '');

// <td> table cells
	obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<td>(\s|<br\b[^>]*>|\u0000)*()/g, '\u0000| ');
	obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<(td) +([^>]*)>(\s|<br\b[^>]*>|\u0000)*()/g,
		function (p, p1, p2, p3, p4) {
			p3 = WikEdSanitizeAttributes(p2, p3, relaxed);
			if (p3 == '') {
				return('\u0000| ');
			}
			else {
				return('\u0000|' + p3 + ' | ');
			}
		}
	);

// <th> table cells
	obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<th>(\s|<br\b[^>]*>|\u0000)*()/g, '\u0000| ');
	obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<(th) +([^>]*)>(\s|<br\b[^>]*>|\u0000)*()/g,
		function (p, p1, p2, p3, p4) {
			p3 = WikEdSanitizeAttributes(p2, p3, relaxed);
			if (p3 == '') {
				return('\u0000| ');
			}
			else {
				return('\u0000|' + p3 + ' | ');
			}
		}
	);

// <tr> table rows
	obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<tr>(\s|<br\b[^>]*>|\u0000)*()/g, '\u0000|-\u0000');
	obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<(tr) +([^>]*)>(\s|<br\b[^>]*>|\u0000)*()/g,
		function (p, p1, p2, p3, p4) {
			return('\u0000|-' + WikEdSanitizeAttributes(p2, p3, relaxed) + '\u0000');
		}
	);

// <caption> table caption
	obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<caption>(\s|<br\b[^>]*>|\u0000)*()/g, '\u0000|+ ');
	obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\u0000)*<(caption) +([^>]*)>(\s|<br\b[^>]*>|\u0000)*()/g,
		function (p, p1, p2, p3, p4) {
			p3 = WikEdSanitizeAttributes(p2, p3, relaxed);
			if (p3 == '') {
				return('\u0000|+ ');
			}
			else {
				return('\u0000|+' + p3 + ' | ');
			}
		}
	);

// remove closing tags
	obj.html = obj.html.replace(/\s*<\/(td|th|caption)>\s*()/g, '');

// line breaks, also in table cells (continued)
	obj.html = obj.html.replace(/<br\b[^>]*>[\n ]*()/g, '\u0000');

// <table>
	obj.html = obj.html.replace(/[\s\u0000]*<table>[\s\u0000]*(\|-(?=[\n\u0000]))?/g, '\u0000\u0000{|\u0000');
	obj.html = obj.html.replace(/[\s\u0000]*<(table) +([^>]*)>[\s\u0000]*(\|-(?=[\n\u0000]))?/g,
		function (p, p1, p2) {
			var table = '\u0000{|';
			if (wikEdWikifyTableParameters != '') {
				table += ' ' + wikEdWikifyTableParameters;
			}
			else {
				table += WikEdSanitizeAttributes(p1, p2);
			}
			return(table);
		}
	);
	obj.html = obj.html.replace(/[\s\u0000]*<\/table>[\s\u0000]*()/g, '\u0000|}\u0000\u0000');

// convert links
	var regExpMatch = [];
	var regExpStr = '(<a(\\b[^>]*)>(.*?)</a>)';
	var regExp = new RegExp(regExpStr, 'gi');
	obj.html = obj.html.replace(regExp,
		function (p, p1, p2, p3) {
			var linkPar = p2;
			var linkText = p3;
			var linkArticle = '';
			var pathArticle = '';
			var linkTitle = '';
			var urlPar = '';
			var imgWidth = '';
			var paramLink = false;

// check if it is a wiki article link, get path article name and url parameters
			regExpStr = ' href=\\"(' + wikEdServer + '|\\.|(\\.\\.\/)*\\.\\.)(' + wikEdArticlePath + '([^\\"\\?]+)|' + wikEdScriptPath + 'index\\.php)(\\?([^\\"]*))?(\\"|#)';
			regExp = new RegExp(regExpStr);
			regExpMatch = regExp.exec(linkPar);
			if (regExpMatch != null) {
				urlPar = regExpMatch[6];
				if (regExpMatch[4] != null) {
					pathArticle = regExpMatch[4];
				}

// check for links with special parameters, not title, action=edit, isbn
				regExp = new RegExp('(\\?|&amp;)(\\w+)=([^\\"\\&]+)', 'g');
				while ( (regExpMatch = regExp.exec(linkPar)) != null) {
					if ( (regExpMatch[2] != 'title') &&  (regExpMatch[2] != 'isbn') && ( (regExpMatch[2] != 'action') || (regExpMatch[3] != 'edit') ) ) {
						paramLink = true;
						break;
					}
				}
			}

// get article name from path: /article
			if (paramLink != true) {
				if (pathArticle != '') {
					linkArticle = pathArticle;
					linkArticle = linkArticle.replace(/_/g, ' ');
					linkArticle = decodeURIComponent(linkArticle);
				}

// get article name from title="" html parameter
				else {
					regExpMatch = / title=\"([^\">]+)\"/.exec(linkPar);
					if (regExpMatch != null) {
						linkArticle = regExpMatch[1];
					}

// get article name from title= url parameter
					else if (urlPar != '') {
						regExpMatch = /(^|&amp;)title=([^&]+)/.exec(urlPar);
						if (regExpMatch != null) {
							linkArticle = regExpMatch[2];
							linkArticle = linkArticle.replace(/_/g, ' ');
							linkArticle = decodeURIComponent(linkArticle);

// ISBN links
							regExpMatch = /(^|&amp;)isbn=(\\d+)/.exec(urlPar);
							if (regExpMatch != null) {
								var isbn = regExpMatch[2];
								regExpMatch = /((\d\-?){13}|(\d\-?){10})/.exec(linkText);
								if (regExpMatch != null) {
									isbn = regExpMatch[1];
								}
								return('ISBN ' + isbn);
							}
						}
					}
				}
			}

// format wiki link
			if (linkArticle != '') {

// check for wiki image
				regExpStr = '^<img\\b[^>]*?\\bwidth=\\"(\\d+)\\"[^>]*?>$';
				regExp = new RegExp(regExpStr);
				regExpMatch = regExp.exec(linkText);
				if (regExpMatch != null) {
					imgWidth = regExpMatch[1];
					imgWidth = '|' + imgWidth + 'px';
					if ( (linkTitle != '') && (linkTitle != 'Enlarge') ) {
						linkTitle = '|' + linkTitle;
						return('[[' + linkArticle + imgWidth + linkTitle + ']]');
					}
					else {
						return('[[' + linkArticle + imgWidth + ']]');
					}
				}

// category link
				var regExp = new RegExp('^' + wikEdText['wikicode Category'] + ':(.*)','i');
				regExpMatch = regExp.exec(linkArticle);
				if (regExpMatch != null) {
					return('[[' + wikEdText['wikicode Category'] + ':' + regExpMatch[1].substr(0, 1).toUpperCase() + linkText.substr(1) + ']]');
				}

// wiki link
				if (linkArticle == linkText.substr(0, 1).toUpperCase() + linkText.substr(1)) {
					return('[[' + linkText + ']]');
				}

// date link (English only)
				regExpMatch = /^(January|February|March|April|May|June|July|August|September|October|November|December) (\d{1,2})$/.exec(linkArticle);
				if (regExpMatch != null) {
					var month = regExpMatch[1];
					var day = regExpMatch[2];
					if (linkText == (day + ' ' + month) ) {
						return('[[' + linkArticle + ']]');
					}
				}

// lowercase the article name if the first char of the link text can exist in lower/uppercase and is lowercase
				if ( linkText.substr(0, 1).toLowerCase() != linkText.substr(0, 1).toUpperCase() ) {
					if ( linkText.substr(0, 1) == linkText.substr(0, 1).toLowerCase() ) {
						linkArticle = linkArticle.substr(0, 1).toLowerCase() + linkArticle.substr(1);
					}
				}

// suffix links
				regExpStr = '^' + linkArticle.replace(/(\W)/g, '\\$1') + '([\\wÀ-ÖØ-öø-\\u0220\\u0222-\\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\\u0400-\\u0481\\u048a-\\u04ce\\u04d0-\\u04f5\\u04f8\\u04f9]+)$';
				regExp = new RegExp(regExpStr);
				regExpMatch = regExp.exec(linkText);
				if (regExpMatch != null) {
					return('[[' + linkArticle + ']]' + regExpMatch[1]);
				}
				return('[[' + linkArticle + '|' + linkText + ']]');
			}

// external link
			regExpMatch = linkPar.match(/ href=\"([^\">]*)\"/);
			if (regExpMatch != null) {
				var linkAddr = regExpMatch[1];
				if (linkAddr != '') {

// PubMed link
					regExpMatch = /^http:\/\/www\.ncbi\.nlm\.nih\.gov\/entrez\/query\.fcgi\?cmd=Retrieve&amp;db=pubmed&amp;.*?&amp;list_uids=(\d+)/.exec(linkAddr);
					if (regExpMatch != null) {
						return('PMID ' + regExpMatch[1]);
					}

// DOI link
					regExpMatch = /^http:\/\/dx\.doi\.org\/(.*)/.exec(linkAddr);
					if (regExpMatch != null) {
						return('{{doi|' + regExpMatch[1] + '}}');
					}

// other external link
					return('[' + linkAddr + ' ' + linkText + ']');
				}
			}

// return unchanged text
			return(p1);
		}
	);

// clean up MediaWiki category list
	var regExp = new RegExp('<span\\b[^>]*>(\\[\\[' + wikEdText['wikicode Category'] + ':[^\\]]+\\]\\])<\\/span>[\\s\\u0000\\|]*', 'gi');
	obj.html = obj.html.replace(regExp, '$1\u0000');

// clean up DOI
	obj.html = obj.html.replace(/\[\[Digital object identifier\|DOI\]\]:(\{\{doi\|[^\}\s]+\}\})/gi, '$1');

// convert images
	obj.html = obj.html.replace(/<img\b([^>]*)>/g,
		function (p, p1) {

// get and format parameters
			var address = '';
			var regExpMatch = /\bsrc\s*=\s*(\'|\")([^\'\"]*)(\'|\")/i.exec(p1);
			if (regExpMatch != null) {
				address = regExpMatch[2].replace(/^ +| +$/g, '');
			}

			var imgAlt = '';
			regExpMatch = /\balt\s*=\s*(\'|\")([^\'\"]*)(\'|\")/i.exec(p1);
			if (regExpMatch != null) {
				imgAlt = regExpMatch[2].replace(/^ +| +$/g, '');
				imgAlt = imgAlt.replace(/&amp;nbsp;|[\n\u0000]/g, ' ');
				imgAlt = imgAlt.replace(/ {2,}/g, ' ');
				imgAlt = imgAlt.replace(/^ | $/g, '');
				if (imgAlt != '') {
					imgAlt = '|' + imgAlt;
				}
			}

			var imgWidth = '';
			regExpMatch = /\bwidth\s*=\s*(\'|\")([^\'\"]*)(\'|\")/i.exec(p1);
			if (regExpMatch != null) {
				imgWidth = '|' + regExpMatch[2].replace(/^ +| +$/g, '') + 'px';
			}

			var imgLink = '';
			regExpMatch = /([^\/]+)$/.exec(address);
			if (regExpMatch != null) {
				imgLink = regExpMatch[1];
				if (imgLink != '') {
					return('[[' + wikEdText['wikicode Image'] + ':' + imgLink + imgWidth + imgAlt + ']]');
				}
			}
			return('');
		}
	);

// convert lists: * # : ;
	var listObj = {};
	listObj.prefix = '';
	obj.html = obj.html.replace(/[\s\u0000]*<(\/?(ol|ul|li|dl|dd|dt))\b[^>]*>[\s\u0000]*()/g,
		function (p, p1, p2, p3, p4) {
			switch (p1.toLowerCase()) {
				case 'ol':
					listObj.prefix += '#';
					return('\u0000');
				case 'ul':
					listObj.prefix += '*';
					return('\u0000');
				case 'dl':
					listObj.prefix += ':';
					return('\u0000');
				case '/ol':
				case '/ul':
				case '/dl':
					listObj.prefix = listObj.prefix.substr(0, listObj.prefix.length - 1);
					return('\u0000\u0000');
				case 'li':
				case 'dd':
					return('\u0000' + listObj.prefix + ' ');
				case 'dt':
					return('\u0000' + listObj.prefix.replace(/:$/, ';') + ' ');
				case '/li':
				case '/dt':
				case '/dd':
					return('');
			}
			return('');
		}
	);
	obj.html = obj.html.replace(/[\n|\u0000]+[#\*:\;]+ (?=[\n|\u0000])/g, '');

// <> remove not allowed tags
	obj.html = obj.html.replace(/(<\/?)(\/?)(\w+)(.*?>)/g,
		function (p, p1, p2, p3, p4) {
			if ( /^(big|blockquote|colgroup|center|code|del|div|font|ins|p|pre|s|small|span|strike|sub|sup|tt|u|rb|rp|rt|ruby|nowiki|math|gallery|noinclude|includeonly|ref|references)$/i.test(p3) ) {
				return(p1 + p2 + p3 + p4);
			}
			else {
				return('');
			}
		}
	);

// sanitize attributes in opening html tags
	obj.html = obj.html.replace(/<(\w+) +(.*?) *(\/?)>/g,
		function (p, p1, p2, p3) {
			if (p3 != '') {
				p3 = ' ' + p3;
			}
			return('<' + p1 + WikEdSanitizeAttributes(p1, p2, relaxed) + p3 + '>');
		}
	);

// unformat underlined, italic or bold blanks
	obj.html = obj.html.replace(/<u>(\'\'\'|\'\'|\s|\u0000)*([\s\u0000]+)(\'\'\'|\'\'|\s|\u0000)*<\/u>/g, '$2');
	obj.html = obj.html.replace(/\'\'\'(\'\'|\s|\u0000)*([\s\u0000]+)(\'\'|\s|\u0000)*\'\'\'/g, '$2');
	obj.html = obj.html.replace(/\'\'([\s\u0000]+)\'\'/g, '$1');

// fix MS Word non-style heading formatting
	obj.html = obj.html.replace(/(\u0000(={1,6}) *)(<u>|\'\'\'|\'\')+(.*?)(<\/u>|\'\'\'|\'\')+( *\2\u0000)/g, '$1$4$6');

// remove empty headings
	obj.html = obj.html.replace(/\u0000(={1,6})\s+\1\u0000/g, '\u0000');

// remove space-only lines
	obj.html = obj.html.replace(/([\s\u0000]*\u0000[\s\u0000]*)/g,
		function (p, p1) {
			return(p1.replace(/\n/g, '\u0000'));
		}
	);
	obj.html = obj.html.replace(/\u0000\s+/g, '\u0000');
	obj.html = obj.html.replace(/\s+(?=\u0000)/g, '\u0000');

// remove trailing linebreaks from table cells
	obj.html = obj.html.replace(/\u0000{2,}(\|)/g, '\u0000$1');

// remove leading and trailing spaces
	obj.html = obj.html.replace(/>\s+\u0000/g, '>\u0000');
	obj.html = obj.html.replace(/\u0000\s+</g, '\u0000<');

// remove empty inline and block tag pairs
	obj.html = obj.html.replace(/( *)<(big|colgroup|code|del|font|ins|pre|s|small|span|strike|sub|sup|tt|u|rb|rp|rt|ruby|nowiki)\b[^>]*><\/\1> *()/g, '$1');
	obj.html = obj.html.replace(/[\s\u0000]*<(blockquote|center|div|math|gallery|noinclude|includeonly|ref|references)\b[^>]*><\/\1>[\s\u0000]*()/g, '\u0000\u0000');

// remove empty lines from div tags
	obj.html = obj.html.replace(/(<div\b[^>]*>)[\s\u0000]+/g, '$1');
	obj.html = obj.html.replace(/[\s\u0000]+(<\/div>)/g, '$1');

// escape < >
	obj.html = obj.html.replace(/</g, '&lt;');
	obj.html = obj.html.replace(/>/g, '&gt;');

// newlines to <br />
	obj.html = obj.html.replace(/\n{2,}\u0000+\n/g, '\n\n');
	obj.html = obj.html.replace(/\n\u0000+\n{2,}/g, '\n\n');
	obj.html = obj.html.replace(/\u0000+\n{2,}/g, '\n\n');
	obj.html = obj.html.replace(/\n{2,}\u0000+/g, '\n\n');
	obj.html = obj.html.replace(/\u0000+\n/g, '\n');
	obj.html = obj.html.replace(/\n\u0000+/g, '\n');
	obj.html = obj.html.replace(/\u0000{2,}/g, '\n\n');
	obj.html = obj.html.replace(/\u0000/g, '\n');
	obj.html = obj.html.replace(/\n/g, '<br />');

// remove empty lines from article start and end
	if (obj.from == 'whole') {
		obj.html = obj.html.replace(/^(<br\b[^>]*>)+/g, '');
		obj.html = obj.html.replace(/(<br\b[^>]*>)+$/g, '');
	}

	return;
}


//
// WikEdSanitizeAttributes: see Sanitizer.php
//

window.WikEdSanitizeAttributes = function(tag, attributes, relaxed) {
	var common;
	var tablealign;
	var tablecell;
	var table;
	if (relaxed == true) {
		common = 'dir|style|class'; // not needed: lang|id|title
		tablealign = '|align|char|charoff|valign';
		table = '|summary|width|border|frame|rules|cellspacing|cellpadding|align|bgcolor';
		tablecell = '|abbr|axis|headers|scope|rowspan|colspan|nowrap|width|height|bgcolor';
	}
	else {
		common = 'dir';
		table = '|border|cellspacing|cellpadding|align|bgcolor';
		tablealign = '|align|valign';
		tablecell = '|rowspan|colspan|nowrap|bgcolor';
	}
	tag = tag.toLowerCase();
	var sanitized = '';
	var regExp = /(\w+)\s*=\s*((\'|\")(.*?)\3|(\w+))/g;
	var regExpMatch;
	while ( (regExpMatch = regExp.exec(attributes)) != null) {
		var attrib = regExpMatch[1];
		var attribValue = regExpMatch[4] || regExpMatch[5];
		if (attribValue == '') {
			continue;
		}
		var valid = false;

// relaxed, for existing text tags
		if (relaxed == true) {
			if ('center|em|strong|cite|code|var|sub|supdl|dd|dt|tt|b|i|big|small|strike|s|u|rb|rp|ruby'.indexOf(tag) >= 0) {
				if (common.indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('div|span|h1|h2|h3|h4|h5|h6|p'.indexOf(tag) >= 0) {
				if ((common + '|align').indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('blockquote'.indexOf(tag) >= 0) {
				if ((common + '|cite').indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('br'.indexOf(tag) >= 0) {
				if ('style|clear'.indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('pre'.indexOf(tag) >= 0) {
				if ((common + '|width').indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('ins|del'.indexOf(tag) >= 0) {
				if ((common + '|cite|datetime').indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('ul'.indexOf(tag) >= 0) {
				if ((common + '|type').indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('ol'.indexOf(tag) >= 0) {
				if ((common + '|type|start').indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('li'.indexOf(tag) >= 0) {
				if ((common + '|type|value').indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('table'.indexOf(tag) >= 0) {
				if ((common + table).indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('caption'.indexOf(tag) >= 0) {
				if ((common + '|align').indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('thead|tfoot|tbody'.indexOf(tag) >= 0) {
				if ((common + tablealign).indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('colgroup|col'.indexOf(tag) >= 0) {
				if ((common + '|span|width' + tablealign).indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('tr'.indexOf(tag) >= 0) {
				if ((common + '|bgcolor' + tablealign).indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('td|th'.indexOf(tag) >= 0) {
				if ((common + tablecell + tablealign).indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('font'.indexOf(tag) >= 0) {
				if ((common + '|size|color|face').indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('hr'.indexOf(tag) >= 0) {
				if ((common + '|noshade|size|width').indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('rt'.indexOf(tag) >= 0) {
				if ((common + '|rbspan').indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('ref'.indexOf(tag) >= 0) {
				if (('name').indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('references'.indexOf(tag) >= 0) {
			}
			else if ('gallery'.indexOf(tag) >= 0) {
				if ((common + '|perrow|widths|heights').indexOf(attrib) >= 0) { valid = true; }
			}
		}

// strict, for html code to be wikified from external sources (websites, Word)
		else {
			if ('center|em|strong|cite|code|var|sub|supdl|dd|dt|tt|b|i|big|small|strike|s|u|rb|rp|ruby|blockquote|pre|ins|del'.indexOf(tag) >= 0) {
				if (common.indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('div|span|h1|h2|h3|h4|h5|h6|p'.indexOf(tag) >= 0) {
				if ((common + '|align').indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('br'.indexOf(tag) >= 0) {
				if ('clear'.indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('ul'.indexOf(tag) >= 0) {
				if ((common + '|type').indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('ol'.indexOf(tag) >= 0) {
				if ((common + '|type|start').indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('li'.indexOf(tag) >= 0) {
				if ((common + '|type|value').indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('table'.indexOf(tag) >= 0) {
				if ((common + table).indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('caption'.indexOf(tag) >= 0) {
				if ((common + '|align').indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('thead|tfoot|tbody'.indexOf(tag) >= 0) {
				if ((common + tablealign).indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('colgroup|col'.indexOf(tag) >= 0) {
				if ((common + '|span' + tablealign).indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('tr'.indexOf(tag) >= 0) {
				if ((common + '|bgcolor' + tablealign).indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('td|th'.indexOf(tag) >= 0) {
				if ((common + tablecell + tablealign).indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('font'.indexOf(tag) >= 0) {
				if ((common + '|color').indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('hr'.indexOf(tag) >= 0) {
				if ((common + '|noshade|size').indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('rt'.indexOf(tag) >= 0) {
				if ((common + '|rbspan').indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('ref'.indexOf(tag) >= 0) {
				if (('name').indexOf(attrib) >= 0) { valid = true; }
			}
			else if ('references'.indexOf(tag) >= 0) {
			}
			else if ('gallery'.indexOf(tag) >= 0) {
			}
		}

// clean up
		if (valid == true) {

// clean up defaults for align
			if (attrib == 'align') {
				if ('tr|td|th'.indexOf(tag) >= 0) {
					if (attribValue == 'left') {
						attribValue = '';
					}
				}
			}

// clean up defaults for valign
			else if (attrib == 'valign') {
				if ('tr|td|th'.indexOf(tag) >= 0) {
					if (attribValue == 'top') {
						attribValue = '';
					}
				}
			}

// clean up style
			else if (attrib == 'style') {

// remove non-standard Mozilla styles
				attribValue = attribValue.replace(/(^| )(-moz-[\w\-]+): [\w\-]+; *()/g, '$1');
				attribValue = attribValue.replace(/(^| )([\w\-]+): [^;]*(-moz-[\w\-]+|windowtext)[^;]*; *()/g, '$1');

// remove dimensions from null values
				attribValue = attribValue.replace(/\b0(%|in|cm|mm|em|ex|pt|pc|px)\b/g, '0');

// remove empty definitions and spaces
				attribValue = attribValue.replace(/[\w\-]+ *\: *\; *()/g, '');
				attribValue = attribValue.replace(/ *(;|:) *()/g, '$1 ');
				attribValue = attribValue.replace(/( |;)+$/g, ';');
			}

// clean up class
			else if (attrib == 'class') {

// remove MS Word classes
				attribValue = attribValue.replace(/^Ms.*$/g, '');
			}

			if (attribValue != '') {
				sanitized += ' ' + attrib + '="' + attribValue + '"';
			}
		}
	}
	return(sanitized);
}


//
//
// WikEdRemoveHighlighting: remove syntax highlighting in obj.html; sets obj.htmlCode if text contains html code
//    expects <br /> instead of \n

window.WikEdRemoveHighlighting = function(obj) {

// remove highlighting and atttribute-free span tags
	var isRemove = [];
	obj.html = obj.html.replace(/(<(\/?)span\b([^>]*)>)/g,
		function (p, p1, p2, p3) {
			if (p2 == '') {
				if (/\bclass=\"wikEd\w+\"/.test(p3)) {
					isRemove.push(true);
					return('');
				}
				isRemove.push(false);
				return(p1);
			}
			if (isRemove.pop() == true) {
				return('');
			}
			return(p1);
		}
	);

// remove highlighting div tags
	var isRemove = [];
	obj.html = obj.html.replace(/(<(\/?)div\b([^>]*)>)/g,
		function (p, p1, p2, p3) {
			if (p2 == '') {
				if (/\bclass=\"wikEd\w+\"/.test(p3)) {
					isRemove.push(true);
					return('');
				}
				isRemove.push(false);
				return(p1);
			}
			if (isRemove.pop() == true) {
				return('');
			}
			return(p1);
		}
	);

// remove highlighting pre tags
	var isRemove = [];
	obj.html = obj.html.replace(/(<(\/?)pre\b([^>]*)>)/g,
		function (p, p1, p2, p3) {
			if (p2 == '') {
				if (/\bclass=\"wikEd\w+\"/.test(p3)) {
					isRemove.push(true);
					return('');
				}
				isRemove.push(false);
				return(p1);
			}
			if (isRemove.pop() == true) {
				return('');
			}
			return(p1);
		}
	);

// comments
	obj.html = obj.html.replace(/<!--wikEd\w+-->/g, '');

// newlines
	obj.html = obj.html.replace(/[\n\r ]+/g, ' ');

// non-breaking spaces
	obj.html = obj.html.replace(/&nbsp;/g, '\u00a0');

// check for pasted html content
	if (obj.html.match(/<(?!br\b)/)) {
		obj.htmlCode = true;
	}
	else {
		obj.htmlCode = false;
	}
	return;
}


//
// WikEdHighlightSyntax: highlight syntax in obj.html; if singleLine is set, no block syntax will be highlighted; call WikEdRemoveHighlighting first
//   expects < > &lt; &gt; &amp;  \u00a0 instead of &nbsp;  \n instead of <br />

window.WikEdHighlightSyntax = function(obj, singleLine) {

// &lt; and &gt; to \u0000 and \u0001
	obj.html = obj.html.replace(/&lt;/g, '\u0000');
	obj.html = obj.html.replace(/&gt;/g, '\u0001');

// #redirect
	obj.html = obj.html.replace(/(^|\n)(#)(redirect\b)/g, '$1<span class="wikEdWikiRedir">$3</span><!--wikEdWikiRedir-->');

// nowiki (no html highlighting)
	obj.html = obj.html.replace(/(\u0000nowiki\b.*?\u0001)(.*?)(\u0000\/nowiki\b.*?\u0001)/gi,
		function (p, p1, p2, p3) {
			p2 = p2.replace(/\u0000/g, '&lt;');
			p2 = p2.replace(/\u0001/g, '&gt;');
			return(p1 + p2 + p3);
		}
	);

// blocks

// lists * # : ;
	obj.html = obj.html.replace(/^((\u0000!--.*?--\u0001)*)([\*\#\:\;]+)(.*?)$/gm, '<span class="wikEdListLine">$1<span class="wikEdListTag">$3</span><!--wikEdListTag-->$4</span><!--wikEdListLine-->');
	if (singleLine != true) {
		obj.html = obj.html.replace(/((<span class=\"wikEdListLine\">[^\n]*\n)+)/g, '<span class="wikEdListBlock">$1');
		obj.html = obj.html.replace(/(<span class=\"wikEdListLine\">[^\n]*)(\n)(?!<span class=\"wikEdListLine\">)/g, '$1</span><!--wikEdListBlock-->$2');
	}

// #redirect (finish)
	obj.html = obj.html.replace(/(<span class=\"wikEdWikiRedir\">)(.*?<\/span><!--wikEdWikiRedir-->)/g, '$1#$2');

// various blocks
	if (singleLine != true) {
		obj.html = obj.html.replace(/(\u0000(blockquote|center|div|pre|timeline|imagemap)\b[^\u0001]*\u0001.*?\u0000\/\2\u0001)/gi, '<span class="wikEdBlock">$1</span><!--wikEdBlock-->');
	}

// space-pre
	if (singleLine != true) {
		obj.html = obj.html.replace(/^((\u0000!--.*?--\u0001)*)[\u00a0 ]([\u00a0 ]*)(.*?)$/gm, '<span class="wikEdSpaceLine">$1<span class="wikEdSpaceTag">&nbsp;$3</span><!--wikEdSpaceTag-->$4</span><!--wikEdSpaceLine-->');
		obj.html = obj.html.replace(/((<span class=\"wikEdSpaceLine\">[^\n]*\n)+)/g, '<span class="wikEdSpaceBlock">$1');
		obj.html = obj.html.replace(/(<span class=\"wikEdSpaceLine\">[^\n]*)(\n)(?!<span class="wikEdSpaceLine">)/g, '$1</span><!--wikEdSpaceBlock-->$2');
	}

// ---- <hr> horizontal rule
	obj.html = obj.html.replace(/(^|\n)((\u0000!--.*?--\u0001|<[^>]*>)*)(----)((\u0000!--.*?--\u0001|<[^>]*>)*)(\n|$)/g, '$1<span class="wikEdHR">$2$4</span><!--wikEdHR-->$5$7');
	obj.html = obj.html.replace(/(\u0000hr\u0001)/g, '<span class="wikEdHRInline">$1</span><!--wikEdHRInline-->');

// == headings
	obj.html = obj.html.replace(/(^|\n)((\u0000!--.*?--\u0001|<[^>]*>)*)(=+[\u00a0 ]*)([^\n]*?)([\u00a0 ]*=+)(?=([\u00a0 ]|<[^>]*>|\u0000!--.*?--\u0001)*(\n|$))/g,
		function (p, p1, p2, p3, p4, p5, p6) {
			p4 = p4.replace(/(=+)/g, '<span class="wikEdWiki">$1</span><!--wikEdWiki-->');
			p6 = p6.replace(/(=+)/g, '<span class="wikEdWiki">$1</span><!--wikEdWiki-->');
			var regExp = new RegExp('^' + wikEdText['External links'] + '?|' + wikEdText['External links'] + '|' + wikEdText['See also'] + '|'  + wikEdText['References'] + '$', 'i');
			if (regExp.test(p5) ) {
				p1 = p1 + '<span class="wikEdHeadingWp">';
				p6 = p6 + '</span><!--wikEdHeadingWp-->';
			}
			else {
				p1 = p1 + '<span class="wikEdHeading">';
				p6 = p6 + '</span><!--wikEdHeading-->';
			}
			return(p1 + p2 + p4 + p5 + p6);
		}
	);

// tables                                                  {|   |+   |-   ! |}            |
	obj.html = obj.html.replace(/^((\u0000!--.*?--\u0001)*)(\{\||\|\+|\|\-|\!|\|\}([^\}]|$)|\|)(.*?)$/gm, '<span class="wikEdTableLine">$1<span class="wikEdTableTag">$3</span><!--wikEdTableTag-->$5</span><!--wikEdTableLine-->');
	if (singleLine != true) {
		obj.html = obj.html.replace(/(^|\n)((<[^>]*>|\u0000!--.*?--\u0001)*\{\|)/g, '$1<span class="wikEdTableBlock">$2');
		obj.html = obj.html.replace(/(^|\n)((<[^>]*>|\u0000!--.*?--\u0001)*\|\}(<[^>]*>)*)/g, '$1$2</span><!--wikEdTableBlock-->');
		obj.html = obj.html.replace(/(\u0000table\b[^\u0001]*\u0001)/gi, '<span class="wikEdTableBlock">$1');
		obj.html = obj.html.replace(/(\u0000\/table\u0001)/gi, '$1</span><!--wikEdTableBlock-->');
	}

// <gallery> wiki markup
	if (singleLine != true) {
		obj.html = obj.html.replace(/(\u0000(gallery)\b[^\u0001]*\u0001)/gi, '<span class="wikEdWiki">$1');
		obj.html = obj.html.replace(/(\u0000\/(gallery)\u0001)/gi, '$1</span><!--wikEdWiki-->');
	}

// various block tags
	obj.html = obj.html.replace(/(\u0000\/?(blockquote|center|div|pre|timeline|imagemap)\b[^\u0001]*\u0001)/gi, '<span class="wikEdBlockTag">$1</span><!--wikEdBlockTag-->');

// <p> ... </p> pairs with (wikEdBlockTag) and withhout attributes (wikEdUnknown)
	var isRemove = [];
	obj.html = obj.html.replace(/(\u0000(\/?)p\b([^\u0001]*?)\u0001)/g,
		function (p, p1, p2, p3) {
			if (p2 == '') {
				if (p3 == '') {
					isRemove.push(true);
					return('<span class="wikEdUnknown">' + p1 + '</span><!--wikEdUnknown-->');
				}
				if (/\/$/.test(p3)) {
					return('<span class="wikEdUnknown">' + p1 + '</span><!--wikEdUnknown-->');
				}
				isRemove.push(false);
				return('<span class="wikEdBlockTag">' + p1 + '</span><!--wikEdBlockTag-->');
			}
			if (isRemove.pop() == true) {
				return('<span class="wikEdUnknown">' + p1 + '</span><!--wikEdUnknown-->');
			}
			return('<span class="wikEdBlockTag">' + p1 + '</span><!--wikEdBlockTag-->');
		}
	);

// inline elements

// magic words
	obj.html = obj.html.replace(/(__(NOTOC|FORCETOC|TOC|NOEDITSECTION|NEWSECTIONLINK|NOCONTENTCONVERT|NOCC|NOGALLERY|NOTITLECONVERT|NOTC|END|START)__)/gi, '<span class="wikEdMagic">$1</span><!--wikEdMagic-->');

// <sup> </sub> <ins> <del>
	obj.html = obj.html.replace(/(\u0000sup\b[^\u0001]*\u0001((.|\n)*?)\u0000\/sup\u0001)/gi, '<span class="wikEdSuperscript">$1</span><!--wikEdSuperscript-->');
	obj.html = obj.html.replace(/(\u0000sub\b[^\u0001]*\u0001((.|\n)*?)\u0000\/sub\u0001)/gi, '<span class="wikEdSubscript">$1</span><!--wikEdSubscript-->');
	obj.html = obj.html.replace(/(\u0000(ins|u)\b[^\u0001]*\u0001((.|\n)*?)\u0000\/(ins|u)\u0001)/gi, '<span class="wikEdIns">$1</span><!--wikEdIns-->');
	obj.html = obj.html.replace(/(\u0000(del|s|strike)\b[^\u0001]*\u0001((.|\n)*?)\u0000\/(del|s|strike)\u0001)/gi, '<span class="wikEdDel">$1</span><!--wikEdDel-->');

// <ref /> and <ref> wiki markup
	if (wikEdRefHide != true) {
		obj.html = obj.html.replace(/\u0000(ref\b[^\u0001]*?\/)\u0001/gi, '<span class="wikEdRef">&lt;$1&gt;</span><!--wikEdRef-->');
		obj.html = obj.html.replace(/(\u0000ref\b[^\u0001]*\u0001((.|\n)*?)\u0000\/ref\u0001)/gi, '<span class="wikEdRef">$1</span><!--wikEdRef-->');
	}

// various inline tags
	obj.html = obj.html.replace(/(\u0000\/?(sub|sup|ins|u|del|s|strike|big|br|colgroup|code|font|small|span|tt|rb|rp|rt|ruby|ref)\b[^\u0001]*\u0001)/gi, '<span class="wikEdInlineTag">$1</span><!--wikEdInlineTag-->');

// <references/> wiki markup
	obj.html = obj.html.replace(/\u0000((references)\b[^\u0001]*?\/)\u0001/gi, '<span class="wikEdWiki">&lt;$1&gt;</span><!--wikEdWiki-->');

// <math> <noinclude> <includeonly> <references> wiki markup
	obj.html = obj.html.replace(/(\u0000(math|gallery|noinclude|includeonly|references)\b[^\u0001]*\u0001((.|\n)*?)(\u0000)\/\2\u0001)/gi, '<span class="wikEdWiki">$1</span><!--wikEdWiki-->');

// unsupported or not needed <> tags
	obj.html = obj.html.replace(/(\u0000\/?)(\w+)(.*?\/?\u0001)/g,
		function (p, p1, p2, p3) {
			if ( ! /^(col|thead|tfoot|tbody|big|br|blockquote|colgroup|center|code|del|div|font|ins|p|pre|s|small|span|strike|sub|sup|tt|u|rb|rp|rt|ruby|nowiki|math|gallery|noinclude|includeonly|ref|references|timeline|imagemap)$/i.test(p2) ) {
				p1 = '<span class="wikEdUnknown">' + p1;
				p3 = p3 + '</span><!--wikEdUnknown-->';
			}
			return(p1 + p2 + p3);
		}
	);

// comments
	obj.html = obj.html.replace(/(\u0000!--(.|\n)*?--\u0001)/g, '<span class="wikEdComment">$1</span><!--wikEdComment-->');

// clear array of link addresses
	if (obj.whole == true) {
		wikEdFollowLinkIdNo = 0;
		wikEdFollowLinkHash = {};
	}
	obj.whole = false;

// URLs, allowed chars: \w / . & ? = - @ # % ~ + : (; allowed because of &amp; and common misuse, : allowed for wikipedia links)
	obj.html = obj.html.replace(/((http:\/\/|https:\/\/|ftp:\/\/|irc:\/\/|gopher:\/\/|news:|mailto:)[^\u0000-\u0020\!\"\$\'\(\)\*\,\<\>\[\\\]\^\`\{-\|\}\u007f-\uffff]*)/gi,
		function (p, p1, p2) {
			return('<span class="wikEdURLLink"' + WikEdFollowLinkUrl(null, null, p1) + '>' + p1 + '</span><!--wikEdURLLink-->');
		}
	);

// URLs with text
	obj.html = obj.html.replace(/(\[)( *<span class=\"wikEdURLLink\"[^>]*>.*?<\!--wikEdURLLink--> *)([^\]\n]*?)( *\])/gi,
		function (p, p1, p2, p3, p4) {

// link text
			p3 = p3.replace(/(.*)/, '<span class="wikEdURLText">$1</span><!--wikEdURLText-->');

// link tags
			p1 = p1.replace(/(\[)/, '<span class="wikEdLinkTag">$1</span><!--wikEdLinkTag-->');
			p4 = p4.replace(/(\])/, '<span class="wikEdLinkTag">$1</span><!--wikEdLinkTag-->');

			return(p1 + p2 + p3 + p4);
		}
	);

// [[Image: ]] images
	var regExpImg = new RegExp('(\\[\\[)(' + wikEdText['wikicode Image'] + ' *: *)([^\\]\\[\\|]*? *)(\\|(\\[[^\\]]*\\]|\\[\\[[^\\]]*\\]\\]|[^\\[\\]\\|]+|\\|)*)?(\\]\\])', 'gi');
	obj.html = obj.html.replace(regExpImg,
		function (p, p1, p2, p3, p4, p5, p6) {

			var linkTitle = p3;
			linkTitle = linkTitle.replace(/\|.*()/g, '');
			linkTitle = linkTitle.replace(/\n.*()/g, '');

			p1 = '<span class="wikEdImage"' + WikEdFollowLinkUrl(p2, linkTitle) + '>' + p1;
			p6 = p6 + '</span><!--wikEdImage-->';
			p2 = '<span class="wikEdImageName">' + p2;
			p3 = p3 + '</span><!--wikEdImageName-->';

// parameters and capture
			p4 = p4.replace(/((\[[^\]]\]|\[\[[^\]]\]\]|[^\]\|])+)/g,
				function (p, p1) {
					if (/^(thumb|thumbnail|frame|right|left|center|none|\d+px|\d+x\d+px)$/.test(p1) == true) {
						p1 = '<span class="wikEdImageParam">' + p1 + '</span><!--wikEdImageParam-->';
					}
					else {
						p1 = '<span class="wikEdImageCaption">' + p1 + '</span><!--wikEdImageCaption-->';
					}
					return(p1);
				}
			);

// link tags
			p1 = p1.replace(/(\[+)/, '<span class="wikEdLinkTag">$1</span><!--wikEdLinkTag-->');
			p6 = p6.replace(/(\]+)/, '<span class="wikEdLinkTag">$1</span><!--wikEdLinkTag-->');
			p4 = p4.replace(/(\|)/g, '<span class="wikEdLinkTag">$1</span><!--wikEdLinkTag-->');
			return(p1 + p2 + p3 + p4 + p6);
		}
	);

// [[ ]] links, categories
	obj.html = obj.html.replace(/(\[\[)([^\[\]]*)(\]\])/g,
		function (p, p1, p2, p3) {

// omit image tags
			var regExpImg = new RegExp('^(<[^>]*>)*' + wikEdText['wikicode Image'] + '\\s*:', 'i');
			if (regExpImg.test(p2) == true) {
				return(p1 + p2 + p3);
			}

// get url
			var linkParam = '';
			var linkInter;
			var linkMatch = p2.match(/^\s*(([\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9\-]*\s*:)*)\s*([^\|]+)/);
			if (linkMatch != null) {
				linkInter = linkMatch[1];
				linkParam = WikEdFollowLinkUrl(linkInter, linkMatch[3])
			}

// category
			var regExpCat = new RegExp('^\\s*' + wikEdText['wikicode Category'] + '\\s*:', 'i');
			if (regExpCat.test(p2)) {
				var regExp = new RegExp('\\s*[\\wÀ-ÖØ-öø-\\u0220\\u0222-\\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\\u0400-\\u0481\\u048a-\\u04ce\\u04d0-\\u04f5\\u04f8\\u04f9\\-]+\\s*:\\s*' + wikEdText['wikicode Category'] + '\\s*:', 'i');
				if (p2.match(regExp)) {
					p1 = '<span class="wikEdCatInter"' + linkParam + '>' + p1;
					p3 = p3 + '</span><!--wikEdCatInter-->';
				}
				else {
					p1 = '<span class="wikEdCat"' + linkParam + '>' + p1;
					p3 = p3 + '</span><!--wikEdCat-->';
				}
				p2 = p2.replace(/^(\s*)((\w*:)+)/, '$1<span class="wikEdInter">$2</span><!--wikEdInter-->');
				p2 = p2.replace(/(\s*)([^>:\|]+)(\s*\|\s*|$)/, '$1<span class="wikEdCatName">$2</span><!--wikEdCatName-->$3');
				p2 = p2.replace(/(\|\s*)(.*)/,
					function (p, p1, p2) {
						p2 = p2.replace(/(.*?)(\s*(\||$))/g, '<span class="wikEdCatText">$1</span><!--wikEdCatText-->$2');
						return(p1 + p2);
					}
				);
			}

// wikilink
			else {
				if (linkInter != '') {
					p1 = '<span class="wikEdLinkInter"' + linkParam + '>' + p1;
					p3 = p3 + '</span><!--wikEdLinkInter-->';
				}
				else {
					p1 = '<span class="wikEdLink"' + linkParam + '">' + p1;
					p3 = p3 + '</span><!--wikEdLink-->';
				}
				p2 = p2.replace(/^(\s*)((\w*:)+)/, '$1<span class="wikEdInter">$2</span><!--wikEdInter-->');
				p2 = p2.replace(/(\s*)([^>:\|]+)(\s*\|\s*|$)/, '$1<span class="wikEdLinkName">$2</span><!--wikEdLinkName-->$3');
				p2 = p2.replace(/(\|\s*)(.*)/,
					function (p, p1, p2) {
						p2 = p2.replace(/(.*?)(\s*(\||$))/g, '<span class="wikEdLinkText"">$1</span><!--wikEdLinkText-->$2');
						return(p1 + p2);
					}
				);
			}

// link tags
			p1 = p1.replace(/(\[+)/, '<span class="wikEdLinkTag">$1</span><!--wikEdLinkTag-->');
			p2 = p2.replace(/(\|)/g, '<span class="wikEdLinkTag">$1</span><!--wikEdLinkTag-->');
 			p3 = p3.replace(/(\]+)/, '<span class="wikEdLinkTag">$1</span><!--wikEdLinkTag-->');
			return(p1 + p2 + p3);
		}
	);

// {{ }} simple non-nested templates
	obj.html = obj.html.replace(/(\{{2,3})([^\{\}\<\>\u0000\u0001\n]+)(\}{2,3})/g,
		function (p, p1, p2, p3) {

// get url
			var linkParam = '';
			var linkInter;
			var linkMatch = p2.match(/^\s*(([\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]*\s*:)*)\s*([^\|]+)/);
			if (linkMatch != null) {
				linkInter = linkMatch[1];
				linkParam = WikEdFollowLinkUrl(linkInter + wikEdText['wikicode Template'] + ':', linkMatch[3])
			}
			if (linkInter != '') {
				p1 = '<span class="wikEdTemplInter"' + linkParam + '>' + p1;
				p3 = p3 + '</span><!--wikEdTemplInter-->';
			}
			else {
				p1 = '<span class="wikEdTempl"' + linkParam + '>' + p1;
				p3 = p3 + '</span><!--wikEdTempl-->';
			}
			p2 = p2.replace(/^(\s*)((\w*:)+)/, '$1<span class="wikEdInter">$2</span><!--wikEdInter-->');
			p2 = p2.replace(/(\s*)([^>:\|]+)(\s*\|\s*|$)/, '$1<span class="wikEdTemplName">$2</span><!--wikEdTemplName-->$3');
			p2 = p2.replace(/(\|\s*)(.*)/,
				function (p, p1, p2) {
					p2 = p2.replace(/(.*?)(\s*(\||$))/g, '<span class="wikEdTemplText">$1</span><!--wikEdTemplText-->$2');
					return(p1 + p2);
				}
			);

// template tags
			p2 = p2.replace(/(\|)/g, '<span class="wikEdTemplTag">$1</span><!--wikEdTemplTag-->');

			return(p1 + p2 + p3);
		}
	);

// highlighting curly template brackets at template start
	obj.html = obj.html.replace(/(\{{2,})(\s*[^\{\}\<\>\u0000\u0001\n\|]+)/g,
		function (p, p1, p2) {
			var linkMatch = p2.match(/^\s*(([\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]*\s*:)*)\s*([^\|]+)/);
			var linkParam = '';
			var linkInter;
			if (linkMatch != null) {
				linkInter = linkMatch[1];
				linkParam = WikEdFollowLinkUrl(linkInter + wikEdText['wikicode Template'] + ':', linkMatch[3])
			}
			return('<span class="wikEdTempl"' + linkParam + '><span class="wikEdTemplTag">' + p1 + '</span><span class="wikEdTemplName">' + p2 + '</span><!--wikEdTemplName--><!--wikEdTemplTag-->');
		}
	);

// highlighting curly template brackets at template end
	obj.html = obj.html.replace(/(\}{2,})(?!<\/span><!--wikEdTemplTag-->)/g, '<span class="wikEdTemplTag">$1</span><!--wikEdTemplTag--></span><!--wikEdTempl-->');

// <b> <i>
	obj.html = obj.html.replace(/(\'\'\')(\'*)(.*?)(\'*)(\'\'\')/g, '<span class="wikEdBold">$2$3$4</span><!--wikEdBold-->');
	obj.html = obj.html.replace(/(\'\')(.*?)(\'\')/g, '<span class="wikEdItalic">$1$2$3</span><!--wikEdItalic-->');
	obj.html = obj.html.replace(/(<span class=\"wikEdBold\">)/g, '$1\'\'\'');
	obj.html = obj.html.replace(/(<\/span><!--wikEdBold-->)/g, '\'\'\'$1');
	obj.html = obj.html.replace(/(\'{2,})/g, '<span class="wikEdWiki">$1</span><!--wikEdWiki-->');

// named html colors
	obj.html = obj.html.replace(/(\'|\")(aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|blanchedalmond|burlywood|chartreuse|coral|cornsilk|cyan|darkgray|darkgrey|darkkhaki|darkorange|darksalmon|darkseagreen|floralwhite|fuchsia|gainsboro|ghostwhite|gold|goldenrod|greenyellow|honeydew|hotpink|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightskyblue|lightsteelblue|lightyellow|lime|linen|magenta|mediumaquamarine|mediumspringgreen|mediumturquoise|mintcream|mistyrose|moccasin|navajowhite|oldlace|orange|palegoldenrod|palegreen|paleturquoise|papayawhip|peachpuff|peru|pink|plum|powderblue|salmon|sandybrown|seashell|silver|skyblue|snow|springgreen|tan|thistle|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen)(\1)/g, '$1<span style="background-color: $2;" class="wikEdColorsLight">$2</span><!--wikEdColorsLight-->$3');
	obj.html = obj.html.replace(/(\'|\")(black|blue|blueviolet|brown|cadetblue|chocolate|cornflowerblue|crimson|darkblue|darkcyan|darkgoldenrod|darkgreen|darkmagenta|darkolivegreen|darkorchid|darkred|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|forestgreen|gray|green|grey|indianred|indigo|lightseagreen|lightslategray|lightslategrey|limegreen|maroon|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumvioletred|midnightblue|navy|olive|olivedrab|orangered|orchid|palevioletred|purple|red|rosybrown|royalblue|saddlebrown|seagreen|sienna|slateblue|slategray|slategrey|steelblue|teal|tomato)(\1)/g, '$1<span style="background-color: $2;" class="wikEdColorsDark">$2</span><!--wikEdColorsDark-->$3');

// RGB hex colors #d4d0cc
	obj.html = obj.html.replace(/(^|[^\/\w])(#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2}))(?=(\W|$))/g,
		function (p, p1, p2, p3, p4, p5) {
			var luminance = parseInt(p3, 16) * 0.299 + parseInt(p4, 16) * 0.587 + parseInt(p5, 16) * 0.114;
			if (luminance > 128) {
				return(p1 + '<span style="background-color: ' + p2 + '" class="wikEdColorsLight">' + p2 + '</span><!--wikEdColorsLight-->');
			}
			else {
				return(p1 + '<span style="background-color: ' + p2 + '" class="wikEdColorsDark">' + p2 + '</span><!--wikEdColorsDark-->');
			}
		}
	);

// RGB hex colors #ddc
	obj.html = obj.html.replace(/(^|[^\/\w])(#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F]))(?=(\W|$))/g,
		function (p, p1, p2, p3, p4, p5) {
			var luminance = parseInt(p3, 16) * 16 * 0.299 + parseInt(p4, 16) * 16 * 0.587 + parseInt(p5, 16) * 16  * 0.114;
			if (luminance > 128) {
				return(p1 + '<span style="background-color: ' + p2 + '" class="wikEdColorsLight">' + p2 + '</span><!--wikEdColorsLight-->');
			}
			else {
				return(p1 + '<span style="background-color: ' + p2 + '" class="wikEdColorsDark">' + p2 + '</span><!--wikEdColorsDark-->');
			}
		}
	);

// RGB decimal colors rgb(128,64,265)
	obj.html = obj.html.replace(/(rgb\(\s*(\d+),\s*(\d+),\s*(\d+)\s*\))/gi,
		function (p, p1, p2, p3, p4) {
			var luminance = p2 * 0.299 + p3 * 0.587 + p4  * 0.114;
			if (luminance > 128) {
				return('<span style="background-color: ' + p1 + '" class="wikEdColorsLight">' + p1 + '</span><!--wikEdColorsLight-->');
			}
			else {
				return('<span style="background-color: ' + p1 + '" class="wikEdColorsDark">' + p1 + '</span><!--wikEdColorsDark-->');
			}
		}
	);

// nowiki (remove highlighting)
	obj.html = obj.html.replace(/(\u0000nowiki\b[^\u0001]*\u0001)((.|\n)*?)(\u0000\/nowiki\u0001)/gi,
		function (p, p1, p2, p3, p4) {
			p1 = '<span class="wikEdNowiki"><span class="wikEdInlineTag">' + p1 + '</span><!--wikEdInlineTag-->';
			p2 = p2.replace(/<[^>]*>/g, '');
			p4 = '<span class="wikEdInlineTag">' + p4 + '</span><!--wikEdInlineTag--></span><!--wikEdNowiki-->';
			return(p1 + p2 + p4);
		}
	);

// hide (fade) <ref>
	if (wikEdRefHide == true) {

// escape <ref />
		obj.html = obj.html.replace(/\u0000(ref\b[^\u0001]*?\/)\u0001/g, '<span class="wikEdRefHide">&lt;$1&gt;</span><!--wikEdRefHide-->');

// remove <ref> inner highlighting
		obj.html = obj.html.replace(/(\u0000ref\b[^\u0001]*\u0001)((.|\n)*?)(\u0000\/ref\u0001)/gi,
			function (p, p1, p2, p3, p4) {
				p2 = p2.replace(/<[^>]*>/g, '');
				var str = '<span class="wikEdRefHide">' + p1 + p2 + p4 + '</span><!--wikEdRefHide-->';
				return(str);
			}
		);
	}

// \u0000 and \u0001 back to &lt; and &gt;
	obj.html = obj.html.replace(/\u0000/g, '&lt;');
	obj.html = obj.html.replace(/\u0001/g, '&gt;');

// display control chars with popup title
	var regExp = new RegExp('([' + wikEdControlCharsStr + '])', 'g');
	obj.html = obj.html.replace(regExp,
		function (p, p1) {
			if (p1 == '\u0009') {
				p1 =  '<span class="wikEdTab" title="' + wikEdControlChars[p1.charCodeAt(0).toString()] + '">' + p1 + '</span><!--wikEdTab-->';
			}
			else if (p1 != '\u000a') {
				p1 = '<span class="wikEdCtrl" title="' + wikEdControlChars[p1.charCodeAt(0).toString()] + '">' + p1 + '</span><!--wikEdCtrl-->';
			}
			return(p1);
		}
	);

// display strange spaces with popup title
	var regExpStr = '';
	for (var decimalValue in wikEdStrangeSpaces) {
		if (typeof(wikEdStrangeSpaces[decimalValue]) != 'string') {
			continue;
		}
		regExpStr += String.fromCharCode(decimalValue);
	}
	var regExp = new RegExp('([' + regExpStr + '])', 'g');
	obj.html = obj.html.replace(regExp,
		function (p, p1) {
			if (p1 != '\u000a') {
				p1 = '<span class="wikEdBlank" title="' + wikEdStrangeSpaces[p1.charCodeAt(0).toString()] + '">' + p1 + '</span><!--wikEdBlank-->';
			}
			return(p1);
		}
	);

// remove comments
	if (wikEdRemoveHighlightComments == true) {
		obj.html = obj.html.replace(/<!--wikEd\w+-->/g, '');
	}

	return;
}


//
// WikEdFollowLinkUrl: prepare the span tag parameters for ctrl-click opening of highlighted links
//   add support for [[/subpage]]

window.WikEdFollowLinkUrl = function(linkPrefix, linkTitle, linkUrl) {//////////////////////

	var linkName = '';

// generate url from interlanguage or namespace prefix and title
	if (linkUrl == null) {

// test for templates
		if ( (/\{|\}/.test(linkPrefix) == true) || (/\{|\}/.test(linkTitle) ) == true) {
			return('');
		}

// remove highlighting code
		linkPrefix = linkPrefix.replace(/<[^>]*>/g, '');
		linkTitle = linkTitle.replace(/<[^>]*>/g, '');

// remove control chars
		var regExp = new RegExp('[' + wikEdControlCharsStr + ']', 'g');
		linkPrefix = linkPrefix.replace(regExp, '');
		linkTitle = linkTitle.replace(regExp, '');

// remove strange white spaces
		linkPrefix = linkPrefix.replace(/\s/, ' ');
		linkTitle = linkTitle.replace(/\s/, ' ');

		linkPrefix = linkPrefix.replace(/\s/g, '');
		linkPrefix = linkPrefix.replace(/^:+/g, '');
		linkTitle = linkTitle.replace(/ /g, '_');
		linkTitle = linkTitle.substr(0, 1).toUpperCase() + linkTitle.substr(1);
		linkUrl = linkPrefix + linkTitle;
		linkUrl = encodeURI(linkUrl);
		linkUrl = linkUrl.replace(/%25(\d\d)/g, '%$1');
		linkUrl = linkUrl.replace(/\'/g, '%27');
		linkUrl = linkUrl.replace(/#/g, '%23');
		if (wikEdWikiGlobals['wgArticlePath'] == null) {
			linkUrl = '';
		}
		else {
			linkUrl = wikEdWikiGlobals['wgArticlePath'].replace(/\$1/, linkUrl);
			linkName = linkPrefix + linkTitle;
		}
	}

// url provided
	else {

// test for templates
		if (/\{|\}/.test(linkUrl) == true) {
			return('');
		}
		linkName = linkUrl;
		linkUrl = encodeURI(linkUrl);
		linkUrl = linkUrl.replace(/%25(\d\d)/g, '%$1');
		linkUrl = linkUrl.replace(/\'/g, '%27');
	}

	linkName = linkName.replace(/</g, '&lt;');
	linkName = linkName.replace(/>/g, '&gt;');
	linkName = linkName.replace(/\"/g, '&quot;');
	linkName = linkName.replace(/\'/g, '\\u0027');

	var linkParam = '';
	if (linkUrl != '') {
		var linkId = 'wikEdFollowLink' + wikEdFollowLinkIdNo;
		wikEdFollowLinkIdNo ++;
		
		linkParam += 'id="' + linkId + '" title="' + linkName + ' ' + wikEdText['followLink'] + '"';
		wikEdFollowLinkHash[linkId] = linkUrl;
	}
	return(linkParam)
}


//
// WikEdUpdateTextarea: copy frame content to textarea
//

window.WikEdUpdateTextarea = function() {

// get frame content
	var obj = {};
	obj.html = wikEdFrameBody.innerHTML;
	obj.html = obj.html.replace(/(<br\b[^>]*>)\n* *()/g, '$1');

// textify so that no html formatting is submitted
	WikEdTextify(obj);
	obj.plain = obj.plain.replace(/&nbsp;/g, ' ');
	obj.plain = obj.plain.replace(/&lt;/g, '<');
	obj.plain = obj.plain.replace(/&gt;/g, '>');
	obj.plain = obj.plain.replace(/&amp;/g, '&');

// copy to textarea
	wikEdTextarea.value = obj.plain;

// remember frame scroll position
	wikEdFrameScrollTop = wikEdFrameBody.scrollTop;

	return;
}


//
// WikEdUpdateFrame: copy textarea content to frame
//

window.WikEdUpdateFrame = function() {

// get textarea content
	var obj = {};
	obj.html = wikEdTextarea.value;
	obj.html = obj.html.replace(/&/g, '&amp;');
	obj.html = obj.html.replace(/>/g, '&gt;');
	obj.html = obj.html.replace(/</g, '&lt;');

// highlight the syntax
	if (wikEdHighlightSyntax == true) {
		obj.whole = true;
		WikEdHighlightSyntax(obj);
	}

// display tabs
	else {
		obj.html = obj.html.replace(/(\t)/g, '<span class="wikEdTabPlain">$1</span><!--wikEdTabPlain-->');
	}

// multiple blanks to blank-&nbsp;
	obj.html = obj.html.replace(/  /g, '&nbsp; ');
	obj.html = obj.html.replace(/  /g, '&nbsp; ');
	obj.html = obj.html.replace(/ \n/g, '&nbsp;\n');

// newlines to <br />
	obj.html = obj.html.replace(/\n/g, '<br />');

// select the whole text after replacing the whole text and scroll to same height
	obj.sel = wikEdFrameWindow.getSelection();
	obj.sel.removeAllRanges();

// insert content into empty frame
	if ( (wikEdFrameBody.firstChild == null) || (wikEdFrameBody.innerHTML == '<br>') ) {
		wikEdFrameBody.innerHTML = obj.html;
	}

// insert content into frame, preserve history
	else {
		var range = document.createRange();
		range.setStartBefore(wikEdFrameBody.firstChild);
		range.setEndAfter(wikEdFrameBody.lastChild);
		obj.sel.addRange(range);

// replace the frame content with the new text
		if (obj.html != '') {
			WikEdFrameExecCommand('inserthtml', obj.html);
		}
		else {
			WikEdFrameExecCommand('delete');
		}
		obj.sel.removeAllRanges();

// scroll to previous position
		if (wikEdFrameScrollTop != null) {
			wikEdFrameBody.scrollTop = wikEdFrameScrollTop;
		}
	}
	wikEdFrameScrollTop = null;

// add event handler to make highlighted frame links ctrl-clickable
	if (wikEdHighlightSyntax == true) {
		WikEdFollowLinks();
	}

	return;
}


//
// WikEdKeyFrameHandler: event handler for key and mouse events in the frame
//

window.WikEdKeyFrameHandler = function(event) {

	if (wikEdUseWikEd == true) {
		switch (event.type) {

// trap the tab key
			case 'keydown':
				switch (event.keyCode) {
					case 9:
						if (event.shiftKey == false) {
							event.preventDefault();

// scroll to text input top
							if (wikEdFullScreenMode == false) {
								var inputWrapperTop = WikEdGetOffsetTop(wikEdInputWrapper);
								window.scroll(0, inputWrapperTop);
							}

// focus the summary
							wikEdSummaryText.focus();
						}
						break;
				}
				break;

// trap any other frame event
			case 'keyup':
			case 'keypress':
			case 'mouseup':

// grey out inactive buttons
				WikEdInactiveButtons();

// reset the frame DOM cache
				wikEdFrameDOMCache = null;
				break;
		}
	}

	return;
}


//
// WikEdShiftAltHandler: event handler for emulated accesskey keydown events in main document and frame
//

window.WikEdShiftAltHandler = function(event) {

	if (wikEdUseWikEd == true) {
		if ( (event.shiftKey == true) && (event.ctrlKey == false) && (event.altKey == true) ) {

// get wikEd button id from keycode
			var buttonId = wikEdButtonKeyCode[event.keyCode];
			if (buttonId != null) {
				event.preventDefault();
				event.stopPropagation();

// execute the button click handler code
				var obj = document.getElementById(buttonId);
				eval(wikEdEditButtonHandler[buttonId]);
			}
		}
	}
	return;
}


//
// WikEdFrameExecCommand: wrapper for execCommand method
//

window.WikEdFrameExecCommand = function(command, option) {

	wikEdFrameDocument.execCommand(command, false, option);
	return;
}


//
// WikEdFindAhead: non-regexp and case-insensitive find-as-you-type, event handler for find field
//

window.WikEdFindAhead = function() {

	if (wikEdFindAhead.getAttribute('checked') == 'true') {

// get the find text
		var findText = wikEdFindText.value;
		if (findText == '') {
			return;
		}

// remember position
		var sel = wikEdFrameWindow.getSelection();
		var range = sel.getRangeAt(sel.rangeCount - 1).cloneRange();
		var rangeClone = range.cloneRange();
		var scrollTop = wikEdFrameBody.scrollTop;
		sel.removeAllRanges();
		sel.addRange(range);
		range.collapse(true);

// parameters: window.find(string, caseSensitive, backwards, wrapAround, wholeWord, searchInFrames, showDialog)
// Mozilla bug: searchInFrames must be true, otherwise wrapAround does not work
		var found = wikEdFrameWindow.find(findText, false, false, true, false, true, false);

// add original selection
		if (found == false) {
			wikEdFrameBody.scrollTop = scrollTop;
			sel.removeAllRanges();
			sel.addRange(rangeClone);
		}
	}
	return;
}


//
// WikEdMainSwitch: click handler for program logo
//

window.WikEdMainSwitch = function() {

// disable function if browser is incompatible
	if (wikEdBrowserNotSupported == true) {
		return;
	}

// enable wikEd
	if (wikEdDisabled == true) {
		wikEdDisabled = false;
		WikEdSetPersistent('wikEdDisabled', '', -1, '/');

// turn rich text frame on
		if (wikEdTurnedOn == true) {
			WikEdSetLogo();
			WikEdUpdateFrame();
			WikEdSetEditArea(true);
			wikEdButtonBarControl.style.display = 'block';
			wikEdButtonBarPreview.style.display = 'block';
			if (wikEdButtonBarJump != null) {
				wikEdButtonBarJump.style.display = 'block';
			}
		}

// setup wikEd
		else {
			WikEdTurnOn(false);
			return;
		}
	}

// disable wikEd
	else {
		wikEdDisabled = true;
		WikEdSetLogo();
		WikEdSetPersistent('wikEdDisabled', '1', 0, '/');
		if (wikEdTurnedOn == true) {
			if (wikEdFullScreenMode == true) {
				WikEdFullScreen(false);
			}

// turn classic textarea on
			WikEdUpdateTextarea();
			WikEdSetEditArea(false);
			wikEdButtonBarControl.style.display = 'none';
			wikEdButtonBarPreview.style.display = 'none';
			wikEdLocalPrevWrapper.style.display = 'none';
			if (wikEdButtonBarJump != null) {
				wikEdButtonBarJump.style.display = 'none';
			}
		}
	}

	return;
}


//
// WikEdFullScreen: change to fullscreen edit area or back to normal view
//

window.WikEdFullScreen = function(fullscreen, notFrame) {

// hide or show elements
	var displayStyle;
	if (fullscreen == true) {
		displayStyle = 'none';
	}
	else {
		displayStyle = 'block';
	}

// elements above input wrapper
	var node = document.getElementById('editform').previousSibling;
	while (node != null) {
		if ( (node.nodeName == 'DIV') || (node.nodeName == 'H3') ) {
			node.style.display = displayStyle;
		}
		node = node.previousSibling;
	}
	document.getElementsByTagName('H1')[0].style.display = displayStyle;

// divs below input wrapper
	var node = wikEdInputWrapper.nextSibling;
	while (node != null) {
		if (node.nodeName == 'DIV') {
			node.style.display = displayStyle;
		}
		node = node.nextSibling;
	}

// divs below input wrapper, some levels up
	var node = document.getElementById('column-one');
	while (node != null) {
		if (node.nodeName == 'DIV') {
			node.style.display = displayStyle;
		}
		node = node.nextSibling;
	}

// insert wrapper
	document.getElementById('wikEdInsertWrapper').style.display = displayStyle;

// change styles
	if (fullscreen) {
		if (notFrame != true) {
			wikEdInputWrapper.className = 'wikEdInputWrapperFull';
		}
		wikEdButtonBarPreview.className = 'wikEdButtonBarPreviewFull';
	}
	else {
		if (notFrame != true) {
			wikEdInputWrapper.className = 'wikEdInputWrapper';
		}
		wikEdButtonBarPreview.className = 'wikEdButtonBarPreview';
	}

// resize the frame
	if (fullscreen) {
		var consoleTop = WikEdGetOffsetTop(wikEdConsoleWrapper);
		var consoleHeight = wikEdConsoleWrapper.offsetHeight;
		var frameHeight = wikEdFrame.offsetHeight;
		var windowHeight = window.innerHeight;
		var windowWidth = window.innerWidth;
		var frameHeightNew =  frameHeight + (windowHeight - (consoleTop + consoleHeight) ) - 2;
		wikEdFrame.style.height = frameHeightNew + 'px';
	}
	else {
		wikEdFrame.style.height = wikEdTextareaHeight + 'px';
	}

// scroll to edit-frame
	if (fullscreen == false) {
		window.scroll(0, WikEdGetOffsetTop(wikEdInputWrapper) - 2);
	}

// set the fullscreen button state
	WikEdButton(document.getElementById('wikEdFullScreen'), 'wikEdFullScreen', null, fullscreen);

// grey out or re-activate scroll-to buttons
	var buttonClass;
	if (fullscreen) {
		buttonClass = 'wikEdButtonInactive';
	}
	else {
		buttonClass = 'wikEdButton';
	}
	document.getElementById('wikEdScrollToPreview').className = buttonClass;
	document.getElementById('wikEdScrollToPreview2').className = buttonClass;
	document.getElementById('wikEdScrollToEdit').className = buttonClass;
	document.getElementById('wikEdScrollToEdit2').className = buttonClass;

// resize the summary field
	WikEdResizeSummary();

	wikEdFullScreenMode = fullscreen;

	return;
}


//
// WikEdResizeSummary: recalculate the summary width after resizing the window
//

window.WikEdResizeSummary = function() {

	wikEdSummaryText.style.width = '';
	wikEdSummarySelect.style.width = '';
	wikEdSummaryTextWidth = wikEdSummaryWrapper.clientWidth - ( WikEdGetOffsetLeft(wikEdSummaryText) - WikEdGetOffsetLeft(wikEdSummaryWrapper) );
	if (wikEdSummaryTextWidth < 150) {
		wikEdSummaryTextWidth = 150;
	}
	wikEdSummaryText.style.width = wikEdSummaryTextWidth + 'px';
	WikEdResizeComboInput('summary');
	return;
}


//
// WikEdResizeComboInput: set the size of the background select boxes so that the button is visible
//

window.WikEdResizeComboInput = function(field) {

// add a dummy option if no options have been added yet
	var dummy;
	var testOption = 1;
	if (wikEdSelectElement[field].options.length == 0) {
		testOption = 0;
		wikEdSelectElement[field].options[0] = new Option('');
		dummy = true;
	}

// set option widths to 0
	for (var i = 0; i < wikEdSelectElement[field].options.length; i ++) {
		wikEdSelectElement[field].options[i].style.width = '0';
	}

// calculate select width
	var inputWidth = wikEdInputElement[field].clientWidth;
	var selectWidth = wikEdSelectElement[field].clientWidth;
	var optionWidth = wikEdSelectElement[field].options[testOption].offsetWidth;
	var border = wikEdInputElement[field].offsetWidth - wikEdInputElement[field].clientWidth;
	selectWidth = selectWidth - optionWidth + inputWidth - border + 1;
	var buttonWidth = selectWidth - inputWidth;

	if (inputWidth - buttonWidth > 150) {
		wikEdInputElement[field].style.width = (inputWidth - buttonWidth) + 'px';
		wikEdSelectElement[field].style.width = (selectWidth - buttonWidth) + 'px';
	}
	else {
		wikEdSelectElement[field].style.width = selectWidth + 'px';
	}

// delete dummy option
	if (dummy == true) {
		wikEdSelectElement[field].options[0] = null;
	}

// set option widths to auto
	for (var i = 0; i < wikEdSelectElement[field].options.length; i ++) {
		wikEdSelectElement[field].options[i].style.width = 'auto';
	}
	return;
}


//
// WikEdChangeComboInput: set the input value to selected option; onchange event handler for select boxes
//

window.WikEdChangeComboInput = function(field) {

	wikEdInputElement[field].focus;

// get selection index (-1 for unselected)
	var selected = wikEdSelectElement[field].selectedIndex;
	if (selected >= 0) {
		wikEdSelectElement[field].selectedIndex = -1;

// get selected option
		var option = wikEdSelectElement[field].options[selected];
		if (option.text != '') {

// jump to heading
			if (/^=/.test(option.value) == true) {

// parameters: window.find(string, caseSensitive, backwards, wrapAround, wholeWord, searchInFrames, showDialog)
// Mozilla bug: searchInFrames must be true, otherwise wrapAround does not work
				wikEdFrameWindow.find(option.value, true, false, true, false, true, false);
			}

// update input field
			else {

// add a tag to the summary box
				if (field == 'summary') {
					wikEdInputElement[field].value = WikEdAppendToSummary(wikEdInputElement[field].value, option.text);
				}

// add case and regexp checkboxes to find / replace fields
				else if (option.value == 'setcheck') {
					WikEdButton(document.getElementById('wikEdCaseSensitive'), 'wikEdCaseSensitive', null, (option.text.charAt(0) == wikEdCheckMarker[true]) );
					WikEdButton(document.getElementById('wikEdRegExp'), 'wikEdRegExp', null, (option.text.charAt(1) == wikEdCheckMarker[true]) );
					wikEdInputElement[field].value = option.text.substr(3);
				}

// add option text
				else {
					wikEdInputElement[field].value = option.text;
				}

// find the new text
				if ( (field == 'find') && (wikEdFindAhead.getAttribute('checked') == 'true') ) {
					WikEdFindAhead();
				}
			}
		}
	}
	return;
}


//
// WikEdAppendToSummary: append a phrase to the summary text
//

window.WikEdAppendToSummary = function(summary, append) {

	summary = summary.replace(/^[, ]+/, '');
	summary = summary.replace(/[, ]+$/, '');
	if (summary != '') {
		if (summary.match(/ \*\/$/) != null) {
			summary += ' ';
		}
		else if (summary.match(/[\.\;\:]$/) != null) {
			summary += ' ';
		}
		else if (summary.match(/^[\wÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9\(\)\"\'\+\-]/) == null) {
			summary += ' ';
		}
		else {
			summary += ', ';
		}
	}
	summary += append;

	return(summary);
}


//
// WikEdAddToHistory: add an input value to the saved history
//

window.WikEdAddToHistory = function(field) {

	if (wikEdInputElement[field].value != '') {

// load history from saved settings
		WikEdLoadHistoryFromSettings(field);

// add current value to history
		wikEdFieldHist[field].unshift(wikEdInputElement[field].value);

// add case and regexp checkboxes to find / replace value
		if ( (field == 'find') || (field == 'replace') ) {
			wikEdFieldHist[field][0] =
				wikEdCheckMarker[ (wikEdCaseSensitive.getAttribute('checked') == 'true') ] +
				wikEdCheckMarker[ (wikEdRegExp.getAttribute('checked') == 'true') ] +
				' ' + wikEdFieldHist[field][0];
		}

// remove paragraph names from summary
		if (field == 'summary') {
			wikEdFieldHist[field][0] = wikEdFieldHist[field][0].replace(/^\/\* .*? \*\/ *()/, '');
		}

// remove multiple old copies from history
		var i = 1;
		while (i < wikEdFieldHist[field].length) {
			if (wikEdFieldHist[field][i] == wikEdFieldHist[field][0]) {
				wikEdFieldHist[field].splice(i, 1);
			}
			else {
				i ++;
			}
		}

// remove new value if it is a preset value
		if (wikEdComboPresetOptions[field] != null) {
			var i = 0;
			while (i < wikEdComboPresetOptions[field].length) {
				if (wikEdComboPresetOptions[field][i] == wikEdFieldHist[field][0]) {
					wikEdFieldHist[field].shift();
					break;
				}
				else {
					i ++;
				}
			}
		}

// cut history number to maximal history length
		wikEdFieldHist[field] = wikEdFieldHist[field].slice(0, wikEdHistoryLength[field]);

// save history to settings
		if (wikEdFieldHist[field][0] != '') {
			WikEdSaveHistoryToSetting(field);
		}
	}
	return;
}


//
// WikEdSetComboOptions: generate the select options from saved history; onfocus handler for select box
//

window.WikEdSetComboOptions = function(field) {

// load history from saved settings
	WikEdLoadHistoryFromSettings(field);

	var option = {};
	var selectedOption = null;

// delete options
	var options = wikEdSelectElement[field].options;
	for (var i = 0; i < options.length; i ++) {
		wikEdSelectElement[field].remove(i);
	}

// delete optgroup
	option = document.getElementById(field + 'Optgroup');
	if (option != null) {
		wikEdSelectElement[field].removeChild(option);
	}

// workaround for onchange not firing when selecting first option from unselected dropdown
	option = document.createElement('option');
	option.style.display = 'none';
	j = 0;
	wikEdSelectElement[field].options[j++] = option;

// add history entries
	for (var i = 0; i < wikEdFieldHist[field].length; i ++) {
		if (wikEdFieldHist[field][i] != null) {
			if (wikEdFieldHist[field][i] == wikEdInputElement[field].value) {
				selectedOption = j;
			}
			option = document.createElement('option');
			option.text = wikEdFieldHist[field][i];
			if ( (field == 'find') || (field == 'replace') ) {
				option.value = 'setcheck';
			}
			wikEdSelectElement[field].options[j++] = option;
		}
	}

// add preset entries
	var startPreset = 0;
	if (wikEdComboPresetOptions[field] != null) {
		startPreset = j;
		for (var i = 0; i < wikEdComboPresetOptions[field].length; i ++) {
			if (wikEdComboPresetOptions[field][i] != null) {

// replace spaces with nbsp to allow for multiple and trailing spaces
				wikEdComboPresetOptions[field][i] = wikEdComboPresetOptions[field][i].replace(/ /g, '\u00a0');

// select a dropdown value
				if (wikEdComboPresetOptions[field][i] == wikEdInputElement[field].value) {
					selectedOption = j;
				}

				option = document.createElement('option');
				option.text = wikEdComboPresetOptions[field][i];
				if (field == 'summary') {
					option.text = option.text.replace(/\{wikEdUsing\}/g, wikEdSummaryUsing);
				}
				wikEdSelectElement[field].options[j++] = option;
			}
		}
	}

// set the selection
	wikEdSelectElement[field].selectedIndex = selectedOption;

// add a blank preset separator
	if ( (startPreset > 1) && (startPreset < j) ) {
		option = document.createElement('optgroup');
		option.label = '\u00a0';
		option.id = field + 'Optgroup';
		wikEdSelectElement[field].insertBefore(option, wikEdSelectElement[field].options[startPreset]);
	}

// add the TOC jumper to the find field
	var startTOC = 0;
	if (field == 'find') {
		startTOC = j;

// get the whole plain text
		var plain = wikEdFrameBody.innerHTML;
		plain = plain.replace(/<br\b[^>]*>/g, '\n');
		plain = plain.replace(/<.*?>/g, '');

// cycle through the headings
		var heading = plain.match(/(^|\n)=+[^\n]+?=+[^\n=]*[ =\t]*(?=(\n|$))/g);
		for (var i = 0; i < heading.length; i ++) {
			var headingMatch = heading[i].match(/\n?((=+) *([^\n]+?)( *\2))/);
			var headingIndent = headingMatch[2]
			headingIndent = headingIndent.replace(/^=/g, '');
			headingIndent = headingIndent.replace(/=/g, '\u00a0');

// add headings to the select element
			option = document.createElement('option');
			option.text = '\u21d2' + headingIndent + headingMatch[3];
			option.value = headingMatch[1];
			wikEdSelectElement[field].options[j++] = option;
		}
	}

// add a blank TOC separator
	if ( (startTOC > 1) && (startTOC < j) ) {
		option = document.createElement('optgroup');
		option.label = '\u00a0';
		option.id = field + 'Optgroup';
		wikEdSelectElement[field].insertBefore(option, wikEdSelectElement[field].options[startTOC]);
	}

	return;
}


//
// WikEdClearHistory: clear the history of combo input fields
//

window.WikEdClearHistory = function(field) {
	WikEdSetPersistent(wikEdSavedName[field], '', 0, '/');
	WikEdSetComboOptions(field);
	return;
}


//
// WikEdLoadHistoryFromSettings: get the input box history from the respective saved settings
//

window.WikEdLoadHistoryFromSettings = function(field) {
	var setting = WikEdGetPersistent(wikEdSavedName[field]);
	if (setting != '') {
		setting = decodeURIComponent(setting);
		wikEdFieldHist[field] = setting.split('\n');
	}
	else {
		wikEdFieldHist[field] = [];
	}
	return;
}


//
// WikEdSaveHistoryToSetting: save the input box history to the respective saved settings
//

window.WikEdSaveHistoryToSetting = function(field) {
	var setting = '';
	setting = wikEdFieldHist[field].join('\n')
	setting = setting.replace(/\n$/, '');
	setting = encodeURIComponent(setting);
	WikEdSetPersistent(wikEdSavedName[field], setting, 0, '/');
	return;
}


// WikEdGetStyle: get computed style properties for non-inline css definitions
window.WikEdGetStyle = function(element, styleProperty) {
	var style;
	if (element != null) {
		style = document.defaultView.getComputedStyle(element, null).getPropertyValue(styleProperty);
	}
	return(style);
}


//
// WikEdGetSavedSetting: get a wikEd setting depending on the presence of a cookie
//

window.WikEdGetSavedSetting = function(settingName, preset) {

	var setting;
	if (WikEdGetPersistent(settingName) != '') {
		setting = ! preset;
	}
	else {
		setting = preset;
	}
	return(preset);
}


//
// WikEdGetPersistent: get a cookie or a Greasemonkey persistent value (code copied to wikEdDiff.js)
//

window.WikEdGetPersistent = function(name) {
	
	var getStr = '';

// get a Greasemonkey persistent value
	if (wikEdGreasemonkey == true) {
		getStr = GM_getValue(name, '');
	}

// get a cookie value
	else {
		getStr = WikEdGetCookie(name);
	}
	return(getStr);
}


//
// WikEdSetPersistent: set a cookie or a Greasemonkey persistent value, deletes the value for expire = -1
//

window.WikEdSetPersistent = function(name, value, expires, path, domain, secure) {

// set a Greasemonkey persistent value
	if (wikEdGreasemonkey == true) {
		if (expires == -1) {
			GM_setValue(name, '');
		}
		else {
			GM_setValue(name, value);
		}
	}

// set a cookie value
	else {
		WikEdSetCookie(name, value, expires, path, domain, secure);
	}
	return;
}


//
// WikEdGetCookie: get a cookie (code copied to wikEdDiff.js)
//

window.WikEdGetCookie = function(cookieName) {

	var cookie = ' ' + document.cookie;
	var search = ' ' + cookieName + '=';
	var cookieValue = '';
	var offset = 0;
	var end = 0;
	offset = cookie.indexOf(search);
	if (offset != -1) {
		offset += search.length;
		end = cookie.indexOf(';', offset)
		if (end == -1) {
			end = cookie.length;
		}
		cookieValue = cookie.substring(offset, end);
		cookieValue = cookieValue.replace(/\\+/g, ' ');
		cookieValue = decodeURIComponent(cookieValue);
	}
	return(cookieValue);
}


//
// WikEdSetCookie: set a cookie, deletes a cookie for expire = -1
//

window.WikEdSetCookie = function(name, value, expires, path, domain, secure) {

	var cookie = name + '=' + encodeURIComponent(value);

	if (expires != null) {

// generate a date 1 hour ago to delete the cookie
		if (expires == -1) {
			var cookieExpire = new Date();
			expires = cookieExpire.setTime(cookieExpire.getTime() - 60 * 60 * 1000);
			expires = cookieExpire.toUTCString();
		}

// get date from expiration preset
		else if (expires == 0) {
			var cookieExpire = new Date();
			expires = cookieExpire.setTime(cookieExpire.getTime() + wikEdCookieExpireSec * 1000);
			expires = cookieExpire.toUTCString();
		}
		cookie += '; expires=' + expires;
	}
	if (path != null) {
		cookie += '; path=' + path;
	}
	if (domain != null)  {
		cookie += '; domain=' + domain;
	}
	if (secure != null) {
		cookie += '; secure';
	}
	document.cookie = cookie;
	return;
}


//
// WikEdGetOffsetTop: get element offset relative to window top (code copied to wikEdDiff.js)
//

window.WikEdGetOffsetTop = function(element) {
	var offset = 0;
	do {
		offset += element.offsetTop;
	} while ( (element = element.offsetParent) != null );
	return(offset);
}


//
// WikEdGetOffsetLeft: get element offset relative to left window border
//

window.WikEdGetOffsetLeft = function(element) {
	var offset = 0;
	do {
		offset += element.offsetLeft;
	} while ( (element = element.offsetParent) != null );
	return(offset);
}


// define leaf elements for WikEdGetInnerHTML
window.wikEdLeafElements = [];
wikEdLeafElements['IMG'] = true;
wikEdLeafElements['HR'] = true;
wikEdLeafElements['BR'] = true;
wikEdLeafElements['INPUT'] = true;


//
// WikEdParseDOM: parses a DOM subtree and and adds plain text into a complex data structure
//   wikEdFrameDOMCache contains the last parse if the frame has not changed
//

window.WikEdParseDOM = function(obj, topNode) {

/* problematic because of obj.changed //////////////////////
	if (wikEdFrameDOMCache != null) {
		obj = wikEdFrameDOMCache;
		return;
	}
*/

	obj.plainLength = 0;
	obj.plainArray = [];
	obj.plainNode = [];
	obj.plainStart = [];
	obj.plainPos = [];
	WikEdParseDOMRecursive(obj, topNode);
	obj.plain = obj.plainArray.join('');
	wikEdFrameDOMCache = obj;
	return;
}


//
// WikEdParseDOMRecursive: parses a DOM tree and and adds plain text into the data structure
//

window.WikEdParseDOMRecursive = function(obj, currentNode) {

// cycle through the child nodes of currentNode
	for (var property in currentNode.childNodes) {
		var childNode = currentNode.childNodes[property];
		if (typeof(childNode) != 'string') {
			continue;
		}
		if (childNode == null) {
			break;
		}

// check for selection
		if (childNode == obj.sel.focusNode) {
			obj.plainFocus = obj.plainLength + obj.sel.focusOffset;
		}
		if (childNode == obj.sel.anchorNode) {
			obj.plainAnchor = obj.plainLength + obj.sel.anchorOffset;
		}
		var value = null;

// get text of child node
		switch (childNode.nodeType) {
			case 1:
				if ( (childNode.childNodes.length == 0) && (wikEdLeafElements[childNode.nodeName] == true) ) {
					if (childNode.nodeName == 'BR') {
						value = '\n';
					}
				}
				else {
					WikEdParseDOMRecursive(obj, childNode);
				}
				break;
			case 3:
				value = childNode.nodeValue;
				value = value.replace(/\n/g, ' ');
				break;
			case 5:
				value = '&' + childNode.nodeName + ';';
				break;
		}

// add text to text object
		if (value != null) {

// array of text fragments
			obj.plainArray.push(value);

// array of text fragment node references
			obj.plainNode.push(childNode);

// array of text fragment text positions
			obj.plainStart.push(obj.plainLength);

// node references containing text positions
			obj.plainPos[childNode] = obj.plainLength;

// current text length
			obj.plainLength += value.length;
		}
	}
	return;
}


//
// WikEdGetInnerHTML: get the innerHTML from a document fragment
//

window.WikEdGetInnerHTML = function(obj, currentNode) {

// initialize string
	if (obj.html == null) {
		obj.html = '';
	}
	if (obj.plain == null) {
		obj.plain = '';
	}
	if (obj.plainArray == null) {
		obj.plainArray = [];
		obj.plainNode = [];
		obj.plainStart = [];
	}

	for (var i = 0; i < currentNode.childNodes.length; i ++) {
		var childNode = currentNode.childNodes.item(i);
		switch (childNode.nodeType) {
			case 1:
				obj.html += '<' + childNode.nodeName.toLowerCase();
				for (var j = 0; j < childNode.attributes.length; j ++) {
					if (childNode.attributes.item(j).nodeValue != null) {
						obj.html += ' ' + childNode.attributes.item(j).nodeName + '="' + childNode.attributes.item(j).nodeValue.replace(/</g, '&lt;').replace(/>/g, '&gt;') + '"';
					}
				}
				if ( (childNode.childNodes.length == 0) && wikEdLeafElements[childNode.nodeName] ) {
					obj.html += '>';
					if (childNode.nodeName == 'BR') {
						obj.plainArray.push('\n');
						obj.plainNode.push(childNode);
						obj.plainStart.push(obj.plain.length);
						obj.plain += '\n';
					}
				}
				else {
					obj.html += '>';
					WikEdGetInnerHTML(obj, childNode);
					obj.html += '</' + childNode.nodeName.toLowerCase() + '>'
				}
				break;
			case 3:
				var value = childNode.nodeValue;
				value = value.replace(/\n/g, ' '); // important for pasted page content
				obj.plainArray.push(value);        // plain array contains & < > instead of &amp; &lt; &gt;
				obj.plainNode.push(childNode);
				obj.plainStart.push(obj.plain.length);
				value = value.replace(/&/g, '&amp;');
				value = value.replace(/</g, '&lt;');
				value = value.replace(/>/g, '&gt;');
				obj.html += value;
				obj.plain += value;
				break;
			case 4: obj.html += '<![CDATA[' + childNode.nodeValue + ']]>';
				break;
			case 5:
				var value = '&' + childNode.nodeName + ';';
				obj.plainArray.push(value);
				obj.plainNode.push(childNode);
				obj.plainStart.push(obj.plain.length);
				value = value.replace(/&/g, '&amp;');
				obj.html += value;
				obj.plain += value;
				break;
			case 8: obj.html += '<!--' + childNode.nodeValue + '-->';
				break;
		}
	}
	return;
}


//
// WikEdStyleSheet: create a new style sheet object (code copied to wikEdDiff.js)
//

window.WikEdStyleSheet = function(documentObject) {

	this.styleElement = null;
	if (documentObject == null) {
		documentObject = document;
	}

// IE
	if (documentObject.createStyleSheet) {
		this.styleElement = documentObject.createStyleSheet();
	}

// standards compliant browsers
	else {
		this.styleElement = documentObject.createElement('style');
		this.styleElement.from = 'text/css';
		var insert = documentObject.getElementsByTagName('head')[0];
		if (insert != null) {
			this.styleElement.appendChild(document.createTextNode('')); // Safari 3 fix
			insert.appendChild(this.styleElement);
		}
	}

// addRule: add one rule at the time using DOM method, very slow

// IE
	this.addRule = function(selector, declaration) {
		if (this.styleElement.addRule) {
			this.styleElement.addRule(selector, declaration);
		}

// standards compliant browsers
		else {
			if (this.styleElement.sheet != null) {
				if (this.styleElement.sheet.insertRule != null) {
					this.styleElement.sheet.insertRule(selector + ' { ' + declaration + ' } ', 0);
				}
			}
		}
	};

// addRules: add all rules at once, much faster
	this.addRules = function(rules) {
		this.styleElement.innerHTML = rules;
		return;
	}
}


//
// WikEdAjaxRequest: cross browser wrapper for Ajax requests (code copied to wikEdDiff.js)
//

window.WikEdAjaxRequest = function(requestMethod, requestUrl, headerName, headerValue, bodyData, overrideMimeType, responseHandler) {

	var request;
	
// use Greasemonkey GM_xmlhttpRequest
	if (wikEdGreasemonkey == true) {

		var headerArray = { 'User-Agent': navigator.userAgent }
		if (headerName != null) {
			headerArray[headerName] = headerValue;
		}
		request = new GM_xmlhttpRequest({
			'method':  requestMethod,
			'url':     requestUrl,
			'headers': headerArray,
			'data':    bodyData,
			'onreadystatechange':
				function(ajax) {
					if (ajax.readyState != 4) {
						return;
					}
					responseHandler(ajax);
					return;
				}
		});
	}

// use standard XMLHttpRequest
	else {

// allow ajax request from local copy for testing
		if (wikEdAllowLocalAjax == true) {
			if (typeof(netscape) == 'object') {
				netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');
			}
		}

// new ajax request object
 		try {
			request = new XMLHttpRequest();
		}

// IE 6
		catch(err) {
			try {
				request = new ActiveXObject('Microsoft.XMLHTTP');
			}

// IE 5.5
			catch(err) {
				try {
					request = new ActiveXObject('Msxml2.XMLHTTP');
				}
				catch(err) {
					return;
				}
			}
		}
		request.open(requestMethod, requestUrl, true);
		if (headerName != null) {
			request.setRequestHeader(headerName, headerValue);
		}
		if ( (request.overrideMimeType != null) && (overrideMimeType != null) ) {
			request.overrideMimeType(overrideMimeType);
		}
		request.send(bodyData);
		request.onreadystatechange = function() {
			if (request.readyState != 4) {
				return;
			}
			responseHandler(request);
			return;
		}
	}
	return;
}


//
// WikEdGetGlobal: access values of global variables from Greasemonkey scripts using the 'location hack' (code copied to wikEdDiff.js)
//

window.WikEdGetGlobal = function(globalName) {
	var globalValue;
	if (wikEdGreasemonkey == true) {
		if (wikEdGetGlobalNode == null) {
			wikEdGetGlobalNode = document.getElementById('wikEdGetGlobalNode');
		}
		if (wikEdGetGlobalNode == null) {
			wikEdGetGlobalNode = document.createElement('textarea');
			wikEdGetGlobalNode.id = 'wikEdGetGlobalNode';
			wikEdGetGlobalNode.style.display = 'none';
			wikEdGetGlobalNode.style.visibility = 'hidden';
			document.body.appendChild(wikEdGetGlobalNode);
		}
		location.href = 'javascript:void(document.getElementById(\'wikEdGetGlobalNode\').value=' + globalName + '.toString())';
		globalValue = wikEdGetGlobalNode.value;
	}
	else {
		try {
			globalValue = eval(globalName + '.toString();');
		}
		catch(err) { }
	}
	return(globalValue);
}


//
// WikEdDebug: print the value of variables
//   use either a single value or a description followed by a value
//   popup = true: use alert popup if debug textarea is not yet setup
//

window.WikEdDebug = function(objectName, object, popup) {

	var useDebug;
	if (typeof(wikEdDebug) != 'undefined') {
		if (wikEdDebug != null) {
			useDebug = true;
		}
	}
	if (useDebug == true) {
		wikEdDebugWrapper.style.position = 'static';
		wikEdDebugWrapper.style.visibility = 'visible';
		wikEdDebug.style.display = 'block';
		if (objectName == null) {
			wikEdDebug.value = '';
		}
		else {
			if (object == null) {
				wikEdDebug.value = objectName + '\n' + wikEdDebug.value;
			}
			else {
				wikEdDebug.value = objectName + ': ' + object + '\n' + wikEdDebug.value;
			}
		}
	}
	else if (popup == true) {
		if (object == null) {
			alert(objectName);
		}
		else {
			alert(objectName + ': ' + object);
		}
	}
	return;
}


//
// WikEdDebugTimer: show all measured timepoints
//   add a new time measurement: wikEdDebugTimer.push([1234, new Date]);

window.WikEdDebugTimer = function() {
	var times = '';
	var start = wikEdDebugTimer[0][1].getTime();
	var prev = 0;
	for (var i = 0; i < wikEdDebugTimer.length; i ++) {
		var curr = wikEdDebugTimer[i][1].getTime() - start;
		var diff = curr - prev;
		var prev = curr;
		times += wikEdDebugTimer[i][0] + ': ' + curr + ' ms (+' + diff + 'ms)\n';
	}
	WikEdDebug(times);
}


//
// WikEdInsertTags: overrides the insertTags function in wikibits.js used by the standard button toolbar and the editpage special chars
//

window.WikEdInsertTags = function(tagOpen, tagClose, sampleText) {

	if (wikEdUseWikEd == true) {
		WikEdEditButton(document.getElementById('wikEdInsertTags'), 'wikEdInsertTags', [tagOpen, tagClose, sampleText]);
	}
	else if (wikEdInsertTagsOriginal != null) {
		wikEdInsertTagsOriginal(tagOpen, tagClose, sampleText);
	}
	return;
}


//
// WikEdInitUnicode: define character tables used in WikedFixUnicode()
//   see http://kmi.open.ac.uk/projects/ceryle/doc/docs/NOTE-charents.html
//   removed because of internal use: < ['003c', 'lt']; > ['003e', 'gt']; & ['0026', 'amp'], ['00a0', 'nbsp']

window.WikEdInitUnicode = function() {

// define only once
	if (wikEdSupportedChars != null) {
		return;
	}

// supported chars in Mozilla and IE
	wikEdSupportedChars = [
		['00a1', 'iexcl'],  // ¡
		['00a2', 'cent'],   // ¢
		['00a3', 'pound'],  // £
		['00a4', 'curren'], // ¤
		['00a5', 'yen'],    // ¥
		['00a6', 'brvbar'], // ¦
		['00a7', 'sect'],   // §
		['00a8', 'uml'],    // ¨
		['00a9', 'copy'],   // ©
		['00aa', 'ordf'],   // ª
		['00ab', 'laquo'],  // «
		['00ac', 'not'],    // ¬
		['00ae', 'reg'],    // ®
		['00af', 'macr'],   // ¯
		['00b0', 'deg'],    // °
		['00b1', 'plusmn'], // ±
		['00b2', 'sup2'],   // ²
		['00b3', 'sup3'],   // ³
		['00b4', 'acute'],  // ´
		['00b5', 'micro'],  // µ
		['00b6', 'para'],   // ¶
		['00b7', 'middot'], // ·
		['00b8', 'cedil'],  // ¸
		['00b9', 'sup1'],   // ¹
		['00ba', 'ordm'],   // º
		['00bb', 'raquo'],  // »
		['00bc', 'frac14'], // ¼
		['00bd', 'frac12'], // ½
		['00be', 'frac34'], // ¾
		['00bf', 'iquest'], // ¿
		['00c0', 'Agrave'], // À
		['00c1', 'Aacute'], // Á
		['00c2', 'Acirc'],  // Â
		['00c3', 'Atilde'], // Ã
		['00c4', 'Auml'],   // Ä
		['00c5', 'Aring'],  // Å
		['00c6', 'AElig'],  // Æ
		['00c7', 'Ccedil'], // Ç
		['00c8', 'Egrave'], // È
		['00c9', 'Eacute'], // É
		['00ca', 'Ecirc'],  // Ê
		['00cb', 'Euml'],   // Ë
		['00cc', 'Igrave'], // Ì
		['00cd', 'Iacute'], // Í
		['00ce', 'Icirc'],  // Î
		['00cf', 'Iuml'],   // Ï
		['00d0', 'ETH'],    // Ð
		['00d1', 'Ntilde'], // Ñ
		['00d2', 'Ograve'], // Ò
		['00d3', 'Oacute'], // Ó
		['00d4', 'Ocirc'],  // Ô
		['00d5', 'Otilde'], // Õ
		['00d6', 'Ouml'],   // Ö
		['00d7', 'times'],  // ×
		['00d8', 'Oslash'], // Ø
		['00d9', 'Ugrave'], // Ù
		['00da', 'Uacute'], // Ú
		['00db', 'Ucirc'],  // Û
		['00dc', 'Uuml'],   // Ü
		['00dd', 'Yacute'], // Ý
		['00de', 'THORN'],  // Þ
		['00df', 'szlig'],  // ß
		['00e0', 'agrave'], // à
		['00e1', 'aacute'], // á
		['00e2', 'acirc'],  // â
		['00e3', 'atilde'], // ã
		['00e4', 'auml'],   // ä
		['00e5', 'aring'],  // å
		['00e6', 'aelig'],  // æ
		['00e7', 'ccedil'], // ç
		['00e8', 'egrave'], // è
		['00e9', 'eacute'], // é
		['00ea', 'ecirc'],  // ê
		['00eb', 'euml'],   // ë
		['00ec', 'igrave'], // ì
		['00ed', 'iacute'], // í
		['00ee', 'icirc'],  // î
		['00ef', 'iuml'],   // ï
		['00f0', 'eth'],    // ð
		['00f1', 'ntilde'], // ñ
		['00f2', 'ograve'], // ò
		['00f3', 'oacute'], // ó
		['00f4', 'ocirc'],  // ô
		['00f5', 'otilde'], // õ
		['00f6', 'ouml'],   // ö
		['00f7', 'divide'], // ÷
		['00f8', 'oslash'], // ø
		['00f9', 'ugrave'], // ù
		['00fa', 'uacute'], // ú
		['00fb', 'ucirc'],  // û
		['00fc', 'uuml'],   // ü
		['00fd', 'yacute'], // ý
		['00fe', 'thorn'],  // þ
		['00ff', 'yuml'],   // ÿ
		['0027', 'apos'],   // '
		['0022', 'quot'],   // "
		['0152', 'OElig'],  // Œ
		['0153', 'oelig'],  // œ
		['0160', 'Scaron'], // Š
		['0161', 'scaron'], // š
		['0178', 'Yuml'],   // Ÿ
		['02c6', 'circ'],   // ˆ
		['02dc', 'tilde'],  // ˜
		['2013', 'ndash'],  // –
		['2014', 'mdash'],  // —
		['2018', 'lsquo'],  // ‘
		['2019', 'rsquo'],  // ’
		['201a', 'sbquo'],  // ‚
		['201c', 'ldquo'],  // “
		['201d', 'rdquo'],  // ”
		['201e', 'bdquo'],  // „
		['2020', 'dagger'], // †
		['2021', 'Dagger'], // ‡
		['2030', 'permil'], // ‰
		['2039', 'lsaquo'], // ‹
		['203a', 'rsaquo'], // ›
		['20ac', 'euro'],   // €
		['0192', 'fnof'],   // ƒ
		['0391', 'Alpha'],  // Α
		['0392', 'Beta'],   // Β
		['0393', 'Gamma'],  // Γ
		['0394', 'Delta'],  // Δ
		['0395', 'Epsilon'],// Ε
		['0396', 'Zeta'],   // Ζ
		['0397', 'Eta'],    // Η
		['0398', 'Theta'],  // Θ
		['0399', 'Iota'],   // Ι
		['039a', 'Kappa'],  // Κ
		['039b', 'Lambda'], // Λ
		['039c', 'Mu'],     // Μ
		['039d', 'Nu'],     // Ν
		['039e', 'Xi'],     // Ξ
		['039f', 'Omicron'],// Ο
		['03a0', 'Pi'],     // Π
		['03a1', 'Rho'],    // Ρ
		['03a3', 'Sigma'],  // Σ
		['03a4', 'Tau'],    // Τ
		['03a5', 'Upsilon'],// Υ
		['03a6', 'Phi'],    // Φ
		['03a7', 'Chi'],    // Χ
		['03a8', 'Psi'],    // Ψ
		['03a9', 'Omega'],  // Ω
		['03b1', 'alpha'],  // α
		['03b2', 'beta'],   // β
		['03b3', 'gamma'],  // γ
		['03b4', 'delta'],  // δ
		['03b5', 'epsilon'],// ε
		['03b6', 'zeta'],   // ζ
		['03b7', 'eta'],    // η
		['03b8', 'theta'],  // θ
		['03b9', 'iota'],   // ι
		['03ba', 'kappa'],  // κ
		['03bb', 'lambda'], // λ
		['03bc', 'mu'],     // μ
		['03bd', 'nu'],     // ν
		['03be', 'xi'],     // ξ
		['03bf', 'omicron'],// ο
		['03c0', 'pi'],     // π
		['03c1', 'rho'],    // ρ
		['03c2', 'sigmaf'], // ς
		['03c3', 'sigma'],  // σ
		['03c4', 'tau'],    // τ
		['03c5', 'upsilon'],// υ
		['03c6', 'phi'],    // φ
		['03c7', 'chi'],    // χ
		['03c8', 'psi'],    // ψ
		['03c9', 'omega'],  // ω
		['2022', 'bull'],   // •
		['2026', 'hellip'], // …
		['2032', 'prime'],  // ′
		['2033', 'Prime'],  // ″
		['203e', 'oline'],  // ‾
		['2044', 'frasl'],  // ⁄
		['2122', 'trade'],  // ™
		['2190', 'larr'],   // ←
		['2191', 'uarr'],   // ↑
		['2192', 'rarr'],   // →
		['2193', 'darr'],   // ↓
		['2194', 'harr'],   // ↔
		['21d2', 'rArr'],   // ⇒
		['21d4', 'hArr'],   // ⇔
		['2200', 'forall'], // ∀
		['2202', 'part'],   // ∂
		['2203', 'exist'],  // ∃
		['2207', 'nabla'],  // ∇
		['2208', 'isin'],   // ∈
		['220b', 'ni'],     // ∋
		['220f', 'prod'],   // ∏
		['2211', 'sum'],    // ∑
		['2212', 'minus'],  // −
		['221a', 'radic'],  // √
		['221d', 'prop'],   // ∝
		['221e', 'infin'],  // ∞
		['2220', 'ang'],    // ∠
		['2227', 'and'],    // ∧
		['2228', 'or'],     // ∨
		['2229', 'cap'],    // ∩
		['222a', 'cup'],    // ∪
		['222b', 'int'],    // ∫
		['2234', 'there4'], // ∴
		['223c', 'sim'],    // ∼
		['2248', 'asymp'],  // ≈
		['2260', 'ne'],     // ≠
		['2261', 'equiv'],  // ≡
		['2264', 'le'],     // ≤
		['2265', 'ge'],     // ≥
		['2282', 'sub'],    // ⊂
		['2283', 'sup'],    // ⊃
		['2286', 'sube'],   // ⊆
		['2287', 'supe'],   // ⊇
		['2295', 'oplus'],  // ⊕
		['22a5', 'perp'],   // ⊥
		['25ca', 'loz'],    // ◊
		['2660', 'spades'], // ♠
		['2663', 'clubs'],  // ♣
		['2665', 'hearts'], // ♥
		['2666', 'diams']   // ♦
	];

// special chars (spaces and invisible characters)
	wikEdSpecialChars = [
		['2002', 'ensp'],   //   en space
		['00ad', 'shy'],    // ­ soft hyphen
		['2003', 'emsp'],   //   em space
		['2009', 'thinsp'], //    thin space
		['200c', 'zwnj'],   // ‌ zero width non-joiner
		['200d', 'zwj'],    // ‍ zero width joiner
		['200e', 'lrm'],    // ‎ left-to-right mark
		['200f', 'rlm']     // ‏ right-to-left mark
	];

// unsupported chars in IE6
	wikEdProblemChars = [
		['03d1', 'thetasym'], // ϑ
		['03d2', 'upsih'],    // ϒ
		['03d6', 'piv'],      // ϖ
		['2118', 'weierp'],   // ℘
		['2111', 'image'],    // ℑ
		['211c', 'real'],     // ℜ
		['2135', 'alefsym'],  // ℵ
		['21b5', 'crarr'],    // ↵
		['21d0', 'lArr'],     // ⇐
		['21d1', 'uArr'],     // ⇑
		['21d3', 'dArr'],     // ⇓
		['2205', 'empty'],    // ∅
		['2209', 'notin'],    // ∉
		['2217', 'lowast'],   // ∗
		['2245', 'cong'],     // ≅
		['2284', 'nsub'],     // ⊄
		['22a5', 'perp'],     // ⊥
		['2297', 'otimes'],   // ⊗
		['22c5', 'sdot'],     // ⋅
		['2308', 'lceil'],    // ⌈
		['2309', 'rceil'],    // ⌉
		['230a', 'lfloor'],   // ⌊
		['230b', 'rfloor'],   // ⌋
		['2329', 'lang'],     // 〈
		['232a', 'rang']      // 〉
	];

// ASCII control characters and invisibles, used for syntax highlighting
	wikEdControlChars = {
		'0': 'null',
		'1': 'start of heading',
		'2': 'start of text',
		'3': 'end of text',
		'4': 'end of transmission',
		'5': 'enquiry',
		'6': 'acknowledge',
		'7': 'bell',
		'8': 'backspace',
		'9': 'horizontal tab',
		'10': 'line feed, new line',
		'11': 'vertical tab',
		'12': 'form feed, new page',
		'13': 'carriage return',
		'14': 'shift out',
		'15': 'shift in',
		'16': 'data link escape',
		'17': 'device control 1',
		'18': 'device control 2',
		'19': 'device control 3',
		'20': 'device control 4',
		'21': 'negative acknowledge',
		'22': 'synchronous idle',
		'23': 'end of trans. block',
		'24': 'cancel',
		'25': 'end of medium',
		'25': 'substitute',
		'26': 'escape',
		'27': 'file separator',
		'28': 'group separator',
		'29': 'record separator',
		'30': 'unit separator',
		'173' : 'soft hyphen',           // \u00ad
		'8204': 'zero width non-joiner', // \u200c
		'8205': 'zero width joiner',     // \u200d
		'8206': 'left-to-right mark',    // \u200e
		'8207': 'right-to-left mark',    // \u200f
		'8232': 'line separator',        // \u2028
		'8233': 'paragraph separator'    // \u2028
	};
	for (var decimalValue in wikEdControlChars) {
		if (typeof(wikEdControlChars[decimalValue]) != 'string') {
			continue;
		}
		wikEdControlCharsStr += String.fromCharCode(decimalValue);
	}

// strange spaces, used for syntax highlighting
	wikEdStrangeSpaces = {
		'31': 'non-breaking space', // \u00a0
		'8194': 'en space',         // \u2002
		'8195': 'em space',         // \u2003
		'8201': 'thin space'        // \u2009
	};

	return;
}


//
// call wikEd startup
//

WikEdStartup();


/* </nowiki></pre> */