
(function($) {

	$.fn.horizontal_slider = function(options) {
		this.each(function() {
			$(this).wrap("<div class='horizontal_slider_container'></div>");
			var horizontalScrollerElement = $(this);
			var settings = {
				width: 700,
				baseDir: '.',
				resize_thumbs: false
			};
			if(options) $.extend(settings, options);
			var def_element_width = settings.width / 3;
			var horizontalScrollerElement_height = parseInt(settings.width / 4 + 50);
			var elements = $(this).children().not('.loading-bar');
			var dimensions_elements = new Array();
			var totlength = elements.length * def_element_width;
			$(".horizontal_slider_container").css("width", settings.width + 'px').css("height", horizontalScrollerElement_height + 'px');
			for (var i = 0; i < elements.length; i++) {
				$(elements[i]).css('width', def_element_width + 'px');
				$(elements[i]).find('img').not('.loading-bar').each(function() {
					$(this).removeAttr('width').removeAttr('height');
				});

				if ($(elements[i]).find('img').not('.loading-bar').attr("title") != null) {
					currenttitle = $(elements[i]).find('img').not('.loading-bar').attr("title");
					$(elements[i]).append("<div class='title'>" + currenttitle + "</div>");
				}
				var new_width;var oldwidth,oldheight;
				dimensions_elements[i] =new Array();
				$(elements[i]).find('img').not('.loading-bar').each(function() {
					if (((oldwidth = parseInt($(this).attr("width"))) > 0) && ((oldheight = parseInt($(this).attr("height"))) > 0)) {
						dimensions_elements[i][0] = oldwidth;
						dimensions_elements[i][1] = oldheight;
					} else {
						dimensions_elements[i][0] = 0;
						dimensions_elements[i][1] = 0; 
					}
				});
			};

			var totlength = 0, dim3 = parseInt((settings.width / 4) -30);

			$(".horizontal_slider_container").append("<div class='slider-container'></div>");
			$(".slider-container").css('width', '100%').append("<div class='ui-slider-1'></div>");
			$(".ui-slider-1").css('width', '100%').append("<div class='ui-slider-handle'></div>");
			$(window).bind("load", function() {
				 $(".ui-slider-1").slider({steps: elements.length * 3, minValue: 0, maxValue: 100, startValue: 50, slide: function(e,ui) { caroussel_scroller_vue((elements.length * ui.slider.curValue / 100), horizontalScrollerElement, elements, dim3, horizontalScrollerElement_height, settings, def_element_width, false, dimensions_elements); }});
			});

			function moveright() {
				$(".ui-slider-handle").css("left", (parseInt($(".ui-slider-handle").css("left")) + 1) + 'px')
				if (parseInt($(".ui-slider-handle").css("left")) > (parseInt($(".slider-container").css("width")) - (def_element_width))){
					$(".ui-slider-handle").css("left", 0);
				}
				var newx = (((parseInt($(".ui-slider-handle").css("left"))) / parseInt($(".slider-container").css("width"))) * 100);
				mytimer = setTimeout(moveright, 10);
				caroussel_scroller_vue((elements.length * newx /100), horizontalScrollerElement, elements, dim3, horizontalScrollerElement_height, settings, def_element_width, false);
			}

			$(".horizontal_slider_container").append("<img class='scroll-left' src='" + settings.baseDir + "/images/horizontal_slider/left_handle.gif' />");
			$(".horizontal_slider_container").append("<img class='scroll-right' src='" + settings.baseDir + "/images/horizontal_slider/right_handle.gif'/>");
			$(".scroll-left").bind('click', function() {
				$(".ui-slider-handle").css("left", (parseInt($(".ui-slider-handle").css("left")) - (parseInt(settings.width / 6))) + 'px')
				if (parseInt($(".ui-slider-handle").css("left")) <= 0) $(".ui-slider-handle").css("left", (parseInt(settings.width)) + 'px');
				var newx = (((parseInt($(".ui-slider-handle").css("left"))) / parseInt(settings.width)) * 100);
				caroussel_scroller_vue((elements.length * newx / 100), horizontalScrollerElement, elements, dim3, horizontalScrollerElement_height, settings, def_element_width, true, dimensions_elements);
			});

			$(".scroll-right").bind('click', function() {
				$(".ui-slider-handle").css("left", (parseInt($(".ui-slider-handle").css("left")) + (parseInt(settings.width / 6))) + 'px')
				if (parseInt($(".ui-slider-handle").css("left")) > parseInt(settings.width)) $(".ui-slider-handle").css("left", 0);
				var newx = (((parseInt($(".ui-slider-handle").css("left")))/parseInt(settings.width)) * 100);
				caroussel_scroller_vue((elements.length * newx / 100), horizontalScrollerElement, elements, dim3, horizontalScrollerElement_height, settings, def_element_width, true, dimensions_elements);
			});

			caroussel_scroller_vue((elements.length * 50 / 100), horizontalScrollerElement, elements, dim3, horizontalScrollerElement_height, settings, def_element_width, false, dimensions_elements);
			$(".horizontal_slider_container").show();
		});
	};

	function max(a,b) { return (a > b) ? a : b ; }

	function min(a,b) { return (a < b) ? a : b ; }

	function caroussel_scroller_vue(current, horizontalScrollerElement, elements, dim3, horizontalScrollerElement_height, settings, def_element_width, slide, dimensions_elements) {
		if (slide) {
			horizontalScrollerElement.animate({left : (-parseInt(def_element_width * (current - 1)))}, 500);
		} else {
			horizontalScrollerElement.css('left', (-parseInt(def_element_width * (current - 1))) + 'px');
		}

		if (settings.resize_thumbs) {
			for (var i = max(parseInt(current)-3, 0); i < min(parseInt(current) + 4, elements.length); i++) {
				var delta = ((elements.length) - Math.abs(i - current)) / (elements.length);
				delta = delta * delta * delta;
				var new_height = parseInt(dim3 * delta);
				$(elements[i]).find('img').not('.loading-bar').each(function() {
					var new_width;
					if(parseInt(dimensions_elements[i][0]) > 0) {
						new_width = parseInt(new_height * parseInt(dimensions_elements[i][0]) / parseInt(dimensions_elements[i][1]));
						$(this).attr("width", new_width);
						$(this).attr("height", new_height);
					}
					$(this).css('height', new_height + 'px');
					$(elements[i]).css('padding-top', parseInt((horizontalScrollerElement_height - 50 - new_height) / 2) + 'px' );
				});
				$(elements[i]).find('.title').css("font-size", delta + "em");
			}

		}
	};

})(jQuery);
