function confirmDelete (confirmFieldName, confirmationText, itemId)
    {
    if (confirm(confirmationText))
        {
        var confirmField = document.getElementsByName (confirmFieldName);
        if (!empty (confirmField))
            confirmField[0].value = itemId;
        return true;
        }
    else
        return false;
    }

function multipleSelect (thisCheckbox, elementName)
    {
    var checkboxes = document.getElementsByName (elementName);
    for (var i = 0; i < checkboxes.length; i++)
        checkboxes[i].checked = thisCheckbox.checked;
    }

var s_popupPersistedValues = [];

function popupform_handleSaveResponse (request, parentElement, popup, saveCallback, action)
    {
    var results = request.responseXML.getElementsByTagName ("Result");
    if (!empty (saveCallback) && false === saveCallback (parentElement, popup, results, request, action))
        return false;

    popup.style.display = "none";
    }

function popupform_collectFieldValues (popup)
    {
    // collect values
    var tableEl = popup.firstChild.firstChild;
    var collectedValues = [];
    for (var i = 0; i < tableEl.rows.length; i++)
        {
        if (tableEl.rows[i].cells.length < 2)
            continue;
        var cell = tableEl.rows[i].cells[1];
        for (var j = 0; j < cell.childNodes.length; j++)
            {
            var el = cell.childNodes[j];
            if (el.tagName == "INPUT" && el.type == "checkbox")
                {
                if (el.checked)
                    collectedValues[el.name] = el.value;
                }
            else
                {
                collectedValues[el.name] = el.value;
                }
            }
        }

    return collectedValues;
    }

function popupform_save (popup, parentElement, serviceUrl, saveCallback, action, closeCallback)
    {
    var url = serviceUrl;
    var successCallback = function (request)
        {
        popupform_handleSaveResponse (request, parentElement, popup, saveCallback, action);
        closeCallback ();
        };

    // collect values
    var tableEl = popup.firstChild.firstChild;
    var collectedValues = [];
    for (var i = 0; i < tableEl.rows.length; i++)
        {
        if (tableEl.rows[i].cells.length < 2)
            continue;
        var cell = tableEl.rows[i].cells[1];
        for (var j = 0; j < cell.childNodes.length; j++)
            {
            var el = cell.childNodes[j];
            if (el.tagName == "INPUT" && el.type == "checkbox")
                {
                if (el.checked)
                    collectedValues.push (encodeURIComponent (el.name) + "=" + encodeURIComponent (el.value));
                s_popupPersistedValues[el.name] = el.checked ? true : null;
                }
            else
                {
                collectedValues.push (encodeURIComponent (el.name) + "=" + encodeURIComponent (el.value));
                s_popupPersistedValues[el.name] = el.value;
                }
            }
        }

    var postData = collectedValues.join ("&");

    var svc = getXMLHTTP ();
    svc.open ("POST", url, true);
    svc.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
    svc.setRequestHeader ("Content-length", postData.length);
    svc.setRequestHeader ("Connection", "close");
    svc.onreadystatechange = function () { handleServiceResponse (svc, successCallback); };
    svc.send (postData);
    }

function popupform_postback (form, iframe, popup, parentElement, modeField, saveCallback, action)
    {
    modeField.value = action;
    form.submit ();
    }

function finishFileUpload (formId, success, text, results)
    {
    var form = document.getElementById (formId);
    if (!form)
        {
        alert ("Error finding image upload - '" + formId + "'");
        return;
        }
    form.expectLoadedEvent = true;
    if (!success)
        alert (text);
    else
        {
        form.successCallback (form.parentNode.parentNode, form.parentNode, results, null, null);
        form.closeCallback (results);
        }
    }

function showpopup_addButtonEvent (button, popup, parentElement, serviceUrl, saveCallback, closeCallback)
    {
    if (null !== serviceUrl)
        {
        addEvent (button, "click", function () { popupform_save (popup, parentElement, serviceUrl, saveCallback, button.id, closeCallback); } );
        }
    else
        addEvent (button, "click", function () { saveCallback (popup, parentElement, button.id, closeCallback); } );
    }

function showpopup_addButtonEventWithFile (form, iframe, modeField, button, popup, parentElement, saveCallback)
    {
    addEvent (button, "click", function () { popupform_postback (form, iframe, popup, parentElement, modeField, saveCallback, button.id); } );
    }

