LINK = {};
//
// Regex's для парсинга ссылок
//
LINK.regex = {
    subd: new RegExp ("\\." + location.host + "$"),
    extn: new RegExp ("\\.([^\\.]{2,7})$"),
    mail: new RegExp ("^mailto:(.*)$")
};


LINK.hasInit = false;
LINK.init = function () {
    // Проверяем инициализировано или нет
    if (LINK.hasInit) {
        return;
    }
    LINK.hasInit = true;
    // Получаем все ссылки на странице
    var links = document.getElementsByTagName('a');
      
    for (var d=0; d < links.length; d++) {
        // если ссылка не картинка
        var img = links[d].getElementsByTagName('img');
        if(img.length == 0) LINK.highlight (links[d]);
    }
};
//
// Функция смотрит что это за ссылка и добавляет ей класс
//
LINK.highlight = function (el) {
    // Проверка элемента
    if (!el) {
        return;
    }

    var link = el;
    // по дефолту - внутренняя ссылка
    var rela = "internal";

    // Пропуск не нужных ссылок
    if (link.className) {
        if (hasClass(link, 'no_link')) {
            return;
        }
    }
    if (!link.href) {
        return;
    }
    // смотри что за ссылка пришла
    switch (link.protocol.toLowerCase ()) {
        // мыло
        case "mailto:":
            // Set the properties
            rela = "email";
            break;
        // Javascript
        case "javascript:":
            rela = "internal";
            break;
        case "ftp:":
            rela = "ftp";
            break;
        // HTTP
        case "http:":
            // внутренняя?
            if (link.hostname == location.hostname || !link.href) {
                rela = "internal";
            } else {
                // поддомен?
                var subd = LINK.regex.subd.exec (link.hostname);
                if (subd != null) {
                    rela = "subdomain";
                } else {
                    rela = "external";
                }
            }
            break;
        // все остальное и внешнее
        default:
            rela = "external";
            break;
    }
    // если внешняя добавляем атрибут для открытия в новом окне
    if(rela == "external"){
        el.setAttribute('target', '_blank');
    }
    // добавляем класс для визуализации
    addClass(el, rela);
};

function hasClass(ele,cls) {
    return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
}

function addClass(ele,cls) {
    if (!this.hasClass(ele,cls)) ele.className += " "+cls;
    else ele.className = cls;
}

function removeClass(ele,cls) {
    if (hasClass(ele,cls)) {
        var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
        ele.className=ele.className.replace(reg,' ');
    }
}

$(document).ready(function(){
    /** визуализация ссылок */
    LINK.init();
});

// аналог var_dump для JS
function var_dump(obj) {
    if(typeof obj == "object") {
        return "Type: "+typeof(obj)+((obj.constructor) ? "\nConstructor: "+obj.constructor : "")+"\nValue: " + obj;
    } else {
        return "Type: "+typeof(obj)+"\nValue: "+obj;
    }
}

