$(function(){
	try {
		var calendar_data = $("#script-data-calendar").metadata({type: 'elem', name: 'script'});
		
	    $.datepicker.setDefaults($.datepicker.regional[calendar_data.lang == 'en' ? '' : calendar_data.lang]);
	    $('#contCalendario').data("dates", {});
	    
	    var d = new Date();
	    refreshCalendar(d.getFullYear(), d.getMonth() + 1);
	} catch(err) {}
});

function make_qTip(element, target){
	var common_data = $("#script-data").metadata({type: 'elem', name: 'script'});
	var calendar_data = $("#script-data-calendar").metadata({type: 'elem', name: 'script'});
	
	$(element).qtip({
        content:{
            url: common_data.templates_path + 'calendarioTooltip.jsp?lang=' + calendar_data.lang,
            data: {date: getData($(element).text())}
        },
        show: 'mouseover',
        //hide: 'mouseout',
        hide:{fixed:true},
        position: {
            target: $(target),
            corner: {
                target: 'rightMiddle',
                tooltip: 'leftMiddle'
            }
        },
        style: {
            //name: 'light',
            width: 217,
            background: '#ffffff url(' + common_data.img_prefix + 'sfondoToolTip.jpg) repeat-x bottom left',
            border: {
                width: 0
            },
            classes: {
                content: 'my-qtip-content'
            },
            tip: {
                color: '#b2012e'
            }
        },
        api: {
            onShow: function(a){
                var tooltip = $(a.target).qtip('api').elements.tooltip;
                
                if(!$('.ombra', tooltip).length){
                    var ombra = $('<div class="ombra"></div>');
                    ombra.css({
                        height:'10px',
                        background: 'url(' + common_data.img_prefix + 'sfondoTooltip.gif) repeat bottom left'
                    });
                    $('.qtip-content', tooltip).after(ombra);
                }
            }
        }
    });
}

function refreshCalendar(year, month){
	var common_data = $("#script-data").metadata({type: 'elem', name: 'script'});
	
	$.ajax({
        url: common_data.templates_path + "evidenzaCalendario.jsp",
        data: {y : year, m : month},
        success: function(data, textStatus){
        	jsonResponse = $.parseJSON(data);
        	makeDatepicker(jsonResponse, year, month);
        }
    });
}

function getData(day){
	if(day.length < 2)
		day = '0' + day;
	
	return $('#contCalendario').data("dates")["day_" + day]
}

function getDateLimits(minStr, maxStr){
    var s_minstr = minStr.split('-');
    var s_maxstr = maxStr.split('-');
    
	return {min: new Date(s_minstr[0], s_minstr[1], s_minstr[2]), max: new Date(s_maxstr[0], s_maxstr[1], s_maxstr[2])}
}

function makeDatepicker(calendarData, y, m){
	$('#contCalendario').data("activeDays", $.extend(calendarData, {year:y, month:m}));
	var common_data = $("#script-data").metadata({type: 'elem', name: 'script'});
	var calendar_data = $("#script-data-calendar").metadata({type: 'elem', name: 'script'});
	
	var limits = getDateLimits(calendar_data.min_date, calendar_data.max_date);
	
	if(!$('#contCalendario.hasDatepicker').length){
		$('#contCalendario').datepicker({
	        inline: true,
	        showOtherMonths: true,
	        prevText: 'mese precedente',
	        nextText: 'mese successivo',
	        minDate: limits.min,
	        maxDate: limits.max,
	        onChangeMonthYear: function(year, month, inst){
			    blockCalendar();
			    $('#contCalendario').data("dates", {});
	    	    $("div.qtip").remove();
	    	    refreshCalendar(year, month);
	        },
	        onSelect: function(dateText, inst) {
	        	blockCalendar();
	        	$('table.ui-datepicker-calendar tr a.ui-state-default').each(function(){
	        		try {
	        			$(this).qtip('destroy');
			        } catch(err) {}
	        	});
	        	var activeDays = $('#contCalendario').data("activeDays");
	        	var date = $('#contCalendario').datepicker( "getDate" ).format("ddmm");
	        	var fullDate = $('#contCalendario').datepicker( "getDate" ).format("yyyymmdd");
	        	var linkScheda;
	        	if(activeDays[fullDate]){
	        		linkScheda = calendar_data.link_scheda +
        				((window.location.pathname.indexOf("/concerti_e_biglietti") === 0) ? "#" : "?") +
	        			"anchor=day_" + date + "&year=" + inst.currentYear + "&month=" + inst.currentMonth;
	        	}else{
	        		linkScheda = calendar_data.link_snodo + '?d=' + fullDate;
	        	}
	        	window.location.href = linkScheda;
	        	setTimeout("var d=$('#contCalendario').data('activeDays');highlightDatepicker(d, d.year, d.month);", 400);
	        }
	    });
	}
	
	highlightDatepicker(calendarData, y, m);
	
    // qtip per datepicker
    var skip = true;
    $('table.ui-datepicker-calendar tr a.ui-state-default').live('mouseover', function(event) {
    	// TODO: ce un bug per il quale se il primo elemento che si seleziona è l'elemento con classe "ui-state-active", non si vede il tooltip
	    if($(this).hasClass("ui-state-active") && skip){
		    return;
	    }
	    if(!$(this).data('is_qTip')){
            $(this).data('is_qTip', true);
            make_qTip(this, $(this).parents('tr'));
            $(this).mouseover()
        }
    	skip = false;
    });
}

function highlightDatepicker(calendarData, y, m){
	y = '' + y;
	m = '' + m;
	if(m.length < 2)
		m = '0' + m;
	
	$('#contCalendario table.ui-datepicker-calendar td').each(function(){
		var anchor = $('a', this);
		if(anchor.length == 0) return;
		
		var day = anchor.text();
		if(day.length < 2)
			day = '0' + day;
		
		var active = typeof calendarData[y + m + day] !== 'undefined';
		
        if(active){
        	var map = $('#contCalendario').data("dates");
        	map["day_" + day] = y + m + day;
        }else{
        	var t = anchor.text();
        	anchor.remove();
        	$(this).addClass('ui-datepicker-unselectable ui-state-disabled').append('<span class="ui-state-default">' + t + '</span>');
        }
	});
	unblockCalendar();
	//setTimeout("$('#contCalendario').unblock()", 400);
}

function blockCalendar(){
	var src = $("#script-data").metadata({type: 'elem', name: 'script'}).img_prefix + 'loader.gif';
	$('#contCalendario').block({message:'<div><img src="'+src+'"/></div>', css:{border:'none'}});
}
function unblockCalendar(){
	$('#contCalendario').unblock();
}
