/* 
 *   Widget Superclass WidgetBase
 *
 *   WidgetBase Å¬·¡½º´Â À§Á¬ÀÇ ÀÎ½ºÅº½º °ü¸®, ·¹ÀÌ¾Æ¿ô ¹× ·ÎÄÉÀÌ¼Ç, ÀÌº¥Æ® Ã³¸®
 *   DOM ElementÃ³¸®, CSS Ã³¸®µîÀÇ °øÅëÀûÀÌ°í ±âº»ÀÌ µÇ´Â ±â´ÉÀ» ±¸ÇöÇÏ°í ÀÖ½À´Ï´Ù.
 *   
 *   ¸ðµç ÇÁ·ÎÆÛÆ¼(ÇÔ¼ö,º¯¼ö)´Â SubclassingµÉ ÀÚ½Ä À§Á¬µé¿¡°Ô »ó¼ÓµÇ°í ÀçÁ¤ÀÇ µÇ¸é¼­
 *   Ä¿½ºÅÒ¸¶ÀÌÂ¡µÈ À§Á¬À» °³¹ßÇÒ¼ö ÀÖ½À´Ï´Ù.
 * 
 *   CSS1/CSS2, DOM1/2/3 ±×¸®°í DOCTYPE html4.01 loose/strict XHTML
 *   °ú Gecko°è¿­ ºê¶ó¿ìÀú(mozila, Opera9)¹× IE6,7¿¡¼­ Å×½ºÆ® µÇ¾ú½À´Ï´Ù.
 *   (safari¿¡¼­´Â 2008/03/05 ÇöÀç ºÎºÐÀûÀ¸·Î ¿À·ù°¡ ³³´Ï´Ù.)
 *       
 */

