//почтовый гаджет, структуру аккаунтов, папок и писем держим во внутренней структуре
function __Calendar(id)
{	
	this.lang = Locale.Gadgets.Calendar;
	this.Core = new __StdModuleCore(this, id, 'kalrndar', this.lang.title, this.lang.desc);

	this.controlls = {};
	
	this.rememberDays = 5;

	var nowDate = new Date();	
	
	this.records = {};
	
	this.currentDay = this.nowDay = this.formatNum(nowDate.getDate());	
	this.currentMonth = this.nowMonth = this.formatNum(nowDate.getMonth()+1);	
	this.currentYear = this.nowYear = nowDate.getFullYear();
	this.nowWeekDay = nowDate.getDay();
	
	this.currentTimestamp = this.getCurrentTimestamp();
	
	this.reDrawGadgetWorkSpace();
	
	this.redrawNewRecordForm();	
	
	//this.prepareCalendarArray();	
	this.redrawSelector(this.selectorDiv);
	//this.redrawCalendar(this.calendarDiv);
	//this.initCalendarItems();
	
		
	Update.request('Calendar', 'module', 'get_records', { id: this.id });	
}

//-------------------------------------------------------------------------------
__Calendar.prototype.getCurrentTimestamp = function() {	
	var currentDate = new Date(this.currentYear, this.currentMonth-1, this.currentDay, 23, 59);
	return currentDate.getTime();	
}

//-------------------------------------------------------------------------------
//проверяет есть ли каки-либо записи за указанную дату
__Calendar.prototype.checkDateRecords = function(year, month, day) {	
	var date = new Date(year, month-1, day, 23, 59);
	var timestamp = date.getTime();
	
	if(this.records[timestamp] && sizeof(this.records[timestamp]) > 0) return true;
	
	return false;
	
}

//-------------------------------------------------------------------------------
__Calendar.prototype.formatNum = function(Num) {	
	if(Num < 10) Num= '0'+Num;
	return Num;	
}

//-------------------------------------------------------------------------------
//составляет массив 7х4 (7х5) (дни недели х недель в месяце)
__Calendar.prototype.prepareCalendarArray = function() {
	
	var month = this.currentMonth;
	var year = this.currentYear;
	
	var mdays = [];
	for(var i in gVars.Months.MaxDays) mdays.push(gVars.Months.MaxDays[i]);
	if (!((year%4==0) && (year%100!=0) || (year%400==0))) 	mdays[1] = 28;

	var maxDays = mdays[month-1];

	//12 часов первого числа месяца
	var firstDay = new Date(year, month-1, 1, 12, 0);
	
	var week_day = firstDay.getDay();
		
	if(!week_day) week_day = 7;
		
	this.clndArray = {};
	this.clndArray[0] = {};
		
	var currentRow = this.clndArray[0];
	
	var dayNum = 1;
		
	//проинициализируем первый ряд
	for(var i =1; i< week_day; i++) currentRow[i] = 0;
	for(var i =week_day; i< 8 ; i++) {		
		currentRow[i] = {dayNum: dayNum,
									f_dayNum: this.formatNum(dayNum),
									isRecords: this.checkDateRecords(year, month, dayNum)};
		dayNum++;
	} 
	
	for(var row_num =1; row_num <=5; row_num++) {
		 
		this.clndArray[row_num] = {};		
		currentRow = this.clndArray[row_num];
		
		for(var i =1; i< 8 ; i++) {
			if(dayNum > maxDays) break;						
			currentRow[i] = {dayNum: dayNum,
										f_dayNum: this.formatNum(dayNum),
										isRecords: this.checkDateRecords(year, month, dayNum)};
			dayNum++;
		}
		
		if(dayNum > maxDays) break;		
		
	} 
	
}


