var SelectMonth = Class.create();

// globals
var SelectMonth_offsets=0;
var SelectMonth_dragging=0;
var SelectMonth_justStarted=0;
var SelectMonth_monthStart=1;
var SelectMonth_monthEnd=1;
var SelectMonth_xBreak=25;

SelectMonth.prototype = {

	initialize: function() {
		SelectMonth_offsets = Position.cumulativeOffset( $('fullyear') );	// fullyearの左上の、ウィンドウ左上からの絶対座標
		$("selectedMonths").style.top = $("fullyear").style.top;
		$("selectedMonths").style.height = $("fullyear").style.height;

		this.initMonths(1);

		$("selectedMonths").style.left = SelectMonth_xBreak*(SelectMonth_monthStart-1);
		$("selectedMonths").style.width = SelectMonth_xBreak*(SelectMonth_monthEnd-SelectMonth_monthStart+1);
		Event.observe($("fullyear"), "mousemove", this.getMouseXY, false);
		Event.observe($("fullyear"), "mousedown", this.setStart, false);
		Event.observe($("fullyear"), "mouseup", this.setEnd, false);
	},

	initMonths: function(start)
	{
		var id;
		var numMonth;
		var start = parseInt(start);
		for( var i=0; i<=11; i++ ){
			id="month"+(i+1);
			numMonth = i+start;
			if( numMonth > 12 ){
				numMonth -= 12;
			}
			$(id).innerHTML = numMonth;
		}
	},

	setSelected: function( start, end )
	{
		$("selectedMonths").style.left = SelectMonth_xBreak*(start-1);
		$("selectedMonths").style.width = SelectMonth_xBreak*(end-start+1);
	},

	setStart: function(event)
	{
		// 開始点は、クリックした位置に近い月数字
		var xStart = mySelectMonth.breakOff2( Event.pointerX(event) - SelectMonth_offsets[0] );
		SelectMonth_dragging = 1;
		SelectMonth_justStarted = 1;
		var monthStartIndex = xStart/SelectMonth_xBreak+1;
		SelectMonth_monthStart = parseInt( $("month"+monthStartIndex).innerHTML );
		SelectMonth_monthEnd = SelectMonth_monthStart;
		$("selectedMonths").style.left = xStart;
		$("selectedMonths").style.width = SelectMonth_xBreak;
	},

	setEnd: function(event)
	{
		SelectMonth_dragging = 0;
		SelectMonth_monthEnd = SelectMonth_monthStart + parseInt($("selectedMonths").style.width) / SelectMonth_xBreak - 1;
	},

	getMouseXY: function(event)
	{
		var x = Event.pointerX(event);	// ウィンドウ左上からの絶対座標
		var y = Event.pointerY(event);
		if( SelectMonth_dragging ){
			if( SelectMonth_justStarted ){
				// クリックした後、最初に動かした時
				SelectMonth_justStarted = 0;
				var xStart = mySelectMonth.breakOff2( Event.pointerX(event) - SelectMonth_offsets[0] );
				var monthStartIndex = xStart/SelectMonth_xBreak+1;
				SelectMonth_monthStart = parseInt( $("month"+monthStartIndex).innerHTML );
				SelectMonth_monthEnd = SelectMonth_monthStart;
				mySelectMonth.initMonths( SelectMonth_monthStart );
				$("selectedMonths").style.left = 0;
				$("selectedMonths").style.width = SelectMonth_xBreak;
			}else{
				// ドラッグ中
				var xEnd = mySelectMonth.breakOff( x - SelectMonth_offsets[0] );
				$('selectedMonths').style.width = xEnd;
			}
		}
	},

	breakOff: function( tempx )
	{
		// 区切りのいいところにずらす
		return Math.floor( ( tempx + SelectMonth_xBreak/2 ) / SelectMonth_xBreak ) * SelectMonth_xBreak;
	},

	breakOff2: function( tempx )
	{
		// クリックした位置に近い月を求める
		return Math.floor( tempx / SelectMonth_xBreak ) * SelectMonth_xBreak;
	}
}

function initSelectMonth() { mySelectMonth = new SelectMonth(); }
Event.observe(window, 'load', initSelectMonth, false);


