function initPage() {
    $("#domain-field").keyup(function () {
        if (isBadStr(this.value) == true) {
            this.style.color = "white";
            this.style.backgroundColor = "#ff7777";
        } else {
            this.style.color = (this.value.length != 0) ? "black" : "grey";
            this.style.backgroundColor = "#ffffff";
        }
        if (this.value.length == 0) {
            var TLDs = getTLDs("");
            searchTLD(TLDs);
        }
    });
    $("#domain-field").keydown(function (e) {
        if (e.keyCode == '13') {
            var TLDs = getTLDs(this.value);
            searchTLD(TLDs);
        }
    });
    searchTLD(getTLDs(""));
}

function isChr(c) {
    return ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'));
}
function isBadChr(c) {
    return (!isChr(c) && c != ' ' && c != ',' && c != '.');
}
function isBadStr(s) {
    for (i = 0; i < s.length; i++) if (isBadChr(s[i])) return true;
    return false;
}
function getTLDs(s) {
    var TLDs = [];

    if (!isBadStr(s)) {
        for (i = 0, p = 0, d = 0; i < s.length; i++) {
            if (!TLDs[p]) TLDs[p] = "";
            if (!isChr(s[i]) && (s[i] != '.' || d++ >= 2)) {
                if (TLDs[p].length > 0) p++;
                d = 0;
            } else TLDs[p] += s[i];
        }
        for (i = 0; i < TLDs.length; i++) 
            while (TLDs[i].length > 0 && TLDs[i][0] == ".") TLDs[i] = TLDs[i].substr(1);
    }
    return TLDs;
}
function searchTLD(TLDs) {
    var rows = $("#table-domains > tbody > tr");
    for (row = rows.first(), tit = 0, c = 0; row.length > 0; row = row.next()) {
        if (row.is(".caption")) {
            tit = row; c = 0;
            row.hide();
        } else {
            var f = false;
            if (TLDs.length > 0) {
                var str = row.find("td").first().text().substr(1);
                for (p = 0; p < TLDs.length && !f; p++) f = (str.toUpperCase() == TLDs[p].toUpperCase());
            } else f = true;

            if (f) {
                if (c++ & 1) row.removeClass("grey"); else row.addClass("grey");
                row.show();
                tit.show();
            } else row.hide();
        }
    }
}

if (window.addEventListener)
    window.addEventListener("load", initPage, false);
else if (window.attachEvent)
    window.attachEvent("onload", initPage);
