/*======================================================================================
	
	Module:		CDialog

	Purpose:	Create custom dialog box

	Author:		Sky Stebnicki, sky.stebnicki@aereus.com
				Copyright (c) 2007 Aereus Corporation. All rights reserved.
	
	Usage:		// Modal
				var dlg_d = new CDialog();
				var dv = ALib.Dom.createElement("div");
				dv.m_input = ALib.Dom.createElement("input", dv);
				var dv_btn = ALib.Dom.createElement("div", dv);
				var btn = new CButton("Alert", function(dv, dlg) {  ALib.Dlg.messageBox("Say Something", dlg); }, [dv, dlg_d]); // Second param makes it modal
				btn.print(dv_btn);
				var btn = new CButton("Close", function(dlg) {  dlg.hide(); }, [dlg_d]);
				btn.print(dv_btn);

				var btn = new CButton("Modal", function(dv, dlg) { dlg.customDialog(dv, 200, 200); }, [dv, dlg_d], "b1");
				btn.print(con);

======================================================================================*/


/***********************************************************************************
 *
 *	Class: 		CDialog
 *
 *	Purpose:	Encapsulate custom dialog functionality
 *
 ***********************************************************************************/
function CDialog(title, parentDlg)
{
	if (title)
		this.m_title = title;
	else
		this.m_title = null;

	this.zind = (parentDlg) ? parentDlg.zind+1 : 11;
	this.m_initialized = false;
	this.parentDlg = (parentDlg) ? parentDlg : null;
	this.f_close = false;
	//this.initdlg();
}

CDialog.prototype.fixSizeAndScroll = function() 
{
	ALib.m_evwnd.onscroll = this.scrollFix; 
	ALib.m_evwnd.onresize = this.sizeFix;
}

CDialog.prototype.posLeft = function() 
{
	return typeof ALib.m_evwnd.pageXOffset != 'undefined' ? ALib.m_evwnd.pageXOffset
			: ALib.m_document.documentElement && ALib.m_document.documentElement.scrollLeft
			? ALib.m_document.documentElement.scrollLeft
			: ALib.m_document.body.scrollLeft ? ALib.m_document.body.scrollLeft:0;
}

CDialog.prototype.posTop = function() 
{
	return typeof ALib.m_evwnd.pageYOffset != 'undefined' ? ALib.m_evwnd.pageYOffset
			: ALib.m_document.documentElement && ALib.m_document.documentElement.scrollTop
			? ALib.m_document.documentElement.scrollTop
			: ALib.m_document.body.scrollTop?ALib.m_document.body.scrollTop:0;
}

CDialog.prototype.gete= function(x)
{
	return ALib.m_document.getElementById(x);
}

CDialog.prototype.scrollFix = function()
{
	var obol=this.overlay;

	if (obol)
	{
		obol.style.top=ALib.Dom.getScrollPosTop()+'px';
		obol.style.left=ALib.Dom.getScrollPosLeft()+'px';
	}
}

CDialog.prototype.sizeFix = function()
{
	var obol=this.overlay;

	if (obol)
	{
		obol.style.height=ALib.Dom.GetDocumentHeight()+'px';
		obol.style.width=ALib.Dom.getDocumentWidth()+'px';
	}
}

CDialog.prototype.kp = function(e)
{
	ky=e?e.which:event.keyCode;
	if(ky==88||ky==120) this.hm();
	return false
}

CDialog.prototype.inf = function(h)
{
	tag=ALib.m_document.getElementsByTagName('select');
	
	for(i=tag.length-1;i>=0;i--)
	{
		if (!tag[i].dlgField)
			tag[i].style.visibility=h;
	}
	
	tag=ALib.m_document.getElementsByTagName('iframe');
	
	for(i=tag.length-1;i>=0;i--)
	{
		if (!tag[i].dlgField)
			tag[i].style.visibility=h;
	}
	
	/*
	 * TODO: Correct this so that objects can work on dialogs but not on the background
	tag=ALib.m_document.getElementsByTagName('object');
	
	for(i=tag.length-1;i>=0;i--)
	{
		if (!tag[i].dlgField)
			tag[i].style.visibility=h;
	}
	*/
}

CDialog.prototype.showOverlay = function(wd, ht)
{
	if (!this.m_initialized)
		this.initdlg();

	var h = 'hidden';
	var b = 'block';
	var p = 'px';

	// Display overlay
	this.overlay.style.height = ALib.Dom.getDocumentHeight()+p;
	this.overlay.style.width = ALib.Dom.getDocumentWidth()+p;
	this.overlay.style.top = "0px"; //ALib.Dom.getScrollPosTop()+p;
	this.overlay.style.left = "0px"; //ALib.Dom.getScrollPosLeft()+p;
	this.overlay.style.display = b;
	this.inf(h);
}

