var linkbase=new Array;
linkbase[0] = '';
linkbase[1] = '';
linkbase[2] = '';

var event_dates = new Array;
event_dates[0] = new Array;
event_dates[1] = new Array;
event_dates[2] = new Array;

var event_dates_i = new Array;
event_dates_i[0]=0;
event_dates_i[1]=0;
event_dates_i[2]=0;

function prfx2i(prfx) {
  if (prfx=='a_') return 0;
  else if (prfx=='b_') return 1;
  else if (prfx=='c_') return 2;
  else return 0;
}

function getLinkbase(prfx) {
  var prfx_i = prfx2i(prfx);

  return linkbase[prfx_i];
}

function reset_event_iterator(prfx) {
  var prfx_i = prfx2i(prfx);

  event_dates_i[prfx_i] = 0;
}

function hasEvent(year,month,day,prfx) {
  var prfx_i = prfx2i(prfx);
  var d = year+'-'+sprintf('%02d',month)+'-'+sprintf('%02d',day);

  for (;event_dates_i[prfx_i]<event_dates[prfx_i].length;++event_dates_i[prfx_i]) {
    if (event_dates[prfx_i][event_dates_i[prfx_i]]==d) return true;
    if (event_dates[prfx_i][event_dates_i[prfx_i]]>d) return false;
  }
  return false;
}

function draw_cal(year,month,curYear,curMonth,curDay,prfx) {
  var monDate = new Date(year, month-1, 1);
  var firstDay = monDate.getDay() ? monDate.getDay() : 7;
  var monthDays = daysInMonth(month, year);
  var day=1;
  var s;
  var cName;
  var nextMonth;
  var prevMonth;
  var nextYear = year;
  var prevYear = year;
  var monthNames = new Array;
  monthNames.push("");
  monthNames.push("January");
  monthNames.push("February");
  monthNames.push("March");
  monthNames.push("April");
  monthNames.push("May");
  monthNames.push("June");
  monthNames.push("July");
  monthNames.push("August");
  monthNames.push("September");
  monthNames.push("October");
  monthNames.push("November");
  monthNames.push("December");
  var i;
  var j;

  reset_event_iterator(prfx);

  if (month == 12) {
      nextMonth = 1;
      ++nextYear;
  } else { nextMonth = month+1; }

  if (month == 1) {
      prevMonth = 12;
      --prevYear;
  } else { prevMonth = month-1; }

  if (year>curYear || year==curYear && month>curMonth)
    $(prfx+'prev_month').innerHTML = '<a href=\"javascript:draw_cal('+prevYear + ',' + prevMonth+','+curYear+','+curMonth+','+curDay+','+"'"+prfx+"'"+'\)">&lt</a>';
  else
    $(prfx+'prev_month').innerHTML = '&nbsp;';
  
  $(prfx+'next_month').innerHTML = '<a href=\"javascript:draw_cal('+nextYear + ',' + nextMonth+','+curYear+','+curMonth+','+curDay+','+"'"+prfx+"'"+'\)">&gt</a>';
  $(prfx+'month').innerHTML = monthNames[month];

  for(j=1;j<=6;++j) {

    for(i=1;i<=7;++i) {
      $(prfx+'d'+j+''+i).innerHTML = '&nbsp;';
      $(prfx+'d'+j+''+i).className= 'noEventDate'; // default
      
      if (j==1 && i<firstDay) {
        continue;
      }
      
      if (day<curDay && year==curYear && month==curMonth) {
        $(prfx+'d'+j+''+i).innerHTML = day;
        $(prfx+'d'+j+''+i).className = 'pastDate';
      }
      else if (hasEvent(year,month,day,prfx)) {
        $(prfx+'d'+j+''+i).innerHTML = '<a class=\"eventDate\" href=\"' + getLinkbase(prfx) + '&d='+year+'-'+sprintf('%02d',month)+'-'+sprintf('%02d',day)+'\">' + day + '</a>';
        $(prfx+'d'+j+''+i).className = 'eventDate';
      }
      else if (day<=monthDays) {
        $(prfx+'d'+j+''+i).innerHTML = day;
      }
      
      if (day<=monthDays && !(j==1 && i<firstDay)) {
        ++day;
      }
    }
  }
}
