//----------------------------------------------------------------------------
// Модуль:			библиотека функций для работе с html контролами MSHTML editor на клиенте
// Содержание:	
//----------------------------------------------------------------------------

var isHTMLMode=false;
var sHTMLWarning = "Пожалуйста вернитесь в режим редактирования текста";



//----------------------------------------------------------------------------
// Назначение:              обработчик события onmouseover объекта(управляющих кнопок редактора) на странице
// Возвращаемое значение:	
// Параметры:				eButton - ссылка на объект на странице
function button_over(eButton)
{
	eButton.style.backgroundColor = "#DFE8F0";
	eButton.style.borderColor = "#7A7F84";
	eButton.style.cursor= "hand";
}



//----------------------------------------------------------------------------
// Назначение:              обработчик события onmouseout объекта(управляющих кнопок редактора) на странице
// Возвращаемое значение:	
// Параметры:				eButton - ссылка на объект на странице
function button_out(eButton)
{
	eButton.style.backgroundColor = "#ffffff";
	eButton.style.borderColor = "#cAcFc4";
}



//----------------------------------------------------------------------------
// Назначение:              обработчик события onmousedown объекта(управляющих кнопок редактора) на странице
// Возвращаемое значение:	
// Параметры:				eButton - ссылка на объект на странице
function button_down(eButton)
{
	eButton.style.backgroundColor = "#ffffff";
}



//----------------------------------------------------------------------------
// Назначение:              обработчик события onmouseup объекта(управляющих кнопок редактора) на странице
// Возвращаемое значение:	
// Параметры:				eButton - ссылка на объект на странице
function button_up(eButton)
{
	eButton.style.backgroundColor = "#ffffff";
	eButton = null; 
}


	
//----------------------------------------------------------------------------
// Назначение:              выполняет указанное действие для указанного объекта
// Возвращаемое значение:	
// Параметры:				obj - объект, cmd - наименование команды, opt - параметры
function cmdExec(obj, cmd, opt) 
{
  	if (isHTMLMode){alert(sHTMLWarning);return;}
  	obj.document.execCommand(cmd,"",opt);obj.focus();
}



//----------------------------------------------------------------------------
// Назначение:              создает ссылку
// Возвращаемое значение:	
// Параметры:				obj - объект
function createLink( obj ) {
	if (isHTMLMode){alert(sHTMLWarning);return;}
	var i, curHref = 'http:\/\/';
	var oMyRange = obj.document.selection.createRange()
	if (obj.document.selection.type != "Control") {
		var isA = getEl("A",oMyRange.parentElement());
		curHref = (isA ? isA.href :"http:\/\/")
	}
	var str=showModalDialog("upload/createLink.asp","createLink","dialogWidth:540px; dialogHeight:270px" );
	if ((str!=null) && (str!="http://")) {
		if (obj.document.selection.type=="None") {
			var sel=obj.document.selection.createRange();
			sel.pasteHTML("<a href=\""+str+"\">"+str+"</A> ");
			sel.select();
		} else
		cmdExec(obj, "CreateLink",str);
	} else
	obj.focus();
}



//----------------------------------------------------------------------------
// Назначение:              определяет объект предок, для данного объекта
// Возвращаемое значение:	объект предок
// Параметры:				sTag - название тэга предка, start - объект, предка которого нужно найти
function getEl(sTag,start) {
  while ((start!=null) && (start.tagName!=sTag))
    start = start.parentElement;
  return start
}



//----------------------------------------------------------------------------
// Назначение:              вызывает интерфейс вставки рисунка с сервера
// Возвращаемое значение:	
// Параметры:				obj - объект , strDirName - имя папки, куда кладется рисунок, 
function insertImageClient( obj, strDirName )
{
	if (isHTMLMode){alert(sHTMLWarning);return;}
	window.open('upload/insertImgClient.asp?dir_name=' + strDirName + '&frame_id=' + obj,'insertImageClient','height=500,width=700,status=no,toolbar=no,menubar=no,location=no,resizable=yes,scrollbars=yes');
}



//----------------------------------------------------------------------------
// Назначение:              вызывает интерфейс вставки рисунка с рабочей станции
// Возвращаемое значение:	
// Параметры:				obj - объект , strDirName - имя папки, куда кладется рисунок, 
function insertImage( obj, strDirName )
{
	if (isHTMLMode){alert(sHTMLWarning);return;}
	window.open('upload/insertImg.asp?dir_name=' + strDirName + '&frame_id=' + obj,'insertImage','height=220,width=540,status=no,toolbar=no,menubar=no,location=no,resizable=yes,scrollbars=yes');
}

//----------------------------------------------------------------------------
// Назначение:              вызывает интерфейс загрузки документа
// Возвращаемое значение:	
// Параметры:				obj - объект , strDirName - имя папки, куда кладется документ, 
function downloadDoc( obj, strDirName )
{
	if (isHTMLMode){alert(sHTMLWarning);return;}
	window.open('upload/insertDoc.asp?dir_name=' + strDirName + '&frame_id=' + obj,'insertImage','height=220,width=540,status=no,toolbar=no,menubar=no,location=no,resizable=yes,scrollbars=yes');
}



