/*global document */
/*jslint devel: true */ /* use alert for bad input */
var oclorddate = function() {
var curryear;
function genordcal(gregyear) {
document.title = "Ordinal Calendar for " + gregyear;
var outstr = "";
var ordday = 0;
var mydate = new Date();
var thismonth = mydate.getMonth();
var thisday = mydate.getDate();
var gregmonth, dow, weekday, lastday, gregmonthname, dd;
var monthdays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
var monthname = ["January", "February", "March", "April", "May", "June",
  "July", "August", "September", "October", "November", "December"];
if (gregyear % 4 === 0 && (gregyear % 100 !== 0 || gregyear % 400 === 0)) {monthdays [1] = 29;}
for (gregmonth = 0; gregmonth < 12; gregmonth++) {
  mydate.setFullYear(gregyear,gregmonth,1);
  lastday = monthdays[gregmonth];
  gregmonthname = monthname[gregmonth];
  outstr += "<!--[if lte IE 7]><table border='1' cellspacing='0'><![endif]-->\n";
  outstr += "<!--[if !lte IE 7]><!--><table><!--<![endif]-->\n";
  outstr += "<caption>" + gregmonthname + " " + gregyear + "</caption>\n<tbody>";
  outstr += "<tr><th>Sun</th><th>Mon</th><th>Tue</th><th>Wed</th><th>Thu</th><th>Fri</th><th>Sat</th></tr>\n<tr>";
  dow = mydate.getDay(); weekday = dow - 1;
  for (dd = 0; dd < dow; dd++) {outstr += "<td>&#160;</td>";}
  for (dd = 1; dd <= lastday; dd++) {
    weekday++; if (weekday == 7) {weekday = 0;}
    if (weekday === 0 && dd > 1) {outstr += "<tr>";}
    ordday++;
    if (thismonth == gregmonth && thisday == dd) {outstr += "<td class='red'>";}
    else {outstr += "<td>";}
    if (dd < 10) {outstr += "&#160;" + dd;} else {outstr += dd;}
    outstr += "&#160;";
    if (ordday < 10) {outstr += "00";}
    else if (ordday < 100) {outstr += "0";}
    outstr += ordday;
    outstr += "</td>\n";
    if (weekday == 6) {outstr += "</tr>\n";}
  }
if (weekday < 6) {while (weekday < 6) {outstr += "<td>&#160;</td>"; weekday++;} outstr += "</tr>\n";}
outstr += "</tbody></table>\n";
}
return outstr;
}
function validate_yyyy (idyyyy) {
  if (!document.getElementById) {return true;}
  var numericExpression = /^[0-9]+$/;
  var yyyy = document.getElementById(idyyyy).value;
  if (yyyy.length != 4 /* || yyyy.substr(0,1) == '0' */ || !yyyy.match(numericExpression)) {
    alert("Year specified is invalid\nPlease reenter as 4 digits");
    document.getElementById(idyyyy).focus();
    return false;}
  return true;
  }
function setyear(year) {curryear = year;}
function changeyear(fieldname,divname){
if (validate_yyyy(fieldname)) {
  curryear= document.getElementById(fieldname).value;
  document.getElementById(divname).innerHTML = genordcal(curryear);
  }
return false;
}
function decryear(divname){
curryear--;
document.getElementById(divname).innerHTML = genordcal(curryear);
return false;
}
function incryear(divname){
curryear++;
document.getElementById(divname).innerHTML = genordcal(curryear);
return false;
}
function initcalform(formname) {
var endtag = (document.body.nodeName == "BODY") ? "" : "/"; 
var outstr = "<form action='#'><p>" +
"<input type='submit' value='Next Year' onclick='return oclorddate.incryear(\"caldiv\");' " + endtag + ">\n" +
"</p></form><form action='#'><p>" +
"<input type='submit' value='Prior Year' onclick='return oclorddate.decryear(\"caldiv\");' " + endtag + ">\n" +
"</p></form><form action='#'><p>" +
"<!--[if IE]><input type='text' style='display:none;' disabled='disabled' size='1' " + endtag + "><![endif]-->\n" +
"<input type='submit' value='Continue with' onclick='return oclorddate.changeyear(\"year\",\"caldiv\");' " + endtag + ">\n" +
"<label for='year'>Year</label>\n" +
"<input type='text' id='year' name='year' size='4' maxlength='4' " + endtag + ">" +
"</p></form>" ;
return outstr;
}
function initcal(divname,formname){
if (!document.getElementById) {return;}
var currdate = new Date();
curryear = currdate.getFullYear();
document.getElementById(divname).innerHTML = genordcal(curryear);
document.getElementById(formname).innerHTML = initcalform(formname);
}
return {
  initcal: function(divname,formname) {initcal(divname,formname);} ,
  setyear: function(year) {setyear(year);} ,
  incryear: function(divname) {return incryear(divname);} ,
  decryear: function(divname) {return decryear(divname);} ,
  changeyear: function(fieldname,divname) {return changeyear(fieldname,divname);} 
};
}();