var nextFormId = 1;
function showpopup_handleResponse (request, parentElement, serviceUrl, loadCallback, saveCallback, className, closeCallback)
    {
    if (empty (request.responseXML))
        {
        alert ("Error at " + serviceUrl);
        return;
        }

    var results = request.responseXML.getElementsByTagName ("Result");
    var popup = document.createElement ("DIV");

    var formId = "popupfrm_" + (nextFormId++);
    var form = toElement('<form method="post" enctype="multipart/form-data"></form>');
    form.setAttribute('action', serviceUrl);
    form.setAttribute('target', formId);                                   
    form.id = formId;
    if (undefined === closeCallback || null === closeCallback)
        form.closeCallback = function (results) { document.body.removeChild (popup); popup = null; };
    else
        form.closeCallback = closeCallback;

    var popupTable = document.createElement ("TABLE");
    popup.className = "popup" + (className ? (" " + className) : "");
    popupTable.className = popup.className;
    popup.appendChild (form);
    form.appendChild (popupTable);
    document.body.appendChild (popup);

    var hasFile = false;
    for (var i = 0; i < results.length; i++)
        {
        var type = getXmlSubnodeText (results[i], "type");
        if ("file" ==  type)
            {
            hasFile = true;
            break;
            }
        }

    
    var iframe = null;
    var modeField = null;
    // if there is at least one file field, need to create an
    if (hasFile)
        {
        iframe = toElement('<iframe src="javascript:false;" name="' + formId + '" />');
        iframe.setAttribute('id', formId + "_i");
        iframe.className = 'popup';
        form.expectLoadedEvent = true;
        form.successCallback = saveCallback;
        addEvent (iframe, "load", function ()
            {
            if (form.expectLoadedEvent)
                form.expectLoadedEvent = false;
            else
                {
                iframe.style.display = 'block';
                if (confirm ("Error"))
                    iframe.style.display = 'none';
                }
            });
        
        popup.appendChild (iframe);

        modeField = document.createElement("INPUT");
        modeField.type = "hidden";
        modeField.name = "mode";
        form.appendChild (modeField);
        var formIdField = document.createElement("INPUT");
        formIdField.type = "hidden";
        formIdField.name = "formid";
        formIdField.value = formId;
        form.appendChild (formIdField);
        }

    // an exception for generci autocomplete field (its service url depends on the "dbtable" dropdown selection)
    var dbTableField = null;
    var autocompleteField = null;
    var buttonCell = null;
    for (var i = 0; i < results.length; i++)
        {
        var id = getXmlSubnodeText (results[i], "id");
        var type = getXmlSubnodeText (results[i], "type");
        var label = getXmlSubnodeText (results[i], "label");
        var tooltip = getXmlSubnodeText (results[i], "title");
        var value = getXmlSubnodeText (results[i], "value");

        var rowIndex = popupTable.rows.length;
        var currentRow = popupTable.insertRow (rowIndex);
        
        if ("button" == type)
            {
            var button = document.createElement("INPUT");
            button.type = "button";
            button.className = "popupbutton";
            button.name = id;
            button.id = id;
            button.value = label;
            button.title = tooltip;
            if ("close" == id)
                {
                addEvent (button, "click", form.closeCallback);
                }
            else if (hasFile)
                {
                showpopup_addButtonEventWithFile (form, iframe, modeField, button, popup, parentElement, saveCallback);
                }
            else
                {
                var saveUrl = null !== serviceUrl ? serviceUrl + "&mode=" + id : null;
                showpopup_addButtonEvent (button, popup, parentElement, saveUrl, saveCallback, form.closeCallback);
                }

            if (empty (buttonCell))
                {
                buttonCell = currentRow.insertCell(0);
                buttonCell.colSpan = 2;
                }

            buttonCell.appendChild (button);
            }
        else
            {
            buttonCell = null;

            var tagName = "INPUT";
            if ("longtext" == type)
                tagName = "TEXTAREA";
            else if ("select" == type)
                tagName = "SELECT";

            var input = document.createElement (tagName);
            
            if ("imgautocomplete" == type || "autocomplete" == type)
                input.type = "text";
            else if ("INPUT" == tagName)
                input.type = type;

            input.className = "popup" + type;
            input.name = id;
            input.id = id;
            input.title = tooltip;
            if (empty (value) && "longtext" != type && !empty (s_popupPersistedValues[id]))
                value = s_popupPersistedValues[id];

            if ("dbtable" == id)
                dbTableField = input;

            if (!empty (value) && "select" != type)
                input.value = value;

            var labelCell = currentRow.insertCell(0);
            labelCell.className = "editlabelv";

            if ("select" == type)
                {
                var values = getXmlSubnodeText (results[i], "values");
                if (!empty (values))
                    values = values.split ("|");

                if (!empty (values))
                    {
                    for (var o = 0; o < values.length; o++)
                        {
                        var parts = values[o].split ("=", 2);
                        var optionValue = parts[0];
                        var optionLabel = parts[1];
                        var option = document.createElement ("OPTION");
                        if (!empty (value) && optionValue == value)
                            option.selected = true;
                        option.value = optionValue;
                        option.title = optionLabel;
                        option.innerHTML = optionLabel;
                        input.appendChild (option);
                        }
                    }
                }

            if ("checkbox" != type)
                {
                labelCell.innerHTML = label;
                var inputCell = currentRow.insertCell(1);
                inputCell.appendChild (input);
                if ("imgautocomplete" == type || "autocomplete" == type)
                    {
                    var svc = getXmlSubnodeText (results[i], "service");
                    var suggestBox = suggest_attachDynamic (input, input.id, svc, true, false);
                    if ("autocomplete" == type)
                        {
                        autocompleteField = suggestBox;
                        }
                    }
                }
            else
                {
                labelCell.innerHTML = "&nbsp;";
                input.value = 1;

                var inputCell = currentRow.insertCell(1);
                inputCell.appendChild (input);
                var labelSpan = document.createElement ("SPAN");
                labelSpan.innerHTML += label;
                inputCell.appendChild (labelSpan);

                if (!empty (value))
                    input.checked = true;
                }
            }
        }

    // if popup does not fit into the window, try to move it to the visible area
    var pos = getAbsolutePosition (parentElement, true);
    popup.style.left = (pos.left + (pos.right - pos.left) / 2) + "px";
    popup.style.top = (pos.top + (pos.bottom - pos.top) / 2) + "px";

    pos = getAbsolutePosition (popup, true);
    if (document.body.offsetWidth && document.body.offsetWidth < pos.right)
        popup.style.left = (pos.left + document.body.offsetWidth - pos.right) + "px";

    if (!empty (loadCallback))
        loadCallback (parentElement, popup);

    if (!empty (dbTableField) && !empty (autocompleteField))
        {
        var originalUrl = autocompleteField.serviceUrl;
        var changeEvent = function (event)
            {
            var parts = dbTableField.value.split (".");
            autocompleteField.serviceUrl = originalUrl.replace ("#DBTABLE#", parts[0]);
            };
        addEvent (dbTableField, "change", changeEvent);
        changeEvent ();
        }
    }