CDialog.prototype.show = function(wd, ht)
{
	this.sm(wd, ht);
}

CDialog.prototype.sm = function(wd, ht)
{
	var h = 'hidden';
	var b = 'block';
	var p = 'px';

	// Display overlay
	this.showOverlay();
	/*
	this.overlay.style.height = ALib.Dom.getDocumentHeight()+p;
	this.overlay.style.width = ALib.Dom.getDocumentWidth()+p;
	this.overlay.style.top = "0px"; //ALib.Dom.getScrollPosTop()+p;
	this.overlay.style.left = "0px"; //ALib.Dom.getScrollPosLeft()+p;
	this.overlay.style.display = b;
	*/

	var sptop = ALib.Dom.getScrollPosTop();
	var spleft = ALib.Dom.getScrollPosLeft();

	var tp= sptop +((ALib.Dom.getClientHeight()-ht)/2)-12;
	var lt= spleft +((ALib.Dom.getClientWidth()-wd)/2)-12;

	this.m_dcon.style.top=(tp<0?0:tp)+p;
	this.m_dcon.style.left=(lt<0?0:lt)+p;
	this.m_dcon.style.width=wd +p;
	//this.m_dcon.style.height=ht +p;
	//this.inf(h);
	this.m_dcon.style.display=b;

	return false;
}

CDialog.prototype.hideOverlay = function()
{
	var v = 'visible';
	var n = 'none';
	this.overlay.style.display=n;
	this.inf(v);
}

CDialog.prototype.hide = function()
{
	this.hm();
}

CDialog.prototype.hm = function()
{
	var v = 'visible';
	var n = 'none';

	this.m_dcon.style.display=n;

	if (!this.parentDlg)
		this.hideOverlay();
	
	if (this.m_cleardv)
	{
		try
		{
			this.m_bodycon.removeChild(this.m_cleardv);
		} catch (e) {}

		this.m_cleardv = null;
	}

	if (this.m_titlecon)
	{
		this.m_titlecon.style.display=n;
	}

	//ALib.m_document.onkeypress=''
}	

CDialog.prototype.initdlg = function()
{
	var ab='absolute';
	var n='none';
	var obody=ALib.m_document.getElementsByTagName('body')[0];
	var frag=ALib.m_document.createDocumentFragment();

	// Create document overlay - this should only exist once
	this.overlay = ALib.Dom.getElementById('CDialogOverlay');
	if (!this.overlay)
	{
		this.overlay = ALib.Dom.createElement('div');
		this.overlay.setAttribute('id','CDialogOverlay');
		ALib.Dom.styleSet(this.overlay, "display", "none");
		ALib.Dom.styleSet(this.overlay, "position", "absolute");
		ALib.Dom.styleSet(this.overlay, "top", "0");
		ALib.Dom.styleSet(this.overlay, "left", "0");
		this.overlay.style.zIndex = "10";
		ALib.Dom.styleSet(this.overlay, "width", "100%");
		obody.appendChild(this.overlay);
	}

	// Create dialog container - there can be many dialogs in a document
	this.m_dcon = ALib.Dom.createElement('div');
	ALib.Dom.setClass(this.m_dcon, "CDialogCon");
	ALib.Dom.styleSet(this.m_dcon, "display", "none");
	ALib.Dom.styleSet(this.m_dcon, "position", "absolute");
	this.m_dcon.style.zIndex = this.zind;

	// Add title
	if (!this.m_titlecon)
	{
		this.m_titlecon = ALib.Dom.createElement("div");
		this.m_dcon.appendChild(this.m_titlecon);
		ALib.Dom.setClass(this.m_titlecon, "CDialogTitle");
		this.m_titlecon.style.display=n;	
	}
	if (this.m_title)
	{
		this.m_titlecon.innerHTML = this.m_title;
		this.m_titlecon.style.display="block";
	}
	
	// Add body
	this.m_bodycon = ALib.Dom.createElement("div");
	this.m_dcon.appendChild(this.m_bodycon);
	ALib.Dom.setClass(this.m_bodycon, "CDialogBody");

	obody.appendChild(this.m_dcon);
	
	this.m_initialized = true;


	/*
	var obl=ALib.Dom.createElement('span');
	obbx.appendChild(obl);

	var obbxd=ALib.Dom.createElement('div');
	obbxd.setAttribute('id','mbd');
	obl.appendChild(obbxd);

	frag.insertBefore(obbx,obol.nextSibling);
	obody.insertBefore(frag,obody.firstChild);
	*/
}

