//var MyBBSLoadFunc = MyBBS.Load;
var MyBBSLoadedFunc = MyBBS.LoadSet;
/*
MyBBS.Load = function(Query) {
	MyBBSLoadFunc(Query);
	DxHeart.Keep(Query);
}
*/
//MyBBS.LoadSet = function(XML, Query) {
	//alert(1);
	//MyBBSLoadedFunc(XML, Query);
	//DxHeart.KeepConfig('notice', 1);
//}

var DxHeart = {
	KeepLayout: new Array(),
	KeepComponent: new Array(),
	KeepDisplay:  new Array(),
	KeepDataLayout: new Array(),
	KeepDataOption: new Array(),
	KeepPwd: new Array(),
	LoadedPFile:  '',
	LoadedPage:   '',
	LoadedAction: '',
	LoadedType:   '',
	LoadedParam:  '',
	SavedPage:    '',
	SavedParam:   '',
	ExecuteTime:  0,
	
	SubmitCatch: function() {
		var Data = null;
		var Cnt = 0;
		while (Data = Em.Tags('FORM').item(Cnt++)) {
			if (Data.NotSubmitCatch && Data.NotSubmitCatch.value) continue;
			Data.onsubmit = function() {
				DxHeart.AsyncPOST(this);
				return false;
			}
		}
	},

	LoadBar: function(Msg) {
		MyBBS.LoadBar(Msg);
		if (!Msg) {
			window.DxHeartLoadImg = new Image();
			var Div  = document.createElement('DIV');
			var Img2 = document.createElement('IMG');
			window.DxHeartLoadImg.src = '/JsBase/Data/ajax-loader5.gif';
			Img2.setAttribute('SRC', window.DxHeartLoadImg.src);
			Div.appendChild(Img2);
			Msg = Div.innerHTML;
		}
		else {
			window.DxHeartLoadDotImg = new Image();
			window.DxHeartLoadDotImg.src = '/JsBase/Data/loader.dot.gif';
			var TNode = '';
			TNode += "<TABLE CELLSPACING='2' BGCOLOR='#000000'>";
			TNode += "<TR>";
			TNode += "<TD STYLE='PADDING: 5Px;' BGCOLOR='#FFFF88'>";
			TNode += Msg + "<IMG SRC='/JsBase/Data/loader.dot.gif' />";
			TNode += "</TD>";
			TNode += "</TR>";
			TNode += "</TABLE>";
			Msg = TNode;
		}
		DxHeart.BBSLoaderSet(Msg);
	},
	// End of Func

	BBSLoaderSet: function(Msg) {
		DxHeart.Insert({
			NodeId:    Em.All('MyBBSLoadLayer'),
			HTML:      Msg,
			Append:    0
		});
	},
	// End of Func

	KeepPasswd: function() {
		var Cnt = 0;
		var Passwd = null;
		var INPUT = Em.Tags('INPUT') || { item: function() { return false; } };

		while (Passwd = Em.Tags('INPUT').item(Cnt++)) {
			if (Passwd.type == 'password') {
				DxHeart.KeepPwd[Passwd.name || Passwd.id] = Passwd.value;
			}
		}
	},
	// End of Func

	SetPasswd: function() {
		for (var Index in DxHeart.KeepPwd) {
			Em.All(Index).value = DxHeart.KeepPwd[Index];
		}
		DxHeart.KeepPwd = new Array();
	},
	// End of Func

	KeepConfig: function(PFile, Ignore) {
		DxHeart.KeepPasswd();
		DxHeart.KeepDisplay[PFile] = Em.All('MainPage').innerHTML;
		if (DxHeart.KeepDataLayout[PFile]) {
			DxHeart.LoadLayout(PFile, DxHeart.KeepDataLayout[PFile], DxHeart.KeepDataOption[PFile]);
		}
		else {
			DxHeart.LoadBar('¼³Á¤À» ÀÐ¾î¿É´Ï´Ù.');
			var XML = new MY_XML();
			XML.Param('Exec', 1);
			XML.Param('PFile', PFile);
			if (Ignore) XML.Param('IgnoreName', PFile);
			XML.AFunc("DxHeart.Keep(XML);");
			XML.Load('/', true);
		}
	},
	// End of Func

	Keep: function(XML) {
		var Conf = XML.DomToNode('Config').item(0);
		var PFile  = Conf.getAttribute('Name');
		var Layout = Conf.getAttribute('Layout');
		DxHeart.ExecuteTime = Conf.getAttribute('ExecuteTime');
		var Option = encodeURIComponent(Conf.getAttribute('Option') + '\n');
		if (!Layout) {
			DxHeart.Insert({
				NodeId:    Em.All('MainPage'),
				HTML:      DxHeart.KeepDisplay[PFile],
				Append:    0
			});
		}
		else {
			DxHeart.KeepDataLayout[PFile] = Layout;
			DxHeart.KeepDataOption[PFile] = Option;
			DxHeart.LoadLayout(PFile, Layout, Option);
		}
		DxHeart.LoadBar('OFF');
	},
	// End of Func

	KeepInner: function(PFile) {
		if (DxHeart.KeepLayout[PFile]) {
			//Em.All('MainContent').innerHTML = DxHeart.KeepLayout[PFile];
			if (DxHeart.KeepDisplay[PFile]) {
				//Em.All('MainPage').innerHTML = DxHeart.KeepDisplay[PFile];
				for (var Index in DxHeart.KeepComponent[PFile]) {
					if (Em.All(Index)) {
						DxHeart.Insert({
							NodeId:    Em.All(Index),
							HTML:      DxHeart.KeepComponent[PFile][Index],
							Append:    0
						});
					}
				}
			}
		}
	},
	// End of Func

	KeepDestroy: function(DIndex, Mode) {
		if (Mode == 'Layout') {
			DxHeart.KeepLayout[PFile] = '';
		}
		else if (Mode == 'Display') {
			DxHeart.KeepDisplay[DIndex] = '';
		}
		else {
			for (var PFile in DxHeart.KeepComponent) {
				for (var Index in DxHeart.KeepComponent[PFile]) {
					if (Index == DIndex) {
						DxHeart.KeepComponent[PFile][Index] = '';
					}
				}
			}
		}
	},
	// End of Func

	LoadLayout: function(PFile, Layout, Option) {
		if (DxHeart.KeepLayout[PFile]) {
			DxHeart.Insert({
				NodeId:    Em.All('MainContent'),
				HTML:      DxHeart.KeepLayout[PFile],
				Append:    0
			});
			DxHeart.Insert({
				NodeId:    Em.All('MainPage'),
				HTML:      DxHeart.KeepDisplay[PFile],
				Append:    0
			});
			DxHeart.SubmitCatch();
			DxHeart.LoadComponent(PFile, Option);
		}
		else {
			DxHeart.LoadBar('·¹ÀÌ¾Æ¿ô Á¤º¸¸¦ ÀÐ¾î¿É´Ï´Ù');
			var XML = new MY_XML();
			XML.Param('Exec', 1);
			XML.Param('PFile', Layout);
			XML.AFunc("DxHeart.SetLayout(XML, '" +PFile+ "', '" +Layout+ "', '" +Option+ "');");
			XML.Load('/', true);
		}
	},
	// End of Func

	SetLayout: function(XML, PFile, Layout, Option) {
		DxHeart.KeepLayout[PFile] = XML.XmlToHtml();
		DxHeart.Insert({
			NodeId:    Em.All('MainContent'),
			HTML:      DxHeart.KeepLayout[PFile],
			Append:    0
		});
		DxHeart.Insert({
			NodeId:    Em.All('MainPage'),
			HTML:      DxHeart.KeepDisplay[PFile],
			Append:    0
		});
		DxHeart.SubmitCatch();
		DxHeart.LoadBar('OFF');
		DxHeart.LoadComponent(PFile, Option);
	},
	// End of Func

	LoadComponent: function(PFile, Option) {
		var XML = new MY_XML();
		// TopBtn=TopBtn|TopMenu=TopMenu|LeftMenu=LeftMenu01
		Option = decodeURIComponent(Option);

		var Component = Option.match(/^(.*?)\s/) || new Array('', '');
		Option = encodeURIComponent(Option.replace(/^(.*?)\s/, ''));
		Component = Component[1].split(/=/);

		var Name  = Component[0];
		var CName = 'Component::Inc::' + Component[1];

		if (!DxHeart.KeepComponent[PFile]) {
			DxHeart.KeepComponent[PFile] = new Array();
		}

		if (Name) {
			if (DxHeart.KeepComponent[PFile][Name]) {
				DxHeart.Insert({
					NodeId:    Em.All(Name),
					HTML:      DxHeart.KeepComponent[PFile][Name],
					Append:    0
				});
				DxHeart.LoadComponent(PFile, Option);
			}
			else {
				DxHeart.LoadBar('±¸¼º¿ä¼Ò [' +CName+ ']¸¦ ÀÐ¾î¿É´Ï´Ù.');
				XML.Param('Exec', 1);
				XML.Param('PFile', CName);
				XML.AFunc("DxHeart.SetComponent(XML, '" +PFile+ "', '" +Option+ "', '" +Name+ "', '" +CName+ "');");
				XML.Load('/', true);
			}
		}
		else {
			DxHeart.SetPasswd();
		}
	},
	// End of Func

	SetComponent: function(XML, PFile, Option, Name, CName) {
		var Value  = XML.XmlToHtml();
		//DxHeart.KeepComponent[CName]['Name']  = Name;
		//DxHeart.KeepComponent[CName]['Value'] = Value;
		//DxHeart.KeepComponent[CName]['PFile'] = PFile;
		DxHeart.KeepComponent[PFile][Name] = Value;

		DxHeart.Insert({
			NodeId:    Em.All(Name),
			HTML:      Value,
			Append:    0
		});

		DxHeart.LoadBar('OFF');
		DxHeart.LoadComponent(PFile, Option);
	},
	// End of Func

	PageLoaded: function(XML, PFile, Action, IWin, Param) {
		if (IWin == 'undefined') IWin = '';
		if (PFile == 'undefined') PFile = '';

		var HTML = XML.XmlToHtml();
		var Location = DxHeart.GetReturn('Location', HTML);
		var Header   = DxHeart.GetReturn('Header', HTML);
		var NoneDisplay = 0;
		var NoneLog = 0;
		if (PFile.match(/[\-]+/)) {
			return false;
		}

		DxHeart.LoaderSet('OFF');
		//if (Target != 'ShadowIWindow') DxHeart.ShadowOpen('OFF');

		if (Header) {
			if (Header.Msg) alert(Header.Msg);
			if ((Header.Clean) && (Header.Clean.match(/Y/i))) NoneDisplay = 1;
			if ((Header.NoLog) && (Header.NoLog.match(/Y/i))) NoneLog = 1;
			if (Header.Focus) {
				try {
					for (var i = 0; i < 6; i++) {
						setTimeout("Em.All('" +Header.Focus+ "').style.backgroundColor = '#FFDD55';", 100 * i);
						i++;
						setTimeout("Em.All('" +Header.Focus+ "').style.backgroundColor = '';", 100 * i);
					}
					Em.All(Header.Focus).focus();
				}
				catch (Err) {}
			}
		}

		if (Location) {
			if (Location.Action) {
				if (!Location.Time) {
					Location.Time = 1
					NoneDisplay = 1;
				}
				setTimeout("window.open(\"" +Location.Action+ "\", '_top');",  Location.Time);
			}
		}
		else if (!NoneLog) {
			var CntForm = '';
			var ActionForm = '';
			if (Action) ActionForm += '&Action=' + Action;
			if (IWin) ActionForm += '&IWin=' + IWin;
			if (Param) ActionForm += '&Param=' + encodeURIComponent(Param) || '';
			window.open('blank.dx?PFile=' +PFile + ActionForm, 'HistoryForm');
		}

		if (NoneDisplay) {
			DxHeart.LoadedPage  = DxHeart.SavedPage;
			DxHeart.LoadedParam = DxHeart.SavedParam;
			DxHeart.LoadedType  = DxHeart.SavedType;
			DxHeart.SubmitCatch();
			Let.UseScript(HTML);
			//alert(DxHeart.LoadedPage);
		}
		else {
			DxHeart.SavedPage  = DxHeart.LoadedPage;
			DxHeart.SavedParam = DxHeart.LoadedParam;
			DxHeart.SavedType  = DxHeart.LoadedType;

			if (IWin) {
				DxHeart.Insert({
					NodeId:    Em.All('ShadowIWindow'),
					HTML:      HTML,
					Append:    0
				});
				DxHeart.SubmitCatch();
			}
			else {
				if (navigator.appName == 'Microsoft Internet Explorer') {
					location.href = '#' + DxHeart.LoadedPage || '';
				}
				var Uri = PFile.match(/^([^\-]+)\-(.*?)$/) || new Array(null, PFile, '');
				PFile = Uri[1];
				DxHeart.KeepDisplay[PFile] = HTML;
				DxHeart.ShadowOpen('OFF');
				DxHeart.Keep(XML);
			}
		}
	},
	// End of Func

	GetReturn: function(Type, HTML) {

		HTML = HTML.replace(/\r|\n/g, '');
		var Reg = new RegExp('<' +Type+ '(.*?)>', 'i');
		var Match = HTML.match(Reg);
		if (!Match) return false;

		var Attribute = Match[1];
		Attribute = Attribute.replace(/\\n/g, '_NewLine;');
		var Match = Attribute.match(/('.*?'|".*?")/g);
		for (var i = 0; i < Match.length; i++) {
			var Reg = new RegExp(Match[i].replace(/([\(\)\[\]\.\|\+\?\$\^\{\}\*\-])/g, '\\$1'));
			var Enc = encodeURIComponent(Match[i]);
			Enc = Enc.replace(/^\'([0-9]+)\'$/, '$1');
			Enc = Enc.replace(/^%22([0-9]+)%22$/, '$1');
			Attribute = Attribute.replace(Reg, Enc);
		}

		Attribute = Attribute.split(/\s/);
		var Eval = 'var DumpObject = {\n';
		var Cnt = 0;
		for (var i = 0; i < Attribute.length; i++) {
			Attribute[i] = Attribute[i].replace(/_NewLine%3B/g, '\\n');
			if (Attribute[i] && Attribute[i].match(/=/)) {
				Attribute[i] = Attribute[i].replace(/_NewLine;/g, '\n');
				var Code = Attribute[i].split(/=/);
				if (Cnt) Eval += ',\n';
				Eval += '\t' + Code[0] + ': ' + decodeURIComponent(Code[1]);
				Cnt++;
			}
		}
		Eval += '\n};';

		if (Cnt) {
			try {
				eval(Eval);
				//setTimeout("DumpObject = undefined;", 0);
				return DumpObject;
			}
			catch (Err) { alert(Err); }
		}
		else return false;
	},
	// End of Func

	LoaderSet: function(Mode) {
		MyBBS.LoadBar(Mode);

		document.onkeydown = function(Event) {
			if (!Event) Event = window.event;
			if ((Event.ctrlKey == true && Event.keyCode == 82) || (Event.keyCode == 116)) {
				DxHeart.PageReLoad();
				try {
					Event.keyCode = 0;
					Event.cancelBubble = true;
					Event.returnValue  = false;
				}
				catch (err) { return false; }
			}
		}
	},
	// End of Func

	BookMarkLoad: function(oParam) {
		var Location = location.href;
		var Param = Location.split(/#/);
		var Param1 = Param[1] || '';
		if (Param1) DxHeart.PageLoad(Param1);
		else DxHeart.PageLoad(oParam);
	},
	// End of Func

	PageReLoad: function() {
		if (DxHeart.LoadedType == 'Form') {
			var ObjPOST = {
				Mode: 'ReLoad',
				PFile: { value: DxHeart.LoadedPage },
				action: DxHeart.LoadedAction
			};
			DxHeart.AsyncPOST(ObjPOST);
		}
		else if (DxHeart.LoadedType == 'BBS') {
			window.open('javascript: location.reload();', 'HistoryForm');
		}
		else {
			DxHeart.PageLoad(DxHeart.LoadedPage);
		}
	},
	// End of Func

	PageLoad: function(PFile, Auto, IWin) {
		if (!PFile.match(/\-/)) PFile += '-';
		PFile = PFile.replace(/^[\-]+/, '');
		if (!PFile) PFile = 'Component::Display::Main-';

		if ((DxHeart.LoadedPage != PFile) || (Auto != 1)) {
			DxHeart.LoaderSet();
			var XML = new MY_XML();

			var Uri = PFile.match(/^([^\-]+)\-(.*?)$/) || new Array(null, PFile, '');
			var Param = Uri[2] || '';
			Param = Param.replace(/([^\w])PFile=(.*?)&/g, '$1');
			//DxHeart.SavedPage    = DxHeart.LoadedPage;
			//DxHeart.SavedParam   = DxHeart.LoadedParam;
			//DxHeart.SavedType    = DxHeart.LoadedType;
			DxHeart.LoadedParam = Param || '';
			DxHeart.LoadedPage  = PFile || '';
			DxHeart.LoadedPFile = Uri[1] || '';
			DxHeart.LoadedType = 'Page';
			DxHeart.KeepInner(DxHeart.LoadedPFile);

			XML.parameter = Param + '&';
			XML.Param('PFile', DxHeart.LoadedPFile);
			XML.Param('Exec', 1);
			//if (Auto) XML.parameter = DxHeart.LoadedParam;
			//else DxHeart.LoadedParam = XML.parameter;
			XML.AFunc("DxHeart.PageLoaded(XML, '" +DxHeart.LoadedPFile+ "', null, '" +IWin+ "', '" +Param+ "');");
			XML.Load('/', true);
			//KeepDisplay
		}
	},
	// End of Func

	AsyncPOST: function(TForm, IWin) {
		var Cnt = 0;
		var FElem = null;
		var XML = new MY_XML();
		var PFile  = '';
		var Action = '';
		var Param  = '';
		var NotLoad = 0;

		if (TForm.Mode == 'AutoLoad' || TForm.Mode == 'ReLoad') {
			if ((DxHeart.LoadedPage != TForm.PFile.value) || (TForm.Mode == 'ReLoad')) {
				var Msg = 'ÆäÀÌÁö°¡ ¸¸·áµÇ¾ú½À´Ï´Ù.\n\n';
				Msg += '¹°Ç°À» ±¸¸ÅÇÑ °æ¿ì Áßº¹ °Å·¡¸¦ ¹æÁöÇÏ±â À§ÇØ Ãë¼ÒÇÏ½Ã°í\n\n';
				Msg += '±×·¸Áö ¾ÊÀ¸¸é È®ÀÎÀ» Å¬¸¯ÇÏ¿© ´Ù½Ã Ç¥½ÃÇÏ½Ê½Ã¿À.';
				if (!confirm(Msg)) {
					DxHeart.Insert({
						NodeId:    Em.All('MainPage'),
						HTML:      'ÆäÀÌÁö°¡ ¸¸·áµÇ¾ú½À´Ï´Ù.',
						Append:    0
					});
					NotLoad = 1;
				}
			}

			Param = DxHeart.LoadedParam;
			PFile = TForm.PFile.value;
		}
		else {
			while (FElem = TForm.elements.item(Cnt++)) {
				if (FElem.name) {
					if (FElem.type == 'radio' || FElem.type == 'checkbox') {
						if (FElem.checked) {
							if (FElem.type == 'checkbox') {
								XML.Param(FElem.name, FElem.value ? FElem.value : 'on');
							}
							else XML.Param(FElem.name, FElem.value);
						}
					}
					else {
						XML.Param(FElem.name, FElem.value);
						if (FElem.name == 'PFile') PFile = FElem.value;
					}
				}
			}
			if (!PFile) PFile = 'Component::Display::Main';
			Param = XML.parameter;
		}
		
		if ((DxHeart.LoadedPage == PFile) && (TForm.Mode == 'AutoLoad')) {
			return false;
		}

		Action = TForm.action ? TForm.action : document.location.href.replace(/#(.*?)$/, '');
		if (TForm.method == 'get') {
			DxHeart.PageLoad(PFile + '-' + XML.parameter, null, IWin);
			return false;
		}

		//DxHeart.SavedType    = DxHeart.LoadedType;
		//DxHeart.SavedPage    = DxHeart.LoadedPage;
		//DxHeart.SavedParam   = DxHeart.LoadedParam;

		Param = Param.replace(/([^\w])PFile=(.*?)&/g, '$1');
		DxHeart.LoadedType   = 'Form';
		DxHeart.LoadedPage   = PFile;
		DxHeart.LoadedPFile  = PFile;
		DxHeart.LoadedParam  = Param;
		DxHeart.LoadedAction = Action;
		DxHeart.KeepInner(PFile);
		XML.parameter = Param;
		XML.Param('PFile', PFile);
		XML.Param('Exec', 1);

		DxHeart.LoaderSet();
		if (!NotLoad) {
			XML.AFunc("DxHeart.PageLoaded(XML, '" +PFile+ "', '" +Action+ "', '" +IWin+ "');");
			//if (PFile.match(/exec::mb.join$/i)) XML.Debug(Action); else
			XML.Load(Action, true);
		}
		else DxHeart.LoaderSet('OFF');
	},
	// End of Func


	/**************************************
		°Ô½ÃÆÇ ·Îµù
	**************************************/
	BBSComponent: function(Param) {
		Server.ExecName = "BBSComponent.dx";
		Server.BBSNode  = 'MainPage';
		MyBBS.Loader(Param);
		DxHeart.LoadedType   = 'BBS';
	},
	// End of Func

	/**************************************
		±×¸²ÀÚ »õÃ¢
	**************************************/
	IWinOpen: function(Component, Width, Height) {
		var IWindow = Em.All('ShadowIWindow');
		IWindow.innerHTML = '';
		IWindow.style.backgroundColor = '#FFFFFF';

		try {
			if (Width.match(/%/)) {
				Width = (document.body.scrollWidth / 100) * parseInt(Width.replace(/[^\d]/g));
			}
		}
		catch (Err) {}

		try {
			if (Height.match(/%/)) {
				Height = (document.body.scrollHeight / 100) * parseInt(Height.replace(/[^\d]/g));
			}
		}
		catch (Err) {}

		IWindow.style.width  = Width + 'Px';
		IWindow.style.height = Height + 'Px';
		DxHeart.PageLoad(Component, null, null, IWin);
		DxHeart.ShadowOpen();
	},
	// End of Func

	ShadowOpen: function(Mode) {
		var SWindow = Em.All('ShadowWindow');
		var GWindow = Em.All('ShadowWindowGuard');
		var DWindow = Em.All('ShadowWindowDisplay');
		var Width = document.body.scrollWidth || document.documentElement.scrollWidth;

		if (Mode == 'OFF') {
			SWindow.style.display = 'none';
			GWindow.style.display = 'none';
			DWindow.style.display = 'none';
		}
		else {
			SWindow.style.display = 'block';
			GWindow.style.display = 'block';
			DWindow.style.display = 'block';

			SWindow.style.position = 'absolute';
			SWindow.style.top = '0Px';
			SWindow.style.left = '0Px';
			SWindow.style.width = Width + 'Px';
			SWindow.style.height = '100%';
			SWindow.style.backgroundColor = '#000000';
			SWindow.style.filter = 'alpha(opacity=50)';
			SWindow.style.opacity = '.50';

			GWindow.style.position = 'absolute';
			GWindow.style.top = '0Px';
			GWindow.style.left = '0Px';
			GWindow.style.width = Width + 'Px';
			GWindow.style.height = '100%';
			GWindow.style.filter = 'alpha(opacity=0)';
			GWindow.style.opacity = '.0';

			DWindow.style.position = 'absolute';
			DWindow.style.top = '100Px';
			DWindow.style.left = '0Px';
			DWindow.style.width = Width + 'Px';
			DWindow.style.height = '100%';
			/*
			for (var i = 0; i <= 50; i++) {
				var Delay = i * 10;
				var Opacity = i * 1;
				setTimeout("Em.All('ShadowWindow').style.filter = 'alpha(opacity=" +Opacity+ ")';", Delay);
				setTimeout("Em.All('ShadowWindow').style.opacity = '." +Opacity+ "';", Delay);
			}
			*/
		}
	},
	// End of Func

	Layer: {
		Downed: 0,
		PointX: 0,
		PointY: 0,
		Left:   0,
		Top:    0,
		Names: new Array(),
		URIKeep: new Array(),
		LayerName: '',
		Count: 0,
		Index: 0,

		HTML: function(LayerName) {
			var HTML = ""+
			"<TABLE CELLSPACING='0' CELLPADDING='0' STYLE='DISPLAY: NONE;' ID='" +LayerName+ "' ONMOUSEDOWN=\"DxHeart.Layer.zIndex('" +LayerName+ "');\" ONMOUSEUP=\"DxHeart.Layer.Downed = 0;\">"+
			"<TR VALIGN='TOP'>"+
			"	<TD STYLE='BACKGROUND-COLOR: #FFFFFF; BORDER: 1Px SOLID #FFFFFF;'>"+
			"		<TABLE CELLSPACING='0' CELLPADDING='0' STYLE='BORDER: 1Px SOLID #000000;'>"+
			"		<TR HEIGHT='1'>"+
			"			<TD CLASS='Hand' STYLE='PADDING: 5Px; BORDER-BOTTOM: 1Px SOLID #888888; BACKGROUND-COLOR: #EEEEEE;' ID='" +LayerName+ "MoveHandle' ONMOUSEDOWN=\"DxHeart.Layer.Move.Set('" +LayerName+ "', event);\">"+
			"				<TABLE CELLSPACING='0' CELLPADDING='0' WIDTH='100%' HEIGHT='100%' STYLE='TABLE-LAYOUT: FIXED;'>"+
			"				<TR>"+
			"					<TD ID='" +LayerName+ "Title' NOWRAP></TD>"+
			"					<TD ALIGN='RIGHT' WIDTH='15'>"+
			"						<A HREF=\"javascript: DxHeart.Layer.Close('" +LayerName+ "');\">"+
			"						<IMG SRC='/JsBase/Data/ico.x-red.gif' BORDER='0' ALT='´Ý±â' /></A>"+
			"					</TD>"+
			"				</TR>"+
			"				</TABLE>"+
			"			</TD>"+
			"		</TR>"+
			"		<TR VALIGN='TOP'><TD STYLE='PADDING: 5Px;' ID='" +LayerName+ "Display'></TD></TR>"+
			"		</TABLE>"+
			"	</TD>"+
			"</TR>"+
			"<TR HEIGHT='10'><TD></TD></TR>"+
			"</TABLE>";
			DxHeart.Insert({
				NodeId:    Em.All('BasicLayer'),
				HTML:      HTML,
				Append:    1
			});

			var Layer = Em.All(LayerName);
			if (Layer) {
				var Len = DxHeart.Layer.Names.length;
				DxHeart.Layer.Names[Len] = LayerName;
				document.body.onmousemove = function(event) {
					DxHeart.Layer.Move.Go(DxHeart.Layer.LayerName, event);
				};
				return Layer;
			}
			else return false;
		},

		ReLoad: function(LayerName) {
			var URI = DxHeart.Layer.URIKeep[LayerName];
			DxHeart.Layer.Open(URI, LayerName, 'ReLoad');
		},

		ReLoadAll: function() {
			for (var Index in DxHeart.Layer.Names) {
				var Name = DxHeart.Layer.Names[Index];
				if (Em.All(Name).style.display == 'block') {
					DxHeart.Layer.ReLoad(DxHeart.Layer.Names[Index]);
				}
			}
		},

		Open: function(URI, LayerName, ReLoad) {
			DxHeart.Layer.URIKeep[LayerName] = URI;
			URI = URI.match(/^([^\-]+)\-(.*?)$/) || new Array(null, URI, '');


			var XML = new MY_XML();
			var URL   = URI[1];
			var Param = URI[2];

			var Layer = Em.All(LayerName);
			var LayerDisplay = Em.All(LayerName + 'Display');
			if (!Layer) {
				Layer = DxHeart.Layer.HTML(LayerName);
				LayerDisplay = Em.All(LayerName + 'Display');

				Layer.style.position = 'absolute';
				Layer.style.zIndex = ++DxHeart.Layer.Index;
				var Top  = document.body.scrollTop || document.documentElement.scrollTop;
				var Left = document.body.scrollLeft || document.documentElement.scrollLeft;

				var PositionTop  = 50 + ((DxHeart.Layer.Count % 5) * 20) + Top;
				var PositionLeft = 50 + (DxHeart.Layer.Count * 20) + Left;
				DxHeart.Layer.Count++;

				Layer.style.top  = PositionTop + 'Px';
				Layer.style.left = PositionLeft + 'Px';
				LayerDisplay.style.width  = '200Px';
				LayerDisplay.style.height = '300Px';
			}
			Layer.style.display  = 'block';

			DxHeart.Insert({
				NodeId:    Em.All(LayerName + 'Title'),
				HTML:      "¿äÃ»ÁßÀÔ´Ï´Ù<IMG SRC='/JsBase/Data/loader.dot.gif' />",
				Append:    0
			});
			XML.Param('PFile', URL);
			XML.Param('Exec', '1');
			XML.parameter += Param;
			XML.AFunc("DxHeart.Layer.Insert(XML, '" +LayerName+ "', '" +URL+ "', '" +ReLoad+ "');");
			XML.Load('/', true);
		},

		Insert: function(XML, LayerName, URL, ReLoad) {
			var Layer = Em.All(LayerName);
			var LayerDisplay = Em.All(LayerName + 'Display');
			var HTML = XML.XmlToHtml();

			var TITLE = (HTML.match(/<TITLE:([^>]+)>/i) || new Array(null, '·¹ÀÌ¾î Ã¢'))[1];
			var SIZE = HTML.match(/<SIZE:(\d+)x(\d+)>/i) || new Array(null, 200, 300);

			if (ReLoad != 'ReLoad') {
				LayerDisplay.style.width  = SIZE[1] + 'Px';
				LayerDisplay.style.height = SIZE[2] + 'Px';
			}

			// ·¹ÀÌ¾î Å¸ÀÌÆ² ÀÔ·Â
			DxHeart.Insert({
				NodeId:    Em.All(LayerName + 'Title'),
				HTML:      TITLE + (Server.Remote == 'LocalAdmin' ? ' - ' + URL : ''),
				Append:    0
			});

			// ·¹ÀÌ¾î ³»¿ë ÀÔ·Â
			DxHeart.Insert({
				NodeId:    Em.All(LayerName + 'Display'),
				HTML:      HTML,
				Append:    0
			});
			DxHeart.SubmitCatch();
		},

		Close: function(LayerName) {
			if (!LayerName) LayerName = DxHeart.Layer.LayerName
			Em.All(LayerName).style.display = 'none';
			Em.All(LayerName + 'Display').innerHTML = '';
			Em.All(LayerName + 'Title').innerHTML = '';
		},

		Move: {
			Set: function(LayerName, Event) {
				if (!Event) Event = window.event;
				var Layer = Em.All(LayerName);
				var MoveHandle = Em.All(LayerName + 'MoveHandle');
				MoveHandle.onselectstart = function() { return false; }
				MoveHandle.ondragstart   = function() { return false; }
				MoveHandle.oncontextmenu = function() { return false; }
				DxHeart.Layer.LayerName = LayerName;

				// ½ÃÀÛÁöÁ¡
				var Left = document.body.scrollLeft || document.documentElement.scrollLeft;
				var Top  = document.body.scrollLeft || document.documentElement.scrollTop;
				DxHeart.Layer.PointX = Event.clientX + Left;
				DxHeart.Layer.PointY = Event.clientY + Top;
				// ·¹ÀÌ¾î ½ÃÀÛÁöÁ¡
				DxHeart.Layer.Left = Format.Int(Layer.style.left);
				DxHeart.Layer.Top  = Format.Int(Layer.style.top);

				DxHeart.Layer.Downed = 1;
			},

			Go: function(LayerName, Event) {
				if (!Event) Event = window.event;
				if (!LayerName) return false;
				var Layer = Em.All(LayerName);
				var Which = Event.which || Event.button;
				if (Which != 1 && DxHeart.Layer.Downed == 1) DxHeart.Layer.Downed = 0;
				if (DxHeart.Layer.Downed != 1) return false;

				// ½ÃÀÛ ÁöÁ¡¿¡¼­ ¸î PointÀÌµ¿Çß³Ä¸¦ ±¸ÇØ¾ßÇÑ´Ù.
				var Left = document.body.scrollLeft || document.documentElement.scrollLeft;
				var Top  = document.body.scrollLeft || document.documentElement.scrollTop;
				var PointX = Event.clientX + Left;
				var PointY = Event.clientY + Top;
				Layer.style.left = (DxHeart.Layer.Left + (PointX - DxHeart.Layer.PointX)) + 'Px';
				Layer.style.top  = (DxHeart.Layer.Top  + (PointY - DxHeart.Layer.PointY)) + 'Px';
			}
		},

		zIndex: function(LayerName) {
			var Layer = Em.All(LayerName);
			Layer.style.zIndex = ++DxHeart.Layer.Index;
		}
	},
	// End of Func

	Insert: function(Obj) {
		if (Obj.Append) Obj.NodeId.innerHTML += Obj.HTML || '';
		else Obj.NodeId.innerHTML = Obj.HTML || '';
		Let.UseScript(Obj.HTML);
		DxHeart.SubmitCatch();

		clearTimeout(this.ImageCache.TimeoutSet);
		this.ImageCache.TimeoutSet = setTimeout("DxHeart.ImageCache.Cache();", 3000);
	},
	// End of Func

	ImageCache: {
		TimeoutSet: null,
		Create: function() {
			// ÀÌ¹ÌÁö Ä³½¬
			if (!window.ImgAutoCache) window.ImgAutoCache = new Array();
		},

		BlockType: function(TagName) {
			// ÀÌ¹ÌÁö ÀÔ·Â
			var Data = null;
			var Cnt = 0;

			while (Data = Em.Tags(TagName).item(Cnt++)) {
				if (Data.src) this.Block(Data.src);
				else if (Data.style.backgroundImage) {
					this.Block(Data.style.backgroundImage.replace(/url|\(|\)/, ''));
				}
			}
		},

		Block: function(Src) {
			if (!window.ImgAutoCache[Src]) {
				window.ImgAutoCache[Src] = new Image();
				window.ImgAutoCache[Src].src = Src;
			}
		},

		Cache: function() {
			this.Create();
			this.BlockType('BODY');
			this.BlockType('TABLE');
			this.BlockType('TD');
			this.BlockType('IMG');
			this.BlockType('INPUT');
			this.BlockType('DIV');
		}
	}
};