function showPopup (contextElement, popupUrl, saveUrl, loadCallback, saveCallback, className, closeCallback)
    {
    var svc = getXMLHTTP ();
    var url = popupUrl + "&mode=show";
    svc.open ("GET", url, true);
    svc.setRequestHeader ("Content-Type", "text/xml; charset=utf-8");
    svc.setRequestHeader ("Connection", "close");
    var successCallback = function (request)
        {
        showpopup_handleResponse (request, contextElement, saveUrl, loadCallback, saveCallback, className, closeCallback);
        };
    svc.onreadystatechange = function () { handleServiceResponse (svc, successCallback); };
    svc.send (null);
    }

function newsfragment_reload (newsFragment, request, reloadFn)
    {
    newsFragment.innerHTML = extractHtmlFromXmlResponse (request);
    reloadFn ();
    }

function news_create (event, newsFragment, container, containerElement, popupUrl, reloadFn, closeButtonText)
    {
    if (empty (container.popupOpen))
        {
        showPopup (container, popupUrl, popupUrl,
            function (targetElement, popup)
                {
                targetElement.popup = popup;
                },
            function (element, popup, result, request, action)
                {
                if ("save" == action)
                    {
                    element.popup = null;
                    element.popupOpen = null;
                    newsfragment_reload (newsFragment, request, reloadFn, popupUrl);
                    }
                else if ("preview" == action)
                    {
                    showPreview (extractHtmlFromXmlResponse (request), closeButtonText);
                    return false;
                    }
                else
                    alert ("Invalid arguments");
                },
            "newspopup",
            function () { container.popup.style.display = "none"; });

        container.popupOpen = true;
        }
    else if (!empty (container.popup))
        {
        container.popup.style.display = "none" == container.popup.style.display ? "block" : "none";
        }

    eventCancel (event);
    return false;
    }

function newsfragment_attachCreateEvent (newsFragment, container, element, popupUrl, reloadFn, closeButtonText)
    {
    addEvent (element, "click", function (event) { return news_create (event, newsFragment, container, element, popupUrl, reloadFn, closeButtonText); });
    }

