﻿//IE에선 a 태그에 background-image 사용하면 깜박거려서 해결하기 위함
try { document.execCommand("BackgroundImageCache", false, true); } catch(err) { }

var CCommon = new Object();

//Wp.StateInfo 테이블, C#, Script 공통 사용
var StateInfo =
{
	Uploading: 1,
	Uploaded: 2,
	Checking: 3,
	Success: 4,
	Error: 5
};

//C#, Script 공통 사용
WpGroup =
{
	Input: { Value: 0, Description: "입력" },
	Shape: { Value: 1, Description: "모양" },
	Table: { Value: 2, Description: "표" },
	Chart: { Value: 3, Description: "차트" }
};

//C#, Script 공통 사용
WpInGradeType =
{
	OneOnly: 0,
	TwoOnly: 1,
	OneOrTwo: 2,
	OneOrTwoOrThree: 3,
	TwoOrThree: 4
};

//C#, Script 공통 사용
WpResultHtmlItem =
{
	DictationChar: { Value: 0, Description: "입력(글자)", Group: WpGroup.Input.Value, InGradeType: WpInGradeType.OneOrTwoOrThree },
	DictationWord: { Value: 1, Description: "입력(단어)", Group: WpGroup.Input.Value, InGradeType: WpInGradeType.OneOrTwoOrThree },
	Rectangle: { Value: 2, Description: "글상자", Group: WpGroup.Input.Value, InGradeType: WpInGradeType.OneOrTwoOrThree },
	Title: { Value: 3, Description: "제목", Group: WpGroup.Input.Value, InGradeType: WpInGradeType.OneOrTwoOrThree },
	Bookmark: { Value: 4, Description: "책갈피", Group: WpGroup.Input.Value, InGradeType: WpInGradeType.OneOrTwo },
	Picture: { Value: 5, Description: "그림", Group: WpGroup.Input.Value, InGradeType: WpInGradeType.OneOrTwo },
	FootNote: { Value: 6, Description: "각주", Group: WpGroup.Input.Value, InGradeType: WpInGradeType.OneOnly },
	Hyperlink: { Value: 7, Description: "하이퍼링크", Group: WpGroup.Input.Value, InGradeType: WpInGradeType.OneOrTwo },

	PageDef: { Value: 8, Description: "편집 용지", Group: WpGroup.Shape.Value, InGradeType: WpInGradeType.OneOrTwoOrThree },
	ColDef: { Value: 9, Description: "단 설정", Group: WpGroup.Shape.Value, InGradeType: WpInGradeType.OneOnly },
	PageBorder: { Value: 10, Description: "쪽 테두리", Group: WpGroup.Shape.Value, InGradeType: WpInGradeType.OneOrTwoOrThree },
	CharShape: { Value: 11, Description: "글자 모양", Group: WpGroup.Shape.Value, InGradeType: WpInGradeType.TwoOrThree },
	ParagraphAlign: { Value: 12, Description: "문단 정렬", Group: WpGroup.Shape.Value, InGradeType: WpInGradeType.OneOrTwoOrThree },
	FirstChar: { Value: 13, Description: "문단 첫 글자 장식", Group: WpGroup.Shape.Value, InGradeType: WpInGradeType.OneOrTwo },
	NumberHeadingType: { Value: 14, Description: "문단 번호", Group: WpGroup.Shape.Value, InGradeType: WpInGradeType.OneOrTwoOrThree },
	BulletHeadingType: { Value: 15, Description: "글머리표", Group: WpGroup.Shape.Value, InGradeType: WpInGradeType.TwoOrThree },
	Style: { Value: 16, Description: "스타일", Group: WpGroup.Shape.Value, InGradeType: WpInGradeType.OneOrTwoOrThree },
	Header: { Value: 17, Description: "머리말", Group: WpGroup.Shape.Value, InGradeType: WpInGradeType.OneOrTwoOrThree },
	Footer: { Value: 18, Description: "꼬리말", Group: WpGroup.Shape.Value, InGradeType: WpInGradeType.OneOrTwo },
	PageNum: { Value: 19, Description: "쪽 번호", Group: WpGroup.Shape.Value, InGradeType: WpInGradeType.OneOrTwoOrThree },

	Table: { Value: 20, Description: "표", Group: WpGroup.Table.Value, InGradeType: WpInGradeType.OneOrTwoOrThree },
	BlockFormula: { Value: 21, Description: "블록 계산식", Group: WpGroup.Table.Value, InGradeType: WpInGradeType.OneOnly },
	TableCaption: { Value: 22, Description: "캡션", Group: WpGroup.Table.Value, InGradeType: WpInGradeType.OneOnly },

	Chart: { Value: 23, Description: "차트", Group: WpGroup.Chart.Value, InGradeType: WpInGradeType.OneOnly }
};

