123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351 |
- function positionInfo(object) {
- var p_elm = object;
- this.getElementLeft = getElementLeft;
- function getElementLeft() {
- var x = 0;
- var elm;
- if(typeof(p_elm) == "object"){
- elm = p_elm;
- } else {
- elm = document.getElementById(p_elm);
- }
- while (elm != null) {
- x+= elm.offsetLeft;
- elm = elm.offsetParent;
- }
- return parseInt(x);
- }
- this.getElementWidth = getElementWidth;
- function getElementWidth(){
- var elm;
- if(typeof(p_elm) == "object"){
- elm = p_elm;
- } else {
- elm = document.getElementById(p_elm);
- }
- return parseInt(elm.offsetWidth);
- }
- this.getElementRight = getElementRight;
- function getElementRight(){
- return getElementLeft(p_elm) + getElementWidth(p_elm);
- }
- this.getElementTop = getElementTop;
- function getElementTop() {
- var y = 0;
- var elm;
- if(typeof(p_elm) == "object"){
- elm = p_elm;
- } else {
- elm = document.getElementById(p_elm);
- }
- while (elm != null) {
- y+= elm.offsetTop;
- elm = elm.offsetParent;
- }
- return parseInt(y);
- }
- this.getElementHeight = getElementHeight;
- function getElementHeight(){
- var elm;
- if(typeof(p_elm) == "object"){
- elm = p_elm;
- } else {
- elm = document.getElementById(p_elm);
- }
- return parseInt(elm.offsetHeight);
- }
- this.getElementBottom = getElementBottom;
- function getElementBottom(){
- return getElementTop(p_elm) + getElementHeight(p_elm);
- }
- }
- function CalendarControl() {
- var calendarId = 'CalendarControl';
- var currentYear = 0;
- var currentMonth = 0;
- var currentDay = 0;
- var selectedYear = 0;
- var selectedMonth = 0;
- var selectedDay = 0;
- var months = ['Січень','Лютий','Березень','Квітень','Травень','Червень','Липень','Серпень','Вересень','Жовтень','Листопад','Грудень'];
- var dateField = null;
- function getProperty(p_property){
- var p_elm = calendarId;
- var elm = null;
- if(typeof(p_elm) == "object"){
- elm = p_elm;
- } else {
- elm = document.getElementById(p_elm);
- }
- if (elm != null){
- if(elm.style){
- elm = elm.style;
- if(elm[p_property]){
- return elm[p_property];
- } else {
- return null;
- }
- } else {
- return null;
- }
- }
- }
-
-
- function setElementProperty(p_property, p_value, p_elmId){
- var p_elm = p_elmId;
- var elm = null;
- if(typeof(p_elm) == "object"){
- elm = p_elm;
- } else {
- elm = document.getElementById(p_elm);
- }
- if((elm != null) && (elm.style != null)){
- elm = elm.style;
- elm[ p_property ] = p_value;
- }
- }
- function setProperty(p_property, p_value) {
- setElementProperty(p_property, p_value, calendarId);
- }
- function getDaysInMonth(year, month) {
- return [31,((!(year % 4 ) && ( (year % 100 ) || !( year % 400 ) ))?29:28),31,30,31,30,31,31,30,31,30,31][month-1];
- }
- function getDayOfWeek(year, month, day) {
- var date = new Date(year,month-1,day)
- return date.getDay();
- }
- this.clearDate = clearDate;
- function clearDate() {
- dateField.value = '';
- hide();
- }
- this.setDate = setDate;
- function setDate(year, month, day) {
- if (dateField) {
- if (month < 10) {month = "0" + month;}
- if (day < 10) {day = "0" + day;}
- var dateString = year+"-"+month+"-"+day;
- dateField.value = dateString;
- hide();
- }
- return;
- }
- this.changeMonth = changeMonth;
- function changeMonth(change) {
- currentMonth += change;
- currentDay = 0;
- if(currentMonth > 12) {
- currentMonth = 1;
- currentYear++;
- } else if(currentMonth < 1) {
- currentMonth = 12;
- currentYear--;
- }
- calendar = document.getElementById(calendarId);
- calendar.innerHTML = calendarDrawTable();
- }
- this.changeYear = changeYear;
- function changeYear(change) {
- currentYear += change;
- currentDay = 0;
- calendar = document.getElementById(calendarId);
- calendar.innerHTML = calendarDrawTable();
- }
- function getCurrentYear() {
- var year = new Date().getYear();
- if(year < 1900) year += 1900;
- return year;
- }
- function getCurrentMonth() {
- return new Date().getMonth() + 1;
- }
- function getCurrentDay() {
- return new Date().getDate();
- }
- function calendarDrawTable() {
- var dayOfMonth = 1;
- var validDay = 0;
- var startDayOfWeek = getDayOfWeek(currentYear, currentMonth, dayOfMonth);
- var daysInMonth = getDaysInMonth(currentYear, currentMonth);
- var css_class = null; //CSS class for each day
- var table = "<table cellspacing='0' cellpadding='0' border='0'>";
- table = table + "<tr class='header'>";
- table = table + " <td colspan='2' class='previous'><a href='javascript:changeCalendarControlMonth(-1);'><</a> <a href='javascript:changeCalendarControlYear(-1);'>«</a></td>";
- table = table + " <td colspan='3' class='title'>" + months[currentMonth-1] + "<br>" + currentYear + "</td>";
- table = table + " <td colspan='2' class='next'><a href='javascript:changeCalendarControlYear(1);'>»</a> <a href='javascript:changeCalendarControlMonth(1);'>></a></td>";
- table = table + "</tr>";
- table = table + "<tr><th>S</th><th>M</th><th>T</th><th>W</th><th>T</th><th>F</th><th>S</th></tr>";
- for(var week=0; week < 6; week++) {
- table = table + "<tr>";
- for(var dayOfWeek=0; dayOfWeek < 7; dayOfWeek++) {
- if(week == 0 && startDayOfWeek == dayOfWeek) {
- validDay = 1;
- } else if (validDay == 1 && dayOfMonth > daysInMonth) {
- validDay = 0;
- }
- if(validDay) {
- if (dayOfMonth == selectedDay && currentYear == selectedYear && currentMonth == selectedMonth) {
- css_class = 'current';
- } else if (dayOfWeek == 0 || dayOfWeek == 6) {
- css_class = 'weekend';
- } else {
- css_class = 'weekday';
- }
- table = table + "<td><a class='"+css_class+"' href=\"javascript:setCalendarControlDate("+currentYear+","+currentMonth+","+dayOfMonth+")\">"+dayOfMonth+"</a></td>";
- dayOfMonth++;
- } else {
- table = table + "<td class='empty'> </td>";
- }
- }
- table = table + "</tr>";
- }
- table = table + "<tr class='header'><th colspan='7' style='padding: 3px;'><a href='javascript:clearCalendarControl();'>Очистити</a> | <a href='javascript:hideCalendarControl();'>Закрити</a></td></tr>";
- table = table + "</table>";
- return table;
- }
- this.show = show;
- function show(field) {
- can_hide = 0;
-
- // If the calendar is visible and associated with
- // this field do not do anything.
- if (dateField == field) {
- return;
- } else {
- dateField = field;
- }
- if(dateField) {
- try {
- var dateString = new String(dateField.value);
- var dateParts = dateString.split("-");
-
- selectedMonth = parseInt(dateParts[0],10);
- selectedDay = parseInt(dateParts[1],10);
- selectedYear = parseInt(dateParts[2],10);
- } catch(e) {}
- }
- if (!(selectedYear && selectedMonth && selectedDay)) {
- selectedMonth = getCurrentMonth();
- selectedDay = getCurrentDay();
- selectedYear = getCurrentYear();
- }
- currentMonth = selectedMonth;
- currentDay = selectedDay;
- currentYear = selectedYear;
- if(document.getElementById){
- calendar = document.getElementById(calendarId);
- calendar.innerHTML = calendarDrawTable(currentYear, currentMonth);
- setProperty('display', 'block');
- var fieldPos = new positionInfo(dateField);
- var calendarPos = new positionInfo(calendarId);
- var x = fieldPos.getElementLeft();
- var y = fieldPos.getElementBottom();
- setProperty('left', x + "px");
- setProperty('top', y + "px");
-
- if (document.all) {
- setElementProperty('display', 'block', 'CalendarControlIFrame');
- setElementProperty('left', x + "px", 'CalendarControlIFrame');
- setElementProperty('top', y + "px", 'CalendarControlIFrame');
- setElementProperty('width', calendarPos.getElementWidth() + "px", 'CalendarControlIFrame');
- setElementProperty('height', calendarPos.getElementHeight() + "px", 'CalendarControlIFrame');
- }
- }
- }
- this.hide = hide;
- function hide() {
- if(dateField) {
- setProperty('display', 'none');
- setElementProperty('display', 'none', 'CalendarControlIFrame');
- dateField = null;
- }
- }
- this.visible = visible;
- function visible() {
- return dateField
- }
- this.can_hide = can_hide;
- var can_hide = 0;
- }
- var calendarControl = new CalendarControl();
- function showCalendarControl(textField) {
- // textField.onblur = hideCalendarControl;
- calendarControl.show(textField);
- }
- function clearCalendarControl() {
- calendarControl.clearDate();
- }
- function hideCalendarControl() {
- if (calendarControl.visible()) {
- calendarControl.hide();
- }
- }
- function setCalendarControlDate(year, month, day) {
- calendarControl.setDate(year, month, day);
- }
- function changeCalendarControlYear(change) {
- calendarControl.changeYear(change);
- }
- function changeCalendarControlMonth(change) {
- calendarControl.changeMonth(change);
- }
- document.write("<iframe id='CalendarControlIFrame' src='javascript:false;' frameBorder='0' scrolling='no'></iframe>");
- document.write("<div id='CalendarControl'></div>");
|