//-----------------------------------------------------------------------------------------------------------
/* calendar constructor */
function JSCalendar(){
	// calendar div's ids
	this.calendar_layer_id 				= 'calendar_div';
	this.date_layer_id			 		= 'date_div';
	this.time_layer_id 					= 'time_div';
	this.hour_layer_id 					= 'calendar_hour_control_div';
	this.minute_layer_id 				= 'calendar_minute_control_div';
	this.second_layer_id 				= 'calendar_second_control_div';
	this.meridian_layer_id				= 'calendar_meridian_control_div';
	this.day_control_layer_id			= 'calendar_day_control_div';
	// calendar select's names
	this.meridian_control_layer_id		= 'calendar_meridian_control';
	this.second_control_layer_id		= 'calendar_second_control';
	this.minute_control_layer_id		= 'calendar_minute_control';
	this.hour_control_layer_id			= 'calendar_hour_control';
	this.month_control_layer_id			= 'calendar_month_control';
	this.year_control_layer_id			= 'calendar_year_control';
	// 
	this.LD 					= "\n";
	this.TAB 					= "\t";
	// calendar control margin
	this.x_margin				= -25;
	this.y_margin				= 4;
	// calendar date data
	this.months_days_count	= new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	this.months 				= ILocale.getMonths();
	this.full_months			= ILocale.getFullMonths();
	this.meridians				= ILocale.getMeridians();
	this.week_days				= ILocale.getWeekDays();
	// set calendar layers
	this.layer 					= layer(this.calendar_layer_id);
	this.date_layer 			= layer(this.date_layer_id);
	this.timeLayer 				= layer(this.time_layer_id);
	this.hourLayer 				= layer(this.hour_layer_id);
	this.minuteLayer 			= layer(this.minute_layer_id);
	this.secondLayer 			= layer(this.second_layer_id);
	this.meridianLayer 			= layer(this.meridian_layer_id);
	this.day_control_layer		= layer(this.day_control_layer_id);
	var meridian_control_layer	= layer(this.meridian_control_layer_id);
	var second_control_layer	= layer(this.second_control_layer_id);
	var minute_control_layer	= layer(this.minute_control_layer_id);
	var hour_control_layer		= layer(this.hour_control_layer_id);
	var month_control_layer		= layer(this.month_control_layer_id);
	var year_control_layer		= layer(this.year_control_layer_id);
	// set calendar controls 
	this.meridian_control		= meridian_control_layer.object;
	this.second_control			= second_control_layer.object;
	this.minute_control			= minute_control_layer.object;
	this.hour_control 			= hour_control_layer.object; 
	this.month_control 			= month_control_layer.object; 
	this.year_control 			= year_control_layer.object; 
	// 
	this.format					= null;
	this.form 					= null;
	this.input 					= null;
	this.label_input			= null;
	this.type					= null;
	// calendar parts vars
	this.year					= null;
	this.month					= null;
	this.day					= null;
	this.meridian				= null;
	this.hour					= null;
	this.minute					= null;
	this.second					= null;
	// current date vars
	this.current_year			= null;
	this.current_month			= null;
	this.current_day			= null;
	// time specific vars
	this.use_minutes 			= null;
	this.use_seconds 			= null;
	this.minutes_interval 		= null;
	this.seconds_interval 		= null;
	this.use_24_hours 			= null;
	
	this.init();
}
//-----------------------------------------------------------------------------------------------------------
/* set prototype */
JSCalendarPrototype = JSCalendar.prototype;
//-----------------------------------------------------------------------------------------------------------
/* init actions */
JSCalendarPrototype.init = function() {
	this.hide();
	var calendar = this;
	this.layer.object.ondblclick = function() {
		calendar.cancel();
	}
}
//-----------------------------------------------------------------------------------------------------------
/* calendar functions */
JSCalendarPrototype.isLeapYear = function(year) {
	if (year % 4 == 0) return true;
	else return false;
}	

