var doc = null;
var oldContent;
var tEdit = null;
var selectedImage = null;
var selectedFlash = null;
var showTableBorders = true;
var bTableBarVisible = false;
var fromTopPos = 0;
var fromLeftPos = 0;

function open(value)
{
    if (doc != null)
    {
        element.document.body.detachEvent('onselectstart', checkSelection);
        element.document.detachEvent('onmouseup', onMouseUp);
        doc.detachEvent('ondragend', onMouseUp);
        doc.detachEvent('onkeyup', onKeyUp);
        doc.detachEvent('onpaste', onPaste);

        selectedImage = null;
        selectedFlash = null;
        if (showTableBorders)
        {
            colTables = doc.getElementsByTagName('TABLE');
            for (var i = 0; i < colTables.length; i++)
            {
                if (colTables[i].borderColor == "#dcdcdc" && colTables[i].border == '1' && colTables[i].style.borderStyle == 'dashed') 
                {
                    colTables[i].border = '0';
                    colTables[i].borderColor = '';
                    colTables[i].style.borderStyle = '';
                }
            }
        }

        doc.contentEditable = 'false';

        if (tEdit)
            tEdit.unSetTableElements();
    }
    doc = element.document.all(value);
    if (doc)
    {
        for (i = 0; i < element.document.links.length; i++)
        {
            element.document.links[i].detachEvent('onclick', binnCheckURL);
            element.document.links[i].attachEvent('onclick', binnNoReturn);
        }
        doc.style.cursor = 'text';
        element.document.body.attachEvent('onselectstart', checkSelection);
        element.document.attachEvent('onmouseup', onMouseUp);

        doc.attachEvent('ondragend', onMouseUp);
        doc.attachEvent('onkeyup', onKeyUp);
        doc.attachEvent('onpaste', onPaste);
        oldContent = doc.innerHTML;

        colTables = doc.getElementsByTagName('TABLE');
        for (var i = 0; i < colTables.length; i++)
            if (!colTables[i].border || colTables[i].border == '0')
            {
                colTables[i].borderColor = '#dcdcdc';
                colTables[i].border = '1';
                colTables[i].style.borderStyle = 'dashed';
            }   

        if (tEdit == null)
        {
            tEdit = new tableEditor(doc);
        }
        doc.contentEditable = 'true';
        doc.focus();
        markSelectedElement(0);
        show();
    }
}

function close()
{
    doc.style.border = '1px dashed red';
    element.document.body.detachEvent('onselectstart', checkSelection);
    element.document.detachEvent('onmouseup', onMouseUp);

    doc.detachEvent('ondragend', onMouseUp);
    doc.detachEvent('onkeyup', onKeyUp);
    doc.detachEvent('onpaste', onPaste);

    selectedImage = null;
    selectedFlash = null;
    if (showTableBorders)
    {
        colTables = doc.getElementsByTagName('TABLE');
        for (var i = 0; i < colTables.length; i++)
            if (colTables[i].borderColor == "#dcdcdc" && colTables[i].border == '1' && colTables[i].style.borderStyle == 'dashed')
            {
                colTables[i].border = '0';
                colTables[i].borderColor = '';
                colTables[i].style.borderStyle = '';
            }
    }

    doc.contentEditable = 'false';

    for (i = 0; i < element.document.links.length; i++)
    {
        element.document.links[i].detachEvent('onclick', binnNoReturn);
        element.document.links[i].attachEvent('onclick', binnCheckURL);
    }

    for (i = 0; i < element.document.forms.length; i++)
    {
        element.document.forms[i].attachEvent('onsubmit', binnNoReturn);
    }
    if (tEdit)
        tEdit.unSetTableElements();
    element.document.focus();
    doc.style.cursor = 'default';
    doc = null;
    hide();
}

function show()
{
    style.position = 'absolute';

    fromTopPos = element.document.body.scrollTop;
    fromLeftPos = element.document.body.scrollLeft;
    
    style.pixelLeft = fromLeftPos + 200;
    style.pixelTop = fromTopPos;

    style.width = 705;
    style.height = 108;

    style.padding = 0;
    style.margin = 0;
    style.unselectable = "on";
    style.display = "block";

    style.visibility = "visible";
    reset(true);
}

function hide()
{
    style.display = "none";
    style.visibility = "hidden";
}

function cancelEvent()
{
    window.event.cancelBubble = true;
    window.event.returnValue = false; 
}

function hover(on)
{
    var el = event.srcElement;

    if (el && !el.disabled && el.nodeName == "IMG" && el.className != "spacer") 
    {
        if (on)
        {
            el.setCapture();
            el.style.backgroundColor = "#c1d2ee";
            el.style.border = "#316ac5 1px solid";
        }
        else
        {
            el.releaseCapture();
            if (el.className != "checked")
            {
                el.className = null;
                el.style.backgroundColor = "#efefde";
                el.style.border = "1px solid #efefde";
                el.style.marginTop = 1;
                el.style.marginBottom = 1;
                el.style.marginLeft = 1;
                el.style.marginRight = 1;
                el.style.cursor = 'hand';
            }
            else
            {
                el.style.backgroundColor = "buttonhighlight";
            }
        }
    }
}

