objlink = window.document.getElementById("misprint");

var myWidth = 0, myHeight = 0;	// Размеры видимой области экрана
var scrOfX = 0, scrOfY = 0;	// Скроллинг


// Функция - обработчик события нажатия клавиш
window.document.onkeypress = function(objlink) 
 { 
	return sendmsg(objlink);
 }; 
 
// Функция для определения параметров экрана myWidth, myHeight, scrOfX, scrOfY
function windowsize()
{
   // Для начала узнаем размеры видимой области страницы
    if (typeof(window.innerWidth) == 'number') 
	{
      // для всего кроме MSIE
      myWidth = window.innerWidth;
      myHeight = window.innerHeight;
    } else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) 
	{
      // IE6+
      myWidth = document.documentElement.clientWidth;
      myHeight = document.documentElement.clientHeight;
    } else if (document.body && (document.body.clientWidth || document.body.clientHeight)) 
	{
      // IE4
      myWidth = document.body.clientWidth;
      myHeight = document.body.clientHeight;
    }
  
    // Теперь уточняем, насколько страница прокручена вниз и вбок
    if(typeof(window.pageYOffset) == 'number') 
	{
      // Netscape и его родственники
      scrOfY = window.pageYOffset;
      scrOfX = window.pageXOffset;
    } else if (document.body && (document.body.scrollLeft || document.body.scrollTop)) 
	{
      // DOM
      scrOfY = document.body.scrollTop;
      scrOfX = document.body.scrollLeft;
    } else if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) 
	{
    // IE6
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
	}
}

// Функция для добавления подчиненного элемента в документ
function append(element) 
{ 
	if (window.document.body.lastChild)
	{
		window.document.body.insertBefore(element, window.document.body.lastChild);
	} else
	{
		window.document.body.appendChild(element);
	}
}

// Функция для удаления элемента <div id="msp">
function delete_element() 
{ 	
	objbody = window.document.getElementsByTagName("body").item(0);
	div = window.document.getElementById("msp");
	objbody.removeChild(div);
}

// Отправка данных формы
function SendForm (formid)
{
  var dataString = $('#'+formid).serialize(); //собираем все данные в строку
 
   $('#'+formid).ajaxSubmit({
      type: "POST",
      data: dataString,
	  url: window.document.location.href
    });
	delete_element();
}

// Функция для получения пользовательского выделения
function get_selection()
  {
    try
    {
        var slc = "";
		var offset = 60; 		// количество символов справа и слева выделения
        if (window.getSelection) 
		slc = window.getSelection();
        else
        {
            if (window.document.getSelection)
               slc = window.document.getSelection();
            else
               slc = window.document.selection;
        }
        
		if (slc != "")
        {
            var beforeerror = "";	// текст до выделения
			var errortext = "";		// пользовательское выделение
			var aftererror = "";	// текст после выделения
            
			if (slc.getRangeAt)
            {
               var range = slc.getRangeAt(0);
               errortext = range.toString();
               var start = window.document.createRange();
               start.setStartBefore(range.startContainer.ownerDocument.body);
               start.setEnd(range.startContainer, range.startOffset);
               beforeerror = start.toString();
               var end = range.cloneRange();
               end.setStart(range.endContainer, range.endOffset);
               end.setEndAfter(range.endContainer.ownerDocument.body);
               aftererror = end.toString();
            }
            else
            {
                if(slc.createRange)
                {
                  var range = slc.createRange();
                  errortext = range.text;
                  var start = slc.createRange();
                  start.moveStart("character", - offset);
                  start.moveEnd("character", - errortext.length);
                  beforeerror = start.text;
                  var end = slc.createRange();
                  end.moveEnd("character", offset);
                  end.moveStart("character", errortext.length);
                  aftererror = end.text;
                }
                else
                  errortext = "" + slc;
            }
			// удаление лишних пробелов
			var p;
            var s = (p = errortext.match(/^(\s*)/)) && p[0].length;
            var e = (p = errortext.match(/(\s*)$/)) && p[0].length;
            beforeerror = beforeerror + errortext.substring(0, s);
            aftererror = errortext.substring(errortext.length - e, errortext.length) + aftererror;
            errortext = errortext.substring(s, errortext.length - e);
			// Обрезаем текст справа и слева от пользовательского выделения до offset символов
			beforeerror = beforeerror.substring(beforeerror.length - offset, beforeerror.length).replace(/^\S{1,10}\s+/, "");
			aftererror = aftererror.substring(0, offset).replace(/\s+\S{1,10}$/, "");
			
			if (errortext == "")
               return null;

			var send = 
            {
               beforeerror : beforeerror, 
			   errortext : errortext, 
			   aftererror : aftererror
            };
			return send;
        }
        else
        {
            alert("Ваш браузер не поддерживает возможность перехвата выделенного текста. Возможно, слишком старая версия.");
            return;
        }
    }
    catch(e)
    {
        return null;
    }
}
 
