You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2010/03/29 03:14:49 UTC

svn commit: r928555 [10/16] - in /myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources: oam.custom.calendar.DB/ oam.custom.calendar.WH/ oam.custom.calendar.images/ oam.custom.inputHtml.kupudrawers/ oam.custom.inputHtml.kupuimages/ oam.cu...

Added: myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/kupustart_multi.js
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/kupustart_multi.js?rev=928555&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/kupustart_multi.js (added)
+++ myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/kupustart_multi.js Mon Mar 29 01:14:43 2010
@@ -0,0 +1,54 @@
+/*****************************************************************************
+ *
+ * Copyright (c) 2003-2005 Kupu Contributors. All rights reserved.
+ *
+ * This software is distributed under the terms of the Kupu
+ * License. See LICENSE.txt for license text. For a list of Kupu
+ * Contributors see CREDITS.txt.
+ *
+ *****************************************************************************/
+// $Id$
+
+function startKupu() {
+    // initialize the editor, this version groks an array of iframeids
+    var iframeids = ['kupu_1', 'kupu_2', 'kupu_3'];
+    var kupu = initKupu(iframeids); 
+
+    // if there's no global 'i18n_message_catalog' variable available, don't
+    // try to load any translations
+    if (!window.i18n_message_catalog) {
+        continueStartKupu(kupu);
+        return kupu;
+    };
+    // loading will be done asynchronously (to keep Mozilla from freezing)
+    // so we'll continue in a follow-up function (continueStartKupu() below)
+    var handler = function(request) {
+        if (this.readyState == 4) {
+            var status = this.status;
+            if (status != '200') {
+                alert(_('Error loading translation (status ${status} ' +
+                        '), falling back to english'), {'status': status});
+                continueStartKupu(kupu);
+                return;
+            };
+            var dom = this.responseXML;
+            window.i18n_message_catalog.initialize(dom);
+            continueStartKupu(kupu);
+        };
+    };
+    var request = new XMLHttpRequest();
+    request.onreadystatechange = (new ContextFixer(handler, request)).execute;
+    request.open('GET', 'kupu.pox', true);
+    request.send('');
+
+    // we need to return a reference to the editor here for certain 'external'
+    // stuff, developers should note that it's not yet initialized though, we
+    // need to wait for i18n data before we can do that
+    return kupu;
+};
+
+function continueStartKupu(kupu) {
+    kupu.initialize();
+
+    return kupu;
+}

Added: myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/kupustyles.css
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/kupustyles.css?rev=928555&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/kupustyles.css (added)
+++ myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/kupustyles.css Mon Mar 29 01:14:43 2010
@@ -0,0 +1,280 @@
+/*****************************************************************************
+ *
+ * Kupu common styles
+ *
+ * Copyright (c) 2003-2005 Kupu Contributors. See CREDITS.txt
+ *
+ * Instead of customizing this file, it is recommended to add your own
+ * CSS file.  Feel free to use whole or parts of this for your own
+ * designs, but give credit where credit is due.
+ *
+ *****************************************************************************/
+
+/* $Id: kupustyles.css 928511 2010-03-28 22:53:14Z lu4242 $ */
+
+.kupu-fulleditor, .kupu-toolboxes {
+  font-family: Verdana, "Lucida Grande", Helvetica, Arial, sans-serif;
+  background-color: white;
+}
+
+div.kupu-fulleditor .kupu-fulleditor-zoomed {
+  height: 100%;
+  padding: 0px;
+}
+
+div.kupu-fulleditor .kupu-editorframe {
+   margin: 0px;
+   margin-right: 20em;
+   border: none;
+}
+
+div.kupu-fulleditor-zoomed {
+   z-index: 100;
+   margin: 0; border: none;
+   position: fixed;
+   top: 0; left: 0;
+   background-color: white;
+}
+
+* html div.kupu-fulleditor-zoomed {
+   position: absolute; /* IE */
+}
+
+div.kupu-fulleditor-zoomed .kupu-editor-iframe {
+  border: none;
+  margin: 0;
+}
+
+div.kupu-smalleditor .kupu-editorframe {
+  margin-right: 0.2em;
+}
+
+h1.kupu-toolbox-heading, h1.kupu-toolbox-heading-closed {
+  cursor: default;
+  background-image: url("kupuimages/closed.png");
+  background-repeat: no-repeat;
+  background-position: left;
+}
+
+h1.kupu-toolbox-heading-opened {
+  cursor: default;
+  background-image: url("kupuimages/opened.png");
+  background-repeat: no-repeat;
+  background-position: left;
+}
+
+div.kupu-sourcemode span.kupu-tb-buttongroup,
+body.kupu-fulleditor-zoomed select { display: none; }
+body.kupu-fulleditor-zoomed div.kupu-fulleditor-zoomed select { display: inline; }
+div.kupu-sourcemode select { display: none !IMPORTANT; }
+div.kupu-sourcemode span#kupu-logo,
+div.kupu-sourcemode span#kupu-zoom,
+div.kupu-sourcemode span#kupu-source { display: inline; }
+
+div.kupu-smalleditor {
+  font-family: Verdana, "Lucida Grande", Helvetica, Arial, sans-serif;
+  border: solid 3px ButtonHighlight;
+  margin: 0.2em;
+  height: 100%;
+}
+
+.kupu-tb {
+  padding: 3px;
+  margin-bottom: 0.4em;
+  background-color: ButtonFace;
+  border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight;
+}
+
+.kupu-tb-buttons button {
+  color: ButtonText;
+  border: 1px solid ButtonFace;
+  margin-top: 0;
+  margin-left: 0;
+  height: 26px;
+  width: 26px;
+  background-repeat: no-repeat;
+}
+
+.kupu-tb-buttons button:hover {
+  cursor: default;
+  border: 1px solid;
+  border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight;
+}
+
+.kupu-tb-buttons button:active {
+  border: 1px solid;
+  border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow;
+}
+
+.kupu-tb-buttongroup {
+  margin-left: 2px;
+  margin-right: 2px;
+}
+
+
+.kupu-bold {background-image: url("kupuimages/bold.png");}
+.kupu-bold-pressed {background-image: url("kupuimages/bold.png"); background-color: white;}
+.kupu-anchors {background-image: url("kupuimages/anchor.png");}
+.kupu-forecolor {background-image: url("kupuimages/text-color.png");}
+.kupu-hilitecolor {background-image: url("kupuimages/background-color.png");}
+
+.kupu-inthyperlink {background-image: url("kupuimages/inthyperlink.png");}
+.kupu-inthyperlink-pressed {background-image: url("kupuimages/inthyperlink.png"); background-color: white}
+.kupu-exthyperlink {background-image: url("kupuimages/exthyperlink.png");}
+.kupu-exthyperlink-pressed {background-image: url("kupuimages/exthyperlink.png"); background-color: white}
+
+.kupu-image {background-image: url("kupuimages/image.png");}
+.kupu-indent {background-image: url("kupuimages/indent.png");}
+.kupu-inserthorizontalrule {background-image: url("kupuimages/hr.png");}
+.kupu-insertorderedlist {background-image: url("kupuimages/ordered-list.png");}
+.kupu-insertunorderedlist {background-image: url("kupuimages/unordered-list.png");}
+.kupu-insertdefinitionlist {background-image: url("kupuimages/definitionlist.png");}
+.kupu-italic {background-image: url("kupuimages/italic.png");}
+.kupu-italic-pressed {background-image: url("kupuimages/italic.png"); background-color: white}
+.kupu-justifycenter {background-image: url("kupuimages/justify-center.png");}
+.kupu-justifyleft {background-image: url("kupuimages/justify-left.png");}
+.kupu-justifyright {background-image: url("kupuimages/justify-right.png");}
+button.kupu-logo {background-image: url("kupuimages/kupu_icon.gif");}
+.kupu-outdent {background-image: url("kupuimages/outdent.png");}
+.kupu-redo {background-image: url("kupuimages/redo.png");}
+.kupu-save {background-image: url("kupuimages/save.png");}
+.kupu-save-and-exit {background-image: url("kupuimages/exit.gif");}
+.kupu-space {background-image: url("kupuimages/space.gif");}
+.kupu-source {background-image: url("kupuimages/view-source.png");}
+.kupu-spellchecker {background-image: url("kupuimages/text-check.png");}
+.kupu-subscript {background-image: url("kupuimages/subscript.png");}
+.kupu-subscript-pressed {background-image: url("kupuimages/subscript.png"); background-color: white}
+.kupu-superscript {background-image: url("kupuimages/superscript.png");}
+.kupu-superscript-pressed {background-image: url("kupuimages/superscript.png"); background-color: white}
+.kupu-table {background-image: url("kupuimages/table.png");}
+.kupu-underline {background-image: url("kupuimages/underline.png");}
+.kupu-underline-pressed {background-image: url("kupuimages/underline.png"); background-color: white}
+.kupu-undo {background-image: url("kupuimages/undo.png");}
+.kupu-removelink {background-image: url("kupuimages/remove.png");}
+.kupu-removeimage {background-image: url("kupuimages/remove.png");}
+.kupu-zoom {background-image: url("kupuimages/zoom-in.gif");}
+.kupu-zoom-pressed {background-image: url("kupuimages/zoom-out.gif");}
+
+.kupu-tb-buttons button.invisible { 
+  display: none;
+  /*visibility: hidden;*/
+}
+
+.kupu-tb-buttons button.visible { 
+  display: inline;
+}
+
+div.kupu-editorframe {
+  margin-left: 0.3em;
+  margin-bottom: 0.3em;
+  border: solid 2px ButtonFace;
+}
+
+iframe.kupu-editor-iframe {
+  height: 450px;
+  width: 99%;
+}
+
+textarea.kupu-editor-textarea {
+  height: 450px;
+  width: 99%;
+  display: none;
+}
+
+div.kupu-toolboxes {
+  float: right;
+  border: solid 2px ButtonFace;
+  width: 19.4em;
+  margin-right: 0.3em;
+  margin-bottom: 0.3em;
+  font-size: 0.8em;
+}
+
+div.kupu-fulleditor-zoomed div.kupu-toolboxes {
+  display: none;
+}
+
+div.kupu-toolbox, div.kupu-toolbox-active {
+  margin-bottom: 1em;
+}
+
+div.kupu-toolbox h1, div.kupu-toolbox-active h1 {
+  text-align: center;
+  width: 100%;
+  background-color: ButtonFace;
+  margin-top: 0;
+  font-size: 1.1em;
+}
+
+div.kupu-toolbox-label, span.kupu-toolbox-searchterm, 
+input.wide, select.wide, textarea.wide, button.kupu-toolbox-action, 
+div.kupu-toolbox-results {
+  margin-left: 0.2em;
+  margin-right: 0.2em;
+}
+
+.wide {
+  width: 95%;
+}
+
+div.kupu-toolbox-label {
+  margin-bottom: 0.4em;
+}
+
+.kupu-toolbox-buttons {
+  text-align: center;
+}
+
+.kupu-toolbox-buttons button {
+  width: 45%;
+}
+
+div.kupu-toolbox-results {
+  border: solid 2px ButtonFace;
+  margin-top: 0.8em;
+  text-decoration: underline;
+  padding: 0.2em;
+  display: none;
+}
+
+div.kupu-toolbox table.kupu-toolbox-addtable input, 
+div.kupu-toolbox-active table.kupu-toolbox-edittable input {
+  width: 20px;
+}
+
+div.kupu-toolbox-active {
+  background-color: ButtonFace;
+}
+
+.kupu-toolbox-editlink, .kupu-toolbox-edittable,
+.kupu-ulstyles, .kupu-olstyles {
+  display: none;
+}
+
+
+div#kupu-colorchooser {
+  position: absolute;
+  visibility: hidden;
+  border: solid black 1px;
+  background-color: white;
+  padding: 0.2em;
+  font-size: small;
+}
+
+.kupu-toolboxes input, .kupu-toolboxes select, .kupu-toolboxes textarea {
+  font-size: x-small;
+  font-family: Verdana, "Lucida Grande", Helvetica, Arial, sans-serif;
+}
+
+div#kupu-fgcolorchooser div:hover {
+  /* border: outset 1px; */
+}
+
+div.kupu-drawer {
+   overflow: auto;
+}
+
+input.disabled, button.disabled {
+   opacity:0.5;
+   filter:alpha(opacity=50);
+}