//----------------------------------------------------------------------------
// Назначение:              вызывает интерфейс изменения цвета фонта
// Возвращаемое значение:	
// Параметры:				obj - объект
function foreColor(obj)
{
	if (isHTMLMode){alert(sHTMLWarning);return;}
	var arr = showModalDialog("include/htm/selcolor.htm","","dialogWidth:440px; dialogHeight:350px" );
	if (arr != null) cmdExec(obj,"ForeColor",arr);	
}



//----------------------------------------------------------------------------
// Назначение:              вызывает интерфейс изменения цвета фонта
// Возвращаемое значение:	
// Параметры:				obj - объект
function addTable(obj){
	if (isHTMLMode){alert(sHTMLWarning);return;}
	var arr = showModalDialog("include/htm/settable.htm","","dialogWidth:440px; dialogHeight:200px" );
	obj.document.body.innerHTML += CreateTable(arr);
}



//----------------------------------------------------------------------------
// Назначение:              вызывает интерфейс вставки таблицы
// Возвращаемое значение:	
// Параметры:				obj - объект
function addTable(obj){
	if (isHTMLMode){alert(sHTMLWarning);return;}
	var arr = showModalDialog("include/htm/settable.htm","","dialogWidth:440px; dialogHeight:200px" );
	obj.document.body.innerHTML += CreateTable(arr);
}



//----------------------------------------------------------------------------
// Назначение:              создает html код таблицы
// Возвращаемое значение:	html код таблицы
// Параметры:				arr - массив, где arr[0] - количество столбцов, arr[1] - количество строк
function CreateTable(arr)
{
	if( typeof(arr) == 'object' ){
		var s,i,j,col,row,w; 
		col=arr[0];
		row=arr[1];
		w=100/row;
		s = '<table cellpadding=4 cellspacing=0 border=1 width="100%">';
		for (i = 0 ; i < col; i++)
			{
				s = s + '<tr valign="top">';
			for(j = 0; j < row; j++)
			{
				s = s + '<td width="'+w+'%"> </td>';
			}	
			s = s + '</tr>';
		}	
		s = s + '</table>';
		return s;
	}else return ''
}



//----------------------------------------------------------------------------
// Назначение:              удаляет все тэги <font> и <span> из выделенного участка объекта idEdit
// Возвращаемое значение:	
// Параметры:				idEdit - объект в котором удаляются тэги
function cleanAfterWord( idEdit ){
    if (isHTMLMode){alert(sHTMLWarning);return;}
    idEdit.focus();
    var re, sNewStr;
    var i = 0;
	var sel = idEdit.document.selection;
	if (sel!=null) {
		var objRange = sel.createRange();
		if (objRange!=null){
			objRange.expand("word")
			var el = objRange.parentElement();
			if (el!=null){
				if (el.tagName == "SPAN" || el.tagName == "FONT"){
					sNewStr=el.outerHTML
					el.outerHTML = clean( sNewStr )
				}else{
					sNewStr=el.innerHTML
					el.innerHTML = clean( sNewStr )
				}
			}else{
				sNewStr=objRange.htmlText
				objRange.pasteHTML( clean( sNewStr ) )
			}
		}
	}
	return false
}



//----------------------------------------------------------------------------
// Назначение:              удаляет все тэги <font> и <span> из строки
// Возвращаемое значение:	измененная строка
// Параметры:				sString - строка, которую нужно изменить
function clean( sString ){
	var re
	re = new RegExp( "</?o:p>", "ig" );
	sString = sString.replace( re, "" );
	re = new RegExp( "<\\?[^>]*>", "ig" );
	sString = sString.replace( re, "" );
	re = new RegExp( "</?(span|font)[^>]*>", "ig" );
	sString = sString.replace( re, "" );
	return sString;
}



//----------------------------------------------------------------------------
// Назначение:              удаляет все тэги <font> и <span> из выделенного участка объекта idEdit
// Возвращаемое значение:	
// Параметры:				idEdit - объект в котором удаляются тэги
function cleanAfterWord2( idEdit ){
  var ver = Number(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion())
  var re, arr, sNewStr;
  var i = 0;
  var sString = "";
  var sAllCode = idEdit.document.body.innerHTML
  if (ver >= 5.5){
	var sel = idEdit.document.selection;
	if (sel!=null) {
		var objRange = sel.createRange();
		if (objRange!=null){
			objRange.execCommand( 'FontSize', "", 2 )
			objRange.execCommand( 'FontName', "", "Verdana" )
			objRange.execCommand( 'ForeColor', "", "black" )
			sNewStr=objRange.htmlText
			re = new RegExp( "</?o:p>", "ig" );
			sNewStr = sNewStr.replace( re, "" );
			re = new RegExp( "<\\?[^>]*>", "ig" );
			sNewStr = sNewStr.replace( re, "" );
			re = new RegExp( "</?(span|font)[^>]*>", "ig" );
			sNewStr = sNewStr.replace( re, "" );
			objRange.pasteHTML( sNewStr )
		}
	}
  }
  else{
	alert("You need a newer version of JScript for this to work");
  }
  return false
}



