/* Script Name: Xalert
 * Copyright: David and Joe Ltd.
 * Author: Rupert Sharp (yeah I'm awesome)
 * 
 * @message = Message to display
 * @title = Title to be displayed on alert box
 * @confirmClose = User must confirm reading of the message
 * @fadeDelay = @confirmClose must be null, sets the time before the box fades out
 * @barrier = while displaying alert box a semi-transparent barrier will be brought up to stop user clicking anything
 *  
 */

//Function for centering the alert box in the page
function centerXalertBox(Xwidth,Yheight,divid)
{
	// First, determine how much the visitor has scrolled
	
	var scrolledX, scrolledY;
	if( self.pageYoffset ) {
		scrolledX = self.pageXoffset;
		scrolledY = self.pageYoffset;
	}
	else if( document.documentElement && document.documentElement.scrollTop ) {
		scrolledX = document.documentElement.scrollLeft;
		scrolledY = document.documentElement.scrollTop;
	}
	else if( document.body ) {
		scrolledX = document.body.scrollLeft;
		scrolledY = document.body.scrollTop;
	}
	
	// Next, determine the coordinates of the center of browser's window
	
	var centerX, centerY;
	if( self.innerHeight ) {
		centerX = self.innerWidth;
		centerY = self.innerHeight;
	}
	else if( document.documentElement && document.documentElement.clientHeight ) {
		centerX = document.documentElement.clientWidth;
		centerY = document.documentElement.clientHeight;
	}
	else if( document.body ) {
		centerX = document.body.clientWidth;
		centerY = document.body.clientHeight;
	}
	
	// Xwidth is the width of the div, Yheight is the height of the
	// div passed as arguments to the function:
	var leftoffset = scrolledX + (centerX - Xwidth) / 2;
	var topoffset = scrolledY + (centerY - Yheight) / 2;
	// The initial width and height of the div can be set in the
	// style sheet with display:none; divid is passed as an argument to // the function
	var o=document.getElementById(divid);
	var r=o.style;
	//r.position='absolute';
	r.top = topoffset + 'px';
	r.left = leftoffset + 'px';
	//r.display = "block";
}


//Calls alert box
function Xalert(message,title,confirmClose,fadeDelay,barrier)
{
	//Id that the new alert will user
	var alertBoxId = 'alertBox';

	//Id the alert box title will use
	var alertBoxTitleId = 'alertBoxTitle';

	//Id the alert box content will use
	var alertBoxContentId = 'alertBoxContent';

	//Id the barrier will use
	var alertBoxBarrierId = 'alertBoxBarrier';

	//Where we're going to store out alert box
	var alertBoxContainer = 'ministore';
	
	//The attributes for our new alert box
	var alertBoxAttributes = {
		id        : alertBoxId,
		'class'   : 'Xalert',
		'style'   : 'display:none;'
	};
	
	//Ensure there is a message to display
	if(message.length == 0)
	{
		alert('No message in this alert!');
		return;
	}

	//Check an alertbox isn't already open
	if($(alertBoxId) != undefined)
	{
		return;
	}

	//Check alert storage div exists
	if($(alertBoxContainer) == undefined)
	{
		alert('Alert container not found!');
	}

	//Check if barrier is required
	if(barrier != '' && barrier != undefined)
	{
		//Create barrier element
		alertBoxBarrier = new Element('div',{id: alertBoxBarrierId,'class' : 'XalertBarrier','style' : 'display:none;'})
		
		//Insert barrier element into content
		$(alertBoxContainer).insert(alertBoxBarrier);
	}

	//Create new element
	alertBox = new Element('div', alertBoxAttributes);

	//Insert div in container
	$(alertBoxContainer).insert(alertBox);

	//If title exists, then insert title div
	if(title != undefined && title != '')
	{
		//Create title div
		alertTitleDiv = new Element('div',{id : alertBoxTitleId, 'class' : 'XalertTitle'});

		//Insert in alertbox
		$(alertBoxId).insert(alertTitleDiv);
		
		//Set content to the title
		$(alertBoxTitleId).innerHTML = title;
	}

	//Create message div
	alertContentDiv = new Element('div',{id:alertBoxContentId,'class' : 'XalertContent'});

	//Insert message div in alertBox
	$(alertBoxId).insert(alertContentDiv);

	//See if the box needs confirmation to close
	if(confirmClose != '' && confirmClose != undefined)
	{
		//If barrier is being used
		if(barrier != '' && barrier != undefined){
			//Ensure barrier will be removed on closing
			$(alertBoxContentId).innerHTML = '<p>'+message+'</p><table width="100%"><tr><td><a href="javascript:XalertClose(\''+alertBoxId+'\',\''+alertBoxBarrierId+'\')">Okay</a></td></tr></table>';
		}else{
			//Otherwise just remove alert box
			$(alertBoxContentId).innerHTML = '<p>'+message+'</p><table width="100%"><tr><td><a href="javascript:XalertClose(\''+alertBoxId+'\')">Okay</a></td></tr></table>';
		}
	}else{
		//If no confirmation is needed
		$(alertBoxContentId).innerHTML = '<p>'+message+'</p>';
	}

	//Make alertBox appear so we can get it's dimensions
	$(alertBoxId).style.opacity = 0.1;
	$(alertBoxId).style.display='block';
	
	//User dimensions to center alertBox
	centerXalertBox($(alertBoxId).offsetWidth,$(alertBoxId).offsetHeight,alertBoxId);

	//Make div dissapear for now
	$(alertBoxId).style.display='none';
	$(alertBoxId).style.opacity = 1;

	//If barrier exist then show barrier
	if(barrier != '' && barrier != undefined)
	{
		//Fade in barrier to 0.7
		new Effect.Appear(alertBoxBarrierId,{from : 0.0, to : 0.7,duration:0.4});
	}
	
	//Display alertBox 
	new Effect.Appear(alertBoxId,{duration:0.4});
	
	//If confirmation is not required, fade out in yay seconds
	if(confirmClose == '' || confirmClose == undefined)
	{
		//If fadeDelay is not set, set it to two seconds
		if(fadeDelay == '' || fadeDelay == undefined)
		{
			fadeDelay = 2000;
		}
		if(barrier != '' && barrier != undefined){
			var t=setTimeout("XalertClose('"+alertBoxId+"','"+alertBoxBarrierId+"')",fadeDelay);
		}else{
			var t=setTimeout("XalertClose('"+alertBoxId+"')",fadeDelay);
		}
	}
}

//Closes the alert box
function XalertClose(divId,barrierId)
{
	//Ensure barrier exists then remove
	if(barrierId != '' && barrierId != undefined && document.getElementById(barrierId) != undefined){
		new Effect.Fade(barrierId,{ duration:0.4,
			afterFinish:function()
			{
				$(barrierId).remove();
			}
		});
	}
	//Ensure alertbox exists then remove
	if(divId != '' && divId != undefined && document.getElementById(divId) != undefined){
		new Effect.Fade(divId,{duration:0.4,
			afterFinish:function()
			{
				$(divId).remove();
			}
		});
	}
}