function press(on)
{
    var el = event.srcElement;

    if (el && !el.disabled && el.nodeName == "IMG" && el.className != "spacer") 
    {
        if (on)
        {
            el.style.border = "#316ac5 1px solid";
            el.style.marginTop = 2;
            el.style.marginBottom = 0;
            el.style.marginLeft = 2;
            el.style.marginRight = 0;
            el.style.backgroundColor = "buttonhighlight";
        }
        else if (el.className != "checked")
        {
            el.style.marginTop = 1;
            el.style.marginBottom = 1;
            el.style.marginLeft = 1;
            el.style.marginRight = 1;
            el.style.backgroundColor = "#c1d2ee";
        }
    }
}

function setChecked(el, bCheck)
{
    if (!el.disabled) 
    {
        if (bCheck)
        {
            el.className = "checked";
            el.style.border = "#316ac5 1px solid";
            el.style.marginTop = 2;
            el.style.marginBottom = 0;
            el.style.marginLeft = 2;
            el.style.marginRight = 0;
            el.style.backgroundColor = "buttonhighlight";
        }
        else 
        {
            el.className = null;
            el.style.border = "1px solid #efefde";
            el.style.backgroundColor = "#efefde";
            el.style.marginTop = 1;
            el.style.marginBottom = 1;
            el.style.marginLeft = 1;
            el.style.marginRight = 1;
            el.style.cursor = 'hand';
        }
    }
}

function setEnabled(el, bEnabled)
{
    el.disabled = !bEnabled;
    if (el.disabled)
    {
        el.releaseCapture();
        if (el.className != "checked")
        {
            el.className = null;
            el.style.backgroundColor = "#efefde";
            el.style.border = "1px solid #efefde";
            el.style.marginTop = 1;
            el.style.marginBottom = 1;
            el.style.marginLeft = 1;
            el.style.marginRight = 1;
            el.style.cursor = 'hand';
        }
        el.style.filter = "progid:DXImageTransform.Microsoft.BasicImage( Rotation=0,Mirror=0,Invert=0,XRay=0,Grayscale=1,Opacity=0.25)";
    }
    else
        el.style.filter = "";
}

var bDragging = false;
var offY = 0;
var offX = 0;

function startDrag()
{
    bDragging = true;
    offX = event.clientX; 
    offY = event.clientY;
    th.setCapture(true);
}

function stopDrag()
{
    th.releaseCapture();
    bDragging = false;
}

function changePos() 
{
    if (bDragging)
    {
        if (element.style.posTop >= element.document.body.scrollTop && (element.style.posTop + element.style.pixelHeight) <= (element.document.body.scrollTop + element.document.body.clientHeight))
            element.style.posTop = Math.max(Math.min(element.style.posTop + window.event.clientY - offY, element.document.body.scrollTop + element.document.body.clientHeight - element.style.pixelHeight - 1), element.document.body.scrollTop);
        if (element.style.posLeft >= element.document.body.scrollLeft && (element.style.posLeft + element.style.pixelWidth) <= (element.document.body.scrollLeft + element.document.body.clientWidth - 1))
            element.style.posLeft = Math.max(Math.min(element.style.posLeft + window.event.clientX - offX, element.document.body.scrollLeft + element.document.body.clientWidth - element.style.pixelWidth - 1), element.document.body.scrollLeft);
    }
}

function handleScroll()
{
    if (element.document.body.scrollTop - fromTopPos > 0)
    {
        element.style.posTop = element.style.posTop + (element.document.body.scrollTop - fromTopPos);
    } 
    else
    {
        element.style.posTop = element.style.posTop - (fromTopPos - element.document.body.scrollTop);
    }
    fromTopPos = element.document.body.scrollTop;
    
    if (element.document.body.scrollLeft - fromLeftPos > 0)
    {
        element.style.posLeft = element.style.posLeft + (element.document.body.scrollLeft - fromLeftPos);
    } 
    else
    {
        element.style.posLeft = element.style.posLeft - (fromLeftPos - element.document.body.scrollLeft);
    }
    fromLeftPos = element.document.body.scrollLeft;
}
function minimizeToolbar()
{
    if (toolbar.style.display != 'none')
    {
        style.height = "auto";
        toolbar.style.display = 'none';
        style.height = offsetHeight;
    }
    else
    {
        style.height = "auto";
        if (bTableBarVisible)
            tablebar.style.display = "block";
        toolbar.style.display = 'block';
        style.height = offsetHeight - 2;
        handleScroll();
    }
}

function getTableEditor()
{
    return tEdit;
}

function getTableBorders()
{
    return showTableBorders;
}

function getSelectedImage()
{
    return selectedImage;
}

function getSelectedFlash()
{
    return selectedFlash;
}

function putTableEditor(val)
{
    tEdit = val;
}

function putTableBorders(val)
{
    showTableBorders = val;
}

function putSelectedImage(val)
{
    selectedImage = val;
}

function putSelectedFlash(val)
{
    selectedFlash = val;
}

function showTableBar(show)
{
    if (show && !bTableBarVisible)
    {
        if (toolbar.style.display != 'none')
        {
            style.height = 137;
            tablebar.style.display = "block";
            handleScroll();
        }
    }
    if (!show && bTableBarVisible)
    {
        if (toolbar.style.display != 'none')
            style.height = 108;
        tablebar.style.display = "none";
    }
    bTableBarVisible = show;
}

window.attachEvent('onscroll', handleScroll);
