/*************************************************
General Modal Dialog Window Plugin
First Version: 12 February 2010
Author: Arun Raghavan
Usage: $j("some id or class").LFGModalDialog({ action: 'alert', message: 'Message for alert' });
************************************************/
$j.fn.LFGModalDialog = function(options){
	//variables for jQuery references to title, content and buttons panels
	var dialogWrapper, dialogTable, dialogTitle, dialogContent, dialogButtons;
	var now = new Date();

	var settings = {
		action: 'alert',
		showDeleteLink: 'false',
		title: null,
		message: null,
		messageId: -1,
		approveBtnTxt: 'Ok', 
		cancelBtnTxt: 'Cancel',
		callback: null,
		dialogWidth: 500,
		modalId: now.getTime()
	};

	if (options) {
		$j.extend(settings, options);
	}

	/*************************************************
	 * Dialog Methods
	 *************************************************/
	var actions = {
		closeDialog: function(callback){
			$j('#modaldialog-wrapper-' + settings.modalId).remove();
			$j('#modaldialog-overlay-' + settings.modalId).remove();

			//reset focus when muliple dialogs are opened and then closed.
			if ($j('.modalDialogWrapper').length > 1) 
				actions.setFocus();

			if (callback) callback();
		},

		setFocus: function(){
			//delay required to accomodate IE bugs
			if ($j('#btnApprove').length > 0) {
				window.setTimeout("document.getElementById('btnApprove').focus()", 200);
			}
		}
	};

	/*************************************************
	 * Display Methods
	 *************************************************/
	var build = {
		createDialogWrapper: function(){
			//center the dialog box; Requires jQuery Dimensions
			var centerOffset = ($j('body').width() - settings.dialogWidth) / 2;
			var topOffset = ($j('body').height() - settings.dialogWidth) / 2;

			//append folder dialog root to document body
			$j(document.body).append('<div id="modaldialog-wrapper-' + settings.modalId + '" class="modalDialogWrapper" style="top: ' + topOffset + 'px;left:' + centerOffset + 'px">'
						+ '<table class="dialog-panels ' + settings.action + '">'
						+ '<tr><td rowspan="2" class="dialog-icon"><img src="1x1.gif" width="116" height="1" border="0"/></td>'
						+ '<td class="dialog-content"><a href="#" class="close-dialog-icon"></a><h3></h3></td></tr>'
						+ '<tr><td class="dialog-buttons"></td></tr></table></div>');
			$j(document.body).append('<div id="modaldialog-overlay-' + settings.modalId + '" class="modaldialog-overlay"></div>');

			//get handles on the DOM container panels for title, content, and buttons
			dialogWrapper 	= $j('#modaldialog-wrapper-' + settings.modalId);
			dialogTable		= $j('table.dialog-panels', dialogWrapper);
			dialogTitle 	= $j('table.dialog-panels td.dialog-content h3', dialogWrapper);
			dialogContent	= $j('table.dialog-panels td.dialog-content', dialogWrapper);
			dialogButtons 	= $j('table.dialog-panels td.dialog-buttons', dialogWrapper);

			//create close dialog keyboard shortcut
			shortcut.add("Esc", function() { actions.closeDialog();	}, { 'type': 'keydown'});
		},

		alertDialog: function(msg, msgId){
			dialogTitle.append('Alert');
			dialogContent.append('<p>' + msg + '</p>');
			if (settings.showDeleteLink == 'true')
				dialogContent.append('<p><input type="checkbox" ' +
				'onclick="JavaScript:checkCookie(this,\'Show' + msgId + '\')">' +
				'<b>&nbsp;Do not show this message again.</b></p>');
			dialogButtons.append('<button type="submit" id="btnApprove">' + settings.approveBtnTxt + '</button>');
			dialogButtons.children('#btnApprove').click(function(){ 
				if (settings.callback) settings.callback();
				actions.closeDialog();
			});	
		},

		confirmDialog: function(msg){
			var title = settings.title ? settings.title : 'Confirm Change';
			dialogTitle.append(title);
			dialogContent.append('<p>' + msg + '</p>');
			dialogButtons.append('<button type="submit" id="btnApprove">' + settings.approveBtnTxt + '</button>');
			dialogButtons.append('<button type="button" id="btnCancel">' + settings.cancelBtnTxt + '</button>');

			dialogButtons.children('#btnApprove').click(function(){
				if (settings.callback) settings.callback();
				actions.closeDialog();
			});
		}
	};

	/*************************************************
	 * Create the Dialog
	 *************************************************/
	//create dialog wrapper
	build.createDialogWrapper();

	//build dialogContent based on action type
	if (settings.action == 'alert')
		build.alertDialog(settings.message, settings.messageId);
	else if (settings.action == 'confirm')
		build.confirmDialog(settings.message);
	else 
		actions.closeDialog();

	//get handles on the storage components
	var dialogContainer = $j('div#modaldialog-wrapper-' + settings.modalId);
	var closeDialogBox	= $j('a.close-dialog-icon', dialogContainer);

	/*************************************************
	 * Bind Dialog Events and Center it
	 *************************************************/
	dialogContainer.draggable({cursor:'move', cancel: ':input, button, .block-draggable'  });
	closeDialogBox.click(function(){
		actions.closeDialog();
	});
	dialogButtons.children('#btnCancel').click(function(){
		actions.closeDialog(); 
	});

	actions.setFocus();

	return(this);	
};

