/*
* CTimeSelector
* CCalendarTable
*/
var timeFormat1 = [
	{Id:0,		Value:"12 AM"},
	{Id:0.5,	Value:"12:30 AM"},
	{Id:1,		Value:"1 AM"},
	{Id:1.5,	Value:"1:30 AM"},
	{Id:2,		Value:"2 AM"},
	{Id:2.5,	Value:"2:30 AM"},
	{Id:3,		Value:"3 AM"},
	{Id:3.5,	Value:"3:30 AM"},
	{Id:4,		Value:"4 AM"},
	{Id:4.5,	Value:"4:30 AM"},
	{Id:5,		Value:"5 AM"},
	{Id:5.5,	Value:"5:30 AM"},
	{Id:6,		Value:"6 AM"},
	{Id:6.5,	Value:"6:30 AM"},
	{Id:7,		Value:"7 AM"},
	{Id:7.5,	Value:"7:30 AM"},
	{Id:8,		Value:"8 AM"},
	{Id:8.5,	Value:"8:30 AM"},
	{Id:9,		Value:"9 AM"},
	{Id:9.5,	Value:"9:30 AM"},
	{Id:10,		Value:"10 AM"},
	{Id:10.5,	Value:"10:30 AM"},
	{Id:11,		Value:"11 AM"},
	{Id:11.5,	Value:"11:30 AM"},
	{Id:12,		Value:"12 PM"},
	{Id:12.5,	Value:"12:30 PM"},
	{Id:13,		Value:"1 PM"},
	{Id:13.5,	Value:"1:30 PM"},
	{Id:14,		Value:"2 PM"},
	{Id:14.5,	Value:"2:30 PM"},
	{Id:15,		Value:"3 PM"},
	{Id:15.5,	Value:"3:30 PM"},
	{Id:16,		Value:"4 PM"},
	{Id:16.5,	Value:"4:30 PM"},
	{Id:17,		Value:"5 PM"},
	{Id:17.5,	Value:"5:30 PM"},
	{Id:18,		Value:"6 PM"},
	{Id:18.5,	Value:"6:30 PM"},
	{Id:19,		Value:"7 PM"},
	{Id:19.5,	Value:"7:30 PM"},
	{Id:20,		Value:"8 PM"},
	{Id:20.5,	Value:"8:30 PM"},
	{Id:21,		Value:"9 PM"},
	{Id:21.5,	Value:"9:30 PM"},
	{Id:22,		Value:"10 PM"},
	{Id:22.5,	Value:"10:30 PM"},
	{Id:23,		Value:"11 PM"},
	{Id:23.5,	Value:"11:30 PM"},
	{Id:24,		Value:"12 AM"}
];

var timeFormat2 = [
	{Id:0,		Value:"00:00"},
	{Id:0.5,	Value:"00:30"},
	{Id:1,		Value:"01:00"},
	{Id:1.5,	Value:"01:30"},
	{Id:2,		Value:"02:00"},
	{Id:2.5,	Value:"02:30"},
	{Id:3,		Value:"03:00"},
	{Id:3.5,	Value:"03:30"},
	{Id:4,		Value:"04:00"},
	{Id:4.5,	Value:"04:30"},
	{Id:5,		Value:"05:00"},
	{Id:5.5,	Value:"05:30"},
	{Id:6,		Value:"06:00"},
	{Id:6.5,	Value:"06:30"},
	{Id:7,		Value:"07:00"},
	{Id:7.5,	Value:"07:30"},
	{Id:8,		Value:"08:00"},
	{Id:8.5,	Value:"08:30"},
	{Id:9,		Value:"09:00"},
	{Id:9.5,	Value:"09:30"},
	{Id:10,		Value:"10:00"},
	{Id:10.5,	Value:"10:30"},
	{Id:11,		Value:"11:00"},
	{Id:11.5,	Value:"11:30"},
	{Id:12,		Value:"12:00"},
	{Id:12.5,	Value:"12:30"},
	{Id:13,		Value:"13:00"},
	{Id:13.5,	Value:"13:30"},
	{Id:14,		Value:"14:00"},
	{Id:14.5,	Value:"14:30"},
	{Id:15,		Value:"15:00"},
	{Id:15.5,	Value:"15:30"},
	{Id:16,		Value:"16:00"},
	{Id:16.5,	Value:"16:30"},
	{Id:17,		Value:"17:00"},
	{Id:17.5,	Value:"17:30"},
	{Id:18,		Value:"18:00"},
	{Id:18.5,	Value:"18:30"},
	{Id:19,		Value:"19:00"},
	{Id:19.5,	Value:"19:30"},
	{Id:20,		Value:"20:00"},
	{Id:20.5,	Value:"20:30"},
	{Id:21,		Value:"21:00"},
	{Id:21.5,	Value:"21:30"},
	{Id:22,		Value:"22:00"},
	{Id:22.5,	Value:"22:30"},
	{Id:23,		Value:"23:00"},
	{Id:23.5,	Value:"23:30"},
	{Id:24,		Value:"24:00"}
];


