/**
 * Слайдер портфолио
 * @author Ivan 'The Crazy' Larionov
 * @version 1.0
 *
 */
(function($)
{
	/**
	  * @construct
	  */
    jQuery.fn.TabbedScroller = function(options)
    {
        _options = $.extend({}, $.fn.TabbedScroller.defaults, options);
		if ($.browser.msie) {
			_options.item_width += 5;
		}
		var el = this;
		el.options = _options;
		var tabs = $(el).find('.tab');
		var tab_nav = $(el).find('.tab_nav')[0];
		var tab_headers = $(el).find('.tab_header');
		var width = $(el).width();
		$(el).find('.btn_scroll_right').css('margin-left', (width - _options.buttons_size * 2 - 4) + 'px');
		$(el).find('.tab_nav').width(tabs.length * _options.tab_size);
		for (var i = 0; i < tabs.length; i++) {
			tabs[i].scrollActive = false;
			if (i != 0) {
				$(tabs[i]).find('.tab_container').hide();
			}
			var items = $(tabs[i]).find('.sl_item');
			$(tabs[i]).width($(tabs[i]).width() - 2 * _options.buttons_size - _options.buttons_padding - 
				(_options.buttons_padding + options.buttons_size) * 2);
			$(tabs[i]).css('margin-left', _options.inner_padding +
				_options.buttons_padding + options.buttons_size);
			$(tabs[i]).css('margin-right', _options.inner_padding +
				_options.buttons_padding + options.buttons_size);
			$(tabs[i]).find('.tab_container').width(items.length * _options.item_width);
			$(tabs[i]).find('.tab_container').height(_options.item_height);
			var tn_item = document.createElement('div');
			tn_item.tab_page = tabs[i];
			if (i == 0) $(tn_item).addClass('active');
			$(tn_item).addClass('tn_item');
			$(tn_item).html($(tabs[i]).find('.tab_header')[0].innerHTML);
			$(tn_item).appendTo(tab_nav);
			if (i == tabs.length - 1) {
				$(tn_item).css('paddingTop', 14);
			}
		}
		$(tabs[0]).jScrollPane({
			showArrows: false,
			animateScroll: true,
			horizontalDragMinWidth: 81,
			horizontalDragMaxWidth: 81
		});
		tabs[0].ScrollApi = $(tabs[0]).data('jsp');
		tabs[0].scrollActive = true;
		$(tabs[0]).css('z-index', 10);
		addTabsSwitcher(el);
		el.currentTab = tabs[0];
		addButtonsListeners(el);
		$('#scroller').find('.tab_nav').find('.tn_item').first().next().next().click();
    }

	function addTabsSwitcher(el) {
		$(el).find('.tn_item').click(function() {;
			$(el).find('.tn_item').removeClass('active');
			$(this).addClass('active');
			$(el).find('.tab').hide();
			$(this.tab_page).show();
			$(this.tab_page).find('.tab_container').show();
			el.currentTab = this.tab_page;
			if (!this.tab_page.scrollActive) {
				$(this.tab_page).jScrollPane({
					showArrows: false,
					animateScroll: true,
					horizontalDragMinWidth: 81,
					horizontalDragMaxWidth: 81
				});
				this.tab_page.ScrollApi = $(this.tab_page).data('jsp');
				this.tab_page.scrollActive = true;
			}
			$(this.tab_page).find('.jspContainer').width(
				el.options.scroller_width - 2 * el.options.buttons_size
			);
		});
	}
	
	function addButtonsListeners(el) {
		var moveX = 170;
		$(el).find('.btn_scroll_right').click(function() {
			var pos = el.currentTab.ScrollApi.getContentPositionX();
			var dx = 0;
			if ($(el.currentTab).find('.tab_container').width() - 900 - pos - el.options.item_width < 30) {
				dx = el.options.item_width;
			}
			if (pos % moveX == 0) {
				el.currentTab.ScrollApi.scrollBy(el.options.item_width + dx, 0);
			}
			else {
				var delta = moveX - pos % moveX;
				if (delta < 20) delta += moveX;
				el.currentTab.ScrollApi.scrollBy(delta + dx, 0);
			}
		});
		$(el).find('.btn_scroll_left').click(function() {
			var pos = el.currentTab.ScrollApi.getContentPositionX();
			if (pos % moveX == 0) {
				el.currentTab.ScrollApi.scrollBy(-el.options.item_width, 0);
			}
			else {
				var delta = -pos % moveX;
				if (-delta < 20) delta -= moveX;
				el.currentTab.ScrollApi.scrollBy(delta, 0);
			}
		});
	}
	
    /**
	  * Параметры скроллера по умолчанию
	  */
    jQuery.fn.TabbedScroller.defaults = 
    {
		scroller_width: 800,
		item_width: 421,
		item_height: 276,
		tab_width: 200,
		buttons_padding: 10,
		buttons_size: 20,
		inner_padding: 19,
		tab_size: 158
    };

})(jQuery);
