var index;

(function ($) {
	// Get instances of objectifier.
	var method = window.objectifier.method( );
	var object = window.objectifier.object( );

	var internal = {
		active: false,
		open: false,

		elements: undefined,

		closure: method.make('closure', function (method, parameters) {
			// Declare variables.
			var object = this;

			// Create closure.
			return function ( ) {
				if (!$.isArray(parameters)) {
					parameters = arguments;
				}

				return method.apply(object, parameters);
			};
		}),

		toggle: function ( ) {
			if (this.open) {
				this.open = false;

				$(this.elements.button).removeClass('active');
				$(this.elements.selector).hide('fast');

				return;
			}

			this.open = true;

			$(this.elements.button).addClass('active');
			$(this.elements.selector).show('fast');
		}
	};

	var external = {
		initiate: function (button, selector) {
			if (this.active) {
				return false;
			}

			var elements = {
				button: $(button),
				selector: $(selector)
			};

			if (!elements.button.length || !elements.selector.length) {
				return false;
			}

			this.active = true;

			this.elements = {
				button: elements.button[0],
				selector: elements.selector[0]
			};

			$(this.elements.button).click(this.closure(this.toggle, []));

			return true;
		}
	};

	var index = {};
	for (i in external) {
		index[i] = (function (external, internal) {
			return function ( ) {
				return external.apply(internal, arguments);
			}
		})(external[i], internal);
	}

	// Export it to the global variable.
	window.index = index;
})(jQuery);

