var nowS;
var y, m, d, now;

//na wszelki wypadek jak nie powiedzie si� odczytanie daty z serwera
now = new Date();
y = now.getFullYear();
m = ""+(now.getMonth()+1);
if(m.length==1) m="0"+m;
d = now.getDate();
nowS = y+"-"+m+"-"+d;		

var days_pl = new Array("Pn", "Wt", "Śr", "Cz", "Pt", "So", "N");
var days_en = new Array("Mo", "Tu", "We", "Th", "Fr", "Sa", "S");
var days = days_pl;
var currentLang = "pl";

var months_pl = new Array("Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień");
var months_en = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
var months = months_pl;

var mode = 1;  // tryb kalendarza (1=miesiąc, 12=cały rok)

var subtitles = {
    "pl":{"newsSinular": "wiadomość", "newsPlural":"wiadomości"},
     "en" :{"newsSinular": "news", "newsPlural":"news"}
}  

function addTitileToElement(element, title){
    element.title = title;
}
 function showNewsDay(event, el) {
    window.location.href=servletContext+ "/archiwum.jsp?articleDate="+el.id;
}

 
function showTradingCalendar(lang, extraYellowDays, extraRedDaysALL, fullYear, month, newsDays)
{
    changeLanguage(lang);

    var calendar = document.getElementById('myCalendar');
    if(mode==1)
    {
        calendar.innerHTML = "";
        var a = document.createElement('div');
        calendar.appendChild(a);
        a.setAttribute('id', 'myMonth');
        a.setAttribute('class', 'myMonth');
        a.setAttribute('className', 'myMonth');
        a.style.cssFloat = "none";
        a.style.styleFloat = "none";

        renderOneMonth('myMonth', lang, extraYellowDays, extraRedDaysALL, fullYear, month, newsDays);
    }
    else if(mode==12)
    {
        renderWholeYear(lang, extraYellowDays, extraRedDaysALL, fullYear, newsDays);
    }
}

//--------
function renderOneMonth(parent, lang, yellowDaysALL, extraRedDaysALL, fullYear, month, newsDays)  // month=0..11
{
    var monthDIV = document.getElementById(parent);
    monthDIV.innerHTML = "";



    var headerDIV = document.createElement('div');
    monthDIV.appendChild(headerDIV);

    //  hack:
    headerDIV.innerHTML = '<span class="headerMthA" id="headerMth_'+(month<10? "0"+month : month)+'"  >'+months[month]+' '+fullYear+'</a>';

    if(month<10)  month="0"+month;
    // headerA.setAttribute('id', "headerMth_"+month)

    var a;
    for(var i=0; i < 7+42; i++)
    {
        a = document.createElement('div');
        monthDIV.appendChild(a);
        if(i<7)
        {
            a.setAttribute('id', "mthDayHeader_"+month+"_"+i);
            a.innerHTML = days[i];
            a.setAttribute('className', (i<5?"headerMth":"headerMthRed") );
            a.setAttribute('class',     (i<5?"headerMth":"headerMthRed") );
        
        }
        else
        {
            a.setAttribute('class', "whiteDay");
            a.setAttribute('className', "whiteDay");
        }
    }
    var selectedMonthYear = new Date(fullYear, month, 1);
    fillDates(lang, selectedMonthYear, yellowDaysALL, extraRedDaysALL, newsDays);

    selectTodaysDate(); // zaznacz dzisiejszą datę
}

function renderWholeYear(lang, yellowDaysALL, extraRedDaysALL, fullYear, newsDays){
    changeMode(12);
    var calendar = document.getElementById('myCalendar');
    calendar.innerHTML = "";
    //calendar.style.height = 850;
    for(var i=0;i<12;i++)
    {
    
        calendar.innerHTML += '<div id="myMonth'+i+'" class="myMonth" onmouseover="this.style.backgroundColor=\'#fafaff\'" onmouseout="this.style.backgroundColor=\'#fff\'" onclick="changeMode(1); showTradingCalendar(\''+lang+'\', extraYellowDays, extraRedDaysALL, \''+fullYear+'\', \''+i+'\'); setMonth('+i+');"></div><div style="float:left; width:10px; ">&nbsp;</div>';
        renderOneMonth("myMonth"+i, lang, yellowDaysALL, extraRedDaysALL, fullYear, i, newsDays);
    
    }
}

