// Live calendar source file copyright 2001 David Lawver
//Please do not remove URL from the source code. http://hotshift.com
  var HotShift = "http://hotshift.com";
  var LONGheading = "City of SeaTac (48-96)";
  var codes = "ABC";
  var sequence = "ABBCCAABBCCAABBCCAABBCCA";
  var SeqDateFloor = new Date("January 01, 1970");
  var Seqstartdate = new Date("December 31, 2006");
  var colors = "#FF0000#0000FF#00FF00";
  var OTOffset = 0;
  var OTcycle = 0;
  var Rotcycle = 28;
  var Rotdate = new Date("November 22, 1996");
  var Paycycle = 14;
  var PaydayOffset = 1;
  var PaydayType = 0;
  var PaydayCount = 2;
  var Payday1 = 1;
  var Payday2 = 15;
  var OTfootnote = "Underline = FLSA Period";
  var PDfootnote = "$ = Payday";
  var TagCode = "D";
  var numcodes = codes.length;
  var cycle = sequence.length;
  var TodayBGColor = "#FFFFFF";
  var TableBGColor = "#FFFFC0";
  var HeadingColor = "#000000";
  var curdate = new Date();
  var curmonth = curdate.getMonth();
  var curyear = curdate.getFullYear();
  var trueyear = curdate.getFullYear();

// Holiday Variables 
var HolidayBGColor = "#C0FFFF";
var hol_count = "11";
var hol_name = new Array("New Years Day","M. L. King's Birthday","President's Day","Easter","Memorial Day","Independence Day","Labor Day","Columbus Day","Veteran's Day","Thanksgiving Day","Christmas Day");
var hol_eachyr = new Array(0,0,0,0,0,0,0,0,0,0,0);
var hol_month = new Array(1,1,2,0,5,7,9,10,11,11,12);
var hol_nwkday = new Array(0,3,3,-1,5,0,1,2,0,4,0);
var hol_day = new Array(1,2,2,1,2,4,2,2,11,5,25);
var hol_wkends = new Array(0,0,0,0,0,0,0,0,0,0,0);
var hol_date = new Array();
var hDays = new Array();
var hHolidays = new Array();
var hDayCount=0;
// End of Holiday Variables 

  var htmlarray = new Array();
  var Days_in_Month = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
  if (navigator.appName == 'Netscape')
  var selectedLanguage = navigator.language;
  else
  var selectedLanguage = navigator.browserLanguage;
  var code = selectedLanguage.substring(0, 2)
    // IF FRENCH
