diff --git a/README.md b/README.md
index a4b9a4c..1deac58 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,14 @@
+本家からの変更点
+=============
+- datepicker要素に ng-modelを設定して、日付選択時にこの値が更新される
+- 内部にinputを置くのは変わらないが、日付選択時にinputのvalueは変更されない
+- clear-text指定で上部にクリアボタンを表示
+```
+                  <datepicker datepicker-class="align-right" button-prev="<i class='fa fa-arrow-left'></i>" button-next="<i class='fa fa-arrow-right'></i>" ng-change="vm.getList(true)" clear-text="取消" ng-model="vm.search_todo.expect_time">
+                    <input type="button" ng-value="vm.search_todo.expect_time ? (vm.search_todo.expect_time | jpdateFilter:'year_month_day') : '予定日'">
+                  </datepicker>
+```
+
 Angular Datepicker
 ==================
 ![Angular datepicker calendar](http://i.imgur.com/jKfADtA.png)
diff --git a/dist/angular-datepicker.css b/dist/angular-datepicker.css
index 4a26ee9..4c5d763 100644
--- a/dist/angular-datepicker.css
+++ b/dist/angular-datepicker.css
@@ -5,9 +5,9 @@ datepicker a, [datepicker] a, .datepicker a{
 datepicker a:hover, [datepicker] a:hover, .datepicker a:hover{
   text-decoration:none;
 }
-datepicker select, datepicker select:focus, datepicker select:hover,
-.datepicker select, .datepicker select:focus, .datepicker select:hover,
-[datepicker] select, [datepicker] select:focus, [datepicker] select:hover{
+datepicker select._720kb-datepicker-calendar-select,
+.datepicker select._720kb-datepicker-calendar-select,
+[datepicker] select._720kb-datepicker-calendar-select {
   width:100%;
    overflow: hidden;
    background:none;
@@ -23,14 +23,13 @@ datepicker, .datepicker, [datepicker],
 ._720kb-datepicker-calendar-days-header,
 ._720kb-datepicker-calendar-years-pagination-pages {
   font-family: Helvetica Neue, Arial, sans-serif;
-  font-size: 13.5px;
+  font-size: inherit;
   -webkit-box-sizing: border-box;
   -moz-box-sizing: border-box;
   -ms-box-sizing: border-box;
   box-sizing: border-box;
   width: 100%;
   margin: 0 auto;
-  float: left;
   clear: right;
   position: relative;
 }
@@ -60,13 +59,17 @@ datepicker, .datepicker, [datepicker],
   text-align: center;
   font-size: 15px;
   line-height: 40px;
-}
-._720kb-datepicker-calendar-header:nth-child(odd) {
   background: #138EFA;
 }
 ._720kb-datepicker-calendar-header:nth-child(even) {
   background: #7BC6FC;
 }
+._720kb-datepicker-calendar-header-clear {
+  background: #DDDDDD;
+}
+._720kb-datepicker-calendar-header-container {
+   height:40px;
+}
 ._720kb-datepicker-calendar-header-left,
 ._720kb-datepicker-calendar-header-middle,
 ._720kb-datepicker-calendar-header-right {
@@ -109,9 +112,16 @@ datepicker, .datepicker, [datepicker],
   -moz-border-radius: 1px;
   border-radius: 1px;
 }
-._720kb-datepicker-calendar-day:hover,
+._720kb-datepicker-calendar-day:hover {
+  background: #d0e9ff;
+}
+._720kb-datepicker-calendar-day._720kb-datepicker-today {
+  background: #777;
+  color: #fff;
+}
 ._720kb-datepicker-calendar-day._720kb-datepicker-active {
-  background: rgba(0, 0, 0, 0.03);
+  background: #138efa;
+  color: #fff;
 }
 ._720kb-datepicker-calendar-header a, ._720kb-datepicker-calendar-header a:hover {
   text-decoration:none;
@@ -144,7 +154,6 @@ datepicker, .datepicker, [datepicker],
 }
 ._720kb-datepicker-calendar-years-pagination{
   padding:2% 0 0 0;
-  float:left;
   clear: right;
   width: 100%;
 }
diff --git a/dist/angular-datepicker.js b/dist/angular-datepicker.js
index 971dbc9..7a504b4 100644
--- a/dist/angular-datepicker.js
+++ b/dist/angular-datepicker.js
@@ -1,11 +1,14 @@
 /*global angular document navigator*/
-(function withAngular(angular, navigator) {
+(function withAngular(angular /*, navigator*/) {
 
   'use strict';
 
   var A_DAY_IN_MILLISECONDS = 86400000
     , isMobile = (function isMobile() {
+      // mobile off 動作確認後戻す
+      return false;
 
+      /*
       if (navigator.userAgent &&
         (navigator.userAgent.match(/Android/i) ||
         navigator.userAgent.match(/webOS/i) ||
@@ -17,6 +20,7 @@
 
         return true;
       }
+      */
     }())
     , generateMonthAndYearHeader = function generateMonthAndYearHeader(prevButton, nextButton, preventMobile) {
 
@@ -30,7 +34,7 @@
         return [
           '<div class="_720kb-datepicker-calendar-header">',
             '<div class="_720kb-datepicker-calendar-header-middle _720kb-datepicker-mobile-item _720kb-datepicker-calendar-month">',
-              '<select ng-model="month" title="{{ dateMonthTitle }}" ng-change="selectedMonthHandle(month)">',
+              '<select class="_720kb-datepicker-calendar-select" ng-model="month" title="{{ dateMonthTitle }}" ng-change="selectedMonthHandle(month)">',
                 '<option ng-repeat="item in months" ng-selected="item === month" ng-disabled=\'!isSelectableMaxDate(item + " " + day + ", " + year) || !isSelectableMinDate(item + " " + day + ", " + year)\' ng-value="$index + 1" value="$index + 1">',
                   '{{ item }}',
                 '</option>',
@@ -39,7 +43,7 @@
           '</div>',
           '<div class="_720kb-datepicker-calendar-header">',
             '<div class="_720kb-datepicker-calendar-header-middle _720kb-datepicker-mobile-item _720kb-datepicker-calendar-month">',
-              '<select ng-model="mobileYear" title="{{ dateYearTitle }}" ng-change="setNewYear(mobileYear)">',
+              '<select class="_720kb-datepicker-calendar-select" ng-model="mobileYear" title="{{ dateYearTitle }}" ng-change="setNewYear(mobileYear)">',
                 '<option ng-repeat="item in paginationYears track by $index" ng-selected="year === item" ng-disabled="!isSelectableMinYear(item) || !isSelectableMaxYear(item)" ng-value="item" value="item">',
                   '{{ item }}',
                 '</option>',
@@ -51,24 +55,27 @@
 
       return [
         '<div class="_720kb-datepicker-calendar-header">',
-          '<div class="_720kb-datepicker-calendar-header-left">',
-            '<a class="_720kb-datepicker-calendar-month-button" href="javascript:void(0)" ng-class="{\'_720kb-datepicker-item-hidden\': !willPrevMonthBeSelectable()}" ng-click="prevMonth()" title="{{ buttonPrevTitle }}">',
-              prevButton,
-            '</a>',
-          '</div>',
-          '<div class="_720kb-datepicker-calendar-header-middle _720kb-datepicker-calendar-month">',
-            '{{month}}&nbsp;',
-            '<a href="javascript:void(0)" ng-click="paginateYears(year); showYearsPagination = !showYearsPagination;">',
-              '<span>',
-                '{{year}}',
-                '<i ng-class="{\'_720kb-datepicker-calendar-header-closed-pagination\': !showYearsPagination, \'_720kb-datepicker-calendar-header-opened-pagination\': showYearsPagination}"></i>',
-              '</span>',
+          '<div ng-if="clearText" class="_720kb-datepicker-calendar-header-clear"><a ng-click="clear();$event.stopPropagation()">{{clearText}}</a></div>',
+          '<div class="_720kb-datepicker-calendar-header-container">',
+            '<div class="_720kb-datepicker-calendar-header-left">',
+              '<a class="_720kb-datepicker-calendar-month-button" href="javascript:void(0)" ng-class="{\'_720kb-datepicker-item-hidden\': !willPrevMonthBeSelectable()}" ng-click="prevMonth();$event.stopPropagation()" title="{{ buttonPrevTitle }}">',
+                prevButton,
+              '</a>',
+            '</div>',
+            '<div class="_720kb-datepicker-calendar-header-middle _720kb-datepicker-calendar-month">',
+              '{{month}}&nbsp;',
+              '<a href="javascript:void(0)" ng-click="paginateYears(year); showYearsPagination = !showYearsPagination;$event.stopPropagation()">',
+                '<span>',
+                  '{{year}}',
+                  '<i ng-class="{\'_720kb-datepicker-calendar-header-closed-pagination\': !showYearsPagination, \'_720kb-datepicker-calendar-header-opened-pagination\': showYearsPagination}"></i>',
+                '</span>',
+              '</a>',
+            '</div>',
+            '<div class="_720kb-datepicker-calendar-header-right">',
+            '<a class="_720kb-datepicker-calendar-month-button" ng-class="{\'_720kb-datepicker-item-hidden\': !willNextMonthBeSelectable()}" href="javascript:void(0)" ng-click="nextMonth();$event.stopPropagation()" title="{{ buttonNextTitle }}">',
+              nextButton,
             '</a>',
-          '</div>',
-          '<div class="_720kb-datepicker-calendar-header-right">',
-          '<a class="_720kb-datepicker-calendar-month-button" ng-class="{\'_720kb-datepicker-item-hidden\': !willNextMonthBeSelectable()}" href="javascript:void(0)" ng-click="nextMonth()" title="{{ buttonNextTitle }}">',
-            nextButton,
-          '</a>',
+            '</div>',
           '</div>',
         '</div>'
       ];
@@ -78,15 +85,15 @@
       return [
         '<div class="_720kb-datepicker-calendar-header" ng-show="showYearsPagination">',
           '<div class="_720kb-datepicker-calendar-years-pagination">',
-            '<a ng-class="{\'_720kb-datepicker-active\': y === year, \'_720kb-datepicker-disabled\': !isSelectableMaxYear(y) || !isSelectableMinYear(y)}" href="javascript:void(0)" ng-click="setNewYear(y)" ng-repeat="y in paginationYears track by $index">',
+            '<a ng-class="{\'_720kb-datepicker-active\': y === year, \'_720kb-datepicker-disabled\': !isSelectableMaxYear(y) || !isSelectableMinYear(y)}" href="javascript:void(0)" ng-click="setNewYear(y);$event.stopPropagation()" ng-repeat="y in paginationYears track by $index">',
               '{{y}}',
             '</a>',
           '</div>',
           '<div class="_720kb-datepicker-calendar-years-pagination-pages">',
-            '<a href="javascript:void(0)" ng-click="paginateYears(paginationYears[0])" ng-class="{\'_720kb-datepicker-item-hidden\': paginationYearsPrevDisabled}">',
+            '<a href="javascript:void(0)" ng-click="paginateYears(paginationYears[0]);$event.stopPropagation()" ng-class="{\'_720kb-datepicker-item-hidden\': paginationYearsPrevDisabled}">',
               prevButton,
             '</a>',
-            '<a href="javascript:void(0)" ng-click="paginateYears(paginationYears[paginationYears.length -1 ])" ng-class="{\'_720kb-datepicker-item-hidden\': paginationYearsNextDisabled}">',
+            '<a href="javascript:void(0)" ng-click="paginateYears(paginationYears[paginationYears.length -1 ]);$event.stopPropagation()" ng-class="{\'_720kb-datepicker-item-hidden\': paginationYearsNextDisabled}">',
               nextButton,
             '</a>',
           '</div>',
@@ -110,7 +117,7 @@
           '<a href="javascript:void(0)" ng-repeat="px in prevMonthDays" class="_720kb-datepicker-calendar-day _720kb-datepicker-disabled">',
             '{{px}}',
           '</a>',
-          '<a href="javascript:void(0)" ng-repeat="item in days" ng-click="setDatepickerDay(item)" ng-class="{\'_720kb-datepicker-active\': selectedDay === item && selectedMonth === monthNumber && selectedYear === year, \'_720kb-datepicker-disabled\': !isSelectableMinDate(year + \'/\' + monthNumber + \'/\' + item ) || !isSelectableMaxDate(year + \'/\' + monthNumber + \'/\' + item) || !isSelectableDate(monthNumber, year, item) || !isSelectableDay(monthNumber, year, item),\'_720kb-datepicker-today\': item === today.getDate() && monthNumber === (today.getMonth() + 1) && year === today.getFullYear() && !selectedDay}" class="_720kb-datepicker-calendar-day">',
+          '<a href="javascript:void(0)" ng-repeat="item in days" ng-click="setDatepickerDay(item);$event.stopPropagation()" ng-class="{\'_720kb-datepicker-active\': selectedDay === item && selectedMonth === monthNumber && selectedYear === year, \'_720kb-datepicker-disabled\': !isSelectableMinDate(year + \'/\' + monthNumber + \'/\' + item ) || !isSelectableMaxDate(year + \'/\' + monthNumber + \'/\' + item) || !isSelectableDate(monthNumber, year, item) || !isSelectableDay(monthNumber, year, item),\'_720kb-datepicker-today\': item === today.getDate() && monthNumber === (today.getMonth() + 1) && year === today.getFullYear()}" class="_720kb-datepicker-calendar-day">',
             '{{item}}',
           '</a>',
           '<a href="javascript:void(0)" ng-repeat="nx in nextMonthDays" class="_720kb-datepicker-calendar-day _720kb-datepicker-disabled">',
@@ -141,16 +148,16 @@
 
       return toReturn.join('');
     }
-    , datepickerDirective = function datepickerDirective($window, $compile, $locale, $filter, $interpolate, $timeout) {
+    , datepickerDirective = function datepickerDirective($document, $compile, $locale, $filter, $interpolate, $timeout) {
 
-      var linkingFunction = function linkingFunction($scope, element, attr) {
+      var linkingFunction = function linkingFunction($scope, element, attr, ngModelCtrl) {
 
         //get child input
         var selector = attr.selector
           , thisInput = angular.element(selector ? element[0].querySelector('.' + selector) : element[0].children[0])
           , theCalendar
-          , defaultPrevButton = '<b class="_720kb-datepicker-default-button">&lang;</b>'
-          , defaultNextButton = '<b class="_720kb-datepicker-default-button">&rang;</b>'
+          , defaultPrevButton = '<i class="fa fa-arrow-left"></i>'
+          , defaultNextButton = '<i class="fa fa-arrow-right"></i>'
           , prevButton = attr.buttonPrev || defaultPrevButton
           , nextButton = attr.buttonNext || defaultNextButton
           , dateFormat = attr.dateFormat
@@ -338,18 +345,29 @@
             if ($scope.isSelectableMinDate($scope.year + '/' + $scope.monthNumber + '/' + $scope.day) &&
                 $scope.isSelectableMaxDate($scope.year + '/' + $scope.monthNumber + '/' + $scope.day)) {
 
-              var modelDate = new Date($scope.year + '/' + $scope.monthNumber + '/' + $scope.day);
-
-              if (attr.dateFormat) {
-
-                thisInput.val($filter('date')(modelDate, dateFormat));
+              // $scope.watchにひっかかるように、Dateオブジェクトを作り直す(オブジェクトのアドレスを更新)
+              // and 年月日以外の値を保持して更新する
+              var modelDate = ngModelCtrl.$viewValue;
+
+              if (modelDate instanceof Date){
+                modelDate = new Date(modelDate.getTime());
+                modelDate.setYear($scope.year);
+                modelDate.setMonth($scope.monthNumber - 1);
+                modelDate.setDate($scope.day);
+              } else if (typeof modelDate === 'string') {
+                modelDate = new Date(modelDate);
+                modelDate.setYear($scope.year);
+                modelDate.setMonth($scope.monthNumber - 1);
+                modelDate.setDate($scope.day);
               } else {
+                modelDate = new Date($scope.year + '/' + $scope.monthNumber + '/' + $scope.day);
+              }
 
-                thisInput.val(modelDate);
+              if (attr.dateFormat) {
+                modelDate = $filter('date')(modelDate, dateFormat);
               }
+              ngModelCtrl.$setViewValue(modelDate);
 
-              thisInput.triggerHandler('input');
-              thisInput.triggerHandler('change');//just to be sure;
             } else {
 
               return false;
@@ -390,8 +408,9 @@
             }
           }
           , showCalendar = function showCalendar() {
+            $scope.isShowed = true;
             //lets hide all the latest instances of datepicker
-            pageDatepickers = $window.document.getElementsByClassName('_720kb-datepicker-calendar');
+            pageDatepickers = document.getElementsByClassName('_720kb-datepicker-calendar');
 
             angular.forEach(pageDatepickers, function forEachDatepickerPages(value, key) {
               if (pageDatepickers[key].classList) {
@@ -407,9 +426,9 @@
 
               theCalendar.classList.add('_720kb-datepicker-open');
               if (dateFormat) {
-                date = localDateTimestamp(thisInput[0].value.toString(), dateFormat);
+                date = localDateTimestamp(String(ngModelCtrl.$viewValue).toString(), dateFormat);
               } else {
-                date = new Date(thisInput[0].value.toString());
+                date = new Date(String(ngModelCtrl.$viewValue).toString());
               }
               $scope.selectedMonth = Number($filter('date')(date, 'MM'));
               $scope.selectedDay = Number($filter('date')(date, 'dd'));
@@ -445,9 +464,9 @@
               return false;
             }
             if (dateFormat) {
-              date = localDateTimestamp(thisInput[0].value.toString(), dateFormat);
+              date = localDateTimestamp(ngModelCtrl.$viewValue.toString(), dateFormat);
             } else {
-              date = new Date(thisInput[0].value.toString());
+              date = new Date(ngModelCtrl.$viewValue.toString());
             }
             $scope.selectedMonth = Number($filter('date')(date, 'MM'));
             $scope.selectedDay = Number($filter('date')(date, 'dd'));
@@ -493,9 +512,7 @@
               dateDisabledDates = $scope.$eval(newValue);
 
               if (!$scope.isSelectableDate($scope.monthNumber, $scope.year, $scope.day)) {
-                thisInput.val('');
-                thisInput.triggerHandler('input');
-                thisInput.triggerHandler('change');//just to be sure;
+                ngModelCtrl.$setViewValue(null);
               }
             }
           })
@@ -504,9 +521,7 @@
               dateEnabledDates = $scope.$eval(newValue);
 
               if (!$scope.isSelectableDate($scope.monthNumber, $scope.year, $scope.day)) {
-                thisInput.val('');
-                thisInput.triggerHandler('input');
-                thisInput.triggerHandler('change');//just to be sure;
+                ngModelCtrl.$setViewValue(null);
               }
             }
           });
@@ -615,7 +630,10 @@
         };
 
         $scope.selectedMonthHandle = function manageSelectedMonthHandle(selectedMonthNumber) {
-
+          if (selectedMonthNumber === null) {
+            // iphoneのsafariで初期化時にselectedMonthNumber=nullで呼ばれる
+            return;
+          }
           $scope.monthNumber = Number($filter('date')(new Date(selectedMonthNumber + '/01/2000'), 'MM'));
           setDaysInMonth($scope.monthNumber, $scope.year);
           setInputValue();
@@ -653,6 +671,7 @@
         };
 
         $scope.hideCalendar = function hideCalendar() {
+          $scope.isShowed = false;
           if (theCalendar.classList) {
             theCalendar.classList.remove('_720kb-datepicker-open');
           } else {
@@ -716,15 +735,15 @@
 
             thisInput.on('keyup blur', function onTyping() {
 
-              if (thisInput[0].value &&
-                thisInput[0].value.length &&
-                thisInput[0].value.length > 0) {
+              if (ngModelCtrl.$viewValue &&
+                ngModelCtrl.$viewValue.length &&
+                ngModelCtrl.$viewValue.length > 0) {
 
                 try {
                   if (dateFormat) {
-                    date = localDateTimestamp(thisInput[0].value.toString(), dateFormat);
+                    date = localDateTimestamp(ngModelCtrl.$viewValue.toString(), dateFormat);
                   } else {
-                    date = new Date(thisInput[0].value.toString());
+                    date = new Date(ngModelCtrl.$viewValue.toString());
                   }
 
                   if (date.getFullYear() &&
@@ -879,6 +898,11 @@
           return validWeekDay;
         };
 
+        $scope.clear = function clear() {
+          ngModelCtrl.$setViewValue(null);
+          $scope.hideCalendar();
+        };
+
         // respect previously configured interpolation symbols.
         htmlTemplate = htmlTemplate.replace(/{{/g, $interpolate.startSymbol()).replace(/}}/g, $interpolate.endSymbol());
         $scope.dateMonthTitle = $scope.dateMonthTitle || 'Select month';
@@ -942,8 +966,38 @@
         //if datepicker-toggle="" is not present or true by default
         if (checkToggle()) {
 
-          thisInput.on('focus click focusin', function onFocusAndClick() {
+          thisInput.on('click', function onFocusAndClick(event) {
+            if (event.target.nodeName !== 'INPUT') {
+              // input以外の場合は無視する
+              return;
+            }
+            if (event.target.type !== 'button') {
+              // button以外は除く
+              return;
+            }
 
+            event.stopPropagation();
+            isMouseOnInput = true;
+
+            if (!isMouseOn &&
+            !isMouseOnInput && theCalendar || $scope.isShowed) {
+
+              $scope.hideCalendar();
+            } else {
+
+              showCalendar();
+            }
+          });
+
+          thisInput.on('focusin focus', function onFocusAndClick(event) {
+            if (event.target.nodeName !== 'INPUT') {
+              // input以外の場合は無視する
+              return;
+            }
+            if (event.target.type === 'button') {
+              // buttonは除く
+              return;
+            }
             isMouseOnInput = true;
 
             if (!isMouseOn &&
@@ -958,8 +1012,14 @@
         }
 
         thisInput.on('focusout blur', function onBlurAndFocusOut() {
-
+          // focusout/blurの場合、フォーカス外れた時のevent.targetはINPUT以外の要素
           isMouseOnInput = false;
+
+          if (!isMouseOn &&
+            !isMouseOnInput && theCalendar) {
+
+            $scope.hideCalendar();
+          }
         });
         //some tricky dirty events to fire if click is outside of the calendar and show/hide calendar when needed
         angular.element(theCalendar).on('mouseenter', function onMouseEnter() {
@@ -977,7 +1037,7 @@
           isMouseOn = true;
         });
 
-        angular.element($window).on('click focus focusin', onClickOnWindow);
+        $document.on('click focus focusin', onClickOnWindow);
 
         //check always if given range of dates is ok
         if ($scope.dateMinLimit &&
@@ -1010,11 +1070,12 @@
           unregisterDateEnabledDatesWatcher();
           thisInput.off('focus click focusout blur');
           angular.element(theCalendar).off('mouseenter mouseleave focusin');
-          angular.element($window).off('click focus focusin', onClickOnWindow);
+          $document.off('click focus focusin', onClickOnWindow);
         });
       };
 
       return {
+        'require': 'ngModel',
         'restrict': 'AEC',
         'scope': {
           'dateSet': '@',
@@ -1033,12 +1094,13 @@
           'datepickerAppendTo': '@',
           'datepickerToggle': '@',
           'datepickerClass': '@',
-          'datepickerShow': '@'
+          'datepickerShow': '@',
+          'clearText': '@'
         },
         'link': linkingFunction
       };
     };
 
   angular.module('720kb.datepicker', [])
-               .directive('datepicker', ['$window', '$compile', '$locale', '$filter', '$interpolate', '$timeout', datepickerDirective]);
+               .directive('datepicker', ['$document', '$compile', '$locale', '$filter', '$interpolate', '$timeout', datepickerDirective]);
 }(angular, navigator));
diff --git a/dist/angular-datepicker.min.css b/dist/angular-datepicker.min.css
index 5967e84..4b181e2 100644
--- a/dist/angular-datepicker.min.css
+++ b/dist/angular-datepicker.min.css
@@ -1 +1 @@
-.datepicker a,[datepicker] a,datepicker a{color:inherit;text-decoration:none}.datepicker a:hover,[datepicker] a:hover,datepicker a:hover{text-decoration:none}.datepicker select,.datepicker select:focus,.datepicker select:hover,[datepicker] select,[datepicker] select:focus,[datepicker] select:hover,datepicker select,datepicker select:focus,datepicker select:hover{width:100%;overflow:hidden;background:0 0;color:#fff;background-color:#138efa;border-radius:2px;border:0;margin-top:5px}._720kb-datepicker-calendar-body,._720kb-datepicker-calendar-days-header,._720kb-datepicker-calendar-header,._720kb-datepicker-calendar-years-pagination-pages,.datepicker,[datepicker],datepicker{font-family:Helvetica Neue,Arial,sans-serif;font-size:13.5px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;width:100%;margin:0 auto;float:left;clear:right;position:relative}._720kb-datepicker-calendar{background:#fff;color:#333;position:absolute;z-index:999;min-width:220px;margin:0 auto;width:101%;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;-moz-box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;visibility:hidden;overflow:hidden;margin-left:-.5%;padding:0 0 2% 0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}._720kb-datepicker-calendar._720kb-datepicker-forced-to-open,._720kb-datepicker-calendar._720kb-datepicker-open{visibility:visible}._720kb-datepicker-calendar-header{text-align:center;font-size:15px;line-height:40px}._720kb-datepicker-calendar-header:nth-child(odd){background:#138efa}._720kb-datepicker-calendar-header:nth-child(even){background:#7bc6fc}._720kb-datepicker-calendar-header-left,._720kb-datepicker-calendar-header-middle,._720kb-datepicker-calendar-header-right{width:15%;float:left}._720kb-datepicker-calendar-header-middle{width:70%}._720kb-datepicker-calendar-header-closed-pagination::after{content:" \25BE"}._720kb-datepicker-calendar-header-opened-pagination::after{content:" \25BE";margin-left:4px;position:relative;bottom:-3px;display:inline-block;-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-o-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}._720kb-datepicker-calendar-body{width:96%;margin:2%;text-align:center}._720kb-datepicker-calendar-day{cursor:pointer;font-size:12.5px;width:12.2%;margin:5px 1%;padding:1.5% 0;float:left;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}._720kb-datepicker-calendar-day._720kb-datepicker-active,._720kb-datepicker-calendar-day:hover{background:rgba(0,0,0,.03)}._720kb-datepicker-calendar-header a,._720kb-datepicker-calendar-header a:hover{text-decoration:none;padding:3% 9% 4% 9%;font-size:13.5px;color:rgba(0,0,0,.55);font-weight:700;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}._720kb-datepicker-calendar-header a:hover{color:rgba(0,0,0,.9);background:rgba(255,255,255,.45)}._720kb-datepicker-calendar-month{color:#fff}._720kb-datepicker-calendar-month span{font-size:13px;color:rgba(0,0,0,.4)}._720kb-datepicker-calendar-month a span i{font-style:normal;font-size:15px}._720kb-datepicker-calendar-month a,._720kb-datepicker-calendar-month a:hover{padding:3px;margin-left:1%}._720kb-datepicker-calendar-years-pagination{padding:2% 0 0 0;float:left;clear:right;width:100%}._720kb-datepicker-calendar-years-pagination a,._720kb-datepicker-calendar-years-pagination a:hover{font-size:12px;padding:0 7px;font-weight:400;margin:3px 1% 0 1%;line-height:20px;display:inline-block}._720kb-datepicker-calendar-years-pagination a._720kb-datepicker-active{color:rgba(0,0,0,.9);font-weight:500;background:rgba(255,255,255,.45)}._720kb-datepicker-calendar-years-pagination-pages a,._720kb-datepicker-calendar-years-pagination-pages a:hover{padding:5px 10px}._720kb-datepicker-calendar-days-header{max-width:100%;margin:0 auto;padding:0 2% 0 2%;background:rgba(19,142,250,.08);border-bottom:1px solid rgba(0,0,0,.02)}._720kb-datepicker-calendar-days-header div{width:14.18%;font-weight:500;font-size:11.5px;padding:10px 0;float:left;text-align:center;color:rgba(0,0,0,.7)}._720kb-datepicker-calendar-days ._720kb-datepicker-default-button{font-size:18.5px;position:relative;bottom:-.5px}._720kb-datepicker-default-button{padding:0 4.5px}._720kb-datepicker-calendar-header-middle._720kb-datepicker-mobile-item{width:95%;float:none;margin:0 auto}._720kb-datepicker-item-hidden{visibility:hidden}._720kb-datepicker-calendar-day._720kb-datepicker-disabled,._720kb-datepicker-calendar-day._720kb-datepicker-disabled:hover,._720kb-datepicker-calendar-years-pagination a._720kb-datepicker-active._720kb-datepicker-disabled,._720kb-datepicker-calendar-years-pagination a._720kb-datepicker-active._720kb-datepicker-disabled:hover,._720kb-datepicker-calendar-years-pagination a._720kb-datepicker-disabled,._720kb-datepicker-calendar-years-pagination a._720kb-datepicker-disabled:hover{color:rgba(0,0,0,.2);background:rgba(25,2,0,.02);cursor:default}
\ No newline at end of file
+.datepicker a,[datepicker] a,datepicker a{color:inherit;text-decoration:none}.datepicker a:hover,[datepicker] a:hover,datepicker a:hover{text-decoration:none}.datepicker select._720kb-datepicker-calendar-select,[datepicker] select._720kb-datepicker-calendar-select,datepicker select._720kb-datepicker-calendar-select{width:100%;overflow:hidden;background:0 0;color:#fff;background-color:#138efa;border-radius:2px;border:0;margin-top:5px}._720kb-datepicker-calendar-body,._720kb-datepicker-calendar-days-header,._720kb-datepicker-calendar-header,._720kb-datepicker-calendar-years-pagination-pages,.datepicker,[datepicker],datepicker{font-family:Helvetica Neue,Arial,sans-serif;font-size:inherit;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;width:100%;margin:0 auto;clear:right;position:relative}._720kb-datepicker-calendar{background:#fff;color:#333;position:absolute;z-index:999;min-width:220px;margin:0 auto;width:101%;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;-moz-box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;visibility:hidden;overflow:hidden;margin-left:-.5%;padding:0 0 2% 0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}._720kb-datepicker-calendar._720kb-datepicker-forced-to-open,._720kb-datepicker-calendar._720kb-datepicker-open{visibility:visible}._720kb-datepicker-calendar-header{text-align:center;font-size:15px;line-height:40px;background:#138efa}._720kb-datepicker-calendar-header:nth-child(even){background:#7bc6fc}._720kb-datepicker-calendar-header-clear{background:#ddd}._720kb-datepicker-calendar-header-container{height:40px}._720kb-datepicker-calendar-header-left,._720kb-datepicker-calendar-header-middle,._720kb-datepicker-calendar-header-right{width:15%;float:left}._720kb-datepicker-calendar-header-middle{width:70%}._720kb-datepicker-calendar-header-closed-pagination::after{content:" \25BE"}._720kb-datepicker-calendar-header-opened-pagination::after{content:" \25BE";margin-left:4px;position:relative;bottom:-3px;display:inline-block;-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-o-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}._720kb-datepicker-calendar-body{width:96%;margin:2%;text-align:center}._720kb-datepicker-calendar-day{cursor:pointer;font-size:12.5px;width:12.2%;margin:5px 1%;padding:1.5% 0;float:left;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}._720kb-datepicker-calendar-day:hover{background:#d0e9ff}._720kb-datepicker-calendar-day._720kb-datepicker-today{background:#777;color:#fff}._720kb-datepicker-calendar-day._720kb-datepicker-active{background:#138efa;color:#fff}._720kb-datepicker-calendar-header a,._720kb-datepicker-calendar-header a:hover{text-decoration:none;padding:3% 9% 4% 9%;font-size:13.5px;color:rgba(0,0,0,.55);font-weight:700;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}._720kb-datepicker-calendar-header a:hover{color:rgba(0,0,0,.9);background:rgba(255,255,255,.45)}._720kb-datepicker-calendar-month{color:#fff}._720kb-datepicker-calendar-month span{font-size:13px;color:rgba(0,0,0,.4)}._720kb-datepicker-calendar-month a span i{font-style:normal;font-size:15px}._720kb-datepicker-calendar-month a,._720kb-datepicker-calendar-month a:hover{padding:3px;margin-left:1%}._720kb-datepicker-calendar-years-pagination{padding:2% 0 0 0;clear:right;width:100%}._720kb-datepicker-calendar-years-pagination a,._720kb-datepicker-calendar-years-pagination a:hover{font-size:12px;padding:0 7px;font-weight:400;margin:3px 1% 0 1%;line-height:20px;display:inline-block}._720kb-datepicker-calendar-years-pagination a._720kb-datepicker-active{color:rgba(0,0,0,.9);font-weight:500;background:rgba(255,255,255,.45)}._720kb-datepicker-calendar-years-pagination-pages a,._720kb-datepicker-calendar-years-pagination-pages a:hover{padding:5px 10px}._720kb-datepicker-calendar-days-header{max-width:100%;margin:0 auto;padding:0 2% 0 2%;background:rgba(19,142,250,.08);border-bottom:1px solid rgba(0,0,0,.02)}._720kb-datepicker-calendar-days-header div{width:14.18%;font-weight:500;font-size:11.5px;padding:10px 0;float:left;text-align:center;color:rgba(0,0,0,.7)}._720kb-datepicker-calendar-days ._720kb-datepicker-default-button{font-size:18.5px;position:relative;bottom:-.5px}._720kb-datepicker-default-button{padding:0 4.5px}._720kb-datepicker-calendar-header-middle._720kb-datepicker-mobile-item{width:95%;float:none;margin:0 auto}._720kb-datepicker-item-hidden{visibility:hidden}._720kb-datepicker-calendar-day._720kb-datepicker-disabled,._720kb-datepicker-calendar-day._720kb-datepicker-disabled:hover,._720kb-datepicker-calendar-years-pagination a._720kb-datepicker-active._720kb-datepicker-disabled,._720kb-datepicker-calendar-years-pagination a._720kb-datepicker-active._720kb-datepicker-disabled:hover,._720kb-datepicker-calendar-years-pagination a._720kb-datepicker-disabled,._720kb-datepicker-calendar-years-pagination a._720kb-datepicker-disabled:hover{color:rgba(0,0,0,.2);background:rgba(25,2,0,.02);cursor:default}
\ No newline at end of file
diff --git a/dist/angular-datepicker.min.js b/dist/angular-datepicker.min.js
index 13c53aa..e44035d 100644
--- a/dist/angular-datepicker.min.js
+++ b/dist/angular-datepicker.min.js
@@ -4,9 +4,9 @@
  * Released by 720kb.net under the MIT license
  * www.opensource.org/licenses/MIT
  *
- * 2017-06-28
+ * 2019-03-05
  */
 
 
-!function(e,a){"use strict";var t=function(){if(a.userAgent&&(a.userAgent.match(/Android/i)||a.userAgent.match(/webOS/i)||a.userAgent.match(/iPhone/i)||a.userAgent.match(/iPad/i)||a.userAgent.match(/iPod/i)||a.userAgent.match(/BlackBerry/i)||a.userAgent.match(/Windows Phone/i)))return!0}(),n=function(e,a,n){return n&&(t=!1),t?['<div class="_720kb-datepicker-calendar-header">','<div class="_720kb-datepicker-calendar-header-middle _720kb-datepicker-mobile-item _720kb-datepicker-calendar-month">','<select ng-model="month" title="{{ dateMonthTitle }}" ng-change="selectedMonthHandle(month)">','<option ng-repeat="item in months" ng-selected="item === month" ng-disabled=\'!isSelectableMaxDate(item + " " + day + ", " + year) || !isSelectableMinDate(item + " " + day + ", " + year)\' ng-value="$index + 1" value="$index + 1">',"{{ item }}","</option>","</select>","</div>","</div>",'<div class="_720kb-datepicker-calendar-header">','<div class="_720kb-datepicker-calendar-header-middle _720kb-datepicker-mobile-item _720kb-datepicker-calendar-month">','<select ng-model="mobileYear" title="{{ dateYearTitle }}" ng-change="setNewYear(mobileYear)">','<option ng-repeat="item in paginationYears track by $index" ng-selected="year === item" ng-disabled="!isSelectableMinYear(item) || !isSelectableMaxYear(item)" ng-value="item" value="item">',"{{ item }}","</option>","</select>","</div>","</div>"]:['<div class="_720kb-datepicker-calendar-header">','<div class="_720kb-datepicker-calendar-header-left">','<a class="_720kb-datepicker-calendar-month-button" href="javascript:void(0)" ng-class="{\'_720kb-datepicker-item-hidden\': !willPrevMonthBeSelectable()}" ng-click="prevMonth()" title="{{ buttonPrevTitle }}">',e,"</a>","</div>",'<div class="_720kb-datepicker-calendar-header-middle _720kb-datepicker-calendar-month">',"{{month}}&nbsp;",'<a href="javascript:void(0)" ng-click="paginateYears(year); showYearsPagination = !showYearsPagination;">',"<span>","{{year}}","<i ng-class=\"{'_720kb-datepicker-calendar-header-closed-pagination': !showYearsPagination, '_720kb-datepicker-calendar-header-opened-pagination': showYearsPagination}\"></i>","</span>","</a>","</div>",'<div class="_720kb-datepicker-calendar-header-right">','<a class="_720kb-datepicker-calendar-month-button" ng-class="{\'_720kb-datepicker-item-hidden\': !willNextMonthBeSelectable()}" href="javascript:void(0)" ng-click="nextMonth()" title="{{ buttonNextTitle }}">',a,"</a>","</div>","</div>"]},i=function(e,a){return['<div class="_720kb-datepicker-calendar-header" ng-show="showYearsPagination">','<div class="_720kb-datepicker-calendar-years-pagination">','<a ng-class="{\'_720kb-datepicker-active\': y === year, \'_720kb-datepicker-disabled\': !isSelectableMaxYear(y) || !isSelectableMinYear(y)}" href="javascript:void(0)" ng-click="setNewYear(y)" ng-repeat="y in paginationYears track by $index">',"{{y}}","</a>","</div>",'<div class="_720kb-datepicker-calendar-years-pagination-pages">','<a href="javascript:void(0)" ng-click="paginateYears(paginationYears[0])" ng-class="{\'_720kb-datepicker-item-hidden\': paginationYearsPrevDisabled}">',e,"</a>",'<a href="javascript:void(0)" ng-click="paginateYears(paginationYears[paginationYears.length -1 ])" ng-class="{\'_720kb-datepicker-item-hidden\': paginationYearsNextDisabled}">',a,"</a>","</div>","</div>"]},r=function(e,a,t){var r=['<div class="_720kb-datepicker-calendar {{datepickerClass}} {{datepickerID}}" ng-class="{\'_720kb-datepicker-forced-to-open\': checkVisibility()}" ng-blur="hideCalendar()">',"</div>"],d=n(e,a,t),l=i(e,a),c=['<div class="_720kb-datepicker-calendar-days-header">','<div ng-repeat="d in daysInString">',"{{d}}","</div>","</div>"],o=['<div class="_720kb-datepicker-calendar-body">','<a href="javascript:void(0)" ng-repeat="px in prevMonthDays" class="_720kb-datepicker-calendar-day _720kb-datepicker-disabled">',"{{px}}","</a>","<a href=\"javascript:void(0)\" ng-repeat=\"item in days\" ng-click=\"setDatepickerDay(item)\" ng-class=\"{'_720kb-datepicker-active': selectedDay === item && selectedMonth === monthNumber && selectedYear === year, '_720kb-datepicker-disabled': !isSelectableMinDate(year + '/' + monthNumber + '/' + item ) || !isSelectableMaxDate(year + '/' + monthNumber + '/' + item) || !isSelectableDate(monthNumber, year, item) || !isSelectableDay(monthNumber, year, item),'_720kb-datepicker-today': item === today.getDate() && monthNumber === (today.getMonth() + 1) && year === today.getFullYear() && !selectedDay}\" class=\"_720kb-datepicker-calendar-day\">","{{item}}","</a>",'<a href="javascript:void(0)" ng-repeat="nx in nextMonthDays" class="_720kb-datepicker-calendar-day _720kb-datepicker-disabled">',"{{nx}}","</a>","</div>"],s=function(e){r.splice(r.length-1,0,e)};return d.forEach(s),l.forEach(s),c.forEach(s),o.forEach(s),r.join("")},d=function(a,n,i,d,l,c){return{restrict:"AEC",scope:{dateSet:"@",dateMinLimit:"@",dateMaxLimit:"@",dateMonthTitle:"@",dateYearTitle:"@",buttonNextTitle:"@",buttonPrevTitle:"@",dateDisabledDates:"@",dateEnabledDates:"@",dateDisabledWeekdays:"@",dateSetHidden:"@",dateTyper:"@",dateWeekStartDay:"@",datepickerAppendTo:"@",datepickerToggle:"@",datepickerClass:"@",datepickerShow:"@"},link:function(o,s,m){var u,b,h,y=m.selector,p=e.element(y?s[0].querySelector("."+y):s[0].children[0]),g=m.buttonPrev||'<b class="_720kb-datepicker-default-button">&lang;</b>',M=m.buttonNext||'<b class="_720kb-datepicker-default-button">&rang;</b>',k=m.dateFormat,f=o.$eval(o.dateDisabledDates),D=o.$eval(o.dateEnabledDates),v=o.$eval(o.dateDisabledWeekdays),N=new Date,S=!1,w=!1,x=void 0!==m.datepickerMobile&&"false"!==m.datepickerMobile,Y=i.DATETIME_FORMATS,T=r(g,M,x),_=function(){S||w||!u||o.hideCalendar()},L=function(e,a){var t,n,i,r,d,l=new Date(a,e,0).getDate(),c=new Date(a+"/"+e+"/1").getDay(),s=new Date(a+"/"+e+"/"+l).getDay(),m=[],u=[];for(o.days=[],o.dateWeekStartDay=o.validateWeekDay(o.dateWeekStartDay),d=(o.dateWeekStartDay+6)%7,t=1;t<=l;t+=1)o.days.push(t);if(c===o.dateWeekStartDay)o.prevMonthDays=[];else{for(i=c-o.dateWeekStartDay,c<o.dateWeekStartDay&&(i+=7),r=1===Number(e)?12:e-1,t=1;t<=new Date(a,r,0).getDate();t+=1)m.push(t);o.prevMonthDays=m.slice(-i)}if(s===d)o.nextMonthDays=[];else{for(n=6-s+o.dateWeekStartDay,s<o.dateWeekStartDay&&(n-=7),t=1;t<=n;t+=1)u.push(t);o.nextMonthDays=u}},$=function(){o.month=d("date")(new Date(o.dateMinLimit),"MMMM"),o.monthNumber=Number(d("date")(new Date(o.dateMinLimit),"MM")),o.day=Number(d("date")(new Date(o.dateMinLimit),"dd")),o.year=Number(d("date")(new Date(o.dateMinLimit),"yyyy")),L(o.monthNumber,o.year)},A=function(){o.month=d("date")(new Date(o.dateMaxLimit),"MMMM"),o.monthNumber=Number(d("date")(new Date(o.dateMaxLimit),"MM")),o.day=Number(d("date")(new Date(o.dateMaxLimit),"dd")),o.year=Number(d("date")(new Date(o.dateMaxLimit),"yyyy")),L(o.monthNumber,o.year)},P=function(){o.year=Number(o.year)-1},W=function(){o.year=Number(o.year)+1},E=function(e,a){var t,n,i,r,d,l,c,o,s,m=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|MMMM|MMM|MM|M|dd?d?|yy?yy?y?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;for(l=0;l<Y.MONTH.length;l+=1){if(o=Y.MONTH[l],s=Y.SHORTMONTH[l],-1!==e.indexOf(o)){e=e.replace(o,l+1);break}if(-1!==e.indexOf(s)){e=e.replace(s,l+1);break}}for(n=e.split(/\D/).filter(function(e){return e.length>0}),t=a.match(m).filter(function(e){return null!==e.match(/^[a-zA-Z]+$/i)}),l=0;l<t.length;l+=1)switch(c=t[l],!0){case-1!==c.indexOf("d"):r=n[l-(t.length-n.length)];break;case-1!==c.indexOf("M"):i=n[l-(t.length-n.length)];break;case-1!==c.indexOf("y"):d=n[l-(t.length-n.length)]}return new Date(d+"/"+i+"/"+r)},H=function(){if(!o.isSelectableMinDate(o.year+"/"+o.monthNumber+"/"+o.day)||!o.isSelectableMaxDate(o.year+"/"+o.monthNumber+"/"+o.day))return!1;var e=new Date(o.year+"/"+o.monthNumber+"/"+o.day);m.dateFormat?p.val(d("date")(e,k)):p.val(e),p.triggerHandler("input"),p.triggerHandler("change")},O={add:function(e,a){var t;e.className.indexOf(a)>-1||((t=e.className.split(" ")).push(a),e.className=t.join(" "))},remove:function(e,a){var t,n;if(-1!==e.className.indexOf(a)){for(n=e.className.split(" "),t=0;t<n.length;t+=1)if(n[t]===a){n=n.slice(0,t).concat(n.slice(t+1));break}e.className=n.join(" ")}}},F=function(){b=a.document.getElementsByClassName("_720kb-datepicker-calendar"),e.forEach(b,function(e,a){b[a].classList?b[a].classList.remove("_720kb-datepicker-open"):O.remove(b[a],"_720kb-datepicker-open")}),u.classList?(u.classList.add("_720kb-datepicker-open"),N=k?E(p[0].value.toString(),k):new Date(p[0].value.toString()),o.selectedMonth=Number(d("date")(N,"MM")),o.selectedDay=Number(d("date")(N,"dd")),o.selectedYear=Number(d("date")(N,"yyyy"))):O.add(u,"_720kb-datepicker-open"),o.today=new Date,c(function(){o.selectedDay?(o.year=o.selectedYear,o.monthNumber=o.selectedMonth):(o.year=o.today.getFullYear(),o.monthNumber=o.today.getMonth()+1),o.month=d("date")(new Date(o.year,o.monthNumber-1),"MMMM"),L(o.monthNumber,o.year)},0)},j=function(){return!!o.datepickerShow&&(N=k?E(p[0].value.toString(),k):new Date(p[0].value.toString()),o.selectedMonth=Number(d("date")(N,"MM")),o.selectedDay=Number(d("date")(N,"dd")),o.selectedYear=Number(d("date")(N,"yyyy")),o.$eval(o.datepickerShow))},I=o.$watch("dateSet",function(e){e&&!isNaN(Date.parse(e))&&(N=new Date(e),o.month=d("date")(N,"MMMM"),o.monthNumber=Number(d("date")(N,"MM")),o.day=Number(d("date")(N,"dd")),o.year=Number(d("date")(N,"yyyy")),L(o.monthNumber,o.year),"true"!==o.dateSetHidden&&H())}),C=o.$watch("dateMinLimit",function(e){e&&$()}),B=o.$watch("dateMaxLimit",function(e){e&&A()}),G=o.$watch("dateFormat",function(e){e&&H()}),z=o.$watch("dateDisabledDates",function(e){e&&(f=o.$eval(e),o.isSelectableDate(o.monthNumber,o.year,o.day)||(p.val(""),p.triggerHandler("input"),p.triggerHandler("change")))}),R=o.$watch("dateEnabledDates",function(e){e&&(D=o.$eval(e),o.isSelectableDate(o.monthNumber,o.year,o.day)||(p.val(""),p.triggerHandler("input"),p.triggerHandler("change")))});for(o.nextMonth=function(){12===o.monthNumber?(o.monthNumber=1,W()):o.monthNumber+=1,o.dateMaxLimit&&(o.isSelectableMaxDate(o.year+"/"+o.monthNumber+"/"+o.days[0])||A()),o.month=d("date")(new Date(o.year,o.monthNumber-1),"MMMM"),L(o.monthNumber,o.year),o.day=void 0},o.willPrevMonthBeSelectable=function(){var e=o.monthNumber,a=o.year,t=d("date")(new Date(new Date(a+"/"+e+"/01").getTime()-864e5),"dd");return 1===e?(e=12,a-=1):e-=1,!(o.dateMinLimit&&!o.isSelectableMinDate(a+"/"+e+"/"+t))},o.willNextMonthBeSelectable=function(){var e=o.monthNumber,a=o.year;return 12===e?(e=1,a+=1):e+=1,!(o.dateMaxLimit&&!o.isSelectableMaxDate(a+"/"+e+"/01"))},o.prevMonth=function(){1===o.monthNumber?(o.monthNumber=12,P()):o.monthNumber-=1,o.dateMinLimit&&(o.isSelectableMinDate(o.year+"/"+o.monthNumber+"/"+o.days[o.days.length-1])||$()),o.month=d("date")(new Date(o.year,o.monthNumber-1),"MMMM"),L(o.monthNumber,o.year),o.day=void 0},o.selectedMonthHandle=function(e){o.monthNumber=Number(d("date")(new Date(e+"/01/2000"),"MM")),L(o.monthNumber,o.year),H()},o.setNewYear=function(e){if(t||(o.day=void 0),o.dateMaxLimit&&o.year<Number(e)){if(!o.isSelectableMaxYear(e))return}else if(o.dateMinLimit&&o.year>Number(e)&&!o.isSelectableMinYear(e))return;o.paginateYears(e),o.showYearsPagination=!1,c(function(){o.year=Number(e),L(o.monthNumber,o.year)},0)},o.hideCalendar=function(){u.classList?u.classList.remove("_720kb-datepicker-open"):O.remove(u,"_720kb-datepicker-open")},o.setDatepickerDay=function(e){o.isSelectableDay(o.monthNumber,o.year,e)&&o.isSelectableDate(o.monthNumber,o.year,e)&&o.isSelectableMaxDate(o.year+"/"+o.monthNumber+"/"+e)&&o.isSelectableMinDate(o.year+"/"+o.monthNumber+"/"+e)&&(o.day=Number(e),o.selectedDay=o.day,o.selectedMonth=o.monthNumber,o.selectedYear=o.year,H(),m.hasOwnProperty("dateRefocus")&&p[0].focus(),o.hideCalendar())},o.paginateYears=function(e){var a,n=[],i=10,r=10;for(o.paginationYears=[],t&&(i=50,r=50,o.dateMinLimit&&o.dateMaxLimit&&(i=(e=new Date(o.dateMaxLimit).getFullYear())-new Date(o.dateMinLimit).getFullYear(),r=1)),a=i;a>0;a-=1)n.push(Number(e)-a);for(a=0;a<r;a+=1)n.push(Number(e)+a);"true"===o.dateTyper&&p.on("keyup blur",function(){if(p[0].value&&p[0].value.length&&p[0].value.length>0)try{(N=k?E(p[0].value.toString(),k):new Date(p[0].value.toString())).getFullYear()&&!isNaN(N.getDay())&&!isNaN(N.getMonth())&&o.isSelectableDay(N.getMonth(),N.getFullYear(),N.getDay())&&o.isSelectableDate(N.getMonth(),N.getFullYear(),N.getDay())&&o.isSelectableMaxDate(N)&&o.isSelectableMinDate(N)&&o.$apply(function(){o.month=d("date")(N,"MMMM"),o.monthNumber=Number(d("date")(N,"MM")),o.day=Number(d("date")(N,"dd")),4===N.getFullYear().toString().length&&(o.year=Number(d("date")(N,"yyyy"))),L(o.monthNumber,o.year)})}catch(e){return e}}),o.dateMaxLimit&&n&&n.length&&!o.isSelectableMaxYear(Number(n[n.length-1])+1)?o.paginationYearsNextDisabled=!0:o.paginationYearsNextDisabled=!1,o.dateMinLimit&&n&&n.length&&!o.isSelectableMinYear(Number(n[0])-1)?o.paginationYearsPrevDisabled=!0:o.paginationYearsPrevDisabled=!1,o.paginationYears=n},o.isSelectableDay=function(e,a,t){var n=0;if(v&&v.length>0)for(n;n<=v.length;n+=1)if(v[n]===new Date(e+"/"+t+"/"+a).getDay())return!1;return!0},o.isSelectableDate=function(e,a,t){var n=0;if(f&&f.length>0)for(n;n<=f.length;n+=1)if(new Date(f[n]).getTime()===new Date(e+"/"+t+"/"+a).getTime())return!1;if(D){for(n;n<=D.length;n+=1)if(new Date(D[n]).getTime()===new Date(e+"/"+t+"/"+a).getTime())return!0;return!1}return!0},o.isSelectableMinDate=function(e){return!(o.dateMinLimit&&new Date(o.dateMinLimit)&&new Date(e).getTime()<new Date(o.dateMinLimit).getTime())},o.isSelectableMaxDate=function(e){return!(o.dateMaxLimit&&new Date(o.dateMaxLimit)&&new Date(e).getTime()>new Date(o.dateMaxLimit).getTime())},o.isSelectableMaxYear=function(e){return!(o.dateMaxLimit&&e>new Date(o.dateMaxLimit).getFullYear())},o.isSelectableMinYear=function(e){return!(o.dateMinLimit&&e<new Date(o.dateMinLimit).getFullYear())},o.validateWeekDay=function(e){var a=Number(e,10);return(!a||a<0||a>6)&&(a=0),a},T=T.replace(/{{/g,l.startSymbol()).replace(/}}/g,l.endSymbol()),o.dateMonthTitle=o.dateMonthTitle||"Select month",o.dateYearTitle=o.dateYearTitle||"Select year",o.buttonNextTitle=o.buttonNextTitle||"Next",o.buttonPrevTitle=o.buttonPrevTitle||"Prev",o.month=d("date")(N,"MMMM"),o.monthNumber=Number(d("date")(N,"MM")),o.day=Number(d("date")(N,"dd")),o.dateWeekStartDay=o.validateWeekDay(o.dateWeekStartDay),o.dateMaxLimit?o.year=Number(d("date")(new Date(o.dateMaxLimit),"yyyy")):o.year=Number(d("date")(N,"yyyy")),o.months=Y.MONTH,o.daysInString=[],h=o.dateWeekStartDay;h<=o.dateWeekStartDay+6;h+=1)o.daysInString.push(h%7);o.daysInString=o.daysInString.map(function(e){return d("date")(new Date(new Date("06/08/2014").valueOf()+864e5*e),"EEE")}),o.datepickerAppendTo&&-1!==o.datepickerAppendTo.indexOf(".")?(o.datepickerID="datepicker-id-"+(new Date).getTime()+(Math.floor(6*Math.random())+8),e.element(document.getElementsByClassName(o.datepickerAppendTo.replace(".",""))[0]).append(n(e.element(T))(o,function(a){u=e.element(a)[0]}))):o.datepickerAppendTo&&-1!==o.datepickerAppendTo.indexOf("#")?(o.datepickerID="datepicker-id-"+(new Date).getTime()+(Math.floor(6*Math.random())+8),e.element(document.getElementById(o.datepickerAppendTo.replace("#",""))).append(n(e.element(T))(o,function(a){u=e.element(a)[0]}))):o.datepickerAppendTo&&"body"===o.datepickerAppendTo?(o.datepickerID="datepicker-id-"+((new Date).getTime()+(Math.floor(6*Math.random())+8)),e.element(document).find("body").append(n(e.element(T))(o,function(a){u=e.element(a)[0]}))):(p.after(n(e.element(T))(o)),u=s[0].querySelector("._720kb-datepicker-calendar")),function(){return!o.datepickerToggle||o.$eval(o.datepickerToggle)}()&&p.on("focus click focusin",function(){w=!0,S||w||!u?F():o.hideCalendar()}),p.on("focusout blur",function(){w=!1}),e.element(u).on("mouseenter",function(){S=!0}),e.element(u).on("mouseleave",function(){S=!1}),e.element(u).on("focusin",function(){S=!0}),e.element(a).on("click focus focusin",_),(o.dateMinLimit&&!o.isSelectableMinYear(o.year)||!o.isSelectableMinDate(o.year+"/"+o.monthNumber+"/"+o.day))&&$(),(o.dateMaxLimit&&!o.isSelectableMaxYear(o.year)||!o.isSelectableMaxDate(o.year+"/"+o.monthNumber+"/"+o.day))&&A(),o.paginateYears(o.year),L(o.monthNumber,o.year),o.checkVisibility=j,o.$on("$destroy",function(){I(),C(),B(),G(),z(),R(),p.off("focus click focusout blur"),e.element(u).off("mouseenter mouseleave focusin"),e.element(a).off("click focus focusin",_)})}}};e.module("720kb.datepicker",[]).directive("datepicker",["$window","$compile","$locale","$filter","$interpolate","$timeout",d])}(angular,navigator);
+!function(H){"use strict";var B=!1,G=function(e,a,t){var i,n,r=['<div class="_720kb-datepicker-calendar {{datepickerClass}} {{datepickerID}}" ng-class="{\'_720kb-datepicker-forced-to-open\': checkVisibility()}" ng-blur="hideCalendar()">',"</div>"],d=(i=e,n=a,t&&(B=!1),B?['<div class="_720kb-datepicker-calendar-header">','<div class="_720kb-datepicker-calendar-header-middle _720kb-datepicker-mobile-item _720kb-datepicker-calendar-month">','<select class="_720kb-datepicker-calendar-select" ng-model="month" title="{{ dateMonthTitle }}" ng-change="selectedMonthHandle(month)">','<option ng-repeat="item in months" ng-selected="item === month" ng-disabled=\'!isSelectableMaxDate(item + " " + day + ", " + year) || !isSelectableMinDate(item + " " + day + ", " + year)\' ng-value="$index + 1" value="$index + 1">',"{{ item }}","</option>","</select>","</div>","</div>",'<div class="_720kb-datepicker-calendar-header">','<div class="_720kb-datepicker-calendar-header-middle _720kb-datepicker-mobile-item _720kb-datepicker-calendar-month">','<select class="_720kb-datepicker-calendar-select" ng-model="mobileYear" title="{{ dateYearTitle }}" ng-change="setNewYear(mobileYear)">','<option ng-repeat="item in paginationYears track by $index" ng-selected="year === item" ng-disabled="!isSelectableMinYear(item) || !isSelectableMaxYear(item)" ng-value="item" value="item">',"{{ item }}","</option>","</select>","</div>","</div>"]:['<div class="_720kb-datepicker-calendar-header">','<div ng-if="clearText" class="_720kb-datepicker-calendar-header-clear"><a ng-click="clear();$event.stopPropagation()">{{clearText}}</a></div>','<div class="_720kb-datepicker-calendar-header-container">','<div class="_720kb-datepicker-calendar-header-left">','<a class="_720kb-datepicker-calendar-month-button" href="javascript:void(0)" ng-class="{\'_720kb-datepicker-item-hidden\': !willPrevMonthBeSelectable()}" ng-click="prevMonth();$event.stopPropagation()" title="{{ buttonPrevTitle }}">',i,"</a>","</div>",'<div class="_720kb-datepicker-calendar-header-middle _720kb-datepicker-calendar-month">',"{{month}}&nbsp;",'<a href="javascript:void(0)" ng-click="paginateYears(year); showYearsPagination = !showYearsPagination;$event.stopPropagation()">',"<span>","{{year}}","<i ng-class=\"{'_720kb-datepicker-calendar-header-closed-pagination': !showYearsPagination, '_720kb-datepicker-calendar-header-opened-pagination': showYearsPagination}\"></i>","</span>","</a>","</div>",'<div class="_720kb-datepicker-calendar-header-right">','<a class="_720kb-datepicker-calendar-month-button" ng-class="{\'_720kb-datepicker-item-hidden\': !willNextMonthBeSelectable()}" href="javascript:void(0)" ng-click="nextMonth();$event.stopPropagation()" title="{{ buttonNextTitle }}">',n,"</a>","</div>","</div>","</div>"]),l=['<div class="_720kb-datepicker-calendar-header" ng-show="showYearsPagination">','<div class="_720kb-datepicker-calendar-years-pagination">','<a ng-class="{\'_720kb-datepicker-active\': y === year, \'_720kb-datepicker-disabled\': !isSelectableMaxYear(y) || !isSelectableMinYear(y)}" href="javascript:void(0)" ng-click="setNewYear(y);$event.stopPropagation()" ng-repeat="y in paginationYears track by $index">',"{{y}}","</a>","</div>",'<div class="_720kb-datepicker-calendar-years-pagination-pages">','<a href="javascript:void(0)" ng-click="paginateYears(paginationYears[0]);$event.stopPropagation()" ng-class="{\'_720kb-datepicker-item-hidden\': paginationYearsPrevDisabled}">',e,"</a>",'<a href="javascript:void(0)" ng-click="paginateYears(paginationYears[paginationYears.length -1 ]);$event.stopPropagation()" ng-class="{\'_720kb-datepicker-item-hidden\': paginationYearsNextDisabled}">',a,"</a>","</div>","</div>"],o=['<div class="_720kb-datepicker-calendar-days-header">','<div ng-repeat="d in daysInString">',"{{d}}","</div>","</div>"],c=['<div class="_720kb-datepicker-calendar-body">','<a href="javascript:void(0)" ng-repeat="px in prevMonthDays" class="_720kb-datepicker-calendar-day _720kb-datepicker-disabled">',"{{px}}","</a>","<a href=\"javascript:void(0)\" ng-repeat=\"item in days\" ng-click=\"setDatepickerDay(item);$event.stopPropagation()\" ng-class=\"{'_720kb-datepicker-active': selectedDay === item && selectedMonth === monthNumber && selectedYear === year, '_720kb-datepicker-disabled': !isSelectableMinDate(year + '/' + monthNumber + '/' + item ) || !isSelectableMaxDate(year + '/' + monthNumber + '/' + item) || !isSelectableDate(monthNumber, year, item) || !isSelectableDay(monthNumber, year, item),'_720kb-datepicker-today': item === today.getDate() && monthNumber === (today.getMonth() + 1) && year === today.getFullYear()}\" class=\"_720kb-datepicker-calendar-day\">","{{item}}","</a>",'<a href="javascript:void(0)" ng-repeat="nx in nextMonthDays" class="_720kb-datepicker-calendar-day _720kb-datepicker-disabled">',"{{nx}}","</a>","</div>"],s=function(e){r.splice(r.length-1,0,e)};return d.forEach(s),l.forEach(s),o.forEach(s),c.forEach(s),r.join("")};H.module("720kb.datepicker",[]).directive("datepicker",["$document","$compile","$locale","$filter","$interpolate","$timeout",function(O,A,F,C,I,j){return{require:"ngModel",restrict:"AEC",scope:{dateSet:"@",dateMinLimit:"@",dateMaxLimit:"@",dateMonthTitle:"@",dateYearTitle:"@",buttonNextTitle:"@",buttonPrevTitle:"@",dateDisabledDates:"@",dateEnabledDates:"@",dateDisabledWeekdays:"@",dateSetHidden:"@",dateTyper:"@",dateWeekStartDay:"@",datepickerAppendTo:"@",datepickerToggle:"@",datepickerClass:"@",datepickerShow:"@",clearText:"@"},link:function(u,e,a,r){var t,i,n,d=a.selector,l=H.element(d?e[0].querySelector("."+d):e[0].children[0]),o=a.buttonPrev||'<i class="fa fa-arrow-left"></i>',c=a.buttonNext||'<i class="fa fa-arrow-right"></i>',s=a.dateFormat,m=u.$eval(u.dateDisabledDates),b=u.$eval(u.dateEnabledDates),y=u.$eval(u.dateDisabledWeekdays),p=new Date,h=!1,g=!1,k=void 0!==a.datepickerMobile&&"false"!==a.datepickerMobile,M=F.DATETIME_FORMATS,f=G(o,c,k),D=function(){h||g||!t||u.hideCalendar()},v=function(e,a){var t,i,n,r,d,l=new Date(a,e,0).getDate(),o=new Date(a+"/"+e+"/1").getDay(),c=new Date(a+"/"+e+"/"+l).getDay(),s=[],m=[];for(u.days=[],u.dateWeekStartDay=u.validateWeekDay(u.dateWeekStartDay),d=(u.dateWeekStartDay+6)%7,t=1;t<=l;t+=1)u.days.push(t);if(o===u.dateWeekStartDay)u.prevMonthDays=[];else{for(n=o-u.dateWeekStartDay,o<u.dateWeekStartDay&&(n+=7),r=1===Number(e)?12:e-1,t=1;t<=new Date(a,r,0).getDate();t+=1)s.push(t);u.prevMonthDays=s.slice(-n)}if(c===d)u.nextMonthDays=[];else{for(i=6-c+u.dateWeekStartDay,c<u.dateWeekStartDay&&(i-=7),t=1;t<=i;t+=1)m.push(t);u.nextMonthDays=m}},N=function(){u.month=C("date")(new Date(u.dateMinLimit),"MMMM"),u.monthNumber=Number(C("date")(new Date(u.dateMinLimit),"MM")),u.day=Number(C("date")(new Date(u.dateMinLimit),"dd")),u.year=Number(C("date")(new Date(u.dateMinLimit),"yyyy")),v(u.monthNumber,u.year)},w=function(){u.month=C("date")(new Date(u.dateMaxLimit),"MMMM"),u.monthNumber=Number(C("date")(new Date(u.dateMaxLimit),"MM")),u.day=Number(C("date")(new Date(u.dateMaxLimit),"dd")),u.year=Number(C("date")(new Date(u.dateMaxLimit),"yyyy")),v(u.monthNumber,u.year)},S=function(e,a){var t,i,n,r,d,l,o,c,s;for(l=0;l<M.MONTH.length;l+=1){if(c=M.MONTH[l],s=M.SHORTMONTH[l],-1!==e.indexOf(c)){e=e.replace(c,l+1);break}if(-1!==e.indexOf(s)){e=e.replace(s,l+1);break}}for(i=e.split(/\D/).filter(function(e){return 0<e.length}),t=a.match(/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|MMMM|MMM|MM|M|dd?d?|yy?yy?y?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g).filter(function(e){return null!==e.match(/^[a-zA-Z]+$/i)}),l=0;l<t.length;l+=1)switch(o=t[l],!0){case-1!==o.indexOf("d"):r=i[l-(t.length-i.length)];break;case-1!==o.indexOf("M"):n=i[l-(t.length-i.length)];break;case-1!==o.indexOf("y"):d=i[l-(t.length-i.length)]}return new Date(d+"/"+n+"/"+r)},x=function(){if(!u.isSelectableMinDate(u.year+"/"+u.monthNumber+"/"+u.day)||!u.isSelectableMaxDate(u.year+"/"+u.monthNumber+"/"+u.day))return!1;var e=r.$viewValue;e instanceof Date?((e=new Date(e.getTime())).setYear(u.year),e.setMonth(u.monthNumber-1),e.setDate(u.day)):"string"==typeof e?((e=new Date(e)).setYear(u.year),e.setMonth(u.monthNumber-1),e.setDate(u.day)):e=new Date(u.year+"/"+u.monthNumber+"/"+u.day),a.dateFormat&&(e=C("date")(e,s)),r.$setViewValue(e)},Y=function(e,a){var t;-1<e.className.indexOf(a)||((t=e.className.split(" ")).push(a),e.className=t.join(" "))},T=function(e,a){var t,i;if(-1!==e.className.indexOf(a)){for(i=e.className.split(" "),t=0;t<i.length;t+=1)if(i[t]===a){i=i.slice(0,t).concat(i.slice(t+1));break}e.className=i.join(" ")}},_=function(){u.isShowed=!0,i=document.getElementsByClassName("_720kb-datepicker-calendar"),H.forEach(i,function(e,a){i[a].classList?i[a].classList.remove("_720kb-datepicker-open"):T(i[a],"_720kb-datepicker-open")}),t.classList?(t.classList.add("_720kb-datepicker-open"),p=s?S(String(r.$viewValue).toString(),s):new Date(String(r.$viewValue).toString()),u.selectedMonth=Number(C("date")(p,"MM")),u.selectedDay=Number(C("date")(p,"dd")),u.selectedYear=Number(C("date")(p,"yyyy"))):Y(t,"_720kb-datepicker-open"),u.today=new Date,j(function(){u.selectedDay?(u.year=u.selectedYear,u.monthNumber=u.selectedMonth):(u.year=u.today.getFullYear(),u.monthNumber=u.today.getMonth()+1),u.month=C("date")(new Date(u.year,u.monthNumber-1),"MMMM"),v(u.monthNumber,u.year)},0)},$=u.$watch("dateSet",function(e){e&&!isNaN(Date.parse(e))&&(p=new Date(e),u.month=C("date")(p,"MMMM"),u.monthNumber=Number(C("date")(p,"MM")),u.day=Number(C("date")(p,"dd")),u.year=Number(C("date")(p,"yyyy")),v(u.monthNumber,u.year),"true"!==u.dateSetHidden&&x())}),L=u.$watch("dateMinLimit",function(e){e&&N()}),P=u.$watch("dateMaxLimit",function(e){e&&w()}),V=u.$watch("dateFormat",function(e){e&&x()}),E=u.$watch("dateDisabledDates",function(e){e&&(m=u.$eval(e),u.isSelectableDate(u.monthNumber,u.year,u.day)||r.$setViewValue(null))}),W=u.$watch("dateEnabledDates",function(e){e&&(b=u.$eval(e),u.isSelectableDate(u.monthNumber,u.year,u.day)||r.$setViewValue(null))});for(u.nextMonth=function(){12===u.monthNumber?(u.monthNumber=1,u.year=Number(u.year)+1):u.monthNumber+=1,u.dateMaxLimit&&(u.isSelectableMaxDate(u.year+"/"+u.monthNumber+"/"+u.days[0])||w()),u.month=C("date")(new Date(u.year,u.monthNumber-1),"MMMM"),v(u.monthNumber,u.year),u.day=void 0},u.willPrevMonthBeSelectable=function(){var e=u.monthNumber,a=u.year,t=C("date")(new Date(new Date(a+"/"+e+"/01").getTime()-864e5),"dd");return 1===e?(e=12,a-=1):e-=1,!(u.dateMinLimit&&!u.isSelectableMinDate(a+"/"+e+"/"+t))},u.willNextMonthBeSelectable=function(){var e=u.monthNumber,a=u.year;return 12===e?a+=e=1:e+=1,!(u.dateMaxLimit&&!u.isSelectableMaxDate(a+"/"+e+"/01"))},u.prevMonth=function(){1===u.monthNumber?(u.monthNumber=12,u.year=Number(u.year)-1):u.monthNumber-=1,u.dateMinLimit&&(u.isSelectableMinDate(u.year+"/"+u.monthNumber+"/"+u.days[u.days.length-1])||N()),u.month=C("date")(new Date(u.year,u.monthNumber-1),"MMMM"),v(u.monthNumber,u.year),u.day=void 0},u.selectedMonthHandle=function(e){null!==e&&(u.monthNumber=Number(C("date")(new Date(e+"/01/2000"),"MM")),v(u.monthNumber,u.year),x())},u.setNewYear=function(e){if(B||(u.day=void 0),u.dateMaxLimit&&u.year<Number(e)){if(!u.isSelectableMaxYear(e))return}else if(u.dateMinLimit&&u.year>Number(e)&&!u.isSelectableMinYear(e))return;u.paginateYears(e),u.showYearsPagination=!1,j(function(){u.year=Number(e),v(u.monthNumber,u.year)},0)},u.hideCalendar=function(){u.isShowed=!1,t.classList?t.classList.remove("_720kb-datepicker-open"):T(t,"_720kb-datepicker-open")},u.setDatepickerDay=function(e){u.isSelectableDay(u.monthNumber,u.year,e)&&u.isSelectableDate(u.monthNumber,u.year,e)&&u.isSelectableMaxDate(u.year+"/"+u.monthNumber+"/"+e)&&u.isSelectableMinDate(u.year+"/"+u.monthNumber+"/"+e)&&(u.day=Number(e),u.selectedDay=u.day,u.selectedMonth=u.monthNumber,u.selectedYear=u.year,x(),a.hasOwnProperty("dateRefocus")&&l[0].focus(),u.hideCalendar())},u.paginateYears=function(e){var a,t=[],i=10,n=10;for(u.paginationYears=[],B&&(n=i=50,u.dateMinLimit&&u.dateMaxLimit&&(i=(e=new Date(u.dateMaxLimit).getFullYear())-new Date(u.dateMinLimit).getFullYear(),n=1)),a=i;0<a;a-=1)t.push(Number(e)-a);for(a=0;a<n;a+=1)t.push(Number(e)+a);"true"===u.dateTyper&&l.on("keyup blur",function(){if(r.$viewValue&&r.$viewValue.length&&0<r.$viewValue.length)try{(p=s?S(r.$viewValue.toString(),s):new Date(r.$viewValue.toString())).getFullYear()&&!isNaN(p.getDay())&&!isNaN(p.getMonth())&&u.isSelectableDay(p.getMonth(),p.getFullYear(),p.getDay())&&u.isSelectableDate(p.getMonth(),p.getFullYear(),p.getDay())&&u.isSelectableMaxDate(p)&&u.isSelectableMinDate(p)&&u.$apply(function(){u.month=C("date")(p,"MMMM"),u.monthNumber=Number(C("date")(p,"MM")),u.day=Number(C("date")(p,"dd")),4===p.getFullYear().toString().length&&(u.year=Number(C("date")(p,"yyyy"))),v(u.monthNumber,u.year)})}catch(e){return e}}),u.dateMaxLimit&&t&&t.length&&!u.isSelectableMaxYear(Number(t[t.length-1])+1)?u.paginationYearsNextDisabled=!0:u.paginationYearsNextDisabled=!1,u.dateMinLimit&&t&&t.length&&!u.isSelectableMinYear(Number(t[0])-1)?u.paginationYearsPrevDisabled=!0:u.paginationYearsPrevDisabled=!1,u.paginationYears=t},u.isSelectableDay=function(e,a,t){var i=0;if(y&&0<y.length)for(;i<=y.length;i+=1)if(y[i]===new Date(e+"/"+t+"/"+a).getDay())return!1;return!0},u.isSelectableDate=function(e,a,t){var i=0;if(m&&0<m.length)for(;i<=m.length;i+=1)if(new Date(m[i]).getTime()===new Date(e+"/"+t+"/"+a).getTime())return!1;if(b){for(;i<=b.length;i+=1)if(new Date(b[i]).getTime()===new Date(e+"/"+t+"/"+a).getTime())return!0;return!1}return!0},u.isSelectableMinDate=function(e){return!(u.dateMinLimit&&new Date(u.dateMinLimit)&&new Date(e).getTime()<new Date(u.dateMinLimit).getTime())},u.isSelectableMaxDate=function(e){return!(u.dateMaxLimit&&new Date(u.dateMaxLimit)&&new Date(e).getTime()>new Date(u.dateMaxLimit).getTime())},u.isSelectableMaxYear=function(e){return!(u.dateMaxLimit&&e>new Date(u.dateMaxLimit).getFullYear())},u.isSelectableMinYear=function(e){return!(u.dateMinLimit&&e<new Date(u.dateMinLimit).getFullYear())},u.validateWeekDay=function(e){var a=Number(e,10);return(!a||a<0||6<a)&&(a=0),a},u.clear=function(){r.$setViewValue(null),u.hideCalendar()},f=f.replace(/{{/g,I.startSymbol()).replace(/}}/g,I.endSymbol()),u.dateMonthTitle=u.dateMonthTitle||"Select month",u.dateYearTitle=u.dateYearTitle||"Select year",u.buttonNextTitle=u.buttonNextTitle||"Next",u.buttonPrevTitle=u.buttonPrevTitle||"Prev",u.month=C("date")(p,"MMMM"),u.monthNumber=Number(C("date")(p,"MM")),u.day=Number(C("date")(p,"dd")),u.dateWeekStartDay=u.validateWeekDay(u.dateWeekStartDay),u.dateMaxLimit?u.year=Number(C("date")(new Date(u.dateMaxLimit),"yyyy")):u.year=Number(C("date")(p,"yyyy")),u.months=M.MONTH,u.daysInString=[],n=u.dateWeekStartDay;n<=u.dateWeekStartDay+6;n+=1)u.daysInString.push(n%7);u.daysInString=u.daysInString.map(function(e){return C("date")(new Date(new Date("06/08/2014").valueOf()+864e5*e),"EEE")}),u.datepickerAppendTo&&-1!==u.datepickerAppendTo.indexOf(".")?(u.datepickerID="datepicker-id-"+(new Date).getTime()+(Math.floor(6*Math.random())+8),H.element(document.getElementsByClassName(u.datepickerAppendTo.replace(".",""))[0]).append(A(H.element(f))(u,function(e){t=H.element(e)[0]}))):u.datepickerAppendTo&&-1!==u.datepickerAppendTo.indexOf("#")?(u.datepickerID="datepicker-id-"+(new Date).getTime()+(Math.floor(6*Math.random())+8),H.element(document.getElementById(u.datepickerAppendTo.replace("#",""))).append(A(H.element(f))(u,function(e){t=H.element(e)[0]}))):u.datepickerAppendTo&&"body"===u.datepickerAppendTo?(u.datepickerID="datepicker-id-"+((new Date).getTime()+(Math.floor(6*Math.random())+8)),H.element(document).find("body").append(A(H.element(f))(u,function(e){t=H.element(e)[0]}))):(l.after(A(H.element(f))(u)),t=e[0].querySelector("._720kb-datepicker-calendar")),u.datepickerToggle&&!u.$eval(u.datepickerToggle)||(l.on("click",function(e){"INPUT"===e.target.nodeName&&"button"===e.target.type&&(e.stopPropagation(),g=!0,!h&&!g&&t||u.isShowed?u.hideCalendar():_())}),l.on("focusin focus",function(e){"INPUT"===e.target.nodeName&&"button"!==e.target.type&&(g=!0,h||g||!t?_():u.hideCalendar())})),l.on("focusout blur",function(){g=!1,h||g||!t||u.hideCalendar()}),H.element(t).on("mouseenter",function(){h=!0}),H.element(t).on("mouseleave",function(){h=!1}),H.element(t).on("focusin",function(){h=!0}),O.on("click focus focusin",D),(u.dateMinLimit&&!u.isSelectableMinYear(u.year)||!u.isSelectableMinDate(u.year+"/"+u.monthNumber+"/"+u.day))&&N(),(u.dateMaxLimit&&!u.isSelectableMaxYear(u.year)||!u.isSelectableMaxDate(u.year+"/"+u.monthNumber+"/"+u.day))&&w(),u.paginateYears(u.year),v(u.monthNumber,u.year),u.checkVisibility=function(){return!!u.datepickerShow&&(p=s?S(r.$viewValue.toString(),s):new Date(r.$viewValue.toString()),u.selectedMonth=Number(C("date")(p,"MM")),u.selectedDay=Number(C("date")(p,"dd")),u.selectedYear=Number(C("date")(p,"yyyy")),u.$eval(u.datepickerShow))},u.$on("$destroy",function(){$(),L(),P(),V(),E(),W(),l.off("focus click focusout blur"),H.element(t).off("mouseenter mouseleave focusin"),O.off("click focus focusin",D)})}}}])}(angular,navigator);
 //# sourceMappingURL=angular-datepicker.sourcemap.map
\ No newline at end of file
diff --git a/dist/angular-datepicker.sourcemap.map b/dist/angular-datepicker.sourcemap.map
index bbc30f5..f3fbba9 100644
--- a/dist/angular-datepicker.sourcemap.map
+++ b/dist/angular-datepicker.sourcemap.map
@@ -1 +1 @@
-{"version":3,"sources":["../src/js/angular-datepicker.js"],"names":["angular","navigator","isMobile","userAgent","match","generateMonthAndYearHeader","prevButton","nextButton","preventMobile","generateYearsPaginationHeader","generateHtmlTemplate","toReturn","monthAndYearHeader","yearsPaginationHeader","daysColumns","days","iterator","aRow","splice","length","forEach","join","datepickerDirective","$window","$compile","$locale","$filter","$interpolate","$timeout","restrict","scope","dateSet","dateMinLimit","dateMaxLimit","dateMonthTitle","dateYearTitle","buttonNextTitle","buttonPrevTitle","dateDisabledDates","dateEnabledDates","dateDisabledWeekdays","dateSetHidden","dateTyper","dateWeekStartDay","datepickerAppendTo","datepickerToggle","datepickerClass","datepickerShow","link","$scope","element","attr","theCalendar","pageDatepickers","n","selector","thisInput","querySelector","children","buttonPrev","buttonNext","dateFormat","$eval","date","Date","isMouseOn","isMouseOnInput","datepickerMobile","datetime","DATETIME_FORMATS","htmlTemplate","onClickOnWindow","hideCalendar","setDaysInMonth","month","year","i","howManyNextDays","howManyPreviousDays","monthAlias","dateWeekEndDay","limitDate","getDate","firstDayMonthNumber","getDay","lastDayMonthNumber","prevMonthDays","nextMonthDays","validateWeekDay","push","Number","slice","resetToMinDate","monthNumber","day","resetToMaxDate","prevYear","nextYear","localDateTimestamp","rawDate","dateFormatDefinition","formatDate","dateSplit","m","d","y","index","el","longName","shortName","formattingTokens","MONTH","SHORTMONTH","indexOf","replace","split","filter","item","setInputValue","isSelectableMinDate","isSelectableMaxDate","modelDate","val","triggerHandler","classHelper","add","ele","klass","classes","className","remove","concat","showCalendar","document","getElementsByClassName","value","key","classList","toString","selectedMonth","selectedDay","selectedYear","today","getFullYear","getMonth","checkVisibility","unregisterDataSetWatcher","$watch","newValue","isNaN","parse","unregisterDateMinLimitWatcher","unregisterDateMaxLimitWatcher","unregisterDateFormatWatcher","unregisterDateDisabledDatesWatcher","isSelectableDate","unregisterDateEnabledDatesWatcher","nextMonth","undefined","willPrevMonthBeSelectable","prevDay","getTime","willNextMonthBeSelectable","prevMonth","selectedMonthHandle","selectedMonthNumber","setNewYear","isSelectableMaxYear","isSelectableMinYear","paginateYears","showYearsPagination","setDatepickerDay","isSelectableDay","hasOwnProperty","focus","startingYear","theNewYears","daysToPrepend","daysToAppend","paginationYears","on","$apply","e","paginationYearsNextDisabled","paginationYearsPrevDisabled","aDate","weekDay","validWeekDay","startSymbol","endSymbol","months","daysInString","map","valueOf","datepickerID","Math","floor","random","append","getElementById","find","after","$on","off","module","directive"],"mappings":";;;;;;;;;;CACC,SAAqBA,EAASC,GAE7B,aAEA,IACIC,EAAY,WAEZ,GAAID,EAAUE,YACXF,EAAUE,UAAUC,MAAM,aAC3BH,EAAUE,UAAUC,MAAM,WAC1BH,EAAUE,UAAUC,MAAM,YAC1BH,EAAUE,UAAUC,MAAM,UAC1BH,EAAUE,UAAUC,MAAM,UAC1BH,EAAUE,UAAUC,MAAM,gBAC1BH,EAAUE,UAAUC,MAAM,mBAE1B,OAAO,KAGTC,EAA6B,SAAoCC,EAAYC,EAAYC,GAOzF,OALIA,IAEFN,GAAW,GAGTA,GAGA,kDACE,wHACE,gGACE,yOACE,aACF,YACF,YACF,SACF,SACA,kDACE,wHACE,gGACE,+LACE,aACF,YACF,YACF,SACF,WAKF,kDACE,uDACE,kNACEI,EACF,OACF,SACA,0FACE,kBACA,4GACE,SACE,WACA,iLACF,UACF,OACF,SACA,wDACA,kNACEC,EACF,OACA,SACF,WAGFE,EAAgC,SAAuCH,EAAYC,GAEnF,OACE,gFACE,4DACE,oPACE,QACF,OACF,SACA,kEACE,yJACED,EACF,OACA,kLACEC,EACF,OACF,SACF,WA6BFG,EAAuB,SAA8BJ,EAAYC,EAAYC,GAE7E,IAAIG,GACF,8KACA,UAEAC,EAAqBP,EAA2BC,EAAYC,EAAYC,GACxEK,EAAwBJ,EAA8BH,EAAYC,GAClEO,GA/BF,uDACE,sCACE,QACF,SACF,UA4BEC,GAtBA,gDACE,kIACE,SACF,OACA,woBACE,WACF,OACA,kIACE,SACF,OACF,UAaAC,EAAW,SAAkBC,GAE7BN,EAASO,OAAOP,EAASQ,OAAS,EAAG,EAAGF,IAQ1C,OALAL,EAAmBQ,QAAQJ,GAC3BH,EAAsBO,QAAQJ,GAC9BF,EAAYM,QAAQJ,GACpBD,EAAKK,QAAQJ,GAENL,EAASU,KAAK,KAErBC,EAAsB,SAA6BC,EAASC,EAAUC,EAASC,EAASC,EAAcC,GAy2BtG,OACEC,SAAY,MACZC,OACEC,QAAW,IACXC,aAAgB,IAChBC,aAAgB,IAChBC,eAAkB,IAClBC,cAAiB,IACjBC,gBAAmB,IACnBC,gBAAmB,IACnBC,kBAAqB,IACrBC,iBAAoB,IACpBC,qBAAwB,IACxBC,cAAiB,IACjBC,UAAa,IACbC,iBAAoB,IACpBC,mBAAsB,IACtBC,iBAAoB,IACpBC,gBAAmB,IACnBC,eAAkB,KAEpBC,KA53BoB,SAAyBC,EAAQC,EAASC,GAG9D,IAEIC,EAgBAC,EAGAC,EArBAC,EAAWJ,EAAKI,SAChBC,EAAYxD,EAAQkD,QAAQK,EAAWL,EAAQ,GAAGO,cAAc,IAAMF,GAAYL,EAAQ,GAAGQ,SAAS,IAItGpD,EAAa6C,EAAKQ,YAFE,yDAGpBpD,EAAa4C,EAAKS,YAFE,yDAGpBC,EAAaV,EAAKU,WAGlBvB,EAAoBW,EAAOa,MAAMb,EAAOX,mBACxCC,EAAmBU,EAAOa,MAAMb,EAAOV,kBACvCC,EAAuBS,EAAOa,MAAMb,EAAOT,sBAC3CuB,EAAO,IAAIC,KACXC,GAAY,EACZC,GAAiB,EACjB1D,OAAiD,IAA1B2C,EAAKgB,kBAA8D,UAA1BhB,EAAKgB,iBACrEC,EAAW3C,EAAQ4C,iBAGnBC,EAAe5D,EAAqBJ,EAAYC,EAAYC,GAE5D+D,EAAkB,WAEbN,GACFC,IAAkBd,GAEnBH,EAAOuB,gBAGTC,EAAiB,SAAwBC,EAAOC,GAEhD,IAAIC,EAMAC,EACAC,EACAC,EACAC,EARAC,EAAY,IAAIjB,KAAKW,EAAMD,EAAO,GAAGQ,UACrCC,EAAsB,IAAInB,KAAKW,EAAO,IAAMD,EAAQ,MAASU,SAC7DC,EAAqB,IAAIrB,KAAKW,EAAO,IAAMD,EAAQ,IAAMO,GAAWG,SACpEE,KACAC,KAUJ,IAJAtC,EAAOlC,QACPkC,EAAON,iBAAmBM,EAAOuC,gBAAgBvC,EAAON,kBACxDqC,GAAkB/B,EAAON,iBAAmB,GAAK,EAE5CiC,EAAI,EAAGA,GAAKK,EAAWL,GAAK,EAE/B3B,EAAOlC,KAAK0E,KAAKb,GAInB,GAAIO,IAAwBlC,EAAON,iBAGjCM,EAAOqC,qBACF,CAkBL,IAhBAR,EAAsBK,EAAsBlC,EAAON,iBAE/CwC,EAAsBlC,EAAON,mBAE/BmC,GAAuB,GAMvBC,EAFoB,IAAlBW,OAAOhB,GAEI,GAGAA,EAAQ,EAGlBE,EAAI,EAAGA,GAAK,IAAIZ,KAAKW,EAAMI,EAAY,GAAGG,UAAWN,GAAK,EAE7DU,EAAcG,KAAKb,GAGrB3B,EAAOqC,cAAgBA,EAAcK,OAAOb,GAI9C,GAAIO,IAAuBL,EAEzB/B,EAAOsC,qBACF,CAUL,IATAV,EAAkB,EAAIQ,EAAqBpC,EAAON,iBAE9C0C,EAAqBpC,EAAON,mBAE9BkC,GAAmB,GAKhBD,EAAI,EAAGA,GAAKC,EAAiBD,GAAK,EAErCW,EAAcE,KAAKb,GAGrB3B,EAAOsC,cAAgBA,IAGzBK,EAAiB,WAEjB3C,EAAOyB,MAAQhD,EAAQ,QAAQ,IAAIsC,KAAKf,EAAOjB,cAAe,QAC9DiB,EAAO4C,YAAcH,OAAOhE,EAAQ,QAAQ,IAAIsC,KAAKf,EAAOjB,cAAe,OAC3EiB,EAAO6C,IAAMJ,OAAOhE,EAAQ,QAAQ,IAAIsC,KAAKf,EAAOjB,cAAe,OACnEiB,EAAO0B,KAAOe,OAAOhE,EAAQ,QAAQ,IAAIsC,KAAKf,EAAOjB,cAAe,SAEpEyC,EAAexB,EAAO4C,YAAa5C,EAAO0B,OAE1CoB,EAAiB,WAEjB9C,EAAOyB,MAAQhD,EAAQ,QAAQ,IAAIsC,KAAKf,EAAOhB,cAAe,QAC9DgB,EAAO4C,YAAcH,OAAOhE,EAAQ,QAAQ,IAAIsC,KAAKf,EAAOhB,cAAe,OAC3EgB,EAAO6C,IAAMJ,OAAOhE,EAAQ,QAAQ,IAAIsC,KAAKf,EAAOhB,cAAe,OACnEgB,EAAO0B,KAAOe,OAAOhE,EAAQ,QAAQ,IAAIsC,KAAKf,EAAOhB,cAAe,SAEpEwC,EAAexB,EAAO4C,YAAa5C,EAAO0B,OAE1CqB,EAAW,WAEX/C,EAAO0B,KAAOe,OAAOzC,EAAO0B,MAAQ,GAEpCsB,EAAW,WAEXhD,EAAO0B,KAAOe,OAAOzC,EAAO0B,MAAQ,GAEpCuB,EAAqB,SAA4BC,EAASC,GAE1D,IACCC,EAAWC,EAAWC,EAAGC,EAAGC,EAAGC,EAAOC,EAAIC,EAAUC,EADjDC,EAAmB,qIAGvB,IAAKJ,EAAQ,EAAGA,EAAQtC,EAAS2C,MAAM5F,OAAQuF,GAAS,EAAG,CAIzD,GAHAE,EAAWxC,EAAS2C,MAAML,GAC1BG,EAAYzC,EAAS4C,WAAWN,IAEG,IAA/BP,EAAQc,QAAQL,GAAkB,CACpCT,EAAUA,EAAQe,QAAQN,EAAUF,EAAQ,GAC5C,MAGF,IAAoC,IAAhCP,EAAQc,QAAQJ,GAAmB,CACrCV,EAAUA,EAAQe,QAAQL,EAAWH,EAAQ,GAC7C,OAgBJ,IAZAJ,EAAYH,EACTgB,MAAM,MACNC,OAAO,SAAyBC,GAC/B,OAAOA,EAAKlG,OAAS,IAGzBkF,EAAaD,EACVhG,MAAM0G,GACNM,OAAO,SAA0BC,GAChC,OAAsC,OAA/BA,EAAKjH,MAAM,kBAGjBsG,EAAQ,EAAGA,EAAQL,EAAWlF,OAAQuF,GAAS,EAGlD,OAFAC,EAAKN,EAAWK,IAER,GACN,KAA0B,IAArBC,EAAGM,QAAQ,KACdT,EAAIF,EAAUI,GAASL,EAAWlF,OAASmF,EAAUnF,SACrD,MAEF,KAA0B,IAArBwF,EAAGM,QAAQ,KACdV,EAAID,EAAUI,GAASL,EAAWlF,OAASmF,EAAUnF,SACrD,MAEF,KAA0B,IAArBwF,EAAGM,QAAQ,KACdR,EAAIH,EAAUI,GAASL,EAAWlF,OAASmF,EAAUnF,SAS3D,OAAO,IAAI6C,KAAKyC,EAAI,IAAMF,EAAI,IAAMC,IAEpCc,EAAgB,WAEhB,IAAIrE,EAAOsE,oBAAoBtE,EAAO0B,KAAO,IAAM1B,EAAO4C,YAAc,IAAM5C,EAAO6C,OACjF7C,EAAOuE,oBAAoBvE,EAAO0B,KAAO,IAAM1B,EAAO4C,YAAc,IAAM5C,EAAO6C,KAgBnF,OAAO,EAdP,IAAI2B,EAAY,IAAIzD,KAAKf,EAAO0B,KAAO,IAAM1B,EAAO4C,YAAc,IAAM5C,EAAO6C,KAE3E3C,EAAKU,WAEPL,EAAUkE,IAAIhG,EAAQ,QAAQ+F,EAAW5D,IAGzCL,EAAUkE,IAAID,GAGhBjE,EAAUmE,eAAe,SACzBnE,EAAUmE,eAAe,WAM3BC,GACAC,IAAO,SAAaC,EAAKC,GACvB,IAAIC,EAEAF,EAAIG,UAAUhB,QAAQc,IAAU,KAKpCC,EAAUF,EAAIG,UAAUd,MAAM,MACtB1B,KAAKsC,GACbD,EAAIG,UAAYD,EAAQ3G,KAAK,OAE/B6G,OAAU,SAAgBJ,EAAKC,GAC7B,IAAInD,EACAoD,EAEJ,IAAsC,IAAlCF,EAAIG,UAAUhB,QAAQc,GAA1B,CAMA,IADAC,EAAUF,EAAIG,UAAUd,MAAM,KACzBvC,EAAI,EAAGA,EAAIoD,EAAQ7G,OAAQyD,GAAK,EAEnC,GAAIoD,EAAQpD,KAAOmD,EAAO,CAExBC,EAAUA,EAAQrC,MAAM,EAAGf,GAAGuD,OAAOH,EAAQrC,MAAMf,EAAI,IACvD,MAGJkD,EAAIG,UAAYD,EAAQ3G,KAAK,QAG/B+G,EAAe,WAEf/E,EAAkB9B,EAAQ8G,SAASC,uBAAuB,8BAE1DtI,EAAQoB,QAAQiC,EAAiB,SAAgCkF,EAAOC,GAClEnF,EAAgBmF,GAAKC,UAEvBpF,EAAgBmF,GAAKC,UAAUP,OAAO,0BAGtCN,EAAYM,OAAO7E,EAAgBmF,GAAM,4BAIzCpF,EAAYqF,WAEdrF,EAAYqF,UAAUZ,IAAI,0BAExB9D,EADEF,EACKqC,EAAmB1C,EAAU,GAAG+E,MAAMG,WAAY7E,GAElD,IAAIG,KAAKR,EAAU,GAAG+E,MAAMG,YAErCzF,EAAO0F,cAAgBjD,OAAOhE,EAAQ,QAAQqC,EAAM,OACpDd,EAAO2F,YAAclD,OAAOhE,EAAQ,QAAQqC,EAAM,OAClDd,EAAO4F,aAAenD,OAAOhE,EAAQ,QAAQqC,EAAM,UAGnD6D,EAAYC,IAAIzE,EAAa,0BAE/BH,EAAO6F,MAAQ,IAAI9E,KACnBpC,EAAS,WACHqB,EAAO2F,aACT3F,EAAO0B,KAAO1B,EAAO4F,aACrB5F,EAAO4C,YAAc5C,EAAO0F,gBAE5B1F,EAAO0B,KAAO1B,EAAO6F,MAAMC,cAC3B9F,EAAO4C,YAAc5C,EAAO6F,MAAME,WAAa,GAEjD/F,EAAOyB,MAAQhD,EAAQ,QAAQ,IAAIsC,KAAKf,EAAO0B,KAAM1B,EAAO4C,YAAc,GAAI,QAC9EpB,EAAexB,EAAO4C,YAAa5C,EAAO0B,OACzC,IAUHsE,EAAkB,WAClB,QAAKhG,EAAOF,iBAKVgB,EADEF,EACKqC,EAAmB1C,EAAU,GAAG+E,MAAMG,WAAY7E,GAElD,IAAIG,KAAKR,EAAU,GAAG+E,MAAMG,YAErCzF,EAAO0F,cAAgBjD,OAAOhE,EAAQ,QAAQqC,EAAM,OACpDd,EAAO2F,YAAclD,OAAOhE,EAAQ,QAAQqC,EAAM,OAClDd,EAAO4F,aAAenD,OAAOhE,EAAQ,QAAQqC,EAAM,SAC5Cd,EAAOa,MAAMb,EAAOF,kBAE3BmG,EAA2BjG,EAAOkG,OAAO,UAAW,SAAwBC,GAExEA,IAAaC,MAAMrF,KAAKsF,MAAMF,MAEhCrF,EAAO,IAAIC,KAAKoF,GAEhBnG,EAAOyB,MAAQhD,EAAQ,QAAQqC,EAAM,QACrCd,EAAO4C,YAAcH,OAAOhE,EAAQ,QAAQqC,EAAM,OAClDd,EAAO6C,IAAMJ,OAAOhE,EAAQ,QAAQqC,EAAM,OAC1Cd,EAAO0B,KAAOe,OAAOhE,EAAQ,QAAQqC,EAAM,SAE3CU,EAAexB,EAAO4C,YAAa5C,EAAO0B,MAEb,SAAzB1B,EAAOR,eAET6E,OAIJiC,EAAgCtG,EAAOkG,OAAO,eAAgB,SAA6BC,GACvFA,GACFxD,MAGF4D,EAAgCvG,EAAOkG,OAAO,eAAgB,SAA6BC,GACvFA,GACFrD,MAGF0D,EAA8BxG,EAAOkG,OAAO,aAAc,SAA2BC,GACjFA,GACF9B,MAGFoC,EAAqCzG,EAAOkG,OAAO,oBAAqB,SAAkCC,GACtGA,IACF9G,EAAoBW,EAAOa,MAAMsF,GAE5BnG,EAAO0G,iBAAiB1G,EAAO4C,YAAa5C,EAAO0B,KAAM1B,EAAO6C,OACnEtC,EAAUkE,IAAI,IACdlE,EAAUmE,eAAe,SACzBnE,EAAUmE,eAAe,cAI7BiC,EAAoC3G,EAAOkG,OAAO,mBAAoB,SAAiCC,GACnGA,IACF7G,EAAmBU,EAAOa,MAAMsF,GAE3BnG,EAAO0G,iBAAiB1G,EAAO4C,YAAa5C,EAAO0B,KAAM1B,EAAO6C,OACnEtC,EAAUkE,IAAI,IACdlE,EAAUmE,eAAe,SACzBnE,EAAUmE,eAAe,cA0YjC,IArYA1E,EAAO4G,UAAY,WAEU,KAAvB5G,EAAO4C,aAET5C,EAAO4C,YAAc,EAErBI,KAGAhD,EAAO4C,aAAe,EAIpB5C,EAAOhB,eAEJgB,EAAOuE,oBAAoBvE,EAAO0B,KAAO,IAAM1B,EAAO4C,YAAc,IAAM5C,EAAOlC,KAAK,KAEzFgF,KAKJ9C,EAAOyB,MAAQhD,EAAQ,QAAQ,IAAIsC,KAAKf,EAAO0B,KAAM1B,EAAO4C,YAAc,GAAI,QAE9EpB,EAAexB,EAAO4C,YAAa5C,EAAO0B,MAE1C1B,EAAO6C,SAAMgE,GAGf7G,EAAO8G,0BAA4B,WACjC,IAAIlE,EAAc5C,EAAO4C,YACrBlB,EAAO1B,EAAO0B,KACdqF,EAAUtI,EAAQ,QAAQ,IAAIsC,KAAK,IAAIA,KAAKW,EAAO,IAAMkB,EAAc,OAAOoE,UA1XrE,OA0X4F,MAWzG,OAToB,IAAhBpE,GAEFA,EAAc,GACdlB,GAAc,GAGdkB,GAAe,IAGb5C,EAAOjB,eACJiB,EAAOsE,oBAAoB5C,EAAO,IAAMkB,EAAc,IAAMmE,KASrE/G,EAAOiH,0BAA4B,WACjC,IAAIrE,EAAc5C,EAAO4C,YACrBlB,EAAO1B,EAAO0B,KAWlB,OAToB,KAAhBkB,GAEFA,EAAc,EACdlB,GAAQ,GAGRkB,GAAe,IAGb5C,EAAOhB,eACJgB,EAAOuE,oBAAoB7C,EAAO,IAAMkB,EAAc,SAS/D5C,EAAOkH,UAAY,WAEU,IAAvBlH,EAAO4C,aAET5C,EAAO4C,YAAc,GAErBG,KAGA/C,EAAO4C,aAAe,EAGpB5C,EAAOjB,eAEJiB,EAAOsE,oBAAoBtE,EAAO0B,KAAO,IAAM1B,EAAO4C,YAAc,IAAM5C,EAAOlC,KAAKkC,EAAOlC,KAAKI,OAAS,KAE9GyE,KAIJ3C,EAAOyB,MAAQhD,EAAQ,QAAQ,IAAIsC,KAAKf,EAAO0B,KAAM1B,EAAO4C,YAAc,GAAI,QAE9EpB,EAAexB,EAAO4C,YAAa5C,EAAO0B,MAE1C1B,EAAO6C,SAAMgE,GAGf7G,EAAOmH,oBAAsB,SAAmCC,GAE9DpH,EAAO4C,YAAcH,OAAOhE,EAAQ,QAAQ,IAAIsC,KAAKqG,EAAsB,YAAa,OACxF5F,EAAexB,EAAO4C,YAAa5C,EAAO0B,MAC1C2C,KAGFrE,EAAOqH,WAAa,SAAoB3F,GAOtC,GAJKzE,IACH+C,EAAO6C,SAAMgE,GAGX7G,EAAOhB,cACTgB,EAAO0B,KAAOe,OAAOf,IAErB,IAAK1B,EAAOsH,oBAAoB5F,GAE9B,YAEG,GAAI1B,EAAOjB,cAChBiB,EAAO0B,KAAOe,OAAOf,KAEhB1B,EAAOuH,oBAAoB7F,GAE9B,OAIJ1B,EAAOwH,cAAc9F,GACrB1B,EAAOyH,qBAAsB,EAC7B9I,EAAS,WACPqB,EAAO0B,KAAOe,OAAOf,GACrBF,EAAexB,EAAO4C,YAAa5C,EAAO0B,OACzC,IAGL1B,EAAOuB,aAAe,WAChBpB,EAAYqF,UACdrF,EAAYqF,UAAUP,OAAO,0BAG7BN,EAAYM,OAAO9E,EAAa,2BAIpCH,EAAO0H,iBAAmB,SAA0B7E,GAE9C7C,EAAO2H,gBAAgB3H,EAAO4C,YAAa5C,EAAO0B,KAAMmB,IACxD7C,EAAO0G,iBAAiB1G,EAAO4C,YAAa5C,EAAO0B,KAAMmB,IACzD7C,EAAOuE,oBAAoBvE,EAAO0B,KAAO,IAAM1B,EAAO4C,YAAc,IAAMC,IAC1E7C,EAAOsE,oBAAoBtE,EAAO0B,KAAO,IAAM1B,EAAO4C,YAAc,IAAMC,KAE5E7C,EAAO6C,IAAMJ,OAAOI,GACpB7C,EAAO2F,YAAc3F,EAAO6C,IAC5B7C,EAAO0F,cAAgB1F,EAAO4C,YAC9B5C,EAAO4F,aAAe5F,EAAO0B,KAE7B2C,IAEInE,EAAK0H,eAAe,gBACtBrH,EAAU,GAAGsH,QAGf7H,EAAOuB,iBAIXvB,EAAOwH,cAAgB,SAAuBM,GAC5C,IAAInG,EACDoG,KACAC,EAAgB,GAChBC,EAAe,GAelB,IAbAjI,EAAOkI,mBACHjL,IAEF+K,EAAgB,GAChBC,EAAe,GACVjI,EAAOjB,cAAgBiB,EAAOhB,eAGjCgJ,GADAF,EAAe,IAAI/G,KAAKf,EAAOhB,cAAc8G,eACd,IAAI/E,KAAKf,EAAOjB,cAAc+G,cAC7DmC,EAAe,IAIdtG,EAAIqG,EAAerG,EAAI,EAAGA,GAAK,EAElCoG,EAAYvF,KAAKC,OAAOqF,GAAgBnG,GAG1C,IAAKA,EAAI,EAAGA,EAAIsG,EAActG,GAAK,EAEjCoG,EAAYvF,KAAKC,OAAOqF,GAAgBnG,GAGjB,SAArB3B,EAAOP,WAETc,EAAU4H,GAAG,aAAc,WAEzB,GAAI5H,EAAU,GAAG+E,OACf/E,EAAU,GAAG+E,MAAMpH,QACnBqC,EAAU,GAAG+E,MAAMpH,OAAS,EAE5B,KAEI4C,EADEF,EACKqC,EAAmB1C,EAAU,GAAG+E,MAAMG,WAAY7E,GAElD,IAAIG,KAAKR,EAAU,GAAG+E,MAAMG,aAG5BK,gBACPM,MAAMtF,EAAKqB,YACXiE,MAAMtF,EAAKiF,aACZ/F,EAAO2H,gBAAgB7G,EAAKiF,WAAYjF,EAAKgF,cAAehF,EAAKqB,WACjEnC,EAAO0G,iBAAiB5F,EAAKiF,WAAYjF,EAAKgF,cAAehF,EAAKqB,WAClEnC,EAAOuE,oBAAoBzD,IAC3Bd,EAAOsE,oBAAoBxD,IAE1Bd,EAAOoI,OAAO,WAEZpI,EAAOyB,MAAQhD,EAAQ,QAAQqC,EAAM,QACrCd,EAAO4C,YAAcH,OAAOhE,EAAQ,QAAQqC,EAAM,OAClDd,EAAO6C,IAAMJ,OAAOhE,EAAQ,QAAQqC,EAAM,OAEG,IAAzCA,EAAKgF,cAAcL,WAAWvH,SAChC8B,EAAO0B,KAAOe,OAAOhE,EAAQ,QAAQqC,EAAM,UAE7CU,EAAexB,EAAO4C,YAAa5C,EAAO0B,QAG9C,MAAO2G,GAEP,OAAOA,KAMXrI,EAAOhB,cACT+I,GACAA,EAAY7J,SACX8B,EAAOsH,oBAAoB7E,OAAOsF,EAAYA,EAAY7J,OAAS,IAAM,GAE1E8B,EAAOsI,6BAA8B,EAGrCtI,EAAOsI,6BAA8B,EAGnCtI,EAAOjB,cACTgJ,GACAA,EAAY7J,SACX8B,EAAOuH,oBAAoB9E,OAAOsF,EAAY,IAAM,GAErD/H,EAAOuI,6BAA8B,EAGrCvI,EAAOuI,6BAA8B,EAGvCvI,EAAOkI,gBAAkBH,GAG3B/H,EAAO2H,gBAAkB,SAAyB/E,EAAalB,EAAMmB,GACnE,IAAIlB,EAAI,EAER,GAAIpC,GAAwBA,EAAqBrB,OAAS,EACxD,IAAKyD,EAAGA,GAAKpC,EAAqBrB,OAAQyD,GAAK,EAC7C,GAAIpC,EAAqBoC,KAAO,IAAIZ,KAAK6B,EAAc,IAAMC,EAAM,IAAMnB,GAAMS,SAC7E,OAAO,EAKb,OAAO,GAGTnC,EAAO0G,iBAAmB,SAA0B9D,EAAalB,EAAMmB,GACrE,IAAIlB,EAAI,EAER,GAAItC,GACFA,EAAkBnB,OAAS,EAE3B,IAAKyD,EAAGA,GAAKtC,EAAkBnB,OAAQyD,GAAK,EAE1C,GAAI,IAAIZ,KAAK1B,EAAkBsC,IAAIqF,YAAc,IAAIjG,KAAK6B,EAAc,IAAMC,EAAM,IAAMnB,GAAMsF,UAE9F,OAAO,EAKb,GAAI1H,EAAkB,CAEpB,IAAKqC,EAAGA,GAAKrC,EAAiBpB,OAAQyD,GAAK,EAEzC,GAAI,IAAIZ,KAAKzB,EAAiBqC,IAAIqF,YAAc,IAAIjG,KAAK6B,EAAc,IAAMC,EAAM,IAAMnB,GAAMsF,UAE7F,OAAO,EAIX,OAAO,EAGT,OAAO,GAGThH,EAAOsE,oBAAsB,SAA6BkE,GAExD,QAAMxI,EAAOjB,cACR,IAAIgC,KAAKf,EAAOjB,eAClB,IAAIgC,KAAKyH,GAAOxB,UAAY,IAAIjG,KAAKf,EAAOjB,cAAciI,YAQ/DhH,EAAOuE,oBAAsB,SAA6BiE,GAExD,QAAMxI,EAAOhB,cACR,IAAI+B,KAAKf,EAAOhB,eAClB,IAAI+B,KAAKyH,GAAOxB,UAAY,IAAIjG,KAAKf,EAAOhB,cAAcgI,YAQ/DhH,EAAOsH,oBAAsB,SAA6B5F,GACxD,QAAM1B,EAAOhB,cACX0C,EAAO,IAAIX,KAAKf,EAAOhB,cAAc8G,gBAQzC9F,EAAOuH,oBAAsB,SAA6B7F,GACxD,QAAM1B,EAAOjB,cACX2C,EAAO,IAAIX,KAAKf,EAAOjB,cAAc+G,gBAQzC9F,EAAOuC,gBAAkB,SAAwBkG,GAC/C,IAAIC,EAAejG,OAAOgG,EAAS,IAMnC,QAJKC,GAAgBA,EAAe,GAAKA,EAAe,KAEtDA,EAAe,GAEVA,GAITrH,EAAeA,EAAa4C,QAAQ,MAAOvF,EAAaiK,eAAe1E,QAAQ,MAAOvF,EAAakK,aACnG5I,EAAOf,eAAiBe,EAAOf,gBAAkB,eACjDe,EAAOd,cAAgBc,EAAOd,eAAiB,cAC/Cc,EAAOb,gBAAkBa,EAAOb,iBAAmB,OACnDa,EAAOZ,gBAAkBY,EAAOZ,iBAAmB,OACnDY,EAAOyB,MAAQhD,EAAQ,QAAQqC,EAAM,QACrCd,EAAO4C,YAAcH,OAAOhE,EAAQ,QAAQqC,EAAM,OAClDd,EAAO6C,IAAMJ,OAAOhE,EAAQ,QAAQqC,EAAM,OAC1Cd,EAAON,iBAAmBM,EAAOuC,gBAAgBvC,EAAON,kBAEpDM,EAAOhB,aAETgB,EAAO0B,KAAOe,OAAOhE,EAAQ,QAAQ,IAAIsC,KAAKf,EAAOhB,cAAe,SAGpEgB,EAAO0B,KAAOe,OAAOhE,EAAQ,QAAQqC,EAAM,SAE7Cd,EAAO6I,OAAS1H,EAAS2C,MAEzB9D,EAAO8I,gBACFzI,EAAIL,EAAON,iBAAkBW,GAAKL,EAAON,iBAAmB,EAAGW,GAAK,EAEvEL,EAAO8I,aAAatG,KAAKnC,EAAI,GAE/BL,EAAO8I,aAAe9I,EAAO8I,aAAaC,IAAI,SAAqBrF,GAEjE,OAAOjF,EAAQ,QAAQ,IAAIsC,KAAK,IAAIA,KAAK,cAAciI,UAv4BnC,MAu4BuEtF,GAAK,SAI9F1D,EAAOL,qBACmC,IAA5CK,EAAOL,mBAAmBqE,QAAQ,MAElChE,EAAOiJ,aAAe,kBAAmB,IAAIlI,MAAOiG,WAAakC,KAAKC,MAAsB,EAAhBD,KAAKE,UAAgB,GACjGrM,EAAQkD,QAAQmF,SAASC,uBAAuBrF,EAAOL,mBAAmBsE,QAAQ,IAAK,KAAK,IAAIoF,OAAO9K,EAASxB,EAAQkD,QAAQoB,IAAerB,EAAQ,SAAsB0D,GAE3KvD,EAAcpD,EAAQkD,QAAQyD,GAAI,OAE3B1D,EAAOL,qBAC4B,IAA5CK,EAAOL,mBAAmBqE,QAAQ,MAElChE,EAAOiJ,aAAe,kBAAmB,IAAIlI,MAAOiG,WAAakC,KAAKC,MAAsB,EAAhBD,KAAKE,UAAgB,GACjGrM,EAAQkD,QAAQmF,SAASkE,eAAetJ,EAAOL,mBAAmBsE,QAAQ,IAAK,MAAMoF,OAAO9K,EAASxB,EAAQkD,QAAQoB,IAAerB,EAAQ,SAAsB0D,GAEhKvD,EAAcpD,EAAQkD,QAAQyD,GAAI,OAE3B1D,EAAOL,oBACc,SAA9BK,EAAOL,oBACPK,EAAOiJ,aAAe,mBAAoB,IAAIlI,MAAOiG,WAAakC,KAAKC,MAAsB,EAAhBD,KAAKE,UAAgB,IAClGrM,EAAQkD,QAAQmF,UAAUmE,KAAK,QAAQF,OAAO9K,EAASxB,EAAQkD,QAAQoB,IAAerB,EAAQ,SAAsB0D,GAElHvD,EAAcpD,EAAQkD,QAAQyD,GAAI,QAIpCnD,EAAUiJ,MAAMjL,EAASxB,EAAQkD,QAAQoB,IAAerB,IAExDG,EAAcF,EAAQ,GAAGO,cAAc,gCA1fvB,WACd,OAAKR,EAAOJ,kBAKLI,EAAOa,MAAMb,EAAOJ,sBAyf7BW,EAAU4H,GAAG,sBAAuB,WAElClH,GAAiB,EAEZD,GACJC,IAAkBd,EAKjBgF,IAHAnF,EAAOuB,iBAQbhB,EAAU4H,GAAG,gBAAiB,WAE5BlH,GAAiB,IAGnBlE,EAAQkD,QAAQE,GAAagI,GAAG,aAAc,WAE5CnH,GAAY,IAGdjE,EAAQkD,QAAQE,GAAagI,GAAG,aAAc,WAE5CnH,GAAY,IAGdjE,EAAQkD,QAAQE,GAAagI,GAAG,UAAW,WAEzCnH,GAAY,IAGdjE,EAAQkD,QAAQ3B,GAAS6J,GAAG,sBAAuB7G,IAG/CtB,EAAOjB,eACRiB,EAAOuH,oBAAoBvH,EAAO0B,QAClC1B,EAAOsE,oBAAoBtE,EAAO0B,KAAO,IAAM1B,EAAO4C,YAAc,IAAM5C,EAAO6C,OAElFF,KAGE3C,EAAOhB,eACRgB,EAAOsH,oBAAoBtH,EAAO0B,QAClC1B,EAAOuE,oBAAoBvE,EAAO0B,KAAO,IAAM1B,EAAO4C,YAAc,IAAM5C,EAAO6C,OAElFC,IAIF9C,EAAOwH,cAAcxH,EAAO0B,MAE5BF,EAAexB,EAAO4C,YAAa5C,EAAO0B,MAC1C1B,EAAOgG,gBAAkBA,EAEzBhG,EAAOyJ,IAAI,WAAY,WAErBxD,IACAK,IACAC,IACAC,IACAC,IACAE,IACApG,EAAUmJ,IAAI,6BACd3M,EAAQkD,QAAQE,GAAauJ,IAAI,iCACjC3M,EAAQkD,QAAQ3B,GAASoL,IAAI,sBAAuBpI,QA6B5DvE,EAAQ4M,OAAO,uBACDC,UAAU,cAAe,UAAW,WAAY,UAAW,UAAW,eAAgB,WAAYvL,KAChHtB,QAASC","file":"angular-datepicker.min.js"}
\ No newline at end of file
+{"version":3,"sources":["../src/js/angular-datepicker.js"],"names":["angular","isMobile","generateHtmlTemplate","prevButton","nextButton","preventMobile","toReturn","monthAndYearHeader","yearsPaginationHeader","daysColumns","days","iterator","aRow","splice","length","forEach","join","module","directive","$document","$compile","$locale","$filter","$interpolate","$timeout","require","restrict","scope","dateSet","dateMinLimit","dateMaxLimit","dateMonthTitle","dateYearTitle","buttonNextTitle","buttonPrevTitle","dateDisabledDates","dateEnabledDates","dateDisabledWeekdays","dateSetHidden","dateTyper","dateWeekStartDay","datepickerAppendTo","datepickerToggle","datepickerClass","datepickerShow","clearText","link","$scope","element","attr","ngModelCtrl","theCalendar","pageDatepickers","n","selector","thisInput","querySelector","children","buttonPrev","buttonNext","dateFormat","$eval","date","Date","isMouseOn","isMouseOnInput","datepickerMobile","datetime","DATETIME_FORMATS","htmlTemplate","onClickOnWindow","hideCalendar","setDaysInMonth","month","year","i","howManyNextDays","howManyPreviousDays","monthAlias","dateWeekEndDay","limitDate","getDate","firstDayMonthNumber","getDay","lastDayMonthNumber","prevMonthDays","nextMonthDays","validateWeekDay","push","Number","slice","resetToMinDate","monthNumber","day","resetToMaxDate","localDateTimestamp","rawDate","dateFormatDefinition","formatDate","dateSplit","m","d","y","index","el","longName","shortName","MONTH","SHORTMONTH","indexOf","replace","split","filter","item","match","setInputValue","isSelectableMinDate","isSelectableMaxDate","modelDate","$viewValue","getTime","setYear","setMonth","setDate","$setViewValue","classHelper","ele","klass","classes","className","concat","showCalendar","isShowed","document","getElementsByClassName","value","key","classList","remove","add","String","toString","selectedMonth","selectedDay","selectedYear","today","getFullYear","getMonth","unregisterDataSetWatcher","$watch","newValue","isNaN","parse","unregisterDateMinLimitWatcher","unregisterDateMaxLimitWatcher","unregisterDateFormatWatcher","unregisterDateDisabledDatesWatcher","isSelectableDate","unregisterDateEnabledDatesWatcher","nextMonth","undefined","willPrevMonthBeSelectable","prevDay","willNextMonthBeSelectable","prevMonth","selectedMonthHandle","selectedMonthNumber","setNewYear","isSelectableMaxYear","isSelectableMinYear","paginateYears","showYearsPagination","setDatepickerDay","isSelectableDay","hasOwnProperty","focus","startingYear","theNewYears","daysToPrepend","daysToAppend","paginationYears","on","$apply","e","paginationYearsNextDisabled","paginationYearsPrevDisabled","aDate","weekDay","validWeekDay","clear","startSymbol","endSymbol","months","daysInString","map","valueOf","datepickerID","Math","floor","random","append","getElementById","find","after","event","target","nodeName","type","stopPropagation","checkVisibility","$on","off","navigator"],"mappings":"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","file":"angular-datepicker.min.js"}
\ No newline at end of file
diff --git a/src/css/angular-datepicker.css b/src/css/angular-datepicker.css
index 4a26ee9..4c5d763 100644
--- a/src/css/angular-datepicker.css
+++ b/src/css/angular-datepicker.css
@@ -5,9 +5,9 @@ datepicker a, [datepicker] a, .datepicker a{
 datepicker a:hover, [datepicker] a:hover, .datepicker a:hover{
   text-decoration:none;
 }
-datepicker select, datepicker select:focus, datepicker select:hover,
-.datepicker select, .datepicker select:focus, .datepicker select:hover,
-[datepicker] select, [datepicker] select:focus, [datepicker] select:hover{
+datepicker select._720kb-datepicker-calendar-select,
+.datepicker select._720kb-datepicker-calendar-select,
+[datepicker] select._720kb-datepicker-calendar-select {
   width:100%;
    overflow: hidden;
    background:none;
@@ -23,14 +23,13 @@ datepicker, .datepicker, [datepicker],
 ._720kb-datepicker-calendar-days-header,
 ._720kb-datepicker-calendar-years-pagination-pages {
   font-family: Helvetica Neue, Arial, sans-serif;
-  font-size: 13.5px;
+  font-size: inherit;
   -webkit-box-sizing: border-box;
   -moz-box-sizing: border-box;
   -ms-box-sizing: border-box;
   box-sizing: border-box;
   width: 100%;
   margin: 0 auto;
-  float: left;
   clear: right;
   position: relative;
 }
@@ -60,13 +59,17 @@ datepicker, .datepicker, [datepicker],
   text-align: center;
   font-size: 15px;
   line-height: 40px;
-}
-._720kb-datepicker-calendar-header:nth-child(odd) {
   background: #138EFA;
 }
 ._720kb-datepicker-calendar-header:nth-child(even) {
   background: #7BC6FC;
 }
+._720kb-datepicker-calendar-header-clear {
+  background: #DDDDDD;
+}
+._720kb-datepicker-calendar-header-container {
+   height:40px;
+}
 ._720kb-datepicker-calendar-header-left,
 ._720kb-datepicker-calendar-header-middle,
 ._720kb-datepicker-calendar-header-right {
@@ -109,9 +112,16 @@ datepicker, .datepicker, [datepicker],
   -moz-border-radius: 1px;
   border-radius: 1px;
 }
-._720kb-datepicker-calendar-day:hover,
+._720kb-datepicker-calendar-day:hover {
+  background: #d0e9ff;
+}
+._720kb-datepicker-calendar-day._720kb-datepicker-today {
+  background: #777;
+  color: #fff;
+}
 ._720kb-datepicker-calendar-day._720kb-datepicker-active {
-  background: rgba(0, 0, 0, 0.03);
+  background: #138efa;
+  color: #fff;
 }
 ._720kb-datepicker-calendar-header a, ._720kb-datepicker-calendar-header a:hover {
   text-decoration:none;
@@ -144,7 +154,6 @@ datepicker, .datepicker, [datepicker],
 }
 ._720kb-datepicker-calendar-years-pagination{
   padding:2% 0 0 0;
-  float:left;
   clear: right;
   width: 100%;
 }
diff --git a/src/js/angular-datepicker.js b/src/js/angular-datepicker.js
index 971dbc9..012a08f 100644
--- a/src/js/angular-datepicker.js
+++ b/src/js/angular-datepicker.js
@@ -1,11 +1,14 @@
 /*global angular document navigator*/
-(function withAngular(angular, navigator) {
+(function withAngular(angular /*, navigator*/) {
 
   'use strict';
 
   var A_DAY_IN_MILLISECONDS = 86400000
     , isMobile = (function isMobile() {
+      // mobile off 動作確認後戻す
+      return false;
 
+      /*
       if (navigator.userAgent &&
         (navigator.userAgent.match(/Android/i) ||
         navigator.userAgent.match(/webOS/i) ||
@@ -17,6 +20,7 @@
 
         return true;
       }
+      */
     }())
     , generateMonthAndYearHeader = function generateMonthAndYearHeader(prevButton, nextButton, preventMobile) {
 
@@ -30,7 +34,7 @@
         return [
           '<div class="_720kb-datepicker-calendar-header">',
             '<div class="_720kb-datepicker-calendar-header-middle _720kb-datepicker-mobile-item _720kb-datepicker-calendar-month">',
-              '<select ng-model="month" title="{{ dateMonthTitle }}" ng-change="selectedMonthHandle(month)">',
+              '<select class="_720kb-datepicker-calendar-select" ng-model="month" title="{{ dateMonthTitle }}" ng-change="selectedMonthHandle(month)">',
                 '<option ng-repeat="item in months" ng-selected="item === month" ng-disabled=\'!isSelectableMaxDate(item + " " + day + ", " + year) || !isSelectableMinDate(item + " " + day + ", " + year)\' ng-value="$index + 1" value="$index + 1">',
                   '{{ item }}',
                 '</option>',
@@ -39,7 +43,7 @@
           '</div>',
           '<div class="_720kb-datepicker-calendar-header">',
             '<div class="_720kb-datepicker-calendar-header-middle _720kb-datepicker-mobile-item _720kb-datepicker-calendar-month">',
-              '<select ng-model="mobileYear" title="{{ dateYearTitle }}" ng-change="setNewYear(mobileYear)">',
+              '<select class="_720kb-datepicker-calendar-select" ng-model="mobileYear" title="{{ dateYearTitle }}" ng-change="setNewYear(mobileYear)">',
                 '<option ng-repeat="item in paginationYears track by $index" ng-selected="year === item" ng-disabled="!isSelectableMinYear(item) || !isSelectableMaxYear(item)" ng-value="item" value="item">',
                   '{{ item }}',
                 '</option>',
@@ -51,24 +55,27 @@
 
       return [
         '<div class="_720kb-datepicker-calendar-header">',
-          '<div class="_720kb-datepicker-calendar-header-left">',
-            '<a class="_720kb-datepicker-calendar-month-button" href="javascript:void(0)" ng-class="{\'_720kb-datepicker-item-hidden\': !willPrevMonthBeSelectable()}" ng-click="prevMonth()" title="{{ buttonPrevTitle }}">',
-              prevButton,
-            '</a>',
-          '</div>',
-          '<div class="_720kb-datepicker-calendar-header-middle _720kb-datepicker-calendar-month">',
-            '{{month}}&nbsp;',
-            '<a href="javascript:void(0)" ng-click="paginateYears(year); showYearsPagination = !showYearsPagination;">',
-              '<span>',
-                '{{year}}',
-                '<i ng-class="{\'_720kb-datepicker-calendar-header-closed-pagination\': !showYearsPagination, \'_720kb-datepicker-calendar-header-opened-pagination\': showYearsPagination}"></i>',
-              '</span>',
+          '<div ng-if="clearText" class="_720kb-datepicker-calendar-header-clear"><a ng-click="clear();$event.stopPropagation()">{{clearText}}</a></div>',
+          '<div class="_720kb-datepicker-calendar-header-container">',
+            '<div class="_720kb-datepicker-calendar-header-left">',
+              '<a class="_720kb-datepicker-calendar-month-button" href="javascript:void(0)" ng-class="{\'_720kb-datepicker-item-hidden\': !willPrevMonthBeSelectable()}" ng-click="prevMonth();$event.stopPropagation()" title="{{ buttonPrevTitle }}">',
+                prevButton,
+              '</a>',
+            '</div>',
+            '<div class="_720kb-datepicker-calendar-header-middle _720kb-datepicker-calendar-month">',
+              '{{month}}&nbsp;',
+              '<a href="javascript:void(0)" ng-click="paginateYears(year); showYearsPagination = !showYearsPagination;$event.stopPropagation()">',
+                '<span>',
+                  '{{year}}',
+                  '<i ng-class="{\'_720kb-datepicker-calendar-header-closed-pagination\': !showYearsPagination, \'_720kb-datepicker-calendar-header-opened-pagination\': showYearsPagination}"></i>',
+                '</span>',
+              '</a>',
+            '</div>',
+            '<div class="_720kb-datepicker-calendar-header-right">',
+            '<a class="_720kb-datepicker-calendar-month-button" ng-class="{\'_720kb-datepicker-item-hidden\': !willNextMonthBeSelectable()}" href="javascript:void(0)" ng-click="nextMonth();$event.stopPropagation()" title="{{ buttonNextTitle }}">',
+              nextButton,
             '</a>',
-          '</div>',
-          '<div class="_720kb-datepicker-calendar-header-right">',
-          '<a class="_720kb-datepicker-calendar-month-button" ng-class="{\'_720kb-datepicker-item-hidden\': !willNextMonthBeSelectable()}" href="javascript:void(0)" ng-click="nextMonth()" title="{{ buttonNextTitle }}">',
-            nextButton,
-          '</a>',
+            '</div>',
           '</div>',
         '</div>'
       ];
@@ -78,15 +85,15 @@
       return [
         '<div class="_720kb-datepicker-calendar-header" ng-show="showYearsPagination">',
           '<div class="_720kb-datepicker-calendar-years-pagination">',
-            '<a ng-class="{\'_720kb-datepicker-active\': y === year, \'_720kb-datepicker-disabled\': !isSelectableMaxYear(y) || !isSelectableMinYear(y)}" href="javascript:void(0)" ng-click="setNewYear(y)" ng-repeat="y in paginationYears track by $index">',
+            '<a ng-class="{\'_720kb-datepicker-active\': y === year, \'_720kb-datepicker-disabled\': !isSelectableMaxYear(y) || !isSelectableMinYear(y)}" href="javascript:void(0)" ng-click="setNewYear(y);$event.stopPropagation()" ng-repeat="y in paginationYears track by $index">',
               '{{y}}',
             '</a>',
           '</div>',
           '<div class="_720kb-datepicker-calendar-years-pagination-pages">',
-            '<a href="javascript:void(0)" ng-click="paginateYears(paginationYears[0])" ng-class="{\'_720kb-datepicker-item-hidden\': paginationYearsPrevDisabled}">',
+            '<a href="javascript:void(0)" ng-click="paginateYears(paginationYears[0]);$event.stopPropagation()" ng-class="{\'_720kb-datepicker-item-hidden\': paginationYearsPrevDisabled}">',
               prevButton,
             '</a>',
-            '<a href="javascript:void(0)" ng-click="paginateYears(paginationYears[paginationYears.length -1 ])" ng-class="{\'_720kb-datepicker-item-hidden\': paginationYearsNextDisabled}">',
+            '<a href="javascript:void(0)" ng-click="paginateYears(paginationYears[paginationYears.length -1 ]);$event.stopPropagation()" ng-class="{\'_720kb-datepicker-item-hidden\': paginationYearsNextDisabled}">',
               nextButton,
             '</a>',
           '</div>',
@@ -110,7 +117,7 @@
           '<a href="javascript:void(0)" ng-repeat="px in prevMonthDays" class="_720kb-datepicker-calendar-day _720kb-datepicker-disabled">',
             '{{px}}',
           '</a>',
-          '<a href="javascript:void(0)" ng-repeat="item in days" ng-click="setDatepickerDay(item)" ng-class="{\'_720kb-datepicker-active\': selectedDay === item && selectedMonth === monthNumber && selectedYear === year, \'_720kb-datepicker-disabled\': !isSelectableMinDate(year + \'/\' + monthNumber + \'/\' + item ) || !isSelectableMaxDate(year + \'/\' + monthNumber + \'/\' + item) || !isSelectableDate(monthNumber, year, item) || !isSelectableDay(monthNumber, year, item),\'_720kb-datepicker-today\': item === today.getDate() && monthNumber === (today.getMonth() + 1) && year === today.getFullYear() && !selectedDay}" class="_720kb-datepicker-calendar-day">',
+          '<a href="javascript:void(0)" ng-repeat="item in days" ng-click="setDatepickerDay(item);$event.stopPropagation()" ng-class="{\'_720kb-datepicker-active\': selectedDay === item && selectedMonth === monthNumber && selectedYear === year, \'_720kb-datepicker-disabled\': !isSelectableMinDate(year + \'/\' + monthNumber + \'/\' + item ) || !isSelectableMaxDate(year + \'/\' + monthNumber + \'/\' + item) || !isSelectableDate(monthNumber, year, item) || !isSelectableDay(monthNumber, year, item),\'_720kb-datepicker-today\': item === today.getDate() && monthNumber === (today.getMonth() + 1) && year === today.getFullYear()}" class="_720kb-datepicker-calendar-day">',
             '{{item}}',
           '</a>',
           '<a href="javascript:void(0)" ng-repeat="nx in nextMonthDays" class="_720kb-datepicker-calendar-day _720kb-datepicker-disabled">',
@@ -141,16 +148,16 @@
 
       return toReturn.join('');
     }
-    , datepickerDirective = function datepickerDirective($window, $compile, $locale, $filter, $interpolate, $timeout) {
+    , datepickerDirective = function datepickerDirective($document, $compile, $locale, $filter, $interpolate, $timeout) {
 
-      var linkingFunction = function linkingFunction($scope, element, attr) {
+      var linkingFunction = function linkingFunction($scope, element, attr, ngModelCtrl) {
 
         //get child input
         var selector = attr.selector
           , thisInput = angular.element(selector ? element[0].querySelector('.' + selector) : element[0].children[0])
           , theCalendar
-          , defaultPrevButton = '<b class="_720kb-datepicker-default-button">&lang;</b>'
-          , defaultNextButton = '<b class="_720kb-datepicker-default-button">&rang;</b>'
+          , defaultPrevButton = '<i class="fa fa-arrow-left"></i>'
+          , defaultNextButton = '<i class="fa fa-arrow-right"></i>'
           , prevButton = attr.buttonPrev || defaultPrevButton
           , nextButton = attr.buttonNext || defaultNextButton
           , dateFormat = attr.dateFormat
@@ -338,18 +345,30 @@
             if ($scope.isSelectableMinDate($scope.year + '/' + $scope.monthNumber + '/' + $scope.day) &&
                 $scope.isSelectableMaxDate($scope.year + '/' + $scope.monthNumber + '/' + $scope.day)) {
 
-              var modelDate = new Date($scope.year + '/' + $scope.monthNumber + '/' + $scope.day);
-
-              if (attr.dateFormat) {
-
-                thisInput.val($filter('date')(modelDate, dateFormat));
+              // $scope.watchにひっかかるように、Dateオブジェクトを作り直す(オブジェクトのアドレスを更新)
+              // and 年月日以外の値を保持して更新する
+              var modelDate = ngModelCtrl.$viewValue;
+
+              if (modelDate instanceof Date){
+                modelDate = new Date(modelDate.getTime());
+                modelDate.setYear($scope.year);
+                modelDate.setMonth($scope.monthNumber - 1);
+                modelDate.setDate($scope.day);
+              } else if (typeof modelDate === 'string') {
+                modelDate = new Date(modelDate);
+                modelDate.setDate(1); // dateが月末だと意図しない動きになるので一度月初にする
+                modelDate.setYear($scope.year);
+                modelDate.setMonth($scope.monthNumber - 1);
+                modelDate.setDate($scope.day);
               } else {
+                modelDate = new Date($scope.year + '/' + $scope.monthNumber + '/' + $scope.day);
+              }
 
-                thisInput.val(modelDate);
+              if (attr.dateFormat) {
+                modelDate = $filter('date')(modelDate, dateFormat);
               }
+              ngModelCtrl.$setViewValue(modelDate);
 
-              thisInput.triggerHandler('input');
-              thisInput.triggerHandler('change');//just to be sure;
             } else {
 
               return false;
@@ -390,8 +409,9 @@
             }
           }
           , showCalendar = function showCalendar() {
+            $scope.isShowed = true;
             //lets hide all the latest instances of datepicker
-            pageDatepickers = $window.document.getElementsByClassName('_720kb-datepicker-calendar');
+            pageDatepickers = document.getElementsByClassName('_720kb-datepicker-calendar');
 
             angular.forEach(pageDatepickers, function forEachDatepickerPages(value, key) {
               if (pageDatepickers[key].classList) {
@@ -407,9 +427,9 @@
 
               theCalendar.classList.add('_720kb-datepicker-open');
               if (dateFormat) {
-                date = localDateTimestamp(thisInput[0].value.toString(), dateFormat);
+                date = localDateTimestamp(String(ngModelCtrl.$viewValue).toString(), dateFormat);
               } else {
-                date = new Date(thisInput[0].value.toString());
+                date = new Date(String(ngModelCtrl.$viewValue).toString());
               }
               $scope.selectedMonth = Number($filter('date')(date, 'MM'));
               $scope.selectedDay = Number($filter('date')(date, 'dd'));
@@ -445,9 +465,9 @@
               return false;
             }
             if (dateFormat) {
-              date = localDateTimestamp(thisInput[0].value.toString(), dateFormat);
+              date = localDateTimestamp(ngModelCtrl.$viewValue.toString(), dateFormat);
             } else {
-              date = new Date(thisInput[0].value.toString());
+              date = new Date(ngModelCtrl.$viewValue.toString());
             }
             $scope.selectedMonth = Number($filter('date')(date, 'MM'));
             $scope.selectedDay = Number($filter('date')(date, 'dd'));
@@ -493,9 +513,7 @@
               dateDisabledDates = $scope.$eval(newValue);
 
               if (!$scope.isSelectableDate($scope.monthNumber, $scope.year, $scope.day)) {
-                thisInput.val('');
-                thisInput.triggerHandler('input');
-                thisInput.triggerHandler('change');//just to be sure;
+                ngModelCtrl.$setViewValue(null);
               }
             }
           })
@@ -504,9 +522,7 @@
               dateEnabledDates = $scope.$eval(newValue);
 
               if (!$scope.isSelectableDate($scope.monthNumber, $scope.year, $scope.day)) {
-                thisInput.val('');
-                thisInput.triggerHandler('input');
-                thisInput.triggerHandler('change');//just to be sure;
+                ngModelCtrl.$setViewValue(null);
               }
             }
           });
@@ -615,7 +631,10 @@
         };
 
         $scope.selectedMonthHandle = function manageSelectedMonthHandle(selectedMonthNumber) {
-
+          if (selectedMonthNumber === null) {
+            // iphoneのsafariで初期化時にselectedMonthNumber=nullで呼ばれる
+            return;
+          }
           $scope.monthNumber = Number($filter('date')(new Date(selectedMonthNumber + '/01/2000'), 'MM'));
           setDaysInMonth($scope.monthNumber, $scope.year);
           setInputValue();
@@ -653,6 +672,7 @@
         };
 
         $scope.hideCalendar = function hideCalendar() {
+          $scope.isShowed = false;
           if (theCalendar.classList) {
             theCalendar.classList.remove('_720kb-datepicker-open');
           } else {
@@ -716,15 +736,15 @@
 
             thisInput.on('keyup blur', function onTyping() {
 
-              if (thisInput[0].value &&
-                thisInput[0].value.length &&
-                thisInput[0].value.length > 0) {
+              if (ngModelCtrl.$viewValue &&
+                ngModelCtrl.$viewValue.length &&
+                ngModelCtrl.$viewValue.length > 0) {
 
                 try {
                   if (dateFormat) {
-                    date = localDateTimestamp(thisInput[0].value.toString(), dateFormat);
+                    date = localDateTimestamp(ngModelCtrl.$viewValue.toString(), dateFormat);
                   } else {
-                    date = new Date(thisInput[0].value.toString());
+                    date = new Date(ngModelCtrl.$viewValue.toString());
                   }
 
                   if (date.getFullYear() &&
@@ -879,6 +899,11 @@
           return validWeekDay;
         };
 
+        $scope.clear = function clear() {
+          ngModelCtrl.$setViewValue(null);
+          $scope.hideCalendar();
+        };
+
         // respect previously configured interpolation symbols.
         htmlTemplate = htmlTemplate.replace(/{{/g, $interpolate.startSymbol()).replace(/}}/g, $interpolate.endSymbol());
         $scope.dateMonthTitle = $scope.dateMonthTitle || 'Select month';
@@ -942,8 +967,38 @@
         //if datepicker-toggle="" is not present or true by default
         if (checkToggle()) {
 
-          thisInput.on('focus click focusin', function onFocusAndClick() {
+          thisInput.on('click', function onFocusAndClick(event) {
+            if (event.target.nodeName !== 'INPUT') {
+              // input以外の場合は無視する
+              return;
+            }
+            if (event.target.type !== 'button') {
+              // button以外は除く
+              return;
+            }
 
+            event.stopPropagation();
+            isMouseOnInput = true;
+
+            if (!isMouseOn &&
+            !isMouseOnInput && theCalendar || $scope.isShowed) {
+
+              $scope.hideCalendar();
+            } else {
+
+              showCalendar();
+            }
+          });
+
+          thisInput.on('focusin focus', function onFocusAndClick(event) {
+            if (event.target.nodeName !== 'INPUT') {
+              // input以外の場合は無視する
+              return;
+            }
+            if (event.target.type === 'button') {
+              // buttonは除く
+              return;
+            }
             isMouseOnInput = true;
 
             if (!isMouseOn &&
@@ -958,8 +1013,14 @@
         }
 
         thisInput.on('focusout blur', function onBlurAndFocusOut() {
-
+          // focusout/blurの場合、フォーカス外れた時のevent.targetはINPUT以外の要素
           isMouseOnInput = false;
+
+          if (!isMouseOn &&
+            !isMouseOnInput && theCalendar) {
+
+            $scope.hideCalendar();
+          }
         });
         //some tricky dirty events to fire if click is outside of the calendar and show/hide calendar when needed
         angular.element(theCalendar).on('mouseenter', function onMouseEnter() {
@@ -977,7 +1038,7 @@
           isMouseOn = true;
         });
 
-        angular.element($window).on('click focus focusin', onClickOnWindow);
+        $document.on('click focus focusin', onClickOnWindow);
 
         //check always if given range of dates is ok
         if ($scope.dateMinLimit &&
@@ -1010,11 +1071,12 @@
           unregisterDateEnabledDatesWatcher();
           thisInput.off('focus click focusout blur');
           angular.element(theCalendar).off('mouseenter mouseleave focusin');
-          angular.element($window).off('click focus focusin', onClickOnWindow);
+          $document.off('click focus focusin', onClickOnWindow);
         });
       };
 
       return {
+        'require': 'ngModel',
         'restrict': 'AEC',
         'scope': {
           'dateSet': '@',
@@ -1033,12 +1095,13 @@
           'datepickerAppendTo': '@',
           'datepickerToggle': '@',
           'datepickerClass': '@',
-          'datepickerShow': '@'
+          'datepickerShow': '@',
+          'clearText': '@'
         },
         'link': linkingFunction
       };
     };
 
   angular.module('720kb.datepicker', [])
-               .directive('datepicker', ['$window', '$compile', '$locale', '$filter', '$interpolate', '$timeout', datepickerDirective]);
+               .directive('datepicker', ['$document', '$compile', '$locale', '$filter', '$interpolate', '$timeout', datepickerDirective]);
 }(angular, navigator));