(function () {

    'use strict';

    angular.module('angularApp')

    .directive("compareWithStartDate", compareWithStartDate)
    .directive("demoDatepicker", CreateDatePicker)

    function compareWithStartDate() {
        return {
            require: 'ngModel',
            link: function (scope, elem, $attrs, ngModel) {

                ngModel.$parsers.unshift(CheckDateValidation);
                ngModel.$formatters.unshift(CheckDateValidation);

                $attrs.$observe('checkDate', function (comparisonModel) {
                    return CheckDateValidation(ngModel.$viewValue);
                });

                function CheckDateValidation(viewValue) {

                    var comparisonModel = $attrs.compareWithStartDate.replace(/"/g, "");
                    var splittedValue = [];
                    if (typeof (viewValue) != 'undefined' && viewValue.indexOf('/') != -1) {
                        var copiedViewValue = angular.copy(viewValue);
                        splittedValue = String(copiedViewValue).split("/");
                        //copiedViewValue = splitteValue[1] + "/" + splitteValue[0] + "/" + splitteValue[2];
                    }

                    var endDate;
                    if (splittedValue.length != 0) {
                        endDate = new Date(splittedValue[0], parseInt(splittedValue[1]) - 1, splittedValue[2]);
                    }

                    //var startDate = Date.parse(comparisonModel);
                    var startDate = new Date(comparisonModel);
                    //  startDate.setDate(startDate.getDate()+1)


                    if (typeof (endDate) != 'undefined' && typeof (startDate) != 'undefined') {

                        if (startDate <= endDate) {
                            ngModel.$setValidity('checkDate', true);
                        }
                        else {
                            ngModel.$setValidity('checkDate', false);
                        }
                        return viewValue;
                    }

                }
            }
        };
    }

    function CreateDatePicker() {
        return {
            restrict: 'A',
            require: 'ngModel',
            link: function (scope, element, attrs, ngModelCtrl) {

                element.datepicker({
                    dateFormat: 'yy/mm/dd',
                    changeMonth: true,
                    onSelect: function (date) {
                        ngModelCtrl.$setViewValue(date);
                        ngModelCtrl.$render();
                    }
                });
            }
        }
    }

})();