//--------
function fillDates(lang, date, yellowDaysALL, extraRedDaysALL, newsDays) // date - zaznaczony miesiąc i rok.
{
    var firstDay;  // Jaki dzien tygodnia to yyyy/mm/01. (kiedy zacząć miesiąc)
    var noDaysPrevMth; // ile dni miał poprzedni m-c
    var noDaysCurrMth; // ile dni ma ten m-c
    var tmp;   // iterowanie po el.
    var j, beginMth;
    var yellowL = yellowDaysALL.length, redL = extraRedDaysALL.length;
    var y=0, r=0; // iteratory tablic yellow & red
    var selectedMth = date.getMonth();
    if(selectedMth<10) selectedMth="0"+selectedMth;
    
    firstDay = date.getDay();
    if (firstDay==0) firstDay = 7
    
    noDaysPrevMth = noOfDaysInPrevMth(date.getFullYear(), date.getMonth() ); 
    noDaysCurrMth = noOfDaysInMth(date.getFullYear(), date.getMonth() );
    
    // iterowanie po 42 el.
    tmp = document.getElementById("mthDayHeader_"+selectedMth+"_6").nextSibling;
    while (tmp.nodeType!=1) tmp = tmp.nextSibling;
    
    j=firstDay-1;
    beginMth=j-1;

    for(var i=0; i<42; i++)
    {
           
        if(j>0)  // przed bieżącym miesiącem
        {

            tmp.className = "none";
            j--;
        }
        else if((i-beginMth) > noDaysCurrMth)  // wyszliśmy poza bieżący miesiąc
        {
 
            tmp.className = "none";

        }
        else // bieżący miesiąc
        {
            tmp.innerHTML = (i-beginMth);
            if(i%7==5 || i%7==6) {
                tmp.className = "redDay";
            }
            else {
                tmp.className = "whiteDay";
            }
        

            var day = tmp.innerHTML;
            var tmpMonth = date.getMonth()+1;
            tmp.setAttribute('id', date.getFullYear()+'-'+(tmpMonth<10 ? "0"+tmpMonth : tmpMonth) +'-'+(day<10 ? "0"+day : day) );

            // sprawdź czy kolorować dzień na żółto.
            // alert("y: "+y+", tmp.getAttribute('id'): "+tmp.getAttribute('id')+", yellowDaysALL[y]: "+yellowDaysALL[y]);
            while(yellowDaysALL[y]<tmp.getAttribute('id') && y<yellowL)
            {
                y++;
            }
            if(y<yellowL && tmp.getAttribute('id')==yellowDaysALL[y])
            {
                tmp.className="yellowDay";
            }
            // sprawdź czy kolorować dzień na czerwono.
            while(extraRedDaysALL[r]<tmp.getAttribute('id') && r<redL)
                r++;
            if(r<redL && tmp.getAttribute('id')==extraRedDaysALL[r])
            {
                tmp.className="redDay";
            }
        }
        
        var n=0;

        //alert(allDays);
        if(newsDays!=null){
        var newsInfo = newsDays[tmp.id];
          if(newsInfo!=null){
              if(newsInfo==1) {
                  addTitileToElement(tmp, newsInfo + " "+subtitles[lang]['newsSinular'])

              } else if (newsInfo>1){
                  addTitileToElement(tmp, newsInfo + " "+subtitles[lang]['newsPlural'])
              }
            tmp.onclick =showNewsDay.bindAsEventListener(this, tmp);
            $(tmp.id).addClassName("hasNews");


          }
        }

         
    
        do{
            tmp = tmp.nextSibling;
        }
        while (tmp && tmp.nodeType!=1);   // przeszukuj aż skończy się zakres lub trafisz na kolejnego DIVa
    }
  
}


function noOfDaysInMth(fullYear, month)
{
    // co ciekawe, w konstruktorze Date() należy podać miesiąc z przedziału 1..12,
    // zaś funkcja getMonth() zwraca miesiąc z przedziału 0..11!
    // alert("w fun: "+ month);
    var date = new Date(fullYear, month+1, 0);  // tu month 1..12!
    // alert("w fun, ale po Date(): "+ date.getMonth()  );
    return date.getDate();
}
function noOfDaysInPrevMth(fullYear, month) 
{
    if(month!=0) month--;
    else { 
        fullYear--; month=11;
    }
    var date = new Date(fullYear, month+1, 0);  
    return date.getDate();
}

function changeLanguage(lang)
{
    if(currentLang!=lang)
    {
        var headerDays;
        var headerMth;

        currentLang = lang;
        // tłumacz nazwy miesięcy
        if (lang=="pl")
        {
            days = days_pl;
            months = months_pl;
        }
        else if(lang=="en")
        {
            days = days_en;
            months = months_en;
        }
        // tłumacz nazwy dni tygodnia i nazwy miesięcy
        for (var i=0; i<12; i++)
        {
            if(i<10) i="0"+i;
            try
            {
                headerMth = document.getElementById("headerMth_"+ i);
                headerMth.innerHTML = months[Math.abs(i)];
        
                headerDays = document.getElementById("mthDayHeader_"+i+"_0")
                // alert(headerDays.getAttribute('id') );
                headerDays.innerHTML = days[0];
                for (var j=1; j<7; j++)
                {
                    do      // przesuń się na następny DIV
                    headerDays = headerDays.nextSibling;
                    while(headerDays.nodeType!=1)
                    headerDays.innerHTML = days[j];
                }
            }
            catch(ex) {}
        }
    }
}

function selectTodaysDate()
{
    var tmpTodayDate = now;
    var tmpMth = tmpTodayDate.getMonth()+1;
    var tmpDay = tmpTodayDate.getDate();
    var today = "" + tmpTodayDate.getFullYear()+'-' + (tmpMth<10 ? "0"+tmpMth : tmpMth) + '-'+(tmpDay<10 ? "0"+tmpDay : tmpDay);
    //alert("today: "+today);
    try{
        var todayCell = document.getElementById(today);
        // alert("znalazlem id: " + todayCell.innerHTML+",    className: "+todayCell.className)
        if(todayCell.className=="redDay")  { 
            todayCell.className = "redDayCurrent";
        }
        else if(todayCell.className=="yellowDay") { 
            todayCell.className = "yellowDayCurrent";
        }
        else if(todayCell.className=="whiteDay") { 
            todayCell.className = "whiteDayCurrent";
        }
    }
    catch(ex) {}  // jeśli element o tej dacie nie istniał, nie rób nic.
}

function changeMode(dmode)
{
    mode = dmode;
    var calendar = document.getElementById('myCalendar');

    if(mode==1) 
    {
        $('months').style.display="inline";
    //calendar.style.height = 215;
    }
    else 
    {
        $('months').style.display="none";
    //calendar.style.height = 750;
    }
        
}

function setMonth(mth)
{
    document.getElementById('months').value= mth;
}