function CCalendarTable (parent)
{
	this.m_names = [
		Lang.FullMonthJanuary,
		Lang.FullMonthFebruary,
		Lang.FullMonthMarch,
		Lang.FullMonthApril,
		Lang.FullMonthMay,
		Lang.FullMonthJune,
		Lang.FullMonthJuly,
		Lang.FullMonthAugust,
		Lang.FullMonthSeptember,
		Lang.FullMonthOctober,
		Lang.FullMonthNovember,
		Lang.FullMonthDecember
	];
	this.dms = 86400000; // 86400000 milliseconds in one day
	this.weeksnum = 7;

	this.SelectedDate		= null;
	this.HtmlContainer		= null;
	this.prevMonthSwitcher	= null;
	this.nextMonthSwitcher	= null;
	this.middleTdSelector	= null;
	this.monthsList			= null;
	this.currentMonth		= null;
	this.calendarRows = new Array();
	var parent = $('mini_calendar_box');

	if (parent) {
		this.Create(parent);
	} else {
		this.Create(document.body);
		this.SetDateFromPicker = function (day,month,year) { this.Hide(); }
	};
	this.RefreshCalendarSelector(mydate.getDate(), mydate.getMonth()+1, mydate.getFullYear());
	this.Show();
}

CCalendarTable.prototype = {
	Create: function (parent)
	{
		this.HtmlContainer = CreateChild(parent, 'div');
		this.HtmlContainer.className = 'wm_hide';

		//date = new Date();
		//all_events_dates = LoadAllYearEvents(date);

		// create TABLE
		var m = CreateChild(this.HtmlContainer, 'table');
		m.className = 'Calendar_Title';
		var m_tr_2 = m.insertRow(0);
		var m_td_21 = m_tr_2.insertCell(0);
		var m_td_22 = m_tr_2.insertCell(1);
		var m_td_23 = m_tr_2.insertCell(2);

		m_td_21.style.width = '32px';
		m_td_21.style.textAlign = 'right';

		m_td_23.style.width = '32px';
		m_td_23.style.textAlign = 'left';

		m_td_22.style.textAlign = 'center';
		m_td_22.style.width = '120px';
		m_td_22.style.zIndex = '15'; 
		m_td_22.style.display = 'block';
		m_td_22.style.position = 'relative';

		// Month Row
		var obj = this;
		this.prevMonthSwitcher = CreateChild(m_td_21, 'a');
		this.prevMonthSwitcher.href = 'javascript:void(0);';
		var img = CreateChild(this.prevMonthSwitcher, 'img');
		img.alt = Lang.AltPrevMonth;
		img.title = Lang.AltPrevMonth;
		img.style.border = '0';
		img.src = './calendar/skins/calendar/minicalendar_arrow_left_activ.gif';
		img.style.width = "11px";
		img.style.height = "11px";

		// td_middle_place
		var middleTdSelector_ = document.createElement("div");
		middleTdSelector_.className = 'middleTdSelector_';
		this.middleTdSelector = document.createElement("div");
		this.middleTdSelector.id = "middleTdSelector";
		this.middleTdSelector.className = 'middleTdSelector';

		this.currentMonth = document.createElement("span");
		this.currentMonth.id = "MonthSelector";
		this.middleTdSelector.appendChild(this.currentMonth);

		var imgSelector = document.createElement("img");
		imgSelector.id = "imgSelector";
		imgSelector.alt = '';
		imgSelector.style.border = '0';
		imgSelector.src = './calendar/skins/calendar/minicalendar_arrow_bottom.gif';
		imgSelector.style.padding = '0 0 0 4px';
		imgSelector.style.width = "11px";
		imgSelector.style.height = "7px";

		this.middleTdSelector.onmouseover = function() {
			obj.middleTdSelector.className = 'middleTdSelector_over';
		};
		this.middleTdSelector.onmouseout = function() {
			if (obj.monthsList.hidden) {
				obj.middleTdSelector.className = 'middleTdSelector';
			}
		};
		this.middleTdSelector.appendChild(imgSelector);
		middleTdSelector_.appendChild(this.middleTdSelector);
		m_td_22.appendChild(middleTdSelector_);

		this.monthsList = document.createElement("div");
		this.monthsList.id = "monthsList";
		this.monthsList.className = "event edit_gray monthsList";
		this.monthsList.hidden = true;
		this.middleTdSelector.onclick = function() {
			if(obj.monthsList.hidden) {
				obj.monthsList.style.display = 'block';
			} else {
				obj.monthsList.style.display = 'none';
			};
			obj.monthsList.hidden = !obj.monthsList.hidden;
		};

		for (var i=-6; i<7; i++) {
			var evt_middle = document.createElement("div");
			evt_middle.className = 'event_middle';
			var cal_txt = document.createElement("div");
			cal_txt.className = 'calendar_text';
			var txt = document.createElement("span");
			txt.className = 'text';

			var a = document.createElement("a");
			a.href = 'javascript:void(0);';
			a.id = "dd_month_"+i;

			txt.appendChild(a);
			cal_txt.appendChild(txt);
			evt_middle.appendChild(cal_txt);
			this.monthsList.appendChild(evt_middle);
		};
		var tempDiv = document.createElement("div");
		tempDiv.className = 'c';
		tempDiv.height = "1px !important";
		this.monthsList.appendChild(tempDiv);
		tempDiv = document.createElement("div");
		tempDiv.className = 'a';
		this.monthsList.appendChild(tempDiv);

		m_td_22.appendChild(this.monthsList);


//td_middle_place_end
		this.nextMonthSwitcher = document.createElement("a");
		this.nextMonthSwitcher.href = 'javascript:void(0);';
		img = CreateChild(this.nextMonthSwitcher, 'img');
		img.alt = Lang.AltNextMonth;
		img.title = Lang.AltNextMonth;
		img.style.border = '0';
		img.src = './calendar/skins/calendar/minicalendar_arrow_right_activ.gif';
		img.style.width = "11px";
		img.style.height = "11px";

		m_td_23.appendChild(this.nextMonthSwitcher);

		var Table = CreateChild(this.HtmlContainer, 'table');
		Table.cellPadding = '0';
		Table.cellSpacing = '0';
		Table.valign = 'middle';
		Table.className = 'calendar_block';

		var TR = Table.insertRow(0);
		for(var wd = 0; wd < 7; wd++)
		{
			var td = TR.insertCell(wd);
			var title = document.createTextNode(weekDaysNamesCalendar[wd]);
			td.appendChild(title);
			td.className = 'title';
		};

		for(var w = 0; w < this.weeksnum; w++){
			TR = Table.insertRow(w+1);
			this.calendarRows[w] = new Array();
			for(var k = 0; k<7; k++){
				var td = TR.insertCell(-1);
				td.valign = 'middle';
				var a = CreateChild(td, 'a');
				a.href = 'javascript:void(1);';
				a.style.fontStyle = 'normal';
				this.calendarRows[w][k] = {td: td, a: a};
			}
		};
	},

	Show: function (obj)
	{
		this.HtmlContainer.className = 'box';
		if (obj) {
			var bounds = GetBounds(obj);
			with (this.HtmlContainer.style) {
				position = 'absolute';
				top = bounds.Top + bounds.Height + 'px';
				left = bounds.Left + 1 + 'px';
				zIndex = '21';
			}
		}
	},

	Hide: function ()
	{
		this.HtmlContainer.className = 'wm_hide';
	},

	RefreshCalendarSelector: function(day,month,year) //fill calendar with new data
	{
		var todayDate = new Date();
		var obj = this;

		// checking input data
		if (month == 0 || day == 0 || year == 0)
		{
			month = todayDate.getMonth()+1;
			day = todayDate.getDate();
			year = todayDate.getFullYear();
		};
		// For Previous Month
		var PM_prev_month = month -1;
		var PM_prev_year = year;
		if (PM_prev_month == 0)
		{
			PM_prev_month = 12;
			PM_prev_year = year -1;
		};
		// For Next Month
		var NM_next_month = Number(month) +1;
		var NM_next_year = year;
	    
		if (NM_next_month == 13)
		{
			NM_next_month = 1;
			NM_next_year = Number(year) + 1;
		};

		//Define drop down select
		this.prevMonthSwitcher.onclick = this.CreateChangeMonthFunc(this, PM_prev_month, PM_prev_year);
		this.nextMonthSwitcher.onclick = this.CreateChangeMonthFunc(this, NM_next_month, NM_next_year);

		this.currentMonth.innerHTML = this.m_names[month - 1] + '&nbsp;' + year + '&nbsp;';

		var k=0, m_num, cal_txt, txt;
		for (var i=-6; i<7; i++) {
			var a = $("dd_month_"+i);
			m_num = Number(month)-1 + i;
			if (m_num<0) {
				a.onclick = this.CreateChangeMonthFunc(this, (12 + m_num + 1), (year-1));
				a.innerHTML = this.m_names[12 + m_num] +  '&nbsp;' + (year-1);
			} else if (m_num>=0 && m_num<=11) {
				a.onclick = this.CreateChangeMonthFunc(this, (m_num+1), year);
				if ((m_num+1) == Number(month)) a.style.fontWeight = 'bold';
				a.innerHTML = this.m_names[m_num] +  '&nbsp;' + year;
			} else {
				a.onclick = this.CreateChangeMonthFunc(this, (k+1), (year+1));
				a.innerHTML = this.m_names[k] +  '&nbsp;' + (year+1);
				k++;
			}
		};

		month = month -1;
		this_date = new Date(monthLimits[year][month].bigStart);
		var todayYear = mydate.getFullYear();
		var todayMonth = mydate.getMonth();
		var monthStart = to8(monthLimits[todayYear][todayMonth].smallStart);
		var monthEnd = to8(monthLimits[todayYear][todayMonth].smallEnd);

		var tdClass = "", link_class = "";
		for (var w = 0; w<this.weeksnum; w++) {
			var tr = this.calendarRows[w];//[k] = {td: td, a: a};
			for (var d = 0; d < tr.length; d++) {
				var this_date_year = this_date.getFullYear();
				var this_date_month = this_date.getMonth();
				var this_date_date = this_date.getDate();
				var this_date_day = this_date.getDay();
				
				var td8 = to8(this_date);
				if (this_date_month == todayDate.getMonth() && this_date_year == todayDate.getFullYear() && this_date_date == todayDate.getDate()){
					tdClass = 'today';
				} else if (view == DAY && (td8 == showLimits.day)) {
					tdClass = 'select';
				} else if (view==WEEK && (td8 >= showLimits.weekFrom && td8 <= showLimits.weekTill)) {
					tdClass = 'select';
				} else if (view==MONTH && (td8 >= monthStart && td8 <= monthEnd)) {
					tdClass = 'select';
				} else if (setcache['showweekends'] == 1){
					tdClass = 'basic';
					for (var i=0; i<weekendDays.length; i++) {
						if (weekendDays[i] == this_date_day) {
							tdClass = 'weekend';
							break;
						}
					};
				} else {
					tdClass = 'basic';
				};
				tr[d].td.className = tdClass;

				tr[d].a.id = this_date_year + fnum((this_date_month+1),2) + fnum(this_date_date,2);
				link_class = 'CalLink';
				if (this_date_month != month) {
					link_class = 'CalLinkInactive';
					for (var i=0; i<weekendDays.length; i++) {
						if (weekendDays[i] == this_date_day && setcache['showweekends'] == 1) {
							link_class = 'CalLinkInactiveWeekend';
							break;
						}
					};
				};
				tr[d].a.className = link_class;
				tr[d].a.onclick = function() { switch2date(this.id); };
				var txt = document.createTextNode(this_date_date);
				if (tr[d].a.firstChild != undefined) {
					tr[d].a.replaceChild(txt, tr[d].a.firstChild);
				} else {
					tr[d].a.appendChild(txt);
				};
				this_date.setDate(this_date_date + 1);
			}
		};
		this.MarkEventedDays();
	},

	MarkEventedDays : function() {
		var event_id = "", checked = false;
		for (var w = 0; w<this.weeksnum; w++) {
			var tr = this.calendarRows[w];//[k] = {td: td, a: a};
			for (var d = 0; d < tr.length; d++) {
				event_id = tr[d].a.id;
				checked = (all_events_dates[event_id] != undefined);
				tr[d].a.style.fontWeight = checked ? "bold" : "normal";
			}
		};
	},

	CreateChangeMonthFunc : function(obj, PM_prev_month, PM_prev_year) {
		return function() {
			cacheLoad(new Date(PM_prev_year, (PM_prev_month-1), 1));
			obj.RefreshCalendarSelector(1, PM_prev_month, PM_prev_year);
		}
	}
};//CCalendarTable.prototype


