var ClientTp = 0;
var BImgPath = '';
var ImgPath = '';
var ClsDescr = {clan:'клан',user:'игрок',aliance:'союз'};

function GetSelection()
{ 
if (byid('switcher').value == 0)
	{
	var trgwin = byid('formedit').contentWindow;
	if(trgwin.getSelection)
		{ 
	   slct = trgwin.getSelection();
   	range = slct.getRangeAt(0);
	   return range.toString();   
		}
	range = trgwin.document.selection.createRange();
	if (trgwin.document.selection.type == 'Text' || trgwin.document.selection.type == 'text')
		{ return range.text; }
	}
else
	{
	var rv = '';
	var EdObj = byid('simpleedit');
	EdObj.focus();
	if (ClientTp == 1)
		{
		Range = document.selection.createRange();
		TextRange = document.body.createTextRange();
		TextRange.moveToElementText(EdObj);
		if (TextRange.inRange(Range) && (document.selection.type == 'Text' || document.selection.type == 'text'))
			{ rv = Range.htmlText; }
		}
	else
		{
		var Sst = EdObj.selectionStart;
		rv = EdObj.value.substr(Sst,EdObj.selectionEnd - Sst);
		}
	return rv;
	}
return '';
}

function ReplaceTextSelection(txt)
{ 
if (byid('switcher').value == 1)
	{
	var EdObj = document.getElementById('simpleedit');
	EdObj.focus();
	if (ClientTp == 1)
		{ 
		Range = document.selection.createRange();
		TextRange = document.body.createTextRange();
		TextRange.moveToElementText(EdObj);
		if (TextRange.inRange(Range))
			{ Range.text = txt; }
		}
	else
		{ 
		var Sst = EdObj.selectionStart;
		EdObj.value = EdObj.value.substr(0,Sst) + txt + EdObj.value.substr(EdObj.selectionEnd)
		EdObj.setSelectionRange(Sst,Sst + txt.length);
		}
	}
}

function ReplaceGeckoSelection(Node)
{ // Заменяет выделение на Node для Gecko
if (byid('switcher').value == 0)
	{
	var sel = byid('formedit').contentWindow.getSelection();
	var doc = byid('formedit').contentWindow.document;
	var range = sel.getRangeAt(0);
	sel.removeAllRanges();
	var container = range.startContainer;
	var pos = range.startOffset;
	if (container.tagName=='HTML')
		{ 
		container = doc.body;	
		container.insertBefore(Node, null);
		range=doc.createRange();
		range.setStartAfter(Node);
		range.setEndAfter(Node);
		sel.addRange(range);
		return;
		}
	else
		{ range.deleteContents(); }
	range=doc.createRange();
	if (container.nodeType==3 && Node.nodeType==3) 
		{
	   container.insertData(pos, Node.nodeValue);
	   range.setEnd(container, pos+Node.length);
   	range.setStart(container, pos+Node.length);
	   } 
	else 
		{
	   var afterNode;
   	if (container.nodeType==3) 
			{
	      var textNode = container;
   	   container = textNode.parentNode;
      	var text = textNode.nodeValue;
	      var textBefore = text.substr(0,pos);
   	   var textAfter = text.substr(pos);
      	var beforeNode = doc.createTextNode(textBefore);
	      afterNode = doc.createTextNode(textAfter);
   	   container.insertBefore(afterNode, textNode);
      	container.insertBefore(Node, afterNode);
	      container.insertBefore(beforeNode, Node);
   	   container.removeChild(textNode);
			}
		else 
			{
	      afterNode = container.childNodes[pos];
   	   container.insertBefore(Node, afterNode);
      	}
		range.setStartAfter(Node);
		range.setEndAfter(Node);
	   }
	sel.addRange(range);
	}
}

function ReplaceIESelection(txt,append)
{ 
var trgwin = byid('formedit').contentWindow;

Range = trgwin.document.selection.createRange();
FullRange = trgwin.document.body.createTextRange();
if (!FullRange.inRange(Range) || append)
	{ trgwin.document.body.innerHTML = trgwin.document.body.innerHTML + txt; }
else
	{ Range.pasteHTML(txt); }
}

function SelectObject(clsname)
{
var txt = GetSelection();
var urls={user:"selector_tp_user.html",clan:"selector_tp_clan.html",aliance:"selector_tp_aliance.html"};
var url = urls[clsname];
if (txt != '')
  url += "?srtext="+txt;
selectwindow=window.open(url,"selectwindow","toolbar=no,scrollbars=yes,resizable=no,width=600,height=600");
}

