﻿function InsertHTTP(text) {
    var a = 0;

    var endOfHyperlink = 0;
    var startOfHyperlink = 0;


    while (a < text.length) {
        startOfHyperlink = text.toLowerCase().indexOf('www.', endOfHyperlink);
        var includeHTTP = true;

        var newStarPos = startOfHyperlink - 7;
        var protocol = text.substring(newStarPos, newStarPos + 7);

        if (startOfHyperlink >= 0 && (protocol.toLowerCase() != 'http://')) {
            endOfHyperlink = FindEndOfHyperlink(text, startOfHyperlink);
            if (endOfHyperlink <= 0) {
                endOfHyperlink = text.length;
            }
            var hyperlink = text.substring(startOfHyperlink, endOfHyperlink);

            if (includeHTTP) {
                hyperlink = 'http://' + hyperlink;
            }

            var beforHyperlink = text.substring(0, startOfHyperlink)
            var afterHyperlink = text.substring(endOfHyperlink, text.length);

            text = beforHyperlink + hyperlink + afterHyperlink;
            endOfHyperlink = (beforHyperlink + hyperlink).length + 1;
            a = (beforHyperlink + hyperlink).length;
        }

        a++;
        endOfHyperlink = a;
    }
    return text;

}

function FindEndOfHyperlink(text, from) {

    var terminationChars = [' ', '\n', ',', ';', '\t', '\r']

    var end = -1;

    for (a = 0; a < terminationChars.length; a++) {
        var tmp = text.toLowerCase().indexOf(terminationChars[a], from);
        if ((tmp > -1) && (tmp > from)) {
            if ((end > -1) && (tmp < end)) {
                end = tmp;
            }
            else if (end == -1) {
                end = tmp;
            }
        }
    }

    return ((end > -1) ? end : text.length);
}


function FindStartOfHyperlink(text, from) {

    var terminationChars = ['http://','www.',' ', '\n', ',', ';', '\t', '\r']

    var start = -1;

    for (a = 0; a < terminationChars.length; a++) {
        var tmp = text.toLowerCase().lastIndexOf(terminationChars[a],from-1);
        if ((tmp > -1) && (tmp < from)) {
            if ((start > -1) && (tmp < start)) {
                start = tmp + terminationChars[a].length;
            }
            else if (start == -1) {
                start = tmp + terminationChars[a].length;
            }
        }
    }

    return ((start > -1) ? start : 0);
}


function AnchorUrls(text) {

    text = InsertHTTP(text);
    //text = ReverseInsertHTTP(text);

    var a = 0;

    var endOfHyperlink = 0;
    var startOfHyperlink = 0;


    while (a < text.length) {
        startOfHyperlink = text.toLowerCase().indexOf('http://', endOfHyperlink);
        var includeHTTP = false;

        if (startOfHyperlink < 0) {
            startOfHyperlink = text.toLowerCase().indexOf('www.', endOfHyperlink);

            var includeHTTP = true;
        }


        if (startOfHyperlink >= 0) {
            endOfHyperlink = FindEndOfHyperlink(text, startOfHyperlink);



            if (endOfHyperlink <= 0) {
                endOfHyperlink = text.length;
            }
            var hyperlink = text.substring(startOfHyperlink, endOfHyperlink)
            if (includeHTTP) {
                hyperlink = '<a href="http://' + hyperlink + '" target="_blank" >' + hyperlink + '</a>';
            }
            else {
                hyperlink = '<a href="' + hyperlink + '" target="_blank" >' + hyperlink + '</a>';
            }
            var beforHyperlink = text.substring(0, startOfHyperlink)
            var afterHyperlink = text.substring(endOfHyperlink, text.length);

            text = beforHyperlink + hyperlink + afterHyperlink;
            endOfHyperlink = (beforHyperlink + hyperlink).length + 1;
            a = (beforHyperlink + hyperlink).length;
        }

        a++;
    }
    return text;
}

function ReplaceHyperlinkByClassName() {
    var items = $$('.commentFilter');
    for (j = 0; j < items.length; j++) {
        items[j].innerHTML = AnchorUrls(items[j].innerHTML);
    }
}


