﻿
function padStrL(st,ch,N) {
  var i, cnt, v;
  st = ''+st;
  cnt = N - st.length;
  for (i=0; i<cnt; i++) {
    st = ch + st;
  }
  return st;
}


function getLongMonth(mm_1, lang) {
  if (lang=='en') {
    if (mm_1==0)  return 'January';
    if (mm_1==1)  return 'February';
    if (mm_1==2)  return 'March';
    if (mm_1==3)  return 'April';
    if (mm_1==4)  return 'May';
    if (mm_1==5)  return 'June';
    if (mm_1==6)  return 'July';
    if (mm_1==7)  return 'August';
    if (mm_1==8)  return 'September';
    if (mm_1==9)  return 'October';
    if (mm_1==10) return 'November';
    if (mm_1==11) return 'December';
  } else if (lang=='tc' || lang=='sc') {
    if (mm_1==0)  return '1月';
    if (mm_1==1)  return '2月';
    if (mm_1==2)  return '3月';
    if (mm_1==3)  return '4月';
    if (mm_1==4)  return '5月';
    if (mm_1==5)  return '6月';
    if (mm_1==6)  return '7月';
    if (mm_1==7)  return '8月';
    if (mm_1==8)  return '9月';
    if (mm_1==9)  return '10月';
    if (mm_1==10) return '11月';
    if (mm_1==11) return '12月';
  }
  return '';
}


function getWeekdayChar(wd, lang) {
  if (lang=='en') {
    if (wd==0) return 'S';
    if (wd==1) return 'M';
    if (wd==2) return 'T';
    if (wd==3) return 'W';
    if (wd==4) return 'T';
    if (wd==5) return 'F';
    if (wd==6) return 'S';
  } else if (lang=='tc' || lang=='sc') {
    if (wd==0) return '日';
    if (wd==1) return '一';
    if (wd==2) return '二';
    if (wd==3) return '三';
    if (wd==4) return '四';
    if (wd==5) return '五';
    if (wd==6) return '六';
  }
}



function getYearMonthStr(da, lang) {
  if (lang=='en') {
    return getLongMonth(da.getMonth(),lang) +' '+da.getFullYear();
  } else if (lang=='tc' || lang=='sc') {
    return ''+da.getFullYear() +'年'+ getLongMonth(da.getMonth(),lang);
  } else {
    return '';
  }
}


function getYearMonthDayStr(da, lang) {
  if (lang=='en') {
    return ''+da.getDate() +' '+ getLongMonth(da.getMonth(),lang) +' '+ da.getFullYear();
  } else if (lang=='tc' || lang=='sc') {
    return ''+da.getFullYear() +'年'+ getLongMonth(da.getMonth(),lang) +da.getDate() +'日';
  } else {
    return '';
  }
}


function dateFromYMD(yyyy, mm, dd) {
  var d = new Date();
  d.setDate(dd);
  d.setMonth(mm-1);
  d.setFullYear(yyyy);
  d.setHours(0);
  d.setMinutes(0);
  d.setSeconds(0);
  d.setMilliseconds(0);
  return d;
}



function dateToYMD(da) {
  return ''+da.getFullYear()+padStrL(da.getMonth()+1,'0',2)+padStrL(da.getDate(),'0',2);
}



function dateAddDays(da, n) {
  var i;
  i = da.getTime() + n * 86400000;
  da.setTime(i);
  return da;
}


function gotoEventPage(lang, lvl, runningYMD) {
  var theURL, i;
  theURL = window.location.href;
  theURL = theURL.substring(0,theURL.lastIndexOf('/')+1);  // stripe filename
  for (i=0; i<lvl; i++) {
  	// stripe one level of subdirectory 
  	theURL = theURL.substring(0,theURL.length-1);
  	theURL = theURL.substring(0,theURL.lastIndexOf('/')+1);
  }
 
  theURL = theURL + lang + '/event_calendar/' +runningYMD+'.html';
  //alert(theURL);
  window.location.href = theURL;
}


