var selField = '';
var fombj = '';
var editing_html = '';
var is_edits = false;
var uagent    = navigator.userAgent.toLowerCase();
var is_safari = ( (uagent.indexOf('safari') != -1) || (navigator.vendor == "Apple Computer, Inc.") );
var is_ie     = ( (uagent.indexOf('msie') != -1) && (!is_opera) && (!is_safari) && (!is_webtv) );
var is_ie4    = ( (is_ie) && (uagent.indexOf("msie 4.") != -1) );
var is_moz    = (navigator.product == 'Gecko');
var is_ns     = ( (uagent.indexOf('compatible') == -1) && (uagent.indexOf('mozilla') != -1) && (!is_opera) && (!is_webtv) && (!is_safari) );
var is_ns4    = ( (is_ns) && (parseInt(navigator.appVersion) == 4) );
var is_opera  = (uagent.indexOf('opera') != -1);
var is_kon    = (uagent.indexOf('konqueror') != -1);
var is_webtv  = (uagent.indexOf('webtv') != -1);

var is_win    =  ( (uagent.indexOf("win") != -1) || (uagent.indexOf("16bit") !=- 1) );
var is_mac    = ( (uagent.indexOf("mac") != -1) || (navigator.vendor == "Apple Computer, Inc.") );
var ua_vers   = parseInt(navigator.appVersion);

var text_enter_url       = "x";
var text_enter_page      = "x";
var text_enter_url_name  = "x";
var text_enter_page_name = "x";
var text_enter_image    = "x";
var text_enter_email    = "x";
var text_code           = "x";
var text_quote          = "x";
var error_no_url        = "x";
var error_no_title      = "x";
var error_no_email      = "x";
var prompt_start        = "x";
var img_title   		= "x";
var email_title  	    = "x";

var B_open = 0;
var I_open = 0;
var U_open = 0;
var S_open = 0;
var QUOTE_open = 0;
var CODE_open = 0;
var SQL_open = 0;
var HTML_open = 0;
var SMALL_open = 0;
var H_open = 0;
var UL_open = 0;
var OL_open = 0;
/*var LEFT_open = 0;
var CENTER_open = 0;
var RIGHT_open = 0;
var JUSTIFY_open = 0;*/
var HIDE_open = 0;
var COLOR_open = 0;
var ie_range_cache = '';

var bbtags   = new Array();

function stacksize(thearray)
{
	for (i = 0 ; i < thearray.length; i++ )
	{
		if ( (thearray[i] == "") || (thearray[i] == null) || (thearray == 'undefined') )
		{
			return i;
		}
	}

	return thearray.length;
}

function pushstack(thearray, newval)
{
	arraysize = stacksize(thearray);
	thearray[arraysize] = newval;
}

function popstack(thearray)
{
	arraysize = stacksize(thearray);
	theval = thearray[arraysize - 1];
	delete thearray[arraysize - 1];
	return theval;
}

function setFieldName(which)
{
            if (which != selField)
            {
				allcleartags();
                selField = which;

            }
}


function cstat()
{
	var c = stacksize(bbtags);

	if ( (c < 1) || (c == null) ) {
		c = 0;
	}

	if ( ! bbtags[0] ) {
		c = 0;
	}


}


function closeall()
{
	if (bbtags[0])
	{
		while (bbtags[0])
		{
			tagRemove = popstack(bbtags)
			var closetags = "[/" + tagRemove + "]";

			eval ("fombj." +selField+ ".value += closetags");

			if ( (tagRemove != 'FONT') && (tagRemove != 'SIZE') )
			{
				eval(tagRemove + "_open = 0");
				document.getElementById( 'b_' + tagRemove ).className = 'editor_button';

			}
		}
	}

	bbtags = new Array();

}

function allcleartags()
{
	if (bbtags[0])
	{
		while (bbtags[0])
		{
			tagRemove = popstack(bbtags)

				eval(tagRemove + "_open = 0");
				document.getElementById( 'b_' + tagRemove ).className = 'editor_button';

		}
	}

	bbtags = new Array();

}

function emoticon(theSmilie)
{
	doInsert(" " + theSmilie + " ", "", false);
}

function pagebreak()
{
	doInsert("{PAGEBREAK}", "", false);
}

