
var calendar_MONTHS = new Array('January', 'February', 'March', 'April', 'May', 'June',
                         'July', 'August', 'September', 'October','November','December');

var calendar_MONTHS_SHORT = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
                                      'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');

var calendar_TABLE_STYLE = //'border-collapse: collapse; '+
                           'border-width: 1px; '+
                           'border-style: solid; '+
                           'border-color: #7f7f7f; '+
                           'background-color: #ffffff; '+
                           'padding: 0 0; '+
                           'position: absolute; '+
                           'display: none; '+
                           'width: 194px; '+
                           'z-index: 200;';
                            

function calendar_placeHere(id)
{
  document.write('<style>#'+id+' tr, #'+id+' td {width: 194px;padding: 0 0;}</style>');
  document.write('<table id="'+id+'" '+
                 'style="'+calendar_TABLE_STYLE+'">'+
                 '</table>');
}

function calendar_updateCalendarTable(id, year, month, target_human, target_value)
{
  var cal = document.getElementById(id);
  cal.innerHTML = calendar_generateTableInner(id,year,month,target_human, target_value);
}

function calendar_generateTableInner(id,year, month,target_human, target_value)
{
  var back_month = month-1;
  var back_year = year;
  if(back_month < 0)
  {
    back_year--;
    back_month = 11;
  }
  var fwd_month = month+1;
  var fwd_year = year;
  if(fwd_month >= 12)
  {
    fwd_year++;
    fwd_month=0;
  }
  
  var back_link = '<a href="javascript:;" onclick="calendar_updateCalendarTable(\''+id+'\','+
                  back_year+','+(back_month)+",'"+target_human+"','"+target_value+'\')">&laquo;</a>';
  var fwd_link  = '<a href="javascript:;" onclick="calendar_updateCalendarTable(\''+id+'\','+
                  fwd_year+','+(fwd_month)+",'"+target_human+"','"+target_value+'\')">&raquo;</a>';
  var xhtml = '<tr style="background-color: #ccffcc; font-weight: bold; font-size:10pt;">'+
              '<td colspan="9" style="text-align: center;">&nbsp;'+back_link+'&nbsp;'+
              calendar_MONTHS[month]+'&nbsp;'+year+
              '&nbsp;'+fwd_link+'&nbsp;</td></tr>';

  xhtml += calendar_generateDays(id,year,month,target_human, target_value);
  return(xhtml);
}

function calendar_generateDays(id,year, month, target_human, target_value)
{
  var d = new Date();
  d.setFullYear(year);
  d.setMonth(month);
  d.setDate(1);
  
  var dow = d.getDay();
  var xhtml = '<tr style="text-align: center; font-weight: bold; font-size: 9pt">'+
              '<td>&nbsp;</td>'+
              '<td>Su</td><td>M</td><td>Tu</td><td>W</td><td>Th</td><td>F</td><td>Sa</td>'+
              '<td>&nbsp;</td></tr>'+
              '<tr style="font-size: 9pt"><td>&nbsp;</td>';
  
  
  
  for(i=0;i<dow;i++)
  {
    xhtml += '<td>&nbsp;</td>';
  }
  
  for(i=1;i<=31;i++)
  {
    // check for month rollover
    d.setDate(i);
    if(d.getMonth() != month)
    {
      break;
    }
    
    // check for end of week
    if(d.getDay() == 0 && i != 1)
    {
      xhtml += '<td>&nbsp;</td></tr><tr style="font-size: 9pt"><td>&nbsp;</td>';
    }
    
    
    var d_human = ''+d.getDate()+' '+calendar_MONTHS_SHORT[d.getMonth()]+' '+d.getFullYear();
    var d_value = ''+d.getFullYear()+'-'+zero_prefix(d.getMonth()+1)+'-'+zero_prefix(d.getDate());
    var script = "calendar_setDate('"+target_human+"', '"+d_human+"', '"+target_value+"', '"+d_value+"'); "+
                 "calendar_hide('"+id+"');";
    var d_link = '<a href="javascript:;" onclick="'+script+'">'+i+'</a>&nbsp;';
    xhtml += '<td style="text-align: right">'+d_link+'</td>';
  }
  
  for(i=d.getDay();i<6;i++)
  {
    xhtml += '<td>&nbsp;</td>';
  }
  
  xhtml += '<td>&nbsp;</td></tr>';
  
  return(xhtml);
}

function zero_prefix(value)
{
  if(value < 10)
  {
    return("0"+value);
  }
  return(value);
}

function calendar_regressionUpdate(id, year, target_value)
{
  var day_id = id+'_day';
  var month_id = id+'_month';
  var day_elem = document.getElementById(day_id);
  var month_elem = document.getElementById(month_id);
  
  var day_value = day_elem.value;
  var month_value = month_elem.value;
  
  var d_value = year+'-'+zero_prefix(month_value)+'-'+zero_prefix(day_value);
  var elem = document.getElementById(target_value);
  if(elem != null)
  {
    elem.value = d_value;
  }
}

function calendar_setDate(target_human, d_human, target_value, d_value)
{
  //alert(''+target_human+'='+d_human+' -- '+target_value+'='+d_value);
  var elem = document.getElementById(target_human);
  if(elem != null)
  {
    elem.innerHTML = d_human;
  }
  elem = document.getElementById(target_value);
  if(elem != null)
  {
    elem.value = d_value;
  }
}

function calendar_show(id)
{
  document.getElementById(id).style.display='block';
}

function calendar_hide(id)
{
  document.getElementById(id).style.display='none';
}
