﻿var highLightText, regExpReplace, replaceTag;

function openLinkWithHighLightText(link) {
    var inputKeywords, target;

    try {
        target = getTarget(getFileExtension(link));
        inputKeywords = getElementByIndexOfID("input", "_InputKeywords");

        if (target == "_self") {
            if (inputKeywords != null && inputKeywords.value != "") {
                if (link.indexOf("?") != -1)
                    link = link + "&highLightText=" + inputKeywords.value;
                else
                    link = link + "?highLightText=" + inputKeywords.value;
            }
        }
    }
    catch (e) { }

    window.open(link, target, "");
}

function getTarget(ext) {
    if (ext == "aspx" || ext == "") return "_self";
    return "_blank";
}

function getFileExtension(link) {
    var dot, ext;

    try {
        link = link.replace("http://" + document.location.host, "");
        dot = link.lastIndexOf(".").split("?")[0];
        if (dot == -1) return "";
        ext = link.substr(dot, link.length).toLowerCase().replace(".", "");
        if (ext.indexOf("/")) return "";
        return ext;
    }
    catch (e) { }

    return "";
}

function preperTheHighLightText() {
    var inputKeywords, contentDiv;

    try {
        inputKeywords = getElementByIndexOfID("input", "_InputKeywords");
        if (inputKeywords != null && inputKeywords.value != "") {
            setTimeout("preperTheHighLightText()", 1);
            return;
        }

        setTheHighLightTextParameters();
        if (highLightText == "") return;

        contentDiv = getElementByIndexOfID("div", "_MSO_ContentDiv");
        if (contentDiv == null) {
            setTimeout("preperTheHighLightText()", 1);
            return;
        }

        setHighLight(contentDiv, 0);
    }
    catch (e) { }
}

function getElementByIndexOfID(elementType, elementID) {
    var elementTypes = document.getElementsByTagName(elementType);

    for (var i = 0; i < elementTypes.length; i++) {
        if (elementTypes[i].id.indexOf(elementID) != -1) return elementTypes[i];
    }

    return null;
}

function setTheHighLightTextParameters() {
    highLightText = getValueFormQueryString("highLightText");
    regExpReplace = new RegExp(highLightText, "gi");
    replaceTag = "<span class='highLightText'>" + highLightText + "</span>";
}

function getValueFormQueryString(queryName) {
    var reqestsArray, reqestArray;

    if (window.location.search.indexOf(queryName) == -1) return;
    reqestsArray = window.location.search.substring(1).split("&");

    for (var i = 0; i < reqestsArray.length; i++) {
        reqestArray = reqestsArray[i].split("=");
        if (reqestArray[0] == queryName) return decodeURIComponent(reqestArray[1]);
    }
}

function setHighLight(element, position) {
    var newElement, elementData, elementParentNode;

    if (element.nodeType == 3) {
        elementData = element.data;
        if (elementData.indexOf(highLightText) != -1) {
            newElement = document.createElement("span");
            newElement.innerHTML = elementData.replace(regExpReplace, replaceTag);
            elementParentNode = element.parentNode;

            if (elementParentNode.childNodes.length - 1 == position)
                elementParentNode.appendChild(newElement);
            else
                elementParentNode.insertBefore(newElement, elementParentNode.childNodes[position + 1]);

            element.data = "";
        }
        return;
    }

    for (var i = element.childNodes.length - 1; i >= 0; i--) setHighLight(element.childNodes[i], i);
}
