(function ( win, doc, ns, $ ) { $( function () {

//画像プリロード
(function ( fnc, data ) {

	var len  = data.length,
		imgs = [],
		ts   = "?" + ( +new Date );
	
	if ( !len ) return;
	
	for ( var i = len, img; i--; ) {
		img = imgs[i] = new Image;
		img.onload = function () {
			this.onload = null;
			--len || fnc( data );
		};
		img.src = data[i].src + ts;
	}

//画像読み込み完了後
})( function ( data ) {
	
	var LI_WIDTH = 200,
		$elm     = $("#objectMainContentInner"),
		MIN_LEN  = Math.ceil( $elm.width() / LI_WIDTH ),
		dataLen;
	
	//util
	var incArrayLen = function ( arr, retLen ) {
		var ret    = [].concat( arr ),
			arrLen = arr.length,
			i      = 0;
		while ( ret.length < retLen ) {
			ret.push( arr[i] );
			i = ++i > arrLen ? 0 : i;
		}
		return ret;
	};
	
	//データ不足分を追加
	data = incArrayLen( data, MIN_LEN );
	dataLen = data.length;
	
	//アニメーション用重複分を追加
	data = incArrayLen( data, data.length + MIN_LEN );
	
	//データ → HTML
	for ( var i = data.length, itm; i--; ) data[i] = (
		'<li><a href="' + ( itm = data[i] ).href + '">' +
			'<img src="' + itm.src + '" height="115" alt="" /><br>' +
			'<strong>{' + itm.title + '}</strong><br>' + itm.category +
		'</a></li>'
	);
	
	//movインスタンス
	var mov = function ( elm ) {
		var MAX_POS = LI_WIDTH * dataLen,
			pos  = 0,
			spd  = 2,
			sty  = elm.style,
			anim = function () {
				if ( ok ) {
					mode();
					sty.left = -pos + "px";
					setTimeout( anim, 50 );
				}
			},
			inc  = function () { pos = ( pos += spd ) > MAX_POS ? 0       : pos; },
			dec  = function () { pos = ( pos -= spd ) < 0       ? MAX_POS : pos; },
			mode = dec,
			ok;
		
		return {
			left   : function () { spd = 5; mode = inc; },
			right  : function () { spd = 5; mode = dec; },
			reset  : function () { spd = 2;             },
			stop   : function () { ok = false;          },
			start  : function () { ok = true; anim();   }
		};
	}(
		$elm.append(
			$('<ul style="width: ' + ( LI_WIDTH * data.length ) + 'px">' + data.join("") + "</ul>")
		).find("ul").animate({ opacity : 1 }).get(0)
	);
	
	//マウスアクション
	$("#buttonLeft" ).hover( mov.left,  mov.reset ).click( function () { return false; } );
	$("#buttonRight").hover( mov.right, mov.reset ).click( function () { return false; } );
	$elm.hover( mov.stop, mov.start );
	
	//スクロール中アニメーション停止
	ns.scroller.start( mov.stop ).end( mov.start );
	
	//
	mov.start();
	
}, [].concat( ns.data ) );

}); })( this, document, this.kc3456, jQuery );
