// процедура правки v2.1
//
// (с)LLeo 2009 для проекта блогодвижка http://lleo.aha.ru/blog/
//
// за бесценные советы, дизайн вспывающего окошка и процедуры работы с выделением - спасибо Михаилу Валенцеву http://valentsev.ru

var opecha;
var opechanew;
var opecha_id;
var opecha_id_go;
var leftHelper;
var topHelper;
var site_id;
var textarea_cols=40;
var Nx = 630;
var helper_napomni=1;
if(!hashpresent) var hashpresent='1';
var eventkey,lastkeycode;

window.onload = function() {

// === KEYBOARD === http://www.asquare.net/javascript/tests/KeyCode.html
document.onkeypress = function(e){ lastkeycode=(e.keyCode ? e.keyCode :e.which ? e.which : null); };
document.onkeyup = function(e){ if(eventkey!==0 || lastkeycode==0) return;
	var ct=e.metaKey+2*e.altKey+4*e.shiftKey+8*e.ctrlKey;
	for(var i in hotkey) if(hotkey[i][0]==lastkeycode && hotkey[i][1]==(hotkey[i][1]&ct)){ var T=setTimeout('hotkey['+i+'][2](eventkey)',50); return hotkey[i][3]; }
// mkdiv('keyp_'+key,"<div id='keyp'>"+key+"</div>",'qTip'); posdiv('keyp_'+key,-1,-1); setTimeout("clean('keyp_"+key+"')",800);
};
document.onkeydown = function(e) { if(!e) e=window.event;
	eventkey=0; var key = (e.keyCode ? e.keyCode : e.which ? e.which : 0); if(key===0) return;
	var ct=e.metaKey+2*e.altKey+4*e.shiftKey+8*e.ctrlKey; eventkey=e;
	for(var i in hotkey) if(hotkey[i][0]==key && hotkey[i][1]==(hotkey[i][1]&ct)){ var T=setTimeout('hotkey['+i+'][2](eventkey)',50); return hotkey[i][3]; }

// mkdiv('keyp_'+key,"<div id='keyp'>"+key+"</div>",'qTip'); posdiv('keyp_'+key,-1,-1); setTimeout("clean('keyp_"+key+"')",800);

};
// === KEYBOARD ===

screenWidth=document.body.clientWidth; window.onresize=function(){screenWidth=document.body.clientWidth};

// === MOUSE ===
document.onmouseup=function(e){ if(!e) e = window.event;
	if(isHelps()) return; // Если уже есть открытые окна - нах правку!

	opecha=(document.selection) ? document.selection.createRange().text : window.getSelection(); opecha += '';

        switch(browser()) { // Браузеры
            case 1: if(window.getSelection().anchorNode) testSelection = window.getSelection().anchorNode; break;
            case 2: var testSelection = document.selection.createRange().parentElement(); break; // IE
	    }
        if(browser() != 3 && testSelection && opecha!='') { // Поиск автора выделенного текста.
            while( ( testSelection.tagName != 'DIV' || testSelection.id == '' || testSelection.id == undefined ) 
			&& testSelection.parentNode != undefined) { testSelection=testSelection.parentNode; }
		if(testSelection.id == undefined) { opecha_id=0; return; }

		//alert("DIV=" + testSelection.id); return;
		opecha_id=testSelection.id;

		if(!helper_napomni) return helper_go();
		else { if(++helper_napomni < 3) {
				salert("Опечатка? Нажмите Ctrl+Enter",2000);
				setkey('enter','ctrl',function(e){clean('salert');helper_go()},false);
				idd('salert').onclick=function(){clean('salert');helper_go();};
				}
 		}
	}
};

for(var i in page_onstart) eval(page_onstart[i]); page_onstart=[];
};