var WidgetBase = Class.create();
WidgetBase.zIndex = 0;
WidgetBase.zIndexFloat = 0xFFFF;
WidgetBase.countInstance = 0;
WidgetBase.prototype =
{
	className: "" ,
	instanceName: "" ,
	timerIDList: null,
	widgetParent: null,
	width: 0,
	height: 0,
	
	constructorFunction: function()
	{
		this.timerIDList = new List();
	},
	getWidgetName: function()
	{
		return this.instanceName;   
	},
	$EID_STR: function(id)
	{
		return (this.instanceName + id);
	},
	$PE: function()
	{
		if(arguments[0] == null)
		{
			arguments = new Array();
			arguments[0] = "";
		}
		
		if(typeof arguments[0] == "string")
		{
			arguments[0] = this.instanceName + arguments[0];
		}

		return $PE.apply(this, arguments);
	},
	$E: function()
	{
		var id = (arguments[0] == null) ? "" : arguments[0];
		return $E(this.instanceName + id);
	},
	$CSS: function()
	{
		var parameters = new Array();
		parameters[0] = this.className;
		for(i = 0; i < arguments.length; i++)
		{
			parameters[i+1] = arguments[i];
		}
		
		return $CSS.apply(this, parameters);
	},
	$EP: function()
	{
		if(typeof arguments[0] == "string")
		{
			arguments[0] = this.instanceName + arguments[0];
		}
		
		return $EP.apply(this, arguments);
	},
	$ES: function()
	{
		if(typeof arguments[0] == "string")
		{
			arguments[0] = this.instanceName + arguments[0];
		}
		
		return $ES.apply(this, arguments);
	},
	//À§Á¬ÀÇ ±âº» CSS class¸¦ ¹Ù²Ù±â À§ÇØ ÀÌ ÇÔ¼ö¸¦ ¿À¹ö¶óÀÌµå ÇÕ´Ï´Ù.
	preCreate: function()
	{
		this.className = (arguments[0] == null || arguments[0] == "") ? "wafx_widgetbase" : arguments[0];
	},
	create: function(parent, rc, el, className)
	{
		this.preCreate(className);

		this.instanceName = this.className + "_" + (++WidgetBase.countInstance);
		this.widgetParent = (parent == null) ? window : parent;
				
		var div = null;
		
		if(el == null)
		{
			div = $NE(null, BROWSERSAFE_ELEMENTSTRING("div"), this.instanceName, this.className);
		}
		else
		{
			el.innerHTML = "<div id='" + this.instanceName + "' class='" + this.className + "'></div>";
			div = this.$E();
		}
		
		if(rc != null)
		{
			/* À§Á¬ÀÇ metrics¸¦ Á¤ÀÇÇÕ´Ï´Ù. */
			var width  = rc.width();
			var height = rc.height();
			if(width < 0)
			{
				width *= (-1);
				this.$ES("", "right", INT2PXSTR(rc.right));
			}
			else
			{
				this.$ES("", "left", INT2PXSTR(rc.left));
			}
		
			if(height < 0)
			{
				height *= (-1);
				this.$ES("", "bottom", INT2PXSTR(rc.bottom));
			}
			else
			{
				this.$ES("", "top", INT2PXSTR(rc.top));
			}

			width  -= PXSTR2INT(this.$CSS("borderLeftWidth"));
			width  -= PXSTR2INT(this.$CSS("borderRightWidth"));
			height -= PXSTR2INT(this.$CSS("borderTopWidth"));
			height -= PXSTR2INT(this.$CSS("borderBottomWidth"));
			
			this.width = width;
			this.height = height;
		}

		div.widget = this;
		this.$ES("", "zIndex", ++WidgetBase.zIndex);
		this.$ES("", "display", "none");
		
		//Window Àü¿ª°´Ã¼ÀÇ Event Listener(ÀÌº¥Æ® ÇÚµé·¯)¸¦ Ãß°¡ÇÕ´Ï´Ù
		WINDOWEVENT_LISTENER_ADD(WINDOWEVENT_RESIZE, this);
		WINDOWEVENT_LISTENER_ADD(WINDOWEVENT_MOUSEDOWN, this);
		
		//»ý¼ºÈÄ, Á¤ÀÇµÈ ÀÛ¾÷À» ½ÇÇàÇÏ±â À§ÇØ ÇÊ¿äÇÕ´Ï´Ù. »ó¼Ó ¹Þ´Â À§Á¬Àº ÀÌ ¸Þ¼Òµå¿¡ ÀÛ¾÷À» Á¤ÀÇÇØ ÁÖ°Å³ª create¸¦ override ÇÏ¼¼¿ä.
		this.onCreate();
		
		//À§Á¬ÀÇ Å©±â¸¦ Àç¼³Á¤ÇÕ´Ï´Ù.
		this.onResize();
		
		//À§Á¬À» º¸ÀÌ°Ô ÇÕ´Ï´Ù.
		this.onShow();
	},
	//À§Á¬ÀÇ RECT¸¦ ±¸ÇÕ´Ï´Ù.
	getWidgetRect: function()
	{
		return GetElementRect(this.$E());
	},
	// ÀÌ À§Á¬ °´Ã¼¸¦ Á¦°ÅÇÕ´Ï´Ù.
	// ½ÇÁ¦ Visibity¿Í ¸Þ¸ð¸® Clean-Up ±îÁö °°ÀÌ ¼öÇàµË´Ï´Ù.
	destroy: function()
	{
		if(this.timerIDList.size() > 0)
		{
			var item = this.timerIDList.removeTail();
			clearInteval(item.idInterval);
		}
		 
		WINDOWEVENT_LISTENER_DELETE(this);
		
		//DOM element ¸¦ ¸í½ÃÀûÀ¸·Î Á¦°ÅÇÕ´Ï´Ù. - Áß¿äÇÑ ÀÛ¾÷ÀÔ´Ï´Ù.
		//ÀÌ ÀÛ¾÷À» ÆÐ¾²ÇÏ°Ô µÇ¸é, IE¿¡¼­ ºÎºÐÀûÀÎ MEMORY LEAKÀÌ ¹ß»ýÇÕ´Ï´Ù.
		//ÀÌ ¹æ½ÄÀº DOM STANDARD°¡ ¾Æ´ÏÁö¸¸, ´õ È¿°úÀûÀ¸·Î GC°¡ ÀÛµ¿ÇÕ´Ï´Ù.
		this.$E().innerHTML = ""; 
		$RE(this.$E());
		//////////////////////////////////////////////////////////////		
			
		//°´Ã¼ÀÇ Properties(ÇÔ¼ö¿Í º¯¼ö)µéÀ» ¸í½ÃÀû(delete)À¸·Î Á¦°ÅÇÕ´Ï´Ù.
		for(prop in this)
		{
			delete this[prop];
		}
	},
	//À§Á¬ ³»ºÎ Å¸ÀÌ¸Ó ÀÌº¥Æ®¸¦ ½ÃÀÛÇÕ´Ï´Ù.
	setTimer: function(nIDEvent, nElapse)
	{
		var wnd = this;
		var timer_handler = function()
		{
			wnd.onTimer(nIDEvent, null);
		}
		
		var intervalID = setInterval(timer_handler, nElapse);
		
		this.timerIDList.addTail( {idEvent: nIDEvent, idInterval: intervalID} ); 
	},
	//À§Á¬ ³»ºÎ Å¸ÀÌ¸Ó ÀÌº¥Æ®¸¦ ÁßÁö ½ÃÅµ´Ï´Ù.
	killTimer: function(nIDEvent)
	{
		var count = this.timerIDList.size();
		for(var i = 0; i < count; i++)
		{
			var item = this.timerIDList.getAt(i);
			if(item.idEvent == nIDEvent)
			{
				clearInterval(item.idInterval);
				this.timerIDList.removeAt(i);
				return;
			}
		}
	},
	//À§Á¬ drag¸¦ ½ÃÀÛÇÒ ¼ö ÀÖ½À´Ï´Ù.
	dragStart: function()
	{
		window.dragObject = this.$E();
		if(window.dragObject.setCapture) { window.dragObject.setCapture(); }
		
		var mouseX = 0;
		var mouseY = 0;

		if(BROWSERSAFE_EVENT.pageX || BROWSERSAFE_EVENT.pageY)
		{
			mouseX = BROWSERSAFE_EVENT.pageX;
			mouseY = BROWSERSAFE_EVENT.pageY;
		}
		else
		{
			if(document.documentElement.clientWidth == 0)
			{
				mouseX = BROWSERSAFE_EVENT.clientX+document.body.scrollLeft - document.body.clientLeft + 2;
				mouseY = BROWSERSAFE_EVENT.clientY + document.body.scrollTop  - document.body.clientTop + 2;		
			}
			else
			{
				mouseX = BROWSERSAFE_EVENT.clientX+document.documentElement.scrollLeft - document.documentElement.clientLeft + 2;
				mouseY = BROWSERSAFE_EVENT.clientY + document.documentElement.scrollTop  - document.documentElement.clientTop + 2;		
			}
						
		}
		
		var ptEl = GetElmentLeftTop(window.dragObject);
		window.ptMouseOffset.x = mouseX - ptEl.x;
		window.ptMouseOffset.y = mouseY - ptEl.y;
	},
	//
	// Àü¿ª°´Ã¼ windowÀÇ  onresize ÀÌº¥Æ® ¹ß»ý½Ã ½ÇÇàµË´Ï´Ù.
	// ¸ðµç À§Á¬Àº ÀÚµ¿À¸·Î ÀÌ ÀÌº¥Æ® ÇÚµé·¯¿¡¼­ Àü¿ª°´Ã¼ windowÀÇ  onresize ÀÌº¥Æ®¿¡
	// ¹ÝÀÀÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù. 
	onWindowResized: function(x,y){},
	// Àü¿ª°´Ã¼ window.documentÀÇ  onmousedown ÀÌº¥Æ® ¹ß»ý½Ã ½ÇÇàµË´Ï´Ù.
	// ¸ðµç À§Á¬Àº ÀÚµ¿À¸·Î ÀÌ ÀÌº¥Æ® ÇÚµé·¯¿¡¼­ Àü¿ª°´Ã¼ windowÀÇ document.onmousedown ÀÌº¥Æ®¿¡
	// ¹ÝÀÀÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù. 
	onWindowMouseDown: function(button, pt){},
	//À§Á¬ÀÇ Å©±â¸¦ Àç¼³Á¤ÇÕ´Ï´Ù. 
	onResize: function()
	{
		this.$ES("", "width", INT2PXSTR(this.width));
		this.$ES("", "height", INT2PXSTR(this.height));
	}, 
	onShow: function()
	{
		this.$ES("", "display", "");
	},
	//createÈÄ ÀÌº¥Æ® 
	onCreate: function(){},
	//Å¸ÀÌ¸Ó ÀÌº¥Æ® 
	onTimer: function(nIDEvent){}
}




