var msg, enabled, gecko;
if(msg==null) msg = document.getElementById("message");

// *******************************************************
tags = new Array();
if (navigator.userAgent.indexOf('Opera') != -1) advanced_code = 0;
else if (navigator.appName && navigator.appName.indexOf("Microsoft") != -1 && navigator.userAgent.indexOf("Windows") != -1 && navigator.userAgent.indexOf("Windows 3.1") == -1) advanced_code = 1; // use IE 4+ specific createRange functionality
	 else advanced_code = 0;

// *******************************************************
// replacements for unsupported array functions (because arrayname.push(var)
// and arrayname.pop() are not implemented in IE until version 5.5)

function getarraysize(thearray)
{
// replacement for arrayname.length property
	for (i = 0; i < thearray.length; i++) if ((thearray[i] == "undefined") || (thearray[i] == "") || (thearray[i] == null)) return i;

	return thearray.length;
}

function arraypush(thearray,value)
{
// replacement for arrayname.push(value)
	thearraysize = getarraysize(thearray);
	thearray[thearraysize] = value;
}

function arraypop(thearray)
{
// replacement for arrayname.pop()
	thearraysize = getarraysize(thearray);
	retval = thearray[thearraysize - 1];
	delete thearray[thearraysize - 1];
	return retval;
}

// *******************************************************

function setmode(modevalue) {
// sets cookie for normal (0) and enhanced (1) modes
        document.cookie = "vbcodemode="+modevalue+"; path=/; expires=Wed, 1 Jan 2020 00:00:00 GMT;";
}

function normalmode(theform) {
// checks value of mode radio buttons. returns true if normal mode
        if (null != theform.mode && theform.mode[1].checked) return false;
        else return true;
}

function stat(thevalue) {
// places mini-help text into help/error textbox
// strings are stored in vbcode_language.js
        document.vbform.status.value = eval(thevalue+"_text");
}

// *******************************************************

function ieWrap(textfield, open, close) {
	textfield.focus();
	sel = document.selection.createRange();
	sel.text=open+sel.text+close;
}
// From http://www.massless.org/mozedit/
function mozWrap(textfield, open, close) {
	//var selLength = textfield.textLength;
	var selStart = textfield.selectionStart;
	var selEnd = textfield.selectionEnd;
	if (selEnd == 1 || selEnd == 2)
		selEnd = selLength;

	var s1 = (textfield.value).substring(0,selStart);
	var s2 = (textfield.value).substring(selStart, selEnd)
	var s3 = (textfield.value).substring(selEnd, selLength);
	textfield.value = s1 + open + s2 + close + s3;
}
function anyWrap(textfield, open, close, prompttext) {
	inserttext = prompt(tag_prompt+"\n"+open+"xxx"+close, prompttext);
	if ((inserttext != null) && (inserttext != ""))
	textfield.value += open+inserttext+close;
}

function insertCode(textfield, vbcode, prompttext){
	var open = "["+vbcode+"]";
	var close = "[/"+vbcode+"]";
	if(advanced_code){ //Internet Explorer
		ieWrap(textfield, open, close);
	}else if(textfield.selectionEnd && (textfield.selectionEnd - textfield.selectionStart > 0)){ //Mozila
		mozWrap(textfield, open, close);
	}else{ // другие браузеры
		anyWrap(textfield, open, close, prompttext);
	}
}

// *******************************************************


function caret( node ) {

	var selll = document.selection.createRange();
    var clonell = selll.duplicate();

	if(node.selectionStart) return node.selectionStart;
	else if(!document.selection) return 0;
	var c        = "\001";
	var sel    = document.selection.createRange();

	if (sel.text.length<1) {
		var dul    = sel.duplicate();
		var len    = 0;
		dul.moveToElementText(node);
		sel.text   = c;
		len        = (dul.text.indexOf(c));
		sel.moveStart('character',-1);
		sel.text   = "";
		return len;
	}else{
		selll.collapse(true);
 	   	clonell.moveToElementText(node);
  	  	clonell.setEndPoint('EndToEnd', selll);
   	 	return clonell.text.length;//хранит позицию курсора, надо учесть символы переноса

	}

}

function numword( obj ) {

	var crt=caret( obj );

	if (crt!="select") {

		if (crt==-1) crt=obj.value.length;

		var h='%0A';
		var s=escape(obj.value.substr(0,crt));
		var m=3;
		var res=0;
		var i=4;

		while (i <= s.length-1) {
			ch=s.substr(i,m);
			if (ch==h) {res+=1; i=i+m-1;}
			else i++;
		}
		return res+1;
	}
	else return false;

}