function ReverseInsertHTTP(text) {
   // var tlds = ['.AC', '.AD', '.AE', '.AERO', '.AF', '.AG', '.AI', '.AL', '.AM', '.AN', '.AO', '.AQ', '.AR', '.ARPA', '.AS', '.ASIA', '.AT', '.AU', '.AW', '.AX', '.AZ', '.BA', '.BB', '.BD', '.BE', '.BF', '.BG', '.BH', '.BI', '.BIZ', '.BJ', '.BM', '.BN', '.BO', '.BR', '.BS', '.BT', '.BV', '.BW', '.BY', '.BZ', '.CA', '.CAT', '.CC', '.CD', '.CF', '.CG', '.CH', '.CI', '.CK', '.CL', '.CM', '.CN', '.CO', '.COM', '.COOP', '.CR', '.CU', '.CV', '.CX', '.CY', '.CZ', '.DE', '.DJ', '.DK', '.DM', '.DO', '.DZ', '.EC', '.EDU', '.EE', '.EG', '.ER', '.ES', '.ET', '.EU', '.FI', '.FJ', '.FK', '.FM', '.FO', '.FR', '.GA', '.GB', '.GD', '.GE', '.GF', '.GG', '.GH', '.GI', '.GL', '.GM', '.GN', '.GOV', '.GP', '.GQ', '.GR', '.GS', '.GT', '.GU', '.GW', '.GY', '.HK', '.HM', '.HN', '.HR', '.HT', '.HU', '.ID', '.IE', '.IL', '.IM', '.IN', '.INFO', '.INT', '.IO', '.IQ', '.IR', '.IS', '.IT', '.JE', '.JM', '.JO', '.JOBS', '.JP', '.KE', '.KG', '.KH', '.KI', '.KM', '.KN', '.KP', '.KR', '.KW', '.KY', '.KZ', '.LA', '.LB', '.LC', '.LI', '.LK', '.LR', '.LS', '.LT', '.LU', '.LV', '.LY', '.MA', '.MC', '.MD', '.ME', '.MG', '.MH', '.MIL', '.MK', '.ML', '.MM', '.MN', '.MO', '.MOBI', '.MP', '.MQ', '.MR', '.MS', '.MT', '.MU', '.MUSEUM', '.MV', '.MW', '.MX', '.MY', '.MZ', '.NA', '.NAME', '.NC', '.NE', '.NET', '.NF', '.NG', '.NI', '.NL', '.NO', '.NP', '.NR', '.NU', '.NZ', '.OM', '.ORG', '.PA', '.PE', '.PF', '.PG', '.PH', '.PK', '.PL', '.PM', '.PN', '.PR', '.PRO', '.PS', '.PT', '.PW', '.PY', '.QA', '.RE', '.RO', '.RS', '.RU', '.RW', '.SA', '.SB', '.SC', '.SD', '.SE', '.SG', '.SH', '.SI', '.SJ', '.SK', '.SL', '.SM', '.SN', '.SO', '.SR', '.ST', '.SU', '.SV', '.SY', '.SZ', '.TC', '.TD', '.TEL', '.TF', '.TG', '.TH', '.TJ', '.TK', '.TL', '.TM', '.TN', '.TO', '.TP', '.TR', '.TRAVEL', '.TT', '.TV', '.TW', '.TZ', '.UA', '.UG', '.UK', '.US', '.UY', '.UZ', '.VA', '.VC', '.VE', '.VG', '.VI', '.VN', '.VU', '.WF', '.WS', '.XN--0ZWM56D', '.XN--11B5BS3A9AJ6G', '.XN--3E0B707E', '.XN--45BRJ9C', '.XN--80AKHBYKNJ4F', '.XN--90A3AC', '.XN--9T4B11YI5A', '.XN--CLCHC0EA0B2G2A9GCD', '.XN--DEBA0AD', '.XN--FIQS8S', '.XN--FIQZ9S', '.XN--FPCRJ9C3D', '.XN--FZC2C9E2C', '.XN--G6W251D', '.XN--GECRJ9C', '.XN--H2BRJ9C', '.XN--HGBK6AJ7F53BBA', '.XN--HLCJ6AYA9ESC7A', '.XN--J6W193G', '.XN--JXALPDLP', '.XN--KGBECHTV', '.XN--KPRW13D', '.XN--KPRY57D', '.XN--LGBBAT1AD8J', '.XN--MGBAAM7A8H', '.XN--MGBAYH7GPA', '.XN--MGBBH1A71E', '.XN--MGBC0A9AZCG', '.XN--MGBERP4A5D4AR', '.XN--O3CW4H', '.XN--OGBPF8FL', '.XN--P1AI', '.XN--PGBS0DH', '.XN--S9BRJ9C', '.XN--WGBH1C', '.XN--WGBL6A', '.XN--XKC2AL3HYE2A', '.XN--XKC2DL3A5EE0H', '.XN--YFRO4I67O', '.XN--YGBI2AMMX', '.XN--ZCKZAH', '.XXX', '.YE', '.YT', '.ZA', '.ZM', '.ZW'];
    var tlds = ['.COM'];
    for (x = 0; x < tlds.length; x++) {
        var a = 0;

        var endOfHyperlink = 0;
        var startOfHyperlink = 0;

        while (a  < text.length) {
            var tld = '' + tlds[x];
            endOfHyperlink = text.toLowerCase().indexOf(tld.toLowerCase(), startOfHyperlink);
            if (endOfHyperlink > -1) {

                endOfHyperlink = endOfHyperlink + tld.length

                startOfHyperlink = FindStartOfHyperlink(text, endOfHyperlink);
                var protocol = text.substring(startOfHyperlink, startOfHyperlink + 7);
                if (protocol.toLowerCase() != 'http://') {

                    var hyperlink = text.substring(startOfHyperlink, endOfHyperlink);
                    hyperlink = 'http://' + hyperlink;

                    var beforHyperlink = text.substring(0, startOfHyperlink)
                    var afterHyperlink = text.substring(endOfHyperlink, text.length);

                    text = beforHyperlink + hyperlink + afterHyperlink;

                    startOfHyperlink = afterHyperlink +1;
                    a = afterHyperlink + 1;
                }
            }
            a++;
        }

    }
    return text;
}
