/*
 1. 플러그인 	: JS_UX_Banner_20141106
 2. 제작자 	: UX301(http://www.ux301.com, service@ux301.com)
 3. 제작일 	: 2014-11-07 , 마지막 업데이트 : 2014-11-07
 4. 라이센스 	: 도메인라이센스
*/
(function(ux_obj) {
	ux_obj.fn.JS_UX_Banner_20141107 = function(banner) {
				
		var ux_value = {	

			/********************* 제품 리스트 전체 영역 및 여백 설정 *********************/

			bannerWidth : 1000      		// 배너 전체 너비
        	,bannerHeight : 300     		// 배너 전체 높이
        	

			/********************* 각 제품 이미지 크기 및 여백 설정 *********************/
			
			,imgWidth : 250					// 각 배너 이미지 너비
			,imgHeight : 300				// 각 배너 이미지 높이
			,imgSpace : 0 					// 각 배너 사이 여백
			
			/********************** 애니메이션 조절 *********************/

			,bannerDirection : "left"		// 초기 모션 방향 (left : 왼쪽 스크롤, right : 오른쪽 스크롤)
			,bannerMoveSpeed : 1			// 일반 모션 속도 (초 단위)
			,bannerFocusMoveSpeed : 0.5		// 포커스 모션 속도(초 단위)
			,bannerSlideSpeed : 0.4 		// 배너 슬라이딩 속도
			,bannerChangeEffect : 'none' 	// 포커스 변화 효과 (none : 효과 없음, alpha : 투명 포커스 효과)
			,bannerFocusAlpha : 0.6			// 포커스 시 메뉴 투명값
			
			,key: ''						// 라이센스 키를 요청하세요.
		};		
		ux_obj.extend(ux_value, banner);
		
		return this.each(function() {
			var BANNER_GOING = 0;

			var bannerObj 				= ux_obj(this);
			var BANNER_ROOT 			= ux301_jq(this);
			var BANNER_ROOT_WIDTH 		= ux_value.bannerWidth;
			var BANNER_ROOT_HIGHT 		= ux_value.bannerHeight;
			var BANNER_DIRECTION		= ux_value.bannerDirection;
			var BANNER_CHANGE_EFFECT	= ux_value.bannerChangeEffect;

			var BANNER_BT_PREV 			= bannerObj.find(".UX_Banner_PREV_MENU");
			var BANNER_BT_PREV_WIDTH	= BANNER_BT_PREV.find('img').width();
			var BANNER_BT_PREV_HEIGHT	= BANNER_BT_PREV.find('img').height();

			var BANNER_BT_NEXT 			= bannerObj.find(".UX_Banner_NEXT_MENU");
			var BANNER_BT_NEXT_WIDTH	= BANNER_BT_NEXT.find('img').width();
			var BANNER_BT_NEXT_HEIGHT	= BANNER_BT_NEXT.find('img').height();

			var BANNER_IMAGE_MASK		= bannerObj.find(".UX_Banner_VIEW_AREA");
						
			var BANNER_IMAGE 			= bannerObj.find(".UX_Banner_IMAGE");
			var BANNER_IMAGE_UL 		= BANNER_IMAGE.find("ul");			
			var BANNER_IMAGE_LI 		= BANNER_IMAGE.find("li");			
			var BANNER_IMAGE_LI_LEN 	= BANNER_IMAGE_LI.length;
			var BANNER_IMAGE_LI_A;
			var BANNER_IMAGE_LI_A_IMG;

			//- 최소 이미지 개수
			var BANNER_IMAGE_LI_MIN_LEN;

			//- 최소 이미지 관련 옵셋 값 (좌, 우 2개)
			var BANNER_IMAGE_LI_OFFSET_LEN = 2;

			//- 이미지가 보여지는 영역
			var BANNER_IMAGE_VIEW_AREA 	= BANNER_ROOT_WIDTH;
			var BANNER_IMAGE_MAX_WIDTH;

			var BANNER_MOVE_VALUE = 0;
			var BANNER_TIMER = 0;
			
			var BANNER_INDEX = 0;
			var BANNER_MENU_SELECT = -1;
			
			var BANNER_MOVE_LEFT_MIN;
			var BANNER_MOVE_LEFT_LAST_POS;

			var BANNER_MOVE_RIGHT_MAX;
			var BANNER_MOVE_RIGHT_FIRST_POS;

			var BANNER_TIMER_ORIGIN = ux_value.bannerMoveSpeed * 1000;
			var BANNER_TIMER_SPEED = ux_value.bannerFocusMoveSpeed * 1000;
			var BANNER_SLIDING_SPEED = ux_value.bannerSlideSpeed * 1000;
			
			if(BANNER_TIMER_SPEED < BANNER_SLIDING_SPEED)
			{
				BANNER_SLIDING_SPEED = BANNER_TIMER_SPEED;
			}

			var BANNER_TIMER_NOW_VALUE = BANNER_TIMER_ORIGIN;

			var BANNER_IMAGE_SPACE	= ux_value.imgSpace;
			var BANNER_IMAGE_WIDTH	= ux_value.imgWidth;
			var BANNER_IMAGE_HEIGHT = ux_value.imgHeight;
			
			function setInitFN() {				

				BANNER_ROOT.css({
					width: BANNER_ROOT_WIDTH
					,height: BANNER_ROOT_HIGHT
					,left : 0
					,top : 0
					,position: 'relative'
					,overflow : 'hidden'
					,margin : '0 auto'
					//,outline: '1px solid red'
					//,left : 500
					
				});						
				
				BANNER_BT_PREV.css({					
					cursor: "pointer"
				});

				BANNER_BT_NEXT.css({
					cursor: "pointer"
				});

				BANNER_IMAGE_MASK.css({
					position: 'relative'
					,width:  BANNER_IMAGE_VIEW_AREA	
					,height: BANNER_ROOT_HIGHT
					,left : BANNER_BT_PREV_WIDTH
					,top : 0
					,margin : 0
					,padding : 0
					//,overflow: 'hidden'
					// ,outline: '1px solid red'					
				});		
								
				BANNER_IMAGE_MAX_WIDTH = BANNER_IMAGE_LI_LEN * BANNER_IMAGE_WIDTH;
				BANNER_IMAGE_LI_MIN_LEN = Math.ceil(BANNER_IMAGE_VIEW_AREA / BANNER_IMAGE_WIDTH);
				BANNER_IMAGE_LI_MIN_LEN += BANNER_IMAGE_LI_OFFSET_LEN;

				if(BANNER_IMAGE_LI_LEN < BANNER_IMAGE_LI_MIN_LEN)
				{
					var tempMinus = (BANNER_IMAGE_LI_MIN_LEN - BANNER_IMAGE_LI_LEN);
					tempMinus = Math.round(tempMinus / BANNER_IMAGE_LI_LEN);

					if(tempMinus == 0)
					{
						tempMinus = 1;
					}

					for (var i = 0; i < tempMinus; i++) {
						for (var j = 0; j < BANNER_IMAGE_LI_LEN; j++) {
						 	BANNER_IMAGE_UL.append(BANNER_IMAGE_LI.eq(j).clone());
						 }
					}
				}

				BANNER_IMAGE_LI 		= BANNER_IMAGE.find("li");				
				BANNER_IMAGE_LI_LEN 	= BANNER_IMAGE_LI.length;							
				BANNER_IMAGE_MAX_WIDTH 	= BANNER_IMAGE_LI_LEN * BANNER_IMAGE_WIDTH;	
				BANNER_IMAGE_LI_A		= BANNER_IMAGE_LI.find('a');
				BANNER_IMAGE_LI_A_IMG	= BANNER_IMAGE_LI_A.find('img');
				
				BANNER_IMAGE.css({
					position: 'relative'
					,width : BANNER_IMAGE_MAX_WIDTH
					,height : BANNER_IMAGE_HEIGHT
					,left : 0
					,top : 0										
					//,outline: '1px solid blue'									
				});
				
				BANNER_IMAGE_UL.css({
					position		: 'absolute'
					,listStyle		: "none"
					,margin			: 0
					,padding		: 0				
				});
				
				ux301_jq.each(BANNER_IMAGE_LI, function(index, item){
					ux301_jq(this).css({						
						left: index * BANNER_IMAGE_WIDTH	+ (BANNER_IMAGE_SPACE * index)
						,listStyle		: "none"					
						,position 		: 'absolute'
						,margin			: 0
						,padding		: 0
						,width 			: BANNER_IMAGE_WIDTH
						,height 		: BANNER_ROOT_HIGHT
						//,outline			: '1px solid blue'	
					});	
					
														
				});
				
				BANNER_IMAGE_LI_A_IMG.css({					
					//margin			: 0
					//,padding		: 0	
					//,width 			: BANNER_IMAGE_WIDTH
					//,height 		: BANNER_IMAGE_HEIGHT
					//,fontSize		: 0					
				});				

				BANNER_IMAGE_LI.last().css({				
					left: - BANNER_IMAGE_WIDTH - BANNER_IMAGE_SPACE
				});

				BANNER_MOVE_LEFT_MIN = -(BANNER_IMAGE_WIDTH * 1) - (BANNER_IMAGE_WIDTH / 2);
				BANNER_MOVE_LEFT_LAST_POS = parseInt(BANNER_IMAGE_LI.eq(-2).css('left')) ;
				
				BANNER_MOVE_RIGHT_MAX = parseInt(BANNER_IMAGE_LI.eq(-2).css('left')) + (BANNER_IMAGE_WIDTH / 2);
				
				BANNER_MOVE_RIGHT_FIRST_POS = parseInt(BANNER_IMAGE_LI.eq(-1).css('left'));

			}
			
			function setEventFN() 
			{
				BANNER_IMAGE_MASK.bind("mouseenter", function() {
					clearInterval(BANNER_TIMER);
				}).bind("mouseleave", function() {

					BANNER_TIMER_NOW_VALUE = BANNER_TIMER_ORIGIN;
					clearInterval(BANNER_TIMER);
					setBannerTimeFN();
				});
				
				ux301_jq.each(BANNER_IMAGE_LI, function(index, item){	
					
					ux301_jq(this).bind("mouseenter", function() {
						ux301_jq(this).css('zIndex', 1);
						if(BANNER_CHANGE_EFFECT == "none")
						{									
							setFindImgFN(ux301_jq(this).find('img'), "src", "_off", "_on");							
						}else if(BANNER_CHANGE_EFFECT == "alpha")
						{
							ux301_jq(this).css("opacity", ux_value.bannerFocusAlpha);
						}
								
					}).bind("mouseleave", function() {
						
						if(BANNER_CHANGE_EFFECT == "none")
						{
							setFindImgFN(ux301_jq(this).find('img'), "src", "_on", "_off");
						}else if(BANNER_CHANGE_EFFECT == "alpha")
						{
							ux301_jq(this).css("opacity", 1);
						}						
					});
				});

				BANNER_BT_NEXT.bind("mouseenter", function(e) {
					e.preventDefault();
					e.stopPropagation();
					BANNER_DIRECTION = "left";
					clearInterval(BANNER_TIMER);
					BANNER_TIMER_NOW_VALUE = BANNER_TIMER_SPEED;
					// setBannerTimeFN();				
					// setFindImgFN(BANNER_BT_NEXT.find("img"), "src", "_off", "_on");
					
				}).bind("mouseleave", function(e) {
					e.preventDefault();
					e.stopPropagation();
					clearInterval(BANNER_TIMER);
					BANNER_TIMER_NOW_VALUE = BANNER_TIMER_ORIGIN;
					setBannerTimeFN();
					setFindImgFN(BANNER_BT_NEXT.find("img"), "src", "_on", "_off");
					BANNER_DIRECTION = "left";
				});

				BANNER_BT_NEXT.click(function() {
				  setMotionFN();
				});
				
				BANNER_BT_PREV.bind("mouseenter", function(e) {
					e.preventDefault();
					e.stopPropagation();
					BANNER_DIRECTION = "right";
					clearInterval(BANNER_TIMER);
					BANNER_TIMER_NOW_VALUE = BANNER_TIMER_SPEED;
					// setBannerTimeFN();
					// setFindImgFN(BANNER_BT_PREV.find("img"), "src", "_off", "_on");
					
				}).bind("mouseleave", function(e) {
					e.preventDefault();
					e.stopPropagation();
					clearInterval(BANNER_TIMER);
					BANNER_TIMER_NOW_VALUE = BANNER_TIMER_ORIGIN;					
					setBannerTimeFN();
					setFindImgFN(BANNER_BT_PREV.find("img"), "src", "_on", "_off");
					BANNER_DIRECTION = "left";
				});
				

				BANNER_BT_PREV.click(function() {
				  setMotionFN();
				});
			}

			function setBannerTimeFN() {
				BANNER_TIMER = setInterval(setMotionFN, BANNER_TIMER_NOW_VALUE);
			}

			function setMotionFN() {
				if(BANNER_GOING == 1)
				{
					return;
				}	
				BANNER_GOING = 1;			
				switch(BANNER_DIRECTION) {
					case"left":

						ux301_jq.each(BANNER_IMAGE_LI, function(index, item){	

							var tempLeft = parseInt(ux301_jq(this).css("left"));												
							
							if (tempLeft < BANNER_MOVE_LEFT_MIN) 
							{									
							 	ux301_jq(this).css("left",  BANNER_MOVE_LEFT_LAST_POS);	
							 	
							 	ux301_jq(this).stop().animate({
							  		left : BANNER_MOVE_LEFT_LAST_POS - BANNER_IMAGE_WIDTH - BANNER_IMAGE_SPACE
							 	}, BANNER_SLIDING_SPEED, 
							 		function(){BANNER_GOING = 0;}
							 	);

							}else{
								ux301_jq(this).stop().animate({
									left : tempLeft - BANNER_IMAGE_WIDTH - BANNER_IMAGE_SPACE
								}, BANNER_SLIDING_SPEED, 
							 		function(){BANNER_GOING = 0;}
							 	);	
							}		
						});

						break;
					case"right":	

						ux301_jq.each(BANNER_IMAGE_LI, function(index, item){

							var tempLeft = parseInt(ux301_jq(this).css("left"));						
							
							if (tempLeft > BANNER_MOVE_RIGHT_MAX - BANNER_IMAGE_WIDTH) 
							{									
							 	ux301_jq(this).css("left", BANNER_MOVE_RIGHT_FIRST_POS - BANNER_IMAGE_SPACE);
							 	ux301_jq(this).stop().animate({
							  		left : BANNER_MOVE_RIGHT_FIRST_POS
							 	}, BANNER_SLIDING_SPEED, 
							 		function(){BANNER_GOING = 0;}
							 	);												

							}else
							{
								ux301_jq(this).stop().animate({
									left : tempLeft + BANNER_IMAGE_WIDTH + BANNER_IMAGE_SPACE
								}, BANNER_SLIDING_SPEED, 
							 		function(){BANNER_GOING = 0;}
							 	);	
							}		
						});
						break;
				}
			}

			function setFindImgFN(pObj, pSrc, onImg, offImg) {
				
				var overImg = pObj.attr(pSrc);
				if (String(overImg).search(onImg) != -1) {
					pObj.attr(pSrc, overImg.replace(onImg, offImg));
				}
			}
			
			function setTransitionInEffect() {
				
				setFindImgFN(BANNER_IMAGE_LI.eq(BANNER_INDEX).find("img"), "src", "_off", "_on");				
			}
			
			function setTransitionOutEffect() {
				setFindImgFN(BANNER_IMAGE_LI.eq(BANNER_INDEX).find("img"), "src", "_on", "_off");
			}
			
			function startBannerFN() {
				setInitFN();
				setEventFN();	
				setBannerTimeFN();		
			}					
			
			startBannerFN();
		});
	};
})(ux301_jq);
