(function($){
	$(function(){
		var scroll = $('div.scroll').css('overflow', 'hidden');
		var tr = scroll.find('tr');
		
		//// randomize top label
		var tds = $.makeArray(tr.find('td'));
		var i = Math.floor(Math.random() * tds.length);
		for(; i > 0; i--){
			tr.append(tds.shift());
		}

		//// scroll
		// manage interval action
		var interval = {
			duration: 3000,
			act: function(){
				$('div.btn_right').trigger('click');
			},
			start: function(){
				this.id = setInterval(this.act, this.duration);
			},
			stop: function(){
				clearInterval(this.id);
			}
		};

		// const variables
		var SET = tr.find('td');
		var STEP = 6;
		var SET_WIDTH = 0;
		SET.each(function(){
			SET_WIDTH += $(this).outerWidth(true);
		});

		// initialize scroll field
		tr.append(SET.clone());
		tr.append(SET.clone());
		scroll.scrollLeft(SET_WIDTH);
		var scroll_lock = false;

		// define button events
		$('div.btn_left').click(function(e){
			e.preventDefault();
			if(!scroll_lock){
				// deal with user's multiple action
				interval.stop();
				scroll_lock = true;

				var elms = $.makeArray(tr.find('td')).slice(-STEP);
				var w = 0;
				$.each(elms, function(){
					w += $(this).outerWidth(true);
				});

				scroll.animate({scrollLeft: scroll.scrollLeft() - w}, 2000, function(){
					setTimeout(function(){
						scroll.scrollLeft(scroll.scrollLeft() + w);
						tr.prepend(elms);
					}, -1); // for IE
					interval.start();
					scroll_lock = false;
				});
			}
		});
		$('div.btn_right').click(function(e){
			e.preventDefault();
			if(!scroll_lock){
				interval.stop();
				scroll_lock = true;

				var elms = $.makeArray(tr.find('td')).slice(0, STEP);
				var w = 0;
				$.each(elms, function(){
					w += $(this).outerWidth(true);
				});

				scroll.animate({scrollLeft: scroll.scrollLeft() + w}, 2000, function(){
					setTimeout(function(){
						scroll.scrollLeft(scroll.scrollLeft() - w);
						tr.append(elms);
					}, -1); // for IE
					interval.start();
					scroll_lock = false;
				});
			}
		});

		// start automatical scroll
		interval.start();
	});
})(jQuery);

