function getAnchorPosition(anchorname) {
  var useWindow = false;
  var coordinates = new Object();
  var x = 0,y = 0;
  var use_gebi = false,use_css = false,use_layers = false;
  if (document.getElementById) {
    use_gebi = true;
  }
  else if (document.all) {
    use_css = true;
  }
  else if (document.layers) {
    use_layers = true;
  }
  if (use_gebi && document.all) {
    x = AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
    y = AnchorPosition_getPageOffsetTop(document.all[anchorname]);
  }
  else if (use_gebi) {
    var o = document.getElementById(anchorname);
    x = AnchorPosition_getPageOffsetLeft(o);
    y = AnchorPosition_getPageOffsetTop(o);
  }
  else if (use_css) {
    x = AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
    y = AnchorPosition_getPageOffsetTop(document.all[anchorname]);
  }
  else if (use_layers) {
    var found = 0;
    for (var i = 0; i < document.anchors.length; i++) {
      if (document.anchors[i].name == anchorname) {
        found = 1;
        break;
      }
    }
    if (found == 0) {
      coordinates.x = 0;
      coordinates.y = 0;
      return coordinates;
    }
    x = document.anchors[i].x;
    y = document.anchors[i].y;
  }
  else {
    coordinates.x = 0;
    coordinates.y = 0;
    return coordinates;
  }
  coordinates.x = x;
  coordinates.y = y;
  return coordinates;
}
function getAnchorWindowPosition(anchorname) {
  var coordinates = getAnchorPosition(anchorname);
  var x = 0;
  var y = 0;
  if (document.getElementById) {
    if (isNaN(window.screenX)) {
      x = coordinates.x - document.body.scrollLeft + window.screenLeft;
      y = coordinates.y - document.body.scrollTop + window.screenTop;
    }
    else {
      x = coordinates.x + window.screenX + (window.outerWidth - window.innerWidth) - window.pageXOffset;
      y = coordinates.y + window.screenY + (window.outerHeight - 24 - window.innerHeight) - window.pageYOffset;
    }
  }
  else if (document.all) {
    x = coordinates.x - document.body.scrollLeft + window.screenLeft;
    y = coordinates.y - document.body.scrollTop + window.screenTop;
  }
  else if (document.layers) {
    x = coordinates.x + window.screenX + (window.outerWidth - window.innerWidth) - window.pageXOffset;
    y = coordinates.y + window.screenY + (window.outerHeight - 24 - window.innerHeight) - window.pageYOffset;
  }
  coordinates.x = x;
  coordinates.y = y;
  return coordinates;
}
function AnchorPosition_getPageOffsetLeft(el) {
  var ol = el.offsetLeft;
  while ((el = el.offsetParent) != null) {
    ol += el.offsetLeft;
  }
  return ol;
}
function AnchorPosition_getWindowOffsetLeft(el) {
  return AnchorPosition_getPageOffsetLeft(el) - document.body.scrollLeft;
}
function AnchorPosition_getPageOffsetTop(el) {
  var ot = el.offsetTop;
  while ((el = el.offsetParent) != null) {
    ot += el.offsetTop;
  }
  return ot;
}
function AnchorPosition_getWindowOffsetTop(el) {
  return AnchorPosition_getPageOffsetTop(el) - document.body.scrollTop;
}
function PopupWindow_getXYPosition(anchorname) {
  var coordinates;
  if (this.type == "WINDOW") {
    coordinates = getAnchorWindowPosition(anchorname);
  }
  else {
    coordinates = getAnchorPosition(anchorname);
  }
  this.x = coordinates.x;
  this.y = coordinates.y;
}
function PopupWindow_setSize(width, height) {
  this.width = width;
  this.height = height;
}
function PopupWindow_populate(contents) {
  this.contents = contents;
  this.populated = false;
}
function PopupWindow_setUrl(url) {
  this.url = url;
}
function PopupWindow_setWindowProperties(props) {
  this.windowProperties = props;
}
function PopupWindow_refresh() {
  if (this.divName != null) {
    if (this.use_gebi) {
      document.getElementById(this.divName).innerHTML = this.contents;
    }
    else if (this.use_css) {
      document.all[this.divName].innerHTML = this.contents;
    }
    else if (this.use_layers) {
      var d = document.layers[this.divName];
      d.document.open();
      d.document.writeln(this.contents);
      d.document.close();
    }
  }
  else {
    if (this.popupWindow != null && !this.popupWindow.closed) {
      if (this.url != "") {
        this.popupWindow.location.href = this.url;
      }
      else {
        this.popupWindow.document.open();
        this.popupWindow.document.writeln(this.contents);
        this.popupWindow.document.close();
      }
      this.popupWindow.focus();
    }
  }
}
function PopupWindow_showPopup(anchorname) {
  this.getXYPosition(anchorname);
  this.x += this.offsetX;
  this.y += this.offsetY;
  if (!this.populated && (this.contents != "")) {
    this.populated = true;
    this.refresh();
  }
  if (this.divName != null) {
    if (this.use_gebi) {
      document.getElementById(this.divName).style.left = this.x + "px";
      document.getElementById(this.divName).style.top = this.y + "px";
      document.getElementById(this.divName).style.visibility = "visible";
    }
    else if (this.use_css) {
      document.all[this.divName].style.left = this.x;
      document.all[this.divName].style.top = this.y;
      document.all[this.divName].style.visibility = "visible";
    }
    else if (this.use_layers) {
      document.layers[this.divName].left = this.x;
      document.layers[this.divName].top = this.y;
      document.layers[this.divName].visibility = "visible";
    }
  }
  else {
    if (this.popupWindow == null || this.popupWindow.closed) {
      if (this.x < 0) {
        this.x = 0;
      }
      if (this.y < 0) {
        this.y = 0;
      }
      if (screen && screen.availHeight) {
        if ((this.y + this.height) > screen.availHeight) {
          this.y = screen.availHeight - this.height;
        }
      }
      if (screen && screen.availWidth) {
        if ((this.x + this.width) > screen.availWidth) {
          this.x = screen.availWidth - this.width;
        }
      }
      var avoidAboutBlank = window.opera || ( document.layers && !navigator.mimeTypes['*'] ) || navigator.vendor == 'KDE' || ( document.childNodes && !document.all && !navigator.taintEnabled );
      this.popupWindow = window.open(avoidAboutBlank ? "" : "about:blank", "window_" + anchorname, this.windowProperties + ",width=" + this.width + ",height=" + this.height + ",screenX=" + this.x + ",left=" + this.x + ",screenY=" + this.y + ",top=" + this.y + "");
    }
    this.refresh();
  }
}
function PopupWindow_hidePopup() {
  if (this.divName != null) {
    if (this.use_gebi) {
      document.getElementById(this.divName).style.visibility = "hidden";
    }
    else if (this.use_css) {
      document.all[this.divName].style.visibility = "hidden";
    }
    else if (this.use_layers) {
      document.layers[this.divName].visibility = "hidden";
    }
  }
  else {
    if (this.popupWindow && !this.popupWindow.closed) {
      this.popupWindow.close();
      this.popupWindow = null;
    }
  }
}
function PopupWindow_isClicked(e) {
  if (this.divName != null) {
    if (this.use_layers) {
      var clickX = e.pageX;
      var clickY = e.pageY;
      var t = document.layers[this.divName];
      if ((clickX > t.left) && (clickX < t.left + t.clip.width) && (clickY > t.top) && (clickY < t.top + t.clip.height)) {
        return true;
      }
      else {
        return false;
      }
    }
    else if (document.all) {
      var t = window.event.srcElement;
      while (t.parentElement != null) {
        if (t.id == this.divName) {
          return true;
        }
        t = t.parentElement;
      }
      return false;
    }
    else if (this.use_gebi && e) {
      var t = e.originalTarget;
      while (t.parentNode != null) {
        if (t.id == this.divName) {
          return true;
        }
        t = t.parentNode;
      }
      return false;
    }
    return false;
  }
  return false;
}
function PopupWindow_hideIfNotClicked(e) {
  if (this.autoHideEnabled && !this.isClicked(e)) {
    this.hidePopup();
  }
}
function PopupWindow_autoHide() {
  this.autoHideEnabled = true;
}
function PopupWindow_hidePopupWindows(e) {
  for (var i = 0; i < popupWindowObjects.length; i++) {
    if (popupWindowObjects[i] != null) {
      var p = popupWindowObjects[i];
      p.hideIfNotClicked(e);
    }
  }
}
function PopupWindow_attachListener() {
  if (document.layers) {
    document.captureEvents(Event.MOUSEUP);
  }
  window.popupWindowOldEventListener = document.onmouseup;
  if (window.popupWindowOldEventListener != null) {
    document.onmouseup = new Function("window.popupWindowOldEventListener(); PopupWindow_hidePopupWindows();");
  }
  else {
    document.onmouseup = PopupWindow_hidePopupWindows;
  }
}
function PopupWindow()
{
  if (!window.popupWindowIndex) {
    window.popupWindowIndex = 0;
  }
  if (!window.popupWindowObjects) {
    window.popupWindowObjects = new Array();
  }
  if (!window.listenerAttached)
  {
    window.listenerAttached = true;
    PopupWindow_attachListener();
  }
  this.index = popupWindowIndex++;
  popupWindowObjects[this.index] = this;
  this.divName = null;
  this.popupWindow = null;
  this.width = 0;
  this.height = 0;
  this.populated = false;
  this.visible = false;
  this.autoHideEnabled = false;
  this.contents = "";
  this.url = "";
  this.windowProperties = "toolbar=no,location=no,status=no,menubar=no,scrollbars=auto,resizable,alwaysRaised,dependent,titlebar=no";
  if (arguments.length > 0)
  {
    this.type = "DIV";
    this.divName = arguments[0];
  }
  else
    this.type = "WINDOW";
  this.use_gebi = false;
  this.use_css = false;
  this.use_layers = false;
  if (document.getElementById)
    this.use_gebi = true;
  else if (document.all)
    this.use_css = true;
  else if (document.layers)
    this.use_layers = true;
  else
    this.type = "WINDOW";
  this.offsetX = 0;
  this.offsetY = 0;
  this.getXYPosition = PopupWindow_getXYPosition;
  this.populate = PopupWindow_populate;
  this.setUrl = PopupWindow_setUrl;
  this.setWindowProperties = PopupWindow_setWindowProperties;
  this.refresh = PopupWindow_refresh;
  this.showPopup = PopupWindow_showPopup;
  this.hidePopup = PopupWindow_hidePopup;
  this.setSize = PopupWindow_setSize;
  this.isClicked = PopupWindow_isClicked;
  this.autoHide = PopupWindow_autoHide;
  this.hideIfNotClicked = PopupWindow_hideIfNotClicked;
  this.dpnd = new Array();
}
function CalendarPopup() {
  var c;
  if (arguments.length > 0)
    c = new PopupWindow(arguments[0]);
  else
  {
    c = new PopupWindow();
    c.setSize(150, 175);
  }
  if (arguments[1] != null)
  {
    c.offsetX = arguments[1];
    c.offsetY = arguments[2];
  }
  else
  {
    c.offsetX = 20;
    c.offsetY = -140;
  }
  c.monthNames = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
  c.monthAbbreviations = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
  c.dayHeaders = new Array("S", "M", "T", "W", "T", "F", "S");
  c.returnFunction = "CP_tmpReturnFunction";
  c.returnMonthFunction = "CP_tmpReturnMonthFunction";
  c.returnQuarterFunction = "CP_tmpReturnQuarterFunction";
  c.returnYearFunction = "CP_tmpReturnYearFunction";
  c.weekStartDay = 0;
  c.isShowYearNavigation = false;
  c.displayType = "date";
  c.disabledWeekDays = new Object();
  c.disabledDatesExpression = "";
  c.yearSelectStartOffset = 2;
  c.currentDate = null;
  c.todayText = "Today";
  c.cssPrefix = "";
  c.isShowNavigationDropdowns = false;
  c.isShowYearNavigationInput = false;
  window.CP_calendarObject = null;
  window.CP_targetInput = null;
  window.CP_dateFormat = "MM/dd/yyyy";
  c.copyMonthNamesToWindow = CP_copyMonthNamesToWindow;
  c.setReturnFunction = CP_setReturnFunction;
  c.setReturnMonthFunction = CP_setReturnMonthFunction;
  c.setReturnQuarterFunction = CP_setReturnQuarterFunction;
  c.setReturnYearFunction = CP_setReturnYearFunction;
  c.setMonthNames = CP_setMonthNames;
  c.setMonthAbbreviations = CP_setMonthAbbreviations;
  c.setDayHeaders = CP_setDayHeaders;
  c.setWeekStartDay = CP_setWeekStartDay;
  c.setDisplayType = CP_setDisplayType;
  c.setDisabledWeekDays = CP_setDisabledWeekDays;
  c.setDependency = CP_setDependency;
  c.addDisabledDates = CP_addDisabledDates;
  c.setYearSelectStartOffset = CP_setYearSelectStartOffset;
  c.setTodayText = CP_setTodayText;
  c.showYearNavigation = CP_showYearNavigation;
  c.showCalendar = CP_showCalendar;
  c.hideCalendar = CP_hideCalendar;
  c.getStyles = getCalendarStyles;
  c.refreshCalendar = CP_refreshCalendar;
  c.getCalendar = CP_getCalendar;
  c.select = CP_select;
  c.setCssPrefix = CP_setCssPrefix;
  c.showNavigationDropdowns = CP_showNavigationDropdowns;
  c.showYearNavigationInput = CP_showYearNavigationInput;
  c.copyMonthNamesToWindow();
  c.dpnd = new Array();
  return c;
}
function CP_copyMonthNamesToWindow()
{
  if (typeof(window.MONTH_NAMES) != "undefined" && window.MONTH_NAMES != null)
  {
    window.MONTH_NAMES = new Array();
    for (var i = 0; i < this.monthNames.length; i++)
      window.MONTH_NAMES[window.MONTH_NAMES.length] = this.monthNames[i];
    for (var i = 0; i < this.monthAbbreviations.length; i++)
      window.MONTH_NAMES[window.MONTH_NAMES.length] = this.monthAbbreviations[i];
  }
  if (this.dpnd)
    window.CP_dependency = this.dpnd;
}
function CP_tmpReturnFunction(y, m, d)
{
  if (window.CP_targetInput != null)
  {
    var dt = new Date(y, m - 1, d, 0, 0, 0);
    if (window.CP_calendarObject != null)
      window.CP_calendarObject.copyMonthNamesToWindow();
    window.CP_targetInput.value = formatDate(dt, window.CP_dateFormat);
    if (window.CP_targetInput.id == window.CP_dependency[1].id && window.CP_dependency[0])
    {
      var dpnd_date = new Date(y, m - 1, d + window.CP_dependency[2], 0, 0, 0);
      if (getDateFromFormat(window.CP_dependency[0].value, window.CP_dateFormat) < dpnd_date)
        window.CP_dependency[0].value = formatDate(dpnd_date, window.CP_dateFormat)
    }
  }
  else
    alert('Use setReturnFunction() to define which function will get the clicked results!');
}
function CP_tmpReturnMonthFunction(y, m) {
  alert('Use setReturnMonthFunction() to define which function will get the clicked results!\nYou clicked: year=' + y + ' ,month=' + m);
}
function CP_tmpReturnQuarterFunction(y, q) {
  alert('Use setReturnQuarterFunction() to define which function will get the clicked results!\nYou clicked: year=' + y + ' ,quarter=' + q);
}
function CP_tmpReturnYearFunction(y) {
  alert('Use setReturnYearFunction() to define which function will get the clicked results!\nYou clicked: year=' + y);
}
function CP_setReturnFunction(name) {
  this.returnFunction = name;
}
function CP_setReturnMonthFunction(name) {
  this.returnMonthFunction = name;
}
function CP_setReturnQuarterFunction(name) {
  this.returnQuarterFunction = name;
}
function CP_setReturnYearFunction(name) {
  this.returnYearFunction = name;
}
function CP_setMonthNames() {
  for (var i = 0; i < arguments.length; i++) {
    this.monthNames[i] = arguments[i];
  }
  this.copyMonthNamesToWindow();
}
function CP_setMonthAbbreviations() {
  for (var i = 0; i < arguments.length; i++) {
    this.monthAbbreviations[i] = arguments[i];
  }
  this.copyMonthNamesToWindow();
}
function CP_setDayHeaders() {
  for (var i = 0; i < arguments.length; i++) {
    this.dayHeaders[i] = arguments[i];
  }
}
function CP_setWeekStartDay(day) {
  this.weekStartDay = day;
}
function CP_showYearNavigation() {
  this.isShowYearNavigation = (arguments.length > 0) ? arguments[0] : true;
}
function CP_setDisplayType(type) {
  if (type != "date") {
    alert("Invalid display type! Must be 'date'");
    return false;
  }
  this.displayType = type;
}
function CP_setYearSelectStartOffset(num) {
  this.yearSelectStartOffset = num;
}
function CP_setDisabledWeekDays() {
  this.disabledWeekDays = new Object();
  for (var i = 0; i < arguments.length; i++) {
    this.disabledWeekDays[arguments[i]] = true;
  }
}
function CP_addDisabledDates(start, end) {
  if (arguments.length == 1) {
    end = start;
  }
  if (start == null && end == null) {
    return;
  }
  if (this.disabledDatesExpression != "") {
    this.disabledDatesExpression += "||";
  }
  if (start != null) {
    start = parseDate(start);
    start = "" + start.getFullYear() + LZ(start.getMonth() + 1) + LZ(start.getDate());
  }
  if (end != null) {
    end = parseDate(end);
    end = "" + end.getFullYear() + LZ(end.getMonth() + 1) + LZ(end.getDate());
  }
  if (start == null) {
    this.disabledDatesExpression += "(ds<=" + end + ")";
  }
  else if (end == null) {
    this.disabledDatesExpression += "(ds>=" + start + ")";
  }
  else {
    this.disabledDatesExpression += "(ds>=" + start + "&&ds<=" + end + ")";
  }
}
function CP_setTodayText(text) {
  this.todayText = text;
}
function CP_setCssPrefix(val) {
  this.cssPrefix = val;
}
function CP_showNavigationDropdowns() {
  this.isShowNavigationDropdowns = (arguments.length > 0) ? arguments[0] : true;
}
function CP_showYearNavigationInput() {
  this.isShowYearNavigationInput = (arguments.length > 0) ? arguments[0] : true;
}
function CP_hideCalendar()
{
  if (arguments.length > 0)
    window.popupWindowObjects[arguments[0]].hidePopup();
  else
    this.hidePopup();
}
function CP_refreshCalendar(index)
{
  var calObject = window.popupWindowObjects[index];
  if (arguments.length > 1)
    calObject.populate(calObject.getCalendar(arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]));
  else
    calObject.populate(calObject.getCalendar());
  calObject.refresh();
}
function CP_setDependency(dependent, source, add)
{
  if (!dependent || !source)
    return;
  this.dpnd[0] = dependent;
  this.dpnd[1] = source;
  this.dpnd[2] = add;
}
function CP_showCalendar(anchorname)
{
  if (arguments.length > 1)
  {
    if (arguments[1] == null || arguments[1] == "")
      this.currentDate = new Date();
    else
      this.currentDate = new Date(parseDate(arguments[1]));
  }
  this.populate(this.getCalendar());
  this.showPopup(anchorname);
}
function CP_select(inputobj, linkname, format)
{
  var selectedDate = (arguments.length > 3) ? arguments[3] : null;
  if (!window.getDateFromFormat)
  {
    alert("calendar.select: To use this method you must also include 'date.js' for date formatting");
    return;
  }
  if (this.displayType != "date")
  {
    alert("calendar.select: This function can only be used with displayType 'date'");
    return;
  }
  if (inputobj.type != "text" && inputobj.type != "hidden" && inputobj.type != "textarea")
  {
    alert("calendar.select: Input object passed is not a valid form input object");
    window.CP_targetInput = null;
    return;
  }
  if (inputobj.disabled) {
    return;
  } // Can't use calendar input on disabled form input!
  window.CP_targetInput = inputobj;
  window.CP_calendarObject = this;
  this.currentDate = null;
  var time = 0;
  if (selectedDate != null)
  {
    time = getDateFromFormat(selectedDate, format);
  }
  else if (inputobj.value != "")
  {
    time = getDateFromFormat(inputobj.value, format);
  }
  if (selectedDate != null || inputobj.value != "")
  {
    if (time == 0)
      this.currentDate = null;
    else
      this.currentDate = new Date(time);
  }
  window.CP_dateFormat = format;
  this.showCalendar(linkname);
}
function getCalendarStyles()
{
  var result = "";
  var p = "";
  if (this != null && typeof(this.cssPrefix) != "undefined" && this.cssPrefix != null && this.cssPrefix != "")
    p = this.cssPrefix;
  return result;
}
function CP_getCalendar()
{
  var now = new Date();
  if (this.type == "WINDOW")
    var windowref = "window.opener.";
  else
    var windowref = "";
  var result = "";
  result += '<table cellspacing="0" cellpadding="0" class="' + this.cssPrefix + 'cpTable">\n';
  result += '<tr><td>\n';
  if (this.displayType == "date")
  {
    if (this.currentDate == null)
      this.currentDate = now;
    if (arguments.length > 0)
      var month = arguments[0];
    else
      var month = this.currentDate.getMonth() + 1;
    if (arguments.length > 1 && arguments[1] > 0 && arguments[1] - 0 == arguments[1])
      var year = arguments[1];
    else
      var year = this.currentDate.getFullYear();
    var daysinmonth = new Array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
    if (( (year % 4 == 0) && (year % 100 != 0) ) || (year % 400 == 0))
      daysinmonth[2] = 29;
    var current_month = new Date(year, month - 1, 1);
    var display_year = year;
    var display_month = month;
    var display_date = 1;
    var weekday = current_month.getDay() - 1;
    var datee = new Date();
    var offset = 0;
    offset = (weekday >= this.weekStartDay) ? weekday - this.weekStartDay : 7 - this.weekStartDay + weekday;
    if (offset > 0)
    {
      display_month--;
      if (display_month < 1)
      {
        display_month = 12;
        display_year--;
      }
      display_date = daysinmonth[display_month] - offset + 1;
    }
    var next_month = month + 1;
    var next_month_year = year;
    if (next_month > 12)
    {
      next_month = 1;
      next_month_year++;
    }
    var last_month = month - 1;
    var last_month_year = year;
    if (last_month < 1)
    {
      last_month = 12;
      last_month_year--;
    }
    var date_class;
    result += '<table cellspacing="0" cellpadding="0">';
    result += '<tr>\n';
    var refresh = windowref + 'CP_refreshCalendar';
    var refreshLink = 'javascript:' + refresh;
    if (this.isShowNavigationDropdowns)
    {
      result += '<td class="' + this.cssPrefix + 'cpMonthNavigation" colspan="3">';
      result += '<select class="' + this.cssPrefix + 'cpMonthNavigation" name="cpMonth" onchange="' + refresh + '(' + this.index + ',this.options[this.selectedIndex].value-0,' + (year - 0) + ');">';
      for (var monthCounter = 1; monthCounter <= 12; monthCounter++)
      {
        var selected = (monthCounter == month) ? 'selected="selected"' : '';
        result += '<option value="' + monthCounter + '" ' + selected + '>' + this.monthNames[monthCounter - 1] + '</option>';
      }
      result += '</select></td>';
      result += '<td>&nbsp;</td>';
      result += '<td class="' + this.cssPrefix + 'cpYearNavigation" colspan="3">';
      result += '<select class="' + this.cssPrefix + 'cpYearNavigation" name="cpYear" onchange="' + refresh + '(' + this.index + ',' + month + ',this.options[this.selectedIndex].value-0);">';
      for (var yearCounter = year - this.yearSelectStartOffset; yearCounter <= year + this.yearSelectStartOffset; yearCounter++)
      {
        var selected = (yearCounter == year) ? 'selected="selected"' : '';
        result += '<option value="' + yearCounter + '" ' + selected + '>' + yearCounter + '</option>';
      }
      result += '</select></td>';
    }
    else
    {
      if (this.isShowYearNavigation)
      {
        result += '<td class="' + this.cssPrefix + 'cpMonthNavigation"><a class="' + this.cssPrefix + 'cpMonthNavigation" href="' + refreshLink + '(' + this.index + ',' + last_month + ',' + last_month_year + ');">&laquo;</A></td>';
        result += '<td class="' + this.cssPrefix + 'cpMonthNavigation"><span class="' + this.cssPrefix + 'cpMonthNavigation">' + this.monthNames[month - 1] + '</SPAN></td>';
        result += '<td class="' + this.cssPrefix + 'cpMonthNavigation"><a class="' + this.cssPrefix + 'cpMonthNavigation" HREF="' + refreshLink + '(' + this.index + ',' + next_month + ',' + next_month_year + ');">&raquo;</A></td>';
        result += '<td class="' + this.cssPrefix + 'cpMonthNavigation">&nbsp;</td>';
        result += '<td class="' + this.cssPrefix + 'cpYearNavigation"><a class="' + this.cssPrefix + 'cpYearNavigation" HREF="' + refreshLink + '(' + this.index + ',' + month + ',' + (year - 1) + ');">&laquo;</A></td>';
        if (this.isShowYearNavigationInput)
        {
          result += '<td class="' + this.cssPrefix + 'cpYearNavigation"><input name="cpYear" class="' + this.cssPrefix + 'cpYearNavigation" size="4" mxlength="4" value="' + year + '" onblur="' + refresh + '(' + this.index + ',' + month + ',this.value-0);"></td>';
        }
        else
        {
          result += '<td class="' + this.cssPrefix + 'cpYearNavigation"><span class="' + this.cssPrefix + 'cpYearNavigation">' + year + '</span></td>';
        }
        result += '<td class="' + this.cssPrefix + 'cpYearNavigation"><a class="' + this.cssPrefix + 'cpYearNavigation" href="' + refreshLink + '(' + this.index + ',' + month + ',' + (year + 1) + ');">&raquo;</a></td>';
      }
      else
      {
        result += '<td class="' + this.cssPrefix + 'cpMonthNavigation"><a class="' + this.cssPrefix + 'cpMonthNavigation" href="' + refreshLink + '(' + this.index + ',' + last_month + ',' + last_month_year + ');">&lt;&lt;</a></td>\n';
        result += '<td class="' + this.cssPrefix + 'cpMonthNavigation"><span class="' + this.cssPrefix + 'cpMonthNavigation">' + this.monthNames[month - 1] + ' ' + year + '</span></td>\n';
        result += '<td class="' + this.cssPrefix + 'cpMonthNavigation"><a class="' + this.cssPrefix + 'cpMonthNavigation" href="' + refreshLink + '(' + this.index + ',' + next_month + ',' + next_month_year + ');">&gt;&gt;</a></td>\n';
      }
    }
    result += '</tr></table>\n';
    result += '<table cellspacing="0" cellpadding="1">\n';
    result += '<TR>\n';
    for (var j = 0; j < 7; j++)
    {
      result += '<td class="' + this.cssPrefix + 'cpDayColumnHeader"><span class="' + this.cssPrefix + 'cpDayColumnHeader">' + this.dayHeaders[(this.weekStartDay + j) % 7] + '</td>\n';
    }
    result += '</tr>\n';
    for (var row = 1; row <= 6; row++)
    {
      result += '<tr>\n';
      for (var col = 0; col < 7; col++)
      {
        var disabled = false;
        if (this.disabledDatesExpression != "")
        {
          var ds = "" + display_year + LZ(display_month) + LZ(display_date);
          eval("disabled=(" + this.disabledDatesExpression + ")");
        }
        var dateClass = "";
        if ((display_month == this.currentDate.getMonth() + 1) && (display_date == this.currentDate.getDate()) && (display_year == this.currentDate.getFullYear()))
          dateClass = "cpCurrentDate";
        else if (display_month == month)
          dateClass = "cpCurrentMonthDate";
        else
          dateClass = "cpOtherMonthDate";

        if (dateClass != "cpOtherMonthDate")
        {
          if (disabled || this.disabledWeekDays[col - 1])
            result += '<td class="' + this.cssPrefix + dateClass + '"><span class="' + this.cssPrefix + dateClass + 'Disabled">' + display_date + '</span></td>\n';
          else
          {
            var selected_date = display_date;
            var selected_month = display_month;
            var selected_year = display_year;
            result += '<td class="' + this.cssPrefix + dateClass + '"><a HREF="javascript:' + windowref + this.returnFunction + '(' + selected_year + ',' + selected_month + ',' + selected_date + ');" class="' + this.cssPrefix + dateClass + '">' + display_date + '</A></td>\n';
          }
        }
        else
          result += '<td></td>';

        display_date++;
        if (display_date > daysinmonth[display_month])
        {
          display_date = 1;
          display_month++;
        }
        if (display_month > 12)
        {
          display_month = 1;
          display_year++;
        }
      }
      result += '</tr>';
    }
    var current_weekday = now.getDay() - this.weekStartDay;
    if (current_weekday < 0)
      current_weekday += 7;
    result += '</table></center></td></tr></table>\n';
  }
  return result;
}
function addCalImage(calID, imageSrc)
{
  calSubject = document.getElementById(calID);
  _onclick_ = function () {
    eval("SB_calendar.select(document.getElementById('" + calID + "'), '" + calID + "', 'dd/MM/yyyy');");
    return false
  };
  img = document.createElement('img');
  img.src = imageSrc;
  img.onclick = _onclick_;
  img.onClick = _onclick_;
  img.defer = true;

  calHolder = calSubject.parentNode;
  nextElement = getNextElement(calSubject);
  void(calHolder.insertBefore(img, nextElement));

  calSubject.onclick = _onclick_;
  calSubject.onClick = _onclick_;
}
function getNextElement(element)
{
  for (i = 1; i <= element.parentNode.childNodes.length; i++)
  {
    if (element.parentNode.childNodes[i - 1] == element)
      return element.parentNode.childNodes[i];
  }
}