var add_length=60;
var max_length=256;
var w=window;
var d=w.document;
var b=d.body;

function Send(form_id) {
  var form_answer = document.getElementById('root');
  var submit = document.getElementById('submit');
            new Ajax.Updater(
	            form_answer,
	            '/check/index.html',
	            { 
	             method: 'post',
	             parameters: $(form_id).serialize(),
	             evalScripts: true
	            }
            );
          return false;
}

function onkeypress_(e){
  var code=0;
  var we=w.event;
  if(we){
    code=we.keyCode==10||(we.keyCode==13&&we.ctrlKey);
  }else{
    if(e){code=(e.which==10&&e.modifiers==2)||(e.keyCode==0&&e.charCode==106&&e.ctrlKey)||(e.keyCode==13&&e.ctrlKey);}
  }
  if(code){return do_check_();}
};

function onkeypress_esc_(e){
  var code=0;
  var we=w.event;
  if(we){
    code=we.keyCode==27;
  }else{
    if(e){code=(e.keyCode==27);}
  }
  if(code){
    error_close_();
  }
};

function error_close_()
{
  var error_div = document.getElementById('check_orpho');
  error_div.style.visibility = 'hidden';
  error_div.style.left = "-1100px";
  error_div.style.top = "-1100px";
  d.onkeypress=onkeypress_;
}

function get_result_()
{
  try{
    var text=null;
    var prev=null;
    var next=null;
    var selection=null;
    var block=null;
    if(w.getSelection){
      selection=w.getSelection();
    }else{
      if(d.getSelection){
        selection=d.getSelection();
      }else{
        selection=d.selection;
      }
    }
    if(selection!=null){
      var text=null;
      if(selection.getRangeAt){
        var r=selection.getRangeAt(0);
        text=r.toString();
        r.collapse;
        var o = r.commonAncestorContainer;
        while (o) {
          if (o.id == 'inner-middle')	{block='inner-middle';}
          o = o.parentNode;
        }

	range = selection.getRangeAt(0);
            
	if (window.opera)
	  prev = selection.getRangeAt(0);
	else
	  prev=document.createRange();

	prev.setStartBefore( document.getElementById('inner-middle') );
	prev.setEnd(range.startContainer,range.startOffset);
	prev = prev.toString();


	if (window.opera)
	  next = selection.getRangeAt(0);
	else
	  next = document.createRange();

	next.setStart(range.endContainer, range.endOffset);
	next.setEndAfter(document.getElementById('inner-middle'));
	next = next.toString();
      }else{
        if(selection.createRange){
          var r=selection.createRange();
          text=r.text;
          r.collapse;
          var o = r.parentElement();
          while (o) {
            if (o.id == 'inner-middle')	{block='inner-middle';}
            o = o.parentElement;
          }

	  sel = selection.createRange();


	  prev = selection.createRange();
	  prev.moveStart("character",-1000);
	  prev.setEndPoint('EndToStart',sel);
	  prev = prev.text;

	  next = selection.createRange();
	  next.moveEnd("character",1000);
	  next.setEndPoint('StartToEnd',sel);
	  next = next.text;
        }else{
          text=""+selection;
        }
      }

      if(text=="") {return null;}

      prev = prev.replace( /\n+/g, "\n");
      tmp = prev.split("\n");
      UB = tmp.length;
      if (UB-1 >= 0) {prev = tmp[UB-1]}
      if (UB-2 >= 0) {prev = tmp[UB-2] + "\n\n" + prev}
      l = text.length;
      text = text.replace( /^\s+/g, '');
      if (text.length != l) {prev = prev + " "}

      next = next.replace( /\n+/g, "\n");
      tmp = next.split("\n");
      UB = tmp.length;
      if (UB >= 0) {next = tmp[0]}
      if (UB >= 1) {next = next + "\n\n" + tmp[1]}
      l = text.length;
      text = text.replace( /\s+$/g, '');
      if (text.length != l) {next = " " + next}

      return {text:text,block:block,prev:prev,next:next};
    }else{
      alert('В этом браузере коррекция ошибок не работает');
      return;
    }
  }
  catch(e){return null;}
}