CCommon.GetXmlClient = function (DbName)
{
	var DbServerType = "SQLServer";

	if (!DbName)
		DbName = "Web";

	var IsGet = true;

	return new CXmlClient(CInterDotNet.Const.UrlSelect, CInterDotNet.Const.UrlUpdate, DbServerType, DbName, IsGet);
}

CCommon.ShowPopCssRolloverImage = function(ImageUrl, ImageWidth, ImageHeight)
{
	if (!ImageUrl)
	{
		alert("이미지를 선택하지 않았습니다.");
		return;
	}
	
	if (!ImageWidth)
	{
		alert("이미지 너비를 입력하지 않았습니다.");
		return;
	}
	if (!ImageHeight)
	{
		alert("이미지 높이를 입력하지 않았습니다.");
		return;
	}
	
	var Url = "/tool/pop_css_rollover_image.aspx"
		+ "?ImageUrl=" + escape(ImageUrl)
		+ "&ImageWidth=" + ImageWidth
		+ "&ImageHeight=" + ImageHeight;
	
	var w = (parseInt(ImageWidth, 10) + 130);
	var h = (parseInt(ImageHeight, 10) + 250);
	window.open(Url, "css_rollover_image", "width=" + w + ",height=" + h + ",resizable=yes, scrollbars=yes");
}

CCommon.ConfirmDeleteSelectedRow = function()
{
	return confirm("선택한 행을 삭제하겠습니까?");
}

CCommon.ShowPopImage = function(Url)
{
	window.open(Url, "ss", "width=200, height=200, top=0, left=0, resizable=yes, scrollbars=yes");
}



//CCommon.cs, common.js 공유
CCommon.GetRedirectUrlParam = function(UrlLogIn, ParamNameForRedirect, RedirectUrl)
{
	if (!ParamNameForRedirect)
	{
		return UrlLogIn;
	}
	else
	{
		if (!RedirectUrl)
		{
			RedirectUrl = CFile.GetParameter(document.URL, ParamNameForRedirect);

			if (!RedirectUrl)
				RedirectUrl = document.URL;
		}

		var Param = ParamNameForRedirect + "=" + escape(RedirectUrl);

		return UrlLogIn + "?" + Param;
	}
}

CCommon.GetUrlGoodOrderResult = function (UrlGoodOrderResult, GoodTypeSeq, OrderSeq, MemberSeq, GuestId)
{
	var Param = 
		"GoodTypeSeq=" + GoodTypeSeq
		+ "&Seq=" + OrderSeq;

	//비회원으로 주문했다면 수신 메일에서 확인할 수 있도록 GuestId를 추가.
	if ((MemberSeq == 0) && GuestId)
		Param += "&GuestId=" + GuestId;

	return UrlGoodOrderResult + "?" + Param;
}

//JavaScript, C# 공통
CCommon.GetUrlExamAndParam = function (CategorySeqParent, CategorySeq, ExamPaperTypeSeq, ExamTypeSeq, ExamActionSeq, ExamLogSeqPrevious)
{
	var Url = GetUrlExamOrHanja(ExamPaperTypeSeq);
	var qs = new CQueryString(Url);
	
	if (CategorySeqParent)
		qs.Items["CategorySeqParent"] = CategorySeqParent;

	qs.Items["CategorySeq"] = CategorySeq;
	qs.Items["ExamPaperTypeSeq"] = ExamPaperTypeSeq;

	if (ExamTypeSeq)
		qs.Items["ExamTypeSeq"] = ExamTypeSeq;

	if (ExamActionSeq)
		qs.Items["ExamActionSeq"] = ExamActionSeq;

	//Comhwal만 사용됨.
	if (ExamLogSeqPrevious)
		qs.Items["ExamLogSeqPrevious"] = ExamLogSeqPrevious;

	return qs.GetPathAndQuery();
}
CCommon.GetUrlExamLogAnswerAndParam = function (CategorySeq, ExamPaperTypeSeq, LogSeq)
{
	var Url = CCommon.GetUrlExamOrHanja(ExamPaperTypeSeq);
	var qs = new CQueryString(Url);
	qs.Items["CategorySeq"] = CategorySeq;
	qs.Items["ExamPaperTypeSeq"] = ExamPaperTypeSeq;
	qs.Items["LogSeq"] = LogSeq;
	qs.Items["ListType"] = ExamListType.ListAnswer;

	return qs.GetPathAndQuery();
}
CCommon.GetUrlExamListAndParam = function (CategorySeqParent, CategorySeq)
{
	var qs = new CQueryString(CInterDotNet.Const.UrlExamList);

	if (CategorySeqParent != null)
		qs.Items["CategorySeqParent"] = CategorySeqParent;

	if (CategorySeq != null)
		qs.Items["CategorySeq"] = CategorySeq;

	return qs.GetPathAndQuery();
}
CCommon.GetUrlExamOrHanja = function (ExamPaperTypeSeq)
{
	var Url = "";

	switch (ExamPaperTypeSeq)
	{
		case ExamPaperType.Hanja.Value:
		case ExamPaperType.HanjaPart.Value:
			Url = CInterDotNet.Const.UrlHanja;
			break;
		default:
			Url = CInterDotNet.Const.UrlExam;
			break;
	}

	return Url;
}
CCommon.AppendGlobalParam = function (Url)
{
	if (CFindRep.StartsWith(Url, "javascript:", true))
		return Url;

	var qs = new CQueryString(Url);


	var qsCur = new CQueryString(document.URL);

	var IsChanged = false;

	var MasterPage = qsCur.Items["MasterPage"];
	if (MasterPage)
	{
		qs.Items["MasterPage"] = MasterPage;
		IsChange = true;
	}

	var CategorySeqParent = qsCur.Items["CategorySeqParent"];
	if (CategorySeqParent)
	{
		qs.Items["CategorySeqParent"] = CategorySeqParent;
		IsChange = true;
	}

	//b.aspx?인 경우, ?를 보존하기 위함.
	if (!IsChange)
		return Url;


	return qs.GetPathAndQuery();
}