function InsertObject(id,cls,text)
{
var txt = GetSelection();

if (byid('switcher').value == 0)
	{
	if (txt != '' && txt.indexOf('<') == -1 && txt.indexOf('>') == -1) text = txt;
	var clsname = ClsDescr[cls];
	if (!clsname) return;
	if (ClientTp == 1)
		{
		var intxt = '&nbsp;<span id="'+cls + '_' + id+'" class="inspan">'+text+'&nbsp;('+clsname+')</span>&nbsp;';
		ReplaceIESelection(intxt,0);
		}
	else
		{ 
		var trgdoc = document.getElementById('formedit').contentWindow.document;
		var Span = trgdoc.createElement('span');
		Span.className = 'inspan';
		Span.setAttribute('id',cls + '_' + id);
		var Txt = trgdoc.createTextNode(text+' ');
		Span.appendChild(Txt);
		var Txt2 = trgdoc.createTextNode('('+clsname+')');
		Span.appendChild(Txt2);
		var Nb = trgdoc.createTextNode(' ');
		ReplaceGeckoSelection(Nb);
		ReplaceGeckoSelection(Span);
		var Nb2 = trgdoc.createTextNode(' ');
		ReplaceGeckoSelection(Nb2);
		}
	}
else
	{
	}
byid('formedit').contentWindow.focus();
}

function InsertFormat(tg)
{
var cmd = AvailButtons[tg];
if (!cmd) return;
var txt=GetSelection(); 
if (txt == '' && cmd[2] != '' && cmd[2] != '#spec')
	{
	alert ('Выделите текст для форматирования');
	return;
	}
if (byid('switcher').value == 0)
	{
	var trgdoc = byid('formedit').contentWindow.document;
	if (ClientTp == 1)
		{ trgdoc.execCommand(cmd[0],false,0); }
	else
		{ trgdoc.execCommand(cmd[1],false,0); }
	byid('formedit').contentWindow.focus();
	}
else 
	{
	if (cmd[2] == '') // Команды браузеру
		{
		if (ClientTp == 1)
			{ document.execCommand(cmd[0],false,0); }
		else
			{ document.execCommand(cmd[1],false,0); }
		}
	else if (cmd[2] == '#spec') // Специальное форматирование
		{
		}
	else 
		{ 
		if (txt != '')
			{
			re = new RegExp("^\\[" + cmd[2] + "\\](.*)\\[\\/" + cmd[2] + "\\]$");
			if (txt.match(re) != null)
				{ txt = RegExp.$1; }
			else
				{ txt = '['+cmd[2]+']'+txt+'[/'+cmd[2]+']'; }
			ReplaceTextSelection(txt);
			}
		}
	}
}

function InsertSmile(smile)
{
if (byid('switcher').value == 0)
	{
	var trgwin = byid('formedit').contentWindow;
	var append = false;
	if(trgwin.getSelection)
		{ 
		var Im = trgwin.document.createElement('img');
		Im.setAttribute('src',BImgPath + 'sm/' + smile + '.gif');
		ReplaceGeckoSelection(Im);
		}
	else if (trgwin.document.selection)
		{
		Range = trgwin.document.selection.createRange();
		FullRange = trgwin.document.body.createTextRange();
		if (!FullRange.inRange(Range))
			{ trgwin.document.body.innerHTML = trgwin.document.body.innerHTML + '<img src="' + BImgPath + 'sm/' + smile+'.gif">'; }
		else
			{ Range.pasteHTML('<img src="' + BImgPath + 'sm/' + smile+'.gif">'); }
   	}
	}
else
	{
	sml = '[:'+smile+':]';
	txt = GetSelection();
	if (txt != '')
		{
		re = new RegExp("^\\[\\:" + smile + "\\:\\]");
		if (txt.match(re) != null)
			{ sml = ''; }
		}
	ReplaceTextSelection(sml);
	}	
}

