(function($) {
	$.fn.calendar = function(settings) {
		//予約状況 AM,PM,ALL,AMPM
		var booking = {
			
'2024-08-10':['ALL ','予約済'],
'2024-08-11':['ALL ','予約済'],
'2024-08-12':['ALL ','予約済'],
'2024-08-13':['ALL ','予約済'],
'2024-08-17':['ALL ','予約済'],
'2024-08-18':['ALL ','予約済'],

'2024-08-24':['ALL ','予約済'],
'2024-08-25':['ALL ','予約済'],
'2024-08-26':['AM ','予約済']

		};
			
		
		var $self    = $(this),
			toDate   = new Date(),
			toYear   = toDate.getFullYear(),
			toMonth  = toDate.getMonth() + 1,
			toDays   = toDate.getDate(),
			fullDate = '',
			str      = '';

		/*
			dateYear     : 初期で表示するカレンダーの年
			dateMonth    : 初期で表示するカレンダーの月
			weekValue    : 表示する曜日の文字列
			changeButton : 前または次の月に移動するためのボタンを表示するかどうか
			tableClass   : カレンダー全体のCSSクラス名
			prevValue    : 前月移動ボタンの文字列
			nextValue    : 次月移動ボタンの文字列
		*/
		settings = $.extend({
			dateYear     : toYear,
			dateMonth    : toMonth,
			weekValue    : ['日', '月', '火', '水', '木', '金', '土'],
			changeButton : true,
			tableClass   : 'calendar',
			prevValue    : '&lt;&lt;',
			nextValue    : '&gt;&gt;'
		}, settings);
		
		var zeroFormat = function(v, n) {
			var vl = String(v).length;
			if(n > vl) {
				return (new Array((n - vl) + 1).join(0)) + v;
			} else {
				return v;
			}
		};

		fullDate = '' + toYear + zeroFormat(toMonth, 2) + zeroFormat(toDays, 2);

		var printBody = function() {
			var lastdays = new Date(settings.dateYear, settings.dateMonth, 0),
				rowCount = 1,
				pbstr    = '<tr>\n',
				forDate  = '',
				i        = 0,
				j        = 0,
				len      = 0,
				len2     = 0;

			$.each(settings.weekValue, function(key, value) {
				pbstr += '<th>' + value + '</th>\n';
			});

			pbstr += '</tr>\n';
			pbstr += '<tr>\n';
			
			

			
			for (i = 1, len = lastdays.getDate(); i <= len; i++) {
				forDate = new Date(settings.dateYear, settings.dateMonth - 1, i);
				if (i === 1 && forDate.getDay() > 0) {
					for (j = 0; j < forDate.getDay(); j++) {
						pbstr += '<td>&nbsp;</td>\n';
					}
				}
				
				//予約されているクラス指定
				//対象の年月日
				var day = settings.dateYear+'-'+zeroFormat(settings.dateMonth, 2)+'-'+zeroFormat(i, 2);
				
				if ( day in booking){
					if ( booking[day][0] == 'AM' ){
					  pbstr += '<td  class="' + booking[day][0] + '" >' + i + '<br>ハーフ<br>'+booking[day][1]+'</td>\n';
					}else if ( booking[day][0] == 'PM' ){
					  pbstr += '<td  class="' + booking[day][0] + '" >' + i + '<br>ハーフ<br>'+booking[day][1]+'</td>\n';
					}else{
                                                    pbstr += '<td  class="' + booking[day][0] + '" >' + i + '<br>'+booking[day][1]+'</td>\n';
					}
				}else{
					 pbstr += '<td>' + i + '</td>\n';
				}
				
				if (forDate.getDay() === 6 && i != lastdays.getDate()) {
					pbstr += '</tr>\n';
					pbstr += '<tr>\n';
					rowCount++;
				}

				if (i === lastdays.getDate() && forDate.getDay() < 6) {
					for (j = 0, len2 = (6 - forDate.getDay()); j < len2; j++) {
						pbstr += '<td>&nbsp;</td>\n';
					}
				}
			}
			pbstr += '</tr>\n';
			if (rowCount < 6) {
				for (i = 0, len = (6 - rowCount); i < len; i++) {
					pbstr += '<tr>\n';
					for (j = 0; j < 7; j++) {
						pbstr += '<td>&nbsp;</td>\n';
					}
					pbstr += '</tr>\n';
				}
			}
			return pbstr;
		};

		var thisDate = function() {
			return settings.dateYear + '年' + settings.dateMonth + '月';
		};
 
		str += '\n<table class="' + settings.tableClass + '">\n';
		str += '<thead>\n';
		str += '<tr>\n';
		if (settings.changeButton === true) {
			str += '<td colspan="2"><a href="#prev">' + settings.prevValue + '</a></td>\n';
			str += '<th colspan="3">' + thisDate() + '</th>\n';
			str += '<td colspan="2"><a href="#next">' + settings.nextValue + '</a></td>\n';
		} else {
			str += '<th colspan="7">' + thisDate() + '</th>\n';
		}
		str += '</tr>\n';
		str += '</thead>\n';
		str += '<tbody>\n';
		str += printBody();
		str += '</tbody>\n';
		str += '</table>\n';
		$(this).html(str);

		if (settings.changeButton === true) {
			$(this).find('thead td a').on('click', function() {
				var mode = $(this).attr('href');
				if (mode === '#prev') {
				  //今月を表示中は戻らない
			            var nowYear = new Date().getFullYear();
			            var nowMonth = new Date().getMonth() + 1;
			            
			            if ( thisDate() != nowYear + '年' + nowMonth + '月' ) {
			            
					if (settings.dateMonth === 1) {
						settings.dateYear--;
						settings.dateMonth = 12;
					} else {
						settings.dateMonth--;
					} 
			            }	
				} else {
					if (settings.dateMonth === 12) {
						settings.dateYear++;
						settings.dateMonth = 1;
					} else {
						settings.dateMonth++;
					}
				}
				$self.find('thead th').html(thisDate());
				$self.find('tbody').html(printBody());
				changeColor();
				return false;
			});
		}

	                   
        		
        		 /*
   		* 色を変える
   		*/
        		var changeColor = function(){
        		jQuery(this).find("td").each(function(){
	            var f = jQuery(this).data('flag');
            	  if ( f == '1' ){
            	    jQuery(this).addClass('ALL');
            	  }else if (f == 'A' ){
            	    jQuery(this).addClass('AM');
            	  }else if (f == 'P' ){
            	    jQuery(this).addClass('PM');	
            	  }else if (f == 'AP' ){
            	    jQuery(this).addClass('AMPM');
            	  }       		
            	});
      		};   
		
		changeColor();
		return this;
	};
})(jQuery);
