﻿/*
Отправка сообщений об ошибках и опечатках
*/

/*Блок настроек*/
//Страница обработки сообщений с переменной и знаком '='
var handler = "/_services/err.aspx?text=";
//время показа сообщения в миллисекундах
var timeout = 3000;


//Объект для XMLHTTP
var req;

//Выделенный текст для IE
function getSelText() {
    var txt = '';
    if (window.getSelection) {
        txt = window.getSelection();
    } else if (document.getSelection) {
        txt = document.getSelection();
    } else if (document.selection) {
        txt = document.selection.createRange().text;
    }
    return txt;
}

//Обработчик ответа сервера
function processReqChange() {
    // только при состоянии "complete"
    if (req.readyState == 4) {
        // для статуса "OK"
        if (req.status == 200) {
            // здесь идут всякие штуки с полученным ответом
            showOrfoMessage('Спасибо за помощь!');
        } else {
            showOrfoMessage("Возникли проблемы в системе сообщений об ошибках. Сообщение не доставлено до администрации. " +
                "Вы можете воспользоваться <a href='/feedback.aspx'>страницей для отправки сообщений</a>");
        }
    }
}

//Сообщение юзеру об успешной или неуспешной отправке
function showOrfoMessage(strMessage) {
    var topScroll = document.body.scrollTop || document.documentElement.scrollTop;
    var leftScroll = document.body.scrollLeft || document.documentElement.scrollLeft;
    // ширина видимой части окна
    var cliWidth = document.compatMode == 'CSS1Compat' && !window.opera ? document.documentElement.clientWidth : document.body.clientWidth;
    // высота видимой части окна
    var cliHeight = document.compatMode == 'CSS1Compat' && !window.opera ? document.documentElement.clientHeight : document.body.clientHeight;
    //стиль блока сообщения
    var style = "position:absolute;width:300px;top:" + (-30 + topScroll + cliHeight / 2) + "px;left:" +
        (-150 + leftScroll + cliWidth / 2) +
        "px;border: 1px solid #808080; font-family: Tahoma; font-size: 12px; background-color: #99CCFF; padding: 9px; color:black; text-align:center";
    //вывод блока сообщения        
    oDiv = document.createElement("DIV");
    oDiv.setAttribute('style', style);
    document.body.appendChild(oDiv);
    oDiv.innerHTML = strMessage;
    //таймаут и удаление сообщения
    window.setTimeout("oDiv.parentNode.removeChild(oDiv)", timeout);
}

// Получим userAgent браузера и переведем его в нижний регистр
var ua = navigator.userAgent.toLowerCase();
// Определим Internet Explorer
isIE = ((ua.indexOf("msie") != -1));
//Ветка IE
if (isIE) {
    //Обработаем нажатие Ctrl-Enter
    document.onkeyup = function(e) {
        e = window.event;
        if (((e.keyCode == 13) || (e.keyCode == 10)) && (e.ctrlKey == true)) {
            selectedText = getSelText();
            if (selectedText.length > 0) {
                req = new ActiveXObject("Microsoft.XMLHTTP");
                if (req) {
                    req.onreadystatechange = processReqChange;
                    req.open("GET", handler + encodeURIComponent(selectedText));
                    req.send();
                }
            }
            else {
                showOrfoMessage('Для отправки сообщения об ошибке необходимо<br/>выделить текст с ошибкой');
            }

        }
        return true;
    }
}
//Ветка не IE
else {
    document.onkeyup = function(e) {
        if (((e.keyCode == 13) || (e.keyCode == 10)) && (e.ctrlKey == true)) {
            selObj = window.getSelection();
            selectedText = selObj.toString()
            if (selectedText.length > 0) {
                req = new XMLHttpRequest();
                req.onreadystatechange = processReqChange;
                req.open("GET", handler + encodeURIComponent(selectedText), true);
                req.send(null);
            }
            else {
                showOrfoMessage('Для отправки сообщения об ошибке необходимо<br/>выделить текст с ошибкой');
            }

        }
        return true;
    }
}