CDialog.prototype.messageBox = function(msg, parentdlg)
{
	if (!this.m_initialized)
		this.initdlg();

	var old_parent = null;
	if (parentdlg)
	{
		var old_parent = this.parentDlg;
		this.parentDlg = parentdlg;
	}

	var dlg = this;

	var dv = ALib.Dom.createElement("div");
	this.m_bodycon.appendChild(dv);

	var dv_inner = ALib.Dom.createElement("div");
	ALib.Dom.styleSet(dv_inner, "text-align", "center");
	dv.appendChild(dv_inner);

	var sp = ALib.Dom.createElement("div");
	dv_inner.appendChild(sp);
	sp.innerHTML = msg;

	var bdv = ALib.Dom.createElement("div");
	bdv.setAttribute("align", "center");
	dv_inner.appendChild(bdv);
	var dlg_btn = new CButton("OK", function(dlg, old_parent, cls) { dlg.hm(); cls.parentDlg = old_parent;  }, [dlg, old_parent, this], "b1");
	dlg_btn.print(bdv);

	var len = msg.length * 10;
	this.sm(len, 50);

	this.m_cleardv = dv;
}

CDialog.prototype.confirmBox = function(msg, title, args)
{
	if (!this.m_initialized)
		this.initdlg();

	if (title)
	{
		this.m_titlecon.innerHTML = title;
		this.m_titlecon.style.display="block";
	}

	var dlg = this;

	var dv = ALib.Dom.createElement("div");
	this.m_bodycon.appendChild(dv);

	var dv_inner = ALib.Dom.createElement("div");
	ALib.Dom.styleSet(dv_inner, "text-align", "center");
	dv.appendChild(dv_inner);

	var sp = ALib.Dom.createElement("div");
	dv_inner.appendChild(sp);
	sp.innerHTML = msg;

	var bdv = ALib.Dom.createElement("div");
	bdv.setAttribute("align", "center");
	dv_inner.appendChild(bdv);

	function yesClicked()
	{
		dlg.hide();
		if (args)
		{
			switch (args.length)
			{
			case 1:
				dlg.onConfirmOk(args[0]);
				break;
			case 2:
				dlg.onConfirmOk(args[0], args[1]);
				break;
			case 3:
				dlg.onConfirmOk(args[0], args[1], args[2]);
				break;
			case 4:
				dlg.onConfirmOk(args[0], args[1], args[2], args[3]);
				break;
			case 5:
				dlg.onConfirmOk(args[0], args[1], args[2], args[3], args[4]);
				break;
			case 6:
				dlg.onConfirmOk(args[0], args[1], args[2], args[3], args[4], args[5]);
				break;
			}
		}
		else
			dlg.onConfirmOk();

		dlg.onConfirmOk = new Function();
	}
	
	var dlg_btn = new CButton("Yes", yesClicked, null, "b1");
	dlg_btn.print(bdv);

	// Add spacer
	var spcr = ALib.Dom.createElement("span", bdv);
	spcr.innerHTML = "&nbsp;";

	function noClicked()
	{
		dlg.hide();
		if (args)
		{
			switch (args.length)
			{
			case 1:
				dlg.onConfirmCancel(args[0]);
				break;
			case 2:
				dlg.onConfirmCancel(args[0], args[1]);
				break;
			case 3:
				dlg.onConfirmCancel(args[0], args[1], args[2]);
				break;
			case 4:
				dlg.onConfirmCancel(args[0], args[1], args[2], args[3]);
				break;
			case 5:
				dlg.onConfirmCancel(args[0], args[1], args[2], args[3], args[4]);
				break;
			case 6:
				dlg.onConfirmCancel(args[0], args[1], args[2], args[3], args[4], args[5]);
				break;
			}
		}
		else
			dlg.onConfirmCancel();

		dlg.onConfirmCancel = new Function();
	}

	var dlg_btn = new CButton("No", noClicked, null, "b1");
	dlg_btn.print(bdv);

	var len = msg.length * 10;
	this.sm(len, 50);

	this.m_cleardv = dv;
}

CDialog.prototype.onConfirmOk = function()
{
}

CDialog.prototype.onConfirmCancel = function()
{
}