//-------------------------------------------------------------------------------
//подготавливает поля (div) в рабочей области гаджета для календаря,
//формы добавления записи и самих записей
__Calendar.prototype.reDrawGadgetWorkSpace = function() {
	var self = this;
	
	var str = '<div id='+this.id+'selector ></div>'+
					'<div id='+this.id+'calendar ></div>'+
					'<div style="margin-top: 4px;"><span id=arrowContext'+this.id+
					'><img src="/img/icons/blt1.gif" width=8 height=11 align=absmiddle/></span> '+
					'<a id='+this.id+'show href="javascript: void(0);" style="color: black; font-weight: bold; text-decoration: none;">'+ this.lang['ToShowRecords'] +'</a>'+
					'</div>'+
					'<div class=clnd_records style="display: none;" id='+this.id+'records ></div>';
					
	this.Content.innerHTML = str;
	
	str = '<div id='+this.id+'newrecord ></div>';
	
	this.Options.innerHTML = str;
	
	this.selectorDiv = $(this.id+'selector');
	this.calendarDiv = $(this.id+'calendar');
	this.newrecordDiv = $(this.id+'newrecord');
	this.recordsDiv = $(this.id+'records');
	
	this.arrowContext = $('arrowContext'+this.id);
		
	
	this.hrefShow = ge(this.id+'show');
	
	this.hrefShow.onclick = this.showHideRecords;
	this.hrefShow.xdata = {gadgetObj: self};
	
}

//-------------------------------------------------------------------------------
//рисует  селектор месяцев и лет
__Calendar.prototype.showHideRecords = function() {
	var gadgetObj = this.xdata.gadgetObj;
	
	if(gadgetObj.recordsDiv.style.display == 'none'){
		gadgetObj.recordsDiv.style.display = 'block';
		gadgetObj.hrefShow.innerHTML = gadgetObj.lang['ToHideRecords'];
		
		gadgetObj.arrowContext.innerHTML = '<img src="/img/i/str_down.gif" width=7 height=4 vspace=2/>';
		
	}else{
		gadgetObj.recordsDiv.style.display = 'none';
		gadgetObj.hrefShow.innerHTML = gadgetObj.lang['ToShowRecords'];
		gadgetObj.arrowContext.innerHTML = '<img src="/img/icons/blt1.gif" width=8 height=11 align=absmiddle/>';
	}
	
}

//-------------------------------------------------------------------------------
//рисует  селектор месяцев и лет
__Calendar.prototype.redrawSelector = function(context) {
	var self = this;
	
	var tmp_str = '<form id=selector'+this.id+'><table><tr><td style="vertical-align: middle; padding-right: 3px;"><a href="javascript: void(0)" title="Вернуться на сегодняшний день" id=reset'+this.id+
		'><img src="/img/ticons/strelka.gif" height=16 width=16 border=0 align=absmiddle hspase=2></a></td><td><select style="width: 95px;" name=month'+this.id+'>';
	
	for(var i in Locale.Months) {
		tmp_str+= '<option value='+i+'>'+Locale.Months[i]+'</option>';
	}
	
	tmp_str+= '</select></td><td width=2></td><td><select style="width: 72px;" name=year'+this.id+'>';
	for(var year=2000; year <= 2020; year++) {
		tmp_str+= '<option value='+year+'>'+year+'</option>';
	}
		
	tmp_str+= '</select></td></tr></table></form>';
	
	context.innerHTML = tmp_str;
	
	this.selectorForm = ge('selector'+this.id);	
	this.selectorForm.onsubmit = function(){return false;}
	this.selectorForm.xdata = {gadgetObj: self};	
	
	var monthObj = this.selectorForm['month'+this.id];
	monthObj.onchange = this.onChangeMonth;
	monthObj.selectedIndex = this.currentMonth-1;
	monthObj.xdata = {gadgetObj: self};
	
	var yearObj = this.selectorForm['year'+this.id];
	yearObj.onchange = this.onChangeYear;
	yearObj.selectedIndex = this.currentYear-2000;
	yearObj.xdata = {gadgetObj: self};	
	
	var reset_href = $('reset'+this.id);
	reset_href.onclick = this.ON_resetDate;
	reset_href.xdata = {gadgetObj: self};	
}