/*
Window Widget Class

¹Ú½º ·¹ÀÌ¾î¿¡ Å¸ÀÌÆ²¹Ù¿Í ½Ã½ºÅÛ¹öÆ°(WIN32 API¿¡¼­ ¸»ÇÏ´Â)°ú Æ²¶óÀÌ¾ðÆ® ¿µ¿ªÀ¸·Î
±¸¼ºµÈ À©µµ¿ì¸¦ ±¸ÇöÇÕ´Ï´Ù.
Å¬¶óÀÌ¾ðÆ® ¿µ¿ªÀº »õ·Î Ãß°¡µÇ´Â onRenderClient¿¡¼­
HTML°ú ´Ù¸¥ widgetÀ¸·Î ±¸¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. 
*/
var WindowWidget = Class.extend(WidgetBase);
WindowWidget.prototype.constructorFunction = function()
{
	this.overlayID = null,
	this.handlerAfter = null;
	
	this.windowName = "";
	this.type = 0xFFFF;
	this.images = [];
}
WindowWidget.prototype.create = function(wndName/*title*/, rc, type)
{
	this.windowName = ((wndName == null) ? "" : wndName);
	if(rc == null){ rc = new Rect(0, 0, 0, 0); }
	this.type &= ( (type == null) ? 0 : type);

	//windowÀÇ ³ôÀÌ´Â Å¬¶óÀÌ¾ðÆ® ¿µ¿ª ·»´õ¸µ¿¡¼­ °áÁ¤µË´Ï´Ù.
	rc.bottom = rc.top;
	
	WidgetBase.prototype.create.call(this, window, rc, null/*posite ¿¤·¯¸ÕÆ®´Â ÇÊ¿ä¾ø½À´Ï´Ù.*/, "wafx_widget_window");
}
//Modal·Î º¸ÀÌ°Ô ÇÕ³ª´Ù.
WindowWidget.prototype.doModal = function()
{
 	//modal¸¦ ±¸ÇöÇÏ±âÀ§ÇØ overlay layer¸¦ »ý¼ºÇÕ´Ï´Ù. (LightBox[R]¿Í °°Àº ±¸Çö¹æ½ÄÀÔ´Ï´Ù.)
	WidgetBase.countInstance++;
		
	var overlayClassName = "wafx_modal_overlay";
	this.overlayID = overlayClassName + "_" + WidgetBase.countInstance;
	
	elOverlay = $NE(null, BROWSERSAFE_ELEMENTSTRING("div"), this.overlayID, overlayClassName);

	//z-index¸¦ floatÇüÀ¸·Î ¼¼ÆÃÇØ¾ßÇÕ´Ï´Ù.
	$ES(elOverlay, "zIndex", WidgetBase.zIndexFloat++);
	
	var width = (document.documentElement.clientWidth == 0) ? document.documentElement.scrollWidth : document.body.scrollWidth;		
	var height = (document.documentElement.clientHeight == 0) ? document.documentElement.scrollHeight : document.body.scrollHeight;		

	//$ES(elOverlay, "width", INT2PXSTR(width));
	//$ES(elOverlay, "height", INT2PXSTR(height));
		
	WidgetBase.prototype.create.call(this, window, null, null, "wafx_widget_window");
}
WindowWidget.prototype.closeWindow = function()
{
	this.onCloseWindow();
	
	if(this.overlayID != null)
	{
		$RE(this.overlayID);
	}

	//ºÎ¸ð Å¬·¡½ºÀÇ destroy·Î À§Á¬À» Á¦°ÅÇÕ´Ï´Ù.
	this.destroy();	
}
WindowWidget.prototype.endDialog = function()
{
	var result = arguments[0];
	
	//ºÎ¸ð°¡ °á°úÃ³¸®¸¦ ¿øÄ¡ ¾ÊÀ¸¸é ¸Þ¼¼Áö¹Ú½º¸¦ ´Ý°í ¸®ÅÏ ÇÕ´Ï´Ù.
	if(typeof this.handlerAfter != "function")
	{
		this.closeWindow();
		return;	
	}
	
	//ºÎ¸ðÀÇ °á°úÃ³¸® ÇÚµé·¯¸¦ ½ÇÇàÇÕ´Ï´Ù.
	this.handlerAfter.call(this.widgetParent, result);
	
	//ÀÌ À©µµ¿ì¸¦ ´Ý½À´Ï´Ù.
	this.closeWindow();
}
WindowWidget.prototype.onCreate = function()
{
	//ÀÌ¹ÌÁö Ä³½Ã
	this.images["btnClose_out"] =  new Image();
	this.images["btnClose_out"].src = "/wafxlib/images/btn_close_mouseout.gif";
	this.images["btnClose_over"] = new Image();
	this.images["btnClose_over"].src = "/wafxlib/images/btn_close_mouseover.gif";
	
	//Å¸ÀÌÆ²¹Ù ·»´õ¸µ	
	this.$E().innerHTML = "<div class='window' id='" + this.$EID_STR("window") + "'>" + 
						  "<div class='titlebar' id='" + this.$EID_STR("titlebar") + "'><h1 id='" + this.$EID_STR("title") + "'><NOBR>" + this.windowName + "</NOBR></h1><img src='" + this.images["btnClose_out"].src + "' id='" + this.$EID_STR("btnClose") + "'></div>" + 
						  "<div class='client' id='" + this.$EID_STR("client")+ "'></div>" + 
						  "</div>";


	//Å¸ÀÌÆ²¿µ¿ª ¸¶¿ì½º ÀÌº¥Æ®¸¦ ¸ÅÇÎÇÕ´Ï´Ù
	
	//WAFX_EVENT_MAP(WindowWidget)
	//{
	ON_EVENTMOUSE(MOUSEOVER, this.$EID_STR("btnClose"), "onCloseBtnMouseOver");
	ON_EVENTMOUSE(MOUSEOUT, this.$EID_STR("btnClose"), "onCloseBtnMouseOut");
	ON_EVENTMOUSE(MOUSECLICK, this.$EID_STR("btnClose"), "onClose");
	ON_EVENTMOUSE(MOUSEDOWN, this.$EID_STR("title"), "onTitleBarMouseDown");
	//}WAFX_EVENT_MAP
	
	// Å¬¶óÀÌ¾ðÆ® ¿µ¿ªÀ» ·»´õ¸µ ÇÕ´Ï´Ù.
	this.onRenderClient(this.$E("client"));

	//z-index¸¦ floatÇüÀ¸·Î ¹Ù²ã¼­ Ç×»ó Å¾À» À¯ÁöÇÏµµ·Ï ÇÕ´Ï´Ù.
	this.$ES("", "zIndex", WidgetBase.zIndexFloat++);
		

	//ºÎ¸ð Å¬·¡½º(WidgetBase)ÀÇ µðÆúÆ® Ã³¸®
	WidgetBase.prototype.onCreate.call(this);
}
WindowWidget.prototype.onRenderClient = function()
{
}
WindowWidget.prototype.onCloseWindow = function()
{
}
WindowWidget.prototype.onShow = function()
{
	WidgetBase.prototype.onShow.call(this);

	//focus¸¦ ÀÌ À§Á¬¿¡°Ô ÁÝ´Ï´Ù.
	this.$E().focus();
}
WindowWidget.prototype.onResize = function()
{
	WidgetBase.prototype.onResize.call(this);

	//Å¸ÀÌÆ²¹Ù Å¸ÀÌÆ² À§Ä¡¸¦ ÀçÁ¶Á¤ ÇÕ´Ï´Ù.
	var width = (this.width >= 32) ? this.width-32 : 0;
	this.$ES("title", "width", INT2PXSTR(width));

	this.$ES("", "backgroundColor", "#D5D7DF");
}
WindowWidget.prototype.onResizeWindow = function(x, y)
{
	if(this.overlayID == null){ return; }
	 
	if(PXSTR2INT($ES(this.overlayID, "width")) != x)
	{
		$ES(this.overlayID, "width", INT2PXSTR(x));
	}

	if(PXSTR2INT($ES(this.overlayID, "height")) != y)
	{
		$ES(this.overlayID, "height", INT2PXSTR(y));
	}
}
WindowWidget.prototype.onTitleBarMouseDown = function()
{
	this.dragStart();
	return false;	
}
WindowWidget.prototype.onCloseBtnMouseOut = function()
{
	this.$EP("btnClose", "src", this.images["btnClose_out"].src);
}
WindowWidget.prototype.onCloseBtnMouseOver = function()
{
	this.$EP("btnClose", "src", this.images["btnClose_over"].src);
}
WindowWidget.prototype.onClose = function()
{
	//¸®ÅÏÃ³¸®¸¦ ÇØ¾ßÇÏ´Â °æ¿ìÀÔ´Ï´Ù.
	if(this.handlerAfter != null)
	{
		this.endDialog(IDCANCEL);
	}
	//º¸Åë À©µµ¿ìÀÔ´Ï´Ù.
	else
	{
		this.closeWindow();
	}
}