function newsfragment_hookCreateLinks (newsFragment, reloadFn, currentElement, popupUrl, closeButtonText)
    {
    for (var i = 0; i < currentElement.childNodes.length; i++)
        {
        if ("A" == currentElement.childNodes[i].tagName)
            newsfragment_attachCreateEvent (newsFragment, currentElement, currentElement.childNodes[i], popupUrl, reloadFn, closeButtonText);

        newsfragment_hookCreateLinks (newsFragment, reloadFn, currentElement.childNodes[i], popupUrl, closeButtonText);
        }
    }

function newsfragment_attachEditPopup (newsFragment, element, popupUrl, reloadFn, closeButtonText)
    {
    addEvent (element, "click", function (event) { return news_create (event, newsFragment, element.parentNode, element, popupUrl, reloadFn, closeButtonText); });
    }

function newsfragment_addPublishIcon (newsFragment, parentElement, publishLink, publishLabel, publishIcon, reloadFn)
    {
    var icon = document.createElement ("img");
    icon.src = publishIcon;
    icon.title = publishLabel;
    icon.width = 12;
    icon.height = 12;
    icon.className = "urlaction";
    addEvent (icon, "click", function ()
        {
        var svc = getXMLHTTP ();
        svc.open ("POST", publishLink, true);
        svc.setRequestHeader ("Connection", "close");
        var successCallback = function (request)
            {
            newsfragment_reload (newsFragment, request, reloadFn);
            };
        svc.onreadystatechange = function () { handleServiceResponse (svc, successCallback); };
        svc.send (null);
        }
        );
    
    parentElement.appendChild (icon);
    }

function newsfragment_enableEditing (newsFragment, currentElement, popupUrl, reloadFn, publishLink, publishLabel, publishIcon, closeButtonText)
    {
    if (currentElement.attributes && currentElement.attributes.getNamedItem ("action") && currentElement.attributes.getNamedItem ("itemid"))
        {
        var action = currentElement.attributes.getNamedItem ("action").value;
        var itemid = currentElement.attributes.getNamedItem ("itemid").value;
        if ("edit" == action)
            {
            newsfragment_attachEditPopup (newsFragment, currentElement, popupUrl + "&id=" + itemid, reloadFn, closeButtonText);
            
            if (currentElement.attributes.getNamedItem ("unpublished"))
                newsfragment_addPublishIcon (newsFragment, currentElement.parentNode, publishLink + "&id=" + itemid, publishLabel, publishIcon, reloadFn);
            }
        }

    for (var i = 0; i < currentElement.childNodes.length; i++)
        {
        newsfragment_enableEditing (newsFragment, currentElement.childNodes[i], popupUrl, reloadFn, publishLink, publishLabel, publishIcon, closeButtonText);
        }
    }

function newsfragment_attachCreationLinks (newsFragmentId, canCreate, containerId, popupCreateUrl, canEdit, popupEditUrl, publishLink, publishLabel, publishIcon, closeButtonText)
    {
    var newsFragment = document.getElementById (newsFragmentId);
    var containerElement = document.getElementById (containerId);
    if (!newsFragment || (canCreate && !containerElement))
        {
        alert ("Error initializing news - '" + newsFragmentId + "', '" + containerId + "'");
        return;
        }

    var reloadFn = function () { newsfragment_attachCreationLinks (newsFragmentId, canCreate, containerId, popupCreateUrl, canEdit, popupEditUrl, publishLink, publishLabel, publishIcon, closeButtonText); };
    if (canCreate)
        newsfragment_hookCreateLinks (newsFragment, reloadFn, containerElement, popupCreateUrl, closeButtonText);
    
    if (canEdit)
        newsfragment_enableEditing (newsFragment, newsFragment, popupEditUrl, reloadFn, publishLink, publishLabel, publishIcon, closeButtonText);
    }

function image_reload (currentElement, src, url, label)
    {
    if (currentElement.attributes && currentElement.attributes.getNamedItem ("placeholder"))
        {
        var type = currentElement.attributes.getNamedItem ("placeholder").value;
        if ("img" == type)
            {
            currentElement.src = src.replace ("#w#", currentElement.width).replace ("#h#", currentElement.height);
            }
        else if ("title" == type)
            {
            currentElement.innerHTML = label;
            currentElement.style.display = "";
            }
        else if ("link" == type)
            {
            currentElement.href = url;
            }
        }

    for (var i = 0; i < currentElement.childNodes.length; i++)
        {
        image_reload (currentElement.childNodes[i], src, url, label);
        }
    }

