/******************************************************************/
/*                     KT.Dialog Beta 0.1                           */
/*                        By Mootools                             */
/*                                                                */
/*                           by Jim                               */
/******************************************************************/
/*               http://                                          */
/******************************************************************/
/*                                                                */
/* mootools found at:                                             */
/* http://mootools.net/                                           */
/*                                                                */
/******************************************************************/
/*                                                                */
/*                                                                */
/*                                                                */
/*                                                                */
/******************************************************************/
//

KT.Dialog = function(options){
	  //create jDialog
	var Dialog_Default_Theme                    = "jDialogDefault";                                              //默认样式
	var Dialog_Default_Img                      = new Array("img/tl.gif","img/tr.gif","img/br.gif","img/bl.gif","/images/dialog/CLOSE.gif");  //默认边框效果
	var Dialog_Default_Title                    = "";                                                    //默认标题
	var Dialog_Default_Content                  = "提示内容";                                                      //默认内容
	var Dialog_Default_Alert	                = false;	                                                       //默认警告内容
	var Dialog_Default_Width                    = 260;                                                             //默认宽度
	var Dialog_Default_Height                   = 260;                                                             //默认高度
	var Dialog_Default_Content_Url              = "";                                                              //默认内容地址
	var Dialog_Default_Content_Eid              = "";                                                              //默认内容地址
	var Dialog_Default_Animate                  = true;                                                            //默认是否显示动画
	var Dialog_Default_Disable_BG               = true;                                                            //默认是否禁止掉背景
	var Dialog_Default_Show_Title               = true;                                                          //默认是否显示标题栏
	var Dialog_Default_Disable_Move             = true;                                                            //默认是否禁止移动
	var Dialog_Default_AutoClose                = false;	                                                      //是否自动关闭
	var Dialog_Default_AutoCloseTime            = 2000;															   //自动关闭延时时间
	var Dialog_Default_Close_Button             = true;                                                            //默认是否显示右上角关闭按钮
	var Dialog_Default_Enter_Button             = false;                                                            //默认是否显示确认按钮
	var Dialog_Default_Disable_Enter_Button      = false;                                                            //默认是否禁止确定按钮
	var Dialog_Default_Enter_Button_Caption     = "确定";                                                          //默认确认按钮标题
	var Dialog_Default_Enter_Button_Callback    = null;                                                            //默认确认按钮回调函数
	var Dialog_Default_Cancel_Button            = false;                                                           //默认是否显示取消按钮
	var Dialog_Default_Disable_Cancel_Button     = false;                                                            //默认是否禁止取消按钮
	var Dialog_Default_Cancel_Button_Caption    = "取消";                                                          //默认取消按钮标题
	var Dialog_Default_Cancel_Button_Callback   = null;                                                            //默认取消按钮回调函数
	var Dialog_Default_Close_Class_Name         = "closeBtn";                                                      //默认添加关闭事件tag
	var Dialog_Default_Close_Callback           = null;                                                            //默认关闭窗口时的回调函数
	
	this.create = function(){
		this.options = $extend({
			img:                Dialog_Default_Img,
			width:              Dialog_Default_Width,
			height:             Dialog_Default_Height,
			animate:            Dialog_Default_Animate,
			disableBG:          Dialog_Default_Disable_BG,
			//showTitle:          Dialog_Default_Show_Title,
			autoClose:          Dialog_Default_AutoClose,
			autoCloseTime:      Dialog_Default_AutoCloseTime,
			title:              Dialog_Default_Title,
			content:            Dialog_Default_Content,
			alert:	            Dialog_Default_Alert,
			url:                Dialog_Default_Content_Url,
			eid:                Dialog_Default_Content_Eid,
			disableMove:        Dialog_Default_Disable_Move,
			closeBtn:           Dialog_Default_Close_Button,
			EB:                 Dialog_Default_Enter_Button,
			disableEB:          Dialog_Default_Disable_Enter_Button,
			EBCaption:          Dialog_Default_Enter_Button_Caption,
			EBCallback:         Dialog_Default_Enter_Button_Callback,
			CB:                 Dialog_Default_Cancel_Button,
			disableCB:          Dialog_Default_Disable_Cancel_Button,
			CBCaption:          Dialog_Default_Cancel_Button_Caption,
			CBCallback:         Dialog_Default_Cancel_Button_Callback,
			closeClassName:     Dialog_Default_Close_Class_Name,
			closeCB:	        Dialog_Default_Close_Callback
		}, options || {});
		this.autoCloseTimeOut = null;
		this.isOpen = true;
		if(Browser.Engine.trident4)
		{
			this.options.height = this.options.height+9;
		}
		if(this.options.disableBG)
		{
			this.BG = new Element("div",{
					"class":"jDialogBoxShadow",
					"id":"jDialogBoxShadow",
					"styles":{"width":document.getSize().x,"height":document.getSize().y}
				}
			).injectInside(document.body);
		}
		if(Browser.Engine.trident4)
			this.boxSize = new Array(this.options.width+32,this.options.height+71);
		else
			this.boxSize = new Array(this.options.width+32,this.options.height+52);
		
		if(this.options.EB || this.options.CB)
		{
			this.boxSize[1] += 20;
		}
		this.boxTop = (document.getSize().y>this.boxSize[1])?(document.getSize().y-this.boxSize[1])/2:50;
		this.outSide = new Element("div",{
				"id":"jDialogOutSide",
				"class":"jDialogOutSide",
				"styles":{
					"width":this.boxSize[0],
					"height":this.boxSize[1],
					"left":(document.getSize().x-this.boxSize[0])/2,
					"top":this.boxTop
				}
			}
		).injectInside(document.body);
		new Element("div",{"class":"jDialogTopRight"}).injectInside(this.outSide);
		new Element("div",{"class":"jDialogTopLeft"}).injectInside(this.outSide);
		this.titleBar = new Element("div",{"class":"jDialogTopCenter","styles":{"width":this.options.width}}).injectInside(this.outSide);
		
		new Element("div",{"class":"jDialogCenterRight","styles":{"height":this.options.height}}).injectInside(this.outSide);
		new Element("div",{"class":"jDialogCenterLeft","styles":{"height":this.options.height}}).injectInside(this.outSide);
		this.box = new Element("div",{"class":"jDialogBox","styles":{"width":this.options.width-20,"height":this.options.height-20}}).injectInside(this.outSide);
		//20px for padding-jerry 2009/4/9
		
		
		if(this.options.EB || this.options.CB)
		{
			new Element("div",{"class":"jDialogBottomBarRight"}).injectInside(this.outSide);
			new Element("div",{"class":"jDialogBottomBarLeft"}).injectInside(this.outSide);
			this.btnBar = new Element("div",{"class":"jDialogBottomBarCenter","styles":{"width":this.options.width}}).injectInside(this.outSide);
		}
		else
		{
			new Element("div",{"class":"jDialogBottomRight"}).injectInside(this.outSide);
			new Element("div",{"class":"jDialogBottomLeft"}).injectInside(this.outSide);
			new Element("div",{"class":"jDialogBottomCenter","styles":{"width":this.options.width}}).injectInside(this.outSide);
		}
		if(this.options.EB)
		{
			this.enterButton = new Element("input",{"class":"jDialogBtn","type":"button","value":this.options.EBCaption}).injectInside(this.btnBar);
			if(this.options.EBCallback!=null)
				this.enterButton.addEvent("click",function(){this.options.EBCallback();this.close()}.bind(this));
			else
				this.enterButton.addEvent("click",function(){this.close()}.bind(this));
			this.enterButton.set("disabled",this.options.disableEB);
		}
		if(this.options.CB)
		{
			
			this.cancelButton = new Element("input",{"class":"jDialogBtn","type":"button","value":this.options.CBCaption}).injectInside(this.btnBar);
			if(this.options.CBCallback!=null)
				this.cancelButton.addEvent("click",function(){this.options.CBCallback();this.close()}.bind(this));
			else
				this.cancelButton.addEvent("click",function(){this.close()}.bind(this));
			this.cancelButton.set("disabled",this.options.disableCB);
		}
		if(this.options.closeBtn)
		{
			this.closeButton = new Element("div",{
				"class":"jDialogCloseBtn"
			}).injectInside(this.titleBar);
			this.closeButtonImage = new Element("img",{
				"src":this.options.img[4],
				"width":48
			}).injectInside(this.closeButton).addEvent("click",function(){this.close()}.bind(this));
		}
		this.title = new Element("div",{
			"id":'jDialogTitle',
			"html":this.options.title,
			"styles":{"width":this.options.width-60},
			"class":"jDialogTitle"
		}).injectInside(this.titleBar);
		if(!this.options.disableMove)
		{
			var myDrag = new Drag.Move(this.outSide,{
				handle:'jDialogTitle'
			});
		}
		if(this.options.url!="")
		{
			this.setContentUrl(this.options.url);
		}
		else if(this.options.eid!="")
		{
			this.setContentEid(this.options.eid);
		}
		else
		{
			this.setContent(this.options.content);
		}
		document.addEvent('keydown', this.keyboardListener.bindWithEvent(this));
		if(Browser.Engine.trident4)
		{
			window.addEvent('scroll',this.position.bind(this))
		}
		if(this.options.autoClose)
		{
			this.autoCloseTimeout = setTimeout(function(){
			this.close();
		}.bind(this),this.options.autoCloseTime);
		}
		if(Browser.Engine.trident4)
		{
			this.position();	
		}
		return this;
	};
	this.setDisableEB = function(disable)
	{
		this.enterButton.set("disabled",disable);
	};
	this.setDisableCB = function(disable)
	{
		this.cancelButton.set("disabled",disable);
	};
	this.keyboardListener = function(event)
	{
		if(event.key=="esc" && this.options.closeBtn)
		{
			this.close();
		}
	};
	this.close = function(){
		this.outSide.dispose();
		if(this.options.eid!="")
		{
			$(this.options.eid).set("html",this.box.get("html"));
			this.box.set("html","");
		}
		if(this.options.disableBG)
		{
			this.BG.dispose();
		}
		document.removeEvent('keydown',this.keyboardListener.bindWithEvent(this));
		if(Browser.Engine.trident4)
		{
			window.removeEvent('scroll',this.position.bind(this))
		}
		if(this.autoCloseTimeout!==null)
		{
			clearTimeout(this.autoCloseTimeout);
			this.autoCloseTimeOut = null;
		}
		if(this.options.closeCB !==null)
		{
			this.options.closeCB();
		}
		this.isOpen = false;
	};
	this.clearCloseCB = function(){
		this.options.closeCB = null;	
	};
	this.setCloseCB = function(callback){
		this.options.closeCB = callback;
	};
	this.setAutoClose = function(autoCloseTime){
		this.autoCloseTimeout = setTimeout(function(){
			this.close();
		}.bind(this),autoCloseTime);
	};

	this.setTitle = function(title){
		this.title.set("text",title);
	};
	
	this.setContentUrl = function(url)
	{
		this.box.set("html","");
		this.content = new Element("iframe",{
			"name":"jDialogContentFrame",
			"id":"jDialogContentFrame",
			"width":"100%",
			"height":"100%",
			"frameBorder":0,
			"src":url
		}).injectInside(this.box);
	};

	this.setContent = function(content)
	{
		if(this.options.alert)
			this.box.set("html","<div class='alertcontent'>"+content+"</div>");
		else
			this.box.set("html",content);
	};

	this.setContentEid = function(Eid)
	{
		this.box.set("html",$(Eid).get("html"));
		$(Eid).set("html","");
	};

	this.position= function() {
		if(this.options.disableBG)
			this.BG.setStyle("top",Window.getScrollTop()+'px');
		this.outSide.setStyle("top", this.boxTop+Window.getScrollTop()+'px');
	};
}