/*
MessageBox Widget Class

ÀÚ¹Ù½ºÅ©¸³Æ® ³×ÀÌÆ¼ºê ÇÔ¼ö confirm(), alert()¶Ç´Â window°´Ã¼ÀÇ showModal()ÀÇ
·¹ÀÌ¾î¹æ½ÄÀÇ ±¸ÇöÆÇ widgetÀÔ´Ï´Ù. ±âº»ÀûÀ¸·Î modal¸¦ Áö¿øÇÏ¸ç ´Ù¾çÇÑ ¸Þ¼¼Áö¹Ú½ºÀÇ
Å¸ÀÔÀ» Áö¿øÇÕ´Ï´Ù. win32API MessageBox¸¦ ¸¹ÀÌ Èä³»³»¾î ±¸ÇöµÇ¾ú½À´Ï´Ù.
*/
var IDOK     = 0;
var IDCANCEL = 1;
var IDRETRY  = 2;
var IDYES    = 3;
var IDNO     = 4;

var MB_OK          = 0x0001;
var MB_OKCANCEL    = 0x0002;
var MB_RETRYCANCEL = 0x0004;
var MB_YESNO       = 0x0008;
var MB_TYPEMASK    = 0x000F;

var MessageBoxWidget = Class.extend(WindowWidget);
MessageBoxWidget.prototype.constructorFunction = function(title, message, type, handlerAfter)
{
	this.windowName = title;
	this.message = message;
	this.handlerAfter = handlerAfter;
	
	this.typeMB = type;
	this.imageButtons = [];
	this.idsBtn = ["btnConfirm", "btnCancel", "btnRetry", "btnYes", "btnNo"];
}
MessageBoxWidget.prototype.onRenderClient = function()
{
	var elClient = arguments[0];
	
	//Å¬¶óÀÌ¾ðÆ® ¿µ¿ª ·»´õ¸µ	
	elClient.innerHTML = "<p class='message' id='" + this.$EID_STR("message")+ "'></p><div class='buttons' id='" + this.$EID_STR("buttons") + "'></div>"

	//¸Þ¼¼Áö°¡ ½ÇÁ¦ º¸¿©Áö´Â ±æÀÌ(pixel°ª)¿¡ ¸ÂÃç ¸Þ¼¼Áö¹Ú½ºÀÇ ³Êºñ¿Í ³ôÀÌ¸¦ Á¶Á¤ÇÕ´Ï´Ù.
	
	this.message = this.message.replace(/\r\n/g, "<br>");
	
	var lines = this.message.split("<br>");
	var width = 200;
	var countLine = lines.length;
	for(var i = 0; i < countLine; i++)
	{
		var pixel = pixelRuller.measureTextPixel("client", lines[i]);
		if(width < pixel)
		{
			width = pixel;
		}
	}

	//À©µµ¿ìÀÇ Å©±â Àç¼³Á¤	
	this.width = width+20;
	//this.$ES("", "width", INT2PXSTR(this.width));

	//Áß¾Ó¿¡ À§Ä¡ÇÏ±â À§ÇÑ ´ë·«Àû ³ôÀÌ¸¦ ±¸ÇÕ´Ï´Ù.
	var height = countLine*20+100-100;

	// ºê¶ó¿ìÀú ºäÆ÷Æ®ÀÇ Áß¾Ó¿¡ À§Ä¡ ½ÃÅµ´Ï´Ù
	var left = 0;
	var top  = 0;
	if(document.documentElement.clientWidth == 0)
	{
		left = document.body.scrollLeft + (document.body.clientWidth - this.width)/2;
		top  = document.body.scrollTop  + (document.body.clientHeight - height)/2;
	}
	else
	{
		left = document.documentElement.scrollLeft + (document.documentElement.clientWidth - this.width)/2;
		top  = document.documentElement.scrollTop + (document.documentElement.clientHeight - height)/2;
	}
	
	$ES(this.$E(), "top", INT2PXSTR(top));
	$ES(this.$E(), "left", INT2PXSTR(left));
	
	//¸Þ¼¼Áö ·»´õ¸µ~
	this.$E("message").innerHTML = this.message;

							  
	//¹öÆ° ·»´õ¸µ~
	var countButton = 2;
	var type = this.typeMB & MB_TYPEMASK;
	if(type == MB_OKCANCEL)
	{
		this.$E("buttons").innerHTML = "<img class='messagebox_button' id='" + this.$EID_STR("btnConfirm") + "'><img class='messagebox_button' id='" + this.$EID_STR("btnCancel") + "'>";
	}
	else if(type == MB_RETRYCANCEL)
	{
		this.$E("buttons").innerHTML = "<img class='messagebox_button' id='" + this.$EID_STR("btnRetry") + "'><img class='messagebox_button' id='" + this.$EID_STR("btnCancel") + "'>";
	}
	else if(type == MB_YESNO)
	{
		this.$E("buttons").innerHTML = "<img class='messagebox_button' id='" + this.$EID_STR("btnYes") + "'><img class='messagebox_button' id='" + this.$EID_STR("btnNo") + "'>";
	}
    else
    {
		this.$E("buttons").innerHTML = "<img class='messagebox_button' id='" + this.$EID_STR("btnConfirm") + "'>";
		countButton = 1;
    }

	var countIdsBtn = this.idsBtn.length;
	for(var i = 0; i < countIdsBtn; i++)
	{
		if(this.$E(this.idsBtn[i]))
		{
			//¹öÆ° ÀÌ¹ÌÁö¸¦ Ä³½ÃÇÕ´Ï´Ù.	
			this.imageButtons[this.idsBtn[i]] = new Image();
			this.imageButtons[this.idsBtn[i]].src = "/wafxlib/images/" + this.idsBtn[i] + ".gif";
			this.imageButtons[this.idsBtn[i]+"_on"] = new Image();
			this.imageButtons[this.idsBtn[i]+"_on"].src = "/wafxlib/images/" + this.idsBtn[i] + "_on.gif";
			//µðÆúÆ® ¹öÆ°ÀÌ¹ÌÁö¸¦ ·ÎµùÇÕ´Ï´Ù.			
			this.$EP(this.idsBtn[i], "src", this.imageButtons[this.idsBtn[i]].src);
			//¹öÆ° ÀÌº¥Æ® ¸ÊÇÎÀ» ÇÕ´Ï´Ù.
			//WAFX_EVENT_MAP(MessageBoxWidget)
			//{
			ON_EVENTMOUSE(MOUSEOVER, this.$EID_STR(this.idsBtn[i]), "onBtnMouseOver");
			ON_EVENTMOUSE(MOUSEOUT, this.$EID_STR(this.idsBtn[i]), "onBtnMouseOut");
			ON_EVENTMOUSE(MOUSECLICK, this.$EID_STR(this.idsBtn[i]), "onBtnClicked");
			//}WAFX_EVENT_MAP
		}
	}
	
	//¹öÆ°À§Ä¡ °áÁ¤
	var widthButton = PXSTR2INT($CSS("messagebox_button", "width")) + PXSTR2INT($CSS("messagebox_button", "paddingLeft")) + PXSTR2INT($CSS("messagebox_button", "paddingRight")) + PXSTR2INT($CSS("messagebox_button", "borderLeftWidth")) + PXSTR2INT($CSS("messagebox_button", "borderRightWidth")) + PXSTR2INT($CSS("messagebox_button", "marginLeft"));
	var paddingLeft = (this.width - countButton*widthButton) / 2 - PXSTR2INT($CSS("messagebox_button", "marginLeft"));
	this.$ES("buttons", "paddingLeft", INT2PXSTR(paddingLeft));
}
MessageBoxWidget.prototype.onBtnMouseOver = function()
{
	var id = arguments[0].id.replace(this.instanceName, "");
	$EP(arguments[0], "src", this.imageButtons[id+"_on"].src);
}
MessageBoxWidget.prototype.onBtnMouseOut = function()
{
	var id = arguments[0].id.replace(this.instanceName, "");
	$EP(arguments[0], "src", this.imageButtons[id].src);
}
MessageBoxWidget.prototype.onBtnClicked = function()
{
	var id = arguments[0].id.replace(this.instanceName, "");
	
	var index = 0;
	count = this.idsBtn.length;
	for(var i = 0; i < count; i++)
	{
		if(this.idsBtn[i] == id)
		{
			index = i;
			break;
		}
	}
	
	this.endDialog(index);
}