function add_code(NewCode)
{
    fombj.selField.value += NewCode;
    fombj.selField.focus();
}

function listtag(thetag)
{
	var tagOpen = eval(thetag + "_open");


		if (tagOpen == 0)
		{
			if(doInsertLI("[" + thetag + "]", "[/" + thetag + "]", true))
			{
				eval(thetag + "_open = 1");
				document.getElementById( 'b_' + thetag ).className = 'editor_buttoncl';

				pushstack(bbtags, thetag);
				cstat();

			}
		}
		else
		{
			lastindex = 0;

			for (i = 0 ; i < bbtags.length; i++ )
			{
				if ( bbtags[i] == thetag )
				{
					lastindex = i;
				}
			}

			while (bbtags[lastindex])
			{
				tagRemove = popstack(bbtags);
				doInsertLI("[/" + tagRemove + "]", "", false)


				if ( (tagRemove != 'FONT') && (tagRemove != 'SIZE') )
				{
					eval(tagRemove + "_open = 0");
					document.getElementById( 'b_' + tagRemove ).className = 'editor_button';
				}
			}

			cstat();
		}

}

function simpletag(thetag)
{
	var tagOpen = eval(thetag + "_open");


		if (tagOpen == 0)
		{
			if(doInsert("[" + thetag + "]", "[/" + thetag + "]", true))
			{
				eval(thetag + "_open = 1");
				document.getElementById( 'b_' + thetag ).className = 'editor_buttoncl';

				pushstack(bbtags, thetag);
				cstat();

			}
		}
		else
		{
			lastindex = 0;

			for (i = 0 ; i < bbtags.length; i++ )
			{
				if ( bbtags[i] == thetag )
				{
					lastindex = i;
				}
			}

			while (bbtags[lastindex])
			{
				tagRemove = popstack(bbtags);
				doInsert("[/" + tagRemove + "]", "", false)


				if ( (tagRemove != 'FONT') && (tagRemove != 'SIZE') )
				{
					eval(tagRemove + "_open = 0");
					document.getElementById( 'b_' + tagRemove ).className = 'editor_button';
				}
			}

			cstat();
		}

}

function pagelink()
{
    var FoundErrors = '';
	var thesel ='';
	if ( (ua_vers >= 4) && is_ie && is_win)
	{
	thesel = document.selection.createRange().text;
	} else thesel ='page';

    if (!thesel) {
        thesel ='page';
    }

    var enterURL   = prompt(text_enter_page, "1");
    var enterTITLE = prompt(text_enter_page_name, thesel);

    if (!enterURL) {
        FoundErrors += " " + error_no_url;
    }
    if (!enterTITLE) {
        FoundErrors += " " + error_no_title;
    }

    if (FoundErrors) {
        alert("Error!"+FoundErrors);
        return;
    }

	doInsert("[PAGE="+enterURL+"]"+enterTITLE+"[/PAGE]", "", false);
}
function image_upload()
{

window.open('http://webpunkt.ru/engine/images.php?area=' + selField, '_Addimage', 'HEIGHT=500,resizable=yes,scrollbars=yes,WIDTH=550');

}
function tag_url()
{
    var FoundErrors = '';
	var thesel ='';
	if ( (ua_vers >= 4) && is_ie && is_win)
	{
	thesel = document.selection.createRange().text;
	} else thesel ='My Webpage';

    if (!thesel) {
        thesel ='My Webpage';
    }

    var enterURL   = prompt(text_enter_url, "http://");
    var enterTITLE = prompt(text_enter_url_name, thesel);

    if (!enterURL) {
        FoundErrors += " " + error_no_url;
    }
    if (!enterTITLE) {
        FoundErrors += " " + error_no_title;
    }

    if (FoundErrors) {
        alert("Error!"+FoundErrors);
        return;
    }

	doInsert("[URL="+enterURL+"]"+enterTITLE+"[/URL]", "", false);
}


function tag_image()
{
    var FoundErrors = '';
    var enterURL   = prompt(text_enter_image, "http://");

    var Title = prompt(img_title, "left");

    if (!enterURL) {
        FoundErrors += " " + error_no_url;
    }

    if (FoundErrors) {
        alert("Error!"+FoundErrors);
        return;
    }

if (Title == "")
           {
	doInsert("[IMG]"+enterURL+"[/IMG]", "", false);
           }
else {
if (Title == "center") {
	doInsert("[CENTER][IMG]"+enterURL+"[/IMG][/CENTER]", "", false);
}
else {
	doInsert("[IMG="+Title+"]"+enterURL+"[/IMG]", "", false);
	}
 }
}