function do_check_(){
  
  if(navigator.appName.indexOf("Netscape")!=-1&&eval(navigator.appVersion.substring(0,1))<5){
    alert('В этом браузере коррекция ошибок не работает');
    return false;
  }
  var result=get_result_();
  if(!result){return false;}
  if (result.block != "inner-middle") {
    alert('Регистрация ошибки возможна только непосредственно в тексте материала');
    return false;
  }
  if(result.text.length>max_length){
    alert('Выделен слишком длинный текст');
    return false;
  }

  var error_div = document.getElementById('check_orpho');
  var left = ((window.innerWidth ? window.innerWidth : (document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.offsetWidth)) - error_div.offsetWidth)/2;
  left = left < 0 ? 0 : left;
  dx = (window.scrollX) ? window.scrollX : document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft;
  left = left + dx;
  var top = ((window.innerHeight ? window.innerHeight : (document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.offsetHeight)) - error_div.offsetHeight) / 2;
  top = top < 0 ? 0 : top;
  dy = (window.scrollY) ? window.scrollY : document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop;
  top = top + dy;
  error_div.style.left = left + "px";
  error_div.style.top = top + "px";
  error_div.style.visibility = 'visible';

  var error_error = document.getElementById('error_error');
  error_error.value = result.prev + "<font color='red'>" + result.text + "</font>" + result.next;
  var error_body = document.getElementById('error_body');
  prev1 = result.prev.replace(/.+\n/,'');
  next1 = result.next.replace(/\n.+/,'');
  if (prev1.length > 300) {prev1 = "..." + prev1.substring(prev1.length-300,prev1.length)}
  if (next1.length > 300) {next1 = next1.substring(0,300) + "..."}
  error_body.innerHTML = prev1 + "<span style='color:red'>[" + result.text + "]</span>" + next1;
  var error_page = document.getElementById('error_page');
  error_page.value = d.URL

  d.onkeypress=onkeypress_esc_;
  var error_close_img = document.getElementById('error_close_img');
  error_close_img.onclick=error_close_;

  return false;
}
 
 
(function (){
 
var add_length=60;
var max_length=256;
var w=window;
var d=w.document;
var b=d.body;

var get_result=function(){
  try{
    var text=null;
    var prev=null;
    var next=null;
    var selection=null;
    var block=null;
    if(w.getSelection){
      selection=w.getSelection();
    }else{
      if(d.getSelection){
        selection=d.getSelection();
      }else{
        selection=d.selection;
      }
    }
    if(selection!=null){
      var text=null;
      if(selection.getRangeAt){
        var r=selection.getRangeAt(0);
        text=r.toString();
        r.collapse;
        var o = r.commonAncestorContainer;
        while (o) {
          if (o.id == 'inner-middle')	{block='inner-middle';}
          o = o.parentNode;
        }

	range = selection.getRangeAt(0);
            
	if (window.opera)
	  prev = selection.getRangeAt(0);
	else
	  prev=document.createRange();

	prev.setStartBefore( document.getElementById('inner-middle') );
	prev.setEnd(range.startContainer,range.startOffset);
	prev = prev.toString();


	if (window.opera)
	  next = selection.getRangeAt(0);
	else
	  next = document.createRange();

	next.setStart(range.endContainer, range.endOffset);
	next.setEndAfter(document.getElementById('inner-middle'));
	next = next.toString();
      }else{
        if(selection.createRange){
          var r=selection.createRange();
          text=r.text;
          r.collapse;
          var o = r.parentElement();
          while (o) {
            if (o.id == 'inner-middle')	{block='inner-middle';}
            o = o.parentElement;
          }

	  sel = selection.createRange();


	  prev = selection.createRange();
	  prev.moveStart("character",-1000);
	  prev.setEndPoint('EndToStart',sel);
	  prev = prev.text;

	  next = selection.createRange();
	  next.moveEnd("character",1000);
	  next.setEndPoint('StartToEnd',sel);
	  next = next.text;
        }else{
          text=""+selection;
        }
      }

      if(text=="") {return null;}

      prev = prev.replace( /\n+/g, "\n");
      tmp = prev.split("\n");
      UB = tmp.length;
      if (UB-1 >= 0) {prev = tmp[UB-1]}
      if (UB-2 >= 0) {prev = tmp[UB-2] + "\n\n" + prev}
      l = text.length;
      text = text.replace( /^\s+/g, '');
      if (text.length != l) {prev = prev + " "}

      next = next.replace( /\n+/g, "\n");
      tmp = next.split("\n");
      UB = tmp.length;
      if (UB >= 0) {next = tmp[0]}
      if (UB >= 1) {next = next + "\n\n" + tmp[1]}
      l = text.length;
      text = text.replace( /\s+$/g, '');
      if (text.length != l) {next = " " + next}

      return {text:text,block:block,prev:prev,next:next};
    }else{
      alert('В этом браузере коррекция ошибок не работает');
      return;
    }
  }
  catch(e){return null;}
};
 
var do_check=function(){
  alert("r");
  if(navigator.appName.indexOf("Netscape")!=-1&&eval(navigator.appVersion.substring(0,1))<5){
    alert('В этом браузере коррекция ошибок не работает');
    return false;
  }
  var result=get_result();
  if(!result){return false;}
  if (result.block != "inner-middle") {
    alert('Регистрация ошибки возможна только непосредственно в тексте материала');
    return false;
  }
  if(result.text.length>max_length){
    alert('Выделен слишком длинный текст');
    return false;
  }

  var error_div = document.getElementById('check_orpho');
  var left = ((window.innerWidth ? window.innerWidth : (document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.offsetWidth)) - error_div.offsetWidth)/2;
  left = left < 0 ? 0 : left;
  dx = (window.scrollX) ? window.scrollX : document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft;
  left = left + dx;
  var top = ((window.innerHeight ? window.innerHeight : (document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.offsetHeight)) - error_div.offsetHeight) / 2;
  top = top < 0 ? 0 : top;
  dy = (window.scrollY) ? window.scrollY : document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop;
  top = top + dy;
  error_div.style.left = left + "px";
  error_div.style.top = top + "px";
  error_div.style.visibility = 'visible';

  var error_error = document.getElementById('error_error');
  error_error.value = result.prev + "<font color='red'>" + result.text + "</font>" + result.next;
  var error_body = document.getElementById('error_body');
  prev1 = result.prev.replace(/.+\n/,'');
  next1 = result.next.replace(/\n.+/,'');
  if (prev1.length > 300) {prev1 = "..." + prev1.substring(prev1.length-300,prev1.length)}
  if (next1.length > 300) {next1 = next1.substring(0,300) + "..."}
  error_body.innerHTML = prev1 + "<span style='color:red'>[" + result.text + "]</span>" + next1;
  var error_page = document.getElementById('error_page');
  error_page.value = d.URL

  d.onkeypress=onkeypress_esc;
  var error_close_img = document.getElementById('error_close_img');
  error_close_img.onclick=error_close;

  return false;
};

var error_close=function(){
  var error_div = document.getElementById('check_orpho');
  error_div.style.visibility = 'hidden';
  error_div.style.left = "-1100px";
  error_div.style.top = "-1100px";
  d.onkeypress=onkeypress;
}

var onkeypress_esc=function(e){
  var code=0;
  var we=w.event;
  if(we){
    code=we.keyCode==27;
  }else{
    if(e){code=(e.keyCode==27);}
  }
  if(code){
    error_close();
  }
};
 
var onkeypress=function(e){
  var code=0;
  var we=w.event;
  if(we){
    code=we.keyCode==10||(we.keyCode==13&&we.ctrlKey);
  }else{
    if(e){code=(e.which==10&&e.modifiers==2)||(e.keyCode==0&&e.charCode==106&&e.ctrlKey)||(e.keyCode==13&&e.ctrlKey);}
  }
  if(code){return do_check();}
};


document.write('\
<div id="check_orpho">\
<div class="error" id="error">\
    <!--[if gt IE 5]><iframe class="error-emulation"></iframe><![endif]-->\
    <div class="error-head">\
        <div class="error-line">\
            <div id="error_body"></div>\
            <img id="error_close_img" src="/images/close.gif" />\
        <div class="clear"></div>\
        </div>\
        <div class="img"><img src="/images/eror_loupe.jpg" alt="" /></div>\
        <div id="root" class="txt">\
            <h3>Спасибо за внимательность!</h3>\
            <p>Вы обнаружили у нас в тексте досадную ошибку или опечатку. Мы благодарны вам за это. Вы можете написать<br /> свой комментарий, или просто нажать кнопку "Отправить"</p>\
        </div>\
    <div class="clear"></div>\
    </div>\
    <form  name="error-form" method="post">\
    <input type="hidden" name="error" id="error_error" value="" />\
    <input type="hidden" name="block" id="error_block" value="" />\
    <input type="hidden" name="page"  id="error_page"  value="" />\
        <div class="error-form">\
            <table>\
            <tr>\
                <td>\
                    Напишите свой комментарий<br />\
                    <textarea name="comment"></textarea>\
                </td>\
            </tr>\
            <tr>\
                <th><input id="submit" type="submit" name="error_subm" class="inp_subm" onclick="Send(this.form); return false;" value=""/></th>\
            </tr>\
            </table>\
        </div>\
    </form>\
<div class="clear"></div>\
</div>\
</div>\
\
'); 
d.onkeypress = onkeypress_;
})();

