var orthography = orthography ? orthography: {
	"target": null,
	seltag: "<!!!>",
	contlen: 60,
	maxlen: "256",
	lng: {
		//"Ваш браузер не поддерживает возможность перехвата выделенного текста или IFRAME. Возможно, слишком старая версия, а возможно, еще какая-нибудь ошибка."
		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.",
		//"Ваше сообщение:"
		promt: "\u0412\u0430\u0448\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435:"
	},
	init: function(target) {
		var th = this;
		th.target=target;
		document.onkeypress = function(e) {
			return th.onkeypress(e);
		};
	},
	thanks: function() {
		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) {
		with(this) {
			var value = [];
			$.post(target,{
				a: url,
				b: err_arr[0],
				c: err_arr[1],
				d: err_arr[2],
				e: document.charset || document.characterSet || "",
				f: document.title,
				g: err_arr[3]
			},function(){
			});
		}
	},
	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] + seltag + err_arr[1] + seltag + err_arr[2]);
			err_msg=err_msg.replace(/\s{2,}/g," ");
			if (err_msg.length > maxlen) {
				alert(lng.toobig);
				return;
			}
			var url = document.location.href;
			var dt = new Date().getTime();
			var cnfrm = navigator.userAgent.indexOf("MSIE") != -1
			          ? confirm(lng.docmsg + "\n   " + url + "\n\n" + lng.intextmsg + "\n   \"" + err_msg + "\"\n\n" + lng.ifsendmsg)
			          : prompt(lng.docmsg + "\n   " + url + "\n\n" + lng.intextmsg + "\n   \"" + err_msg + "\"\n\n" + lng.ifsendmsg +"\n"+ lng.promt,"");
			dt = new Date().getTime() - dt;
			if (cnfrm != null) {
				err_arr[3]=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;
			}
		}
	}
};
