;(function($, window, document, undefined) {

	$.eAjax = function(options) {
		options = $.extend({}, $.eAjax.options, options);

		// Загрузка при изменении хеша страницы
		$(document).on("load.eAjax", function(e, params) {
			$(options.containers).each(function() {
				var elem = $(this);
				var data = elem.data();
				var container = data.id;

				var hash = params.hash;
				if (hash.substr(0, 1) === "#") {
					hash = hash.substr(1);
				}

				// Все хеши контейнера
				var hashes = [];
				$(options.triggers).each(function() {
					var href = $(this).attr("href");
					if (href && $(this).data("target") === container && href.substr(0, 1) === "#") {
						hashes.push(href.substr(1));
					}
				});
				
				if ($.inArray("" + hash, hashes) === -1 && params.default_tab) {
					hash = data.default_tab;
				}

				if ($.inArray("" + hash, hashes) === -1) return;

				$.get(options.url, {
					ajax: hash
				}, function(html) {
					elem.html(html).domReady();
				});
			});
		});
		
		// Ссылки
		var hashChanged = function(forceDefault) {
			$(document).trigger("load.eAjax", {
				hash: window.location.hash,
				default_tab: forceDefault
			});
		};
		$(window).hashChange(hashChanged);
		// Показ вкладок при загрузке страницы
		hashChanged(true);

		// Отправка форм в контейнер
		$(document).on("submit", options.triggers, function(e) {
			e.preventDefault();

			var elem = $(this);
			var data = elem.data();

			var target;
			$(options.containers).each(function() {
				if ($(this).data("id") === data.target) {
					target = $(this);
					return false;
				}
			});

			elem.ajaxSubmit({
				data : {
					ajax: data.hash
				},
				success: function(html) {
					if (target) {
						target.html(html).domReady();
					}
				}
			});
		});

		// Добавляем формам в контейнерах информацию о том, что они должны отправиться в этот же контейнер
		$.domReady(function() {
			$(this).find("form").each(function() {
				var elem = $(this);
				var $container = elem.closest(options.containers);
				if (!$container.length) return;

				var data = $container.data();

				elem.addClass(options.formClass).data({
					target: data.id,
					hash: window.location.hash ? window.location.hash.substr(1) : ""
				});
			});
		});
	};
	
	$.eAjax.options = {
		containers: ".ajax-container",
		triggers: ".ajax",
		formClass: "ajax",
		url: "/"
	};
	
})(jQuery, window, document);