JSCalendarPrototype.getDaysCount = function(year, month) {
	if ((month == 2) && (this.isLeapYear(year))) return 29;
	else return this.months_days_count[month - 1];
}	

JSCalendarPrototype.getDateWeekDay = function(year, month, day) {
	var date = new Date(year, month - 1, day);
	return date.getDay();
}
//-----------------------------------------------------------------------------------------------------------
/* parse Str len = 2 */
JSCalendarPrototype.parseStr2 = function(value) {
	var str_value = String(value);
	if (str_value.length == 2) return str_value;
	else if (str_value.length == 1) return '0' + str_value;
	else return '01';
}
//-----------------------------------------------------------------------------------------------------------
/* meridian time functions */
JSCalendarPrototype.generalToMeridianHour = function(hour) {
	hour = hour % 12;
	if (hour == 0) hour += 12;
	return hour;
}	

JSCalendarPrototype.generalHourToMedian = function(hour) {
	if (hour < 12) return 0;
	else return 1;
}

JSCalendarPrototype.meridianToGeneralHour = function(hour, meridian) {
	hour = hour % 12;
	if (meridian == 1) hour += 12;
	return hour;
}
//-----------------------------------------------------------------------------------------------------------
/* date validation */
JSCalendarPrototype.validateDate = function(value) {
	if (IRegularExp.isDate(value)) return true;
	else return false; 
}
/* time validation */
JSCalendarPrototype.validateTime = function(value) {
	if (IRegularExp.isTime(value)) return true;
	else return false; 
}
/* datetime validation */
JSCalendarPrototype.validateDateTime = function(value) {
	if (IRegularExp.isDateTime(value)) return true;
	else return false; 
}
/* timestamp validation */
JSCalendarPrototype.validateTimestamp = function(value) {
	if (IRegularExp.isTimestamp(value)) return true;
	else return false; 
}
//-----------------------------------------------------------------------------------------------------------
JSCalendarPrototype.setDateParts_ = function(date_parts) {
	this.year 			= parseInt(date_parts[0], 10);
	this.month 			= parseInt(date_parts[1], 10);
	this.day 			= parseInt(date_parts[2], 10);	
}	

JSCalendarPrototype.setTimeParts_ = function(time_parts) {
	this.hour 			= parseInt(time_parts[0], 10);
	this.setMinutePart(parseInt(time_parts[1], 10));
	this.setSecondPart(parseInt(time_parts[2], 10));
	this.meridian 		= this.generalHourToMedian(this.hour);
}

JSCalendarPrototype.setMinutePart = function(minute) {
	if (this.use_minutes) {
		this.minute 		= minute;
		this.minute			= this.minutes_interval * Math.floor(this.minute/this.minutes_interval);
	} else this.minute = 0;
}

JSCalendarPrototype.setSecondPart = function(second) {
	if (this.use_seconds) {
		this.second 		= second;
		this.second			= this.seconds_interval * Math.floor(this.second/this.seconds_interval);
	} else this.second = 0;	
}

