
var
	slider = null
,	sliderTimer = null
,	sliderAuto = true
,	sliderPos = 0
,	sliderItems = 7
,	sliderSlideInTime = 2000
,	sliderSlideOutTime = 1000
,	sliderItemTime = 13000
,	sliderRulerStep = Math.round(930 / sliderItems)
,	sliderNavH = 0
,	sliderContentH = 0
,	sliderW = 0
,	pl = $("body").hasClass("pl")
;


function sliderStop() { 
	if (sliderTimer) { 
		clearTimeout(sliderTimer); sliderTimer = null; 
	} 
}


function sliderPause(dir)
{
	sliderStop();
	sliderAuto = !sliderAuto;
	if (sliderAuto)
		sliderPlay();
}


function sliderPlay() { 
	sliderStop(); 
	sliderTimer = setTimeout("sliderChange()", sliderItemTime); 
}


function sliderChange(dir, manual)
{
	if (!dir)
		dir = 1;

	if (manual)
		sliderStop();

	var next = slider.find("> .content.current").stop(true).animate({ left: (-dir * sliderW) + "px" }, sliderSlideOutTime).removeClass("current");
	next = (dir < 0) ? next.prev(".content") : next.next(".content");
	if (!next.length){
		next = (dir < 0) ? slider.find("> .content:last") : slider.find("> .content:first");
		sliderPos = (dir < 0) ? sliderItems - 1 : 0;
	}
	else
		sliderPos += dir;

	var ruler = slider.find(".ruler > a");
	ruler.stop(true).animate({ left: (sliderPos * sliderRulerStep) + "px"}, sliderSlideInTime);
	if (!next.is(":animated"))
		next.css("left", (dir * sliderW) + "px");
	next.addClass("current").show().stop(true).animate({ left: "0px" }, sliderSlideInTime);
	ruler.find("span").text(next.find(".info > span:first").data("info"));
	if (sliderAuto)
		sliderPlay();
}


function sliderChangeTo(item)
{
	var current = slider.find("> .content.current");
	dir = (item > sliderPos) ? 1 : -1;
	if (sliderPos != item)
		current.stop(true).animate({ left: (-dir * sliderW) + "px" }, sliderSlideOutTime).removeClass("current");
	next = slider.find("> .content:eq(" + item + ")");
	var ruler = slider.find("> .ruler > a");
	ruler.stop(true).animate({ left: (item * sliderRulerStep) + "px"}, sliderSlideInTime);
	if (sliderPos != item)
		next.addClass("current").css("left", (dir * sliderW) + "px").show().stop(true).animate({ left: "0px" }, sliderSlideInTime);
	ruler.find("span").text(next.find(".info > span:first").data("info"));
	sliderPos = item;
}


/*
** slider stuff
*/
slider = $(".slider");
if (slider.length)
{
	$.getJSON(pl ? "data/slider_pl.js" : "data/slider.js", function(json)
	{
		slider.addClass("slider-scripted");
		var sliderNav = slider.find("> .navigation > ul");

		// data loaded from JSON, now inject it to the HTML
		for (var i = 0; i < sliderItems; i++)
		{
			var item = slider.find("> .content:first").clone().insertBefore(slider.find("> .ruler"));
			item.find("> .photo img").attr("src", "data/slider/" + json.items[i].file + ".png").attr("alt", json.items[i].info);
			item.find("> h2").html(json.items[i].title);
			var info = item.find("> .info");
			info.find("> span").text(json.items[i].info_ex ? json.items[i].info_ex : json.items[i].info).data("info", json.items[i].info);
			if (json.items[i].visit)
				info.find("> a").attr("href", json.items[i].visit).text(pl ? "Odwiedź" : "Visit");
			else
				info.find("> a").attr("href", json.items[i].work).text(pl ? "Zobacz" : "See project");
			info.find("~ p").remove();
			for (t in json.items[i].text)
				item.append("<p>" + json.items[i].text[t] + "</p>");
		}

		Cufon.replace(".slider h2");

		slider.find("> .content:first").remove();

		// make navigation work
		sliderNav.find("> li:first").after("<li><a class=\"pause\" href=\"#\">|| / [&gt;</a></li>");
		sliderNavH = -sliderNav.outerHeight() - slider.find("> .navigation > p").outerHeight();
		sliderNav.css("margin-top", sliderNavH + "px").hide();
		slider.find("> .navigation")
			.bind("mouseenter", function() { sliderNav.show().stop(true).animate({ marginTop: "0px" }, 350, "swing"); })
			.bind("mouseleave", function() { sliderNav.stop(true).animate({ marginTop: sliderNavH + "px" }, 150, "swing", function() { $(this).hide(); }); });

		// content sliding
		sliderContentH = 0;
		sliderW = slider.find("> .content:first").addClass("current").outerWidth();
		slider.find("> .content").each(function() { sliderContentH = Math.max($(this).outerHeight(), sliderContentH); }).not(":first").hide();
		slider.height(sliderContentH + 30);

		slider.append("<div class=\"fade-left\"></div><div class=\"fade-right\"></div>");
		slider.find("> .fade-left, > .fade-right").height(slider.find("> .content").outerHeight());

		// handle clicking on previous and next buttons
		slider.find("> .navigation a.previous").click(function() { sliderChange(-1, true); return false; });
		slider.find("> .navigation a.next").click(function() { sliderChange(1, true); return false; });
		slider.find("> .navigation a.pause").click(function() { $(this).toggleClass("play"); sliderPause(); return false; });

		slider.find("> .ruler").css("padding-top", (sliderContentH + 10) + "px").find("a").css("left", (sliderPos * sliderRulerStep) + "px")
			.bind("dragstart dragend", function()
			{
				$(this).stop(true).toggleClass("drag");
				sliderStop();
			})
			.bind("drag", function(event)
			{
				var offset = $(this).parent().offset();
				var max_x = (sliderItems - 1) * sliderRulerStep;
				var x = Math.min(max_x, Math.max(0, event.offsetX - offset.left - 34));
				$(this).css("left", x + "px");
				x = Math.round(x / sliderRulerStep);
				$(this).find("span").text(slider.find("> .content:eq(" + x + ") .info > span:first").data("info"));
			})
			.bind("dragend", function(event)
			{
				var offset = $(this).parent().offset();
				var max_x = (sliderItems - 1) * sliderRulerStep;
				var x = Math.round(Math.min(max_x, Math.max(0, event.offsetX - offset.left - 34)) / sliderRulerStep);
				sliderChangeTo(x);
				if (sliderAuto)
					setTimeout("sliderPlay()", sliderSlideInTime + 1000);
			});

		sliderPlay();

		if ($.browser.msie && $.browser.version < 7)
			slider.find("> .ruler > a").attr("href", "#").click(function() { return false; });
	});
}


