/**
 * @author trtik
 */

String.prototype.template = function (o) {
    return this.replace(/{([^{}]*)}/g,
        function (a, b) {
            var r = o[b];
            if (r === null || typeof r === 'undefined') return '';
            return typeof r === 'string' || typeof r === 'number' ? r : a;
        }
    );
}; 


$.ngsDatepickerCs = function(base, options) {
    
    var selectDay = $('#'+base+'_day');
    var selectMonth = $('#'+base+'_month');
    var selectYear = $('#'+base+'_year');
    var linkedDates = $('<input type="hidden" size="10" id="linkedDates" disabled="disabled"/>').insertAfter(selectYear);
    
    if (!(selectDay.size() && selectMonth.size() && selectYear.size())) {
        return false;
    }
    
    options = $.extend({ 
        minDate: new Date(2001, 1 - 1, 1), 
        maxDate: new Date(2010, 12 - 1, 31), 
        beforeShow: function() {
            linkedDates.val(selectDay.val() + "." + selectMonth.val() + "." + selectYear.val()); 
            return {};     
        }, 
        onSelect: function(date) {
            var month = parseInt(date.substring(0, 2), 10);
            var day = parseInt(date.substring(3, 5), 10);
            var year = parseInt(date.substring(6, 10), 10);

            selectDay.val(day); 
            selectMonth.val(month); 
            selectYear.val(year);
        }, 
        showOn: 'both'
    }, options || {}, $.datepicker.regional['cs']);

    linkedDates.datepicker(options);

    selectMonth.add(selectYear).change(function() {
        var daysInMonth = 32 - new Date(selectYear.val(), selectMonth.val() - 1, 32).getDate(); 
        $('option', selectDay).attr("disabled", ""); 
        $('option:gt(' + (daysInMonth - 1) +')', selectDay).attr("disabled", "disabled"); 
        if (selectDay.val() > daysInMonth) { 
            selectDay.val(daysInMonth); 
        }  
    });
};