/* set date parts vars */
JSCalendarPrototype.setDateParts = function(value) {
	if (this.validateDate(value)) {
		var date_parts 	= value.split('-');
		this.setDateParts_(date_parts);
		return true;
	} else return false;
}	
/* set time parts vars */
JSCalendarPrototype.setTimeParts = function(value) {
	if (this.validateTime(value)) {
		var time_parts 	= value.split(':');
		this.setTimeParts_(time_parts);
		return true;
	} else return false;	
}	
/* set time parts vars */
JSCalendarPrototype.setDateTimeParts = function(value) {
	if (this.validateDateTime(value)) {
		var datetime_parts 	= value.split(' ');
		var date_parts			= datetime_parts[0].split('-');
		var time_parts			= datetime_parts[1].split(':');
		this.setDateParts_(date_parts);
		this.setTimeParts_(time_parts);
		return true;
	} else return false;
}
/* set timestamp parts vars */
JSCalendarPrototype.setTimestampParts = function(value) {
	if (this.validateTimestamp(value)) {
		var date				=  new Date(Number(value)*1000);
		this.year 			= date.getFullYear();
		this.month 			= date.getMonth() + 1;
		this.day 			= date.getDate();
		this.hour 			= date.getHours();
		this.setMinutePart(date.getMinutes());
		this.setSecondPart(date.getSeconds());
		this.meridian 		= this.generalHourToMedian(this.hour);
		return true;
	} else return false;
}
//-----------------------------------------------------------------------------------------------------------
/* set parts vars */
JSCalendarPrototype.setParts = function() {
	var value = String(this.input.object.value);
	if (this.type == 'date')
		return this.setDateParts(value);
	else if (this.type == 'datetime')
		return this.setDateTimeParts(value);	
	else if (this.type == 'time')
		return this.setTimeParts(value);
	else if (this.type == 'timestamp')
		return this.setTimestampParts(value);		
}	
//-----------------------------------------------------------------------------------------------------------
/* unset parts vars */
JSCalendarPrototype.unsetParts = function() {
	this.year 		= null;
	this.month 		= null;
	this.day 		= null;
	this.hour 		= null;
	this.minute 	= null;
	this.second 	= null;
	this.meridian 	= null;
}
//-----------------------------------------------------------------------------------------------------------
/* set default parts vars */
JSCalendarPrototype.setDefaultParts = function() {
	var date 		= new Date();
	this.year 		= date.getFullYear();
	this.month 		= date.getMonth() + 1;
	this.day 		= date.getDate();
	this.hour 		= date.getHours();
	this.minute 	= date.getMinutes();
	this.minute		= this.minutes_interval * Math.floor(this.second/this.minutes_interval);
	this.second 	= date.getSeconds();
	this.second		= this.seconds_interval * Math.floor(this.second/this.seconds_interval);
	this.meridian = this.generalHourToMedian(this.hour);
}
//-----------------------------------------------------------------------------------------------------------
/* reset parts vars */
JSCalendarPrototype.resetParts = function() {
	this.unsetParts();
	if (!this.setParts()) this.setDefaultParts();
}	
//-----------------------------------------------------------------------------------------------------------
/* hide calendar */
JSCalendarPrototype.hide = function() {
	this.date_layer.css.display 		= 'none';
	this.hourLayer.css.display 			= 'none';
	this.minuteLayer.css.display 		= 'none';
	this.secondLayer.css.display 		= 'none';
	this.meridianLayer.css.display 		= 'none';
	this.timeLayer.css.display 			= 'none';
	this.layer.css.display 				= 'none';
}
/* show calendar */
JSCalendarPrototype.show = function() {
	if ((this.type == 'date') || (this.type == 'datetime') || (this.type == 'timestamp'))
		this.date_layer.css.display = 'block';	
	if ((this.type == 'time') || (this.type == 'datetime') || (this.type == 'timestamp')) {
		this.hourLayer.css.display = 'inline';
		if (this.use_minutes) this.minuteLayer.css.display = 'inline';
		if (this.use_seconds) this.secondLayer.css.display = 'inline';
		if (!this.use_24_hours) this.meridianLayer.css.display = 'inline';
		this.timeLayer.css.display = 'block';
	}	
	this.layer.css.display = 'block';
}	
//-----------------------------------------------------------------------------------------------------------
/* remove select options */
JSCalendarPrototype.removeOptions = function(select) {
	var options = select.options;
	if (options) {
		while (options.length > 0)
			options[0] = null;
	}
}
//-----------------------------------------------------------------------------------------------------------
/* set meridian control */
JSCalendarPrototype.setMeridianControl = function() {
	if ((this.hour != null) && !this.use_24_hours) {
		if (this.meridian_control) {
			this.removeOptions(this.meridian_control);
			var options = this.meridian_control.options;
			if (options) {
				var option = null;
				for (var i = 0; i < this.meridians.length; i++) {
					option = new Option(this.meridians[i], i);
					options.add(option);
				}		
			} else return false;	
			this.meridian_control.options.selectedIndex = this.meridian;
			return true;
		} else return false;
	} else return false;	
}
//-----------------------------------------------------------------------------------------------------------
/* set second control */
JSCalendarPrototype.setSecondControl = function() {
	if ((this.second != null) && this.use_seconds) {
		if (this.second_control) {
			this.removeOptions(this.second_control);
			var options = this.second_control.options;
			var option = null;
			if (options) {
				for (var i = 0; i < 60; i++) {
					if (i % this.seconds_interval == 0) {
						option = new Option(this.parseStr2(i), i);
						options.add(option);
					}	
				}
				for (var i = 0; i < options.length; i++) {
					if (options[i].value == (this.seconds_interval * Math.floor(this.second/this.seconds_interval))) {
						options.selectedIndex = i;
						break;
					}
				}
				return true;				
			} else return false;	
		} else return false;
	} else return false;	
}
//-----------------------------------------------------------------------------------------------------------
/* set minute control */
JSCalendarPrototype.setMinuteControl = function() {
	if ((this.minute != null) && this.use_minutes) {
		if (this.minute_control) {
			this.removeOptions(this.minute_control);
			var options = this.minute_control.options;
			var option = null;
			if (options) {
				for (var i = 0; i < 60; i++) {
					if (i % this.minutes_interval == 0) {
						option = new Option(this.parseStr2(i), i);
						options.add(option);
					}	
				}
				for (var i = 0; i < options.length; i++) {
					if (options[i].value == (this.minutes_interval * Math.floor(this.minute/this.minutes_interval))) {
						options.selectedIndex = i;
						break;
					}
				}
				return true;				
			} else return false;	
		} else return false;
	} else return false;	
}
//-----------------------------------------------------------------------------------------------------------
/* set hour control */
JSCalendarPrototype.setHourControl = function() {
	if ((this.hour != null)) {
		if (this.hour_control) {
			this.removeOptions(this.hour_control);
			var max_hours = (this.use_24_hours) ? 23 : 12;
			var min_hours = (this.use_24_hours) ? 0 : 1;
			var options = this.hour_control.options;
			var option = null;
			if (options) {
				for (var i = min_hours; i <= max_hours; i++) {
					option = new Option(this.parseStr2(i), i);
					options.add(option);
				}
				for (var i = 0; i < options.length; i++) {
					if (((!this.use_24_hours) && (this.meridianToGeneralHour(options[i].value, this.meridian) == this.hour)) || 
							((this.use_24_hours) && (options[i].value == this.hour))) {
						options.selectedIndex = i;
						break;
					}
				}
				return true;				
			} else return false;	
		} else return false;
	} else return false;	
}	
//-----------------------------------------------------------------------------------------------------------
/* set month control */
JSCalendarPrototype.setMonthControl = function() {
	if ((this.month != null)) {
		if (this.month_control) {
			this.removeOptions(this.month_control);
			var options = this.month_control.options;
			var option = null;
			if (options) {
				for (var i = 0; i < this.months.length; i++) {
					option = new Option(this.months[i], i+1);
					options.add(option);
				}
				for (var i = 0; i < options.length; i++) {
					if (Number(options[i].value) == this.month) {
						options.selectedIndex = i;
						break;
					}	
				}
				return true;				
			} else return false;	
		} else return false;
	} else return false;	
}
//-----------------------------------------------------------------------------------------------------------
/* set year control */
JSCalendarPrototype.setYearControl = function() {
	if ((this.year != null)) {
		if (this.year_control) {
			this.removeOptions(this.year_control);
			var options = this.year_control.options;
			var option = null;
			var year = 0;
			if (options) {
				//maxshevtsov
				this.start_year =2006;
				for (var i = 0; i < this.years_count; i++) {
					year = this.start_year + i;
					option = new Option(year, year);
					options.add(option);
				}				
				for (var i = 0; i < options.length; i++) {
					if (Number(options[i].value) == this.year) {
						options.selectedIndex = i;
						break;
					}	
				}
				return true;				
			} else return false;	
		} else return false;
	} else return false;	
}
//-----------------------------------------------------------------------------------------------------------
/* set day control */
JSCalendarPrototype.setDayControl = function() {
	if ((this.day != null) && (this.month != null) && (this.year != null)) {
		if (this.day_control_layer) {
			var days_count = this.getDaysCount(this.year, this.month);
			var begin_date = new Date(this.year, this.month - 1, 1);
			var end_date = new Date(this.year, this.month - 1, days_count);
			var begin_week_day = begin_date.getDay();
			var end_week_day = end_date.getDay();
			var week_day = 0;
			var td_class = '';
			var html = '<table align="center" class="calendar" cellpadding="0" cellspacing="1" border="0">' + this.LD;
			for (var i = 0; i < this.week_days.length; i++) {
				if (i == 0) html += '<tr>' + this.LD;
				html += this.TAB + '<th>' + this.week_days[i] + '</th>' + this.LD;
				if (i == (this.week_days.length - 1)) html += '</tr>' + this.LD;
			}
			for (var i = 0; i < begin_week_day; i++) {
				if (i == 0) html += '<tr>' + this.LD;
				html += this.TAB + '<td></td>' + this.LD;
			}
			for (var i = 1; i <= days_count; i++) {
				week_day = this.getDateWeekDay(this.year, this.month, i);
				if (week_day == 0) html += '<tr>' + this.LD;
				if ((this.year == this.current_year) && (this.month == this.current_month) && (i == this.current_day))
					td_class = 'today';
				else if (i == this.day) 
					td_class = 'day_selected';
				else 
					td_class = 'day';
				html += this.TAB + '<td class="' + td_class + '" onclick="ICalendar.resetDay(' + String(i) + ');">' + 
								String(i) + '</td>' + this.LD;
				if (week_day == 6) html += '</tr>' + this.LD;
			}
			for (var i = end_week_day + 1; i <= 6; i++) {
				html += this.TAB + '<td></td>' + this.LD;
				if (i == 6) html += '</tr>' + this.LD;
			}	
			html += '</table>' + this.LD;
			this.day_control_layer.write(html);
		} else return false; 	
	} else return false;		
}	
//-----------------------------------------------------------------------------------------------------------
/* set date controls */
JSCalendarPrototype.setDateControls = function() {
	this.setMonthControl();
	this.setYearControl();
	this.setDayControl();
}	
/* set time controls */
JSCalendarPrototype.setTimeControls = function() {
	this.setHourControl();
	this.setMinuteControl();
	this.setSecondControl();
	if (!this.use_24_hours) this.setMeridianControl();
}
/* set controls */
JSCalendarPrototype.setControls = function() {
	if ((this.type == 'date') || (this.type == 'datetime') || (this.type == 'timestamp'))
		this.setDateControls();
	if ((this.type == 'time') || (this.type == 'datetime') || (this.type == 'timestamp'))
		this.setTimeControls();
}	
//-----------------------------------------------------------------------------------------------------------
/* reset month */
JSCalendarPrototype.resetMonth = function(month) {
	this.month = month;
	this.setDateControls();
}
/* reset year */
JSCalendarPrototype.resetYear = function(year) {
	this.year = year;
	this.setDateControls();
}
/* reset day */
JSCalendarPrototype.resetDay = function(day) {
	this.day = day;
	this.setDateControls();
}
/* reset hour */
JSCalendarPrototype.resetHour = function(hour) {
	if (!this.use_24_hours) {
		hour = this.meridianToGeneralHour(hour, this.meridian);
	} 
	this.hour = hour;	
}
/* reset minute */
JSCalendarPrototype.resetMinute = function(minute) {
	this.minute = minute;
}
/* reset second */
JSCalendarPrototype.resetSecond = function(second) {
	this.second = second;
}
/* reset meridian */
JSCalendarPrototype.resetMeridian = function(meridian) {
	if (!this.use_24_hours) {
		this.hour = this.meridianToGeneralHour(this.generalToMeridianHour(this.hour), meridian);
		this.meridian = meridian;
	}
}
//-----------------------------------------------------------------------------------------------------------
/* get calendar date */
JSCalendarPrototype.getDateString = function() {
	if ((this.year != null) && (this.month != null) && (this.day != null))
		return String(this.year) + '-' + this.parseStr2(String(this.month)) + '-' + 
						this.parseStr2(String(this.day));
	else return '';
}
/* get calendar time */
JSCalendarPrototype.getTimeString = function() {
	if ((this.hour != null) && (this.minute != null) && (this.second != null))
		return this.parseStr2(String(this.hour)) + ':' + this.parseStr2(String(this.minute)) + ':' + 
						this.parseStr2(String(this.second));
	else return '';
}
/* get calendar datetime */
JSCalendarPrototype.getDateTimeString = function() {
	if ((this.year != null) && (this.month != null) && (this.day != null) && 
			(this.hour != null) && (this.minute != null) && (this.second != null))
		return this.getDateString() + ' ' + this.getTimeString();
	else return '';
}
/* get calendar timestamp */
JSCalendarPrototype.getTimestampString = function() {
	if ((this.year != null) && (this.month != null) && (this.day != null) && 
			(this.hour != null) && (this.minute != null) && (this.second != null)) {
		var date = new Date(this.year, this.month - 1, this.day, this.hour, this.minute, this.second);		
		return String(Math.floor(date.getTime()/1000));
	} else return '';
}
//-----------------------------------------------------------------------------------------------------------
/* get calendar label */
JSCalendarPrototype.parseCalendarValue = function() {
	var result = String(this.format);
	year 		= (this.year != null) ? this.year : 1970;
	month 	= (this.month != null) ? this.month : 1;
	day 		= (this.day != null) ? this.day : 1;
	hour 		= (this.hour != null) ? this.hour : 0;
	minute	= (this.minute != null) ? this.minute : 0;
	second 	= (this.second != null) ? this.second : 0;
	result = result.replace(/%Y/, year);
	result = result.replace(/%y/, String(year).substr(2));
	result = result.replace(/%b/, this.months[month - 1]);
	result = result.replace(/%B/, this.full_months[month - 1]);
	result = result.replace(/%m/, this.parseStr2(month));
	result = result.replace(/%H/, this.parseStr2(hour));
	result = result.replace(/%I/, this.parseStr2(this.generalToMeridianHour(hour)));
	result = result.replace(/%k/, this.hour);
	result = result.replace(/%l/, this.generalToMeridianHour(hour));
	result = result.replace(/%p/, this.meridians[this.generalHourToMedian(hour)]);
	result = result.replace(/%e/, day);
	result = result.replace(/%d/, this.parseStr2(day));
	result = result.replace(/%M/, this.parseStr2(minute));
	result = result.replace(/%S/, this.parseStr2(second));
	result = result.replace(/%n/, this.LB);
	result = result.replace(/%t/, this.TAB);
	return result;
}	
//-----------------------------------------------------------------------------------------------------------
/* set calendar label */
JSCalendarPrototype.setInputLabel = function() {
	this.label_input.object.value = this.parseCalendarValue();
}	
/* set calendar value */
JSCalendarPrototype.setInput = function() {
	var value = '';
	if (this.type == 'date') {
		value = this.getDateString();
	} else if (this.type == 'datetime') {
		value = this.getDateTimeString();
	} else if (this.type == 'time') {
		value = this.getTimeString();
	} else if (this.type == 'timestamp') {
		value = this.getTimestampString();
	}	
	this.input.object.value = value;
}
//-----------------------------------------------------------------------------------------------------------
/* set calendar control position */
JSCalendarPrototype.setPosition = function() {
	var input_left 		= Number(this.label_input.getAbsoluteLeft());
	//var input_width 		= Number(this.label_input.getWidth());
	var x_margin 			= Number(this.x_margin);
	var left 				= input_left + x_margin;
	var input_top 			= Number(this.label_input.getAbsoluteTop());
	var input_height 		= Number(this.label_input.getHeight());
	var y_margin 			= Number(this.y_margin);
	var top 					= input_top + input_height + y_margin;
	this.layer.moveTo(left, top);
}
//-----------------------------------------------------------------------------------------------------------
/* set calendar */
JSCalendarPrototype.set = function() {
	this.resetParts();
	this.setControls();
	this.setPosition();
}
//-----------------------------------------------------------------------------------------------------------
/* submit calendar */
JSCalendarPrototype.submit = function() {
	this.setInput();
	this.setInputLabel();
	this.hide();
}
//-----------------------------------------------------------------------------------------------------------
/* close calendar */
JSCalendarPrototype.cancel = function() {
	this.hide();
}
//-----------------------------------------------------------------------------------------------------------
/* open calendar*/
JSCalendarPrototype.open = function(form_name, input_name, input_label_name, index, type, format, 
												years_count, start_year, 
												use_24_hours, 
												use_minutes, minutes_interval, 
												use_seconds, seconds_interval) {
	this.hide();		
	var form_path 				= "document.forms['" + form_name + "']";
	var input_path				= form_path + ".elements['" + input_name + "']";
	var label_input_path		= form_path + ".elements['" + input_label_name + "']";
	if (index !== false) {
		input_path += "[" + String(index) + "]";
		label_input_path += "[" + String(index) + "]";
	}	
	this.form 					= layerByPath(form_path);
	this.input 					= layerByPath(input_path);
	this.label_input			= layerByPath(label_input_path);
	this.type					= String(type);
	this.format = format;
	var current_date 			= new Date();
	this.current_year			= current_date.getFullYear();
	this.current_month		= current_date.getMonth() + 1;
	this.current_day			= current_date.getDate();
	this.years_count			= years_count;
	this.start_year			= start_year;
	this.use_minutes 			= use_minutes;
	this.use_seconds 			= use_seconds;
	this.minutes_interval 	= minutes_interval;
	this.seconds_interval 	= seconds_interval;
	this.use_24_hours 		= use_24_hours;
	this.set();
	this.show();
}
//-----------------------------------------------------------------------------------------------------------
/* open date calendar*/
JSCalendarPrototype.openDate = function(form_name, input_name, input_label_name, index, format, 
													years_count, start_year) {
	this.open(form_name, input_name, input_label_name, index, 'date', format, years_count, start_year, 
					false, false, null, false, null);
}

