var Calendar = function (Calendar_id,inner_div,from_year,from_month,to_year,to_month,period,year,month,day)
{
	this.ID = Calendar_id || 'CAL';
	this.ID_pref = this.ID+'_';
	this.inner_div = inner_div || null;
	this.from_year = from_year || null;
	this.from_month = from_month || null;
	this.to_year = to_year || null;
	this.to_month = to_month || null;
	this.nonemptydays = null;
	this.pos_id = null;
	this.pos_uid = null;
	
	if(year == null)
	{
		date = new Date();
		day = date.getDate();
		month = date.getMonth()+1;
		year = date.getFullYear();
	}
	else
	{
		cur_date = new Date(year, month, day);
		day = cur_date.getDate();
		month = cur_date.getMonth();
		year = cur_date.getFullYear();
	}
	
	this.year = year || null;
	this.month = month || null;
	this.day = day || null;
	this.period = period || null;
}

Calendar.prototype.setvalues = function ()
{
	var year = this.year;
	var month = this.month;
	var month_year_array = this.month_year_array;
	
	for (var i=0; i<month_year_array.length;i++)
	if (month_year_array[i]['month']==month && month_year_array[i]['year']==year)
	{
		document.all[this.ID_pref+'month_year_select'].value = i;
		break
	}
}

Calendar.prototype.changeyearmonth = function (i)
{
	this.year = this.month_year_array[i]['year'];
	this.month = this.month_year_array[i]['month'];
	this.draw();
}


Calendar.prototype.set_data = function (day)
{
	
	var new_link = host_server+'index.php?id='+this.pos_id+'&uid='+this.pos_uid+'&setdate='+this.year+','+this.month+','+day+'&period='+this.period;
	window.location.href = new_link;
}

Calendar.prototype.set_period = function (period)
{
	
	var new_link = host_server+'index.php?id='+this.pos_id+'&uid='+this.pos_uid+'&setdate='+this.year+','+this.month+','+this.day+'&period='+period;
	window.location.href = new_link;
}

