//------------------------------------------------------------------------------
//	日付選択ウィンドウ
/*

	$('テキストボックスのID').crowm_datepicker(
		{
			current : "2010-10-10",	//	最初の日付
			id : "picker_id"		//	省略可能：ピッカーのID
		}
	);
*/
//------------------------------------------------------------------------------
jQuery.fn.extend( {
	crowm_datepicker : function( _param ){

		//	IDを決める
		var new_id = "";
		if( ! _param ) _param = {};
		new_id = _param.id ? _param.id : ("crowm_datepicker_" + (_crowm_datepicker_id++));
		_param.id = new_id;

		$(this).data("param", _param).bind( 'focus', function(){

			//	もし既にdatepickerが起動中なら、それを消して新しく作る
			if( _crowm_datepicker_latest_id != "" ){
				//	同じテキストに振られているpickerなら、無視する。
				if( $(this).attr("id") == $('#'+_crowm_datepicker_latest_id).data("target") ){
					return( this );
				}
				var closeid = $('#'+_crowm_datepicker_latest_id).data('window_close_id');
				$('#'+closeid).click();
				_crowm_datepicker_latest_id = "";
			}

			//	初回日付
			var param = $(this).data("param");
			if( param.current != null ){}
			var selected = param.current ? Date.fromString(param.current) : (new Date()).zeroTime();

			//	入力があるならそれを使用
			var input_val = $(this).val();
			if( input_val.length == 10 ){
				selected = Date.fromString(input_val);
			}

			//	表示月
			var dispmonth = new Date(selected);
			dispmonth.setDate(1);

			//	ウィンドウ作成
			var win = crowm_window(
				$('<div align="center">' + dispmonth.asString("yyyy年 mm月") + '</div>'),
				"",
				{	id: param.id,
					left:$(this).position().left,
					top:$(this).position().top + 20,
					width:220,
					height:270,
					small:true
				}
			)
			.data( "target", $(this).attr("id") )
			.data( "year", dispmonth.asString("yyyy") )
			.data( "month", dispmonth.asString("mm") )
			.data( "day", selected.asString("dd") );

			//	最後のウィンドウを覚えておく
			_crowm_datepicker_latest_id = win.attr('id');

			//	レンダリング
			crowm_datepicker_render(
				param.id,
				dispmonth
			).fadeIn("fast");
		} );

		return( this );
	}
} );


