EVOLUTION-NINJA
Edit File: bootstrap-datepicker.js
!function(e){var t=function(t,a){if(this.element=e(t),this.format=s.parseFormat(a.format||this.element.data("date-format")||"mm/dd/yyyy"),this.picker=e(s.template).appendTo("body").on({click:e.proxy(this.click,this)}),this.isInput=this.element.is("input"),this.component=!!this.element.is(".date")&&this.element.find(".add-on"),this.isInput?this.element.on({focus:e.proxy(this.show,this),keyup:e.proxy(this.update,this)}):this.component?this.component.on("click",e.proxy(this.show,this)):this.element.on("click",e.proxy(this.show,this)),this.minViewMode=a.minViewMode||this.element.data("date-minviewmode")||0,"string"==typeof this.minViewMode)switch(this.minViewMode){case"months":this.minViewMode=1;break;case"years":this.minViewMode=2;break;default:this.minViewMode=0}if(this.viewMode=a.viewMode||this.element.data("date-viewmode")||0,"string"==typeof this.viewMode)switch(this.viewMode){case"months":this.viewMode=1;break;case"years":this.viewMode=2;break;default:this.viewMode=0}this.startViewMode=this.viewMode,this.weekStart=a.weekStart||this.element.data("date-weekstart")||0,this.weekEnd=0===this.weekStart?6:this.weekStart-1,this.onRender=a.onRender,this.fillDow(),this.fillMonths(),this.update(),this.showMode()};t.prototype={constructor:t,show:function(t){this.picker.show(),this.height=this.component?this.component.outerHeight():this.element.outerHeight(),this.place(),e(window).on("resize",e.proxy(this.place,this)),t&&(t.stopPropagation(),t.preventDefault()),this.isInput;var s=this;e(document).on("mousedown",function(t){0==e(t.target).closest(".datepicker").length&&s.hide()}),this.element.trigger({type:"show",date:this.date})},hide:function(){this.picker.hide(),e(window).off("resize",this.place),this.viewMode=this.startViewMode,this.showMode(),this.isInput||e(document).off("mousedown",this.hide),this.element.trigger({type:"hide",date:this.date})},set:function(){var e=s.formatDate(this.date,this.format);this.isInput?this.element.prop("value",e):(this.component&&this.element.find("input").prop("value",e),this.element.data("date",e))},setValue:function(e){this.date="string"==typeof e?s.parseDate(e,this.format):new Date(e),this.set(),this.viewDate=new Date(this.date.getFullYear(),this.date.getMonth(),1,0,0,0,0),this.fill()},place:function(){var e=this.component?this.component.offset():this.element.offset();this.picker.css({top:e.top+this.height,left:e.left})},update:function(e){this.date=s.parseDate("string"==typeof e?e:this.isInput?this.element.prop("value"):this.element.data("date"),this.format),this.viewDate=new Date(this.date.getFullYear(),this.date.getMonth(),1,0,0,0,0),this.fill()},fillDow:function(){for(var e=this.weekStart,t="<tr>";e<this.weekStart+7;)t+='<th class="dow">'+s.dates.daysMin[e++%7]+"</th>";t+="</tr>",this.picker.find(".datepicker-days thead").append(t)},fillMonths:function(){for(var e="",t=0;t<12;)e+='<span class="month">'+s.dates.monthsShort[t++]+"</span>";this.picker.find(".datepicker-months td").append(e)},fill:function(){var e=new Date(this.viewDate),t=e.getFullYear(),a=e.getMonth(),i=this.date.valueOf();this.picker.find(".datepicker-days th:eq(1)").text(s.dates.months[a]+" "+t);var n=new Date(t,a-1,28,0,0,0,0),h=s.getDaysInMonth(n.getFullYear(),n.getMonth());n.setDate(h),n.setDate(h-(n.getDay()-this.weekStart+7)%7);var o=new Date(n);o.setDate(o.getDate()+42),o=o.valueOf();for(var r,d,l,c=[];n.valueOf()<o;)n.getDay()===this.weekStart&&c.push("<tr>"),r=this.onRender(n),d=n.getFullYear(),(l=n.getMonth())<a&&d===t||d<t?r+=" old":(l>a&&d===t||d>t)&&(r+=" new"),n.valueOf()===i&&(r+=" active"),c.push('<td class="day '+r+'">'+n.getDate()+"</td>"),n.getDay()===this.weekEnd&&c.push("</tr>"),n.setDate(n.getDate()+1);this.picker.find(".datepicker-days tbody").empty().append(c.join(""));var p=this.date.getFullYear(),m=this.picker.find(".datepicker-months").find("th:eq(1)").text(t).end().find("span").removeClass("active");p===t&&m.eq(this.date.getMonth()).addClass("active"),c="",t=10*parseInt(t/10,10);var u=this.picker.find(".datepicker-years").find("th:eq(1)").text(t+"-"+(t+9)).end().find("td");t-=1;for(var w=-1;w<11;w++)c+='<span class="year'+(-1===w||10===w?" old":"")+(p===t?" active":"")+'">'+t+"</span>",t+=1;u.html(c)},click:function(t){t.stopPropagation(),t.preventDefault();var a=e(t.target).closest("span, td, th");if(1===a.length)switch(a[0].nodeName.toLowerCase()){case"th":switch(a[0].className){case"switch":this.showMode(1);break;case"prev":case"next":this.viewDate["set"+s.modes[this.viewMode].navFnc].call(this.viewDate,this.viewDate["get"+s.modes[this.viewMode].navFnc].call(this.viewDate)+s.modes[this.viewMode].navStep*("prev"===a[0].className?-1:1)),this.fill(),this.set()}break;case"span":if(a.is(".month")){var i=a.parent().find("span").index(a);this.viewDate.setMonth(i)}else{var n=parseInt(a.text(),10)||0;this.viewDate.setFullYear(n)}0!==this.viewMode&&(this.date=new Date(this.viewDate),this.element.trigger({type:"changeDate",date:this.date,viewMode:s.modes[this.viewMode].clsName})),this.showMode(-1),this.fill(),this.set();break;case"td":if(a.is(".day")&&!a.is(".disabled")){var h=parseInt(a.text(),10)||1;i=this.viewDate.getMonth();a.is(".old")?i-=1:a.is(".new")&&(i+=1);n=this.viewDate.getFullYear();this.date=new Date(n,i,h,0,0,0,0),this.viewDate=new Date(n,i,Math.min(28,h),0,0,0,0),this.fill(),this.set(),this.element.trigger({type:"changeDate",date:this.date,viewMode:s.modes[this.viewMode].clsName})}}},mousedown:function(e){e.stopPropagation(),e.preventDefault()},showMode:function(e){e&&(this.viewMode=Math.max(this.minViewMode,Math.min(2,this.viewMode+e))),this.picker.find(">div").hide().filter(".datepicker-"+s.modes[this.viewMode].clsName).show()}},e.fn.datepicker=function(s,a){return this.each(function(){var i=e(this),n=i.data("datepicker"),h="object"==typeof s&&s;n||i.data("datepicker",n=new t(this,e.extend({},e.fn.datepicker.defaults,h))),"string"==typeof s&&n[s](a)})},e.fn.datepicker.defaults={onRender:function(e){return""}},e.fn.datepicker.Constructor=t;var s={modes:[{clsName:"days",navFnc:"Month",navStep:1},{clsName:"months",navFnc:"FullYear",navStep:1},{clsName:"years",navFnc:"FullYear",navStep:10}],dates:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa","Su"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]},isLeapYear:function(e){return e%4==0&&e%100!=0||e%400==0},getDaysInMonth:function(e,t){return[31,s.isLeapYear(e)?29:28,31,30,31,30,31,31,30,31,30,31][t]},parseFormat:function(e){var t=e.match(/[.\/\-\s].*?/),s=e.split(/\W+/);if(!t||!s||0===s.length)throw new Error("Invalid date format.");return{separator:t,parts:s}},parseDate:function(e,t){var s,a=e.split(t.separator);if((e=new Date).setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0),a.length===t.parts.length){for(var i=e.getFullYear(),n=e.getDate(),h=e.getMonth(),o=0,r=t.parts.length;o<r;o++)switch(s=parseInt(a[o],10)||1,t.parts[o]){case"dd":case"d":n=s,e.setDate(s);break;case"mm":case"m":h=s-1,e.setMonth(s-1);break;case"yy":i=2e3+s,e.setFullYear(2e3+s);break;case"yyyy":i=s,e.setFullYear(s)}e=new Date(i,h,n,0,0,0)}return e},formatDate:function(e,t){var s={d:e.getDate(),m:e.getMonth()+1,yy:e.getFullYear().toString().substring(2),yyyy:e.getFullYear()};s.dd=(s.d<10?"0":"")+s.d,s.mm=(s.m<10?"0":"")+s.m;e=[];for(var a=0,i=t.parts.length;a<i;a++)e.push(s[t.parts[a]]);return e.join(t.separator)},headTemplate:'<thead><tr><th class="prev">‹</th><th colspan="5" class="switch"></th><th class="next">›</th></tr></thead>',contTemplate:'<tbody><tr><td colspan="7"></td></tr></tbody>'};s.template='<div class="datepicker dropdown-menu"><div class="datepicker-days"><table class=" table-condensed">'+s.headTemplate+'<tbody></tbody></table></div><div class="datepicker-months"><table class="table-condensed">'+s.headTemplate+s.contTemplate+'</table></div><div class="datepicker-years"><table class="table-condensed">'+s.headTemplate+s.contTemplate+"</table></div></div>"}(window.jQuery);