function RichEdit(name, width, height, skinName, editMode, defaultFontName, defaultFontSize)
{
	// 각 컨트롤 ID 설정
	this.setControlID(name.replace('.','_')); // name에 '.' 이 포함된 경우 '_' 로 치환하여 내부에서 사용한다.
//	this.setControlID(name);


	// 현재 생성된 객체의 내부 포인터 설정
	eval("window."+this.objectID+" = this;");

	// 필수등록정보#################################################################################################################
	this.appPath					= '/js/richapp'; 					// 설치 환경에 맞게 수정하여 주십시오.
	this.imgFileActionPath			= 'file.do?method=uploadImageFile';		// 이미지파일 업로드 액션 주소
	this.imgFileExt					= 'gif,bmp,jpg,jpeg,png';								// 업로드 가능 이미지 파일 확장자
	this.imgFileMaxSize				= '5242880';											// 업로드 가능 최대 파일 크기(byte)
	this.imgFileFileUploadOnCompleteFuncName	= this.objectID+'.imgFileUploadOnComplete';	// 업로드 완료 Call Back Function 이름
	this.imgFileFileOnSelectFuncName			= this.objectID+'.imgFileOnSelect';			// 파일 선택 Call Back Function 이름
	// ###########################################################################################################################

	// 현재 브라우저를 구분한다.
	this.browserType = 0;
	if (document.getSelection)		this.browserType = 2; // FF
	else if (document.selection)	this.browserType = 1; // IE
	else if (window.getSelection)	this.browserType = 3; // CHROME or OPERA
	else							this.browserType = 0; // unknown


	// 현재 브라우저가 IE인지 판단한다. (유용히 쓰임)
	this.isIE = (this.browserType == 1);
//	this.isIE = (document.all)?true:false;

	// 참조 요소 설정(TEXTAREA) : 참조요소 오류시 프로그램 종료
	this.contEdit = document.getElementsByName(name);
	if(this.contEdit.length == 1)
	{
		this.contEdit = this.contEdit[0];
	} else {
		if(this.contEdit.length > 1)	alert('참조 요소가 유일하지 않습니다.');
		else							alert('참조 요소가 존재하지 않습니다.');
		return;
	}

	// 기본입력정보
	this.name				= name;
	this.defaultFontName	= (defaultFontName 	!= null)	?	defaultFontName		:		'굴림';
	this.defaultFontSize	= ((defaultFontSize	!= null)	?	defaultFontSize		:		'10')+'pt';
	this.skinName			= (skinName			!= null)	?	skinName			:		'default';
	this.editMode			= (editMode			!= null)	?	editMode			:		true;
	this.width				= (width			!= null)	?	width				:		this.contEdit.offsetWidth;
	this.height				= (height			!= null)	?	height				:		this.contEdit.offsetHeight;
	this.defaultMode		= 'htmlEdit';

	// 참조 요소를 화면에서 감춘다.
	this.contEdit.style.display = 'none';

	// 스킨 위치 설정
	this.skinFolderPath		= this.appPath+'/skin/'+this.skinName;

	this.defaultSource	= "";

	// htmlEdit htmlView 기본 태그 설정

	this.defaultSource	 = "<style>													";
	this.defaultSource	+= "BODY													";
	this.defaultSource	+= "{														";
	this.defaultSource	+= "    padding:5 5 5 5;									";
	this.defaultSource	+= "    font-family:"+this.defaultFontName+";				";
	this.defaultSource	+= "    font-size:"+this.defaultFontSize+";					";
	this.defaultSource	+= "    margin:0 0 0 0;										";
	this.defaultSource	+= "    scrollbar-face-color:#FFFFFF;						";
	this.defaultSource	+= "    scrollbar-highlight-color:#DADADA;					";
	this.defaultSource	+= "    scrollbar-3dlight-color:#FFFFFF;					";
	this.defaultSource	+= "    scrollbar-shadow-color:#DADADA;						";
	this.defaultSource	+= "    scrollbar-darkshadow-color:#FFFFFF;					";
	this.defaultSource	+= "    scrollbar-track-color:#F5F5F5;						";
	this.defaultSource	+= "    scrollbar-arrow-color:#000000;						";
	this.defaultSource	+= "    background-color:transparent;						";
	this.defaultSource	+= "}														";
	this.defaultSource	+= "</style>												";

	this.defaultSource	+= "<link rel='stylesheet' type='text/css' href='common/user/css/import.css'/>";

	var displayTag = null;
	// 수정모드 / 열람모드
	if(this.editMode)
	{
		// 환경설정정보
		this.mode				= null;
		this.historyLength		= 0;
		this.historyIndex		= -1;
		this.history			= new Array();
		this.lastSelection		= null;
		this.colorVisualTarget	= null;
		this.colorTextTarget	= null;
		this.colorPallet		= [	"FF0000","FFFF00","00FF00","00FFFF","0000FF","FF00FF","FFFFFF","E6E6E6","DADADA","CDCDCD","C1C1C1","B4B4B4","A7A7A7","9A9A9A","8E8E8E","818181",
									"ED1C24","FFF200","00A651","00AEEF","2E3192","EC008C","737373","666666","595959","4B4B4B","3D3D3D","303030","212121","131313","0A0A0A","000000",
									"F69679","F9AD81","FDC689","FFF799","C4DF9B","A3D39C","82CA9C","7ACCC8","6DCFF6","7DA7D9","8393CA","8781BD","A186BE","BD8CBF","F49AC1","F5989D",
									"F26C4F","F68E56","FBAF5D","FFF568","ACD373","7CC576","3CB878","1CBBB4","00BFF3","448CCB","5674B9","605CA8","8560A8","A864A8","F06EAA","F26D7D",
									"ED1C24","F26522","F7941D","FFF200","8DC63F","39B54A","00A651","00A99D","00AEEF","0072BC","0054A6","2E3192","662D91","92278F","EC008C","ED145B",
									"9E0B0E","A0410D","A36209","ABA000","598527","197B30","007236","00746B","0076A3","004A80","003471","1B1464","440E62","630460","9E005D","9E0039",
									"790000","7B2E00","7D4900","827B00","406618","005E20","005826","005952","005B7F","003663","002157","0D004C","32004B","4B0049","7B0046","7A0026",
									"C7B29A","998675","736357","534741","362F2D","C69C6D","A67C52","8C6239","754C24","603913","000000","000000","000000","000000","000000","000000"	];

		// 이미지 파일 첨부용 플렉스 프로그램 환경 설정
		var flashVars = "formEmbedMode=false&uploadPath="+this.imgFileActionPath+"&fileMaxSize="+this.imgFileMaxSize+"&fileFilter="+this.imgFileExt+"&paramName=fileForm&fileOnSelect="+this.imgFileFileOnSelectFuncName+"&fileUploadOnComplete="+this.imgFileFileUploadOnCompleteFuncName;

		// 이미지 파일 첨부용  플렉스 프로그램 로드

		if(this.isIE)
		{
			this.uploadSource	 = "<object id='"+this.imgFileID+"' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' width='200' height='43' codebase='http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab'>	";
			this.uploadSource	+= " <param name='movie' value='"+this.appPath+"/SimpleRichUpload.swf' />																															";
			this.uploadSource	+= " <param name='quality' value='high' />																																							";
			this.uploadSource	+= " <param name='bgcolor' value='transparent' />																																					";
			this.uploadSource	+= " <param name='allowScriptAccess' value='always' />																																				";
			this.uploadSource	+= " <param name='flashvars' value='"+flashVars+"' />																																				";
			this.uploadSource	+= " <embed src='"+this.appPath+"/SimpleRichUpload.swf'																																				";
			this.uploadSource	+= "        quality='high' bgcolor='transparent'																																					";
			this.uploadSource	+= "        width='200' height='43' align='middle'																																					";
			this.uploadSource	+= "        play='true' loop='false' allowScriptAccess='always'																																		";
			this.uploadSource	+= "        type='application/x-shockwave-flash' pluginspage='http://www.adobe.com/go/getflashplayer'																								";
			this.uploadSource	+= "        flashvars='"+flashVars+"'></embed>																																						";
			this.uploadSource	+= "</object>																																														";
		} else {
			this.uploadSource	+= "<embed id='"+this.imgFileID+"' src='"+this.appPath+"/SimpleRichUpload.swf'																														";
			this.uploadSource	+= "       quality='high' bgcolor='transparent'																																						";
			this.uploadSource	+= "       width='200' height='43' align='middle'																																					";
			this.uploadSource	+= "       play='true' loop='false' allowScriptAccess='always'																																		";
			this.uploadSource	+= "       type='application/x-shockwave-flash' pluginspage='http://www.adobe.com/go/getflashplayer'																								";
			this.uploadSource	+= "       flashvars='"+flashVars+"'></embed>																																						";
		}

		// 수정 모드
		displayTag = this.getRichEditHTML();
	} else {
		// RichView에서 사용할 Iframe Resize용 스크립트 로드 태그 설정
		this.resizeSource	= "<script language='javascript' src='"+this.appPath+"/IframeResize.js'></script>";

		// 열람 모드
		displayTag = this.getRichViewHTML();
	}

	this.initFunc = new Function(this.objectID+".initApp();");

	// 화면 구성
	document.write(displayTag);

	if(this.isIE)	window.attachEvent("onload", this.initFunc);
	else			window.addEventListener("load", this.initFunc, false);

	return this;
}
RichEdit.prototype.initApp = function()
{
	// 생성된 컨트롤을 클래스 멤버 프로퍼티로 설정한다.
	this.setControl();

	// RichEdit 모드인 경우 와 RichView 모드인 경우에 따른 초기화 설정
	if(this.editMode)
	{
		// htmlEdit 영역을 디자인모드로 변환 (IE 7.0 지원 및 FF 지원)
		if(this.htmlEdit.contentWindow.document.contentEditable)	this.htmlEdit.contentWindow.document.contentEditable	= true;
		else														this.htmlEdit.contentWindow.document.designMode			= "On";

		// htmlEdit htmlView IFrame 환경 설정
		this.resetIframe(this.htmlEdit, this.contEdit.value);
		this.resetIframe(this.htmlView, this.contEdit.value);

		// 이벤트 대리자 설정
		this.setEventListener();

		// TopLayout의 높이를 저장한다.(textEdit모드와 htmlView모드에서 전체 높이값 보정용으로 사용)
		this.topLayoutHeight = this.topLayout.offsetHeight;

		// 초기 모드 설정
		this.setMode(this.defaultMode);
	} else {
		// htmlView IFrame 환경 설정
		this.resetIframe(this.htmlView, this.resizeSource + this.contEdit.value + ' ');
	}
}
RichEdit.prototype.doCommand = function(cmd, value)
{
	// 현재 모드가 htmlEdit 상태가 아니라면 요청된 작업을 수행하지 않고 종료한다.
	if(this.mode != 'htmlEdit') return;

	// IFRAME에 포커스를 둔다.
	this.htmlEdit.contentWindow.focus();

	// 저장된 선택영역이 존재한다면 해당 영역을 복구한다.
	if(this.lastSelection)
	{
		this.restoreSelection();
		this.lastSelection = null;
	}

	// 선택 영역을 가져온다.
	var rng	= this.getSelection();

	// execCommand 명령 실행여부(default:true)
	var exe	= true;

	// UserInterface 표시 여부(default:false)
	var ui	= false;

	// 입력된 명령어에 따라 분기한다.
	switch(cmd)
	{
/* *색상************************************************************************************************* */
		case "ForeColor":
		break;
		case "BackColor":
			// FF의 경우 배경색 지정 명령어가 HiliteColor 임
			cmd = (this.isIE)?"BackColor":"HiliteColor";
		break;
/* *글씨체************************************************************************************************ */
		case "FontName":
			// 글씨체가 지정되어있지 않은 경우 종료
		    if(!value || value == '') return;
		break;
/* *글씨크기********************************************************************************************** */
		case "FontSize":
			// 글씨크기가 지정되어있지 않은 경우 종료
		    if(!value || value == '') return;
		break;
/* *강조************************************************************************************************* */
		case "Bold":
		break;
/* *이탤릭*********************************************************************************************** */
		case "Italic":
		break;
/* *밑줄************************************************************************************************* */
		case "Underline":
		break;
/* *취소선*********************************************************************************************** */
		case "StrikeThrough":
		break;
/* *첨자************************************************************************************************* */
		case "Subscript":
		break;
/* *윗첨자*********************************************************************************************** */
		case "Superscript":
		break;
/* *수평선*********************************************************************************************** */
		case "InsertHorizontalRule":
		break;
/* *복사************************************************************************************************* */
		case "Copy":
		break;
/* *잘라내기********************************************************************************************** */
		case "Cut":
		break;
/* *붙여넣기********************************************************************************************** */
		case "Paste":
		break;
/* *삭제************************************************************************************************* */
		case "Delete":
		break;
/* *정렬왼쪽********************************************************************************************** */
		case "JustifyLeft":
		break;
/* *정렬오른쪽******************************************************************************************** */
		case "JustifyCenter":
		break;
/* *정렬가운데******************************************************************************************** */
		case "JustifyRight":
		break;
/* *들여쓰기********************************************************************************************** */
		case "Indent":
		break;
/* *내어쓰기********************************************************************************************** */
		case "Outdent":
		break;
/* *번호매기기******************************************************************************************** */
		case "InsertOrderedList":
		break;
/* *글머리기호******************************************************************************************** */
		case "InsertUnOrderedList":
		break;
/* *이미지삽입******************************************************************************************** */
		case "InsertImage":
			var imgHTML = "";
			imgHTML += "<img src='"+this.imgUrl.value+"' title='"+this.imgDesc.value+"' border='0'>\n";
			this.doCommand('InsertHTML', imgHTML);
			exe = false;
		break;
/* *하이퍼링크******************************************************************************************** */
		case "CreateLink":
			var targetText = (rng.htmlText)?rng.htmlText:(rng)?rng:rng.getRangeAt(0);
			var linkHTML = "";
			linkHTML += "<a href='"+this.linkUrl.value+"' title='"+this.linkDesc.value+"' target='"+this.linkTarget.value+"'>"+targetText+"</a>\n";
			this.doCommand('InsertHTML', linkHTML);
			exe = false;
		break;
/* *하이퍼링크삭제***************************************************************************************** */
		case "UnLink":
		break;
/* *테이블생성******************************************************************************************** */
		case "CreateTable":
			var totalWidth = parseInt(this.tableWidth.value) * parseInt(this.tableCol.value);
			var tableHTML = "";
			tableHTML += "<table border='0' width='"+totalWidth+"' cellspacing='"+this.tableThick.value+"' cellpadding='0' bgcolor='"+this.tableLineColor.value+"'>\n";
			for(var i=0;i<this.tableRow.value;++i)
			{
				tableHTML += "<tr>\n";
				for(var j=0;j<this.tableCol.value;++j)
				{
					tableHTML += "<td width='"+this.tableWidth.value+"' bgcolor='"+this.tableBackColor.value+"'>&nbsp;</td>\n";
				}
				tableHTML += "</tr>\n";
			}
			tableHTML += "</table>\n";
			this.doCommand('InsertHTML', tableHTML);
			exe = false;
		break;
/* *취소************************************************************************************************* */
		case "Undo":
			if(this.historyIndex > 0)
			{
				this.contEdit.value = this.history[--this.historyIndex];
				this.setControlContent(this.mode);
			}
			exe = false;
		break;
/* *재실행*********************************************************************************************** */
		case "Redo":
			if(this.historyIndex < this.historyLength-1)
			{
				this.contEdit.value = this.history[++this.historyIndex];
				this.setControlContent(this.mode);
			}
			exe = false;
		break;
/* *태그입력********************************************************************************************* */
		case "InsertHTML":
			// IE의 경우 execCommand 명령으로 HTML을 추가하지 않고 pasteHTML 함수를 이용함
			if(this.isIE)
			{
				exe = false; // execCommand 명령을 실행하지 않게함.
				rng.pasteHTML(value);
			}
		break;
/* *알수없는 명령어*************************************************************************************** */
		default:
			exe = false; // execCommand 명령을 실행하지 않게함.
		break;
	}
	// execCommand 를 실행하여 htmlEdit에 변경사항을 적용한다.
	if(exe) this.htmlEdit.contentWindow.document.execCommand(cmd, ui, value);

	// 바뀐내용을 contEdit에 적용한다.
	this.update('htmlEdit');
}
RichEdit.prototype.doImgPreview = function()
{
	if(this.imgUrl.value.length < 1) return;
	this.imgPreview.src = this.imgUrl.value;
	this.imgPreview.width = "100"; // 고정 크기 (높이는 비율에 따라 줄어듬)
}
RichEdit.prototype.showColorLayer = function(obj, textTarget, visualTarget)
{
	this.colorVisualTarget	= visualTarget;
	this.colorTextTarget	= textTarget;
	this.callBackFuncName	= 'callTableColor';
	var layer = this.colorLayer;

	// obj의 height가 없을 경우 obj.style의 height를 입력한다(style.height는 단위가 포함된 문자이기 때문에 해당 문자를 제거함)
	var objHeight = (obj.height)?obj.height:obj.style.height.replace('px','');

	// 레이어가 표시될 위치를 지정함
	//var layerNewTop		= this.getTopPos(obj, parseInt(objHeight)+3);
	//var layerNewLeft	= this.getLeftPos(obj);
	var layerNewTop		= this.getTopPos(obj, parseInt(objHeight)+3) - this.getTopPos(this.totalLayout);
	var layerNewLeft	= this.getLeftPos(obj) - this.getLeftPos(this.totalLayout);

	// 레이어의 시작위치가 RichEdit의 우측경계를 벗어나면, 벗어나지 않게 시작위치를 재조정함
	if(layerNewLeft + layer.offsetWidth >= this.htmlEdit.offsetLeft + this.htmlEdit.offsetWidth)
	{
		layerNewLeft = this.htmlEdit.offsetLeft + this.htmlEdit.offsetWidth - layer.offsetWidth;
	}
	layer.style.left		= layerNewLeft + 'px';
	layer.style.top			= layerNewTop  + 'px';
	layer.style.visibility	= "visible";
}
RichEdit.prototype.hideColorLayer = function()
{
	this.colorLayer.style.visibility = "hidden";
}
RichEdit.prototype.doColorPreview = function(color)
{
	if(color.replace('#','').length != 6) return;
	this.colorCode.value = color.toUpperCase();
	this.colorPreview.style.backgroundColor = color;
}
RichEdit.prototype.doColorPick = function()
{
	this.hideColorLayer();
	var callBackFunc = eval(this.objectID+"."+this.callBackFuncName);
	// callBack 함수에게 현재 객체를 보내 준다.(callBack함수 내에서 this객체는 현재의 this객체가 아니기 때문)
	callBackFunc(this);
}
RichEdit.prototype.callTableColor = function(obj)
{
	obj.hideColorLayer();
	if(obj.colorVisualTarget	!= null) obj.colorVisualTarget.style.backgroundColor	= obj.colorCode.value.toUpperCase();
	if(obj.colorTextTarget		!= null) obj.colorTextTarget.value						= obj.colorCode.value.toUpperCase();
}
RichEdit.prototype.callForeColor = function(obj)
{
	obj.doCommand('ForeColor', "#"+obj.colorCode.value);
}
RichEdit.prototype.callBackColor = function(obj)
{
	obj.doCommand('BackColor', "#"+obj.colorCode.value);
}
RichEdit.prototype.doHoverTable = function(row, col)
{
	for(var i=0;i<this.tableGrid.rows.length;++i)
	{
		for(var j=0;j<this.tableGrid.rows[i].cells.length;++j)
		{
			this.tableGrid.rows[i].cells[j].style.backgroundColor = (i<row && j<col)?'#E3F7FB':'#FFFFFF';
		}
	}
}
RichEdit.prototype.doClickTable = function(row, col)
{
	this.tableRow.value = row;
	this.tableCol.value = col;
}
RichEdit.prototype.getLeftPos = function(obj, left)
{
	left = ((left)?left:0) + obj.offsetLeft;
    var parent	= obj.offsetParent;
    if(parent)	return this.getLeftPos(parent, left);
    else		return left;
}
RichEdit.prototype.getTopPos = function (obj, top)
{
	top = ((top)?top:0) + obj.offsetTop;
    var parent	= obj.offsetParent;
	if(parent)	return this.getTopPos(parent, top);
    else		return top;
}
RichEdit.prototype.toggleLayer = function(layerID, obj, callBackFuncName)
{
	// 요청된 레이어 객체를 찾아 layer에 저장한다.
	var layer = document.getElementById(layerID);
	// 현재 요청된 레이어의 화면 표시상태를 저장한다.
	var visible = (layer.style.visibility != "visible");
	// 툴바를 초기화 한다. (모든 레이어 hidden 작업 포함)
	this.updateToolbar();

	// 레이어를 화면에 표시해야한다면
	if(visible)
	{
		// 현재 편집기의 선택영역을 저장한다.
		this.saveSelection();

		// callBackFunc을 지정하여 준다.
		this.callBackFuncName = callBackFuncName;

		// obj의 height가 없을 경우 obj.style의 height를 입력한다(style.height는 단위가 포함된 문자이기 때문에 해당 문자를 제거함)
		var objHeight = (obj.height)?obj.height:obj.style.height.replace('px','');

		// 레이어가 표시될 위치를 지정함
		//var layerNewTop		= this.getTopPos(obj, parseInt(objHeight)+3);
		//var layerNewLeft	= this.getLeftPos(obj);

		var layerNewTop		= this.getTopPos(obj, parseInt(objHeight)+3) - this.getTopPos(this.totalLayout);
		var layerNewLeft	= this.getLeftPos(obj) - this.getLeftPos(this.totalLayout);

		// 레이어의 시작위치가 RichEdit의 우측경계를 벗어나면, 벗어나지 않게 시작위치를 재조정함
		if(layerNewLeft + layer.offsetWidth >= this.htmlEdit.offsetLeft + this.htmlEdit.offsetWidth)
		{
			layerNewLeft = this.htmlEdit.offsetLeft + this.htmlEdit.offsetWidth - layer.offsetWidth;
		}
		layer.style.left		= layerNewLeft + 'px';
		layer.style.top			= layerNewTop  + 'px';
		layer.style.visibility	= "visible";
	}
}
RichEdit.prototype.updateHistory = function()
{
	// 최근 저장된 입력내용(히스토리)과 현재 입력내용이 다르면 히스토리를 추가한다.
	if(this.contEdit.value != this.history[this.historyIndex])
	{
		this.history[++this.historyIndex] = this.contEdit.value;
		// 현재 인덱스 이후의 히스토리는 삭제한다.(가비지 콜렉션)
		for(var i=this.historyIndex+1;i<=this.historyLength;++i)
		{
			delete this.history[i];
		}
		this.historyLength = this.historyIndex+1;
	}
}
RichEdit.prototype.updateToolbar = function()
{
	// 화면에 표시중인 레이어 감춤
	this.fontNameLayer.style.visibility	= "hidden";
	this.fontSizeLayer.style.visibility	= "hidden";
	this.imgLayer.style.visibility		= "hidden";
	this.linkLayer.style.visibility		= "hidden";
	this.tableLayer.style.visibility	= "hidden";
	this.colorLayer.style.visibility	= "hidden";
	this.infoLayer.style.visibility		= "hidden";

	// 레이어 관련 필드 초기화
	this.linkUrl.value									= '';
	this.linkDesc.value									= '';
	this.imgUrl.value									= '';
	this.imgDesc.value									= '';
	this.imgPreview.src									= this.skinFolderPath+'/img.gif';
	this.tableWidth.value								= '100';
	this.tableRow.value									= '1';
	this.tableCol.value									= '1';
	this.tableThick.value								= '1';
	this.tableBackColor.value							= 'FFFFFF';
	this.tableBackColorPreview.style.backgroundColor	= 'FFFFFF';
	this.tableLineColor.value							= '000000';
	this.tableLineColorPreview.style.backgroundColor	= '000000';
	this.colorCode.value								= 'FFFFFF';
	this.colorPreview.style.backgroundColor				= 'FFFFFF';
	this.colorVisualTarget								= null;
	this.colorTextTarget								= null;
	this.callBackFuncName								= null;

	// 현재 위치의 글씨체 및 글씨크기 표시(현재 모드가 htmlEdit인 경우에만)
	if(this.mode == 'htmlEdit')
	{
		var fontName = this.htmlEdit.contentWindow.document.queryCommandValue('FontName');
		var fontSize = this.htmlEdit.contentWindow.document.queryCommandValue('FontSize');

		switch(parseInt(fontSize))
		{
			case 1:
				fontSize = "8pt";
			break;
			case 2:
				fontSize = "10pt";
			break;
			case 3:
				fontSize = "12pt";
			break;
			case 4:
				fontSize = "14pt";
			break;
			case 5:
				fontSize = "20pt";
			break;
			case 6:
				fontSize = "24pt";
			break;
			case 7:
				fontSize = "36pt";
			break;
		}
		this.fontName.innerHTML = (fontName != null)?fontName:'글씨체';
		this.fontSize.innerHTML = (fontSize != null)?fontSize:'크기';
		this.fontName.title = this.fontName.innerHTML;
		this.fontSize.title = this.fontSize.innerHTML;
	}
}
RichEdit.prototype.update = function(mode)
{
	switch(mode)
	{
		case 'htmlEdit':
//			this.isHotKey('htmlEdit');
			this.contEdit.value = this.htmlEdit.contentWindow.document.body.innerHTML;
		break;
		case 'textEdit':
			this.contEdit.value = this.textEdit.value;
		break;
	}
	this.updateToolbar();
	this.updateHistory();
}
RichEdit.prototype.clearContent = function()
{
	this.contEdit.value = '';
	this.setControlContent(this.mode);
	this.update(this.mode);
}
RichEdit.prototype.pasteContent = function(sourceHTML)
{
	this.contEdit.value += sourceHTML;
	this.setControlContent(this.mode);
	this.update(this.mode);
}
RichEdit.prototype.getContent = function()
{
	return this.contEdit.value;
}
RichEdit.prototype.setContent = function(sourceHTML)
{
	this.contEdit.value = sourceHTML;
	this.setControlContent(this.mode);
	this.update(this.mode);
}
RichEdit.prototype.getRichViewHTML = function()
{
	var retString = "";

	retString += "<iframe name='"+this.htmlViewID+"' title='컨텐츠 내용' id='"+this.htmlViewID+"' style='width:"+this.width+";height:"+this.height+";overflow-x:hidden;' scrolling='no' frameborder='0' allowTransparency = 'true'></iframe>";

	return retString;
}
RichEdit.prototype.getRichEditHTML = function()
{
	var retString = "";

	retString += "<link href='"+this.skinFolderPath+"/richedit.css' rel='stylesheet' type='text/css'/>																																																";
	retString += "<div id='"+this.totalLayoutID+"' class='richeditor_total richeditor_text' style='width:"+this.width+"px;'>																																																";
	retString += " <div id='"+this.topLayoutID+"' class='richeditor_top"+((this.isIE)?'IE':'FF')+"'>																																																										";
	retString += "  <div class='richeditor_topbar'>																																																															";
	retString += "   <div class='richeditor_topbarleft'></div>																																																													";
	retString += "   <div class='richeditor_topbarright'></div>																																																												";
	retString += "  </div>																																																																			";
/* 툴바 **************************************************************************************************************************************************************************************************************************************************************************************************/
	retString += "  <div class='richeditor_toolbar"+((this.isIE)?'IE':'FF')+"'>																																																								";
	retString += "   <div class='richeditor_btn richeditor_fontname' onClick='"+this.objectID+".toggleLayer(\""+this.fontNameLayerID+"\", this, null)' style='height:18px'><div id='"+this.fontNameID+"' class='richeditor_fontname_bg'>글씨체</div><div class='richeditor_arrow'><img src='"+this.skinFolderPath+"/arrow.gif'></div></div>		";
	retString += "   <div class='richeditor_btn richeditor_fontsize' onClick='"+this.objectID+".toggleLayer(\""+this.fontSizeLayerID+"\", this, null)' style='height:18px'><div id='"+this.fontSizeID+"' class='richeditor_fontsize_bg'>크기</div><div class='richeditor_arrow'><img src='"+this.skinFolderPath+"/arrow.gif'></div></div>		";
	retString += "   <div class='richeditor_btn richeditor_undo'					><img title='입력취소'			onClick='"+this.objectID+".doCommand(\"Undo\", null)'							src='"+this.skinFolderPath+"/undo.gif'></div>																				";
	retString += "   <div class='richeditor_btn richeditor_redo'					><img title='입력다시실행'		onClick='"+this.objectID+".doCommand(\"Redo\", null)'							src='"+this.skinFolderPath+"/redo.gif'></div>																				";
	retString += "   <div class='richeditor_btn richeditor_copy'					><img title='복사'				onClick='"+this.objectID+".doCommand(\"Copy\", null)'							src='"+this.skinFolderPath+"/copy.gif'></div>																				";
	retString += "   <div class='richeditor_btn richeditor_cut'					><img title='잘라내기'			onClick='"+this.objectID+".doCommand(\"Cut\", null)'							src='"+this.skinFolderPath+"/cut.gif'></div>																				";
	retString += "   <div class='richeditor_btn richeditor_paste'					><img title='붙여넣기'			onClick='"+this.objectID+".doCommand(\"Paste\", null)'							src='"+this.skinFolderPath+"/paste.gif'></div>																				";
	retString += "   <div class='richeditor_btn richeditor_delete'				><img title='삭제'				onClick='"+this.objectID+".doCommand(\"Delete\", null)'							src='"+this.skinFolderPath+"/delete.gif'></div>																				";
	retString += "   <div class='richeditor_bar'						><img title=''					onClick=''																		src='"+this.skinFolderPath+"/bar.gif'></div>																				";
	retString += "   <div class='richeditor_btn richeditor_bold'					><img title='강조'				onClick='"+this.objectID+".doCommand(\"Bold\", null)'							src='"+this.skinFolderPath+"/bold.gif'></div>																				";
	retString += "   <div class='richeditor_btn richeditor_italic'				><img title='이탤릭'			onClick='"+this.objectID+".doCommand(\"Italic\", null)'							src='"+this.skinFolderPath+"/italic.gif'></div>																				";
	retString += "   <div class='richeditor_btn richeditor_underline'				><img title='밑줄'				onClick='"+this.objectID+".doCommand(\"Underline\", null)'						src='"+this.skinFolderPath+"/underline.gif'></div>																			";
	retString += "   <div class='richeditor_btn richeditor_strikethrough'			><img title='취소선'			onClick='"+this.objectID+".doCommand(\"StrikeThrough\", null)'					src='"+this.skinFolderPath+"/strikethrough.gif'></div>																		";
	retString += "   <div class='richeditor_btn richeditor_forecolor'				><img title='텍스트색상'		onClick='"+this.objectID+".toggleLayer(\""+this.colorLayerID+"\", this, \"callForeColor\")'	src='"+this.skinFolderPath+"/forecolor.gif'></div>																";
	retString += "   <div class='richeditor_btn richeditor_backcolor'				><img title='배경색상'			onClick='"+this.objectID+".toggleLayer(\""+this.colorLayerID+"\", this, \"callBackColor\")'	src='"+this.skinFolderPath+"/backcolor.gif'></div>																";
	retString += "   <div class='richeditor_bar'						><img title=''					onClick=''																		src='"+this.skinFolderPath+"/bar.gif'></div>																				";
	retString += "   <div class='richeditor_btn richeditor_subscript'				><img title='밑첨자'			onClick='"+this.objectID+".doCommand(\"Subscript\", null)'						src='"+this.skinFolderPath+"/subscript.gif'></div>																			";
	retString += "   <div class='richeditor_btn richeditor_superscript'			><img title='윗첨자'			onClick='"+this.objectID+".doCommand(\"Superscript\", null)'					src='"+this.skinFolderPath+"/superscript.gif'></div>																		";
	retString += "   <div class='richeditor_bar'						><img title=''					onClick=''																		src='"+this.skinFolderPath+"/bar.gif'></div>																				";
	retString += "   <div class='richeditor_btn richeditor_justifyleft'			><img title='왼쪽정렬'			onClick='"+this.objectID+".doCommand(\"JustifyLeft\", null)'					src='"+this.skinFolderPath+"/justifyleft.gif'></div>																		";
	retString += "   <div class='richeditor_btn richeditor_justifycenter'			><img title='가운데정렬'		onClick='"+this.objectID+".doCommand(\"JustifyCenter\", null)'					src='"+this.skinFolderPath+"/justifycenter.gif'></div>																		";
	retString += "   <div class='richeditor_btn richeditor_justifyright'			><img title='오른쪽정렬'		onClick='"+this.objectID+".doCommand(\"JustifyRight\", null)'					src='"+this.skinFolderPath+"/justifyright.gif'></div>																		";
	retString += "   <div class='richeditor_btn richeditor_outdent'				><img title='내어쓰기'			onClick='"+this.objectID+".doCommand(\"Outdent\", null)'						src='"+this.skinFolderPath+"/outdent.gif'></div>																			";
	retString += "   <div class='richeditor_btn richeditor_indent'				><img title='들여쓰기'			onClick='"+this.objectID+".doCommand(\"Indent\", null)'							src='"+this.skinFolderPath+"/indent.gif'></div>																				";
	retString += "   <div class='richeditor_bar'						><img title=''					onClick=''																		src='"+this.skinFolderPath+"/bar.gif'></div>																				";
	retString += "   <div class='richeditor_btn richeditor_insertorderedlist'		><img title='번호매기기'		onClick='"+this.objectID+".doCommand(\"InsertOrderedList\", null)'				src='"+this.skinFolderPath+"/insertorderedlist.gif'></div>																	";
	retString += "   <div class='richeditor_btn richeditor_insertunorderedlist'	><img title='글머리기호'		onClick='"+this.objectID+".doCommand(\"InsertUnOrderedList\", null)'			src='"+this.skinFolderPath+"/insertunorderedlist.gif'></div>																";
	retString += "   <div class='richeditor_bar'						><img title=''					onClick=''																		src='"+this.skinFolderPath+"/bar.gif'></div>																				";
	retString += "   <div class='richeditor_btn richeditor_table'					><img title='표그리기'			onClick='"+this.objectID+".toggleLayer(\""+this.tableLayerID+"\", this, null)'	src='"+this.skinFolderPath+"/table.gif'></div>																				";
	retString += "   <div class='richeditor_btn richeditor_inserthorizontalrule'	><img title='수평선'			onClick='"+this.objectID+".doCommand(\"InsertHorizontalRule\", null)'			src='"+this.skinFolderPath+"/inserthorizontalrule.gif'></div>																";
	retString += "   <div class='richeditor_btn richeditor_insertimage'			><img title='이미지삽입'		onClick='"+this.objectID+".toggleLayer(\""+this.imgLayerID+"\", this, null)'	src='"+this.skinFolderPath+"/insertimage.gif'></div>																		";
	retString += "   <div class='richeditor_btn richeditor_createlink'			><img title='하이퍼링크'		onClick='"+this.objectID+".toggleLayer(\""+this.linkLayerID+"\", this, null)'	src='"+this.skinFolderPath+"/createlink.gif'></div>																			";
	retString += "   <div class='richeditor_btn richeditor_unlink'				><img title='하이퍼링크삭제'	onClick='"+this.objectID+".doCommand(\"UnLink\", null)'							src='"+this.skinFolderPath+"/unlink.gif'></div>																				";
	retString += "   <div class='richeditor_bar'						><img title=''					onClick=''																		src='"+this.skinFolderPath+"/bar.gif'></div>																				";
	retString += "   <div class='richeditor_btn richeditor_information'			><img title='대하여'			onClick='"+this.objectID+".toggleLayer(\""+this.infoLayerID+"\", this, null)'	src='"+this.skinFolderPath+"/information.gif'></div>																		";
	retString += "  </div>																																																																			";
	retString += " </div>																																																																			";
/* 에디터화면 **************************************************************************************************************************************************************************************************************************************************************************************************/
	retString += " <div id='"+this.contentLayoutID+"'	style='height:"+this.height+"px' class='richeditor_content"+((this.isIE)?'IE':'FF')+"'>																																									";
	retString += "  <iframe id='"+this.htmlEditID+"'	class='richeditor_htmledit' scrolling='yes' frameborder='0'></iframe>																																													";
	retString += "  <textarea id='"+this.textEditID+"'	class='richeditor_textedit' scrolling='yes'></textarea>																																																";
	retString += "  <iframe id='"+this.htmlViewID+"'	class='richeditor_htmlview' scrolling='yes' frameborder='0'></iframe>																																													";
	retString += " </div>																																																																			";
/* 모드탭 *****************************************************************************************************************************************************************************************************************************************************************************************************/
	retString += " <div id='"+this.bottomLayoutID+"' class='richeditor_bottom'>																																																								";
	retString += "  <div class='richeditor_tabbtn'><img id='"+this.htmlEditButtonID+"' onClick='"+this.objectID+".setMode(\"htmlEdit\")'	src='"+this.skinFolderPath+"/tab1.gif'></div>																														";
	retString += "  <div class='richeditor_tabbtn'><img id='"+this.textEditButtonID+"' onClick='"+this.objectID+".setMode(\"textEdit\")'	src='"+this.skinFolderPath+"/tab2.gif'></div>																														";
	retString += "  <div class='richeditor_tabbtn'><img id='"+this.htmlViewButtonID+"' onClick='"+this.objectID+".setMode(\"htmlView\")'	src='"+this.skinFolderPath+"/tab3.gif'></div>																														";
	retString += "  <div class='richeditor_bottomright'></div>																																																													";
	retString += " </div>																																																																			";
/* 폰트이름 레이어 **********************************************************************************************************************************************************************************************************************************************************************************************/
	retString += " <div id='"+this.fontNameLayerID+"' class='richeditor_fontname_layer'>																																																						";
	retString += "  <div class='richeditor_gulim richeditor_hand'			onClick='"+this.objectID+".doCommand(\"FontName\", \"굴림\")'				onMouseOver='this.style.backgroundColor=\"#F7F7F7\"' onMouseOut='this.style.backgroundColor=\"\"'>굴림</div>															";
	retString += "  <div class='richeditor_gungsuh richeditor_hand'		onClick='"+this.objectID+".doCommand(\"FontName\", \"궁서\")'			onMouseOver='this.style.backgroundColor=\"#F7F7F7\"' onMouseOut='this.style.backgroundColor=\"\"'>궁서</div>																";
	retString += "  <div class='richeditor_dotum richeditor_hand'			onClick='"+this.objectID+".doCommand(\"FontName\", \"돋움\")'				onMouseOver='this.style.backgroundColor=\"#F7F7F7\"' onMouseOut='this.style.backgroundColor=\"\"'>돋움</div>															";
	retString += "  <div class='richeditor_batang richeditor_hand'		onClick='"+this.objectID+".doCommand(\"FontName\", \"바탕\")'				onMouseOver='this.style.backgroundColor=\"#F7F7F7\"' onMouseOut='this.style.backgroundColor=\"\"'>바탕</div>															";
	retString += "  <div class='richeditor_Arial richeditor_hand'			onClick='"+this.objectID+".doCommand(\"FontName\", \"Arial\")'				onMouseOver='this.style.backgroundColor=\"#F7F7F7\"' onMouseOut='this.style.backgroundColor=\"\"'>Arial</div>														";
	retString += "  <div class='richeditor_CourierNew richeditor_hand'	onClick='"+this.objectID+".doCommand(\"FontName\", \"Courier New\")'		onMouseOver='this.style.backgroundColor=\"#F7F7F7\"' onMouseOut='this.style.backgroundColor=\"\"'>Courier New</div>													";
	retString += "  <div class='richeditor_Georgia richeditor_hand'		onClick='"+this.objectID+".doCommand(\"FontName\", \"Georgia\")'			onMouseOver='this.style.backgroundColor=\"#F7F7F7\"' onMouseOut='this.style.backgroundColor=\"\"'>Georgia</div>														";
	retString += "  <div class='richeditor_Tahoma richeditor_hand'		onClick='"+this.objectID+".doCommand(\"FontName\", \"Tahoma\")'				onMouseOver='this.style.backgroundColor=\"#F7F7F7\"' onMouseOut='this.style.backgroundColor=\"\"'>Tahoma</div>														";
	retString += "  <div class='richeditor_TimesNewRoman richeditor_hand'	onClick='"+this.objectID+".doCommand(\"FontName\", \"Times New Roman\")'	onMouseOver='this.style.backgroundColor=\"#F7F7F7\"' onMouseOut='this.style.backgroundColor=\"\"'>Times New Roman</div>												";
	retString += "  <div class='richeditor_Verdana richeditor_hand'		onClick='"+this.objectID+".doCommand(\"FontName\", \"Verdana\")'			onMouseOver='this.style.backgroundColor=\"#F7F7F7\"' onMouseOut='this.style.backgroundColor=\"\"'>Verdana</div>														";
	retString += "  <div class='richeditor_Impact richeditor_hand'		onClick='"+this.objectID+".doCommand(\"FontName\", \"Impact\")'				onMouseOver='this.style.backgroundColor=\"#F7F7F7\"' onMouseOut='this.style.backgroundColor=\"\"'>Impact</div>														";
	retString += " </div>																																																																			";
/* 폰트크기 레이어 **********************************************************************************************************************************************************************************************************************************************************************************************/
	retString += " <div id='"+this.fontSizeLayerID+"' class='richeditor_fontsize_layer'>																																																						";
	retString += "  <div class='richeditor_hand' onClick='"+this.objectID+".doCommand(\"FontSize\", 1)' onMouseOver='this.style.backgroundColor=\"#F7F7F7\"' onMouseOut='this.style.backgroundColor=\"\"'>1</div>																								";
	retString += "  <div class='richeditor_hand' onClick='"+this.objectID+".doCommand(\"FontSize\", 2)' onMouseOver='this.style.backgroundColor=\"#F7F7F7\"' onMouseOut='this.style.backgroundColor=\"\"'>2</div>																								";
	retString += "  <div class='richeditor_hand' onClick='"+this.objectID+".doCommand(\"FontSize\", 3)' onMouseOver='this.style.backgroundColor=\"#F7F7F7\"' onMouseOut='this.style.backgroundColor=\"\"'>3</div>																								";
	retString += "  <div class='richeditor_hand' onClick='"+this.objectID+".doCommand(\"FontSize\", 4)' onMouseOver='this.style.backgroundColor=\"#F7F7F7\"' onMouseOut='this.style.backgroundColor=\"\"'>4</div>																								";
	retString += "  <div class='richeditor_hand' onClick='"+this.objectID+".doCommand(\"FontSize\", 5)' onMouseOver='this.style.backgroundColor=\"#F7F7F7\"' onMouseOut='this.style.backgroundColor=\"\"'>5</div>																								";
	retString += "  <div class='richeditor_hand' onClick='"+this.objectID+".doCommand(\"FontSize\", 6)' onMouseOver='this.style.backgroundColor=\"#F7F7F7\"' onMouseOut='this.style.backgroundColor=\"\"'>6</div>																								";
	retString += "  <div class='richeditor_hand' onClick='"+this.objectID+".doCommand(\"FontSize\", 7)' onMouseOver='this.style.backgroundColor=\"#F7F7F7\"' onMouseOut='this.style.backgroundColor=\"\"'>7</div>																								";
	retString += " </div>																																																																			";
/* 하이퍼링크 레이어 **********************************************************************************************************************************************************************************************************************************************************************************************/
	retString += " <div id='"+this.linkLayerID+"' class='richeditor_link_layer'>																																																								";
	retString += "  <div class='richeditor_center'>&nbsp;&nbsp;링크주소&nbsp;&nbsp;<input type='text' id='"+this.linkUrlID+"' class='richeditor_inputtext' style='width:200px;'></div>																																	";
	retString += "  <div class='richeditor_center richeditor_link_layer_line'></div>																																																										";
	retString += "  <div class='richeditor_center'>&nbsp;&nbsp;링크설명&nbsp;&nbsp;<input type='text' id='"+this.linkDescID+"' class='richeditor_inputtext' style='width:200px;'></div>																																	";
	//retString += "  <div class='richeditor_img_layer_btn'>

	retString += "  <div class='richeditor_center richeditor_link_layer_line'></div>";
	retString += "  <div class='richeditor_center'>&nbsp;&nbsp;링크대상&nbsp;&nbsp;<input type='hidden' id='"+this.linkTargetID+"' value='_blank'><input type='radio' name='"+this.linkTargetID+"' onClick='"+this.objectID+".setLinkTarget(\"_blank\")' checked>새창&nbsp;<input type='radio' name='"+this.linkTargetID+"' onClick='"+this.objectID+".setLinkTarget(\"_self\")'>현재창</div>			";
	retString += "  <div class='richeditor_img_layer_btn'> ";

	retString += "   <img onClick='"+this.objectID+".doCommand(\"CreateLink\", null)' src='"+this.skinFolderPath+"/btn_ok.gif'>																																										";
	retString += "   <img onClick='"+this.objectID+".toggleLayer(\""+this.linkLayerID+"\",null, null)' src='"+this.skinFolderPath+"/btn_cancle.gif'>																																				";
	retString += "  </div>																																																																			";
	retString += "  <div class='richeditor_link_layer_x'><img onClick='"+this.objectID+".toggleLayer(\""+this.linkLayerID+"\",null, null)' src='"+this.skinFolderPath+"/x.gif'></div>																															";
	retString += " </div>																																																																			";
/* 이미지 삽입 레이어 **********************************************************************************************************************************************************************************************************************************************************************************************/
	retString += " <div id='"+this.imgLayerID+"' class='richeditor_img_layer'>																																																									";
	retString += "  <div class='richeditor_center'><div style='float:left'>&nbsp;&nbsp;&nbsp;&nbsp;이미지주소</div><div><input type='text' id='"+this.imgUrlID+"' class='richeditor_inputtext' style='width:200px;'></div></div>																							";
	retString += "  <div class='richeditor_center richeditor_img_layer_line'></div>																																																										";
	retString += "  <div class='richeditor_center'><div style='float:left'>&nbsp;&nbsp;&nbsp;&nbsp;이미지설명</div><div><input type='text' id='"+this.imgDescID+"' class='richeditor_inputtext' style='width:200px;'></div></div>																							";
	retString += "  <div class='richeditor_img_layer_line'></div>																																																												";
	retString += "  <div class='richeditor_center'><div style='float:left'>&nbsp;&nbsp;&nbsp;&nbsp;이미지첨부</div><div>"+this.uploadSource+"</div></div>																																						";
	retString += "  <div class='richeditor_img_layer_line'></div>																																																												";
	retString += "  <div class='richeditor_center richeditor_pad5' style='height:100px;overflow-y:auto;'><img id='"+this.imgPreviewID+"'></div>																																																					";
	retString += "  <div class='richeditor_img_layer_btn'>																																																				";
	retString += "   <img onClick='"+this.objectID+".doImgPreview()' src='"+this.skinFolderPath+"/btn_ahead.gif'>																																													";
	retString += "   <img onClick='"+this.objectID+".doCommand(\"InsertImage\", null)' src='"+this.skinFolderPath+"/btn_ok.gif'>																																									";
	retString += "   <img onClick='"+this.objectID+".toggleLayer(\""+this.imgLayerID+"\",null, null)' src='"+this.skinFolderPath+"/btn_cancle.gif'></div>																																			";
	retString += "  <div class='richeditor_img_layer_x'><img onClick='"+this.objectID+".toggleLayer(\""+this.imgLayerID+"\", null, null)' src='"+this.skinFolderPath+"/x.gif'></div>																															";
	retString += " </div>																																																																			";


/* 테이블 생성 레이어 **********************************************************************************************************************************************************************************************************************************************************************************************/
	retString += " <div id='"+this.tableLayerID+"' class='richeditor_table_layer'>																																																								";
	retString += "  <div>																																																																			";
	retString += "   <div class='richeditor_table_text' style='float:left'>열넓이</div>																																																						";
	retString += "   <div><input id='"+this.tableWidthID+"' type='text' class='richeditor_inputtext' style='width:50px;'>&nbsp;픽셀</div>																																										";
	retString += "  </div>																																																																			";
	retString += "  <div class='richeditor_center richeditor_table_layer_line'></div>																																																										";
	retString += "  <div style='float:left;padding-top:3px;'>																																																										";
	retString += "   <div style='clear:left'>																																																														";
	retString += "    <div class='richeditor_table_text' style='float:left'>행</div>																																																							";
	retString += "    <div><input id='"+this.tableRowID+"' type='text' class='richeditor_inputtext' style='width:50px;'>&nbsp;세로</div>																																										";
	retString += "   </div>																																																																			";
	retString += "   <div style='clear:left'>																																																														";
	retString += "    <div class='richeditor_table_text' style='float:left'>열</div>																																																							";
	retString += "    <div><input id='"+this.tableColID+"' type='text' class='richeditor_inputtext' style='width:50px;'>&nbsp;가로</div>																																										";
	retString += "   </div>																																																																			";
	retString += "  </div>																																																																			";
	retString += "  <div style='float:left;width:50px'>&nbsp;</div>																																																									";
	retString += "  <div>																																																																			";
	retString += "   <table id='"+this.tableGridID+"' border='0' cellspacing='1' cellpadding='0' bgcolor='#D6D6D6'>																																													";
	for(var i=0; i<5; ++i)
	{
		retString += "   <tr bgcolor='#FFFFFF'>																																																														";
		for(var j=0; j<5; ++j)
		{
			retString += "    <td class='richeditor_table_cell' onMouseOver='"+this.objectID+".doHoverTable("+i+"+1, "+j+"+1)' onClick='"+this.objectID+".doClickTable("+i+"+1, "+j+"+1)'></td>																												";
		}
		retString += "   </tr>																																																																		";
	}
	retString += "   </table>																																																																		";
	retString += "  </div>																																																																			";
	retString += "  <div  style='clear:left;' class='richeditor_center richeditor_table_layer_line'></div>																																																				";
	retString += "  <div>																																																																			";
	retString += "   <div class='richeditor_table_text'>선굵기</div>																																																												";
	retString += "   <div><input id='"+this.tableThickID+"' type='text' class='richeditor_inputtext' style='width:50px;'>&nbsp;픽셀</div>																																										";
	retString += "  </div>																																																																			";
	retString += "  <div class='richeditor_center richeditor_table_layer_line'></div>																																																										";
	retString += "  <div>																																																																			";
	retString += "   <div class='richeditor_table_text'>배경색</div>																																																												";
	retString += "   <div id='"+this.tableBackColorPreviewID+"' class='richeditor_table_color_preview' onClick='"+this.objectID+".showColorLayer(this, "+this.objectID+".tableBackColor, "+this.objectID+".tableBackColorPreview)'></div>																		";
	retString += "   <div><input id='"+this.tableBackColorID+"' type='text' class='richeditor_inputtext' style='width:70px;'></div>																																											";
	retString += "  </div>																																																																			";
	retString += "  <div class='richeditor_center richeditor_table_layer_line'></div>																																																										";
	retString += "  <div>																																																																			";
	retString += "   <div class='richeditor_table_text'>라인색</div>																																																												";
	retString += "   <div id='"+this.tableLineColorPreviewID+"' class='richeditor_table_color_preview' onClick='"+this.objectID+".showColorLayer(this, "+this.objectID+".tableLineColor, "+this.objectID+".tableLineColorPreview)'></div>																		";
	retString += "   <div><input id='"+this.tableLineColorID+"' type='text' class='richeditor_inputtext' style='width:70px;'></div>																																											";
	retString += "  </div>																																																																			";
	retString += "  <div class='richeditor_center richeditor_table_layer_line'></div>																																																										";
	retString += "  <div class='richeditor_table_layer_btn'><img onClick='"+this.objectID+".doCommand(\"CreateTable\", null)' src='"+this.skinFolderPath+"/btn_ok.gif'>&nbsp;<img onClick='"+this.objectID+".toggleLayer(\""+this.tableLayerID+"\", null, null)' src='"+this.skinFolderPath+"/btn_cancle.gif'></div>	";
	retString += "  <div class='richeditor_table_layer_x'><img onClick='"+this.objectID+".toggleLayer(\""+this.tableLayerID+"\", null, event)' src='"+this.skinFolderPath+"/x.gif'></div>																														";
	retString += " </div>																																																																			";
/* 색상 선택 레이어 **********************************************************************************************************************************************************************************************************************************************************************************************/
	retString += " <div id='"+this.colorLayerID+"' class='richeditor_color_layer'>																																																								";
	retString += "   <table id='"+this.colorGridID+"' border='0' cellspacing='1' cellpadding='0' bgcolor='#D6D6D6' style='float:left'>																																								";
	for(var i=0; i<this.colorPallet.length; ++i)
	{
		if(i%16 == 0) retString += "   <tr bgcolor='#FFFFFF'>																																																										";
		retString += "    <td class='richeditor_color_cell' onMouseOver='"+this.objectID+".doColorPreview(\""+this.colorPallet[i]+"\")' onClick='"+this.objectID+".doColorPick()' style='background-color:#"+this.colorPallet[i]+"'></td>																		";
		if((i+1)%16 == 0) retString += "   </tr>																																																													";
	}
	retString += "   </table>																																																																		";
	retString += "  <div id='"+this.colorPreviewID+"' class='richeditor_color_preview'></div>																																																					";
	retString += "  <div class='richeditor_color_text'>색상&nbsp;&nbsp;<input type='input' id='"+this.colorCodeID+"' class='richeditor_inputtext' onKeyUp='"+this.objectID+".doColorPreview(this.value)' style='width:59px' maxlength='7' value='#FFFFFF'></div>															";
	retString += "  <div class='richeditor_color_layer_btn'><img src='"+this.skinFolderPath+"/btn_ok.gif' onClick='"+this.objectID+".doColorPick()'>&nbsp;<img src='"+this.skinFolderPath+"/btn_cancle.gif' onClick='"+this.objectID+".hideColorLayer()'></div>												";
	retString += " </div>																																																																			";
/* 프로그램 정보 레이어 **********************************************************************************************************************************************************************************************************************************************************************************************/
	retString += " <div id='"+this.infoLayerID+"' class='richeditor_copyright_layer'>																																																							";
	retString += "  <div class='richeditor_center richeditor_logo'><img src='"+this.skinFolderPath+"/logo.gif'></div>																																																	";
	retString += "  <div class='richeditor_copyright_text'>																																																													";
	retString += "   Version 																																																																		";
	retString += "   <b>1.2</b>																																																																		";
	retString += "   <br>Copyright (c) SkySoft. All rights reserved.<br>homepage : <a style='color:#646464' href='http://www.skysoft.co.kr' target='_blank'>http://www.skysoft.co.kr</a>																											";
	retString += "  </div>																																																																			";
	retString += "  <div class='richeditor_copyright_layer_x'><img onClick='"+this.objectID+".toggleLayer(\""+this.infoLayerID+"\", null, null)' src='"+this.skinFolderPath+"/x.gif'></div>																													";
	retString += " </div>																																																																			";
	retString += "</div>																																																																			";

	return retString;
}
RichEdit.prototype.setControlContent = function(target)
{
	switch(target)
	{
		case 'htmlEdit':
			this.htmlEdit.contentWindow.document.body.innerHTML = this.contEdit.value;
		break;
		case 'textEdit':
			this.textEdit.value = this.contEdit.value;
		break;
		case 'htmlView':
			this.htmlView.contentWindow.document.body.innerHTML = this.contEdit.value;
		break;
	}
}
RichEdit.prototype.setMode = function(mode)
{
	// 툴바를 초기화한다.
	this.updateToolbar();

	if(this.mode == mode) return;

	// 요청된 모드로 상태값을 변경한다.
	this.mode = mode;

	// 요청된 모드에 따라 내용을 채운다.
	this.setControlContent(this.mode);

	// 요청된 모드에 따라 화면 구성작업을 한다.
	switch(this.mode)
	{
		case 'htmlEdit':
			// 컨트롤의 높이를 맞춘다.
			this.contentLayout.style.width		= this.width+'px';
			this.contentLayout.style.height		= this.height+'px';

			this.topLayout.style.display		= "block";

			this.contentLayout.style.display	= "block";
			this.htmlEdit.style.display			= 'block';
			this.textEdit.style.display			= 'none';
			this.htmlView.style.display			= 'none';

			this.bottomLayout.style.display		= "block";
			this.htmlEditButton.src				= this.skinFolderPath+'/tab1_o.gif';
			this.textEditButton.src				= this.skinFolderPath+'/tab2.gif';
			this.htmlViewButton.src				= this.skinFolderPath+'/tab3.gif';

			this.htmlEdit.contentWindow.focus();
		break;
		case 'textEdit':
			// 컨트롤의 높이를 맞춘다.(툴바가 없어진만큼 컨트롤의 높이를 늘린다.)
			this.contentLayout.style.height	= (this.height+this.topLayoutHeight)+'px';
			this.contentLayout.style.width	= this.width+'px';

			// IE의 textarea 상대크기 리사징 버그로 인하여 textEdit의 크기는 px값으로 맞춰준다.
			this.textEdit.style.width			= this.contentLayout.style.width;
			this.textEdit.style.height			= this.contentLayout.style.height;

			this.topLayout.style.display		= "none";

			this.contentLayout.style.display	= "block";
			this.htmlEdit.style.display			= 'none';
			this.textEdit.style.display			= 'block';
			this.htmlView.style.display			= 'none';

			this.bottomLayout.style.display		= "block";
			this.htmlEditButton.src				= this.skinFolderPath+'/tab1.gif';
			this.textEditButton.src				= this.skinFolderPath+'/tab2_o.gif';
			this.htmlViewButton.src				= this.skinFolderPath+'/tab3.gif';

			this.textEdit.focus();
		break;
		case 'htmlView':
			// 컨트롤의 높이를 맞춘다.(툴바가 없어진만큼 컨트롤의 높이를 늘린다.)
			this.contentLayout.style.height		= (this.height+this.topLayoutHeight)+'px';
			this.contentLayout.style.width		= this.width+'px';

			this.topLayout.style.display		= "none";

			this.contentLayout.style.display	= "block";
			this.htmlEdit.style.display			= 'none';
			this.textEdit.style.display			= 'none';
			this.htmlView.style.display			= 'block';

			this.bottomLayout.style.display		= "block";
			this.htmlEditButton.src				= this.skinFolderPath+'/tab1.gif';
			this.textEditButton.src				= this.skinFolderPath+'/tab2_2.gif';
			this.htmlViewButton.src				= this.skinFolderPath+'/tab3_o.gif';

			this.htmlView.contentWindow.focus();
		break;
	}
}
RichEdit.prototype.getSelection = function()
{
	var rng = null;
	switch(this.browserType)
	{
		case 1: // IE
			rng = this.htmlEdit.contentWindow.document.selection.createRange();
		break;
		case 2: // FF
			rng = this.htmlEdit.contentWindow.document.getSelection();
		break;
		case 3: // OC
			rng = this.htmlEdit.contentWindow.getSelection();
		break;
	}
	return rng;
//	return (this.isIE)?this.htmlEdit.contentWindow.document.selection.createRange():this.htmlEdit.contentWindow.document.getSelection();
}
RichEdit.prototype.saveSelection = function()
{
	this.lastSelection = this.getSelection();
}
RichEdit.prototype.restoreSelection = function()
{
	if(this.isIE)
	{
		this.lastSelection.select();
		this.lastSelection = null;
	}
}
RichEdit.prototype.setControlID = function(prefix)
{
	this.objectID					= prefix+'Object';
	this.htmlEditID					= prefix+'HtmlEdit';
	this.textEditID					= prefix+'TextEdit';
	this.htmlViewID					= prefix+'HtmlView';

	this.totalLayoutID				= prefix+'TotalLayout';
	this.topLayoutID				= prefix+'TopLayout';
	this.contentLayoutID			= prefix+'ContentLayout';
	this.bottomLayoutID				= prefix+'BottomLayout';

	this.htmlEditButtonID			= prefix+'HtmlEditButton';
	this.textEditButtonID			= prefix+'TextEditButton';
	this.htmlViewButtonID			= prefix+'HtmlViewButton';

	this.fontNameLayerID			= prefix+'FontNameLayer';
	this.fontSizeLayerID			= prefix+'FontSizeLayer';
	this.fontNameID					= prefix+'FontName';
	this.fontSizeID					= prefix+'FontSize';


	this.imgLayerID					= prefix+'ImgLayer';
	this.imgUrlID					= prefix+'ImgUrl';
	this.imgDescID					= prefix+'ImgDesc';
	this.imgPreviewID				= prefix+'ImgPreview';
	this.imgFileID					= prefix+'ImgFile';

	this.linkLayerID				= prefix+'LinkLayer';
	this.linkUrlID					= prefix+'LinkUrl';
	this.linkDescID					= prefix+'LinkDesc';
	this.linkTargetID				= prefix+'LinkTarget';

	this.tableLayerID				= prefix+'TableLayer';
	this.tableGridID				= prefix+'TableGrid';
	this.tableWidthID				= prefix+'TableWidth';
	this.tableRowID					= prefix+'TableRow';
	this.tableColID					= prefix+'TableCol';
	this.tableThickID				= prefix+'TableBorderWidth';
	this.tableBackColorID			= prefix+'TableBackColor';
	this.tableLineColorID			= prefix+'TableLineColor';
	this.tableBackColorPreviewID	= prefix+'TableBackColorPreview';
	this.tableLineColorPreviewID	= prefix+'TableLineColorPreview';

	this.colorLayerID				= prefix+'ColorLayer';
	this.colorGridID				= prefix+'ColorGrid';
	this.colorCodeID				= prefix+'ColorCode';
	this.colorPreviewID				= prefix+'ColorPreview';

	this.infoLayerID				= prefix+'InfoLayer';
}
RichEdit.prototype.setControl = function()
{
	this.htmlEdit				= document.getElementById(this.htmlEditID);
	this.textEdit				= document.getElementById(this.textEditID);
	this.htmlView				= document.getElementById(this.htmlViewID);

	this.totalLayout			= document.getElementById(this.totalLayoutID);
	this.topLayout				= document.getElementById(this.topLayoutID);
	this.contentLayout			= document.getElementById(this.contentLayoutID);
	this.bottomLayout			= document.getElementById(this.bottomLayoutID);

	this.htmlEditButton			= document.getElementById(this.htmlEditButtonID);
	this.textEditButton			= document.getElementById(this.textEditButtonID);
	this.htmlViewButton			= document.getElementById(this.htmlViewButtonID);

	this.fontNameLayer			= document.getElementById(this.fontNameLayerID);
	this.fontSizeLayer			= document.getElementById(this.fontSizeLayerID);
	this.fontName				= document.getElementById(this.fontNameID);
	this.fontSize				= document.getElementById(this.fontSizeID);

	this.imgLayer				= document.getElementById(this.imgLayerID);
	this.imgUrl					= document.getElementById(this.imgUrlID);
	this.imgDesc				= document.getElementById(this.imgDescID);
	this.imgPreview				= document.getElementById(this.imgPreviewID);
	eval("window."+this.imgFileID+" = document.getElementById('"+this.imgFileID+"');");
//	this.imgFile				= document.getElementById(this.imgFileID);
	this.imgFile				= eval("window."+this.imgFileID);

	this.linkLayer				= document.getElementById(this.linkLayerID);
	this.linkUrl				= document.getElementById(this.linkUrlID);
	this.linkDesc				= document.getElementById(this.linkDescID);
	this.linkTarget				= document.getElementById(this.linkTargetID);

	this.tableLayer				= document.getElementById(this.tableLayerID);
	this.tableGrid				= document.getElementById(this.tableGridID);
	this.tableWidth				= document.getElementById(this.tableWidthID);
	this.tableRow				= document.getElementById(this.tableRowID);
	this.tableCol				= document.getElementById(this.tableColID);
	this.tableThick				= document.getElementById(this.tableThickID);
	this.tableBackColor			= document.getElementById(this.tableBackColorID);
	this.tableLineColor			= document.getElementById(this.tableLineColorID);
	this.tableBackColorPreview	= document.getElementById(this.tableBackColorPreviewID);
	this.tableLineColorPreview	= document.getElementById(this.tableLineColorPreviewID);

	this.colorLayer				= document.getElementById(this.colorLayerID);
	this.colorGrid				= document.getElementById(this.colorGridID);
	this.colorCode				= document.getElementById(this.colorCodeID);
	this.colorPreview			= document.getElementById(this.colorPreviewID);

	this.infoLayer				= document.getElementById(this.infoLayerID);
}
RichEdit.prototype.resetIframe = function(ifrm, defaultValue)
{
	ifrm.contentWindow.document.open("text/html");
	ifrm.contentWindow.document.write(this.defaultSource);
	ifrm.contentWindow.document.write(defaultValue);
	ifrm.contentWindow.document.close();
}
RichEdit.prototype.setEventListener = function()
{
	var htmlEditUpdateFunc = new Function(this.objectID+".update('htmlEdit');");
	var textEditUpdateFunc = new Function(this.objectID+".update('textEdit');");
	// 모든 작성 액션에 대하여 HtmlEdit와 TextEdit의 내용 SYNC를 맞춘다.(이벤트를 Notify 하여, 서로 내용을 복사함)
	if(!this.isIE)
	{
		// FF : DOMCharacterDataModified 이벤트가 대부분의 작업을 수행하지만, 다른 이벤트 또한 남겨둠.(추후 확장성 고려)
//		this.htmlEdit.contentWindow.document.addEventListener('mouseup',	htmlEditUpdateFunc, true);
		this.htmlEdit.contentWindow.document.addEventListener('mousedown',	htmlEditUpdateFunc, true);
		this.htmlEdit.contentWindow.document.addEventListener('keydown',	htmlEditUpdateFunc, true);
//		this.htmlEdit.contentWindow.document.body.addEventListener('drop',	htmlEditUpdateFunc, true);
//		this.htmlEdit.contentWindow.document.body.addEventListener('cut',	htmlEditUpdateFunc, true);
//		this.htmlEdit.contentWindow.document.body.addEventListener('paste',	htmlEditUpdateFunc, true);
		this.htmlEdit.contentWindow.document.body.addEventListener('blur',	htmlEditUpdateFunc, true);
//		this.htmlEdit.contentWindow.document.body.addEventListener('DOMCharacterDataModified',	htmlEditUpdateFunc, true);

//		this.textEdit.addEventListener('mouseup',	textEditUpdateFunc, true);
		this.textEdit.addEventListener('mousedown',	textEditUpdateFunc, true);
		this.textEdit.addEventListener('keydown',	textEditUpdateFunc, true);
//		this.textEdit.addEventListener('drop',		textEditUpdateFunc, true);
//		this.textEdit.addEventListener('cut',		textEditUpdateFunc, true);
//		this.textEdit.addEventListener('paste',		textEditUpdateFunc, true);
		this.textEdit.addEventListener('blur',		textEditUpdateFunc, true);
//		this.textEdit.addEventListener('DOMCharacterDataModified', textEditUpdateFunc, true);
	} else {
		// IE
//		this.htmlEdit.contentWindow.document.onmouseup		= htmlEditUpdateFunc;
		this.htmlEdit.contentWindow.document.onmousedown	= htmlEditUpdateFunc;
		this.htmlEdit.contentWindow.document.onkeydown		= htmlEditUpdateFunc;
//		this.htmlEdit.contentWindow.document.body.ondrop	= htmlEditUpdateFunc;
//		this.htmlEdit.contentWindow.document.body.oncut		= htmlEditUpdateFunc;
//		this.htmlEdit.contentWindow.document.body.onpaste	= htmlEditUpdateFunc;
		this.htmlEdit.contentWindow.document.body.onblur	= htmlEditUpdateFunc;

//		this.textEdit.onmouseup		= textEditUpdateFunc;
		this.textEdit.onmousedown	= textEditUpdateFunc;
		this.textEdit.onkeydown		= textEditUpdateFunc;
//		this.textEdit.ondrop		= textEditUpdateFunc;
//		this.textEdit.oncut			= textEditUpdateFunc;
//		this.textEdit.onpaste		= textEditUpdateFunc;
		this.textEdit.onblur		= textEditUpdateFunc;
	}
}
RichEdit.prototype.imgFileUploadOnComplete = function(retVal)
{
	this.imgUrl.value = retVal;
	this.doImgPreview();
}
RichEdit.prototype.imgFileOnSelect = function(selectFile)
{
	this.imgFile.sendAll();
}
RichEdit.prototype.setLinkTarget = function(value)
{
	this.linkTarget.value = value;
}
RichEdit.prototype.isHotKey = function()
{
	var e		= this.htmlEdit.contentWindow.event;
	var code	= (e.keyCode)?e.keyCode:e.which;
	var character = String.fromCharCode(code).toLowerCase();
	if(e.ctrlKey)
	{
		switch(character)
		{
			case "z":
				this.doCommand("Undo", null);
			break;
			case "y":
				this.doCommand("Redo", null);
			break;
		}
	}
}
RichEdit.prototype.getDefaultSource = function()
{
	return this.defaultSource;
}