//------------------------------------------------------------------------------
//	datepicker レンダリング
//------------------------------------------------------------------------------
function crowm_datepicker_render( _picker_id, _disp_date ) {

	//	titleの中身を削除
	$('#' + $('#'+_picker_id).data("window_title_id")).empty();

	//	title作成
	$('<div align="center">' + _disp_date.asString("yyyy年 mm月") + '</div>').appendTo(
		$('#' + $('#'+_picker_id).data("window_title_id")) );

	//	bodyの中身を削除
	$('#' + $('#'+_picker_id).data("window_body_id")).empty();

	//	body作成
	var tbl = $('<table class="crowm_datepicker_table" cellpadding=4 align="center">').appendTo(
		$('#' + $('#'+_picker_id).data("window_body_id")) );
	var tbody = $('<tbody></tbody>').appendTo(tbl);


	//	月選択
	var paging = $('<td colspan="7" align="center"></td>').appendTo( $('<tr></tr>').appendTo(tbody) );
	var paging_tbl = $('<table class="crowm_datepicker_paging" width="100%"></table>').appendTo(paging);
	var paging_tbody = $('<tbody></tbody>').appendTo(paging_tbl);
	var paging_tr = $('<tr></tr>').appendTo(paging_tbody);

	paging_tr.append(
		$('<td width="1%" nowrap></td>').append(
			$('<a href="#"><img src="winimg/arrow_circle_black_l.png" border="0" /></a>').data("picker_id", _picker_id).bind("click", function(){

				var yer = Number($('#'+$(this).data("picker_id")).data("year"));
				var mon = Number($('#'+$(this).data("picker_id")).data("month"));
				mon--; if( mon <= 0 ){ mon=12; yer--; }

				var predate = (new Date()).zeroTime();
				predate.setFullYear( yer );
				predate.setDate(1);
				predate.setMonth( mon-1 ); // 月は0〜

				crowm_datepicker_render(
					$(this).data("picker_id"),
					predate
				).data( "year", yer ).data( "month", mon );
				return(false);
			}).mouseover( function(){
				$('img', this).attr("src", "winimg/arrow_circle_black_l_over.png");
			}).mouseout( function(){
				$('img', this).attr("src", "winimg/arrow_circle_black_l.png");
			})
		)
	);
	var paging_center = $('<td align="center"></td>').appendTo( paging_tr );
	var selyear = $('<select id="' + _picker_id + "_year" + '"></select>').data("picker_id", _picker_id).appendTo(paging_center);
	paging_center.append( "年 " );
	var selmonth = $('<select id="' + _picker_id + "_month" + '"></select>').data("picker_id", _picker_id).appendTo(paging_center);
	paging_center.append( "月" );

	paging_tr.append(
		$('<td width="1%" nowrap></td>').append(
			$('<a href="#"><img src="winimg/arrow_circle_black_r.png" border="0" /></a>').data("picker_id", _picker_id).bind("click", function(){

				var yer = Number($('#'+$(this).data("picker_id")).data("year"));
				var mon = Number($('#'+$(this).data("picker_id")).data("month"));
				mon++; if( mon > 12 ){ mon=1; yer++; }

				var predate = (new Date()).zeroTime();
				predate.setFullYear( yer );
				predate.setDate(1);
				predate.setMonth( mon-1 ); // 月は0〜

				crowm_datepicker_render(
					$(this).data("picker_id"),
					predate
				).data( "year", yer ).data( "month", mon );
				return(false);
			}).mouseover( function(){
				$('img', this).attr("src", "winimg/arrow_circle_black_r_over.png");
			}).mouseout( function(){
				$('img', this).attr("src", "winimg/arrow_circle_black_r.png");
			})
		)
	);

	//	年月選択プルダウン
	var cur_yer = Number( _disp_date.getFullYear() );
	for( var i=cur_yer-3; i<cur_yer+3; i++ ){
		if( i == _disp_date.getFullYear() ){
			selyear.append( '<option value="' + i + '" selected>' + i + '</option>' );
		}else{
			selyear.append( '<option value="' + i + '">' + i + '</option>' );
		}
	}
	selyear.bind("change", function(){
		var pid = $(this).data("picker_id");
		var yer = $(this).val();
		var mon = $("#"+pid+"_month").val();
		var seldate = (new Date()).zeroTime();
		seldate.setFullYear( yer );
		seldate.setDate(1);
		seldate.setMonth( mon );

		crowm_datepicker_render(
			pid,
			seldate
		).data( "year", yer ).data( "month", mon );
		return(false);
	});

	for( var i=1; i<=12; i++ ){
		if( i-1 == _disp_date.getMonth() ){
			selmonth.append( '<option value="' + i + '" selected>' + i + '</option>' );
		}else{
			selmonth.append( '<option value="' + i + '">' + i + '</option>' );
		}
	}
	selmonth.bind("change", function(){
		var pid = $(this).data("picker_id");
		var yer = $("#"+pid+"_year").val();
		var mon = $(this).val();
		var seldate = (new Date()).zeroTime();
		seldate.setFullYear( yer );
		seldate.setDate(1);
		seldate.setMonth( mon );

		crowm_datepicker_render(
			pid,
			seldate
		).data( "year", yer ).data( "month", mon );
		return(false);
	});

	//	１行目
	$('<tr>'
		+ '<td class="crowm_datepicker_head_sun">日</td>'
		+ '<td class="crowm_datepicker_head_day">月</td>'
		+ '<td class="crowm_datepicker_head_day">火</td>'
		+ '<td class="crowm_datepicker_head_day">水</td>'
		+ '<td class="crowm_datepicker_head_day">木</td>'
		+ '<td class="crowm_datepicker_head_day">金</td>'
		+ '<td class="crowm_datepicker_head_sat">土</td>'
		+ '</tr>'
	).appendTo(tbody);

	//	最初の曜日まで進める
	var tr = $('<tr></tr>').appendTo(tbody);
	for( var i=0; i<_disp_date.getDay(); i++ ){
		$('<td class="crowm_datepicker_nodate">&nbsp;</td>').appendTo(tr);
	}

	//	日付部分作成
	var wk = _disp_date.getDay();
	for( var i=1; i<=_disp_date.getDaysInMonth(); i++ ){
		var cls = 'crowm_datepicker_day';
		if( wk==0 ){
			cls = 'crowm_datepicker_sun';
		}else if( wk==6 ){
			cls = 'crowm_datepicker_sat';
		}

		var today_opt = "";
		if( i == $('#'+_picker_id).data('day') ){
			today_opt = ' crowm_datepicker_today';
			cls += today_opt;
		}

		$('<td class="' + cls + '">' + i + '</td>').data("picker_id", _picker_id).data("today_opt",today_opt).appendTo(tr)
			.mouseover( function(){
				if( this.className == "crowm_datepicker_sun" + $(this).data("today_opt") ){
					this.className = "crowm_datepicker_sun_over" + $(this).data("today_opt");
				}else if( this.className == "crowm_datepicker_sat" + $(this).data("today_opt") ){
					this.className = "crowm_datepicker_sat_over" + $(this).data("today_opt");
				}else{
					this.className = "crowm_datepicker_day_over" + $(this).data("today_opt");
				}
			})
			.mouseout( function(){
				if( this.className == "crowm_datepicker_sun_over" + $(this).data("today_opt") ){
					this.className = "crowm_datepicker_sun" + $(this).data("today_opt");
				}else if( this.className == "crowm_datepicker_sat_over" + $(this).data("today_opt") ){
					this.className = "crowm_datepicker_sat" + $(this).data("today_opt");
				}else{
					this.className = "crowm_datepicker_day" + $(this).data("today_opt");
				}
			})
			.click( function(){
				var pickwin = $('#'+$(this).data("picker_id"));
				var target = pickwin.data("target");
				$('#'+target).val( pickwin.data("year") + "-" + pickwin.data("month") + "-" + zeroume_2($(this).text()) );
				$("#"+pickwin.data("window_close_id")).click();
				_crowm_datepicker_latest_id = "";
			});

		wk++;
		if( wk==7 ){
			tr = $('<tr></tr>').appendTo(tbody);
			wk = 0;
		}
	}

	return( $("#"+_picker_id) );
}


//------------------------------------------------------------------------------
//	内部変数 / 関数
//------------------------------------------------------------------------------
var _crowm_datepicker_id = 1;
var _crowm_datepicker_latest_id = "";

function zeroume_2( num ) {
	var s = '0'+num;
	return s.substring(s.length-2)
}
function zeroume_4( num ) {
	var s = '0'+num;
	return s.substring(s.length-4)
}

