// jquery.event.wheel.js 
;(function($){$.fn.wheel=function(a){return this[a?"bind":"trigger"]("wheel",a)};$.event.special.wheel={setup:function(){$.event.add(this,b,wheelHandler,{})},teardown:function(){$.event.remove(this,b,wheelHandler)}};var b=!$.browser.mozilla?"mousewheel":"DOMMouseScroll"+($.browser.version<"1.9"?" mousemove":"");function wheelHandler(a){switch(a.type){case"mousemove":return $.extend(a.data,{clientX:a.clientX,clientY:a.clientY,pageX:a.pageX,pageY:a.pageY});case"DOMMouseScroll":$.extend(a,a.data);a.delta=-a.detail/3;break;case"mousewheel":a.delta=a.wheelDelta/120;if($.browser.opera)a.delta*=-1;break}a.type="wheel";return $.event.handle.call(this,a,a.delta)}})(jQuery);

// init code
$(document).ready(function(){
// main navigation ***********************************************************************************************
	// set parametr
	var _gallery = $('div.mn-holder');
	var _leftArrow = "div.nav .main-prev";
	var _rightArrow = "div.nav .main-next";
	
	var _pointsHolder = jQuery("ul.points-holder");
	var _navHolder = jQuery('.nav-holder');
	
	var _duration = 400;
	var _liPadding = 20;
	var _liSum = 0;
	var _firstLoad = true;
	
	var _gWidth = _gallery.width();
	var _widthArea = [];
	$('li',_gallery).each(function(i,li){
		_liSum += $(li).outerWidth();
		_widthArea[i] = $(li).outerWidth();
		var _ml = ($(li).width() - $(li).find('a').width())/2;
		$(li).find('a').css('marginLeft', _ml);
	});
	var _margin = 0;
	var f = 0;
	
	// generate default parametr
	genNum();
	setClass();
	animateNav();
	function setClass() {
		$('li', _gallery).removeClass('nextEl').removeClass('prevEl');
		if ($('li.selected',_gallery).next('li').length && $('li.selected',_gallery).prev('li').length) {
			$('li.selected',_gallery).next('li').addClass('nextEl');
			$('li.selected',_gallery).prev('li').addClass('prevEl');
		} else if ($('li.selected',_gallery).next('li').length && $('li.selected',_gallery).prev('li').length == 0) {
			$('li.selected',_gallery).next('li').addClass('nextEl');
			$('li:eq('+($('li',_gallery).length-1)+')',_gallery).addClass('prevEl');
			
		} else if ($('li.selected',_gallery).next('li').length == 0 && $('li.selected',_gallery).prev('li').length) {
			$('li.selected',_gallery).prev('li').addClass('prevEl');
			$('li:eq(0)',_gallery).addClass('nextEl');
		}

		var _i = $('li',_gallery).index($('a.active',_gallery).parent());
		$('li:eq('+_i+')',_pointsHolder).addClass('active');
	}
	function genNum() {
		_pointsHolder.empty();
		$('li',_gallery).each(function(i,li){
			_pointsHolder.append('<li><span>*</span></li>');
		});
		_pointsHolder.append('<li class="last">&nbsp;</li>');
		var _parentWidth = _pointsHolder.parent().width();
		var _width = _pointsHolder.width();
		_pointsHolder.css('marginLeft',(_parentWidth-_width)/2);
	}
	
	function setNext() {
		$('li.selected', _gallery).removeClass('selected');
		$('li.nextEl', _gallery).removeClass('nextEl').addClass('selected');
		setClass();
	}
	function setPrev() {
		$('li.selected',_gallery).removeClass('selected');
		$('li.prevEl',_gallery).removeClass('prevEl').addClass('selected');
		setClass();
	}
	
	// events
	$(_rightArrow).click(function(){
		if (!$(this).is('.disable')) {
			setNext();
			animateNav();
		}
		return false;
	});
	
	$(_leftArrow).click(function(){
		if (!$(this).is('.disable')) {
			setPrev();
			animateNav();
		}
		return false;
	});
	
	function animateNav() {
		var _c = false;
		$(_rightArrow).css('opacity',1).removeClass('disable');
		$(_leftArrow).css('opacity',1).removeClass('disable');
		_margin = 0;
		for (var i=0; i < $('li',_gallery).length; i++ ){
			if ($('li',_gallery).eq(i).is('.selected')) break;
			_margin += _widthArea[i];
			_c = i;
		}
		
		if ((_margin - (_gWidth/2) + (_widthArea[_c+1]/2)) > 0) {
			if (_margin - (_gWidth/2) + (_widthArea[_c+1]/2) < _liSum - _gWidth) {
				_margin = _margin - (_gWidth/2) + (_widthArea[_c+1]/2);
				$('a.disable').css('opacity',1).removeClass('disable');
			}
			else {
				_margin = _liSum - _gWidth;
				$(_rightArrow).css('opacity',.1).addClass('disable');
			}
		} else {
			_margin = 0;
			$(_leftArrow).css('opacity',.1).addClass('disable');
		}
		setClass();
		
		if (_firstLoad) {
			_duration = 2;
		}
		if ($('li.selected',_gallery).is(':last-child')) {
			_c = _c-1;
		}
		$('li.last',_pointsHolder).animate({
			marginLeft:(_c*20)+"px"
		}, {queue:false,duration:_duration});
		
		$('ul',_gallery).animate({marginLeft: -_margin+"px"}, {queue:false,duration:_duration});
		
		if (_duration == 2) {
			_firstLoad = false;
			_duration = 700;
		}
	}
	_navHolder.bind('wheel',function(event,delta){
		if (delta<0) {
			if(!$(_rightArrow).is('.disable')) {
				setNext();
				animateNav();
			}
		} else {
			if(!$(_leftArrow).is('.disable')) {
				setPrev();
				animateNav();
			}
		}
		return false;
	});
	
	var _k = (_liSum-_gWidth) / (_pointsHolder.width()-$('li.last',_pointsHolder).width());
	jQuery('li:not(.last) span', _pointsHolder).bind('mouseup',_clickNav);
	var _timerMove = false;
	var _timerDown = false;
	var _timerUp = false;
	function _clickNav(e)
	{
		var _this = this;
		if (_timerDown) clearTimeout(_timerDown);
		if (_timerMove) clearTimeout(_timerMove);
		if (_timerUp) clearTimeout(_timerUp);
		setTimeout(function(){clickNav(_this)},35);
	}
	
	function clickNav(_this){
		var _index = jQuery('li:not(.last) span',_pointsHolder).index(_this);
		if (jQuery('li:not(.last) span',_pointsHolder).length == _index+1)
			_index = _index - 1;
		$('li.selected',_gallery).removeClass('selected');
		$('li',_gallery).eq(_index).addClass('selected');
		
		setClass();
		setTimeout(function(){animateNav()}, 50);
		
	}

	_navHolder.hover(function(){
		$(document).bind('mousemove', returnFalse);			
	}, function() {
		$(document).unbind('mousemove', returnFalse);
	})
	function returnFalse() {
			return false
	;}

	jQuery.fn.resizehandle = function() {
		return this.each(function() {
			var me = jQuery(this);
			var _leftN = 0;

			_pointsHolder.bind('mouse', function(e) {
				jQuery(document).unbind('mousemove');
			});
			
			_pointsHolder.bind('mousedown', function(e) {
				_timerDown = setTimeout(function(){
					var y = e.clientX;
					var _ml = parseInt($('li.last', _pointsHolder).css('marginLeft'));
					_timerMove = setTimeout(function(){
						jQuery('li:not(.last) span', _pointsHolder).unbind('mouseup',_clickNav);
					},50);
					var moveHandler = function(e) {
						$(_rightArrow).css('opacity',1).removeClass('disable');
						$(_leftArrow).css('opacity',1).removeClass('disable');
						if (_timerUp) clearTimeout(_timerUp);
						var _left = _ml + (e.clientX - y);
						if (_left < 0) _left = 0;
						if (_left > _pointsHolder.width()-jQuery('li.last',_pointsHolder).width())
							_left = _pointsHolder.width()-jQuery('li.last',_pointsHolder).width();
							
						_leftN = _left * _k;
							
						jQuery('li.last', _pointsHolder).css('marginLeft',_left);
						jQuery('ul',_gallery).css('marginLeft',-_leftN);
					};
					var upHandler = function(e) {
						_timerUp = setTimeout(function(){
							_pointsHolder
								.unbind('mousemove',moveHandler)
								.unbind('mouseup',upHandler);
								
							jQuery('.nav-holder')
								.unbind('mouseout', upHandler);
							
							if (_timerMove) {
								clearTimeout(_timerMove)
								jQuery('li:not(.last) span', _pointsHolder)
									.bind('mouseup',_clickNav);
							}
							
							var _ml = parseInt($('li.last',_pointsHolder).css('marginLeft')) + 10;
							var _index = 0;
							for (var i=0; i < jQuery('li:not(.last) span',_pointsHolder).length; i++) {
								var _m = 20 * i;
								if (_ml < _m) {
									_index = i;
									break;
								}
							}
							$('li.selected',_gallery).removeClass('selected');
							$('li',_gallery).eq(_index).addClass('selected');
							setClass();
							animateNav();
							
						},50);
					};
					_pointsHolder.bind('mousemove', moveHandler).bind('mouseup', upHandler);
					_navHolder.bind('mouseout', upHandler);
				},250);

			});
		});
	}
	
	$('ul',_gallery).resizehandle();
	
})