function tag_email()
{
    var emailAddress = prompt(text_enter_email, "");

    if (!emailAddress) {
		alert(error_no_email);
		return;
	}

	var thesel ='';
	if ( (ua_vers >= 4) && is_ie && is_win)
	{
	thesel = document.selection.createRange().text;
	} else thesel ='';

    if (!thesel) {
        thesel ='';
    }

	var Title = prompt(email_title, thesel);

if (!Title) Title = emailAddress;

	doInsert("[EMAIL="+emailAddress+"]"+Title+"[/EMAIL]", "", false);
}

function splitString(sep, str) {	var tmpStr = '';
	var strArray = '';
	var cnt = 0;
	while (str) {
		if (str.indexOf(sep) < 0) {			tmpStr = str;
			strArray += '"'+tmpStr+'",';
			str = '';		} else {
			tmpStr = str.substring(0,str.indexOf(sep));
			strArray += '"'+tmpStr+'",';
			str = str.substring(str.indexOf(sep)+2);
		}
	}
	strArray = strArray.substring(0,strArray.length-1);
	eval('var strArray = ['+strArray+'];');
	return strArray;}

function doInsertLI(ibTag, ibClsTag, isSingle)
{
	var isClose = false;
	var obj_ta = eval('fombj.'+ selField);

	if ( (ua_vers >= 4) && is_ie && is_win)
	{
		if (obj_ta.isTextEdit)
		{
			obj_ta.focus();
			var sel = document.selection;
			var rng = ie_range_cache ? ie_range_cache : sel.createRange();
			rng.colapse;

			if((sel.type == "Text" || sel.type == "None") && rng != null)
			{
				var separator = String.fromCharCode(13);
				if(ibClsTag != "" && rng.text.length > 0){
					var lis = rng.text.split(separator);

					for(var i=0;i<lis.length;i++) {
						var lisMiddleText = replaceStr(lis[i],'\n','');
						ibTag += '[LI]' + lisMiddleText + '[/LI]';
					}

					ibTag += ibClsTag;

				}
				else if(isSingle) {
					//isClose = true;
					ibTag += '[LI][/LI]' + ibClsTag;
				}

				rng.text = ibTag;
			}
		}
		else
		{
			if(isSingle)
			{
				//isClose = true;
			}

			obj_ta.value += ibTag;
		}
		rng.select();
	ie_range_cache = null;

	}
	else if ( obj_ta.selectionEnd )
	{
		var ss = obj_ta.selectionStart;
		var st = obj_ta.scrollTop;
		var es = obj_ta.selectionEnd;

		if (es <= 2)
		{
			es = obj_ta.textLength;
		}

		var start  = (obj_ta.value).substring(0, ss);
		var middle = (obj_ta.value).substring(ss, es);
		var end    = (obj_ta.value).substring(es, obj_ta.textLength);

		var separator = String.fromCharCode(10);

		if (obj_ta.selectionEnd - obj_ta.selectionStart > 0)
		{
			var lis = middle.split(separator);
			for(var i=0;i<lis.length;i++) {				var lisMiddleText = replaceStr(lis[i],'\r','');
				ibTag += '[LI]' + lisMiddleText + '[/LI]';
			}
			middle = ibTag + ibClsTag;
		}
		else
		{
			middle = ibTag + '[LI][/LI]' + ibClsTag;

			if (isSingle)
			{
				//isClose = true;
			}
		}

		obj_ta.value = start + middle + end;

		var cpos = ss + (middle.length);

		obj_ta.selectionStart = cpos;
		obj_ta.selectionEnd   = cpos;
		obj_ta.scrollTop      = st;


	}
	else
	{
		var separator = String.fromCharCode(13);

		if (isSingle)
		{
			//isClose = true;
		}

		obj_ta.value += ibTag + '[LI][/LI]' + ibClsTag;
	}

	obj_ta.focus();
	return isClose;
}