// Основная функция для отправки сообщения об ошибке
function sendmsg(objlink) 
{ 
	var ctrl_enter = 0; 
	var event = null;  
	var c1 = '<p><font size=\"4\">Вы обнаружили опечатку в тексте:</font></p>'; 
	var c2 = '<p>на странице: ';
	var c3 = '<font size=\"2\">Сообщение отправится автоматически, заполнение форм или написание писем не требуется.</font>';
	var c4 = '<div>Вы можете оставить свои комментарии:</div>';
	var c5 = '<input type=\"text\" style=\"margin: 2px; width: 100%;\" maxlength=\"250\" name=\"comment\"/>';
	var c6 = '<input type=\"button\" value=\"Отмена\"/>';
	var c7 = '<input type=\"button\" value=\"Отправить\"/>';
	var c8 = '<input type=\"text\" style=\"margin: 2px; width: 100%;\" maxlength=\"250\" name=\"email\"/>';
	var c9 = '<div>Контактный телефон/e-mail (необязательно):</div>';
	var c12 = '<div align=\"center\">';
	
	if (window.event) event=window.event; 
	else if (window && window.event) event=window.event; 
	if (event) 
		ctrl_enter = (event.keyCode == 10) || (event.keyCode == 13 && event.ctrlKey); 
	else 
		ctrl_enter = (objlink.keyCode == 13 && objlink.ctrlKey) || (objlink.which == 10 && objlink.modifiers == 2); 
	
	if (ctrl_enter)
	{
		var div = window.document.getElementById("msp");
		if (!div)
		{
			// получаем выделенный текст
			var error = get_selection();
			if (!error) return;
			with (error)
			{
				if ((errortext.length > 50) || (errortext.length < 3)) alert ('Пожалуйста, уточните местоположение ошибки!'); 
				else 
				{ 
					var href = window.document.location.href; 
					windowsize();
					
					//Создаем элемент <div id = "msp"> для вывода на экран сообщения об ошибке
					var div = window.document.createElement("DIV");
					div.id = "msp";
					var w = 450;
					if (w > window.document.body.clientWidth - 10) w = window.document.body.clientWidth - 10;
					div.style.width = w + 'px';
					// создаем сообщение об ошибке, которое выводим на экран для проверки
					div.innerHTML = c1 + "<i>... " + beforeerror + "<b style=\"color : red\">" + errortext + "</b>" + aftererror + " ...</i>" + c2 + "<i style=\"color : blue\">" + href + "</i>" + c12 + "<form method=\"post\" id=\"msp_form\">" + c4 + c5 + c9 + c8 + " " + c7  + c6 + "</form></div>" + c3 + "";
					var form = div.getElementsByTagName("form");
					// Формируем пересылаемые данные
					var data = 
					{
						url: href,
						before: beforeerror,
						error: errortext,
						after: aftererror
					};
					// Создаем скрытые элементы формы для пересылки данных
					for(var k in data)
					{
						var input = window.document.createElement("input");
						input.type = "hidden";
						input.name = k;
						input.value = data[k];
						form[0].appendChild(input);
					}
					var input = window.document.createElement("input");
					input.type = "hidden";
					input.name = "action";
					input.value = "1";
					form[0].appendChild(input);
					var input = div.getElementsByTagName("input");
					// Отправка данных на сервер
					input[2].onclick = function() { SendForm('msp_form'); }
					// Отмена по кнопке формы "Отмена"
					input[3].onclick = function() { delete_element(); }
					var comment = input[0];
					// установка фокуса на поле ввода комментариев
					comment.focus();
					comment.select();
					append(div);
					// А теперь позиционируем наш блок
					var w = div.clientWidth;
					var h = div.clientHeight;
					div.style.top = String(((myHeight - h)<0) ? 0 : (Math.round((myHeight - h) / 2) + scrOfY)) + 'px';
					div.style.left = String(((myWidth - w)<0) ? 0 : (Math.round((myWidth - w) / 2) + scrOfX)) + 'px';
					// Отмена по клавише ESC
					window.document.onkeydown = function (event)
					{
						if (!event) event = window.event;
						if (event.keyCode == 27) delete_element();
					}
				} 
			} 
		} else return;
	}
}