function copy(inElement) {

    if (inElement != null) {
        //window.clipboardData.setData('Text',inElement.innerHTML);
        window.clipboardData.setData('Text', inElement);
        var range = document.createElement('input');
        range.setAttribute('type', 'text');
        //range.value=inElement.innerHTML;
        //range.value=inElement.innerText;
        range.value = inElement;
        //range.execCommand('Copy');
        document.execCommand('Copy');
        //var range = inElement.createTextRange();
        //if (range && BodyLoaded==1)
        //range.execCommand('Copy');

    } else {
        var flashcopier = 'flashcopier';
        if (!document.getElementById(flashcopier)) {
            var divholder = document.createElement('div');
            divholder.id = flashcopier;
            document.body.appendChild(divholder);
        }
        document.getElementById(flashcopier).innerHTML = '';
        var divinfo = '<embed src="../tblubrechn/js/_clipboard.swf" FlashVars="clipboard=' + encodeURIComponent(inElement.textContent) + '" width="0" height="0" type="application/x-shockwave-flash"></embed>';
        document.getElementById(flashcopier).innerHTML = divinfo;
        //document.getElementById(flashcopier).innerText = divinfo;
    }
}

function copyFlash(inElement) {
    if (inElement.createTextRange) {
        var range = inElement.createTextRange();
        if (range && BodyLoaded == 1)
            range.execCommand('Copy');
    }
    else {
        var flashcopier = 'flashcopier';
        if (!document.getElementById(flashcopier)) {
            var divholder = document.createElement('div');
            divholder.id = flashcopier;
            document.body.appendChild(divholder);
        }

        document.getElementById(flashcopier).innerHTML = '';

        var textenc = getText(inElement);
        textenc = encodeURI(textenc);

        //remove double Whitespaces
        while (textenc.search('%20%20') >= 0)
            textenc = textenc.replace('%20%20', '%20');
        //remove double Tabs
        while (textenc.search('%09%09') >= 0)
            textenc = textenc.replace('%09%09', '%09');

        //remove EnterTab
        while (textenc.search('%0A%09') >= 0)
            textenc = textenc.replace('%0A%09', '');

        //remove EnterSpace
        while (textenc.search('%0A%20') >= 0)
            textenc = textenc.replace('%0A%20', '');

        //remove c2a0
        while (textenc.search('%09%C2%A0') >= 0)
            textenc = textenc.replace('%09%C2%A0', '');

        while (textenc.search('%C2%A0') >= 0)
            textenc = textenc.replace('%C2%A0', '');

        var divinfo = '<embed src="js/_clipboard.swf" FlashVars="clipboard=' + textenc + '" width="0" height="0" type="application/x-shockwave-flash"></embed>';
        document.getElementById(flashcopier).innerHTML = divinfo;
    }
}

function getText(element) {
    var textResult = "";
    if (element.nodeName == "TABLE") {
        textResult += getTableText(element);
    }
    else if (element.nodeName == "INPUT") {
        textResult += getInputText(element);
    }
    else if (element.nodeName == "SELECT") {
        textResult += getSelectText(element);
    }
    else if (element.childNodes != null && element.childNodes.length > 0) {
        var node = element.childNodes[0];
        while (node != null) {
            textResult += getText(node);
            node = node.nextSibling;
        }
    }
    else {
        if (element.nodeName == '#text') {
            if (element.nodeValue != "\n\t" && element.nodeValue != " ")
                textResult += element.nodeValue;
        }
    }
    return textResult;
}

function getTableText(element) {
    var result = "";
    var i = 0;
    switch (element.nodeName) {
        case "TABLE":
            var tr = element.getElementsByTagName("TR");
            for (i = 0; i < tr.length; i++) {
                result += getTableText(tr[i]) + "\r\n";
            }
            result = result.substring(0, result.lastIndexOf("\r\n"));
            break;
        case "TR":
            var td = element.getElementsByTagName("TD");
            for (i = 0; i < td.length; i++) {
                result += getText(td[i]) + "\t";
            }
            result = result.substring(0, result.lastIndexOf("\t"));
            break;
    }
    return result;
}

function getInputText(element) {
    var result = " ";
    if (element.nodeName == "INPUT") {
        switch (element.type) {
            case "text":
                result += element.value;
                break;
            case "password":
                result += element.value.replace('', '*');
                break;
            case "checkbox", "radio":
                if (element.checked)
                    result += element.value;
                break;
        }
    }
    return result;
}

function getSelectText(element) {
    var result = "";
    switch (element.nodeName) {
        case "SELECT":
            var opt = element.getElementsByTagName("OPTION");
            for (var i = 0; i < opt.length; i++) {
                if (opt[i].selected)
                    result += " " + getText(opt[i]);
            }
            /*
            switch(element.type){
            case "select-one":
            break;
            case "select-multiple":
                
            break;
            }
            */
            break;
        /*
        case "OPTION":
        break;
        */ 
    }

    return result;
}




// ------------------------------------------
// neuer copy versuch
// ------------------------------------------

