var calendarFormat = 'm/d/y';
var calendarStartMonday = false;
var calendarUseToday = false;
var calendarShowClose = true;
var calendarDays  = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var calendarMonths = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
var calendarWeekdays = new Array('Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su');
var selectableDaysOfWeek  = new Array(1, 1, 1, 1, 1, 1, 1);
var todaysDate = new Date();
var todaysMonth = todaysDate.getMonth();
var todaysYear = y2k(todaysDate.getYear());
var numYears = 2;
var maxYear = todaysYear + (numYears - 1);


// Declare globals
//
var calDiv
var targetDateField;
var calContainerID;
var dateString;

var day;
var year;
var month;
var currentDay;
var currentYear;
var currentMonth;
var thisDay;
var thisMonth;
var thisYear;

var yeararray = new Array();


// {{{ y2k()

function y2k(number)
{
    return (number < 1000) ? number + 1900 : number; 
}

// }}}


// {{{ toggleCalendar()
function toggleCalendar(in_dateField, calObj) {
	calDiv = document.getElementById(calObj + 'Rel');
	
	if (calDiv.className == 'displayNone') {
		getCalendar(in_dateField, calObj);
		
		calDiv.className = 'displayBlock';
	} else {
		calDiv.className = 'displayNone';
	}
}
// }}}


// {{{ getCalendar()

function getCalendar(in_dateField, calObj) 
{
    targetDateField = in_dateField;
    calContainerID = calObj;
    
    // get the reference to the target element and setup the date
    var dateString = in_dateField.value;

    if (dateString != '' && 
       (typeof(calendarUseToday) == 'undefined' || !calendarUseToday)) {
        // convert the user format of the date into something we use to make a javascript Date object
        // we need to pad with placeholders to get the rigth offset
        tmp_format = calendarFormat.replace(/m/i, 'mm').replace(/d/i, 'dd').replace(/y/i, 'yyyy');
        tmp_yOffset = tmp_format.indexOf('y');
        tmp_mOffset = tmp_format.indexOf('m');
        tmp_dOffset = tmp_format.indexOf('d');
        today = new Date(dateString.substring(tmp_yOffset, tmp_yOffset + 4), dateString.substring(tmp_mOffset, tmp_mOffset + 2) - 1, dateString.substring(tmp_dOffset, tmp_dOffset + 2));

        if ((today == "Invalid Date") || (isNaN(today))) {
            today = new Date();
        }
    }
    // use today's date
    else {
        today = new Date();
    }

    day = today.getDate();
    year  = y2k(today.getYear());
    month = today.getMonth();

    currentDay = day;
    currentYear = year;
    currentMonth = month;

    thisDay   = day;
    thisMonth = month;
    thisYear  = year;

    printCalendar(calContainerID, thisMonth);
    //document.getElementById(calObj).style.display='block'

    return false;
}

// }}}


// {{{ calendar()