function CGrid(current_date_obj) {
	this.day_header				= $('day_header');
	this.week_headers_container	= $("day_headers_week");
	this.month_headers_container = $('day_headers_month');
	this.week_allday_grid		= $('grid_1w');
	this.week_common_grid		= $('grid_2w');
	this.day_common_grid		= $('grid_2d');
	this.month_cell_container	= $('month_cell_container');
	this.day_browse_title		= $("time_title_1");
	this.week_browse_title		= $("time_title_2");
	this.month_browse_title		= $("time_title_3");
	this.current_allday			= $('current_day_1');
	this.current_common			= $('current_day_2');
	this.week_area				= $('area_2_week');
	this.day_area				= $('area_2_day');

	this.initialize(current_date_obj);
}

CGrid.prototype = {
	initialize: function(current_date_obj) {
		//InitScroll();
		this.week_area.onmousewheel	= this.WeeklyScrollHandler;
		this.week_area.onscroll		= this.WeeklyScrollHandler;
		window.onscroll				= this.WindowScrollHandler;
		window.onmousewheel			= this.WindowScrollHandler;
		this.day_area.onscroll		= this.DailyScrollHandler;
		this.day_area.onmousewheel	= this.DailyScrollHandler;

		this.CreateMonthHeaders();
		this.createDayWeekGrid();
		this.FillGrid(current_date_obj);
	},

	WeeklyScrollHandler: function(e) {
		var e = e || window.event;
		if (OperaDetect()) {
			var ev = (e.wheelDelta ) ? e.wheelDelta  : 0;
			iScrollTop = this.scrollTop + ev ;

			/* Mousewheel UP */
			if (this.scrollTop < 120) {
				iScrollTop = 0;
			};
			/* Mousewheel DOWN*/
			if (ev > 0 && this.scrollTop == '0') {
				iScrollTop = ev;
			};
			var version_brouse = window.navigator.appVersion;
			if (version_brouse.substr(0, version_brouse.lastIndexOf(" (")) == '9.00') {
				this.scrollTop = iScrollTop;
			}
		} else {
			iScrollTop = this.scrollTop;
		};
		ShowScrollArrows();
	},

	WindowScrollHandler : function(e) {
		var e = e || window.event;
		if (OperaDetect()) {
			windowScrollTop = window.pageYOffset;
		} else {
			windowScrollTop = window.scrollY;
		};
		ShowScrollArrows();
	},

	DailyScrollHandler: function(e) {
		var e = e || window.event;
		if (OperaDetect()) {
			var ev = (e.wheelDelta ) ? e.wheelDelta  : 0;
			iScrollTop = this.scrollTop + ev ;
			if (this.scrollTop < 120) {
				iScrollTop = 0;
			};
			/* Mousewheel DOWN*/
			if (ev > 0 && this.scrollTop == '0') {
				iScrollTop = ev;
			};
			var version_brouse = window.navigator.appVersion;
			if (version_brouse.substr(0, version_brouse.lastIndexOf(" (")) == '9.00') {
				this.scrollTop = iScrollTop;
			}
		} else {
			iScrollTop = this.scrollTop;
		};
		ShowScrollArrows();
	},

	FillGrid : function (dateObj) {
		this.CreateDayHeader(dateObj);
		this.CreateWeekHeaders(dateObj);
		this.CreateMonthGrid(dateObj);
		this.CreateMonthBrowseTitle(dateObj);
	},

	CreateDayHeader : function (dateObj) {
		CleanNode(this.day_header);
		var day = dateObj.getDay();
		var year = dateObj.getFullYear();
		var month = dateObj.getMonth();
		var date = dateObj.getDate();

		var dayName = getDayName(day);  
		var text = document.createTextNode(dayName);
		this.day_header.appendChild(text); 

		CleanNode(this.day_browse_title);
		var monthName = getMonthName(month);
		var tit1 = date + " " + monthName + " " + year;
		var text1 = document.createTextNode(tit1);
		var strong_day = document.createElement('strong');
		strong_day.appendChild(text1);
		this.day_browse_title.appendChild(strong_day);
	},

	CreateWeekHeaders : function (dateObj) {
		CleanNode(this.week_browse_title);
		var date = dateObj.getDate();
		var day = dateObj.getDay();

		var d1 = new Date(dateObj);
		if (setcache['weekstartson'] == 0) {
			d1.setDate(date - day); 
		} else {//setcache['weekstartson'] == 1
			var day = (day==0)?7:day; 
			d1.setDate(date - day + 1); 
		};

		var d2 = new Date(d1);
		d2.setDate(d1.getDate() + 6); 
		if (d1.getMonth() == d2.getMonth() && d1.getYear() == d2.getYear()){
			var w = getMonthName(d2.getMonth()); 
			var tit1 = d1.getDate() + " - " + d2.getDate() + " " +w + " " + d1.getFullYear();
		} else {
			var t = getMonthName(d1.getMonth()); 
			var q = getMonthName(d2.getMonth()); 
			var tit1 = d1.getDate() + " " + t + " " + d1.getFullYear() + " - " + d2.getDate() + " " + q + " " + d2.getFullYear();   
		};
		var text1 = document.createTextNode(tit1);
		var strong_week = document.createElement('strong');
		strong_week.appendChild(text1);
		this.week_browse_title.appendChild(strong_week);

//******
		var this_date = new Date();
		var this_date_8format = to8(this_date);
		var s = new Date(dateObj);
		var left = 0;
		if (setcache['weekstartson'] == 0) {
			var daysbefore = s.getDay();
			s.setDate(s.getDate() - daysbefore);
		} else {//setcache['weekstartson'] == 1
			var daysbefore = (s.getDay()==0)?7:s.getDay();
			s.setDate(s.getDate() - daysbefore + 1);
		};

		CleanNode(this.week_headers_container);

		var div1 = document.createElement('div');
		div1.className = "day_headers_outer";
		div1.style.width = "40px";
		div1.style.left = "-40px";
		var div12 = document.createElement('div');
		div12.className = "day_headers_inner";
		div12.style.height = "24px";
		div1.appendChild(div12);
		this.week_headers_container.appendChild(div1);

		var div2 = document.createElement('div');
		div2.className = "day_headers_outer";
		div2.style.width = "16px";
		div2.style.left = "100%";
		var div22 = document.createElement('div');
		div22.className = "day_headers_inner";
		div12.style.height = "24px";
		div2.appendChild(div22);
		this.week_headers_container.appendChild(div2);

		for (var i=0; i<7; i++){ 
			var dw = new Date(s);
			dw.setDate(s.getDate() + i);
			weekdayz[i] = to8(dw);
			var dw_day = dw.getDay();
			var dw_date = dw.getDate();
			var dw_month = dw.getMonth();
			var div4 = document.createElement('div');
			div4.className = "day_headers_outer";
			div4.style.left = left+"%";
			var div5 = document.createElement('div');
			div5.className = ((this_date_8format == weekdayz[i])?"day_headers_inner_today":"day_headers_inner");
			var span_week = document.createElement('span');

			if (dw.getMonth()<9){
				var m = "0"+ (dw_month + 1);
			} else {
				var m = dw_month + 1;
			};

			if((dw_day == 6 || dw_day == 0) && setcache['showweekends'] == 1)
			{
				if ($('weekend_2_6') == null || $('weekend_2_0') == null) {
					var weekend_1 = document.createElement('div');
					weekend_1.id = 'weekend_1_'+dw_day;
					weekend_1.className = 'weekend_day';
					this.week_allday_grid.appendChild(weekend_1);
					var weekend_2 = document.createElement('div');
					weekend_2.className = 'weekend_day';
					weekend_2.id = 'weekend_2_'+dw_day;
					this.week_common_grid.appendChild(weekend_2);
				} else {
					var weekend_1 = $('weekend_1_'+dw_day);
					var weekend_2 = $('weekend_2_'+dw_day);
				};
				weekend_1.style.left = left+"%"; 
				weekend_2.style.left = left+"%";
			};

			if(setcache['dateformat'] == 1) {
				var viewDate = m + "/" + dw_date;
			} else if (setcache['dateformat'] == 2) {
				var viewDate = dw_date + "/" +m;
			} else if (setcache['dateformat'] == 3) {
				var viewDate = m + "-" + dw_date;
			} else if (setcache['dateformat'] == 4) {
				var viewDate = getMonthNameByNumber(m) + " " + dw_date;
			}
			else //setcache['dateformat'] == 5 
			{
				var viewDate = dw_date + " " + getMonthNameByNumber(m);
			};

			var tit4 = getDayShortName(dw_day) + " " + viewDate;
			var text4 = document.createTextNode(tit4);
			span_week.appendChild(text4);
			div5.appendChild(span_week);
			div4.appendChild(div5);
			this.week_headers_container.appendChild(div4);
			left += 14.2857;
		}
		this.mark_curdate_week();
	},
	/*
* colorize the current day in week mode
*/
	mark_curdate_week : function() {
		var weekday_mydate = mydate.getDay();
		var todaydate = new Date();
		var weekday_todaydate = todaydate.getDay();

		var mydate1 = new Date(mydate.getTime() + (weekday_todaydate-weekday_mydate)*86400000);
		var weekday_mydate1 = mydate1.getDay();

		if (setcache['weekstartson'] == 0) {
			var wd = weekday_mydate1;
		} else { //setcache['weekstartson'] == 1
			var wd = (weekday_mydate1==0)?7:weekday_mydate1-1;
		};
		this.current_allday.style.left=((100/7)*wd)+"%";
		this.current_common.style.left=((100/7)*wd)+"%";

		if (to8(mydate1) == to8(todaydate)) {
			this.current_allday.className = "current_day";
			this.current_common.className = "current_day";
		} else {
			this.current_allday.className = "current_day_nocolor";
			this.current_common.className = "current_day_nocolor";
		}
	},

	CreateMonthBrowseTitle : function(dateObj)
	{
		var year = dateObj.getFullYear();
		var month = dateObj.getMonth();
		var monthName = getMonthName(month);
		CleanNode(this.month_browse_title);
		var tit1 = monthName + " " + year; 
		var text1 = document.createTextNode(tit1);
		var strong_month = document.createElement('strong');
		strong_month.appendChild(text1);
		this.month_browse_title.appendChild(strong_month);
	},


	CreateMonthHeaders : function() {
		var span_arr = this.month_headers_container.getElementsByTagName('span');
		for (var i=0; i<weekDaysNamesFull.length; i++) {
			var txt = document.createTextNode(weekDaysNamesFull[i]);
			span_arr[i].appendChild(txt);
		}
	},

	CreateMonthGrid : function(dateObj) {
		var todayDateFull = new Date();
		var todayMonth = todayDateFull.getMonth();
		var todayYear = todayDateFull.getFullYear();
		var todayDate = todayDateFull.getDate();

		CleanNode(this.month_cell_container);
		var dates = getFirstLastDayInMonthView(new Date(dateObj.getFullYear(),dateObj.getMonth(),1));
		var d = dates[0];
		var ld = dates[1];
		var pos_left = 0;
		var top = 0;
  
		while(d<=ld)
		{
			var ds = d.getDay();
			var ys = d.getFullYear();
			var ms = d.getMonth();
			var dds = d.getDate();
			var text1 = document.createTextNode(d.getDate());
			var div1 = document.createElement('div');
			div1.className = (ms == dateObj.getMonth() && ys == dateObj.getFullYear())?"header":"header header_inactiv";

			div1.appendChild(text1);
			var div2 = document.createElement('div');
			var cel = 'cel_'+ to8(d);
			div2.setAttribute('id',cel);
			div2.style.top = top+'%';
			if (setcache['weekstartson'] == 0) {
				pos_left = (ds == 0)? 0:(ds*14.2857);
				if (ds==6) top=top+16.6667;
			};
			div2.style.left = pos_left + "%";

			if (setcache['weekstartson'] == 1) {
				pos_left = (ds == 0)? 0:(ds*14.2857);
				if (ds==0) top=top+16.6667;
			};

			if ((ds == 0 || ds == 6) && (setcache['showweekends'] == 1)) {
				if (todayDate == dds && todayMonth == ms && todayYear == ys) {
					div2.className = "cell_weekend today";
				} else {
					div2.className = "cell_weekend";
				}
			} else {
				if (todayDate == dds && todayMonth == ms && todayYear == ys) {
					div2.className = "cell today";
				} else {
					div2.className = "cell";
				}
			};

			div2.appendChild(div1);
			this.month_cell_container.appendChild(div2); // grid_2 -> grid_2_month
			d.setDate(d.getDate() + 1);
		}
	},

	createDayWeekGrid : function()
	{
		for(var n=1; n<=2; n++){
			var top = 0;
			var q = 0;
			if (n == 1) {
				var parent = this.day_common_grid;
			} else {
				var parent = this.week_common_grid;
			};
			
			for (var j=0; j<=23; j++){
				var div1 = document.createElement('div');
				top = j*9;
				if (setcache['showworkday'] == 1 && (setcache['workdaystarts'] > q || q >= setcache['workdayends'])) {
					var div11 = document.createElement('div');
					div11.className = "notworkday";
					div11.style.top = q*9 +"ex";
					parent.appendChild(div11);
				};
				var div2 = document.createElement('div');
				if (setcache['timeformat'] == 1) {
					div2.innerHTML = ((q <= 12)? ((q == 0)? '12' : q) : q - 12)+(q<12 ? " AM" : " PM" );
				} else {//setcache['timeformat'] == 2
					div2.innerHTML = ((q<10)? '0'+q : q) + ":00";
				};
				if (setcache['showworkday'] == 1 && (setcache['workdaystarts'] > q || q >= setcache['workdayends'])) {
					div1.className = "rhead_notworkday";
				} else {
					div1.className = "rhead";
				};
				if (q == 0) {
					div1.style.borderTop = '1px solid #fff';
				};
				div1.style.top = top +"ex";
				div1.appendChild(div2);
				$("rheaders_"+n).appendChild(div1);
				q++;
			}
		}
	}
}