/*
 *  MessageBox ÇÔ¼ö¸¦ Á¤ÀÇÇÕ´Ï´Ù.
 */
MessageBox = function(title, message, type, handler) 
{
	var msgBox = new MessageBoxWidget(title, message, type, handler);
	msgBox.doModal();
//	var msgBox = new WindowWidget();
//	msgBox.create(title, new Rect(200, 200, 400, 500), 0);

}


/*
select(ÄÞº¸¹Ú½º) Widget Class 

Æû¿ä¼ÒÀÎ input type=select ÀÇ ·¹ÀÌ¾î ±¸ÇöÆÇ WidegtÀÔ´Ï´Ù.
µ¿ÀÛ¹æ½ÄÀº °°À¸¸ç UIÃø¸é¿¡¼­ À¯¿¬¼º°ú ÀÏ°ü¼º(¸ðµç ºê¶ó¿ìÀú¿¡¼­ °°Àº¸ð½À)
À» °¡Áý´Ï´Ù.
*/
var SelectWidget = Class.extend(WidgetBase);
SelectWidget.NM_SELECTCHANGED = 1;
SelectWidget.NM_USER = 100;
SelectWidget.prototype.constructorFunction = function()
{
	this.curSel = -1;
	this.drawSel = -1;
	this.hitTest = false;
}
//WidgetBase::create()¸¦ overrideÇØ¼­ ÀçÁ¤ÀÇ ÇÕ´Ï´Ù.
SelectWidget.prototype.create = function(p, w, h, el)
{
	// ºÎ¸ð Å¬·¡½º WidgetBaseÀÇ µðÆúÆ® create	
	WidgetBase.prototype.create.call(this, p, new Rect(0, 0, w-1, h-1), el, "wafx_widgetselect");
}
SelectWidget.prototype.getCurSel = function(index)
{
	return this.curSel;
}
SelectWidget.prototype.getEditor = function()
{
	return this.$E('input');	
}
SelectWidget.prototype.getEditText = function()
{
	return this.$EP("input", "value");
}
SelectWidget.prototype.getLBText = function(index)
{
	var ul = this.$E("sellist");
	var lis = ul.childNodes;
	//Ragnge Ã¼Å©
	if(index < 0 || index >= lis.length) { return null; }
	
	return lis[index].innerHTML;	
}
SelectWidget.prototype.setCurSel = function(index)
{
	var ul = this.$E("sellist");
	var lis = ul.childNodes;

	//¸®½ºÆ® range ¿À·ù
	if(index < 0 || index > lis.length - 1)
	{
		return;
	}
	
	this.curSel = index;
	this.$E("input").value = lis[index].innerHTML;
}
SelectWidget.prototype.selectString = function(text)
{
	var ul = this.$E("sellist");
	var lis = ul.childNodes;

	var curSelText = (this.curSel >=0) ? lis[this.curSel].innerHTML : "";	
	if(curSelText == text)
	{
		return;
	}

	var length = lis.length;
	for(var i = 0; i < length; i++)
	{
		if(lis[i].innerHTML == text)
		{
			this.curSel = i;
			this.$E("input").value = text;
			break;
		}		
	}

	this["onSelectChanged"]();
}
SelectWidget.prototype.addData = function(data)
{
	var texts = data.split("\r\n");
	var length = texts.length;
	
	for(var i = 0; i < length; i++)
	{
		this.addString(texts[i]);
	}
}
SelectWidget.prototype.addString = function(text)
{
	var el = $NE(this.$E("sellist"), BROWSERSAFE_ELEMENTSTRING('li'), null, "u");
	el.style.width = INT2PXSTR(PXSTR2INT(this.$ES("sellist", "width")) - PXSTR2INT($CSS("wafx_widgetselect-listbox "+BROWSERSAFE_ELEMENTSTRING("ul ")+BROWSERSAFE_ELEMENTSTRING("li"), "paddingLeft")));
	el.innerHTML = text;

	//WAFX_EVENT_MAP(SelectWidget)
	//{	
	ON_EVENTMOUSE(MOUSEOVER, el, "onItemMouseOver");
	ON_EVENTMOUSE(MOUSECLICK, el, "onItemClicked");
	//}WAFX_EVENT_MAP
}
SelectWidget.prototype.showList = function(on)
{
	if(on == false)
	{
		this.$ES("listbox", "display", "none");
		this.$E("input").focus();
	}
	else
	{
		var ul = this.$E("sellist");
		var lis = ul.childNodes;

		var length = lis.length;
		for(var i = 0; i < length; i++)
		{
			lis[i].className = (i == this.curSel) ?  "s" : "u";
		}		
		
		this.drawSel = this.curSel;
		this.$ES("listbox", "display", "");
		this.$ES(this.$PE("listbox"), "zIndex", ++WidgetBase.zIndex)
		this.$E("input").focus();
		
		this.hitTest = true;
	}	
}
SelectWidget.prototype.onInputMouseOut = function()
{
	this.hitTest = false;
}
SelectWidget.prototype.onListMouseOut = function()
{
	this.hitTest = false;
}
SelectWidget.prototype.onSelButtonMouseOut = function()
{
	this.hitTest = false;
}
SelectWidget.prototype.onSelButtonMouseOver = function()
{
	this.hitTest = true;
}
SelectWidget.prototype.onItemClicked = function()
{
	this.selectString(arguments[0].innerHTML);
	this.$ES("listbox", "display", "none");
}
SelectWidget.prototype.onItemMouseOver = function()
{
	this.hitTest = true;
	
	var ul = this.$E("sellist");
	var lis = ul.childNodes;

	if(this.drawSel >= 0)
	{
		lis[this.drawSel].className = "u";	
	}
	
	var length = lis.length;
	for(var i = 0; i < length; i++)
	{
		if(lis[i] == arguments[0])
		{
			this.drawSel = i;
			lis[this.drawSel].className = "s";
			break;
		}		
	}
}
SelectWidget.prototype.onSelButtonClicked = function()
{
	this.showList(this.$ES("listbox", "display") != "");
}
SelectWidget.prototype.onInputClicked = function()
{
	if(this.$EP("input", "readOnly") == false){ return true; }
	
	this.showList(this.$ES("listbox", "display") != "");
	
	return true;
}
SelectWidget.prototype.onSelectChanged = function()
{
	//ºÎ¸ð À§Á¬¿¡°Ô select°¡ º¯°æµÆÀ½À» ¾Ë¸³´Ï´Ù.
	//ºÎ¸ð´Â ÀÌº¥Æ® ¸ÊÇÎ¸ÅÅ©·Î ÇÔ¼ö ON_EVENT_WIDGETNOTIFY·Î ÀûÀýÇÏ°Ô ÇÚµé·¯¸¦ ¿¬°áÇÕ´Ï´Ù.
	var propertyName = "notify_" + SelectWidget.NM_SELECTCHANGED + "_handler";
	if(typeof this[propertyName] == "string" && typeof this.widgetParent[this[propertyName]] == "function")
	{
		this.widgetParent[this[propertyName]]();
	}
}
SelectWidget.prototype.onInputKillFocus = function()
{
	if(this.hitTest)
	{
		return;
	}

	this.$ES("listbox", "display", "none");
}
/* Basically, SelectWidget is maden in onCreate called after method create runs */  