if (code == 'fr') {
  var Month_Label = new Array('Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Aout', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
  var Day_Label = new Array('Di', 'Lu', 'Ma', 'Me', 'Je', 'Ve', 'Sa');
}
    // IF GERMAN
else if (code == 'de') {
  var Month_Label = new Array('Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember');
  var Day_Label = new Array('So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa');
}
    // IF SPANISH
else if (code == 'es') {
  var Month_Label = new Array('Enero', 'Febrero', 'Marcha', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre');
  var Day_Label = new Array('Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa');
}
    // IF ENGLISH
else {
  var Month_Label = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
  var Day_Label = new Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
}
  var Day_Num = new Array(1, 2, 3, 4, 5, 6, 7);

  var Today = curdate.getDate();
  var htmlstring = "";

  var ie4=document.all;
  var ns6=document.getElementById&&!document.all;
  var Selected_Month;
  var Selected_Year;
function Header(Year, Month) {

  if (Month == 1) {
      if ((Year % 400 == 0) || ((Year % 4 == 0) && (Year % 100 != 0))) {
        Days_in_Month[1] = 29;
      }
            else {
                Days_in_Month[1] = 28;
      }
  }
  var Header_String = Month_Label[Month] + ' ' + Year;
  return Header_String;
}

function Make_Calendar(Year, Month) {
  var Seqkeyday;
  var tmpTodayBG=TodayBGColor;
  var tmpTableBG=TableBGColor;
  var codestring=" ";
  var colorcode;
  var daycount = 1;
  var loopcounter = 1;

  if (Year <= 1970) {
    Year = 1970;
  }

  if (Year >= 2029) {
    Year = 2029;
  }
  GetHolidayDates (Year)
  Holidays_In_Month (Month)
  var First_Date = new Date(Year, Month, 1);

  var Heading = Header(Year, Month);
  var First_Day = First_Date.getDay() ;
  if (((Days_in_Month[Month] == 31) && (Day_Num[First_Day] >= 6)) ||
      ((Days_in_Month[Month] == 30) && (Day_Num[First_Day] == 7))) {
      var Rows = 6;
  }
  else if ((Days_in_Month[Month] == 28) && (Day_Num[First_Day] == 1)) {
      var Rows = 4;
  }
  else {
      var Rows = 5;
  }

  htmlstring = '<table width=100%><tr><td valign="top"><table align="center" border="3" CELLSPACING=1 cellpadding=3 FRAME="box" BGCOLOR="'+TableBGColor+'" BORDERCOLORLIGHT="808080">';
    htmlstring += '<tr><th colspan="7" bgcolor="'+TableBGColor+'"><font color="'+HeadingColor+'">'+LONGheading+'</font></th></tr>';

    htmlstring += '<tr><td align="center" BGCOLOR="'+TableBGColor+'" height="5%" colspan="7" width="100%" nowrap><small><strong>';

    //Print each shift code in color

        for(i=0; i<=(numcodes-1); i++){
            codestring=codes.substr(i,1);
            htmlstring +='<font color="'+colors.substr(i*7,7)+'">'+codestring+'</font>';
        }
        htmlstring += '</strong></small></td>';
        htmlstring += '</tr>';

      htmlstring += '<tr><th colspan="7" bgcolor="'+TableBGColor+'"><font color="'+HeadingColor+'">' + Heading + '</font></th></tr>';

  htmlstring += '<tr>';
    htmlstring += '<th width="14%" align="center" bgcolor="'+TableBGColor+'"><font color="'+HeadingColor+'">' + Day_Label[0] + '</font></th>';
    htmlstring += '<th width="14%" align="center" bgcolor="'+TableBGColor+'"><font color="'+HeadingColor+'">' + Day_Label[1] + '</font></th>';
    htmlstring += '<th width="14%" align="center" bgcolor="'+TableBGColor+'"><font color="'+HeadingColor+'">' + Day_Label[2] + '</font></th>';
    htmlstring += '<th width="14%" align="center" bgcolor="'+TableBGColor+'"><font color="'+HeadingColor+'">' + Day_Label[3] + '</font></th>';
    htmlstring += '<th width="14%" align="center" bgcolor="'+TableBGColor+'"><font color="'+HeadingColor+'">' + Day_Label[4] + '</font></th>';
    htmlstring += '<th width="14%" align="center" bgcolor="'+TableBGColor+'"><font color="'+HeadingColor+'">' + Day_Label[5] + '</font></th>';
    htmlstring += '<th width="14%" align="center" bgcolor="'+TableBGColor+'"><font color="'+HeadingColor+'">' + Day_Label[6] + '</font></th>';
  htmlstring += '</tr>';

  for (var j = 1; j <= Rows; j++) {
    htmlstring += '<tr align="center" VALIGN="top">';

      for (var i = 1; i < 8; i++) {
        if ((loopcounter >= Day_Num[First_Day]) && (daycount <= Days_in_Month[Month])) {

      var Current = new Date(Year, Month, daycount);

      var SMPLdaysdiff = days_diff(SeqDateFloor,Current);
      var Rotdaysdiff = days_diff(SeqDateFloor,Current) + 6;

      Seqkeyday = SMPLdaysdiff % cycle;
      codestring=sequence.substr(Seqkeyday,1);
      colorcode=colors.substr(codes.indexOf(codestring.substr(0,1))*7,7);

      var daystr=daycount.toString();

      if (SMPLdaysdiff > -1){


      }

      daystr=(SMPLdaysdiff>=0 ? '<font color="'+colorcode+'">'+daystr+'</font>' : '<font color="black">'+daystr+'</font>');


      if (isHoliday(daycount)==1){
          //alert(Current);
        tmpTodayBG = HolidayBGColor;
        tmpTableBG = HolidayBGColor;
      }
      else{
        tmpTodayBG = TodayBGColor;
        tmpTableBG = TableBGColor;
      }
              if ((daycount == Today) && (Year == curyear) && (Month == curmonth)) {
                htmlstring += '<td BGCOLOR="'+tmpTodayBG+'"  BORDERCOLOR="'+colorcode+'"><strong><I>' +daystr+ '</I></strong></td>';
            }
            else {
                htmlstring += '<td BGCOLOR="'+tmpTableBG+'" BORDERCOLOR="#000000"><strong>' +daystr+ '</strong></td>';
            }

            daycount++;
        }
        else {
            htmlstring += '<td BORDERCOLOR="'+TableBGColor+'">&nbsp;</td>';
        }
        loopcounter++;
      }
      htmlstring += '</tr>';
  }
  for (i = 0; i<hDayCount; i++){
      htmlstring += '<tr><th colspan="7" bgcolor="'+HolidayBGColor+'"><small><font color="'+HeadingColor+'">' + hHolidays[i] + '</font></small></th></tr>';
}

  htmlstring += '</table></td></tr></table>';

//document.all.Calendar.innerHTML = htmlstring;
  cross_el=ns6? document.getElementById("Calendar") : document.all.Calendar;
  cross_el.innerHTML = htmlstring;
}

function On_Year() {
  var Year = document.when.year.value;
  if (Year.length == 4) {
      Selected_Month = document.when.month.selectedIndex;
      Selected_Year = Year;
      Make_Calendar(Selected_Year, Selected_Month);
  }
}

function On_Month() {
  var Year = document.when.year.value;
  if (Year.length == 4) {
      Selected_Month = document.when.month.selectedIndex;
      Selected_Year = Year;

  if (Selected_Year <= 1970) {
    Selected_Year = 1970;
  }

  if (Selected_Year >= 2029) {
    Selected_Year = 2029;
  }

      Make_Calendar(Selected_Year, Selected_Month);
  }
  else {
      alert('Please enter a valid year.');
      document.when.year.focus();
  }
}

function Defaults() {
  if (!document.all)
  return
  var Mid_Screen = Math.round(document.body.clientWidth / 2);
  document.when.month.selectedIndex = curmonth;
  document.when.year.value = curyear;
  Selected_Month = curmonth;
  Selected_Year = curyear;
  Make_Calendar(curyear, curmonth);
}

function Skip(Direction) {
  if (Direction == '+') {
      if (Selected_Month == 11) {
        Selected_Month = 0;
        Selected_Year++;
      }
      else {
        Selected_Month++;
      }
  }
  else {
      if (Selected_Month == 0) {
        Selected_Month = 11;
        Selected_Year--;
      }
      else {
        Selected_Month--;
      }
  }

  if (Selected_Year <= 1970) {
    Selected_Year = 1970;
  }

  if (Selected_Year >= 2029) {
    Selected_Year = 2029;
  }

  Make_Calendar(Selected_Year, Selected_Month);
  document.when.month.selectedIndex = Selected_Month;
  document.when.year.value = Selected_Year;
}

function On_Now(){
  Selected_Year = curdate.getYear();
  Selected_Month = curdate.getMonth();
  Make_Calendar(Selected_Year, Selected_Month);
  document.when.month.selectedIndex = Selected_Month;
  document.when.year.value = Selected_Year;
}

//Get number of days from start date to date on calendar
function days_diff(start,current){
    var currentdays = Math.floor(current.getTime() / (1000 * 60 * 60 * 24)*1);
    var startdays = Math.floor(start.getTime() / (1000 * 60 * 60 * 24)*1);
    var daysdiff = currentdays-startdays;
    return daysdiff;
}

function GetHolidayDates(Y){
  for (i = 0; i<hol_count; i++){
    if (hol_nwkday[i] == -1){
      hol_date[i]=Easter(Y);
    }
    else if (hol_nwkday[i] == 0){
      hol_date[i]=new Date(Y,hol_month[i]-1,hol_day[i]);
    }
    else if (hol_nwkday[i] == 1 || hol_nwkday[i] == 2 || hol_nwkday[i] == 3 || hol_nwkday[i] == 4){
      var dd=NthDay(hol_nwkday[i],hol_day[i],hol_month[i],Y);
      hol_date[i]=new Date(Y,hol_month[i]-1,dd);
    }    else if (hol_nwkday[i] == 5){
      var dd=LastDay(hol_day[i],hol_month[i],Y);
      hol_date[i]=new Date(Y,hol_month[i]-1,dd);
    }
  }
}

function Holidays_In_Month(M){
  hDayCount=0;
  for (i = 0; i<hol_count; i++){
    if (hol_date[i].getMonth() == M){
      hDays[hDayCount]=hol_date[i].getDate();
      hHolidays[hDayCount]=hol_name[i];
      //alert(hDays[hDayCount]);
      hDayCount++;
    }
  }
}

function isHoliday(D){
  for (i = 0; i<hDayCount; i++){
    //alert(D);
    //alert(hDays[i]);
    if (hDays[i] == D){
      //alert(D);
        return 1;
        break;
      }
    }
  return 0;
}

function DayOfWeek(day,month,year){
  var a = Math.floor((14 - month)/12);
  var y = year - a;
  var m = month + 12*a - 2;
  var d = (day + y + Math.floor(y/4) - Math.floor(y/100) +
  Math.floor(y/400) + Math.floor((31*m)/12)) % 7;
  return d + 1;
}

function Easter(Y){
  var Y = Math.floor(Y/1);
  var C = Math.floor(Y/100);
  var N = Y - 19*Math.floor(Y/19);
  var K = Math.floor((C - 17)/25);
  var I = C - Math.floor(C/4) - Math.floor((C - K)/3) + 19*N + 15;
  var I2 = I - 30*Math.floor((I/30));
  var I3 = I2 - Math.floor(I2/28)*(1 - Math.floor(I2/28)*Math.floor(29/(I2 + 1))*Math.floor((21 - N)/11));
  var J = Y + Math.floor(Y/4) + I3 + 2 - C + Math.floor(C/4);
  J-=7*Math.floor(J/7);
  var L = I3 - J;
  var M = 3 + Math.floor((L + 40)/44);
  var D = L + 28 - 31*Math.floor(M/4);
  var E = new Date(Y,M-1,D);
  return E;
}

function LeapYear(year){
  if ((year/4)   != Math.floor(year/4))   return false;
  if ((year/100) != Math.floor(year/100)) return true;
  if ((year/400) != Math.floor(year/400)) return false;
  return true;
}

function NthDay(nth,weekday,month,year){
  return (nth-1)*7 + 1 + (7 + weekday - DayOfWeek((nth-1)*7 + 1,month,year))%7;
}

function NthDay(nth,WkDay,M,Yr){
  var AddDays=(nth-=1)*7;
  M-=1;
  WkDay-=1;
  for (var i = 1; i < 8; i++){
    var CurDate=new Date(Yr,M,i);
    if (CurDate.getDay()==WkDay){
      break;
    }
  }
  return i+=AddDays;
}

function LastDay(WkDay,M,Yr){
  M-=1;
  WkDay-=1;
    var last=Days_in_Month[M];
  for (var i = last; i > (last-8); i--){
    var CurDate=new Date(Yr,M,i);
    if (CurDate.getDay()==WkDay){
      break;
    }
  }
  return i;
}

// End of source file