function doInsert(ibTag, ibClsTag, isSingle)
{
	var isClose = false;
	var obj_ta = eval('fombj.'+ selField);

	if ( (ua_vers >= 4) && is_ie && is_win)
	{
		if (obj_ta.isTextEdit)
		{
			obj_ta.focus();
			var sel = document.selection;
			var rng = ie_range_cache ? ie_range_cache : sel.createRange();
			rng.colapse;

			if((sel.type == "Text" || sel.type == "None") && rng != null)
			{
				if(ibClsTag != "" && rng.text.length > 0)
					ibTag += rng.text + ibClsTag;
				else if(isSingle)
					isClose = true;

				rng.text = ibTag;
			}
		}
		else
		{
			if(isSingle)
			{
				isClose = true;
			}

			obj_ta.value += ibTag;
		}
		rng.select();
	ie_range_cache = null;

	}
	else if ( obj_ta.selectionEnd )
	{
		var ss = obj_ta.selectionStart;
		var st = obj_ta.scrollTop;
		var es = obj_ta.selectionEnd;

		if (es <= 2)
		{
			es = obj_ta.textLength;
		}

		var start  = (obj_ta.value).substring(0, ss);
		var middle = (obj_ta.value).substring(ss, es);
		var end    = (obj_ta.value).substring(es, obj_ta.textLength);

		if (obj_ta.selectionEnd - obj_ta.selectionStart > 0)
		{
			middle = ibTag + middle + ibClsTag;
		}
		else
		{
			middle = ibTag + middle;

			if (isSingle)
			{
				isClose = true;
			}
		}

		obj_ta.value = start + middle + end;

		var cpos = ss + (middle.length);

		obj_ta.selectionStart = cpos;
		obj_ta.selectionEnd   = cpos;
		obj_ta.scrollTop      = st;


	}
	else
	{
		if (isSingle)
		{
			isClose = true;
		}

		obj_ta.value += ibTag;
	}

	obj_ta.focus();
	return isClose;
}

function getOffsetTop(obj)
{
	var top = obj.offsetTop;

	while( (obj = obj.offsetParent) != null )
	{
		top += obj.offsetTop;
	}

	return top;
}

function getOffsetLeft(obj)
{
	var top = obj.offsetLeft;

	while( (obj = obj.offsetParent) != null )
	{
		top += obj.offsetLeft;
	}

	return top;
}

function ins_color()
{

	if (COLOR_open == 0) {
		var buttonElement = document.getElementById('b_COLOR');
		document.getElementById(selField).focus();

		if ( is_ie )
		{
			document.getElementById(selField).focus();
			ie_range_cache = document.selection.createRange();
		}

		var iLeftPos  = getOffsetLeft(buttonElement);
		var iTopPos   = getOffsetTop(buttonElement) + (buttonElement.offsetHeight + 3);

		document.getElementById('cp').style.left = (iLeftPos) + "px";
		document.getElementById('cp').style.top  = (iTopPos)  + "px";

		if (document.getElementById('cp').style.visibility == "hidden")
		{
			document.getElementById('cp').style.visibility = "visible";
			document.getElementById('cp').style.display    = "block";
		}
		else
		{
			document.getElementById('cp').style.visibility = "hidden";
			document.getElementById('cp').style.display    = "none";
			ie_range_cache = null;
		}
	}
	else
	{
			lastindex = 0;

			for (i = 0 ; i < bbtags.length; i++ )
			{
				if ( bbtags[i] == 'COLOR' )
				{
					lastindex = i;
				}
			}

			while (bbtags[lastindex])
			{
				tagRemove = popstack(bbtags);
				doInsert("[/" + tagRemove + "]", "", false)
				eval(tagRemove + "_open = 0");
				document.getElementById( 'b_' + tagRemove ).className = 'editor_button';
			}
	}
}
function setColor(color)
{

		if ( doInsert("[COLOR=" +color+ "]", "[/COLOR]", true ) )
		{
			COLOR_open = 1;
			document.getElementById( 'b_COLOR' ).className = 'editor_buttoncl';
			pushstack(bbtags, "COLOR");
		}

	document.getElementById('cp').style.visibility = "hidden";
	document.getElementById('cp').style.display    = "none";
    cstat();
}

function replaceStr(str, sub, rep) {	str = 'sumbol'+str;	while(str.indexOf(sub) > 0) {		str = str.replace(sub,rep);	}
	str = str.substring(6);
	return str;}