SelectWidget.prototype.onResize = function()
{
	WidgetBase.prototype.onResize.call(this);

	
	//À§Á¬ÀÇ Å©±â¹× À§Á¬¾ÈÀÇ ¿¤·¯¸ÕÆ® Å©±â¹× À§Ä¡¸¦ Àç¼³Á¤ ÇÕ´Ï´Ù.
	
	//°è»ê.
	var widget_width = this.width;
	widget_width += PXSTR2INT(this.$CSS("borderLeftWidth"));
	widget_width += PXSTR2INT(this.$CSS("borderRightWidth"));

	var widget_height = this.height;
	widget_height += PXSTR2INT(this.$CSS("borderTopWidth"));
	widget_height += PXSTR2INT(this.$CSS("borderBottomWidth"));

	var selbutton_width = PXSTR2INT($CSS("wafx_widgetselect-selbutton", "width"));
	var selbutton_borderleft_width = PXSTR2INT($CSS("wafx_widgetselect-selbutton", "borderLeftWidth"));
	var inputbox_paddingleft_width = PXSTR2INT($CSS("wafx_widgetselect-inputbox", "paddingLeft"));
	var font_size = PXSTR2INT(this.$CSS("fontSize"));
	var inputbox_width = this.width - (selbutton_width + selbutton_borderleft_width + inputbox_paddingleft_width);
	var input_width = inputbox_width - (selbutton_borderleft_width + inputbox_paddingleft_width);
	var input_margintop = (this.height - font_size) / 2 - 2;
	
	//¼¼ÆÃ
	this.$ES("inputbox", "width", INT2PXSTR(inputbox_width));
	this.$ES("input", 'width', INT2PXSTR(input_width));
	this.$ES("input", 'marginTop', INT2PXSTR(input_margintop));
	this.$ES("listbox", "width", INT2PXSTR(widget_width));
	this.$ES("listbox", "top", INT2PXSTR(widget_height));
	this.$ES("sellist", "width", INT2PXSTR(this.width));
}
SelectWidget.prototype.onCreate = function()
{
	this.$PE().widget = this;
	this.$PE().innerHTML += "<div class='wafx_widgetselect-listbox' id='" + this.$EID_STR("listbox") + "' style='display:none'><ul id='" + this.$EID_STR("sellist") + "'></ul></div>";

	//Render Widgt Select
 	this.$E().innerHTML = "<span class='wafx_widgetselect-inputbox' id='" + this.$EID_STR("inputbox") + "'><input type='text' name='" + this.$PE().name + "' value='' id='" +  this.$EID_STR("input") + "' readonly='true'></span><span class='wafx_widgetselect-selbutton' id='" + this.$EID_STR("selbutton") + "'><img src='/wafxlib/images/arrow2_s.gif'></span>";

	//Event Map
	//WAFX_EVENT_MAP(SelectWidget)
	//{
	ON_EVENTMOUSE(MOUSECLICK, this.$E("input"), "onSelButtonClicked");
	ON_EVENTMOUSE(MOUSEOUT, this.$E("input"), "onInputMouseOut");
	ON_EVENTMOUSE(MOUSEOUT, this.$E("listbox"), "onListMouseOut");
	ON_EVENTMOUSE(MOUSECLICK, this.$E("selbutton"), "onSelButtonClicked");
	ON_EVENTMOUSE(MOUSEOUT, this.$E("selbutton"), "onSelButtonMouseOut");
	ON_EVENTMOUSE(MOUSEOVER, this.$E("selbutton"), "onSelButtonMouseOver");
	ON_EVENTMOUSE(MOUSECLICK, this.$E("input"), "onInputClicked");
	ON_EVENT(KILLFOCUS, this.$E("input"), "onInputKillFocus");
	//}WAFX_EVENT_MAP
}


/*
 *  WEditWidget(À§ÁöÀ¨ ¿¡µðÆ®) Widget Class 
 */
