(function ($) {
	$.fn.extend({
		easygallery: function (config) {
			var gConfig = $.extend({
				triggerSelector: ""
			}, config);
			var gPlayer = $(this);
			var gItems = gPlayer.children("li");
			var gControls;
			var gTriggers;
			var prev = function () {
				var prevItem = gItems.filter(".default");
				var nextItem = prevItem.prev().length ? prevItem.prev() : gItems.last();
				anim(prevItem, nextItem);
				done();
			};
			var next = function () {
				var prevItem = gItems.filter(".default");
				var nextItem = prevItem.next().length ? prevItem.next() : gItems.first();
				anim(prevItem, nextItem);
				done();
			};
			var skip = function (a) {
				var prevItem = gItems.filter(".default");
				if (prevItem.index() == a) {
					return;
				}
				var nextItem = gItems.eq(a);
				anim(prevItem, nextItem);
				done();
			};
			var zoom = function () {
				gItems.filter(".default").find("a").click();
			};
			var anim = function (a, b) {
				$([a, b]).toggleClass("default");
			};
			var done = function () {
				var currItem = gItems.filter(".default");
				gControls.find(".page").text(currItem.index() + 1 + " of " + gItems.length);
				if (currItem.find("a").length) {
					gControls.find(".zoom").show();
				} else {
					gControls.find(".zoom").hide();
				}
			};
			gControls = $('<div class="easygallery-controls"></div>').insertAfter(gPlayer);
			$('<a href="#" class="prev"></a>').click(function () {
				prev();
				return false;
			}).appendTo(gControls);
			$('<span class="page"></span>').appendTo(gControls);
			$('<a href="#" class="next"></a>').click(function () {
				next();
				return false;
			}).appendTo(gControls);
			$('<a href="#" class="zoom"></a>').click(function () {
				zoom();
				return false;
			}).appendTo(gControls);
			done();
			if (gConfig.triggerSelector) {
				gTriggers = $(gConfig.triggerSelector);
				gTriggers.find("a").click(function () {
					skip($(this).parent().index());
					return false;
				});
			}
			return this;
		}
	});
})(jQuery);