Added: myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/kuputoolcollapser.js
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/kuputoolcollapser.js?rev=928555&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/kuputoolcollapser.js (added)
+++ myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/kuputoolcollapser.js Mon Mar 29 01:14:43 2010
@@ -0,0 +1,133 @@
+// turn this into a nice module-like namespace to avoid messing up the global
+// (window) namespace
+this.kuputoolcollapser = new function() {
+    var ToolCollapser = function(toolboxesparentid) {
+        this.parent = document.getElementById(toolboxesparentid);
+    };
+
+    // make the collapser available in the namespace
+    this.Collapser = ToolCollapser;
+
+    ToolCollapser.prototype.initialize = function() {
+        var initial_state = {};
+        if (navigator.cookieEnabled) {
+            var cookie = document.cookie;
+            var reg = /initial_state=([^;]+);?/;
+            var match = cookie.match(reg);
+            if (match) { /*ignore 558 */
+                eval(unescape(match[0]));
+            };
+        };
+        for (var i=0; i < this.parent.childNodes.length; i++) {
+            var child = this.parent.childNodes[i];
+            if (child.className && child.className.match(/\bkupu-toolbox\b/)) {
+                var heading = child.getElementsByTagName('h1')[0];
+                if (!heading) {
+                    throw('heading not found by collapser for toolbox ' +
+                            child.id);
+                };
+                heading.setAttribute('title', _('click to unfold'));
+                // find the toolbox's body
+                var body = this.getToolBody(child);
+                // now set a handler that makes the body display and hide
+                // on click, and register it to the heading
+                // WAAAAAHHHH!!! since there's some weird shit happening when
+                // I just use closures to refer to the body (somehow only the
+                // *last* value body is set to in this loop is used?!?) I
+                // used a reference to the body as 'this' in the handler
+                var handler = function(heading) {
+                    if (this.style.display == 'none') {
+                        // assume we have a block-level element here...
+                        this.style.display = 'block';
+                        heading.className = 'kupu-toolbox-heading-opened';
+                        heading.setAttribute('title', _('click to fold'));
+                    } else {
+                        this.style.display = 'none';
+                        heading.className = 'kupu-toolbox-heading-closed';
+                        heading.setAttribute('title', _('click to unfold'));
+                    };
+                };
+                var wrap_openhandler = function(body, heading) {
+                    return function() {
+                        body.style.display = 'block';
+                        heading.className = 'kupu-toolbox-heading-opened';
+                    };
+                };
+                addEventHandler(heading, 'click', handler, body, heading);
+                if (initial_state[child.id] === undefined ||
+                        initial_state[child.id] == '0') {
+                    body.style.display = 'none';
+                } else {
+                    heading.className = 'kupu-toolbox-heading-opened';
+                    heading.setAttribute('title', _('click to fold'));
+                };
+                // add a reference to the openhandler on the toolbox div
+                // so any toolbox code can use that to open the toolbox if
+                // it so desires
+                child.open_handler = wrap_openhandler(body, heading);
+            };
+        };
+
+        addEventHandler(window, 'beforeunload', this.saveState, this);
+    };
+
+    ToolCollapser.prototype.getToolBody = function(tool) {
+        var heading = tool.getElementsByTagName('h1')[0];
+        var currchild = heading.nextSibling;
+        while (currchild.nodeType != 1) {
+            currchild = currchild.nextSibling;
+            if (!currchild) {
+                throw('body not found by collapser for toolbox ' +
+                        tool.id);
+            };
+        };
+        return currchild;
+    };
+
+    ToolCollapser.prototype.saveState = function() {
+        /* save collapse state of the toolboxes in a cookie */
+        if (!navigator.cookieEnabled) {
+            return;
+        };
+        var current_state = {};
+        for (var i=0; i < this.parent.childNodes.length; i++) {
+            var child = this.parent.childNodes[i];
+            if (child.nodeType != 1) {
+                continue;
+            };
+            var body = this.getToolBody(child);
+            current_state[child.id] = body.style.display == 'none' ? '0' : '1';
+        };
+
+        var exp = new Date();
+        // 100 years before state is lost... should be enough ;)
+        exp.setTime(exp.getTime() + (100 * 365 * 24 * 60 * 60 * 1000));
+        var cookie = 'initial_state=' +
+                            escape(this.serializeMapping(current_state)) +
+                            ';' +
+                            'expires=' + exp.toGMTString() + ';' +
+                            'path=/';
+        document.cookie = cookie;
+    };
+
+    ToolCollapser.prototype.serializeMapping = function(mapping) {
+        /* serializes the config dict into a string that can be evalled
+
+            works only for dicts with string values
+        */
+        if (typeof(mapping) == 'string') {
+            return "'" + mapping + "'";
+        };
+        var ret = '{';
+        var first = true;
+        for (var key in mapping) {
+            if (!first) {
+                ret += ', ';
+            };
+            ret += "'" + key + "': " +
+                this.serializeMapping(mapping[key]);
+            first = false;
+        };
+        return ret + '}';
+    };
+}();

Added: myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/kupuundo.js
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/kupuundo.js?rev=928555&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/kupuundo.js (added)
+++ myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/kupuundo.js Mon Mar 29 01:14:43 2010
@@ -0,0 +1,108 @@
+/* Improved undo support for Kupu
+
+    This uses the 'diff-match-patch' library from Neil Fraser to make patches
+    between edits, and saves those patches in an undo buffer. 
+
+    The diff-match-patch lib is distributed under terms of the LGPL license,
+    for more information see doc/LICENSE_DIFFMATCHPATH.txt.
+
+    For more information about the library itself, see
+    http://code.google.com/p/google-diff-match-patch/
+*/
+
+function KupuUndoTool() {
+    if (arguments.length) {
+        this._init.apply(this, arguments);
+    };
+};
+
+KupuUndoTool.prototype = new KupuTool;
+
+KupuUndoTool.prototype._init =
+        function _init(undobuttonid, redobuttonid, maxbufsize) {
+    this.undobutton = document.getElementById(undobuttonid);
+    this.redobutton = document.getElementById(redobuttonid);
+    this._content = null;
+    this._buffer = [];
+    this._rev_buffer = [];
+    this._maximum_buffer_size = maxbufsize || 100;
+};
+
+KupuUndoTool.prototype.initialize = function initialize(editor) {
+    this.editor = editor;
+    addEventHandler(this.undobutton, 'click', this.undo, this);
+    addEventHandler(this.redobutton, 'click', this.redo, this);
+    this.dmp = new diff_match_patch();
+    this._content = this._get_content();
+};
+
+KupuUndoTool.prototype.updateState = function updateState(selNode, event) {
+    var new_content = this._get_content();
+    var patch = this.dmp.patch_make(new_content, this._content);
+    if (!patch.toString()) {
+        return;
+    };
+    var revpatch = this.dmp.patch_make(this._content, new_content);
+    this._buffer.push([patch, revpatch]);
+    this._rev_buffer = []; // discard redo information
+    this._content = new_content;
+    while (this._buffer.length > this._maximum_buffer_size) {
+        this._buffer.shift();
+    };
+};
+
+KupuUndoTool.prototype.undo = function undo() {
+    this.updateState();
+    var patchset = this._buffer.pop();
+    if (!patchset) {
+        return;
+    };
+    this._apply_patch(patchset[0]);
+    this._rev_buffer.push(patchset);
+};
+
+KupuUndoTool.prototype.redo = function redo() {
+    var patchset = this._rev_buffer.pop();
+    if (!patchset) {
+        return;
+    };
+    this._apply_patch(patchset[1]);
+    this._buffer.push(patchset);
+};
+
+KupuUndoTool.prototype._apply_patch = function _apply_patch(patch) {
+    var ret = this.dmp.patch_apply(patch, this._content);
+    var results = ret[1];
+    var failures = false;
+    for (var i=0; i < results.length; i++) {
+        if (!results[i]) {
+            failures = true;
+            break;
+        };
+    };
+    if (failures) {
+        throw('there were errors applying undo buffer patch! ' +
+              'cancelling undo action...');
+    };
+    var new_content = ret[0];
+    this._set_content(new_content);
+    this._content = new_content;
+};
+
+KupuUndoTool.prototype._get_content = function _get_content() {
+    var body = this.editor.document.document.getElementsByTagName('body')[0];
+    return body.innerHTML;
+};
+
+KupuUndoTool.prototype._set_content = function _set_content(content) {
+    var body = this.editor.document.document.getElementsByTagName('body')[0];
+    body.innerHTML = content;
+};
+
+KupuUndoTool.prototype.debug = function debug(msg) {
+    var body = document.getElementsByTagName('body')[0];
+    var div = document.createElement('div');
+    div.appendChild(document.createTextNode(msg));
+    body.appendChild(div);
+    div.style.border = '1px solid red';
+};