//-------------------------------------------------------------------------------
__Calendar.prototype.ON_resetDate = function() {
	
	var gadgetObj = this.xdata.gadgetObj;
	
	gadgetObj.currentDay = gadgetObj.nowDay;	
	gadgetObj.currentMonth = gadgetObj.nowMonth;	
	gadgetObj.currentYear = gadgetObj.nowYear;
	
	//gadgetObj.redrawSelector(gadgetObj.selectorDiv);
	
	var monthObj = gadgetObj.selectorForm['month'+gadgetObj.id];
	monthObj.selectedIndex = gadgetObj.currentMonth-1;
	var yearObj = gadgetObj.selectorForm['year'+gadgetObj.id];
	yearObj.selectedIndex = gadgetObj.currentYear-2000;
	
	gadgetObj.redrawCalendar(gadgetObj.calendarDiv);
	gadgetObj.initCalendarItems();	
	
	gadgetObj.currentTimestamp = gadgetObj.getCurrentTimestamp();		
	gadgetObj.hiLightSpecDays();	
	gadgetObj.redrawCurrentDateRecords();
	
	gadgetObj.checkNewRcordFormState();
	
}


//-------------------------------------------------------------------------------
__Calendar.prototype.onChangeMonth = function() {
	var gadgetObj = this.xdata.gadgetObj;
	
	gadgetObj.currentDay = '01';
	gadgetObj.currentMonth = gadgetObj.formatNum(this.options[this.selectedIndex].value);
		
	if(gadgetObj.currentMonth == gadgetObj.nowMonth &&
		gadgetObj.currentYear == gadgetObj.nowYear) {
			gadgetObj.currentDay = gadgetObj.nowDay
	}
	
	
	gadgetObj.redrawCalendar(gadgetObj.calendarDiv);
	gadgetObj.initCalendarItems();	
	
	gadgetObj.currentTimestamp = gadgetObj.getCurrentTimestamp();		
	gadgetObj.hiLightSpecDays();	
	gadgetObj.redrawCurrentDateRecords();
	
	gadgetObj.checkNewRcordFormState();
	
}

//-------------------------------------------------------------------------------
__Calendar.prototype.onChangeYear = function() {
	var gadgetObj = this.xdata.gadgetObj;
	
	gadgetObj.currentDay = '01';
	gadgetObj.currentYear = this.options[this.selectedIndex].value;
	
	if(gadgetObj.currentMonth == gadgetObj.nowMonth &&
		gadgetObj.currentYear == gadgetObj.nowYear) {
			gadgetObj.currentDay = gadgetObj.nowDay
	}	
	
	gadgetObj.redrawCalendar(gadgetObj.calendarDiv);
	gadgetObj.initCalendarItems();	
	
	gadgetObj.currentTimestamp = gadgetObj.getCurrentTimestamp();		
	gadgetObj.hiLightSpecDays();	
	gadgetObj.redrawCurrentDateRecords();
	
	gadgetObj.checkNewRcordFormState();
	
}



//-------------------------------------------------------------------------------
//рисует  форму для добавления новой записи
__Calendar.prototype.redrawNewRecordForm = function() {
	var self = this;
	
	var remeberDays = [3, 5, 10, 15, 30];
	
	var tmp_str = '<form id=newrecordform'+this.id+
		'><input type=text name=record_text style="width: 90%"><br><input class=std_button type=submit name=addButton value="'+ this.lang['ToAddRecord'] +'"><br>\
		'+ this.lang['ToRememberAboutTasks'][0] +' <select name=daysselect style="display: inline; width: 60px;">';
		
	//for(var i in remeberDays) {
	for(var i = 0; i < remeberDays.length; i++) {		
		var day = remeberDays[i];
		if(this.rememberDays == day) {
			tmp_str+= '<option selected value='+day+'>'+day+'</option>';
		}else{
			tmp_str+= '<option value='+day+'>'+day+'</option>';
		}
	}
		
	tmp_str+='</select> '+ this.lang['ToRememberAboutTasks'][1] +'</form>';
			
	this.newrecordDiv.innerHTML = tmp_str;
	
	this.newRecordForm = ge('newrecordform'+this.id);
	this.newRecordForm.onsubmit = this.ON_newRecord;	
	this.newRecordForm.xdata = {gadgetObj: self};
	
	var daysSelect = this.newRecordForm.daysselect;
	daysSelect.onchange= this.ON_ChangeDays;
	daysSelect.xdata = {gadgetObj: self};
}


