(function($){
    $.fn.cmsPubCalendar = function(options){
        var defaults = {
            lang: "pl",
            poiPubUrl: "/poi/PoiPub",
            kalUrl: "/pl/kal/",
            limit: 2,
            data1: "",
            data2: "",
            tooltipPosition: "center right"
        };
        var options = $.extend(defaults, options);

        var _this = this;
        this.regional = {
            en: {
                "więcej...": "more..."
            },
            de: {}
        }[options.lang];
        _this._ = $.i18n;
        
        var container = this;
        
        var days = [];
        
        var defaultDateVal;
        if (options.data1) 
            defaultDateVal = options.data1;
        else 
            if (options.data2) 
                defaultDateVal = options.data2;
            else 
                defaultDateVal = new Date();
				

        var currDate = defaultDateVal.getDate();
        var currMonth = defaultDateVal.getMonth() + 1;
        var currYear = defaultDateVal.getFullYear();
        var tooltipContent = $("<div />");
        prepareCalendar(currYear, currMonth);
        
        
        
        
        
        
        $(container).datepicker({
			defaultDate: defaultDateVal,
            onSelect: function(dateText, inst){
            
                var year = inst.currentYear;
                var month = inst.currentMonth + 1;
                var day = inst.currentDay;
                var tkal1Tab = days[year][month].dni[day].tkal1Tab;
                
                
                
                
                tooltipContent.empty();
                
                $(tkal1Tab).each(function(){
                    var event = days[year][month].tkal1[this];
                    var item = $("<div class='cmsPubCalendar-event-item' />");
                    var h3 = $("<h3 class='cmsPubCalendar-event-title'><a href='" + options.kalUrl + "/" + this + "'>" + event.tytul + "</a></h3>");
                    if (event.wazne) 
                        h3.addClass("recommend");
                    item.append(h3);
                    item.append("<p class='cmsPubCalendar-event-date'>" + event.okres + "</p>");
                    if (event.ikona) 
                        item.append("<a href='" + cmsKalUrl + "/" + this + "'><img class='cmsPubCalendar-event-image' src='" + event.ikona + "' title='' /></a>");
                    item.append("<p class='cmsPubCalendar-event-description'>" + event.opis + "</p>");
                    item.append("<a href='" + options.kalUrl + "/" + this + "'>" + _this._("więcej") + "...</a>");
                    item.append("<div style='clear: both;' />");
                    tooltipContent.append(item);
                });
                
                $(".tooltip", container).html(tooltipContent);
                
                $(".ui-datepicker", container).data("tooltip", null);
                
                $(".ui-datepicker", container).tooltip({
                    events: {
                        def: "click,mouseleave"
                    },
                    position: options.tooltipPosition,
                    relative: true,
                    effect: "fade",
                    delay: 150
                });
                var api =  $(".ui-datepicker", container).data("tooltip");
                api.show();                
            },
            beforeShowDay: function(date){
                var year = date.getFullYear();
                var month = date.getMonth() + 1;
                if (typeof days[year] !== "undefined" && typeof days[year][month] !== "undefined") {
                    if (days[year][month].dni[date.getDate()]) {
                        var tkal1Tab = days[year][month].dni[date.getDate()].tkal1Tab;
                        var wazne = days[year][month].dni[date.getDate()].wazne;
                        var dayClass = "cmsPubCalendar-day-normal";
                        if (wazne) 
                            dayClass = "cmsPubCalendar-day-important";
                        var title = "";
                        $(tkal1Tab).each(function(){
                            title += days[year][month].tkal1[this].tytul + ", ";
                        });
                        
                        title = title.substring( 0, title.length - 2 );
                        
                        if (options.data1 || options.data2) {
                            if (options.data1 && options.data2) {
                            
                            
                                if (date.getTime() >= options.data1.getTime() && date.getTime() <= options.data2.getTime()) {
                                
                                    dayClass += " cmsPubCalendar-day-marked";
                                }
                                
                            }
                            else 
                                if (options.data1) {
                                    if (options.data1.getTime() == date.getTime()) 
                                        dayClass += " cmsPubCalendar-day-marked";
                                }
                                else 
                                    if (options.data2) {
                                        if (options.data2.getTime() == date.getTime()) 
                                            dayClass += " cmsPubCalendar-day-marked";
                                    }
                        }
                        
                        return [true, dayClass, title];
                    }
                }
                return [false, "cmsPubCalendar-day-empty"];
            },
            onChangeMonthYear: function(year, month, instance){
                if (typeof days[year] == "undefined" || typeof days[year][month] == "undefined") 
                    prepareCalendar(year, month, instance);
                return;
            }
        
        
        });
        $(".ui-datepicker", container).after("<div class='tooltip' />");
        container.click(function(event){
            event.stopPropagation();
        });
        
		if (typeof resize == 'function') {
			resize();
		}
        
        
        
        function prepareCalendar(year, month, instance){
        	var urlVal = options.poiPubUrl + '?q=cmsMc&lang=' + options.lang;
        	if( typeof cmsKalTobiekt1Id != "undefined" ) {
        		urlVal += "&tobiekt1Id=" + cmsKalTobiekt1Id;
        	}
        	if( typeof cmsKalTstrona1Id != "undefined" ) {
        		urlVal += "&tstrona1Id=" + cmsKalTstrona1Id;
        	}
        	
            $.ajax({
                dataType: 'jsonp',
                async: false,
                jsonp: "jsonpCallback",
                jsonpCallback: "cmsMc",
                data: {
                    rok: year,
                    mc: month
                },
                success: function(data){
                
                    if (typeof days[year] == "undefined") 
                        days[year] = [];
                    
                    days[year][month] = data;
                    container.datepicker("refresh");
                    
                },
                url: urlVal
            });
        }
        
    }
})(jQuery);

