(function($) {
//alert("Loaded");	
var namespace = 'carouselWidget01';


$.fn[namespace] = function(){
		
var PREV_BTN_ON_IMG = 'imgsBB/btn_prev01.gif';

var PREV_BTN_OFF_IMG = 'imgsBB/btn_prev01_off.gif';

var NEXT_BTN_ON_IMG = 'imgsBB/btn_next01.gif';

var NEXT_BTN_OFF_IMG = 'imgsBB/btn_next01_off.gif';
//var rootElem = $('#carouselItem01');
		
var rootElem = $(this);
		
var carouselInnerElem = $('#carouselItem01Inner');
var carouselPageIcon = $('#carouselItem01PageIcon');
//alert("Before Init");

var carouselPrevElem = $('#carouselPrev01');
var carouselNextElem = $('#carouselNext01');
var carouselPrevImg = $('img', carouselPrevElem);

var carouselNextImg = $('img', carouselNextElem); // ?????????



		var PAGE_NUM = $('ul', carouselInnerElem).size();
		var PageIcon = $('li', carouselPageIcon).size();

		var IDFlag=0;
		$('li', carouselPageIcon).hide();
		$('li.flag' + IDFlag,carouselPageIcon).show();
//		alert($('li', carouselPageIcon).innerHTML);
//		alert(carouselItem01PageIcon.innerHTML);

//		alert($('#carouselItem01PageIcon li').size());

		// ???????????
		var PAGE_SIZE = 394;
		// ??????????(ms)

//		var PAGE_SIZE = 294;
		var CAROUSEL_CHANGE_DTIME = 3500;

		var INDICATOR_OFF_IMAGE = 'css/ico_jump.gif';
		var INDICATOR_ON_IMAGE = 'css/ico_jump_on.gif';

		// ???ID????
		var MAX_PAGE_ID = PAGE_NUM - 1;
		// ?????????ID
		var nowPageId = 0;

		// ???<li>??????ID??????????
		var ID_PREFIX = rootElem.attr('id');
		
		// ??????<li>??????ID??????????
		var ID_PAGENAVI_PREFIX = 'carousel01Indicator';

		var carouselChangeTimerId;


		function init(option) {
			//alert(carouselInnerElem.css('width'));
			carouselInnerElem.css('width', PAGE_SIZE * PAGE_NUM + 'px');// set the width of the carousel to Name of Pages * Width

			carouselPrevBtnOnOff(false);
			carouselNextBtnOnOff(MAX_PAGE_ID != 0);

			carouselPrevElem.click(onPrevClick);
			carouselNextElem.click(onNextClick);


			$('#' + ID_PAGENAVI_PREFIX + '_0 img').attr('src', INDICATOR_ON_IMAGE);

			if ($('#carouselIndicator01 ul li').size() > 1) {
				$('#carouselIndicator01 ul li').each(
					function(index) {
						var img = $(this).find('img');
						$(this)
							.attr('id', ID_PAGENAVI_PREFIX + '_' + index)
							.css('cursor', 'pointer')
							.hover(
								function() {
									if (index != nowPageId) {
										img.attr('src', INDICATOR_ON_IMAGE);
									}
								},
								function() {
									if (index != nowPageId) {
										img.attr('src', INDICATOR_OFF_IMAGE);
									}
								
								}
							)
							.click(
								function() {
									if (MAX_PAGE_ID == 0) {
										return;
									}
									clearTimeout(carouselChangeTimerId);
									var nextPageId = index;
									if (nextPageId != nowPageId) {

										carouselPrevBtnOnOff(nextPageId != 0);
										carouselNextBtnOnOff(nextPageId != MAX_PAGE_ID);

										pageChange(nextPageId);
									}
									carouselChangeTimerId = setTimeout(carouselChangeTimerCB, CAROUSEL_CHANGE_DTIME);
								}
							);
					}
				);
			}

			$('ul > li', carouselInnerElem).each(
				function() {
					$(this).hover(
						function() {
							clearTimeout(carouselChangeTimerId);
						},
						function() {
							carouselChangeTimerId = setTimeout(carouselChangeTimerCB, CAROUSEL_CHANGE_DTIME);
						}
					);
				}
			);
//alert(carouselIndicator01.innerHTML);
//alert(carouselItem01Inner.innerHTML);
//alert(carouselItem01PageIcon.children(0).innerHTML);
			carouselChangeTimerId = setTimeout(carouselChangeTimerCB, CAROUSEL_CHANGE_DTIME);
		}
		
/* --------------------------------------------------------------------------------------------------------------------------------------------*/
/* --------------------------------------------------------------------------------------------------------------------------------------------*/
		function carouselChangeTimerCB() {
			return;
			//alert("carouselChangeTimerCB");
			clearTimeout(carouselChangeTimerId);
			
			if (MAX_PAGE_ID == 0 || nowPageId == MAX_PAGE_ID) {
				carouselPrevBtnOnOff(false);
			} else if (nowPageId == 0) {
				carouselPrevBtnOnOff(true);
			}
			if (MAX_PAGE_ID == 0 || nowPageId == MAX_PAGE_ID - 1) {
				carouselNextBtnOnOff(false);
			} else if (nowPageId == MAX_PAGE_ID) {
				carouselNextBtnOnOff(true);
			}

			pageChange(nowPageId + 1);

			carouselChangeTimerId = setTimeout(carouselChangeTimerCB, CAROUSEL_CHANGE_DTIME);
		}

/* --------------------------------------------------------------------------------------------------------------------------------------------*/
/* --------------------------------------------------------------------------------------------------------------------------------------------*/
		function onNextClick() {
//		$('li', carouselPageIcon).show();
			if (nowPageId >= MAX_PAGE_ID) {
				return;
			}

			clearTimeout(carouselChangeTimerId);

			if (nowPageId == 0) {
				carouselPrevBtnOnOff(true);
			}
			if (nowPageId == MAX_PAGE_ID - 1) {
				carouselNextBtnOnOff(false);
			}

			pageChange(nowPageId + 1);

			$('li', carouselPageIcon).hide();
			$('li.flag' + nowPageId,carouselPageIcon).show();

			carouselChangeTimerId = setTimeout(carouselChangeTimerCB, CAROUSEL_CHANGE_DTIME);
		}

/* --------------------------------------------------------------------------------------------------------------------------------------------*/
/* --------------------------------------------------------------------------------------------------------------------------------------------*/
		function onPrevClick() {
			if (nowPageId <= 0) {
				return;
			}

			clearTimeout(carouselChangeTimerId);

			if (nowPageId == 1) {
				carouselPrevBtnOnOff(false);
			}
			if (nowPageId == MAX_PAGE_ID) {
				carouselNextBtnOnOff(true);
			}

			pageChange(nowPageId - 1);

			$('li', carouselPageIcon).hide();
			$('li.flag' + nowPageId,carouselPageIcon).show();
			carouselChangeTimerId = setTimeout(carouselChangeTimerCB, CAROUSEL_CHANGE_DTIME);
		}
		
/* --------------------------------------------------------------------------------------------------------------------------------------------*/
/* --------------------------------------------------------------------------------------------------------------------------------------------*/
		function pageChange(nextPageId) {
			var duration = 800;
			if (nextPageId > MAX_PAGE_ID) {
				nextPageId = 0;
				duration = 300;
			}
			dispPageNavi(nextPageId);
//			alert("PageChange Before " + nextPageId);
			carouselInnerElem
				.stop(true, true)
				.animate({marginLeft: -(nextPageId * PAGE_SIZE)}, duration, 'swing');
			nowPageId = nextPageId;
//			alert("PageChange After " + nextPageId);
		}

/* --------------------------------------------------------------------------------------------------------------------------------------------*/
/* --------------------------------------------------------------------------------------------------------------------------------------------*/
		function dispPageNavi(nextPageId) {
			$('#' + ID_PAGENAVI_PREFIX + '_' + nowPageId + ' img').attr('src', INDICATOR_OFF_IMAGE);
			$('#' + ID_PAGENAVI_PREFIX + '_' + nextPageId + ' img').attr('src', INDICATOR_ON_IMAGE);
		}

/* --------------------------------------------------------------------------------------------------------------------------------------------*/
/* --------------------------------------------------------------------------------------------------------------------------------------------*/
//House keep the Prev and Next Button
		function carouselPrevBtnOnOff(isOn) {
			carouselPrevImg.attr('src', isOn ? PREV_BTN_ON_IMG : PREV_BTN_OFF_IMG);
			carouselPrevElem.css('cursor', isOn ? 'pointer' : 'default');
		}

/* --------------------------------------------------------------------------------------------------------------------------------------------*/
/* --------------------------------------------------------------------------------------------------------------------------------------------*/
		function carouselNextBtnOnOff(isOn) {
			carouselNextImg.attr('src', isOn ? NEXT_BTN_ON_IMG : NEXT_BTN_OFF_IMG);
			carouselNextElem.css('cursor', isOn ? 'pointer' : 'default');
		}

		init();
		return this;
	}

})(jQuery);

