// ***********************************************************************************
// JScript functions for editing features (e.g. drag and drop)
// ***********************************************************************************

var globalEdit = false;
function SaveString(textsrc, StringID, ElementID) {
    document.all.s_StringID.setAttribute('value', StringID);
    document.all.s_StringValue.setAttribute('value', textsrc.innerHTML);
    document.all.s_ElementID.setAttribute('value', ElementID);
    document.all.s_stringsave.setAttribute('value', 'true');
    window.event.cancelBubble=true;
    document.forms[0].submit();

}
function AbortEditString() {
    document.forms[0].submit();
}

function onDone(src) {
    isShown1 = 0;
    isShown2 = 0;

    parent.oPopup.document.body.innerHTML = src;
    parent.oPopup.document.createStyleSheet('styles/system.css');
    parent.oPopup.show(0, 0, 0, 0);
    parent.resizePopup();
    parent.oPopup.show(0, 0, 0, 0);
    parent.resizePopup();
}

var lastStyle;
function resizePopup() {
    if (parent) {
        parent.oPopup.show(px, py, oPopup.document.body.scrollWidth, oPopup.document.body.scrollHeight, window.document.body);

    }

}
var oPopup = null;
if (window.createPopup)
    oPopup = window.createPopup();

var oCaller;
var px, py;
var timeoutID;

function execASP(aspFile) {
    window.location.href = aspFile;
}
var dialog;

function popupImport(Url) {
    HidePopupDiv();
    dialog = window.open(Url, 'im', 'height=300,width=500,resizable=yes,scrollbars=yes,status=no,location=no,toolbar=no,menubar=no', true);
}
function popupASP(aspFile) {
    dialog = window.open(aspFile, 'editor', 'height=560,width=780,resizable=no,scrollbars=no,status=no,location=no,toolbar=no,menubar=no', true);
    dialog.focus();

}

function aenet(pPath) //advanced editor function
{
    HidePopupDiv();
    dialog = window.open(strAppRoot + '/kontext/editing/dialogs/ElementEditorDialog.aspx?' + pPath, '_blank', 'height=600,width=800,resizable=yes,scrollbars=yes,status=no,location=no,toolbar=no,menubar=no', true);
    dialog.focus();

}


function openWinFalse(aspFile) {
    dialog = window.open(aspFile, 'pwin', 'height=550,width=700,resizable=no,scrollbars=no,status=no,location=no,toolbar=no,menubar=no', true);
    dialog.focus();
    return false;

}

function openAdminWinFalse(pFile) {
    dialog = window.open(pFile, 'editdotneteditors', 'height=600,width=850,resizable=yes,scrollbars=yes,status=yes,location=yes,toolbar=yes,menubar=no', true);
    dialog.focus();
    return false;

}

function openAdminWin(pFile) {
    dialog = window.open(pFile, 'editdotnetproperties', 'height=650,width=750,resizable=yes,scrollbars=no,status=no,location=no,toolbar=no,menubar=no', true);
    dialog.focus();
}

function popupWin(aspFile) {
    HidePopupDiv();
    dialog = window.open(aspFile, 'pwin', 'height=610,width=760,resizable=yes,scrollbars=yes,status=no,location=no,toolbar=no,menubar=no', true);
    dialog.focus();


}

function popupWinResize(aspFile, winHeight, winWidth) {
    var par2 = "height=" + winHeight + ",width=" + winWidth + ",resizable=yes,scrollbars=yes,status=no,location=no,toolbar=no,menubar=no";

    dialog = window.open(aspFile, 'pwin', par2, true);
    dialog.focus();

}

function popupNewWin(aspFile, left, top) {
    var par = "left=" + left + ",top=" + top + ",height=700,width=900,resizable=yes,scrollbars=no,status=no,location=no,toolbar=no,menubar=no";
    //alert(par);
    dialog = window.open(aspFile, 'nawin', par, true);
    dialog.focus();
}


function popupMedia(aspFile) {
    dialog = window.open(aspFile, 'fileman', 'height=530,width=725,resizable=yes,scrollbars=yes,status=no,location=no,toolbar=no,menubar=no', true);
    dialog.focus();

}

function popupWorkflow(aspFile) {
    dialog = window.open(aspFile, 'pworkflow', 'height=560,width=705,resizable=no,scrollbars=no,status=no,location=no,toolbar=no,menubar=no', true);
    dialog.focus();

}

function popupEditor(aspFile) {
    dialog = window.open(aspFile, 'pwineditor', 'height=600,width=800,resizable=no,scrollbars=no,status=no,location=no,toolbar=no,menubar=no', true);
    dialog.focus();

}

function popupSmallWin(aspFile) {
    dialog = window.open(aspFile, 'smallwin', 'height=320,width=500,resizable=no,scrollbars=no,status=no,location=no,toolbar=no,menubar=no', true);
    dialog.focus();

}


function request_delete(elementid) {

    execASP(strCallBack + "&s_ElementID=" + elementid + "&s_modus=delete");
}

function request_delete_all(elementid) {
    if (window.confirm(s_delAllChildrenConfirm)) {
        execASP(strCallBack + "&s_ElementID=" + elementid + "&s_modus=delete_all");
    }
}
var srcEl, dragmode, srcid, prevCSS, targetEl, styleTimer;
dragmode = false;
var dropped;
dropped = false;

function dragEnd() {
    if (!dropped && DragDropEnabled)
        execASP(strCallBack);
}
var posX, posY, lastEffect;
posX = 0;
posY = 0;
var dropMode;
var lastDropMode;