function imageupload_showPopup (event, containerElement, uploadPopupUrl)
    {
    var onLoad =
        function (targetElement, popup)
            {
            targetElement.popup = popup;
            };
    var onSave =
        function (parentEl, popup, results, request)
            {
            if (empty (request))
                image_reload (containerElement, results.src, results.url, results.label);
            else
                image_reload (containerElement, getXmlSubnodeText (results[0], "src"),
                              getXmlSubnodeText (results[0], "url"),
                              getXmlSubnodeText (results[0], "label"));
            };
    var onClose =
        function ()
            {
            document.body.removeChild (containerElement.popup);
            containerElement.popup = null;
            containerElement.popupOpen = null;
            }

    if (empty (containerElement.popupOpen))
        {
        showPopup (containerElement, uploadPopupUrl, uploadPopupUrl, onLoad, onSave, "uploadPopup", onClose);
        containerElement.popupOpen = true;
        }
    else if (!empty (containerElement.popup))
        {
        onClose ();
        }
    }

function imageupload_attach (containerId, uploadPopupUrl, uploadText, attachPopupUrl, attachText, editPopupUrl, editText)
    {
    var containerElement = document.getElementById (containerId);
    if (!containerElement)
        {
        alert ("Error initializing image - '" + containerId + "'");
        return;
        }

    if (!empty (editPopupUrl))
        {
        var editLink = document.createElement ("A");
        editLink.className = "uploadImage";
        editLink.innerHTML = editText;
        addEvent (editLink, "click", function (event) { return imageupload_showPopup (event, containerElement, editPopupUrl); });
        containerElement.appendChild (editLink);
        }

    if (!empty (uploadPopupUrl))
        {
        var uploadLink = document.createElement ("A");
        uploadLink.className = "uploadImage";
        uploadLink.innerHTML = uploadText;
        addEvent (uploadLink, "click", function (event) { return imageupload_showPopup (event, containerElement, uploadPopupUrl); });
        containerElement.appendChild (uploadLink);
        }

    if (!empty (attachPopupUrl))
        {
        var attachLink = document.createElement ("A");
        attachLink.className = "uploadImage";
        attachLink.innerHTML = attachText;
        addEvent (attachLink, "click", function (event) { return imageupload_showPopup (event, containerElement, attachPopupUrl); });
        containerElement.appendChild (attachLink);
        }
    }

/* discussion page */
function comments_attach (editorId, entriesContainer, serviceUrl, newTopicLabel, replyLabel)
    {
    var containerElement = document.getElementById (entriesContainer);
    if (empty (containerElement))
        return;

    var createTopicLink = document.createElement('span');
    createTopicLink.innerHTML = newTopicLabel;
    createTopicLink.className = "discussButton";

    var successCallback = function (request)
        {
        var nextSibling = createTopicLink.nextSibling;
        var parentNode = containerElement.parentNode;
        parentNode.removeChild (containerElement);
        parentNode.removeChild (createTopicLink);
        var newElement = toElement (extractHtmlFromXmlResponse (request));

        if (null != nextSibling)
            parentNode.insertBefore (newElement, nextSibling);
        else
            parentNode.appendChild (newElement);

        comments_attach (editorId, entriesContainer, serviceUrl, newTopicLabel, replyLabel);
        };
    var clickEvent = function ()
        {
        return toggleElementPopup (createTopicLink, serviceUrl, serviceUrl, "commentsPopup", successCallback);
        };
    addEvent (createTopicLink, "click", clickEvent);

    if (null != containerElement.nextSibling)
        containerElement.parentNode.insertBefore (createTopicLink, containerElement.nextSibling);
    else
        containerElement.parentNode.appendChild (createTopicLink);

    comment_enableEditing (containerElement, containerElement, replyLabel, successCallback);

    var editorElement = document.getElementById (editorId);
    if (!empty (editorElement))
        editorElement.style.display = "none";
    }

function comment_enableEditing (baseContainerElement, currentElement, replyLabel, successCallback)
    {
    if (currentElement.attributes && currentElement.attributes.getNamedItem ("svc"))
        {
        // add a toolbar with actions applicable to the current item on top
        var svc = currentElement.attributes.getNamedItem ("svc").value;

        currentElement.innerHTML = replyLabel;
        currentElement.className = "discussButton";
        currentElement.style.display = "";

        var clickEvent = function ()
            {
            return toggleElementPopup (currentElement, svc, svc, "commentsPopup", successCallback, null);
            };
        addEvent (currentElement, "click", clickEvent);
        }

    for (var i = 0; i < currentElement.childNodes.length; i++)
        {
        comment_enableEditing (baseContainerElement, currentElement.childNodes[i], replyLabel, successCallback);
        }
    }

    
    
