var month_to_string = new Array();
month_to_string[0] = "jan";
month_to_string[1] = "fev";
month_to_string[2] = "mar";
month_to_string[3] = "abr";
month_to_string[4] = "mai";
month_to_string[5] = "jun";
month_to_string[6] = "jul";
month_to_string[7] = "ago";
month_to_string[8] = "set";
month_to_string[9] = "out";
month_to_string[10] = "nov";
month_to_string[11] = "dez";

function to_date(d, c){
    
    // trata dicionario
    if(typeof(d)=="object"){
        var date = new Date();
        var dia = new Number(d.dia);
        var mes = new Number(d.mes);
        var ano = new Number(d.ano);
        
        if(c){ mes=mes+c; }
        
        date.setYear(ano);
        date.setMonth(mes);
        date.setDate(dia);
        return date;
    }
    // trata string 
    if(typeof(d)=="string"){
        return to_date(split_date(d), c);
    }
    return null;
}

function make_id_from_dict(dd){
    return "#date_"+dd.dia+"_"+dd.mes+"_"+dd.ano
}

function make_id(dia, mes, ano){
    // recebe algo como 2, 8, 2000
    // e retorna date_02_09_2000 
    // obs:
    // em js, o mes comeca em 0
    // em py, o mes comeca em 1 (saida!)
    mes = mes+1;
    var dia_str = dia > 9? ''+dia: '0'+dia;
    var mes_str = mes > 9? ''+mes: '0'+mes;
    return "date_"+dia_str+"_"+mes_str+"_"+ano;
}

function split_date(date_str){
    // recebe uma str no formato yyyy-mm-dd
    // e devolve um dicionario -> keys:dia,mes,ano
    var cal_data = date_str.split('-');
    var ano = cal_data[0];
    var mes = cal_data[1];
    var dia = cal_data[2];
    return {dia:dia, mes:mes, ano:ano};
}

function split_datetime(datetime_str){
    split_date(datetime_str.split(' ')[0]);
}

function days_in_month(data){
    // quantos dias tem o mes?
    return new Date(data.getFullYear(), data.getMonth()+1, 0).getDate()+1;
}

function renderizar_calendario(data){
    var today = new Date();
    var ano = data.getFullYear();
    var mes = data.getMonth();    
    var days = days_in_month(data);
    var temp, week_day, cal, is_today;
    
    cal ='<table cellspacing="0" cellpadding="0" class="cal_month_calendar">';
    cal+='<thead>'
    cal+='<tr>'
    cal+='<th>Dom</th>'
    cal+='<th>Seg</th>'
    cal+='<th>Ter</th>'
    cal+='<th>Qua</th>'
    cal+='<th>Qui</th>'
    cal+='<th>Sex</th>'
    cal+='<th>Sab</th>'    
    cal+='</tr>'
    cal+='</thead>'
    // fim do cabeçalho
    
    cal+='<tbody>'
    // para cada dia do mês, faça...
    for (i=1;i<days;i++){        
        temp = new Date(ano, mes, i); // dia sendo tratado
        week_day = temp.getDay(); // dia da semana
        
        is_today = today.getDate()==temp.getDate() 
        && today.getMonth()==temp.getMonth() 
        && today.getFullYear()==temp.getFullYear()
        
        if (week_day==0) // iniciando a semana
            cal+='<tr>'
        
        if (i==1) // primeiro dia do mês é especial, tratar!
            for (j=0; j<week_day; j++)
                cal+='<td class="cal_not_in_month"></td>';
        
        // escrevendo o dia!
        cal+='<td'
        if (is_today==true)
            cal+=' class="today"'
	
        var str_date = make_id(i, mes, ano);
        cal+=' id="'+ str_date +'">'+i+'</td>';
        
        if (week_day==6) // acabou a semana
            cal+= '</tr>'
    }
    
    if (week_day<6){
        for (i=week_day;i<6;i++){
            cal+='<td class="cal_not_in_month"></td>';
        }
        cal+='</tr>';
    }
    
    cal+='</tbody></table>';
    cal+='<p style="text-align:center;">';
    cal+='[ <a href="';
    cal+='/'+ano+'/'+(mes+1)+'/';
    cal+='">Ver eventos do mês</a> ]';
    cal+='</p>';
    return cal;
}

function calendar_callback(data){
    // marca os dias no calendario
    for(i in data){
        var post = data[i];
        var fields = post.fields;
        var titulo = fields.titulo;
        var slug = fields.slug;
        
        var in_evento = fields.inicio_evento;
        var tr_evento = fields.termino_evento;
        
        // armazena a data da iteracao
        var tmp_date = to_date(in_evento, -1);
        // data final da iteracao
        var tr_date = to_date(tr_evento, -1);
        var el, el_id, txt;
        
        while(tmp_date<=tr_date){
            var dia = tmp_date.getDate();
            var mes = tmp_date.getMonth();
            var ano = tmp_date.getFullYear();
            el_id = '#'+make_id(dia, mes, ano);
            el = $(el_id);
            el.addClass("marcar");
            
            txt = el.text();
            el.html("<a href='/"+slug+"/' title='"+titulo+"'>"+txt+"</a>");
            tmp_date.setDate(dia+1);
        }
    }
}

function show_calendar(data) {
    // mostra o calendário do mês informado
    var ano = data.getFullYear();
    var mes = data.getMonth();
    var mes_str = month_to_string[mes];
    
    $('#cal').html(renderizar_calendario(data));
    $('#mostra_data').html(mes_str.toUpperCase() + ' / ' + ano);

    $.getJSON('/content/eventos/'+ano+'/'+(mes+1)+'/', calendar_callback);
    return false;
}

$(document).ready(function() {
    var data_atual = new Date();
    data_atual.setDate(1);
    
    show_calendar(data_atual);
    
    $('#ant').click(function() {
        data_atual.setMonth(data_atual.getMonth()-1);
        return show_calendar(data_atual);
    });
    $('#pro').click(function() {
        data_atual.setMonth(data_atual.getMonth()+1);
        return show_calendar(data_atual);
    });
});