function getCoords(element) {
    var coords = { x: 0, y: 0, width: element.offsetWidth, height:
element.offsetHeight
    };
    while (element) {
        coords.x += element.offsetLeft;
        coords.y += element.offsetTop;
        element = element.offsetParent;
    }
    return coords;
}

function dragOver(ev) {
    if (DragDropEnabled && dragmode) {

        
        

        var posChanged;

        var ev = ev || window.event;
        var evtargetEl = ev.target || ev.srcElement;

        if (document.all) {
        }
        else {
            document.body.focus(); //clear selection
        }


        if (ev.pageX) {
            posX = ev.pageX;
            posY = ev.pageY;
            posChanged = true;

        }
        else {
            if ((posX != ev.x) || (posY != ev.y)) {
                if (srcEl) {

                    {
                        posX = ev.clientX + srcEl.offsetParent.scrollLeft;
                        posY = ev.clientY + srcEl.offsetParent.scrollTop;
                    }
                }
                posChanged = true;
            }
            else
                posChanged = false;
        }

        if (posChanged)
            oelem = getElement(evtargetEl);
        if (oelem == srcEl) {
            oelem = document.body;

        }

        if (oelem && oelem.getAttribute && oelem.getAttribute('srcid') != null) {



            /*if (window.event.ctrlKey)		
            {		
            window.event.dataTransfer.dropEffect='link';
            }
            else
            {*/
            if (ev.dataTransfer)
                ev.dataTransfer.dropEffect = 'move';
            //}				
            var relX, relY, elw, elh;
            var rect;

            if (oelem.getBoundingClientRect) {
                rect = oelem.getBoundingClientRect();
                elw = rect.right - rect.left;
                elh = rect.bottom - rect.top;
                relX = ((ev.clientX - rect.left) * 100 / elw);
                relY = ((ev.clientY - rect.top) * 100 / elh);

            }
            else if (document.getBoxObjectFor) {
                rect = document.getBoxObjectFor(oelem);
                elw = rect.width;

                elh = rect.height;
                relX = ((ev.pageX - rect.x) * 100 / elw);
                relY = ((ev.pageY - rect.y) * 100 / elh);

            }
            else {

                rect = getCoords(oelem);
                elw = rect.width;

                elh = rect.height;
                relX = ((ev.pageX - rect.x) * 100 / elw);
                relY = ((ev.pageY - rect.y) * 100 / elh);
            }





            dropMode = "after";

            if (relX > 75 || relY > 75)
                dropMode = 'after';
            else {
                if (relX < 25 || relY < 25)
                    dropMode = 'before';
                else if (oelem.getAttribute('droptype') != 'noinside')
                    dropMode = 'inside';
            }
            if ((ev.shiftKey) || (oelem.getAttribute('droptype') == 'inside'))
                dropMode = 'inside';
            if (/*lastEffect!=window.event.dataTransfer.dropEffect || */targetEl != oelem || lastDropMode != dropMode) {
                lastDropMode = dropMode;
                if (targetEl != oelem) {
                    if (targetEl)
                        targetEl.style.cssText = prevCSS;
                    prevCSS = oelem.style.cssText;

                }
                targetEl = oelem;
                oelem.style.cssText = prevCSS;
                if (ev.altKey == false) {

                    var dropcolor = "green";

                    if (oelem.getAttribute('dropcolor')) {
                        dropcolor = oelem.getAttribute('dropcolor');
                    }

                    if (/*window.event.dataTransfer.dropEffect=='link' || */dropMode == 'inside') {
                        oelem.style.cssText = prevCSS + ';border-top-style:solid;border-top-width:2px;border-top-color:' + dropcolor + ';border-left-style:solid;border-left-width:2px;border-left-color:' + dropcolor + ';border-bottom-style:solid;border-bottom-width:2px;border-bottom-color:' + dropcolor + ';border-right-style:solid;border-right-width:2px;border-right-color:' + dropcolor + '';
                    }
                    else {
                        if (dropMode == 'before')
                            oelem.style.cssText = prevCSS + ';border-top-style:solid;border-top-width:2px;border-top-color:' + dropcolor + ';border-left-style:solid;border-left-width:2px;border-left-color:' + dropcolor;
                        else
                            oelem.style.cssText = prevCSS + ';border-bottom-style:solid;border-bottom-width:2px;border-bottom-color:' + dropcolor + ';border-right-style:solid;border-right-width:2px;border-right-color:' + dropcolor;
                    }
                }
            }
            /*lastEffect=window.event.dataTransfer.dropEffect;*/



            window.returnValue = false;
            ev.cancelBubble = true;
            ev.returnValue = false;

            var oEvent = window.event;
            if (oEvent)
                oEvent.returnValue = false;
            

        }
        if (posChanged) {
            if (srcEl) {
                srcEl.style.left = (posX + 10) + "px";
                srcEl.style.top = (posY + 10) + "px";
            }
        }
        if (ev.altKey) {

            if (ev.dataTransfer)
                ev.dataTransfer.dropEffect = 'move';
            window.returnValue = false;
            ev.cancelBubble = true;
            ev.returnValue = false;
        }
    }
}

var originalEl;