function calendar(objID, month, year) 
{

    var realMonth = parseInt(month) + 1;

    var realDate = '';
    var output = '';
       
    firstDay = new Date(year, month, 1);
    startDay = firstDay.getDay();
    weekdayOffset = 0;
    if (calendarStartMonday) {
        if (startDay) {
            startDay--;
        }
        else {
            startDay = 6;
        }

        weekdayOffset++;
    }


    // Determined whether this is a leap year or not
    if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
        calendarDays[1] = 29; 
    }
    else {
        calendarDays[1] = 28;
    }

    // we break up the output so it flushes the buffer frequently

    output += '<form id="datechooser"><table border="0" cellspacing="0" cellpadding="3" width="100%"><tr><td class="prevMonthBtn" align="left">';
    if ((month == todaysMonth) && (year == todaysYear)) {
        // Do not display previous month arrow
    } else {
        output += '<a onclick="previousmonth();printCalendar(\'' + calContainerID + '\',month);return false;" href="#"><img class="prevMonthBtn" src="shared_img/arrowl.gif" id="arrow_left_id" border="0"></a>';
    }
    output += '</td><td align="center">';
    output += '<select class="monthselect" onchange="month=this.options[this.selectedIndex].value;printCalendar(\'' + calContainerID + '\',month);" title="Month Jump">';
    for (month_cnt = 0; month_cnt < 12; month_cnt++) {
        output += '<option value='+month_cnt;
        if (month_cnt == month) {
            output += ' selected';
        }

        output += '>' + calendarMonths[month_cnt] + '</option>';
    }

    output += '</select> <select class="yearselect" onchange="year=this.options[this.selectedIndex].value;thisYear=year;printCalendar(\'' + calContainerID + '\',month);" title="Year Jump">';
    for (year_cnt = 1; year_cnt <= numYears; year_cnt++) {
        output += '<option value="'+yeararray[year_cnt]+'"';
        if (yeararray[year_cnt] == thisYear) {
            output += ' selected';
        }
        output += '>'+yeararray[year_cnt]+'</option>';
    }

    output += '</select></td>';
    output += '<td class="nextMonthBtn" align="right">';
    if ((month == 11) && (year == maxYear)) {
        // Do not display next month arrow
    } else {
        output += '<a onclick="nextmonth();printCalendar(\'' + calContainerID + '\',month);return false;" href="#"><img class="nextMonthBtn" src="shared_img/arrowr.gif" name="arrow_right_id" id="arrow_right_id" border="0"></a>';
    }
    output += '</td></tr>\n';
    output += '<tr><td colspan="3" valign="top"><table class="calmonth" border="0" cellspacing="0" cellpadding="0" width="100%">';
    output += '<tr class="dayofweek">';
    // print out the days of the week
    for (i = weekdayOffset; i < 7 + weekdayOffset; i++) {
        output += '<td class="dayofweek">' + calendarWeekdays[i] + '</td>';
    }

    output += '\n<tr>';

    var column = 0;
    for (i = 0; i < startDay; i++) {
        output += '<td class="empty">&nbsp</td>';
        column++;
    }

    for (i = 1; i <= calendarDays[month]; i++) {
        realDate = i;
	
	 
        if ((i == currentDay)  && (month == currentMonth) && (year == currentYear)) {
        
          if (selectableDaysOfWeek[column]) {
          
            output += '<td valign="middle" class="selectedPickable" onmouseover="colorize(this,1,\'selectedPickable\');" onmouseout="colorize(this,0,\'selectedPickable\');" onclick="sendDate('+realMonth+', '+realDate+', '+year+');">';
            output += i;
          }
          else {

            output += '<td valign="middle" class="selected">';
            output += i;
            
          }
          
	  output += '</td>';
        }
        else {

          if (selectableDaysOfWeek[column]) {

            output += '<td valign="middle" class="datePickable" onmouseover="colorize(this,1,\'datePickable\');" onmouseout="colorize(this,0,\'datePickable\');" onclick="sendDate('+realMonth+', '+realDate+', '+year+');">';
            output += i
          }
          else {

            output += '<td valign="middle" class="date">';
            output += i;
            
          }

            output += '</td>';
        }

        column++;
        // end the week
        if (column == 7) {
            output += '</tr>\n<tr>';
            column = 0;
        }
    }

    for(j = calendarDays[month]; j < 42-startDay; j++) {
        output += '<td class="empty">&nbsp</td>';
        column++;
        // end the week
        if (column == 7) {
            output += '</tr>\n<tr>';
            column = 0;
        }
    }
    
    output += '</tr></table></td></tr>';
    
    if (calendarShowClose) {
        output += '<tr><td colspan="3" align="center"><a class="closeLink" href="#" onclick="toggleCalendar(targetDateField,calContainerID); return false;">Close</a></td></tr>';
    }

    
    output += '</table></form>';

    return output;
}

// }}}


// {{{ printCalendar()

function printCalendar(objID,whichMonth)
{
    for (year_cnt = 1; year_cnt <= numYears; year_cnt++) {
        yeararray[year_cnt] = todaysYear - 1 + year_cnt;
    }

    var output = '<div class="calendar">';

    output += calendar(objID,whichMonth,thisYear);
    output += '</div>';
    document.getElementById(objID).innerHTML = output;
}

// }}}


// {{{ colorize()

function colorize (which, toggle, type) 
{
    if ((document.all) || (document.getElementById)) {
        if (toggle == 1) {
            which.className=type + 'Hover';
        }
        else {
            which.className=type;
        }
    }
}

// }}}


// {{{ yearback()

function yearback() 
{
   year--;
   thisYear=year;
}

// }}}


// {{{ yearforward()

function yearforward() 
{
   year++;
   thisYear=year;
}

// }}}


// {{{ previousmonth()

function previousmonth() 
{
    if (month > 0) {
        month--;
    }
    else {
        month = 11;
        year--;
        thisYear=year;
    }  
}

// }}}


// {{{ nextmonth()

function nextmonth() 
{
    if (month < 11) {
        month++;
    }
    else {
        month = 0;
        year++;
        thisYear=year;
    }
}

// }}}


// {{{ sendDate()

function sendDate(month, day, year) 
{
    // pad with blank zeros numbers under 10
    month = month < 10 ? '0' + month : month;
    day   = day   < 10 ? '0' + day   : day;
    selectedDate = calendarFormat;
    selectedDate = selectedDate.replace(/m/, month);
    selectedDate = selectedDate.replace(/d/, day);
    selectedDate = selectedDate.replace(/y/, year);
    targetDateField.value = selectedDate;
    if(calContainerID == "calendarRYSForm")
    { setRYSCount(); }
//  document.getElementById(calContainerID).style.display='none';
    calDiv.className = 'displayNone';
}

// }}}

