﻿(function($) {

    $.fn.extend({

        //pass the options variable to the function
        createMonthPager: function(options,
        onLeftPagerClick, onRightPagerClick,
        leftPagerHrefBuilderDelegate, rightPagerHrefBuilderDelegate) {


            //Set the default values, use comma to separate the settings, example:  
            var defaults = {
                leftToken: '<',
                rightToken: '>',
                currentDate: new Date(),
                monthes: ['Januar', 'Februar',
                          'Marts', 'April',
                          'Maj', 'Juni',
                          'Juli', 'August',
                          'September', 'Oktober',
                          'November', 'December']
            }

            var options = $.extend(defaults, options);

            return this.each(function() {
                var opt = options;
                var obj = $(this);
            
                var $leftPager = $('#leftPager', obj);
                $leftPager.text(getLeftPagerString(opt));



                if (isLeftPagerDateInPast(opt)) {
                    $leftPager.hide();
                }
                else {
                    $leftPager.removeAttr("disabled");
                }

                var $rightPager = $('#rightPager', obj);
                $rightPager.text(getRightPagerString(opt));



                $leftPager.click(
                    function() {
                        changeOptionDate(opt, -1);
                        if (isLeftPagerDateInPast(opt)) {
                            $leftPager.attr("disabled", true);
                        }
                        //$leftPager/*Link*/.text(getLeftPagerString(opt));
                        //$rightPager/*Link*/.text(getRightPagerString(opt));
                        if ($.isFunction(onLeftPagerClick)) {
                            onLeftPagerClick(opt.currentDate);
                        }
                    }
                );
                $rightPager.click(
                    function() {
                        changeOptionDate(opt, 1);
                        if (!isLeftPagerDateInPast(opt)) {
                            $leftPager.removeAttr("disabled");
                        }
                        //$rightPager/*Link*/.text(getRightPagerString(opt));
                        //$leftPager/*Link*/.text(getLeftPagerString(opt));
                        if ($.isFunction(onRightPagerClick)) {
                            onRightPagerClick(opt.currentDate);
                        }
                    }
                );
            });
            function getLeftPagerString(options) {

                var currentMonth = parseInt(options.currentDate.getMonth());
                var currentYear = parseInt(options.currentDate.getFullYear());

                if (currentMonth == 0) {
                    return options.leftToken + ' ' + options.monthes[11] + ' ' + (currentYear - 1);
                }

                return options.leftToken + ' ' + options.monthes[currentMonth - 1] + ' ' + currentYear;
            }
            function getRightPagerString(options) {

                var currentMonth = parseInt(options.currentDate.getMonth());
                var currentYear = parseInt(options.currentDate.getFullYear());

                if (currentMonth == 11) {
                    return options.monthes[0] + ' ' + (currentYear + 1) + ' ' + options.rightToken;
                }

                return options.monthes[currentMonth + 1] + ' ' + currentYear + ' ' + options.rightToken;
            }
            function getLeftPagerHref(oOptions) {
                if ($.isFunction(leftPagerHrefBuilderDelegate)) {
                    return leftPagerHrefBuilderDelegate(oOptions);
                }
                //return '';
            }
            function getRightPagerHref(oOptions) {
                if ($.isFunction(rightPagerHrefBuilderDelegate)) {
                    return rightPagerHrefBuilderDelegate(oOptions);
                }
                //return '';
            }
            function changeOptionDate(oOptions, iFlag) {

                var currentMonth = parseInt(oOptions.currentDate.getMonth());
                var currentYear = parseInt(oOptions.currentDate.getFullYear());
                if (iFlag == -1) {
                    if (currentMonth == 0) {
                        oOptions.currentDate.setFullYear(currentYear - 1);
                        oOptions.currentDate.setMonth(11);
                    }
                    else {
                        oOptions.currentDate.setFullYear(currentYear);
                        oOptions.currentDate.setMonth(currentMonth - 1);
                    }
                    return;
                }

                if (currentMonth == 11) {
                    oOptions.currentDate.setFullYear(currentYear + 1);
                    oOptions.currentDate.setMonth(0);
                }
                else {
                    oOptions.currentDate.setFullYear(currentYear);
                    oOptions.currentDate.setMonth(currentMonth + 1);
                }
            }
            function isLeftPagerDateInPast(oOptions) {
                return oOptions.currentDate < new Date() ? true : false;
            }
        }
    });

})(jQuery); 