function bbCode (objPrivew, objPrint) {	var obj_ta = eval('fombj.'+ selField);
	var text = obj_ta.value;
	var enter = String.fromCharCode(10);
	text = replaceStr(text,'[B]','<B>');
	text = replaceStr(text,'[/B]','</B>');
	text = replaceStr(text,'[I]','<I>');
	text = replaceStr(text,'[/I]','</I>');
	text = replaceStr(text,'[U]','<U>');
	text = replaceStr(text,'[/U]','</U>');
	text = replaceStr(text,'[S]','<STRIKE>');
	text = replaceStr(text,'[/S]','</STRIKE>');
	text = replaceStr(text,'[SMALL]','<SMALL>');
	text = replaceStr(text,'[/SMALL]','</SMALL>');
	text = replaceStr(text,'[H]','<H3>');
	text = replaceStr(text,'[/H]','</H3>');
	text = replaceStr(text,'[QUOTE]','&quot;');
	text = replaceStr(text,'[/QUOTE]','&quot;');
	text = replaceStr(text,'[OL]','<OL>');
	text = replaceStr(text,'[/OL]','</OL>');
	text = replaceStr(text,'[UL]','<UL>');
	text = replaceStr(text,'[/UL]','</UL>');
	text = replaceStr(text,'[LI]','<LI>');
	text = replaceStr(text,'[/LI]','</LI>');
	text = replaceStr(text,enter,'<BR>');
	objPrint.style.display='none';
	objPrivew.style.display='block';
	objPrivew.innerHTML = text;}

function unbbCode (text) {
	var enter = String.fromCharCode(10);
	text = replaceStr(text,'<B>','[B]');
	text = replaceStr(text,'</B>','[/B]');
	text = replaceStr(text,'<I>','[I]');
	text = replaceStr(text,'</I>','[/I]');
	text = replaceStr(text,'<U>','[U]');
	text = replaceStr(text,'</U>','[/U]');
	text = replaceStr(text,'<STRIKE>','[S]');
	text = replaceStr(text,'</STRIKE>','[/S]');
	text = replaceStr(text,'<SMALL>','[SMALL]');
	text = replaceStr(text,'</SMALL>','[/SMALL]');
	text = replaceStr(text,'<H3>','[H]');
	text = replaceStr(text,'</H3>','[/H]');
	text = replaceStr(text,'&quot;','[QUOTE]');
	text = replaceStr(text,'&quot;','[/QUOTE]');
	text = replaceStr(text,'<OL>','[OL]');
	text = replaceStr(text,'</OL>','[/OL]');
	text = replaceStr(text,'<UL>','[UL]');
	text = replaceStr(text,'</UL>','[/UL]');
	text = replaceStr(text,'<LI>','[LI]');
	text = replaceStr(text,'</LI>','[/LI]');
	text = replaceStr(text,'<BR>',enter);
	return text;
}

function commentkeyup() {
	var obj = eval('fombj.'+ selField);
	var separator = String.fromCharCode(13);
	var rows = obj.value.split(separator);
	obj.rows = rows.length+1;}

function comment_edit_form(id) {
	if (!is_edits) {
		var obj = document.getElementById(id);
		editing_html = obj.innerHTML;
		var separator = String.fromCharCode(13);
		var rows = unbbCode(obj.innerHTML);
		rows = rows.split(separator);
		rows = rows.length;
		if (rows <= 0) rows = 1;
		rows++;
		obj.innerHTML = '<textarea id="edit_'+id+'" class="richtext" style="width:450px;" rows="'+rows+'">'+unbbCode(obj.innerHTML)+'</textarea><br><input type="image"  onclick="comment_edit(\''+id+'\');return false;" style="cursor:pointer;" src="public/images/edit.gif" title="Edit">&nbsp;<input type="image" style="cursor:pointer" src="public/images/cancel.gif" onclick="cancel_edit_comment('+id+');return false;" title="Cancel">';	    is_edits = true;
    } else alert('One comment is editing now!');
}

function cancel_edit_comment (id) {	id.innerHTML = editing_html;
	is_edits = false;}

function comment_edit(id) {	var text = document.getElementById('edit_'+id).value;
	is_edits = false;
	xajax_comment_edit(id.substring(8),text);
}