function keypressed(ev) {

    ev = ev || window.event;
    if ((resizeMode || dragmode) && (ev.keyCode == 27 || ev.keyCode == 19)) {
        dragmode = false;
        resizeMode = false;
        execASP(strCallBack);
    }
}
function dragstart(ev) {
    var ev = ev || window.event || lastEv;

    if (DragDropEnabled == true) {
        var oelem;
        var evtargetEl;
        evtargetEl = ev.target || ev.srcElement;

        oelem = getElement(evtargetEl);
        if (oelem == null)
            return true;
        if (oelem != null && oelem.getAttribute('srcid') != null && oelem.getAttribute('nodrag') == null && resizeMode == false && (dragmode == null || dragmode == false)) {/*beim clipboardData gibts keine property effectAllowed*/


            dragmode = true;

            try {
                if (window.event && window.event.dataTransfer != null) {
                    window.event.dataTransfer.clearData();
                    window.event.dataTransfer.setData('Text', 'url=' + strDataSource + '\nid=' + oelem.getAttribute('srcid') + '\ncutcopy=True\nSessionID=' + s_SessionID);
                    window.event.dataTransfer.effectAllowed = 'linkMove';
                }
            }
            catch (err) {
                //window.alert(err);
            }

            window.status = s_moveOptionsHint;

            if (IsLegacyBrowser || oelem.outerHTML.length > 6000) {
                oelem.style.borderColor = 'red';
                oelem.style.backgroundImage = 'url(' + strAppRoot + '/images/transparent_cover.gif)';
            }
            else {
                srcEl = oelem.cloneNode(true);

                oelem.style.cssText = 'width:99%;border-style:dashed;border-width:2px;border-color:red;background-image:url(' + strAppRoot + '/images/transparent_cover.gif);';


                document.body.appendChild(srcEl);

                srcEl.style.position = 'absolute';
                if (oelem.scrollWidth > 400)
                    srcEl.style.width = "400px";
                else
                    srcEl.style.width = oelem.scrollWidth + "px";

                if (oelem.scrollHeight > 400)
                    srcEl.style.height = "400px";
                else
                    srcEl.style.height = oelem.scrollHeight + "px";

                srcEl.style.backgroundColor = 'white';
                srcEl.style.overflow = 'hidden';
                srcEl.style.left = (window.event.clientX + srcEl.offsetParent.scrollLeft) + "px";
                srcEl.style.top = (window.event.clientY + srcEl.offsetParent.scrollTop) + "px";

                srcEl.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=30);';
            }
        }
        else
            return false;
    }
    else {
        return false;
    }
}


function CutCopyElement(target, copy, nAffected) {
    if (nAffected && !confirmMassManipulation(nAffected))
        return;

    if (target != null) {

        setCookieClipboardValue('url=' + strDataSource + '\nid=' + target + '\ncutcopy=' + copy + '\nSessionID=' + s_SessionID);


        if (target.toLocaleString().indexOf("_") >= 0) {

            window.location.reload();

        }
    }

    HidePopupDiv();

}