CCommon.CkEditorPlugin = function (Id)
{
	var _Id = Id;
	var _aVarName = [];
	var _PluginName = "";

	switch (Id)
	{
		case "ExamWpImage":
			_aVarName = ["글자바로잡기", "끌어내리기", "끌어올리기", "내려쓰기", "되살리기", "들여쓰기", "붙이기", "사이띄우기", "삭제", "삽입", "수정", "자리바꾸기", "줄바꾸기", "줄삽입", "줄잇기"];
			_PluginName = "exam_wp_image";
			break;
	}

	function GetExamWpImage(VarName)
	{
		return "<img src='/images/exam/sign/" + VarName + ".png' />";
	}

	CKEDITOR.plugins.add(_PluginName, {
		init: function (editor)
		{
			editor.ui.addRichCombo(_PluginName,
				{
					label: "워드 교정부호", //콤보상자 펼치기 전 표시 문자열
					title: _Id,
					//2011-04-07 className이 어떤 css 파일의 것을 읽는지 알수 없어 RichCombo의 너비를 변경하지 못함.
					className: 'cke_font',
					panel:
					{
						css: editor.skin.editor.css.concat(editor.config.contentsCss),
						multiSelect: false,
						attributes: { 'aria-label': _Id }
					},

					init: function ()
					{
						this.startGroup("워드 교정부호"); //콤보상자 펼쳤을 때 제목

						for (var i = 0; i < _aVarName.length; i++)
						{
							// Add the tag entry to the panel list.
							//var name = "<img src='/images/exam/sign/" + _aVarName[i] + ".png' />" + _aVarName[i];
							//var preview = name;
							var name = _aVarName[i];
							var preview = GetExamWpImage(_aVarName[i]) + _aVarName[i];
							this.add(name, preview, name);
						}
					},

					onClick: function (value)
					{
						//focus를 하지 않으면 getSelection()이 null을 리턴함.
						editor.focus();

						var Html = GetExamWpImage(value);
						editor.insertHtml(Html);

						//Chrome에선 안되어 주석.
						//editor.getSelection().getNative().createRange().pasteHTML(Html);

						//editor.getSelection().getNative().createRange().text = GetExamWpImage(value);
						//var t = editor.document.getSelection().getRanges()[0].startContainer.remove();
						//editor.document.getSelection().getRanges()[0].startContainer.setText("{{" + value + "}}");
						//var s = editor.document.getSelection().getRanges()[0].startContainer.getText();
						//editor.document.$.selection.createRange().text = "{{" + value + "}}";
						//var Html = editor.getSelection().getNative().createRange().htmlText;
						//alert(Html);
					},

					onRender: function ()
					{
						editor.on('selectionChange', function (ev)
						{
							//						 하나의 태그에 {{var1}} {{var2}}와 같이 입력되면 startContainer는 {{var1}} {{var2}}를 리턴하므로 주석.
							//						var SelectedText = editor.document.getSelection().getRanges()[0].startContainer.getText();
							//						if (!SelectedText)
							//							return;
						},
							this);
					}
				});


		}
	});
}

