//TODO: change constant to $.slidermin and $.slidermax
(function($) {
	$.mmOptions = {};
	$.mmOptions.params = {
		mainWidth: 550,
		mainHeight: 310,
		smallWidth: 200,
		smallHeight: 113,
		space: 25,
		slideSpeed: 400,
		firstElement: 1,
		nameContainer:null,
		topMargin:0,
		slideNameSpeed: 100,
		contaner:null,
		nameArray:new Array(),
		slider:null
	};
	$.mmOptions.galleryItems = {};
	$.mmOptions.galleryItemsShadow = {};
	$.mmOptions.galleryItemsShadowSmall = {};
	$.mmOptions.params.workName = {};
	$.currentIndex = 1;
	$.gallerySize = 0;
	$.scrollToIndex = $.currentIndex;
	$.isScrollingNow = false;
	$.issliderScrollingNow = false;
	$.utils = {};
	$.sliderStep = 0;
	$.slidermin = 0;
	$.slidermax = 900;

	$.fn.mmsliding = function(options) {
		$.extend($.mmOptions.params, options);
		$.mmOptions.galleryItems =$(this).children("img.main");
		$.mmOptions.galleryItemsShadow =$(this).children("img.shadow");
		$.mmOptions.galleryItemsShadowSmall =$(this).children("img.shadows");
		$.mmOptions.galleryItems.css('cursor', 'pointer');
		$.mmOptions.params.contaner = $(this);
		$.mmOptions.params.contaner.css({
			position:	'relative',
			height:		$.mmOptions.params.mainHeight+25,
			width:		$(window).width(),
			overflow:	'hidden'
		});


		var demention = $.utils.getCentPos();
		var dementionLeft = $.utils.getLeftPos();
		var dementionRight = $.utils.getRightPos();
		var dementionLeftHide =$.utils.getLeftHidePos();
		var dementionRightHide =$.utils.getRightHidePos();

		$.mmOptions.params.nameContainer.css({
			position:	'absolute',
			height:		40,
			width:		$.mmOptions.params.mainWidth,
			top:		demention.top+$.mmOptions.params.mainHeight-40+$.mmOptions.params.topMargin,
			left:		demention.left,
			overflow:	'hidden',
			cursor: 'pointer'
		}).click($.utils.doWork);

		$.mmOptions.params.workName = $.mmOptions.params.nameContainer.children("#workName");
		$.mmOptions.params.workName.children("#clientName").html($.mmOptions.params.nameArray[$.currentIndex].name);

		$.mmOptions.galleryItemsShadow.css({
			position:	'absolute',
			top:		demention.top,
			left:		demention.left
		}).attr({
			id: "sc"
		});

		$.mmOptions.galleryItemsShadowSmall.css({
			position:	'absolute',
			top:		dementionRight.top,
			left:		dementionRight.left
		}).attr({
			id: "scr"
		});

		var clonescl = $.mmOptions.galleryItemsShadowSmall.clone().css({
			position:	'absolute',
			top:		dementionLeft.top,
			left:		dementionLeft.left
		}).attr({
			id: "scl"
		});
		$.mmOptions.params.contaner.append(clonescl)

		$.gallerySize = $.mmOptions.galleryItems.each( function(i) {
			$(this).css({
				position:	'absolute',
				top:		demention.top,
				left:		demention.left
			}).attr({
				id: "c_"+i
			});
			var clone1 = $(this).clone().css({
				position:	'absolute',
				top:		dementionLeft.top,
				left:		dementionLeft.left,
				width: 		$.mmOptions.params.smallWidth,
				height:		$.mmOptions.params.smallHeight
			}).attr({
				id: "l_"+i
			}).hide();
			$.mmOptions.params.contaner.append(clone1)

			var cloner = $(this).clone().css({
				position:	'absolute',
				top:		dementionRight.top,
				left:		dementionRight.left,
				width: 		$.mmOptions.params.smallWidth,
				height:		$.mmOptions.params.smallHeight
			}).attr({
				id: "r_"+i
			}).hide();
			$.mmOptions.params.contaner.append(cloner)

			var clone1h = $(this).clone().css({
				position:	'absolute',
				top:		dementionLeftHide.top,
				left:		dementionLeftHide.left,
				width: 		$.mmOptions.params.smallWidth,
				height:		$.mmOptions.params.smallHeight,
				opacity:	0
			}).attr({
				id: "lh_"+i
			}).hide();
			$.mmOptions.params.contaner.append(clone1h)

			var clonerh = $(this).clone().css({
				position:	'absolute',
				top:		dementionRightHide.top,
				left:		dementionRightHide.left,
				width: 		$.mmOptions.params.smallWidth,
				height:		$.mmOptions.params.smallHeight,
				opacity:	0
			}).attr({
				id: "rh_"+i
			}).hide();
			$.mmOptions.params.contaner.append(clonerh)
		}).hide().size();
		$('#c_'+$.currentIndex).one('click',$.utils.doWork).show();
		$('#c_'+$.currentIndex).one('click',$.utils.doWork).show();

		if($.currentIndex-1 >= 0) {
			$('#l_'+($.currentIndex-1)).show().one('click',$.utils.rightArrow).show()
		}
		if($.currentIndex+1 < $.gallerySize) {
			$('#r_'+($.currentIndex+1)).show().one('click',$.utils.leftArrow).show()
		}

		$(window).resize( function() {

			$.mmOptions.params.contaner.css({
				height:		$.mmOptions.params.mainHeight+25,
				width:		$(window).width()
			});

			var demention = $.utils.getCentPos();
			var dementionLeft = $.utils.getLeftPos();
			var dementionRight = $.utils.getRightPos();
			var dementionLeftHide =$.utils.getLeftHidePos();
			var dementionRightHide =$.utils.getRightHidePos();

			$.mmOptions.params.nameContainer.css({
				top:		demention.top+$.mmOptions.params.mainHeight-40+$.mmOptions.params.topMargin,
				left:		demention.left
			});
			$.mmOptions.galleryItemsShadow.css({
				top:		demention.top,
				left:		demention.left
			})

			$.mmOptions.galleryItemsShadowSmall.css({
				top:		dementionRight.top,
				left:		dementionRight.left
			})

			$('#scl').css({
				top:		dementionLeft.top,
				left:		dementionLeft.left
			})


			$.mmOptions.galleryItems.each( function(i) {
				$(this).css({
					top:		demention.top,
					left:		demention.left
				})
				$('#l_'+i).css({
					top:		dementionLeft.top,
					left:		dementionLeft.left
				})

				$('#r_'+i).css({
					top:		dementionRight.top,
					left:		dementionRight.left
				})
				$('#lh_'+i).css({
					top:		dementionLeftHide.top,
					left:		dementionLeftHide.left
				})

				$('#rh_'+i).css({
					top:		dementionRightHide.top,
					left:		dementionRightHide.left
				})

			})
		});
		//init scrolling
		//$.mmOptions.params.slider.mousewheel($.utils.wellScroll);

		//init slider
		$.sliderStep = Math.ceil($.slidermax / ($.gallerySize - 1));
		$.sliderDirectionRight = true;
		$.sliderPrevPos = $.sliderStep * $.currentIndex;
		$.mmOptions.params.slider.slider({
			min: $.slidermin,
			max: $.slidermax,
			value: $.sliderStep * $.currentIndex,
			step: 1,
			animate: $.mmOptions.params.slideSpeed,
			stop: function(event, ui) {
				$.sliderDirectionRight = $.sliderPrevPos < ui.value ? true : false;
				var index = ($.gallerySize - 1) * ui.value / $.slidermax;
				index = ($.sliderDirectionRight || $.sliderPrevPos == $.slidermin) && $.sliderPrevPos != $.slidermax ? Math.ceil(index) : Math.floor(index);
				var pos = index * $.sliderStep;
				window.setTimeout( function() {
					$(ui.handle).stop(true,false);
					$.mmOptions.params.slider.slider("value", pos);
				}, 1);
				$.sliderPrevPos = pos;
				//console.log(index, pos, ui.value, $.sliderDirectionRight, $.sliderPrevPos);
				//var sldIndex = Math.ceil(ui.value / $.sliderStep);
				var sldIndex = index;

				if (sldIndex > $.currentIndex) {
					$.scrollToIndex = sldIndex;
					$.issliderScrollingNow = true;
					$.utils.beforeSlideLeft();
				} else if (sldIndex < $.currentIndex) {
					$.scrollToIndex = sldIndex;
					$.issliderScrollingNow = true;
					$.utils.beforeSlideRight();
				}
			}
		});
	}
	$.utils.rightArrow = function() {
		if (!$.isScrollingNow) {
			$.utils.beforeSlideRight();
		}
	}
	$.utils.leftArrow = function() {
		if (!$.isScrollingNow) {
			$.utils.beforeSlideLeft();
		}
	}
	$.utils.wellScroll = function(event, delta) {

		if (!$.isScrollingNow) {
			if (delta < 0) {
				if ($.currentIndex+1 < $.gallerySize) {
					$.utils.beforeSlideLeft();
				}
			} else {
				if ($.currentIndex-1 >= 0) {
					$.utils.beforeSlideRight();
				}
			}
			//}else{
			//$.scrollToIndex += delta;
			//if ($.scrollToIndex < 0){
			//	$.scrollToIndex = 0;
			//}else if  ($.scrollToIndex >= $.gallerySize){
			//	$.scrollToIndex = $.gallerySize-1
			//}
		}
		return false;
	}
	$.utils.doWork = function() {
		document.location.href = $.mmOptions.params.nameArray[$.currentIndex].url
	}
	$.utils.beforeSlideLeft = function () {
		$.isScrollingNow = true;
		$.mmOptions.params.slider.slider( "option", "disabled", true );
		if ($.scrollToIndex == $.currentIndex) {
			$.scrollToIndex = null
		}
		var demention = $.utils.getCentPos();
		if($.mmOptions.params.workName.is(':hidden')) {
			$.utils.slideLeft();
		} else {
			$.mmOptions.params.workName.animate({
				top:		41
			},
			$.mmOptions.params.slideNameSpeed, 'linear', function() {
				$(this).hide();
				$.utils.slideLeft();
			});
		}
	}
	$.utils.beforeSlideRight = function () {
		$.isScrollingNow = true
		$.mmOptions.params.slider.slider( "option", "disabled", true );
		if ($.scrollToIndex == $.currentIndex) {
			$.scrollToIndex = null
		}
		var demention = $.utils.getCentPos();
		if($.mmOptions.params.workName.is(':hidden')) {
			$.utils.slideRight();
		} else {
			$.mmOptions.params.workName.animate({
				top:		41
			},
			$.mmOptions.params.slideNameSpeed, 'linear', function() {
				$(this).hide();
				$.utils.slideRight();
			});
		}
	}
	$.utils.endSlide = function () {
		$.mmOptions.params.workName.children("#clientName").html($.mmOptions.params.nameArray[$.currentIndex].name);
		var demention = $.utils.getCentPos();

		if ($.scrollToIndex != null) {
			if ($.scrollToIndex > $.currentIndex) {
				return $.utils.beforeSlideLeft();
			} else if ($.scrollToIndex < $.currentIndex) {
				return $.utils.beforeSlideRight();
			} else {
				$.isScrollingNow = false;
				$.scrollToIndex = null;
				$.issliderScrollingNow = false;
				$.mmOptions.params.workName.show().animate({
					top:		0
				},$.mmOptions.params.slideNameSpeed, 'linear');
			}
		} else {
			$.isScrollingNow = false;
			$.issliderScrollingNow = false;
			$.mmOptions.params.workName.show().animate({
				top:		0
			},$.mmOptions.params.slideNameSpeed, 'linear');
		}
		$.mmOptions.params.slider.slider( "enable" );
	}
	$.utils.slideRight = function () {
		var demention = $.utils.getCentPos();
		var dementionLeft = $.utils.getLeftPos();
		var dementionRight = $.utils.getRightPos();
		var dementionLeftHide =$.utils.getLeftHidePos();
		var dementionRightHide =$.utils.getRightHidePos();

		if($.currentIndex-2 >=0 ) {
			var clonelh = 	$('#lh_'+($.currentIndex-2)).clone().show();
			$.mmOptions.params.contaner.append(clonelh);
			clonelh.unbind().animate({
				top: 		dementionLeft.top,
				left: 		dementionLeft.left,
				opacity:	1
			},
			$.mmOptions.params.slideSpeed, 'linear', function() {
				$(this).remove();
				$('#l_'+($.currentIndex-2)).unbind().one('click',$.utils.rightArrow).show();;
				$('#scl').show();
			});
		}

		if($.currentIndex+1 < $.gallerySize) {
			var cloner = 	$('#r_'+($.currentIndex+1)).clone().show();
			$('#r_'+($.currentIndex+1)).hide();
			$('#scr').hide();
			$.mmOptions.params.contaner.append(cloner);
			cloner.unbind().animate({
				top: 		dementionRightHide.top,
				left: 		dementionRightHide.left,
				opacity:	0
			},
			$.mmOptions.params.slideSpeed, 'linear', function() {
				$(this).remove();
			});
		}

		$('#sc').hide();
		var clonec = $('#c_'+($.currentIndex)).clone().show();
		$('#c_'+($.currentIndex)).hide();
		$.mmOptions.params.contaner.append(clonec);
		clonec.unbind().animate({
			top: 		dementionRight.top,
			left: 		dementionRight.left,
			width: 		$.mmOptions.params.smallWidth,
			height:		$.mmOptions.params.smallHeight
		},
		$.mmOptions.params.slideSpeed, 'linear', function() {
			$(this).remove();
			$('#r_'+($.currentIndex)).unbind().one('click',$.utils.leftArrow).show();
			$('#scr').show();
		});
		if ($.currentIndex-1 >= 0) {
			var clonecsl = $('#sc').clone();
			var clonel = $('#l_'+($.currentIndex-1)).clone();
			$('#l_'+($.currentIndex-1)).hide();
			$('#scl').hide();
			$.mmOptions.params.contaner.append(clonel);
			clonel.unbind().animate({
				top: 		demention.top,
				left: 		demention.left,
				width: 		$.mmOptions.params.mainWidth,
				height:		$.mmOptions.params.mainHeight
			},
			$.mmOptions.params.slideSpeed, 'linear', function() {
				$('#c_'+($.currentIndex-1)).unbind().one('click',$.utils.doWork).show();
				$(this).remove();
				$('#sc').show();
				$.currentIndex--;
				$.utils.endSlide();
			});
		}
		if(!$.issliderScrollingNow) {
			$.mmOptions.params.slider.slider( "value" ,   950/($.gallerySize-1)*($.currentIndex-1))
		}
	}
	$.utils.slideLeft = function () {
		var demention = $.utils.getCentPos();
		var dementionLeft = $.utils.getLeftPos();
		var dementionRight = $.utils.getRightPos();
		var dementionLeftHide =$.utils.getLeftHidePos();
		var dementionRightHide =$.utils.getRightHidePos();
		if($.currentIndex+2 < $.gallerySize) {
			var clonerh = $('#rh_'+($.currentIndex+2)).clone().show();
			$('#rh_'+($.currentIndex+2)).hide();
			$.mmOptions.params.contaner.append(clonerh);
			clonerh.unbind().animate({
				top: 		dementionRight.top,
				left: 		dementionRight.left,
				opacity:	1
			},
			$.mmOptions.params.slideSpeed, 'linear', function() {
				$('#r_'+($.currentIndex+2)).unbind().one('click',$.utils.leftArrow).show();
				$(this).remove();
				$('#scr').show();
			});
		}

		$('#sc').hide();
		var clonec =$('#c_'+$.currentIndex).clone();
		$('#c_'+$.currentIndex).hide();
		$.mmOptions.params.contaner.append(clonec);
		clonec.unbind().animate({
			top: 		dementionLeft.top,
			left: 		dementionLeft.left,
			width: 		$.mmOptions.params.smallWidth,
			height:		$.mmOptions.params.smallHeight
		},
		$.mmOptions.params.slideSpeed, 'linear', function() {
			$('#l_'+$.currentIndex).one('click',$.utils.rightArrow).show();
			$(this).remove();
			$('#scl').show();
		});
		if($.currentIndex-1 >= 0) {
			var clonel = $('#l_'+($.currentIndex-1)).clone();
			$('#l_'+($.currentIndex-1)).hide();
			$('#scl').hide();
			$.mmOptions.params.contaner.append(clonel);
			clonel.unbind().animate({
				top: 		dementionLeftHide.top,
				left: 		dementionLeftHide.left,
				opacity:	0
			},
			$.mmOptions.params.slideSpeed, 'linear', function() {
				$(this).remove();
			});
		}

		if($.currentIndex+1 < $.gallerySize) {
			var cloner = 	$('#r_'+($.currentIndex+1)).clone();
			$('#r_'+($.currentIndex+1)).hide();
			$('#scr').hide();
			$.mmOptions.params.contaner.append(cloner);
			cloner.unbind().animate({
				top: 		demention.top,
				left: 		demention.left,
				width: 		$.mmOptions.params.mainWidth,
				height:		$.mmOptions.params.mainHeight
			},
			$.mmOptions.params.slideSpeed, 'linear', function() {
				$('#c_'+($.currentIndex+1)).unbind().one('click',$.utils.doWork).show();
				$(this).remove();
				$('#sc').show();
				$.currentIndex++;
				$.utils.endSlide();
			});
		}
		if(!$.issliderScrollingNow) {
			$.mmOptions.params.slider.slider( "value" ,   950/($.gallerySize-1)*($.currentIndex+1))
		}
	}
	$.utils.getCentPos = function() {
		var contaner = $.mmOptions.params.contaner;
		var demention = {
			top: Math.round(contaner.height() / 2 - ($.mmOptions.params.mainHeight / 2)),
			left: Math.round($(window).width() / 2 - ($.mmOptions.params.mainWidth / 2))
		}
		return demention;
	}
	$.utils.getLeftPos = function() {
		var contaner = $.mmOptions.params.contaner;
		var demention = {
			top:Math.round($.utils.getCentPos().top + (($.mmOptions.params.mainHeight - $.mmOptions.params.smallHeight ) / 2)),
			left: Math.round($.utils.getCentPos().left - ($.mmOptions.params.smallWidth + $.mmOptions.params.space))
		}
		return demention;
	}
	$.utils.getRightPos = function() {
		var contaner = $.mmOptions.params.contaner;
		var demention = {
			top:Math.round($.utils.getCentPos().top + (($.mmOptions.params.mainHeight - $.mmOptions.params.smallHeight ) / 2)),
			left: Math.round($.utils.getCentPos().left+ $.mmOptions.params.space + $.mmOptions.params.mainWidth)
		}
		return demention;
	}
	$.utils.getLeftHidePos = function() {
		var contaner = $.mmOptions.params.contaner;
		var demention = {
			top:Math.round($.utils.getLeftPos().top),
			left: Math.round($.utils.getLeftPos().left - ($.mmOptions.params.smallWidth + $.mmOptions.params.space))
		}
		return demention;
	}
	$.utils.getRightHidePos = function() {
		var contaner = $.mmOptions.params.contaner;
		var demention = {
			top:Math.round($.utils.getRightPos().top),
			left: Math.round($.utils.getRightPos().left+ $.mmOptions.params.space + $.mmOptions.params.smallWidth)
		}
		return demention;
	}
})(jQuery);