function getCookie(name) {

    var cookieValue = null;
    if (document.cookie && document.cookie != '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
            var cookie = (cookies[i]);
            // Does this cookie string begin with the name we want?
            if (cookie.substring(0, name.length + 1) == (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;

}

function setCookie(name, value) {

    var options = {};
    if (value === null) {
        value = '';
        options.expires = -1;
    }
    var expires = '';
    if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
        var date;
        if (typeof options.expires == 'number') {
            date = new Date();
            date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
        } else {
            date = options.expires;
        }
        expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
    }

    var path = options.path ? '; path=' + (options.path) : '';
    var domain = options.domain ? '; domain=' + (options.domain) : '';
    var secure = options.secure ? '; secure' : '';
    document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');

};



function getCookieClipboardValue() {
    if (window.clipboardData)
        return window.clipboardData.getData('Text');
    else
        return getCookie('Clipboard');
}

function setCookieClipboardValue(val) {
    if (window.clipboardData)
        window.clipboardData.setData('Text', val);
    else
        setCookie('Clipboard', val);
}

function pasteElement(target, dock, moveMode) {
    if (moveMode) {
    }
    else {
        moveMode = 'inside';
    }

    var src;
    src = getCookieClipboardValue();
    var strng;
    var re;
    strng = new String(src);
    var strings;
    re = /^url=/i;
    if (strng.search(re) != -1) {
        strings = strng.split("\n");
        re = /^url=/i;
        src = strings[0].replace(re, "");
        re = /^id=/i;
        var srcid;
        srcid = strings[1].replace(re, "");

        re = /^cutcopy=/i;
        var cutcopy;
        cutcopy = strings[2].replace(re, "");

        re = /^SessionID=/i;
        var extSessionID;
        extSessionID = strings[3].replace(re, "");



        if (src != strDataSource) {
            execASP(strCallBack + '&s_remoteCopy=true&s_SessionID=' + extSessionID + '&s_moveMode=' + moveMode + '&s_element=' + srcid + '&s_sourceURL=' + src + '&s_target=' + target + '&s_dock=' + dock + '#show_' + target);
        }
        else {
            if (cutcopy == "True") {
                execASP(strCallBack + '&s_copyElement=true&s_SessionID=' + s_SessionID + '&s_moveMode=' + moveMode + '&s_element=' + srcid + '&s_sourceURL=' + src + '&s_target=' + target + '&s_dock=' + dock + '#show_' + target);
            }
            else {
                execASP(strCallBack + '&s_moveElement=true&s_SessionID=' + s_SessionID + '&s_moveMode=' + moveMode + '&s_element=' + srcid + '&s_sourceURL=' + src + '&s_target=' + target + '&s_dock=' + dock + '#show_' + target);
            }
        }
    }
}

function pasteLink(target, dock, linkType) {

    var linkType = linkType || "Link";
    var src;
    src = getCookieClipboardValue();
    var strng;
    var re;
    strng = new String(src);
    var strings;
    re = /^url=/i;
    if (strng.search(re) != -1) {
        strings = strng.split("\n");
        re = /^url=/i;
        src = strings[0].replace(re, "");
        re = /^id=/i;
        var srcid;
        srcid = strings[1].replace(re, "");

        re = /^cutcopy=/i;
        var cutcopy;
        cutcopy = strings[2].replace(re, "");

        re = /^SessionID=/i;
        var extSessionID;
        extSessionID = strings[3].replace(re, "");



        if (src != strDataSource) {
        }
        else {
            execASP(strCallBack + '&s_paste'+ linkType  +'=true&s_SessionID=' + s_SessionID + '&s_moveMode=inside&s_element=' + srcid + '&s_sourceURL=' + src + '&s_target=' + target + '&s_dock=' + dock + '#show_' + target);
        }
    }
}
var dragSourceID;

function dropElement(ev) {

    if (DragDropEnabled && dragmode) {
        var oelem;
        var ev = ev || window.event;
        var evtargetEl = ev.target || ev.srcElement;

        //if (window.event.altKey)
        //	oelem=document.body;	
        //else
        oelem = getElement(evtargetEl);
        if (oelem.getAttribute('srcid') != null || ev.altKey) {
            var src, target, dock;
            dock = '';
            if (ev.dataTransfer)
                src = ev.dataTransfer.getData('Text');
            else
                src = dragSourceID;


            //if (window.event.altKey)
            //	target='0';
            //else
            {
                target = oelem.getAttribute('srcid');
                dock = oelem.getAttribute('dock');
                if (dock == null)
                    dock = '';


            }
            if (src != target) {
                var moveMode;
                moveMode = dropMode;
                /*if (dropMode=='in')		
                moveMode='inside';
                else
                moveMode='before';*/
                if (oelem.getAttribute('droptype') == 'inside')
                    moveMode = 'inside';
                if (moveMode == 'inside') {
                    dock = oelem.getAttribute('childdock');
                    if (dock == null)
                        dock = '';
                }
                dropped = true;
                if (isNaN(parseInt(src))) {
                    if (src != null) {

                        var strng;
                        var re;
                        strng = new String(src);
                        var strings;
                        re = /^url=/i;
                        if (strng.search(re) != -1) {
                            strings = strng.split("\n");
                            if (dragmode != true) {
                                re = /^url=/i;
                                src = strings[0].replace(re, "");
                                re = /^id=/i;
                                var srcid;
                                srcid = strings[1].replace(re, "");

                                re = /^SessionID=/i;
                                var extSessionID;
                                extSessionID = strings[3].replace(re, "");

                                execASP(strCallBack + '&s_remoteCopy=true&s_SessionID=' + extSessionID + '&s_moveMode=' + moveMode + '&s_element=' + srcid + '&s_sourceURL=' + src + '&s_target=' + target + '&s_dock=' + dock + '#show_' + target);
                            }
                            else {
                                var gridAdd = '';

                                var altKey = window.event.altKey;

                                if ( /*moveMode == 'inside' &&*/oelem.getAttribute('GridSizeX') != null) {
                                    //altKey=true;
                                    gridAdd = '&GridSizeX=' + oelem.getAttribute('GridSizeX');
                                }

                                if ( /*moveMode == 'inside' && */oelem.getAttribute('GridSizeY') != null) {
                                    //altKey=true;
                                    gridAdd = gridAdd + '&GridSizeY=' + oelem.getAttribute('GridSizeY');
                                }

                                re = /^id=/i;
                                src = strings[1].replace(re, "");
                                if (ev.ctrlKey)
                                    execASP(strCallBack + '&s_copyElement=true&s_posx=' + (window.event.x) + '&s_posy=' + (window.event.y) + '&s_posonly=' + altKey + gridAdd + '&s_moveMode=' + moveMode + '&s_element=' + src + '&s_target=' + target + '&s_dock=' + dock + '#show_' + target);
                                else/* gridgröße [target.getAttribute('')] als parameter übergeben [wenn target.getAttribute('GridSizeX')!=null (gridsize gesetzt), "alt" annehmen], div tag mit position:absolute um elemente */
                                    execASP(strCallBack + '&s_moveElement=true&s_posx=' + (window.event.x) + '&s_posy=' + (window.event.y) + '&s_posonly=' + altKey + gridAdd + '&s_moveMode=' + moveMode + '&s_element=' + src + '&s_target=' + target + '&s_dock=' + dock + '#show_' + target);

                            }
                        }
                        else {
                            re = /\n/g;
                            src = strng.replace(re, "<br />"); //linebreaks			
                            strng = new String(src);
                            re = /\t/g;
                            src = strng.replace(re, "&nbsp;"); //tabs				

                            execASP(strCallBack + '&s_createElement=true&s_moveMode=' + moveMode + '&s_target=' + target + '&s_dock=' + dock + '&s_elementText=' + src + '#show_' + target);

                        }
                    }

                }
                else
                    execASP(strCallBack + '&s_moveElement=true&s_posx=' + (ev.x + 10) + '&s_posy=' + (ev.y + 10) + '&s_posonly=' + ev.altKey + '&s_moveMode=' + moveMode + '&s_element=' + src + '&s_target=' + target + '&s_dock=' + dock + '#show_' + target);


            }
            dragmode = false;
        }
    }
}

//----------


function startDrag() {

    if (srcEl.getAttribute('srcid') != null && srcEl.getAttribute('nodrag') == null && resizeMode == false && DragDropEnabled == true) {

        if (srcEl.dragDrop)
            srcEl.dragDrop();
        else {
            //window.alert(srcEl.getAttribute('srcid'));
            dragSourceID = srcEl.getAttribute('srcid');
            dragstart();
        }
    }
}


function getElement(obj) {
    var oelem;
    oelem = obj;
    while (oelem) {
        if (oelem.getAttribute && oelem.getAttribute('srcid') != null) {
            return oelem;
            break;
        }
        oelem = oelem.parentNode || oelem.parentElement;
    }
    return obj;
}

var lastEv;

function queryDrag(ev) {
    ev = ev || window.event;


    if ((ev.button == 1 || ev.button == 0) && (DragDropEnabled || ev.ctrlKey)) {


        window.clearTimeout(timer);
        //window.event.cancelBubble=false;
        var oelem;
        var clickTarget = ev.target || ev.srcElement;
        oelem = getElement(clickTarget);


        if (oelem.getAttribute && oelem.getAttribute('srcid') != null && ev.ctrlKey) {

            var multiSelEl = document.getElementsByName("CurrentMultiSel")[0];
            if (multiSelEl.value == '')
                multiSelEl.value = ';';
            var curVal = new String(multiSelEl.value);
            var re = new RegExp(";" + oelem.getAttribute('srcid') + ";", "i");

            if (curVal.search(re) != -1) {
                multiSelEl.value = curVal.replace(re, ';');
                oelem.style.backgroundImage = '';
            }
            else {
                multiSelEl.value += oelem.getAttribute('srcid') + ';';
                oelem.style.backgroundImage = 'url(' + strAppRoot + '/images/transparent_cover.gif)';
            }
            //oelem.style.cssText='width:99%;margin:1px;border:2px dashed #FF0000;background-image:url('+ strAppRoot + '/images/transparent_cover.gif);';		
            return false;
        }

        if (oelem.getAttribute && oelem.getAttribute('srcid') != null && oelem.getAttribute('nodrag') == null && resizeMode == false) {


            srcEl = oelem;
            lastEv = ev;
            timer = window.setTimeout('startDrag()', 350);

            timerx = ev.clientX;
            timery = ev.clientY;

            ev.cancelBubble = true;

        }
        else {

            return true;
        }

    }


}



var resizeElementID;
var propertyID;
function ResizeElement(element, elementID, p_propertyID, ev) {
    ResizeElementExt(element, elementID, p_propertyID, 'width', ev);
}
function ResizeElementExt(element, elementID, p_propertyID, dimension, ev) {

    if (DragDropEnabled) {
        ev = ev || window.event;


        resizeMode = true;
        resizeDim = dimension;
        propertyID = p_propertyID;
        if (document.body.setCapture)
            document.body.setCapture();
        clientResize = 'Server';
        if (ev.cancelBubble)
            ev.cancelBubble = true;
        oelem = element;
        resizeElementID = elementID;
        if (ev.pageX) {
            if (dimension == 'width')
                tdStartX = ev.pageX - oelem.scrollWidth;
            else
                tdStartY = ev.pageY - oelem.scrollHeight;
        }
        else {
            if (dimension == 'width')
                tdStartX = ev.clientX - oelem.scrollWidth;
            else
                tdStartY = ev.clientY - oelem.scrollHeight;
        }


    }
    return false;
}


function showProps(ffMouseEvent) {

    var currTarget;

    if (window.event) {
        currTarget = window.event.srcElement;
    }
    else if (ffMouseEvent) {
        currTarget = ffMouseEvent.target;
    }



    if (globalEdit != true && currTarget) {
        var oelem;
        oelem = getElement(currTarget);
        if (oelem && oelem.getAttribute)
            if (oelem.getAttribute('srcid') > 0 && oelem.getAttribute('disableProps') != 'true')
                aenet('ElementToEdit=' + oelem.getAttribute('srcid'));
    }
}

function check_version() {
    window.alert(s_dirtyWriteWarning);

}



function reload_window(FileNameID, PropertyID) {
    document.forms[0].submit();
}


function QueryInlineEdit(strelement) {
    if (strelement.style) {
        if (globalEdit != true && strelement.style) {
            if (window.event.keyCode != 17 && (!window.event.ctrlKey || window.event.keyCode == 86)) // ignore ctrl, but start edit on paste
            {

                strelement.style.display = "block";
                globalEdit = true;
                DragDropEnabled = false;
                if (window.event.srcElement) {
                    window.event.srcElement.style.borderColor = "black";
                    window.event.srcElement.style.borderWidth = "1px";
                    window.event.srcElement.style.borderStyle = "solid";
                    window.event.srcElement.style.padding = "2px";
                }
            }
        }
        else
            if (strelement.style.display != "block")
                window.alert(s_saveotherchanges);
    }
}




function ClkCheckbox(pBox) {
    if (document.all.item(pBox).checked == true) {
        document.all.item(pBox).checked = false
    }
    else {
        document.all.item(pBox).checked = true
    }
}





//var dialogObject =null;
//if (window.createPopup)
//    dialogObject=window.createPopup();



var callerObject;
var cx, cy;
var netTimeOutID;
var previousStyle;
var dialogCM;


function resizeDialog() {
    //		if (parent)
    //		{

    //		    if (dialogObject)
    //		        dialogObject.show(cx, cy, dialogObject.document.body.scrollWidth, dialogObject.document.body.scrollHeight, lastOffsetParent);			    

    //        }
    //        

}

function loadDialog(number, caller) {
    window.alert('deprecated');
}




function loadDialog_legacy(number, caller, dockName, clientX, clientY, ev) {



    window.document.getElementById("ContextIframe").src = strAppRoot + "/Kontext/Editing/ContextMenu/LegacyMenu.aspx?target=" + number + '&dockName=' + dockName + '&CallBack=' + strMenuURL;

    ev = ev || window.event;
    if (ev.stopPropagation) {
        ev.stopPropagation();
    }
    if (ev.pageX) {

        window.document.getElementById("ContextMenuDiv").style.display = 'block';
        window.document.getElementById("ContextMenuDiv").style.top = ev.pageY + 'px';
        window.document.getElementById("ContextMenuDiv").style.left = ev.pageX + 'px';
    }
    else {
        window.document.getElementById("ContextMenuDiv").style.top = clientY;
        window.document.getElementById("ContextMenuDiv").style.left = clientX;
    }

    window.document.getElementById("ContextMenuDiv").style.display = 'block';
    window.document.getElementById("ContextMenuDiv").style.zIndex = 20000;


    return false;
}

function loadDialog_legacy_div(number, caller, dockName, clientX, clientY, ev) {

    ev = ev || window.event;
    if (ev.stopPropagation) {
        ev.stopPropagation();
    }


    ev.cancelBubble = true;

    if (callerObject) {
        window.clearTimeout(netTimeOutID);
        callerObject.style.cssText = previousStyle;
    }
    //lastOffsetParent=ev.srcElement;
    callerObject = caller;
    previousStyle = callerObject.style.cssText;

    callerObject.style.cssText = callerObject.style.cssText + ';background-image:url(' + strAppRoot + '/images/transparent_cover.gif);';
    netTimeOutID = window.setTimeout('callerObject.style.cssText=previousStyle;', 3000);

    var opop = window.document.getElementById("popup_menu_div");

    var params = 'test=test';
    var requestUrl = '';

    if (window.document.getElementsByName("CurrentMultiSel")[0].value != '' && window.document.getElementsByName("CurrentMultiSel")[0].value != ';') {
        requestUrl = strCallbackUrl + "/Kontext/Editing/ContextMenu/LegacyMenu.aspx?target=" + window.document.getElementsByName("CurrentMultiSel")[0].value + "&MultiSel=true&dockName=" + dockName + "&SessionID=" + s_SessionID + "&CurrentTarget=" + nCurrentTarget + "&Callback=" + strMenuURL;

    }
    else {

        requestUrl = strCallbackUrl + "/Kontext/Editing/ContextMenu/LegacyMenu.aspx?target=" + number + "&MultiSel=false&dockName=" + dockName + "&CurrentTarget=" + nCurrentTarget + "&SessionID=" + s_SessionID + "&Callback=" + strMenuURL;

    }

    var request = new XMLHttpRequest();
    request.open("POST", requestUrl, true);
    request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    request.setRequestHeader("Content-length", params.length);
    request.setRequestHeader("Connection", "close");

    opop.innerHTML = '<div class="contextmenu_waiting">&nbsp;</div>';
    opop.style.position = 'absolute';
    opop.style.left = (ev.clientX + getScrollX()) + 'px';
    opop.style.top = (ev.clientY + getScrollY()) + 'px';



    var winW = window.innerWidth;
    var winH = window.innerHeight;


    if (ev.clientX > winW - 230)
        opop.style.left = winW - 230 + getScrollX();
    if (ev.clientY > winH - 250)
        opop.style.top = winH - 250 + getScrollY();

    opop.style.width = '200px';
    opop.style.display = 'block';
    opop.style.zIndex = 20000;

    request.onreadystatechange = function () {
        if (request.readyState != 4) { return; }

        opop.innerHTML = request.responseText;
    }

    request.send(params);



    return false;
}

function hideDialog_legacy() {
    HidePopupDiv();

    //parent.document.getElementById("ContextMenuDiv").style.display='none';

    //window.document.getElementById("ContextIframe").src = "";

    return false;
}


function getScrollX() {
    if (document.documentElement && document.documentElement.scrollLeft)
        return document.documentElement.scrollLeft;
    else
        return (document.all) ? document.body.scrollLeft : window.pageXOffset;
}
function getScrollY() {
    if (document.documentElement && document.documentElement.scrollTop)
        return document.documentElement.scrollTop;
    else
        return (document.all) ? document.body.scrollTop : window.pageYOffset;
}

//&dock=" + dockName

//var lastOffsetParent=null;
function loadDialog_dock(number, caller, dockName, noStyleChange, ev) {


    ev = ev || window.event;


    //window.alert(xsltContextMenu);
    if (callerObject) {
        window.clearTimeout(netTimeOutID);
        callerObject.style.cssText = previousStyle;
    }
    //lastOffsetParent=ev.srcElement;
    callerObject = caller;
    previousStyle = callerObject.style.cssText;
    if (!noStyleChange)
        callerObject.style.cssText = callerObject.style.cssText + ';background-image:url(' + strAppRoot + '/images/transparent_cover.gif);';
    else
        callerObject.style.borderWidth = '3px';
    netTimeOutID = window.setTimeout('callerObject.style.cssText=previousStyle;', 3000);

    //cx=window.event.offsetX;
    //cy=window.event.offsetY;
    //window.alert(caller.style.offsetX);

    var srcTree = new ActiveXObject("Msxml2.DOMDocument");
    //activate for SSL, deactivate for NT Auth
    if (document.location && document.location.protocol == "https:")
        srcTree.setProperty('ServerHTTPRequest', true);
    srcTree.async = false;


    if (window.document.getElementsByName("CurrentMultiSel")[0].value != '' && window.document.getElementsByName("CurrentMultiSel")[0].value != ';') {
        srcTree.load(strAppRoot + "/Kontext/Editing/ContextMenu/ContextMenu.aspx?target=" + window.document.getElementsByName("CurrentMultiSel")[0].value + "&MultiSel=true&dockName=" + dockName + "&SessionID=" + s_SessionID + "&CurrentTarget=" + nCurrentTarget + "&Callback=" + strMenuURL);

    }
    else {

        srcTree.load(strAppRoot + "/Kontext/Editing/ContextMenu/ContextMenu.aspx?target=" + number + "&MultiSel=false&dockName=" + dockName + "&CurrentTarget=" + nCurrentTarget + "&SessionID=" + s_SessionID + "&Callback=" + strMenuURL);

    }
    var xsltTree = new ActiveXObject("Msxml2.DOMDocument");
    //activate for SSL, deactivate for NT Auth
    if (document.location && document.location.protocol == "https:")
        xsltTree.setProperty('ServerHTTPRequest', true);
    xsltTree.async = false;

    xsltTree.load(xsltContextMenu);

    //	if (0 && dialogObject)
    //	{
    //		dialogObject.document.body.innerHTML = srcTree.transformNode(xsltTree);
    //		dialogObject.show(0, 0, 0, 0);	
    //		resizeDialog();
    //		resizeDialog();
    //	}
    //	else 
    {

        var opop = window.document.getElementById("popup_menu_div");

        opop.innerHTML = srcTree.transformNode(xsltTree);
        opop.style.left = ev.clientX + getScrollX();
        opop.style.top = ev.clientY + getScrollY();



        var winW = 630, winH = 460;
        winW = document.body.offsetWidth;
        winH = document.body.offsetHeight;

        if (ev.clientX > winW - 230)
            opop.style.left = winW - 230 + getScrollX();
        if (winH > 250 && ev.clientY > winH - 250)
            opop.style.top = winH - 250 + getScrollY();

        opop.style.width = '200px';
        opop.style.display = 'block';
        opop.style.zIndex = 20000;


    }


    window.event.cancelBubble = true;
    return false;
}

function confirmMassManipulation(nAffected) {
    if (nAffected && nAffected > 10) {
        var re;
        re = /%n/i;
        var str = new String(s_confirmMassManipulation);
        var msg;
        msg = str.replace(re, nAffected);
        if (!window.confirm(msg)) {

            return false;
        }
    }
    return true;
}

function dialogEvent(pAction, pElementID, pAllowed, pPath, pDockName, nAffected)//pElementID used for single and multiple elements.
{

    if (nAffected && !confirmMassManipulation(nAffected)) {
        if (document.all) {
            window.location.reload();
        }
        else {
            parent.location.reload();
        }
        return;
    }

    switch (pAction) {
        case "Draft":
        case "Finished":
        case "Online":
        case "Offline":
        case "DeletionRequested":
        case "RevisionPending":
        case "Deleted":
        case "Lock":
        case "UnLock":
        case "Duplicate":
        case "DuplicateLocal":
        case "Commit":
        case "Group":
        case "FinalDelete":
            if (pAllowed == "") {
                if (document.all) {
                    window.location.href = pPath + "action=" + pAction + "&actMultipleElements=" + pElementID + "&s_dock=" + pDockName;
                }
                else {
                    parent.location.href = pPath + "action=" + pAction + "&actMultipleElements=" + pElementID + "&s_dock=" + pDockName;
                }

                //dialogObject.show(0, 0, 0, 0);
            }
            else {
                alert(pAllowed);
            }
            break;
    }

}



function HidePopupDiv() {
    var opop = window.document.getElementById("popup_menu_div");
    if (opop)
        opop.style.display = 'none';

    //if (dialogObject)
    //     dialogObject.hide();
}

function openEditor(pElementType, pDockname, pParent) {
    var pPath = "CreateChild=true&FormTypeID=" + pElementType + "&s_DockName=" + pDockname + "&ParentID=" + pParent;
    HidePopupDiv();

    dialogCM = window.open(strAppRoot + "/Kontext/Editing/Dialogs/ElementEditorDialog.aspx?" + pPath, 'advancededitor', 'height=560,width=780,resizable=yes,scrollbars=yes,status=no,location=no,toolbar=no,menubar=no', true);


    if (dialogCM)
        dialogCM.focus();
}

function KontextPageScriptStartup() {

    document.ondblclick = showProps;

    if (document.all) {
        document.body.ondragstart = dragstart;
        document.body.ondrop = dropElement;        
        document.body.ondragover = dragOver;
        document.body.ondragenter = dragOver;
        document.body.ondragend = dragEnd;
        document.onkeypress = keypressed;
    }
    else {
        document.onmouseover = dragOver;
        document.onmouseup = dropElement;
        document.onkeydown = keypressed;
    }
    document.onmousedown = queryDrag;
}



var ToolTipEtID;
var ToolTipDomEl;

function GetToolTip(ElementTypeID, ImageTD) {
    ToolTipEtID = ElementTypeID;
    ToolTipDomEl = ImageTD;
    while (ToolTipDomEl.tagName != "TD")
        ToolTipDomEl = ToolTipDomEl.previousSibling;

    window.setTimeout("ShowToolTip(" + ElementTypeID + ")", 300);
}

function CancelToolTip() {
    ToolTipEtID = null;
}
function ShowToolTip(ElementTypeID) {

    var img;
    for (var i = 0; i < ToolTipDomEl.childNodes.length; i++) {
        if (ToolTipDomEl.childNodes[i].tagName == "IMG")
            img = ToolTipDomEl.childNodes[i];
    }
    var currTitle = img.getAttribute("title");
    if (ToolTipEtID == ElementTypeID && (currTitle == null || currTitle.length == 0) && (img.getAttribute("notitle") == null || img.getAttribute("notitle").length <= 0)) {

        if (window.XMLHttpRequest) {
            var request = new XMLHttpRequest();
            request.open("GET", strCallbackUrl + "/Kontext/Editing/ContextMenu/ElementTypeDescription.aspx?etid=" + ElementTypeID, false);
            request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            request.setRequestHeader("Connection", "close");
            request.send("");

            var response = eval(request.responseText);
            var toolTip = response.d;
            if (toolTip.length <= 0) {
                img.setAttribute("notitle", "true");
            }
            else {
                img.setAttribute("title", toolTip);
                var nextTd = ToolTipDomEl.nextSibling;
                while (nextTd.tagName != "TD") {
                    nextTd = nextTd.nextSibling;
                }
                nextTd.setAttribute("title", toolTip);

            }
        }
    }
}





function EditorEvent(pEvent, pAdditional) {

    switch (pEvent) {
        case "ReloadClose":

            try {
                if (opener) {
                    //window.close();	
                    opener.focus();
                    opener.location.reload();
                }
            }
            catch (ex) {
                window.close();
            }
            break;
    }

}
/*
function SetDirtyValue(val)
{
var dirtyField=window.document.getElementById('FormIsDirty');
if (dirtyField && dirtyField.value)
dirtyField.value=val;
}

function IsDirty()
{
var dirtyField=window.document.getElementById('FormIsDirty');
if (dirtyField && dirtyField.value)
return dirtyField.value=='1';	
else
return false;

}

function SetDirty()
{
SetDirtyValue('1');
}
function ClearDirty()
{
SetDirtyValue('');
}

*/


function ContextMenuFilter(DomRoot, keyword) {

    if (keyword == '*')
        keyword = '.*';

    var tds, i;
    if (keyword.length < 2) {


        //hide blocks
        tds = DomRoot.getElementsByTagName('div');
        for (i = 0; i < tds.length; i++) {

            if (tds[i].className == 'SubMenu') {
                tds[i].style.display = 'none';
            }
        }

        //show lines
        tds = DomRoot.getElementsByTagName('td');
        for (i = 0; i < tds.length; i++) {

            if (tds[i].className == 'l') {


                tds[i].parentNode.style.display = 'block';


            }
        }
        //show categories
        tds = DomRoot.getElementsByTagName('div');
        for (i = 0; i < tds.length; i++) {

            if (tds[i].className == 'MenuRow') {
                tds[i].style.display = 'block';
            }
        }
        return;
    }

    try {
        var reg = RegExp(keyword, "i");
        reg.ignoreCase = true;
    }
    catch (e) {
        return;
    }




    //expand all categories
    tds = DomRoot.getElementsByTagName('div');
    for (i = 0; i < tds.length; i++) {

        if (tds[i].className == 'SubMenu') {
            tds[i].style.display = 'block';
        }
    }

    //filter items
    tds = DomRoot.getElementsByTagName('td');
    for (i = 0; i < tds.length; i++) {

        if (tds[i].className == 'l') {

            if (keyword.lenght == 0 || reg.test(tds[i].innerHTML))
                tds[i].parentNode.style.display = 'block';
            else
                tds[i].parentNode.style.display = 'none';

        }
    }

    //hide categories without items
    tds = DomRoot.getElementsByTagName('div');
    for (i = 0; i < tds.length; i++) {

        if (tds[i].className == 'MenuRow') {

            var trs = tds[i + 1].getElementsByTagName('tr');
            var j;
            var visible = false;
            for (j = 0; j < trs.length; j++) {

                if (trs[j].style.display == 'block') {
                    visible = true;
                }
            }
            if (!visible)
                tds[i].style.display = 'none';
            else
                tds[i].style.display = 'block';
        }
    }


}

function GetEtDescription(etid) {


    var etTree = new ActiveXObject("Msxml2.DOMDocument");
    //activate for SSL, deactivate for NT Auth
    if (document.location && document.location.protocol == "https:")
        etTree.setProperty('ServerHTTPRequest', true);
    etTree.async = false;
    etTree.load(strAppRoot + "/Kontext/Editing/ContextMenu/ElementTypeDescription.aspx?etid=" + etid);
    alert(etTree);
}

function GetBase() {
    var oBaseColl = document.getElementsByTagName('BASE');
    return ((oBaseColl && oBaseColl.length) ? oBaseColl[0].href :
        null);
}


function NavigateToNewElement(elementID) {

    if (strCallBack) {
        var origUrl = strCallBack;
        var newUrl = new String(origUrl).replace("target=", "target=" + elementID + "&oldTarget=");
        location.href = newUrl;
    }

}