// Construct HTML table for a certain month (in string)
//   lang may be 'en', 'tc' or 'sc' for path setting
//   lvl is directory level of HTML under root folder, also for path setting
function getMonthTable(yyyy, mm, lang, lvl) {
  var da, dd, mm_1, lvlPath, i;
  var S, cellCnt, nextMonthStartUxTime;
  var todayYMD, runningYMD, hasEvent, v;
  var theClass, theAttribute;

  lvlPath = '';
  for (i=0; i<lvl; i++) {
    lvlPath = lvlPath + '../';
  }

  // Today in YYYYMMDD
  todayYMD = dateToYMD(new Date());

  // First day of target month
  da = dateFromYMD(yyyy, mm, 1);

  // Check date bounds
  if (da.getTime() < dateFromYMD(evt_cal_start_yyyy, evt_cal_start_mm, 1).getTime()) {
    da = dateFromYMD(evt_cal_start_yyyy, evt_cal_start_mm, 1);
    yyyy = evt_cal_start_yyyy;
    mm = evt_cal_start_mm;

  } else if (da.getTime() > dateFromYMD(evt_cal_end_yyyy, evt_cal_end_mm, 1)) {
    da = dateFromYMD(evt_cal_end_yyyy, evt_cal_end_mm, 1);
    yyyy = evt_cal_end_yyyy;
    mm = evt_cal_end_mm;
  }

  // record current month in global varables (defined in "evt_calendar_data.js")
  evt_cal_mm = mm;
  evt_cal_yyyy = yyyy;


  if (viaTranslationServer) {
      clsWeekDay = 'cal_content';
  } else {
      clsWeekDay = 'cal_weekdayhead';
  }


  // Calendar Heading
  S =     '<table width="155" border="0" cellspacing="0" cellpadding="0">' +
              '<tr>';
  if (yyyy==evt_cal_start_yyyy  &&  mm==evt_cal_start_mm) S = S +
                  '<td><img src="'+lvlPath+'files/graphics/event_calendar/cal_leftbtn_dim.gif" width="21" height="22" border=0></td>';
  else S = S +
                  '<td><a href="javascript:cal_goMonth(-1,\''+lang+'\','+lvl+');"><img src="'+lvlPath+'files/graphics/event_calendar/cal_leftbtn.gif" width="21" height="22" border=0></a></td>';
  S = S +         '<td width="115" align="center" class="cal_bg">' + getYearMonthStr(da, lang) + '</td>';
  if (yyyy==evt_cal_end_yyyy  &&  mm==evt_cal_end_mm) S = S +
                  '<td><img src="'+lvlPath+'files/graphics/event_calendar/cal_rightbtn_dim.gif" width="19" height="22" border=0></td>';
  else S = S +
                  '<td><a href="javascript:cal_goMonth(1,\''+lang+'\','+lvl+')"><img src="'+lvlPath+'files/graphics/event_calendar/cal_rightbtn.gif" width="19" height="22" border=0></a></td>';
  S = S +     '</tr>' +
          '</table>' +
          '<table width="155" border="0" cellpadding="0" cellspacing="1">' +
              '<tr>' +
                  '<td align="center" valign="middle" class="'+clsWeekDay+'"><strong><font color="#D1141A">'+getWeekdayChar(0,lang)+'</font></strong></td>' +
                  '<td align="center" valign="middle" class="'+clsWeekDay+'"><strong>'+getWeekdayChar(1,lang)+'</strong></td>' +
                  '<td align="center" valign="middle" class="'+clsWeekDay+'"><strong>'+getWeekdayChar(2,lang)+'</strong></td>' +
                  '<td align="center" valign="middle" class="'+clsWeekDay+'"><strong>'+getWeekdayChar(3,lang)+'</strong></td>' +
                  '<td align="center" valign="middle" class="'+clsWeekDay+'"><strong>'+getWeekdayChar(4,lang)+'</strong></td>' +
                  '<td align="center" valign="middle" class="'+clsWeekDay+'"><strong>'+getWeekdayChar(5,lang)+'</strong></td>' +
                  '<td align="center" valign="middle" class="'+clsWeekDay+'"><strong>'+getWeekdayChar(6,lang)+'</strong></td>' +
              '</tr>';


  ///// Now, loop through the dates and write the table cells

  // Unix timestamp of 1st day on next month
  if (mm < 12) {
    nextMonthStartUxTime = dateFromYMD(yyyy, mm+1, 1).getTime();
  } else {
    nextMonthStartUxTime = dateFromYMD(yyyy+1, 1, 1).getTime();
  }

  // month - 1 (minus 1 for javascript month parameter)
  mm_1 = mm - 1;

  // Weekday of first day in month
  i = da.getDay();

  // Date for the first cell of calendar (starting on Sunday)
  da = dateAddDays(da, -i);

  // Count of generated cells
  cellCnt = 0;

  S = S + '<table width="155" border="0" cellpadding="0" cellspacing="1">';

  while (da.getTime() < nextMonthStartUxTime  ||  cellCnt % 7 != 0) {
    if (cellCnt % 7 == 0) S = S + '<tr>';

    if (da.getMonth() != mm_1) { // current date before or after target month
  
      S = S + '<td align="center" valign="middle" class="cal_content">' +
              '&nbsp;' +
              '</td>'

		} else { // current date within target month

    	//v = padStrL(da.getDate(),"0",2); // day of month
    	v = ''+da.getDate(); // day of month

      runningYMD = dateToYMD(da);
      hasEvent = (evt_dates.indexOf('.'+runningYMD+'.')>=0);

			if (!hasEvent) {
				theAttribute = '';
				
				if (runningYMD == todayYMD) {
					theClass = 'cal_noeventtoday';
				} else {
					theClass = 'cal_noeventday';
				}
				
			} else {
				theAttribute = ' onclick="gotoEventPage(\''+lang+'\','+lvl+',\''+runningYMD+'\');" ';

				if (runningYMD == todayYMD) {
					theClass = 'cal_eventtoday';
				} else if (runningYMD == evt_cal_yyyymmdd) {  // target date of event calendar page
					theClass = 'cal_currenteventday';
				} else if (runningYMD < todayYMD) {
					theClass = 'cal_pasteventday';
				} else {
					theClass = 'cal_futureeventday';
				}
			}

			S = S + '<td align="center" valign="middle" class="' + theClass + '"' + theAttribute + '>' +
			        v + '</td>';

	}



/*

      if (hasEvent) {
        if (runningYMD < todayYMD) {
          S = S + '<td align="center" valign="middle" class="cal_content" bgcolor="#D2D2D2">';
        } else {
          S = S + '<td align="center" valign="middle" class="cal_content" bgcolor="#E0CBBC">';
        }
        v = '<a href="' +lvlPath+lang+ '/event_calendar/' +runningYMD+'.html" class="cal_content">' +v+ '</a>';

      } else {
        S = S + '<td align="center" valign="middle" class="cal_content">';
      }

      if (runningYMD == evt_cal_yyyymmdd) { // target date of event calendar page
        S = S + '<table width="100%" height="15" bgcolor="#FFFFFF" border="0" cellpadding="1" cellspacing="0">' +
                '<tr>' +
                    '<td width="21" align="center" valign="middle" class="cal_content" bgcolor="#0000FF">' +
                      '<table width="100%" bgcolor="#FFFFFF"  border="0" cellpadding="0" cellspacing="0">' +
                        '<tr>' +
                          '<td align="center" valign="middle" class="cal_content">' +
                            v +
                          '</td>' +
                        '</tr>' +
                      '</table>' +
                    '</td>' +
                '</tr>' +
                '</table>';
      
      } else if (runningYMD == todayYMD) {
        S = S + '<table width="100%" height="15" bgcolor="#FFFFFF" border="0" cellpadding="1" cellspacing="0">' +
                '<tr>' +
                    '<td width="21" align="center" valign="middle" class="cal_content" bgcolor="#FF0000">' +
                      '<table width="100%" bgcolor="#FFFFFF"  border="0" cellpadding="0" cellspacing="0">' +
                        '<tr>' +
                          '<td align="center" valign="middle" class="cal_content">' +
                            v +
                          '</td>' +
                        '</tr>' +
                      '</table>' +
                    '</td>' +
                '</tr>' +
                '</table>';
      } else {
        S = S + '<table width="100%" height="15" border="0" cellpadding="0" cellspacing="0">' +
                '<tr>' +
                    '<td width="23" align="center" valign="middle" class="cal_content">' +
                       v +
                    '</td>' +
                '</tr>' +
                '</table>' +
                '</td>';
                
      }

    } else {
      S = S + '<td align="center" valign="middle" class="cal_content">' +
              '&nbsp;' +
              '</td>'
    }

*/







    
    da = dateAddDays(da, 1);
    cellCnt++;
    
    if (cellCnt % 7 == 0) S = S + '</tr>';
  }

  S = S + '</table>';

  return S;
}


