// Event Calendar


var localisation = {
  'de': {
          'dow_n':    ['Mo','Di','Mi','Do','Fr','Sa','So'],
          'dow_name': ['Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag','Sonntag'],
          'mon_name': ['Januar','Februar','M&auml;rz','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'],
          'y_offset': 0
        },
  'th': {
          'dow_n':    ['&#x0e08;&#x0e31;&#x0e19;&#x0e17;&#x0e23;&#x0e4c;','&#x0e2d;&#x0e31;&#x0e07;&#x0e04;&#x0e32;&#x0e23;','&#x0e1e;&#x0e38;&#x0e18;','&#x0e1e;&#x0e24;&#x0e2b;&#x0e31;&#x0e2a;&#x0e2f;','&#x0e28;&#x0e38;&#x0e01;&#x0e23;&#x0e4c;','&#x0e40;&#x0e2a;&#x0e32;&#x0e23;&#x0e4c;','&#x0e2d;&#x0e32;&#x0e17;&#x0e34;&#x0e15;&#x0e22;&#x0e4c;'],
          'dow_name': ['&#x0e08;&#x0e31;&#x0e19;&#x0e17;&#x0e23;&#x0e4c;','&#x0e2d;&#x0e31;&#x0e07;&#x0e04;&#x0e32;&#x0e23;','&#x0e1e;&#x0e38;&#x0e18;','&#x0e1e;&#x0e24;&#x0e2b;&#x0e31;&#x0e2a;&#x0e2f;','&#x0e28;&#x0e38;&#x0e01;&#x0e23;&#x0e4c;','&#x0e40;&#x0e2a;&#x0e32;&#x0e23;&#x0e4c;','&#x0e2d;&#x0e32;&#x0e17;&#x0e34;&#x0e15;&#x0e22;&#x0e4c;'],
          'mon_name': ['&#x0e21;&#x0e01;&#x0e23;&#x0e32;&#x0e04;&#x0e21;','&#x0e01;&#x0e38;&#x0e21;&#x0e20;&#x0e32;&#x0e1e;&#x0e31;&#x0e19;&#x0e18;&#x0e4c;','&#x0e21;&#x0e35;&#x0e19;&#x0e32;&#x0e04;&#x0e21;','&#x0e40;&#x0e21;&#x0e29;&#x0e32;&#x0e22;&#x0e19;','&#x0e1e;&#x0e24;&#x0e29;&#x0e20;&#x0e32;&#x0e04;&#x0e21;','&#x0e21;&#x0e34;&#x0e16;&#x0e38;&#x0e19;&#x0e32;&#x0e22;&#x0e19;','&#x0e01;&#x0e23;&#x0e01;&#x0e0e;&#x0e32;&#x0e04;&#x0e21;','&#x0e2a;&#x0e34;&#x0e07;&#x0e2b;&#x0e32;&#x0e04;&#x0e21;','&#x0e01;&#x0e31;&#x0e19;&#x0e22;&#x0e32;&#x0e22;&#x0e19;','&#x0e15;&#x0e38;&#x0e25;&#x0e32;&#x0e04;&#x0e21;','&#x0e1e;&#x0e24;&#x0e28;&#x0e08;&#x0e34;&#x0e01;&#x0e32;&#x0e22;&#x0e19;','&#x0e18;&#x0e31;&#x0e19;&#x0e27;&#x0e32;&#x0e04;&#x0e21;'],
          'y_offset': 543
        },
  'en': {
          'dow_n':    ['Mon','Tue','Wed','Thu','Fri','Sat','Sun'],
          'dow_name': ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'],
          'mon_name': ['January','February','March','April','May','June','July','August','September','October','November','December'],
          'y_offset': 0
        }
};


var today = new Date();