/* open time calendar*/
JSCalendarPrototype.openTime = function(form_name, input_name, input_label_name, index, format, 
													use_24_hours,
													use_minutes, minutes_interval, 
													use_seconds, seconds_interval) {
	this.open(form_name, input_name, input_label_name, index, 'time', format, 0, 1970, 
					use_24_hours, use_minutes, minutes_interval, use_seconds, seconds_interval);
}
/* open datetime calendar*/
JSCalendarPrototype.openDateTime = function(form_name, input_name, input_label_name, index, format, 
													years_count, start_year, 
													use_24_hours,
													use_minutes, minutes_interval, 
													use_seconds, seconds_interval) {
	this.open(form_name, input_name, input_label_name, index, 'datetime', format, years_count, start_year, 
					use_24_hours, use_minutes, minutes_interval, use_seconds, seconds_interval);
}
/* open timestamp calendar*/
JSCalendarPrototype.openTimestamp = function(form_name, input_name, input_label_name, index, format, 
													years_count, start_year, 
													use_24_hours,
													use_minutes, minutes_interval, 
													use_seconds, seconds_interval) {
	this.open(form_name, input_name, input_label_name, index, 'timestamp', format, years_count, start_year, 
					use_24_hours, use_minutes, minutes_interval, use_seconds, seconds_interval);
}
//-----------------------------------------------------------------------------------------------------------
