calendar/calendar.min.js

1 line
7.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

var Calendar={month_names:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],close_label:"Закрыть",weekdays:["Пн","Вт","Ср","Чт","Пт","Сб","Вс"],sunday:6,selectboxes:false,years:{min:-70,max:10},format:"d.m.Y",month_days:[31,28,31,30,31,30,31,31,30,31,30,31],today:new Date(),selected:new Date(),opt:{},data:[],addedListener:false,wrt:function(a){this.data.push(a)},fin:function(){this.wrt("<input type='button' value='"+this.close_label+"' class='calendar-cancel' onclick='Calendar.hideCalendar();' />");document.getElementById(this.opt.calendar).innerHTML=this.data.join("");this.data=[]},selectDate:function(e,f,b){var a=_calendar_active_instance;var d=a.opt.input;var c=d.value.split(/\s+/,2)[1]||"";if(c){c=" "+c}d.value=(a.format=="Y-m-d"?e+"-"+f+"-"+b:b+"."+f+"."+e)+c;a.hideCalendar()},showMonths:function(c,e){var f=this.today.getFullYear();var g=this.today.getMonth();var a=this.selected.getFullYear()==c?this.selected.getMonth():-1;this.wrt("<table>");this.wrt("<tr><th colspan='4' class='calendar-title'><a href='javascript:Calendar.showMonths("+(c-1)+")' title='"+(c-1)+"'>&lt;</a>");this.wrt(" <a href='javascript:Calendar.showYears("+c+")'>"+c+"</a>");this.wrt(" <a href='javascript:Calendar.showMonths("+(c+1)+")' title='"+(c+1)+"'>&gt;</a></th></tr>");this.wrt("<tr>");for(var b in this.month_names){if(b&&!(b%3)){this.wrt("</tr><tr>")}var d=(c<f||c==f&&b<g?"past":(c>f||c==f&&b>g?"future":"today"))+(b==a?" selected":"");this.wrt("<td class='months "+d+"'><a href='javascript:Calendar.makeCalendar("+c+","+b+")'>"+this.month_names[b]+"</a></td>")}this.wrt("</tr>");this.wrt("</table>");this.fin()},showYears:function(d){var b=d&~15;var f=this.today.getFullYear();var a=this.selected.getFullYear();this.wrt("<table>");this.wrt("<tr><th colspan='4' class='calendar-title'>");this.wrt(" <a href='javascript:Calendar.showYears("+(d-16)+");' title='"+(b-16)+" - "+(b-1)+"'>&lt;</a>");this.wrt(" <b>"+b+" - "+(b+15)+"</b>");this.wrt(" <a href='javascript:Calendar.showYears("+(d+16)+");' title='"+(b+16)+" - "+(b+31)+"'>&gt;</a>");this.wrt("</th></tr>");this.wrt("<tr>");for(var c=0;c<16;c++){if(c&&!(c%4)){this.wrt("</tr><tr>")}var e=(b+c<f?"past":(b+c>f?"future":"today"))+(b+c==a?" selected":"");this.wrt("<td class='years "+e+"'><a href='javascript:Calendar.showMonths("+(b+c)+")'>"+(b+c)+"</a></td>")}this.wrt("</tr>");this.wrt("</table>");this.fin()},makeCalendar:function(k,x){var a=x+1;var g=k;if(a>=12){a=0;g++}var c=x-1;var f=k;if(c<0){c=11;f--}var m=this.today.getFullYear();this.wrt("<table>");this.wrt("<tr><th colspan='7' class='calendar-title'><a href='javascript:Calendar.makeCalendar("+f+","+c+");' title='"+this.month_names[c]+" "+(f)+"'>&lt;</a>");if(!this.selectboxes){this.wrt(" <a href='javascript:Calendar.showMonths("+k+", "+x+")'>"+this.month_names[x]+"</a>");this.wrt(" <a href='javascript:Calendar.showYears("+k+")'>"+k+"</a>")}else{this.wrt(" <select name='calendar-month' class='calendar-month' onChange='Calendar.makeCalendar("+k+",this.value);'>");for(var s in this.month_names){this.wrt("<option value='"+s+"'");if(s==x){this.wrt(" selected='selected'")}this.wrt(">"+this.month_names[s]+"</option>")}this.wrt("</select>");this.wrt("<select name='calendar-year' class='calendar-year' onChange='Calendar.makeCalendar(this.value, "+x+");'>");for(var s=m+this.years.min;s<m+this.years.max;s++){this.wrt("<option value='"+s+"'");if(s==k){this.wrt(" selected='selected'")}this.wrt(">"+s+"</option>")}this.wrt("</select>")}this.wrt(" <a href='javascript:Calendar.makeCalendar("+g+","+a+");' title='"+this.month_names[a]+" "+g+"'>&gt;</a></th></tr>");this.wrt("<tr class='header'>");for(var b=0;b<7;b++){this.wrt("<td>"+this.weekdays[b]+"</td>")}this.wrt("</tr>");var o=new Date(k,x,1);var y=(o.getDay()+Calendar.sunday)%7;var v=1;var r=0;if(!(k%4)&&((k%100)||!(k%400))){this.month_days[1]=29}else{this.month_days[1]=28}var t=this.month_days[x];var e=this.today.getFullYear();var u=(k-e)||(x-this.today.getMonth());var z=k==this.selected.getFullYear()&&x==this.selected.getMonth()?this.selected.getDate():-1;for(var s=0;s<=5;s++){if(h>=t){break}this.wrt("<tr>");for(var q=0;q<7;q++){if(v>t){r=0}else{if(q>=y&&!r){r=1}}if(r){var h=v,p=x+1;if(h<10){h="0"+h}if(p<10){p="0"+p}var n="";var l=u||(v-this.today.getDate());if(l<0){n=" past"}else{if(!l){n=" today"}else{n=" future"}}if(v==z){n+=" selected"}n+=" "+this.weekdays[q].toLowerCase();this.wrt("<td class='days"+n+"'><a href='javascript:Calendar.selectDate(\""+k+'","'+p+'","'+h+"\")'>"+h+"</a></td>");v++}else{this.wrt("<td class='days'>&nbsp;</td>")}}this.wrt("</tr>")}this.wrt("</table>");this.fin()},showCalendar:function(){var b=this.opt.input;var h=document.getElementById(this.opt.calendar);var g=getOffset(b);var e=b.clientWidth||b.offsetWidth;var a=b.clientHeight||b.offsetHeight;h.style.left=(g.left-1)+"px";h.style.top=(g.top+a-1)+"px";this.selected=new Date();var d=b.value.replace(/\s+.*$/,"");if(d){var c=false;var f=d.split("-");if(f.length==3){f[1]--;c=new Date(f[0],f[1],f[2])}else{if(f.length==1){f=d.split(".");if(f.length==3){f[1]--;c=new Date(f[2],f[1],f[0])}}}if(c&&!isNaN(c.getFullYear())){this.selected=c}}this.makeCalendar(this.selected.getFullYear(),this.selected.getMonth());document.getElementById(this.opt.calendar).style.display="block";_calendar_active_instance=this;if(!Calendar.addedListener){addListener(h,"mousedown",function(i){i=i||window.event;if(i.stopPropagation){i.stopPropagation()}else{i.cancelBubble=true}return true});addListener(document,"mousedown",function(){Calendar.hideCalendar()});Calendar.addedListener=true}},hideCalendar:function(a){var b="";if(a){b=a.opt.calendar}else{if(!_calendar_active_instance){return}else{b=_calendar_active_instance.opt.calendar}}if(b){document.getElementById(b).style.display="none"}_calendar_active_instance=null},set:function(b){if(typeof b=="string"){b=document.getElementById(b)}if(!b){return}if(!this.opt.calendar){this.init()}var a=this;addListener(b,"focus",function(c){a.opt.input=this;a.showCalendar()})},init:function(){if(!this.opt.calendar||!document.getElementById(this.opt.calendar)){var a=document.createElement("div");if(!this.opt.calendar){this.opt.calendar="calender_div_"+Math.round(Math.random()*100)}a.setAttribute("id",this.opt.calendar);a.className="calendar-box";document.getElementsByTagName("body")[0].insertBefore(a,document.getElementsByTagName("body")[0].firstChild)}}}(function(){window.addListener=(function(){return window.addEventListener?function(e,d,c){e.addEventListener(d,c,false)}:function(e,d,c){e.attachEvent("on"+d,c)}})();var a=function(f){var i=f.getBoundingClientRect();var j=document.body;var d=document.documentElement;var c=window.pageYOffset||d.scrollTop||j.scrollTop;var g=window.pageXOffset||d.scrollLeft||j.scrollLeft;var h=d.clientTop||j.clientTop||0;var k=d.clientLeft||j.clientLeft||0;var l=i.top+c-h;var e=i.left+g-k;return{top:Math.round(l),left:Math.round(e)}};var b=function(c){var e=0,d=0;while(c){e=e+parseInt(c.offsetTop);d=d+parseInt(c.offsetLeft);c=c.offsetParent}return{top:e,left:d}};window.getOffset=function(c){if(c.getBoundingClientRect){return a(c)}else{return b(c)}}})();