function ToClipboard(node) {

    // create temp clipboard node
    var nNode = node.cloneNode(true);

    // initialize temp clipboard node
    nNode.id = "col3_copy";
    nNode.style.position = "absolute";
    nNode.style.visibility = "hidden";
    nNode.style.top = "0";
    nNode.style.left = "0";
    nNode.style.height = node.scrollHeight;
    nNode.style.width = node.scrollWidth;



    // set nodes with attribute class="clipboard_InvisibleContent" to visible
    ShowHiddenClipboardNodes(nNode);

    // remove elements with attribute style="visibility:hidden;" || style="display:none;"
    RemoveHiddenNodes(nNode);

    // replace images where src isn't a file
    // get images from temp clipboard node
    var images = nNode.getElementsByTagName("IMG");

    for (var i = 0; i < images.length; i++) {
        var img = images[i];

        var imgType = img.mimeType.substring(0, img.mimeType.length - 5);
        var regexObj = new RegExp("\." + imgType + "$", "i");
        if (img.src.match(regexObj)) continue;

        var newImgSrc = GetImageSrc(img.src);
        if (newImgSrc == "-1") continue;

        img.src = newImgSrc;
    }

    // replace input elements with text
    var inputElements = nNode.getElementsByTagName("INPUT");

    while (inputElements.length > 0) {
        var inputElement = inputElements[0];
        var text = getInputText(inputElement);
        var parentNode = inputElement.parentNode;
        parentNode.replaceChild(document.createTextNode(text), inputElement);
    }



    // insert temp clipboard node
    node.parentNode.appendChild(nNode);




    // get inner node
    var innerNode = nNode;
    while (innerNode.nodeName == "DIV" && innerNode.children.length <= 1 && innerNode.firstChild)
        innerNode = innerNode.firstChild


    var range = document.selection.createRange();
    range.moveToElementText(innerNode);

    range.moveStart("character", 0);
    //range.moveStart('character', 1);
    //range.moveStart('character', -1);

    // --- set data to clipboard

    // didn't work for 'text/html'
    //window.clipboardData.setData('text', range.text);
    //window.clipboardData.setData('text/html', range.htmlText);

    // IE
    range.select();

    // --- set data to clipboard ---
    document.execCommand('Copy');
    document.selection.empty();

    node.parentNode.removeChild(nNode);
}



var nodeIFrameGetImage = null;

function GetImage(baseNode, imageNode, url) {
    nodeIFrameGetImage = document.createElement("iframe");

    nodeIFrameGetImage.width = imageNode.width;
    nodeIFrameGetImage.height = imageNode.height;
    nodeIFrameGetImage.src = url;

    nodeIFrameGetImage.onreadystatechange = OnGetImage_Loaded;

    baseNode.appendChild(nodeIFrameGetImage);
}

function OnGetImage_Loaded() {
    if (nodeIFrameGetImage.readyState == "complete") {
        var s = 0;
        s = 1;
        alert("Loaded");


    }
}

var xmlHttp = null;

function CreateRequestObject() {
    try {
        // Mozilla, Opera, Safari sowie Internet Explorer (ab v7)
        xmlHttp = new XMLHttpRequest();
    } catch (e) {
        try {
            // MS Internet Explorer (ab v6)
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {
            try {
                // MS Internet Explorer (ab v5)
                xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                xmlHttp = null;
            }
        }
    }
}

function GetImageRequest(url) {
    CreateRequestObject();

    var url_GetImage = "http://www.ra-info.de/rcberechnungen/tblubrechn/global/GetImage.aspx?imgurl=";

    if (xmlHttp) {
        xmlHttp.open('GET', url_GetImage + escape(url), true);
        xmlHttp.onreadystatechange = function() {
            if (xmlHttp.readyState == 4) {
                alert("XmlHttpRequestReady");
                alert(xmlHttp.responseText);
            }
        };
        xmlHttp.send(null);
    }
}

function GetImageSrc(url) {
    if (xmlHttp == null)
        CreateRequestObject();
    if (xmlHttp == null)
        return "-1";

    var url_host = GetUrlHost();
    var url_GetImage = url_host + "/rcberechnungen/tblubrechn/global/GetImage.aspx?type=url&imgurl=";

    if (xmlHttp) {
        xmlHttp.open('GET', url_GetImage + escape(url), false);
        //        xmlHttp.onreadystatechange = function() {
        //            if (xmlHttp.readyState == 4) {
        //                //alert("XmlHttpRequestReady");
        //                alert(xmlHttp.responseText);
        //                imageResult = xmlHttp.responseText;
        //            }
        //        };
        xmlHttp.send(null);

        if (xmlHttp.responseText == "")
            return "-1";

        return url_host + xmlHttp.responseText;
    }
}

function GetUrlHost() {
    return document.location.protocol + "//" + document.location.hostname;
}

function ShowHiddenClipboardNodes(baseNode) {
    var regex_clipboard = "/clipboard_InvisibleContent/g";

    for (var i = 0; i < baseNode.childNodes.length; i++) {
        var childNode = baseNode.childNodes[i];
        if (childNode.nodeType != 1) continue;

        var classAttributeValue = childNode.attributes["class"] == null ? "" : childNode.attributes["class"].nodeValue;
        var matches = classAttributeValue.match(regex_clipboard);
        if (matches != null && matches.length > 0) {
            childNode.attributes["class"].nodeValue = classAttributeValue.replace(regex_clipboard, "");
        }
        ShowHiddenClipboardNodes(childNode);
    }
}

function RemoveHiddenNodes(baseNode) {
    for (var i = 0; i < baseNode.childNodes.length; i++) {
        var childNode = baseNode.childNodes[i];
        if (childNode.nodeType != 1) continue;

        if (childNode.style.visibility == "hidden" || childNode.style.display == "none") {
            baseNode.removeChild(childNode);
            i--;
        }
        else {
            RemoveHiddenNodes(childNode);
        }
    }
}
