registerNameSpace("com.trs.util.dialog.dialog");

$import("dialog/dialog.js","dialogButton.js");
$import("dialog/dialog.js","../drag/dragger.js");
$import("dialog/dialog.js","../lib/prototype.js");

com.trs.util.dialog.imgPath=$base("dialog/dialog.js","script")+'img/';

com.trs.util.dialog.RESPONSE_FORBIDDEN=1;
com.trs.util.dialog.RESPONSE_SUCCESS=2;
com.trs.util.dialog.RESPONSE_SMILE=3;
com.trs.util.dialog.RESPONSE_FORGET=4;
com.trs.util.dialog.RESPONSE_SORRY=5;
com.trs.util.dialog.RESPONSE_CARE=6;

com.trs.util.dialog.dialog=function(_sID)
{
	this.id=_sID;
	this.init=function(){
		var id=this.id;
		var dialogInnerHTML = '<div id=dialog_page_shield_'+id+'></div>\
		<iframe id=dialog_cushion_'+id+' src="'+com.trs.util.dialog.imgPath+'blank.html"></iframe>\
		<div id=div_dialog_shadow_'+id+'></div>\
		<div id=dialog_'+id+'><table class=dialog width="100%" style="border:1px solid #000;">\
				<tr height="25" bgcolor="#6699cc">\
					<td style="background:#6699cc">\
						<table style="-moz-user-select:none;" width="100%" border="0" cellpadding="0" cellspacing="0">\
							<tr>\
								<td width="6"></td>\
								<td id=dialogTitle class=dialogTitle></td>\
								<td id=dialogClose class=dialogClose width="27" align="right" valign="middle"></td>\
								<td width="6"></td>\
							</tr>\
						</table>\
					</td>\
				</tr>\
				<tr>\
					<td id=dialogBody class=dialogBody>\
						<table border="0" align="center" cellpadding="0" cellspacing="0">\
							<tr height="10"><td colspan="4"></td></tr>\
							<tr>\
								<td width="10"></td>\
								<td id=dialogIcon class=dialogIcon align="center" valign="absmiddle"></td>\
								<td id=dialogMsg class=dialogMsg></td>\
								<td width="10"></td>\
							</tr>\
							<tr height="10"><td colspan="4" align="center"></td></tr>\
							<tr><td colspan="4" align="center" id=dialogButtons class=dialogButtons></td></tr>\
							<tr height="10"><td colspan="4" align="center"></td></tr>\
						</table>\
					</td>\
				</tr>\
			</table></div>\
			';
		var div=document.createElement("DIV");
		div.id="dialog_title_"+id;
		div.style.fontSize='12px';
		div.style.fontWeight='bold';
		div.style.cursor='move';
		div.style.width='100%';
		this.titleElement=div;
		
		div=document.createElement("DIV");
		div.id="dialog_msg_"+id;
		div.style.fontSize='12px';
		this.msgElement=div;
		
		div=document.createElement("IMG");
		div.id="dialog_icon_"+id;
		div.src=com.trs.util.dialog.imgPath+"3.gif";
		this.iconElement=div;
		
		var div=document.createElement("DIV");
		div.id="dialog_buttons_"+id;
		var ok=com.trs.util.dialogButton.OK(id,this);
		div.appendChild(ok);
		this.buttonsElement=div;
		
		this.closeElement=com.trs.util.dialogButton.CLOSE(id,this);	
		
		var dialogDragHandler=null;
//		div=document.createElement("DIV");
//		div.innerHTML=dialogInnerHTML;
		new Insertion.Bottom(document.body,dialogInnerHTML);
//		var tds=div.getElementsByTagName("td");
		var tds=$('dialog_'+id).getElementsByTagName("td");
		dialogDragHandler=tds["dialogTitle"];
		tds["dialogTitle"].appendChild(this.titleElement);
		tds["dialogClose"].appendChild(this.closeElement);
		this.heightElement=tds["dialogBody"];
		tds["dialogIcon"].appendChild(this.iconElement);
		tds["dialogMsg"].appendChild(this.msgElement);
		tds["dialogButtons"].appendChild(this.buttonsElement);
//		var dialogContainer=div;
		this.dialog=$("dialog_"+id);
		this.dialog.style.position='absolute';
		this.dialog.style.background	= "#fff";
		this.dialog.style.zIndex='999';

		this.dialogCushion		=	$("dialog_cushion_"+id);
		this.dialogCushion.style.display='none';
		this.dialogCushion.style.position = "absolute";
		this.dialogCushion.style.background	= "#000000";
		this.dialogCushion.style.opacity	= "0.2";
		this.dialogCushion.style.filter = "alpha(opacity=20)";
		this.dialogCushion.style.zIndex='998';

		this.divDialogShadow=$("div_dialog_shadow_"+id);
		this.divDialogShadow.style.position = "absolute";
		this.divDialogShadow.style.background	= "#000";
		this.divDialogShadow.style.opacity	= "0.2";
		this.divDialogShadow.style.filter = "alpha(opacity=20)";
		this.divDialogShadow.style.zIndex='998';

		this.pageShieldElement=$("dialog_page_shield_"+id);
		this.pageShieldElement.style.display='none';
		this.pageShieldElement.style.position='absolute';
		this.pageShieldElement.style.left='0';
		this.pageShieldElement.style.top='0';
		this.pageShieldElement.style.background	= "#fff";
		this.pageShieldElement.style.opacity	= "0.2";
		this.pageShieldElement.style.filter = "alpha(opacity=20)";
		this.pageShieldElement.style.zIndex='997';
		this.pageShieldElement.style.width = Math.max(document.body.scrollWidth,document.body.clientWidth);
		this.pageShieldElement.style.height = Math.max(document.body.scrollHeight,document.body.clientHeight);
		
//		document.body.appendChild(this.pageShieldElement);
//		this.pageShieldElement.appendChild(this.dialogShadow);
//		this.pageShieldElement.appendChild(this.dialog);
//		delete dialogContainer;
		var drag=new com.trs.util.dragger();
		drag.init(dialogDragHandler,this.dialog);
		var caller=this;
		drag.onDrag=drag.onDragEnd=function(x,y){
			caller.shadow();
		}
	}
	this.reset=function(){
		document.body.removeChild(this.pageShieldElement);
		document.body.removeChild(this.divDialogShadow);
		document.body.removeChild(this.dialogCushion);
		document.body.removeChild(this.dialog);
		this.init();
	}
	this.disableTabIndex=function(){
		this.cachedTabIndex=[];
		var allSons=document.getElementsByTagName("*");
		for(var i=0;i<allSons.length;i++){
			if(allSons[i].tabIndex!=-1){
				this.cachedTabIndex.push(allSons[i],allSons[i].tabIndex);
				allSons[i].tabIndex=-1;
			}
		}
	}
	this.enableTabIndex=function(){
		for(var i=0;i<this.cachedTabIndex.length;i+=2){
			if(this.cachedTabIndex[i+1]==0){
				var oElement	= this.cachedTabIndex[i];
				oElement.removeAttribute('tabIndex');
			}
			else{
				this.cachedTabIndex[i].tabIndex=this.cachedTabIndex[i+1];
			}
		}
		this.cachedTabIndex=[];
	}
	this.show=function(w,h,l,t){
		this.pageShieldElement.style.display='';
		this.pageShieldElement.style.width = Math.max(document.body.scrollWidth,document.body.clientWidth);
		this.pageShieldElement.style.height = Math.max(document.body.scrollHeight,document.body.clientHeight);
		this.dialogCushion.style.display='';
		this.divDialogShadow.style.display='';
		this.dialog.style.display='';
		this.disableTabIndex();
		this.resize(w,h);
		this.move(l,t);
		this.shadow();
		//ge gfc add @ 2006-7-25
		try{
			var btnCancel	= $('Cancel_' + APPENDIX_ID);
			var btnOk		 = $('OK_' + APPENDIX_ID);
			if (btnCancel != null){
				btnCancel.focus();
			}else if (btnOk != null){
				btnOk.focus();
				//btnOk.select();
			}
		}catch (ex){
			//alert(ex.description);
		}
	}
	this.hide=function(){
		this.dialog.style.display='none';
		this.dialogCushion.style.display='none';
		this.divDialogShadow.style.display='none';
		this.pageShieldElement.style.display='none';
		this.enableTabIndex();
	}
	this.resize=function(w,h){
		w=(w)?w:300;
		h=(h)?h:160;
		var iInterval=this.dialog.offsetWidth-this.heightElement.offsetWidth;
		this.dialog.style.width=w;
		this.dialog.style.width=this.heightElement.offsetWidth+iInterval;
		this.heightElement.height=h;
	}
	this.shadow=function(){
		Position.clone(this.dialog,this.dialogCushion);
		this.dialogCushion.style.height=parseInt(this.dialogCushion.style.height)+6;
		this.dialogCushion.style.width=parseInt(this.dialogCushion.style.width)+6;

		Position.clone(this.dialog, this.divDialogShadow);
		this.divDialogShadow.style.top=parseInt(this.divDialogShadow.style.top)+6;
		this.divDialogShadow.style.left=parseInt(this.divDialogShadow.style.left)+6;		
	}
	this.move=function(l,t){
		var screenOffset	= [0,0];
		var realOffset = [0,0];
		if(window.frameElement){
			screenOffset	= Position.cumulativeOffset(window.frameElement);
			realOffset = Position.realOffset(window.frameElement);
		}
		var pageWidth		= top.window.document.body.clientWidth-screenOffset[0];
		var pageHeight		= top.window.document.body.clientHeight-screenOffset[1];
		l					= l || ((parseInt(pageWidth)-parseInt(this.dialog.offsetWidth))/2+document.body.scrollLeft);
		this.dialog.style.left	= l;
		var scrollTop = realOffset[1]+window.document.body.scrollTop;
		t					= t || ((parseInt(pageHeight)-parseInt(this.dialog.offsetHeight))/2+scrollTop);
		this.dialog.style.top	= parseInt(t);
		/*	hide by liudaoru @07-02-16 改變位置
		this.dialog.style.top = parseInt(bt)+t-130;
		this.dialogShadow.style.left=l+6;
		this.dialogShadow.style.top=parseInt(bt)+t-130+6;
		*/
	}
	this.setTitle=function(title){
		this.titleElement.innerHTML=title;
	}
	this.setIcon=function(src){
		var div = document.createElement("IMG");
		div.id = this.iconElement.id;
		div.src = src;
		
		//$destroy(this.iconElement);
		$('dialogIcon').removeChild(this.iconElement);
		$('dialogIcon').appendChild(div);

		this.iconElement = div;
		div = null;
	}
	this.setMsg=function(msg){
		this.msgElement.innerHTML=msg;
	}
	this.event=function(_sMsg, _sOk, _sCancel, _sClose)
	{
		if(_sMsg)this.setMsg(_sMsg);
		this.buttonsElement.innerHTML='';
		if(_sOk){
			var ok=com.trs.util.dialogButton.OK(this.id,this,_sOk);
			this.buttonsElement.appendChild(ok);
		}
		if(_sCancel){
			var cancel=com.trs.util.dialogButton.CANCEL(this.id,this,_sCancel);
			this.buttonsElement.appendChild(cancel);
		}
		if(this.buttonsElement.innerHTML=='')
		{
			var ok=com.trs.util.dialogButton.OK(this.id,this);
			this.buttonsElement.appendChild(ok);
		}
		if(_sClose){
			this.closeElement.onclick=function()
			{
				eval(_sClose);
				this.dialog.hide();
			}
		}
		this.show();
	}
}