function toggleElementPopup (targetElement, popupUrl, actionUrl, className, reloadFn, closeCallback)
    {
    if (empty (targetElement.popupOpen))
        {
        var onPopupLoad = function (targetElement, popup)
            {
            targetElement.popup = popup;
            }
        if (undefined === closeCallback)
            closeCallback = function () { if (targetElement && targetElement.popup) targetElement.popup.style.display = "none"; };

        var successCallback = null;
        if (null === actionUrl)
            {
            successCallback = function (popup, parentElement, buttonId, closeCallback)
                {
                reloadFn (popup, parentElement, buttonId, closeCallback);
                targetElement.popup = null;
                };
            }
        else
            {
            successCallback = function (element, popup, result, request)
                {
                element.popup = null;
                if (undefined !== reloadFn)
                    reloadFn (request);
                };
            }

        showPopup (targetElement, popupUrl, actionUrl, onPopupLoad,
                   successCallback, className, closeCallback);
        targetElement.popupOpen = true;
        }
    else if (!empty (targetElement.popup))
        {
        targetElement.popup.style.display = "none" == targetElement.popup.style.display ? "block" : "none";
        }
    }

function toolbar_attach (fieldId)
    {
    var fieldElement = document.getElementById (fieldId);
    var toolbarElement = document.getElementById (fieldId + "_tb");

    if (empty (toolbarElement) || empty (fieldElement))
        return;
    toolbarElement.style.display = "";
    toolbar_preprocessIcons (toolbarElement, toolbarElement, fieldElement);
    }

function wrapTextAtCursor (field, prefix, postfix)
    {
    if ("function" == typeof (field.focus))
        field.focus();

    //  IE support
    if (document.selection)
        {
        var sel = document.selection.createRange();
        sel.text = prefix + sel.text + postfix;
        }
    else if (field.selectionStart || field.selectionStart == '0')
        {
        //Mozilla/Firefox/Netscape 7+ support
        var startPos = field.selectionStart;
        var endPos = field.selectionEnd;
        field.value = field.value.substring (0, startPos) + prefix + field.value.substring (startPos, endPos) + postfix + field.value.substring (endPos, field.value.length);
        field.selectionStart = endPos + prefix.length + postfix.length;
        field.selectionEnd = endPos + prefix.length + postfix.length;
        }
    else
        {
        field.value += prefix + postfix;
        }
    }

function toolbar_preprocessIcons (baseContainerElement, currentElement, fieldElement)
    {
    if (currentElement.attributes && currentElement.attributes.getNamedItem ("action"))
        {
        // add a toolbar with actions applicable to the current item on top
        var action = currentElement.attributes.getNamedItem ("action").value;
        var prefix = "";
        var postfix = "";
        if (currentElement.attributes.getNamedItem ("prefix"))
            prefix = currentElement.attributes.getNamedItem ("prefix").value;
        if (currentElement.attributes.getNamedItem ("postfix"))
            postfix = currentElement.attributes.getNamedItem ("postfix").value;
        currentElement.className = "toobarButton";
        currentElement.style.display = "";

        var clickEvent = null;
        if ("link" == action)
            {
            var successCallback = function (popup, parentElement, buttonId, closeCallback)
                {
                var values = popupform_collectFieldValues (popup);
                var parts = values["dbtable"].split (".");
                prefix = "[[" + parts[1] + ":" + values["id"] + "|";
                postfix = "]]";
                wrapTextAtCursor (fieldElement, prefix, postfix);
                currentElement.popupOpen = false;
                closeCallback ();
                };

            var svc = currentElement.attributes.getNamedItem ("svc").value;
            clickEvent = function ()
                {
                return toggleElementPopup (currentElement, svc, null, "linkPopup", successCallback, null);
                };
            }
        else
            {
            clickEvent = function ()
                {
                wrapTextAtCursor (fieldElement, prefix, postfix);
                };
            }
        addEvent (currentElement, "click", clickEvent);
        }

    for (var i = 0; i < currentElement.childNodes.length; i++)
        {
        toolbar_preprocessIcons (baseContainerElement, currentElement.childNodes[i], fieldElement);
        }
    }