//-------------------------------------------------------------------------------
//сверяет выбранную дату с сегодняшней, если дата в прошлом - дисейблит форму добавления записи
__Calendar.prototype.checkNewRcordFormState = function() {
	
	
	if(this.currentYear < this.nowYear || 
		this.currentYear == this.nowYear && this.currentMonth < this.nowMonth || 
		this.currentYear == this.nowYear && this.currentMonth == this.nowMonth &&
		this.currentDay < this.nowDay	) {
			this.newRecordForm.record_text.disabled = true;
			this.newRecordForm.addButton.disabled = true;						
		}else{
			this.newRecordForm.record_text.disabled = false;
			this.newRecordForm.addButton.disabled = false;			
		}
		
}

//-------------------------------------------------------------------------------
//реакция на изменение селекта "за сколько дней напоминать"
__Calendar.prototype.ON_ChangeDays = function() {
	var gadgetObj = this.xdata.gadgetObj;
	
	var daysselect = gadgetObj.newRecordForm.daysselect;
	
	gadgetObj.rememberDays = daysselect.options[daysselect.selectedIndex].value;
	
	gadgetObj.redrawCurrentDateRecords();
	
	var options = {rememberDays: gadgetObj.rememberDays};
	
	Update.request('Calendar', 'module', 'set_remember_days', { id: gadgetObj.id }, options);
	
}


//-------------------------------------------------------------------------------
//реакция на добавление новой записи
__Calendar.prototype.ON_newRecord = function() {
	var gadgetObj = this.xdata.gadgetObj;
		
	
	if(!gadgetObj.newRecordForm.record_text.value) return false;
	
	gadgetObj.currentTimestamp = gadgetObj.getCurrentTimestamp();	
	var currentTimestamp = gadgetObj.currentTimestamp;
		
	if(!gadgetObj.records[currentTimestamp]) {
		gadgetObj.records[currentTimestamp] = {};
	}
	
	if(!sizeof(gadgetObj.records[currentTimestamp])) gadgetObj.records[currentTimestamp] = {};
	
	var dayRecords = gadgetObj.records[currentTimestamp];
	
	var tmpRecord = {text: gadgetObj.newRecordForm.record_text.value };
	
	gadgetObj.newRecordForm.record_text.value = '';	
	
	
	//найдем последний используемый индекс в текущей записи дня
	var recordID = 0;
	
	for(recordID in dayRecords);
	recordID++;	
			
	dayRecords[recordID] = tmpRecord;	
	
	var hrefObj =
		ge('calc'+gadgetObj.id+gadgetObj.currentYear+gadgetObj.currentMonth+gadgetObj.currentDay);		
	hrefObj.style.fontWeight = 'bold';
		
	gadgetObj.redrawCurrentDateRecords();
	
	var options = {timestamp: currentTimestamp/1000, recordID: recordID, text: tmpRecord.text};
	
	Update.request('Calendar', 'module', 'set_record', { id: gadgetObj.id }, options, true);
	
	return false;
}

//-------------------------------------------------------------------------------
//рисует каледнарь по построенному массиву clndArray в указанный контекст (div)
__Calendar.prototype.redrawCalendar = function(context) {
	
	this.prepareCalendarArray();
	
	var str = '<table align=center style="margin-top: 6px;"><tr><td><div class=clnd_border1><div class=clnd_border2><table border=0 class=clnd ><tr>';
	for(var day_num=0;day_num < 7; day_num++) {
		str+= '<td class=clhd><b>'+Locale.WeekDaysLetters[day_num]+'</b></td>';
	}
		
	str+= '</tr></table><table border=0 class=clnd >';	
	
	for(var row_num in this.clndArray) {
	//for(var row_num=0; row_num < this.clndArray.length; row_num++) {
		str+= '<tr>';
		var row = this.clndArray[row_num];
		for(var day_num in row) {
		//for(var day_num=0; day_num < row.length; day_num++) {
			var dayInfo = row[day_num];						
			if(dayInfo) {
				var tmp_style = '';
				if(dayInfo.isRecords) tmp_style = ' style="font-weight: bold;" ';
					
				 str+= '<td '+tmp_style+' class=cltd id=calc'+this.id+
				 	this.currentYear+this.currentMonth+dayInfo.f_dayNum+' >'+
				dayInfo.dayNum+'</td>';					
			}else{
				str+= '<td class=cltd>&nbsp;</td>';
			}
		}		
		str+= '</tr>';
	}
	
	str+= '</table></div></div></td></tr></table>';
	
	context.innerHTML = str;	
}