function helper_go() { if(opecha_id==0 || opecha=='' || opecha_id==undefined) return; // Сам обработчик опечаток
	var body = stripp(vzyal(opecha_id));
	if(body.length <1024) { /* opecha=brp2nl(body); */ }
	if(opecha.length>1024) { /* salert('Много текста. Выделите поменьше.',2000); */ return; }
	var opecha_html = stripp(nl2brp(opecha));
	var n=scount(body.replace(/onclick="cut\(this,\'.*?\',\d\)">/gi,"") ,opecha_html);
if(n>1) { return salert('Строк "'+opecha+'" в блоке "'+opecha_id+'" содержится '+n+'!<br>Попробуйте выделить более длинный кусок.',3000); }
if(n<1) { return; /* salert('Ошибка: возможно, попался абзац?<br>Попробуйте выделить словосочетание без абзаца.',3000);*/ }
	opecha_id_go=opecha_id;
	return stextarea(opecha,opecha_id);
}

function page(l) { return (l.length / textarea_cols + ('\n'+l).match(/\n/g).length + 1); }

function salert(l,t) {
helps('salert',"<div style='margin:20pt'>"+l+"</div>");	if(t) setTimeout("clean('salert')",t); return false;
}

function stextarea(opecha,id) {
	helps('opechatku','\<table border=0 cellspacing=0 cellpadding=0><tr valign=top><td rowspan=2>\
'+(admin?'':'<span style="font-size: 9px;">исправь опечатку и нажми Enter:</span><br>')+'\
<textarea class="pravka_textarea" id="message" name="message" class=t cols='+textarea_cols+' rows=' + page(opecha) + '>'+opecha+'</textarea>\
</td></tr><tr><td align=right valign=center>\
'+(admin?'<div class=ll onclick=\'clean("opechatku");majax("editor.php",{a:"editform",num:'+num+'})\'>editor</div>':'')+'\
<a onclick=\'insert_n(idd("message"));\'><div class=fmn></div></a>\
<a onclick=\'ti("message","\251{select}")\'><div class=fmcopy></div></a>\
<a onclick=\'ti("message","\227{select}")\'><div class=fmmdash></div></a>\
<a onclick=\'ti("message","\253{select}\273")\'><div class=fmltgt></div></a>\
</td></tr></table>');
setkey('esc','',function(a,b){helper_napomni=3; clean('opechatku')}); // убирать по ESC
setkey('enter','',function(a,b){sendoshibka()},false); // отправлять по Enter
setkey('enter','ctrl',function(a,b){sendoshibka()},false); // отправлять по Ctrl+Enter
helps_cancel('opechatku',function(){ helper_napomni=3; clean('opechatku')});
idd('message').focus();
return false;
}

function scount(str,s) { var i=0,c=0; while((i=str.indexOf(s,++i))>0) c++; return c; }
function nl2brp(s) { s=s.replace(/\n\n/gi,"<p>"); s=s.replace(/\n/gi,"<br>"); return s; }
function brp2nl(s) { s=s.replace(/<p>/gi,"\n\n"); s=s.replace(/<br>/gi,"\n"); return s; }
function stripp(s) { return s.replace(/<\/p>/gi,""); }

function sendoshibka() {
	opecha=stripp(idd('message').defaultValue);
	opechanew=stripp(idd('message').value);
	clean('opechatku');

	if(opecha==opechanew) return;

if(opecha_id_go=='Body') var data='@dnevnik_zapisi@Body@Date@'+dnevnik_data;
else if(opecha_id_go=='Header') var data='@dnevnik_zapisi@Header@Date@'+dnevnik_data;
else if(opecha_id_go.substring(0,1)=='a') var data='@dnevnik_comment@Answer@id@'+opecha_id_go.replace(/^a/,'');
else if(opecha_id_go.indexOf('Body_')!=-1) var data='@dnevnik_zapisi@Body@num@'+opecha_id_go.substr(5);
else if(opecha_id_go.indexOf('Header_')!=-1) var data='@dnevnik_zapisi@Header@num@'+opecha_id_go.substr(7);

else var data='@dnevnik_comm@Text@id@'+opecha_id_go;

if(opechanew && opechanew.length!=0) {
	var body=stripp(vzyal(opecha_id_go));
	var ss=body.indexOf(nl2brp(opecha));
	var es=ss+nl2brp(opecha).length;
majax('ajax_pravka.php',{action:'opechatka',
opecha_id_go:opecha_id_go,ss: ss,es: es,
data:data,hash:hashpage,hashpresent:hashpresent,text:opecha,textnew:opechanew});
helper_napomni=0;
} else { salert('совсем пустое - нельзя',3000); }
}