function cal_build_calendar_html(id,loc,yy,mm) {
  var calendar = new Date(yy,mm,1);  

  var dow_offset = calendar.getDay() - 1;
  calendar.setTime(calendar.getTime()- dow_offset * 86400000);

  var txt = cal_build_month_prefix(id,loc,yy,mm);
  for (var w = 0; w < 6; ++w) {
    //alert('cal_build_calendar_html - 3')
    txt += cal_build_week_prefix(id,loc,yy,mm,w);
    for (var d = 0; d < 7; ++d) {
      //alert('cal_build_calendar_html - a ' + calendar.toString())
      txt += cal_build_day(id,loc,yy,mm,d,calendar);
      //alert('cal_build_calendar_html - b ' + calendar.toString())
      calendar.setTime(calendar.getTime()+ 86400000); 
      //alert('cal_build_calendar_html - c ' + calendar.toString())
    }
    //alert('cal_build_calendar_html - 5')
    txt += cal_build_week_postfix(id,loc,yy,mm,w);
    if (calendar.getMonth() > mm) { break; }
  }
  txt += cal_build_month_postfix(id,loc,yy,mm);
  //alert('cal_build_calendar_html - 7')
  return txt;
}

function cal_build_month_prefix(id,loc,yy,mm) {
  var txt = "<table class='cal'><tr class='cal_mon'>";
  var pyy=yy;
  var pmm=mm;
  if (!mm) {--pyy; pmm=12;}
  var nyy=yy;
  var nmm=mm+2;
  if (mm == 11) {++nyy; nmm=1;}
  var local = localisation[loc];
  var mon_name = local['mon_name'];
  var dow_name = local['dow_n'];
  var yr_offs  = local['y_offset'];

  txt += "<td class='cal_prev'><a href='javascript:cal_build_calendar(\""+id+"\",\""+loc+"\","+pyy+","+pmm+")'> < </a></td>";
  txt += "<td colspan='5'>" + mon_name[mm]+ " " + (yy+yr_offs) + "</td>"
  txt += "<td class='cal_next'><a href='javascript:cal_build_calendar(\""+id+"\",\""+loc+"\","+nyy+","+nmm+")'> > </a></td>";
  txt += "</tr>";
  txt += "<tr class='cal_dow'>";
  for (var d = 0; d < 7; ++d) {
    txt += "<td class='cal_dow'>" + dow_name[d] + "</td>";
  }
  txt += "</tr>\n";
  return txt;
}

function cal_build_month_postfix(id,loc,yy,mm) {
  var txt = "</table>\n";
  return txt;
}

function cal_build_week_prefix(id,loc,yy,mm,ww) {
  var txt = "<tr class='cal_week'>";
  return txt;
}

function cal_build_week_postfix(id,loc,yy,mm,ww) {
  var txt = "</tr>\n";
  return txt;
}

function cal_build_day(id,loc,yy,mm,dow,cal) {
  var txt = "";
  var suffix = "";
  var nota = "";
  if (cal.getMonth() != mm) {
    //txt += "<td class='cal_xxx"+suffix+"'>"+cal.getDate()+"</td>";
    txt += "<td class='cal_xxx"+suffix+"'> &nbsp; </td>";
  } else {
    //var chked = cal_chk_marker(id,cal)
    //if (chked) { suffix = "_mark' onmouseover='cal_tip(\""+id+"\",\""+chked+"\")' onmouseout='cal_untip("+id+")"; }
    var chkr = cal_chk_marker(id,cal);
    var chked = chkr ? chkr.innerHTML : "";
    var chktp = (chkr && chkr.type) ? chkr.type : "mark";
    if (cal.toDateString() == today.toDateString()) { suffix = '_today'; }
    if (chked != "") { suffix = "_"+chktp; nota = "' title='"+chked; }
    if (dow == 6) txt += "<td class='cal_sun"+suffix+nota+"'>"+cal.getDate()+"</td>";
    else
    if (dow == 5) txt += "<td class='cal_sat"+suffix+nota+"'>"+cal.getDate()+"</td>";
    else
    txt += "<td class='cal_day"+suffix+nota+"'>"+cal.getDate()+"</td>";
  }
  return txt;
}

function cal_mk_date_string(cal,gen) {
  var caltxt = "";
  if (cal.getDate() < 10) caltxt += "0";
  caltxt += cal.getDate();
  caltxt += ".";
  if (cal.getMonth() < 9) caltxt += "0";
  caltxt += (1+cal.getMonth());
  caltxt += ".";
  if (gen) caltxt += "0000";
  else caltxt += cal.getFullYear();
  return caltxt;
}