Added: myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/myFaces.css
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/myFaces.css?rev=928555&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/myFaces.css (added)
+++ myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/myFaces.css Mon Mar 29 01:14:43 2010
@@ -0,0 +1,13 @@
+div.kupu-fulleditor .kupu-editor-iframe {
+	height: 100%;
+	border: silver solid 1px;
+}
+div.kupu-fulleditor .kupu-editor-textarea {
+	height: 100%;
+}
+.kupu-fulleditor{
+	padding-bottom: 42px;
+}
+div.kupu-fulleditor-zoomed .kupu-editor-iframe{
+   background-color: white;
+}
\ No newline at end of file

Added: myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/myFacesKupustyles.css
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/myFacesKupustyles.css?rev=928555&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/myFacesKupustyles.css (added)
+++ myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/myFacesKupustyles.css Mon Mar 29 01:14:43 2010
@@ -0,0 +1,279 @@
+/*****************************************************************************
+ *
+ * Kupu common styles
+ *
+ * Copyright (c) 2003-2005 Kupu Contributors. See CREDITS.txt
+ *
+ * Instead of customizing this file, it is recommended to add your own
+ * CSS file.  Feel free to use whole or parts of this for your own
+ * designs, but give credit where credit is due.
+ *
+ *****************************************************************************/
+
+/* $Id: kupustyles.css 289206 2005-09-15 11:31:53Z svieujot $ */
+
+.kupu-fulleditor, .kupu-toolboxes {
+  font-family: Verdana, "Lucida Grande", Helvetica, Arial, sans-serif;
+  background-color: white;
+}
+
+div.kupu-fulleditor .kupu-fulleditor-zoomed {
+  height: 100%;
+  padding: 0px;
+}
+
+div.kupu-fulleditor .kupu-editorframe {
+   margin: 0px;
+   margin-right: 20em;
+   border: none;
+}
+
+div.kupu-fulleditor-zoomed {
+   z-index: 100;
+   margin: 0; border: none;
+   position: fixed;
+   top: 0; left: 0;
+   background-color: white;
+}
+
+* html div.kupu-fulleditor-zoomed {
+   position: absolute; /* IE */
+}
+
+div.kupu-fulleditor-zoomed .kupu-editor-iframe {
+  border: none;
+  margin: 0;
+}
+
+div.kupu-smalleditor .kupu-editorframe {
+  margin-right: 0.2em;
+}
+
+h1.kupu-toolbox-heading, h1.kupu-toolbox-heading-closed {
+  cursor: default;
+  background-image: url("#{resource['oam.custom.inputHtml.kupuimages:closed.png']}");
+  background-repeat: no-repeat;
+  background-position: left;
+}
+
+h1.kupu-toolbox-heading-opened {
+  cursor: default;
+  background-image: url("#{resource['oam.custom.inputHtml.kupuimages:opened.png']}");
+  background-repeat: no-repeat;
+  background-position: left;
+}
+
+div.kupu-sourcemode span.kupu-tb-buttongroup,
+body.kupu-fulleditor-zoomed select { display: none; }
+body.kupu-fulleditor-zoomed div.kupu-fulleditor-zoomed select { display: inline; }
+div.kupu-sourcemode select { display: none !IMPORTANT; }
+div.kupu-sourcemode span#kupu-logo,
+div.kupu-sourcemode span#kupu-zoom,
+div.kupu-sourcemode span#kupu-source { display: inline; }
+
+div.kupu-smalleditor {
+  font-family: Verdana, "Lucida Grande", Helvetica, Arial, sans-serif;
+  border: solid 3px ButtonHighlight;
+  margin: 0.2em;
+  height: 100%;
+}
+
+.kupu-tb {
+  padding: 3px;
+  margin-bottom: 0.4em;
+  background-color: ButtonFace;
+  border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight;
+}
+
+.kupu-tb-buttons button {
+  color: ButtonText;
+  border: 1px solid ButtonFace;
+  margin-top: 0;
+  margin-left: 0;
+  height: 26px;
+  width: 26px;
+  background-repeat: no-repeat;
+}
+
+.kupu-tb-buttons button:hover {
+  cursor: default;
+  border: 1px solid;
+  border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight;
+}
+
+.kupu-tb-buttons button:active {
+  border: 1px solid;
+  border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow;
+}
+
+.kupu-tb-buttongroup {
+  margin-left: 2px;
+  margin-right: 2px;
+}
+
+
+.kupu-bold {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:bold.png']}");}
+.kupu-bold-pressed {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:bold.png']}"); background-color: white;}
+.kupu-forecolor {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:text-color.png']}");}
+.kupu-hilitecolor {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:background-color.png']}");}
+
+.kupu-inthyperlink {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:inthyperlink.png']}");}
+.kupu-inthyperlink-pressed {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:inthyperlink.png']}"); background-color: white}
+.kupu-exthyperlink {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:exthyperlink.png']}");}
+.kupu-exthyperlink-pressed {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:exthyperlink.png']}"); background-color: white}
+
+.kupu-image {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:image.png']}");}
+.kupu-indent {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:indent.png']}");}
+.kupu-inserthorizontalrule {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:hr.png']}");}
+.kupu-insertorderedlist {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:ordered-list.png']}");}
+.kupu-insertunorderedlist {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:unordered-list.png']}");}
+.kupu-insertdefinitionlist {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:definitionlist.png']}");}
+.kupu-italic {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:italic.png']}");}
+.kupu-italic-pressed {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:italic.png']}"); background-color: white}
+.kupu-justifycenter {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:justify-center.png']}");}
+.kupu-justifyleft {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:justify-left.png']}");}
+.kupu-justifyright {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:justify-right.png']}");}
+button.kupu-logo {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:kupu_icon.gif']}");}
+.kupu-outdent {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:outdent.png']}");}
+.kupu-redo {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:redo.png']}");}
+.kupu-save {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:save.png']}");}
+.kupu-save-and-exit {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:exit.gif']}");}
+.kupu-space {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:space.gif']}");}
+.kupu-source {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:view-source.png']}");}
+.kupu-spellchecker {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:text-check.png']}");}
+.kupu-subscript {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:subscript.png']}");}
+.kupu-subscript-pressed {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:subscript.png']}"); background-color: white}
+.kupu-superscript {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:superscript.png']}");}
+.kupu-superscript-pressed {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:superscript.png']}"); background-color: white}
+.kupu-table {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:table.png']}");}
+.kupu-underline {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:underline.png']}");}
+.kupu-underline-pressed {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:underline.png']}"); background-color: white}
+.kupu-undo {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:undo.png']}");}
+.kupu-removelink {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:remove.png']}");}
+.kupu-removeimage {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:remove.png']}");}
+.kupu-zoom {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:zoom-in.gif']}");}
+.kupu-zoom-pressed {background-image: url("#{resource['oam.custom.inputHtml.kupuimages:zoom-out.gif']}");}
+
+.kupu-tb-buttons button.invisible { 
+  display: none;
+  /*visibility: hidden;*/
+}
+
+.kupu-tb-buttons button.visible { 
+  display: inline;
+}
+
+div.kupu-editorframe {
+  margin-left: 0.3em;
+  margin-bottom: 0.3em;
+  border: solid 2px ButtonFace;
+}
+
+iframe.kupu-editor-iframe {
+  height: 450px;
+  width: 99%;
+}
+
+textarea.kupu-editor-textarea {
+  height: 450px;
+  width: 99%;
+  display: none;
+}
+
+div.kupu-toolboxes {
+  float: right;	
+  border: solid 2px ButtonFace;
+  width: 19.4em;
+  margin-right: 0.3em;
+  margin-bottom: 0.3em;
+  font-size: 0.8em;
+}
+
+div.kupu-fulleditor-zoomed div.kupu-toolboxes {
+  display: none;
+}
+
+div.kupu-toolbox, div.kupu-toolbox-active {
+  margin-bottom: 1em;
+}
+
+div.kupu-toolbox h1, div.kupu-toolbox-active h1 {
+  text-align: center;
+  width: 100%;
+  background-color: ButtonFace;
+  margin-top: 0;
+  font-size: 1.1em;
+}
+
+div.kupu-toolbox-label, span.kupu-toolbox-searchterm, 
+input.wide, select.wide, textarea.wide, button.kupu-toolbox-action, 
+div.kupu-toolbox-results {
+  margin-left: 0.2em;
+  margin-right: 0.2em;
+}
+
+.wide {
+  width: 95%;
+}
+
+div.kupu-toolbox-label {
+  margin-bottom: 0.4em;
+}
+
+.kupu-toolbox-buttons {
+  text-align: center;
+}
+
+.kupu-toolbox-buttons button {
+  width: 45%;
+}
+
+div.kupu-toolbox-results {
+  border: solid 2px ButtonFace;
+  margin-top: 0.8em;
+  text-decoration: underline;
+  padding: 0.2em;
+  display: none;
+}
+
+div.kupu-toolbox table.kupu-toolbox-addtable input, 
+div.kupu-toolbox-active table.kupu-toolbox-edittable input {
+  width: 20px;
+}
+
+div.kupu-toolbox-active {
+  background-color: ButtonFace;
+}
+
+.kupu-toolbox-editlink, .kupu-toolbox-edittable,
+.kupu-ulstyles, .kupu-olstyles {
+  display: none;
+}
+
+
+div#kupu-colorchooser {
+  position: absolute;
+  visibility: hidden;
+  border: solid black 1px;
+  background-color: white;
+  padding: 0.2em;
+  font-size: small;
+}
+
+.kupu-toolboxes input, .kupu-toolboxes select, .kupu-toolboxes textarea {
+  font-size: x-small;
+  font-family: Verdana, "Lucida Grande", Helvetica, Arial, sans-serif;
+}
+
+div#kupu-fgcolorchooser div:hover {
+  /* border: outset 1px; */
+}
+
+div.kupu-drawer {
+   overflow: auto;
+}
+
+button.disabled {
+   opacity:0.5;
+   filter:alpha(opacity=50);
+}

Added: myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/myFacesUtils.js
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/myFacesUtils.js?rev=928555&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/myFacesUtils.js (added)
+++ myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/myFacesUtils.js Mon Mar 29 01:14:43 2010
@@ -0,0 +1,117 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Utilities used by MyFaces x:inputHtml tag
+ * @author Sylvain Vieujot (latest modification by $Author: lu4242 $)
+ * @version $Revision: 928334 $ $Date: 2010-03-27 23:24:30 -0500 (Sáb, 27 Mar 2010) $
+ */
+var myFacesKupuTextsToLoad = new Array();
+var myFacesKupuClientIDs = new Array();
+var myFacesKupuFormsIds = new Array();
+var myFacesKupuIFramesIds = new Array();
+var myFacesKupuResourceBaseURL;
+var myFacesKupuDocOnLoadSet = false;
+var myFacesKupuOriginalDocOnLoad;
+var myFacesKupuProcessedFormsIds = new Array();
+var myFacesKupuOriginalFormsOnSubmits = new Array();
+var myFacesKupuEditors;
+
+function myFacesKupuSet(text, clientId, formId, resourceBaseURL){
+	myFacesKupuTextsToLoad.push( text );
+	myFacesKupuClientIDs.push( clientId );
+	myFacesKupuFormsIds.push( formId );
+	myFacesKupuIFramesIds.push( myFacesKupuGetIFrameId(clientId) );
+	myFacesKupuResourceBaseURL = resourceBaseURL;
+
+	if( ! myFacesKupuDocOnLoadSet ){
+		var onLoadSrc;
+	    if( document.all ) // IE
+			onLoadSrc = document.body;
+		else // Mozilla
+			onLoadSrc = window;
+
+		myFacesKupuOriginalDocOnLoad = onLoadSrc.onload;
+		onLoadSrc.onload = myFacesKupuInit;
+		
+		myFacesKupuDocOnLoadSet = true;
+	}
+	
+	var formAlreadyProcessed = false;
+	for(var i=0 ; i<myFacesKupuProcessedFormsIds.length && ! formAlreadyProcessed ; i++){
+		if( myFacesKupuProcessedFormsIds[i] == formId )
+			formAlreadyProcessed = true;
+	}
+	if( ! formAlreadyProcessed ){
+		myFacesKupuProcessedFormsIds.push( formId );
+		var form = document.forms[formId];
+		myFacesKupuOriginalFormsOnSubmits.push( form.onsubmit );
+		form.onsubmit = myFacesKupuFormSubmit;
+	}
+}
+
+// Must match InputHtmlRenderer.getIFrameID
+function myFacesKupuGetIFrameId(clientId){
+	return clientId+"_iframe";
+}
+
+function myFacesKupuInit(){
+	if( myFacesKupuOriginalDocOnLoad )
+		myFacesKupuOriginalDocOnLoad();
+
+	for(var i=0 ; i<myFacesKupuTextsToLoad.length ; i++){
+		myFacesKupuEditors = startKupu( myFacesKupuIFramesIds[i] );
+		document.getElementById(myFacesKupuIFramesIds[i]).contentWindow.document.getElementsByTagName('body')[0].innerHTML=myFacesKupuTextsToLoad[i];
+	}
+}
+
+function myFacesKupuReactivateDesignMode(iframe) {
+    var isIE = document.all && window.ActiveXObject && navigator.userAgent.toLowerCase().indexOf("msie") > -1 && navigator.userAgent.toLowerCase().indexOf("opera") == -1;
+    if (isIE) {
+        var body = iframe.contentWindow.document.getElementsByTagName('body')[0];
+        body.setAttribute('contentEditable', 'true');
+    }
+    else {
+        iframe.contentWindow.document.designMode='on';
+    }
+}
+
+function myFacesKupuFormSubmit(){
+	for(var i=0 ; i<myFacesKupuFormsIds.length ; i++){
+		myFacesKupuEditors.prepareForm(document.forms[myFacesKupuFormsIds[i]], myFacesKupuClientIDs[i]);
+	}
+	
+	originalFormOnSubmit = myFacesKupuOriginalFormsOnSubmits[0]; // TODO : Fix (How do we get the calling frame ??)
+	if( originalFormOnSubmit ){
+		return originalFormOnSubmit();
+	}
+	return true;
+}
+
+// Redefine or extend buggy kupu functions
+
+function openPopup(url, width, height){
+    /* open and center a popup window */
+    var sw = screen.width;
+    var sh = screen.height;
+    var left = sw / 2 - width / 2;
+    var top = sh / 2 - height / 2;
+    var win = window.open(myFacesKupuResourceBaseURL+url, 'someWindow', 
+                'width=' + width + ',height=' + height + ',left=' + left + ',top=' + top);
+    return win;
+}
\ No newline at end of file

Added: myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/sarissa.js
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/sarissa.js?rev=928555&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/sarissa.js (added)
+++ myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/sarissa.js Mon Mar 29 01:14:43 2010
@@ -0,0 +1,688 @@
+/**
+ * ====================================================================
+ * About
+ * ====================================================================
+ * Sarissa is an ECMAScript library acting as a cross-browser wrapper for native XML APIs.
+ * The library supports Gecko based browsers like Mozilla and Firefox,
+ * Internet Explorer (5.5+ with MSXML3.0+), Konqueror, Safari and a little of Opera
+ * @version ${project.version}
+ * @author: @author: Copyright 2004-2007 Emmanouil Batsis, mailto: mbatsis at users full stop sourceforge full stop net
+ *
+ * ====================================================================
+ * Licence
+ * ====================================================================
+ * Sarissa is free software distributed under the GNU GPL version 2 (see <a href="gpl.txt">gpl.txt</a>) or higher, 
+ * GNU LGPL version 2.1 (see <a href="lgpl.txt">lgpl.txt</a>) or higher and Apache Software License 2.0 or higher 
+ * (see <a href="asl.txt">asl.txt</a>). This means you can choose one of the three and use that if you like. If 
+ * you make modifications under the ASL, i would appreciate it if you submitted those.
+ * In case your copy of Sarissa does not include the license texts, you may find
+ * them online in various formats at <a href="http://www.gnu.org">http://www.gnu.org</a> and 
+ * <a href="http://www.apache.org">http://www.apache.org</a>.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY 
+ * KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE 
+ * WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE 
+ * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+/**
+ * <p>Sarissa is a utility class. Provides "static" methods for DOMDocument, 
+ * DOM Node serialization to XML strings and other utility goodies.</p>
+ * @constructor
+ */
+function Sarissa(){};
+Sarissa.VERSION = "${project.version}";
+Sarissa.PARSED_OK = "Document contains no parsing errors";
+Sarissa.PARSED_EMPTY = "Document is empty";
+Sarissa.PARSED_UNKNOWN_ERROR = "Not well-formed or other error";
+Sarissa.IS_ENABLED_TRANSFORM_NODE = false;
+var _sarissa_iNsCounter = 0;
+var _SARISSA_IEPREFIX4XSLPARAM = "";
+var _SARISSA_HAS_DOM_IMPLEMENTATION = document.implementation && true;
+var _SARISSA_HAS_DOM_CREATE_DOCUMENT = _SARISSA_HAS_DOM_IMPLEMENTATION && document.implementation.createDocument;
+var _SARISSA_HAS_DOM_FEATURE = _SARISSA_HAS_DOM_IMPLEMENTATION && document.implementation.hasFeature;
+var _SARISSA_IS_MOZ = _SARISSA_HAS_DOM_CREATE_DOCUMENT && _SARISSA_HAS_DOM_FEATURE;
+var _SARISSA_IS_SAFARI = navigator.userAgent.toLowerCase().indexOf("safari") != -1 || navigator.userAgent.toLowerCase().indexOf("konqueror") != -1;
+var _SARISSA_IS_SAFARI_OLD = _SARISSA_IS_SAFARI && parseInt((navigator.userAgent.match(/AppleWebKit\/(\d+)/)||{})[1]) < 420;
+var _SARISSA_IS_IE = document.all && window.ActiveXObject && navigator.userAgent.toLowerCase().indexOf("msie") > -1  && navigator.userAgent.toLowerCase().indexOf("opera") == -1;
+var _SARISSA_IS_OPERA = navigator.userAgent.toLowerCase().indexOf("opera") != -1;
+if(!window.Node || !Node.ELEMENT_NODE){
+    Node = {ELEMENT_NODE: 1, ATTRIBUTE_NODE: 2, TEXT_NODE: 3, CDATA_SECTION_NODE: 4, ENTITY_REFERENCE_NODE: 5,  ENTITY_NODE: 6, PROCESSING_INSTRUCTION_NODE: 7, COMMENT_NODE: 8, DOCUMENT_NODE: 9, DOCUMENT_TYPE_NODE: 10, DOCUMENT_FRAGMENT_NODE: 11, NOTATION_NODE: 12};
+};
+
+//This breaks for(x in o) loops in the old Safari
+if(_SARISSA_IS_SAFARI_OLD){
+    HTMLHtmlElement = document.createElement("html").constructor;
+    Node = HTMLElement = {};
+    HTMLElement.prototype = HTMLHtmlElement.__proto__.__proto__;
+    HTMLDocument = Document = document.constructor;
+    var x = new DOMParser();
+    XMLDocument = x.constructor;
+    Element = x.parseFromString("<Single />", "text/xml").documentElement.constructor;
+    x = null;
+}
+if(typeof XMLDocument == "undefined" && typeof Document !="undefined"){ XMLDocument = Document; } 
+
+// IE initialization
+if(_SARISSA_IS_IE){
+    // for XSLT parameter names, prefix needed by IE
+    _SARISSA_IEPREFIX4XSLPARAM = "xsl:";
+    // used to store the most recent ProgID available out of the above
+    var _SARISSA_DOM_PROGID = "";
+    var _SARISSA_XMLHTTP_PROGID = "";
+    var _SARISSA_DOM_XMLWRITER = "";
+    /**
+     * Called when the Sarissa_xx.js file is parsed, to pick most recent
+     * ProgIDs for IE, then gets destroyed.
+     * @private
+     * @param idList an array of MSXML PROGIDs from which the most recent will be picked for a given object
+     * @param enabledList an array of arrays where each array has two items; the index of the PROGID for which a certain feature is enabled
+     */
+    Sarissa.pickRecentProgID = function (idList){
+        // found progID flag
+        var bFound = false, e;
+        for(var i=0; i < idList.length && !bFound; i++){
+            try{
+                var oDoc = new ActiveXObject(idList[i]);
+                var o2Store = idList[i];
+                bFound = true;
+            }catch (objException){
+                // trap; try next progID
+                e = objException;
+            };
+        };
+        if (!bFound) {
+            throw "Could not retrieve a valid progID of Class: " + idList[idList.length-1]+". (original exception: "+e+")";
+        };
+        idList = null;
+        return o2Store;
+    };
+    // pick best available MSXML progIDs
+    _SARISSA_DOM_PROGID = null;
+    _SARISSA_THREADEDDOM_PROGID = null;
+    _SARISSA_XSLTEMPLATE_PROGID = null;
+    _SARISSA_XMLHTTP_PROGID = null;
+    if(!window.XMLHttpRequest){
+        /**
+         * Emulate XMLHttpRequest
+         * @constructor
+         */
+        XMLHttpRequest = function() {
+            if(!_SARISSA_XMLHTTP_PROGID){
+                _SARISSA_XMLHTTP_PROGID = Sarissa.pickRecentProgID(["Msxml2.XMLHTTP.6.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"]);
+            };
+            return new ActiveXObject(_SARISSA_XMLHTTP_PROGID);
+        };
+    };
+    // we dont need this anymore
+    //============================================
+    // Factory methods (IE)
+    //============================================
+    // see non-IE version
+    Sarissa.getDomDocument = function(sUri, sName){
+        if(!_SARISSA_DOM_PROGID){
+            _SARISSA_DOM_PROGID = Sarissa.pickRecentProgID(["Msxml2.DOMDocument.6.0", "Msxml2.DOMDocument.3.0", "MSXML2.DOMDocument", "MSXML.DOMDocument", "Microsoft.XMLDOM"]);
+        };
+        var oDoc = new ActiveXObject(_SARISSA_DOM_PROGID);
+        // if a root tag name was provided, we need to load it in the DOM object
+        if (sName){
+            // create an artifical namespace prefix 
+            // or reuse existing prefix if applicable
+            var prefix = "";
+            if(sUri){
+                if(sName.indexOf(":") > 1){
+                    prefix = sName.substring(0, sName.indexOf(":"));
+                    sName = sName.substring(sName.indexOf(":")+1); 
+                }else{
+                    prefix = "a" + (_sarissa_iNsCounter++);
+                };
+            };
+            // use namespaces if a namespace URI exists
+            if(sUri){
+                oDoc.loadXML('<' + prefix+':'+sName + " xmlns:" + prefix + "=\"" + sUri + "\"" + " />");
+            } else {
+                oDoc.loadXML('<' + sName + " />");
+            };
+        };
+        return oDoc;
+    };
+    // see non-IE version   
+    Sarissa.getParseErrorText = function (oDoc) {
+        var parseErrorText = Sarissa.PARSED_OK;
+        if(oDoc && oDoc.parseError && oDoc.parseError.errorCode && oDoc.parseError.errorCode != 0){
+            parseErrorText = "XML Parsing Error: " + oDoc.parseError.reason + 
+                "\nLocation: " + oDoc.parseError.url + 
+                "\nLine Number " + oDoc.parseError.line + ", Column " + 
+                oDoc.parseError.linepos + 
+                ":\n" + oDoc.parseError.srcText +
+                "\n";
+            for(var i = 0;  i < oDoc.parseError.linepos;i++){
+                parseErrorText += "-";
+            };
+            parseErrorText +=  "^\n";
+        }
+        else if(oDoc.documentElement == null){
+            parseErrorText = Sarissa.PARSED_EMPTY;
+        };
+        return parseErrorText;
+    };
+    // see non-IE version
+    Sarissa.setXpathNamespaces = function(oDoc, sNsSet) {
+        oDoc.setProperty("SelectionLanguage", "XPath");
+        oDoc.setProperty("SelectionNamespaces", sNsSet);
+    };   
+    /**
+     * Basic implementation of Mozilla's XSLTProcessor for IE. 
+     * Reuses the same XSLT stylesheet for multiple transforms
+     * @constructor
+     */
+    XSLTProcessor = function(){
+        if(!_SARISSA_XSLTEMPLATE_PROGID){
+            _SARISSA_XSLTEMPLATE_PROGID = Sarissa.pickRecentProgID(["Msxml2.XSLTemplate.6.0", "MSXML2.XSLTemplate.3.0"]);
+        };
+        this.template = new ActiveXObject(_SARISSA_XSLTEMPLATE_PROGID);
+        this.processor = null;
+    };
+    /**
+     * Imports the given XSLT DOM and compiles it to a reusable transform
+     * <b>Note:</b> If the stylesheet was loaded from a URL and contains xsl:import or xsl:include elements,it will be reloaded to resolve those
+     * @argument xslDoc The XSLT DOMDocument to import
+     */
+    XSLTProcessor.prototype.importStylesheet = function(xslDoc){
+        if(!_SARISSA_THREADEDDOM_PROGID){
+            _SARISSA_THREADEDDOM_PROGID = Sarissa.pickRecentProgID(["MSXML2.FreeThreadedDOMDocument.6.0", "MSXML2.FreeThreadedDOMDocument.3.0"]);
+        };
+        xslDoc.setProperty("SelectionLanguage", "XPath");
+        xslDoc.setProperty("SelectionNamespaces", "xmlns:xsl='http://www.w3.org/1999/XSL/Transform'");
+        // convert stylesheet to free threaded
+        var converted = new ActiveXObject(_SARISSA_THREADEDDOM_PROGID);
+        // make included/imported stylesheets work if exist and xsl was originally loaded from url
+        try{
+            converted.resolveExternals = true; 
+            converted.setProperty("AllowDocumentFunction", true); 
+        }
+        catch(e){
+            // Ignore. "AllowDocumentFunction" is only supported in MSXML 3.0 SP4 and later.
+        }; 
+        if(xslDoc.url && xslDoc.selectSingleNode("//xsl:*[local-name() = 'import' or local-name() = 'include']") != null){
+            converted.async = false;
+            converted.load(xslDoc.url);
+        } else {
+            converted.loadXML(xslDoc.xml);
+        };
+        converted.setProperty("SelectionNamespaces", "xmlns:xsl='http://www.w3.org/1999/XSL/Transform'");
+        var output = converted.selectSingleNode("//xsl:output");
+        this.outputMethod = output ? output.getAttribute("method") : "html";
+        this.template.stylesheet = converted;
+        this.processor = this.template.createProcessor();
+        // for getParameter and clearParameters
+        this.paramsSet = [];
+    };
+
+    /**
+     * Transform the given XML DOM and return the transformation result as a new DOM document
+     * @argument sourceDoc The XML DOMDocument to transform
+     * @return The transformation result as a DOM Document
+     */
+    XSLTProcessor.prototype.transformToDocument = function(sourceDoc){
+        // fix for bug 1549749
+        if(_SARISSA_THREADEDDOM_PROGID){
+            this.processor.input=sourceDoc;
+            var outDoc=new ActiveXObject(_SARISSA_DOM_PROGID);
+            this.processor.output=outDoc;
+            this.processor.transform();
+            return outDoc;
+        }
+        else{
+            if(!_SARISSA_DOM_XMLWRITER){
+                _SARISSA_DOM_XMLWRITER = Sarissa.pickRecentProgID(["Msxml2.MXXMLWriter.6.0", "Msxml2.MXXMLWriter.3.0", "MSXML2.MXXMLWriter", "MSXML.MXXMLWriter", "Microsoft.XMLDOM"]);
+            };
+            this.processor.input = sourceDoc;
+            var outDoc = new ActiveXObject(_SARISSA_DOM_XMLWRITER);
+            this.processor.output = outDoc; 
+            this.processor.transform();
+            var oDoc = new ActiveXObject(_SARISSA_DOM_PROGID);
+            oDoc.loadXML(outDoc.output+"");
+            return oDoc;
+        };
+    };
+    
+    /**
+     * Transform the given XML DOM and return the transformation result as a new DOM fragment.
+     * <b>Note</b>: The xsl:output method must match the nature of the owner document (XML/HTML).
+     * @argument sourceDoc The XML DOMDocument to transform
+     * @argument ownerDoc The owner of the result fragment
+     * @return The transformation result as a DOM Document
+     */
+    XSLTProcessor.prototype.transformToFragment = function (sourceDoc, ownerDoc) {
+        this.processor.input = sourceDoc;
+        this.processor.transform();
+        var s = this.processor.output;
+        var f = ownerDoc.createDocumentFragment();
+        if (this.outputMethod == 'text') {
+            f.appendChild(ownerDoc.createTextNode(s));
+        } else if (ownerDoc.body && ownerDoc.body.innerHTML) {
+            var container = ownerDoc.createElement('div');
+            container.innerHTML = s;
+            while (container.hasChildNodes()) {
+                f.appendChild(container.firstChild);
+            }
+        }
+        else {
+            var oDoc = new ActiveXObject(_SARISSA_DOM_PROGID);
+            if (s.substring(0, 5) == '<?xml') {
+                s = s.substring(s.indexOf('?>') + 2);
+            }
+            var xml = ''.concat('<my>', s, '</my>');
+            oDoc.loadXML(xml);
+            var container = oDoc.documentElement;
+            while (container.hasChildNodes()) {
+                f.appendChild(container.firstChild);
+            }
+        }
+        return f;
+    };
+    
+    /**
+     * Set global XSLT parameter of the imported stylesheet
+     * @argument nsURI The parameter namespace URI
+     * @argument name The parameter base name
+     * @argument value The new parameter value
+     */
+     XSLTProcessor.prototype.setParameter = function(nsURI, name, value){
+         // make value a zero length string if null to allow clearing
+         value = value ? value : "";
+         // nsURI is optional but cannot be null
+         if(nsURI){
+             this.processor.addParameter(name, value, nsURI);
+         }else{
+             this.processor.addParameter(name, value);
+         };
+         // update updated params for getParameter
+         nsURI = "" + (nsURI || "");
+         if(!this.paramsSet[nsURI]){
+             this.paramsSet[nsURI] = new Array();
+         };
+         this.paramsSet[nsURI][name] = value;
+     };
+    /**
+     * Gets a parameter if previously set by setParameter. Returns null
+     * otherwise
+     * @argument name The parameter base name
+     * @argument value The new parameter value
+     * @return The parameter value if reviously set by setParameter, null otherwise
+     */
+    XSLTProcessor.prototype.getParameter = function(nsURI, name){
+        nsURI = "" + (nsURI || "");
+        if(this.paramsSet[nsURI] && this.paramsSet[nsURI][name]){
+            return this.paramsSet[nsURI][name];
+        }else{
+            return null;
+        };
+    };
+    /**
+     * Clear parameters (set them to default values as defined in the stylesheet itself)
+     */
+    XSLTProcessor.prototype.clearParameters = function(){
+        for(var nsURI in this.paramsSet){
+            for(var name in this.paramsSet[nsURI]){
+                if(nsURI!=""){
+                    this.processor.addParameter(name, "", nsURI);
+                }else{
+                    this.processor.addParameter(name, "");
+                };
+            };
+        };
+        this.paramsSet = new Array();
+    };
+}else{ /* end IE initialization, try to deal with real browsers now ;-) */
+    if(_SARISSA_HAS_DOM_CREATE_DOCUMENT){
+        /**
+         * <p>Ensures the document was loaded correctly, otherwise sets the
+         * parseError to -1 to indicate something went wrong. Internal use</p>
+         * @private
+         */
+        Sarissa.__handleLoad__ = function(oDoc){
+            Sarissa.__setReadyState__(oDoc, 4);
+        };
+        /**
+        * <p>Attached by an event handler to the load event. Internal use.</p>
+        * @private
+        */
+        _sarissa_XMLDocument_onload = function(){
+            Sarissa.__handleLoad__(this);
+        };
+        /**
+         * <p>Sets the readyState property of the given DOM Document object.
+         * Internal use.</p>
+         * @private
+         * @argument oDoc the DOM Document object to fire the
+         *          readystatechange event
+         * @argument iReadyState the number to change the readystate property to
+         */
+        Sarissa.__setReadyState__ = function(oDoc, iReadyState){
+            oDoc.readyState = iReadyState;
+            oDoc.readystate = iReadyState;
+            if (oDoc.onreadystatechange != null && typeof oDoc.onreadystatechange == "function") {
+                oDoc.onreadystatechange();
+            }
+        };
+        Sarissa.getDomDocument = function(sUri, sName){
+            var oDoc = document.implementation.createDocument(sUri?sUri:null, sName?sName:null, null);
+            if(!oDoc.onreadystatechange){
+            
+                /**
+                * <p>Emulate IE's onreadystatechange attribute</p>
+                */
+                oDoc.onreadystatechange = null;
+            };
+            if(!oDoc.readyState){
+                /**
+                * <p>Emulates IE's readyState property, which always gives an integer from 0 to 4:</p>
+                * <ul><li>1 == LOADING,</li>
+                * <li>2 == LOADED,</li>
+                * <li>3 == INTERACTIVE,</li>
+                * <li>4 == COMPLETED</li></ul>
+                */
+                oDoc.readyState = 0;
+            };
+            oDoc.addEventListener("load", _sarissa_XMLDocument_onload, false);
+            return oDoc;
+        };
+        if(window.XMLDocument){
+            // do nothing
+        }// TODO: check if the new document has content before trying to copynodes, check  for error handling in DOM 3 LS
+        else if(_SARISSA_HAS_DOM_FEATURE && window.Document && !Document.prototype.load && document.implementation.hasFeature('LS', '3.0')){
+            //Opera 9 may get the XPath branch which gives creates XMLDocument, therefore it doesn't reach here which is good
+            /**
+            * <p>Factory method to obtain a new DOM Document object</p>
+            * @argument sUri the namespace of the root node (if any)
+            * @argument sUri the local name of the root node (if any)
+            * @returns a new DOM Document
+            */
+            Sarissa.getDomDocument = function(sUri, sName){
+                var oDoc = document.implementation.createDocument(sUri?sUri:null, sName?sName:null, null);
+                return oDoc;
+            };
+        }
+        else {
+            Sarissa.getDomDocument = function(sUri, sName){
+                var oDoc = document.implementation.createDocument(sUri?sUri:null, sName?sName:null, null);
+                // looks like safari does not create the root element for some unknown reason
+                if(oDoc && (sUri || sName) && !oDoc.documentElement){
+                    oDoc.appendChild(oDoc.createElementNS(sUri, sName));
+                };
+                return oDoc;
+            };
+        };
+    };//if(_SARISSA_HAS_DOM_CREATE_DOCUMENT)
+};
+//==========================================
+// Common stuff
+//==========================================
+if(!window.DOMParser){
+    if(_SARISSA_IS_SAFARI){
+        /*
+         * DOMParser is a utility class, used to construct DOMDocuments from XML strings
+         * @constructor
+         */
+        DOMParser = function() { };
+        /** 
+        * Construct a new DOM Document from the given XMLstring
+        * @param sXml the given XML string
+        * @param contentType the content type of the document the given string represents (one of text/xml, application/xml, application/xhtml+xml). 
+        * @return a new DOM Document from the given XML string
+        */
+        DOMParser.prototype.parseFromString = function(sXml, contentType){
+            var xmlhttp = new XMLHttpRequest();
+            xmlhttp.open("GET", "data:text/xml;charset=utf-8," + encodeURIComponent(sXml), false);
+            xmlhttp.send(null);
+            return xmlhttp.responseXML;
+        };
+    }else if(Sarissa.getDomDocument && Sarissa.getDomDocument() && Sarissa.getDomDocument(null, "bar").xml){
+        DOMParser = function() { };
+        DOMParser.prototype.parseFromString = function(sXml, contentType){
+            var doc = Sarissa.getDomDocument();
+            doc.loadXML(sXml);
+            return doc;
+        };
+    };
+};
+
+if((typeof(document.importNode) == "undefined") && _SARISSA_IS_IE){
+    try{
+        /**
+        * Implementation of importNode for the context window document in IE.
+        * If <code>oNode</code> is a TextNode, <code>bChildren</code> is ignored.
+        * @param oNode the Node to import
+        * @param bChildren whether to include the children of oNode
+        * @returns the imported node for further use
+        */
+        document.importNode = function(oNode, bChildren){
+            var tmp;
+            if (oNode.nodeName=='#text') {
+                return document.createTextNode(oNode.data);
+            }
+            else {
+                if(oNode.nodeName == "tbody" || oNode.nodeName == "tr"){
+                    tmp = document.createElement("table");
+                }
+                else if(oNode.nodeName == "td"){
+                    tmp = document.createElement("tr");
+                }
+                else if(oNode.nodeName == "option"){
+                    tmp = document.createElement("select");
+                }
+                else{
+                    tmp = document.createElement("div");
+                };
+                if(bChildren){
+                    tmp.innerHTML = oNode.xml ? oNode.xml : oNode.outerHTML;
+                }else{
+                    tmp.innerHTML = oNode.xml ? oNode.cloneNode(false).xml : oNode.cloneNode(false).outerHTML;
+                };
+                return tmp.getElementsByTagName("*")[0];
+            };
+            
+        };
+    }catch(e){ };
+};
+if(!Sarissa.getParseErrorText){
+    /**
+     * <p>Returns a human readable description of the parsing error. Usefull
+     * for debugging. Tip: append the returned error string in a &lt;pre&gt;
+     * element if you want to render it.</p>
+     * <p>Many thanks to Christian Stocker for the initial patch.</p>
+     * @argument oDoc The target DOM document
+     * @returns The parsing error description of the target Document in
+     *          human readable form (preformated text)
+     */
+    Sarissa.getParseErrorText = function (oDoc){
+        var parseErrorText = Sarissa.PARSED_OK;
+        if(!oDoc.documentElement){
+            parseErrorText = Sarissa.PARSED_EMPTY;
+        } else if(oDoc.documentElement.tagName == "parsererror"){
+            parseErrorText = oDoc.documentElement.firstChild.data;
+            parseErrorText += "\n" +  oDoc.documentElement.firstChild.nextSibling.firstChild.data;
+        } else if(oDoc.getElementsByTagName("parsererror").length > 0){
+            var parsererror = oDoc.getElementsByTagName("parsererror")[0];
+            parseErrorText = Sarissa.getText(parsererror, true)+"\n";
+        } else if(oDoc.parseError && oDoc.parseError.errorCode != 0){
+            parseErrorText = Sarissa.PARSED_UNKNOWN_ERROR;
+        };
+        return parseErrorText;
+    };
+};
+Sarissa.getText = function(oNode, deep){
+    var s = "";
+    var nodes = oNode.childNodes;
+    for(var i=0; i < nodes.length; i++){
+        var node = nodes[i];
+        var nodeType = node.nodeType;
+        if(nodeType == Node.TEXT_NODE || nodeType == Node.CDATA_SECTION_NODE){
+            s += node.data;
+        } else if(deep == true
+                    && (nodeType == Node.ELEMENT_NODE
+                        || nodeType == Node.DOCUMENT_NODE
+                        || nodeType == Node.DOCUMENT_FRAGMENT_NODE)){
+            s += Sarissa.getText(node, true);
+        };
+    };
+    return s;
+};
+if(!window.XMLSerializer 
+    && Sarissa.getDomDocument 
+    && Sarissa.getDomDocument("","foo", null).xml){
+    /**
+     * Utility class to serialize DOM Node objects to XML strings
+     * @constructor
+     */
+    XMLSerializer = function(){};
+    /**
+     * Serialize the given DOM Node to an XML string
+     * @param oNode the DOM Node to serialize
+     */
+    XMLSerializer.prototype.serializeToString = function(oNode) {
+        return oNode.xml;
+    };
+};
+
+/**
+ * strips tags from a markup string
+ */
+Sarissa.stripTags = function (s) {
+    return s.replace(/<[^>]+>/g,"");
+};
+/**
+ * <p>Deletes all child nodes of the given node</p>
+ * @argument oNode the Node to empty
+ */
+Sarissa.clearChildNodes = function(oNode) {
+    // need to check for firstChild due to opera 8 bug with hasChildNodes
+    while(oNode.firstChild) {
+        oNode.removeChild(oNode.firstChild);
+    };
+};
+/**
+ * <p> Copies the childNodes of nodeFrom to nodeTo</p>
+ * <p> <b>Note:</b> The second object's original content is deleted before 
+ * the copy operation, unless you supply a true third parameter</p>
+ * @argument nodeFrom the Node to copy the childNodes from
+ * @argument nodeTo the Node to copy the childNodes to
+ * @argument bPreserveExisting whether to preserve the original content of nodeTo, default is false
+ */
+Sarissa.copyChildNodes = function(nodeFrom, nodeTo, bPreserveExisting) {
+    if(_SARISSA_IS_SAFARI && nodeTo.nodeType == Node.DOCUMENT_NODE){ // SAFARI_OLD ??
+        nodeTo = nodeTo.documentElement; //Appearantly there's a bug in safari where you can't appendChild to a document node
+    }
+    
+    if((!nodeFrom) || (!nodeTo)){
+        throw "Both source and destination nodes must be provided";
+    };
+    if(!bPreserveExisting){
+        Sarissa.clearChildNodes(nodeTo);
+    };
+    var ownerDoc = nodeTo.nodeType == Node.DOCUMENT_NODE ? nodeTo : nodeTo.ownerDocument;
+    var nodes = nodeFrom.childNodes;
+    if(typeof(ownerDoc.importNode) != "undefined")  {
+        for(var i=0;i < nodes.length;i++) {
+            nodeTo.appendChild(ownerDoc.importNode(nodes[i], true));
+        };
+    } else {
+        for(var i=0;i < nodes.length;i++) {
+            nodeTo.appendChild(nodes[i].cloneNode(true));
+        };
+    };
+};
+
+/**
+ * <p> Moves the childNodes of nodeFrom to nodeTo</p>
+ * <p> <b>Note:</b> The second object's original content is deleted before 
+ * the move operation, unless you supply a true third parameter</p>
+ * @argument nodeFrom the Node to copy the childNodes from
+ * @argument nodeTo the Node to copy the childNodes to
+ * @argument bPreserveExisting whether to preserve the original content of nodeTo, default is
+ */ 
+Sarissa.moveChildNodes = function(nodeFrom, nodeTo, bPreserveExisting) {
+    if((!nodeFrom) || (!nodeTo)){
+        throw "Both source and destination nodes must be provided";
+    };
+    if(!bPreserveExisting){
+        Sarissa.clearChildNodes(nodeTo);
+    };
+    var nodes = nodeFrom.childNodes;
+    // if within the same doc, just move, else copy and delete
+    if(nodeFrom.ownerDocument == nodeTo.ownerDocument){
+        while(nodeFrom.firstChild){
+            nodeTo.appendChild(nodeFrom.firstChild);
+        };
+    } else {
+        var ownerDoc = nodeTo.nodeType == Node.DOCUMENT_NODE ? nodeTo : nodeTo.ownerDocument;
+        if(typeof(ownerDoc.importNode) != "undefined") {
+           for(var i=0;i < nodes.length;i++) {
+               nodeTo.appendChild(ownerDoc.importNode(nodes[i], true));
+           };
+        }else{
+           for(var i=0;i < nodes.length;i++) {
+               nodeTo.appendChild(nodes[i].cloneNode(true));
+           };
+        };
+        Sarissa.clearChildNodes(nodeFrom);
+    };
+};
+
+/** 
+ * <p>Serialize any <strong>non</strong> DOM object to an XML string. All properties are serialized using the property name
+ * as the XML element name. Array elements are rendered as <code>array-item</code> elements, 
+ * using their index/key as the value of the <code>key</code> attribute.</p>
+ * @argument anyObject the object to serialize
+ * @argument objectName a name for that object
+ * @return the XML serialization of the given object as a string
+ */
+Sarissa.xmlize = function(anyObject, objectName, indentSpace){
+    indentSpace = indentSpace?indentSpace:'';
+    var s = indentSpace  + '<' + objectName + '>';
+    var isLeaf = false;
+    if(!(anyObject instanceof Object) || anyObject instanceof Number || anyObject instanceof String 
+        || anyObject instanceof Boolean || anyObject instanceof Date){
+        s += Sarissa.escape(""+anyObject);
+        isLeaf = true;
+    }else{
+        s += "\n";
+        var isArrayItem = anyObject instanceof Array;
+        for(var name in anyObject){
+            s += Sarissa.xmlize(anyObject[name], (isArrayItem?"array-item key=\""+name+"\"":name), indentSpace + "   ");
+        };
+        s += indentSpace;
+    };
+    return (s += (objectName.indexOf(' ')!=-1?"</array-item>\n":"</" + objectName + ">\n"));
+};
+
+/** 
+ * Escape the given string chacters that correspond to the five predefined XML entities
+ * @param sXml the string to escape
+ */
+Sarissa.escape = function(sXml){
+    return sXml.replace(/&/g, "&amp;")
+        .replace(/</g, "&lt;")
+        .replace(/>/g, "&gt;")
+        .replace(/"/g, "&quot;")
+        .replace(/'/g, "&apos;");
+};
+
+/** 
+ * Unescape the given string. This turns the occurences of the predefined XML 
+ * entities to become the characters they represent correspond to the five predefined XML entities
+ * @param sXml the string to unescape
+ */
+Sarissa.unescape = function(sXml){
+    return sXml.replace(/&apos;/g,"'")
+        .replace(/&quot;/g,"\"")
+        .replace(/&gt;/g,">")
+        .replace(/&lt;/g,"<")
+        .replace(/&amp;/g,"&");
+};
+//   EOF

Added: myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/sarissa_ieemu_xpath.js
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/sarissa_ieemu_xpath.js?rev=928555&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/sarissa_ieemu_xpath.js (added)
+++ myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputHtml/sarissa_ieemu_xpath.js Mon Mar 29 01:14:43 2010
@@ -0,0 +1,204 @@
+/**
+ * ====================================================================
+ * About
+ * ====================================================================
+ * Sarissa cross browser XML library - IE XPath Emulation 
+ * @version @sarissa.version@
+ * @author: Manos Batsis, mailto: mbatsis at users full stop sourceforge full stop net
+ *
+ * This script emulates Internet Explorer's selectNodes and selectSingleNode
+ * for Mozilla. Associating namespace prefixes with URIs for your XPath queries
+ * is easy with IE's setProperty. 
+ * USers may also map a namespace prefix to a default (unprefixed) namespace in the
+ * source document with Sarissa.setXpathNamespaces
+ *
+ *
+ * ====================================================================
+ * Licence
+ * ====================================================================
+ * Sarissa is free software distributed under the GNU GPL version 2 (see <a href="gpl.txt">gpl.txt</a>) or higher, 
+ * GNU LGPL version 2.1 (see <a href="lgpl.txt">lgpl.txt</a>) or higher and Apache Software License 2.0 or higher 
+ * (see <a href="asl.txt">asl.txt</a>). This means you can choose one of the three and use that if you like. If 
+ * you make modifications under the ASL, i would appreciate it if you submitted those.
+ * In case your copy of Sarissa does not include the license texts, you may find
+ * them online in various formats at <a href="http://www.gnu.org">http://www.gnu.org</a> and 
+ * <a href="http://www.apache.org">http://www.apache.org</a>.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY 
+ * KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE 
+ * WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE 
+ * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+if(_SARISSA_HAS_DOM_FEATURE && document.implementation.hasFeature("XPath", "3.0")){
+    /**
+    * <p>SarissaNodeList behaves as a NodeList but is only used as a result to <code>selectNodes</code>,
+    * so it also has some properties IEs proprietery object features.</p>
+    * @private
+    * @constructor
+    * @argument i the (initial) list size
+    */
+    function SarissaNodeList(i){
+        this.length = i;
+    };
+    /** <p>Set an Array as the prototype object</p> */
+    SarissaNodeList.prototype = [0];
+    /** <p>Inherit the Array constructor </p> */
+    SarissaNodeList.prototype.constructor = Array;
+    /**
+    * <p>Returns the node at the specified index or null if the given index
+    * is greater than the list size or less than zero </p>
+    * <p><b>Note</b> that in ECMAScript you can also use the square-bracket
+    * array notation instead of calling <code>item</code>
+    * @argument i the index of the member to return
+    * @returns the member corresponding to the given index
+    */
+    SarissaNodeList.prototype.item = function(i) {
+        return (i < 0 || i >= this.length)?null:this[i];
+    };
+    /**
+    * <p>Emulate IE's expr property
+    * (Here the SarissaNodeList object is given as the result of selectNodes).</p>
+    * @returns the XPath expression passed to selectNodes that resulted in
+    *          this SarissaNodeList
+    */
+    SarissaNodeList.prototype.expr = "";
+    /** dummy, used to accept IE's stuff without throwing errors */
+    if(window.XMLDocument && (!XMLDocument.prototype.setProperty)){
+        XMLDocument.prototype.setProperty  = function(x,y){};
+    };
+    /**
+    * <p>Programmatically control namespace URI/prefix mappings for XPath
+    * queries.</p>
+    * <p>This method comes especially handy when used to apply XPath queries
+    * on XML documents with a default namespace, as there is no other way
+    * of mapping that to a prefix.</p>
+    * <p>Using no namespace prefix in DOM Level 3 XPath queries, implies you
+    * are looking for elements in the null namespace. If you need to look
+    * for nodes in the default namespace, you need to map a prefix to it
+    * first like:</p>
+    * <pre>Sarissa.setXpathNamespaces(oDoc, &quot;xmlns:myprefix=&amp;aposhttp://mynsURI&amp;apos&quot;);</pre>
+    * <p><b>Note 1 </b>: Use this method only if the source document features
+    * a default namespace (without a prefix), otherwise just use IE's setProperty
+    * (moz will rezolve non-default namespaces by itself). You will need to map that
+    * namespace to a prefix for queries to work.</p>
+    * <p><b>Note 2 </b>: This method calls IE's setProperty method to set the
+    * appropriate namespace-prefix mappings, so you dont have to do that.</p>
+    * @param oDoc The target XMLDocument to set the namespace mappings for.
+    * @param sNsSet A whilespace-seperated list of namespace declarations as
+    *            those would appear in an XML document. E.g.:
+    *            <code>&quot;xmlns:xhtml=&apos;http://www.w3.org/1999/xhtml&apos;
+    * xmlns:&apos;http://www.w3.org/1999/XSL/Transform&apos;&quot;</code>
+    * @throws An error if the format of the given namespace declarations is bad.
+    */
+    Sarissa.setXpathNamespaces = function(oDoc, sNsSet) {
+        //oDoc._sarissa_setXpathNamespaces(sNsSet);
+        oDoc._sarissa_useCustomResolver = true;
+        var namespaces = sNsSet.indexOf(" ")>-1?sNsSet.split(" "):[sNsSet];
+        oDoc._sarissa_xpathNamespaces = [namespaces.length];
+        for(var i=0;i < namespaces.length;i++){
+            var ns = namespaces[i];
+            var colonPos = ns.indexOf(":");
+            var assignPos = ns.indexOf("=");
+            if(colonPos > 0 && assignPos > colonPos+1){
+                var prefix = ns.substring(colonPos+1, assignPos);
+                var uri = ns.substring(assignPos+2, ns.length-1);
+                oDoc._sarissa_xpathNamespaces[prefix] = uri;
+            }else{
+                throw "Bad format on namespace declaration(s) given";
+            };
+        };
+    };
+    /**
+    * @private Flag to control whether a custom namespace resolver should
+    *          be used, set to true by Sarissa.setXpathNamespaces
+    */
+    XMLDocument.prototype._sarissa_useCustomResolver = false;
+    /** @private */
+    XMLDocument.prototype._sarissa_xpathNamespaces = [];
+    /**
+    * <p>Extends the XMLDocument to emulate IE's selectNodes.</p>
+    * @argument sExpr the XPath expression to use
+    * @argument contextNode this is for internal use only by the same
+    *           method when called on Elements
+    * @returns the result of the XPath search as a SarissaNodeList
+    * @throws An error if no namespace URI is found for the given prefix.
+    */
+    XMLDocument.prototype.selectNodes = function(sExpr, contextNode, returnSingle){
+        var nsDoc = this;
+        var nsresolver = this._sarissa_useCustomResolver?
+            function(prefix) {
+            var s = nsDoc._sarissa_xpathNamespaces[prefix];
+            if(s)return s;
+            else throw "No namespace URI found for prefix: '" + prefix+"'";
+            }:
+            this.createNSResolver(this.documentElement);
+        var result = null;
+        if(!returnSingle){
+            var oResult = this.evaluate(sExpr,
+                (contextNode?contextNode:this),
+                nsresolver,
+                XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
+            var nodeList = new SarissaNodeList(oResult.snapshotLength);
+            nodeList.expr = sExpr;
+            for(var i=0;i<nodeList.length;i++) {
+                nodeList[i] = oResult.snapshotItem(i);
+            }
+            result = nodeList;
+        }
+        else {
+            result = oResult = this.evaluate(sExpr,
+                (contextNode?contextNode:this),
+                nsresolver,
+                XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
+        };
+        return result;      
+    };
+    /**
+    * <p>Extends the Element to emulate IE's selectNodes</p>
+    * @argument sExpr the XPath expression to use
+    * @returns the result of the XPath search as an (Sarissa)NodeList
+    * @throws An
+    *             error if invoked on an HTML Element as this is only be
+    *             available to XML Elements.
+    */
+    Element.prototype.selectNodes = function(sExpr){
+        var doc = this.ownerDocument;
+        if(doc.selectNodes) {
+            return doc.selectNodes(sExpr, this);
+        }
+        else {
+            throw "Method selectNodes is only supported by XML Elements";
+        }
+    };
+    /**
+    * <p>Extends the XMLDocument to emulate IE's selectSingleNode.</p>
+    * @argument sExpr the XPath expression to use
+    * @argument contextNode this is for internal use only by the same
+    *           method when called on Elements
+    * @returns the result of the XPath search as an (Sarissa)NodeList
+    */
+    XMLDocument.prototype.selectSingleNode = function(sExpr, contextNode){
+        var ctx = contextNode?contextNode:null;
+        return this.selectNodes(sExpr, ctx, true);
+    };
+    /**
+    * <p>Extends the Element to emulate IE's selectSingleNode.</p>
+    * @argument sExpr the XPath expression to use
+    * @returns the result of the XPath search as an (Sarissa)NodeList
+    * @throws An error if invoked on an HTML Element as this is only be
+    *             available to XML Elements.
+    */
+    Element.prototype.selectSingleNode = function(sExpr){
+        var doc = this.ownerDocument;
+        if(doc.selectSingleNode) {
+            return doc.selectSingleNode(sExpr, this);
+        } else {
+            throw "Method selectNodes is only supported by XML Elements";
+        }
+    };
+    Sarissa.IS_ENABLED_SELECT_NODES = true;
+}
\ No newline at end of file

Added: myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputTextHelp/inputTextHelp.js
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputTextHelp/inputTextHelp.js?rev=928555&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputTextHelp/inputTextHelp.js (added)
+++ myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.inputTextHelp/inputTextHelp.js Mon Mar 29 01:14:43 2010
@@ -0,0 +1,17 @@
+function resetHelpValue(helpText, id)
+{
+    var element=document.getElementById(id);
+    if(element.value==helpText)
+    {
+        element.value="";
+    }
+}
+
+function selectText(helpText, id)
+{
+    var element=document.getElementById(id);
+    if(element.value==helpText)
+    {
+        element.select();
+    }
+}
\ No newline at end of file

Added: myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.jslistener/JSListener.js
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.jslistener/JSListener.js?rev=928555&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.jslistener/JSListener.js (added)
+++ myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.jslistener/JSListener.js Mon Mar 29 01:14:43 2010
@@ -0,0 +1,91 @@
+function orgApacheMyfacesJsListenerSetExpressionProperty(
+    srcId, destId, property, expression)
+{
+    var log = true;
+    var logStr;
+
+    try
+    {
+
+        if(log) logStr+="Source-Element id: "+srcId;
+
+        var srcElem = document.getElementById(srcId);
+
+        if(log) logStr+="\n Source-element: "+srcElem;
+        if(log) logStr+="\n Type of source-element: "+typeof(srcElem);
+
+        if(log) logStr += "\n\n  Destination-element id: "+destId;
+
+        var destElem = document.getElementById(destId);
+
+        if(log) logStr+="\n Destination-element: "+destElem;
+        if(log) logStr+="\n Type of destination-element: "+typeof(destElem);
+
+        if(log) logStr+="\n\n  Expression before parsing: "+expression;
+
+        expression = orgApacheMyfacesJsListenerReplaceMakro(expression, "srcElem",srcElem);
+        expression = orgApacheMyfacesJsListenerReplaceMakro(expression, "destElem",destElem);
+
+        if(log) logStr+="\n Expression after parsing: "+expression;
+
+        var value = eval(expression);
+
+        if(property)
+        {
+            var destElemStr = "destElem.";
+
+            var valueStr;
+
+            if(typeof (value) == 'string')
+            {
+                valueStr = "'"+value+"'";
+            }
+            else
+            {
+                valueStr = value;
+            }
+
+            var propertySetStr = destElemStr+property+"="+valueStr+";";
+
+            if(log) logStr+="\n\n  Property set string: "+propertySetStr;
+
+            eval(propertySetStr);
+        }
+    }
+    catch(e)
+    {
+        var errorString = 'Error encountered : ';
+        errorString += e['message'];
+        errorString += logStr;
+
+        if(document.all)
+        {
+            e['description']=errorString;
+            throw e;
+        }
+        else
+        {
+            throw errorString;
+        }
+    }
+
+}
+
+function orgApacheMyfacesJsListenerReplaceMakro(expression, macroName, elem)
+{
+
+    var regEx = new RegExp("\\$"+macroName, "g");
+    expression = expression.replace(regEx,macroName);
+
+/*    if(orgApacheMyfacesJsListenerIsArray(elem))
+    {
+        var arrRegEx = new RegExp("\\$"+macroName+"[\\[]([0-9]+)[\\]]", "g");
+        expression = expression.replace(arrRegEx,macroName+"[$1]");
+        expression = expression.replace(regEx,macroName+"[0]");
+    }
+    else
+    {*/
+//    }
+
+    return expression;
+}
\ No newline at end of file

Added: myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.navmenu.htmlnavmenu/HMenuIEHover.js
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.navmenu.htmlnavmenu/HMenuIEHover.js?rev=928555&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.navmenu.htmlnavmenu/HMenuIEHover.js (added)
+++ myfaces/tomahawk/trunk/core20/src/main/resources/META-INF/resources/oam.custom.navmenu.htmlnavmenu/HMenuIEHover.js Mon Mar 29 01:14:43 2010
@@ -0,0 +1,24 @@
+startList = function() 
+{
+    if (document.all && document.getElementById) 
+    {
+        navDivRoot = document.getElementById("hNav_outer");
+        navRoot = navDivRoot.childNodes[0];    
+        for (i=0; i<navRoot.childNodes.length; i++) 
+        {
+            node = navRoot.childNodes[i];
+            if (node.nodeName=="LI") 
+            {
+                node.onmouseover=function() 
+                {
+                    this.className+=" over";
+                }
+                node.onmouseout=function() 
+                {
+                    this.className=this.className.replace(" over", "");
+                }
+            }
+        }
+    }
+}
+window.onload=startList;
\ No newline at end of file