
/* The MIT License
 *
 * Copyright (c) < year > < copyright holders >
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions :
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * 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.
 */


/*  Copyright 2007, ontoprise GmbH
 *  This file is part of the halo - Extension.
 *
 *   The halo - Extension is free software; you can redistribute it and / or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 3 of the License, or
 *   (at your option) any later version.
 *
 *   The halo - Extension is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program.  If not, see < http : // www.gnu.org / licenses / > .
 */


/* WICK License

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met :

Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and / or other materials provided with the distribution.
Neither the name of the Christopher T. Holland, nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

 */


/* Wlater Zorn Tooltip License

This notice must be untouched at all times.

wz_tooltip.js	 v. 4.12

The latest version is available at
http : // www.walterzorn.com
or http : // www.devira.com
or http : // www.walterzorn.de

Copyright (c) 2002 - 2007 Walter Zorn. All rights reserved.
Created 1.12.2002 by Walter Zorn (Web : http : // www.walterzorn.com )
Last modified : 13.7.2007

Easy - to - use cross - browser tooltips.
Just include the script at the beginning of the < body > section, and invoke
Tip('Tooltip text') from within the desired HTML onmouseover eventhandlers.
No container DIV, no onmouseouts required.
By default, width of tooltips is automatically adapted to content.
Is even capable of dynamically converting arbitrary HTML elements to tooltips
by calling TagToTip('ID_of_HTML_element_to_be_converted') instead of Tip(),
which means you can put important, search - engine - relevant stuff into tooltips.
Appearance of tooltips can be individually configured
via commands passed to Tip() or TagToTip().

Tab Width : 4
LICENSE : LGPL

This library is free software; you can redistribute it and / or
modify it under the terms of the GNU Lesser General Public
License (LGPL) as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

For more details on the GNU Lesser General Public License,
see http : // www.gnu.org / copyleft / lesser.html
 */


/*
SMWHalo / skins / QueryInterface / Images / add.png and
SMWHalo / skins / QueryInterface / Images / delete.png

are taken from the Silk Icon Set 1.3

Silk icon set 1.3
_________________________________________
Mark James
http : // www.famfamfam.com / lab / icons / silk /
_________________________________________

This work is licensed under a
Creative Commons Attribution 2.5 License.
[ http : // creativecommons.org / licenses / by / 2.5 / ]

This means you may use it for any purpose,
and make any changes you like.
All I ask is that you include a link back
to this page in your credits.

Are you using this icon set ? Send me an email
(including a link or picture if available) to
mjames@gmail.com

Any other questions about this icon set please
contact mjames@gmail.com

 */

/*
SMWHalo / skins / QueryInterface / Images / subquery.png

is part of the Nuvola Icon Set available on
[ http : // www.icon - king.com / v2 / goodies.php ]
and released under a LGPL License

TITLE : 	NUVOLA ICON THEME for KDE 3.x
AUTHOR : 	David Vignoni | ICON KING
SITE : 	http : // www.icon - king.com
MAILING LIST : http : // mail.icon - king.com / mailman / listinfo / nuvola_icon - king.com

Copyright (c)  2003 - 2004  David Vignoni.

This library is free software; you can redistribute it and / or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation,
version 2.1 of the License.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.
 */
// slider.js
// under MIT - License; Copyright (c) 2005, 2006 Thomas Fuchs

// RH - Comment this out to remove slider functionality
// if( ! Control)var Control = {}; Control.Slider = Class.create(); Control.Slider.prototype = {initialize : function(handle, track, options){var slider = this; if(handle instanceof Array){this.handles = handle.collect(function(e){return $(e)}); }else{this.handles = [$(handle)]; }this.track = $(track); this.options = options || {}; this.axis = this.options.axis || 'horizontal'; this.increment = this.options.increment || 1; this.step = parseInt(this.options.step || '1'); this.range = this.options.range || $R(0, 1); this.value = 0; this.values = this.handles.map(function(){return 0}); this.spans = this.options.spans ? this.options.spans.map(function(s){return $(s)}) : false; this.options.startSpan = $(this.options.startSpan || null); this.options.endSpan = $(this.options.endSpan || null); this.restricted = this.options.restricted || false; this.maximum = this.options.maximum || this.range.end; this.minimum = this.options.minimum || this.range.start; this.alignX = parseInt(this.options.alignX || '0'); this.alignY = parseInt(this.options.alignY || '0'); this.trackLength = this.maximumOffset() - this.minimumOffset(); this.handleLength = this.isVertical() ? (this.handles[0].offsetHeight != 0 ? this.handles[0].offsetHeight : this.handles[0].style.height.replace(/px$/, "")) : (this.handles[0].offsetWidth != 0 ? this.handles[0].offsetWidth : this.handles[0].style.width.replace(/px$/, "")); this.active = false; this.dragging = false; this.disabled = false; if(this.options.disabled)this.setDisabled(); this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false; if(this.allowedValues){this.minimum = this.allowedValues.min(); this.maximum = this.allowedValues.max(); }this.eventMouseDown = this.startDrag.bindAsEventListener(this); this.eventMouseUp = this.endDrag.bindAsEventListener(this); this.eventMouseMove = this.update.bindAsEventListener(this); this.handles.each(function(h, i){i = slider.handles.length - 1 - i; slider.setValue(parseFloat((slider.options.sliderValue instanceof Array ? slider.options.sliderValue[i] : slider.options.sliderValue) || slider.range.start), i); Element.makePositioned(h); Event.observe(h, "mousedown", slider.eventMouseDown); }); Event.observe(this.track, "mousedown", this.eventMouseDown); Event.observe(document, "mouseup", this.eventMouseUp); Event.observe(document, "mousemove", this.eventMouseMove); this.initialized = true; }, dispose : function(){var slider = this; Event.stopObserving(this.track, "mousedown", this.eventMouseDown); Event.stopObserving(document, "mouseup", this.eventMouseUp); Event.stopObserving(document, "mousemove", this.eventMouseMove); this.handles.each(function(h){Event.stopObserving(h, "mousedown", slider.eventMouseDown); }); }, setDisabled : function(){this.disabled = true; }, setEnabled : function(){this.disabled = false; }, getNearestValue : function(value){if(this.allowedValues){if(value >= this.allowedValues.max())return(this.allowedValues.max()); if(value <= this.allowedValues.min())return(this.allowedValues.min()); var offset = Math.abs(this.allowedValues[0] - value); var newValue = this.allowedValues[0]; this.allowedValues.each(function(v){var currentOffset = Math.abs(v - value); if(currentOffset <= offset){newValue = v; offset = currentOffset; }}); return newValue; }if(value > this.range.end)return this.range.end; if(value < this.range.start)return this.range.start; return value; }, setValue : function(sliderValue, handleIdx){if( ! this.active){this.activeHandleIdx = handleIdx || 0; this.activeHandle = this.handles[this.activeHandleIdx]; this.updateStyles(); }handleIdx = handleIdx || this.activeHandleIdx || 0; if(this.initialized && this.restricted){if((handleIdx > 0) && (sliderValue < this.values[handleIdx - 1]))sliderValue = this.values[handleIdx - 1]; if((handleIdx < (this.handles.length - 1)) && (sliderValue > this.values[handleIdx + 1]))sliderValue = this.values[handleIdx + 1]; }sliderValue = this.getNearestValue(sliderValue); this.values[handleIdx] = sliderValue; this.value = this.values[0]; this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] = this.translateToPx(sliderValue); this.drawSpans(); if( ! this.dragging || ! this.event)this.updateFinished(); }, setValueBy : function(delta, handleIdx){this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta, handleIdx || this.activeHandleIdx || 0); }, translateToPx : function(value){return Math.round(((this.trackLength - this.handleLength) / (this.range.end - this.range.start)) * (value - this.range.start)) + "px"; }, translateToValue : function(offset){return((offset / (this.trackLength - this.handleLength) * (this.range.end - this.range.start)) + this.range.start); }, getRange : function(range){var v = this.values.sortBy(Prototype.K); range = range || 0; return $R(v[range], v[range + 1]); }, minimumOffset : function(){return(this.isVertical() ? this.alignY : this.alignX); }, maximumOffset : function(){return(this.isVertical() ? (this.track.offsetHeight != 0 ? this.track.offsetHeight : this.track.style.height.replace(/px$/, "")) - this.alignY : (this.track.offsetWidth != 0 ? this.track.offsetWidth : this.track.style.width.replace(/px$/, "")) - this.alignY); }, isVertical : function(){return(this.axis == 'vertical'); }, drawSpans : function(){var slider = this; if(this.spans)$R(0, this.spans.length - 1).each(function(r){slider.setSpan(slider.spans[r], slider.getRange(r))}); if(this.options.startSpan)this.setSpan(this.options.startSpan, $R(0, this.values.length > 1 ? this.getRange(0).min() : this.value)); if(this.options.endSpan)this.setSpan(this.options.endSpan, $R(this.values.length > 1 ? this.getRange(this.spans.length - 1).max() : this.value, this.maximum)); }, setSpan : function(span, range){if(this.isVertical()){span.style.top = this.translateToPx(range.start); span.style.height = this.translateToPx(range.end - range.start + this.range.start); }else{span.style.left = this.translateToPx(range.start); span.style.width = this.translateToPx(range.end - range.start + this.range.start); }}, updateStyles : function(){this.handles.each(function(h){Element.removeClassName(h, 'selected')}); Element.addClassName(this.activeHandle, 'selected'); }, startDrag : function(event){if(Event.isLeftClick(event)){if( ! this.disabled){this.active = true; var handle = Event.element(event); var pointer = [Event.pointerX(event), Event.pointerY(event)]; var track = handle; if(track == this.track){var offsets = Position.cumulativeOffset(this.track); this.event = event; this.setValue(this.translateToValue((this.isVertical() ? pointer[1] - offsets[1] : pointer[0] - offsets[0]) - (this.handleLength / 2))); var offsets = Position.cumulativeOffset(this.activeHandle); this.offsetX = (pointer[0] - offsets[0]); this.offsetY = (pointer[1] - offsets[1]); }else{while((this.handles.indexOf(handle) == - 1) && handle.parentNode)handle = handle.parentNode; if(this.handles.indexOf(handle) != - 1){this.activeHandle = handle; this.activeHandleIdx = this.handles.indexOf(this.activeHandle); this.updateStyles(); var offsets = Position.cumulativeOffset(this.activeHandle); this.offsetX = (pointer[0] - offsets[0]); this.offsetY = (pointer[1] - offsets[1]); }}}Event.stop(event); }}, update : function(event){if(this.active){if( ! this.dragging)this.dragging = true; this.draw(event); if(navigator.appVersion.indexOf('AppleWebKit') > 0)window.scrollBy(0, 0); Event.stop(event); }}, draw : function(event){var pointer = [Event.pointerX(event), Event.pointerY(event)]; var offsets = Position.cumulativeOffset(this.track); pointer[0] -= this.offsetX + offsets[0]; pointer[1] -= this.offsetY + offsets[1]; this.event = event; this.setValue(this.translateToValue(this.isVertical() ? pointer[1] : pointer[0])); if(this.initialized && this.options.onSlide)this.options.onSlide(this.values.length > 1 ? this.values : this.value, this); }, endDrag : function(event){if(this.active && this.dragging){this.finishDrag(event, true); Event.stop(event); }this.active = false; this.dragging = false; }, finishDrag : function(event, success){this.active = false; this.dragging = false; this.updateFinished(); }, updateFinished : function(){if(this.initialized && this.options.onChange)this.options.onChange(this.values.length > 1 ? this.values : this.value, this); this.event = null; }}

// STB_Framework.js
// under GPL - License; Copyright (c) 2007 Ontoprise GmbH


var ToolbarFramework = Class.create();
var HELPCONTAINER = 9;
var FACTCONTAINER = 0;
var EDITCONTAINER = 1;
var TYPECONTAINER = 2;
var CATEGORYCONTAINER = 3;
var ATTRIBUTECONTAINER = 4;
var RELATIONCONTAINER = 5;
var PROPERTIESCONTAINER = 6;
var CBSRCHCONTAINER = 7;
var COMBINEDSEARCHCONTAINER = 8;
var DBGCONTAINER = 10;
ToolbarFramework.prototype =
{
    stbconstructor : function()
    {
        if(this.isToolbarAvailable())
        {
            this.getCookieTab();
            if(this.cookiePrefTab != null)
            {
                for(var i = 0; i < this.cookiePrefTab.length; i ++ )
                {
                    if(this.cookiePrefTab[i] == 1)
                    {
                        this.curtabShown = i;
                    }
                }
            }
            else
            {
                this.curtabShown = 0;
            }
            this.var_onto.innerHTML += "<div id=\"tabcontainer\"></div>";
            this.var_onto.innerHTML += "<div id=\"activetabcontainer\"></div>";
            this.var_onto.innerHTML += "<div id=\"semtoolbar\"></div>";
            this.var_stb = $("semtoolbar");
            if(this.var_stb)
            {
                for(var i = 0; i <= 10; i ++ )
                {
                    this.var_stb.innerHTML += "<div id=\"stb_cont"+i+" - headline\" class=\"generic_headline\"></div>";
                    this.var_stb.innerHTML += "<div id=\"stb_cont"+i+" - content\" class=\"generic_content\"></div>";
                    $("stb_cont" + i + "-headline").hide();
                    $("stb_cont" + i + "-content").hide();
                }
            }
        }
    }
    , isToolbarAvailable : function()
    {
        if($("ontomenuanchor") != null)
        {
            this.var_onto = $("ontomenuanchor");
            return true;
        }
        return false;
    }
    , initialize : function()
    {
        this.contarray = new Array();
        this.tabarray = new Array();
        this.tabnames = new Array("Tools", "Links to Other Pages", "Facts about this Article");
    }
    , createDivContainer : function(contnum, tabnr)
    {
        if(this.tabarray[tabnr] == null)
        {
            if(this.curtabShown == tabnr)
            {
                this.tabarray[tabnr] = 1;
            }
            else
            {
                this.tabarray[tabnr] = 0;
            }
            if(this.tabarray.length > 1)
            {
                this.createTabHeader();
            }
        }
        this.contarray[contnum] = new DivContainer();
        this.contarray[contnum].createContainer(contnum, tabnr);
        if(contnum == HELPCONTAINER)
        {
            if(this.cookieHelpTab != null)
            {
                this.contarray[contnum].setVisibility(this.cookieHelpTab);
            }
            else
            {
                this.contarray[contnum].setVisibility(0);
            }
        }
        else
        {
            this.contarray[contnum].setVisibility(1);
        }
        return this.contarray[contnum];
    }
    , showSemanticToolbarContainer : function(container)
    {
        if(container != null)
        {
            if(this.contarray[container].getTab() == this.curtabShown)
            {
                if(this.contarray[container].headline != null)
                {
                    $("stb_cont" + container + "-headline").show();
                    document.getElementById("stb_cont" + container + "-link").className = 'minusplus';
                }
                if(this.contarray[container].isVisible())
                {
                    $("stb_cont" + container + "-content").show();
                }
                else
                {
                    $("stb_cont" + container + "-content").hide();
                    document.getElementById("stb_cont" + container + "-link").className = 'plusminus';
                }
            }
        }
        else
        {
            for(var i = 0; i < this.contarray.length; i ++ )
            {
                if(this.contarray[i] && this.contarray[i].getTab() == this.curtabShown)
                {
                    if(this.contarray[i].headline != null)
                    {
                        $("stb_cont" + i + "-headline").show();
                        document.getElementById("stb_cont" + i + "-link").className = 'minusplus';
                    }
                    if(this.contarray[i].isVisible())
                    {
                        $("stb_cont" + i + "-content").show();
                    }
                    else
                    {
                        $("stb_cont" + i + "-content").hide();
                        document.getElementById("stb_cont" + i + "-link").className = 'plusminus';
                    }
                }
            }
        }
    }
    , contentChanged : function(contnum)
    {
        this.showSemanticToolbarContainer(contnum);
        this.resizeToolbar();
    }
    , notify : function(container)
    {
    }
    , getDivContainer : function()
    {
    }
    , createTabHeader : function()
    {
        var tabHeader = "";
        if(this.tabarray.length > 1)
        {
            for(var i = 0; i < (this.tabarray.length); i ++ )
            {
                if(this.curtabShown != i)
                {
                    tabHeader += "<div id=\"expandable\" style=\"cursor : pointer; cursor : hand; \" onclick=stb_control.switchTab(" + i + ")><img src=\""+wgScriptPath+" / skins / ontoliteskin / expandable.gif\" onmouseover=\"(src = '"+wgScriptPath+"/skins/ontoliteskin/expandable-act.gif')\" onmouseout=\"(src = '"+wgScriptPath+"/skins/ontoliteskin/expandable.gif')\"></div><div id=\"tab_"+i+"\" style=\"cursor : pointer; cursor : hand; \" onclick=stb_control.switchTab(" + i + ")>" + this.tabnames[i] + "</div>";
                }
                else
                {
                    $("activetabcontainer").update("<div id=\"expandable\"><img src=\""+wgScriptPath+" / skins / ontoliteskin / expanded.gif\"></div><div id=\"tab_"+i+"\">" + this.tabnames[i] + "</div>");
                }
            }
        }
        $("tabcontainer").update(tabHeader);
    }
    , switchTab : function(tabnr)
    {
        this.hideSemanticToolbarContainerTab(tabnr);
        this.tabarray[this.curtabShown] = 0;
        this.tabarray[tabnr] = 1;
        this.curtabShown = tabnr;
        this.createTabHeader();
        this.showSemanticToolbarContainer();
        this.resizeToolbar();
        this.setCookie(this.tabarray);
    }
    , hideSemanticToolbarContainerTab : function(tabnr)
    {
        if(tabnr != null)
        {
            for(var i = 0; i < this.contarray.length; i ++ )
            {
                if(this.contarray[i] && this.contarray[i].getTab() == this.curtabShown)
                {
                    $("stb_cont" + i + "-headline").hide();
                    $("stb_cont" + i + "-content").hide();
                }
            }
        }
    }
    , resizeToolbar : function()
    {
        var maxUsableHeight = this.getWindowHeight() - 150;
        if(maxUsableHeight > 150)
        {
            if($('activetabcontainer'))
            {
                maxUsableHeight -= ($('tabcontainer').scrollHeight + 10 + $('activetabcontainer').scrollHeight);
            }
            this.countNumOfDisplayedContainers();
            var neededHeight = this.calculateNeededHeightOfContainers();
            if(this.contarray[HELPCONTAINER] != null && this.contarray[HELPCONTAINER].isVisible())
            {
                maxUsableHeight -= this.contarray[HELPCONTAINER].getNeededHeight();
            }
            if(neededHeight >= maxUsableHeight)
            {
                var j = this.numOfVisibleContainers;
                maxUsableHeight -= j * 22;
                if((this.numOfContainers - 1) == 0)
                {
                    if(neededHeight > maxUsableHeight)
                    {
                        for(var i = 0; i < this.contarray.length; i ++ )
                        {
                            if(this.contarray[i] && this.contarray[i].getTab() == this.curtabShown && this.contarray[i].getContainerNr() != HELPCONTAINER)
                            {
                                this.contarray[i].setContentStyle(
                                {
                                    maxHeight : maxUsableHeight + 'px'
                                }
                                );
                            }
                        }
                    }
                }
                else
                {
                    for(var i = 0; i < this.contarray.length; i ++ )
                    {
                        if(this.contarray[i] && this.contarray[i].getTab() == this.curtabShown && this.contarray[i].getContainerNr() != HELPCONTAINER && this.contarray[i].isVisible())
                        {
                            if(this.contarray[i].getNeededHeight() < maxUsableHeight / this.numOfVisibleContainers)
                            {
                                this.contarray[i].setContentStyle(
                                {
                                    maxHeight : this.contarray[i].getNeededHeight() + 'px'
                                }
                                );
                                maxUsableHeight -= this.contarray[i].getNeededHeight();
                            }
                            else
                            {
                                this.contarray[i].setContentStyle(
                                {
                                    maxHeight : maxUsableHeight / (this.numOfVisibleContainers) + 'px'
                                }
                                );
                            }
                        }
                    }
                }
            }
            else
            {
                for(var i = 0; i < this.contarray.length; i ++ )
                {
                    if(this.contarray[i] && this.contarray[i].getTab() == this.curtabShown && this.contarray[i].getContainerNr() != HELPCONTAINER)
                    {
                        this.contarray[i].setContentStyle(
                        {
                            maxHeight : ''
                        }
                        );
                    }
                }
            }
        }
    }
    , calculateNeededHeightOfContainers : function()
    {
        var j = 0;
        for(var i = 0; i < this.contarray.length; i ++ )
        {
            if(this.contarray[i] && this.contarray[i].getTab() == this.curtabShown && this.contarray[i].isVisible())
            {
                j += this.contarray[i].getNeededHeight();
            }
        }
        return j;
    }
    , countNumOfDisplayedContainers : function()
    {
        var j = 0;
        var d = 0;
        if(this.contarray)
        {
            for(var i = 0; i < this.contarray.length; i ++ )
            {
                if(this.contarray[i] && this.contarray[i].getTab() == this.curtabShown)
                {
                    j ++ ;
                    if(this.contarray[i].isVisible())
                    {
                        d ++ ;
                    }
                }
            }
        }
        this.numOfContainers = j;
        this.numOfVisibleContainers = d;
    }
    , getWindowHeight : function()
    {
        if(window.innerHeight)
        {
            return window.innerHeight;
        }
        else
        {
            if(window.document.documentElement && window.document.documentElement.clientHeight)
            {
                return typeof(window) == 'undefined' ? 0 : window.document.documentElement.clientHeight;
            }
            else
            {
                if(document.body && document.body.offsetHeight)
                {
                    return typeof(win) == 'undefined' ? 0 : document.body.offsetHeight;
                }
                return 0;
            }
        }
    }
    , getCookieTab : function()
    {
        var cookie = document.cookie;
        var length = cookie.length - 1;
        if(cookie.charAt(length) != ";")cookie += ";";
        var a = cookie.split(";");
        for(var i = 0; i < a.length; i ++ )
        {
            var cookiename = this.trim(a[i].substring(0, a[i].search('=')));
            var cookievalue = a[i].substring(a[i].search('=') + 1, a[i].length);
            if(cookiename == "stbpreftab")
            {
                var cookievalue = cookievalue.split(",");
                var retval = new Array();
                for(var j = 0; j < cookievalue.length; j ++ )
                {
                    retval[j] = parseInt(cookievalue[j]);
                }
                this.cookiePrefTab = retval;
            }
            else if(cookiename == "stbprefhelp")
            {
                this.cookieHelpTab = parseInt(cookievalue);
            }
        }
    }
    , trim : function(string)
    {
        return string.replace(/(^\s+|\s+$)/g, "");
    }
    , setCookie : function(curtabpos)
    {
        var a = new Date();
        a = new Date(a.getTime() + 1000 * 60 * 60 * 24 * 365);
        var implode = '';
        var first = true;
        for(var i = 0; i < curtabpos.length; i ++ )
        {
            if(first == true)first = false;
            else implode += ",";
            implode += curtabpos[i];
        }
        document.cookie = 'stbpreftab=' + implode + '; expires=' + a.toGMTString() + ';';
    }
    , setHelpCookie : function(helpshown)
    {
        var a = new Date();
        a = new Date(a.getTime() + 1000 * 60 * 60 * 24 * 365);
        document.cookie = 'stbprefhelp=' + helpshown + '; expires=' + a.toGMTString() + ';';
    }
}
;
var stb_control = new ToolbarFramework();
Event.observe(window, 'load', stb_control.stbconstructor.bindAsEventListener(stb_control));
Event.observe(window, 'resize', stb_control.resizeToolbar.bindAsEventListener(stb_control));

// RH - Comment this out to remove slider icon (belongs with above code)
// var Slider = Class.create(); Slider.prototype = {initialize : function(){this.sliderObj = null; this.oldHeight = 0; this.oldWidth = 0; }, activateResizing : function(){if( ! stb_control.isToolbarAvailable())return; if( ! $('slider'))return; $('slider').innerHTML = '<img id="sliderHandle" src="'+wgScriptPath+'/extensions/SMWHalo/skins/slider.gif"/>'; var initialvalue = 0.65; this.slide(initialvalue); if(this.sliderObj != null){this.sliderObj.setDisabled(); this.sliderObj = null; }this.sliderObj = new Control.Slider('sliderHandle', 'slider', {sliderValue : initialvalue, minimum : 0.5, maximum : 0.75, onSlide : this.slide, onChange : this.slide}); }, slide : function(v){var leftmin = 0.25; var rightmin = 0.20; if(v < leftmin){smwhg_slider.sliderObj.setValue(leftmin); return; }if(v > 1 - rightmin){smwhg_slider.sliderObj.setValue(1 - rightmin); return; }var currLeftDiv = 100 * v; var currRightDiv = 95 - currLeftDiv; $('contentcol1').style.width = currLeftDiv + "%"; $('contentcol2').style.width = currRightDiv + "%"; if(window.editAreaLoader){editAreaLoader.execCommand("wpTextbox1", "update_size();"); }}, resizeTextbox : function(){if(OB_bd.isIE == true){if(typeof document.documentElement != 'undefined' && document.documentElement.clientHeight != this.oldHeight && document.documentElement.clientHeight != this.oldWidth){this.activateResizing(); this.oldHeight = document.documentElement.clientHeight; this.oldWidth = document.documentElement.clientWidth; }else{if(typeof window.innerHeight != 'undefined' && window.innerHeight != this.oldHeight && window.innerWidth != this.oldWidth){alert('resize'); this.activateResizing(); this.oldHeight = window.innerHeight; this.oldWidth = window.innerWidth; }}}else{this.activateResizing(); }}}; var smwhg_slider = new Slider(); Event.observe(window, 'load', smwhg_slider.activateResizing.bind(smwhg_slider)); Event.observe(window, 'resize', smwhg_slider.resizeTextbox.bind(smwhg_slider));


// STB_Divcontainer.js
// under GPL - License; Copyright (c) 2007 Ontoprise GmbH
var DivContainer = Class.create();
DivContainer.prototype =
{
    initialize : function()
    {
        this.visibility = true;
    }
    , createContainer : function(contnum, tabnr)
    {
        this.contnum = contnum;
        this.tabnr = tabnr;
    }
    , contentChanged : function()
    {
        stb_control.contentChanged(this.getContainerNr());
    }
    , setTab : function(tabnr)
    {
        this.tabnr = tabnr;
    }
    , getTab : function()
    {
        return this.tabnr;
    }
    , setContainerNr : function(contnum)
    {
        this.contnum = contnum;
    }
    , getContainerNr : function()
    {
        return this.contnum;
    }
    , setVisibility : function(visibility)
    {
        this.visibility = visibility;
    }
    , isVisible : function()
    {
        return this.visibility;
    }
    , setHeadline : function(headline)
    {
        this.headline = headline;
        $("stb_cont" + this.getContainerNr() + "-headline").update("<div style=\"cursor : pointer; cursor : hand; \" onclick=\"stb_control.contarray["+this.getContainerNr()+"].switchVisibility()\"><a id=\"stb_cont"+this.getContainerNr()+" - link\" class=\"minusplus\" href=\"javascript : void(0)\">&nbsp;</a>" + headline);
    }
    , setContent : function(content)
    {
        this.content = content;
        $("stb_cont" + this.getContainerNr() + "-content").update(content);
    }
    , setContentStyle : function(style)
    {
        $("stb_cont" + this.getContainerNr() + "-content").setStyle(style);
    }
    , switchVisibility : function(container)
    {
        if(this.isVisible())
        {
            if(this.getContainerNr() == HELPCONTAINER)
            {
                stb_control.setHelpCookie(0);
            }
            this.setVisibility(0);
        }
        else
        {
            if(this.getContainerNr() == HELPCONTAINER)
            {
                stb_control.setHelpCookie(1);
            }
            this.setVisibility(1);
        }
        stb_control.contentChanged(this.getContainerNr());
    }
    , getVisibleHeight : function()
    {
        return $('stb_cont' + this.getContainerNr() + "-content").offsetHeight;
    }
    , getNeededHeight : function()
    {
        return $('stb_cont' + this.getContainerNr() + "-content").scrollHeight;
    }
}

