var orthography = {
    seltag1:"<!>",
    seltag2:"<!>",
    contlen:60,
    maxlen:"256",
    lng:{
            //"Ваш браузер не поддерживает возможность перехвата выделенного текста. Возможно, слишком старая версия, а возможно, еще какая-нибудь ошибка."
badbrowser: "\u0412\u0430\u0448 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043D\u0435 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u044C \u043F\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0430 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u043E\u0433\u043E \u0442\u0435\u043A\u0441\u0442\u0430 \u0438\u043B\u0438 IFRAME. \u0412\u043E\u0437\u043C\u043E\u0436\u043D\u043E, \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0441\u0442\u0430\u0440\u0430\u044F \u0432\u0435\u0440\u0441\u0438\u044F, \u0430 \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E, \u0435\u0449\u0435 \u043A\u0430\u043A\u0430\u044F-\u043D\u0438\u0431\u0443\u0434\u044C \u043E\u0448\u0438\u0431\u043A\u0430.",
            //"Вы выбрали слишком большой объем текста!"
toobig:     "\u0412\u044B \u0432\u044B\u0431\u0440\u0430\u043B\u0438 \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0439 \u043E\u0431\u044A\u0435\u043C \u0442\u0435\u043A\u0441\u0442\u0430!",
            //"Спасибо за сотрудничество!"
thanks:     "\u0421\u043F\u0430\u0441\u0438\u0431\u043E \u0437\u0430 \u0441\u043E\u0442\u0440\u0443\u0434\u043D\u0438\u0447\u0435\u0441\u0442\u0432\u043E!",
            //"Документ:"
docmsg:     "\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442:",
            //"Орфографическая ошибка в тексте:"
intextmsg:  "\u041E\u0440\u0444\u043E\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u0430\u044F \u043E\u0448\u0438\u0431\u043A\u0430 \u0432 \u0442\u0435\u043A\u0441\u0442\u0435:",
            //"Послать сообщение об ошибке автору?\nВаш браузер останется на той же странице."
ifsendmsg:  "\u041F\u043E\u0441\u043B\u0430\u0442\u044C \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u043E\u0431 \u043E\u0448\u0438\u0431\u043A\u0435 \u0440\u0435\u0434\u0430\u043A\u0446\u0438\u0438?\n\u0412\u0430\u0448 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043E\u0441\u0442\u0430\u043D\u0435\u0442\u0441\u044F \u043D\u0430 \u0442\u043E\u0439 \u0436\u0435 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0435."
},
init: function() {
    var th = this;
    document.onkeypress = function(e) { return th.onkeypress(e); };
},
thanks: function (data, textStatus) {
  var n = 0, msg = this.lng.thanks;
  var setStatus = function() {
      if (n > 20) { return; }
      window.status = (n%5) ? msg : " ";
      setTimeout(setStatus, 100);
      ++n;
  };
  setStatus();
},
send: function(url, err_arr) {
  var data = {"url": url, "title": document.title, "prestring": err_arr[0], "string": err_arr[1], "poststring": err_arr[2]};
  $.post("/?orthography", data, this.thanks, "json");
},
stripSlashn:function(str) {
    return ("" + str).replace(/[\r\n]+/g," ").replace(/^\s+|\s+$/g,"");
},
doSend:function(flag) {
    with (this) {
        if (navigator.appName.indexOf("Netscape")!=-1 && eval(navigator.appVersion.substring(0, 1))<5) {
            alert(lng.badbrowser);
            return;
        }
        var textRange = selectedText = null;
        if (window.getSelection) {
            selectedText = window.getSelection();
        } else {
            selectedText = (window.document.getSelection)
                ? window.document.getSelection()
                : window.document.selection;
        }
        if (selectedText != null) {
            var pre = suf = "";
            if (selectedText.getRangeAt) {
                // Выделение, вообще говоря, может состоять из нескольких областей.
                // Но нас это не должно заботить, берем 0-ую:
                var range = selectedText.getRangeAt(0);
                textRange = range.toString();
                var newRange = window.document.createRange();
                newRange.setStartBefore(range.startContainer.ownerDocument.body);
                newRange.setEnd(range.startContainer, range.startOffset);
                pre = newRange.toString();
                newRange = range.cloneRange();
                newRange.setStart(range.endContainer, range.endOffset);
                newRange.setEndAfter(range.endContainer.ownerDocument.body);
                suf = newRange.toString();
            } else {
                if (selectedText.createRange) {
                    var range = selectedText.createRange();
                    textRange = range.text;
                    var newRange = selectedText.createRange();
                    newRange.moveStart("character", -contlen);
                    newRange.moveEnd("character", -textRange.length);
                    pre = newRange.text;
                    newRange = selectedText.createRange();
                    newRange.moveEnd("character", contlen);
                    newRange.moveStart("character", textRange.length);
                    suf = newRange.text;
                } else { textRange = "" + selectedText; }
            }
            var p;
            var s = (p=textRange.match(/^(\s*)/)) && p[0].length;
            var e = (p=textRange.match(/(\s*)$/)) && p[0].length;
            pre = pre + textRange.substring(0, s);
            suf = textRange.substring(textRange.length - e, textRange.length) + suf;
            textRange = textRange.substring(s, textRange.length - e);
        } else {
            alert(lng.badbrowser);
            return;
        }
        if (textRange == "") { return; }
        var err_arr = [pre.substring(pre.length-contlen, pre.length).replace(/^\S{1,10}\s+/, ""), textRange, suf.substring(0, contlen).replace(/\s+\S{1,10}$/,"")];
        var err_msg = stripSlashn(err_arr[0] + seltag1 + err_arr[1] + seltag2 + err_arr[2]);
        if (err_msg.length > maxlen) {
            alert(lng.toobig);
            return;
        }
        var url = document.location.href;
        var dt  = new Date().getTime();
        var cnfrm = confirm(lng.docmsg + "\n   " + url + "\n\n" + lng.intextmsg + "\n   \"" + err_msg + "\"\n\n" + lng.ifsendmsg);
        dt = new Date().getTime() - dt;
        if (cnfrm) {
            this.send(url, err_arr);
            this.thanks();
        } else {
            if (!flag && dt < 50) {
                var th = this;
                var sv = document.onkeyup;
                document.onkeyup = function(e){
                    with (th) {
                        if (!e) { e = window.event; }
                        if (e.keyCode == 17) {
                            document.onkeyup = sv;
                            doSend(true);
                        }
                    }
                };
            }
        }
    }
},
onkeypress:function(e) {
    with (this) {
        var ctrlEnt = 0;
        var we = (window.event && window.event) || (parent && parent.event);
        if (we) {
            ctrlEnt = we.keyCode==10 || (we.keyCode==13 && we.ctrlKey);
        } else if (e) {
            ctrlEnt = (e.which==10 && e.modifiers==2)||(e.keyCode==0 && e.charCode==106 && e.ctrlKey)||(e.keyCode==13 && e.ctrlKey);
        }
        if (ctrlEnt) {
            this.doSend();
            return false;
        }
    }
}
};

$(document).ready(function() {
	orthography.init()
});