﻿function jFolhinha(pDivRef)
{
    var This = this;
    var _month,_year,_days,_legend,_funcBack,_funcFwd,_numCal,_selCal,_dates,_selDates;
    var _selDate;
    var _divRef;
    
    var _funcClick;
    
    var getMonthName = function(pMonth){
  
        var tam = (pMonth.toString().length);        
        pMonth = pMonth.toString();
        
        if (tam == 1) {
           pMonth = "0" + pMonth;
        };
        
        var strMonth = "";
        switch(pMonth)
        {
            case "01":
                strMonth = "Janeiro";
                break;
            case "02":
                strMonth = "Fevereiro";
                break;
            case "03":
                strMonth = "Março";
                break;
            case "04":
                strMonth = "Abril";
                break;
            case "05":
                strMonth = "Maio";
                break;
            case "06":
                strMonth = "Junho";
                break;
            case "07":
                strMonth = "Julho";
                break;            
            case "08":
                strMonth = "Agosto";
                break;            
            case "09":
                strMonth = "Setembro";
                break;
            case "10":
                strMonth = "Outubro";
                break;
            case "11":
                strMonth = "Novembro";
                break;            
            case "12":
                strMonth = "Dezembro";
                break;          
            default:
                strMonth = pMonth;
                break;
        };
        return strMonth;        
    };
    
    var render = {
        calendar: function(){
           
            var sb = new StringBuilder();
            sb.append('<table callspacing="0" class="dtlCalendario">');
            sb.appendFormat('<caption>{0}</caption>','Selecione a data de saida');
            sb.appendFormat('<thead><tr><td class="setaEsq"><a id="btRetroceder">mes anterior</a></td><th colspan="5">{0}/{1}</th><td class="setaDir"><a id="btAvancar">proximo mes</a></td></tr></thead>',getMonthName(_month),_year);
            
            sb.append('<tbody>');
            sb.append('<tr><th class="dom">D</th><th class="seg">S</th><th class="ter">T</th><th class="qua">Q</th><th class="qui">Q</th><th class="sex">S</th><th class="sab">S</th></tr>');

            //for para desenhar todos os dias do mes
            var dtIni = new Date(_month+"/01/"+_year+" 12:00");
            var dtFin = dtIni.addMonths(1).addDays(-1);
            
            var dowIni = dtIni.getDay();
            var dowFin = dtFin.getDay();
            
            dtIni = dtIni.addDays(dowIni * -1);
            dtFin = dtFin.addDays(7-dowFin);
            
            _selDates = new Hashtable();
            for(var w=0;w<(Date.diff(dtIni,dtFin,'d'));w++)
            {
                var dtCal = dtIni.addDays(w);
                if(dtCal.getDay()==0)
                {
                    sb.append('<tr>');
                };
                //verifica se tem saida para o dia
                if(_dates != null && _dates.containsKey(dtCal.toString("dd/MM/yyyy")))     
                {
                    
                    //var dadosDate = pDays.getValue(dtCal.toString("dd/MM/yyyy"));
                    //var linkSel = "javascript:setDia('"+ dadosDate[0].toString("yyyy-MM-dd") +"','"+ dadosDate[1] +"'," + dadosDate[3] + ",this.parentNode,'" +pLegend.values[0][2]+"');return false;";
                    //sb.appendFormat('<td class="tax{2}"><a href="javascript:void(0)" onclick="{1}">{0}</a></td>',dtCal.toString('dd'),linkSel,dadosDate[2]);
                    _selDates.add(dtCal.toString("dd-MM-yyyy"),dtCal);
                    if(_selDate!=null && (_selDate.toString("dd-MM-yyyy")==dtCal.toString("dd-MM-yyyy"))){
                        sb.appendFormat('<td class="feriado"><strong><a id="dtDisp'+ dtCal.toString("dd-MM-yyyy") +'">{0}</a></strong></td>',dtCal.toString('dd'));
                    }
                    else
                    {
                        sb.appendFormat('<td class="disponivel"><strong><a id="dtDisp'+ dtCal.toString("dd-MM-yyyy") +'">{0}</a></strong></td>',dtCal.toString('dd'));
                    };
                }
                else
                {
                    sb.appendFormat('<td>{0}</td>',dtCal.toString('dd'));
                };


                if(dtCal.getDay()==6)
                {
                    sb.append('</tr>');
                };

                
            };
    
            sb.append('</tbody>');
    
            sb.append('</table>');
            sb.append('<ul class="dtlCalendarioLegenda"><li><span class="disponivel"> </span> saidas disponíveis</li><li><span class="feriado"> </span>data selecionada</li></ul>');
            return sb.toString();
        }
    };

    var ctrlRefs = {
        btRetrocede: function(){return $('btRetroceder');},
        btAvanca: function(){return $('btAvancar');},
        dtDisponivel: function(pData){return $('dtDisp'+pData);}
    };
    
    var startEnv = {
        main: function(){
        
            if(_selDate!=null){
                _month = _selDate.toString('MM');
                _year = _selDate.toString('yyyy');
            }
            else{               
                _month = Date.now().toString('MM');
                _year = Date.now().toString('yyyy');
            };
            
            _divRef.innerHTML = render.calendar();
            
        },
        setCalendar: function(){
            ctrlRefs.btRetrocede().onclick = function(){
                on.retroceder();
                
             };
            ctrlRefs.btAvanca().onclick = function(){
                on.avancar();
              
             };
             
             for(var i=0;i<_selDates.keys.length;i++)
             {
                ctrlRefs.dtDisponivel(_selDates.keys[i].toString()).dataClick = _selDates.values[i];
                ctrlRefs.dtDisponivel(_selDates.keys[i].toString()).onclick = function(){
                    var dtClick = this.dataClick;
                    if(_selDate!=null && _selDate!=dtClick){
                        //ja tinha selecao, apaga estilo
                        var cntAnter = $('dtDisp'+ _selDate.toString("dd-MM-yyyy"));
                        if(cntAnter!=null){
                            cntAnter.parentNode.parentNode.className = "disponivel";
                        }
                    }
                    _selDate = dtClick;
                    this.parentNode.parentNode.className = "feriado";
                    if(This.onClick!=null){
                        This.onClick(dtClick);
                    }
                };
             };

        }
    };
    
    var on = {
        avancar: function(){          
             if (_month.toString().length > 1) {
                 _month = _month.toString();
                 var zero = _month.substring(0,1);
                 if (zero == "0") {
                    _month = _month.substring(1)
                 };             
             };
             _month = parseInt(_month); 
            
             _month += 1;
             if(_month>12){
                _month = 1;
                _year ++;
             };
            _divRef.innerHTML = render.calendar();
            startEnv.setCalendar();

        },
        retroceder: function(){
            
            if (_month.toString().length > 1) {
                 _month =   _month.toString();
                 var zero = _month.substring(0,1);             
                 if (zero == "0") {
                    _month = _month.substring(1);
                 };                      
            };
            _month = parseInt(_month);   
            _month -= 1;
            if(_month<1){
                _month = 12;
                _year --;
            };
            _divRef.innerHTML = render.calendar();
            startEnv.setCalendar();

        }
    };
    
    
    
    this.exec = {
        drawCalendar: function(){
            startEnv.main();
            startEnv.setCalendar();
        }
    };
    
    this.onClick=null;
    
    this.addDay = function(pData,pLegenda){
        var vData;
        vData = Date.parse(pData,'dd/MM/yyyy');
        if(vData!=null){
            _dates.add(vData.toString("dd/MM/yyyy"),pLegenda);
            if(! _legend.containsKey(pLegenda)){
                _legend.add(pLegenda,'cor' + _legend.keys.length);
            }
        }
        
    };

    this.clearDays = function(){
        _dates = new Hashtable();
        _legend = new Hashtable();
        
    };
        
    this.constructor = new function(){
        
//        tmpCNT = new Template('CNT');
//        tmpUI = new Template('UI');
//        startEnv.main();
        _divRef = pDivRef;
        _month = 5;
        _year = 2009;
        
        _dates = new Hashtable();
        _legend = new Hashtable();
 
    };
    

}