function CEventForm() {

	this.event_window			= $('edit_window');
	this.event_form				= $('edit_form');
	this.evform_id				= $('evform_id');
	this.calendar_id			= $('id_calendar');
	this.eventcontainer			= $('eventcontainer');
	this.window_header			= $('ef_fulldate');
	this.EventSubject			= $('EventSubject');
	this.edit_select_box		= $('edit_select_box');
	this.color_calendar_now		= $('color_calendar_now');
	this.calen_sal				= $('calen_sal');

	this.EventTimeFrom			= $('EventTimeFrom');
	this.EventDateFrom			= $('EventDateFrom');
	this.EventTimeTill			= $('EventTimeTill');
	this.EventDateTill			= $('EventDateTill');
	this.EventDescription		= $('EventDescription');
	this.cancelbut			= $('cancelbut');

	this.initialize();
}

CEventForm.prototype = {
	initialize: function() {
		var obj = this;
		this.cancelbut.onclick = function() {
			obj.CancelEventForm();
		};
	},

	CancelEventForm : function() {
		this.event_window.style.display='none'; 
		var divCheckPanel = $("divCheckPanel");
		if (divCheckPanel != undefined) divCheckPanel.style.display = "none";
		this.ClearEventForm();
	},
	ClearEventForm : function() {
		this.event_form.style.display = 'none';
	},

	ShowEventForm : function (event_data) {
		var calendar, color, color_number, calendar_name, calendar_id;
		var obj = this;
		var eventFormIdValue = this.evform_id.value;
		var event_id = split_event_id(event_data.event_id);

		if (typeof(mycache_c.calendars)!="undefined"){
			for (i in mycache_c.calendars)
			{
				if(typeof(mycache_c.calendars[i])!="undefined"){
					if (mycache_c.calendars[i]['calendar_id'] == event_data["calendar_id"]) {
						calendar = mycache_c.calendars[i]; 
					}
				}
			}
		};


		this.cancelbut.style.display = "inline";
		this.window_header.innerHTML = Lang.EventHeaderView;
		this.calen_sal.parentNode.style.cursor = "default";

		this.EventSubject.value		= event_data.subject;
		this.EventTimeFrom.value	= event_data.timeFrom;
		this.EventTimeTill.value	= event_data.timeTill;
		this.EventDateFrom.value	= ConvertFromDateToStr(event_data.fullFromDate);
		this.EventDateTill.value	= ConvertFromDateToStr(event_data.fullTillDate);
		this.EventDescription.value	= event_data.description;
		this.evform_id.value		= event_data.event_id;

		color_number	= calendar['calendar_color'];
		color			= getNumberOfColor(calendar['calendar_color']);
		calendar_name	= HtmlEncode(calendar['calendar_name']);
		calendar_id		= calendar['calendar_id'];

		this.eventcontainer.className = 'eventcontainer_'+color_number;
		this.color_calendar_now.style.backgroundColor = color;
		this.calendar_id.value = calendar_id;
		CleanNode(this.calen_sal);
		var calendarNameTxt = document.createTextNode(calendar_name);
		this.calen_sal.appendChild(calendarNameTxt);
		this.calen_sal.parentNode.title = calendar_name;

		setMaskHeight();

		this.event_form.style.display = 'block';
		this.event_window.style.display='block';
		if(SafariDetect().isSafari) { 
			this.event_form.style.top = window.innerHeight / 2 + 'px';
		};
	}
}
