jQuery(function()
{
	function getParent(el)
	{
		return jQuery(el).closest("div.hentry");
	}
	
	function getContainer(el)
	{
		return jQuery(el).closest(".gallery");
	}
	
	function isPlaying(el)
	{
		var res = true;
		
		if(getContainer(el).get(0).cyclePause>0)
			res = false;
		
		return res;
	}
	
	function createPagerAnchor(idx, slide)
	{
		var res = "";
		var slideNo = idx+1;
		var galleryStyle = getGalleryStyle(getParent(slide));
		var linkText = "";
		
		switch(galleryStyle)
		{
			case "alternate":
				linkText = slideNo;				
				break;
			case "dots":
			default:
				break;
		}
		res = "<a href='#'>"+linkText+"</a>";
		return res;
	};

	function afterCallback(curEl, nextEl, options, isFwd)
	{		
		var slideNo = jQuery(nextEl).data("counter");
		var parentEl = getParent(nextEl);
		var counterEl = parentEl.find(".entry-gallery-counter");
		var slideCount = parentEl.find(".entry-gallery").data("slideCount");
		var galleryStyle = getGalleryStyle(parentEl);
		
		switch(galleryStyle)
		{
			case "alternate":
				var counter = counterEl.find(".align");
				counter.html(slideNo);
				var counter2 = parentEl.find(".entry-gallery-nav");
				var cell_height = counter2.children().height();
				var offset = counter.offset();
				counter2.css("left", offset.left-4);
				counter2.animate({"top": offset.top-(slideNo-1)*cell_height-2}, 350, "swing");
				counter2.hide();
				break;
			case "dots":
				counterEl.html(slideNo+"/"+slideCount);
				break;
			default:
				counterEl.html(normalizeNumber(slideNo)+"/"+normalizeNumber(slideCount));
				break;
		}
	};
	
	function setupSlideNumbers(container)
	{
		var counter = 1;
		container.children().each(function() {jQuery(this).data("counter", counter); counter++});
	};
	
	function setupGalleryNavigation(galleryStyle, container)
	{	
		var slideCount = container.data("slideCount");
		var nav = jQuery("<div class='entry-gallery-nav'></div>");
		nav.data("parent-id", container.data("parent-id"));
		container.after(nav);
		switch(galleryStyle)
		{
			case "alternate":
				var counter = jQuery("<div class='entry-gallery-counter'><span class='align'>1</span>/<span>"+slideCount+"</span></div>");
				container.after(counter);
				var parentEl = jQuery("#"+nav.data("parent-id"));
				counter.children(".align").click(function() {parentEl.find(".entry-gallery-nav").show(); });
				nav.hide();
				break;
			case "dots":
				container.after("<div class='entry-gallery-counter'>1/"+slideCount+"</div>");
				break;
			default:
				container.after("<div class='entry-gallery-counter'>"+normalizeNumber(1)+"/"+normalizeNumber(slideCount)+"</div>")
				break;
		}
	}

	function normalizeNumber(num)
	{
		return (num<10?"0"+num:num);
	}
	
	function _setupRemoteControlAlternate(container)
	{
		var el = jQuery("<div class='entry-gallery-rc'></div>");
		el.append("<a href='#' class='entry-gallery-rc-pause'>stop</a>");
		el.append("<a href='#' class='entry-gallery-rc-prev'>previous</a>");
		el.append("<a href='#' class='entry-gallery-rc-next'>next</a>");
		
		container.after(el);
		
		el.children(".entry-gallery-rc-pause").click(function() 
				{					 
					var el=jQuery(this); 
					if(el.html()=="play")
					{
						container.cycle("resume");
						el.html("stop");
					}
					else
					{
						container.cycle("pause");
						el.html("play")
					}
					return false;
				});
	}
	
	function _setupRemoteControlDefault(container)
	{
		var parent = getParent(container);
		var counter = parent.find(".entry-gallery-counter");
		counter.after("<div class='entry-status-control'> </div>");
		var images = container.find(".gallery-item");
		images.css("width", container.closest(".hentry").width());
		images.mousemove(remoteControlDisplaySkip).mouseleave(remoteControlDisplayStatus).click(remoteControlSkip);
		/*
		var statusEl = parent.find(".entry-status-control");
		statusEl.mouseenter(remoteControlDisplayAction).mouseleave(remoteControlDisplayStatus).click(remoteControlPerformAction);
		*/
	}

	function remoteControlSkip(ev)
	{
		var el = jQuery(this);
		var container = getContainer(this);
		var opts = container.data("cycle.opts")
		var slideNo = opts.nextSlide;
		var slideCount = opts.elements.length;
		var offset = el.offset();
		var nextSlide = slideNo;
		if(ev.clientX-offset.left<=el.width()/2)
		{
			nextSlide = slideNo-2;
			if(nextSlide<0)
				nextSlide = slideCount+nextSlide;
		}
		container.cycle(nextSlide);
		
		return false;
	}
	
	/*
	function remoteControlPerformAction()
	{
		var el = jQuery(this);
		var parent = getParent(el);
		var container = parent.find(".gallery");				
		var statusEl = parent.find(".entry-status-control");
		
		var images = parent.find(".gallery-item:visible");
		
		if(isPlaying(images))
			container.cycle("pause");
		else
			container.cycle("resume");
		
		if(!isPlaying(images))
			statusEl.html(">");
		else
			statusEl.html("=");
	}
	
	function remoteControlDisplayAction()
	{
		var el = jQuery(this);
		if(el.html()!="=")
			el.html("Play");
		else
			el.html("Stop");
	}
	*/
	
	function remoteControlDisplaySkip(ev)
	{
		var el = jQuery(this);		
		var parent = getParent(el);
		var statusEl = parent.find(".entry-status-control");
		var width = el.width();
		var offset = el.offset();
		if(ev.clientX-offset.left>width/2)
			statusEl.html("&gt;");
		else
			statusEl.html("&lt;");
	}
	
	function remoteControlDisplayStatus()
	{
		var parent = getParent(this);
		var statusEl = parent.find(".entry-status-control");
		/*
		var images = parent.find(".gallery-item:visible");
		
		if(!isPlaying(images))
			statusEl.html(">");
		else
			statusEl.html("=");
		*/
		statusEl.html(" ");
	}
	
	function setupRemoteControl(galleryStyle, container)
	{
		switch(galleryStyle)
		{
			case "alternate":
				_setupRemoteControlAlternate(container);
				break;
			case "dots":
				break;
			default:
				_setupRemoteControlDefault(container);
				break;
		}
	}
	
	function getEventName(galleryStyle)
	{
		var eventName = "";
		
		switch(galleryStyle)
		{
			case "alternate":
				eventName = "click";
				break;
			default:
				eventName = "mouseenter";
				break;
		}
		
		return eventName;
	}
	
	function getGalleryStyle(parent)
	{
		if(parent.hasClass("alternate-gallery"))
			return "alternate"
		if(parent.hasClass("dots-gallery"))
			return "dots";
		return "default";
	}
	
	function setupGallery(parent)
	{
		var gallery_items = parent.find(".gallery dl.gallery-item");
		if(gallery_items.length==0)
			return;
		
		var galleryStyle = getGalleryStyle(parent);

		parent.find(".gallery br").remove();
		var container = jQuery("<div class='entry-gallery'></div>");
		container.data("parent-id", parent.attr("id"));
		parent.prepend(container);
		gallery_items.appendTo(container);	
		container.data("slideCount", container.children().length);
		setupSlideNumbers(container);	
		parent.find(".gallery").remove();
		setupGalleryNavigation(galleryStyle, container);
		setupRemoteControl(galleryStyle, container);
		removeImageTitles(galleryStyle, container);
		container.addClass("gallery").cycle(getGalleryProps(galleryStyle, parent));
		if(galleryStyle=="default")
			container.cycle("pause");
	}
	
	function removeImageTitles(galleryStyle, container)
	{
		container.find(".gallery-item img, .gallery-item a").removeAttr("title");
	}
	
	function getGalleryProps(galleryStyle, parent)
	{
		var galleryProps = {
				"fx": "fade", 
				"pager": "#"+parent.attr("id")+" .entry-gallery-nav", 
				"pagerEvent": getEventName(galleryStyle), 
				"pause": 1, 
				"pagerAnchorBuilder": createPagerAnchor, 
				"before": afterCallback,							
				"pauseOnPagerHover": 1
			};
	
		switch(galleryStyle)
		{
			case "alternate":
				galleryProps["prev"] = "#"+parent.attr("id")+" .entry-gallery-rc-prev";
				galleryProps["next"] = "#"+parent.attr("id")+" .entry-gallery-rc-next";
				break;				
			case "dots":
				break;
			default:
				galleryProps["pager"] = null;
				break;
		}		
		
		return galleryProps;
	}
	
	function moveStandaloneImagesUp(parent)
	{
		var header = parent.find("h2");
		
		parent.find("p img").each(function() {jQuery(this).insertBefore(header); })
	}
	
	jQuery(".post, .page").each(function() {var parent = jQuery(this); setupGallery(parent); moveStandaloneImagesUp(parent); });
}
);