//-------------------------------------------------------------------------------
//назначает события ссылкам в календаре
__Calendar.prototype.initCalendarItems = function() {
	var self = this;
	for(var row_num in this.clndArray) {
	//for(var row_num=0; row_num < this.clndArray.length; row_num++) {			
		var row = this.clndArray[row_num];
		for(var day_num in row) {			
			var dayInfo = row[day_num];						
			if(dayInfo) {								
				var hrefObj = ge('calc'+this.id+this.currentYear+this.currentMonth+dayInfo.f_dayNum);
				if(hrefObj) {
					hrefObj.dayInfo = dayInfo;
					hrefObj.onclick = this.onDayClick;
					hrefObj.onmouseover = this.onDayOver;
					hrefObj.onmouseout = this.onDayOut;
					hrefObj.xdata = {gadgetObj: self, dayNum: dayInfo.f_dayNum};					
				}				
				
				
			}
		}
	}
	
	this.hiLightSpecDays();
}


//-------------------------------------------------------------------------------
//подсвечвает текущий и сегодняшний день
__Calendar.prototype.hiLightSpecDays = function() {
	
	for(var row_num in this.clndArray) {
	//for(var row_num=0; row_num < this.clndArray.length; row_num++) {
		var row = this.clndArray[row_num];
		for(var day_num in row) {			
			var dayInfo = row[day_num];						
			if(dayInfo) {
				var hrefObj = ge('calc'+this.id+this.currentYear+this.currentMonth+dayInfo.f_dayNum);
				hrefObj.className = hrefObj.oldClassName = 'cltd';				
				//hrefObj.style.background = 'white'
			}
		}		
	}
	
	var curr_date_str = 'calc'+this.id+this.currentYear+this.currentMonth+this.currentDay;
	var now_date_str = 'calc'+this.id+this.nowYear+this.nowMonth+this.nowDay;
	
	var nowDay = ge(now_date_str);	
	if(nowDay)  nowDay.className = nowDay.oldClassName = 'cltdnow';
		
	var currDay = ge(curr_date_str);	
	if(currDay) currDay.className = currDay.oldClassName = 'cltdcurr';
	
}

//-------------------------------------------------------------------------------
__Calendar.prototype.onDayOver = function() {	
	
	this.className = 'cltdover';
	
	var gadgetObj = this.xdata.gadgetObj;
	var dayNum = this.xdata.dayNum;
	
	var dateObj = {currentDay: dayNum,
							 currentMonth: gadgetObj.currentMonth,
							 currentYear: gadgetObj.currentYear};
	
	//gadgetObj.currentDay = dayNum;
	//gadgetObj.currentTimestamp = gadgetObj.getCurrentTimestamp();
	
	var tmpDate = new Date(dateObj.currentYear, dateObj.currentMonth-1, dateObj.currentDay, 23, 59);
	dateObj.currentTimestamp =  tmpDate.getTime();	
		
		
	gadgetObj.selectorForm.style.visibility = 'hidden';
		
	var str = gadgetObj.redrawDateRecordsForPopup(dateObj);
	
	if(!str) return false;
	
	Tooltip.Show(str, this);	
			
}

//-------------------------------------------------------------------------------
__Calendar.prototype.onDayOut = function() {
	var gadgetObj = this.xdata.gadgetObj;
		
	this.className = this.oldClassName;
	Tooltip.Hide();	
	gadgetObj.selectorForm.style.visibility = 'visible';
}

//-------------------------------------------------------------------------------
//реакция на клик на число в календаре
__Calendar.prototype.onDayClick = function() {
	var gadgetObj = this.xdata.gadgetObj;
	var dayNum = this.xdata.dayNum;
			
	gadgetObj.currentDay = dayNum;
	
	gadgetObj.currentTimestamp = gadgetObj.getCurrentTimestamp();	
	
	gadgetObj.hiLightSpecDays();
	
	gadgetObj.checkNewRcordFormState();
	
	gadgetObj.redrawCurrentDateRecords();
		
	if(sizeof(gadgetObj.searchedRecords)) {
		gadgetObj.recordsDiv.style.display = 'block';
		gadgetObj.hrefShow.innerHTML = gadgetObj.lang['ToHideRecords'];
		gadgetObj.arrowContext.innerHTML = '<img src="/img/i/str_down.gif" width=7 height=4 vspace=2/>';
	}	
	
}

