(function ($) {
    $.fn.calendar = function (e) {
        var e = jQuery.extend({
            activeDay: false,
            ajaxFile: '/handler_calendar.php',
            path: '/#DATE#/'
        }, e);
        
      
        var f = new Array();
        var g = null;
        var h = null;
        var i = true;
        var k = false;
        var day = e.day;

        return this.each(function () {
            var j = jQuery;
            var a = new Date();
     
            if (typeof(e.year)=="undefined")
            	var b = a.getFullYear();
            else 
            	var b = e.year;
            
            if (typeof(e.month)=="undefined")
            	var c = a.getMonth() + 1;
            else 
            	var	c=e.month;
            
           
            loadMonthCalendar(b, c, day);
           
        });

        function createCalendar() {
            $("#datepicker .calendar").datepicker({
            	closeText: 'Zamknij',
        		prevText: '&#x3c;Poprzedni',
        		nextText: 'Następny&#x3e;',
        		currentText: 'Dziś',
        		monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec',
        		'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'],
        		monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze',
        		'Lip','Sie','Wrz','Pa','Lis','Gru'],
        		dayNames: ['Niedziela','Poniedziałek','Wtorek','Środa','Czwartek','Piątek','Sobota'],
        		dayNamesShort: ['Nie','Pn','Wt','Śr','Czw','Pt','So'],
        		dayNamesMin: ['N','Pn','Wt','Śr','Cz','Pt','So'],
        		weekHeader: 'Tydz',
        		dateFormat:'yy-mm-dd',
        		firstDay: 1,
        		
                gotoCurrent: true,
                isRTL: false,
                hideIfNoPrevNext: true,
                shortYearCutoff: 20,
                //minDate: new Date(2010, 0, 01),
               // maxDate: getMaxDate(),
                onChangeMonthYear: function (a, b, c) {
            		//alert(c);
                    g = a + '-' + addZero(b);
                    if (i) {  return false; }
                    if (k) return false;
                    loadMonthCalendar(a, b)
                },
                onSelect: function (a, b) {
                	//alert(a);
                    year = a.substr(0, 4);
                    month = a.substr(5, 2);
                    day = a.substr(8, 2);
                    if (typeof(f[year + '-' + month]) == 'object') {
                        if (in_array(day, f[year + '-' + month])) {
                            var c = e.path
                        }
                    }
                    location.href="/?d="+day+"&m="+month+"&r="+year;
                   // alert(a);
                    return false
                },
                beforeShowDay: function (a) {
                    this_day = a.getFullYear() + '-' + addZero(a.getMonth() + 1) + '-' + addZero(a.getDate());
                    var b = [false, '', ''];
                    if (h) return b;
                    is_other = (a.getFullYear() + '-' + addZero(a.getMonth() + 1) != g);
                    is_week_end = (a.getDay() == 6 || a.getDay() == 0);
                    is_selected = (this_day == e.activeDay);
                    is_href = in_array(a.getDate(), f[a.getFullYear() + '-' + addZero(a.getMonth() + 1)]);
                    if (is_other) {
                        b[0] = false;
                        b[1] = 'selected'
                    } else if (is_week_end && !is_selected) {
                        b[0] = is_href;
                        b[1] = 'week-end'
                    } else if (!is_week_end && is_selected) {
                        b[0] = false;
                        b[1] = 'selected'
                    } else if (!is_week_end && !is_selected) {
                        b[0] = is_href;
                        b[1] = 'weekday'
                    }
                    return b
                }
            })
        }
        function loadMonthCalendar(b, c,day) {
            k = true;
            if (typeof(f[b + '-' + addZero(c)]) == 'object') {
                showCalendar();
                if (c==e.month) {
                	$("#datepicker .calendar").datepicker('setDate', new Date(b, c - 1, e.day));
                	 $("#datepicker .calendar a.ui-state-active").removeClass('ui-state-active');
                } else {
                	
                }
                createCalendar();
                k = false
            } else {
                hideCalendar();
                destroyCalendar();
                $.post(e.ajaxFile, {
                    year: b,
                    month: c
                }, function (a) {
                    f[a.year + '-' + addZero(a.month)] = a.days;
                   
                    g = b + '-' + addZero(c);
                    showCalendar();
                    createCalendar();
                    k = false;
                    
                    if (i) {
                        i = false;
                        $("#datepicker .calendar").datepicker('setDate', new Date(b, c - 1, e.day));
                       // $("#datepicker .calendar a.ui-state-active").removeClass('ui-state-active');
                    } else {
                    	//alert("drugi day:"+e.day);
                        $("#datepicker .calendar").datepicker('setDate', new Date(b, c - 1, e.day));
                        $("#datepicker .calendar a.ui-state-active").removeClass('ui-state-active');
                       
                        //$("#datepicker .calendar").datepicker('setDate', null);
                    }
                }, 'json')
               // if (oldday=='') oldday = e.day;
               // if (oldmonth=='') oldmonth = c;
            }
         
        }
        function in_array(a, b) {
            if (typeof(b) != 'object' || !b || !b.length) return false;
            for (key in b) if (a == b[key]) return true;
            return false
        }
        function addZero(a) {
            if (typeof(a) != 'string') a = a.toString();
            return a.length < 2 ? '0' + a : a
        }
        function getMaxDate() {
            var a = new Date();
            var b = a.getFullYear();
            var c = a.getMonth() + 1;
            var d = new Date(b, c + 1, 0).getDate();
            return new Date(b, c, d)
        }
        function destroyCalendar() {
            $("#datepicker .calendar").datepicker("destroy")
        }
        function hideCalendar() {
            h = true;
            var wys =  $("#datepicker .calendar").css('height');
            $("#datepicker .content").css('height', wys);
            $("#datepicker .content").css('display', 'block');
            $("#datepicker .calendar").css('display', 'none')
        }
        function showCalendar() {
            h = false;
            $("#datepicker .content").css('display', 'none');
            $("#datepicker .calendar").css('display', 'block')
        }
    }
})(jQuery);