CDialog.prototype.promptBox = function(msg, title, def_value, args)
{
	if (!this.m_initialized)
		this.initdlg();

	if (title)
	{
		this.m_titlecon.innerHTML = title;
		this.m_titlecon.style.display="block";
	}

	var dlg = this;

	var dv = ALib.Dom.createElement("div");
	this.m_bodycon.appendChild(dv);

	var dv_inner = ALib.Dom.createElement("div");
	ALib.Dom.styleSet(dv_inner, "text-align", "center");
	dv.appendChild(dv_inner);

	var sp = ALib.Dom.createElement("div");
	dv_inner.appendChild(sp);
	sp.innerHTML = msg;

	var bdv = ALib.Dom.createElement("div");
	bdv.setAttribute("align", "center");
	dv_inner.appendChild(bdv);

	var inpdv = ALib.Dom.createElement("div", bdv);
	this.m_input = ALib.Dom.createElement("input", inpdv);
	ALib.Dom.styleSet(this.m_input, "width", "95%");
	this.m_input.value = def_value;

	function okClicked()
	{
		dlg.hide();
		if (args)
		{
			switch (args.length)
			{
			case 1:
				dlg.onPromptOk(dlg.m_input.value, args[0]);
				break;
			case 2:
				dlg.onPromptOk(dlg.m_input.value, args[0], args[1]);
				break;
			case 3:
				dlg.onPromptOk(dlg.m_input.value, args[0], args[1], args[2]);
				break;
			case 4:
				dlg.onPromptOk(dlg.m_input.value, args[0], args[1], args[2], args[3]);
				break;
			case 5:
				dlg.onPromptOk(dlg.m_input.value, args[0], args[1], args[2], args[3], args[4]);
				break;
			case 6:
				dlg.onPromptOk(dlg.m_input.value, args[0], args[1], args[2], args[3], args[4], args[5]);
				break;
			}
		}
		else
			dlg.onPromptOk(dlg.m_input.value);

		dlg.onPromptOk = new Function();
	}
	
	var dlg_btn = new CButton("Ok", okClicked, null, "b1");
	dlg_btn.print(bdv);


	// Add spacer
	var spcr = ALib.Dom.createElement("span", bdv);
	spcr.innerHTML = "&nbsp;";

	function cancelClicked()
	{
		dlg.hide();
		if (args)
		{
			switch (args.length)
			{
			case 1:
				dlg.onPromptCancel(args[0]);
				break;
			case 2:
				dlg.onPromptCancel(args[0], args[1]);
				break;
			case 3:
				dlg.onPromptCancel(args[0], args[1], args[2]);
				break;
			case 4:
				dlg.onPromptCancel(args[0], args[1], args[2], args[3]);
				break;
			case 5:
				dlg.onPromptCancel(args[0], args[1], args[2], args[3], args[4]);
				break;
			case 6:
				dlg.onPromptCancel(args[0], args[1], args[2], args[3], args[4], args[5]);
				break;
			}
		}
		else
			dlg.onPromptCancel();

		dlg.onPromptCancel = new Function();
	}

	var dlg_btn = new CButton("Cancel", cancelClicked, null, "b1");
	dlg_btn.print(bdv);

	if (typeof title != "undefined")
		var len = (msg.length > title.length) ? msg.length * 10 : title.length * 10;
	else
		var len = msg.length * 10;
	this.sm(len, 50);

	this.m_cleardv = dv;
}

CDialog.prototype.onPromptOk = function()
{
}

CDialog.prototype.onPromptCancel = function()
{
}

CDialog.prototype.customDialog = function(con, width, height)
{
	if (!this.m_initialized)
		this.initdlg();

	if (this.m_title)
	{
		this.m_titlecon.innerHTML = "";

		if (this.f_close)
		{
			var closedv = ALib.Dom.createElement("div", this.m_titlecon);
			ALib.Dom.setClass(closedv, "CDialogTitleClose");
			ALib.Dom.styleSet(closedv, "float", "right");
			closedv.m_dlg = this;
			closedv.onclick = function() { this.m_dlg.hide(); }
			//closedv.innerHTML = "X";
		}

		var ttlsp = ALib.Dom.createElement("span", this.m_titlecon);
		ttlsp.innerHTML = this.m_title;
		this.m_titlecon.style.display="block";
	}

	var dlg = this;

	con.m_dialog = dlg;
	this.m_bodycon.appendChild(con);

	this.m_cleardv = con;

	this.sm(width, height);
}

CDialog.prototype.statusDialog = function(con, width, height)
{
	if (!this.m_initialized)
		this.initdlg();
	
	ALib.Dom.setClass(this.m_bodycon, "");
	ALib.Dom.setClass(this.m_dcon, "");

	var dlg = this;

	con.m_dialog = dlg;
	this.m_bodycon.appendChild(con);

	this.m_cleardv = con;

	this.sm(width, height);
}