//-------------------------------------------------------------------------------
//создает список всех задач до текущей даты
__Calendar.prototype.prepareRecordsList = function(dateObj) {
	
	//var current_date_str = ''+this.currentYear+this.currentMonth+this.currentDay;
	
	
	if(!dateObj) dateObj = this;
	
	this.searchedRecords = {};
	
	var interval = this.rememberDays*24*3600*1000;
	
	if(dateObj.currentYear == this.nowYear &&
		dateObj.currentMonth == this.nowMonth &&
		dateObj.currentDay == this.nowDay) {
						
			for(var timestamp in this.records) {
				
				if(!sizeof(this.records[timestamp])) continue;
						
				if((timestamp == dateObj.currentTimestamp ||
					timestamp > dateObj.currentTimestamp && 	timestamp - dateObj.currentTimestamp <= interval )) {
					this.searchedRecords[timestamp] = this.records[timestamp];
				}		
			}
			
			this.searchedRecords  = this.sortByKeys(this.searchedRecords);	
		
	}else{
		this.searchedRecords[dateObj.currentTimestamp] = this.records[dateObj.currentTimestamp];		
	}		
	
}

//-------------------------------------------------------------------------------
//сортирует массив (члены объекта) по индексу, второй аргумент - по возрастанию или по убыванию
__Calendar.prototype.sortByKeys = function(objArray, revers) {
	
	function sortAsNum(a, b) {
  		if (a < b) return -1;    	
    	if (a > b)return 1;
  		return 0;	// a равно b
	}
	function sortAsNumRevers(a, b) {
  		if (a > b) return -1;
    	if (a < b)return 1;
  		return 0;	// a равно b
	}
	
	var sorted_array = new Array();
	
	for(var key in objArray) sorted_array.push(key);	
	
	if(revers) {
		sorted_array.sort(sortAsNumRevers);
	}else{
		sorted_array.sort(sortAsNum);	
	}
		
	
	var result = {};	
	//for(var i in sorted_array)
	for(var i=0; i<  sorted_array.length; i++) result[sorted_array[i]] = objArray[sorted_array[i]];
	
	return result;
}

//-------------------------------------------------------------------------------
//выводит записи до текущей даты
__Calendar.prototype.redrawDateRecordsForPopup = function(dateObj) {
			
	this.prepareRecordsList(dateObj);	
	
	if(!sizeof(this.searchedRecords)) return false;
		
	var date = new Date();
	var tmp_str = '';
	
	for(var timestamp in this.searchedRecords) {
		var day_records = this.searchedRecords[timestamp];
		
		if(!sizeof(day_records)) continue;
								
		if(dateObj.currentYear == this.nowYear && dateObj.currentMonth == this.nowMonth &&
			dateObj.currentDay == this.nowDay){
			date.setTime(timestamp);
			tmp_str+= '<b>'+date.getDate()+' '+Locale.Months[String(date.getMonth()+1)]+'</b>';		
		}
		
		for(var recordID in day_records) {		
			var dayRecord = day_records[recordID];
			tmp_str+= '<div style="padding: 0px 0px 3px 0px"><img src="/img/ticons/abstract_1.gif" border=0 width=10 height=10 align=absmiddle> '+dayRecord.text+'</div>';			
		}
	}

	return tmp_str;
}

