var VeilDialog = Class.create();

//CBDialog.removeOnDrop = true;
VeilDialog.veilZ = 10000;
VeilDialog.isShown = false;


VeilDialog.prototype = {

/**
 * Modal dialog class
 */
initialize: function( pTitle )
{
	// veil technology
	this.veilOverlay = document.getElementById('dialogBoxVeil');
	if (this.veilOverlay == null)
	{
	   this.veilOverlay = document.createElement('div');
	   this.veilOverlay.id = 'dialogBoxVeil';
	   this.veilOverlay.className = "cbDialogVeil";
	   this.veilOverlay.style.zIndex = VeilDialog.veilZ;
	   if (true) {
		   if (true) {
			   this.veilImage = document.createElement('div');
			   this.veilImage.id = 'ajax_wait';
	   		this.veilImage.className = "ajaxwaitbox";
		   	//tBlockDiv.className = 'simpleArticlePanel';
		   	this.veilImage.innerHTML = '<img name="AJAX_WAIT_IMG" title="Please wait..." src="pics/ajax-loader.gif" width="16" height="16"/>';
	   		this.veilOverlay.appendChild(this.veilImage);
	   	} else {
			   this.veilOverlay.innerHTML = '<img name="AJAX_WAIT_IMG" title="Please wait..." src="pics/ajax-loader.gif" width="16" height="16"/>';
	   	}
	   } else {
		   this.veilOverlay.innerHTML = "&nbsp;";
		}
	   this.setVeilWidth();
	   this.addListener(window, "resize", this.setVeilWidth);
	   document.body.appendChild(this.veilOverlay);
	}
		
	// the main container
	this.container 				= document.createElement('div');	// the content
	this.container.className 	= 'dialogBox';							// default className, can be changed
	this.container.id 			= 'dialogBoxOld';
	// this.container.dialogBox 	= this;								// needed to close the box

	// the header
	this.header						= document.createElement('div');	
	this.header.id					= 'head';
	this.header.className		= 'head';
	this.headerSpan				= document.createElement('span');
	//this.headerSpan.appendChild(document.createTextNode(gibbrick_blanks[275]));
	this.headerSpan.appendChild(document.createTextNode(pTitle));
	this.header.appendChild(this.headerSpan);

	// the close image in the top right corner
	this.closeIcon					= document.createElement('img');
	this.closeIcon.src			= '../pics/close.gif';
	this.closeIcon.width			= 9;
	this.closeIcon.height		= 9;
	this.closeIcon.alt			= gibbrick_blanks[205];
	this.closeIcon.title			= gibbrick_blanks[205];
	this.closeIcon.dialogBox	= this;

	// the close link
	var closeLink					= document.createElement('a');
	closeLink.onclick 			= this.closeBox;
	closeLink.setAttribute('href','#');
	closeLink.appendChild(this.closeIcon);

	this.header.appendChild(closeLink);
	
	// the content
	this.content					= document.createElement('div');	
	this.content.id				= 'contentDialog';
	this.content.className		= 'content';

	// putting it all together
	this.container.appendChild(this.header);
	this.container.appendChild(this.content);
	
	var tContainer = document.getElementById("dialogBoxOld");
	if (tContainer == null) {
	   document.body.appendChild(this.container);
	} else {
	   document.body.replaceChild(this.container, tContainer);
	}
},


/**
 * David Test Fills the container div with CBEvent info
 */
setContentDavid: function()
{
	var linkButtonOk 				= document.createElement('a');
	var linkButtonCancel 		= document.createElement('a');
	var linkTxtOk 					= document.createElement('a');
	var linkTxtCancel 			= document.createElement('a');
	var txtOk						= document.createTextNode('OK');
	var txtCancel					= document.createTextNode('Cancel');
	var txtOkHelp					= document.createTextNode('Ok help text here\n');
	var txtCancelHelp				= document.createTextNode('Cancel help text here\n');
	var linkTxtOkHelp 			= document.createElement('a');
	var linkTxtCancelHelp		= document.createElement('a');
	var linkImage1					= document.createElement('img');
	var linkImage2					= document.createElement('img');
	var paragraph1					= document.createElement('p');
	var paragraph2					= document.createElement('p');

	linkImage1.src					= "pics/link_button.gif";
	linkImage2.src					= "pics/link_button.gif";
	
	linkButtonOk.onclick 		= this.closeBox;
	linkButtonOk.id		 		= 'ok';
	linkButtonOk.setAttribute('href','#');
	linkButtonOk.dialogBox		= this;

	linkTxtOk.onclick 			= this.closeBox;
	linkTxtOk.id			 		= 'ok';
	linkTxtOk.setAttribute('href','#');
	linkTxtOk.dialogBox			= this;

	linkButtonCancel.onclick 	= this.closeBox;
	linkButtonCancel.id		 	= 'cancel';
	linkButtonCancel.setAttribute('href','#');
	linkButtonCancel.dialogBox	= this;

	linkTxtCancel.onclick 		= this.closeBox;
	linkTxtCancel.id		 		= 'cancel';
	linkTxtCancel.setAttribute('href','#');
	linkTxtCancel.dialogBox		= this;

	linkButtonOk.appendChild(linkImage1);
	linkButtonCancel.appendChild(linkImage2);
	linkTxtOk.appendChild(txtOk);
	linkTxtCancel.appendChild(txtCancel);

	linkTxtOkHelp.onclick 		= this.closeBox;
	linkTxtOkHelp.id		 		= 'okHelp';
	linkTxtOkHelp.setAttribute('href','#');
	linkTxtOkHelp.dialogBox		= this;
	linkTxtOkHelp.className		= 'more';
	linkTxtOkHelp.appendChild(document.createTextNode('[link txt ok help]'));
	
	linkTxtCancelHelp.onclick 		= this.closeBox;
	linkTxtCancelHelp.id		 		= 'cancelHelp';
	linkTxtCancelHelp.setAttribute('href','#');
	linkTxtCancelHelp.className	= 'more';
	linkTxtCancelHelp.dialogBox	= this;
	linkTxtCancelHelp.appendChild(document.createTextNode('[link txt cancel help]'));
	
	paragraph1.appendChild(linkTxtOk);
	paragraph1.appendChild(document.createElement('<br>'));
	paragraph1.appendChild(txtOkHelp);
	paragraph1.appendChild(linkTxtOkHelp);
	paragraph2.appendChild(linkTxtCancel);
	paragraph2.appendChild(document.createElement('<br>'));
	paragraph2.appendChild(txtCancelHelp);
	paragraph2.appendChild(linkTxtCancelHelp);
	
	this.content.appendChild(linkButtonCancel);
	this.content.appendChild(paragraph2);
	this.content.appendChild(linkButtonOk);
	this.content.appendChild(paragraph1);

},

/**
 * Sets the innerHTML property for the container div
 */
setContent: function(content)
{
	this.content.innerHTML = content;
},

//TODO
abstop: function(i)
{ 
	return (i.offsetParent) ? i.offsetTop+this.abstop(i.offsetParent) : i.offsetTop; 
},

absleft: function(i)
{ 
	return (i.offsetParent) ? i.offsetLeft+this.absleft(i.offsetParent) : i.offsetLeft; 
},

/**
 * Shows the modal dialog window
 */
show: function()
{
	this.isShown							= true;
	this.container.style.display			= 'block';
	this.veilOverlay.style.display	= 'block';
	this.container.style.zIndex 			= VeilDialog.veilZ + 1;
	//alert('Show: ' + this.veilOverlay.style.display);
},

/**
 * Hides the modal dialog window
 */
hide: function()
{
	this.isShown							= false;
	this.container.style.display		= 'none';
	this.veilOverlay.style.display	= 'none';
},

/**
 * (Re-)positions the dialog to the given x,y position relative 
 * to the given object (HTML element)
 *
 * @param top pixels from top (related to given object)
 * @param left pixels from left (related to given object)
 * @param relativeObj the object, the dialog should be oriented at
 */
moveTo: function(top, left, relativeObj)
{
   if(relativeObj)
   {
      this.container.style.left = (this.absleft(relativeObj)+left) + "px";
	   this.container.style.top = (this.abstop(relativeObj)+top) + "px";
	}
},

moveToCenter: function(centerObj)
{
	tLeft = (document.body.scrollWidth / 2) - 32;
   tTop = (document.body.scrollHeight / 2) - 32;
   this.container.style.left = tLeft + "px";
	this.container.style.top = tTop + "px";
},

/**
 * Sets the function to be called when OK has been clicked
 */ 
setCallOK: function(callOK)
{
	this.callOK = callOK;
},

/**
 * Sets the function to be called when CANCEL (or close button) has been clicked
 */
setCallCancel: function(callCancel)
{
	this.callCancel = callCancel;
},

/**
 * Closes the dialog box. An event is passed which will be a click on the close link.
 */
closeBox: function(e)
{
	if (!e) e = window.event;
  	var node = e.target ? e.target : e.srcElement;
	if (node != null)
	{
		if (node.dialogBox)
		{
			if (node.id)
			{
				if (node.id == 'ok')
				{
					if (node.dialogBox.callOK)
					{
						node.dialogBox.callOK();
					}
				} else if (node.id == 'cancel')
				{
					if (node.dialogBox.callCancel)
					{
						node.dialogBox.callCancel();
					}
				}
			}
			
      	node.dialogBox.hide();
      	var dialogs = document.getElementsByName('dialogBoxOld');
      	for (var i = 0; i < dialogs.length; i++)
      	{
      		document.body.removeChild(dialogs[i]);
      	}
      }
	}
	
	return false;
},

/**
 * "Static" functions and members
 */

addListener: function(obj, eventType, func)
{
	if (obj.addEventListener)
	{
  		obj.addEventListener(eventType, func, false);
		return true;
	} else if (obj.attachEvent)
	{
		return obj.attachEvent('on' + eventType, func);
	}
	
	return false;
},
  
setVeilWidth: function()
{
	if (null == this.veilOverlay) {
		this.veilOverlay = document.getElementById('dialogBoxVeil');
	}
	if (null != this.veilOverlay) {
		try {
			if (browser.isIE) {
				this.veilOverlay.style.width 	= document.body.scrollWidth;
				this.veilOverlay.style.height = document.body.scrollHeight;
			} else {
				this.veilOverlay.style.width 	= document.body.scrollWidth + "px";
				this.veilOverlay.style.height = document.body.scrollHeight + "px";
				this.veilImage.style.left = ((document.body.scrollWidth / 2) - 8) + "px";
				this.veilImage.style.top = ((document.body.scrollHeight / 2) - 8) + "px";
			}
		} catch (e) {
			//alert("setVeilWidth: " + e);
		}
	} else {
		alert("VeilOverlay is null");
	}
}

} //end class