function cal_chk_marker(id,cal) {
  var caltxt = cal_mk_date_string(cal, 0); 
  var x = document.getElementById(id+"_"+caltxt);
  //if (x) return caltxt;
  if (x) return x;
  return 0;
}

function cal_get_marker(id,caltxt) {
  var x = document.getElementById(id+"_"+caltxt);
  if (x) return x;
  return "";
}

function cal_build_calendar(id,loc,yy,mm) {
  if ((yy == 0) && (mm == 0)) {
    var dat = new Date();
    yy = dat.getFullYear();
    mm = dat.getMonth() + 1;
  }
  if (mm < 1 || mm > 12) {
    alert('month must be between 1 and 12'); 
    return false;
  } 
  if (yy <= 1910 || yy >= 2039) {
    alert('year must be after 1910 and before 2040'); 
    return false;
  } 
  if (!document.getElementById(id)) {
    alert("element " + id + " not found");
    return;
  }
  var txt = cal_build_calendar_html(id,loc,yy,mm-1);
  document.getElementById(id).innerHTML = txt;
  //document.getElementById(id).innerHTML = "test test test";
  //alert(txt);
}

function dig2(x) {
  //var y = '00' + x;
  //return y.substr( -3 );
  //if (x >= 10) { return x; }
  if (x < 10) { return '0' + x; }
  return x;
}

function cal_datetime_now(loc) {
  var local = localisation[loc];
  var mon_name = local['mon_name'];
  var dow_n    = local['dow_n'];
  var dow_name = local['dow_name'];
  var yr_offs  = local['y_offset'];

  var td = new Date();
  if (loc == 'en') {
    return dow_name[(td.getDay()+6)%7] + ', ' + td.getDate() + '. ' + mon_name[td.getMonth()] + ' ' + td.getFullYear() + ', ' + dig2(td.getHours()) + ":" + dig2(td.getMinutes()) + ":" + dig2(td.getSeconds());
  }
  if (loc == 'th') {
    return dow_name[(td.getDay()+6)%7] + ' ' + td.getDate() + ' ' + mon_name[td.getMonth()] + ' ' + (td.getFullYear()+yr_offs) + ' (' + dig2(td.getHours()) + ":" + dig2(td.getMinutes()) + ":" + dig2(td.getSeconds()) + ')';
  }
  if (loc == 'de') {
    return dow_name[(td.getDay()+6)%7] + ', ' + td.getDate() + '. ' + mon_name[td.getMonth()] + ' ' + td.getFullYear() + ', ' + dig2(td.getHours()) + ":" + dig2(td.getMinutes()) + ":" + dig2(td.getSeconds());
  }
}

function cal_embed_datetime_now(element,loc) {
  if (element) element.innerHTML = cal_datetime_now(loc);
}

function cal_embed_datetime_now_into(id,loc) {
  cal_embed_datetime_now(document.getElementById(id),loc);
  if (navigator.appName != 'Microsoft Internet Explorer') {
    // please don't ask me, why IE is having problems with that...
    window.setTimeout('cal_embed_datetime_now_into(\''+id+'\',\''+loc+'\')');
  }
}

function cal_date_now(loc) {
  var local = localisation[loc];
  var mon_name = local['mon_name'];
  var dow_n    = local['dow_n'];
  var dow_name = local['dow_name'];
  var yr_offs  = local['y_offset'];

  var td = new Date();
  if (loc == 'en') {
    return dow_name[(td.getDay()+6)%7] + ', ' + td.getDate() + '. ' + mon_name[td.getMonth()] + ' ' + td.getFullYear() ;
  }
  if (loc == 'th') {
    return dow_name[(td.getDay()+6)%7] + ' ' + td.getDate() + ' ' + mon_name[td.getMonth()] + ' ' + (td.getFullYear()+yr_offs) ;
  }
  if (loc == 'de') {
    return dow_name[(td.getDay()+6)%7] + ', ' + td.getDate() + '. ' + mon_name[td.getMonth()] + ' ' + td.getFullYear() ;
  }
}

function cal_embed_date_now(element,loc) {
  if (element) element.innerHTML = cal_date_now(loc);
}

function cal_embed_date_now_into(id,loc) {
  cal_embed_date_now(document.getElementById(id),loc);
}