function ieWrapHTML(textfield, textreplace ) {

	textfield.focus();

	var sel3 = document.selection.createRange();
	vrtext = sel3.text;
	sel3.text = " ";

	var sel = document.selection.createRange();
    var clone = sel.duplicate();
	var sel2 = sel.duplicate();
	var selend = sel.duplicate();

	textreplace = textreplace.replace( /\[RRR\]/gi, '"' );
	textreplace = textreplace.replace( /\[xxx\]/gi, vrtext );


    sel.collapse(true);
    clone.moveToElementText(textfield);
    clone.setEndPoint('EndToEnd', sel);
    var pos_cursor = clone.text.length;//хранит позицию курсора, надо учесть символы переноса

	var dvig = textreplace.indexOf("[CCC]");//Узнаем куда надо вставить курсор
	textreplace = textreplace.replace( /\[CCC\]/gi, "" );
	pos_end = pos_cursor + textreplace.length;
	if( dvig >0 ){
		pos_cursor = pos_cursor + dvig;
	}



	knum = numword(textfield);//поправочный коэффициент так как перенос строки это два символа
	if( knum ){
		pos_cursor = pos_cursor - knum + 1;
	}
	if( vrtext.length > 0 ){
		pos_cursor = pos_end - knum + 1;
	}


	sel2.text = textreplace;

	var rng=textfield.createTextRange();
	rng.collapse();
	rng.moveStart("character",pos_cursor);
	rng.select();
}
// From http://www.massless.org/mozedit/
function mozWrapHTML(textfield, textreplace ) {
	textreplace = textreplace.replace( /\[RRR\]/gi, '"' );

	textreplace       = textreplace.replace( /\[RRR\]/gi, '"' );

	var selLength = textfield.textLength;
	var selStart = textfield.selectionStart;
	var selEnd = textfield.selectionEnd;
	var scrollTop = textfield.scrollTop;
	var dvig = textreplace.indexOf("[CCC]");//Узнаем куда надо вставить курсор
	var pos_cursor = selStart + dvig;
	pos_cursor = selStart;
	textreplace       = textreplace.replace( /\[CCC\]/gi, '' );
	if( dvig >0 ){
		pos_cursor = pos_cursor + dvig;
	}
	if (selEnd == 1 || selEnd == 2)
		selEnd = selLength;

	var s1 = (textfield.value).substring(0,selStart);
	var s2 = (textfield.value).substring(selStart, selEnd)
	var s3 = (textfield.value).substring(selEnd, selLength);
	var vrtext = textreplace.replace( /\[xxx\]/gi, s2 );
	textfield.value = s1 + vrtext + s3;

	if( (selEnd - selStart)>0 ){
		pos_cursor = selStart+vrtext.length;
	}

	textfield.focus();
	textfield.selectionStart = pos_cursor;
	textfield.selectionEnd = pos_cursor;
	textfield.scrollTop = scrollTop;
}
function anyWrapHTML(textfield, textreplace, prompttext)
{
     textreplace = textreplace.replace( /\[RRR\]/g, '"' );
     textreplace = textreplace.replace( /\[CCC\]/g, '' );
     if (!textreplace.test(/^\s*<img[^>]+>\s*$/))
	 {
          inserttext = prompt("Aaaaeoa oaeno: "+"\n");
          if ((inserttext != null) && (inserttext != ""))
          textfield.value += textreplace.replace( /\[xxx\]/g, inserttext );
     }
     textfield.value += textreplace;
}

function insertCodeHTML(textfield, textreplace )
{
	if(advanced_code){ //Internet Explorer
		ieWrapHTML(textfield, textreplace);
	}else if( textfield.selectionStart || textfield.selectionStart == '0' ){ //Mozila
		mozWrapHTML(textfield, textreplace);
	}else{ // другие браузеры
		anyWrapHTML(textfield, textreplace, "");
	}
}

function insertMedia( obj )
{
	window.open('/diary.php?module=photolib&act=plist&insertmedia=', obj, 'width=650, height=600, location=0, toolbar=0, menubar=0, status=0, scrollbars=1, resizable=1');
	//return false;
}
//=======================================================================================================
function keyAction(e)
{
	try
	{
		var autosave_timer_value = get('autosave_timer_value');
		if (autosave_timer_value!= null) autosave(20);
	}
	catch(err){}

    if (e.shiftKey || e.altKey || !e.ctrlKey) return;
    var Key = e.keyCode;
    if (Key == 0) Key = e.charCode;
    if (!gecko && Key>64 && Key<91) Key += 32;
//	alert(Key);
    switch (Key)
    {
		case 13: if(_checkVal()){if(get('button_panel')!=null){if(get('button_panel').style.display=="none") showMsg("alert","Сохранение невозможно. Дождитесь завершения текущей операции..."); else save('rewrite');}else document.getElementById("msg_form").submit();} break;
		case 17: return false;
		case 98:  btClick('B'); break;
		case 105: btClick('I'); break;
		case 111: btClick('OT'); e.preventDefault();break;
		case 117: btClick('U'); break;
		case 115:  if(_checkVal() && get('button_panel')!=null){if(get('button_panel').style.display=="none") showMsg("alert","Сохранение невозможно. Дождитесь завершения текущей операции..."); else save('draft_save');} break;
		/*btClick('S'); break;*/
		case 189: btClick('-'); break;
		default: return;
    }
    e.preventDefault ? e.preventDefault() : e.returnValue = false;
}

function keyPressInit()
{
    msg = document.getElementById("message");
    if (!msg) return;
    msg.onfocus = function(){enabled=true;}
    msg.onblur = function(){enabled=false;}

    if (document.addEventListener)
    {
        document.addEventListener("keypress",function(e){keyAction(e)},true);
        if (window.opera) return;
        document.addEventListener("keydown", function(e){keyAction(e)},true);
        gecko = true;
    }
    else if (document.attachEvent) document.attachEvent("onkeydown", keyAction);
}

if (window.Prototype) {
	Event.observe(document, 'dom:loaded', keyPressInit);
} else if (window.jQuery) {
	window.jQuery(document).ready(keyPressInit);
} else {
	window.onload = keyPressInit;
}

function btClick(key)
{
	switch(key)
	{
		case "b": insertCodeHTML( msg, '[b][CCC][xxx][/b]' ); break;
		case "i": insertCodeHTML( msg, '[i][CCC][xxx][/i]' ); break;
		case "s": insertCodeHTML( msg, '[s][CCC][xxx][/s]' ); break;
		case "quote": insertCodeHTML( msg, '[quote][CCC][xxx][/quote]' ); break;
		case "u": insertCodeHTML( msg, '[u][CCC][xxx][/u]' ); break;
		case "url": insertCodeHTML( msg, '[url][CCC][xxx][/url]' ); break;
		case "img": insertCodeHTML( msg, '[img][CCC][xxx][/img]' ); break;
	}
	return false;
}