var _trs_util_dialog_=null;

function $dialog()
{
	if(!_trs_util_dialog_)
	{
		_trs_util_dialog_=new com.trs.util.dialog.dialog("_trs_util_dialog_");
		_trs_util_dialog_.init();
	}
	return _trs_util_dialog_;
}

function $errorMsg(msg, func, response, title)
{
    func = func ? func : '';
    response = response ? response : '';
    title = title ? title : '係統提示信息';
    var icon='';
    response = parseInt(response);
    switch (response)
    {
	    case com.trs.util.dialog.RESPONSE_FORBIDDEN:
	        icon = com.trs.util.dialog.imgPath+"1.gif";
	        break;
	    case com.trs.util.dialog.RESPONSE_SUCCESS:
	        icon = com.trs.util.dialog.imgPath+"2.gif";
	        break;
	    case com.trs.util.dialog.RESPONSE_SMILE:
	        icon = com.trs.util.dialog.imgPath+"3.gif";
	        break;
	    case com.trs.util.dialog.RESPONSE_FORGET:
	        icon = com.trs.util.dialog.imgPath+"4.gif";
	        break;
	    case com.trs.util.dialog.RESPONSE_SORRY:
	        icon = com.trs.util.dialog.imgPath+"5.gif";
	        break;
	    case com.trs.util.dialog.RESPONSE_CARE:
	        icon = com.trs.util.dialog.imgPath+"6.gif";
	        break;
	    default:
	        icon = com.trs.util.dialog.imgPath+"5.gif";
	        break;
    }
    var dg=$dialog();
    dg.setIcon(icon);
    dg.setTitle(title);
    dg.event(msg, func, '', func);
}
function $alert(msg, func,title)
{
    $errorMsg(msg, func,com.trs.util.dialog.RESPONSE_SORRY,title);
}
function $success(msg,okFunc,title)
{
    okFunc = okFunc ? okFunc : '';
    title = title ? title : '係統提示信息';
    var dg=$dialog();
    dg.setIcon(com.trs.util.dialog.imgPath+"3.gif");
    dg.setTitle(title);
    dg.event(msg, okFunc, '', okFunc);
}
function $confirm(msg, okFunc, cancelFunc, title)
{
    okFunc = okFunc ? okFunc : '';
    cancelFunc = cancelFunc ? cancelFunc : '';
    title = title ? title : '係統提示信息';
    var dg=$dialog();
    dg.setIcon(com.trs.util.dialog.imgPath+"3.gif");
    dg.setTitle(title);
    dg.event(msg, okFunc, cancelFunc, cancelFunc);
}