//-------------------------------------------------------------------------------
//выводит записи до текущей даты
__Calendar.prototype.redrawCurrentDateRecords = function() {
	var self = this;
		
	this.prepareRecordsList();
	
	var tmp_str = '';
	var i=1;
	var date = new Date();
	
	
	
	
	var is_norecords = true;
		
	for(var timestamp in this.searchedRecords) {
		var day_records = this.searchedRecords[timestamp];
		
		if(!sizeof(day_records)) continue;		
		
		is_norecords = false;
				
		date.setTime(timestamp);
		tmp_str+= '<b>'+date.getDate()+' '+Locale.Months[String(date.getMonth()+1)]+'</b>';
		
		//tmp_str+= timestamp;
		
		for(var recordID in day_records) {
		//for(var recordID = 0;  recordID < day_records.length; recordID++) {
		
			var dayRecord = day_records[recordID];
			tmp_str+= '<div style="padding-left: 10px">'+
			'<a href="javascript: void(0);" title="Удалить запись" id=del'+	this.id+recordID+'_'+i+'><img src="/img/icons/x2.gif" width=12 height=12 border=0 valign=absmiddle/></a> '
			+dayRecord.text+'</div>';
			i++;
		}		
	}
		
	//если записей не найдено, показываем ссылку "добавить запись"
	if(is_norecords && !this.newRecordForm.record_text.disabled) {		
		tmp_str = '<a href="javascript: void(0);" style="padding: 2px;" class=std_link id=addrecord'+this.id+
			' >'+ this.lang['ToAddRecord'] +'</a>';
		this.recordsDiv.innerHTML = tmp_str;
		
		var addrec_href = $('addrecord'+this.id);
		addrec_href.xdata = {gadgetObj: self};
		addrec_href.onclick = this.ON_addRecordClick;		
		return false;		
	}
	
	
	
		
	this.recordsDiv.innerHTML = tmp_str;
	
	i=1;
	for(var timestamp in this.searchedRecords) {
		var day_records = this.searchedRecords[timestamp];
		
		for(var recordID in day_records) {
		//for(var recordID = 0;  recordID < day_records.length; recordID++) {
			
			var del_href = ge('del'+this.id+recordID+'_'+i);
			if(del_href) {
				del_href.onclick = this.ON_delRecord;
				del_href.xdata = {gadgetObj: self, timestamp: timestamp, recordID: recordID};	
				i++;
			}
			
		}		
	}
	
}

//-------------------------------------------------------------------------------
//реакция на клик на число в календаре
__Calendar.prototype.ON_addRecordClick = function() {
	var gadgetObj = this.xdata.gadgetObj;
	
	$(gadgetObj.Options).show();
	gadgetObj.newRecordForm.record_text.focus();	
}

//-------------------------------------------------------------------------------
//реакция на клик на число в календаре
__Calendar.prototype.ON_delRecord = function() {
	var gadgetObj = this.xdata.gadgetObj;
	var timestamp = this.xdata.timestamp;
	var recordID = this.xdata.recordID;
	
	var currentYear = gadgetObj.currentYear;
	var currentMonth = gadgetObj.currentMonth;
	var currentDay = gadgetObj.currentDay;
	
	var day_records = gadgetObj.records[timestamp];
	
	if(!day_records[recordID]) return false;
		
	delete day_records[recordID];
	
	if(!gadgetObj.checkDateRecords(currentYear, currentMonth, currentDay)) {
		var hrefObj = ge('calc'+gadgetObj.id+currentYear+currentMonth+currentDay);
		hrefObj.style.fontWeight = 'normal';	
	}
	
	gadgetObj.redrawCurrentDateRecords();
	
	var options = {timestamp: timestamp/1000, recordID: recordID};
	
	Update.request('Calendar', 'module', 'delete_record', { id: gadgetObj.id }, options);
	
}

//-------------------------------------------------------------------------------
//ответ на запрос о 
__Calendar.prototype.CB_getRecords = function(data) {		
	
	if(sizeof(data.errors) > 0) { alert(data.errors[0].message); return false;}
	
	if(!data.variables.records) return false;
	
	if(data.variables.rememberDays) 	this.rememberDays = data.variables.rememberDays;
	
	
	for(var timestamp in data.variables.records) {
		this.records[timestamp+'000'] = data.variables.records[timestamp];		
	}
	
	this.redrawNewRecordForm();
	
	this.redrawCalendar(this.calendarDiv);
	this.initCalendarItems();	
	this.redrawCurrentDateRecords();	
}

//-------------------------------------------------------------------------------
__Calendar.prototype.Relay = function(data, part) {
		
	switch(data.event.action)
	{
		case 'get_records':	
			this.CB_getRecords(data);
			break;
				

		default:
			//this.parent.ctrlCallback(dataObj, section);
			return false;
			break;
	}
	
	 if (!part) this.Core.HideLoadingIcon();
	
}