var WEditWidget = Class.extend(WidgetBase);
WEditWidget.prototype.constructorFunction = function()
{
}
WEditWidget.prototype.addWindowEventListener = function(e, w)
{
	var iframe = this.$E("edit_control");
	
	if(iframe.eventListener == null)
	{
		iframe.eventListener = new List();
	}
	
	iframe.eventListener.addTail( {event : e, instanceName: w.instanceName} );
}
WEditWidget.prototype.deleteWindowEventListener = function(w)
{
	var iframe = this.$E("edit_control");
	if(iframe.eventListener == null)
	{
		return;
	}

	var count = iframe.eventListener.size();
	for(var i = 0; i < count; i++)
	{
		var item = iframe.eventListener.getAt(i);
		if(item.instanceName == w.instanceName)
		{
			iframe.eventListener.removeAt(i);
			return;
		}
	}
}
//WidgetBase::create()¸¦ overrideÇØ¼­ ÀçÁ¤ÀÇ ÇÕ´Ï´Ù.
WEditWidget.prototype.create = function(p, w, h, el)
{
	this.html = null;
		
	// ºÎ¸ð Å¬·¡½º WidgetBaseÀÇ µðÆúÆ® create	
	WidgetBase.prototype.create.call(this, p, new Rect(0, 0, w-1, h-1), el, "wafx_wysiwygeditor");
}
WEditWidget.prototype.getHTML = function(html)
{
	return IFrameBody(this.$E("edit_control")).innerHTML;
}
WEditWidget.prototype.setHTML = function(html)
{
	IFrameBody(this.$E("edit_control")).innerHTML = html;
}
WEditWidget.prototype.getDocument = function(html)
{
	return IFrameDocument(this.$E("edit_control"));
}
WEditWidget.prototype.getBody = function(html)
{
	return IFrameBody(this.$E("edit_control"));
}
WEditWidget.prototype.onCreate = function()
{
	this.$E().innerHTML = "<iframe id='" + this.$EID_STR("edit_control") + "' class='edit_control' width='0' height='0' frameborder='0' marginheight='0' marginwidth='0' topmargin='0' leftmargin='0' scrolling='auto' src = 'default.htm'></iframe>";

	//Gecko °è¿­ÀÇ ºê¶ó¿ìÀú¿¡¼­´Â designMode=on ´Â Å¸ÀÌ¸Ó ÀÌº¥Æ® ÇÚµé·¯¿¡¼­ Ã³¸®ÇÕ´Ï´Ù.  
	//IE¿¡¼­µµ °°ÀÌ Àû¿ëÇÕ´Ï´Ù.
	var iframeDocument = IFrameDocument(this.$E("edit_control"));
	this.setTimer(1000, 10);
}
WEditWidget.prototype.onIframeMouseDown = function()
{
	var eventListener = $E(this.frameId).eventListener;
	if(eventListener == null) {	return; }

	var count = eventListener.size();
	for(var i = 0; i < count; i++)
	{
		var item =  eventListener.getAt(i);
		
		if(item.event == WINDOWEVENT_MOUSEDOWN)
		{
			var widget = $WE($E(item.instanceName));
			if(widget != null && typeof widget["onIframeMouseDown"] == "function")
			{
				widget["onIframeMouseDown"]();
			}
		}
	}
}
WEditWidget.prototype.onTimer = function(nIDEvent)
{
	if(nIDEvent == 1000)
	{
    	this.killTimer(nIDEvent);

		var iframeDocument = IFrameDocument(this.$E("edit_control"));
    	iframeDocument.designMode = 'on';
		iframeDocument.frameId = this.$EID_STR("edit_control");

		if(iframeDocument.addEventListener)
		{
			iframeDocument.addEventListener('mousedown', this.onIframeMouseDown, false);
		}
		else if(iframeDocument.attachEvent)
		{
			//IE: default action of key accelerators occurs onkeydown
			//iframeDocument.attachEvent('onmousedown', this.onIframeMouseDown);
			iframeDocument.onmousedown = this.onIframeMouseDown;
		}
		
		this.$E("edit_control").contentWindow.focus();
	}
}

/*
 *   PopupMenu Widget Class 
 * 
 */
var PopupMenuWidget = Class.extend(WidgetBase);
PopupMenuWidget.prototype.constructorFunction = function(wdgtParent, elToggle, bAction)
{
	this.actionToggle = (bAction == true) ? "MOUSEOVER" : "MOUSECLICK" ;
	
	this.elToggle = (typeof elToggle == "string") ? $E(elToggle) : elToggle;
	this.create(wdgtParent, null, null, "wafx_widget_popupmenu");
}
PopupMenuWidget.prototype.hitTest = function(pt)
{
	//À§Á¬ Å×½ºÆ® 	
	var rect = this.getWidgetRect();
	var bHitTest = rect.ptInRect(pt);

	if(this.elToggle == null || bHitTest == true)
	{
		return bHitTest;
	}
	
	//Åä±Û ¹öÆ° Å×½ºÆ® 
	rect = GetElementRect(this.elToggle);
	bHitTest = rect.ptInRect(pt);

	return bHitTest;
}
PopupMenuWidget.prototype.closeMenu = function()
{
	if(this.elToggle == null)
	{
		//À§Á¬À» Á¦°ÅÇÕ´Ï´Ù.
		this.destroy();		
	}
	else
	{
		//À§Á¬À» ¾Èº¸ÀÌ°Ô ÇÕ´Ï´Ù.
		this.$ES("", "display", "none");
	}
}
PopupMenuWidget.prototype.showMenu = function(on)
{
	if(on)
	{
		var rectEl = GetElementRect(this.elToggle);
		this.$ES("", "left", INT2PXSTR(rectEl.left));
		this.$ES("", "top", INT2PXSTR(rectEl.top + rectEl.height() - 2));
	
		this.$ES("", "display", "");	
		this.$E().focus();
	}
	else
	{
		this.$ES("", "display", "none");	
	}
}
PopupMenuWidget.prototype.popup = function(x, y)
{
	this.$ES("", "left", INT2PXSTR(x));
	this.$ES("", "top", INT2PXSTR(y));
	this.$ES("", "display", "");
}
PopupMenuWidget.prototype.onCreate = function()
{
	//Å¬¶óÀÌ¾ðÆ® ¿µ¿ªÀ» ·»´õ¸µ ÇÕ´Ï´Ù.
	this.onRenderClient(this.$E());

	//z-index¸¦ floatÇüÀ¸·Î ¹Ù²ã¼­ Ç×»ó Å¾À» À¯ÁöÇÏµµ·Ï ÇÕ´Ï´Ù.
	this.$ES("", "zIndex", WidgetBase.zIndexFloat++);

	//Åä±Û ¿¤·¯¸ÕÆ®¿Í ¿¬°áÇÕ´Ï´Ù.
	if(this.elToggle != null)
	{
		this.elToggle.widget = this;

		//WAFX_EVENT_MAP(PopupMenuWidget)
		//{
		ON_EVENTMOUSE(MOUSEDOWN, this.elToggle, "onElAttchedMouseDown");
		ON_EVENTMOUSE(MOUSEOVER, this.elToggle, "onElAttchedMouseOver");
		ON_EVENTMOUSE(MOUSEOUT, this.elToggle, "onElAttchedMouseOut");
		//}WAFX_EVENT_MAP
	}
	
	//ºÎ¸ðÅ¬·¡½º(WidgetBase)ÀÇ µðÆúÆ® Ã³¸®
	WidgetBase.prototype.onCreate.call(this);
}
PopupMenuWidget.prototype.onShow = function()
{
	/* µðÆúÆ® Çàµ¿À» ±ÝÁöÇÕ´Ï´Ù. popup/showMenu ¸Þ¼Òµå°¡ ´ë½Å ÇÕ´Ï´Ù. */
}

