﻿var PixDialogEvents = {};
PixDialogEvents.ShowUpdater = 'PixDialogEvents.ShowUpdater';
PixDialogEvents.HideUpdater = 'PixDialogEvents.HideUpdater';
PixDialogEvents.Showing = 'PixDialogEvents.Showing';
PixDialogEvents.Hiding = 'PixDialogEvents.Hiding';

var PixDialog = Class.extend
({
	contentElement: null,
	dialogOptions: null,
	updater: null,

	wrapperClass: 'pixDialogWrapper',
	innerWrapperClass: 'pixDialogInnerWrapper',
	iconWrapperClass: 'pixIconWrapper',

	init: function(dialogContentElement, dialogOptions) {
		this.contentElement = $(dialogContentElement);
		this.dialogOptions = this.mergeDefaultOptions(dialogOptions);
		this.contentElement.dialog(this.dialogOptions);
		this.configurePopup(this.dialogOptions);
	},

	show: function() {
		$(this).trigger(PixDialogEvents.Showing);
		this.contentElement.dialog('open');

		try {
			$('input:first', this.contentElement)[0].focus();
		}
		catch (e) {
		}
	},

	hide: function() {
		this.contentElement.dialog('close');
	},

	destroy: function() {
		this.contentElement.dialog('destroy');
	},

	onHiding: function() {
		$(this).trigger(PixDialogEvents.Hiding);
	},

	mergeDefaultOptions: function(dialogOptions) {
		dialogOptions.autoOpen = dialogOptions.autoOpen ? dialogOptions.autoOpen : false;
		dialogOptions.modal = dialogOptions.modal == undefined ? true : dialogOptions.modal;
		dialogOptions.servicePath = dialogOptions.servicePath == undefined ? null : dialogOptions.servicePath;
		dialogOptions.draggable = dialogOptions.draggable == undefined ? true : dialogOptions.draggable;
		dialogOptions.dialogClass = dialogOptions.dialogClass ? ' ' + dialogOptions.dialogClass : '';
		dialogOptions.dialogClass = this.wrapperClass + dialogOptions.dialogClass;

		var dialog = this;
		dialogOptions.close = function(event, ui) { dialog.onHiding(event, ui); }

		return dialogOptions;
	},

	configurePopup: function(dialogOptions) {
		var dialog = $(this.contentElement).parent();

		var innerWrapper = $('<div></div>').addClass(this.innerWrapperClass);
		dialog.children().appendTo(innerWrapper);
		innerWrapper.appendTo(dialog);

		$('.ui-dialog-titlebar-close', dialog).appendTo(dialog);

		this.updater = $('<div class="updater"></div>').appendTo($('.ui-dialog-titlebar', dialog));

		if (dialogOptions.showTitle === false) {
			$('.ui-dialog-titlebar', dialog).hide();
		}
	},

	showUpdater: function() {
		if (this.updater) {
			this.updater.show();
		}
	},

	hideUpdater: function() {
		if (this.updater) {
			this.updater.hide();
		}
	},

	createWebRequest: function(methodName, params, sucessFunction, errorFunction) {
		if (this.dialogOptions.servicePath) {

			var proxy = new JsonProxy();
			var pd = this;

			proxy.load({ url: pd.dialogOptions.servicePath + methodName,
				params: params,
				success: sucessFunction,
				error: errorFunction,
				timeout: pd.defaultTimeout
			});
		}
	},

	processData: function(data) {
		$.each(data, function(i, n) {
			if (n.Script) {
				eval(n.Script);
			}
		});
	}

});

PixDialog.Events = PixDialogEvents;

var PixTabBase = Class.extend
({
	onOpen: function(tabClass) {
	}
});