/**
 * DOM ready events
 */
$(function(){
	
	/**
	 * jQuery extensions
	 */
	jQuery.fn.extend({
		/**
		 * Gets total element width (margins + borders + paddings + width)
		 */
		totalWidth: function(){ 
			var W = 0;
			W += parseInt(this.css("margin-left"));
			W += parseInt(this.css("border-left-width"));
			W += parseInt(this.css("padding-left"));
			W += this.width();
			W += parseInt(this.css("padding-right"));
			W += parseInt(this.css("border-right-width"));
			W += parseInt(this.css("margin-right"));
			return W;
		}
	});

	
	/**
	 * Menu items hover
	 */
	$("#menu .wrapper").hover(
		function(){ // Over
			$(this).addClass("hover");
		},
		function(){ // Out
			$(this).removeClass("hover");
		}
	);
	
	/**
	 * Categories menu items hover
	 */
	$("#categories-menu .wrapper").hover(
		function(){ // Over
			$(this).addClass("hover");
		},
		function(){ // Out
			$(this).removeClass("hover");
		}
	);
	
	/**
	 * Gallery navigation
	 */
	var DefaultItemsPerScroll = 4;
	var ScrollGallery = function(ItemsNumber){
		
		var $LineDiv = $("#gallery-menu .items div").stop();
		var $Left = $("#gallery-menu .left");
		var $Right = $("#gallery-menu .right");
		
		var ViewportWidth = $("#gallery-menu .items").width();
		var LineWidth = 0; $("*", $LineDiv).each(function(){LineWidth += $(this).totalWidth();});
		
		if( LineWidth <= ViewportWidth )
		{
			$Left.addClass("disabled-l");
			$Right.addClass("disabled-r");
			
			return;
		}
		
		var ItemWidth = $("*:first", $LineDiv).totalWidth();
		var Distance = ItemWidth * Math.abs(ItemsNumber);
		
		var MarginLeft = -parseInt($LineDiv.css("margin-left"));
		var MaxMarginLeft = ( LineWidth - ViewportWidth > 0 ? LineWidth - ViewportWidth : 0 );
		var NewMarginLeft = MarginLeft;
		
		NewMarginLeft = ( (ItemsNumber < 0) ? MarginLeft - Distance : MarginLeft + Distance );
		NewMarginLeft = ( (NewMarginLeft < 0) ? 0 : NewMarginLeft);
		NewMarginLeft = ( (NewMarginLeft > MaxMarginLeft) ? MaxMarginLeft : NewMarginLeft);
		
		if( NewMarginLeft == 0 )
		{
			$Left.addClass("disabled-l");
		}
		else
		{
			$Left.removeClass("disabled-l");
		}
		
		if( NewMarginLeft == MaxMarginLeft )
		{
			$Right.addClass("disabled-r");
		}
		else
		{
			$Right.removeClass("disabled-r");
		}
		
		$LineDiv.animate({marginLeft: -NewMarginLeft + "px"}, 1000*(Math.abs(NewMarginLeft-MarginLeft) / ((Distance == 0) ? ItemWidth * DefaultItemsPerScroll : Distance)), "linear");
	};
	
	$("#gallery-menu .left").hover(
		function(){ // Over
			$(this).addClass("hover-l");
		},
		function(){ // Out
			$(this).removeClass("hover-l");
		}
	);
	$("#gallery-menu .right").hover(
		function(){ // Over
			$(this).addClass("hover-r");
		},
		function(){ // Out
			$(this).removeClass("hover-r");
		}
	);
	
	$("#gallery-menu .left").click(function(){ScrollGallery(-DefaultItemsPerScroll)});
	$("#gallery-menu .right").click(function(){ScrollGallery(DefaultItemsPerScroll)});
	$("#gallery-menu .left").click();
	
	/**
	 * Gallery items events
	 */
	$("#gallery-menu .items div img").hover(
		function(){ // Over
			$(this).addClass("hover");
		},
		function(){ // Out
			$(this).removeClass("hover");
		}
	);
	
	$("#gallery-menu .items div img").click(function(e){

		if( $("#gallery-image").length > 0 )
		{	
			$("#gallery-image img").fadeTo("slow", 0);
					
			var img = new Image();
			
			$(img).load(function(){
				$("#gallery-image img").stop().replaceWith(this);
			});
			
			$(img).attr({
				"src": $(this).attr("largesrc"),
				"alt": $(this).attr("alt")
			});
			
			$("#gallery-description").html($(this).attr("alt"));
		}
		else if( $("#video-player").length > 0 )
		{
			$("#video-player").children().remove();
			$("#video-player").html(($("#video-player").attr("tpl")).replace(/\[youtube_vid\]/ig, $(this).attr("youtube_vid")));
			$("#video-title").html($(this).attr("alt"));
		}
		
		$(this).siblings().removeClass("selected");
		$(this).addClass("selected");
	});
	
	/**
	 * Hide side text on About page
	 */
	$(window).resize(function(){
		
		$(".about-side-text").each(function(){
			if( $("#home").width() < 1160 /**/ )
			{
				$(this).hide();
			}
			else
			{
				$(this).show();
			}
		});
	});
	
	/**
	 * Set gallery menu width in dependece with window width
	 * And put navigation arrows on its beautiful place
	 */
	var GalleryResize = function(){
		
		if( $("#gallery-menu").length > 0 )
		{
			var HomeWidth = $("#home").width();
			var ItemWidth = $("#gallery-menu img:first").totalWidth();
			var ItemsNumber = Math.floor((HomeWidth - 188/* 986 - 114*7 */) / ItemWidth);
			var ItemsWidth = ItemsNumber * ItemWidth;
			
			$("#gallery-menu .items").width(ItemsWidth);
			
			var NavWidth = $("#gallery-menu .left").width();
			var NavHeight = $("#gallery-menu .left").height();
			var NavOffset = Math.floor((HomeWidth - ItemsWidth)/2 - NavWidth - 26);
			var NavTop = Math.floor(($("#gallery-menu .items").height() - NavHeight) / 2);
			$("#gallery-menu .left").css("left", NavOffset + "px").css("top", NavTop + "px");
			$("#gallery-menu .right").css("right", NavOffset + "px").css("top", NavTop + "px");
			
			ScrollGallery(0);
		}
	};
	
	$("#gallery-menu img").load(GalleryResize);
	$(window).resize(GalleryResize);
	$(window).resize();
});