Calendar.prototype.draw = function ()
{
	var ID = this.ID;
	var pref = this.ID_pref;
	var inner_div = this.inner_div || null;
	var from_year = this.from_year || null;
	var from_month = this.from_month || null;
	var to_year = this.to_year || null;
	var to_month = this.to_month || null;
	var year = this.year || null;
	var month = this.month || null;
	var day = this.day || null;
	var period = this.period || null;
	var nonemptydays = this.nonemptydays || null;
	months = new Array('январь','февраль','март','апрель','май','июнь','июль','август','сентябрь','октябрь','ноябрь','декабрь');
	days_of_week = new Array ('Пн','Вт','Ср','Чт','Пт','Сб','Вс');
	holidays = [[1,1],[1,2],[1,3],[1,4],[1,5],[1,7],[2,23],[3,8],[5,1],[5,9],[6,12],[11,4]];
	
	this_month = new Date(year, month-1, 1);
	next_month = new Date(year, month, 1);
	prev_month = month - 2;

	//Find out when this month starts and ends.
	first_week_day = this_month.getDay();
	if (first_week_day == 0) first_week_day = 6;
	else first_week_day-- ;

	days_in_this_month = Math.floor((next_month.getTime() - this_month.getTime()) / (1000 * 60 * 60 * 24));
	
	if (month == 3) days_in_this_month++;
	
	calendar_html = '<table cellspacing="1" class="Calendar_main_table">';

	var days_of_week_line = '';
	
	for (var i=0;i<days_of_week.length;i++)
	{
		days_of_week_line += '<td class="Calendar_days_of_week_td">'+days_of_week[i]+'</td>';
	}
	calendar_html += '<tr class="Calendar_days_of_week_tr">'+days_of_week_line+'</tr>';

	//Fill the first week of the month with the appropriate number of blanks.
	var first_empty_days_of_week = '';
	for(week_day = 0; week_day < first_week_day; week_day++)
	{
		first_empty_days_of_week += '<td class="Calendar_fisrt_empty_days_td">&nbsp;</td>';
	}
	
	calendar_html += '<tr class="Calendar_days_tr">'+first_empty_days_of_week;
	
	week_day = first_week_day;
	for (day_counter = 1; day_counter <= days_in_this_month; day_counter++)
	{
		week_day %= 7;
		if (week_day == 0) calendar_html += '</tr><tr class="Calendar_days_tr">';

		var is_hol = 'N';
		for (var k=0;k<holidays.length;k++)
		{
			if (holidays[k][0]==month && holidays[k][1]==day_counter)
			{
				is_hol = "Y";
				break;
			}
		}
		
		var is_exi = 'N';
		if (nonemptydays !== null)
		{
			for (var k=0;k<nonemptydays.length;k++)
			{
				if (nonemptydays[k][0]==day_counter && nonemptydays[k][1]==month && nonemptydays[k][2]==year)
				{
					is_exi = "Y";
					break;
				}
			}
		}
		if (week_day == 5 ||week_day == 6) is_hol = "Y";
		//Do something different for the current day.
		
		if (day == day_counter)	calendar_html += '<td class="Calendar_current_day_td"><a class="Calendar_day_a" href="javascript:'+this.ID+'.set_data('+ day_counter +');">'+ day_counter + '</a></td>';
		else if (is_hol == "Y")
		{ 
			if (is_exi=="N") calendar_html += '<td class="Calendar_holyday_empty_td">' + day_counter + '</td>';
			else if (is_exi=="Y") calendar_html += '<td class="Calendar_holyday_td"><a class="Calendar_holyday_a" href="javascript:'+this.ID+'.set_data('+ day_counter +');">' + day_counter + '</a></td>';
		}
		else
		{
			if (is_exi=="N") calendar_html += '<td class="Calendar_day_empty_td">' + day_counter + '</td>';
			else if (is_exi=="Y") calendar_html += '<td class="Calendar_day_td"><a class="Calendar_day_a" href="javascript:'+this.ID+'.set_data('+ day_counter +');">' + day_counter + '</a></td>';
		} 

		week_day++;
	}

	calendar_html += '</tr>';
	
	var cur_month = from_month-1;
	var cur_year = from_year;
	var out_years_select = '';
	
	var months_count = 12*(to_year-from_year)+(to_month-from_month)+1;
	var month_year_array = new Array();
	if (months_count<121)
	{
		for (var i=0; i<months_count;i++)
		{
			cur_month++;
			if (cur_month>12)
			{
				cur_month = 1;
				cur_year++;
			}
			var sub_arr = new Array();
			
			sub_arr['month'] = cur_month;
			sub_arr['year'] = cur_year;
			month_year_array[i] = sub_arr;
			
			out_years_select += '<option class="Calendar_month_year_option" value="'+i+'">'+cur_year+', '+months[cur_month-1]+'</option>';
		}
	}
	
	this.month_year_array = month_year_array;
	
	calendar_html += '<tr class="Calendar_month_year_tr"><td colspan="7" class="Calendar_month_year_td"><select name="'+pref+'month_year_select" class="Calendar_month_year_select" onchange="'+this.ID+'.changeyearmonth(this.value);">'+out_years_select+'</select><td></tr>';
	
	calendar_html += '<tr class="Calendar_period_tr"><td colspan="7" class="Calendar_period_td">Период:  ';
	if (period == 'day') var cek = "checked"; else var cek = "";
	calendar_html += '<input type="radio" name="'+pref+'period" value="day" class="Calendar_period_radio" '+cek +' onclick="'+this.ID+'.set_period(this.value);"> день  ';
	if (period == 'month') var cek = "checked"; else var cek = "";
	calendar_html += '<input type="radio" name="'+pref+'period" value="month" class="Calendar_period_radio" '+cek +' onclick="'+this.ID+'.set_period(this.value);"> месяц  ';
	if (period == 'year') var cek = "checked"; else var cek = "";
	calendar_html += '<input type="radio" name="'+pref+'period" value="year" class="Calendar_period_radio" '+cek +' onclick="'+this.ID+'.set_period(this.value);"> год  ';
	calendar_html += '<td></tr>';
	calendar_html += '</table>';
	//Display the calendar.
	document.all[inner_div].innerHTML = calendar_html;
	
	this.setvalues();
}
		 