// wick.js
// under WICK - License; Copyright (c) 2004, Christopher T. Holland
var SMW_CATEGORY_NS = 14;
var SMW_PROPERTY_NS = 102;
var LWE_PROPOSAL_NS = 108;
var LWE_PROPOSAL_TALK_NS = 109;
var SMW_INSTANCE_NS = 0;
var SMW_TEMPLATE_NS = 10;
var SMW_TYPE_NS = 104;
var SMW_ENUM_POSSIBLE_VALUE = 200;
var SMW_AC_MANUAL_TRIGGERING_TIME = 500;
var SMW_AC_AUTO_TRIGGERING_TIME = 800;
var SMW_AJAX_AC = 1;
function autoCompletionsOptions(request)
{
    autoCompleter.autoTriggering = request.responseText.indexOf('auto') != - 1;
    document.cookie = "AC_mode=" + request.responseText + ";path=" + wgScriptPath + "/;"
}
;
var AutoCompleter = Class.create();
AutoCompleter.prototype =
{
    initialize : function()
    {
        this.currentInputBox;
        this.typeHint;
        this.userInputToMatch = null;
        this.userContext = null;
        this.collection = [];
        this.ignorePending = false;
        this.articleRegEx = /((([\w\d])+\:)?([\w\d][\w\d\.\(\)\-\s]*)|(([\w\d])+\:))$/;
        this.timer = null;
        this.autoTriggering = false;
        this.allInputs = null;
        this.textAreas = null;
        this.siw = null;
        this.mousePressed = false;
        this.AC_idCounter = 0;
        this.AC_yDiff = 0;
        this.AC_xDiff = 0;
        this.AC_userDefinedY = 0;
        this.AC_userDefinedX = 0;
        this.notMoved = false;
        this.currentIESelection = null;
        var AC_mode = GeneralBrowserTools.getCookie("AC_mode");
        if(AC_mode == null)
        {
            sajax_do_call('smwfAutoCompletionOptions', [], autoCompletionsOptions);
        }
        else
        {
            this.autoTriggering = (AC_mode == 'auto');
        }
    }
    , freezeEvent : function(e)
    {
        if(e.preventDefault)e.preventDefault();
        e.returnValue = false;
        e.cancelBubble = true;
        if(e.stopPropagation)e.stopPropagation();
        return false;
    }
    , isWithinNode : function(e, i, c, t, obj)
    {
        var answer = false;
        var te = e;
        while(te && ! answer)
        {
            if((te.id && (te.id == i)) || (te.className && (te.className == i + "Class")) || ( ! t && c && te.className && (te.className == c)) || ( ! t && c && te.className && (te.className.indexOf(c) != - 1)) || (t && te.tagName && (te.tagName.toLowerCase() == t)) || (obj && (te == obj)))
            {
                answer = te;
            }
            else
            {
                te = te.parentNode;
            }
        }
        return te;
    }
    , getEventElement : function(e)
    {
        return(e.srcElement ? e.srcElement : (e.target ? e.target : e.currentTarget));
    }
    , findElementPosX : function(obj)
    {
        var curleft = 0;
        if(obj.offsetParent)
        {
            while(obj.offsetParent)
            {
                curleft += obj.offsetLeft;
                obj = obj.offsetParent;
            }
        }
        else if(obj.x)curleft += obj.x;
        return curleft;
    }
    , findElementPosY : function(obj)
    {
        var curtop = 0;
        if(obj.offsetParent)
        {
            while(obj.offsetParent)
            {
                curtop += obj.offsetTop;
                obj = obj.offsetParent;
            }
        }
        else if(obj.y)curtop += obj.y;
        return curtop;
    }
    , handleKeyPress : function(event)
    {
        var e = GeneralTools.getEvent(event);
        var eL = this.getEventElement(e);
        var upEl = eL.className.indexOf("wickEnabled") >= 0 ? eL : undefined;
        var kc = e["keyCode"];
        var isFloaterVisible = (this.siw && this.siw.floater.style.visibility == 'visible');
        if(OB_bd.isIE)this.currentIESelection = document.selection.createRange();
        if(isFloaterVisible && this.siw && ((kc == 13) || (kc == 9)))
        {
            this.siw.selectingSomething = true;
            if(OB_bd.isSafari)this.siw.inputBox.blur();
            this.siw.inputBox.focus();
            this.hideSmartInputFloater();
        }
        else if(upEl && (kc != 38) && (kc != 40) && (kc != 37) && (kc != 39) && (kc != 13) && (kc != 27))
        {
            if( ! this.siw || (this.siw && ! this.siw.selectingSomething))
            {
                if((e["ctrlKey"] && (kc == 32)) || isFloaterVisible)
                {
                    if(OB_bd.isIE && ! isFloaterVisible && ! e["altKey"])
                    {
                        var userInput = this.getUserInputToMatch();
                        var selection_range = document.selection.createRange();
                        selection_range.moveStart("character", - userInput.length - 1);
                        selection_range.text = userInput.substr(0, userInput.length - 1);
                        selection_range.collapse(false);
                    }
                    if( ! this.siw)this.siw = new SmartInputWindow();
                    this.siw.inputBox = upEl;
                    this.currentInputBox = upEl;
                    this.typeHint = this.siw.inputBox.getAttribute("typeHint");
                    this.userInputToMatch = this.getUserInputToMatch();
                    if(this.userInputToMatch.length >= 0)
                    {
                        this.userContext = this.getUserContext();
                        if(this.timer)
                        {
                            window.clearTimeout(this.timer);
                        }
                        this.timer = window.setTimeout("autoCompleter.timedAC(autoCompleter.userInputToMatch, autoCompleter.userContext, autoCompleter.currentInputBox, autoCompleter.typeHint)", SMW_AC_MANUAL_TRIGGERING_TIME);
                    }
                    else
                    {
                        // -->
                        this.hideSmartInputFloater();
                        return;
                    }
                }
                else if(this.autoTriggering)
                {
                    if(kc == 17 || kc == 18)return;
                    if( ! this.siw)this.siw = new SmartInputWindow();
                    this.siw.inputBox = upEl;
                    this.currentInputBox = upEl;
                    this.typeHint = this.siw.inputBox.getAttribute("typeHint");
                    if(GeneralBrowserTools.isTextSelected(this.siw.inputBox))
                    {
                        this.hideSmartInputFloater();
                        return;
                    }
                    this.userContext = this.getUserContext();
                    if((this.userContext.match(/^\[\[/) || this.userContext.match(/^\{\{/) || this.siw.inputBox.tagName != 'TEXTAREA'))
                    {
                        this.userInputToMatch = this.getUserInputToMatch();
                        if(this.userInputToMatch.length >= 1)
                        {
                            if(this.timer)
                            {
                                window.clearTimeout(this.timer);
                            }
                            this.timer = window.setTimeout("autoCompleter.timedAC(autoCompleter.userInputToMatch, autoCompleter.userContext, autoCompleter.currentInputBox, autoCompleter.typeHint)", SMW_AC_AUTO_TRIGGERING_TIME);
                        }
                        else
                        {
                            // -->
                            this.hideSmartInputFloater();
                            return;
                        }
                    }
                    else
                    {
                        // -->
                        this.siw.inputBox.focus();
                        this.hideSmartInputFloater();
                        return;
                    }
                }
            }
        }
        else if(kc == 27)
        {
            this.hideSmartInputFloater();
            this.freezeEvent(e);
        }
        else if(this.siw && this.siw.inputBox)
        {
            if(eL != null && eL.tagName == 'HTML' && isFloaterVisible)
            {
                this.siw.inputBox.focus();
            }
        }
    }
    , timedAC : function(userInputToMatch, userContext, inputBox, typeHint)
    {
        function userInputToMatchResult(request)
        {
            this.hidePendingAJAXIndicator();
            if(this.ignorePending)
            {
                return;
            }
            if(request.status != 200)
            {
                this.hideSmartInputFloater();
                return;
            }
            if(request.responseText.indexOf('noResult') != - 1)
            {
                this.hideSmartInputFloater();
                return;
            }
            var result = request.responseText;
            this.collection = this.getMatchItems(request.responseText);
            if(this.collection.length > 0)
            {
                AC_matchCache.addLookup(userContext + userInputToMatch, this.collection, typeHint);
            }
            this.processSmartInput(inputBox, userInputToMatch);
        }
        ;
        this.notMoved = true;
        this.ignorePending = false;
        var cacheResult = AC_matchCache.getLookup(userContext + userInputToMatch, typeHint);
        if(cacheResult == null)
        {
            if(userInputToMatch == null)return;
            this.showPendingAJAXIndicator(inputBox);
            sajax_do_call('smwfAutoCompletionDispatcher', [wgTitle, userInputToMatch, userContext, typeHint], userInputToMatchResult.bind(this), SMW_AJAX_AC);
        }
        else
        {
            this.collection = cacheResult;
            this.processSmartInput(inputBox, userInputToMatch);
        }
    }
    , handleKeyDown : function(event)
    {
        var e = GeneralTools.getEvent(event);
        var eL = this.getEventElement(e);
        if(this.siw && (kc = e["keyCode"]))
        {
            if(kc == 40 && this.siw.floater.style.visibility == 'visible')
            {
                this.siw.selectingSomething = true;
                this.freezeEvent(e);
                this.selectNextSmartInputMatchItem();
            }
            else if(kc == 38 && this.siw.floater.style.visibility == 'visible')
            {
                this.siw.selectingSomething = true;
                this.freezeEvent(e);
                this.selectPreviousSmartInputMatchItem();
            }
            else if(((kc == 13) || (kc == 9)) && this.siw.floater.style.visibility == 'visible')
            {
                this.siw.selectingSomething = true;
                this.activateCurrentSmartInputMatch();
                this.hideSmartInputFloater();
                this.freezeEvent(e);
            }
            else if(kc == 27)
            {
                ajaxRequestManager.stopCalls(SMW_AJAX_AC, this.hidePendingAJAXIndicator);
                smwhgLogger.log("", "AC", "close_without_selection");
                this.hideSmartInputFloater();
                this.freezeEvent(e);
            }
            else
            {
                this.siw.selectingSomething = false;
            }
        }
    }
    , handleFocus : function(event)
    {
    }
    , handleBlur : function(event)
    {
        var e = GeneralTools.getEvent(event);
        var eL = this.getEventElement(e);
        if(blurEl = this.isWithinNode(eL, null, "wickEnabled", null, null))
        {
            if(this.siw && ! this.siw.selectingSomething)this.hideSmartInputFloater();
        }
        if(this.timer)
        {
            window.clearTimeout(this.timer);
        }
        ajaxRequestManager.stopCalls(SMW_AJAX_AC, this.hidePendingAJAXIndicator);
    }
    , handleClick : function(event)
    {
        var e2 = GeneralTools.getEvent(event);
        var eL2 = this.getEventElement(e2);
        this.mousePressed = false;
        if(this.siw && this.siw.selectingSomething)
        {
            this.selectFromMouseClick();
        }
    }
    , handleMouseOver : function(event)
    {
        if(this.notMoved)return;
        var e = GeneralTools.getEvent(event);
        var eL = this.getEventElement(e);
        if(this.siw && (mEl = this.isWithinNode(eL, null, "matchedSmartInputItem", null, null)))
        {
            this.siw.selectingSomething = true;
            this.selectFromMouseOver(mEl);
        }
        else if(this.isWithinNode(eL, null, "siwCredit", null, null))
        {
            this.siw.selectingSomething = true;
        }
        else if(this.siw)
        {
            this.siw.selectingSomething = false;
        }
    }
    , handleMouseDown : function(event)
    {
        var e = GeneralTools.getEvent(event);
        var eL = this.getEventElement(e);
        var elementClicked = Event.element(event);
        if(this.siw && elementClicked && (Element.hasClassName(elementClicked, "MWFloaterContentHeader") || (Element.hasClassName(elementClicked.parentNode, "MWFloaterContentHeader"))))
        {
            this.mousePressed = true;
            var x = this.findElementPosX(this.siw.inputBox);
            var y = this.findElementPosY(this.siw.inputBox);
            this.AC_yDiff = (e.pageY - y) - parseInt(this.siw.floater.style.top);
            this.AC_xDiff = (e.pageX - x) - parseInt(this.siw.floater.style.left);
        }
    }
    , handleMouseMove : function(event)
    {
        this.notMoved = false;
        if(OB_bd.isIE)return;
        var e = GeneralTools.getEvent(event);
        var eL = this.getEventElement(e);
        if(this.mousePressed && this.siw)
        {
            var x = this.findElementPosX(this.siw.inputBox);
            var y = this.findElementPosY(this.siw.inputBox);
            this.siw.floater.style.top = (e.pageY - y - this.AC_yDiff) + "px";
            this.siw.floater.style.left = (e.pageX - x - this.AC_xDiff) + "px";
            this.AC_userDefinedY = (e.pageY - y - this.AC_yDiff);
            this.AC_userDefinedX = (e.pageX - x - this.AC_xDiff);
            document.cookie = "this.AC_userDefinedX=" + this.AC_userDefinedX;
            document.cookie = "this.AC_userDefinedY=" + this.AC_userDefinedY;
        }
    }
    , showSmartInputFloater : function()
    {
        if( ! this.siw.floater.style.display || (this.siw.floater.style.display == "none"))
        {
            if( ! this.siw.customFloater)
            {
                var x = this.findElementPosX(this.siw.inputBox);
                var y = this.findElementPosY(this.siw.inputBox) + this.siw.inputBox.offsetHeight;
                if( ! OB_bd.isGecko && ! OB_bd.isIE)x += 8;
                if( ! OB_bd.isGecko && ! OB_bd.isIE)y += 10;
                var posStyle = this.currentInputBox != null ? this.currentInputBox.getAttribute("position") : null;
                if(posStyle == null || posStyle == 'absolute')
                {
                    Element.setStyle(this.siw.floater,
                    {
                        position : 'absolute'
                    }
                    );
                    x = x - Position.page($("globalWrapper"))[0] - Position.realOffset($("globalWrapper"))[0];
                    y = y - Position.page($("globalWrapper"))[1] - Position.realOffset($("globalWrapper"))[1];
                }
                else if(posStyle == 'fixed')
                {
                    Element.setStyle(this.siw.floater,
                    {
                        position : 'fixed'
                    }
                    );
                }
                var alignment = this.currentInputBox != null ? this.currentInputBox.getAttribute("alignfloater") : null;
                if(alignment == null || alignment == 'left')
                {
                    this.siw.floater.style.left = x + "px";
                    this.siw.floater.style.top = y + "px";
                }
                else
                {
                    var globalWrapperWidth = $("globalWrapper");
                    this.siw.floater.style.right = (globalWrapperWidth.offsetWidth - x - this.currentInputBox.offsetWidth) + "px";
                    this.siw.floater.style.top = y + "px";
                }
            }
            else
            {
                if( ! this.siw.inputBox)return;
                var advancedEditor = $('edit_area_toggle_checkbox_wpTextbox1') ? $('edit_area_toggle_checkbox_wpTextbox1').checked : false;
                if(OB_bd.isIE && this.siw.inputBox.tagName == 'TEXTAREA')
                {
                    var posY = this.findElementPosY(advancedEditor ? $('frame_wpTextbox1') : this.siw.inputBox);
                    var posX = this.findElementPosX(advancedEditor ? $('frame_wpTextbox1') : this.siw.inputBox);
                    this.siw.inputBox.focus();
                    var textScrollTop = this.siw.inputBox.scrollTop;
                    var documentScrollPos = document.documentElement.scrollTop;
                    var selection_range = document.selection.createRange().duplicate();
                    selection_range.collapse(true);
                    this.siw.floater.style.left = selection_range.boundingLeft + (advancedEditor ? 0 : - posX);
                    this.siw.floater.style.top = selection_range.boundingTop + documentScrollPos + textScrollTop - 20 + (advancedEditor ? posY : 0);
                    this.siw.floater.style.height = 25 * Math.min(this.collection.length, this.siw.MAX_MATCHES) + 20;
                }
                if(OB_bd.isGecko && this.siw.inputBox.tagName == 'TEXTAREA')
                {
                    var x = GeneralBrowserTools.getCookie("this.AC_userDefinedX");
                    var y = GeneralBrowserTools.getCookie("this.AC_userDefinedY");
                    if(x != null && y != null)
                    {
                        this.siw.floater.style.left = x + "px";
                        this.siw.floater.style.top = y + "px";
                    }
                    else
                    {
                        if(advancedEditor)
                        {
                            var iFrameOfAdvEditor = document.getElementById('frame_wpTextbox1');
                            this.siw.floater.style.left = (parseInt(iFrameOfAdvEditor.style.width) - 360) + "px";
                            this.siw.floater.style.top = (parseInt(iFrameOfAdvEditor.style.height) - 160) + "px";
                        }
                        else
                        {
                            this.siw.floater.style.left = (this.siw.inputBox.offsetWidth - 360) + "px";
                            this.siw.floater.style.top = (this.siw.inputBox.offsetHeight - 160) + "px";
                        }
                    }
                }
            }
            this.siw.floater.style.display = "block";
            this.siw.floater.style.visibility = "visible";
        }
    }
    , showPendingAJAXIndicator : function(inputBox)
    {
        var pending = $("pendingAjaxIndicator");
        if( ! this.siw)this.siw = new SmartInputWindow();
        var advancedEditor = $('edit_area_toggle_checkbox_wpTextbox1') ? $('edit_area_toggle_checkbox_wpTextbox1').checked : false;
        var iFrameOfAdvEditor = document.getElementById('frame_wpTextbox1');
        if(OB_bd.isIE && inputBox.tagName == 'TEXTAREA')
        {
            var posY = this.findElementPosY(inputBox);
            var posX = this.findElementPosX(inputBox);
            inputBox.focus();
            var textScrollTop = inputBox.scrollTop;
            var documentScrollPos = document.documentElement.scrollTop;
            var selection_range = document.selection.createRange().duplicate();
            selection_range.collapse(true);
            pending.style.left = selection_range.boundingLeft - posX;
            pending.style.top = selection_range.boundingTop + documentScrollPos + textScrollTop - 20;
        }
        if(OB_bd.isGecko && inputBox.tagName == 'TEXTAREA')
        {
            var x = GeneralBrowserTools.getCookie("this.AC_userDefinedX");
            var y = GeneralBrowserTools.getCookie("this.AC_userDefinedY");
            if(x != null && y != null)
            {
                var posY = this.findElementPosY(advancedEditor ? iFrameOfAdvEditor : inputBox);
                var posX = this.findElementPosX(advancedEditor ? iFrameOfAdvEditor : inputBox);
                pending.style.left = (parseInt(x) + posX) + "px";
                pending.style.top = (parseInt(y) + posY) + "px";
            }
            else
            {
                if(advancedEditor)
                {
                    pending.style.left = (this.findElementPosX(iFrameOfAdvEditor) + parseInt(iFrameOfAdvEditor.style.width) - 360) + "px";
                    pending.style.top = (this.findElementPosY(iFrameOfAdvEditor) + parseInt(iFrameOfAdvEditor.style.height) - 160) + "px";
                }
                else
                {
                    pending.style.left = (this.findElementPosX(inputBox) + inputBox.offsetWidth - 360) + "px";
                    pending.style.top = (this.findElementPosY(inputBox) + inputBox.offsetHeight - 160) + "px";
                }
            }
        }
        if(inputBox.tagName != 'TEXTAREA')
        {
            pending.style.left = (this.findElementPosX(inputBox)) + "px";
            pending.style.top = (this.findElementPosY(inputBox)) + "px";
        }
        pending.style.display = "block";
        pending.style.visibility = "visible";
    }
    , hidePendingAJAXIndicator : function()
    {
        var pending = $("pendingAjaxIndicator");
        pending.style.display = "none";
        pending.style.visibility = "hidden";
    }
    , hideSmartInputFloater : function()
    {
        if(this.siw)
        {
            this.siw.floater.style.display = "none";
            this.siw.floater.style.visibility = "hidden";
            this.siw = null;
        }
    }
    , processSmartInput : function(inputBox, userInput)
    {
        if( ! this.siw)return;
        var classData = inputBox.className.split(" ");
        var siwDirectives = null;
        for(i = 0; ( ! siwDirectives && classData[i]); i ++ )
        {
            if(classData[i].indexOf("wickEnabled") != - 1)siwDirectives = classData[i];
        }
        if(siwDirectives && (siwDirectives.indexOf(":") != - 1))
        {
            this.siw.customFloater = true;
            var newFloaterId = siwDirectives.split(":")[1];
            this.siw.floater = document.getElementById(newFloaterId);
            this.siw.floaterContent = this.siw.floater.getElementsByTagName("div")[OB_bd.isGecko ? 1 : 0];
        }
        this.setSmartInputData(userInput);
        var content1 = this.getSmartInputBoxContent();
        if(content1)
        {
            this.modifySmartInputBoxContent(content1);
            this.showSmartInputFloater();
            if(OB_bd.isIE)
            {
                this.siw.floater.style.height = 25 * Math.min(this.collection.length, this.siw.MAX_MATCHES) + 20;
                this.siw.floater.firstChild.style.height = 25 * Math.min(this.collection.length, this.siw.MAX_MATCHES) + 20;
            }
        }
        else this.hideSmartInputFloater();
    }
    , simplify : function(s)
    {
        var nopipe = s.indexOf("|") != - 1 ? s.substring(0, s.indexOf("|")).strip() : s;
        return nopipe.replace(/^[ \s\f\t\n\r]+/, '').replace(/[ \s\f\t\n\r]+$/, '');
    }
    , getUserInputToMatch : function()
    {
        if( ! this.siw)return "";
        if(this.siw.inputBox.tagName == 'TEXTAREA')
        {
            var textBeforeCursor = this.getTextBeforeCursor(); var userInputToMatch = textBeforeCursor.match(this.articleRegEx); return userInputToMatch ? userInputToMatch[0].replace(/\s/, "_").replace(/category\:/i, "") : "";
        }
        else
        {
            a = this.siw.inputBox.value;
            fields = this.siw.inputBox.value.split(";");
            if(fields.length > 0)a = fields[fields.length - 1];
            return a.strip();
        }
    }
    , getUserContext : function()
    {
        if(this.siw != null && this.siw.inputBox != null && this.siw.inputBox.tagName == 'TEXTAREA')
        {
            var textBeforeCursor = this.getTextBeforeCursor(); var userContextStart = Math.max(textBeforeCursor.lastIndexOf("[["), textBeforeCursor.lastIndexOf("{{")); var closingSemTag = Math.max(textBeforeCursor.lastIndexOf("]]"), textBeforeCursor.lastIndexOf("}}")); if(userContextStart != - 1 && userContextStart > closingSemTag)
            {
                var userInputToMatch = this.getUserInputToMatch();
                if(userInputToMatch != null)
                {
                    var lengthOfContext = textBeforeCursor.length - userInputToMatch.length;
                    return textBeforeCursor.substring(userContextStart, lengthOfContext);
                }
            }
            return "";
        }
        else
        {
            return "";
        }
    }
    , getTextBeforeCursor : function()
    {
        if(OB_bd.isIE)
        {
            this.siw.inputBox.focus();
            var selection_range = document.selection.createRange();
            var selection_rangeWhole = document.selection.createRange();
            selection_rangeWhole.moveToElementText(this.siw.inputBox);
            selection_range.setEndPoint("StartToStart", selection_rangeWhole);
            return selection_range.text;
        }
        else if(OB_bd.isGecko)
        {
            var start = this.siw.inputBox.selectionStart;
            return this.siw.inputBox.value.substring(0, start);
        }
        return "";
    }
    , getTextAfterCursor : function()
    {
        if(OB_bd.isIE)
        {
            var selection_range = document.selection.createRange();
            var selection_rangeWhole = document.selection.createRange();
            selection_rangeWhole.moveToElementText(this.siw.inputBox);
            selection_range.setEndPoint("EndToEnd", selection_rangeWhole);
            return selection_range.text;
        }
        else if(OB_bd.isGecko)
        {
            var start = this.siw.inputBox.selectionStart;
            return this.siw.inputBox.value.substring(start);
        }
        return "";
    }
    , getUserInputBase : function()
    {
        var s = this.siw.inputBox.value;
        var lastComma = s.lastIndexOf(";");
        return s.substr(0, lastComma + 1);
    }
    ,

    highlightMatches : function(userInput)
    {

        var userInput = this.simplify(userInput);
        if (userInput == "")
        {
            return;
        }

        // sajax_do_call('smwfGetHelp', test );

        // Kevin Peterson fix Dec. 5th 2007. Was leaving an '_' character in the string if 'userInput'
        // was more than 2 words long.

        // This is the old code.
        // userInput = userInput.replace(/\s/, "_");


        // This is the new code.
        var pattern = / /g;
        userInput = userInput.replace(pattern, "_");

        if(this.siw)this.siw.matchCollection = new Array();
        var pointerToCollectionToUse = this.collection;
        var re1m = new RegExp("([ \"\ > \ < \ - ] * )("+userInput+")","i");
        var re2m = new RegExp("([ \"\ > \ < \ - ] + )("+userInput+")","i");
        var re1 = new RegExp("([ \"\}\{\ - ] * )("+userInput+")","gi");
        var re2 = new RegExp("([ \"\}\{\ - ] + )("+userInput+")","gi");

        var reQuotes = new RegExp("(\". * \")", "gi");

        for(i = 0, j = 0; (i < pointerToCollectionToUse.length);
        i ++ )
        {
            var displayMatches = (j < this.siw.MAX_MATCHES);
            // var displayMatches = 5;
            var entry = pointerToCollectionToUse[i];
            var mEntry = this.simplify(entry.getText());
            var userInput2 = "";

            if((mEntry.indexOf(userInput) == 0))
            {
                userInput2 = userInput.replace(/\>/gi, '\\}').replace(/\< ?/gi, '\\{');

                re = new RegExp("(" + userInput + ")", "i");
                if(displayMatches)
                {

                    // this.siw.matchCollection[j] = new SmartInputMatch(entry.getText(), mEntry.replace(/\>/gi, '}').replace(/\< ?/gi, '{').replace(re, "<b>$1</b>"), entry.getType());
                }
                j ++ ;
            }
            else if(mEntry.match(re1m) || mEntry.match(re2m))
            {
                if(displayMatches)
                {
                    this.siw.matchCollection[j] = new SmartInputMatch(entry.getText(), mEntry.replace(/\>/gi, '}').replace(/\</gi, '{').replace(re1, "$1<b>$2</b>").replace(re2, "$1<b>$2</b>").replace(/_/g, ' '), entry.getType());
                }
                j ++ ;
            }


            else
            {
                if(displayMatches)
                {





                    userInput2 = userInput.replace(/_/g, ' ');
                    var combinedInputString = "";
                    while((userInput2.split("\"").length - 1) > 1)
                    {
                        var quotesCheck = /(.*)(\")(.*)(\")(.*)/i;
                        var replacedText = userInput2.replace(quotesCheck, "$3");
                        replacedText = replacedText.replace(/\s/g, "_");
                        userInput2 = userInput2.replace(quotesCheck, "$1" + replacedText + "$5");
                    }
                    var parsedInput = userInput2.replace(/\"/g, "").split(" ");

                    parsedInput = parsedInput.sort(	function sortfunction(a, b)
                    {
                        var x = a.length;
                        var y = b.length;
                        return ((x > y) ? - 1 : ((x < y) ? 1 : 0));
                    }
                    );

                    // document.write(userInput + "</br>");

                    for(m = 0; m < parsedInput.length; m ++ )
                    {
                        var term = parsedInput[m];
                        if(term.length > 0)
                        {
                            var reg = new RegExp("(" + term + ")", "gi");
                            mEntry = mEntry.replace(reg, "<b>" + "$1" + "</b>")
                        }
                    }

                    mEntry = mEntry.replace(/_/g, ' ');

                    this.siw.matchCollection[j] = new SmartInputMatch(entry.getText(), mEntry, entry.getType());



                    /*

                    // document.write("here");

                    var searchTerms = userInput.split("_");


                    mEntry = mEntry.replace(/_/g, ' ');

                    for (m = 0; m < searchTerms.length; m ++ ){
                    var term = searchTerms[m];
                    var regTry = new RegExp("([ \"\}\{\ - ] * )("+term+")","gi");
                    mEntry = mEntry.replace(regTry, "$1<b>$2</b>");
                    }
                    this.siw.matchCollection[j] = new SmartInputMatch(entry.getText(), mEntry, entry.getType());

                    */
                }
                j ++ ;

            }
        }
    }

    , setSmartInputData : function(orgUserInput)
    {
        if(this.siw)
        {
            var userInput = orgUserInput.toLowerCase().replace(/[\r\n\t\f\s]+/gi, ' ').replace(/^ +/gi, '').replace(/ +$/gi, '').replace(/ +/gi, ' ').replace(/\\/gi,'').replace(/\[/gi, '').replace(/\(/gi,'\\(').replace(/\./gi, '\.').replace(/\?/gi, '').replace(/\)/gi, '\\)');
            if(userInput != null && (userInput != '"'))
            {
                this.highlightMatches(userInput);
            }
            else
            {
                this.siw.matchCollection = null;
            }
        }
    }
    , getSmartInputBoxContent : function()
    {
        var a = null;
        if(this.siw && this.siw.matchCollection && (this.siw.matchCollection.length > 0))
        {
            a = '';
            for(i = 0; i < this.siw.matchCollection.length;
            i ++ )
            {
                selectedString = this.siw.matchCollection[i].isSelected ? ' selectedSmartInputItem' : '';
                var id = ("selected" + i);
                a += '<p id="'+id+'" class="matchedSmartInputItem'+selectedString+'">' + this.siw.matchCollection[i].getImageTag() + "\t" + this.siw.matchCollection[i].value.replace(/\{ */gi, "&lt;").replace(/\} */gi, "&gt;") + '</p>';
            }
        }
        return a;
    }
    , modifySmartInputBoxContent : function(content)
    {
        this.siw.floaterContent.innerHTML = '<div id="smartInputResults">' + content + (this.siw.showCredit ? ('<p class="siwCredit">Powered By: <a target="PhrawgBlog" href="http://chrisholland.blogspot.com/?from=smartinput&ref='+escape(location.href)+'">Chris Holland</a></p>') : '') + '</div>';
        this.siw.matchListDisplay = document.getElementById("smartInputResults");
        if(OB_bd.isGecko)
        {
            this.scrollToSelectedItem();
        }
    }
    , scrollToSelectedItem : function()
    {
        for(i = 0; i < this.siw.matchCollection.length;
        i ++ )
        {
            if(this.siw.matchCollection[i].isSelected)
            {
                var selElement = document.getElementById("selected" + i);
                selElement.scrollIntoView(false);
                return;
            }
        }
    }
    , selectFromMouseOver : function(o)
    {
        var currentIndex = this.getCurrentlySelectedSmartInputItem();
        if(currentIndex != null)this.deSelectSmartInputMatchItem(currentIndex);
        var newIndex = this.getIndexFromElement(o);
        this.selectSmartInputMatchItem(newIndex);
        this.modifySmartInputBoxContent(this.getSmartInputBoxContent());
    }
    , selectFromMouseClick : function()
    {
        this.activateCurrentSmartInputMatch();
        this.siw.inputBox.focus();
        this.siw.inputBox.blur();
        this.hideSmartInputFloater();
    }
    , getIndexFromElement : function(o)
    {
        var index = 0;
        while(o = o.previousSibling)
        {
            index ++ ;
        }
        return index;
    }
    , getCurrentlySelectedSmartInputItem : function()
    {
        var answer = null;
        if( ! this.siw.matchCollection)return;
        for(i = 0; ((i < this.siw.matchCollection.length) && ! answer);
        i ++ )
        {
            if(this.siw.matchCollection[i].isSelected)answer = i;
        }
        return answer;
    }
    , selectSmartInputMatchItem : function(index)
    {
        if( ! this.siw.matchCollection)return;
        this.siw.matchCollection[index].isSelected = true;
    }
    , deSelectSmartInputMatchItem : function(index)
    {
        if( ! this.siw.matchCollection)return;
        this.siw.matchCollection[index].isSelected = false;
    }
    , selectNextSmartInputMatchItem : function()
    {
        if( ! this.siw.matchCollection)return;
        currentIndex = this.getCurrentlySelectedSmartInputItem();
        if(currentIndex != null)
        {
            this.deSelectSmartInputMatchItem(currentIndex);
            if((currentIndex + 1) < this.siw.matchCollection.length)this.selectSmartInputMatchItem(currentIndex + 1);
            else this.selectSmartInputMatchItem(0);
        }
        else
        {
            this.selectSmartInputMatchItem(0);
        }
        this.modifySmartInputBoxContent(this.getSmartInputBoxContent());
    }
    , selectPreviousSmartInputMatchItem : function()
    {
        if( ! this.siw.matchCollection)return;
        var currentIndex = this.getCurrentlySelectedSmartInputItem();
        if(currentIndex != null)
        {
            this.deSelectSmartInputMatchItem(currentIndex);
            if((currentIndex - 1) >= 0)this.selectSmartInputMatchItem(currentIndex - 1);
            else this.selectSmartInputMatchItem(this.siw.matchCollection.length - 1);
        }
        else
        {
            this.selectSmartInputMatchItem(this.siw.matchCollection.length - 1);
        }
        this.modifySmartInputBoxContent(this.getSmartInputBoxContent());
    }
    , activateCurrentSmartInputMatch : function()
    {
        var baseValue = this.getUserInputBase();
        if((selIndex = this.getCurrentlySelectedSmartInputItem()) != null)
        {
            addedValue = this.siw.matchCollection[selIndex].cleanValue;
            this.insertTerm(addedValue, baseValue, this.siw.matchCollection[selIndex].getType());
            this.ignorePending = true;
        }
        else
        {
            smwhgLogger.log("", "AC", "close_without_selection");
        }
    }
    , insertTerm : function(addedValue, baseValue, type)
    {
        addedValue = addedValue.replace(/_/g, " ");
        var userContext = this.getUserContext();
        if(this.siw.customFloater)
        {
            if((userContext.match(/:=/)||userContext.match(/::/) || userContext.match(/category:/i)) && ! this.getTextAfterCursor().match(/^\s*\]\]|^\s*\||^\s*;/))
            {
                addedValue += "]]";
            }
            else if(type == SMW_PROPERTY_NS)
            {
                addedValue += ":=";
            }
            else if(type == SMW_INSTANCE_NS)
            {
                addedValue += "]]";
            }
            else if(addedValue.match(/category/i))
            {
                addedValue += ":";
            }
        }
        if(OB_bd.isIE && this.siw.inputBox.tagName == 'TEXTAREA')
        {
            this.siw.inputBox.focus();
            this.currentIESelection.collapse(false);
            this.currentIESelection.select();
            var userInput = this.getUserInputToMatch();
            var selection_range = document.selection.createRange();
            selection_range.moveStart("character", - userInput.length);
            selection_range.text = addedValue;
            selection_range.collapse(false);
            smwhgLogger.log(userInput + addedValue, "AC", "close_with_selection");
        }
        else if(OB_bd.isGecko && this.siw.inputBox.tagName == 'TEXTAREA')
        {
            var userInput = this.getUserInputToMatch();
            var scrollTop = this.siw.inputBox.scrollTop;
            var start = this.siw.inputBox.selectionStart;
            var pre = this.siw.inputBox.value.substring(0, start - userInput.length);
            var suf = this.siw.inputBox.value.substring(start);
            var theString = pre + addedValue + suf;
            this.siw.inputBox.value = theString;
            this.siw.inputBox.selectionStart = start + addedValue.length - userInput.length;
            this.siw.inputBox.selectionEnd = start + addedValue.length - userInput.length;
            this.siw.inputBox.scrollTop = scrollTop;
            smwhgLogger.log(userInput + addedValue, "AC", "close_with_selection");
        }
        else
        {
            var pasteNS = this.currentInputBox != null ? this.currentInputBox.getAttribute("pasteNS") : null;
            var theString = (baseValue ? baseValue : "") + addedValue;
            if(pasteNS != null)
            {
                switch(type)
                {
                    case SMW_PROPERTY_NS :
                        theString = gLanguage.getMessage('PROPERTY') + theString;
                        break;
                    case LWE_PROPOSAL_NS :
                        theString = gLanguage.getMessage('PROPOSAL') + theString;
                        break;
                    case LWE_PROPOSAL_TALK_NS :
                        theString = gLanguage.getMessage('PROPOSAL_TALK') + theString;
                        break;
                    case SMW_CATEGORY_NS :
                        theString = gLanguage.getMessage('CATEGORY') + theString;
                        break;
                    case SMW_TEMPLATE_NS :
                        theString = gLanguage.getMessage('TEMPLATE') + theString;
                        break;
                    case SMW_TYPE_NS :
                        theString = gLanguage.getMessage('TYPE') + theString;
                        break;
                }
            }
            this.siw.inputBox.value = theString;
            smwhgLogger.log(theString, "AC", "close_with_selection");
        }
    }
    , registerSmartInputListeners : function()
    {
        var inputs = document.getElementsByTagName("input");
        var texts = Array();
        texts[0] = document.getElementById("wpTextbox1");
        AC_matchCache = new MatchCache();
        this.registerAllInputs();
        this.textAreas = new Array();
        var y = 0;
        if(texts)
        {
            while(texts[y])
            {
                this.textAreas.push(texts[y]);
                this.createEmbeddingContainer(texts[y]);
                y ++ ;
            }
        }
        var contentElement = document.getElementById("globalWrapper");
        contentElement.appendChild(this.createFloater());
        var pending = this.createPendingAJAXIndicator();
        contentElement.appendChild(pending);
        this.siw = null;
        Event.observe(document, "keydown", this.handleKeyDown.bindAsEventListener(this), false);
        Event.observe(document, "keyup", this.handleKeyPress.bindAsEventListener(this), false);
        Event.observe(document, "mouseup", this.handleClick.bindAsEventListener(this), false);
        Event.observe(document, "mousemove", this.handleMouseMove.bindAsEventListener(this), false);
        if(OB_bd.isGecko)
        {
            Event.observe(document, "mousedown", this.handleMouseDown.bindAsEventListener(this), false);
        }
        Event.observe(document, "mouseover", this.handleMouseOver.bindAsEventListener(this), false);
    }
    , registerAllInputs : function()
    {
        var inputs = document.getElementsByTagName("input");
        this.allInputs = new Array();
        var x = 0;
        var z = 0;
        var c = null;
        if(inputs)
        {
            while(inputs[x])
            {
                if((c = inputs[x].className) && (c.indexOf("wickEnabled") != - 1))
                {
                    this.allInputs[z] = new Array();
                    this.allInputs[z][0] = inputs[x];
                    z ++ ;
                }
                x ++ ;
            }
        }
        for(i = 0; i < this.allInputs.length; i ++ )
        {
            if((c = this.allInputs[i][0].className) && (c.indexOf("wickEnabled") != - 1))
            {
                this.allInputs[i][0].setAttribute("autocomplete", "OFF");
                this.allInputs[i][1] = this.handleBlur.bindAsEventListener(this);
                Event.observe(this.allInputs[i][0], "blur", this.allInputs[i][1]);
            }
        }
    }
    , deregisterAllInputs : function()
    {
        if(this.allInputs != null)
        {
            for(i = 0; i < this.allInputs.length; i ++ )
            {
                Event.stopObserving(this.allInputs[i][0], "blur", this.allInputs[i][1]);
            }
        }
    }
    , registerTextArea : function(textAreaID, iFrame)
    {
        if(iFrame && textAreaID)
        {
            var textArea = iFrame.document.getElementById(textAreaID);
            if(textArea)
            {
                if(this.textAreas.indexOf(textArea) != - 1)
                {
                    return;
                }
                this.textAreas.push(textArea);
                var iFrameDocument = iFrame.document;
                Event.observe(iFrameDocument, "keydown", this.handleKeyDown.bindAsEventListener(this), false);
                Event.observe(iFrameDocument, "keyup", this.handleKeyPress.bindAsEventListener(this), false);
                Event.observe(iFrameDocument, "mouseup", this.handleClick.bindAsEventListener(this), false);
                if(OB_bd.isGecko)
                {
                    Event.observe(iFrameDocument, "mousedown", this.handleMouseDown.bindAsEventListener(this), false);
                    Event.observe(iFrameDocument, "mousemove", this.handleMouseMove.bindAsEventListener(this), false);
                }
                Event.observe(iFrameDocument, "mouseover", this.handleMouseOver.bindAsEventListener(this), false);
            }
        }
    }
    , createEmbeddingContainer : function(textarea)
    {
        var container = document.createElement("div");
        container.setAttribute("style", "position:relative;text-align:left");
        var mwFloater = document.createElement("div");
        mwFloater.setAttribute("id", "MWFloater" + this.AC_idCounter);
        Element.addClassName(mwFloater, "MWFloater");
        var mwContent = document.createElement("div");
        Element.addClassName(mwContent, "MWFloaterContent");
        if(OB_bd.isGecko)
        {
            var mwContentHeader = document.createElement("div");
            Element.addClassName(mwContentHeader, "MWFloaterContentHeader");
            var textinHeader = document.createElement("span");
            textinHeader.setAttribute("style", "margin-left:5px;");
            textinHeader.innerHTML = gLanguage.getMessage('AC_CLICK_TO_DRAG');
            var cross = document.createElement("img");
            Element.addClassName(cross, "closeFloater");
            cross.setAttribute("src", wgServer + wgScriptPath + "/extensions/SMWHalo/skins/Autocompletion/close.gif");
            cross.setAttribute("onclick", "javascript:autoCompleter.hideSmartInputFloater()");
            cross.setAttribute("style", "margin-left:4px;margin-bottom:3px;");
            mwContentHeader.appendChild(cross);
            mwContentHeader.appendChild(textinHeader);
            mwFloater.appendChild(mwContentHeader);
        }
        container.appendChild(mwFloater);
        mwFloater.appendChild(mwContent);
        var parent = textarea.parentNode;
        var f = parent.replaceChild(container, textarea);
        Element.addClassName(f, "wickEnabled:MWFloater" + this.AC_idCounter);
        container.appendChild(f);
        var acMessage = document.createElement("span");
        Element.addClassName(acMessage, "acMessage");
        acMessage.innerHTML = gLanguage.getMessage('AUTOCOMPLETION_HINT');
        container.appendChild(acMessage);
        this.AC_idCounter ++ ;
    }
    , createFloater : function()
    {
        var tableElement = document.createElement("table");
        var tbodyElement = document.createElement("tbody");
        tableElement.setAttribute("id", "smartInputFloater");
        Element.addClassName(tableElement, "floater");
        tableElement.setAttribute("cellpadding", "0");
        tableElement.setAttribute("cellspacing", "0");
        var trElement = document.createElement("tr");
        var tdElement = document.createElement("td");
        tdElement.setAttribute("id", "smartInputFloaterContent");
        tdElement.setAttribute("nowrap", "nowrap");
        trElement.appendChild(tdElement);
        tbodyElement.appendChild(trElement);
        tableElement.appendChild(tbodyElement);
        return tableElement;
    }
    , createPendingAJAXIndicator : function()
    {
        var pending = document.createElement("img");
        Element.addClassName(pending, "pendingElement");
        pending.setAttribute("src", wgServer + wgScriptPath + "/extensions/SMWHalo/skins/Autocompletion/pending.gif");
        pending.setAttribute("id", "pendingAjaxIndicator");
        return pending;
    }
    , getMatchItems : function(xml)
    {
        var list = GeneralXMLTools.createDocumentFromString(xml);
        var children = list.firstChild.childNodes;
        var collection = new Array();
        for(var i = 0, n = children.length; i < n; i ++ )
        {
            collection[i] = new MatchItem(children[i].firstChild.nodeValue, parseInt(children[i].getAttribute("type")));
        }
        return collection;
    }
}
;
function MatchItem(text, type)
{
    var _text = text;
    var _type = type;
    this.getText = function()
    {
        return _text;
    }
    ;
    this.getType = function()
    {
        return _type;
    }
}
;
function SmartInputWindow()
{
    this.customFloater = false;
    this.floater = document.getElementById("smartInputFloater");
    this.floaterContent = document.getElementById("smartInputFloaterContent");
    this.selectedSmartInputItem = null;
    this.MAX_MATCHES = 15;
    this.showCredit = false;
}
;
function SmartInputMatch(cleanValue, value, type)
{
    this.cleanValue = cleanValue;
    this.value = value;
    this.isSelected = false;
    var _type = type;
    this.getImageTag = function()
    {
        if(_type == SMW_INSTANCE_NS)
        {
            return "<img src=\""+wgServer+wgScriptPath+"/extensions/SMWHalo/skins/instance.gif\">";
        }
        else if(_type == SMW_CATEGORY_NS)
        {
            return "<img src=\""+wgServer+wgScriptPath+"/extensions/SMWHalo/skins/concept.gif\">";
        }
        else if(_type == SMW_PROPERTY_NS)
        {
            return "<img src=\"" + wgServer + wgScriptPath + "/extensions/SMWHalo/skins/property.gif\">";
        }
        else if(_type == LWE_PROPOSAL_NS)
        {
            return "<img src=\"" + wgServer + wgScriptPath + "/extensions/SMWHalo/skins/proposal.gif\">";
        }
        else if(_type == LWE_PROPOSAL_TALK_NS)
        {
            return "<img src=\"" + wgServer + wgScriptPath + "/extensions/SMWHalo/skins/proposal.gif\">";
        }
        else if(_type == SMW_TEMPLATE_NS)
        {
            return "<img src=\""+wgServer+wgScriptPath+"/extensions/SMWHalo/skins/template.gif\">";
        }
        else if(_type == SMW_TYPE_NS)
        {
            return "<img src=\""+wgServer+wgScriptPath+"/extensions/SMWHalo/skins/template.gif\">";
        }
        else if(_type == SMW_ENUM_POSSIBLE_VALUE)
        {
            return "<img src=\""+wgServer+wgScriptPath+"/extensions/SMWHalo/skins/enum.gif\">";
        }
        return "";
    }
    ;
    this.getType = function()
    {
        return _type;
    }
}
;
function MatchCache()
{
    var generalCache = $H(
    {
    }
    );
    var typeFilteredCache = $H(
    {
        14 : $H(
        {
        }
        ), 102 : $H(
        {
        }
        ), 108 : $H(
        {
        }
        ),100 : $H(
        {
        }
        ), 0 : $H(
        {
        }
        ), 10 : $H(
        {
        }
        )
    }
    );
    var nextToReplace = 0;
    var MAX_CACHE = 10;
    this.addLookup = function(matchText, matches, typeHint)
    {
        if(matchText == "" || matchText == null)return;
        if(typeHint == null)
        {
            if(generalCache.keys().length == MAX_CACHE)
            {
                generalCache.remove(generalCache.keys()[nextToReplace]);
                nextToReplace ++ ;
                if(nextToReplace == MAX_CACHE)
                {
                    nextToReplace = 0;
                }
            }
            generalCache[matchText] = matches;
        }
        else
        {
            var cache = typeFilteredCache[parseInt(typeHint)];
            if( ! cache)return;
            if(cache.keys().length == MAX_CACHE)
            {
                cache.remove(cache.keys()[nextToReplace]);
                nextToReplace ++ ;
                if(nextToReplace == MAX_CACHE)
                {
                    nextToReplace = 0;
                }
            }
            cache[matchText] = matches;
        }
    }
    ;
    this.getLookup = function(matchText, typeHint)
    {
        if(typeHint == null)
        {
            if(generalCache[matchText])
            {
                return generalCache[matchText];
            }
        }
        else
        {
            var cache = typeFilteredCache[parseInt(typeHint)];
            if( ! cache)return null;
            return cache[matchText];
        }
        return null;
    }
}
;
autoCompleter = new AutoCompleter();
Event.observe(window, 'load', autoCompleter.registerSmartInputListeners.bind(autoCompleter));

//  RH - remove help
// SMW_Help.js
// under GPL - License; Copyright (c) 2007 Ontoprise GmbH
// Event.observe(window, 'load', smw_help_callme); var initHelp = function(){var ns = wgNamespaceNumber == 0 ? "Main" : wgCanonicalNamespace; if(wgNamespaceNumber == - 1 && wgCanonicalSpecialPageName == "Search"){ns = "Search"; }else if(wgNamespaceNumber == - 1 && wgCanonicalSpecialPageName == "QueryInterface"){ns = "QueryInterface"; }else if(wgNamespaceNumber == - 1 && wgCanonicalSpecialPageName == "Gardening"){ns = "Gardening"; }else if(wgNamespaceNumber == - 1 && wgCanonicalSpecialPageName == "OntologyBrowser"){ns = "OntologyBrowser"; }sajax_do_call('smwfGetHelp', [ns, wgAction], displayHelp.bind(this)); }; function smw_help_callme(){if((wgAction == "edit" || wgCanonicalSpecialPageName == "Search") && stb_control.isToolbarAvailable()){helpcontainer = stb_control.createDivContainer(HELPCONTAINER, 0); helpcontainer.setHeadline('<img src="'+wgScriptPath+'/extensions/SMWHalo/skins/help.gif"/> Help'); initHelp(); }else if(wgCanonicalSpecialPageName == "QueryInterface"){initHelp(); }}; function displayHelp(request){if(wgCanonicalSpecialPageName == "QueryInterface"){if(request.responseText != ''){$('qi-help-content').innerHTML = request.responseText; }}else{if(request.responseText != ''){helpcontainer.setContent(request.responseText); }else{helpcontainer.setHeadline = ' '; }helpcontainer.contentChanged(); }}; function askQuestion(){$('questionLoaderIcon').show(); var ns = wgNamespaceNumber == 0 ? "Main" : wgCanonicalNamespace; if(wgNamespaceNumber == - 1 && wgCanonicalSpecialPageName == "Search"){ns = "Search"; }else if(wgNamespaceNumber == - 1 && wgCanonicalSpecialPageName == "QueryInterface"){ns = "QueryInterface"; }else if(wgNamespaceNumber == - 1 && wgCanonicalSpecialPageName == "Gardening"){ns = "Gardening"; }else if(wgNamespaceNumber == - 1 && wgCanonicalSpecialPageName == "OntologyBrowser"){ns = "OntologyBrowser"; }sajax_do_call('smwfAskQuestion', [ns, wgAction, $('question').value], hideQuestionForm.bind(this)); }; function hideQuestionForm(request){initHelp(); $('questionLoaderIcon').hide(); $('askHelp').hide(); alert(request.responseText); }; function submitenter(myfield, e){var keycode; if(window.event){keycode = window.event.keyCode; }else if(e){keycode = e.which; }else{return true; }if(keycode == 13){askQuestion(); return false; }else{return true; }}; function helplog(question, action){if(window.smwhgLogger){var logmsg = "Opened Help Page " + question + " with action " + action; smwhgLogger.log(logmsg, "CSH", "help_clickedtopic"); }return true; }

// RH - To remove toolbar headers
// SMW_Links.js
// under GPL - License; Copyright (c) 2007 Ontoprise GmbH
// Event.observe(window, 'load', smw_links_callme); var createLinkList = function(){sajax_do_call('getLinks', [wgArticleId], addLinks); }; function smw_links_callme(){if(wgAction == "edit" && stb_control.isToolbarAvailable()){editcontainer = stb_control.createDivContainer(EDITCONTAINER, 1); createLinkList(); }}; function addLinks(request){if(request.responseText != ''){editcontainer.setContent(request.responseText); editcontainer.contentChanged(); }else{editcontainer.setContent("<p>There are no links on this page.</p>"); editcontainer.contentChanged(); }}; function filter(term, _id, cellNr){var suche = term.value.toLowerCase(); var table = document.getElementById(_id); var ele; for(var r = 0; r < table.rows.length; r ++ ){ele = table.rows[r].cells[cellNr].innerHTML.replace(/<[^>]+>/g, ""); if(ele.toLowerCase().indexOf(suche) >= 0)table.rows[r].style.display = ''; else table.rows[r].style.display = 'none'; }}; function update(){$("linkfilter").value = ""; filter($("linkfilter"), "linktable", 0); }; function linklog(link, action){if(window.smwhgLogger){var logmsg = "Opened Page " + link + " with action " + action; smwhgLogger.log(logmsg, "info", "link_opened"); }return true; }

// Annotation.js
// under GPL - License; Copyright (c) 2007 Ontoprise GmbH
var WtpAnnotation = Class.create();
WtpAnnotation.prototype =
{
    initialize : function(annotation, start, end, wtp, prefix)
    {
        this.WtpAnnotation(annotation, start, end, wtp);
    }
    , WtpAnnotation : function(annotation, start, end, wtp, prefix)
    {
        this.annotation = annotation;
        this.start = start;
        this.end = end;
        this.wikiTextParser = wtp;
        this.prefix = prefix ? prefix : "";
        this.name = null;
        this.representation = null;
    }
    , getAnnotation : function()
    {
        return this.annotation;
    }
    , getName : function()
    {
        return this.name;
    }
    , getRepresentation : function()
    {
        if(this.representation == null)
        {
            return "";
        }
        else
        {
            return this.representation;
        }
    }
    , getStart : function()
    {
        return this.start;
    }
    , getEnd : function()
    {
        return this.end;
    }
    , getPrefix : function()
    {
        return this.prefix;
    }
    , select : function()
    {
        this.wikiTextParser.setSelection(this.start, this.end);
    }
    , replaceAnnotation : function(newAnnotation)
    {
        this.wikiTextParser.replaceAnnotation(this, newAnnotation);
        var oldLen = this.annotation.length;
        var newLen = newAnnotation.length;
        this.end += newLen - oldLen;
        this.annotation = newAnnotation;
    }
    , move : function(offset, start)
    {
        if(this.start > start)
        {
            this.start += offset;
            this.end += offset;
        }
    }
    , remove : function(replacementText)
    {
        this.replaceAnnotation(replacementText);
        this.wikiTextParser.removeAnnotation(this);
    }
}
;
var WtpRelation = Class.create();
WtpRelation.prototype = Object.extend(new WtpAnnotation(),
{
    initialize : function(annotation, start, end, wtp, prefix, relationName, relationValue, representation)
    {
        this.WtpAnnotation(annotation, start, end, wtp, prefix);
        this.WtpRelation(relationName, relationValue, representation);
    }
    , WtpRelation : function(relationName, relationValue, representation)
    {
        this.name = relationName;
        this.value = relationValue;
        this.representation = representation;
        this.splitValues = this.value.split(";");
        this.arity = this.splitValues.length + 1;
    }
    , getValue : function()
    {
        return this.value;
    }
    , getSplitValues : function()
    {
        return this.splitValues;
    }
    , getArity : function()
    {
        return this.arity;
    }
    , rename : function(newRelationName)
    {
        var newAnnotation = "[[" + this.prefix + newRelationName + ":=" + this.value;
        if(this.representation)
        {
            newAnnotation += "|" + this.representation;
        }
        newAnnotation += "]]";
        this.name = newRelationName;
        this.replaceAnnotation(newAnnotation);
    }
    , changeValue : function(newValue)
    {
        var newAnnotation = "[[" + this.prefix + this.name + ":=" + newValue;
        if(this.representation)
        {
            newAnnotation += "|" + this.representation;
        }
        newAnnotation += "]]";
        this.value = newValue;
        this.replaceAnnotation(newAnnotation);
    }
    , changeRepresentation : function(newRepresentation)
    {
        var newAnnotation = "[[" + this.prefix + this.name + ":=" + this.value;
        if(newRepresentation && newRepresentation != "")
        {
            newAnnotation += "|" + newRepresentation;
        }
        newAnnotation += "]]";
        this.representation = newRepresentation;
        this.replaceAnnotation(newAnnotation);
    }
    , inspect : function()
    {
        var content = "Annotation: " + this.annotation + "<br />" + "Name : " + this.name + "<br />" + "Value: " + this.value + "<br />" + "Rep. : " + this.representation + "<br />" + "Start: " + this.start + "<br />" + "End  : " + this.end + "<br />";
        return content;
    }
}
);
var WtpCategory = Class.create();
WtpCategory.prototype = Object.extend(new WtpAnnotation(),
{
    initialize : function(annotation, start, end, wtp, prefix, categoryName, representation)
    {
        this.WtpAnnotation(annotation, start, end, wtp, prefix);
        this.WtpCategory(categoryName, representation);
    }
    , WtpCategory : function(categoryName, representation)
    {
        this.name = categoryName;
        this.representation = representation;
    }
    , changeCategory : function(newCategoryName)
    {
        var newAnnotation = "[[" + this.prefix + gLanguage.getMessage('CATEGORY') + newCategoryName;
        if(this.representation)
        {
            newAnnotation += "|" + this.representation;
        }
        newAnnotation += "]]";
        this.name = newCategoryName;
        this.replaceAnnotation(newAnnotation);
    }
    , changeRepresentation : function(newRepresentation)
    {
        var newAnnotation = "[[" + this.prefix + gLanguage.getMessage('CATEGORY') + this.name;
        if(newRepresentation && newRepresentation != "")
        {
            newAnnotation += "|" + newRepresentation;
        }
        newAnnotation += "]]";
        this.representation = newRepresentation;
        this.replaceAnnotation(newAnnotation);
    }
    , inspect : function()
    {
        var content = "Annotation: " + this.annotation + "<br />" + "Name : " + this.name + "<br />" + "Rep. : " + this.representation + "<br />" + "Start: " + this.start + "<br />" + "End  : " + this.end + "<br />";
        return content;
    }
}
);
var WtpLink = Class.create();
WtpLink.prototype = Object.extend(new WtpAnnotation(),
{
    initialize : function(annotation, start, end, wtp, prefix, link, representation)
    {
        this.WtpAnnotation(annotation, start, end, wtp, prefix);
        this.WtpLink(link, representation);
    }
    , WtpLink : function(link, representation)
    {
        this.name = link;
        this.representation = representation;
    }
    , changeLink : function(newLink)
    {
        var newAnnotation = "[[" + this.prefix + newLink;
        if(this.representation)
        {
            newAnnotation += "|" + this.representation;
        }
        newAnnotation += "]]";
        this.name = newLink;
        this.replaceAnnotation(newAnnotation);
    }
    , changeRepresentation : function(newRepresentation)
    {
        var newAnnotation = "[[" + this.prefix + this.name;
        if(newRepresentation && newRepresentation != "")
        {
            newAnnotation += "|" + newRepresentation;
        }
        newAnnotation += "]]";
        this.representation = newRepresentation;
        this.replaceAnnotation(newAnnotation);
    }
    , inspect : function()
    {
        var content = "Annotation: " + this.annotation + "<br />" + "Name : " + this.name + "<br />" + "Rep. : " + this.representation + "<br />" + "Start: " + this.start + "<br />" + "End  : " + this.end + "<br />";
        return content;
    }
}
);


// RH - Removes properties
// WikiTextParser.js
// under GPL - License; Copyright (c) 2007 Ontoprise GmbH
// var WTP_NO_ERROR = 0; var WTP_UNMATCHED_BRACKETS = 1; var WikiTextParser = Class.create(); var gEditInterface = null; WikiTextParser.prototype = {initialize : function(){var txtarea; if(document.editform){txtarea = document.editform.wpTextbox1; }else{var areas = document.getElementsByTagName('textarea'); txtarea = areas[0]; }this.textarea = txtarea; if(gEditInterface == null){gEditInterface = new SMWEditInterface(); }this.editInterface = gEditInterface; this.text = this.editInterface.getValue(); this.relations = null; this.categories = null; this.links = null; this.error = WTP_NO_ERROR; }, getError : function(){return this.error; }, getWikiText : function(){return this.text; }, getRelation : function(name){if(this.relations == null){this.parseAnnotations(); }var matching = new Array(); for(var i = 0, num = this.relations.length; i < num; ++ i){var rel = this.relations[i]; if(this.equalWikiName(rel.getName(), name)){matching.push(rel); }}return matching.length == 0 ? null : matching; }, getRelations : function(){if(this.relations == null){this.parseAnnotations(); }return this.relations; }, getCategories : function(){if(this.categories == null){this.parseAnnotations(); }return this.categories; }, getCategory : function(name){if(this.categories == null){this.parseAnnotations(); }for(var i = 0, num = this.categories.length; i < num; ++ i){var cat = this.categories[i]; if(this.equalWikiName(cat.getName(), name)){return cat; }}return null; }, getLinks : function(){if(this.links == null){this.parseAnnotations(); }return this.links; }, addRelation : function(name, value, representation, append){var anno = "[[" + name + ":=" + value; if(representation){anno += "|" + representation; }anno += "]]"; this.addAnnotation(anno, append); }, addCategory : function(name, append){var anno = "[[" + gLanguage.getMessage('CATEGORY') + name; anno += "]]"; this.addAnnotation(anno, append); }, addLink : function(link, representation, append){var anno = "[[" + link; if(representation){anno += "|" + representation; }anno += "]]"; this.addAnnotation(anno, append); }, replaceAnnotation : function(annoObj, newAnnotation){var startText = this.text.substring(0, annoObj.getStart()); var endText = this.text.substr(annoObj.getEnd()); var diffLen = newAnnotation.length - annoObj.getAnnotation().length; this.text = startText + newAnnotation + endText; this.editInterface.setValue(this.text); this.updateAnnotationPositions(annoObj.getStart(), diffLen); }, getSelection : function(trim){trim = true; var text = this.editInterface.getSelectedText(); if(trim == true && text && text.length > 0){var regex = /^(\s*(\[\[)?)\s*(.*?)\s*((\]\])?\s*)$/; var parts = text.match(regex); if(parts){var rng = this.editInterface.selectCompleteAnnotation(); return parts[3]; }}return text; }, setSelection : function(start, end){this.editInterface.setSelectionRange(start, end); }, parseAnnotations : function(){this.relations = new Array(); this.categories = new Array(); this.links = new Array(); this.error = WTP_NO_ERROR; var state = 0; var bracketCount = 0; var nowikiCount = 0; var askCount = 0; var currentPos = 0; var bracketStart = - 1; var parsing = true; while(parsing){switch(state){case 0 : var findings = this.findFirstOf(currentPos, ["[[", "<nowiki>", "<ask"]); if(findings[1] == null){parsing = false; break; }currentPos = findings[0] + 1; if(findings[1] == "[["){bracketStart = findings[0]; bracketCount ++ ; state = 1; }else if(findings[1] == "<nowiki>"){bracketStart = - 1; nowikiCount ++ ; state = 2; }else{bracketStart = - 1; askCount ++ ; state = 3; }break; case 1 : var findings = this.findFirstOf(currentPos, ["[[", "]]"]); if(findings[1] == null){parsing = false; break; }currentPos = findings[0] + 2; if(findings[1] == "[["){bracketCount ++ ; }else{bracketCount -- ; if(bracketCount == 0){var anno = this.createAnnotation(this.text.substring(bracketStart, findings[0] + 2), bracketStart, findings[0] + 2); if(anno){if(anno instanceof WtpRelation){this.relations.push(anno); }else if(anno instanceof WtpCategory){this.categories.push(anno); }else if(anno instanceof WtpLink){this.links.push(anno); }}state = 0; }}break; case 2 : var findings = this.findFirstOf(currentPos, ["</nowiki>", "<nowiki>"]); if(findings[1] == null){parsing = false; break; }currentPos = findings[0] + 7; if(findings[1] == "<nowiki>"){nowikiCount ++ ; }else{nowikiCount -- ; if(nowikiCount == 0){state = 0; }}break; case 3 : var findings = this.findFirstOf(currentPos, ["</ask>", "<ask"]); if(findings[1] == null){parsing = false; break; }currentPos = findings[0] + 4; if(findings[1] == "<ask"){askCount ++ ; }else{askCount -- ; if(askCount == 0){state = 0; }}break; }}if(bracketCount != 0){this.error = WTP_UNMATCHED_BRACKETS; }}, createAnnotation : function(annotation, start, end){var relRE = /\[\[\s*(:?)([^:]*)(::|:=)([\s\S\n\r]*)\]\]/; var catRE = /\[\[\s*[C|c]ategory:([\s\S\n\r]*)\]\]/; var relation = annotation.match(relRE); if(relation){var relName = relation[2].match(/[\s\n\r]*(.*)[\s\n\r]*/); var valRep = this.getValueAndRepresentation(relation[4]); return new WtpRelation(annotation, start, end, this, relation[1], relName[1], valRep[0], valRep[1]); }var category = annotation.match(catRE); if(category){var catName = category[1].match(/[\s\n\r]*(.*)[\s\n\r]*/); var valRep = this.getValueAndRepresentation(catName[1]); return new WtpCategory(annotation, start, end, this, "", valRep[0], valRep[1]); }var linkName = annotation.match(/\[\[[\s\n\r]*((.|\n)*)[\s\n\r]*\]\]/); var valRep = this.getValueAndRepresentation(linkName[1]); return new WtpLink(annotation, start, end, this, null, valRep[0], valRep[1]); return null; }, updateAnnotationPositions : function(start, offset){if(offset == 0){return; }var i; for(i = 0, len = this.relations.length; i < len; i ++ ){this.relations[i].move(offset, start); }for(i = 0, len = this.categories.length; i < len; i ++ ){this.categories[i].move(offset, start); }for(i = 0, len = this.links.length; i < len; i ++ ){this.links[i].move(offset, start); }}, addAnnotation : function(annotation, append){if(append){this.editInterface.setValue(this.editInterface.getValue() + annotation); }else{this.replaceText(annotation); }this.initialize(); }, removeAnnotation : function(annotation){var annoArray = null; if(annotation instanceof WtpRelation){annoArray = this.relations; }else if(annotation instanceof WtpCategory){annoArray = this.categories; }else if(annotation instanceof WtpLink){annoArray = this.links; }else{return; }for(var i = 0, len = annoArray.length; i < len; i ++ ){if(annoArray[i] == annotation){annoArray.splice(i, 1); break; }}}, findFirstOf : function(startPos, searchStrings, findIn){var firstPos = - 1; var firstMatch = null; for(var i = 0, len = searchStrings.length; i < len; ++ i){var ss = searchStrings[i]; var pos = findIn ? findIn.indexOf(ss, startPos) : this.text.indexOf(ss, startPos); if(pos != - 1 && (pos < firstPos || firstPos == - 1)){firstPos = pos; firstMatch = ss; }}return[firstPos, firstMatch]; }, getValueAndRepresentation : function(valrep){var state = 0; var bracketCount = 0; var curlyCount = 0; var currentPos = 0; var parsing = true; while(parsing){switch(state){case 0 : var findings = this.findFirstOf(currentPos, ["[[", "{{", "|"], valrep); if(findings[1] == null){parsing = false; break; }currentPos = findings[0] + 1; if(findings[1] == "[["){bracketCount ++ ; state = 1; }else if(findings[1] == "{{"){curlyCount ++ ; state = 2; }else{if(bracketCount == 0){var val = valrep.substring(0, findings[0]); var rep = valrep.substring(findings[0] + 1); return[val, rep]; }}break; case 1 : var findings = this.findFirstOf(currentPos, ["[[", "]]"], valrep); if(findings[1] == null){parsing = false; break; }currentPos = findings[0] + 2; if(findings[1] == "[["){bracketCount ++ ; }else{bracketCount -- ; if(bracketCount == 0){state = 0; }}break; case 2 : var findings = this.findFirstOf(currentPos, ["{{", "}}"], valrep); if(findings[1] == null){parsing = false; break; }currentPos = findings[0] + 2; if(findings[1] == "{{"){curlyCount ++ ; }else{curlyCount -- ; if(curlyCount == 0){state = 0; }}break; }}return[valrep, null]; }, replaceText : function(text){this.editInterface.setSelectedText(text); }, equalWikiName : function(name1, name2){if(name1.substring(1) == name2.substring(1)){if(name1.charAt(0).toLowerCase() == name2.charAt(0).toLowerCase()){return true; }}return false; }};

// SMW_Ontology.js
// under GPL - License; Copyright (c) 2007 Ontoprise GmbH
var OntologyModifier = Class.create();
OntologyModifier.prototype =
{
    initialize : function()
    {
        this.redirect = false;
    }
    , existsArticle : function(pageName, callback, title, optparam, domElementID)
    {
        function ajaxResponseExistsArticle(request)
        {
            var answer = request.responseText;
            var regex = /(true|false)/;
            var parts = answer.match(regex);
            if(parts == null)
            {
                var errMsg = gLanguage.getMessage('ERR_QUERY_EXISTS_ARTICLE');
                errMsg = errMsg.replace(/\$-page/g, pageName);
                alert(errMsg);
                return;
            }
            callback(pageName, parts[1] == 'true' ? true : false, title, optparam, domElementID);
        }
        ;
        sajax_do_call('smwfExistsArticle', [pageName], ajaxResponseExistsArticle.bind(this));
    }
    , createArticle : function(title, content, optionalText, creationComment, redirect)
    {
        this.redirect = redirect;
        sajax_do_call('smwfCreateArticle', [title, content, optionalText, creationComment], this.ajaxResponseCreateArticle.bind(this));
    }
    , createAttribute : function(title, initialContent, domain, type)
    {
        var schema = "";
        if(domain != null && domain != "")
        {
            schema += "\n[[SMW_SSP_HAS_DOMAIN_HINT::" + gLanguage.getMessage('CATEGORY') + domain + "]]";
        }
        if(type != null && type != "")
        {
            schema += "\n[[SMW_SP_HAS_TYPE::" + gLanguage.getMessage('TYPE') + type + "]]";
        }
        this.createArticle(gLanguage.getMessage('PROPERTY') + title, initialContent, schema, "Create a property for category " + domain, true);
    }
    , createRelation : function(title, initialContent, domain, ranges)
    {
        var schema = "";
        if(domain != null && domain != "")
        {
            schema += "\n[[SMW_SSP_HAS_DOMAIN_HINT::" + gLanguage.getMessage('CATEGORY') + domain + "]]";
        }
        if(ranges != null)
        {
            if(ranges.length >= 1)
            {
                var rangeStr = "\n[[SMW_SP_HAS_TYPE:=";
                for(var i = 0, n = ranges.length; i < n; i ++ )
                {
                    if(ranges[i].indexOf(gLanguage.getMessage('TYPE')) == 0)
                    {
                        rangeStr += ranges[i];
                    }
                    else
                    {
                        rangeStr += gLanguage.getMessage('TYPE_PAGE');
                        if(ranges[i])
                        {
                            schema += "\n[[SMW_SSP_HAS_RANGE_HINT::" + ranges[i] + "]]";
                        }
                        else
                        {
                            schema += "\n[[SMW_SSP_HAS_RANGE_HINT::" + gLanguage.getMessage('CATEGORY') + gLanguage.getMessage('DEFAULT_ROOT_CONCEPT') + "]]";
                        }
                    }
                    if(i < n - 1)
                    {
                        rangeStr += ';';
                    }
                }
                schema += rangeStr + "]]";
            }
        }
        this.createArticle(gLanguage.getMessage('PROPERTY') + title, initialContent, schema, gLanguage.getMessage('CREATE_PROP_FOR_CAT').replace(/\$cat/g, domain), true);
    }
    , createCategory : function(title, initialContent)
    {
        this.createArticle(gLanguage.getMessage('CATEGORY') + title, initialContent, "", gLanguage.getMessage('CREATE_CATEGORY'), true);
    }
    , createSubProperty : function(title, initialContent, openNewArticle)
    {
        if(openNewArticle == undefined)
        {
            openNewArticle = true;
        }
        var schemaProp = this.getSchemaProperties();
        if(wgNamespaceNumber == 102 || wgNamespaceNumber == 100)
        {
            this.createArticle(gLanguage.getMessage('PROPERTY') + title, initialContent, schemaProp + "\n[[SMW_SP_SUBPROPERTY_OF::" + wgPageName + "]]", gLanguage.getMessage('CREATE_SUB_PROPERTY'), openNewArticle);
        }
        else
        {
            alert(gLanguage.getMessage('NOT_A_PROPERTY'))
        }
    }
    , createSuperProperty : function(title, initialContent, openNewArticle)
    {
        if(openNewArticle == undefined)
        {
            openNewArticle = true;
        }
        var schemaProp = this.getSchemaProperties();
        var wtp = new WikiTextParser();
        if(wgNamespaceNumber == 102 || wgNamespaceNumber == 100)
        {
            this.createArticle(gLanguage.getMessage('PROPERTY') + title, initialContent, schemaProp, gLanguage.getMessage('CREATE_SUPER_PROPERTY'), openNewArticle);
            wtp.addRelation("subproperty of", gLanguage.getMessage('PROPERTY') + title, "", true);
        }
        else
        {
            alert(gLanguage.getMessage('NOT_A_PROPERTY'));
        }
    }
    , createSuperCategory : function(title, initialContent, openNewArticle)
    {
        if(openNewArticle == undefined)
        {
            openNewArticle = true;
        }
        var wtp = new WikiTextParser();
        if(wgNamespaceNumber == 14)
        {
            this.createArticle(gLanguage.getMessage('CATEGORY') + title, initialContent, "", gLanguage.getMessage('CREATE_SUPER_CATEGORY'), openNewArticle);
            wtp.addCategory(title, "", true);
        }
        else
        {
            alert(gLanguage.getMessage('NOT_A_CATEGORY'))
        }
    }
    , createSubCategory : function(title, initialContent)
    {
        if(wgNamespaceNumber == 14)
        {
            this.createArticle(gLanguage.getMessage('CATEGORY') + title, initialContent, "[[" + gLanguage.getMessage('CATEGORY') + wgTitle + "]]", gLanguage.getMessage('CREATE_SUB_CATEGORY'), true);
        }
        else
        {
            alert(gLanguage.getMessage('NOT_A_CATEGORY'))
        }
    }
    , getSchemaProperties : function()
    {
        var wtp = new WikiTextParser();
        var props = new Array();
        props.push(wtp.getRelation("has type"));
        props.push(wtp.getRelation("Has domain hint"));
        props.push(wtp.getRelation("Has range hint"));
        props.push(wtp.getRelation("Has max cardinality"));
        props.push(wtp.getRelation("Has min cardinality"));
        var schemaAnnotations = "";
        for(var typeIdx = 0, nt = props.length; typeIdx < nt;
        ++ typeIdx)
        {
            var type = props[typeIdx];
            if(type != null)
            {
                for(var annoIdx = 0, na = type.length; annoIdx < na;
                ++ annoIdx)
                {
                    var anno = type[annoIdx];
                    schemaAnnotations += anno.getAnnotation() + "\n";
                }
            }
        }
        var transitive = wtp.getCategory("Transitive relations");
        var symmetric = wtp.getCategory("Symmetrical relations");
        if(transitive)
        {
            schemaAnnotations += transitive.getAnnotation() + "\n";
        }
        if(symmetric)
        {
            schemaAnnotations += symmetric.getAnnotation() + "\n";
        }
        return schemaAnnotations;
    }
    , ajaxResponseCreateArticle : function(request)
    {
        if(request.status != 200)
        {
            alert(gLanguage.getMessage('ERROR_CREATING_ARTICLE'));
            return;
        }
        var answer = request.responseText;
        var regex = /(true|false),(true|false),(.*)/;
        var parts = answer.match(regex);
        if(parts == null)
        {
            alert(gLanguage.getMessage('ERROR_CREATING_ARTICLE'));
            return;
        }
        var success = parts[1];
        var created = parts[2];
        var title = parts[3];
        if(success == "true")
        {
            if(this.redirect)
            {
                window.open("index.php?title=" + title, "_blank");
            }
        }
    }
}



// SMW_DataTypes.js
// under GPL - License; Copyright (c) 2007 Ontoprise GmbH
var DataTypes = Class.create();
DataTypes.prototype =
{
    initialize : function()
    {
        this.builtinTypes = null;
        this.userTypes = null;
        this.callback = new Array();
        this.refresh();
        this.refreshPending = false;
    }
    , getBuiltinTypes : function()
    {
        return this.builtinTypes;
    }
    , getUserDefinedTypes : function()
    {
        return this.userTypes;
    }
    , refresh : function(callback)
    {
        if(callback)
        {
            this.callback.push(callback);
        }
        if( ! this.refreshPending)
        {
            this.refreshPending = true;
            sajax_do_call('smwfGetUserDatatypes', [], this.ajaxResponseGetDatatypes.bind(this));
            if( ! this.builtinTypes)
            {
                sajax_do_call('smwfGetBuiltinDatatypes', [], this.ajaxResponseGetDatatypes.bind(this));
            }
        }
    }
    , ajaxResponseGetDatatypes : function(request)
    {
        if(request.status != 200)
        {
            return;
        }
        var types = request.responseText.split(",");
        if(types[0].indexOf("User defined types") >= 0)
        {
            this.userTypes = new Array(types.length - 1);
            for(var i = 1, len = types.length; i < len; ++ i)
            {
                this.userTypes[i - 1] = types[i];
            }
        }
        else
        {
            this.builtinTypes = new Array(types.length - 1);
            for(var i = 1, len = types.length; i < len; ++ i)
            {
                this.builtinTypes[i - 1] = types[i];
            }
        }
        if(this.userTypes && this.builtinTypes)
        {
            for(var i = 0; i < this.callback.length; ++ i)
            {
                this.callback[i]();
            }
            this.callback.clear();
            this.refreshPending = false;
        }
    }
}
;
var gDataTypes = new DataTypes();

// SMW_GenericToolbarFunctions.js
// under GPL - License; Copyright (c) 2007 Ontoprise GmbH
var GenericToolBar = Class.create();
GenericToolBar.prototype =
{
    initialize : function()
    {
    }
    , createList : function(list, id)
    {
        var len = list == null ? 0 : list.length;
        var divlist = "";
        switch(id)
        {
            case "category" :
            divlist = "<div id=\""+id+" - tools\">" + "<a href=\"javascript : catToolBar.newItem()\" class=\"menulink\">" + gLanguage.getMessage('ANNOTATE') + "</a>" + "<a href=\"javascript : catToolBar.newCategory()\" class=\"menulink\">" + gLanguage.getMessage('CREATE') + "</a>";
            if(wgNamespaceNumber == 14)
            {
                divlist += "<a href=\"javascript : catToolBar.CreateSubSup()\" class=\"menulink\">" + gLanguage.getMessage('SUB_SUPER') + "</a>";
            }
            divlist += "</div>";
            break;
            case "relation" :
            divlist = "<div id=\""+id+" - tools\">" + "<a href=\"javascript : relToolBar.newItem()\" class=\"menulink\">" + gLanguage.getMessage('ANNOTATE') + "</a>" + "<a href=\"javascript : relToolBar.newRelation()\" class=\"menulink\">" + gLanguage.getMessage('CREATE') + "</a>";
            var attrregex = new RegExp("Attribute:.*");
            if(wgNamespaceNumber == 100 || wgNamespaceNumber == 102 || attrregex.exec(wgPageName) != null)
            {
                divlist += "<a href=\"javascript : relToolBar.CreateSubSup()\" class=\"menulink\">" + gLanguage.getMessage('SUB_SUPER') + "</a>";
            }
            divlist += "<a href=\"javascript : relToolBar.newPart()\" class=\"menulink\">" + gLanguage.getMessage('MHAS_PART') + "</a>";
            divlist += "</div>";
            break;
        }
        divlist += "<div id=\""+id+" - itemlist\"><table id=\""+id+" - table\">";
        var path = wgArticlePath;
        var dollarPos = path.indexOf('$1');
        if(dollarPos > 0)
        {
            path = path.substring(0, dollarPos);
        }
        var maxlen1 = 0;
        var maxlen2 = 0;
        if(id == "relation")
        {
            for(var i = 0; i < len; i ++ )
            {
                list[i].getName().length > maxlen2 ? maxlen2 = list[i].getName().length : "";
                var propertyvalues = list[i].getSplitValues();
                for(var j = 0, n = list[i].getArity() - 1; j < n; j ++ )
                {
                    propertyvalues[j].length > maxlen1 ? maxlen1 = propertyvalues[j].length : "";
                }
            }
        }
        var len1 = "";
        var len2 = "";
        if(id == "relation" && maxlen2 != 0)
        {
            len2 = 20 + 100 * (0.55 * (maxlen1 / (maxlen2 + maxlen1)));
            len2 = 'style="width:'+len2+'%;"';
            len1 = 20 + 100 * (0.55 - 0.55 * (maxlen1 / (maxlen2 + maxlen1)));
            len1 = 'style="width:'+len1+'%;"';
        }
        for(var i = 0; i < len; i ++ )
        {
            var rowSpan = "";
            var firstValue = "";
            var multiValue = "";
            var value = "";
            var prefix = "";
            switch(id)
            {
                case "category" :
                fn = "catToolBar.getselectedItem(" + i + ")";
                firstValue = list[i].getValue ? list[i].getValue() : "";
                prefix = gLanguage.getMessage('CATEGORY');
                break;
                case "relation" :
                fn = "relToolBar.getselectedItem(" + i + ")";
                prefix = gLanguage.getMessage('PROPERTY');
                var rowSpan = 'rowspan="'+(list[i].getArity()-1)+'"';
                var values = list[i].getSplitValues();
                firstValue = values[0];
                var valueLink;
                valueLink = '<span title="'+firstValue+'">' + firstValue + '<span>';
                firstValue = valueLink;
                for(var j = 1, n = list[i].getArity() - 1; j < n; j ++ )
                {
                    valueLink = '<span title="'+values[j]+'">' + values[j] + '</span>';
                    multiValue += "<tr>" + "<td class=\""+id+" - col2\">" + valueLink + " </td>" + "</tr>";
                }
                break
            }
            var shortName = list[i].getName();
            var elemName;
            elemName = '<a href="'+wgServer+path+prefix+list[i].getName();
            elemName += '" target="blank" title="' + shortName + '">'+shortName+'</a>';
            divlist += "<tr>" + "<td " + rowSpan + " class=\""+id+" - col1\" " + len1 + ">" + elemName + " </td>" + "<td class=\""+id+" - col2\"  " + len2 + ">" + firstValue + " </td>" + "<td " + rowSpan + " class=\""+id+" - col3\">" + '<a href=\"javascript:'+fn+'">' + '<img src="'+wgScriptPath+'/extensions/SMWHalo/skins/edit.gif"/></a>' + '</tr>' + multiValue;
        }
        divlist += "</table></div>";
        return divlist;
    }
    , cutdowntosize : function(word, size)
    {
        return word;
        var result;
        var subparts = new Array();
        var from;
        var to;
        arguments.length == 3 ? maxrows = arguments[2] : maxrows = 0;
        var partscount = parseInt(word.length / size);
        if((word.length % size) != 0)
        {
            partscount ++ ;
        }
        for(var part = 0; part < partscount; part ++ )
        {
            from = ((part) * size);
            to = (((part) * size) + (size));
            if(to > word.length)
            {
                to = word.length;
            }
            ;
            if(maxrows != 0 && maxrows == part + 1)
            {
                if((to - from) < size - 3)
                {
                    subparts[part] = word.substring(from, to) + "...";
                }
                else
                {
                    subparts[part] = word.substring(from, from + size - 3) + "...";
                }
                break;
            }
            else
            {
                subparts[part] = word.substring(from, to);
            }
        }
        result = subparts[0].replace(/\s/g, '&nbsp;');
        ;
        for(var part = 1; part < subparts.length; part ++ )
        {
            result += "<br>" + subparts[part].replace(/\s/g, '&nbsp;');
        }
        return(result ? result : "");
    }
    , triggerEvent : function(element)
    {
        if(element)
        {
            element.focus();
            element.blur();
            element.focus();
        }
    }
}
;
var EventManager = Class.create();
EventManager.prototype =
{
    initialize : function()
    {
        this.eventlist = new Array();
    }
    , registerEvent : function(element, eventName, handler)
    {
        var event = new Array(element, eventName, handler);
        this.eventlist.push(event);
        Event.observe(element, eventName, handler);
    }
    , deregisterAllEvents : function()
    {
        this.eventlist.each(this.stopEvent);
        this.eventlist = new Array();
    }
    , stopEvent : function(item)
    {
        if(item == null)
        {
            return;
        }
        var obj = $(item[0]);
        if( ! obj)
        {
            return;
        }
        Event.stopObserving(item[0], item[1], item[2])
    }
    , deregisterEventsFromItem : function(itemID)
    {
        for(var i = 0; i < this.eventlist.length; i ++ )
        {
            if(this.eventlist[i] != null && this.eventlist[i][0] == itemID)
            {
                this.stopEvent(this.eventlist[i]);
                this.eventlist[i] = null;
            }
        }
    }
}
;
var EventActions = Class.create();
EventActions.prototype =
{
    initialize : function()
    {
    }
    , eventActions : function()
    {
        this.istyping = false;
        this.registered = false
    }
    , setIsTyping : function(bool)
    {
        this.istyping = bool;
    }
    , getIsTyping : function()
    {
        return this.istyping;
    }
    , isEmpty : function(element)
    {
        if(element.getValue().strip() != '' && element.getValue() != null)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
    , targetelement : function(event)
    {
        return(event.srcElement ? event.srcElement : (event.target ? event.target : event.currentTarget));
    }
    , timedcallback : function(fnc)
    {
        if( ! this.registered)
        {
            this.registered = true;
            var cb = this.callback.bind(this, fnc);
            setTimeout(cb, 500);
        }
    }
    , callback : function(fnc)
    {
        if(this.istyping)
        {
            this.istyping = false;
            var cb = this.callback.bind(this, fnc);
            setTimeout(cb, 500);
        }
        else
        {
            fnc();
            this.registered = false;
            this.istyping = false;
        }
    }
}
;
var STBEventActions = Class.create();
STBEventActions.prototype = Object.extend(new EventActions(),
{
    initialize : function()
    {
        this.om = new OntologyModifier();
        this.keyUpEvent = null;
        this.pendingIndicator = null;
    }
    , onKeyUp : function(event)
    {
        this.setIsTyping(true);
        var key = event.which || event.keyCode;
        if(key == Event.KEY_RETURN)
        {
            var elem = $(event.target);
            if(elem.type == 'a')
            {
                return true;
            }
            var tabIndex = elem.getAttribute("tabIndex");
            if( ! tabIndex)
            {
                return false;
            }
            tabIndex = tabIndex * 1 + 1;
            var div = elem.up('div');
            var children = div.descendants();
            for(var i = 0; i < children.length; ++ i)
            {
                var child = children[i];
                var ti = child.getAttribute("tabIndex");
                if(ti && ti * 1 == tabIndex)
                {
                    if(child.disabled == true || ! child.visible())
                    {
                        tabIndex ++ ;
                    }
                    else
                    {
                        child.focus();
                        break;
                    }
                }
            }
            return false;
        }
        this.keyUpEvent = event;
        this.timedcallback(this.delayedKeyUp.bind(this));
    }
    , onBlur : function(event)
    {
        var target = $(event.target);
        var oldValue = target.getAttribute("smwOldValue");
        if(oldValue && oldValue == target.value)
        {
            return;
        }
        target.setAttribute("smwOldValue", target.value);
        if(this.checkIfEmpty(target) == false)
        {
            this.handleCheck(target);
        }
        this.doFinalCheck(target);
    }
    , onClick : function(event)
    {
        var target = $(event.target);
        if(target.type == 'radio')
        {
            this.doFinalCheck(target);
        }
    }
    , onChange : function(event)
    {
        var target = $(event.target);
        if(this.checkIfEmpty(target) == false)
        {
            this.handleCheck(target);
        }
        this.handleChange(target);
        this.doFinalCheck(target);
    }
    , initialCheck : function(target)
    {
        var children = target.descendants();
        var elem;
        for(var i = 0, len = children.length; i < len; ++ i)
        {
            elem = children[i];
            var oldValue = elem.getAttribute("smwOldValue");
            if( ! oldValue || oldValue != elem.value)
            {
                if(this.checkIfEmpty(elem) == false)
                {
                    this.handleCheck(elem);
                }
                elem.setAttribute("smwOldValue", elem.value);
            }
        }
        this.doFinalCheck(elem);
    }
    , delayedKeyUp : function()
    {
        var target = $(this.keyUpEvent.target);
        var oldValue = target.getAttribute("smwOldValue");
        if(oldValue && oldValue == target.value)
        {
            return;
        }
        target.setAttribute("smwOldValue", target.value);
        if(this.checkIfEmpty(target) == false)
        {
            this.handleCheck(target);
        }
        this.doFinalCheck(target);
    }
    , checkIfEmpty : function(target)
    {
        var value = target.value;
        if(target.type == 'select-one')
        {
            value = target.options[target.selectedIndex].text;
        }
        var empty = value == "";
        var cie = target.getAttribute("smwCheckEmpty");
        if( ! cie)
        {
            return empty;
        }
        var actions = this.parseConditional("empty", cie);
        if(actions)
        {
            this.performActions(empty ? actions[0] : actions[1], target);
        }
        return empty;
    }
    , handleCheck : function(target)
    {
        var check = target.getAttribute("smwCheckType");
        if( ! check)
        {
            return;
        }
        var type = check;
        var actions = "";
        var pos = check.indexOf(":");
        if(pos != - 1)
        {
            type = check.substring(0, pos);
            actions = check.substring(pos + 1);
        }
        type = type.toLowerCase();
        if(type.indexOf("regex") == 0)
        {
            var regexStr = check.match(/regex\s*=\s*(.*?):\s*valid\s*\?/);
            if(regexStr)
            {
                var regex = new RegExp(regexStr[1]);
                pos = check.search(/:\s*valid\s*\?/);
                actions = check.substring(pos + 1);
                this.checkWithRegEx(target.value, regex, actions, target);
            }
        }
        else
        {
            switch(type)
            {
                case 'integer' :
                this.checkWithRegEx(target.value, / ^ \d + $ / , actions, target);
                break;
                case 'float' :
                this.checkWithRegEx(target.value, / ^ [ + - ] ? \d + (\.\d + ) ? ([Ee][ + - ] ? \d + ) ? $ / , actions, target);
                break;
                case 'category' :
                case 'property' :
                this.handleSchemaCheck(type, check, target);
                break;
            }
        }
    }
    , handleChange : function(target)
    {
        var changeActions = target.getAttribute("smwChanged");
        if( ! changeActions)
        {
            return;
        }
        changeActions = changeActions.match(/\s*\((.*?)\)\s*$/);
        if(changeActions)
        {
            this.performActions(changeActions[1], target);
        }
    }
    , doFinalCheck : function(target)
    {
        var parentDiv = target.up('div');
        if( ! parentDiv)
        {
            return;
        }
        var allValidCndtl = parentDiv.getAttribute("smwAllValid");
        if(allValidCndtl)
        {
            var children = parentDiv.descendants();
            var allValid = true;
            for(var i = 0, len = children.length; i < len; ++ i)
            {
                var elem = children[i];
                var valid = elem.getAttribute("smwValid");
                if(valid)
                {
                    if(valid == "false")
                    {
                        allValid = false;
                    }
                    else if(valid != "true")
                    {
                        var qPos = valid.indexOf('?');
                        var func = valid;
                        var cond = null;
                        if(qPos > - 1)
                        {
                            func = valid.substring(0, qPos);
                            cond = this.parseConditional(func, valid);
                        }
                        valid = eval(func + '("'+elem.id+'")');
                        if(cond)
                        {
                            this.performActions(valid ? cond[0] : cond[1], elem);
                        }
                        if( ! valid)
                        {
                            allValid = false;
                        }
                    }
                }
            }
            var c = this.parseConditional("allValid", allValidCndtl);
            this.performActions(allValid ? c[0] : c[1], parentDiv);
        }
    }
    , checkWithRegEx : function(value, regex, conditional, target)
    {
        var valid = value.match(regex);
        var c = this.parseConditional("valid", conditional);
        this.performActions(valid ? c[0] : c[1], target);
    }
    , handleSchemaCheck : function(type, check, target)
    {
        var value = target.value;
        var checkName;
        switch(type)
        {
            case 'category' :
            checkName = gLanguage.getMessage('CATEGORY') + value;
            break;
            case 'property' :
            checkName = gLanguage.getMessage('PROPERTY') + value;
            break;
        }
        if(checkName)
        {
            this.showPendingIndicator(target);
            this.om.existsArticle(checkName, this.ajaxCbSchemaCheck.bind(this), value, [type, check], target.id);
        }
    }
    , ajaxCbSchemaCheck : function(pageName, exists, title, param, elementID)
    {
        this.hidePendingIndicator();
        var check = param[1];
        var pos = check.indexOf(":");
        if(pos != - 1)
        {
            var conditional = check.substring(pos + 1);
            var actions = this.parseConditional("exists", conditional);
            if(actions)
            {
                this.performActions(exists ? actions[0] : actions[1], $(elementID))
            }
        }
        this.doFinalCheck($(elementID));
    }
    , parseConditional : function(name, conditional)
    {
        var regex = new RegExp("\\s*" + name + "\\s*\\?\\s*\\(([^)]*)\\)\\s*:\\s*\\(([^)]*)\\)");
        var parts = conditional.match(regex);
        if(parts)
        {
            return[parts[1], parts[2]];
        }
        return null;
    }
    , performActions : function(actions, element)
    {
        var allActions = actions.split(",");
        for(var i = 0, len = allActions.length; i < len; i ++ )
        {
            var actionAndParam = allActions[i].split(":");
            var act = "";
            var param = "";
            if(actionAndParam.length > 0)
            {
                act = actionAndParam[0].match(/^\s*(.*?)\s*$/);
                if(act)
                {
                    act = act[1];
                }
            }
            if(actionAndParam.length > 1)
            {
                param = actionAndParam[1].match(/^\s*(.*?)\s*$/);
                if(param)
                {
                    param = param[1];
                }
            }
            this.performSingleAction(act.toLowerCase(), param, element);
        }
    }
    , performSingleAction : function(action, parameter, element)
    {
        switch(action)
        {
            case 'color' :
            element.setStyle(
            {
                background : parameter
            }
            );
            break;
            case 'show' :
            var tbc = smw_ctbHandler.findContainer(parameter);
            tbc.show(parameter, true);
            break;
            case 'hide' :
            var tbc = smw_ctbHandler.findContainer(parameter);
            tbc.show(parameter, false);
            break;
            case 'call' :
            eval(parameter + '("'+element.id+'")');
            break;
            case 'showmessage' :
            var msgElem = $(element.id + '-msg');
            if(msgElem)
            {
                var msg = gLanguage.getMessage(parameter);
                var value = element.value;
                msg = msg.replace(/\$c/g, value);
                var tbc = smw_ctbHandler.findContainer(msgElem);
                tbc.replace(msgElem.id, tbc.createText(msgElem.id, msg, '', true));
                tbc.show(msgElem.id, true);
            }
            break;
            case 'hidemessage' :
            var msgElem = $(element.id + '-msg');
            if(msgElem)
            {
                var tbc = smw_ctbHandler.findContainer(msgElem.id);
                tbc.show(msgElem.id, false);
            }
            break;
            case 'valid' :
            element.setAttribute("smwValid", parameter);
            break;
            case 'attribute' :
            var attrValue = parameter.split("=");
            if(attrValue && attrValue.length == 2)
            {
                element.setAttribute(attrValue[0], attrValue[1]);
            }
            break;
        }
    }
    , showPendingIndicator : function(onElement)
    {
        this.hidePendingIndicator();
        this.pendingIndicator = new OBPendingIndicator($(onElement));
        this.pendingIndicator.show();
    }
    , hidePendingIndicator : function()
    {
        if(this.pendingIndicator != null)
        {
            this.pendingIndicator.hide();
            this.pendingIndicator = null;
        }
    }
}
);
var gSTBEventActions = new STBEventActions();

// SMW_Container.js
// under GPL - License; Copyright (c) 2007 Ontoprise GmbH
var ContainerToolBar = Class.create();
ContainerToolBar.prototype =
{
    initialize : function(id, tabindex, frameworkcontainer)
    {
        this.id = id;
        this.startindex = tabindex;
        this.lastindex = tabindex;
        this.cointainerlist = new Array();
        this.frameworkcontainer = frameworkcontainer;
        this.sandglass = new OBPendingIndicator();
        this.eventManager = new EventManager();
        if(smw_ctbHandler)
        {
            smw_ctbHandler.addContainer(this.id, this);
        }
    }
    , showSandglass : function(element)
    {
        this.sandglass.hide();
        this.sandglass.show(element);
    }
    , hideSandglass : function()
    {
        this.sandglass.hide();
    }
    , createContainerBody : function(attributes)
    {
        var header = '<div id="'+this.id+'-box" ' + attributes + '>';
        var footer = '</div>';
        this.frameworkcontainer.setContent(header + footer);
        this.frameworkcontainer.contentChanged();
    }
    , createInput : function(id, description, initialContent, deleteCallback, attributes, visibility)
    {
        var containercontent = '<table class="stb-table stb-input-table '+this.id+'-table '+this.id+'-input-table"' + (visibility ? '' : 'style="display:none;"') + 'id="'+this.id+'-table-'+id+'">' + '<tr>' + '<td class="stb-input-col1 '+this.id+'-input-col1">' + description + '</td>' + '<td class="stb-input-col2 '+this.id+'-input-col2">';
        if(deleteCallback)
        {
            containercontent += '<input class="wickEnabled stb-delinput '+this.id+'-delinput" ' + 'id="'+id+'" ' + attributes + ' type="text" ' + ' alignfloater="right" ' + 'value="'+initialContent+'" ' + 'tabindex="'+this.lastindex++ +'" />' + '</td>' + '<td class="stb-input-col3 '+this.id+'-input-col3">' + '<a href="javascript:'+deleteCallback+'">' + '<img src="'+wgScriptPath+'/extensions/SMWHalo/skins/redcross.gif"/>';
        }
        else
        {
            containercontent += '<input class="wickEnabled stb-input '+this.id+'-input" ' + 'id="'+id+'" ' + attributes + ' type="text" ' + ' alignfloater="right" ' + 'value="'+initialContent+'" ' + 'tabindex="'+this.lastindex++ +'" />';
        }
        containercontent += '</td>' + '</tr>' + '</table>';
        return containercontent;
    }
    , createDropDown : function(id, description, options, deleteCallback, selecteditem, attributes, visibility)
    {
        var containercontent = '<table class="stb-table stb-select-table '+this.id+'-table '+this.id+'-select-table"' + (visibility ? '' : 'style="display:none;"') + 'id="'+this.id+'-table-'+id+'">' + '<tr>' + '<td class="stb-select-col1 '+this.id+'-select-col1">' + description + '</td>' + '<td class="stb-select-col2 '+this.id+'-select-col2">';
        if(deleteCallback)
        {
            containercontent += '<select class="stb-delselect '+this.id+'-delselect" id="'+id+'"  ' + attributes + ' tabindex="'+this.lastindex++ +'">';
        }
        else
        {
            containercontent += '<select class="stb-select '+this.id+'-select" id="'+id+'"  ' + attributes + ' tabindex="'+this.lastindex++ +'">';
        }
        for(var i = 0; i < options.length; i ++ )
        {
            if(i != selecteditem)
            {
                containercontent += '<option>' + options[i] + '</option>'
            }
            else
            {
                containercontent += '<option selected="selected">' + options[i] + '</option>'
            }
        }
        containercontent += '</select>';
        if(deleteCallback)
        {
            containercontent += '</td>';
            containercontent += '<td class="stb-select-col3 '+this.id+'-select-col3">';
            ;
            containercontent += '<a href="javascript:'+deleteCallback+'"><img src="'+wgScriptPath+'/extensions/SMWHalo/skins/redcross.gif"/>';
        }
        containercontent += '</td>' + '</tr>' + '</table>';
        return containercontent;
    }
    , createRadio : function(id, description, options, selecteditem, attributes, visibility)
    {
        var containercontent = '<table class="stb-table stb-radio-table '+this.id+'-table '+this.id+'-radio-table"' + (visibility ? '' : 'style="display:none;"') + 'id="'+this.id+'-table-'+id+'">' + '<tr>' + '<td class="stb-radio-col1 '+this.id+'-input-radio1">' + description + '</td>' + '</tr><tr>' + '<td class="stb-radio-col2 '+this.id+'-radio-col2">' + '<form class="stb-radio '+this.id+'-radio" id="'+id+'"  ' + attributes + ' tabindex="'+this.lastindex++ +'">';
        for(var i = 0; i < options.length; i ++ )
        {
            if(i != selecteditem)
            {
                containercontent += '<input type="radio" name="'+id+'" value="'+options[i]+'">' + options[i] + '<br>'
            }
            else
            {
                containercontent += '<input type="radio" name="'+id+'" value="'+options[i]+'" checked="checked">' + options[i] + '</br>'
            }
        }
        containercontent += '</form>' + '</td>' + '</tr>' + '</table>'; return containercontent;
    }
    , createCheckBox : function(id, description, options, selecteditems, attributes, visibility)
    {
        var containercontent = '<table class="stb-table stb-checkbox-table '+this.id+'-table '+this.id+'-checkbox-table"' + (visibility ? '' : 'style="display:none;"') + 'id="'+this.id+'-table-'+id+'">' + '<tr>' + '<td class="stb-checkbox-col1 '+this.id+'-checkbox-col1">' + description + '</td>' + '</tr><tr>' + '<td class="stb-checkbox-col2 '+this.id+'-checkbox-col2">' + '<form class="stb-checkbox '+this.id+'-checkbox" id="'+id+'"  ' + attributes + '>';
        for(var i = 0; i < options.length; i ++ )
        {
            if( ! this.isInArray(i, selecteditems))
            {
                containercontent += '<input type="checkbox" ' + 'name="'+id+'"' + ' tabindex="'+this.lastindex++ +'"' + ' value="'+options[i]+'">' + options[i] + '<br>'
            }
            else
            {
                containercontent += '<input type="checkbox" ' + 'name="'+id+'"' + ' tabindex="'+this.lastindex++ +'" ' + ' value="'+options[i]+'" checked="checked">' + options[i] + '<br>'
            }
        }
        containercontent += '</form>' + '</td>' + '</tr>' + '</table>'; return containercontent;
    }
    , isInArray : function(item, array)
    {
        for(var j = 0; j < array.length; j ++ )
        {
            if(item == array[j])return true;
        }
        return false;
    }
    , createText : function(id, description, attributes, visibility)
    {
        var imgtag = '';
        var imgregex = /(\([iwe]\))(.*)/;
        var regexresult;
        if(regexresult = imgregex.exec(description))
        {
            switch(regexresult[1])
            {
                case(image = '(i)') :
                imgtag = '<img src="'+wgScriptPath+'/extensions/SMWHalo/skins/info.gif"/>';
                break;
                case(image = '(w)') :
                imgtag = '<img src="'+wgScriptPath+'/extensions/SMWHalo/skins/warning.png"/>';
                break;
                case(image = '(e)') :
                imgtag = '<img src="'+wgScriptPath+'/extensions/SMWHalo/skins/delete_icon.png"/>';
                break;
                default :
                imgtag = '';
            }
            description = regexresult[2];
        }
        var containercontent = '<table class="stb-table stb-text-table '+this.id+'-table '+this.id+'-text-table"' + (visibility ? '' : 'style="display:none;"') + 'id="'+this.id+'-table-'+id+'">' + '<tr>' + '<td class="stb-text-col1 '+this.id+'-text-col1">' + imgtag + '&#32<span class="stb-text '+this.id+'-radio" id="'+id+'" id="'+id+'" ' + attributes + '>' + description + '</span>' + '</td>' + '</tr>' + '</table>';
        return containercontent;
    }
    , createLink : function(id, functions, attributes, visibility)
    {
        var containercontent = '<table class="stb-table stb-link-table '+this.id+'-table '+this.id+'-link-table"' + (visibility ? '' : 'style="display:none;"') + 'id="'+this.id+'-table-'+id+'">';
        switch(functions.length)
        {
            case 1 :
            var tablelayout = 1;
            break;
            case 2 :
            var tablelayout = 2;
            break;
            case 4 :
            var tablelayout = 2;
            break;
            default :
            var tablelayout = 3;
        }
        var i = 0;
        for(var row = 0; row * tablelayout < functions.length;
        row ++ )
        {
            containercontent += '<tr class=" ln-tr-'+tablelayout+' '+this.id+'-ln-tr-'+tablelayout+' '+id+'-ln-tr-'+tablelayout+'">';
            for(var column = 0; column < tablelayout; column ++ )
            {
                containercontent += '<td class=" ln-td-'+tablelayout+'-'+column+' '+this.id+'-ln-td-'+tablelayout+'-'+column+' '+id+'-ln-td-'+tablelayout+'-'+column+'">';
                if(i < functions.length)
                {
                    switch(functions[i].length)
                    {
                        case 2 :
                        containercontent += '<a tabindex="'+this.lastindex++ +'" + href="javascript:'+functions[i][0]+'">' + functions[i][1] + '&#32</a>';
                        break;
                        case 3 :
                        containercontent += '<a tabindex="'+this.lastindex++ +'" + id="'+functions[i][2]+'" href="javascript:'+functions[i][0]+'">' + functions[i][1] + '&#32</a>';
                        break;
                        case 5 :
                        containercontent += '<a tabindex="'+this.lastindex++ +'" + id="'+functions[i][2]+'" href="javascript:'+functions[i][0]+'">' + functions[i][1] + '&#32</a>';
                        containercontent += '<span id="'+functions[i][4]+'" style="display: none;">' + functions[i][3] + '</span>';
                        break;
                        default :
                    }
                    i ++ ;
                }
                containercontent += '</td>';
            }
            containercontent += '</tr>';
        }
        containercontent += '</table>';
        return containercontent;
    }
    , changeID : function(obj, newID)
    {
        var oldID = obj.id;
        var table = $(this.id + '-table-' + oldID);
        if(table)
        {
            table.id = this.id + '-table-' + newID;
        }
        obj.id = newID;
    }
    , remove : function(element)
    {
        if(element instanceof Array)
        {
            for(var i = 0; i < element.length; i ++ )
            {
                $(this.id + '-table-' + element[i]).remove();
                this.eventManager.deregisterEventsFromItem(element[i]);
            }
        }
        else
        {
            $(this.id + '-table-' + element).remove();
            this.eventManager.deregisterEventsFromItem(element);
        }
        this.rebuildTabindex($(this.id + '-box'));
        autoCompleter.deregisterAllInputs();
        autoCompleter.registerAllInputs();
    }
    , rebuildTabindex : function(rootnode)
    {
        if(rootnode == null)return;
        this.lastindex = this.startindex;
        var elements = rootnode.descendants();
        elements.each(this.updateTabindex.bind(this));
    }
    , updateTabindex : function(element)
    {
        if(element.readAttribute('tabindex') != null && element.readAttribute('tabindex') != 0)
        {
            element.writeAttribute('tabindex', this.lastindex ++ );
        }
    }
    , append : function(content)
    {
        if(content instanceof Array)
        {
            for(var i = 0; i < content.length; i ++ )
            {
                new Insertion.Bottom($(this.id + '-box'), content[i]);
            }
        }
        else
        {
            new Insertion.Bottom($(this.id + '-box'), content);
        }
    }
    , insert : function(id, content)
    {
        if(content instanceof Array)
        {
            for(var i = 0; i < content.length; i ++ )
            {
                new Insertion.After($(this.id + '-table-' + id), content[i]);
            }
        }
        else
        {
            new Insertion.After($(this.id + '-table-' + id), content);
        }
    }
    , replace : function(id, content)
    {
        $(this.id + '-table-' + id).replace(content);
    }
    , show : function(id, visibility)
    {
        var obj = $(this.id + '-table-' + id);
        if( ! obj)
        {
            obj = $(id);
        }
        if(obj)
        {
            if(visibility)
            {
                obj.show();
            }
            else
            {
                obj.hide();
            }
        }
    }
    , finishCreation : function()
    {
        this.eventManager.deregisterAllEvents();
        var desc = $(this.id + '-box').descendants();
        for(var i = 0, len = desc.length; i < len; i ++ )
        {
            var elem = desc[i];
            if(elem.type == 'text')
            {
                this.eventManager.registerEvent(elem, 'blur', gSTBEventActions.onBlur.bindAsEventListener(gSTBEventActions));
                this.eventManager.registerEvent(elem, 'keyup', gSTBEventActions.onKeyUp.bindAsEventListener(gSTBEventActions));
            }
            else if(elem.type == 'radio')
            {
                this.eventManager.registerEvent(elem, 'click', gSTBEventActions.onClick.bindAsEventListener(gSTBEventActions));
                this.eventManager.registerEvent(elem, 'keyup', gSTBEventActions.onKeyUp.bindAsEventListener(gSTBEventActions));
            }
            else if(elem.type == 'select-one')
            {
                this.eventManager.registerEvent(elem, 'change', gSTBEventActions.onChange.bindAsEventListener(gSTBEventActions));
                this.eventManager.registerEvent(elem, 'keyup', gSTBEventActions.onKeyUp.bindAsEventListener(gSTBEventActions));
            }
            else if(elem.type == 'checkbox')
            {
                this.eventManager.registerEvent(elem, 'keyup', gSTBEventActions.onKeyUp.bindAsEventListener(gSTBEventActions));
            }
        }
        autoCompleter.deregisterAllInputs();
        autoCompleter.registerAllInputs();
        this.frameworkcontainer.contentChanged();
        this.rebuildTabindex($(this.id + '-box'));
    }
    , release : function()
    {
        this.eventManager.deregisterAllEvents();
        autoCompleter.deregisterAllInputs();
        autoCompleter.registerAllInputs();
    }
    , foo : function()
    {
        this.createContainerBody('');
        this.showSandglass($(this.id + '-box'));
        this.append(this.createInput(700, 'Test', '', 'alert(\'loeschmich\')', '', true));
        this.append(this.createText(701, 'Test', '', true));
        this.append(this.createDropDown(702, 'Test', ['Opt1', 'Opt2', 'Opt3'], 'alert(\'loeschmich\')', 2, '', true));
        this.insert('702', this.createRadio(703, 'Test', ['val1', 'val2', 'val3'], 2, '', true));
        this.append(this.createCheckBox(704, 'Test', ['val1', 'val2', 'val3', 'val4'], [1, 3], '', true));
        this.append(this.createLink(705, [['smwhgLogger.log(\'Testlog\',\'error\',\'log\');', 'Log']], '', true));
        this.append(this.createLink(706, [['alert(\'f1\')', 'function1'], ['alert(\'f2\')', 'function2', 'fid2']], '', true));
        this.append(this.createLink(707, [['alert(\'f1\')', 'function1'], ['alert(\'f2\')', 'function2', 'fid2'], ['alert(\'f3\')', 'function3', 'fid3', 'alt-f3', 'faltid3']], '', true));
        this.append(this.createLink(708, [['alert(\'f1\')', 'function1'], ['alert(\'f2\')', 'function2', 'fid2'], ['alert(\'f3\')', 'function3', 'fid3', 'alt-f3', 'faltid3'], ['alert(\'f4\')', 'function4']], '', true));
        this.append(this.createLink(709, [['alert(\'f1\')', 'function1'], ['alert(\'f2\')', 'function2', 'fid2'], ['alert(\'f3\')', 'function3', 'fid3', 'alt-f3', 'faltid3'], ['alert(\'f4\')', 'function5'], ['alert(\'f5\')', 'function5']], '', true));
        this.rebuildTabindex($(this.id + '-box'));
        this.hideSandglass();
        this.showSandglass($(this.id + '-box'));
        ctbHandler = new CTBHandler();
        ctbHandler.addContainer('category', this);
        var obj = smw_ctbHandler.findContainer('703');
        obj.replace('701', obj.createText(701, '(e) Testreplace', '', true));
        this.hideSandglass();
    }
}
;
var CTBHandler = Class.create();
CTBHandler.prototype =
{
    initialize : function()
    {
        this.containerlist = new Array();
    }
    , addContainer : function(containerid, containerobj)
    {
        var pos = this.posInArray(containerid);
        if(pos < 0)
        {
            this.containerlist.push([containerid, containerobj])
        }
        else
        {
            this.containerlist[pos] = [containerid, containerobj];
        }
    }
    , posInArray : function(containerid)
    {
        for(var j = 0; j < this.containerlist.length; j ++ )
        {
            if(containerid == this.containerlist[j][0])return j;
        }
        return - 1;
    }
    , findContainer : function(elementid)
    {
        var ancestorlist = $(elementid).ancestors();
        for(var j = 0; j < ancestorlist.length; j ++ )
        {
            var elementid = ancestorlist[j].readAttribute('id');
            var regexsearch = /(.*)-box/g;
            var regexresult;
            if(regexresult = regexsearch.exec(elementid))
            {
                var pos = this.posInArray(regexresult[1]);
                if(pos >= 0)return this.containerlist[pos][1];
            }
        }
        return false;
    }
}
;
var smw_ctbHandler = new CTBHandler();

// RH - this will kill the categories
// SMW_Category.js
// under GPL - License; Copyright (c) 2007 Ontoprise GmbH
// var SMW_CAT_CHECK_CATEGORY = 'smwCheckType="category: exists '+'? (color: lightgreen, hideMessage, valid:true) '+': (color: orange, showMessage:CATEGORY_DOES_NOT_EXIST, valid:true)" '; var SMW_CAT_CHECK_CATEGORY_IIE = 'smwCheckType="category:exists '+'? (color: red, showMessage:CATEGORY_ALREADY_EXISTS, valid:false) '+': (color: lightgreen, hideMessage, valid:true)" '; var SMW_CAT_CHECK_EMPTY = 'smwCheckEmpty="empty'+'? (color:red, showMessage:MUST_NOT_BE_EMPTY, valid:false) '+': (color:white, hideMessage)"'; var SMW_CAT_ALL_VALID = 'smwAllValid="allValid '+'? (show:cat-confirm, hide:cat-invalid) '+': (show:cat-invalid, hide:cat-confirm)"'; var SMW_CAT_HINT_CATEGORY = 'typeHint = "'+SMW_CATEGORY_NS+'" '; var SMW_CAT_SUB_SUPER_CHECK_CATEGORY = 'smwCheckType="category: exists '+'? (color: lightgreen, hideMessage, valid:true, attribute:catExists=true) '+': (color: orange, hideMessage, valid:true, attribute:catExists=false)" '; var SMW_CAT_SUB_SUPER_ALL_VALID = 'smwAllValid="allValid '+'? (call:catToolBar.createSubSuperLinks) '+': (call:catToolBar.createSubSuperLinks)"'; var CategoryToolBar = Class.create(); CategoryToolBar.prototype = {initialize : function(){this.genTB = new GenericToolBar(); this.toolbarContainer = null; this.showList = true; this.currentAction = ""; }, showToolbar : function(request){this.categorycontainer.setHeadline(gLanguage.getMessage('CATEGORIES')); this.wtp = new WikiTextParser(); this.om = new OntologyModifier(); this.fillList(true); }, callme : function(event){if(wgAction == "edit" && stb_control.isToolbarAvailable()){this.categorycontainer = stb_control.createDivContainer(CATEGORYCONTAINER, 0); this.showToolbar(); }}, fillList : function(forceShowList){if(forceShowList == true){this.showList = true; }if( ! this.showList){return; }this.wtp.initialize(); this.categorycontainer.setContent(this.genTB.createList(this.wtp.getCategories(), "category")); this.categorycontainer.contentChanged(); }, cancel : function(){smwhgLogger.log("", "STB-Categories", this.currentAction + "_canceled"); this.currentAction = ""; this.toolbarContainer.hideSandglass(); this.toolbarContainer.release(); this.toolbarContainer = null; this.fillList(true); }, createToolbar : function(attributes){if(this.toolbarContainer){this.toolbarContainer.release(); }this.toolbarContainer = new ContainerToolBar('category-content', 600, this.categorycontainer); var tb = this.toolbarContainer; tb.createContainerBody(attributes); return tb; }, addItem : function(){smwhgLogger.log($("cat-name").value, "STB-Categories", "annotate_added"); this.wtp.initialize(); var name = $("cat-name").value; this.wtp.addCategory(name, true); this.fillList(true); }, newItem : function(){var html; this.showList = false; this.currentAction = "annotate"; this.wtp.initialize(); var selection = this.wtp.getSelection(true); smwhgLogger.log(selection, "STB-Categories", "annotate_clicked"); var tb = this.createToolbar(SMW_CAT_ALL_VALID); tb.append(tb.createText('cat-help-msg', gLanguage.getMessage('ANNOTATE_CATEGORY'), '', true)); tb.append(tb.createInput('cat-name', gLanguage.getMessage('CATEGORY'), selection, '', SMW_CAT_CHECK_CATEGORY + SMW_CAT_CHECK_EMPTY + SMW_CAT_HINT_CATEGORY, true)); tb.append(tb.createText('cat-name-msg', gLanguage.getMessage('ENTER_NAME'), '', true)); var links = [['catToolBar.addItem()', gLanguage.getMessage('ADD'), 'cat-confirm', gLanguage.getMessage('INVALID_VALUES'), 'cat-invalid'], ['catToolBar.cancel()', gLanguage.getMessage('CANCEL')]]; tb.append(tb.createLink('cat-links', links, '', true)); tb.finishCreation(); gSTBEventActions.initialCheck($("category-content-box")); setTimeout("$('cat-name').focus();", 50); }, CreateSubSup : function(){var html; this.currentAction = "sub/super-category"; this.showList = false; this.wtp.initialize(); var selection = this.wtp.getSelection(true); smwhgLogger.log(selection, "STB-Categories", "sub/super-category_clicked"); var tb = this.createToolbar(SMW_CAT_SUB_SUPER_ALL_VALID); tb.append(tb.createText('cat-help-msg', gLanguage.getMessage('DEFINE_SUB_SUPER_CAT'), '', true)); tb.append(tb.createInput('cat-subsuper', gLanguage.getMessage('CATEGORY'), selection, '', SMW_CAT_SUB_SUPER_CHECK_CATEGORY + SMW_CAT_CHECK_EMPTY + SMW_CAT_HINT_CATEGORY, true)); tb.append(tb.createText('cat-subsuper-msg', gLanguage.getMessage('ENTER_NAME'), '', true)); tb.append(tb.createLink('cat-make-sub-link', [['catToolBar.createSubItem()', gLanguage.getMessage('CREATE_SUB'), 'cat-make-sub']], '', false)); tb.append(tb.createLink('cat-make-super-link', [['catToolBar.createSuperItem()', gLanguage.getMessage('CREATE_SUPER'), 'cat-make-super']], '', false)); var links = [['catToolBar.cancel()', gLanguage.getMessage('CANCEL')]]; tb.append(tb.createLink('cat-links', links, '', true)); tb.finishCreation(); gSTBEventActions.initialCheck($("category-content-box")); setTimeout("$('cat-subsuper').focus();", 50); }, createSubSuperLinks : function(elementID){var exists = $("cat-subsuper").getAttribute("catExists"); exists = (exists && exists == 'true'); var tb = this.toolbarContainer; var title = $("cat-subsuper").value; if(title == ''){$('cat-make-sub').hide(); $('cat-make-super').hide(); return; }var superContent; var sub; if( ! exists){sub = gLanguage.getMessage('CREATE_SUB_CATEGORY'); superContent = gLanguage.getMessage('CREATE_SUPER_CATEGORY'); }else{sub = gLanguage.getMessage('MAKE_SUB_CATEGORY'); superContent = gLanguage.getMessage('MAKE_SUPER_CATEGORY'); }sub = sub.replace(/\$-title/g, title); superContent = superContent.replace(/\$-title/g, title); if($('cat-make-sub').innerHTML != sub){var lnk = tb.createLink('cat-make-sub-link', [['catToolBar.createSuperItem(' + (exists ? 'false' : 'true') + ')', sub, 'cat-make-sub']], '', true); tb.replace('cat-make-sub-link', lnk); lnk = tb.createLink('cat-make-super-link', [['catToolBar.createSubItem()', superContent, 'cat-make-super']], '', true); tb.replace('cat-make-super-link', lnk); }}, createSubItem : function(){var name = $("cat-subsuper").value; smwhgLogger.log(wgTitle + ":" + name, "STB-Categories", "sub-category_created"); if(name == "" || name == null){alert(gLanguage.getMessage('INPUT_BOX_EMPTY')); return; }this.om.createSubCategory(name, ""); this.fillList(true); }, createSuperItem : function(openTargetArticle){if(openTargetArticle == undefined){openTargetArticle = true; }var name = $("cat-subsuper").value; smwhgLogger.log(name + ":" + wgTitle, "STB-Categories", "super-category_created"); if(name == "" || name == null){alert(gLanguage.getMessage('INPUT_BOX_EMPTY')); return; }this.om.createSuperCategory(name, "", openTargetArticle); this.fillList(true); }, changeItem : function(selindex){this.wtp.initialize(); var name = $("cat-name").value; var annotatedElements = this.wtp.getCategories(); if((selindex != null) && (selindex >= 0) && (selindex <= annotatedElements.length)){var oldName = annotatedElements[selindex].getName(); smwhgLogger.log(oldName + "->" + name, "STB-Categories", "edit_category_change"); annotatedElements[selindex].changeCategory(name); }this.fillList(true); }, deleteItem : function(selindex){this.wtp.initialize(); var annotatedElements = this.wtp.getCategories(); if((selindex != null) && (selindex >= 0) && (selindex <= annotatedElements.length)){var anno = annotatedElements[selindex]; smwhgLogger.log(anno.getName(), "STB-Categories", "edit_category_delete"); anno.remove(""); }this.fillList(true); }, newCategory : function(){var html; this.currentAction = "create"; this.showList = false; this.wtp.initialize(); var selection = this.wtp.getSelection(true); smwhgLogger.log(selection, "STB-Categories", "create_clicked"); var tb = this.createToolbar(SMW_CAT_ALL_VALID); tb.append(tb.createText('cat-help-msg', gLanguage.getMessage('CREATE_NEW_CATEGORY'), '', true)); tb.append(tb.createInput('cat-name', gLanguage.getMessage('CATEGORY'), selection, '', SMW_CAT_CHECK_CATEGORY_IIE + SMW_CAT_CHECK_EMPTY + SMW_CAT_HINT_CATEGORY, true)); tb.append(tb.createText('cat-name-msg', gLanguage.getMessage('ENTER_NAME'), '', true)); var links = [['catToolBar.createNewCategory()', gLanguage.getMessage('CREATE'), 'cat-confirm', gLanguage.getMessage('INVALID_NAME'), 'cat-invalid'], ['catToolBar.cancel()', gLanguage.getMessage('CANCEL')]]; tb.append(tb.createLink('cat-links', links, '', true)); tb.finishCreation(); gSTBEventActions.initialCheck($("category-content-box")); setTimeout("$('cat-name').focus();", 50); }, createNewCategory : function(){var catName = $("cat-name").value; smwhgLogger.log(catName, "STB-Categories", "create_added"); this.om.createCategory(catName, ""); this.fillList(true); }, getselectedItem : function(selindex){this.wtp.initialize(); var annotatedElements = this.wtp.getCategories(); if(selindex == null || selindex < 0 || selindex >= annotatedElements.length){return; }this.currentAction = "edit_category"; this.showList = false; smwhgLogger.log(annotatedElements[selindex].getName(), "STB-Categories", "edit_category_clicked"); var tb = this.createToolbar(SMW_CAT_ALL_VALID); tb.append(tb.createText('cat-help-msg', gLanguage.getMessage('CHANGE_ANNO_OF_CAT'), '', true)); tb.append(tb.createInput('cat-name', gLanguage.getMessage('CATEGORY'), annotatedElements[selindex].getName(), '', SMW_CAT_CHECK_CATEGORY + SMW_CAT_CHECK_EMPTY + SMW_CAT_HINT_CATEGORY, true)); tb.append(tb.createText('cat-name-msg', gLanguage.getMessage('ENTER_NAME'), '', true)); var links = [['catToolBar.changeItem(' + selindex + ')', gLanguage.getMessage('CHANGE'), 'cat-confirm', gLanguage.getMessage('INVALID_NAME'), 'cat-invalid'], ['catToolBar.deleteItem(' + selindex + ')', gLanguage.getMessage('DELETE')], ['catToolBar.cancel()', gLanguage.getMessage('CANCEL')]]; tb.append(tb.createLink('cat-links', links, '', true)); tb.finishCreation(); gSTBEventActions.initialCheck($("category-content-box")); annotatedElements[selindex].select(); setTimeout("$('cat-name').focus();", 50); }}; var catToolBar = new CategoryToolBar(); Event.observe(window, 'load', catToolBar.callme.bindAsEventListener(catToolBar));

// SMW_Relation.js
// under GPL - License; Copyright (c) 2007 Ontoprise GmbH
var RelationToolBar = Class.create();
var SMW_REL_CHECK_PROPERTY = 'smwCheckType="property: exists '+'? (color: lightgreen, hideMessage, valid:true) '+': (color: orange, showMessage:PROPERTY_DOES_NOT_EXIST, valid:true)" ';
var SMW_REL_CHECK_PROPERTY_UPDATE_SCHEMA = 'smwCheckType="property: exists '+'? (color: lightgreen, hideMessage, valid:true, call:relToolBar.updateSchema) '+': (color: orange, showMessage:PROPERTY_DOES_NOT_EXIST, valid:true)" ';
var SMW_REL_SUB_SUPER_CHECK_PROPERTY = 'smwCheckType="property: exists '+'? (color: lightgreen, hideMessage, valid:true, attribute:propExists=true) '+': (color: orange, hideMessage, valid:true, attribute:propExists=false)" ';
var SMW_REL_CHECK_PROPERTY_IIE = 'smwCheckType="property: exists '+'? (color: red, showMessage:PROPERTY_ALREADY_EXISTS, valid:false) '+': (color: lightgreen, hideMessage, valid:true)" ';
var SMW_REL_CHECK_CATEGORY = 'smwCheckType="category: exists '+'? (color: lightgreen, hideMessage, valid:true) '+': (color: orange, showMessage:CATEGORY_DOES_NOT_EXIST, valid:true)" ';
var SMW_REL_CHECK_EMPTY = 'smwCheckEmpty="empty'+'? (color:red, showMessage:MUST_NOT_BE_EMPTY, valid:false) '+': (color:white, hideMessage)"';
var SMW_REL_CHECK_EMPTY_NEV = 'smwCheckEmpty="empty'+'? (color:red, showMessage:MUST_NOT_BE_EMPTY, valid:false) '+': (color:white, hideMessage, valid:true)"';
var SMW_REL_CHECK_EMPTY_WIE = 'smwCheckEmpty="empty'+'? (color:orange, showMessage:VALUE_IMPROVES_QUALITY) '+': (color:white, hideMessage)"';
var SMW_REL_NO_EMPTY_SELECTION = 'smwCheckEmpty="empty'+'? (color:red, showMessage:SELECTION_MUST_NOT_BE_EMPTY, valid:false) '+': (color:white, hideMessage, valid:true)"';
var SMW_REL_ALL_VALID = 'smwAllValid="allValid '+'? (show:rel-confirm, hide:rel-invalid) '+': (show:rel-invalid, hide:rel-confirm)"';
var SMW_REL_SUB_SUPER_ALL_VALID = 'smwAllValid="allValid '+'? (call:relToolBar.createSubSuperLinks) '+': (call:relToolBar.createSubSuperLinks)"';
var SMW_REL_CHECK_PART_OF_RADIO = 'smwValid="relToolBar.checkPartOfRadio"';
var SMW_REL_HINT_CATEGORY = 'typeHint = "'+SMW_CATEGORY_NS+'" ';
var SMW_REL_HINT_PROPERTY = 'typeHint="'+SMW_PROPERTY_NS+'" ';
var SMW_REL_HINT_INSTANCE = 'typeHint="'+SMW_INSTANCE_NS+'" ';
RelationToolBar.prototype =
{
    initialize : function()
    {
        this.genTB = new GenericToolBar();
        this.toolbarContainer = null;
        this.showList = true;
        this.currentAction = "";
    }
    , showToolbar : function()
    {
        this.relationcontainer.setHeadline(gLanguage.getMessage('PROPERTIES'));
        this.wtp = new WikiTextParser();
        this.om = new OntologyModifier();
        this.fillList(true);
    }
    , callme : function(event)
    {
        if(wgAction == "edit" && stb_control.isToolbarAvailable())
        {
            this.relationcontainer = stb_control.createDivContainer(RELATIONCONTAINER, 0);
            this.showToolbar();
        }
    }
    , fillList : function(forceShowList)
    {
        if(forceShowList == true)
        {
            this.showList = true;
        }
        if( ! this.showList)
        {
            return;
        }
        this.wtp.initialize();
        this.relationcontainer.setContent(this.genTB.createList(this.wtp.getRelations(), "relation"));
        this.relationcontainer.contentChanged();
    }
    , cancel : function()
    {
        smwhgLogger.log("", "STB-Properties", this.currentAction + "_canceled");
        this.currentAction = "";
        this.toolbarContainer.hideSandglass();
        this.toolbarContainer.release();
        this.toolbarContainer = null;
        this.fillList(true);
    }
    , createToolbar : function(attributes)
    {
        if(this.toolbarContainer)
        {
            this.toolbarContainer.release();
        }
        this.toolbarContainer = new ContainerToolBar('relation-content', 700, this.relationcontainer);
        var tb = this.toolbarContainer;
        tb.createContainerBody(attributes);
        return tb;
    }
    , addItem : function()
    {
        this.wtp.initialize();
        var name = $("rel-name").value;
        var value = this.getRelationValue();
        var text = $("rel-show").value;
        smwhgLogger.log(name + ':' + value, "STB-Properties", "annotate_added");
        if(name == "" || name == null)
        {
            alert(gLanguage.getMessage('INPUT_BOX_EMPTY'));
            return;
        }
        this.wtp.addRelation(name, value, text);
        this.fillList(true);
    }
    , getRelationValue : function()
    {
        var i = 0;
        var value = "";
        while($("rel-value-" + i) != null)
        {
            value += $("rel-value-" + i).value + ";";
            i ++ ;
        }
        value = value.substr(0, value.length - 1);
        return value;
    }
    , newItem : function()
    {
        var html;
        this.wtp.initialize();
        this.showList = false;
        this.currentAction = "annotate";
        var selection = this.wtp.getSelection(true);
        smwhgLogger.log(selection, "STB-Properties", "annotate_clicked");
        var tb = this.createToolbar(SMW_REL_ALL_VALID);
        tb.append(tb.createText('rel-help_msg', gLanguage.getMessage('ANNOTATE_PROPERTY'), '', true));
        tb.append(tb.createInput('rel-name', gLanguage.getMessage('PROPERTY'), '', '', SMW_REL_CHECK_PROPERTY_UPDATE_SCHEMA + SMW_REL_CHECK_EMPTY + SMW_REL_HINT_PROPERTY, true));
        tb.append(tb.createText('rel-name-msg', gLanguage.getMessage('ENTER_NAME'), '', true));
        tb.append(tb.createInput('rel-value-0', gLanguage.getMessage('PAGE'), selection, '', SMW_REL_CHECK_EMPTY_NEV + SMW_REL_HINT_INSTANCE, true));
        tb.append(tb.createText('rel-value-0-msg', gLanguage.getMessage('ANNO_PAGE_VALUE'), '', true));
        tb.append(tb.createInput('rel-show', gLanguage.getMessage('SHOW'), '', '', '', true));
        var links = [['relToolBar.addItem()', gLanguage.getMessage('ADD'), 'rel-confirm', gLanguage.getMessage('INVALID_VALUES'), 'rel-invalid'], ['relToolBar.cancel()', gLanguage.getMessage('CANCEL')]];
        tb.append(tb.createLink('rel-links', links, '', true));
        tb.finishCreation();
        gSTBEventActions.initialCheck($("relation-content-box"));
        setTimeout("$('rel-name').focus();", 50);
    }
    , updateSchema : function(elementID)
    {
        relToolBar.toolbarContainer.showSandglass(elementID);
        sajax_do_call('smwfRelationSchemaData', [$('rel-name').value], relToolBar.updateNewItem.bind(relToolBar));
    }
    , updateNewItem : function(request)
    {
        relToolBar.toolbarContainer.hideSandglass();
        if(request.status != 200)
        {
            return;
        }
        var arity = 2;
        var parameterNames = ["Page"];
        if(request.responseText != 'noSchemaData')
        {
            var schemaData = GeneralXMLTools.createDocumentFromString(request.responseText);
            arity = parseInt(schemaData.documentElement.getAttribute("arity"));
            parameterNames = [];
            for(var i = 0, n = schemaData.documentElement.childNodes.length;
            i < n;
            i ++ )
            {
                parameterNames.push(schemaData.documentElement.childNodes[i].getAttribute("name"));
            }
        }
        var selection = this.wtp.getSelection(true);
        var tb = this.toolbarContainer;
        var i = 0;
        var removeElements = new Array();
        var found = true;
        var oldValues = [];
        while(found)
        {
            found = false;
            var elem = $('rel-value-' + i);
            if(elem)
            {
                oldValues.push($('rel-value-' + i).value);
                removeElements.push('rel-value-' + i);
                found = true;
            }
            elem = $('rel-value-' + i + '-msg');
            if(elem)
            {
                removeElements.push('rel-value-' + i + '-msg');
                found = true;
            }
            ++ i;
        }
        tb.remove(removeElements);
        for(var i = 0; i < arity - 1; i ++ )
        {
            insertAfter = (i == 0) ? ($('rel-replace-all') ? 'rel-replace-all' : 'rel-name-msg') : 'rel-value-' + (i - 1) + '-msg';
            var value = (i == 0) ? ((oldValues.length > 0) ? oldValues[0] : selection) : ((oldValues.length > i) ? oldValues[i] : '');
            tb.insert(insertAfter, tb.createInput('rel-value-' + i, parameterNames[i], value, '', SMW_REL_CHECK_EMPTY_NEV + (parameterNames[i] == "Page" ? SMW_REL_HINT_INSTANCE : ""), true));
            tb.insert('rel-value-' + i, tb.createText('rel-value-' + i + '-msg', gLanguage.getMessage('ANNO_PAGE_VALUE'), '', true));
            selection = "";
        }
        tb.finishCreation();
        gSTBEventActions.initialCheck($("relation-content-box"));
    }
    , CreateSubSup : function()
    {
        var html;
        this.showList = false;
        this.currentAction = "sub/super-category";
        this.wtp.initialize();
        var selection = this.wtp.getSelection(true);
        smwhgLogger.log(selection, "STB-Properties", "sub/super-property_clicked");
        var tb = this.createToolbar(SMW_REL_SUB_SUPER_ALL_VALID);
        tb.append(tb.createText('rel-help-msg', gLanguage.getMessage('DEFINE_SUB_SUPER_PROPERTY'), '', true));
        tb.append(tb.createInput('rel-subsuper', gLanguage.getMessage('PROPERTY'), selection, '', SMW_REL_SUB_SUPER_CHECK_PROPERTY + SMW_REL_CHECK_EMPTY + SMW_REL_HINT_PROPERTY, true));
        tb.append(tb.createText('rel-subsuper-msg', gLanguage.getMessage('ENTER_NAME'), '', true));
        tb.append(tb.createLink('rel-make-sub-link', [['relToolBar.createSubItem()', gLanguage.getMessage('CREATE_SUB'), 'rel-make-sub']], '', false));
        tb.append(tb.createLink('rel-make-super-link', [['relToolBar.createSuperItem()', gLanguage.getMessage('CREATE_SUPER'), 'rel-make-super']], '', false));
        var links = [['relToolBar.cancel()', gLanguage.getMessage('CANCEL')]];
        tb.append(tb.createLink('rel-links', links, '', true));
        tb.finishCreation();
        gSTBEventActions.initialCheck($("relation-content-box"));
        setTimeout("$('rel-subsuper').focus();", 50);
    }
    , createSubSuperLinks : function(elementID)
    {
        var exists = $("rel-subsuper").getAttribute("propExists");
        exists = (exists && exists == 'true');
        var tb = this.toolbarContainer;
        var title = $("rel-subsuper").value;
        if(title == '')
        {
            $('rel-make-sub').hide();
            $('rel-make-super').hide();
            return;
        }
        var superContent;
        var sub;
        if( ! exists)
        {
            sub = gLanguage.getMessage('CREATE_SUB_PROPERTY');
            superContent = gLanguage.getMessage('CREATE_SUPER_PROPERTY');
        }
        else
        {
            sub = gLanguage.getMessage('MAKE_SUB_PROPERTY');
            superContent = gLanguage.getMessage('MAKE_SUPER_PROPERTY');
        }
        sub = sub.replace(/\$-title/g, title);
        superContent = superContent.replace(/\$-title/g, title);
        if($('rel-make-sub').innerHTML != sub)
        {
            var lnk = tb.createLink('rel-make-sub-link', [['relToolBar.createSuperItem(' + (exists ? 'false' : 'true') + ')', sub, 'rel-make-sub']], '', true);
            tb.replace('rel-make-sub-link', lnk);
            lnk = tb.createLink('rel-make-super-link', [['relToolBar.createSubItem()', superContent, 'rel-make-super']], '', true);
            tb.replace('rel-make-super-link', lnk);
        }
    }
    , createSubItem : function(openTargetArticle)
    {
        if(openTargetArticle == undefined)
        {
            openTargetArticle = true;
        }
        var name = $("rel-subsuper").value;
        smwhgLogger.log(wgTitle + ":" + name, "STB-Properties", "sub-property_created");
        if(name == "" || name == null)
        {
            alert(gLanguage.getMessage('INPUT_BOX_EMPTY'));
            return;
        }
        this.om.createSubProperty(name, "", openTargetArticle);
        this.fillList(true);
    }
    , createSuperItem : function(openTargetArticle)
    {
        if(openTargetArticle == undefined)
        {
            openTargetArticle = true;
        }
        var name = $("rel-subsuper").value;
        smwhgLogger.log(name + ":" + wgTitle, "STB-Properties", "super-property_created");
        if(name == "" || name == null)
        {
            alert(gLanguage.getMessage('INPUT_BOX_EMPTY'));
            return;
        }
        this.om.createSuperProperty(name, "", openTargetArticle);
        this.fillList(true);
    }
    , newRelation : function()
    {
        var html;
        gDataTypes.refresh();
        this.showList = false;
        this.currentAction = "create";
        this.wtp.initialize();
        var selection = this.wtp.getSelection(true);
        smwhgLogger.log(selection, "STB-Properties", "create_clicked");
        var domain = (wgNamespaceNumber == 14) ? wgTitle : "";
        var tb = this.createToolbar(SMW_REL_ALL_VALID);
        tb.append(tb.createText('rel-help-msg', gLanguage.getMessage('CREATE_NEW_PROPERTY'), '', true));
        tb.append(tb.createInput('rel-name', gLanguage.getMessage('PROPERTY'), selection, '', SMW_REL_CHECK_PROPERTY_IIE + SMW_REL_CHECK_EMPTY + SMW_REL_HINT_PROPERTY, true));
        tb.append(tb.createText('rel-name-msg', gLanguage.getMessage('ENTER_NAME'), '', true));
        tb.append(tb.createInput('rel-domain', gLanguage.getMessage('DOMAIN'), domain, '', SMW_REL_CHECK_CATEGORY + SMW_REL_CHECK_EMPTY_WIE + SMW_REL_HINT_CATEGORY, true));
        tb.append(tb.createText('rel-domain-msg', gLanguage.getMessage('ENTER_DOMAIN'), '', true));
        tb.append(tb.createInput('rel-range-0', gLanguage.getMessage('RANGE'), '', "relToolBar.removeRangeOrType('rel-range-0')", SMW_REL_CHECK_CATEGORY + SMW_REL_CHECK_EMPTY_WIE + SMW_REL_HINT_CATEGORY, true));
        tb.append(tb.createText('rel-range-0-msg', gLanguage.getMessage('ENTER_RANGE'), '', true));
        var links = [['relToolBar.createNewRelation()', gLanguage.getMessage('CREATE'), 'rel-confirm', gLanguage.getMessage('INVALID_VALUES'), 'rel-invalid'], ['relToolBar.cancel()', gLanguage.getMessage('CANCEL')]];
        tb.append(tb.createLink('rel-links', links, '', true));
        links = [['relToolBar.addRangeInput()', gLanguage.getMessage('ADD_RANGE')], ['relToolBar.addTypeInput()', gLanguage.getMessage('ADD_TYPE')]];
        tb.append(tb.createLink('rel-add-links', links, '', true));
        tb.finishCreation();
        gSTBEventActions.initialCheck($("relation-content-box"));
        setTimeout("$('rel-name').focus();", 50);
    }
    , addRangeInput : function()
    {
        var i = 0;
        while($('rel-range-' + i) != null)
        {
            i ++ ;
        }
        var tb = this.toolbarContainer;
        var insertAfter = (i == 0) ? 'rel-domain-msg' : $('rel-range-' + (i - 1) + '-msg') ? 'rel-range-' + (i - 1) + '-msg' : 'rel-range-' + (i - 1);
        tb.insert(insertAfter, tb.createInput('rel-range-' + i, gLanguage.getMessage('RANGE'), '', "relToolBar.removeRangeOrType('rel-range-"+i+"')", SMW_REL_CHECK_CATEGORY + SMW_REL_CHECK_EMPTY_WIE + SMW_REL_HINT_CATEGORY, true));
        tb.insert('rel-range-' + i, tb.createText('rel-range-' + i + '-msg', gLanguage.getMessage('ENTER_RANGE'), '', true));
        tb.finishCreation();
        gSTBEventActions.initialCheck($("relation-content-box"));
    }
    , addTypeInput : function()
    {
        var i = 0;
        while($('rel-range-' + i) != null)
        {
            i ++ ;
        }
        var tb = this.toolbarContainer;
        var insertAfter = (i == 0) ? 'rel-domain-msg' : $('rel-range-' + (i - 1) + '-msg') ? 'rel-range-' + (i - 1) + '-msg' : 'rel-range-' + (i - 1);
        tb.insert(insertAfter, tb.createDropDown('rel-range-' + i, gLanguage.getMessage('TYPE'), this.getDatatypeOptions(), "relToolBar.removeRangeOrType('rel-range-"+i+"')", 0, 'isAttributeType="true" ' + SMW_REL_NO_EMPTY_SELECTION, true));
        tb.insert('rel-range-' + i, tb.createText('rel-range-' + i + '-msg', gLanguage.getMessage('ENTER_TYPE'), '', true));
        tb.finishCreation();
        gSTBEventActions.initialCheck($("relation-content-box"));
    }
    , getDatatypeOptions : function()
    {
        var options = new Array();
        var builtinTypes = gDataTypes.getBuiltinTypes();
        var userTypes = gDataTypes.getUserDefinedTypes();
        options = builtinTypes.concat([""], userTypes);
        return options;
    }
    , removeRangeOrType : function(id)
    {
        var rangeOrTypeInput = $(id);
        if(rangeOrTypeInput != null)
        {
            var tb = this.toolbarContainer;
            var rowsAfterRemoved = rangeOrTypeInput.parentNode.parentNode.nextSibling;
            var idOfValueInput = rangeOrTypeInput.getAttribute('id');
            var i = parseInt(idOfValueInput.substr(idOfValueInput.length - 1, idOfValueInput.length));
            tb.remove(id);
            if($(id + '-msg'))
            {
                tb.remove(id + '-msg');
            }
            id = idOfValueInput.substr(0, idOfValueInput.length - 1);
            var obj;
            while((obj = $(id + ++ i)))
            {
                var delBtn = obj.up().down('a');
                if(delBtn)
                {
                    var action = delBtn.getAttribute("href");
                    var regex = new RegExp(id + i);
                    action = action.replace(regex, id + (i - 1));
                    delBtn.setAttribute("href", action);
                }
                tb.changeID(obj, id + (i - 1));
                if((obj = $(id + i + '-msg')))
                {
                    tb.changeID(obj, id + (i - 1) + '-msg');
                }
            }
            tb.finishCreation();
            gSTBEventActions.initialCheck($("relation-content-box"));
        }
    }
    , createNewRelation : function()
    {
        var relName = $("rel-name").value;
        if(relName == "" || relName == null)
        {
            alert(gLanguage.getMessage('INPUT_BOX_EMPTY'));
            return;
        }
        var i = 0;
        var rangesAndTypes = new Array();
        while($('rel-range-' + i) != null)
        {
            if($('rel-range-' + i).getAttribute("isAttributeType") == "true")
            {
                rangesAndTypes.push(gLanguage.getMessage('TYPE') + $('rel-range-' + i).value);
            }
            else
            {
                var range = $('rel-range-' + i).value;
                rangesAndTypes.push(range ? gLanguage.getMessage('CATEGORY') + range : "");
            }
            i ++ ;
        }
        var signature = "";
        for(i = 0; i < rangesAndTypes.length; i ++ )
        {
            signature += (rangesAndTypes[i]) ? rangesAndTypes[i] : "Type:Page";
            if(i < rangesAndTypes.length - 1)
            {
                signature += ', ';
            }
        }
        smwhgLogger.log(relName + ":" + signature, "STB-Properties", "create_added");
        this.om.createRelation(relName, gLanguage.getMessage('CREATE_PROPERTY'), $("rel-domain").value, rangesAndTypes);
        this.fillList(true);
    }
    , changeItem : function(selindex)
    {
        this.wtp.initialize();
        var relName = $("rel-name").value;
        var value = this.getRelationValue();
        var text = $("rel-show").value;
        if(relName == "" || relName == null)
        {
            alert(gLanguage.getMessage('INPUT_BOX_EMPTY'));
            return;
        }
        var annotatedElements = this.wtp.getRelations();
        if((selindex != null) && (selindex >= 0) && (selindex <= annotatedElements.length))
        {
            var relation = annotatedElements[selindex];
            var oldName = relation.getName();
            var oldValues = relation.getValue();
            smwhgLogger.log(oldName + ":" + oldValues + "->" + relName + ":" + value, "STB-Properties", "edit_annotation_change");
            if($("rel-replace-all") && $("rel-replace-all").down('input').checked == true)
            {
                var relations = this.wtp.getRelation(relation.getName());
                for(var i = 0, len = relations.length; i < len; i ++ )
                {
                    relations[i].rename(relName);
                }
                editAreaLoader.execCommand(editAreaName, "resync_highlight(true)");
            }
            relation.rename(relName);
            relation.changeValue(value);
            relation.changeRepresentation(text);
        }
        this.fillList(true);
    }
    , deleteItem : function(selindex)
    {
        this.wtp.initialize();
        var annotatedElements = this.wtp.getRelations();
        if((selindex != null) && (selindex >= 0) && (selindex <= annotatedElements.length))
        {
            var anno = annotatedElements[selindex];
            var replText = (anno.getRepresentation() != "") ? anno.getRepresentation() : (anno.getValue() != "" ? anno.getValue() : "");
            smwhgLogger.log(anno.getName() + ":" + anno.getValue(), "STB-Properties", "edit_annotation_delete");
            anno.remove(replText);
        }
        this.fillList(true);
    }
    , newPart : function()
    {
        var html;
        this.wtp.initialize();
        var selection = this.wtp.getSelection(true);
        smwhgLogger.log(selection, "STB-Properties", "haspart_clicked");
        this.showList = false;
        this.currentAction = "haspart";
        var path = wgArticlePath;
        var dollarPos = path.indexOf('$1');
        if(dollarPos > 0)
        {
            path = path.substring(0, dollarPos);
        }
        var poLink = "<a href='"+wgServer+path+gLanguage.getMessage('PROP_HAS_PART')+"' " + "target='blank'> " + gLanguage.getMessage('HAS_PART') + "</a>";
        var bsuLink = "<a href='"+wgServer+path+gLanguage.getMessage('PROP_HBSU')+"' " + "target='blank'> " + gLanguage.getMessage('HBSU') + "</a>";
        var tb = this.createToolbar(SMW_REL_ALL_VALID);
        tb.append(tb.createText('rel-help-msg', gLanguage.getMessage('DEFINE_PART_OF'), '', true));
        tb.append(tb.createText('rel-help-msg', wgTitle, '', true));
        tb.append(tb.createRadio('rel-partof', '', [poLink, bsuLink], - 1, SMW_REL_CHECK_PART_OF_RADIO, true));
        tb.append(tb.createInput('rel-name', gLanguage.getMessage('OBJECT'), selection, '', SMW_REL_CHECK_EMPTY_NEV + SMW_REL_HINT_INSTANCE, true));
        tb.append(tb.createText('rel-name-msg', '', '', true));
        tb.append(tb.createInput('rel-show', gLanguage.getMessage('SHOW'), '', '', '', true));
        var links = [['relToolBar.addPartOfRelation()', gLanguage.getMessage('ADD'), 'rel-confirm', gLanguage.getMessage('INVALID_VALUES'), 'rel-invalid'], ['relToolBar.cancel()', gLanguage.getMessage('CANCEL')]];
        tb.append(tb.createLink('rel-links', links, '', true));
        tb.finishCreation();
        gSTBEventActions.initialCheck($("relation-content-box"));
        setTimeout("$('rel-partof').focus();", 50);
    }
    , checkPartOfRadio : function(element)
    {
        var element = $(element).elements["rel-partof"];
        if(element[0].checked == true || element[1].checked == true)
        {
            return true;
        }
        return false;
    }
    , addPartOfRelation : function()
    {
        var element = $('rel-partof').elements["rel-partof"];
        var poType = "";
        if(element[0].checked == true)
        {
            poType = gLanguage.getMessage('HAS_PART');
        }
        else if(element[1].checked == true)
        {
            poType = gLanguage.getMessage('HBSU');
        }
        var obj = $("rel-name").value;
        smwhgLogger.log(poType + ":" + obj, "STB-Properties", "haspart_added");
        if(obj == "")
        {
            alert(gLanguage.getMessage('NO_OBJECT_FOR_POR'));
        }
        var show = $("rel-show").value;
        this.wtp.initialize();
        this.wtp.addRelation(poType, obj, show, false);
        this.fillList(true);
    }
    , getselectedItem : function(selindex)
    {
        this.wtp.initialize();
        var html;
        var renameAll = "";
        var annotatedElements = this.wtp.getRelations();
        if(selindex == null || selindex < 0 || selindex >= annotatedElements.length)
        {
            return;
        }
        this.showList = false;
        this.currentAction = "editannotation";
        var relation = annotatedElements[selindex];
        smwhgLogger.log(relation.getName() + ":" + relation.getValue(), "STB-Properties", "editannotation_clicked");
        var tb = this.createToolbar(SMW_REL_ALL_VALID);
        var relations = this.wtp.getRelation(relation.getName());
        if(relations.length > 1)
        {
            renameAll = tb.createCheckBox('rel-replace-all', '', [gLanguage.getMessage('RENAME_ALL_IN_ARTICLE')], [], '', true);
        }
        function getSchemaCallback(request)
        {
            tb.hideSandglass();
            if(request.status != 200)
            {
                alert(gLanguage.getMessage('RETRIEVE_SCHEMA_DATA'));
                return;
            }
            var parameterNames = [];
            if(request.responseText != 'noSchemaData')
            {
                var schemaData = GeneralXMLTools.createDocumentFromString(request.responseText);
                parameterNames = [];
                for(var i = 0, n = schemaData.documentElement.childNodes.length;
                i < n;
                i ++ )
                {
                    parameterNames.push(schemaData.documentElement.childNodes[i].getAttribute("name"));
                }
            }
            else
            {
                for(var i = 0; i < relation.getArity() - 1; i ++ )
                {
                    parameterNames.push("Value");
                }
            }
            var valueInputs = new Array();
            for(var i = 0; i < relation.getArity() - 1; i ++ )
            {
                var parName = (parameterNames.length > i) ? parameterNames[i] : "Page";
                var typeCheck = 'smwCheckType="'+parName.toLowerCase()+': valid'+'? (color: lightgreen, hideMessage, valid:true)'+': (color: red, showMessage:INVALID_FORMAT_OF_VALUE, valid:false)" ';
                var obj = tb.createInput('rel-value-' + i, parName, relation.getSplitValues()[i], '', typeCheck + (parName == "Page" ? SMW_REL_HINT_INSTANCE : ""), true);
                valueInputs.push(obj);
                obj = tb.createText('rel-value-' + i + '-msg', '', '', true);
                valueInputs.push(obj);
            }
            tb.append(tb.createInput('rel-name', gLanguage.getMessage('PROPERTY'), relation.getName(), '', SMW_REL_CHECK_PROPERTY_UPDATE_SCHEMA + SMW_REL_CHECK_EMPTY + SMW_REL_HINT_PROPERTY, true));
            tb.append(tb.createText('rel-name-msg', '', '', true));
            if(renameAll != '')
            {
                tb.append(renameAll);
            }
            tb.append(valueInputs);
            tb.append(tb.createInput('rel-show', gLanguage.getMessage('SHOW'), relation.getRepresentation(), '', '', true));
            var links = [['relToolBar.changeItem(' + selindex + ')', gLanguage.getMessage('CHANGE'), 'rel-confirm', gLanguage.getMessage('INVALID_VALUES'), 'rel-invalid'], ['relToolBar.deleteItem(' + selindex + ')', gLanguage.getMessage('DELETE')], ['relToolBar.cancel()', gLanguage.getMessage('CANCEL')]];
            tb.append(tb.createLink('rel-links', links, '', true));
            tb.finishCreation();
            gSTBEventActions.initialCheck($("relation-content-box"));
            setTimeout("$('rel-name').focus();", 50);
        }
        ;
        tb.append(tb.createText('rel-help-msg', gLanguage.getMessage('CHANGE_PROPERTY'), '', true));
        if(relation.getName().strip() != "")
        {
            this.toolbarContainer.showSandglass('rel-help-msg');
            sajax_do_call('smwfRelationSchemaData', [relation.getName()], getSchemaCallback.bind(this));
        }
    }
}
;
var relToolBar = new RelationToolBar();
Event.observe(window, 'load', relToolBar.callme.bindAsEventListener(relToolBar));

// SMW_Properties.js
// under GPL - License; Copyright (c) 2007 Ontoprise GmbH
var DOMAIN_HINT = "Has domain hint";
var RANGE_HINT = "Has range hint";
var HAS_TYPE = "has type";
var MAX_CARDINALITY = "Has max cardinality";
var MIN_CARDINALITY = "Has min cardinality";
var INVERSE_OF = "Is inverse of";
var TRANSITIVE_RELATION = "Transitive relations";
var SYMMETRICAL_RELATION = "Symmetrical relations";
var SMW_PRP_ALL_VALID = 'smwAllValid="allValid '+'? (show:prop-confirm, hide:prop-invalid) '+': (show:prop-invalid, hide:prop-confirm)"';
var SMW_PRP_CHECK_MAX_CARD = 'smwValid="propToolBar.checkMaxCard"';
var SMW_PRP_CHECK_CATEGORY = 'smwCheckType="category: exists '+'? (color: lightgreen, hideMessage, valid:true) '+': (color: orange, showMessage:CATEGORY_DOES_NOT_EXIST, valid:true)" ';
var SMW_PRP_CHECK_PROPERTY = 'smwCheckType="property: exists '+'? (color: lightgreen, hideMessage, valid:true) '+': (color: orange, showMessage:PROPERTY_DOES_NOT_EXIST, valid:true)" ';
var SMW_PRP_HINT_CATEGORY = 'typeHint = "'+SMW_CATEGORY_NS+'" ';
var SMW_PRP_HINT_PROPERTY = 'typeHint="'+SMW_PROPERTY_NS+'" ';
var SMW_PRP_CHECK_EMPTY = 'smwCheckEmpty="empty'+'? (color:red, showMessage:MUST_NOT_BE_EMPTY, valid:false) '+': (color:white, hideMessage)"';
var SMW_PRP_CHECK_EMPTY_WIE = 'smwCheckEmpty="empty'+'? (color:orange, showMessage:VALUE_IMPROVES_QUALITY) '+': (color:white, hideMessage)"';
var SMW_PRP_CHECK_EMPTY_VIE = 'smwCheckEmpty="empty'+'? (color:white, hideMessage, valid:true) '+': ()"';
var SMW_PRP_NO_EMPTY_SELECTION = 'smwCheckEmpty="empty'+'? (color:red, showMessage:SELECTION_MUST_NOT_BE_EMPTY, valid:false) '+': (color:white, hideMessage, valid:true)"';
var PRP_NARY_CHANGE_LINKS = [['propToolBar.addType()', gLanguage.getMessage('ADD_TYPE'), 'prp-add-type-lnk'], ['propToolBar.addRange()', gLanguage.getMessage('ADD_RANGE'), 'prp-add-range-lnk']];
var PRP_APPLY_LINK = [['propToolBar.apply()', 'Apply', 'prop-confirm', gLanguage.getMessage('INVALID_VALUES'), 'prop-invalid'], ['propToolBar.cancel()', gLanguage.getMessage('CANCEL')]];
var PropertiesToolBar = Class.create();
PropertiesToolBar.prototype =
{
    initialize : function()
    {
        this.genTB = new GenericToolBar();
        this.toolbarContainer = null;
        this.pendingIndicator = null;
        this.isRelation = true;
        this.isNAry = false;
        this.numOfParams = 0;
        this.prpNAry = 0;
    }
    , showToolbar : function(request)
    {
        if(this.propertiescontainer == null)
        {
            return;
        }
        this.propertiescontainer.setHeadline(gLanguage.getMessage('PROPERTY_PROPERTIES'));
        this.wtp = new WikiTextParser();
        this.om = new OntologyModifier();
        this.createContent();
    }
    , callme : function(event)
    {
        if(wgAction == "edit" && (wgNamespaceNumber == 100 || wgNamespaceNumber == 102) && stb_control.isToolbarAvailable())
        {
            this.propertiescontainer = stb_control.createDivContainer(PROPERTIESCONTAINER, 0);
            setTimeout("propToolBar.showToolbar();", 1);
        }
    }
    , createContent : function()
    {
        if(this.propertiescontainer == null)
        {
            return;
        }
        this.wtp.initialize();
        var type = this.wtp.getRelation(HAS_TYPE);
        var domain = this.wtp.getRelation(DOMAIN_HINT);
        var range = this.wtp.getRelation(RANGE_HINT);
        var maxCard = this.wtp.getRelation(MAX_CARDINALITY);
        var minCard = this.wtp.getRelation(MIN_CARDINALITY);
        var inverse = this.wtp.getRelation(INVERSE_OF);
        var transitive = this.wtp.getCategory(TRANSITIVE_RELATION);
        var symmetric = this.wtp.getCategory(SYMMETRICAL_RELATION);
        var changed = this.hasAnnotationChanged([type, domain, range, maxCard, minCard, inverse], [transitive, symmetric]);
        if( ! changed)
        {
            return;
        }
        if(this.toolbarContainer)
        {
            this.toolbarContainer.release();
        }
        this.toolbarContainer = new ContainerToolBar('properties-content', 800, this.propertiescontainer);
        var tb = this.toolbarContainer;
        tb.createContainerBody(SMW_PRP_ALL_VALID);
        if(type)
        {
            type = type[0].getValue();
            type = type.charAt(5).toLowerCase() + type.substring(6);
        }
        else
        {
            type = "page";
        }
        this.isRelation = (type == "page");
        if(domain == null)
        {
            domain = "";
        }
        else
        {
            domain = domain[0].getValue();
            if(domain.indexOf(gLanguage.getMessage('CATEGORY')) == 0)
            {
                domain = domain.substring(9);
            }
        }
        if(range == null)
        {
            range = "";
        }
        else
        {
            range = range[0].getValue();
            if(range.indexOf(gLanguage.getMessage('CATEGORY')) == 0)
            {
                range = range.substring(9);
            }
        }
        if(maxCard == null)
        {
            maxCard = "";
        }
        else
        {
            maxCard = maxCard[0].getValue();
        }
        if(minCard == null)
        {
            minCard = "";
        }
        else
        {
            minCard = minCard[0].getValue();
        }
        if(inverse == null)
        {
            inverse = "";
        }
        else
        {
            inverse = inverse[0].getValue();
            if(inverse.indexOf(gLanguage.getMessage('PROPERTY')) == 0)
            {
                inverse = inverse.substring(9);
            }
        }
        transitive = (transitive != null) ? "checked" : "";
        symmetric = (symmetric != null) ? "checked" : "";
        var tb = this.toolbarContainer;
        tb.append(tb.createInput('prp-domain', gLanguage.getMessage('DOMAIN'), domain, '', SMW_PRP_CHECK_CATEGORY + SMW_PRP_CHECK_EMPTY_WIE + SMW_PRP_HINT_CATEGORY, true));
        tb.append(tb.createText('prp-domain-msg', '', '', true));
        tb.append(tb.createInput('prp-range', gLanguage.getMessage('RANGE'), range, '', SMW_PRP_CHECK_CATEGORY + SMW_PRP_CHECK_EMPTY_WIE + SMW_PRP_HINT_CATEGORY, true));
        tb.append(tb.createText('prp-range-msg', '', '', true));
        tb.append(tb.createInput('prp-inverse-of', gLanguage.getMessage('INVERSE_OF'), inverse, '', SMW_PRP_CHECK_PROPERTY + SMW_PRP_HINT_PROPERTY + SMW_PRP_CHECK_EMPTY_VIE, true));
        tb.append(tb.createText('prp-inverse-of-msg', '', '', true));
        tb.append(this.createTypeSelector("prp-attr-type", "prpSelection", false, type, '', 'smwChanged="(call:propToolBar.attrTypeChanged,call:propToolBar.enableWidgets)"' + SMW_PRP_NO_EMPTY_SELECTION));
        tb.append(tb.createInput('prp-min-card', gLanguage.getMessage('MIN_CARD'), minCard, '', SMW_PRP_CHECK_MAX_CARD, true));
        tb.append(tb.createText('prp-min-card-msg', '', '', true));
        tb.append(tb.createInput('prp-max-card', gLanguage.getMessage('MAX_CARD'), maxCard, '', SMW_PRP_CHECK_MAX_CARD, true));
        tb.append(tb.createText('prp-max-card-msg', '', '', true));
        tb.append(tb.createCheckBox('prp-transitive', '', [gLanguage.getMessage('TRANSITIVE')], [transitive == 'checked' ? 0 : - 1], 'name="transitive"', true));
        tb.append(tb.createCheckBox('prp-symmetric', '', [gLanguage.getMessage('SYMMETRIC')], [symmetric == 'checked' ? 0 : - 1], 'name="symmetric"', true));
        this.prpNAry = 0;
        this.numOfParams = 0;
        this.isNAry = false;
        var types = this.wtp.getRelation(HAS_TYPE);
        if(types)
        {
            types = types[0];
            this.isNAry = (type.indexOf(';') > 0);
        }
        if(this.isNAry)
        {
            types = types.getSplitValues();
            var ranges = this.wtp.getRelation(RANGE_HINT);
            var rc = 0;
            for(var i = 0, num = types.length; i < num; ++ i)
            {
                if(types[i] == gLanguage.getMessage('TYPE_PAGE'))
                {
                    var r = "";
                    if(ranges && rc < ranges.length)
                    {
                        r = ranges[rc ++ ].getValue();
                    }
                    if(r.indexOf(gLanguage.getMessage('CATEGORY')) == 0)
                    {
                        r = r.substring(9);
                    }
                    tb.append(tb.createInput('prp-nary-' + i, gLanguage.getMessage('RANGE'), r, 'propToolBar.removeRangeOrType(\'prp - nary - '+i+'\')', SMW_PRP_CHECK_CATEGORY + SMW_PRP_CHECK_EMPTY + SMW_PRP_HINT_CATEGORY, true));
                    tb.append(tb.createText('prp-nary-' + i + '-msg', '', '', true));
                    this.prpNAry ++ ;
                    this.numOfParams ++ ;
                }
                else
                {
                    var t = types[i];
                    if(t.indexOf(gLanguage.getMessage('TYPE')) == 0)
                    {
                        t = t.substring(5);
                        tb.append(this.createTypeSelector("prp-nary-" + i, "prpNaryType" + i, true, t, "propToolBar.removeRangeOrType('prp-nary-"+i+"')", SMW_PRP_NO_EMPTY_SELECTION));
                        this.prpNAry ++ ;
                        this.numOfParams ++ ;
                    }
                }
            }
        }
        tb.append(tb.createLink('prp-change-links', PRP_NARY_CHANGE_LINKS, '', true));
        tb.append(tb.createLink('prp-links', PRP_APPLY_LINK, '', true));
        tb.finishCreation();
        this.enableWidgets();
        gSTBEventActions.initialCheck($("properties-content-box"));
        setTimeout("$('prp-domain').focus();", 50);
    }
    , checkMaxCard : function(domID)
    {
        var maco = $('prp-max-card');
        var maxCard = maco.value;
        var mico = $('prp-min-card');
        var minCard = mico.value;
        gSTBEventActions.performSingleAction('color', 'white', mico); gSTBEventActions.performSingleAction('hidemessage', null, mico);
        gSTBEventActions.performSingleAction('color', 'white', maco); gSTBEventActions.performSingleAction('hidemessage', null, maco);
        if( ! maxCard && ! minCard)
        {
            return true;
        }
        var result = true;
        if(minCard != '')
        {
            minCard = minCard.match(/^\d+$/);
            if( ! minCard)
            {
                gSTBEventActions.performSingleAction('color', 'red', mico); gSTBEventActions.performSingleAction('showmessage', 'INVALID_FORMAT_OF_VALUE', mico);
                result = false;
            }
            else
            {
                minCard = minCard * 1;
                gSTBEventActions.performSingleAction('color', 'lightgreen', mico);
                gSTBEventActions.performSingleAction('hidemessage', '', mico);
            }
        }
        if(maxCard != '')
        {
            maxCard = maxCard.match(/^\d+$/);
            if( ! maxCard)
            {
                gSTBEventActions.performSingleAction('color', 'red', maco); gSTBEventActions.performSingleAction('showmessage', 'INVALID_FORMAT_OF_VALUE', maco);
                result = false;
            }
            else
            {
                maxCard = maxCard * 1;
                if(maxCard == 0)
                {
                    gSTBEventActions.performSingleAction('color', 'red', maco); gSTBEventActions.performSingleAction('showmessage', 'MAX_CARD_MUST_NOT_BE_0', maco);
                    result = false;
                }
                else
                {
                    gSTBEventActions.performSingleAction('color', 'lightgreen', maco);
                    gSTBEventActions.performSingleAction('hidemessage', '', maco);
                }
            }
        }
        if( ! result)
        {
            return false;
        }
        if(typeof(maxCard) == 'number' && typeof(minCard) == 'string')
        {
            gSTBEventActions.performSingleAction('color', 'red', mico); gSTBEventActions.performSingleAction('showmessage', 'SPECIFY_CARDINALITY', mico);
            result = false;
        }
        if(typeof(maxCard) == 'string' && typeof(minCard) == 'number')
        {
            gSTBEventActions.performSingleAction('color', 'red', maco); gSTBEventActions.performSingleAction('showmessage', 'SPECIFY_CARDINALITY', maco);
            result = false;
        }
        if( ! result)
        {
            return false;
        }
        if(minCard > maxCard)
        {
            gSTBEventActions.performSingleAction('color', 'red', mico); gSTBEventActions.performSingleAction('showmessage', 'MIN_CARD_INVALID', mico);
            return false;
        }
        return true;
    }
    , hasAnnotationChanged : function(relations, categories)
    {
        var changed = false;
        if( ! this.relValues)
        {
            changed = true;
            this.relValues = new Array(relations.length);
            this.catValues = new Array(categories.length);
        }
        for(var i = 0; i < relations.length; i ++ )
        {
            if( ! relations[i] && this.relValues[i])
            {
                changed = true;
                this.relValues[i] = null;
            }
            else if(relations[i])
            {
                var value = relations[i][0].annotation;
                if(this.relValues[i] != value)
                {
                    this.relValues[i] = value;
                    changed = true;
                }
            }
        }
        for(var i = 0; i < categories.length; i ++ )
        {
            if( ! categories[i] && this.catValues[i])
            {
                changed = true;
                this.catValues[i] = false;
            }
            else if(categories[i] && ! this.catValues[i])
            {
                this.catValues[i] = true;
                changed = true;
            }
        }
        return changed;
    }
    , addType : function()
    {
        var insertAfter = (this.numOfParams == 0) ? 'prp-symmetric' : "prp-nary-" + (this.prpNAry - 1) + '-msg';
        this.toolbarContainer.insert(insertAfter, this.createTypeSelector("prp-nary-" + this.prpNAry, "prpNaryType" + this.prpNAry, true, "", "propToolBar.removeRangeOrType('prp-nary-"+this.prpNAry+"')", SMW_PRP_NO_EMPTY_SELECTION));
        this.prpNAry ++ ;
        this.numOfParams ++ ;
        this.toolbarContainer.finishCreation();
        this.enableWidgets();
        gSTBEventActions.initialCheck($("properties-content-box"));
    }
    , addRange : function()
    {
        var insertAfter = (this.numOfParams == 0) ? 'prp-symmetric' : "prp-nary-" + (this.prpNAry - 1) + '-msg';
        var tb = this.toolbarContainer;
        tb.insert(insertAfter, tb.createInput('prp-nary-' + this.prpNAry, gLanguage.getMessage('RANGE'), "", 'propToolBar.removeRangeOrType(\'prp - nary - '+this.prpNAry+'\')', SMW_PRP_CHECK_CATEGORY + SMW_PRP_CHECK_EMPTY + SMW_PRP_HINT_CATEGORY, true));
        tb.insert('prp-nary-' + this.prpNAry, tb.createText('prp-nary-' + this.prpNAry + '-msg', '', '', true));
        this.prpNAry ++ ;
        this.numOfParams ++ ;
        this.toolbarContainer.finishCreation();
        this.enableWidgets();
        gSTBEventActions.initialCheck($("properties-content-box"));
    }
    , removeRangeOrType : function(domID)
    {
        this.toolbarContainer.remove(domID);
        this.toolbarContainer.remove(domID + '-msg');
        this.numOfParams -- ;
        if(domID == 'prp-nary-' + (this.prpNAry - 1))
        {
            while(this.prpNAry > 0)
            {
                -- this.prpNAry;
                if($('prp-nary-' + this.prpNAry))
                {
                    this.prpNAry ++ ;
                    break;
                }
            }
        }
        if(this.numOfParams == 0)
        {
            this.prpNAry = 0;
            this.isRelation = true;
            this.isNAry = false;
            var selector = $('prp-attr-type');
            var options = selector.options;
            for(var i = 0; i < options.length; i ++ )
            {
                if(options[i].value == 'page')
                {
                    selector.selectedIndex = i;
                    break;
                }
            }
            this.enableWidgets();
        }
        this.toolbarContainer.finishCreation();
        this.enableWidgets();
        gSTBEventActions.initialCheck($("properties-content-box"));
    }
    , attrTypeChanged : function(target)
    {
        target = $(target);
        if(target.id == 'prp-attr-type')
        {
            this.isNAry = target.value == 'n-ary';
            this.isRelation = target.value == 'page';
        }
    }
    , createTypeSelector : function(id, name, onlyTypes, type, deleteAction, attributes)
    {
        var closure = function()
        {
            var origTypeString = type;
            if(type)
            {
                type = type.toLowerCase();
                if(type.indexOf(';') > 0)
                {
                    type = 'n-ary';
                }
            }
            var typeFound = false;
            var builtinTypes = gDataTypes.getBuiltinTypes();
            var userTypes = gDataTypes.getUserDefinedTypes();
            var allTypes = builtinTypes.concat([""], onlyTypes ? [] : [gLanguage.getMessage('PAGE_TYPE'), gLanguage.getMessage('NARY_TYPE'), ""], userTypes);
            var selection = $(id);
            if(selection)
            {
                selection.length = allTypes.length;
            }
            var selIdx = - 1;
            for(var i = 0; i < allTypes.length; i ++ )
            {
                var lcTypeName = allTypes[i].toLowerCase();
                if(type == lcTypeName)
                {
                    typeFound = true;
                    if(selection)
                    {
                        selection.options[i] = new Option(allTypes[i], allTypes[i], true, true);
                    }
                    selIdx = i;
                }
                else
                {
                    if(selection)
                    {
                        selection.options[i] = new Option(allTypes[i], allTypes[i], false, false);
                    }
                }
            }
            if(type && type != gLanguage.getMessage('NARY_TYPE') && ! typeFound)
            {
                if(selection)
                {
                    selection.options[i] = new Option(origTypeString, origTypeString, true, true);
                }
                selIdx = allTypes.length;
                allTypes[allTypes.length] = origTypeString;
            }
            gSTBEventActions.initialCheck($(id).up());
            propToolBar.toolbarContainer.finishCreation();
            return[allTypes, selIdx];
        }
        ;
        var sel = [[gLanguage.getMessage('RETRIEVING_DATATYPES')], 0];
        if(gDataTypes.getUserDefinedTypes() == null || gDataTypes.getBuiltinTypes() == null || ! $(id))
        {
            gDataTypes.refresh(closure);
        }
        else
        {
            sel = closure();
        }
        if( ! deleteAction)
        {
            deleteAction = "";
        }
        if( ! attributes)
        {
            attributes = "";
        }
        var dropDown = this.toolbarContainer.createDropDown(id, gLanguage.getMessage('TYPE'), sel[0], deleteAction, sel[1], attributes + ' name="'+name+'"', true);
        dropDown += this.toolbarContainer.createText(id + '-msg', '', '', true);
        return dropDown;
    }
    , enableWidgets : function()
    {
        var tb = propToolBar.toolbarContainer;
        if(propToolBar.isRelation && ! propToolBar.isNAry)
        {
            $("prp-range").enable();
            $("prp-inverse-of").enable();
            $("prp-transitive").enable();
            $("prp-symmetric").enable();
        }
        else
        {
            $("prp-range").disable();
            $("prp-inverse-of").disable();
            $("prp-transitive").disable();
            $("prp-symmetric").disable();
        }
        if(propToolBar.isNAry)
        {
            $('prp-add-type-lnk').show();
            $('prp-add-range-lnk').show();
            $('prp-min-card').disable();
            $('prp-max-card').disable();
        }
        else
        {
            $('prp-add-type-lnk').hide();
            $('prp-add-range-lnk').hide();
            $('prp-min-card').enable();
            $('prp-max-card').enable();
        }
        for(var i = 0; i < propToolBar.prpNAry; i ++ )
        {
            var obj = $('prp-nary-' + i);
            if(obj)
            {
                if(propToolBar.isNAry)
                {
                    obj.enable();
                }
                else
                {
                    obj.disable();
                }
            }
        }
    }
    , cancel : function()
    {
        this.toolbarContainer.hideSandglass();
        this.relValues = null;
        this.catValues = null;
        this.createContent();
    }
    , apply : function()
    {
        this.wtp.initialize();
        var domain = $("prp-domain").value;
        var range = this.isRelation ? $("prp-range").value : null;
        var attrType = $("prp-attr-type").value;
        var inverse = this.isRelation ? $("prp-inverse-of").value : null;
        var minCard = this.isNAry ? null : $("prp-min-card").value;
        var maxCard = this.isNAry ? null : $("prp-max-card").value;
        var transitive = this.isRelation ? $("prp-transitive") : null;
        var symmetric = this.isRelation ? $("prp-symmetric") : null;
        domain = (domain != null && domain != "") ? gLanguage.getMessage('CATEGORY') + domain : null;
        range = (range != null && range != "") ? gLanguage.getMessage('CATEGORY') + range : null;
        attrType = (attrType != null && attrType != "") ? gLanguage.getMessage('TYPE') + attrType : null;
        inverse = (inverse != null && inverse != "") ? gLanguage.getMessage('PROPERTY') + inverse : null;
        minCard = (minCard != null && minCard != "") ? minCard : null;
        maxCard = (maxCard != null && maxCard != "") ? maxCard : null;
        var domainAnno = this.wtp.getRelation(DOMAIN_HINT);
        var rangeAnno = this.wtp.getRelation(RANGE_HINT);
        var attrTypeAnno = this.wtp.getRelation(HAS_TYPE);
        var maxCardAnno = this.wtp.getRelation(MAX_CARDINALITY);
        var minCardAnno = this.wtp.getRelation(MIN_CARDINALITY);
        var inverseAnno = this.wtp.getRelation(INVERSE_OF);
        var transitiveAnno = this.wtp.getCategory(TRANSITIVE_RELATION);
        var symmetricAnno = this.wtp.getCategory(SYMMETRICAL_RELATION);
        if(domainAnno != null)
        {
            if(domain == null)
            {
                domainAnno[0].remove("");
            }
            else
            {
                domainAnno[0].changeValue(domain);
            }
        }
        if(rangeAnno != null)
        {
            if(range == null)
            {
                rangeAnno[0].remove("");
            }
            else
            {
                rangeAnno[0].changeValue(range);
            }
            if( ! this.isNAry)
            {
                for(var i = 1, num = rangeAnno.length; i < num; i ++ )
                {
                    rangeAnno[i].remove("");
                }
            }
        }
        if(attrTypeAnno != null)
        {
            if(attrType == null)
            {
                attrTypeAnno[0].remove("");
            }
            else
            {
                attrTypeAnno[0].changeValue(attrType);
            }
        }
        if(maxCardAnno != null)
        {
            if(maxCard == null)
            {
                maxCardAnno[0].remove("");
            }
            else
            {
                maxCardAnno[0].changeValue(maxCard);
            }
        }
        if(minCardAnno != null)
        {
            if(minCard == null)
            {
                minCardAnno[0].remove("");
            }
            else
            {
                minCardAnno[0].changeValue(minCard);
            }
        }
        if(inverseAnno != null)
        {
            if(inverse == null)
            {
                inverseAnno[0].remove("");
            }
            else
            {
                inverseAnno[0].changeValue(inverse);
            }
        }
        if(transitiveAnno != null && (transitive == null || ! transitive.down('input').checked))
        {
            transitiveAnno.remove("");
        }
        if(symmetricAnno != null && (symmetric == null || ! symmetric.down('input').checked))
        {
            symmetricAnno.remove("");
        }
        if(domainAnno == null && domain != null)
        {
            this.wtp.addRelation(DOMAIN_HINT, domain, null, true);
        }
        if(rangeAnno == null && range != null)
        {
            this.wtp.addRelation(RANGE_HINT, range, null, true);
        }
        if(attrTypeAnno == null && attrType != null)
        {
            this.wtp.addRelation(HAS_TYPE, attrType, null, true);
        }
        if(maxCardAnno == null && maxCard != null)
        {
            this.wtp.addRelation(MAX_CARDINALITY, maxCard, null, true);
        }
        if(minCardAnno == null && minCard != null)
        {
            this.wtp.addRelation(MIN_CARDINALITY, minCard, null, true);
        }
        if(inverseAnno == null && inverse != null)
        {
            this.wtp.addRelation(INVERSE_OF, inverse, null, true);
        }
        if(transitive != null && transitive.down('input').checked && transitiveAnno == null)
        {
            this.wtp.addCategory(TRANSITIVE_RELATION, true);
        }
        if(symmetric != null && symmetric.down('input').checked && symmetricAnno == null)
        {
            this.wtp.addCategory(SYMMETRICAL_RELATION, true);
        }
        if(this.isNAry)
        {
            rangeAnno = this.wtp.getRelation(RANGE_HINT);
            if(rangeAnno)
            {
                for(var i = 0, num = rangeAnno.length; i < num; i ++ )
                {
                    rangeAnno[i].remove("");
                }
            }
            var typeString = "";
            for(var i = 0; i < this.prpNAry; i ++ )
            {
                var obj = $('prp-nary-' + i);
                if(obj)
                {
                    if(obj.tagName && obj.tagName == "SELECT")
                    {
                        typeString += gLanguage.getMessage('TYPE') + obj.value + ";";
                    }
                    else
                    {
                        var r = gLanguage.getMessage('CATEGORY') + obj.value;
                        typeString += gLanguage.getMessage('TYPE_PAGE') + ';';
                        this.wtp.addRelation(RANGE_HINT, r, null, true);
                    }
                }
            }
            if(typeString != "")
            {
                typeString = typeString.substring(0, typeString.length - 1);
                attrTypeAnno = this.wtp.getRelation(HAS_TYPE);
                if(attrTypeAnno != null)
                {
                    attrTypeAnno[0].changeValue(typeString);
                }
                else
                {
                    this.wtp.addRelation(HAS_TYPE, typeString, null, true);
                }
            }
        }
        editAreaLoader.execCommand(editAreaName, "resync_highlight(true)");
        this.createContent();
        this.refreshOtherTabs();
        smwhgLogger.log(wgTitle, "STB-PropertyProperties", "property_properties_changed");
    }
    , refreshOtherTabs : function()
    {
        relToolBar.fillList();
        catToolBar.fillList();
    }
}
;
var propToolBar = new PropertiesToolBar();
Event.observe(window, 'load', propToolBar.callme.bindAsEventListener(propToolBar));

// SMW_Refresh.js
// under GPL - License; Copyright (c) 2007 Ontoprise GmbH
var REFRESH_DELAY = 0.5;
var RefreshSemanticToolBar = Class.create();
RefreshSemanticToolBar.prototype =
{
    initialize : function()
    {
        this.userIsTyping = false;
        this.lastKeypress = 0;
        this.timeOffset = 0;
        this.contentChanged = false;
        this.wtp = null;
    }
    , register : function(event)
    {
        if(wgAction == "edit" && stb_control.isToolbarAvailable())
        {
            Event.observe('wpTextbox1', 'change', this.changed.bind(this));
            Event.observe('wpTextbox1', 'keyup', this.setUserIsTyping.bind(this));
            this.registerTimer();
            this.editboxtext = "";
        }
    }
    , changed : function()
    {
        this.contentChanged = true;
    }
    , refresh : function()
    {
        if(this.userIsTyping)
        {
            this.contentChanged = true;
            this.userIsTyping = false;
        }
        else if(this.contentChanged)
        {
            var t = new Date().getTime() - this.timeOffset;
            var dt = (this.lastKeypress != 0) ? t - this.lastKeypress : 0;
            if(dt > REFRESH_DELAY * 1000)
            {
                this.contentChanged = false;
                this.refreshToolBar();
            }
        }
    }
    , registerTimer : function()
    {
        this.periodicalTimer = new PeriodicalExecuter(this.refresh.bind(this), REFRESH_DELAY);
    }
    , setUserIsTyping : function(event)
    {
        if(typeof(event) == "undefined" || ! event.timeStamp)
        {
            this.lastKeypress = new Date().getTime();
        }
        else
        {
            this.lastKeypress = event.timeStamp;
        }
        if(this.timeOffset == 0)
        {
            this.timeOffset = new Date().getTime() - this.lastKeypress;
        }
        this.userIsTyping = true;
    }
    , refreshToolBar : function()
    {
        if(window.catToolBar)
        {
            catToolBar.fillList()
        }
        if(window.relToolBar)
        {
            relToolBar.fillList()
        }
        if(window.propToolBar)
        {
            propToolBar.createContent();
        }
        var saveButton = $('wpSave');
        if(saveButton)
        {
            if( ! this.wtp)
            {
                this.wtp = new WikiTextParser();
            }
            this.wtp.initialize();
            this.wtp.parseAnnotations();
            var error = this.wtp.getError();
            if(error == WTP_NO_ERROR)
            {
                saveButton.enable();
                if($('wpSaveWarning'))
                {
                    $('wpSaveWarning').remove();
                }
            }
            else
            {
                if( ! $('wpSaveWarning'))
                {
                    saveButton.disable();
                    new Insertion.Before(saveButton, '<div id="wpSaveWarning" ' + 'style="background-color:#ee0000;'+'color:white;'+'font-weight:bold;'+'text-align:left;">' + gLanguage.getMessage('UNMATCHED_BRACKETS') + '</div>');
                }
            }
            if(gEditInterface == null)
            {
                gEditInterface = new SMWEditInterface();
            }
            gEditInterface.focus();
        }
    }
}
;
var refreshSTB = new RefreshSemanticToolBar();
Event.observe(window, 'load', refreshSTB.register.bindAsEventListener(refreshSTB));

// SMW_FactboxType.js
// under GPL - License; Copyright (c) 2007 Ontoprise GmbH
function factboxTypeChanged(select, title)
{
    $('typeloader').show();
    var type = select.options[select.options.selectedIndex].value;
    sajax_do_call('smwgNewAttributeWithType', [title, type], refreshAfterTypeChange);
}
;
function refreshAfterTypeChange(request)
{
    window.location.href = location.href;
}

// CombinedSearch.js
// under GPL - License; Copyright (c) 2007 Ontoprise GmbH
var CombinedSearchContributor = Class.create();
CombinedSearchContributor.prototype =
{
    initialize : function()
    {
        this.queryPlaceholder = document.createElement("div");
        this.queryPlaceholder.setAttribute("id", "queryPlaceholder");
        this.queryPlaceholder.innerHTML = gLanguage.getMessage('ADD_COMB_SEARCH_RES');
        this.pendingElement = null;
        this.tripleSearchPendingElement = null;
    }
    , registerContributor : function()
    {
        if( ! stb_control.isToolbarAvailable())return;
        if(wgCanonicalSpecialPageName != 'Search' || wgCanonicalNamespace != 'Special')
        {
            return;
        }
        this.comsrchontainer = stb_control.createDivContainer(COMBINEDSEARCHCONTAINER, 0);
        this.comsrchontainer.setHeadline(gLanguage.getMessage('COMBINED_SEARCH'));
        this.comsrchontainer.setContent('<div id="csFoundEntities"></div>');
        this.comsrchontainer.contentChanged();
        var searchTerm = GeneralBrowserTools.getURLParameter("search");
        if($('stb_cont8-headline') == null)return;
        $("bodyContent").insertBefore(this.queryPlaceholder, $("bodyContent").firstChild);
        this.pendingElement = new OBPendingIndicator($('stb_cont8-headline'));
        this.tripleSearchPendingElement = new OBPendingIndicator($('queryPlaceholder'));
        if(searchTerm != undefined && searchTerm.strip() != '')
        {
            this.pendingElement.show();
            sajax_do_call('smwfCSDispatcher', [searchTerm], this.smwfCombinedSearchCallback.bind(this, "csFoundEntities"));
            this.tripleSearchPendingElement.show();
            sajax_do_call('smwfCSSearchForTriples', [searchTerm], this.smwfTripleSearchCallback.bind(this, "queryPlaceholder"));
        }
    }
    , smwfTripleSearchCallback : function(containerID, request)
    {
        this.tripleSearchPendingElement.hide();
        $(containerID).innerHTML = request.responseText;
    }
    , smwfCombinedSearchCallback : function(containerID, request)
    {
        this.pendingElement.hide();
        $(containerID).innerHTML = request.responseText;
        this.comsrchontainer.contentChanged();
    }
    , searchForAttributeValues : function(parts)
    {
        this.pendingElement.show($('cbsrch'));
        sajax_do_call('smwfCSAskForAttributeValues', [parts], this.smwfCombinedSearchCallback.bind(this, "queryPlaceholder"));
    }
    , navigateToOB : function(pageName, pageNS, ontoBrowserPath)
    {
        queryStr = "?entitytitle=" + pageName + (pageNS != "" ? "&ns=" + pageNS : "");
        var path = wgArticlePath.replace(/\$1/, ontoBrowserPath);
        smwhgLogger.log(pageName, "CS", "entity_opened_in_ob");
        window.open(wgServer + path + queryStr, "");
    }
    , navigateToEntity : function(pageName, pageNS)
    {
        var path = wgArticlePath.replace(/\$1/, pageNS + ":" + pageName);
        smwhgLogger.log(pageName, "CS", "entity_opened");
        window.open(wgServer + path, "");
    }
    , navigateToEdit : function(pageName, pageNS)
    {
        queryStr = "?action=edit";
        var path = wgArticlePath.replace(/\$1/, pageNS + ":" + pageName);
        smwhgLogger.log(pageName, "CS", "entity_opened_to_edit");
        window.open(wgServer + path + queryStr, "");
    }
}
;
var csContributor = new CombinedSearchContributor();
Event.observe(window, 'load', csContributor.registerContributor.bind(csContributor));

// SMWEditInterface.js
// under GPL - License; Copyright (c) 2007 Ontoprise GmbH
var editAreaName = "wpTextbox1";
if((wgAction == "edit") && skin == "ontoliteskin")
{
    if(getEditorCookie() == "on")editAreaLoader.init(
    {
        id : "wpTextbox1", syntax : "wiki", start_highlight : true, plugins : "SMW", allow_resize : "no", toolbar : "bold, italic, intlink, extlink, heading, img, media, formula, nowiki, signature, line, |, undo, redo, |, change_smooth_selection, highlight, reset_highlight, |, help", replace_tab_by_spaces : "0", EA_toggle_on_callback : "toggleEAOn", EA_toggle_off_callback : "toggleEAOff"
    }
    );
    else editAreaLoader.init(
    {
        id : "wpTextbox1", syntax : "wiki", start_highlight : true, plugins : "SMW", allow_resize : "no", toolbar : "bold, italic, intlink, extlink, heading, img, media, formula, nowiki, signature, line, |, undo, redo, |, change_smooth_selection, highlight, reset_highlight, |, help", replace_tab_by_spaces : "0", EA_toggle_on_callback : "toggleEAOn", EA_toggle_off_callback : "toggleEAOff", display : "later"
    }
    );
}
function trim(string)
{
    return string.replace(/(^\s+|\s+$)/g, "");
}
;
function changeEdit()
{
    $("wpTextbox1").value = editAreaLoader.getValue(editAreaName);
}
;
function toggleEAOn(id)
{
    document.getElementById("toolbar").style.display = "none";
    addSpacesForDisplay();
}
;
function toggleEAOff(id)
{
    document.getElementById("toolbar").style.display = "";
}
;
function addSpacesForDisplay()
{
    if(navigator.appName == "Microsoft Internet Explorer" && editAreaLoader.getValue(editAreaName) != "")
    {
        var lines = editAreaLoader.getValue(editAreaName).split("\n");
        var max = 0;
        var theLine = 0;
        var text = "";
        for(var i = 0; i < lines.length; i ++ )
        {
            if(lines[i].length > max)
            {
                max = lines[i].length;
                theLine = i;
            }
        }
        for(var i = 0; i < lines.length; i ++ )
        {
            if(i == theLine)
            {
                lines[i] = lines[i].substring(0, lines[i].length - 2);
                text = text + lines[i] + "         " + "\n";
            }
            else
            {
                text = text + lines[i];
            }
        }
        editAreaLoader.setValue(editAreaName, text)
    }
}
;
function getEditorCookie()
{
    var cookie = document.cookie;
    var length = cookie.length - 1;
    if(cookie.charAt(length) != ";")cookie += ";";
    var a = cookie.split(";");
    for(var i = 0; i < a.length; i ++ )
    {
        var cookiename = trim(a[i].substring(0, a[i].search('=')));
        var cookievalue = a[i].substring(a[i].search('=') + 1, a[i].length);
        if(cookiename == "smwUseAdvancedEditor")
        {
            return cookievalue;
        }
    }
    return "on";
}
;
var SMWEditInterface = Class.create();
SMWEditInterface.prototype =
{
    initialize : function()
    {
        this.editAreaName = "wpTextbox1";
        this.currentRange = null;
    }
    , focus : function()
    {
        if($(editAreaName) && $(editAreaName).getStyle('display') != 'none')
        {
            $(editAreaName).focus();
        }
        else if(OB_bd.isGecko)
        {
            editAreaLoader.execCommand(this.editAreaName, "focus();");
        }
    }
    , setSelectionRange : function(start, end)
    {
        if($(editAreaName) && $(editAreaName).getStyle('display') != 'none')
        {
            SMWEditArea = $(editAreaName);
            if(document.selection && ! is_gecko)
            {
                var rng = SMWEditArea.createTextRange();
                var text = rng.text;
                var offset = 0;
                for(var i = 0; i < start; i ++ )
                {
                    if(text.charAt(i) == '\n')
                    {
                        offset ++ ;
                    }
                }
                rng.collapse();
                rng.moveStart('character', start - offset);
                rng.moveEnd('character', end - start);
                rng.select();
                rng.scrollIntoView();
            }
            else
            {
                SMWEditArea.selectionStart = start;
                SMWEditArea.selectionEnd = end;
                SMWEditArea.caretPos = start;
            }
        }
        else
        {
            editAreaLoader.setSelectionRange(editAreaName, start, end);
        }
    }
    , selectCompleteAnnotation : function()
    {
        if($(editAreaName) && $(editAreaName).getStyle('display') != 'none')
        {
            SMWEditArea = $(editAreaName);
            var found = false;
            if(document.selection && ! is_gecko)
            {
                var rng = document.selection.createRange();
                var moved = 1;
                rng.moveStart('character', - 1);
                while(rng.text.charAt(0) == ' ' && rng.moveStart('character', - 1) != 0)
                {
                    moved ++ ;
                }
                while(rng.text.charAt(0) == '[' && rng.moveStart('character', - 1) != 0)
                {
                    moved ++ ;
                    found = true;
                }
                rng.moveStart('character', found ? 1 : moved);
                found = false;
                moved = 1;
                rng.moveEnd('character', 1);
                while(rng.text.charAt(rng.text.length - 1) == ' ' && rng.moveEnd('character', 1) != 0)
                {
                    moved ++ ;
                }
                while(rng.text.charAt(rng.text.length - 1) == ']' && rng.moveEnd('character', 1) != 0)
                {
                    moved ++ ;
                    found = true;
                }
                rng.moveEnd('character', found ? - 1 : - moved);
                this.currentRange = rng.duplicate();
                rng.select();
            }
            else
            {
                var start = SMWEditArea.selectionStart - 1;
                while(start >= 0 && SMWEditArea.value.charAt(start) == ' ')
                {
                    -- start;
                }
                while(start >= 0 && SMWEditArea.value.charAt(start) == '[')
                {
                    -- start;
                    found = true;
                }
                start ++ ;
                if( ! found)
                {
                    start = SMWEditArea.selectionStart;
                }
                found = false;
                var end = SMWEditArea.selectionEnd;
                while(end < SMWEditArea.value.length && SMWEditArea.value.charAt(end) == ' ')
                {
                    ++ end;
                }
                while(end < SMWEditArea.value.length && SMWEditArea.value.charAt(end) == ']')
                {
                    ++ end;
                    found = true;
                }
                if( ! found)
                {
                    end = SMWEditArea.selectionEnd;
                }
                setSelectionRange(SMWEditArea, start, end);
            }
        }
        else
        {
            editAreaLoader.setSelectionRange(editAreaName, start, end);
        }
    }
    , getSelectedText : function()
    {
        if($(editAreaName) && $(editAreaName).getStyle('display') != 'none')
        {
            SMWEditArea = $(editAreaName);
            if(document.selection && ! is_gecko)
            {
                var range = document.selection.createRange();
                var theSelection = range.text;
                if(theSelection != "")
                {
                    this.currentRange = range;
                }
                return theSelection;
            }
            else if(SMWEditArea.selectionStart || SMWEditArea.selectionStart == '0')
            {
                var startPos = SMWEditArea.selectionStart;
                var endPos = SMWEditArea.selectionEnd;
                if(endPos != startPos)
                {
                    return(SMWEditArea.value).substring(startPos, endPos);
                }
                return "";
            }
        }
        else
        {
            return editAreaLoader.getSelectedText(editAreaName)
        }
    }
    , setSelectedText : function(text)
    {
        if($(editAreaName) && $(editAreaName).getStyle('display') != 'none')
        {
            SMWEditArea = $(editAreaName);
            if(document.selection && ! is_gecko)
            {
                var theSelection = document.selection.createRange().text;
                if(theSelection == "" && this.currentRange)
                {
                    this.currentRange.select();
                }
                theSelection = document.selection.createRange().text;
                theSelection = text;
                SMWEditArea.focus();
                if(theSelection.charAt(theSelection.length - 1) == " ")
                {
                    theSelection = theSelection.substring(0, theSelection.length - 1);
                    document.selection.createRange().text = theSelection + " ";
                }
                else
                {
                    document.selection.createRange().text = theSelection;
                }
            }
            else if(SMWEditArea.selectionStart || SMWEditArea.selectionStart == '0')
            {
                var replaced = false;
                var startPos = SMWEditArea.selectionStart;
                var endPos = SMWEditArea.selectionEnd;
                if(endPos - startPos)
                {
                    replaced = true;
                }
                var scrollTop = SMWEditArea.scrollTop;
                var theSelection = (SMWEditArea.value).substring(startPos, endPos);
                var myText = text;
                var subst;
                if(myText.charAt(myText.length - 1) == " ")
                {
                    subst = myText.substring(0, (myText.length - 1)) + " ";
                }
                else
                {
                    subst = myText;
                }
                SMWEditArea.value = SMWEditArea.value.substring(0, startPos) + subst + SMWEditArea.value.substring(endPos, SMWEditArea.value.length);
                SMWEditArea.focus();
                SMWEditArea.selectionStart = startPos;
                SMWEditArea.selectionEnd = startPos + myText.length;
                SMWEditArea.scrollTop = scrollTop;
            }
            if(SMWEditArea.createTextRange)
            {
                SMWEditArea.caretPos = document.selection.createRange().duplicate();
            }
        }
        else
        {
            editAreaLoader.setSelectedText(editAreaName, text);
        }
    }
    , getValue : function()
    {
        if($(editAreaName) && $(editAreaName).getStyle('display') != 'none')return $(editAreaName).value;
        else return editAreaLoader.getValue(editAreaName);
    }
    , setValue : function(text)
    {
        if($(editAreaName) && $(editAreaName).getStyle('display') != 'none')$(editAreaName).value = text;
        else editAreaLoader.setValue(editAreaName, text);
    }
    , getTextBeforeCursor : function()
    {
        if($(editAreaName) && $(editAreaName).getStyle('display') != 'none')
        {
            if(OB_bd.isIE)
            {
                var selection_range = document.selection.createRange();
                var selection_rangeWhole = document.selection.createRange();
                selection_rangeWhole.moveToElementText(this.siw.inputBox);
                selection_range.setEndPoint("StartToStart", selection_rangeWhole);
                return selection_range.text;
            }
            else if(OB_bd.isGecko)
            {
                var start = this.siw.inputBox.selectionStart;
                return this.siw.inputBox.value.substring(0, start);
            }
        }
        else
        {
            return editAreaLoader.getValue(editAreaName).substring(0, editAreaLoader.getSelectionRange(editAreaName)["start"]);
        }
        return "";
    }
}
;

// obSemToolContribution.js
// under GPL - License; Copyright (c) 2007 Ontoprise GmbH
var OBSemanticToolbarContributor = Class.create();
OBSemanticToolbarContributor.prototype =
{
    initialize : function()
    {
        this.textArea = null;
        this.l1 = this.selectionListener.bindAsEventListener(this);
        this.l2 = this.selectionListener.bindAsEventListener(this);
        this.l3 = this.selectionListener.bindAsEventListener(this);
        this.editInterface = null;
        if( ! document.gEditInterface)gEditInterface = new SMWEditInterface();
    }
    , registerContributor : function()
    {
        if( ! stb_control.isToolbarAvailable() || wgAction != 'edit')return;
        this.comsrchontainer = stb_control.createDivContainer(CBSRCHCONTAINER, 0);
        this.comsrchontainer.setHeadline(gLanguage.getMessage('ONTOLOGY_BROWSER'));
        this.comsrchontainer.setContent(this.getOBLink(false));
        this.comsrchontainer.contentChanged();
        this.activateTextArea("wpTextbox1");
    }
    , activateTextArea : function(id)
    {
        if(this.textArea)
        {
            Event.stopObserving(this.textArea, 'select', this.l1);
            Event.stopObserving(this.textArea, 'mouseup', this.l2);
            Event.stopObserving(this.textArea, 'keyup', this.l3);
        }
        this.textArea = $(id);
        if(this.textArea)
        {
            Event.observe(this.textArea, 'select', this.l1);
            Event.observe(this.textArea, 'mouseup', this.l2);
            Event.observe(this.textArea, 'keyup', this.l3);
            this.comsrchontainer.setContent(this.getOBLink(false));
            this.comsrchontainer.contentChanged();
        }
    }
    , selectionListener : function(event)
    {
        if($("openEntityInOB") == null)return;
        if(gEditInterface.getSelectedText().length == 0)
        {
            this.comsrchontainer.setContent(this.getOBLink(false));
            this.comsrchontainer.contentChanged();
            gEditInterface.focus();
        }
        else
        {
            this.comsrchontainer.setContent(this.getOBLink(true));
            this.comsrchontainer.contentChanged();
            gEditInterface.focus();
        }
    }
    , navigateToOB : function(path)
    {
        var selectedText = gEditInterface.getSelectedText();
        if(selectedText == '')
        {
            return;
        }
        var localURL = selectedText.split(":");
        if(localURL.length == 1)
        {
            var queryString = 'searchTerm=' + encodeURI(localURL[0]);
        }
        else
        {
            var queryString = 'ns=' + localURL[0] + '&title=' + encodeURI(localURL[1]);
        }
        smwhgLogger.log(selectedText, "STB-OB", "clicked");
        var ontoBrowserSpecialPage = wgArticlePath.replace(/\$1/, path + '?' + queryString);
        window.open(wgServer + ontoBrowserSpecialPage, "");
    }
    , getOBLink : function(active)
    {
        if(active)
        {
            return '<a ' + 'id="openEntityInOB" class="menulink"' + 'href="javascript:obContributor.navigateToOB(\''+gLanguage.getMessage('NS_SPECIAL')+":"+gLanguage.getMessage('OB_ID')+'\')">' + gLanguage.getMessage('OPEN_IN_OB') + '</a>';
        }
        else
        {
            return '<span ' + 'id="openEntityInOB">' + gLanguage.getMessage('MARK_A_WORD') + '</span>';
        }
    }
}
;
var obContributor = new OBSemanticToolbarContributor();
Event.observe(window, 'load', obContributor.registerContributor.bind(obContributor));