function Browser() {

var ua, s, i;

this.isIE = false; // Internet Explorer
this.isNS = false; // Netscape
this.version = null;

ua = navigator.userAgent;

s = "MSIE";
if ((i = ua.indexOf(s)) >= 0) {
this.isIE = true;
this.version = parseFloat(ua.substr(i + s.length));
return;
}

s = "Netscape6/";
if ((i = ua.indexOf(s)) >= 0) {
this.isNS = true;
this.version = parseFloat(ua.substr(i + s.length));
return;
}

// Treat any other "Gecko" browser as NS 6.1.

s = "Gecko";
if ((i = ua.indexOf(s)) >= 0) {
this.isNS = true;
this.version = 6.1;
return;
}
}

var browser = new Browser();



function showVeilDialog(pTitle, pMoveToDocumentElement, pOkCallback, pCancelCallback)
{
   var dialog = new VeilDialog(pTitle); // modal dialog object   
   dialog.setContentDavid();
   //dialog.setCallOK(setSaveForAllOn);
   dialog.setCallOK(pOkCallback);
   //dialog.setCallCancel(setSaveForAllOff);
   dialog.setCallCancel(pCancelCallback);
   dialog.moveTo(0,0,document.getElementById(pMoveToDocumentElement));
   dialog.show();
}

/*
 * Allthese variables currently need to be initialised
**/
var gibbrick_blanks = new Array(282);
for (x=0; x<282; x++)
{
   gibbrick_blanks[x] = x;
}
var currentDate = "currentDate";

/////////////////////////////////////////////////
/////////////////////////////////////////////////
//AJAX Wait dialog
/////////////////////////////////////////////////
/////////////////////////////////////////////////

function doNothingOk() {
	alert("OK");
}

function doNothingCancel() {
	alert("CANCEL");
}

function showAjaxWaitDialog(pBlock)
{
	//alert("showAjaxWaitDialog " + pBlock);
   if (null == gAjaxWaitDialog) {
	   gAjaxWaitDialog = new VeilDialog(""); // modal dialog object   
		//Object.extend(gAjaxWaitDialog, AjaxWaitDialog);
		//gAjaxWaitDialog.setContent();
		gAjaxWaitDialog.setCallOK(doNothingOk);
		gAjaxWaitDialog.setCallCancel(doNothingCancel);
   }
   if (pBlock) {
	   gAjaxWaitDialog.show();
	} else {
	   gAjaxWaitDialog.hide();
	}
}

var gAjaxWaitDialog = null;

