function Popup(params)
{
	if (!params) {
		var params = {};
	}

	this.data = params.data || {};
	this.name = params.name || 'dialog';
	this.wait = params.wait || 'Please wait';
	this.url  = params.url || null;
	this.width = params.width || 650;
	this.autoOpen = params.autoOpen || false;
	this.action  = params.action || 0;
	this.formName  = params.formName || '';
	this.currentHandler = params.currentHandler || 'affilateSaveUser';
	this.redirect = params.redirect || '';
	this.extraData = params.extraData || '';

	if (this.autoOpen) {
		this.open();
	}
}

Popup.prototype.open = function ()
{
	var self = this;

	if (!jQuery('#' + self.name).length) {
		jQuery('body').append('<div id="' + self.name + '"></div>');
	}

	jQuery('#' + self.name).dialog("open");
	jQuery('#' + self.name).html('<div style="text-align: center; margin-top:25px;"><img src="theme/default/images/loading-48x48.gif" alt="" /><h1>' + self.wait + '</h1></div>');

	jQuery('#' + self.name).dialog({
		modal     : true,
		width     : self.width,
		position  : ["top", 10],
		resizable : false,
		close     : function(event, ui) { jQuery('#' + self.name).remove(); }
	});

	if (self.url) {
		jQuery.ajax({
			type : "GET",
			url  : self.url,
			data : jQuery.param(self.data),
			success: function(response) {
				if (self.handler && jQuery.isFunction(self.handler)) {
					self.handler(response);
				} else {
					jQuery('#' + self.name).html(response);
				}
			}
		});
	}
}

Popup.prototype.close = function (name)
{
	var self = this;

	jQuery('#' + (name || self.name)).dialog("close");
	jQuery('#' + (name || self.name)).remove();
}

Popup.prototype.save = function (params)
{
	var self = this;

	if (!params) {
		var params = {};
	}

	if (params.data) {
		if (typeof params.data == 'object') {
			params.data = jQuery.param(params.data);
		}
	} else {
		params.data = '';
	}

	if (self.url) {
		jQuery.ajax({
			dataType : params.dataType || 'json',
			type : "POST",
			url  : self.url,
			data : params.data,
			success: function(response) {
				if (params.handler && jQuery.isFunction(params.handler)) {
					params.handler(response);
				} else if (self.handler && jQuery.isFunction(self.handler)) {
					self.handler(response);
				} else {
					jQuery('#' + self.name).html(response);
				}
			}
		});
	}
}