source: other-projects/computer-says-no/trunk/src/computer_says_no.user.js

Last change on this file was 25845, checked in by davidb, 12 years ago

Initial version of Computer Say No ... Maybe ... Yes Greasemonkey script

File size: 205.2 KB
Line 
1// ==UserScript==
2// @name Computer Says No
3// @namespace org.greenstone.csn
4// @include http://*
5// ==/UserScript==
6
7
8
9var csnInitialized = false;
10
11var inspectorActive = false;
12var inspectorDragging = false;
13var inspectorIgnoreSingleClick = false;
14
15var inspectorSelectedElems = [];
16
17var csnFoldOrExpand = "fold";
18var csnMode = null;
19var csnFirstnameMode = "full";
20var csnPunctMode = "with-spaces";
21var csnMergeMode = "interactive";
22var csnDeleteMode = "interactive";
23
24
25var csnOnTop = false;
26
27var seaweedActivated = false;
28
29var zRange = {};
30
31
32var ELEMENT_NODE = 1;
33var ATTRIBUTE_NODE = 2;
34var TEXT_NODE = 3;
35var CDATA_SECTION_NODE = 4;
36var ENTITY_REFERENCE_NODE = 5;
37var ENTITY_NODE = 6;
38var PROCESSING_INSTRUCTION_NODE = 7;
39var COMMENT_NODE = 8;
40var DOCUMENT_NODE = 9;
41var DOCUMENT_TYPE_NODE = 10;
42var DOCUMENT_FRAGMENT_NODE = 11;
43var NOTATION_NODE = 12;
44
45function trim(str)
46{
47 return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
48}
49
50function whiteSpaceIndent(count)
51{
52 var spaces_cache = [ "", " ", " ", " ", " ", " ", " " ];
53 if (count < spaces_cache.length) {
54 return spaces_cache[count];
55 }
56
57 var spaces = "";
58
59 for (var i=0; i<count; i++) {
60 spaces += " ";
61 spaces_cache[i] = spaces;
62 }
63
64 return spaces;
65}
66
67function traverseDOM(node,depth)
68{
69 if (depth==null) {
70 depth = 0;
71 }
72
73 if (node.nodeType == TEXT_NODE) {
74 var text = node.nodeValue;
75 if (!text.match(/^\s*$/)) {
76 // only print if not whitespace
77 var indent = whiteSpaceIndent(depth);
78 console.log(indent + node.nodeValue);
79 }
80 }
81 else if (node.nodeType == ELEMENT_NODE) {
82 var indent = whiteSpaceIndent(depth);
83 console.log(indent + "<"+node.nodeName.toLowerCase()+">");
84 for(var i=0; i<node.childNodes.length; i++) {
85 traverseDOM(node.childNodes[i],depth+1);
86 }
87 console.log(indent + "</"+node.nodeName.toLowerCase()+">");
88 }
89 else {
90 alert("Unexpectedly got : " + node.nodeType + "for : " + nodeType);
91 }
92}
93
94
95
96function getChildText(node)
97{
98 var text = "";
99
100 if (node.nodeType == TEXT_NODE) {
101 text = node.nodeValue;
102 if (text.match(/^\s*$/)) {
103 text = "";
104 }
105 }
106 else if (node.nodeType == ELEMENT_NODE) {
107
108 if (node.nodeName.toLowerCase() == "input") {
109 text = node.value;
110 if (text.match(/^\s*$/)) {
111 text = "";
112 }
113 }
114 else {
115 for(var i=0; i<node.childNodes.length; i++) {
116 text += getChildText(node.childNodes[i]);
117 }
118 }
119 }
120 else {
121 alert("getChildText(): Unexpectedly got : " + node.nodeType + "for : " + nodeType);
122 }
123
124 text = trim(text);
125
126 return text;
127}
128
129function getChildHyperlinks(node,links)
130{
131 if (node.nodeType == ELEMENT_NODE) {
132 if (node.nodeName.toLowerCase() == "a") {
133 links[links.length] = node;
134 }
135 else {
136 for(var i=0; i<node.childNodes.length; i++) {
137 var childNode = node.childNodes[i];
138 getChildHyperlinks(childNode,links);
139 }
140 }
141 }
142}
143
144
145function getFirstChildHyperlink(node)
146{
147 var link = null;
148
149 var links = new Array();
150 getChildHyperlinks(node,links);
151
152 if (links.length>0) {
153 //hyperlink found
154 link = links[0];
155 }
156
157 return link;
158}
159
160
161
162function elementPartOfCsn(elem)
163{
164 // ignore any elements that are within the CSN area
165
166
167 while (true) {
168 if ((elem==null) || (elem.nodeName.toLowerCase()=="body")) {
169 break;
170 }
171
172 if (elem.nodeType != ELEMENT_NODE) {
173 // ignore events caused by clicking on the scroll bar, etc.
174 break;
175 }
176
177 //console.log("elem = " + elem);
178
179 var elemId = elem.getAttribute("id");
180
181 if ((elemId != null) && (elemId=="ComputerSaysNo")) {
182 return true;
183 }
184
185 var parent = elem.parentNode;
186
187 if (parent==null) {
188 break;
189 }
190
191 elem = parent;
192 }
193
194 return false;
195}
196
197
198
199function elementPartOfPreLookup(elem)
200{
201 // ignore any elements that are within the CSN area
202
203
204 while (true) {
205 if ((elem==null) || (elem.nodeName.toLowerCase()=="body")) {
206 break;
207 }
208
209 if (elem.nodeType != ELEMENT_NODE) {
210 // ignore events caused by clicking on the scroll bar, etc.
211 break;
212 }
213
214 //console.log("elem = " + elem);
215
216 var elemId = elem.getAttribute("id");
217
218 if ((elemId != null) && (elemId=="preLookup")) {
219 return true;
220 }
221
222 var parent = elem.parentNode;
223
224 if (parent==null) {
225 break;
226 }
227
228 elem = parent;
229 }
230
231 return false;
232}
233
234
235
236function appendIfUniq(elem)
237{
238 var appendElem = true;
239 for (var i=0; i<inspectorSelectedElems.length; i++) {
240 if (inspectorSelectedElems[i] == elem) {
241 appendElem = false;
242 break;
243 }
244 }
245 if (appendElem) {
246 inspectorSelectedElems[inspectorSelectedElems.length] = elem;
247 }
248
249}
250
251
252function getElemParents(elem,inclusive)
253{
254 // setting inclusive to true means 'elem' is also put in the array of parents
255 // default is to exclude it
256 var parents = new Array();
257
258 while (true) {
259 if ((elem==null) || (elem.nodeName.toLowerCase()=="body")) {
260 break;
261 }
262
263 if ((inclusive!=null) && (inclusive)) {
264 parents[parents.length] = elem;
265 }
266
267 var parent = elem.parentNode;
268
269 if (parent==null) {
270 break;
271 }
272
273 if ((inclusive==null) || (!inclusive)) {
274 parents[parents.length] = parent;
275 }
276
277 elem = parent;
278 }
279
280 return parents;
281}
282
283function calcSharedElemParent(startElem,endElem)
284{
285 if (startElem==null) { return null; };
286
287 // This case shouldn't arise anymore
288 if (endElem==null) { return startElem.parentNode; }
289
290 var startParents = getElemParents(startElem);
291 var endParents = getElemParents(endElem);
292
293 var sharedParent = null;
294
295 for (var s=0; s<startParents.length; s++) {
296 var currStartParent = startParents[s];
297 for (var e=0; e<endParents.length; e++) {
298 var currEndParent = endParents[e];
299 if (currEndParent==currStartParent) {
300 console.log("Got match at level: " + s + "=<"+startParents[s].nodeName+"> (start) "
301 + e + "=<" +endParents[e].nodeName + "> (end)");
302 sharedParent = currEndParent;
303 break;
304 }
305 }
306 if (sharedParent != null) {
307 break;
308 }
309 }
310
311 return sharedParent;
312}
313
314function getSiblingPosition(sharedSiblings,elem)
315{
316 var elemParents = getElemParents(elem,true);
317
318 var siblingPos = -1;
319
320 for (var sb=0; sb<sharedSiblings.length; sb++) {
321 var currSibling = sharedSiblings[sb];
322 for (var el=0; el<elemParents.length; el++) {
323 var currElemParent = elemParents[el];
324 if (currElemParent==currSibling) {
325 siblingPos = sb;
326 break;
327 }
328 }
329 if (siblingPos>0) {
330 break;
331 }
332 }
333
334 return siblingPos;
335}
336
337
338var rangedElemsHistory_ = new Array();
339var sharedParentElemHistory_ = new Array();
340
341
342function calcRangedElems(sharedParent,startElem,endElem)
343{
344 var rangedElems = new Array();
345
346 // if get to here, then there is a non-trivial range to work out
347 var sharedSiblings = sharedParent.childNodes;
348
349 var startSiblingPos = getSiblingPosition(sharedSiblings,startElem);
350 var endSiblingPos = getSiblingPosition(sharedSiblings,endElem);
351
352 for (var sb=startSiblingPos; sb<=endSiblingPos; sb++) {
353 rangedElems[rangedElems.length] = sharedSiblings[sb];
354 }
355
356
357 return rangedElems;
358}
359
360function zIndexRange()
361{
362 var minZ=null;
363 var maxZ=null;
364
365 var elems = document.getElementsByTagName("*");
366
367 for (var e = 0; e < elems.length; e++) {
368 var z = elems[e].style.zIndex;
369 if (z) {
370 if (minZ!=null) {
371 if (z < minZ) { minZ = z; }
372 }
373 else {
374 minZ = z;
375 }
376
377 if (maxZ!=null) {
378 if (z > maxZ) { maxZ = z; }
379 }
380 else {
381 maxZ = z;
382 }
383 }
384
385 }
386
387 return { minZ: minZ, maxZ: maxZ };
388}
389
390
391
392function csnInit()
393{
394 //alert("The Inspector");
395
396 if (csnInitialized) return;
397 if (window!=window.top) return; // child iFrame
398
399 csnInitialized = true;
400
401 var csnCheck = document.getElementById('ComputerSaysNo');
402 if (csnCheck!=null) return;
403
404
405 var body = document.body;
406
407 zRange = zIndexRange();
408 var minZ = zRange['minZ'];
409 var maxZ = zRange['maxZ'];
410
411 var inspectBaseZindex = (minZ==null) ? -1 : "inherit" ;
412 var inspectHighlightZindex = (maxZ==null) ? 1000 : parseInt(maxZ)+1000;
413
414 //console.log("base zindex: " + inspectBaseZindex);
415 //console.log("highlight zindex: " + inspectHighlightZindex);
416
417 // wrap original body content in a div tag so any
418 // absolute position the document uses will be relatative
419 // to its new position (once the CSN toolbar added in)
420
421 var orig_child_len = body.childNodes.length;
422
423 var beyondToolbarDiv = document.createElement('div');
424 var beyondToolbarDivStyle = "position: relative; left: 0px; top: 0px;";
425 beyondToolbarDiv.setAttribute('style',beyondToolbarDivStyle);
426 body.insertBefore(beyondToolbarDiv,body.firstChild);
427
428 for (var i=0; i<orig_child_len; i++) {
429 // always position '1' as we then remove the item
430 var childNode = body.childNodes[1];
431 body.removeChild(childNode);
432 beyondToolbarDiv.appendChild(childNode);
433 }
434
435
436 // Build up and add in the CSN Tool Bar
437
438 var csnDivStyle = "position: relative; left: 0px; top: 0px;";
439 csnDivStyle += " width: 100%;";
440
441 var csnDiv = document.createElement('div');
442 csnDiv.setAttribute('id','ComputerSaysNo');
443 csnDiv.setAttribute('style',csnDivStyle);
444
445 // Table for Logo
446 var csnBgImage = 'background="' + csnImage + '"';
447 var csmBgImage = 'background="' + csmImage + '"';
448 var csyBgImage = 'background="' + csyImage + '"';
449
450 var bgImageStyle = 'style="background-position: center; background-repeat: no-repeat;" ';
451
452 var csnTdImage = '<td width="33%" ' + bgImageStyle + csnBgImage + ' style="background-repeat: no-repeat;"></td>';
453 var csmTdImage = '<td width="33%" ' + bgImageStyle + csmBgImage + ' style="background-repeat: no-repeat;"></td>';
454 var csyTdImage = '<td width="33%" ' + bgImageStyle + csyBgImage + ' style="background-repeat: no-repeat;"></td>';
455
456 var csnLogo = '<table bgcolor="black" width="100%" height="27"><tr>' + csnTdImage + csmTdImage + csyTdImage + '</tr></table>';
457
458 // Table for actions
459 var csnContent = '<tr style="color: white;">';
460
461 var tick = '<span style="visibility: hidden;">&#10003;&nbsp;</span>';
462
463 var accentFoldOptions = '<ul id="accentFoldOptions" class="csnOption" style="display: none;">'
464 accentFoldOptions += ' <li><p class="csnOptionText"><i>[Click/drag region]</i></p></li>';
465 accentFoldOptions += ' <li><p id="accentFoldCancel" class="csnOption" href="#">Cancel</p></li>';
466 accentFoldOptions += '</ul>';
467
468 var punctFoldOptions = '<ul id="punctFoldOptions" class="csnOption" style="display: none;">'
469 punctFoldOptions += ' <li><p class="csnOptionText"><i>[Click/drag region]</i></p></li>';
470 punctFoldOptions += ' <li><p id="punctFoldCancel" class="csnOption" href="#">Cancel</p></li>';
471 punctFoldOptions += '</ul>';
472
473 var firstnameFoldOptions = '<ul id="firstnameFoldOptions" class="csnOption" style="display: none;">'
474 firstnameFoldOptions += ' <li><p class="csnOptionText"><i>[Click/drag region]</i></p></li>';
475 firstnameFoldOptions += ' <li><p id="firstnameFullFoldButton" class="csnOption">' +tick+'Firstname</p></li>';
476 firstnameFoldOptions += ' <li><p id="firstnameInitialFoldButton" class="csnOption">'+tick+'Only initial</p></li>';
477 firstnameFoldOptions += ' <li><p id="firstnameFoldCancel" class="csnOption">Cancel</p></li>';
478 firstnameFoldOptions += '</ul>';
479
480 var NAOptions = '<ul id="NAOptions" class="csnOption" style="display: none;">'
481 NAOptions += ' <li><p class="csnOptionText"><i>[Click/drag region]</i></p></li>';
482 NAOptions += ' <li><p id="NACancel" class="csnOption" href="#">Cancel</p></li>';
483 NAOptions += '</ul>';
484
485 var editOptions = '<ul id="editOptions" class="csnOption" style="display: none;">'
486 editOptions += ' <li><p class="csnOptionText"><i>[Click/drag region]</i></p></li>';
487 //editOptions += ' <li><p id="editInteractiveButton" class="csnOption">' +tick+'Interacitve click/drag</p></li>';
488 editOptions += ' <li><p id="editPreviousButton" class="csnOptionDisabled">Previous region</p></li>';
489 editOptions += ' <li><p id="editCancel" class="csnOption" href="#">Cancel</p></li>';
490 editOptions += '</ul>';
491
492 var sortOptions = '<ul id="sortOptions" class="csnOption" style="display: none;">'
493 sortOptions += ' <li><p class="csnOptionText"><i>[Click/drag region]</i></p></li>';
494 //sortOptions += ' <li><p id="sortInteractiveButton" class="csnOption">' +tick+'Interacitve click/drag</p></li>';
495 sortOptions += ' <li><p id="sortPreviousButton" class="csnOptionDisabled">Previous region</p></li>';
496 sortOptions += ' <li><p id="sortCancel" class="csnOption" href="#">Cancel</p></li>';
497 sortOptions += '</ul>';
498
499 var mergeOptions = '<ul id="mergeOptions" class="csnOption" style="display: none;">'
500 mergeOptions += ' <li><p class="csnOptionText"><i>[Click/drag region]</i></p></li>';
501 //mergeOptions += ' <li><p id="mergeInteractiveButton" class="csnOption">' +tick+'Interacitve click/drag</p></li>';
502 mergeOptions += ' <li><p id="mergePreviousButton" class="csnOptionDisabled">Previous region</p></li>';
503 mergeOptions += ' <li><p id="mergeCancel" class="csnOption" href="#">Cancel</p></li>';
504 mergeOptions += '</ul>';
505
506 var deleteOptions = '<ul id="deleteOptions" class="csnOption" style="display: none;">'
507 deleteOptions += ' <li><p class="csnOptionText"><i>[Click/drag region]</i></p></li>';
508 deleteOptions += ' <li><p id="deletePreviousButton" class="csnOptionDisabled">Previous region</p></li>';
509 deleteOptions += ' <li><p id="deleteCancel" class="csnOption" href="#">Cancel</p></li>';
510 deleteOptions += '</ul>';
511
512
513 var csnContentStyle = "border: 2px inset white; background-color: rgb(25,25,25);";
514 //var csnContentStyle = "background-color: rgb(20,20,20);";
515
516 csnContent += '<td valign="top"><table width="100%" style="'+csnContentStyle+'"><tr>';
517 csnContent += '<td width="85" valign="top"><p id="accentFoldButton" class="csnAction csnActionHighlight" href="#">Accent ...</p>'+accentFoldOptions+'</td>';
518 csnContent += '<td width="85" valign="top"><p id="punctFoldButton" class="csnAction csnActionHighlight" href="#">Punctuation ...</p>'+punctFoldOptions+'</td>';
519 csnContent += '<td width="85" valign="top"><p id="firstnameFoldButton" class="csnAction csnActionHighlight" href="#">Firstname ...</p>'+firstnameFoldOptions+'</td>';
520 csnContent += '<td width="85" valign="top"><p id="NAButton" class="csnAction csnActionHighlight" href="#">Name Authority ...</p>'+NAOptions+'</td>';
521 csnContent += '</tr></table></td>';
522
523
524 csnContent += '<td valign="top"><table width="100%" style="'+csnContentStyle+'"><tr>';
525 csnContent += '<td width="70" valign="top"><p id="editButton" class="csnAction csnActionHighlight" href="#">Edit ...</p>'+editOptions+'</td>';
526 csnContent += '<td width="70" valign="top"><p id="sortButton" class="csnAction csnActionHighlight" href="#">Sort same ...</p>'+sortOptions+'</td>';
527 csnContent += '<td width="70" valign="top"><p id="mergeButton" class="csnAction csnActionHighlight" href="#">Merge ...</p>'+mergeOptions+'</td>';
528
529 // Delete and Undo
530 csnContent += '<td width="40" valign="top"><p id="deleteButton" class="csnAction csnActionHighlight">Delete ...</p>'+deleteOptions+'</td>';
531 csnContent += '<td width="40" valign="top"><p id="undoButton" class="csnAction csnActionHighlight">Undo</p></td>';
532
533
534 csnContent += '</tr></table></td>';
535
536
537
538
539
540 // Fold or Expand radio buttons
541 csnContent += '<td valign="top" width="220">';
542 csnContent += '<table width="100%" style="'+csnContentStyle+'"><tr>';
543 csnContent += ' <td><p class="csnAction">Fold:</p></td>';
544 csnContent += ' <td><input id="foldRadioButton" type="radio" name="csnFoldOrExpand" value="fold" checked></td>';
545 csnContent += ' <td><p class="csnAction">Expand:</p></td>';
546 csnContent += ' <td><input id="expandRadioButton" type="radio" name="csnFoldOrExpand" value="expand"></td>';
547 csnContent += '</tr></table>';
548 csnContent += '</td>';
549
550 //csnContent += '<td width="15%" valign="top"><p id="CsnOnTopButton" class="csnAction" href="#">Toolbar on top</p></td>';
551 csnContent += '</tr>';
552
553 var csnDisplay = '<style>';
554 csnDisplay += 'p.csnAction,span.csnAction { text-decoration: none; color: white; ';
555 csnDisplay += ' margin: 2px; border: 0px; padding: 1px; ';
556 csnDisplay += ' font-family: arial; font-size: 11pt; font-weight: bold; }';
557 csnDisplay += 'p.csnActionHighlight:hover { color: green; }';
558 csnDisplay += 'p.csnOption,p.csnOptionText { text-decoration: none; color: white; ';
559 csnDisplay += ' margin: 2px; border: 0px; padding: 1px; ';
560 csnDisplay += ' font-family: arial; font-size: 10pt; }';
561 csnDisplay += 'p.csnOption:hover { color: green; }';
562 csnDisplay += 'ul.csnOption { list-style-type: square; line-height: 100%; margin: 0px 0px 0px 20px; padding: 0px 0px 2px 0px;}';
563 csnDisplay += 'p.csnOptionDisabled { text-decoration: none; color: gray; ';
564 csnDisplay += ' margin: 2px; border: 0px; padding: 1px; ';
565 csnDisplay += ' font-family: arial; font-size: 10pt; }';
566 csnDisplay += 'h3.csnPreLookup { background-color: black; color: white; ';
567 csnDisplay += ' padding: 4px; }';
568 csnDisplay += 'p.csnPreLookup { background-color: white; color: black; ';
569 csnDisplay += ' padding: 2px 4px 2px 4px; } ';
570 csnDisplay += '</style>';
571
572 csnDisplay += '<table bgcolor="black" width="100%">' + csnContent + '</table>';
573
574 var csnCode = '<script type="text/javascript">'+multiSearch + continueMultiSearch + resizeFrame+'</script>';
575
576 // alert("setting multiSearch");
577
578 //csnDiv.innerHTML = csnLogo + csnDisplay + csnCode;
579 //body.insertBefore(csnDiv,body.firstChild);
580
581
582 csnDiv.innerHTML = csnLogo + csnDisplay ;
583 body.insertBefore(csnDiv,body.firstChild);
584
585 var csnScript = document.createElement('script');
586 csnScript.setAttribute('type', 'text/javascript');
587 csnScript.setAttribute('charset', 'UTF-8');
588 csnScript.innerHTML = multiSearch + continueMultiSearch + resizeFrame;
589 document.getElementsByTagName('head')[0].appendChild(csnScript);
590
591
592 var accentFoldButton = document.getElementById("accentFoldButton");
593 var accentFoldCancel = document.getElementById("accentFoldCancel");
594 accentFoldButton.addEventListener('click', activateAccentFold, true);
595 accentFoldCancel.addEventListener('click', cancelModeOption, true);
596
597 var punctFoldButton = document.getElementById("punctFoldButton");
598 var punctFoldCancel = document.getElementById("punctFoldCancel");
599 punctFoldButton.addEventListener('click', activatePunctFold, true);
600 punctFoldCancel.addEventListener('click', cancelModeOption, true);
601
602 var firstnameFoldButton = document.getElementById("firstnameFoldButton");
603 var firstnameFullFoldButton = document.getElementById("firstnameFullFoldButton");
604 var firstnameInitialFoldButton = document.getElementById("firstnameInitialFoldButton");
605 var firstnameFoldCancel = document.getElementById("firstnameFoldCancel");
606 firstnameFoldButton.addEventListener('click', activateFirstnameFold, true);
607 firstnameFullFoldButton.addEventListener('click', activateFirstnameFullFold, true);
608 firstnameInitialFoldButton.addEventListener('click', activateFirstnameInitialFold, true);
609 firstnameFoldCancel.addEventListener('click', cancelModeOption, true);
610 firstnameFullFoldButton.firstChild.style.visibility = "visible";
611 firstnameFullFoldButton.firstChild.style.color = "green";
612
613 var NAButton = document.getElementById("NAButton");
614 var NACancel = document.getElementById("NACancel");
615 NAButton.addEventListener('click', activateNA, true);
616 NACancel.addEventListener('click', cancelModeOption, true);
617
618 var editButton = document.getElementById("editButton");
619 var editCancel = document.getElementById("editCancel");
620 editButton.addEventListener('click', activateEdit, true);
621 editCancel.addEventListener('click', cancelModeOption, true);
622
623 var sortButton = document.getElementById("sortButton");
624 var sortCancel = document.getElementById("sortCancel");
625 sortButton.addEventListener('click', activateSort, true);
626 sortCancel.addEventListener('click', cancelModeOption, true);
627
628 var mergeButton = document.getElementById("mergeButton");
629 var mergeCancel = document.getElementById("mergeCancel");
630 mergeButton.addEventListener('click', activateMerge, true);
631 mergeCancel.addEventListener('click', cancelModeOption, true);
632
633 var deleteButton = document.getElementById("deleteButton");
634 var deleteCancel = document.getElementById("deleteCancel");
635 deleteButton.addEventListener('click', activateDelete, true);
636 deleteCancel.addEventListener('click', cancelModeOption, true);
637
638 var undoButton = document.getElementById("undoButton");
639 undoButton.addEventListener('click', performUndo, true);
640
641
642 var foldRadioButton = document.getElementById("foldRadioButton");
643 var expandRadioButton = document.getElementById("expandRadioButton");
644 foldRadioButton.addEventListener('click', setFoldMode, true);
645 expandRadioButton.addEventListener('click', setExpandMode, true);
646
647 //var CsnOnTopButton = document.getElementById("CsnOnTopButton");
648 //CsnOnTopButton.addEventListener('click', putCsnToolbarOnTop, true);
649
650 // ------------
651 // 4 div for rect-outline, for inspection highlighting
652 // ------------
653 var csnInspectDiv = document.createElement('div');
654 csnInspectDiv.setAttribute('id','InspectDiv');
655
656 var csnOffScreenStyle = 'position: fixed; left: 0px; top: 0px;';
657 csnOffScreenStyle += ' visibility: visible;';
658
659 var inspectBoxStyle = "width: 2px; height: 2px;";
660 inspectBoxStyle += "z-index: " + inspectHighlightZindex + "; ";
661 inspectBoxStyle += "background-color: rgba(0,128,0,1.0);";
662 inspectBoxStyle += "position: absolute;";
663
664 var inspectBoxAttr = ' style="'+inspectBoxStyle+'"';
665
666 var csnInspectRect = '<div style="'+csnOffScreenStyle+'">\n';
667 csnInspectRect += ' <div id="inspectBoxL" '+inspectBoxAttr+'></div>\n';
668 csnInspectRect += ' <div id="inspectBoxR" '+inspectBoxAttr+'></div>\n';
669 csnInspectRect += ' <div id="inspectBoxT" '+inspectBoxAttr+'></div>\n';
670 csnInspectRect += ' <div id="inspectBoxB" '+inspectBoxAttr+'></div>\n';
671
672 var csnPreLookupStyle = "background-color: white; color: black;";
673 csnPreLookupStyle += " border: 2px solid black;";
674 csnPreLookupStyle += " min-width: 600px;";
675 csnPreLookupStyle += " z-index: " + inspectHighlightZindex + "; ";
676 csnPreLookupStyle += " position: absolute;";
677 csnPreLookupStyle += " visibility: hidden;";
678
679 csnInspectRect += ' <div id="preLookup" class="csnPreLookup" style="'+csnPreLookupStyle+'">\n';
680 //csnInspectRect += ' dasf fad adsffdsa sfda\n';
681 csnInspectRect += ' </div>\n';
682
683 csnInspectRect += '</div>\n';
684
685 csnInspectDiv.innerHTML = csnInspectRect;
686
687
688 body.insertBefore(csnInspectDiv,body.firstChild);
689
690 var preLookupDiv = document.getElementById("preLookup");
691 //preLookupDiv.addEventListener("mouseout",hidePreLookup,true);
692
693}
694
695
696
697var existingTimeoutId = null;
698
699
700function showPreLookup(ev)
701{
702 //console.log("*** supressing show prelookup");
703 //return;
704
705 var targetElem = ev.target;
706 if (elementPartOfPreLookup(targetElem)) {
707 // no need to go any further
708 return;
709 }
710
711 // get mouse cursor
712 var mx = ev.pageX - window.pageXOffset;
713 var my = ev.pageY - window.pageYOffset;
714
715
716 var author_pack = generateAuthorPack(targetElem);
717 var author_name = author_pack.name;
718
719
720 var fullMessage = "";
721 if (csnMode == "NA") {
722 var NAmessage ='<h3 class="csnPreLookup">Name Authority Lookup</h3>';
723 NAmessage += '<p id="prelookupNACount" class="csnPreLookup">Number of occurrences of &quot;'
724 +author_name+'&quot;:\n';
725 NAmessage += '<div id="prelookupNAList">Pending ...</div>\n';
726
727 fullMessage += NAmessage;
728 }
729
730 // Crowd Sourcing
731 var CSmessage = '<h3 class="csnPreLookup">Crowdsourcing Lookup</h3>';
732 CSmessage += '<p id="prelookupCSCount" class="csnPreLookup">Number of remappings of &quot;'
733 +author_name+'&quot;:\n';
734 CSmessage += '<div id="prelookupCSList">Pending ...</div>\n';
735
736 fullMessage += CSmessage;
737
738 var preLookupDiv = document.getElementById("preLookup");
739 preLookupDiv.style.left = (mx-30) + "px";
740 preLookupDiv.style.top = (my-30) + "px";
741 preLookupDiv.innerHTML = fullMessage;
742
743 if (csnMode == "NA") {
744 var naTargetElem = ev.target;
745 var naElemClone = naTargetElem.cloneNode(true);
746
747 async_named_authority_srw(naElemClone,count_named_authority_canonical);
748 }
749
750 var csTargetElem = ev.target;
751 var csElemClone = csTargetElem.cloneNode(true);
752
753 async_crowdsource_greenstone(csElemClone,count_crowdsource_canonical);
754
755 // ensure rect-box is visibile
756 preLookupDiv.style.visibility = "visible";
757
758}
759
760
761function hidePreLookup(ev)
762{
763 var preLookupDiv = document.getElementById("preLookup");
764 preLookupDiv.style.visibility = "hidden";
765
766 //console.log("Mouse out inhidPreLookup");
767
768 if (existingTimeoutId!=null) {
769 clearTimeout(existingTimeoutId);
770 }
771
772 existingTimeoutId = null;
773}
774
775
776function csnDeHighlight(ev)
777{
778 if (!inspectorActive) return false;
779
780 var targetElem = ev.target;
781
782 // check to see if in preLookup popup
783 //var targetElemId = targetElem.getAttribute("id");
784 //if ((targetElemId) && (targetElemId == "preLookup")) {
785
786 if (elementPartOfPreLookup(targetElem)) {
787 //console.log("Mouse out in DeHighlight: part of CSN, hiding");
788
789 if (existingTimeoutId!=null) {
790 clearTimeout(existingTimeoutId);
791 }
792 // hide preLookup if no new mouse-over event *within* the
793 // div tag occurs in the next 200 ms
794 existingTimeoutId = setTimeout(hidePreLookup, 200, ev);
795
796 return false;
797 }
798
799 ev.preventDefault();
800 ev.stopPropagation();
801
802 var elems;
803 if (inspectorDragging) {
804 var selected_elems_len = inspectorSelectedElems.length;
805 if (selected_elems_len>1) {
806 // Remove this elem
807 var targetElem = ev.target;
808 for (var i=0; i<selected_elems_len; i++) {
809 if (inspectorSelectedElems[i] == targetElem) {
810 // remove element from array
811 inspectorSelectedElems.splice(i,1);
812 break;
813 }
814 }
815 }
816 }
817}
818
819function csnHighlight(ev)
820{
821 if (!inspectorActive) {
822 // look to see if on-hover pre-lookup should be displayed
823 return false;
824 }
825
826
827 ev.preventDefault();
828 ev.stopPropagation();
829
830 var targetElem = ev.target;
831 if (elementPartOfCsn(targetElem)) {
832 // consume this event if part of the CSN toolbar
833 // and hide any PreLookup popup is present or on timer
834
835 hidePreLookup(ev);
836 return false;
837 }
838
839 // Consider showing preLookup (if remain still for 2 further seconds)
840 var preLookupDiv = document.getElementById("preLookup");
841 if (preLookupDiv.style.visibility == "hidden") {
842 if (existingTimeoutId!=null) {
843 clearTimeout(existingTimeoutId);
844 }
845
846 existingTimeoutId = setTimeout(showPreLookup, 2000, ev);
847 }
848 else {
849 // pop-up currently visible
850 if (elementPartOfPreLookup(targetElem)) {
851 // a hide event might be in the works, but it we've nearly
852 // instantaneously got a new mouse-in event that's in the
853 // same pop-up div tag, so cancel the hide event
854
855 if (existingTimeoutId!=null) {
856 clearTimeout(existingTimeoutId);
857 existingTimeoutId = null;
858 }
859 }
860 return false;
861 }
862
863 var elems;
864 if (inspectorDragging) {
865 // append this elem
866
867 appendIfUniq(targetElem);
868
869 elems = inspectorSelectedElems;
870 }
871 else {
872 elems = [ ev.target ];
873 }
874
875 // work out union off all rects
876 var union_rect_xl;
877 var union_rect_xr;
878 var union_rect_yt;
879 var union_rect_yb;
880
881 for (var i=0; i<elems.length; i++) {
882 var elem = elems[i];
883 var rect = elem.getBoundingClientRect();
884
885 var rect_xl = rect.left;
886 var rect_xr = rect.right;
887 var rect_yt = rect.top;
888 var rect_yb = rect.bottom;
889
890 var rect_width = rect_xr - rect_xl +1;
891 var rect_height = rect_yb - rect_yt +1;
892
893 if ((rect_width<=3) || (rect_height<=3)) {
894 continue;
895 }
896
897 if ((union_rect_xl==null) || (rect_xl<union_rect_xl)) {
898 union_rect_xl = rect_xl;
899 }
900 if ((union_rect_xr==null) || (rect_xr>union_rect_xr)) {
901 union_rect_xr = rect_xr;
902 }
903
904 if ((union_rect_yt==null) || (rect_yt<union_rect_yt)) {
905 union_rect_yt = rect_yt;
906 }
907 if ((union_rect_yb==null) || (rect_yb>union_rect_yb)) {
908 union_rect_yb = rect_yb;
909 }
910 }
911
912 var rect_pp = "(" + rect_xl + "," + rect_yt + ") ";
913 rect_pp += rect_width + " x " + rect_height;
914 //console.log("Mouseover event:" + rect_pp);
915
916 if (!csnInitialized) {
917 console.log("... but Computer Says No not initialized");
918 return true;
919 }
920
921 // Make sure we've got a valid rect
922 if ((union_rect_xl==null) || (union_rect_xr==null)
923 || (union_rect_yt==null) || (union_rect_yb==null)) {
924 return true;
925 }
926
927 // Adjust values to ensure they fall out side where mouse
928 // focus is
929
930 union_rect_xl -= 2;
931 union_rect_xr += 1;
932 union_rect_yt -= 2;
933 union_rect_yb += 1;
934
935 var union_rect_width = union_rect_xr - union_rect_xl +2;
936 var union_rect_height = union_rect_yb - union_rect_yt +2;
937
938
939 var inspectboxL = document.getElementById("inspectBoxL");
940 inspectboxL.style.left = union_rect_xl + "px";
941 inspectboxL.style.top = union_rect_yt + "px";
942 inspectboxL.style.width = "2px";
943 inspectboxL.style.height = union_rect_height + "px";
944
945 var inspectboxR = document.getElementById("inspectBoxR");
946 inspectboxR.style.left = union_rect_xr + "px";
947 inspectboxR.style.top = union_rect_yt + "px";
948 inspectboxR.style.width = "2px";
949 inspectboxR.style.height = union_rect_height + "px";
950
951 var inspectboxT = document.getElementById("inspectBoxT");
952 inspectboxT.style.left = union_rect_xl + "px";
953 inspectboxT.style.top = union_rect_yt + "px";
954 inspectboxT.style.width = union_rect_width + "px";
955 inspectboxT.style.height = "2px";
956
957 var inspectboxB = document.getElementById("inspectBoxB");
958 inspectboxB.style.left = union_rect_xl + "px";
959 inspectboxB.style.top = union_rect_yb + "px";
960 inspectboxB.style.width = union_rect_width + "px";
961 inspectboxB.style.height = "2px";
962
963 // ensure rect-box is visibile
964 inspectboxL.style.visibility = "visible";
965 inspectboxR.style.visibility = "visible";
966 inspectboxT.style.visibility = "visible";
967 inspectboxB.style.visibility = "visible";
968
969 return true;
970}
971
972
973function csnStartDragging(ev)
974{
975 var targetElem = ev.target;
976
977 if (elementPartOfCsn(targetElem)) {
978 // allow this event to propagate
979 return false;
980 }
981
982 if (inspectorActive) {
983 ev.preventDefault();
984 ev.stopPropagation();
985
986 if (!inspectorDragging) {
987 inspectorDragging = true;
988 inspectorSelectedElems = [ev.target];
989 }
990 else {
991 // append this elem
992 // can this situation actually occur?
993 inspectorSelectedElems[inspectorSelectedElems.length] = ev.target;
994 }
995
996 return true;
997 }
998 else {
999 return false;
1000 }
1001}
1002
1003function csnStopDragging(ev)
1004{
1005 var targetElem = ev.target;
1006 if (elementPartOfCsn(targetElem)) {
1007 // allow this event to propagate
1008 return false;
1009 }
1010
1011 //if (inspectorActive) {
1012 if ((inspectorActive) && (inspectorDragging)) {
1013 ev.preventDefault();
1014 ev.stopPropagation();
1015
1016 appendIfUniq(ev.target);
1017
1018 var ise_len = inspectorSelectedElems.length;
1019 var startElem = inspectorSelectedElems[0];
1020 var endElem = (ise_len==1) ? startElem : inspectorSelectedElems[1];
1021 var sharedParentElem = calcSharedElemParent(startElem,endElem);
1022
1023 if (sharedParentElem!=null) {
1024
1025 var rangedElems = calcRangedElems(sharedParentElem,startElem,endElem);
1026 if (rangedElemsHistory_.length==0) {
1027 // first time, establish as the base
1028 sharedParentElemHistory_[0] = sharedParentElem;
1029 rangedElemsHistory_[0] = rangedElems;
1030 }
1031
1032 if (rangedElems.length>0) {
1033 // turn from grayed out deactive -> active
1034 var editPreviousButton = document.getElementById("editPreviousButton");
1035 editPreviousButton.className = "csnOption";
1036 editPreviousButton.addEventListener('click', performPreviousRangedElemsAction, true);
1037
1038 var sortPreviousButton = document.getElementById("sortPreviousButton");
1039 sortPreviousButton.className = "csnOption";
1040 sortPreviousButton.addEventListener('click', performPreviousRangedElemsAction, true);
1041
1042 var mergePreviousButton = document.getElementById("mergePreviousButton");
1043 mergePreviousButton.className = "csnOption";
1044 mergePreviousButton.addEventListener('click', performPreviousRangedElemsAction, true);
1045
1046 var deletePreviousButton = document.getElementById("deletePreviousButton");
1047 deletePreviousButton.className = "csnOption";
1048 deletePreviousButton.addEventListener('click', performPreviousRangedElemsAction, true);
1049 }
1050
1051 performModeAction(sharedParentElem,rangedElems);
1052 }
1053 else {
1054 alert("Invalid Selection");
1055 }
1056
1057
1058
1059 var inspectboxL = document.getElementById("inspectBoxL");
1060 var inspectboxR = document.getElementById("inspectBoxR");
1061 var inspectboxT = document.getElementById("inspectBoxT");
1062 var inspectboxB = document.getElementById("inspectBoxB");
1063
1064 inspectboxL.style.visibility = "hidden";
1065 inspectboxR.style.visibility = "hidden";
1066 inspectboxT.style.visibility = "hidden";
1067 inspectboxB.style.visibility = "hidden";
1068
1069 inspectorActive = false;
1070 inspectorDragging = false;
1071 inspectorIgnoreSingleClick = true;
1072
1073 cancelModeOption();
1074
1075 return true;
1076 }
1077 else {
1078 return false;
1079 }
1080}
1081
1082function csnSingleClick(ev)
1083{
1084 var targetElem = ev.target;
1085 if (elementPartOfCsn(targetElem)) {
1086 // allow this event to propagate
1087 return false;
1088 }
1089
1090 if (inspectorIgnoreSingleClick) {
1091 // Stop any further events from happening, such as a click through
1092 // on a hyperlink
1093 ev.preventDefault();
1094 ev.stopPropagation();
1095
1096 inspectorActive = false;
1097 inspectorDragging = false;
1098 inspectorIgnoreSingleClick = false;
1099
1100 return true;
1101 }
1102 else {
1103 return false;
1104 }
1105}
1106
1107
1108
1109function csnKeyPress(ev)
1110{
1111 var targetElem = ev.target;
1112
1113 //console.log("*** in csnKeyPress");
1114
1115 if (ev.ctrlKey) {
1116
1117 var keyChar = ev.charCode;
1118 var keyStr = String.fromCharCode(keyChar);
1119
1120 if (keyStr.toLowerCase() == "s") {
1121 ev.preventDefault();
1122 ev.stopPropagation();
1123
1124 save_live_doc_html();
1125
1126 return true;
1127 }
1128 }
1129
1130 // get to here, return false so event can propagate
1131 return false;
1132
1133}
1134
1135
1136
1137function performModeAction(sharedParentElem,rangedElems)
1138{
1139 if (csnFoldOrExpand == "fold") {
1140 if (csnMode == "merge") {
1141 mergeAuthors(sharedParentElem,rangedElems);
1142 }
1143 else if (csnMode == "delete") {
1144 deleteAuthors(sharedParentElem,rangedElems);
1145 }
1146 else if (csnMode == "edit") {
1147 editAuthors(sharedParentElem,rangedElems);
1148 }
1149 else if (csnMode == "NA") {
1150 naCanonicalAuthors(sharedParentElem,rangedElems);
1151 }
1152 else {
1153 analyzeAuthors(sharedParentElem,rangedElems);
1154 }
1155 }
1156 else {
1157 if (csnMode == "NA") {
1158 naAliasesAuthors(sharedParentElem,rangedElems);
1159 }
1160
1161 }
1162}
1163
1164function performPreviousRangedElemsAction()
1165{
1166 var sharedParentElem = sharedParentElemHistory_[sharedParentElemHistory_.length-1];
1167 var rangedElems = rangedElemsHistory_[rangedElemsHistory_.length-1];
1168
1169 //console.log("ranged elems length: " + rangedElems.length);
1170 //console.log("shared parent elem: " + sharedParentElem);
1171
1172 performModeAction(sharedParentElem,rangedElems);
1173
1174 inspectorActive = false;
1175 inspectorDragging = false;
1176
1177 cancelModeOption();
1178
1179 return true;
1180}
1181
1182
1183function _activateGeneral(id)
1184{
1185 var options = document.getElementById(id);
1186 options.style.display = "block";
1187}
1188
1189function _cancelGeneral(id)
1190{
1191 var options = document.getElementById(id);
1192 options.style.display = "none";
1193
1194 var inspectboxL = document.getElementById("inspectBoxL");
1195 var inspectboxR = document.getElementById("inspectBoxR");
1196 var inspectboxT = document.getElementById("inspectBoxT");
1197 var inspectboxB = document.getElementById("inspectBoxB");
1198
1199 inspectboxL.style.visibility = "hidden";
1200 inspectboxR.style.visibility = "hidden";
1201 inspectboxT.style.visibility = "hidden";
1202 inspectboxB.style.visibility = "hidden";
1203
1204 var preLookupDiv = document.getElementById("preLookup");
1205 hidePreLookup(null,preLookupDiv);
1206
1207 inspectorIgnoreSingleClick = true;
1208}
1209
1210function activateAccentFold()
1211{
1212 if (csnMode !=null) { cancelModeOption(); }
1213
1214 inspectorActive = true;
1215 csnMode = "accentFold";
1216
1217 _activateGeneral("accentFoldOptions");
1218
1219 return true;
1220}
1221
1222function activatePunctFold()
1223{
1224 if (csnMode !=null) { cancelModeOption(); }
1225
1226 inspectorActive = true;
1227 csnMode = "punctFold";
1228
1229 _activateGeneral("punctFoldOptions");
1230
1231 return true;
1232}
1233
1234function activateFirstnameFold()
1235{
1236 if (csnMode !=null) { cancelModeOption(); }
1237
1238 inspectorActive = true;
1239 csnMode = "firstnameFold";
1240 // let csnFirstnameMode remain whatever it is currently selected as
1241
1242 _activateGeneral("firstnameFoldOptions");
1243
1244 return true;
1245}
1246
1247function activateFirstnameFullFold()
1248{
1249 csnFirstnameMode = "full";
1250
1251 var firstnameFullFoldButton = document.getElementById("firstnameFullFoldButton");
1252 firstnameFullFoldButton.firstChild.style.visibility = "visible";
1253 firstnameFullFoldButton.firstChild.style.color = "green";
1254 var firstnameInitialFoldButton = document.getElementById("firstnameInitialFoldButton");
1255 firstnameInitialFoldButton.firstChild.style.visibility = "hidden";
1256 firstnameInitialFoldButton.firstChild.style.color = "white";
1257
1258 return activateFirstnameFold();
1259}
1260
1261function activateFirstnameInitialFold()
1262{
1263 csnFirstnameMode = "initial";
1264
1265 var firstnameFullFoldButton = document.getElementById("firstnameFullFoldButton");
1266 firstnameFullFoldButton.firstChild.style.visibility = "hidden";
1267 firstnameFullFoldButton.firstChild.style.color = "white";
1268 var firstnameInitialFoldButton = document.getElementById("firstnameInitialFoldButton");
1269 firstnameInitialFoldButton.firstChild.style.visibility = "visible";
1270 firstnameInitialFoldButton.firstChild.style.color = "green";
1271
1272 return activateFirstnameFold();
1273}
1274
1275
1276function activateNA()
1277{
1278 if (csnMode !=null) { cancelModeOption(); }
1279
1280 inspectorActive = true;
1281 csnMode = "NA";
1282
1283 _activateGeneral("NAOptions");
1284
1285 return true;
1286}
1287
1288
1289function activateEdit()
1290{
1291 if (csnMode !=null) { cancelModeOption(); }
1292
1293 inspectorActive = true;
1294 csnMode = "edit";
1295 // let csnEditMode remain whatever it is currently selected as
1296
1297 _activateGeneral("editOptions");
1298
1299 if (!seaweedActivated) {
1300 init_seaweed();
1301 seaweedActivated = true;
1302 }
1303
1304 return true;
1305}
1306
1307function activateInteractiveEdit()
1308{
1309
1310 csnEditMode = "interactive";
1311
1312 var editInteractiveButton = document.getElementById("editInteractiveButton");
1313 editInteractiveButton.firstChild.style.visibility = "visible";
1314 editInteractiveButton.firstChild.style.color = "green";
1315 var editPreviousFoldButton = document.getElementById("editPreviousButton");
1316 editPreviousFoldButton.firstChild.style.visibility = "hidden";
1317 editPreviousFoldButton.firstChild.style.color = "white";
1318
1319 return activateEdit();
1320}
1321
1322function activatePreviousEdit()
1323{
1324
1325 csnEditMode = "previous";
1326
1327 var editInteractiveButton = document.getElementById("editInteractiveButton");
1328 editInteractiveButton.firstChild.style.visibility = "hidden";
1329 editInteractiveButton.firstChild.style.color = "white";
1330 var editPreviousFoldButton = document.getElementById("editPreviousButton");
1331 editPreviousFoldButton.firstChild.style.visibility = "visible";
1332 editPreviousFoldButton.firstChild.style.color = "green";
1333
1334 return activateEdit();
1335}
1336
1337
1338
1339function activateSort()
1340{
1341 if (csnMode !=null) { cancelModeOption(); }
1342 inspectorActive = true;
1343 csnMode = "sort";
1344
1345 _activateGeneral("sortOptions");
1346
1347 return true;
1348}
1349
1350function activateInteractiveSort()
1351{
1352 csnSortMode = "interactive";
1353
1354 var sortInteractiveButton = document.getElementById("sortInteractiveButton");
1355 sortInteractiveButton.firstChild.style.visibility = "visible";
1356 sortInteractiveButton.firstChild.style.color = "green";
1357 var sortPreviousFoldButton = document.getElementById("sortPreviousButton");
1358 sortPreviousFoldButton.firstChild.style.visibility = "hidden";
1359 sortPreviousFoldButton.firstChild.style.color = "white";
1360
1361 return activateSort();
1362}
1363
1364function activatePreviousSort()
1365{
1366 csnSortMode = "previous";
1367
1368 var sortInteractiveButton = document.getElementById("sortInteractiveButton");
1369 sortInteractiveButton.firstChild.style.visibility = "hidden";
1370 sortInteractiveButton.firstChild.style.color = "white";
1371 var sortPreviousFoldButton = document.getElementById("sortPreviousButton");
1372 sortPreviousFoldButton.firstChild.style.visibility = "visible";
1373 sortPreviousFoldButton.firstChild.style.color = "green";
1374
1375 return activateSort();
1376
1377}
1378
1379
1380function activateMerge()
1381{
1382 if (csnMode !=null) { cancelModeOption(); }
1383 inspectorActive = true;
1384 csnMode = "merge";
1385
1386 _activateGeneral("mergeOptions");
1387
1388 return true;
1389}
1390
1391
1392function activateInteractiveMerge()
1393{
1394 csnMergeMode = "interactive";
1395
1396 var mergeInteractiveButton = document.getElementById("mergeInteractiveButton");
1397 mergeInteractiveButton.firstChild.style.visibility = "visible";
1398 mergeInteractiveButton.firstChild.style.color = "green";
1399 var mergePreviousFoldButton = document.getElementById("mergePreviousButton");
1400 mergePreviousFoldButton.firstChild.style.visibility = "hidden";
1401 mergePreviousFoldButton.firstChild.style.color = "white";
1402
1403 return activateMerge();
1404}
1405
1406function activatePreviousMerge()
1407{
1408
1409 csnMergeMode = "previous";
1410
1411 var mergeInteractiveButton = document.getElementById("mergeInteractiveButton");
1412 mergeInteractiveButton.firstChild.style.visibility = "hidden";
1413 mergeInteractiveButton.firstChild.style.color = "white";
1414 var mergePreviousFoldButton = document.getElementById("mergePreviousButton");
1415 mergePreviousFoldButton.firstChild.style.visibility = "visible";
1416 mergePreviousFoldButton.firstChild.style.color = "green";
1417
1418 return activateMerge();
1419}
1420
1421
1422function activateDelete()
1423{
1424 if (csnMode !=null) { cancelModeOption(); }
1425 inspectorActive = true;
1426 csnMode = "delete";
1427
1428 _activateGeneral("deleteOptions");
1429
1430 return true;
1431}
1432
1433function activatePreviousDelete()
1434{
1435 csnDeleteMode = "previous";
1436
1437 var deleteInteractiveButton = document.getElementById("deleteInteractiveButton");
1438 deleteInteractiveButton.firstChild.style.visibility = "hidden";
1439 deleteInteractiveButton.firstChild.style.color = "white";
1440 var deletePreviousFoldButton = document.getElementById("deletePreviousButton");
1441 deletePreviousFoldButton.firstChild.style.visibility = "visible";
1442 deletePreviousFoldButton.firstChild.style.color = "green";
1443
1444 return activateDelete();
1445}
1446
1447function cancelModeOption()
1448{
1449 inspectorActive = false;
1450
1451 _cancelGeneral(csnMode + "Options");
1452
1453 csnMode = null;
1454
1455 return true;
1456}
1457
1458
1459function performUndo()
1460{
1461 alert("Not implemented yet");
1462
1463 return true;
1464}
1465
1466
1467
1468function setFoldMode()
1469{
1470 csnFoldOrExpand = "fold";
1471}
1472
1473function setExpandMode()
1474{
1475 csnFoldOrExpand = "expand";
1476}
1477
1478
1479function putCsnToolbarOnTop()
1480{
1481 var toolbar = document.getElementById("ComputerSaysNo");
1482
1483
1484 if (!csnOnTop) {
1485 var maxZ = zRange['maxZ'];
1486 var toolbarZindex = (maxZ==null) ? 1000 :parseInt(maxZ);
1487
1488 toolbar.style.zIndex = toolbarZindex;
1489 var toolbarActionButton = document.getElementById("CsnOnTopButton");
1490 toolbarActionButton.innerHTML = "Toolbar underneath";
1491 csnOnTop = true;
1492 }
1493 else {
1494 toolbar.style.zIndex = "inherit";
1495 var toolbarActionButton = document.getElementById("CsnOnTopButton");
1496 toolbarActionButton.innerHTML = "Toolbar on top";
1497 csnOnTop = false;
1498 }
1499
1500 return true;
1501}
1502
1503
1504
1505 //------------------------------------------//
1506
1507
1508// Manipulate Lists of author names
1509
1510function generateAuthorPack(elem)
1511{
1512 var elem_text = getChildText(elem);
1513
1514 var author_name = elem_text;
1515 author_name = author_name.replace(/^(.*)\(\d+\)?(.*)$/,"$1$2");
1516 console.log("processing author: " + author_name);
1517
1518 var author_pack = { "name": author_name,
1519 "elem": elem };
1520
1521 // Dig out author count if there
1522 var author_count = elem_text;
1523 if (author_count.match(/^.*\((\d+)\).*$/)) {
1524 author_count = author_count.replace(/^.*\((\d+)\).*$/,"$1");
1525 //console.log("author count: " + author_count);
1526 author_pack.count = author_count;
1527 }
1528
1529 // Dig our key hyperlink if there
1530 var author_link = getFirstChildHyperlink(elem);
1531 if (author_link != null) {
1532 var author_link_href = author_link.href;
1533
1534 author_pack.link = author_link;
1535 author_pack.href = author_link_href;
1536 }
1537
1538 return author_pack;
1539}
1540
1541
1542function generateAuthorMap(rangedElems)
1543{
1544 console.log("generateAuthorMap");
1545
1546 var author_map = new Object();
1547
1548 //console.log("ranged len " + rangedElems.length);
1549
1550 for (var i=0; i<rangedElems.length; i++) {
1551 var currElem = rangedElems[i];
1552 //console.log("curr Elem" + currElem.nodeName);
1553
1554 var author_pack = generateAuthorPack(currElem);
1555
1556 if ("link" in author_pack) {
1557 var author_name = author_pack.name;
1558 author_pack.folded_name = calcFoldedName(author_name);
1559
1560 // enter pack as new entry in 'author_map' if new, or merge with alias list if not
1561 if (author_name in author_map) {
1562 // treat as alias
1563 //console.log("adding it as an alias for the existing " + author_name);
1564
1565 var fi_pack = author_map[author_name];
1566 var alias = fi_pack.alias;
1567 alias[alias.length] = author_pack;
1568 }
1569 else {
1570 author_pack.alias = new Array();
1571 author_map[author_name] = author_pack;
1572 }
1573 }
1574 }
1575
1576 return author_map;
1577}
1578
1579function generateAuthorKeys(author_map)
1580{
1581
1582 var author_keys = new Array();
1583
1584 for (var key in author_map) {
1585 author_keys[author_keys.length] = key;
1586 }
1587
1588 return author_keys;
1589}
1590
1591function collapseAuthorMap(author_keys,author_map)
1592{
1593 // look for any folded names that are the same, and collapse them into one entry
1594
1595 for (var fi=0; fi<author_keys.length; fi++) {
1596 var fi_key = author_keys[fi];
1597
1598 var fi_pack = author_map[fi_key];
1599
1600 // skip item has if already been merged with earlier name
1601 if (!fi_pack) { continue; }
1602
1603 var fi_folded_name = fi_pack.folded_name;
1604 //console.log("fi folded name:" + fi_folded_name)
1605 for (var mi=fi+1; mi<author_keys.length; mi++) {
1606 var mi_key = author_keys[mi];
1607 var mi_pack = author_map[mi_key];
1608
1609 // skip if already been merged with an earlier name
1610 if (!mi_pack) { continue; }
1611
1612 var mi_folded_name = mi_pack.folded_name;
1613 if (fi_folded_name == mi_folded_name) {
1614 //console.log(mi_key + " matches " + fi_key);
1615 var fi_alias_array = author_map[fi_key].alias;
1616 fi_alias_array[fi_alias_array.length] = mi_pack;
1617
1618 // and concatenate any existing alias values we know of already
1619 for (var ai=0; ai<mi_pack.alias.length; ai++) {
1620 fi_alias_array[fi_alias_array.length] = mi_pack.alias[ai];
1621 }
1622
1623 delete author_map[mi_key];
1624 }
1625 }
1626 }
1627
1628
1629 var collapsed_author_keys = generateAuthorKeys(author_map);
1630
1631 return collapsed_author_keys;
1632}
1633
1634function protectedInsertBefore(sharedParentElem,insertBefore,elem)
1635{
1636 if (insertBefore!=null) {
1637 sharedParentElem.insertBefore(elem,insertBefore);
1638 }
1639 else {
1640 sharedParentElem.appendChild(elem);
1641 }
1642}
1643
1644
1645function explainTooltipFolding(author_pack)
1646{
1647 var elem = author_pack.elem;
1648
1649 if (author_pack.name != author_pack.folded_name) {
1650
1651 var elemTitle = elem.getAttribute("title");
1652 if (elemTitle==null) {
1653 elemTitle="Originally: ";
1654 }
1655 else {
1656 if (elemTitle.match(/Originally: /)) {
1657 elemTitle += "-> ";
1658 }
1659 else {
1660 elemTitle += "; Originally";
1661 }
1662 }
1663
1664 //console.log("*** save mapping currently supressed");
1665 save_mapping(author_pack.name,author_pack.folded_name);
1666
1667 elemTitle += author_pack.name;
1668 elem.setAttribute("title",elemTitle);
1669 }
1670}
1671
1672
1673
1674function analyzeAuthors(sharedParentElem, rangedElems)
1675{
1676 console.log("analyzeAuthors");
1677
1678 var author_map = generateAuthorMap(rangedElems);
1679 var author_keys = generateAuthorKeys(author_map);
1680
1681 var collapsed_author_keys = collapseAuthorMap(author_keys,author_map);
1682
1683 var oldEndElem = rangedElems[rangedElems.length-1];
1684 var insertBefore = oldEndElem.nextSibling;
1685
1686 var newRangedElems = new Array();
1687
1688 // Take out the current elements
1689 for (var oi=0; oi<rangedElems.length; oi++) {
1690 sharedParentElem.removeChild(rangedElems[oi]);
1691 }
1692
1693 // add them back in again in their new order
1694
1695 for (var fi=0; fi<collapsed_author_keys.length; fi++) {
1696 var fi_key = collapsed_author_keys[fi];
1697 var fi_pack = author_map[fi_key];
1698
1699 //console.log("fi = " + fi);
1700
1701 explainTooltipFolding(fi_pack);
1702 var fi_anchor_link = fi_pack.link;
1703 fi_anchor_link.innerHTML = fi_pack.folded_name;
1704
1705 var fi_elem = fi_pack["elem"];
1706 protectedInsertBefore(sharedParentElem,insertBefore,fi_elem);
1707
1708 newRangedElems[newRangedElems.length] = fi_elem;
1709
1710 var alias = fi_pack.alias;
1711
1712 for (var ai=0; ai<alias.length; ai++) {
1713 //console.log(" ai = " + ai);
1714
1715 var ai_pack = alias[ai];
1716 explainTooltipFolding(ai_pack);
1717
1718 var ai_anchor_link = ai_pack.link;
1719 ai_anchor_link.innerHTML = ai_pack.folded_name;
1720
1721 var ai_elem = ai_pack["elem"];
1722 protectedInsertBefore(sharedParentElem,insertBefore,ai_elem);
1723
1724 newRangedElems[newRangedElems.length] = ai_elem;
1725
1726 }
1727 }
1728
1729 sharedParentElemHistory_[sharedParentElemHistory_.length] = sharedParentElem;
1730 rangedElemsHistory_[rangedElemsHistory_.length] = newRangedElems;
1731
1732}
1733
1734
1735function removeSeaweedEditable(elems)
1736{
1737 for (var i=0; i<elems.length; i++) {
1738 if (elems[i].nodeType == ELEMENT_NODE) {
1739 var elem = elems[i];
1740 classAtt = elem.getAttribute("class");
1741 if (classAtt != null) {
1742 if (classAtt.match(/editable/)) {
1743 classAtt = classAtt.replace(/\s*editable/,"");
1744 elem.setAttribute("class",classAtt);
1745 }
1746 }
1747 }
1748 }
1749}
1750
1751
1752function addSeaweedEditable(elems)
1753{
1754
1755 for (var i=0; i<elems.length; i++) {
1756 if (elems[i].nodeType == ELEMENT_NODE) {
1757 var elem = elems[i];
1758
1759 classAtt = elem.getAttribute("class");
1760 if (classAtt != null) {
1761 if (!classAtt.match(/editable/)) {
1762 if (classAtt != "") {
1763 classAtt = " ";
1764 }
1765 classAtt += "editable";
1766 elem.setAttribute("class",classAtt);
1767 }
1768 }
1769 else {
1770 elem.setAttribute("class","editable");
1771 }
1772
1773 var innerHTML = elem.innerHTML;
1774 innerHTML += '&nbsp;<img style="border: 0px;" src="'+pencilImage+'">';
1775 elem.innerHTML = innerHTML;
1776 }
1777 }
1778
1779
1780}
1781
1782function editAuthors(sharedParentElem, rangedElems)
1783{
1784 addSeaweedEditable(rangedElems);
1785}
1786
1787
1788function naCanonicalAuthors(sharedParentElem, rangedElems)
1789{
1790
1791 // Asynchronously apply na_alias to each entry
1792 for (var i=0; i<rangedElems.length; i++) {
1793 async_named_authority_srw(rangedElems[i],process_named_authority_canonical);
1794 }
1795}
1796
1797function mergeAuthors(sharedParentElem, rangedElems)
1798{
1799 console.log("mergeAuthors");
1800
1801 var author_map = generateAuthorMap(rangedElems);
1802 var author_keys = generateAuthorKeys(author_map);
1803
1804 var collapsed_author_keys = collapseAuthorMap(author_keys,author_map);
1805
1806 var oldEndElem = rangedElems[rangedElems.length-1];
1807 var insertBefore = oldEndElem.nextSibling;
1808
1809 var curr_elem = rangedElems[0];
1810 var curr_author_pack = generateAuthorPack(curr_elem);
1811 var curr_author_name = curr_author_pack.name;
1812
1813 var next_elem = rangedElems[1];
1814 var ne_pos = 1;
1815
1816 var newRangedElems = [ curr_elem ];
1817
1818 while (next_elem!=null) {
1819
1820 var next_author_pack = generateAuthorPack(next_elem);
1821 var next_author_name = next_author_pack.name;
1822
1823 // if same
1824 if (curr_author_name == next_author_name) {
1825 // combine counts (if present), collate href, and then del item
1826 var orig_author_count = curr_author_pack.count;
1827 //var orig_author_link = curr_author_pack.link;
1828 var orig_elem = curr_elem;
1829
1830 var combined_count = parseInt(orig_author_count);
1831 var combined_hrefs = [ "'"+curr_author_pack.href+"'" ];
1832
1833 //var combined_mappings = [ ];
1834
1835 // continue consuming elems until it no longer matches curr_author_name
1836 while (next_elem!=null) {
1837 var next_author_count = next_author_pack.count;
1838
1839 combined_count += parseInt(next_author_count);
1840 combined_hrefs[combined_hrefs.length] = "'" + next_author_pack.href + "'";
1841 //combined_mappings[combined_mappings.length] = next_author.orig_name;
1842
1843 console.log("title = " + next_elem.title);
1844
1845 if (next_elem.title != "") {
1846 orig_elem.title += " + " + next_elem.title;
1847 }
1848
1849 sharedParentElem.removeChild(next_elem);
1850
1851 ne_pos++;
1852 next_elem = rangedElems[ne_pos];
1853
1854 if (next_elem!=null) {
1855 next_author_pack = generateAuthorPack(next_elem);
1856 next_author_name = next_author_pack.name;
1857
1858 if (next_author_name != curr_author_name) {
1859 break;
1860 }
1861 }
1862 }
1863 var href_array_str = "[" + combined_hrefs.join(",") + "]";
1864
1865 //alert("Merging " + curr_author_name + " (" + combined_count + ")");
1866
1867 var onclick_str = "return multiSearch("+href_array_str+")";
1868 var curr_author_link = curr_author_pack.link;
1869 curr_author_link.setAttribute("onclick",onclick_str);
1870
1871 curr_author_link.href = "#";
1872
1873 orig_inner_html = curr_elem.innerHTML;
1874 var count_re = new RegExp("\\("+orig_author_count+"\\)","g");
1875 //console.log("re: " + count_re);
1876 //console.log("inner html = " + orig_inner_html);
1877
1878 orig_inner_html = orig_inner_html.replace(count_re,"("+combined_count+")");
1879 curr_elem.innerHTML = orig_inner_html;
1880
1881 console.log("multiSearch("+href_array_str+")");
1882 }
1883
1884 if (next_elem!=null) {
1885
1886 curr_elem = next_elem;
1887 curr_author_pack = next_author_pack;
1888 curr_author_name = next_author_name;
1889
1890 newRangedElems[newRangedElems.length] = curr_elem;
1891
1892 ne_pos++;
1893 next_elem = rangedElems[ne_pos];
1894 }
1895 }
1896
1897 console.log("*** done merge");
1898
1899 sharedParentElemHistory_[sharedParentElemHistory_.length] = sharedParentElem;
1900 rangedElemsHistory_[rangedElemsHistory_.length] = newRangedElems;
1901
1902}
1903
1904
1905function deleteAuthors(sharedParentElem, rangedElems)
1906{
1907
1908 // Take out the current elements
1909 for (var oi=0; oi<rangedElems.length; oi++) {
1910 sharedParentElem.removeChild(rangedElems[oi]);
1911 }
1912
1913
1914 sharedParentElemHistory_[sharedParentElemHistory_.length] = sharedParentElem;
1915 rangedElemsHistory_[rangedElemsHistory_.length] = [];
1916
1917}
1918
1919
1920 //------------------------------------------//
1921
1922function naAliasesAuthors(sharedParentElem, rangedElems)
1923{
1924
1925 // Asynchronously apply na_alias to each entry
1926 for (var i=0; i<rangedElems.length; i++) {
1927 async_named_authority_srw(rangedElems[i],process_named_authority_aliases);
1928 }
1929}
1930
1931 //------------------------------------------//
1932
1933// Multi search
1934
1935function multiSearch(hrefs)
1936{
1937 var windowHeight = window.innerHeight;
1938 var windowWidth = window.innerWidth;
1939
1940 var new_html = '<table width="100%" ><tr id="trSearchFrame" valign="top">';
1941
1942 if (hrefs.length==0) {
1943 alert("An error occured in merging: multiSearch called with no hrefs");
1944 }
1945
1946
1947 var num_frames = hrefs.length;
1948 var equal_width = (100.0/num_frames) + "%";
1949
1950 for (var i=0; i<num_frames; i++) {
1951
1952 var tdId = "tdSearchFrame"+i;
1953
1954 var frame_html = '<td width="'+equal_width+'" id="'+tdId+'"></td>';
1955
1956
1957 new_html += frame_html;
1958 }
1959
1960 new_html += '</tr></table>';
1961
1962
1963 document.body.innerHTML = new_html;
1964
1965 for (var i=0; i<num_frames; i++) {
1966 var tdFrameElem = document.getElementById("tdSearchFrame"+i);
1967 //tdFrameElem.height = windowHeight-20;
1968 tdFrameElem.height = 200;
1969 }
1970
1971
1972 for (var i=0; i<num_frames; i++) {
1973
1974 var tdFrameElem = document.getElementById("tdSearchFrame"+i);
1975
1976 var frameElem = document.createElement("iframe");
1977 //frameElem.setAttribute("src",hrefs[i]);
1978 frameElem.setAttribute("width","98%");
1979 frameElem.setAttribute("height","100%");
1980 //frameElem.setAttribute("frameborder","0");
1981 //frameElem.setAttribute("scrolling","no");
1982 frameElem.setAttribute("id","searchFrame"+i);
1983 frameElem.setAttribute("onload",'resizeFrame("searchFrame'+i+'")');
1984
1985 frameElem.style.overflowX = "scroll";
1986 frameElem.style.overflowY = "hidden";
1987
1988 tdFrameElem.appendChild(frameElem);
1989 }
1990
1991
1992 setTimeout(continueMultiSearch, 2000, hrefs); // 2 sec delay
1993
1994 return false;
1995}
1996
1997
1998function continueMultiSearch(hrefs)
1999{
2000 // console.log("href count in contineu multi search= " + hrefs.length);
2001
2002 var num_frames = hrefs.length;
2003
2004 for (var i=0; i<num_frames; i++) {
2005
2006 var frameElem = document.getElementById("searchFrame"+i);
2007
2008 frameElem.setAttribute("src",hrefs[i]);
2009 }
2010
2011
2012 return false;
2013}
2014
2015
2016function resizeFrame(fid) {
2017
2018 // if (fid == "childframe") return;
2019
2020 f = parent.document.getElementById(fid);
2021
2022 if (f!=null) {
2023
2024 var new_height = f.contentWindow.document.body.scrollHeight;
2025 new_height += 60; // allow for scroll bar at bottom?
2026
2027 f.style.height = new_height + "px";
2028
2029 }
2030
2031}
2032
2033
2034
2035 //------------------------------------------//
2036
2037// Author Folding and other types of manipulation
2038
2039function calcFoldedName(author_name)
2040{
2041 // calculated folded name based on current mode
2042 // note: in many cases this is the same string as the key
2043
2044 var folded_name;
2045
2046 if (csnMode == "accentFold") {
2047 folded_name = accent_fold(author_name);
2048 }
2049 else if (csnMode == "punctFold") {
2050 folded_name = punct_fold(author_name);
2051 }
2052 else if (csnMode == "firstnameFold") {
2053 if (csnFirstnameMode == "full") {
2054 folded_name = firstname_fold(author_name);
2055 }
2056 else {
2057 folded_name = firstname_initial_fold(author_name);
2058 }
2059 }
2060 else if (csnMode == "sort") {
2061 // trial op: allows items to be sorted as is
2062 trim(author_name);
2063 author_name = author_name.replace(/\s+/g," ");
2064 folded_name = author_name;
2065 }
2066 else if (csnMode == "merge") {
2067 // trial op: allows items to be sorted as is
2068 folded_name = author_name;
2069 }
2070 else {
2071 alert("Unrecognized mode: " + csnMode);
2072 folded_name = author_name;
2073 }
2074
2075 if (author_name != folded_name) {
2076 console.log("Folded name mapping: " + author_name + "->" + folded_name);
2077 }
2078
2079 return folded_name;
2080}
2081
2082
2083function accent_fold(search_string)
2084{
2085 // tidy up any pre- or post- whitespace
2086 search_string = trim(search_string);
2087
2088 // protect any string literals that are special RE characters
2089 search_string = search_string.replace(/([|\(\)\[\{\}.+*?^$\\])/g,"\\$1");
2090
2091 // replace characters by their compositors
2092 var accent_replacer = function(chr) {
2093 if (chr.charCodeAt(0)>128) {
2094 for (var base_c in accented) {
2095 var letter_re = new RegExp(accented[base_c],'gi');
2096 if (letter_re.test(chr)) {
2097 // Got accented char
2098 // => downgrade to base character
2099 chr = base_c;
2100 }
2101 // otherwise, leave it alone
2102 }
2103 }
2104 return chr;
2105 }
2106
2107 search_string = search_string.replace(/\S/g,accent_replacer);
2108 search_string = search_string.replace(/\\([|\(\)\[\{\}.+*?^$\\])/g,"$1");
2109
2110 search_string = search_string.replace(/\s+/g," ");
2111
2112 return search_string;
2113}
2114
2115
2116function punct_fold(search_string)
2117{
2118 search_string = trim(search_string);
2119 search_string = search_string.replace(/\./g,"");
2120
2121 search_string = search_string.replace(/\s+/g," ");
2122
2123 return search_string;
2124}
2125
2126
2127function firstname_fold(search_string)
2128{
2129 search_string = trim(search_string);
2130
2131 if (search_string.match(/^(.*\,\s*.).*$/)) {
2132 search_string = search_string.replace(/^(.*\,\s*.[^\s]*).*$/,"$1");
2133 }
2134 else {
2135 search_string = search_string.replace(/^(.[^\s]*).*\s+(.*)$/,"$1 $2");
2136 }
2137
2138 search_string = search_string.replace(/\s+/g," ");
2139
2140 return search_string;
2141}
2142
2143
2144function firstname_initial_fold(search_string)
2145{
2146 search_string = trim(search_string);
2147
2148 if (search_string.match(/^(.*\,\s*.).*$/)) {
2149 search_string = search_string.replace(/^(.*\,\s*.).*$/,"$1");
2150 }
2151 else {
2152 search_string = search_string.replace(/^(.).*\s+(.*)$/,"$1 $2");
2153 }
2154
2155 search_string = search_string.replace(/\s+/g," ");
2156
2157 return search_string;
2158}
2159
2160
2161function process_named_authority_canonical(response,author_pack)
2162{
2163 //console.log("SRW response:\n" + response);
2164
2165 var parser = new DOMParser();
2166 marc_xml_doc = parser.parseFromString(response,"text/xml");
2167
2168 var datafieldElems = marc_xml_doc.getElementsByTagName("mx:datafield");
2169
2170 var canonical_author_name = null;
2171
2172 for (var fi=0; fi<datafieldElems.length; fi++) {
2173 var datafieldElem = datafieldElems[fi];
2174 if (datafieldElem.getAttribute("tag")=="100") {
2175 console.log("got match on tag 100");
2176
2177 var subfieldElems = datafieldElem.getElementsByTagName("mx:subfield");
2178 for (var si=0; si<subfieldElems.length; si++) {
2179
2180 var subfieldElem = subfieldElems[si];
2181 if (subfieldElem.getAttribute("code")=="a") {
2182 canonical_author_name = getChildText(subfieldElem);
2183 console.log("*** canonical author = " + canonical_author_name);
2184 }
2185 }
2186 }
2187 }
2188
2189 var author_name = author_pack.name;
2190 var author_link = author_pack.link;
2191
2192
2193 if ((canonical_author_name!=null) && (canonical_author_name!=author_name)) {
2194 console.log("trying to set innerHTML with: " + canonical_author_name);
2195 author_link.innerHTML = canonical_author_name;
2196 }
2197
2198}
2199
2200
2201function count_named_authority_canonical(response,author_pack)
2202{
2203 var parser = new DOMParser();
2204 marc_xml_doc = parser.parseFromString(response,"text/xml");
2205
2206 var datafieldElems = marc_xml_doc.getElementsByTagName("mx:datafield");
2207
2208 var prelookupNames = new Array();
2209 var prelookupAliases = new Array();
2210
2211 for (var fi=0; fi<datafieldElems.length; fi++) {
2212 var datafieldElem = datafieldElems[fi];
2213 if (datafieldElem.getAttribute("tag")=="100") {
2214 console.log("NA response: got match on tag 100");
2215
2216 var subfieldElems = datafieldElem.getElementsByTagName("mx:subfield");
2217 for (var si=0; si<subfieldElems.length; si++) {
2218
2219 var subfieldElem = subfieldElems[si];
2220 if (subfieldElem.getAttribute("code")=="a") {
2221 var canonical_author_name = getChildText(subfieldElem);
2222 prelookupNames[prelookupNames.length] = canonical_author_name;
2223 console.log("*** canonical author = " + canonical_author_name);
2224 }
2225 }
2226 }
2227
2228
2229 if (datafieldElem.getAttribute("tag")=="400") {
2230 console.log("NA response: got match on tag 400");
2231
2232 var subfieldElems = datafieldElem.getElementsByTagName("mx:subfield");
2233 for (var si=0; si<subfieldElems.length; si++) {
2234
2235 var subfieldElem = subfieldElems[si];
2236 if (subfieldElem.getAttribute("code")=="a") {
2237 var canonical_author_name = getChildText(subfieldElem);
2238 prelookupNames[prelookupNames.length-1] += "<br>&nbsp;&nbsp; also: " + canonical_author_name;
2239 console.log("*** alias author = " + canonical_author_name);
2240 }
2241 }
2242 }
2243
2244 }
2245
2246 var prelookupNamesLen = prelookupNames.length;
2247
2248 var prelookupNACount= document.getElementById("prelookupNACount");
2249 prelookupNACount.innerHTML += prelookupNamesLen;
2250
2251 var prelookupNAList = document.getElementById("prelookupNAList");
2252 var newInnerHTML = '<p>&nbsp;' + prelookupNames.join("<br>") + '</p>';
2253 prelookupNAList.innerHTML = newInnerHTML;
2254}
2255
2256
2257function process_named_authority_aliases(response,author_pack)
2258{
2259 var parser = new DOMParser();
2260 marc_xml_doc = parser.parseFromString(response,"text/xml");
2261
2262 var datafieldElems = marc_xml_doc.getElementsByTagName("mx:datafield");
2263
2264 var author_name = author_pack.name;
2265 var author_name_aliases = author_name;
2266
2267 for (var fi=0; fi<datafieldElems.length; fi++) {
2268 var datafieldElem = datafieldElems[fi];
2269 if ((datafieldElem.getAttribute("tag")=="100") || (datafieldElem.getAttribute("tag")=="400")) {
2270
2271 var subfieldElems = datafieldElem.getElementsByTagName("mx:subfield");
2272 for (var si=0; si<subfieldElems.length; si++) {
2273
2274 var subfieldElem = subfieldElems[si];
2275 if (subfieldElem.getAttribute("code")=="a") {
2276 var author_name_alias = getChildText(subfieldElem);
2277
2278 if (author_name_alias != author_name) {
2279 if (author_name_aliases != "") {
2280 author_name_aliases += " OR ";
2281 }
2282 author_name_aliases += author_name_alias;
2283 console.log("*** alias author = " + author_name_alias);
2284 }
2285 }
2286 }
2287 }
2288 }
2289
2290
2291 var author_elem = author_pack.elem;
2292
2293 if (author_elem.nodeType==ELEMENT_NODE) {
2294 if (author_elem.nodeName.toLowerCase()=="input") {
2295 author_elem.value=author_name_aliases;
2296 }
2297 else {
2298 author_elem.innerHTML = author_name_aliases;
2299 }
2300 }
2301}
2302
2303function async_named_authority_srw(elem,process_function)
2304{
2305 console.log("async name authority srw");
2306
2307 var url = "http://alcme.oclc.org/srw/search/lcnaf";
2308
2309 var author_pack = generateAuthorPack(elem);
2310 var author_name = author_pack.name;
2311
2312 // tidy it up a bit
2313 author_name = trim(author_name);
2314 author_name = author_name.replace(/\s+/g," ");
2315
2316 var family_name;
2317 var first_name;
2318
2319 if (author_name.match(/^.*\,\s*..*$/)) {
2320 family_name = author_name.replace(/^(.*)\,\s*..*$/,"$1");
2321 first_name = author_name.replace(/^.*\,\s*(\S+).*$/,"$1");
2322 }
2323 else {
2324 family_name = author_name.replace(/^\s*(\S+).*?(\S+)$/,"$2");
2325 first_name = author_name.replace(/^\s*(\S+).*?(\S+)$/,"$1");
2326 }
2327
2328 // Looks like accent folding is needed to work nicely with OCLC search
2329 // service
2330 family_name = accent_fold(family_name);
2331 first_name = accent_fold(first_name);
2332
2333 var query_cgi = 'query=local.FamilyName+%3D+"<FamilyName>"+and+local.FirstName+%3D+"<FirstName>"';
2334 query_cgi = query_cgi.replace(/(<FamilyName>)/g,family_name);
2335 query_cgi = query_cgi.replace(/(<FirstName>)/g,first_name);
2336
2337 var cgi_tail = "&version=1.1&operation=searchRetrieve&recordSchema=info%3Asrw%2Fschema%2F1%2Fmarcxml-v1.1&maximumRecords=10&startRecord=1&resultSetTTL=300&recordPacking=xml&recordXPath=&sortKeys=";
2338
2339 url += '?' + query_cgi + cgi_tail;
2340
2341 console.log("url = " + url);
2342
2343 GM_xmlhttpRequest( { method: 'GET',
2344 url: url,
2345 onload: function (rsp) { process_function(rsp.responseText,author_pack); },
2346 onerror: function(rsp) { alert("Error retrieving name authority data:" + rsp.statusText); }
2347 } );
2348}
2349
2350
2351//----------------//
2352
2353
2354
2355function count_crowdsource_canonical(response,author_pack)
2356{
2357 console.log("Count crowd source");
2358
2359 var author_name = author_pack.name;
2360
2361 var holderDiv = document.createElement('div');
2362 holderDiv.innerHTML = response.replace(/<script(.|\s)*?\/script>/g, '');
2363
2364 var tdArray = holderDiv.getElementsByTagName('td');
2365
2366 var csMap = new Object();
2367 var currOrigName = null;
2368 var currFoldedName = null;
2369
2370 for (var i=0; i<tdArray.length; i++) {
2371 var tdText = tdArray[i].innerHTML;
2372 if (tdText.match(/^Original Name:/)) {
2373 currOrigName = tdText.replace(/^Original Name:\s+(.*)$/,"$1");
2374 }
2375 if (tdText.match(/^Folded Name:/)) {
2376 currFoldedName = tdText.replace(/^Folded Name:\s+(.*)$/,"$1");
2377
2378 if (currOrigName != author_name) {
2379 // Not interested in this one => skip
2380 continue;
2381 }
2382
2383 if (currOrigName in csMap) {
2384 if (currFoldedName in csMap[currOrigName]) {
2385 csMap[currOrigName][currFoldedName]++;
2386 //console.log("Increasing mapping: " + currOrigName
2387 // + " -> " + currFoldedName );
2388 }
2389 else {
2390 csMap[currOrigName][currFoldedName] = 1;
2391 // console.log("Creating another mapping for " + currOrigName
2392 // + " (this time ->) " + currFoldedName );
2393 }
2394 }
2395 else {
2396
2397 //console.log("First ever mapping for: " + currOrigName
2398 // + " -> " + currFoldedName );
2399 csMap[currOrigName] = new Object();
2400 csMap[currOrigName][currFoldedName] = 1;
2401 }
2402 }
2403 }
2404
2405 var csMapKeys = new Array();
2406 for (var key in csMap) {
2407 csMapKeys[csMapKeys.length] = key;
2408 }
2409
2410 var origNameLen = csMapKeys.length;
2411
2412 var prelookupCSCount= document.getElementById("prelookupCSCount");
2413 var prelookupCSList = document.getElementById("prelookupCSList");
2414
2415 if (origNameLen == 1) {
2416 var okey = csMapKeys[0];
2417 var foldedKeys = new Array();
2418
2419 for (var fkey in csMap[okey]) {
2420 foldedKeys[foldedKeys.length]= fkey;
2421 }
2422
2423 var foldedNameLen = foldedKeys.length;
2424
2425 prelookupCSCount.innerHTML += foldedNameLen;
2426
2427 var newInnerHTML = '<p><table>';
2428 for (var fkey in csMap[okey]) {
2429 newInnerHTML += "<tr><td>&nbsp;-> " + fkey + ":</td><td>&nbsp;freq(" + csMap[okey][fkey] + ")</td></tr>";
2430 }
2431 newInnerHTML += '</table></p>';
2432
2433 prelookupCSList.innerHTML = newInnerHTML;
2434 }
2435 else {
2436 if (origNameLen == 0) {
2437 prelookupCSCount.innerHTML += 0;
2438 prelookupCSList.innerHTML = "no matches were found";
2439 }
2440 else {
2441 alert("Error: Did not expect to find more than one original name in crowdsource lookup. Count: " + origNameLen);
2442 }
2443 }
2444}
2445
2446
2447function async_crowdsource_greenstone(elem,process_function)
2448{
2449 console.log("Async crowdsource");
2450
2451 var url = "http://www.nzdl.org/custom/seaweed-gm/cgi-bin/library.cgi";
2452
2453 var data = "c="+crowdsourceNamespace+"&a=q&r=1&hs=1&fqf=GS&sf=&t=1&q=";
2454
2455 var author_pack = generateAuthorPack(elem);
2456 var author_name = author_pack.name;
2457
2458 // tidy it up a bit
2459 author_name = trim(author_name);
2460 author_name = author_name.replace(/\s+/g," ");
2461
2462 data += author_name;
2463
2464 //var encoded_data = encodeURI(data);
2465 var encoded_data = data;
2466
2467 url += "?" + encoded_data;
2468
2469 console.log("url = " + url);
2470
2471 GM_xmlhttpRequest( { method: 'GET',
2472 url: url,
2473 onload: function (rsp) { process_function(rsp.responseText,author_pack); },
2474 onerror:function(rsp) { alert("Error setting metadata"); }
2475 } );
2476
2477}
2478
2479
2480
2481
2482//----------------//
2483
2484function name_unfold_re(search_string) {
2485 // escape meta characters
2486 search_string = search_string.replace(/\./g,"");
2487 search_string = search_string.replace(/^\s/,"");
2488 search_string = search_string.replace(/\s$/,"");
2489
2490 search_string = search_string.replace(/([|\(\)\[\{\}.+*?^$\\])/g,"\\$1");
2491
2492 // replace characters by their compositors
2493 var accent_replacer = function(chr) {
2494 return accented[chr.toLowerCase()] || chr;
2495 }
2496 search_string = search_string.replace(/\S/g,accent_replacer);
2497
2498 search_string = search_string.replace(/\s+/g,"\\s+");
2499
2500 return new RegExp(search_string,'g');
2501}
2502
2503var accented = {
2504 'a': '[Aa\xaa\xc0-\xc5\xe0-\xe5\u0100-\u0105\u01cd\u01ce\u0200-\u0203\u0226\u0227\u1d2c\u1d43\u1e00\u1e01\u1e9a\u1ea0-\u1ea3\u2090\u2100\u2101\u213b\u249c\u24b6\u24d0\u3371-\u3374\u3380-\u3384\u3388\u3389\u33a9-\u33af\u33c2\u33ca\u33df\u33ff\uff21\uff41]',
2505 'b': '[Bb\u1d2e\u1d47\u1e02-\u1e07\u212c\u249d\u24b7\u24d1\u3374\u3385-\u3387\u33c3\u33c8\u33d4\u33dd\uff22\uff42]',
2506 'c': '[Cc\xc7\xe7\u0106-\u010d\u1d9c\u2100\u2102\u2103\u2105\u2106\u212d\u216d\u217d\u249e\u24b8\u24d2\u3376\u3388\u3389\u339d\u33a0\u33a4\u33c4-\u33c7\uff23\uff43]',
2507 'd': '[Dd\u010e\u010f\u01c4-\u01c6\u01f1-\u01f3\u1d30\u1d48\u1e0a-\u1e13\u2145\u2146\u216e\u217e\u249f\u24b9\u24d3\u32cf\u3372\u3377-\u3379\u3397\u33ad-\u33af\u33c5\u33c8\uff24\uff44]',
2508 'e': '[Ee\xc8-\xcb\xe8-\xeb\u0112-\u011b\u0204-\u0207\u0228\u0229\u1d31\u1d49\u1e18-\u1e1b\u1eb8-\u1ebd\u2091\u2121\u212f\u2130\u2147\u24a0\u24ba\u24d4\u3250\u32cd\u32ce\uff25\uff45]',
2509 'f': '[Ff\u1da0\u1e1e\u1e1f\u2109\u2131\u213b\u24a1\u24bb\u24d5\u338a-\u338c\u3399\ufb00-\ufb04\uff26\uff46]',
2510 'g': '[Gg\u011c-\u0123\u01e6\u01e7\u01f4\u01f5\u1d33\u1d4d\u1e20\u1e21\u210a\u24a2\u24bc\u24d6\u32cc\u32cd\u3387\u338d-\u338f\u3393\u33ac\u33c6\u33c9\u33d2\u33ff\uff27\uff47]',
2511 'h': '[Hh\u0124\u0125\u021e\u021f\u02b0\u1d34\u1e22-\u1e2b\u1e96\u210b-\u210e\u24a3\u24bd\u24d7\u32cc\u3371\u3390-\u3394\u33ca\u33cb\u33d7\uff28\uff48]',
2512 'i': '[Ii\xcc-\xcf\xec-\xef\u0128-\u0130\u0132\u0133\u01cf\u01d0\u0208-\u020b\u1d35\u1d62\u1e2c\u1e2d\u1ec8-\u1ecb\u2071\u2110\u2111\u2139\u2148\u2160-\u2163\u2165-\u2168\u216a\u216b\u2170-\u2173\u2175-\u2178\u217a\u217b\u24a4\u24be\u24d8\u337a\u33cc\u33d5\ufb01\ufb03\uff29\uff49]',
2513 'j': '[Jj\u0132-\u0135\u01c7-\u01cc\u01f0\u02b2\u1d36\u2149\u24a5\u24bf\u24d9\u2c7c\uff2a\uff4a]',
2514 'k': '[Kk\u0136\u0137\u01e8\u01e9\u1d37\u1d4f\u1e30-\u1e35\u212a\u24a6\u24c0\u24da\u3384\u3385\u3389\u338f\u3391\u3398\u339e\u33a2\u33a6\u33aa\u33b8\u33be\u33c0\u33c6\u33cd-\u33cf\uff2b\uff4b]',
2515 'l': '[Ll\u0139-\u0140\u01c7-\u01c9\u02e1\u1d38\u1e36\u1e37\u1e3a-\u1e3d\u2112\u2113\u2121\u216c\u217c\u24a7\u24c1\u24db\u32cf\u3388\u3389\u33d0-\u33d3\u33d5\u33d6\u33ff\ufb02\ufb04\uff2c\uff4c]',
2516 'm': '[Mm\u1d39\u1d50\u1e3e-\u1e43\u2120\u2122\u2133\u216f\u217f\u24a8\u24c2\u24dc\u3377-\u3379\u3383\u3386\u338e\u3392\u3396\u3399-\u33a8\u33ab\u33b3\u33b7\u33b9\u33bd\u33bf\u33c1\u33c2\u33ce\u33d0\u33d4-\u33d6\u33d8\u33d9\u33de\u33df\uff2d\uff4d]',
2517 'n': '[Nn\xd1\xf1\u0143-\u0149\u01ca-\u01cc\u01f8\u01f9\u1d3a\u1e44-\u1e4b\u207f\u2115\u2116\u24a9\u24c3\u24dd\u3381\u338b\u339a\u33b1\u33b5\u33bb\u33cc\u33d1\uff2e\uff4e]',
2518 'o': '[Oo\xba\xd2-\xd6\xf2-\xf6\u014c-\u0151\u01a0\u01a1\u01d1\u01d2\u01ea\u01eb\u020c-\u020f\u022e\u022f\u1d3c\u1d52\u1ecc-\u1ecf\u2092\u2105\u2116\u2134\u24aa\u24c4\u24de\u3375\u33c7\u33d2\u33d6\uff2f\uff4f]',
2519 'p': '[Pp\u1d3e\u1d56\u1e54-\u1e57\u2119\u24ab\u24c5\u24df\u3250\u3371\u3376\u3380\u338a\u33a9-\u33ac\u33b0\u33b4\u33ba\u33cb\u33d7-\u33da\uff30\uff50]',
2520 'q': '[Qq\u211a\u24ac\u24c6\u24e0\u33c3\uff31\uff51]',
2521 'r': '[Rr\u0154-\u0159\u0210-\u0213\u02b3\u1d3f\u1d63\u1e58-\u1e5b\u1e5e\u1e5f\u20a8\u211b-\u211d\u24ad\u24c7\u24e1\u32cd\u3374\u33ad-\u33af\u33da\u33db\uff32\uff52]',
2522 's': '[Ss\u015a-\u0161\u017f\u0218\u0219\u02e2\u1e60-\u1e63\u20a8\u2101\u2120\u24ae\u24c8\u24e2\u33a7\u33a8\u33ae-\u33b3\u33db\u33dc\ufb06\uff33\uff53]',
2523 't': '[Tt\u0162-\u0165\u021a\u021b\u1d40\u1d57\u1e6a-\u1e71\u1e97\u2121\u2122\u24af\u24c9\u24e3\u3250\u32cf\u3394\u33cf\ufb05\ufb06\uff34\uff54]',
2524 'u': '[Uu\xd9-\xdc\xf9-\xfc\u0168-\u0173\u01af\u01b0\u01d3\u01d4\u0214-\u0217\u1d41\u1d58\u1d64\u1e72-\u1e77\u1ee4-\u1ee7\u2106\u24b0\u24ca\u24e4\u3373\u337a\uff35\uff55]',
2525 'v': '[Vv\u1d5b\u1d65\u1e7c-\u1e7f\u2163-\u2167\u2173-\u2177\u24b1\u24cb\u24e5\u2c7d\u32ce\u3375\u33b4-\u33b9\u33dc\u33de\uff36\uff56]',
2526 'w': '[Ww\u0174\u0175\u02b7\u1d42\u1e80-\u1e89\u1e98\u24b2\u24cc\u24e6\u33ba-\u33bf\u33dd\uff37\uff57]',
2527 'x': '[Xx\u02e3\u1e8a-\u1e8d\u2093\u213b\u2168-\u216b\u2178-\u217b\u24b3\u24cd\u24e7\u33d3\uff38\uff58]',
2528 'y': '[Yy\xdd\xfd\xff\u0176-\u0178\u0232\u0233\u02b8\u1e8e\u1e8f\u1e99\u1ef2-\u1ef9\u24b4\u24ce\u24e8\u33c9\uff39\uff59]',
2529 'z': '[Zz\u0179-\u017e\u01f1-\u01f3\u1dbb\u1e90-\u1e95\u2124\u2128\u24b5\u24cf\u24e9\u3390-\u3394\uff3a\uff5a]'
2530};
2531
2532
2533
2534 //------------------------------------------//
2535
2536// Static Images
2537
2538var csnImageLarge = "data:image/png;base64,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";
2539
2540var csmImageLarge = "data:image/png;base64,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";
2541
2542var csyImageLarge = "data:image/png;base64,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";
2543
2544var csnImage = "data:image/png;base64,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";
2545
2546var csmImage = "data:image/png;base64,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";
2547
2548var csyImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQcAAAAXCAYAAAAGCoqIAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sBBAUkNae/H8UAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAFIElEQVR42u2cXWgcVRTHf7vdEJuq8asKUhGqaHwQIxR9aLEqokjDvgipiCiUShVFIoFbRaPGKMWL0koFv6JoBdH4EALxCy3iR0R9EUHFKm2Rgj4J1X6Y0Oj6MHd1Ojuzc/eeuztJev+wkL2cc8//fMzZycyZWcZigGIlaykxwzECll6sQn4XJComOTcBLwGn58gfAlah+TMlwaPAwxl6vwADaL5L6DwAjADLm9g8DLwOXADcENOtWfi3AxhG80/C7pVACc2XOUV7B3AWmm2xNdtYAXwGVNEcFMdZEivZgfsQ8CBwUo7kLPAEmsc7yjk9R+6cO9MMJXWVVht+/TX8yubrCuBj4GjO5q80NAZFBUU/UGqiVwL6UaYZ/Y8u4Kccm+PANcD1ifUx4Nsc3Sy7bwNbLNK40RR3HHOWsfoZ+ALoia25x1kWKwnKwB4LuT1gmqAPzortKFY75kjCWXLQSzhLasO3vxuBkfpB8xywC80Kh5A8C9yM5rQmZw6gOAisA+6MrW41dvtjclH308zG1oZSdhxu0M22+2bC7nlA1cK39f+dXdWhmQamEzYaOadDEuetlv4Oef6ds7Prn/MQcC+wrOUcyThLIOHc/tqwx3qgUj9z6EkcPK1gC9BrIdeb8mudZvcv88mDLefejLOEM6z/7cqHb86+dSUoknPZMUdFxaoozr79rdg6EhAQcAIiNIeAgIDQHAICAkJzCAgI8NgcJgX7HBDI2NidEOhm2bUZuNnXhphPtll3YglxPiDI0WRBx1RRnH36uy/eHF4EbnXc6FdgwEJuwMjGkWb3kPnEcTuw00LX1i7YXd3dAOy3kNtlPnmQxNlWNy1WEhTF2bau0nIk4SxBUZx9+7sB2F8Sb6M4E83vTrKKbjRzCZkbgRqa9xPrx8sqeoBtRPeVm2EnMILmj5juVWg+teTcyLFRJpoA1Ba3MxWXE81JnNtE6mXgLnTs7KY1f+9D87eXMlGUge1OdlvjfD86NgCkOJVo0M1F152zLFbunGW14d9fRXfZ/DGOchq+APgKxcUWxvqArxOr3zfoat5LaQx9wA8NutBnwa9ENKIbx21W/kbDTU9a2HgaeMpiv3HgZJpPk2ahFX+LwHLgGUfOl6Tk93ALdrVHzhK4c5bVRjv8vaJOrIZiyrFb1lDstZDb2/A8RCd0szlPWci9ZfUMR7RfzZvdvDgr3kUxjWLVgrl6lRYrSX4ldjuh255YTXXcbrrcJhS1+AXJqsDsaoFMu3WzYOPvYBtS5CPO15r/C3ejOGeBtIfBNuSXNudocIHFqlqQ3SSeh3Arc7Gi/lTdRcCHKKtR8IAAW3SF5rBYET1yW3/I7VLgA3MxLCDAG0JzWLwNYgx4xHxbA7xj7g4EBITmEBoEj8UaxDpgCkV3CEyAsK5KaEr15nAUeMFxqzeAIxZyR4xsEvMWuvMtrudB4q+Eh9TufEaDeNR8uw6YSHm5TZGY9xi/pQzfNSlGBcVK4DXg6pzbHMeA89H8lljfBKyxeE3cMPBqYn0W+NyC5yfAWkfd42Hv7w7gR+zu06fxc7WbFedsfzWjKDBNoko0rXmLlwpR3ANsBi5ziJV7fiV2ZZw7Hytpbfj213Aom451IdEgSjN0AXenFOYcmhnyXxM3kzJpOIbdswATRtZFN61D2/i7mei1XR858nO1mx7nPH81o8Ao0WvAvvH4A3IK5A65ZcVKkl+JXYluEbGS1kZR/p7AUJwtmBwNsVrodhcj5w7a/RfDC9PXGb9e8gAAAABJRU5ErkJggg==";
2549
2550var pencilImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAABuUlEQVR4nH3Q7y8CARgH8OeuWIc40xot1dBoTdxmvGSYeREvGP+DFzYvvOONF94wr73zztJmfsww8pvGzGzMSpmk3HU4ZcmVu67zQvOj0vP68933eR5EFEXIOoJ1BcVzRb0GrTAAAJpdH1isEl2xoCqK+0h++xAAkCwNs3OWulqTjKE0IiKQwfgNjeTj/wZmLXNEfb3D6QwyjCnKG0PxmIOKXNxnDkSOJ5hC/ZkLeQxQ5Vrtid3ecEUT7uirUZ3hBuF4tKAipFN7ysR1hVK5s2nDMGySvnK3VBELk6kNidMxVBsDmQIcwyCDrTPz7p1pY3VNo9MuLC+lHi0cDEmqsW8NHIATpvdwW6j5S/95K78/mK4TIQgiqm/90xA+n2ElFF6kED0DWPGPXmT0vePu3zsnG5C8nBJ1B8eA11fw5k1qm9CeopMNLOPFxIswzQjPNPfwgL1dy7m9+YCqf4JM/6EUACB8+ZGTn3hx8M8BNMa5Irj3qbx/ypeuAUDKsuzK0W2rMsbfuTwv0ai8tMHc12jszKgBQOr3++eX7ZvvZJ+5Td/dVWlq+o8mAwGSqjEYenpHCILITr/mE0lR3IGM9+0SAAAAAElFTkSuQmCC";
2551
2552// useful way to init string
2553
2554var abc = <>
2555xxxxx
2556 </>;
2557
2558
2559document.body.addEventListener('mouseover',csnHighlight,true);
2560document.body.addEventListener('mouseout',csnDeHighlight,true);
2561
2562document.body.addEventListener('mousedown',csnStartDragging,true);
2563document.body.addEventListener('mouseup',csnStopDragging,true);
2564document.body.addEventListener('click',csnSingleClick,true);
2565
2566//document.body.addEventListener('keydown',csnKeyPress,true);
2567//document.body.addEventListener('keyup',csnKeyPress,true);
2568document.body.addEventListener('keypress',csnKeyPress,true);
2569
2570/*
2571var frames = document.getElementsByTagName("iframe");
2572for (var i=0; i<frames.length; i++) {
2573 var frame = frames[i];
2574 frame.addEventListener('mouseover',csnHighlight,true);
2575 frame.addEventListener('mouseout',csnDeHighlight,true);
2576
2577 frame.addEventListener('mousedown',csnStartDragging,true);
2578 frame.addEventListener('mouseup',csnStopDragging,true);
2579 frame.addEventListener('click',csnSingleClick,true);
2580}
2581*/
2582
2583document.addEventListener('load',csnInit,true);
2584
2585
2586
2587 //--------------------===========================--------------------//
2588
2589
2590var usernameNamespace="jcdl2011";
2591var crowdsourceNamespace="csn";
2592
2593function sw_clean(html)
2594{
2595 html = html.replace(/<div.*?sw-cursor.*?><\/div>/g,"");
2596 html = html.replace(/<div.*?sw-protect.*?>.*?<\/div>/g,"");
2597 html = html.replace(/<div.*?sw-protect.*?\/>/g,"");
2598
2599 return html;
2600}
2601
2602function sw_edited()
2603{
2604 return (de.Changes.getChangedEditableSections().length>0);
2605}
2606
2607
2608var popupWidth = 100;
2609var popupHeight = 20;
2610
2611function getScrollXY()
2612{
2613 var scrOfX = 0, scrOfY = 0;
2614 if( typeof( window.pageYOffset ) == 'number' ) {
2615 //Netscape compliant
2616 scrOfY = window.pageYOffset;
2617 scrOfX = window.pageXOffset;
2618 } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
2619 //DOM compliant
2620 scrOfY = document.body.scrollTop;
2621 scrOfX = document.body.scrollLeft;
2622 } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
2623 //IE6 standards compliant mode
2624 scrOfY = document.documentElement.scrollTop;
2625 scrOfX = document.documentElement.scrollLeft;
2626 }
2627 return [ scrOfX, scrOfY ];
2628}
2629
2630function set_popup_top(popUpDivVar,sy)
2631{
2632 var window_height = window.innerHeight;
2633
2634 var popUpDiv = document.getElementById(popUpDivVar);
2635 var popUpDiv_top=window_height/2-(popupHeight/2);
2636 popUpDiv.style.top = (sy + popUpDiv_top) + 'px';
2637}
2638
2639function set_popup_left(popUpDivVar,sx)
2640{
2641 var window_width = window.innerWidth;
2642
2643 var popUpDiv = document.getElementById(popUpDivVar);
2644 var window_left=window_width/2-(popupWidth/2);
2645 popUpDiv.style.left = (sx + window_left) + 'px';
2646}
2647
2648function show_popup(div_id)
2649{
2650 var [ sx, sy ] = getScrollXY();
2651
2652 set_popup_top(div_id,sy);
2653 set_popup_left(div_id,sx);
2654
2655 var el = document.getElementById(div_id);
2656 el.style.display = 'block';
2657}
2658
2659function hide_popup(div_id)
2660{
2661 var el = document.getElementById(div_id);
2662 el.style.display = 'none';
2663}
2664
2665var starting_html = sw_clean(document.body.innerHTML);
2666var live_html = null;
2667
2668
2669
2670function add_title_metadata(namespace,title,filename)
2671{
2672 if (title==null) {
2673 title = document.title.replace(/ \[seaweed edited\]$/,"");
2674 }
2675
2676 var url = "http://www.nzdl.org/custom/seaweed-gm/cgi-bin/metadata-server.pl";
2677 var data = "a=set-import-metadata";
2678 data += "&un=" + namespace;
2679 data += "&pw=" + namespace;
2680 data += "&c=" + namespace;
2681
2682 data += "&f=" + filename;
2683 data += "&metaname=dc.Title&metavalue=" + title;
2684 data += "&metamode=override";
2685
2686 var encoded_data = encodeURI(data);
2687
2688 url += "?" + encoded_data;
2689
2690 // alert("url = " + url);
2691
2692 // should change this to a GET
2693 GM_xmlhttpRequest( { method: 'GET',
2694 url: url,
2695 onerror: function(rsp) { alert("Error setting metadata"); }
2696 } );
2697
2698}
2699
2700
2701
2702function _save_doc_html(namespace,title,html,filename)
2703{
2704 if (!seaweedActivated) {
2705 init_seaweed();
2706 seaweedActivated = true;
2707 }
2708
2709 var url = "http://www.nzdl.org/custom/seaweed-gm/cgi-bin/swio.pl";
2710 var data = "cmd=store-file";
2711 data += "&un=" + namespace;
2712 data += "&pw=" + namespace;
2713 data += "&c=" + namespace;
2714 data += "&f=" + filename;
2715
2716 //alert("data = " + data);
2717
2718 var encoded_html = html;
2719
2720 encoded_html = encoded_html.replace(/&/g, "%26");
2721 encoded_html = encoded_html.replace(/</g, "%3C");
2722 encoded_html = encoded_html.replace(/>/g, "%3E");
2723 encoded_html = encoded_html.replace(/\"/g,"%22");
2724 encoded_html = encoded_html.replace(/\;/g,"%3B");
2725 encoded_html = encoded_html.replace(/\+/g,"%2B");
2726
2727 data += "&html=" + encoded_html
2728
2729 var encoded_data = encodeURI(data);
2730
2731 //alert("encoded data = " + encoded_data);
2732
2733
2734 var popup_div = document.getElementById("popUpDiv");
2735 popup_div.innerHTML = "Saving ...";
2736 show_popup('popUpDiv');
2737
2738 GM_xmlhttpRequest( { method: 'POST',
2739 url: url,
2740 headers: {'Content-type':'application/x-www-form-urlencoded'},
2741 data: encoded_data,
2742 onload: function(rsp) { add_title_metadata(namespace,title,filename) ; save_done(rsp) },
2743 onerror: save_failed } );
2744}
2745
2746
2747
2748function save_mapping(orig_name,new_name)
2749{
2750 var timestamp = new Date().getTime();
2751 var filename = timestamp + ".html";
2752 var title = timestamp + " Crowdsource Mapping";
2753
2754 var html = '<html>\n';
2755 html += ' <head>\n';
2756 html += ' <title>'+title+'</titile>\n';
2757 html += ' <meta name="gs.OrigName" content="'+orig_name+'" />\n';
2758 html += ' <meta name="gs.FoldedName" content="'+new_name+'" />\n';
2759 html += ' </head>\n';
2760 html += ' <body>\n';
2761 html += ' <p>\n';
2762 html += ' '+orig_name+'-&gt;'+new_name+'\n';
2763 html += ' </p>\n';
2764 html += ' </body>\n';
2765 html += '</html>\n';
2766
2767 _save_doc_html(crowdsourceNamespace,title,html,filename);
2768}
2769
2770
2771function save_live_doc_html()
2772{
2773 live_html = sw_clean(document.body.innerHTML);
2774
2775 var location = new String(document.location);
2776 var filename = location.replace(/^[a-z]+:\/\//,"");
2777
2778 if (filename.match(/\/$/)) {
2779 filename += "index.html";
2780 }
2781
2782 var title = document.title.replace(/ \[seaweed edited\]$/,"");
2783 var head = "<head><title>" + title + "</title></head>";
2784 var encoded_live_html = "<html>" + head + "<body>" + live_html + "</body></html>";
2785
2786 alert("encoded live html being sent");
2787
2788 _save_doc_html(usernameNamespace,title,encoded_live_html,filename);
2789
2790}
2791
2792
2793
2794function revert_to_orig_doc()
2795{
2796
2797 GM_xmlhttpRequest( { method: 'GET',
2798 url: document.location.toString(),
2799 onload: revert_done,
2800 onerror: revert_failed } );
2801}
2802
2803
2804function revert_done(rsp)
2805{
2806 var status = rsp.status;
2807 if (status == 200) {
2808 var response = rsp.responseText;
2809
2810 //alert("response = " + response);
2811
2812 var inner_body = response.match(/<body>(.*)<\/body>/i);
2813 //alert("inner body = " + inner_body);
2814
2815 var response_body = response.replace(/^.*<body>(.*)<\/body>.*$/i,"$1");
2816
2817 document.body.innerHTML = response_body;
2818
2819 init_seaweed();
2820 starting_html = sw_clean(document.body.innerHTML);
2821 }
2822 else {
2823 revert_failed(rsp);
2824 }
2825}
2826
2827
2828
2829function revert_failed(rsp)
2830{
2831 alert("Revert failed: Status = " + rsp.status + ";\n"+ rsp.statusText);
2832 init_seaweed();
2833}
2834
2835
2836
2837function unload_precheck(event)
2838{
2839 var curr_html = sw_clean(document.body.innerHTML);
2840
2841 if (curr_html != starting_html) {
2842// if (sw_edited()) {
2843
2844 event.returnValue = "The document has been edited.";
2845 event.preventDefault();
2846 }
2847}
2848
2849
2850
2851function save_done(rsp)
2852{
2853 var status = rsp.status;
2854 if (status == 200) {
2855 var response = rsp.responseText;
2856
2857 if (response.match(/^Error:/i)) {
2858 alert("Save failed for:\n\n " + document.location + "\n\n" + response);
2859 }
2860 else {
2861 if (live_html!=null) {
2862 starting_html = sw_clean(live_html);
2863 }
2864
2865
2866 //alert("popup" + hide_popup);
2867
2868 var popup_div = document.getElementById("popUpDiv");
2869 popup_div.innerHTML = "Saving ... Done";
2870 setTimeout(hide_popup,500,"popUpDiv");
2871
2872 if (live_html!=null) {
2873 de.Changes.clear();
2874 html_edited = false;
2875 document.title = document.title.replace(/ \[seaweed edited\]$/,"");
2876 }
2877 }
2878 }
2879 else {
2880 save_failed(rsp);
2881 }
2882}
2883
2884function save_failed(rsp)
2885{
2886 alert("Save failed: Status = " + rsp.status + ";\n"+ rsp.statusText);
2887}
2888
2889
2890// -----------------------------------------------------
2891
2892
2893function restore_live_doc_html()
2894{
2895 var location = new String(document.location);
2896 var filename = location.replace(/^[a-z]+:\/\//,"");
2897
2898 var url = "http://www.nzdl.org/custom/seaweed-gm/cgi-bin/swio.pl?";
2899 url += "cmd=restore-file";
2900 url += "&un=" + usernameNamespace;
2901 url += "&pw=" + usernameNamespace;
2902 url += "&c=" + usernameNamespace;
2903 url += "&f=" + filename;
2904
2905 GM_xmlhttpRequest( { method: 'GET',
2906 url: url,
2907 onload: load_done,
2908 onerror: load_failed } );
2909
2910}
2911
2912var html_edited = false;
2913
2914function init_seaweed()
2915{
2916 //alert("Init Seaweed, url = " + document.location);
2917 de.init();
2918 de.Changes.clear();
2919
2920 de.UndoMan.addObserver({
2921 onBeforeExec : function() {
2922 if (!html_edited) {
2923 document.title += " [seaweed edited]";
2924 }
2925 html_edited = true;
2926 }
2927 });
2928
2929 var popup_div = document.createElement("div");
2930 popup_div.setAttribute("id","popUpDiv");
2931 popup_div.setAttribute("class","sw-protect");
2932
2933
2934 popup_div.setAttribute("style",
2935 "position:absolute; \
2936 display:none; \
2937 background-color:#363736; \
2938 color: white; \
2939 z-index: 9002;");
2940
2941 popup_div.style.width = popupWidth + "px";
2942 popup_div.style.height = popupHeight + "px";
2943
2944 document.body.appendChild(popup_div);
2945}
2946
2947function load_done(rsp)
2948{
2949 var status = rsp.status;
2950 if (status == 200) {
2951 var response = rsp.responseText;
2952
2953 if (response.match(/^Error:/i)) {
2954 alert("Load failed for:\n\n " + document.location + "\n\n" + response);
2955 }
2956 else {
2957 if (response != "") {
2958 document.body.innerHTML = response;
2959 }
2960 init_seaweed();
2961 starting_html = sw_clean(document.body.innerHTML);
2962
2963 }
2964 }
2965 else {
2966 load_failed(rsp);
2967 }
2968}
2969
2970
2971function load_failed(rsp)
2972{
2973 alert("Load failed: Status = " + rsp.status + ";\n"+ rsp.statusText);
2974 init_seaweed();
2975}
2976
2977
2978function loaded()
2979{
2980 restore_live_doc_html();
2981}
2982
2983
2984//window.addEventListener('beforeunload',unload_precheck,true);
2985
2986//window.addEventListener('load',init_seaweed,false);
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009(function(){var H,J;de={version:"0.0.1",m:[],collections:{},events:{},onready:(function(){var a0=[];function a1(){if(a0){for(var a2 in a0){a0[a2]()}a0=0}}if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);a1()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);a1()}});if(document.documentElement.doScroll&&window==window.top){(function(){if(!a0){return}try{document.documentElement.doScroll("left")}catch(a2){setTimeout(arguments.callee,0);return}a1()})()}A(window,"load",function(){a1();ad(window,"load",arguments.callee)})}}return function(a2){if(a0){a0.push(a2)}else{a2()}}})(),init:function(){if(!de.m){return}H=document.body;var a3=de.m;var a6;do{a6=false;for(var a4=0;a4<a3.length;a4++){var a5=a3[a4];if(!a5.depends){continue}for(var a2=0;a2<a5.depends.length;a2++){for(var a1=a4+1;a1<a3.length;a1++){if(a5.depends[a2]==a3[a1].name){var a0=a3;a3=a0.slice(0,a4).concat(a0.slice(a4+1,a1+1).concat([a5].concat(a0.slice(a1+1))));a6=true;break}}if(a6){break}}if(a6){break}}}while(a6);for(a4 in a3){if(a3[a4].init){a3[a4].init()}}delete de.m}};function L(a1,a2){var a0=Array.prototype.slice.call(arguments);a0.splice(0,2);de.m.push({name:a1,init:a2,depends:a0})}function D(a3,a1,a0){if(a0!==false){a0=true}for(var a2 in a1){if(a0||typeof a3[a2]=="undefined"){a3[a2]=a1[a2]}}return a3}function aZ(a3){var a0=a3.split(",");var a2={};for(var a1 in a0){a2[a0[a1]]=true}return a2}function N(a0){return document.createElement(a0)}var aU=function(){var a0=function(){this.length=0;this.head=null;this.tail=null};a0.prototype={add:function(a3){var a2={data:a3,next:null,prev:null};if(this.length==0){this.head=a2;this.tail=a2}else{this.tail.next=a2;a2.prev=this.tail;this.tail=a2}this.length++},remove:function(a2){var a3=this.head;while(a3){if(a3.data==a2){a1(this,a3);return true}a3=a3.next}return false},removeAtIndex:function(a2){if(a2>-1&&a2<this.length){var a4;if(a2<(this.length/2)){a4=this.head;for(var a3=0;a3<a2;a3++){a4=a4.next}}else{a4=this.tail;for(var a3=this.length-1;a3>a2;a3--){a4=a4.prev}}a1(this,a4);return a4.data}return null},pop:function(){return this.removeAtIndex(this.length-1)},chop:function(a5){var a4=this.tail,a3=this.length;while(a4&&a4!=a5){a4=a4.prev;a3--}if(!a4){return false}if(a4.next){var a2=a4.next;while(a2){a2.prev.next=null;a2.prev=null;a2=a2.next}this.tail=a4;this.length=a3}return true},clear:function(){while(this.head){var a2=this.head;this.head=a2.next;a2.prev=a2.next=null}this.tail=null;this.length=0},iterate:function(a3){var a4=this.head;while(a4){var a2=a3(a4.data);if(a2===false){break}a4=a4.next}}};a0.prototype.push=a0.prototype.add;function a1(a2,a3){if(a2.length==1){a2.clear();return}if(a3==a2.head){a2.head=a3.next;a2.head.prev=null;a3.next=null}else{if(a3==a2.tail){a2.tail=a3.prev;a2.tail.next=null;a3.prev=null}else{a3.prev.next=a3.next;a3.next.prev=a3.prev;a3.next=a3.prev=null}}a2.length--}return a0}();de.collections.DoublyLinkedList=aU;function h(a1){var a3=[],a2;D(a1,{fireEvent:function(a8){if(a3.length>0){var a7,a5,a4,a6=Array.prototype.slice.call(arguments);a6.shift();a2=[];for(a7 in a3){a5=a3[a7];if(typeof a5.ref["on"+a8]=="function"){a5.ref["on"+a8].apply(a5.context,a6)}}a4=a2;a2=0;for(a7 in a4){this.removeObserver(a4[a7])}}},addObserver:function(a5,a6,a4){if(a0(a5)!=-1){return}a5={ref:a5,context:a6||a5};if(a4){a3.unshift(a5)}else{a3.push(a5)}},removeObserver:function(a4){if(a2){a2.push(a4)}else{var a5=a0(a4);if(a5>=0){a3.splice(a5,1)}}}});function a0(a4){for(var a5=0;a5<a3.length;a5++){if(a3[a5].ref==a4){return a5}}return -1}}de.model=h;L("Platform",function(){var a0=N("p");a0.style.margin="0 0 0 0";a0.style.padding="0 0 0 0";a0.style.textAlign="";var a1=N("span");a1.innerHTML="X";a0.appendChild(a1);H.appendChild(a0);_localeDirection=a1.offsetLeft<(a0.offsetWidth-(a1.offsetLeft+a1.offsetWidth))?"ltr":"rtl";H.removeChild(a0)});var W,E,G,p,K,d={UNKNOWN:-1,FIREFOX:1,OPERA:2,IE:3,CHROME:4,SAFARI:6,KONQUEROR:8,NETSCAPE:9,WINDOWS:1,MAC:2,LINUX:3,GECKO:1,TRIDENT:2,WEBKIT:3,KHTML:4,PRESTO:5};(function(){var a4=[{string:navigator.userAgent,subString:"Chrome",id:4,versionSearch:"Chrome"},{string:navigator.vendor,subString:"Apple",id:6,versionSearch:"Version"},{prop:window.opera,id:2,versionSearch:"Opera"},{string:navigator.vendor,subString:"KDE",id:8,versionSearch:"Konqueror"},{string:navigator.userAgent,subString:"Firefox",id:1,versionSearch:"Firefox"},{string:navigator.userAgent,subString:"Netscape",id:9,versionSearch:"Netscape"},{string:navigator.userAgent,subString:"MSIE",id:3,versionSearch:"MSIE"},{string:navigator.userAgent,subString:"Mozilla",id:9,versionSearch:"Mozilla"}];var a2=[{string:navigator.platform,subString:"Win",id:1},{string:navigator.platform,subString:"Mac",id:2},{string:navigator.platform,subString:"Linux",id:3},];var a1=[{string:navigator.userAgent,subString:"MSIE",id:2,versionSearch:"MSIE"},{string:navigator.userAgent,subString:"WebKit",id:3,versionSearch:"WebKit"},{string:navigator.userAgent,subString:"KHTML",id:4,versionSearch:"KHTML"},{string:navigator.userAgent,subString:"Gecko",id:1,versionSearch:"rv"},{prop:window.opera,id:5,versionSearch:"Presto"},];function a0(a8){for(var a5 in a8){var a6=a8[a5].string,a7=a8[a5].prop;if(a6){if(a6.indexOf(a8[a5].subString)!=-1){return a8[a5]}}else{if(a7){return a8[a5]}}}return null}function a3(a7,a5){if(!a5){return null}var a6=a7.indexOf(a5);if(a6==-1){return null}return parseFloat(a7.substring(a6+a5.length+1))}W=a0(a2);W=W?W.id||-1:-1;E=a0(a4);G=-1;if(E){G=a3(navigator.userAgent,E.versionSearch)||a3(navigator.appVersion,E.versionSearch);E=E.id}else{E=-1}p=a0(a1);K=-1;if(p){K=a3(navigator.userAgent,p.versionSearch);p=p.id}else{p=-1}})();D(de,{Platform:d,os:W,browser:E,browserVersion:G,engine:p,engineVersion:K,localDirection:null});var aI=function(){alert("hit!!!")};(function(){var a3={},a2=new aU(),a1=null,a0=0;aI=function(a4,a5){a3[a4]=a5};de.UndoMan={maxHistoryCount:100,ExecFlag:{GROUP:1,UPDATE_SELECTION:2,DONT_STORE:4},registerAction:aI,execute:function(a5,bb){var ba=Array.prototype.slice.call(arguments);if(typeof a5!="number"){a5=2;bb=ba[0];ba.shift()}else{ba.splice(0,2)}if(a0){a5=4}if((a5&1)&&!a1){aj("Cannot group action to nothing")}if(!a3[bb]){aj('Unknown action called "'+bb+'"')}var bd,a7=a3[bb],bc=new av(bb,a5,de.selection.getRange(false),de.selection.getRange(true));if(bc.selBefore){var a9=de.doc.getEditProperties(bc.selBefore.startNode);if(a9&&a9.afRE){var a8=a9.afRE.test(bb.toLowerCase()+(bb=="Format"?ba[0].toLowerCase():""));if(a8!=a9.afInclusive){return}}}this.fireEvent("BeforeExec",bc);a0++;try{bd=a7.exec.apply(bc,ba)}finally{a0--}if(!(a5&4)){var a6=aP();if(!a6||a6.length==0){this.fireEvent("AfterExec",bc);if(bc.selBefore){de.selection.setSelection(bc.selBefore.startNode,bc.selBefore.startIndex,bc.selBefore.endNode,bc.selBefore.endIndex,true)}return bd}if(!a1){a2.clear()}else{if(a1.next){a2.chop(a1)}}bc.opList=a6;a2.push(bc);a1=a2.tail;if(a2.length>this.maxHistoryCount&&this.maxHistoryCount>-1&&!(a7.flags&1)){a2.removeAtIndex(0)}}if(a5&2){var a4=bc.selAfter;if(!a4){de.selection.clear()}else{de.selection.setSelection(a4.startNode,a4.startIndex,a4.endNode,a4.endIndex,true)}}else{delete bc.selBefore;if(bc.selAfter){delete bc.selAfter}}delete bc.selBeforeOrdered;this.fireEvent("AfterExec",bc);return bd},undo:function(){do{if(!a1){return}var a4=a1.data;this.fireEvent("BeforeUndo",a4);try{u(a4.opList);a1=a1.prev}catch(a6){this.clear();throw a6}if(a4.flags&2){var a5=a4.selBefore;if(!a5){de.selection.clear()}else{de.selection.setSelection(a5.startNode,a5.startIndex,a5.endNode,a5.endIndex,true)}}this.fireEvent("AfterUndo",a4)}while(a1&&(a4.flags&1))},redo:function(){var a4=true;while(1){if(a2.length==0||a1==a2.tail){return}var a7=a1?a1.next:a2.head;var a5=a7.data;if(!a4&&!(a5.flags&1)){return}a1=a7;this.fireEvent("BeforeRedo",a5);try{aW(a5.opList)}catch(a6){this.clear();throw a6}if(a5.selAfter){var a8=a5.selAfter;if(!a8){de.selection.clear()}else{de.selection.setSelection(a8.startNode,a8.startIndex,a8.endNode,a8.endIndex,true)}}a4=false;this.fireEvent("AfterRedo",a5)}},clear:function(){a2.clear();a1=null},hasUndo:function(){return a1!=null},hasRedo:function(){return a2.length>0&&a1!=a2.tail}};h(de.UndoMan)})();var av=function(){var a0=function(a2,a1,a4,a3){this.name=a2;this.flags=a1;this.selBefore=a4;this.selBeforeOrdered=a3};a0.prototype={getEditSection:function(){if(this.opList){for(var a2 in this.opList){var a4=this.opList[a2];for(var a3 in a4){if(ap(a4[a3])&&aK(H,a4[a3])){var a1=de.doc.getEditSectionContainer(a4[a3]);if(a1){return a1}}}}}}};return a0}();var ai=document.elementFromPoint?function(a0,a2){switch(p){case 1:case 2:return document.elementFromPoint(a0,a2);default:var a1=aR();return document.elementFromPoint(a0+a1.left,a2+a1.top)}}:function(a0,a3){var a2=null;a1(H);return a2;function a1(a4){if(a4.childNodes.length>0){var a6=a4.firstChild;while(a6){if(a1(a6)){return true}a6=a6.nextSibling}}if(a4.nodeType==1&&(a4.offsetLeft||a4.offsetLeft==0)){var a5=f(a4);if(a3>=a5.y&&a3<=(a5.y+a4.offsetHeight)&&a0>=a5.x&&a0<=(a5.x+a4.offsetWidth)){a2=a4;return true}}return false}};function al(a0){var a3=0,a2=0,a1=0;do{if(a0.offsetLeft||a0.offsetTop){if(a0==H){if(!a1){a3+=Math.abs(a0.offsetLeft);a2+=Math.abs(a0.offsetTop)}}else{a3+=a0.offsetLeft;a2+=a0.offsetTop}}a1|=(a0.style&&a0.style.position=="fixed")}while(a0=a0.offsetParent);if(!a1){var a4=aR();a3-=a4.left;a2-=a4.top;if(p==2){a3+=H.clientLeft;a2+=H.clientTop}}return{x:a3,y:a2}}var f=al;function aV(a2,a0){var a1=a0.nextSibling;if(!a1){a0.parentNode.appendChild(a2)}else{a0.parentNode.insertBefore(a2,a1)}return a2}function aX(a0,a3,a1){var a2=-1;var a4=a0.firstChild;while(++a2!=a1&&a4){a4=a4.nextSibling}if(a2==a1){if(a2==a0.childNodes.length){a0.appendChild(a3)}else{a0.insertBefore(a3,a4)}return a3}return null}function x(a1){var a0=0;ar(a1,true,function(a2){a0+=ah(a2)});return a0}function o(a1){var a2={};for(var a0 in a1){a2[a0]=a1[a0]}return a2}function I(a0,a7,a1,a2,a4){if(!a0){a0=aM(a7,[9,11])}var a3=aO(a7,a0,true,true);var a5=a3.length-1;(function a6(a9){var bb,a8,ba=false;if(a5>0){a5--;bb=a1?a3[a5].nextSibling:a3[a5].previousSibling;if(!a6(a3[a5])){return false}}else{if(a5==0){if(a1&&(!a2||a2.test(X(a9)))){a8=a4(a9);if(a8===false){return a8}ba=(a8===1)}if(!a1&&a9==a7){bb=null}else{bb=a1?a9.firstChild:a9.lastChild}}}if(!ba){while(bb){if(!a6(bb)){return false}bb=(a1)?bb.nextSibling:bb.previousSibling}}if(!a1&&(!a2||a2.test(X(a9)))){if(a4(a9)===false){return false}}return true})(a0)}function ar(a0,a3,a1,a2){I(a0,a3,a1,/^#text$/,a2)}function R(a0,a3,a1,a2){I(a0,a3,a1,null,a2)}function aK(a0,a1){a1=a1.parentNode;while(a1){if(a1==a0){return true}a1=a1.parentNode}return false}function aO(a5,a4,a0,a2){if(a5==a4){return(a0||a2)?[a5]:[]}var a1=a0?[a5]:[];var a3=a5.parentNode;while(a3&&a3!=a4){a1.push(a3);a3=a3.parentNode}if(a2&&a4&&a3==a4){a1.push(a4)}return a1}function j(a4,a1,a2,a0){var a3=null;while(a4){if(a2&&a2(a4)){if(a0){return a4}a3=a4}if(a4.parentNode==a1){break}a4=a4.parentNode}return a2?a3:a4}function w(a2,a1,a0){var a6=aO(a2,null,a0,true);var a5=aO(a1,null,a0,true);var a7=null;for(var a4 in a6){for(var a3 in a5){if(a6[a4]==a5[a3]){return a6[a4]}}}return null}function ag(a2,a0){var a1=null;I(null,a2,a0,null,function(a3){if(a3==a2){return true}a1=a3;return false});return a1}function aM(a2,a1){while(a2.parentNode){if(a1){for(var a0 in a1){if(a2.parentNode.nodeType==a1[a0]){return a2}}}a2=a2.parentNode}return a2}function l(a1){var a0=-1;while(a1){a0++;a1=a1.previousSibling}return a0}function aT(a4,a0){var a3="";var a6=0;var a5,a2;for(a2=0;a2<a4.length;a2++){a5=a4.charAt(a2);var a1=null;switch(a5){case'"':a1="&quot;";break;case"'":a1="&#39;";break;case"&":a1="&amp;";break;case"<":a1="&lt;";break;case">":a1="&gt;";break;default:if(a0&&a5=="\n"){a1="<br>"}else{if(M(a5)&&(a2==0||a2==(a4.length-1)||a4.charAt(a2-1)==" "||a4.charAt(a2+1)==" ")){a1="&nbsp;"}}}if(a1){if((a2-a6)>0){a3+=(a4.substring(a6,a2))}a3+=a1;a6=a2+1}}if((a2-a6)>0){a3+=(a4.substring(a6,a2))}return a3}function a(a1){var a0=N("span");a0.innerHTML=a1;return a0.firstChild.nodeValue}function ab(a0){while(a0){if(a0.nodeType==1){if(a0.style.display=="none"){return false}}a0=a0.parentNode}return true}function aD(a1,a0){while(a1&&a1.nodeType!=1){a1=a1.parentNode}if(!a1){return}if(window.getComputedStyle){return document.defaultView.getComputedStyle(a1,"").getPropertyValue(a0)}else{if(a1.currentStyle){return a1.currentStyle[t(a0)]}}}function ao(a1,a0){if(p==2){a1.style.setAttribute("cssText",a0)}else{a1.setAttribute("style",a0)}}function aJ(a1,a0,a2){if(p==2){a1.style.setAttribute(a0,a2)}else{a1.style[a0]=a2}}function aw(a0){return(p==2?a0.style.getAttribute("cssText"):a0.getAttribute("style"))||""}function r(a3){var a1=aw(a3);if(a1){a1=a1.split(";");for(var a2 in a1){var a0=a1[a2].indexOf(":");if(a0>0&&a0<(a1[a2].length-1)&&/\s*\S+\s*/.test(a1[a2].substr(a0))){return 1}}}}function e(a0){do{var a1=/([A-Z])/.exec(a0);if(a1){a0=a0.substr(0,a1.index)+"-"+a1[1].toLowerCase()+a0.substr(a1.index+1)}}while(a1);return a0}var k=function(){var a0=/^\s*rgb\s*\(\s*(\d+)\%?\s*\,\s*(\d+)\%?\s*\,\s*(\d+)\%?\s*\)\s*$/i,a1={maroon:[128,0,0],red:[255,0,0],orange:[255,165,0],yellow:[255,255,0],olive:[128,128,0],purple:[128,0,128],fuchsia:[255,0,255],white:[255,255,255],lime:[0,255,0],green:[0,128,0],navy:[0,0,128],blue:[0,0,255],aqua:[0,255,255],teal:[0,128,128],black:[0,0,0],silver:[12,12,12],gray:[128,128,128]};return function(a6){if(a6.charAt(0)=="#"){if(a6.length<7){a6+="000000"}return[parseInt(a6.substr(1,2),16),parseInt(a6.substr(3,2),16),parseInt(a6.substr(5,2),16)]}var a3=a0.exec(a6);if(a3){var a5=parseInt(a3[1]),a4=parseInt(a3[2]),a2=parseInt(a3[3]);if(a6.indexOf("%")>-1){if(a5>100){a5=100}a5=(255*a5)/100;if(a4>100){a4=100}a4=(255*a4)/100;if(a2>100){a2=100}a2=(255*a2)/100}else{if(a5>255){a5=255}if(a4>255){a4=255}if(a2>255){a2=255}}return[a5,a4,a2]}return a1[a6.toLowerCase()]||[255,255,255]}}();var ay=function(){var a1={bold:"700",normal:"400"};function a0(a2){return a1[a2.toLowerCase()]||a2}return function(a4,a3,a2){switch(a4){case"backgroundColor":case"borderColor":case"outlineColor":case"color":a3=k(a3);a2=k(a2);return a3[0]==a2[0]&&a3[1]==a2[1]&&a3[2]==a2[2];case"fontWeight":a3=a0(a3);a2=a0(a2);break}return a3==a2}}();function t(a0){do{var a1=a0.indexOf("-");if(a1>-1){a0=(a1==(a0.length-1))?a0.substr(0,a1):a0.substr(0,a1)+a0.charAt(a1+1).toUpperCase()+a0.substr(a1+2)}}while(a1>-1);return a0}function aG(a1){if(a1.outerHTML){return a1.outerHTML}else{var a0=N("span");a0.appendChild(a1.cloneNode(true));return a0.innerHTML}}function Z(){return !(E==3&&G<8)}function T(a2,a3){if(a2.nodeType==1||a2==H){var a1=au(a2);if(a1){var a4=a1.split(" ");for(var a0 in a4){if(a3.test(a4[a0])){return a4[a0]}}}}return null}function au(a0){return a0.className}function am(a1,a0){return E==3?a1.setAttribute("className",a0):a1.className=a0}function U(a2,a0){for(var a1 in a0){if(a0[a1]==a2){return parseInt(a1)}}return -1}function X(a0){return a0.nodeName.toLowerCase()}function ah(a1,a0){if(typeof a0=="undefined"){a0=null}return a1.nodeType==3?a1.nodeValue.length:a0}function ap(a0){return typeof Node=="object"?a0 instanceof Node:(typeof a0=="object"&&typeof a0.nodeType=="number"&&typeof a0.nodeName=="string")}D(de,{visitAllNodes:R,getCommonAncestor:w,getInnerText:function(a0){if(a0.nodeType==3){return a0.nodeValue}return a0.innerText||a0.textContent||""},parseHTMLString:a,insertAfter:aV,insertAt:aX,findClassName:T,getPositionInWindow:f,getOuterHTML:aG,getComputedStyle:aD});(function(){var a0=[];L("Changes",function(){de.Changes.clear();de.doc.addObserver({onSectionAdded:function(a1){a0.push({esNode:a1,initHTML:a1.innerHTML})}})},"Doc");de.Changes={getChangedEditableSections:function(){var a3=[],a8=/(<\s*\w+\s[^>]*?)(?:style|class|id|value)\s*=\s*(?:""|'')([^<]*?>)/i,a5=/(<\s*\w+\s[^>]*?)\s*(?:style|class|id|value)\s*(>|(?:[^=][^<]*?>))/i,a1=/<[^\/][^<>]*?\s[^<>]*>/,a4=/(?:[\t\n\r ]|&nbsp;)/g;ak(false);for(var a6 in a0){var a7=a0[a6];if(a2(a7.esNode.innerHTML)!=a2(a7.initHTML)||a7.dirty){a3.push(a7.esNode)}}ak(true);return a3;function a2(bd){bd=bd.replace(a4," ");var ba,bb,bc,a9="";for(bb=0;bb<(p==5?2:1);bb++){bc=bb==0?a8:a5;while(ba=bc.exec(bd)){bd=bd.substr(0,ba.index)+ba[1]+ba[2]+bd.substr(ba.index+ba[0].length)}}if(ba){while(ba=a1.exec(bd)){a9+=bd.substr(0,ba.index)+ba[0].replace(a4,"");bd=bd.substr(ba.index+ba[0].length)}a9+=bd}else{a9=bd}return de.spell.stripSpellWrapperHTML(a9)}},clear:function(a4){ak(false);if(a4){for(var a2 in a0){if(a0[a2].esNode==a4){a0[a2].initHTML=a4.innerHTML;a0[a2].dirty=false;break}}}else{a0=[];var a1=de.doc.getAllEditSections();for(var a2 in a1){var a3=a1[a2];a0.push({esNode:a3,initHTML:a3.innerHTML})}}ak(true)},dirty:function(a2){for(var a1 in a0){if(!a2||a0[a1].esNode==a2){a0[a1].dirty=true}}},reset:function(){de.UndoMan.clear();for(var a1 in a0){a0[a1].esNode.innerHTML=a0[a1].initHTML}this.clear()}}})();(function(){L("Clipboard",function(){switch(p){case 2:A(document,"keydown",bg);break;case 1:A(document,"keypress",bd);break;case 5:A(document,"keydown",a3);break;case 3:A(document,"copy",a4);A(document,"paste",a9);A(document,"keydown",bn);break}br=N("textarea");ao(br,"width:1px;height:1px;border-style:none");a6=N("div");am(a6,ax);ao(a6,"position:absolute;width:1px;height:1px;display:none;z-index:-500");a6.appendChild(br);H.appendChild(a6)},"events.Events");var bi,a2,a1,br,a6,bh,bb;function bl(bs){var bt="",bu;if(bs.nodeType==3&&aH(bs)){bt=bs.nodeValue.replace(/[\t\n\r]/g," ")}else{if(bs.nodeType==1){switch(X(bs)){case"br":bt+="\n";break;case"li":bt+="\n - ";break;default:if(aL(bs)){bt+="\n"}}bu=bs.firstChild;while(bu){bt+=bl(bu);bu=bu.nextSibling}if(aL(bs)){bt+="\n"}}}return bt}function a8(){var bs=de.selection.getHighlightedDOM();if(!bs){return null}a2=bs;bi=bl(a2);if(aL(a2)){bi=bi.replace(/^\n/,"").replace(/\n$/,"")}a1=false;return bi}function bk(){var bs=a8();if(bs){de.selection.remove()}return bs}function bc(bu){if(!de.cursor.exists()){return}de.selection.remove();var bv=de.cursor.getCurrentCursorDesc();var bs,bx;if(bi){if(!a1){bx=a2}else{if(bi==bu){bx=a2}else{if(bu){bs=bu}else{bx=a2}}}}else{bs=bu}if(bx){bx=null;bs=bi}if(bx||bs){var bt=bv.relIndex;if(bv.isRightOf){bt++}if(X(bv.domNode)=="br"){bt=1}var by=de.doc.getEditSectionContainer(bv.domNode);if(by){var bw=de.doc.getEditProperties(by);if(!bw.singleLine&&bx){}else{if(bs){if(!bw.singleLine&&/\n/.test(bs)){de.UndoMan.execute("InsertHTML",aT(bs,true),bv.domNode.parentNode,bv.domNode,bt)}else{de.UndoMan.execute("InsertText",bv.domNode,bs,bt)}}}}}}function bf(bt){var bs=window.clipboardData.setData("Text",bt);return bs===J||bs}function bm(){var bs=window.clipboardData.getData("Text");if(bs===""){if(!window.clipboardData.setData("Text",bs)){bs=null}}return bs}function bg(bt){bt=bt||window.event;if(!de.events.Keyboard.isAcceleratorDown(bt)){return}switch(bt.keyCode){case 67:case 88:var bs=bt.keyCode==67?a8():bk();if(bs){if(bf(bs)){a1=true}else{bq(bs)}}break;case 86:var bu=bm();if(bu){bc(bu)}else{be()}break}}function a5(){try{if(netscape.security.PrivilegeManager.enablePrivilege){netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect")}else{return false}}catch(bs){return false}return true}function bp(bx){try{if(!a5()){return false}var bw=Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);bw.data=bx;var bs=Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);if(!bs){return false}bs.addDataFlavor("text/unicode");bs.setTransferData("text/unicode",bw,copytext.length*2);var bu=Components.interfaces.nsIClipboard;var bt=Components.classes["@mozilla.org/widget/clipboard;1"].getService(bu);if(!bt){return false}bt.setData(bs,null,bu.kGlobalClipboard)}catch(bv){return false}}function a7(){try{if(!a5()){return null}var bu=Components.classes["@mozilla.org/widget/clipboard;1"].getService(Components.interfaces.nsIClipboard);if(!bu){return null}var bs=Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);if(!bs){return null}bs.addDataFlavor("text/unicode");bu.getData(bs,bu.kGlobalClipboard);var bx={},bt={},bw="";bs.getTransferData("text/unicode",bx,bt);if(bx){bx=bx.value.QueryInterface(Components.interfaces.nsISupportsString)}if(bx){bw=bx.data.substring(0,bt.value/2)}return bw}catch(bv){return null}}function bd(bt){if(!de.events.Keyboard.isAcceleratorDown(bt)){return}switch(bt.which){case 99:case 120:var bs=bt.which==99?a8():bk();if(bs){if(bp(bs)){a1=true}else{bq(bs)}}break;case 118:var bu=a7();if(bu){bc(bu)}else{be()}break}}function a3(bt){if(!de.events.Keyboard.isAcceleratorDown(bt)){return}switch(bt.keyCode){case 67:var bs=a8();if(bs){bq(bs)}break;case 88:var bs=bk();if(bs){bq(bs)}break;case 86:be();break}}function a4(bt){var bs=a8();if(bs){bq(bs)}}function a9(bs){bc(bs.clipboardData.getData("Text"));bs.preventDefault()}function bn(bt){if(de.events.Keyboard.isAcceleratorDown(bt)&&bt.keyCode==88){var bs=bk();if(bs){bq(bs)}}}function bq(bs){ba(bs)}function be(){ba()}function ba(bt){bb=de.cursor.getCurrentCursorDesc();if(bh){clearTimeout(bh)}br.value=bt?bt:"";var bv=aR();a6.style.left=(bv.left==0?-50:bv.left+10)+"px";a6.style.top=(bv.top==0?-50:bv.top+10)+"px";a6.style.display="";try{br.focus();br.select()}catch(bu){}var bs=bt?a0:bj;bh=setTimeout(bs,0)}function bo(){a6.style.display="none"}function a0(){bh=null;bo();a1=true;window.focus()}function bj(){bh=null;bo();if(bb){var bs=de.cursor.getCurrentCursorDesc();if(!bs||bs.domNode!=bb.domNode||bs.relIndex!=bb.relIndex){de.cursor.setCursor(bb)}}bc(br.value);window.focus()}})();function aQ(bg,a8,a1){var bh=a1||N("p");var a7=j(w(bg,a8,true),H,aL,true)||H;while(bg.firstChild){bg=bg.firstChild}while(a8.lastChild){a8=a8.lastChild}if(a7!=H&&!n(bh,a7)){if(X(a7)=="ul"||X(a7)=="ol"){bg=j(bg,a7);a8=j(a8,a7);var a6=[];while(bg){if(X(bg)=="li"){a6.push(bg)}bg=bg==a8?null:bg.nextSibling}return a6}return[a7]}var ba,bd=[],a4=[],a0,a9;R(a7,bg,false,bc);if(bd.length>0){for(var be in bd){if(bd[be].parentNode){bd[be].parentNode.removeChild(bd[be]);a4.push(bd[be])}}}a0=ba;if(!a0){a0=a7.firstChild;while(a0.firstChild){a0=a0.firstChild}}ba=null;bd=[];R(a7,a8,true,bc);if(bd.length>0){for(var be in bd){if(bd[be].parentNode){bd[be].parentNode.removeChild(bd[be]);a4.push(bd[be])}}}a9=ba;if(!a9){a9=a7.lastChild;while(a9.lastChild){a9=a9.lastChild}}for(var be in a4){H.appendChild(a4[be])}if(!a9||!a0){return[]}a3(a0,a9,a7);bf(a0,a9,a7,bh);var a2=j(bg,a7);a8=j(a8,a7);var a5=[];do{var bb=a2;while(bb){if(aL(bb)){a5.push(bb);break}bb=bb.firstChild}a2=a2==a8?null:a2.nextSibling}while(a2);return a5;function bc(bj){if(bj==a7){return}var bk=bj,bi=null;while(bk!=a7){if(aL(bk)){bi=bk}if(bk.parentNode==a7&&de.doc.getProtectedNodeContainer(bk)==bk){bd.push(bk);bi=null}bk=bk.parentNode}if(bi){ba=bi;return false}}function a3(bl,bi,bj){var bk=bl,bm=false;while(bk&&!bm){R(bj,bk,true,function(bp){bk=null;bm|=bp==bi;if(bp==bj){return}if(aL(bp)){var bo=bp;while(bo.parentNode!=bj){if(bo.previousSibling){var br=bo.parentNode.cloneNode(false);while(bo.previousSibling){var bq=bo.previousSibling;Q(2,bq);Q(1,bq,br,0)}Q(1,br,bo.parentNode.parentNode,l(bo.parentNode))}if(bo.nextSibling){var br=bo.parentNode.cloneNode(false);while(bo.nextSibling){var bn=bo.nextSibling;Q(2,bn);Q(1,bn,br)}Q(1,br,bo.parentNode.parentNode,l(bo.parentNode)+1)}bo=bo.parentNode}bk=bo.nextSibling;R(bp,bp,true,function(bs){if(bs==bi){bm=true}return !bm});return false}return !bm})}}function bf(bl,bp,bj,bi){bl=j(bl,bj);bp=j(bp,bj);var bq=bl,bm=null;while(bq){var bo=bq,bn=false;while(bo){if(aL(bo)){bn=true;break}bo=bo.firstChild}if(bn){if(bm){bk(bm,bq);bm=null}}else{if(!bm){if(!(bq.nodeType==3&&!aH(bq))){bm=bq}}}bq=bq==bp?null:bq.nextSibling}if(bm){bk(bm,null)}function bk(bv,bs){var bt=bi.cloneNode(false),br=bv;Q(1,bt,bj,l(bv));while(br!=bs){var bu=br.nextSibling;Q(2,br);Q(1,br,bt);br=bu}}}}(function(){var bs,be,a4=460,bm,a3,bq,bn,a8,bp,bh,bk=aZ("img,table,input,select,button,textarea,object"),bg=aZ("img,table,input,select,button,textarea,object,br");L("Cursor",function(){bq=N("span");bn=document.createTextNode("");bq.appendChild(bn);a8=document.createTextNode("");be=N("div");am(be,ax+" sw-cursor");H.appendChild(be);var bv="";var bu=aD(be,"background-color");if(!bu||bu=="transparent"||bu=="auto"||bu=="rgba(0, 0, 0, 0)"){bv="background-color:black;"}bu=aD(be,"z-index");if(!bu||bu=="0"||bu=="auto"){}bv+="z-index:100";ao(be,"position:absolute; width:2px;visibility:hidden;"+bv);A(window,"resize",ba);A(document,"keystroke",bo);h(de.cursor);de.UndoMan.addObserver({onAfterExec:a5,onAfterUndo:a5,onAfterRedo:a5})},"UndoMan");de.cursor={PlacementFlag:{INSIDE:1,BEFORE:2,AFTER:4},setCursorColor:function(bu){be.style.backgroundColor=bu},doesNodeSupportCursor:function(bu){return !de.doc.isProtectedNode(bu)&&de.doc.isNodeEditable(bu)},setCursor:function(bu){if(bu&&!this.doesNodeSupportCursor(bu.domNode)){bu=null}bs=bu;a2(false);if(bs){be.style.left=(bs.docLeft+(bs.isRightOf?bs.width:0))+"px";be.style.top=bs.docTop+"px";be.style.height=bs.height+"px";a2(true)}a3=null;this.fireEvent("CursorChanged",this.getCurrentCursorDesc());return bs!=null},getCursorDescAtXY:a9,getCurrentCursorDesc:function(){return bs?o(bs):null},refreshCursor:function(){if(!bs){return}if(bp){return}bc(bs);be.style.left=(bs.docLeft+(bs.isRightOf?bs.width:0))+"px";be.style.top=bs.docTop+"px";be.style.height=bs.height+"px"},scrollToCursor:a5,exists:function(){return bs!=null},isCursorEle:function(bu){return bu==be},getNonCursorNodeAtXY:function(bu,bx){var bv=be.style.display;be.style.display="none";var bw=ai(bu,bx);be.style.display=bv;return bw},getNextCursorMovement:br,isOnSameLine:a6,createCursorDesc:function(bw,bu,by){var bv=bf(bw);if(bv==0||(bv!=1&&((by&&!(bv&4))||(!by&&!(bv&2))))){return null}var bx={domNode:bw,relIndex:bu,isRightOf:by,placement:bv};bc(bx);if(bv==1&&(bx.width==0||bx.height==0)){return null}return bx},getPlacementFlags:bf,getNearestCursorDesc:function(bv,bu,bA,bx){if(X(bv)=="br"){bA=true}var bw=de.cursor.createCursorDesc(bv,bu,bA);if(bw&&X(bv)=="br"){var by=br(bw,true),bz=br(bw,false);if((!by||!a6(by,bw))&&(!bz||!a6(bz,bw))){return bw}return(bx?by:bz)||bw}return bw||br({domNode:bv,isRightOf:bA,relIndex:bu,y:f(bv).y},bx)}};function bo(bA,bC){if(!bs||bA.ctrlKey||bA.metaKey||bA.altKey){return}var bE=false;switch(bC){case"Left":case"Right":bE=true;var bD=br(bs,bC=="Left");if(!bD){bD=bs}var bz=bs;if(!de.cursor.setCursor(bD)&&bz){de.cursor.setCursor(bz)}break;case"Up":case"Down":bE=true;var bB=bC=="Up";var bx=aR();var bu=a3?a3:(bs.docLeft-bx.left)+(bs.isRightOf?bs.width:0);var bv=by();var bw;if(bv){bw=bi(bu,bs.docTop-bx.top,bv,bs,bB);a7()}if(!bw){bw=bs}var bz=bs;if(!de.cursor.setCursor(bw)&&bz){de.cursor.setCursor(bz)}a3=bu;break}if(bE){a5();return false}return true;function by(){var bH=[];var bL=[];var bJ;R(H,bs.domNode,!bB,function(bP){bK(bP);var bO=bf(bP);if(bO==0){return true}var bQ,bN;if(bP.nodeType==3){bQ=f(bP.parentNode);bN=bP.parentNode.offsetHeight}else{if(X(bP)=="br"){bQ=bd(bP);bN=bQ.height}else{bQ=f(bP);bN=bP.offsetHeight}}if(!a6(bJ?bJ:bs,{y:bQ.y,height:bN})){if(bJ){return false}bJ={y:bQ.y,height:bN}}if(bO==1){bH.push({domNode:bP,placement:1})}else{if(bO&2){if(bB){bL.push(bP)}else{bH.push({domNode:bP,placement:2})}}if(bO&4){if(bB){bH.push({domNode:bP,placement:4})}else{bL.push(bP)}}}});if(!bJ){return null}bK(null);if(bB){bH.reverse()}var bM=0;for(var bG in bH){var bI=bH[bG];var bF=ah(bI.domNode,1);bI.startIndex=bM;bI.endIndex=bI.startIndex+(bF-1);bI.length=bF;bM+=bF}return{nodes:bH,totalLength:bM};function bK(bN){while(bL.length>0){if(!bN||!aK(bL[bL.length-1],bN)){bH.push({domNode:bL.pop(),placement:bB?2:4})}else{break}}}}}function ba(bu){de.cursor.refreshCursor()}function bj(bu){be.style.visibility=bu?"visible":"hidden"}function bl(){return be.style.visibility=="visible"}function a2(bu){if(typeof bu!="undefined"){a2.on=bu}if(a2.on){bj(!bl());bm=setTimeout(a2,a4,1)}else{if(bm){clearTimeout(bm);bm=null;bj(false)}}}function a5(){if(!bs){return}var bv=_getViewPortSize(),bx=0,bu=0;if((bs.y+bs.height)>=bv.height){bu=(bs.y+bs.height)-bv.height}else{if(bs.y<0){bu=bs.y}}var bw=bs.x+(bs.isRightOf?bs.width:0)+parseInt(be.style.width);if(bw>=bv.width){bx=bw-bv.width}else{if(bs.x<0){bx=bs.x}}if(bx||bu){window.scrollBy(bx,bu)}}function bf(bx){var bw=de.doc.getPackageContainer(bx);if(bw){var bv=0;if(bw==bx){bv=2|4}return bv}if(de.doc.isESPlaceHolder(bx,false)){return(de.doc.isESPlaceHolder(bx,true))?2:0}if(de.doc.isMNPlaceHolder(bx,false)){return(de.doc.isMNPlaceHolder(bx,true))?2:0}if(bx.nodeType==3){if(aH(bx)){return 1}return 0}var bu=0;if(de.cursor.usrGetPlacementFlags){bu=de.cursor.usrGetPlacementFlags(bx);if(bu===J){bu=0}else{return bu}}if(bk[X(bx)]){bu=2}if(bg[X(bx)]){bu|=4}return bu}function bb(bw,bv,bu){if(a6(bw,bv)){return bw.adx<bv.adx}else{if(bw.ady==bv.ady){return Math.abs((bw.y+(bw.height/2))-bu)<Math.abs((bv.y+(bv.height/2))-bu)}}return bw.ady<bv.ady}function a1(by,bw,bu,bz){if(a6(by,bw)){return Math.abs(by.x-bu)<Math.abs(bw.x-bu)}var bx=Math.min(Math.abs(by.y-bz),Math.abs((by.y+by.height)-bz));var bv=Math.min(Math.abs(bw.y-bz),Math.abs((bw.y+bw.height)-bz));if(bx==bv){return Math.abs((by.y+(by.height/2))-bz)<Math.abs((bw.y+(bw.height/2))-bz)}return bx<bv}function a6(bv,bu){return(bv.y>=bu.y&&bv.y<(bu.y+bu.height))||(bu.y>=bv.y&&bu.y<(bv.y+bv.height))}function a7(){if(bp){bp.parentNode.removeChild(bq);bp.parentNode.removeChild(a8);bp.nodeValue=bh;bp=null}}function bt(bu){if(bp==bu){return}if(bp){a7()}bp=bu;bh=bu.nodeValue;bu.parentNode.insertBefore(bq,bu);bu.parentNode.insertBefore(a8,bq)}function a0(bu){a8.nodeValue=bh.substr(0,bu);bn.nodeValue=bh.charAt(bu);bp.nodeValue=bh.substr(bu+1);return bq.offsetHeight!=0&&bq.offsetWidth!=0}function bd(bv){a7();bp={};bn.nodeValue=B;aV(bq,bv);var bu=f(bq);bu.height=bq.offsetHeight;bq.parentNode.removeChild(bq);bp=null;return bu}function bc(bw){if(!bw){return}if(X(bw.domNode)=="br"){var bv=bd(bw.domNode);bw.x=bv.x;bw.y=bv.y;bw.height=bv.height;bw.width=0}else{var bx;if(bw.placement==1){bt(bw.domNode);a0(bw.relIndex);bx=bq}else{bx=bw.domNode}var by=f(bx);bw.x=by.x;bw.y=by.y;bw.width=bx.offsetWidth;bw.height=bx.offsetHeight}var bu=aR();bw.docLeft=bu.left+bw.x;bw.docTop=bu.top+bw.y;a7()}function br(bD,bx){var bu=bD.domNode,bG=bD.relIndex,bI=bD.isRightOf,bz,bB,bw,bv=bf(bD.domNode),bA,bC,bF=false,bH;if(bv==1){if(bD.isRightOf==bx){var by=de.cursor.createCursorDesc(bD.domNode,bD.relIndex,!bD.isRightOf);if(by){return by}}}else{if(bD.isRightOf&&bv!=1){if(bx){while(bu.lastChild){bu=bu.lastChild}if(bu!=bD.domNode){bG=ah(bu,2)-1;bI=true}}}}R(H,bu,!bx,function(bN){var bL=bN==bu;if(!ab(bN)||de.doc.isProtectedNode(bN)){bA=bN;return true}if(!bF&&!bL){bF=aL(bN)}bv=bf(bN);if(bA){var bS=w(bN,bA,true);var bP=aO(bx?bN:bA,bS,false);if(bx){bP.reverse();if((bv&4)&&!aK(bN,bA)&&X(bN)!="br"){bP.push(bN)}}else{if(!aK(bA,bN)&&X(bA)!="br"&&!de.doc.isProtectedNode(bA)&&!(bA==bu&&bI)){bP.push(bA)}}for(var bO in bP){var bK=bP[bO];if(bf(bK)&4){if(bE(bK)){return false}bz=bK;bB=1;bw=true;return false}bF|=aL(bK)}}if(bv==0){if(!de.doc.isNodePackaged(bN)){var bM=0;if(aA(bN)){bM=1}else{if(aF(bN)){bM=2}}if(bM){de.UndoMan.execute(de.UndoMan.hasUndo()?1:0,"InsertHTML",aG(bM==1?de.doc.createESPlaceholder(bN):de.doc.createMNPlaceholder()),bN,bN.firstChild,0);if(!bE(bN.firstChild)){bz=bN.firstChild;bB=0;bw=false}return false}}}else{if(bv==1){bt(bN);var bR=bL?bG:(bx?ah(bN)-1:0),bQ;if(bL){bQ=bI}else{if(bH){if(bF){bH=null;bQ=bx}else{bQ=bH.isRightOf}}else{bQ=bx}}for(;(bx&&bR>=0)||(!bx&&bR<bh.length);bR+=bx?-1:1){if(!a0(bR)){if(bL){bQ=!bQ}bL=false;continue}var bJ=f(bq);bJ.height=bq.offsetHeight;if(bE(bq,bJ)){return false}if(bH){if(!a6(bJ,bH)){bz=bN;bB=bR;bw=!bQ;return false}}if(!bL||bu!=bD.domNode){bz=bN;bB=bR;bw=bQ;return false}bt(bN);bL=false;bH={domNode:bN,isRightOf:bQ,y:bJ.y,height:bJ.height};if(de.doc.isMNPlaceHolder(bN)||de.doc.isESPlaceHolder(bN)){prevDesc.isRightOf=false;break}}a7()}else{if(bv&2){if(!bL||(bx&&bN==bu&&bI)){if(!bE(bN)){bz=bN;bw=false;bB=0}return false}}else{if(X(bN)=="br"){if(!bL){if(bE(bN)){return false}if(bx){bC=bN;if(bE(bA,bH&&bH.domNode==bA?bH:null)){return false}}else{bC=bN}}}}}}bA=bN;if(!bx&&bL&&bD.isRightOf&&bv!=1){return 1}});a7();return bz?de.cursor.createCursorDesc(bz,bB,bw):null;function bE(bL,bJ){if(bC){var bK=bd(bC),bJ=bJ||(X(bL)=="br"?bd(bL):{y:f(bL).y,height:bL.offsetHeight});if(!a6(bK,bJ)){bz=bC;bB=1;bw=true;return true}bC=null}return false}}function a9(bw,bu,by){if(!by){by=ai(bw,bu)}if(by==be){be.style.display="none";by=ai(bw,bu);be.style.display=""}if(!by){return null}var bx=bz();var bv=bi(bw,bu,bx);a7();return bv;function bz(){var bB=[],bD=0,bA=aN();(function bC(bI){var bF=bf(bI),bH,bE;if(bI.nodeType==1){bH=bI}else{if(bI.nodeType==3&&bF!=0){bt(bI);a8.nodeValue="";bn.nodeValue=bh;bp.nodeValue="";bH=bq}}if(bH){bE=X(bH)=="br"?bd(bH):f(bH);if((bE.y+bH.offsetHeight)<=0){a7();return true}if(bE.y>bA.height){a7();return false}a7()}if(bF==1){bB.push({domNode:bI,startIndex:bD,endIndex:bD+ah(bI)-1,length:ah(bI),placement:1});bD+=ah(bI)}else{if(bF&2){bB.push({domNode:bI,startIndex:bD,endIndex:bD+1,length:1,placement:2,posInWnd:bE});bD++}}var bJ=bI.firstChild;var bG=true;while(bJ){if(!bC(bJ)){bG=false;break}bJ=bJ.nextSibling}if(bF&4){bB.push({domNode:bI,startIndex:bD,endIndex:bD+1,length:1,placement:4,posInWnd:bE});bD++}return bG})(by);return{nodes:bB,totalLength:bD}}}function bi(bJ,bH,bC,bz,bE){var bw={};if(bC.totalLength==0){return null}var bx=bD(0,0,2);if(!bx){return null}var bO=bD(bC.nodes.length-1,bC.nodes[bC.nodes.length-1].length-1,1);if(bx.domNode==bO.domNode&&bx.absIndex==bO.absIndex){return bF(bx)}var bK=[bx,bO];var by=null;by=bb(bx,bO,bH)?bx:bO;var bP,bQ;for(var bv=1;bv<=2;bv++){if(bv==1){if(bz){bA(bx,bu(bx.absIndex),bO,bu(bO.absIndex));bL();bH=by.y+(by.height/2);by.ady=Math.abs(by.y-bH);continue}else{if(!bG()){continue}}}else{var bR=bB();if(typeof bR=="boolean"){if(!bR){break}}else{break}}while(true){if(bQ.absIndex==(bP.absIndex-1)){break}var bM=bQ.absIndex+Math.floor((bP.absIndex-bQ.absIndex)/2);if(bM==bQ.absIndex){bM++}else{if(bM==bP.absIndex){bM--}}var bI=bu(bM);var bN=bD(bI,bM-bC.nodes[bI].startIndex,0);if(!bN){break}if(bv==1){bK.push(bN)}if(bb(bN,by,bH)){by=bN}if(bv==1){if(bH>=bN.y&&bH<=(bN.y+bN.height)){break}else{if(bN.y>bH){bP=bN}else{bQ=bN}}}else{if(a6(bN,by)){if(bJ>=bN.x&&bJ<=(bN.x+bN.width)){break}else{if(bN.x>bJ){bP=bN}else{bQ=bN}}}else{if(bN.y>bH){bP=bN}else{bQ=bN}}}}}return bF(by);function bu(bU){var bT=bC.nodes;if(bT.length==1){return 0}if(bU>=bT[0].startIndex&&bU<=bT[0].endIndex){return 0}if(bU>=bT[bT.length-1].startIndex&&bU<=bT[bT.length-1].endIndex){return bT.length-1}var bV=0;var bS=bT.length-1;var bX;while(true){var bW=bV+Math.floor((bS-bV)/2);if(bW==bV){bW++}else{if(bW==bS){bW--}}if(bU>=bT[bW].startIndex&&bU<=bT[bW].endIndex){bX=bW;break}else{if(bU<bT[bW].startIndex){bS=bW}else{bV=bW}}}return bX}function bD(b1,b5,bZ){var bT=bC.nodes,bY=bZ==0||bZ==1,b0=b5,bV=b1,bW=null,bX;do{if(!bY&&bZ==0){b1=bV;b5=b0+1;if(b5>bT[b1].endIndex){b1++;b5=0}}var bS=false;while(b1>=0&&b1<bT.length){bX=bT[b1];if(ab(bX.domNode)){if(bX.placement==1){bt(bX.domNode);while(b5>=0&&b5<bh.length){if(bZ==0&&((bQ.domNode==bX.domNode&&bQ.relIndex==b5)||(bP.domNode==bX.domNode&&bP.relIndex==b5))){bS=true;break}if(bw["_"+b1+"_"+b5]){b5+=(bY?-1:1);continue}if(!a0(b5)){bw["_"+b1+"_"+b5]=true;b5+=(bY?-1:1);continue}bW=bq;break}}else{if(bZ==0&&((bQ.domNode==bX.domNode&&bQ.placement==bX.placement)||(bP.domNode==bX.domNode&&bP.placement==bX.placement))){bS=true;break}bW=bX.domNode;break}}if(bW||bS){break}b1+=(bY?-1:1);b5=(bY&&b1>=0&&b1<bT.length)?(bT[b1].placement==1?bT[b1].length-1:1):0}if(bW){break}}while(bZ==0&&!(bY=!bY));if(!bW){return null}var b4,bU,b6;if(bX.posInWnd){b4=bX.posInWnd}if(X(bW)=="br"){b4=b4||bd(bW);b6=b4.height;bU=0}else{b4=b4||f(bW);bU=bW.offsetWidth;b6=bW.offsetHeight}var b7=Math.abs(b4.x-bJ),b3=Math.abs(b4.x+bU-bJ),b2;switch(bX.placement){case 2:b2=false;break;case 4:b2=true;break;default:b2=b3<b7}return{domNode:bX.domNode,relIndex:b5,absIndex:bX.startIndex+b5,placement:bX.placement,isRightOf:b2,x:b4.x,y:b4.y,adx:b2?b3:b7,ady:Math.min(Math.abs(b4.y-bH),Math.abs(b4.y+bW.offsetHeight-bH)),width:bU,height:b6}}function bG(){if(!((bH>=bx.y&&bH<=(bx.y+bx.height))||(bH>=bO.y&&bH<=(bO.y+bO.height)))&&bH>=bx.y&&bH<=(bO.y+bO.height)){bQ=bx;bP=bO;return true}return false}function bB(){if(bJ>=by.x&&bJ<(by.x+by.width)){return false}else{if(by.x>bJ){bP=by;bQ=null;for(i in bK){bN=bK[i];if(bN==by){continue}var bT;if(a6(bN,by)){bT=bN.x<by.x}else{bT=bN.y<by.y}if(bT&&(!bQ||a1(bN,bQ,by.x,by.y))&&bN.absIndex<bP.absIndex){bQ=bN}}if(!bQ){return by}}else{bQ=by;bP=null;var bU=false;for(i in bK){bN=bK[i];var bS;if(a6(bN,by)){bS=bN.x>by.x}else{bS=bN.y>by.y}if(bS&&(!bP||a1(bN,bP,(by.x+by.width),by.y))&&bN.absIndex>bQ.absIndex){bP=bN}}if(!bP){return by}}}return true}function bL(){by=bE?bx:bO;for(var bS in bK){var bT=bK[bS];if(a6(bT,bz)||(bE&&bT.y>bz.y)||(!bE&&bT.y<bz.y)){continue}if(bb(bT,by,bH)){by=bT}}}function bA(bX,bZ,bU,bW){var b0=[[bX,bZ,bU,bW]];while(b0.length>0){var bY=b0.pop();bX=bY[0];bZ=bY[1];bU=bY[2];bW=bY[3];var bS=bZ;while(bS<bC.nodes.length&&X(bC.nodes[bS].domNode)=="table"){bS++}if(bS==bC.nodes.length){continue}if(bS!=bZ){bX=bD(bS,0,2);bZ=bS;bK.push(bX)}bS=bW;while(bS>=0&&X(bC.nodes[bS].domNode)=="table"){bS--}if(bS==-1){continue}if(bS!=bW){bU=bD(bS,bC.nodes[bS].length-1,1);bW=bS;bK.push(bU)}if(bX.absIndex>=(bU.absIndex-1)||a6(bU,bX)){continue}var bV=bX.absIndex+Math.floor((bU.absIndex-bX.absIndex)/2);if(bV==bX.absIndex){bV++}else{if(bV==bU.absIndex){bV--}}var bT=bu(bV);bQ=bX;bP=bU;var b1=bD(bT,bV-bC.nodes[bT].startIndex,0);if(!b1){continue}bK.push(b1);b0.push([bX,bZ,b1,bT]);b0.push([b1,bT,bU,bW])}}function bF(bV){if(!bV){return null}if(X(bV.domNode)=="br"){var bU=br(bV,true);if(bU&&a6(bV,bU)){bV=bU;bV.isRightOf=true}else{var bT=br(bV,false);if(bT&&a6(bV,bT)){bV=bT;bV.isRightOf=false}}}else{if(de.doc.isMNPlaceHolder(bV.domNode)){bV.isRightOf=false}}bV.placement=bf(bV.domNode);var bS=aR();bV.docLeft=bS.left+bV.x;bV.docTop=bS.top+bV.y;return bV}}})();var ax="sw-protect",af="editable",V="sw-packaged";function aF(a0){if(v(a0)){return !ac(a0)}return false}function aA(a0){if(de.doc.isEditSection(a0)){return !ac(a0)}return false}function ac(a0){var a1=false;R(a0,a0,true,function(a4){if(a4==a0||de.doc.isProtectedNode(a4)){return}var a3=de.cursor.getPlacementFlags(a4);if(a3==1){if(aH(a4)&&ah(a4)>0){if(M(a4.nodeValue)){var a5=N("span"),a2=document.createTextNode(a4.nodeValue);a5.appendChild(a2);a4.nodeValue="";a4.parentNode.appendChild(a5);a1=a5.offsetHeight!=0&&a5.offsetWidth!=0;a4.parentNode.removeChild(a5);a4.nodeValue=a2.nodeValue}else{a1=true}}}else{if(a3){a1=true}}return !a1});return a1}var v=function(){var a0=aZ("li,dd,dt,p,td,th,h1,h2,h3,h4,h5,h6,pre,div");return function(a1){return a0[X(a1)]||a1==H}}();(function(){L("Doc",function(){h(de.doc);var a8=de.doc.getAllEditSections();c=false;for(var a7 in a8){m(a8[a7],true)}c=true;de.doc.addObserver({onSectionAdded:function(a9){c=false;m(a9,false);c=true}})});var a4={},a3="sw-mn-ph",a1="sw-es-ph",a5=new RegExp("^"+af+".*$"),a2=new RegExp("^"+af+"-?(.+)$"),a0=new RegExp("^"+ax+"$"),a6=new RegExp("^"+V+"$");de.doc={getEditSectionContainer:function(a7){return j(a7,null,this.isEditSection,true)},isEditSection:function(a7){if(a7&&a7.nodeType==1){return T(a7,a5)}return false},getAllEditSections:function(){var a7=[];R(H,H,true,function(a8){if(de.doc.isEditSection(a8)){a7.push(a8)}});return a7},isNodeEditable:function(a7){var a8=this.getEditSectionContainer(a7);return a8!=null&&a8!=a7},getProtectedNodeContainer:function(a7){return j(a7,null,function(a8){return a8.nodeType==1&&T(a8,a0)},true)},isProtectedNode:function(a7){return this.getProtectedNodeContainer(a7)!=null},getPackageContainer:function(a7){return j(a7,null,function(a8){return a8.nodeType==1&&T(a8,a6)},true)},isNodePackaged:function(a7){return this.getPackageContainer(a7)!=null},declarePropertySet:function(a8,be){be=o(be);if(typeof be.actionFilter=="string"){var a7=be.actionFilter;if(a7.charAt(0)!="!"){be.afInclusive=true;if(a7){a7+=","}a7+="inserthtml,inserttext,removedom,removetext"}else{a7=a7.substr(1);be.afInclusive=false}var bg=a7.toLowerCase().split(",");var bd="(";for(var bb in bg){bd+=((bb=="0")?"":"|");var a9=bg[bb];var bc=/^format\((.+)\)$/.exec(a9);if(bc){var bf=bc[1].split(",");for(var ba in bf){bd+=((ba=="0")?"":"|")+"format"+bf[ba]}}else{bd+=a9;if(a9.indexOf("format")==0){bd+=".+"}}}bd+=")";be.afRE=new RegExp("^"+bd+"$")}a4[a8]=be},declarePropertySets:function(a8){for(var a7 in a8){this.declarePropertySet(a7,a8[a7])}},getEditProperties:function(a8){if(!this.isEditSection(a8)){a8=this.getEditSectionContainer(a8)}if(a8){var a7=T(a8,a5);if(a7){var a9=a2.exec(a7);return a9?a4[a9[1]]||{}:{}}return{}}return null},createMNPlaceholder:function(){var a7=N("span");am(a7,a3);a7.innerHTML="&nbsp;";return a7},isMNPlaceHolder:function(a8,a7){switch(a8.nodeType){case 1:return au(a8)==a3;case 3:return !a7&&a8.parentNode&&au(a8.parentNode)==a3}return false},createESPlaceholder:function(a7){var a8=this.getEditProperties(a7).phMarkup||"&nbsp;";var a9=N("span");am(a9,a1);a9.innerHTML=a8;return a9},isESPlaceHolder:function(a9,a7){while(a9){if(a9.nodeType==1){var a8=au(a9);if(a8==a1){return true}}if(a7){break}a9=a9.parentNode}return false},registerEditSection:function(a7,a9){var a8=au(a7);am(a7,(a8?a8+" ":"")+af+(a9?"-"+a9:""));if(!ac(a7)){a7.appendChild(this.createESPlaceholder(a7))}this.fireEvent("SectionAdded",a7)},unregisterEditSection:function(a7){var a8=au(a7);if(a8){am(a7,a8.replace(new RegExp("^|s"+af+"S*$","g"),""))}this.fireEvent("SectionRemoved",a7)}}})();var an={"1":"Bad arguments"};function aj(a0){throw new Error(typeof a0=="number"?an[a0]:a0)}function A(a3,a0,a2){if(a3.setInterval&&a3!=window){a3=window}switch(a0){case"keystroke":a1(a3,"keydown",function(a5){var a4=de.events.Keyboard.getKeyIdentifier(a5,true);if(a4){return a2(a5,a4)}});a1(a3,"keypress",function(a5){var a4=de.events.Keyboard.getKeyIdentifier(a5,false);if(a4){return a2(a5,a4)}});break;case"mousedown":a1(a3,a0,function(a4){return de.events.Mouse.sniffMouseDownEvent(a4)?a2(a4):true});break;case"mouseup":a1(a3,a0,function(a4){return de.events.Mouse.sniffMouseUpEvent(a4)?a2(a4):true});break;case"mousemove":a1(a3,a0,function(a4){return de.events.Mouse.sniffMouseMoveEvent(a4)?a2(a4):true});break;default:a1(a3,a0,a2)}function a1(a6,a4,a5){if(!a2.evWrappers){a2.evWrappers={}}if(!a2.evWrappers[a4]){a2.evWrappers[a4]=[]}a2.evWrappers[a4].push([a6,a7]);if(a6.addEventListener){a6.addEventListener(a4,a7,false)}else{if(a6.attachEvent){a6.attachEvent("on"+a4,a7)}}function a7(a8){a8=a8||window.event;if(a5(a8)===false){return de.events.consume(a8)}}}}function ad(a4,a1,a3){if(a1=="keystroke"){ad(a4,"keydown",a3);ad(a4,"keypress",a3);return}if(a3.evWrappers&&a3.evWrappers[a1]){for(var a2 in a3.evWrappers[a1]){var a0=a3.evWrappers[a1][a2];if(a0[0]==a4){if(a3.evWrappers[a1].length==1){delete a3.evWrappers[a1]}else{a3.evWrappers[a1].splice(a2,1)}a3=a0[1];break}}}if(a4.removeEventListener){a4.removeEventListener(a1,a3,false)}else{if(a4.detachEvent){a4.detachEvent("on"+a1,a3)}}}D(de.events,{addHandler:A,removeHandler:ad,getXYInWindowFromEvent:function(a2){var a1=0,a0=0;if(a2.clientX||a2.clientX===0){a1=a2.clientX;a0=a2.clientY}else{if(a2.pageX!=null){var a3=aR();a1=a2.pageX-a3.left;a0=a2.pageY-a3.top}}return{x:a1,y:a0}},getEventTarget:function(a0){return a0.target||a0.srcElement||document},consume:function(a0){de.events.stopPropogation(a0);de.events.preventDefault(a0);return false},stopPropogation:function(a0){if(p==2){a0.cancelBubble=true}else{if(a0.stopPropagation){a0.stopPropagation()}}},preventDefault:function(a0){if(p==2){a0.returnValue=false}else{if(a0.preventDefault){a0.preventDefault()}}}});(function(){var a4="1",a2="2",a3,a0=false,a1={};L("events.Mouse",function(){if(E==3){a3={"1":a4,"2":a2}}else{a3={"0":a4,"2":a2}}a1[a4]=a1[a2]=false});de.events.Mouse={sniffMouseDownEvent:function(a7){var a6=a3[a7.button];if(a6){if(W==2&&a6==a4&&a7.ctrlKey){a6=RIGHT_CLICK}a1[a6]=true}if(a5(a7)){a0=this.isLeftDown();return false}return true},sniffMouseUpEvent:function(a7){var a6=a3[a7.button];if(a6){if(W==2&&a6==a4){this.clearDownStates()}else{a1[a6]=false}}a0=this.isLeftDown();return !a5(a7)},sniffMouseMoveEvent:function(a6){return !(this.isLeftDown()&&a0)},isLeftDown:function(){return a1[a4]},isRightDown:function(){return a1[a2]},clearDownStates:function(){a1[a4]=false;a1[a2]=false}};function a5(a8){var a7=de.events.getEventTarget(a8);if(a7==window||a7==document||a7==document.documentElement){if(p==5){return}var a9=de.events.getXYInWindowFromEvent(a8),a6=_getViewPortSize();if(a9.x>=a6.width){return 1}return a9.y>=a6.height}}})();var q={};function at(a0,a1,a2){a0=a0.toLowerCase();q[a0+"Eval"]=a1;q[a0+"Wrapper"]=a2}(function(){function a0(a1,a2){var a3=N("span");aJ(a3,a1,a2);return a3}(function(a1){for(var a2 in a1){at(a2,a1[a2][0],a1[a2][1])}})({bold:[function(a4){var a3=[];if(X(a4)=="b"||X(a4)=="strong"){a3.push({type:1})}var a2=a4.style.fontWeight;if(a2){var a1=a2=="bold";if(!a1){a2=parseInt(a2);a1=(!isNaN(a2)&&a2>=700)}if(a1){a3.push({type:3,match:"fontWeight"})}}return a3.length>0?{strip:a3,inline:N("strong"),value:true}:null},function(){return N("strong")}],italics:[function(a2){var a1=[];if(X(a2)=="i"||X(a2)=="em"){a1.push({type:1})}if(a2.style.fontStyle=="italic"){a1.push({type:3,match:"fontStyle"})}return a1.length>0?{strip:a1,inline:N("em"),value:true}:null},function(){return N("em")}],underline:[function(a2){var a1=[];if(X(a2)=="u"){a1.push({type:1})}if(a2.style.textDecoration=="underline"){a1.push({type:3,match:"textDecoration"})}return a1.length>0?{strip:a1,inline:a0("textDecoration","underline"),value:true}:null},function(){return a0("textDecoration","underline")}],strike:[function(a2){var a1=[];if(X(a2)=="strike"){a1.push({type:1})}if(a2.style.textDecoration=="line-through"){a1.push({type:3,match:"textDecoration"})}return a1.length>0?{strip:a1,inline:a0("textDecoration","line-through"),value:true}:null},function(){return a0("textDecoration","line-through")}],color:[function(a1){if(a1.style.color&&a1.style.color.length>0){return{strip:[{type:3,match:"color"}],inline:a0("color",a1.style.color),value:a1.style.color}}},function(a1){return a0("color",a1)}],backcolor:[function(a1){if(a1.style.backgroundColor&&a1.style.backgroundColor.length>0){return{strip:[{type:3,match:"backgroundColor"}],inline:a0("backgroundColor",a1.style.backgroundColor),value:a1.style.backgroundColor}}},function(a1){return a0("backgroundColor",a1)}],fontsize:[function(a1){if(X(a1)=="small"||X(a1)=="big"){var a2=X(a1)=="small"?"smaller":"larger";return{strip:[{type:1}],inline:a0("fontSize",a2),value:a2}}if(a1.style.fontSize&&a1.style.fontSize.length>0){return{strip:[{type:3,match:"fontSize"}],inline:a0("fontSize",a1.style.fontSize),value:a1.style.fontSize}}},function(a1){return a0("fontSize",a1)}],fontfamily:[function(a1){if(a1.style.fontFamily&&a1.style.fontFamily.length>0){return{strip:[{type:3,match:"fontFamily"}],inline:a0("fontFamily",a1.style.fontFamily),value:a1.style.fontFamily}}},function(a1){return a0("fontFamily",a1)}],link:[function(a1){if(X(a1)=="a"){return{strip:[{type:1}],inline:a1.cloneNode(false),value:{url:a1.href,title:a1.title}}}},function(a1){var a2=N("a");a2.href=a1.url;a2.title=a1.title;return a2}]})})();var az=function(){var a1=function(a3,a2){this.node=a3;this.pos=a2;this.children=[];this.isShared=false;this.parent=null};a1.prototype={visit:function(a3){if(a3(this)===false){return false}for(var a2 in this.children){if(!this.children[a2].visit(a3)){return false}}return true},disconnect:function(){this.visit(function(a2){if(!a2.isShared){a0(a2,false)}})},collapse:function(){var a8=w(this.getStartFragment().node,this.getEndFragment().node,false);var bb=this;while(bb.node!=a8){bb=bb.children[0]}this.disconnect();var bl=false,bi=this,a6=false;a9();var ba=a2(bb,true,a3(this.getStartFragment(),a8));for(var bg in ba){if(ba[bg].migrantRoots.length>0){var a4=ba[bg].migrationPoint.node;var bj=ba[bg].migrationPoint.children[0].pos;if(bk(ba[bg].migrationPoint.children[0].node)){bj++}for(var be=0;be<ba[bg].migrantRoots.length;be++){Q(1,ba[bg].migrantRoots[be],a4,bj+be)}var bf=false;if(v(a4)){R(a4,a4,true,function(bm){if(bm==a4){return}if(!(de.doc.isMNPlaceHolder(bm,false)&&(bm.nodeType==3?bm.parentNode.parentNode==a4:bm.parentNode==a4))&&de.cursor.getPlacementFlags(bm)){bf=true;return false}})}var bc=false;for(var bd=0;bd<a4.childNodes.length;bd++){var bh=a4.childNodes[bd];if(de.doc.isMNPlaceHolder(bh,true)||de.doc.isESPlaceHolder(bh,true)){if(bc||!v(a4)||bf){Q(2,bh)}bc=true}}}}return ba.length>0&&ba[0].migrantRoots.length>0?ba[0].migrantRoots[0]:null;function a2(bn,bs,bz){var bB={migrationPoint:bz,migrantRoots:[]};var by=[bB];for(var bw=bs?bn.getEndFragment():bn.getStartFragment();bw!=(bs?bn:bn.parent);bw=bw.parent){var bp,bq;if(bs){a6=false;for(var bv=bw.parent;bv!=bn;bv=bv.parent){if(bv.isShared&&a5(bv.node)){a6=true;break}}}if(!bs||bw.isShared){bp=bw.node;bq=bp.nextSibling;if(a5(bp)){bl=true;if(bs){a0(bw,true)}}if(!bs||a7(bp)){if(bp.firstChild){bp=bp.cloneNode(false)}else{Q(2,bp)}while(bB.migrationPoint!=bb&&!n(bp,bB.migrationPoint.node)){bB.migrationPoint=a3(bB.migrationPoint)}for(var bt=0;bt<by.length;bt++){for(var br in by[bt].migrantRoots){Q(1,by[bt].migrantRoots[br],bp)}by[bt].migrantRoots=[bp];if(bt<(by.length-1)){bp=bp.cloneNode(false)}}}else{if(!a5(bp)){bl=true;if(!bp.firstChild){a0(bw,true)}}}}else{if(!bw.parent.isShared){continue}var bx=bi;while(bx.children.length>0&&bx!=bw.parent){bx=bx.children[0]}if(bx==bw.parent){bq=null;if(!bx.insertedPH){if(bk(bx.children[0].node)){bq=bx.node.childNodes.length>(bx.children[0].pos+1)?bx.node.childNodes[bx.children[0].pos+1]:null}else{bq=bx.node.childNodes.length>bx.children[0].pos?bx.node.childNodes[bx.children[0].pos]:null}}}else{bq=bw.parent.node.firstChild}}if(bs&&!a7(bw.parent.node)&&!a5(bw.parent.node)){bl=true}else{if(!bs&&bw==bn){continue}}var bA=bw.getIndexInParent();if(bs){bw.parent.migrantIndex=0}while(bq&&(a6||!bl)){bp=bq;bq=bp.nextSibling;bA++;var bm;if(bs){var bo;if(bw.parent.migrants&&bw.parent.migrants.length>bw.parent.migrantIndex){bo=bw.parent.migrants[bw.parent.migrantIndex]}else{bo=aa(bp.parentNode,bp,0,bp,ah(bp,1));if(!bw.parent.migrants){bw.parent.migrants=[]}bw.parent.migrants.push(bo)}bw.parent.migrantIndex++;bm=a2(bo.children[0],false,by[by.length-1].migrationPoint)}else{bm=a2(bw.parent.children[bA],false,by[by.length-1].migrationPoint)}for(var bt in bm){if(bm[bt].migrantRoots.length==0){continue}var bu=false;for(var br in by){if(by[br].migrationPoint==bm[bt].migrationPoint){by[br].migrantRoots=by[br].migrantRoots.concat(bm[bt].migrantRoots);bu=true;break}}if(!bu){by.push(bm[bt])}}bB=by[by.length-1]}}return by}function a3(bm){do{bm=bm.parent}while(bm!=bb&&!(bk(bm.node)&&a5(bm.node)));return bm}function a5(bm){return S(bm)||X(bm)=="li"}function a7(bm){return bm.nodeType==3||ae(bm)}function bk(bm){return aK(H,bm)}function a9(){for(var bn=bi.getStartFragment();bn!=null;bn=bn.parent?bn.parent:null){var bm=bn.node;if(v(bm)||de.doc.isEditSection(bm)){if(bn.isShared){var bq=0;if(aA(bm)){bq=1}else{if(aF(bm)){bq=2}}if(bq){var bp=bq==1?de.doc.createESPlaceholder(bm):de.doc.createMNPlaceholder();Q(1,bp,bm);bn.insertedPH=1}}else{while(bm.firstChild){Q(2,bm.firstChild)}Q(1,de.doc.createMNPlaceholder(),bm);bn.insertedPH=1;while(!bn.isShared){if(bn.parent.isShared){Q(1,bn.node,bn.parent.node,bn.pos)}else{var bo=bn.parent.node;while(bo.firstChild){Q(2,bo.firstChild)}Q(1,bn.node,bo)}if(!bn.parent){break}bn=bn.parent}}break}}}},getStartFragment:function(){var a2=this;while(a2.children.length>0){a2=a2.children[0]}return a2},getEndFragment:function(){var a2=this;while(a2.children.length>0){a2=a2.children[a2.children.length-1]}return a2},getIndexInParent:function(){if(!this.parent){return null}var a2=0;while(this!=this.parent.children[a2]){a2++}return a2},wasStartSplit:function(){return this.getStartFragment().preSplitNode?true:false},wasEndSplit:function(){return this.getEndFragment().postSplitNode?true:false},getPreSplitNode:function(){var a2=this.getStartFragment();return a2.preSplitNode?a2.preSplitNode:null},getPostSplitNode:function(){var a2=this.getEndFragment();return a2.postSplitNode?a2.postSplitNode:null},getAdjustedNodeIndex:function(a4,a2){if(a4.nodeType==3&&a2>=ah(a4)){var a5=this.getStartFragment(),a3=this.getEndFragment();if(a5.wasStartSplit()){var a6=a5.getPreSplitNode();if(a4==a6){a2-=ah(a6);a4=a5.node}}if(a3.wasEndSplit()&&a4==a3.node&&a2>=ah(a4)){a2-=ah(a3.node);a4=a3.getPostSplitNode()}}return{node:a4,index:a2}},getOriginalNodeIndex:function(a4,a2){if(a4.nodeType==3){var a5=this.getStartFragment(),a3=this.getEndFragment();if(a4==a3.getPostSplitNode()){a2+=ah(a3.node);a4=a3.node}if(a5.wasStartSplit()&&a4==a5.node){var a6=a5.getPreSplitNode();a2+=ah(a6);a4=a6}}return{node:a4,index:a2}}};function a0(a2,a3){if(a3||(a2.parent&&a2.parent.isShared)){Q(2,a2.node)}}return a1}();function aa(bc,a0,bb,a8,a6){if(!bc){bc=w(a0,a8)}var a7=false;while(a0.firstChild){a0=bb==0?a0.firstChild:a0.lastChild;a7=true}if(a7&&bb>0){bb=ah(a0,1)}a7=false;while(a8.firstChild){a8=a6==0?a8.firstChild:a8.lastChild;a7=true}if(a7&&a6>0){a6=ah(a8,1)}if(de.doc.isMNPlaceHolder(a0)||de.doc.isESPlaceHolder(a0)){bb=0}if(de.doc.isMNPlaceHolder(a8)||de.doc.isESPlaceHolder(a8)){a6=ah(a8,1)}var a3=[];R(bc,a0,true,function(bf){a3.push(bf);return bf!=a8});var be=aO(a0,bc,false,true);be.reverse();a3=be.concat(a3);var a5;for(var a2 in a3){var a1=a3[a2],bd=0,a4=0;if((a1==a0||a1==a8)&&a1.nodeType==3){if(a1==a0&&bb>0&&bb<ah(a1)){bd=a1;a1=Q(3,a1,bb);if(a8==a0){a8=a1;a6-=ah(a0)}a0=a1}if(a1==a8&&a6>0&&a6<ah(a1)){a4=Q(3,a1,a6)}}var a9=new az(a1,l(a1));if(!a5){a5=a9}else{a9.parent=null;a5.visit(function(bf){if(bf.node==a9.node.parentNode){a9.parent=bf}return a9.parent==null});a9.parent.children.push(a9)}a9.isShared=!(bd||a4)&&((a1==a0&&bb==ah(a1,1))||(a1==a8&&a6==0));if(bd){a9.preSplitNode=bd}if(a4){a9.postSplitNode=a4}}ba(a5);return a5;function ba(bi){var bf=false;for(var bg in bi.children){var bh=bi.children[bg];ba(bh);bf|=bh.isShared}bi.isShared|=(bf||bi==a5||bi.node.childNodes.length!=bi.children.length)}}de.buildFragment=aa;var aY={},aB,c=true;function P(a3,a1,a0,a2){if(!a3){a3=P.genOp+1;do{a3++}while(aY[a3]);P.genOp=a3}aY[a3]={exec:a1,undo:a0,redo:a2};return a3}P.genOp=100;function Q(a3){var a1=aY[a3];var a2=Array.prototype.slice.call(arguments);a2.shift();a2.unshift({opCode:a3});var a0=a1.exec.apply(a1,a2);if(c){if(!aB){aB=[]}aB.push(a2[0])}return a0}function aP(){var a0=aB;aB=null;return a0}function u(a3){for(var a1=a3.length-1;a1>=0;a1--){var a2=a3[a1];var a0=aY[a2.opCode];a0.undo(a2)}}function aW(a3){for(var a1 in a3){var a2=a3[a1];var a0=aY[a2.opCode];a0.redo(a2)}}de.recordOperations=function(a0){c=a0};P(1,function(a3,a1,a2,a0){a3.newNode=a1;a3.parent=a2;if(a0||a0===0){a3.pos=a0}this.redo(a3)},function(a0){a0.parent.removeChild(a0.newNode)},function(a0){if(a0.pos||a0.pos===0){aX(a0.parent,a0.newNode,a0.pos)}else{a0.parent.appendChild(a0.newNode)}});P(2,function(a0,a1){a0.parent=a1.parentNode;a0.pos=l(a1);a0.target=a1;this.redo(a0)},function(a0){aX(a0.parent,a0.target,a0.pos)},function(a0){a0.parent.removeChild(a0.target)});P(3,function(a1,a2,a0){a1.target=a2;a1.index=a0;a1.rem=a2.splitText(a0);return a1.rem},function(a0){a0.target.nodeValue+=a0.rem.nodeValue;a0.rem.parentNode.removeChild(a0.rem);a0.rem.nodeValue=""},function(a1){var a0=a1.target.nodeValue;a1.rem.nodeValue=a0.substr(a1.index);a1.target.nodeValue=a0.substr(0,a1.index);aV(a1.rem,a1.target)});P(4,function(a2,a4,a5,a0){a2.target=a4;a2.index=a0;a2.len=a5.length;var a3=a4.nodeValue.substr(0,a0),a1=a4.nodeValue.substr(a0);a4.nodeValue=a3+a5+a1},function(a1){a1.text=a1.target.nodeValue.substr(a1.index,a1.len);var a2=a1.target.nodeValue.substr(0,a1.index),a0=a1.target.nodeValue.substr(a1.index+a1.len);a1.target.nodeValue=a2+a0;delete a1.len},function(a1){a1.len=a1.text.length;var a2=a1.target.nodeValue.substr(0,a1.index),a0=a1.target.nodeValue.substr(a1.index);a1.target.nodeValue=a2+a1.text+a0;delete a1.text});P(5,function(a3,a5,a0,a2){a3.target=a5;a3.index=a0;a3.text=a5.nodeValue.substr(a0,a2);var a4=a5.nodeValue.substr(0,a0),a1=a5.nodeValue.substr(a0+a2);a5.nodeValue=a4+a1},aY[4].redo,aY[4].undo);P(6,function(a2,a3,a0,a1){a2.target=a3;a2.css=a0;a2.newValue=a1;a2.oldValue=p==2?a2.target.style.getAttribute(a2.css):a2.target.style[a2.css];this.redo(a2)},function(a0){if(p==2){a0.target.style.setAttribute(a0.css,a0.oldValue)}else{a0.target.style[a0.css]=a0.oldValue}},function(a0){if(p==2){a0.target.style.setAttribute(a0.css,a0.newValue)}else{a0.target.style[a0.css]=a0.newValue}});P(7,function(a1,a2,a0){a1.target=a2;a1.newName=a0;a1.oldName=au(a2);this.redo(a1)},function(a0){am(a0.target,a0.oldName)},function(a0){am(a0.target,a0.newName)});P(9,function(a1,a2,a0){a1.row=a2;a1.index=a0>a2.cells.length?a2.cells.length:a0;if(a1.index<0){a1.index=0}return this.redo(a1)},function(a0){a0.row.deleteCell(a0.index)},function(a0){return a0.row.insertCell(a0.index)});P(8,function(a2,a1,a0){a2.table=a1;a2.index=a0>a1.rows.length?a1.rows.length:a0;if(a2.index<0){a2.index=0}return this.redo(a2)},function(a0){a0.table.deleteRow(a0.index)},function(a0){return a0.table.insertRow(a0.index)});P(10,function(a2,a1,a0){a2.table=a1;a2.index=a0>=a1.rows.length?a1.rows.length-1:a0;if(a2.index<0){a2.index=0}this.redo(a2)},function(a1){var a0=a1.table.insertRow(a1.index);while(a1.row.firstChild){var a2=a1.row.firstChild;a1.row.removeChild(a2);a0.appendChild(a2)}delete a1.row},function(a0){a0.row=a0.table.rows[a0.index];a0.table.deleteRow(a0.index)});P(11,function(a1,a2,a0){a1.row=a2;a1.index=a0>=a2.cells.length?a2.cells.length-1:a0;if(a1.index<0){a1.index=0}this.redo(a1)},function(a0){var a2=a0.row.insertCell(a0.index);while(a0.cell.firstChild){var a1=a0.cell.firstChild;a0.cell.removeChild(a1);a2.appendChild(a1)}delete a0.cell},function(a0){a0.cell=a0.row.cells[a0.index];a0.row.deleteCell(a0.index)});(function(){var a1={specialToCharCode:{8:"Backspace",9:"Tab",13:"Enter",27:"Escape",32:"Space"},keyCodeToId:{16:"Shift",17:"Control",18:"Alt",20:"CapsLock",224:"Meta",37:"Left",38:"Up",39:"Right",40:"Down",33:"PageUp",34:"PageDown",35:"End",36:"Home",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",44:"PrintScreen",145:"Scroll",19:"Pause",91:"Win",93:"Apps"},numpadToCharCode:{96:"0".charCodeAt(0),97:"1".charCodeAt(0),98:"2".charCodeAt(0),99:"3".charCodeAt(0),100:"4".charCodeAt(0),101:"5".charCodeAt(0),102:"6".charCodeAt(0),103:"7".charCodeAt(0),104:"8".charCodeAt(0),105:"9".charCodeAt(0),106:"*".charCodeAt(0),107:"+".charCodeAt(0),109:"-".charCodeAt(0),110:".".charCodeAt(0),111:"/".charCodeAt(0)},charCodeA:"A".charCodeAt(0),charCodeZ:"Z".charCodeAt(0),charCodea:"a".charCodeAt(0),charCodez:"z".charCodeAt(0),charCode0:"0".charCodeAt(0),charCode9:"9".charCodeAt(0),keyCodeFix:{},charCodeToKeyCode:{},ambiguousKeyPressCodes:{}};a1.idToKeyCode={};for(var a2 in a1.keyCodeToId){a1.idToKeyCode[a1.keyCodeToId[a2]]=parseInt(a2,10)}for(var a2 in a1.specialToCharCode){a1.idToKeyCode[a1.specialToCharCode[a2]]=parseInt(a2,10)}switch(p){case 2:a1.charCodeToKeyCode={13:13,27:27};break;case 1:a1.keyCodeFix={12:a3("NumLock")};break;case 3:if(d.engineVersion&&d.engineVersion<525.13){a1.charCodeToKeyCode={63289:a3("NumLock"),63276:a3("PageUp"),63277:a3("PageDown"),63275:a3("End"),63273:a3("Home"),63234:a3("Left"),63232:a3("Up"),63235:a3("Right"),63233:a3("Down"),63272:a3("Delete"),63302:a3("Insert"),63236:a3("F1"),63237:a3("F2"),63238:a3("F3"),63239:a3("F4"),63240:a3("F5"),63241:a3("F6"),63242:a3("F7"),63243:a3("F8"),63244:a3("F9"),63245:a3("F10"),63246:a3("F11"),63247:a3("F12"),63248:a3("PrintScreen"),3:a3("Enter"),12:a3("NumLock"),13:a3("Enter")}}else{a1.charCodeToKeyCode={13:13,27:27}}break;case 5:a1.ambiguousKeyPressCodes={35:51,36:52,44:188,45:109,46:190,91:219,93:221};a1.prestoSimulateInvOnShift={51:1,52:1};a1.prestoUseWhichCodes={33:1,34:1,40:1,39:1,38:1,37:1,123:1};break}a1.ambiguousKeyPressCodesInv={};for(var a2 in a1.ambiguousKeyPressCodes){a1.ambiguousKeyPressCodesInv[a1.ambiguousKeyPressCodes[a2]]=parseInt(a2,10)}de.events.Keyboard={getKeyIdentifier:function(bc,ba){var bg,bf,a8=false;switch(p){case 2:if(ba&&(a0(bc.keyCode)||bc.keyCode==8||bc.keyCode==9)){bg=bc.keyCode}if((!ba&&!bc.ctrlKey)||(ba&&bc.ctrlKey)){if(a1.charCodeToKeyCode[bc.keyCode]){bg=a1.charCodeToKeyCode[bc.keyCode]}else{bf=bc.keyCode}}break;case 1:if(ba){if(bc.keyCode>=16&&bc.keyCode<=18){bg=bc.keyCode}}else{bg=a1.keyCodeFix[bc.keyCode]||bc.keyCode;bf=bc.charCode}break;case 3:if(E==6){if(ba){if(K&&K<525.13){bg=a1.charCodeToKeyCode[bc.charCode]||bc.keyCode}else{bg=bc.keyCode}if(!a0(bg)&&!this.isAcceleratorDown(bc)){bg=0}}else{if(K&&K<525.13){if(a1.charCodeToKeyCode[bc.charCode]){bg=a1.charCodeToKeyCode[bc.charCode]}else{bf=bc.charCode}}else{if(a1.charCodeToKeyCode[bc.keyCode]){bg=a1.charCodeToKeyCode[bc.keyCode]}else{bf=bc.keyCode}}}}else{if(E==4){if(ba){if(a0(bc.keyCode)){bg=bc.keyCode}else{if(this.isAcceleratorDown(bc)){bf=bc.keyCode}}}else{if(bc.charCode&&!this.isAcceleratorDown(bc)){bf=bc.charCode}}}else{a8=true}}break;case 5:if(ba){if(a1.ambiguousKeyPressCodesInv[bc.keyCode]){var bd=a1.prestoSimulateInvOnShift[bc.keyCode];if((bc.shiftKey&&bd)||(!bc.shiftKey&&!bd)){bf=a1.ambiguousKeyPressCodesInv[bc.keyCode]}}else{if(a1.ambiguousKeyPressCodes[bc.keyCode]){bg=bc.keyCode}}}else{if(bc.which&&(a7(bc.which)||a1.prestoUseWhichCodes[bc.which])){bf=bc.which}else{if(a1.keyCodeToId[bc.keyCode]){bg=bc.keyCode}else{bf=bc.keyCode}}}break;case 4:a8=true;break;default:a8=true}if(a8&&ba){if(bc.keyIdentifier&&bc.keyIdentifier.length>0){var a9=/^U\+([\dA-Fa-f]+)$/.exec(bc.keyIdentifier);if(a9){var bb=parseInt(a9[1],16);var be=String.fromCharCode(bb);if(bc.shiftKey){return be.toUpperCase()}else{return be.toLowerCase()}}else{return bc.keyIdentifier}}else{bg=bc.keyCode||bc.which;bf=bc.charCode}}if(bg){if(!ba&&a1.ambiguousKeyPressCodes[bg]){return null}return a4(bg)}else{if(bf){return a6(bf)}}return null},isAcceleratorDown:function(a8){return W==2?a8.metaKey:a8.ctrlKey}};function a0(a8){return typeof a1.keyCodeToId[a8]=="string"||typeof a1.specialToCharCode[a8]=="string"}function a5(a8){return a7(a8)||a1.specialToCharCode[a8]||a1.numpadToCharCode[a8]||a0(a8)}function a7(a8){return(a8>=a1.charCodeA&&a8<=a1.charCodeZ)||(a8>=a1.charCodea&&a8<=a1.charCodez)||(a8>=a1.charCode0&&a8<=a1.charCode9)}function a6(a8){return a1.specialToCharCode[a8]||String.fromCharCode(a8)}function a4(a9){if(a5(a9)){var a8=a1.numpadToCharCode[a9];if(a8){return String.fromCharCode(a8)}return(a1.keyCodeToId[a9]||a1.specialToCharCode[a9]||String.fromCharCode(a9))}else{return null}}function a3(a8){return a1.idToKeyCode[a8]||a8.charCodeAt(0)}})();var ak;(function(){var bb=null,bg=null,a4=null,bq=null,bn=null,bl=null,a2=null,ba={high:"#3B4B5B",low:"#DFFFFF"},a9=false,bk=false,br=3,bf=aZ("button,input,select,textarea"),bm=aZ("br,button,img,iframe,map,object,select,textarea,applet"),a1=/^\W$/,bc,a0,a6;L("Selection",function(){h(de.selection);if(typeof H.onselectstart!="undefined"){H.onselectstart=function(){return de.events.consume(window.event)}}var bs=p==1?window:document;A(bs,"mousedown",a8);A(bs,"mouseup",a3);A(bs,"mousemove",be);A(bs,"dblclick",bp);A(document,"keydown",function(bu){if(de.events.Keyboard.isAcceleratorDown(bu)){if(bu.keyCode==65){return false}}});de.cursor.addObserver({onCursorChanged:function(bv){if(a9){return}if(bv){var bu=bd(bv.domNode,bh(bv));de.selection.setSelection(bu.node,bu.index,null,null,false)}else{de.selection.clear()}}});function bt(){de.selection.clear()}de.UndoMan.addObserver({onBeforeExec:bt,onBeforeUndo:bt,onBeforeRedo:bt});bc=N("div");am(bc,ax);bc.innerHTML='<input type="text" style="border-style:none">';ao(bc,"position:absolute;width:1px;height:1px;display:none;z-index:-500");a0=bc.firstChild;H.appendChild(bc)},"Cursor","UndoMan");function a8(bv){a6=0;var bu=de.events.getEventTarget(bv);var by=X(bu);if(bu&&bf[by]){if(by=="textarea"||(by=="input"&&bu.type=="text")){de.selection.clear();de.cursor.setCursor(null)}return}if(de.events.Mouse.isLeftDown()){if(de.doc.isProtectedNode(bu)){a6=1;return}var bs=de.events.getXYInWindowFromEvent(bv),bx=de.cursor.getCursorDescAtXY(bs.x,bs.y,bu);if(!bx){de.cursor.setCursor(null);return false}if(bv.shiftKey&&bb){a9=true;de.cursor.setCursor(bx);a9=false;var bt=bd(bx.domNode,bh(bx));a5(bb,bg,bt.node,bt.index,false)}else{de.cursor.setCursor(bx);if(!de.cursor.exists()&&!de.doc.isProtectedNode(bx.domNode)){var bt=bd(bx.domNode,bh(bx));a5(bt.node,bt.index,null,null,false)}}var bw=aR();bc.style.left=(bw.left==0?-50:bw.left+10)+"px";bc.style.top=(bw.top==0?-50:bw.top+10)+"px";bc.style.display="";a0.focus();a0.select();bc.style.display="none";return false}}function be(bw){if(de.events.Mouse.isLeftDown()&&bb&&!a6){bk=true;var bs=de.events.getXYInWindowFromEvent(bw),bv=de.cursor.getCurrentCursorDesc();if(bv&&bs.x>=(bv.x-br)&&bs.x<=(bv.x+bv.width+br)&&bs.y>=(bv.y-br)&&bs.y<=(bv.y+bv.height+br)){var bt=0;if(Math.abs(bs.x-bv.x)<Math.abs(bs.x-(bv.x+bv.width))){if(bv.isRightOf){bv.isRightOf=false;a9=true;de.cursor.setCursor(bv);a9=false;bt=1}}else{if(!bv.isRightOf){bv.isRightOf=true;a9=true;de.cursor.setCursor(bv);a9=false;bt=1}}if(bt){var bu=bd(bv.domNode,bh(bv));a5(bb,bg,bu.node,bu.index,false)}}else{bv=de.cursor.getCursorDescAtXY(bs.x,bs.y,de.events.getEventTarget(bw));if(bv&&!de.doc.isProtectedNode(bv.domNode)){var bu=bd(bv.domNode,bh(bv));a5(bb,bg,bu.node,bu.index)}}}}function a3(bs){if(bb&&bk){de.selection.fireEvent("SelectionChanged")}bk=false}function bp(bv){if(!de.doc.isProtectedNode(de.events.getEventTarget(bv))){de.selection.clear();var bs=de.events.getXYInWindowFromEvent(bv);var bu=de.cursor.getCursorDescAtXY(bs.x,bs.y,de.events.getEventTarget(bv));if(bu){var bt=de.selection.getWordRangeAt(bu.domNode,bu.relIndex);if(bt){a5(bt.startNode,bt.startIndex,bt.endNode,bt.endIndex)}}}return false}function bd(bt,bs){if(bn){return bn.getOriginalNodeIndex(bt,bs)}return{node:bt,index:bs}}function bi(bt,bs){if(bn){return bn.getAdjustedNodeIndex(bt,bs)}return{node:bt,index:bs}}ak=function(bs){if(bs&&bn){aW(a2)}else{if(!bs&&bn){u(a2)}}};function a7(){var bs=de.selection.getRange(true);try{var bu=de.cursor.getCurrentCursorDesc();bn=aa(w(bs.startNode,bs.endNode),bs.startNode,bs.startIndex,bs.endNode,bs.endIndex);bl=aP()||[];bn.visit(function(by){if(!by.isShared){var bx=by.node,bw=null;if(bx.nodeType==1){bw=bx}else{if(bx.nodeType==3&&by.parent.isShared&&aH(bx)){bw=N("span");bw.className="dehighlight-node";Q(1,bw,bx.parentNode,l(bx));Q(2,bx);Q(1,bx,bw)}}if(bw){Q(6,bw,"backgroundColor",ba.high);Q(6,bw,"color",ba.low)}}});a2=aP()||[];if(bu){var bt=bi(bu.domNode,bu.relIndex);if(bt.node!=bu.domNode||bt.index!=bu.relIndex){bu.domNode=bt.node;bu.relIndex=bt.index;a9=true;de.cursor.setCursor(bu);a9=false}}}catch(bv){settingHighlight=false;bb=a4=bn=null;a2=null;throw bv}}function bj(){if(bn){var bt=de.cursor.getCurrentCursorDesc();var bs=bt?bd(bt.domNode,bt.relIndex):null;u(a2);u(bl);a2=bl=bn=null;if(bs&&(bs.node!=bt.domNode||bs.index!=bt.relIndex)){bt.domNode=bs.node;bt.relIndex=bs.index;a9=true;de.cursor.setCursor(bt);a9=false}}}function a5(bt,bE,bB,by,bv){if(!bt){de.selection.clear(bv);return}if(bt==bB&&bE==by){bB=null}if(bt==bb&&bE==bg&&((!bB&&!a4)||(bB==a4&&by==bq))){return}bj();bb=bt;bg=bE;a4=bB;bq=by;if(a4){var bA=bo(),bz;while(bb){bz=de.doc.getProtectedNodeContainer(bb);if(bz){bb=(bA?bz.nextSibling:bz.previousSibling);if(bb){bg=bA?0:ah(bb,1)}}else{break}}while(a4){bz=de.doc.getProtectedNodeContainer(a4);if(bz){a4=(bA?bz.previousSibling:bz.nextSibling);if(a4){bq=bA?ah(a4,1):0}}else{break}}var bF=bb&&a4;if(bF){bF=false;var bw=[];R(w(bb,a4),bb,bA,function(bG){bz=de.doc.getProtectedNodeContainer(bG);if(bz){bw.push(bz)}if(bG==a4){bF=true;return false}})}if(!bF){de.selection.clear(bv);return}for(var bx in bw){var bD=bw[bx];if(bD.parentNode){bD.parentNode.removeChild(bD)}}for(var bx in bw){var bD=bw[bx];if(!bD.parentNode){H.appendChild(bD)}}a7()}if(bv!==false){var bs=null;if(de.selection.isRangeEditable()){var bu=a4?bi(a4,bq):bi(bb,bg);var bC=false;if(bu.node.nodeType==3&&bu.index>=ah(bu.node)){bC=true;bu.index--}bs=de.cursor.getNearestCursorDesc(bu.node,bu.index,bC,true)}a9=true;de.cursor.setCursor(bs);a9=false}if(!bk){de.selection.fireEvent("SelectionChanged")}}function bh(bt){var bs=bt.relIndex;if(bt.isRightOf&&bt.domNode.nodeType==3){bs++}return bs}function bo(){if(!a4){return true}if(bb==a4){return bg<bq}var bu=bi(bb,bg).node,bt=bi(a4,bq).node;var bs=false;R(H,bu,true,function(bv){bs=(bv==bt);return !bs});return bs}de.selection={setSelection:a5,clear:function(bs){bj();bb=a4=null;if(bs!==false){a9=true;de.cursor.setCursor(null);a9=false}if(!bk){de.selection.fireEvent("SelectionChanged")}},getRange:function(bu){if(!bb){return null}if(a4){var bs=bo();var bt=!bu||bs;range={inOrder:bu||(bs==bt),startNode:bt?bb:a4,startIndex:bt?bg:bq,endNode:bt?a4:bb,endIndex:bt?bq:bg}}else{range={startNode:bb,startIndex:bg}}return range},isRangeEditable:function(){if(bb){var bu=bi(bb,bg).node;var bt=a4?bi(a4,bq).node:bu;var bs=w(bu,bt,true);return(bu!=bt&&de.doc.isEditSection(bs))||de.doc.isNodeEditable(bs)}return false},getState:function(){if(bn){return"range"}if(bb){return"single"}return null},getActualNodeIndex:bi,getVirtualNodeIndex:bd,setHightlightCSS:function(){},remove:function(){var bs=this.getRange(true);if(bs&&bs.endNode){if(!this.isRangeEditable()){aj("Attempt to remove selection which contains uneditable content")}de.UndoMan.execute("RemoveDOM",bs.startNode,bs.startIndex,bs.endNode,bs.endIndex);return true}return false},getHighlightedDOM:function(){if(bn){u(a2);var bt=(function bs(bx){var bv=bx.node.cloneNode(false);for(var bu in bx.children){var bw=bs(bx.children[bu]);bv.appendChild(bw)}return bv})(bn);aW(a2);return bt}return null},selectAll:function(bs){if(!bs){var bt=de.cursor.getCurrentCursorDesc();if(bt){bs=de.doc.getEditSectionContainer(bt.domNode)}}if(bs){de.selection.setSelection(bs.firstChild,0,bs.lastChild,ah(bs.lastChild,1))}},selectES:function(bs,bv){var bu=bs;if(bv){while(bu.firstChild){bu=bu.firstChild}}else{while(bu.lastChild){bu=bu.lastChild}}var bt=de.cursor.getNearestCursorDesc(bu,bv?0:ah(bu,1),!bv,!bv);if(bt){de.cursor.setCursor(bt)}},getWordRangeAt:function(bw,bu){if(bw.nodeType==3){var bt={startNode:bw,startIndex:bu,endNode:bw,endIndex:bu};var bs=de.doc.isNodeEditable(bw);R(H,bw,false,function(by){if(by!=bw&&j(by,w(by,bw,true),bv,true)){return false}else{if(by.nodeType==3){for(var bx=by==bw?bu:ah(by)-1;bx>=0;bx--){var bz=by.nodeValue.charAt(bx);if(a1.test(bz)){return false}bt.startNode=by;bt.startIndex=bx}}}});R(H,bw,true,function(by){if(by!=bw&&(bv(by)||j(bw,w(by,bw,true),bv,true))){return false}if(by.nodeType==3){for(var bx=by==bw?bu:0;bx<ah(by);bx++){var bz=by.nodeValue.charAt(bx);if(a1.test(bz)){return false}bt.endNode=by;bt.endIndex=bx}}});bt.endIndex++;return bt}function bv(bx){return aL(bx)||bm[X(bx)]||(bs&&de.doc.isEditSection(bx))}},getEditState:function(bw){var bu={formatStates:{},inlineContainerType:null,textAlign:null,blockQuote:false};if(bn){u(a2);(function bv(bx){bs(bx.node)})(bn);aW(a2)}if(bb&&(bb.nodeType==3||ae(bb))){bs(bb.nodeType==3?bb.parentNode:bb)}return bu;function bt(bx){return X(bx)=="blockquote"}function bs(by){if(ae(by)){var bC=de.doc.getEditProperties(by)||{};for(var bB in bw){var bx=bw[bB].toLowerCase();if(!bu.formatStates[bx]||bu.formatStates[bx]!="mixed"){var bD=by,bz=false;while(bD!=H&&de.doc.isNodeEditable(bD)){var bE=q[bx+"Eval"](bD);if(bE){if(typeof bu.formatStates[bx]=="undefined"){bu.formatStates[bx]=bE.value}else{if(bu.formatStates[bx]!==bE.value){bu.formatStates[bx]="mixed"}}bz=true;break}bD=bD.parentNode}if(!bz){bu.formatStates[bx]=(bu.formatStates[bx]===null||typeof bu.formatStates[bx]=="undefined")?null:"mixed"}}}}if(by.nodeType==1){if(bu.textAlign!="mixed"){var bF=aD(by,"text-align");if(!bF){bF="start"}if(bF=="start"){bF=_localeDirection=="rtl"?"right":"left"}else{if(bF=="start"){bF=_localeDirection=="rtl"?"left":"right"}}if(!bu.textAlign){bu.textAlign=bF}else{if(bF!=bu.textAlign){bu.textAlign="mixed"}}}if(bu.inlineContainerType!="mixed"){var bG=aL(by)?by:j(by,H,aL,true);if(!de.doc.isNodeEditable(bG)){bG=null}var bA=bG?X(bG):"none";if(!bu.inlineContainerType){bu.inlineContainerType=bA}else{if(bA!=bu.inlineContainerType){bu.inlineContainerType="mixed"}}}if(!bu.blockQuote){var bH=bt(by)?by:j(by,H,bt,true);if(de.doc.isNodeEditable(bH)){bu.blockQuote=true}}}}}}})();L("Spell",function(){A(p==1?window:document,"mouseup",function(){var a1=de.selection.getRange();if(a1&&!a1.endNode){var a0=de.spell.getMarkedAncestor(a1.startNode);if(a0){de.selection.setSelection({startNode:a0,startIndex:0,endNode:a0,endIndex:1})}}})},"Selection");(function(){var a2="sw-spell-error",a1=/^sw-spell-error$/;de.spell={getWords:function(a3){if(!a3){a3=de.doc.getAllEditSections()}var a6=[],a4={};for(var a5 in a3){a0(a3[a5],function(a7){if(!a4[a7]){a6.push(a7);a4[a7]=1}})}return a6},markWords:function(a6,a3){if(!a3){a3=de.doc.getAllEditSections()}a6=aZ(typeof a6=="string"?a6.replace(/\s/g,","):a6.join(","));var a5=0;for(var a4 in a3){a0(a3[a4],function(ba,a8,bb,a7,a9){if(a6[ba]){var bc=de.UndoMan.execute(a5?1:0,"SpellMark",a8,bb,a7,a9+1);a5=1;return bc.children[bc.children.length-1].node}})}},clearAllMarks:function(a3){if(!a3){a3=de.doc.getAllEditSections()}var a5=[],a4;for(a4 in a3){R(a3[a4],a3[a4],true,function(a6){if(de.spell.isSpellErrorWrapper(a6)){a5.push(a6)}})}for(a4 in a5){de.UndoMan.execute(a4=="0"?0:1,"SpellUnmark",a5[a4])}return a5.length},ignoreError:function(a4,a3){de.UndoMan.execute(a3?a3:0,"SpellUnmark",a4)},correctError:function(a4,a3){de.UndoMan.execute("SpellCorrect",a4,a3)},getMarkedAncestor:function(a3){return this.isSpellErrorWrapper(a3)?a3:j(a3,this.isSpellErrorWrapper)},isSpellErrorWrapper:function(a3){return T(a3,a1)?true:false},stripSpellWrapperHTML:function(a3){var a4=/<span class\s*=\s*(?:"|')sw-spell-error(?:"|')\s*>([^<]+)<\/span>/i;while(match=a4.exec(a3)){a3=a3.substr(0,match.index)+match[1]+a3.substr(match.index+match[0].length)}return a3}};function a0(a6,bc){var a5=/^\W$/,ba=a6,a4,bb,a9,a7,a3;while(ba){R(a6,ba,true,function(be){if(ba==be){ba=0}else{if(be.nodeType==3&&be.parentNode.nodeType==1){if(a9&&be.previousSibling!=a9){if(a8()){return false}}var bf=be.nodeValue,bd;for(bd=0;bd<bf.length;bd++){var bg=bf.charAt(bd);if(a5.test(bg)){if(a8()){return false}}else{if(!a4){a4=be;bb=bd;a3=""}a3+=bg;a9=be;a7=bd}}}}})}a8();function a8(){if(a4&&a9&&!de.doc.isProtectedNode(a4)&&!de.doc.isNodePackaged(a4)){ba=bc(a3,a4,bb,a9,a7);a4=a9=0;return ba}a4=a9=0}}aI("SpellMark",{exec:function(a4,a8,a3,a6){var ba=aa(null,a4,a8,a3,a6),a9=N("span");am(a9,a2);Q(1,a9,ba.node,ba.children[0].pos);for(var a5=0;a5<ba.children.length;a5++){var a7=ba.children[a5].node;Q(2,a7);Q(1,a7,a9)}return ba}});aI("SpellUnmark",{exec:function(a3){while(a3.firstChild){var a4=a3.firstChild;Q(2,a4);Q(1,a4,a3.parentNode,l(a3))}Q(2,a3)}});aI("SpellCorrect",{exec:function(a4,a3){Q(1,document.createTextNode(a3),a4.parentNode,l(a4));Q(2,a4)}})})();de.Typing={};(function(){L("Typing",function(){A(document,"keystroke",a1);h(de.Typing)},"MVC");function a1(bb,bg){var a2={cancel:false};de.Typing.fireEvent("Typing",a2,bb,bg);if(a2.cancel){return}if(de.events.Keyboard.isAcceleratorDown(bb)){switch(bg.toLowerCase()){case"z":de.UndoMan.undo();return false;case"y":de.UndoMan.redo();return false}}if(!de.selection.isRangeEditable()||!de.cursor.exists()){return}var bi=de.doc.getEditSectionContainer(de.cursor.getCurrentCursorDesc().domNode);if(de.events.Keyboard.isAcceleratorDown(bb)){switch(bg.toLowerCase()){case"b":a0("bold");return false;case "s": save_live_doc_html(); return false; case "l": revert_to_orig_doc(); return false; case"i":a0("italics");return false;case"u":a0("underline");return false;case"a":de.selection.selectAll(bi);return false}}else{if(!bb.ctrlKey&&!bb.metaKey&&!bb.altKey){var a4=bg;if(a4){if(a4.length>1){switch(a4){case"Space":a4=" ";break;case"Tab":if(aL(bi)||bi==H){de.UndoMan.execute("Indent",!bb.shiftKey)}return false;case"Delete":case"Backspace":if(de.selection.remove()){return false}else{var a7=de.cursor.getCurrentCursorDesc(),bd,a5;if(a4=="Backspace"){if(a7.isRightOf&&(a7.placement==(4|2))){bd=o(a7);bd.isRightOf=false}else{bd=de.cursor.getNextCursorMovement(a7,true)}a5=a7}else{bd=a7;if(!a7.isRightOf&&(a7.placement==(4|2))){a5=o(a7);a5.isRightOf=true}else{a5=de.cursor.getNextCursorMovement(a7,false)}}if(bd&&a5){var bf=de.doc.isNodeEditable(a5.domNode);if(bf&&a5.domNode!=bd.domNode){bf&=de.doc.isNodeEditable(bd.domNode)}if(bf){var a3;if(bd.domNode.nodeType==3){a3=bd.relIndex;if(bd.isRightOf){a3++}}else{if(X(bd.domNode)=="br"){var ba=0;I(w(bd.domNode,a5.domNode),bd.domNode,true,null,function(bj){if(X(bj)=="br"){ba++}return bj!=a5.domNode});a3=ba>1?1:0}else{a3=bd.isRightOf?1:0}}var bc;if(a5.domNode.nodeType==3){bc=a5.relIndex;if(a5.isRightOf){bc++}}else{if(X(a5.domNode)=="br"){var ba=0;I(w(bd.domNode,a5.domNode),bd.domNode,true,null,function(bj){if(X(bj)=="br"&&!(bj==bd.domNode&&a3==1)){ba++}return bj!=a5.domNode});bc=ba>1?0:1}else{bc=a5.isRightOf?1:0}}var a8=de.selection.getVirtualNodeIndex(bd.domNode,a3),be=de.selection.getVirtualNodeIndex(a5.domNode,bc);if(a8.node==be.node&&a8.node.nodeType==3){de.UndoMan.execute("RemoveText",a8.node,a8.index,be.index-a8.index)}else{var a6=w(a8.node,be.node,true);if(de.doc.isEditSection(a6)||de.doc.isNodeEditable(a6)){de.UndoMan.execute("RemoveDOM",a8.node,a8.index,be.node,be.index)}}}}return false}case"Enter":de.selection.remove();var a7=de.cursor.getCurrentCursorDesc();var a9=a7.relIndex;if(a7.domNode.nodeType==3){a9+=(a7.isRightOf?1:0)}else{a9=a7.isRightOf?1:0}if(!de.doc.getEditProperties(bi).singleLine){if(bb.shiftKey){var bh="<br>";if(!(a7.domNode.nodeType==3&&a9<ah(a7.domNode))){bh+=aG(de.doc.createMNPlaceholder())}de.UndoMan.execute("InsertHTML",bh,a7.domNode.parentNode,a7.domNode,a9)}else{if(aL(bi)||bi==H){de.UndoMan.execute("SplitContainer",a7.domNode,a9)}}}return false;default:return true}}de.selection.remove();var a7=de.cursor.getCurrentCursorDesc();var a9=a7.relIndex;if(a7.domNode.nodeType==3&&a7.isRightOf){a9++}else{if(a7.domNode.nodeType==1){a9=a7.isRightOf?1:0}}de.UndoMan.execute("InsertText",a7.domNode,a4,a9);return false}}}}function a0(a2){return de.UndoMan.execute("Format",a2,!de.selection.getEditState([a2]).formatStates[a2])?true:false}})();(function(){var a0=aZ("dt,dd,caption,colgroup,col,thead,tfoot,tbody,legend,optgroup,option,area,frame");aI("TextAlign",{exec:function(a7,a3,a1){if(!a3){if(!this.selBefore){return}if(this.selBefore.endNode){a3=this.selBeforeOrdered.startNode;a1=this.selBeforeOrdered.endNode}else{a3=a1=this.selBefore.startNode}}var a5;var a2=w(a3,a1);for(var a6=0;a6<2;a6++){while(a2!=H&&!aL(a2)){a2=a2.parentNode}if(a2==H){break}if(X(a2)=="li"){a5=[a2];break}a2=a2.parentNode}if(!a5){a5=aQ(a3,a1)}for(var a4 in a5){R(a5[a4],a5[a4],true,function(a8){if(aL(a8)&&!a0[X(a8)]){Q(6,a8,"textAlign",a7)}})}this.selAfter=this.selBefore}})})();(function(){var a0=aZ("p,pre,h1,h2,h3,h4,h5,h6,li,address");aI("SplitContainer",{exec:function(a9,bd){var a3=j(a9.parentNode,H,aL,true)||H,bg,a4;if(!a0[X(a3)]){R(a3,a9,true,function(bi){if(aL(bi)){bg=bi}return bg==null});if(!bg||bg==a3){bg=a3;a4=1}else{if(bg==a9){bg=null}else{a4=0}}}else{bg=a3;a4=1}var a7;if(bg){a7=aa(a3,a9,bd,bg,a4);var bb=true;a7.visit(function(bi){if(!bi.isShared){bb=false}return bb});if(bb){a7=null}else{a7.disconnect()}}var a8,a2,a1;if(a0[X(a3)]){if(X(a3)!="li"&&a3!=H){var be=j(a3.parentNode,H,aL,true);if(be&&X(be)=="li"){a1=a3;a3=be}}a8=a3;a2=(a3.nodeName.charAt(0).toLowerCase()=="h"&&!a7)?N("p"):a3.cloneNode(false)}else{a2=N("p")}if(!a8){if(a7){var bf=a7.getStartFragment();if(a7.wasStartSplit()){a8=bf.getPreSplitNode()}else{if(bf.isShared){a8=bf.node}else{var bh=bf;while(!bh.isShared){bh=bh.parent}if(bh.node.firstChild){if(bh.children.length>0){if(bh.children[0].pos>0){a8=bh.node.childNodes[bh.children[0].pos-1]}else{Q(1,a2,bh.node,0);a8=null}}else{a8=bh.node.lastChild}}else{if(bh==a7){Q(1,a2,a3,0);a8=null}else{a8=bh.node}}}}}else{if(bd==0){Q(1,a2,a9.parentNode,l(a9));a8=null}else{a8=a9}}if(a8&&a8!=H&&!aL(a8)){while(a8!=H&&a8.parentNode!=H&&!aL(a8)&&!aL(a8.parentNode)){a8=a8.parentNode}}}if(a8){Q(1,a2,a8.parentNode,l(a8)+1)}if(a7){for(var ba in a7.children){var bc=a5(a7.children[ba]);if(bc){Q(1,bc,a2)}}}if(aF(a2)){Q(1,de.doc.createMNPlaceholder(),a2)}if(aF(a3)){Q(1,de.doc.createMNPlaceholder(),a3)}if(a1&&aF(a1)){Q(1,de.doc.createMNPlaceholder(),a1)}if(this.flags&2){var a6=de.cursor.getNearestCursorDesc(a2,0,false,false);if(a6){this.selAfter={startNode:a6.domNode,startIndex:a6.relIndex+(a6.domNode.nodeType==3&&a6.isRightOf?1:0)}}}function a5(bm){var bi;if(bm.isShared){var bl=true;bm.visit(function(bn){if(!bn.isShared){bl=false}return bl});if(bl){return null}bi=bm.node.cloneNode(false)}else{bi=bm.node;if(bi.parentNode&&bi.parentNode.nodeType!=11){Q(2,bi)}while(bi.firstChild){Q(2,bi.firstChild)}}for(var bj in bm.children){var bk=a5(bm.children[bj]);if(bk){Q(1,bk,bi)}}return bi}}})})();aI("RemoveText",{exec:function(a2,a5,a1){if(de.doc.isESPlaceHolder(a2,false)||de.doc.isMNPlaceHolder(a2,false)){if(this.flags&2){var a3=de.cursor.getCurrentCursorDesc();if(a3){this.selAfter={startNode:a3.domNode,startIndex:a3.relIndex+(a3.domNode.nodeType==3&&a3.isRightOf?1:0)}}}return}var a8,a7;if(a5==0){R(H,a2,false,function(ba){if(ba==a2){return}var a9=w(a2,ba);if(j(ba,a9,aL,true)){return false}if(ba.nodeType==3&&ah(ba)>0){if(M(ba.nodeValue.charAt(ah(ba)-1))){a8=a9;return false}}})}else{if(M(a2.nodeValue.charAt(a5-1))){a8=a2}}if((a5+a1)==ah(a2)){R(H,a2,true,function(ba){if(ba==a2){return}var a9=w(a2,ba);if(aL(ba)||j(a2,a9,aL,true)){return false}if(ah(ba,0)>0){if(M(ba.nodeValue.charAt(0))){a7=a9;return false}}})}else{if(M(a2.nodeValue.charAt(a5+a1))){a7=a2}}var a6=(a8&&a7&&a8!=a7)?w(a8,a7,true):a8||a7;if(a6){Y(a6)}Q(5,a2,a5,a1);if(a6){s(a6)}var a4,a0=de.doc.getEditSectionContainer(a2);if(a0&&aA(a0)){a4=de.doc.createESPlaceholder(a0)}else{a0=j(a2,H,aL,true)||H;if(aF(a0)){a4=de.doc.createMNPlaceholder()}}if(a4){Q(1,a4,a0)}if(this.flags&2){var a3=a4?de.cursor.createCursorDesc(a4,0,false):de.cursor.getNearestCursorDesc(a2,a5==0?0:a5-1,a5>0,false);if(a3){this.selAfter={startNode:a3.domNode,startIndex:a3.relIndex+(a3.domNode.nodeType==3&&a3.isRightOf?1:0)}}}if(ah(a2)==0){Q(2,a2)}}});aI("RemoveDOM",{exec:function(a0,a8,a5,a4){var a7=aa(w(a0,a5,false),a0,a8,a5,a4);Y(a7.node);var a1=a7.collapse();s(a7.node);if(this.flags&2){var a3;if(a1){a3=de.cursor.getNearestCursorDesc(a1,0,false,true)}else{var a6=a7.getStartFragment();while(a6.node!=H&&!aK(H,a6.node)){a6=a6.parent}var a2=a6.node;if(a6.children.length>0&&a2.childNodes.length>0&&a6.children[0].pos<=a2.childNodes.length){if(a6.children[0].pos==0){a3=de.cursor.getNearestCursorDesc(a2.firstChild,0,false,false)}else{var a9=a2.childNodes[a6.children[0].pos-1];a3=de.cursor.getNearestCursorDesc(a9,ah(a9,2)-1,true,false)}}else{a3=de.cursor.getNearestCursorDesc(a6.node,ah(a6.node,2)-1,true,true)}}if(a3){this.selAfter={startNode:a3.domNode,startIndex:a3.relIndex+(a3.domNode.nodeType==3&&a3.isRightOf?1:0)}}}}});aI("RemoveNode",{exec:function(a0){Q(2,a0)}});(function(){aI("ModifyTable",{exec:function(be,ba,bf){var bl=null,bi=[];R(w(ba,bf),ba,true,function(bm){if(!bl){bl=j(bm,H,function(bn){return(X(bn)=="table")},true)}bi.push(bm);return bm!=bf});if(bl){var bb={start:null,end:null};for(var bg=0;bg<bl.rows.length;bg++){var bk=bl.rows[bg];for(var bh=0;bh<bk.cells.length;bh++){var bj=bk.cells[bh];for(var bc in bi){if(bi[bc]==bj||aK(bj,bi[bc])){if(!bb.start){bb.start=[parseInt(bg),parseInt(bh),bj]}bb.end=[parseInt(bg),parseInt(bh),bj];break}}}}if(bb.start){be=be.toLowerCase().split("-");switch(be[0]){case"insert":if(be.length==4){var bd=parseInt(be[3]);if(isNaN(bd)){aj(1)}if(be[1]=="rows"){a0(bl,bb,be[2]=="before",bd)}else{if(be[1]=="cols"){a7(bl,bb,be[2]=="before",bd)}else{aj(1)}}}else{aj(1)}break;case"delete":if(be.length!=2){aj(1)}switch(be[1]){case"table":a3(bl);break;case"rows":a1(bl,bb);break;case"cols":a9(bl,bb);break;default:aj(1)}break;case"merge":break;case"split":break;default:aj(1)}}}}});function a8(bc,ba){var bb=Q(9,bc,ba);de.UndoMan.execute(4,"InsertHTML","<p>"+aG(de.doc.createMNPlaceholder())+"</p>",bb)}function a0(bj,bg,bb,bd){var be;if(bb){be=bg.start[0]}else{be=bg.end[0]+1;var bh=bg.end[2].getAttribute("rowspan");if(bh){be+=(parseInt(bh)-1)}}if(be>bj.rows.length){be=bj.rows.length}var bf=a5(bj);for(var bc=0;bc<bd;bc++){var bi=Q(8,bj,be);for(var ba=0;ba<bf;ba++){a8(bi,0)}}}function a6(bd,bb){var ba;if(bb){ba=Math.min(bd.start[1],bd.end[1])}else{var bf=bd.start[1],be=bd.end[1];var bc=bd.start[2].getAttribute("colspan");if(bc){bf+=(parseInt(bc)-1)}bc=bd.end[2].getAttribute("colspan");if(bc){be+=(parseInt(bc)-1)}ba=Math.max(bf,be)}return ba}function a5(ba){var bb=0;for(var bc=0;bc<ba.rows.length;bc++){bb=Math.max(bb,ba.rows[bc].cells.length)}return bb}function a7(bk,bh,bc,be){var bj=a6(bh,bc);if(!bc){bj++}for(var bd=0;bd<be;bd++){for(var bf=0;bf<bk.rows.length;bf++){var bm=bk.rows[bf];var ba=-1,bl=bj;for(var bg=0;bg<bm.cells.length;bg++){var bi=bm.cells[bg];ba++;var bb=bi.getAttribute("colspan");if(bb){ba+=(parseInt(bb)-1)}if(ba>=bj){bl=parseInt(bg);break}}a8(bm,bl)}}}function a3(ba){Q(2,ba)}function a1(bc,bb){if(bb.start[0]==0&&bb.end[0]>=(bc.rows.length-1)){a3(bc)}else{for(var ba=0;ba<=(bb.end[0]-bb.start[0]);ba++){Q(10,bc,bb.start[0])}}}function a9(bl,bj){var bd=a6(bj,true),bg=a6(bj,false),bf=a5(bl);if(bd==0&&bg>=(bf-1)){a3(bl)}else{for(var be=0;be<=(bg-bd);be++){for(var bh=0;bh<bl.rows.length;bh++){var bm=bl.rows[bh];var ba=-1,bb=bd;for(var bi=0;bi<bm.cells.length;bi++){var bk=bm.cells[bi];ba++;var bc=bk.getAttribute("colspan");if(bc){ba+=(parseInt(bc)-1)}if(ba>=bd){bb=parseInt(bi);break}}Q(11,bm,bb)}}}}function a4(bb,ba){}function a2(bd){for(var ba in bd){var bc=bd[ba];if(X(bc)=="td"||X(bc)=="th"){var bb=bc.getAttribute("colspan");if(bb){Q(_Operation.SET_ATTRIBUTE,bc,"colspan","")}var bb=bc.getAttribute("rowspan");if(bb){Q(_Operation.SET_ATTRIBUTE,bc,"rowspan","")}}}}})();(function(){var a0=aZ("p, div");aI("Itemize",{exec:function(a3,a4,a1){if(!a4){if(!this.selBefore){return}if(this.selBefore.endNode){a4=this.selBeforeOrdered.startNode;a1=this.selBeforeOrdered.endNode}else{a4=a1=this.selBefore.startNode}}(function a2(br,bk,bD,bA){var bi=j(w(br,bk,true),H,aL,true)||H,bJ,bo;var bE=br,bB=bk;while(bE.firstChild){bE=bE.firstChild}while(bB.lastChild){bB=bB.lastChild}if(y(bi)&&X(bi)!="td"&&X(bi)!="th"){var a5=[];R(bi,bi,true,function(bK){if(bK.nodeType==1&&(X(bK)=="td"||X(bK)=="th")){a5.push(bK);return(bK!=bB&&!aK(bK,bB))}return bK!=bB});var bn=true,bh=[];for(var bH in a5){var bv=bj(a5[bH],a5[bH]);if(bv){bn&=bv.allListEles;bh.push(bv.nrange)}else{bh.push(0)}}for(var bH in a5){if(bh[bH]){a2(a5[bH],a5[bH],bn,bh[bH])}}return}if(X(bi)=="ul"||X(bi)=="ol"){bi=bi.parentNode}var bx=bi;for(var a8=0;a8<2&&bx;a8++){if(X(bx)=="li"){if((bA&&bD)||(!bA&&((a3&&X(bx.parentNode)=="ul")||(!a3&&X(bx.parentNode)=="ol")))){bJ=[bx]}else{bo=[bx];bi=bx.parentNode}break}bx=j(bx.parentNode,H,aL,true)}if(!bA&&!bJ&&!bo){var bv=bj(br,bk);if(bv){bA=bv.nrange;if(bv.allListEles){bJ=bA}else{bo=bA}}else{return}}else{if(bA){if(bD){bJ=bA}else{bo=bA}}}if(bJ){for(var bH in bJ){var by=bJ[bH];var ba=X(by);if(ba=="li"){a9(by,true)}else{if(ba=="ul"||ba=="ol"){var bw=aK(by,br)?j(br,by):by.firstChild,bl=aK(by,bk)?j(bk,by):by.lastChild;while(bw){var bb=bw;bw=bw==bl?null:bw.nextSibling;if(X(bb)=="li"){a9(bb,true)}}}}}}else{var bu;for(var bH in bo){var by=bo[bH];var bg=by==bi?by:j(by,bi),ba=X(by);if(ba=="li"){if(bH=="0"){bu=a9(by,false)}else{var bp=by.parentNode;Q(2,by);Q(1,by,bu);var a7=bp.firstChild;while(a7&&X(a7)!="li"){a7=a7.nextSibling}if(!a7){Q(2,bp)}}}else{if(bH=="0"){bu=N(a3?"ul":"ol");if(ba=="ul"||ba=="ol"){var a6=false;var bq=by.firstChild;while(bq&&X(bq)!="li"){a6|=(bq==br);bq=bq.nextSibling}if(bq){a6|=aK(bq,br)}Q(1,bu,bg.parentNode,l(bg)+(a6?0:1))}else{Q(1,bu,bg.parentNode,l(bg)+1)}}if(ba=="ul"||ba=="ol"){var be=aK(by,br)?j(br,by):by.firstChild,bC=aK(by,bk)?j(bk,by):by.lastChild;while(be){var bs=X(be)=="li"?be:null;be=be==bC?null:be.nextSibling;if(bs){Q(2,bs);Q(1,bs,bu);if(bg!=by){var bm=bs.firstChild;while(bm){if(bm.nodeType!=1&&bm.nodeType!=3){continue}var bG=by.parentNode,bf=[];while(bG){bf.push(bG.cloneNode(false));bG=bG==bg?null:bG.parentNode}for(var bF=bf.length-1;bF>0;bF--){bf[bF].appendChild(bf[bF-1])}Q(1,bf[bf.length-1],bs,l(bm));Q(2,bm);Q(1,bm,bf[0]);bm=bf[bf.length-1].nextSibling}}}}var bt=true;be=by.firstChild;while(be){if(X(be)=="li"){bt=false;break}be=be.nextSibling}if(bt){Q(2,bg)}}else{var bz=N("li");Q(1,bz,bu);Q(2,bg);Q(1,bg,bz);if(a0[ba]){var bc=by.parentNode;Q(2,by);while(by.firstChild){var bI=by.firstChild;Q(2,bI);Q(1,bI,bc)}}}}}}function a9(bO,bT){var bL=bO.previousSibling,bP=false,bQ=false,bU=bO.parentNode,bK=false,bN=null;while(!bP&&bL){bP|=X(bL)=="li";bL=bL.previousSibling}bL=bO.nextSibling;while(!bQ&&bL){bQ|=X(bL)=="li";bL=bL.nextSibling}if(bP){bU=bd(bU,bO,!bT,true);bK=true}if(bT){if(X(bU.parentNode)!="li"){aQ(bO,bO)}while(bO.firstChild){var bS=bO.firstChild;Q(2,bS);Q(1,bS,bU.parentNode,l(bU))}Q(2,bO)}else{if(bK){if(bQ){var bM=bO.nextSibling;while(X(bM)!="li"){bM=bM.nextSibling}bd(bU,bM,true,true)}bN=bU}else{bN=bd(bU,bO,true,false)}}bL=bU.firstChild;while(bL&&X(bL)!="li"){bL=bL.nextSibling}if(!bL){var bR=bU;while(bR.parentNode.childNodes.length==1&&!de.doc.isEditSection(bR.parentNode)&&bR.parentNode!=H){bR=bR.parentNode}Q(2,bR)}return bN}function bd(bM,bP,bL,bN){var bK=bL?N(X(bM)=="ol"?"ul":"ol"):bM.cloneNode(false);if(bN){while(bP){var bO=bP;bP=bP.nextSibling;Q(2,bO);Q(1,bO,bK)}Q(1,bK,bM.parentNode,l(bM)+1)}else{while(bP){var bO=bP;bP=bP.previousSibling;Q(2,bO);Q(1,bO,bK,0)}Q(1,bK,bM.parentNode,l(bM))}return bK}function bj(bP,bK){var bL=aQ(bP,bK);if(bL.length==0){return null}var bO=true;for(var bN in bL){var bM=X(bL[bN]);if(bM=="li"){bM=X(bL[bN].parentNode)}if((a3&&bM!="ul")||(!a3&&bM!="ol")){bO=false;break}}return{allListEles:bO,nrange:bL}}})(a4,a1);this.selAfter=this.selBefore}})})();aI("InsertText",{exec:function(a1,a4,a0){a4=a(aT(a4));var a2;if(de.doc.isESPlaceHolder(a1,false)||de.doc.isMNPlaceHolder(a1,false)){a2=a1;while(!(de.doc.isESPlaceHolder(a2,true)||de.doc.isMNPlaceHolder(a2,true))){a2=a2.parentNode}a1=a2}if(a1.nodeType==3){Q(4,a1,a4,a0);if(this.flags&2){this.selAfter={startNode:a1,startIndex:a0+a4.length}}}else{var a3=document.createTextNode(a4);Q(1,a3,a1.parentNode,l(a1)+(a0==0?0:1));if(a2){Q(2,a2)}if(this.flags&2){this.selAfter={startNode:a3,startIndex:a0+ah(a3)}}}if(a4.indexOf(B)!=-1){s(a1.parentNode)}}});aI("InsertHTML",{exec:function(a6,a7,a9,a8){var a4=[];var a0=a7==H?N("div"):a7.cloneNode(false);a0.innerHTML=a6;var bb=a0.firstChild;while(bb){a4.push(bb);bb=bb.nextSibling}for(var a5=0;a5<a4.length;a5++){a0.removeChild(a4[a5]);a7.appendChild(a4[a5]);c=false;m(a4[a5],false);c=true;if(a4[a5].parentNode!=a7){a4.splice(a5,1);a5--}else{a7.removeChild(a4[a5])}}var a3;if(de.doc.isESPlaceHolder(a7,false)||de.doc.isMNPlaceHolder(a7,false)){a3=a7}else{if(a9&&(de.doc.isESPlaceHolder(a9,false)||de.doc.isMNPlaceHolder(a9,false))){a3=a9}}if(a3){while(a3.parentNode&&(de.doc.isESPlaceHolder(a3.parentNode,false)||de.doc.isMNPlaceHolder(a3.parentNode,false))){a3=a3.parentNode}targetNode=a3;a7=a3.parentNode;a9=a3}var ba;if(a9&&a9.nodeType==3&&a8>0&&a8<ah(a9)){var bc=Q(3,a9,a8);if(M(bc.nodeValue.charAt(0))||M(a9.nodeValue.charAt(a8-1))){ba=a9.parentNode;Y(ba)}}var a1;if(!a9){a1=null}else{if(a8==0){a1=a9.previousSibling}else{a1=a9}}for(var a5 in a4){if(!a1){Q(1,a4[a5],a7,a7.firstChild?l(a7.firstChild):null)}else{Q(1,a4[a5],a7,l(a1)+1)}a1=a4[a5]}if(ba){m(ba)}if(a9&&(de.doc.isMNPlaceHolder(a9)||de.doc.isESPlaceHolder(a9))){Q(2,a9)}if(this.flags&2){var a2=de.cursor.getNearestCursorDesc(a4[a4.length-1],ah(a4[a4.length-1],2)-1,true,X(a4[a4.length-1])!="br");if(a2){this.selAfter={startNode:a2.domNode,startIndex:a2.relIndex+(a2.domNode.nodeType==3&&a2.isRightOf?1:0)}}}}});(function(){var a1=20,a0=aZ("dt,dd,caption,colgroup,col,thead,tfoot,tbody,tr,td,th,legend,optgroup,option,area,frame");aI("Indent",{exec:function(ba,a5,a9){if(!a5){if(!this.selBefore){return}if(this.selBefore.endNode){a5=this.selBeforeOrdered.startNode;a9=this.selBeforeOrdered.endNode}else{a5=a9=this.selBefore.startNode}}var a6;var a7=w(a5,a9);for(var a3=0;a3<2;a3++){while(a7!=H&&!aL(a7)){a7=a7.parentNode}if(a7==H){break}if(X(a7)=="li"){a6=[a7];break}a7=a7.parentNode}if(!a6){a6=aQ(a5,a9)}for(var a8 in a6){if(!a0[X(a6[a8])]){var a4=a6[a8];var a2=(a4.style.marginLeft&&a4.style.marginLeft.toLowerCase()!="auto")?a4.style.marginLeft:null;if(!a2){a2=aD(a4,"margin-left")}a2=(a2&&a2.toLowerCase()!="auto")?a2:"0";var bc;if(a2.indexOf("%")!=-1){bc=a4.offsetLeft}else{bc=parseInt(a2)}var bb=bc+((ba?1:-1)*a1);if(bb<0){bb=0}if(bc!=bb){Q(6,a4,"marginLeft",bb+"px")}}}this.selAfter=this.selBefore}})})();aI("Format",{exec:function(bb,bd,a6){bb=bb.toLowerCase();if(typeof q[bb+"Wrapper"]=="undefined"){return}var a7=bd?false:true,a1=false,a9=true,a0;if(!a6){if(!this.selBefore){return}a6=o(this.selBeforeOrdered);a0=o(a6);a9=this.selBefore.inOrder}else{a0=o(a6)}if(!a0.endNode){var a5=null;if(bb=="link"){var a8=a0.startNode;while(a8&&de.doc.isNodeEditable(a8)){if(a8.nodeType==1&&X(a8)=="a"){a5={startNode:a8,startIndex:0,endNode:a8,endIndex:1};break}a8=a8.parentNode}}a0=a5?a5:de.selection.getWordRangeAt(a0.startNode,a0.startIndex>=ah(a0.startNode)?ah(a0.startNode)-1:a0.startIndex);if(!a0){return}a1=a9=true}var bc=ba(a0.startNode,a0.startIndex,a0.endNode,a0.endIndex,q[bb+"Wrapper"](bd||""),a7,q[bb+"Eval"]);if(this.flags&2){if(a1){var a3=bc.getAdjustedNodeIndex(a6.startNode,a6.startIndex);this.selAfter={startNode:a3.node,startIndex:a3.index}}else{var bf=bc.getStartFragment(),a2=bc.getEndFragment();var be=0,a4=ah(a2.node,1);this.selAfter={startNode:a9?bf.node:a2.node,startIndex:a9?be:a4,endNode:a9?a2.node:bf.node,endIndex:a9?a4:be}}}function ba(bx,bk,bq,bi,bn,br,bg){var bv=arguments.length>7,bj=bk==ah(bx,1),bl=bi==0;var bp=aa(w(bx,bq,false),bx,bk,bq,bi);var bm=bp.getStartFragment(),by=bp.getEndFragment(),bw=bp.node;if(bj){bh(bm)}if(bl){bh(by)}function bh(bz){do{bz.dontFormat=1;bz=bz.parent}while(bz&&bz.children.length==1)}bp.visit(function(bz){if(!bz.dontFormat){bs(bz.node)}});if(!bv){var bu=bw;while(bu){bs(bu);if(bu==H){break}bu=bu.parentNode}}if(!br){bx=bm.node;bq=by.node;var bo=aa(bw,bx,bj?ah(bx,1):0,bq,bl?0:ah(bq,1));if(bj){bh(bo.getStartFragment())}if(bl){bh(bo.getEndFragment())}(function bt(bE){var bD=[];for(var bA in bE.children){var bC=bE.children[bA];if(bz(bC)){bD.push(bC.node)}else{bB();bt(bC)}}bB();function bB(){if(bD.length>0){var bH=bn.cloneNode(false);Q(1,bH,bE.node,l(bD[0]));for(var bF in bD){var bG=bD[bF];Q(2,bG);Q(1,bG,bH)}bD=[]}}function bz(bI){if(bI.dontFormat){return false}var bG=true;R(bI.node,bI.node,true,function(bJ){bG=!aL(bJ);return bG});if(bG){var bH=true;(function bF(bL,bK){if(bL.dontFormat){bH=false;return}if(bK.firstChild){bH=bK.childNodes.length==bL.children.length;if(bH){for(var bJ=0;bJ<bK.childNodes.length;bJ++){bF(bL.children[bJ],bK.childNodes[bJ]);if(!bH){break}}}}else{bH=bL.children.length==0}})(bI,bI.node);return bH}return false}})(bo)}return bp;function bs(bA){if(bA.nodeType==1){var bB=false,bI=bg(bA);if(bI){for(var bE in bI.strip){switch(bI.strip[bE].type){case 1:bB=true;break;case 2:var bK=au(bA);if(bK){var bJ=bK.split(" ");for(var bC in bJ){if(bJ[bC]==bI.strip[bE].match){bJ.splice(bC,1);break}}bK=bK.length>0?bJ.join(" "):"";Q(7,bA,bK)}break;case 3:Q(6,bA,bI.strip[bE].match,"");break}if(bB){break}}var bF=bA.firstChild;while(bF.firstChild){bF=bF.firstChild}var bz=bA.lastChild;while(bz.lastChild){bz=bz.lastChild}if(!bB&&X(bA)=="span"){bB=!au(bA);if(!bB){bB=r(bA)}}if(bB){var bH=[];while(bA.firstChild){var bD=bA.firstChild;Q(2,bD);Q(1,bD,bA.parentNode,l(bH.length>0?bH[bH.length-1]:bA)+1);bH.push(bD)}if(bH.length>0){if(bA==bw){bw=bA.parentNode}Q(2,bA)}}if(!bv){var bG=false;bp.visit(function(bL){bG=(!bL.dontFormat&&bL.node==bF);return !bG});if(!bG){ba(bF,0,bm.node,bj?ah(bm.node,1):0,bI.inline,false,bg,true)}bG=false;bp.visit(function(bL){bG=(!bL.dontFormat&&bL.node==bz);return !bG});if(!bG){ba(by.node,bl?0:ah(by.node,1),bz,ah(bz,1),bI.inline,false,bg,true)}}}}}}}});(function(){aI("CreateTable",{exec:function(a1,a3,a4,a2,a6,a5){var a0="<table></table>"}})})();(function(){var a0=aZ("p,pre,h1,h2,h3,h4,h5,h6,address");aI("ChangeContainer",{exec:function(bb,a3,a9){if(!bb){bb="p"}bb=bb.toLowerCase();if(!a3){if(!this.selBefore){return}if(this.selBefore.endNode){a3=this.selBeforeOrdered.startNode;a9=this.selBeforeOrdered.endNode}else{a3=a9=this.selBefore.startNode}}var a4=aQ(a3,a9);for(var a8 in a4){var a2=a4[a8];if(X(a2)!=bb&&a0[X(a2)]){var a6=[],a7,bc=a2.parentNode,ba=l(a2);while(a7=a2.firstChild){a6.push(a7);Q(2,a7)}Q(2,a2);var a1=N(bb);Q(1,a1,bc,ba);for(var a5 in a6){Q(1,a6[a5],a1)}}}this.selAfter=this.selBefore}})})();aI("Blockquote",{exec:function(a2,a7){if(!a2){if(!this.selBefore){return}if(this.selBefore.endNode){a2=this.selBeforeOrdered.startNode;a7=this.selBeforeOrdered.endNode}else{a2=a7=this.selBefore.startNode}}var a9=null,a4=w(a2,a7,true);if(a0(a4)){a9=a4}else{R(a4,a2,true,function(ba){if(a0(ba)){a9=ba}return a9==null&&ba!=a7})}if(!a9){a9=j(a4,H,a0,true)||j(a2,a4,a0,true);if(!de.doc.isNodeEditable(a9)){a9=null}}if(a9){while(a9.firstChild){var a5=a9.firstChild;Q(2,a5);Q(1,a5,a9.parentNode,l(a9))}Q(2,a9)}else{var a3=aQ(a2,a7);var a8=N("blockquote");if(a3.length>0&&n(a8,a3[0].parentNode)){Q(1,a8,a3[0].parentNode,l(a3[0]));for(var a6 in a3){var a1=a3[a6];Q(2,a1);Q(1,a1,a8)}}}this.selAfter=this.selBefore;function a0(ba){return X(ba)=="blockquote"}}});var z={GB:"address,blockquote,center,del,div,h1,h2,h3,h4,h5,h6,hr,ins,isindex,noscript,p,pre",SI:"a,applet,basefont,bdo,br,font,iframe,img,map,area,object,param,q,script,span,sub,sup",PH:"abbr,acronym,cite,code,del,dfn,em,ins,kbd,samp,strong,var",F:"b,big,i,s,small,strike,tt,u",TE:"table,caption,colgroup,col,thead,tfoot,tbody,tr,td,th",NT:"table,textarea,tr,thead,tbody,tfoot,dl,ul,ol,menu,select,optgroup,option"};for(var aq in z){z[aq]=aZ(z[aq])}D(z,{B:D(aZ("dir,dl,fieldset,form,menu,noframes,ol,table,ul,dd,dt,frameset,li,tbody,td,tfoot,thead,th,tr"),z.GB),I:D(D(aZ("abbr,acronym,cite,code,dfn,em,kbd,samp,strong,var"),z.F),z.SI)});var F=function(){function a1(a5,a3){var a2=a3.split(","),a6=o(a5);for(var a4 in a2){delete a6[a2[a4]]}return a6}var a0=D(o(z.B),z.I);return{body:D(aZ("script,ins,del"),a0),address:D(aZ("p"),a0),blockquote:a0,centre:a0,del:a0,h1:z.I,h2:z.I,h3:z.I,h4:z.I,h5:z.I,h6:z.I,hr:{},ins:a0,isindex:{},noscript:a0,p:z.I,pre:a1(z.I,"img,object,applet,big,small,sub,sup,font,basefont"),dir:aZ("li"),dl:aZ("dd,dt"),dt:z.I,dd:a0,li:a0,menu:aZ("li"),ol:aZ("li"),ul:aZ("li"),table:aZ("caption,col,colgroup,thead,tfoot,tbody"),caption:z.I,colgroup:aZ("col"),col:{},thead:aZ("tr"),tfoot:aZ("tr"),tbody:aZ("tr"),tr:aZ("td,th"),td:a0,th:a0,form:a1(a0,"form"),button:a1(a0,"a,input,select,textarea,label,button,iframe,form,isindex,fieldset"),fieldset:D(aZ("legend"),a0),legend:z.I,input:{},label:a1(z.I,"label"),select:aZ("optgroup,option"),optgroup:aZ("option"),option:{},textarea:{},a:a1(z.I,"a"),applet:D(aZ("param"),a0),basefont:{},bdo:z.I,br:{},font:z.I,iframe:a0,img:{},map:D(aZ("area"),z.B),area:{},object:D(aZ("param"),a0),param:{},q:z.I,script:{},span:z.I,sub:z.I,sup:z.I,abbr:z.I,acroynm:z.I,cite:z.I,code:z.I,dfn:z.I,em:z.I,kbd:z.I,samp:z.I,strong:z.I,"var":z.I,b:z.I,big:z.I,i:z.I,s:z.I,small:z.I,strike:z.I,tt:z.I,u:z.I}}();function aC(a1,a0){if(a1.nodeType==1){return z[a0][X(a1)]?true:false}return false}function n(a2,a0){if(a2.nodeType==3){return true}var a1=F[X(a0)];if(a1){return a1[X(a2)]}return true}function aL(a0){return aC(a0,"B")}function S(a0){return aC(a0,"GB")}function ae(a0){return aC(a0,"I")}function g(a0){return aC(a0,"SI")}function O(a0){return aC(a0,"PH")}function aE(a0){return aC(a0,"F")}function y(a0){return aC(a0,"TE")}function M(a0){return/^[\t\n\r ]+$/.test(a0)}function aH(a0){return !aC(a0.parentNode,"NT")}var B=a("&nbsp;");D(de,{isBlock:aL});var b,C,aS,aR;(function(){var a3=1,a2,a1;L("viewport",function(){A(window,"resize",function(){a3=1})});de.getViewPortSize=_getViewPortSize=function(a4){if(a3||a4){a0()}return{width:a2,height:a1}};function a0(){if(E==3&&G<7){a2=document.documentElement.clientWidth;a1=document.documentElement.clientHeight}else{var a4=N("div");ao(a4,"position:fixed;top:0;left:0;width:100%;height:100%;border-style:none;margin:0");H.appendChild(a4);a2=a4.offsetWidth;a1=a4.offsetHeight;H.removeChild(a4)}a3=0}})();de.getDocumentScrollPos=aR=function(){var a1=0,a0=0;if(H.scrollLeft||H.scrollTop){a1=H.scrollLeft;a0=H.scrollTop}else{if(window.pageYOffset||window.pageXOffset){a1=window.pageXOffset;a0=window.pageYOffset}else{if(document.documentElement.scrollLeft||document.documentElement.scrollTop){a1=document.documentElement.scrollLeft;a0=document.documentElement.scrollTop}}}return{top:a0,left:a1}};function aN(){var a1=0,a0=0;if(window.innerWidth||window.innerHeight){a1=window.innerWidth;a0=window.innerHeight}else{if(document.documentElement.offsetWidth||document.documentElement.offsetWidth){a1=document.documentElement.offsetWidth;a0=document.documentElement.offsetHeight}else{if(H.offsetWidth||H.offsetWidth){a1=H.offsetWidth;a0=H.offsetWidth}}}return{width:a1,height:a0}}var m,s,Y;(function(){var a0=aZ("button,img,iframe,map,object"),a3=aZ("br,button,img,iframe,map,object,select,textarea,applet");Y=function(a5){ar(a5,a5,true,function(a6){if(aH(a6)&&a1(a6)=="normal"){a6.nodeValue=a6.nodeValue.replace(/[\t\n\r ]/g,B)}})};m=function(a8,bg){var bd;ar(a8,a8,true,function(bn){if(aH(bn)&&ah(bn)>0){bd=bn;return false}});if(!bd){return}var a7=a8;var bk=false;if(bg&&M(bd.nodeValue.charAt(0))){R(null,bd,false,function(bn){if(bn==bd){return}if(bn.nodeType==3){if(!aH(bn)){return false}a7=bn;if(!M(bn.nodeValue)){bk=true;return false}}else{if(!ae(bn)){return false}}})}var bi=aK(a8,a7),a5=0;while(a7){var be=a2(a7,a5,bk,a8,bi,false,false,bg);bk=false;bi=be.seenTargetNode;a7=be.resumeNode;a5=be.resumeIndex;if(be.startNode&&a1(be.startNode)!="pre"){if(a4(be.startNode,be.startIndex,be.endNode,be.endIndex)){if(be.startNode==be.endNode&&be.startIndex==(be.endIndex-1)){be.startNode=null}else{be.startIndex++}}if(be.startNode){var bc=aa(w(be.startNode,be.endNode,false),be.startNode,be.startIndex,be.endNode,be.endIndex);bc.disconnect();var a9=a7==a8;if(a7){var ba=bc.getStartFragment(),bm=bc.getEndFragment(),bj=false,bb=bc.wasStartSplit(),bh=bc.wasEndSplit();if(a7==be.startNode&&bb){if(a5>=ah(be.startNode)){var bl=ah(ba.node);if(a5<(ah(be.startNode)+bl)){a5=ah(be.startNode)-1}else{if(a7==be.endNode&&bh){a7=bm.getPostSplitNode();a5-=(ah(be.startNode)+bl)}else{assert(false)}}}bj=true}else{if(a7==be.endNode&&bh){var bl=ah(bm.node);if(a5>=bl){a7=bm.getPostSplitNode();a5-=bl;bj=true}else{a7=null}}}if(!bj){var bf;if(a7){bf=false;bc.visit(function(bn){if(!bn.isShared&&bn.node==a7){bf=true;return false}})}else{bf=true}if(bf){var a6=ba;while(!a6.isShared){a6=a6.parent}a7=a6.node;a5=a6==ba?ah(a7,1):0;if(a7.childNodes.length>0&&a6.children.length>0&&a6.children[0].pos>0){a7=a7.childNodes[a6.children[0].pos-1];a5=ah(a7,1)}}}if(a7&&a9){a8=a7}}}}}};s=function(bc){var a6=bc,bd=0;while(a6){var be=a2(a6,bd,false,bc,true,true,true,true);a6=be.resumeNode;bd=be.resumeIndex;if(be.startNode){var a8=a4(be.startNode,be.startIndex,be.endNode,be.endIndex);var bb=[];ar(w(be.startNode,be.endNode,false),be.startNode,true,function(bf){bb.push(bf);if(bf==be.endNode){return false}});for(var a9=0;a9<bb.length;a9++){var a7=bb[a9];for(var ba=(a9==0?be.startIndex:0);ba<(a9==(bb.length-1)?(be.endIndex+1):ah(a7));ba++){if(a7.nodeValue.charAt(ba)==B){if(!(!a8&&((a9==0&&ba==be.startIndex)||(a9==(bb.length-1)&&ba==be.endIndex)))){var a5;if(ba==0){a5=(a9>0)?bb[a9-1].nodeValue.charAt(ah(bb[a9-1])-1):null}else{a5=a7.nodeValue.charAt(ba-1)}if(!a5||!M(a5)){if(ba==(ah(a7)-1)){a5=(a9<(bb.length-1))?bb[a9+1].nodeValue.charAt(0):null}else{a5=a7.nodeValue.charAt(ba+1)}if(!a5||!M(a5)){a7.nodeValue=a7.nodeValue.substr(0,ba)+" "+a7.nodeValue.substr(ba+1)}}}}}}}}};function a2(bh,bc,be,bg,bi,a7,a6,bb){var bf=null,bj=bc,a5,bk,bd,ba,a8,a9;R(null,bh,true,function(bq){if(bi&&bq!=bg&&(!a5||!bb)&&!aK(bg,bq)){return false}bi|=(bq==bg);a9=a1(bq);if(a5){var bl=w(bq,a5,false);var bp=aO(a5,bl,false,false);var bm=false;for(var bn in bp){if(!(ae(bp[bn])&&!a3[X(bp[bn])])){bm=true;break}}if(bm||a9!=a8){bf=bq;bj=0;return false}}if(bq.nodeType==3){if(bq.parentNode.nodeType!=8){if(!aH(bq)){if(a5){bf=bq;bj=0;return false}}else{while(bj<ah(bq)){var bo=bq.nodeValue.charAt(bj);if(M(bo)||(a7&&bo==B)){if(!be){if(a5){bd=bq;ba=bj+1}else{a5=bq;a8=a9;bk=bj;bd=null}}}else{be=false;if(bd||(a5&&(a6||bk==0))){bf=bq;return false}else{a5=null}}bj++}}}else{be=false}}else{be=false;if(bq.nodeType!=8){if(a5&&!(ae(bq)&&!a3[X(bq)])){bf=bq;bj=0;return false}}}bj=0});if(a5&&!bd){bd=a5;ba=bk+1}return{seenTargetNode:bi,resumeNode:bf,resumeIndex:bj,startNode:a5,startIndex:bk,endNode:bd,endIndex:ba}}function a4(a8,bb,a5,ba){var a7=a1(a8);if(bb==0){var a9=false;R(null,a8,false,function(bg){if(bg==a8){return}var be=a6(bg,a8);if(!be&&a9){var bc=w(bg,a8,false);var bf=aO(bg,bc,false,false);for(var bd in bf){a9=false;if(!a6(bf[bd],a8)&&!a9){return false}}be=false;a9=true}return be});if(!a9){return false}}if(ba==ah(a5)){var a9=false;R(null,a5,true,function(bg){if(bg==a5){return}var be=a6(bg,a5);if(!be&&a9){var bc=w(bg,a5,false);var bf=aO(a5,bc,false,false);for(var bd in bf){a9=false;if(!a6(bf[bd],a5)&&!a9){return false}}a9=true;be=false}return be});if(!a9){return false}}return true;function a6(bc,bd){if(bc.nodeType==3){if(ah(bc)>0){a9=aH(bc);return false}}else{if(a0[X(bc)]){a9=!aK(bc,bd);return false}else{if(aL(bc)||X(bc)=="br"){return false}}}return true}}function a1(a6){var a5=aD(a6,"white-space");if(!a5){do{if(X(a6)=="pre"){a5="pre";break}a6=a6.parentNode}while(a6&&a6.nodeType==1);if(!a5){a5="normal"}}return a5}})()})();
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039/*
3040if (document.body.className) {
3041 document.body.className += " editable";
3042}
3043else {
3044 document.body.className = "editable";
3045}
3046*/
3047
3048
3049csnInit();
Note: See TracBrowser for help on using the repository browser.