(function($) {
	$.widget('oc.ocdialog', {
		options: {
			closeButton: true,
			closeOnEscape: true,
			modal: false
		},
		_create: function() {
			var self = this;
			this.originalTitle = this.element.attr('title');
			this.options.title = this.options.title || this.originalTitle;
			this.$dialog = $('
')
				.attr({
					// Setting tabIndex makes the div focusable
					tabIndex: -1,
					role: 'dialog'
				})
				.insertBefore(this.element);
			this.$dialog.append(this.element.detach());
			this.element.removeAttr('title').addClass('oc-dialog-content').appendTo(this.$dialog);
			$(document).on('keydown keyup', function(event) {
				if (
					event.target !== self.$dialog.get(0) &&
					self.$dialog.find($(event.target)).length === 0
				) {
					return;
				}
				// Escape
				if (
					event.keyCode === 27 &&
					event.type === 'keydown' &&
					self.options.closeOnEscape
				) {
					event.stopImmediatePropagation();
					self.close();
					return false;
				}
				// Enter
				if (event.keyCode === 13) {
					event.stopImmediatePropagation();
					if (event.type === 'keyup') {
						event.preventDefault();
						return false;
					}
					// If no button is selected we trigger the primary
					if (
						self.$buttonrow &&
						self.$buttonrow.find($(event.target)).length === 0
					) {
						var $button = self.$buttonrow.find('button.primary');
						if ($button) {
							$button.trigger('click');
						}
					} else if (self.$buttonrow) {
						$(event.target).trigger('click');
					}
					return false;
				}
			});
			this._setOptions(this.options);
			this._createOverlay();
		},
		_init: function() {
			this.$dialog.focus();
			this._trigger('open');
		},
		_setOption: function(key, value) {
			var self = this;
			switch (key) {
				case 'title':
					if (this.$title) {
						this.$title.text(value);
					} else {
						var $title = $('' +
							value +
							'
');
						this.$title = $title.prependTo(this.$dialog);
					}
					break;
				case 'buttons':
					if (this.$buttonrow) {
						this.$buttonrow.empty();
					} else {
						var $buttonrow = $('');
						this.$buttonrow = $buttonrow.appendTo(this.$dialog);
					}
					if (value.length === 1) {
						this.$buttonrow.addClass('onebutton');
					} else if (value.length === 2) {
						this.$buttonrow.addClass('twobuttons');
					} else if (value.length === 3) {
						this.$buttonrow.addClass('threebuttons');
					}
					$.each(value, function(idx, val) {
						var $button = $('