function showCalendar(lang, lvl, yyyymmdd) {
  var da, yyyy, mm;
  if (yyyymmdd) { // target date is provided
    evt_cal_yyyymmdd = yyyymmdd;  // record target date in global variable
    yyyy = parseInt(yyyymmdd.substring(0,4),10);
    mm = parseInt(yyyymmdd.substring(4,6),10);
  } else {
    da = new Date();
    yyyy = da.getFullYear();
    mm = da.getMonth()+1;
  }
  document.write('<span id="calendar_table">'+getMonthTable(yyyy,mm,lang,lvl)+'</span>');
}


function cal_goMonth(n, lang, lvl) {
  var o;

  evt_cal_mm += n;
  while (evt_cal_mm > 12) {
    evt_cal_yyyy++;
    evt_cal_mm -= 12;
  }
  while (evt_cal_mm < 1) {
    evt_cal_yyyy--;
    evt_cal_mm += 12;
  }

  o = document.getElementById("calendar_table");
  if (o) {
    o.innerHTML = getMonthTable(evt_cal_yyyy, evt_cal_mm, lang, lvl);
  }
}


// Navigate to the event page for today
// If today has no event, navigate to the page "noeventtoday.html"
function goTodayEventPage(lang, lvl) {
  var todayYMD, pgFile, theURL;

  // Today in YYYYMMDD
  todayYMD = dateToYMD(new Date());

  if (evt_dates.indexOf('.'+todayYMD+'.') != -1) pgFile = todayYMD + '.html';
  else pgFile = 'noeventtoday.html';

  theURL = window.location.href;
  theURL = theURL.substring(0,theURL.lastIndexOf('/'));
  for (i=0; i<lvl; i++) {
    theURL = theURL.substring(0,theURL.lastIndexOf('/'));
  }

  theURL = theURL + '/'+lang+'/event_calendar/'+ pgFile;
  window.location.href = theURL;
}