PopupMenuWidget.prototype.onResize = function()
{
	/* µðÆúÆ® Çàµ¿À» ÆÐ¾²ÇØ¼­ width, height ÇÁ·ÎÆÛÆ¼°¡ À¯È¿ÇÏÁö ¾Ê°Ô ¸¸ŠÒ´Ï´Ù. CSS ¿¡¼­ ÁöÁ¤µÈ »çÀÌÁî·Î Á¶Á¤µË´Ï´Ù. */
}
PopupMenuWidget.prototype.onRenderClient = function()
{
	/* ÀÌ ¸Þ¼Òµå¸¦ ¿À¹ö¶óÀÌµåÇØ¼­ Ç¥½ÃÇÏ°íÀÚ ÇÏ´Â ¸Þ´º Ç×¸ñµé¸¦ ·»´õ¸µ ÇÕ´Ï´Ù. */
}
PopupMenuWidget.prototype.onElAttchedMouseDown = function()
{
	if(this.actionToggle == "MOUSEOVR")
	{
		return;
	}
	
	this.showMenu(this.$ES("", "display") != "");
}
PopupMenuWidget.prototype.onElAttchedMouseOver = function()
{
	if(this.actionToggle == "MOUSECLICK")
	{
		return;
	}
	
	this.showMenu(true);
}
PopupMenuWidget.prototype.onElAttchedMouseOut = function()
{
	if(this.actionToggle == "MOUSECLICK")
	{
		return;
	}

	this.showMenu(false);
}
PopupMenuWidget.prototype.onWindowMouseDown = function(button, pt)
{
	if(this.actionToggle == "MOUSEOVER" || this.hitTest(pt))
	{ 
		return;
	}
	
	this.closeMenu();
}



/*
 *   window Àü¿ª°´Ã¼ÀÇ »õ·Î¿îÇÁ·ÎÆÛÆ¼¸¦ ¸í½ÃÀûÀ¸·Î Ãß°¡ÇÏ°í ±âÁ¸ window °´Ã¼ÀÇ ÀÌº¥Æ®¸¦ ÀçÁ¤ÀÇ ÇÕ´Ï´Ù.
 *   »õ·Î Á¤ÀÇµÈ ÀÌº¥Æ® ÇÚµé·¯´Â ¾ÖÇÃ¸®ÄÉÀÌ¼Ç °³¹ß½Ã ÀçÁ¤ÀÇµÇ¾î °³¹ß ¿¡ÇÃ¸®ÄÉÀÌ¼Ç¿¡ ¸Â°Ô Àû¿ëµÉ ¼ö ÀÖ½À´Ï´Ù.
 */
var WINDOWEVENT_RESIZE    = "WINDOWEVENT_RESIZE";
var WINDOWEVENT_MOUSEDOWN = "WINDOWEVENT_MOUSEDOWN";

window.onresize = function()
{
	this.BROWSERSAFE_EVENT = arguments[0] || window.event;

	if(window["eventListener"] == null)
	{
		return;	
	}
	
	var count = window["eventListener"].size();
	for(var i = 0; i < count; i++)
	{
		var item =  window["eventListener"].getAt(i);
		if(item.event == WINDOWEVENT_RESIZE)
		{
			var widget = $WE($E(item.instanceName));
			if(widget != null && typeof widget["onWindowResized"] == "function")
			{
				widget["onWindowResized"]();
			}
		}
	}
}

window.document.onmousedown = function()
{
	window.BROWSERSAFE_EVENT = arguments[0] || window.event;

	var x = 0;
	var y = 0;
	var button = 0;
	
	if(window.BROWSERSAFE_EVENT.pageX || window.BROWSERSAFE_EVENT.pageY)
	{
		//Gecko
		button = window.BROWSERSAFE_EVENT.which;
		x = window.BROWSERSAFE_EVENT.pageX;
		y = window.BROWSERSAFE_EVENT.pageY;
	}
	else
	{
		button = window.BROWSERSAFE_EVENT.button;	
		x = window.BROWSERSAFE_EVENT.clientX + document.body.scrollLeft - document.documentElement.clientLeft - 2;
		y = window.BROWSERSAFE_EVENT.clientY + document.body.scrollTop  - document.documentElement.clientTop - 2
		//IE
		//Prohibit Event Bubbling
		//window.BROWSERSAFE_EVENT.cancelBubble = true; 
	}
	
	var pt = new Point(x,y)

	if(window["eventListener"] == null)
	{
		return;	
	}
	
	var count = window["eventListener"].size();
	for(var i = 0; i < count; i++)
	{
		var item =  window["eventListener"].getAt(i);
		if(item.event == WINDOWEVENT_RESIZE)
		{
			var widget = $WE($E(item.instanceName));
			if(widget != null && typeof widget["onWindowMouseDown"] == "function")
			{
				widget["onWindowMouseDown"](button, pt);
			}
		}
	}
}

function ON_EVENT_WIDGETNOTIFY(event, widget, handler_name)
{
	widget["notify_" + event + "_handler"] = handler_name;
}

function WINDOWEVENT_LISTENER_ADD(e, w)
{
	if(window["eventListener"] == null)
	{
		window["eventListener"] = new List();
	}

	window["eventListener"].addTail( {event : e, instanceName: w.instanceName} );
}

function WINDOWEVENT_LISTENER_DELETE(w)
{
	if(window["eventListener"] == null)
	{
		return;
	}

	var count = window["eventListener"].size();
	for(var i = count-1; 0 <= i ; i--)
	{
		var item = window["eventListener"].getAt(i);
		if(item.instanceName == w.instanceName)
		{
			window["eventListener"].removeAt(i);
		}
	}
}

function FindWidget(className)
{
	var count = window["eventListener"].size();
	
	for(var i = 0; i < count; i++)
	{
		var item = window["eventListener"].getAt(i);
		if(item.instanceName.indexOf(className) >= 0)
		{
			return $WE($E(item.instanceName));
		}
	}
	
	return null;
}
