﻿custom_datepicker = {
    //datepicker array
    dps: [],
    //callback mapping
    callbacks: [],

    //add date picker
    add: function (dp) {

        this.dps.push(dp);
    },

    // register date pickers
    register: function () {

        $.each(this.dps, function (key, dp) {

            var dp_default = {
                yearRange: '1900:2100',
                constrainInput: true,
                buttonImage: '/Content/Images/Dialog/calendar.png',
                buttonImageOnly: true,
                nextText: 'vor',
                prevtext: 'zurück',
                showOn: 'button',
                buttonText: 'Kalender',
                changeMonth: true,
                changeYear: true,
                dateFormat: 'dd.mm.yy',
                // dateFormat: 'DD, dd.mm.yy', // Regionalization for the main field (textbox) 
                dayNames: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],
                dayNamesMin: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
                monthNames: ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'],
                monthNamesShort: ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],
                firstDay: 1,
                onSelect: function () {
                    custom_datepicker.success(this.id);
                }
            };

            var dp_settings = $.extend(dp_default, dp);
            //console.log(dp_settings);

            $('#' + dp.id).after('<div><i><em id="' + dp.id + '_info">TT.MM.JJJJ</em></i></div>');
            $('#' + dp.id).datepicker(dp_settings);

            if (dp.onSuccess) {
                custom_datepicker.callbacks[dp.id] = key;
            }

            $('#' + dp.id).keyup(function () {
                custom_datepicker.val(this.id);
            });
        });

        $.each(this.dps, function () {
            custom_datepicker.val(this.id);
        });
    },

    // set info
    success: function (id) {
        //console.log("success");        		
        this.updateDisplay(id);

        var date = $('#' + id).datepicker('getDate');
        try { //try to execute callback function
            this.dps[this.callbacks[id]].onSuccess(id, date);
        }
        catch (e) { //no callback

        }
    },

    //change text display
    updateDisplay: function (id) {
        var date = $('#' + id).datepicker('getDate');
        $('#' + id + '_info').html
            (
			    $.datepicker.formatDate
                (
				    'DD, dd. MM yy',
				    date,
                    {   // Regionalization for the alternate field (TT.MM.JJJJ)
                        dayNames: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],
                        dayNamesMin: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],

                        monthNames: ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'],
                        monthNamesShort: ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez']
                    }
			    )
		    );
        $('#' + id).change();
    },

    val: function (id) {
        //console.log("val");
        var node = $('#' + id);

        var udate = node.val().replace(/[^0-9.]/g, '');
        node.val(udate);

        if (udate.length < 8) {
            $('#' + id + '_info').html('<i>TT.MM.JJJJ</i>');
            return;
        } else if (udate.length > 10) {
            udate = udate.substr(0, 10);
            node.val(udate);
        }

        var regex = /^[0-9]{2}\.{1}[0-9]{2}\.{1}[0-9]{4}$/;
        if (udate.match(/^[0-9]{8}$/)) {
            udate = udate.substr(0, 2) + '.' + udate.substr(2, 2) + '.' + udate.substr(4);
        }

        var udatestandard = udate.replace(/^([1-9]{1})\./, '0$1.').replace(/\.([1-9]{1})\./, '.0$1.');

        //console.log(udatestandard + " " + udate + " node value: " + node.attr('value'));

        if (udatestandard.match(regex) && (node.attr('value') != udate)) {
            node.attr('value', udate);
        }
        //console.log(node.attr('value'));

        var dpdate = $.datepicker.formatDate(
			'dd.mm.yy',
			node.datepicker('getDate')
		);
        //console.log(dpdate);

        if (dpdate.match(regex) && (udatestandard == dpdate)) {
            var logstring = "Matched! dpdate:" + dpdate + " udatestandard:" + udatestandard + " id:" + id;
            //console.log(logstring);
            this.success(id);
        }
        else {
            var logstring = "Failed to Match! dpdate:" + dpdate + " udatestandard:" + udatestandard + " id:" + id;
            //console.log(logstring);
            $('#' + id + '_info').html('<i>TT.MM.JJJJ</i>');
        }
    }
};
