// Copyright (c) Design.md
var BG_IMAGE = '/_img/advisory_content.gif';    // Url изображения, которое будет скрывать текст
var SPANS = [];                                 // Массив все span-элементов класса Advisory

// Определим Internet Explorer и Opera
var userAgent = navigator.userAgent.toLowerCase();
IS_IE = (userAgent.indexOf("msie") != -1 && !window.opera) ? true : false;
IS_OP = window.opera;
  
window.onload = start;

// Запускаем скрипт ( <body onload="start();"> )
function start()
{
    var allSpans = document.getElementsByTagName('span'); // Заносим все элементы span в массив
    for(var i=0,n=0; i<allSpans.length; i++) // Начинаем цикл по элементам массива
    {
        if ( allSpans[i].className=='Advisory' ) // Отбираем только span с классом Advisory 
        { 
            SPANS[n] = allSpans[i]; // Заносим их в другой массив
            
            // Каждому span'у (дальше речь будет идти только о span'ах с классом Advisory) задаем атрибут "reserve". [1]
            // В атрибуте "reserve" хранится резервная копия СОДЕРЖАНИЯ самого элемента ( <span reserve="word">word</span> )
            SPANS[n].setAttribute('reserve',SPANS[n].innerHTML); 
            n++;
        }
        
    }
    switchTo('hidden'); // Задаем изначальный режим ( скрытый )
    
}


// Показываем ненорматив
function showWord(object)
{
    //alert('show');
    object.style.backgroundImage = 'none'; // Убираем фоновое изображение
    object.innerHTML = object.getAttribute('reserve');// Из резерва берем ненорматив и вставляем его в span
    object.style.paddingLeft = 0; // Убираем padding у span'а
    //alert('end');
}


// Прячем ненорматив
function hideWord(object)
{
    var width = getSpaceWidth(object); // узнаем ширину "&nbsp"
    object.style.backgroundImage = "url('"+BG_IMAGE+"')"; // Убираем фоновое изображение
    var currWidth = (object.offsetWidth-width)+'px'; // Считаем ширину объекта
    object.innerHTML = '&nbsp;'; // Удаляем ненорматив из span'а
    object.style.paddingLeft = currWidth; // Задаем padding (width у span'a не работает) равный его ширине в "нормальном" состоянии
}

// Чтоб знать знать при любом font-size мы знали ширину "&nbsp" vs делаем слдеещее...
function getSpaceWidth(child)
{
    var parent = child.parentNode;
    var newSpan = document.createElement('span');
    newSpan.id = 'nbspWidth';
    newSpan.innerHTML = '&nbsp;';
    parent.appendChild(newSpan);
    var span =  document.getElementById('nbspWidth');
    var width = span.offsetWidth;
    parent.removeChild(span);
    return width;
}

// Функция смены режимов
function switchTo(mode)
{
    switch(mode)
    {
        case 'source': // Режим: показать ненормативную лексику
                        for(var i=0; i<SPANS.length; i++) // Проходимся в цикле по всем span'ам
                        {
                           showWord(SPANS[i]); // Показываем ненорматив
                           // Удаляем обработчики событий, в этом режиме они нам не нужны
                           if (IS_IE)
                           {
                               SPANS[i].setAttribute('onmouseover','');
                               SPANS[i].setAttribute('onmouseout','');
                           }
                           else{
                                   SPANS[i].removeAttribute('onmouseover');
                                   SPANS[i].removeAttribute('onmouseout');
                                }
                        }
                        break;
        case 'normal': // Режим: заменить ненормативную лексику (на нормальные слова)
                        for(var i=0; i<SPANS.length; i++)// Проходимся в цикле по всем span'ам
                        {
                           showWord(SPANS[i]);// Показываем ненорматив
                           SPANS[i].innerHTML = SPANS[i].getAttribute('normal'); // Заменяем ненорматив на нормальные слова [2]
                           // Удаляем обработчики событий, в этом режиме они нам не нужны
                           if (IS_IE || IS_OP)// Если IE то:
                           {
                               SPANS[i].setAttribute('onmouseover','');
                               SPANS[i].setAttribute('onmouseout','');
                           }
                           else{
                                   SPANS[i].removeAttribute('onmouseover');
                                   SPANS[i].removeAttribute('onmouseout');
                               }
                               //alert(SPANS[i].onmouseover);
                        }
                        break;
        case 'hidden': // Режим: показать ненормативную лексику только при наведении мыши (т.е. скрытый)
                        for(var i=0; i<SPANS.length; i++)// Проходимся в цикле по всем span'ам
                        {
                           hideWord(SPANS[i]); // Прячем ненорматив
                           if (IS_IE) // Если IE то:
                           {
                               // Добавляем обработчики событий
                               
                               SPANS[i].setAttribute('onmouseover', function() { showWord(this) });
                               SPANS[i].setAttribute('onmouseout', function() { hideWord(this) });
                           }
                           else 
                           {
                               // Добавляем обработчики событий
                               SPANS[i].setAttribute('onmouseover','showWord(this)');
                               SPANS[i].setAttribute('onmouseout','hideWord(this)');
                           }
                           
                        }
                        break;
    }
    return false; // возвращаем false чтоб не сработала сылка (<a href="#">Локальная ссылка</a>)
}

// Функция делает линки активными, приэтом диактивируем все остальные (локальные) линки
function switchLinkToActive(parentsArray,linkObj)
{
    var classTermination = "Active";
    var chars = classTermination.length;
    
    if (linkObj.className.substring(linkObj.className.length-chars,linkObj.className.length).indexOf(classTermination) == -1)
    {
            
            for (var i=0; i<parentsArray.length; i++)
            {
                if(typeof(parentsArray[i]) != "object")
                { parentsArray[i] = document.getElementById(parentsArray[i]); }

                var allLinks = parentsArray[i].getElementsByTagName("a");
                for(var j=0; j<allLinks.length; j++)
                {
                    var currClassName = allLinks[j].className;
                    if(currClassName.substring(currClassName.length-chars,currClassName.length).indexOf(classTermination) != -1)
                    {
                        allLinks[j].className = currClassName.substring(0,currClassName.length-chars);
                    }
                    
                }
                
            }
            linkObj.className+=classTermination;
            
    }
    linkObj.blur();
    
}

// ===== Сноски ===== //

// [1]   - Атрибут "reserve" задается автоматически скриптом и хранит в себе резервную копию содержимого алемента.
// [2]  - Атрибут "normal" задается в HTML'e вручную и содержит слово-заменитель для ненорматива (<span normal="член">хер</span>)
