/*
 * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
 */
jQuery.extend( jQuery.easing, {
	easeInExpo: function (x, t, b, c, d) {
		return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
	},
	easeOutExpo: function (x, t, b, c, d) {
		return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
	},
	easeInOutExpo: function (x, t, b, c, d) {
		if (t==0) return b;
		if (t==d) return b+c;
		if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
		return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
	}
});

/* jQuery fn Set */
jQuery.fn.radioClass = function(css){ 
	return this.siblings()
				.removeClass(css)
			.end()
				.addClass(css);
};
jQuery.fn.hoverClass = function(c) {
	return this.hover(function() { 
				$(this).toggleClass(c); 
			});
};

/* daniel jo UI script */
var ui;
$(function(){
	var danieljo = (function(){
		var $htmlBody = $('html, body'),
			$body = $htmlBody.find('body'),
			$wrapper = $body.find('#wrapper'),
			$header = $wrapper.find('#header'),
			$gnb = $header.find('#gnb'),
			$contents = $wrapper.find('#contents'),
			$footer = $wrapper.find('#footer'),
			$listType = $contents.find('.list-type'),
			$sliderVisual = $contents.find('#visual'),

			init = function(){
				if($listType.length && listTypeFirst());

				// list-type add class
				function listTypeFirst(){
					var cssOn = 'over';
					$listType.find('dl')
						.bind({
							mouseenter : function(){
								$(this).addClass(cssOn);
							},
							mouseleave : function(){
								$(this).removeClass(cssOn);
							}
						});
					/*
					$listType
						.find('dl:first').addClass('first')
					.end()
						.find('dl')
						.bind({
							mouseenter : function(){
								$(this).addClass(cssOn);
							},
							mouseleave : function(){
								$(this).removeClass(cssOn);
							}
						});
					*/
				}
			};

			if($sliderVisual.length && ($(window).load(function(){ ui.sliderInit({id:'visual'}) }))); // slider function call
			
		ui = {
			prevCurrent : 0,
			thisCurrent : 1,
			timerTime : 7000,
			timerID : '',
			// main visual slider
			mainVisual : function(){
				var $mainVisual = $contents.find('#main-visual'),
					$mainvisualLink = $mainVisual.find('#mainvisual-area > a'),
					$thumbnailLink = $mainVisual.find('#other-images > a'),
					onCss = "selected", prevCss = "prev",
					speed = 1000,
					easeOpt = 'easeOutExpo',
					maxCount = ($thumbnailLink.length-1);

					$mainvisualLink.css({opacity:0}).eq(ui.prevCurrent).css({opacity:1});
					
					$mainvisualLink.bind({
						focus : function(){
							this.blur();
						}
					});

					$thumbnailLink.bind({
						click : function(){
								clearTimeout(ui.timerID);
								var i = $(this).index();
								if( i == ui.prevCurrent) return false;
								ui.thisCurrent = i;
								alpha(ui.thisCurrent);
								ui.prevCurrent = ui.thisCurrent;
							return false;
						},
						focus : function(){
							this.blur();
						}
					});
					
					$mainVisual.hover(function(){
						clearTimeout(ui.timerID);
					},function(){
						ui.timerID = setTimeout(function(){
							ui.thisCurrent++;
							if(ui.thisCurrent > 3) ui.thisCurrent=0;
							autoStart(ui.thisCurrent);
						},ui.timerTime/2);
					});

					function autoStart(i){
						alpha(i);
						ui.prevCurrent = i;
						ui.thisCurrent++;
						if(ui.thisCurrent > 3) ui.thisCurrent=0;
						ui.timerID = setTimeout(function(){
							autoStart(ui.thisCurrent);
						},ui.timerTime);
					}

					function alpha(i){
						var selectImg = $mainvisualLink.eq(i),
							prevSelectImg = $mainvisualLink.eq(ui.prevCurrent);
						prevSelectImg.radioClass(prevCss);
						$mainvisualLink.not('a.pre, a.selected').css({opacity : 0});
						selectImg
							.radioClass(onCss)
							.stop(true).animate({
								opacity : [1, easeOpt]
							},speed);
						$thumbnailLink.eq(ui.thisCurrent).radioClass(onCss);
					}

					ui.timerID = setTimeout(function(){
						autoStart(ui.thisCurrent);
					},ui.timerTime);


			},

			// slider init
			sliderInit : function(opt){
				var opt = opt || null,
					$idx = $('#'+opt.id),
					$imgWrap = $idx.find('div:first'),
					auto = (opt.auto) ? opt.auto : false,
					speed = (opt.speed) ? opt.speed : 750,
					easingOpt = ($.isEmptyObject(opt.easing)) ? opt.easing : 'easeOutExpo',
					currentCount = 0,
					timerTime = 7500,
					timerID,
					$pagingWrap,
					$pagingLinkAll,
					$mainWrap = $wrapper.find('#visual-slider');

				var slider = function(){
					var posX = parseInt($imgWrap.css('left'), 10),
						maxW = (imgW * $imgAll.length)+imgW,
						maxL = ($imgAll.length)*imgW-imgW;
					if (posX <= -maxL) {
						$imgWrap.css({left:'0px'});
						currentCount = 0;
					}
					
					$imgWrap.animate({
						left : ['-='+imgW+'px',easingOpt]
					},speed,function(){
						currentCount += 1;
						var c = $imgAll.length-2;
						if((c < currentCount) && (currentCount = 0));
						var thisImg = $pagingLinkAll.eq(currentCount);
						$pagingLinkAll.attr({src:$pagingLinkAll.attr('src').split(o).join(f)});
						thisImg.attr({src:thisImg.attr('src').split(f).join(o)});
					});
					timerID = setTimeout(slider,timerTime);
				};

				$imgWrap.find('img:first')
					.clone().removeAttr('id')
					.appendTo($imgWrap);

				var $imgAll = $idx.find('>div img'),
					$linkAll = $idx.find('>div a'),
					imgW = $imgAll.eq(0).innerWidth(),
					imgWrapW = imgW*($imgAll.length);

				$imgWrap.css({
						left:0,
						width:imgWrapW
					});

				if(auto){
					setTimeout(slider,timerTime);

					$linkAll.hover(function(){
						clearTimeout(timerID);
					},function(){
						clearTimeout(timerID);
						timerID = setTimeout(slider,timerTime);
					});
				}

				// $mainWrap.append('<div id="other-images" />');
				$pagingWrap = $mainWrap.find('#other-images');
				$imgAll.not(':last').each(function(i){
					var itemIndex = i+1;
						onCode = ' <a href="#oi-'+itemIndex+'" class="selected">'+itemIndex+'</a>',
						offCode = ' <a href="#oi-'+itemIndex+'">'+itemIndex+'</a>';
					(i != 0) ? ($pagingWrap.append(offCode)) : ($pagingWrap.append(onCode));
				});
				$pagingLinkAll = $pagingWrap.find('a');
				$pagingLinkAll.bind({
					mouseover : function(){
						clearTimeout(timerID);
					},
					click : function(){
						var bIndex = $pagingLinkAll.index(this),
							imgPosX = (-imgW*(bIndex));
						$pagingLinkAll.eq(bIndex).radioClass('selected');
						$imgWrap.stop(true).animate({
							left : [imgPosX, 'easeOutExpo']
						},speed,function(){
							currentCount = bIndex;
							//$pagingLinkAll.eq(bIndex).radioClass('selected');	
						});
						return false;
						//clearTimeout(timerID);
					},
					focus : function(){
						this.blur();
					}
				});
			}
		};

		return {
			init : init
		}
	})();

	danieljo.init();
});