function InsertQuote()
{
if (byid('switcher').value == 0)
	{
	var trgwin = byid('formedit').contentWindow;
	if (document.all)
		{ 
		Range = trgwin.document.selection.createRange();
		FullRange = trgwin.document.body.createTextRange();
		if (FullRange.inRange(Range) && trgwin.document.selection.type == 'Text' || trgwin.document.selection.type == 'text')
			{ Range.pasteHTML('<blockquote>'+Range.htmlText+'</blockquote>'); } 
		else
			{ alert ('Сначала выберите фрагмент текста для цитаты');	}
		}
	else
		{
	   slct = trgwin.getSelection();
   	range = slct.getRangeAt(0);
		if (range.collapsed)
			{ alert ('Сначала выберите фрагмент текста для цитаты');	}
		else
			{
		   slct = trgwin.getSelection();
		   range = slct.getRangeAt(0);
			var txt = range.toString();
			var Div = trgwin.document.createElement('Blockquote');
			var Txt = trgwin.document.createTextNode(txt);
			Div.appendChild(Txt);
			var Nb = trgwin.document.createTextNode(' ');
			ReplaceGeckoSelection(Nb);
			ReplaceGeckoSelection(Div);
			var Nb2 = trgwin.document.createTextNode(' ');
			ReplaceGeckoSelection(Nb2);
			}
		}
	document.getElementById('formedit').contentWindow.focus();
	}
else
	{
	var txt=GetSelection(); 
	if (txt != '')
		{
		re = new RegExp("^\\[Q\\](.*)\\[\\/Q\\]$");
		if (txt.match(re) != null)
			{ txt = RegExp.$1; }
		else
			{ txt = '[Q]'+txt+'[/Q]'; }
		ReplaceTextSelection(txt);
		}
	}
}

function GetFormContent()
{
var doc = document.getElementById('formedit').contentWindow.document;
return doc.body.innerHTML;
}

function GetAreaContent()
{
var doc = document.getElementById('simpleedit');
return doc.value;
}

function SetFormContent(txt)
{
var doc = document.getElementById('formedit').contentWindow.document;
doc.body.innerHTML = txt;
}

function SetAreaContent(txt)
{
var doc = document.getElementById('simpleedit');
doc.value = txt;
}

function ToFormView()
{
var EdObj = document.getElementById('formedit').contentWindow.document;
EdObj.body.innerHTML = EdObj.body.innerHTML + '';
if (!document.all)
	{ EdObj.execCommand("useCSS", false, true); }
}

function ToSimpleView()
{
var EdObj = document.getElementById('simpleedit');
EdObj.value = EdObj.value + '';
}

function SwitchView(val)
{
var sw1 = document.getElementById('switcher');
if (sw1.value != val)
	{
	if (val == 0)
		{
		var txt = CodetoHTML(GetAreaContent());
		document.getElementById('simpleedit').style.display="none";
		document.getElementById('formedit').style.display="block";
		document.getElementById('hd1').src = ImgPath + "hd1_1.gif";
		document.getElementById('hd2').src = ImgPath + "hd1_2.gif";
		SetFormContent(txt);
		setTimeout("ToFormView()",50);
		}
	else
		{
		var txt = HTMLtoCode(GetFormContent());
		document.getElementById('formedit').style.display="none";
		document.getElementById('simpleedit').style.display="block";
		document.getElementById('hd1').src = ImgPath + "hd2_1.gif";
		document.getElementById('hd2').src = ImgPath + "hd2_2.gif";
		SetAreaContent(txt);
		setTimeout("ToSimpleView()",50);
		}
	sw1.value = val;
	}
}

function InitEdit(abimgpath,aimgpath,fldvalue)
{
rExpDQ = /\&\#34\;/g;
fldvalue = fldvalue.replace(rExpDQ,'"');
if (document.all && navigator.userAgent && navigator.userAgent.indexOf("Opera")== -1)
	{ ClientTp = 1; }
else
	{ ClientTp = 2; }
BImgPath = abimgpath;
ImgPath = aimgpath;

var sw1 = byid('switcher');
sw1.value = 0;
try
	{ 
	var EdObj = document.getElementById('formedit').contentWindow.document;
	EdObj.designMode = "on";
	var trcmd = document.all?'Undo':'undo';
	EdObj.execCommand(trcmd,false,0); 
	}
catch (e)
	{ sw1.value = 1; }
if (sw1.value == 0)
	{
	EdObj.open();
	EdObj.write('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><link href="editor.css?4" type=text/css rel=stylesheet></head><body bgcolor=#FFFFFF leftmargin=5 topmargin=5 marginwidth="5" marginheight="5">');
	EdObj.write(CodetoHTML(fldvalue));
	EdObj.write('</body></html>');
	EdObj.close();
	if (!document.all) EdObj.execCommand("useCSS", false, true);
	}
else
	{ // Возможен только ввод кода
	byid('simpleedit').style.display="block";
	byid('formedit').style.display="none";
	byid('hd1').style.display="none";
	byid('hd2').style.display="none";
	HideIncompatible();
	SetAreaContent(fldvalue);
	setTimeout("ToSimpleView()",50);
	}
}

function SubmitEdit()
{
var trg = byid('trgfld');
if (byid('switcher').value == 0)
	{ trg.value = HTMLtoCode(GetFormContent()); }
else
	{ trg.value = GetAreaContent(); }
}
