function cxlObject(){
	var that = this;
  this.getForm =
    function()
    {
      return document.forms[this.formName];
    };

  this.imageSelect =
    function()
    {
      window.open(cxlPage.imageSelection + '?dispatch=images&id=' + cxlPage.id, 'image', 'width=750, height=400, screenX=300, screenY=100, top=100,left=300, resizable=yes');
    };

  this.addCalendar =
    function(fieldId, buttonId, sOptions)
    {
      if (!this.calendars)
        this.calendars = new Array();
      this.calendars[fieldId] = {field:fieldId, button:buttonId, options:sOptions, object:''};
      this.blockDates = false;
      if (sOptions!=null)
      {
				if (sOptions == 'startdate')
					this.startCalendar = fieldId;
				if (sOptions == 'enddate')
					this.endCalendar = fieldId;
				if (new RegExp('blockDates').test(sOptions))
					this.blockDates = true;
	  			if (sOptions=='events')
        			this.reverseBlocked = true;
      }
    };

  //utility functions for the calendars
  this.invalidDate =
    function(d)
    {
      var startDateElement = document.getElementById(cxlPage.startCalendar);
      var startDate = Date.parseDate(startDateElement.value, "%m/%d/%Y");
      return (d < startDate);
    };

  //utility functions for the calendars
  this.blockRange =
    function(d)
    {
      var ret = true;
      var out = '';
      var i;
      var startDate;
      var endDate;
      var options;
      var curDate;

      if (that.blockedDates)
      {
		if (this.blockSundays)
	     if (d.getDay()==0) // block all sundays
          ret = true;

	      if (!that.blockedDates)
	      	return false;
				var blockedDates = that.blockedDates;
          ret = false;
          for (i=0;i<blockedDates.length;i++)
          {
            startDate = new Date(blockedDates[i].start);
            endDate = new Date(blockedDates[i].end);
            // add one day, so end date behaves properly
            endDate.setDate(endDate.getDate()+1);
            options = blockedDates[i].options;
            curDate = new Date(d);
            if (options=='yearly')
              curDate.setYear(startDate.getFullYear());
            if (curDate>=startDate && curDate<=endDate)
              ret = true;
          }
        if (that.reverseBlocked)
        	return !ret;
        else
        return ret;
      }
    };

  this.setEndDate =
    function setEndDate(cal)
    {
      var startDateElement = document.getElementById(cxlPage.startCalendar);
      var endDateElement = document.getElementById(cxlPage.endCalendar);

      if (startDateElement.value !== '' && endDateElement.value === '')
        endDateElement.value = startDateElement.value;
    };

  this.initCalendars =
    function() {
			var i;
      for (i in that.calendars)
      {
        var calendar = that.calendars[i];
        if (document.getElementById(calendar.field))
        {
          switch(calendar.options)
          {
            case 'startdate':
              that.calendars[i].object =
                Calendar.setup({inputField:calendar.field, button:calendar.button, ifFormat:"%m/%d/%Y", step:1, showsTime:false, onUpdate:cxlPage.setEndDate});
              break;
            case 'enddate':
              that.calendars[i].object =
                Calendar.setup({inputField:calendar.field, button:calendar.button, ifFormat:"%m/%d/%Y", step:1, showsTime:false, disableFunc:that.invalidDate});
              break;
            case 'blockDates':
              this.calendars[calendar.field].object =
                Calendar.setup({inputField:calendar.field, button:calendar.button, ifFormat:"%m/%d/%Y", step:1, showsTime:false, disableFunc:cxlPage.blockRange});
            case 'events':
              that.calendars[i].object =
                Calendar.setup({flat:calendar.field, ifFormat:"%m/%d/%Y", step:1, showsTime:false, flatCallback:that.showEvents, disableFunc:that.blockRange, weekNumbers: false});
              break;
            default:
              that.calendars[i].object =
                Calendar.setup({inputField:calendar.field, button:calendar.button, ifFormat:"%m/%d/%Y", step:1, showsTime:false, disableFunc:that.blockRange});
              break;
          }
        }

      }
    };

}

// utility functions for the form
// need to become part of cxlobject
function set(target) {
  cxlPage.getForm().dispatch.value = target;
}

function submitForm(target) {
  set(target);
  cxlPage.getForm().submit();
}

function initNeverExpires() {
  var frm = cxlPage.getForm();
  frm.neverExpire.checked = (frm.expirationDate.value === '');
}

function checkFeatured() {
  var frm = cxlPage.getForm();
  frm.pressRelease.checked = false;
}

function checkPressRelease() {
  var frm = cxlPage.getForm();
  frm.featured.checked = false;
}

function deleteImage(image) {
  var frm = cxlPage.getForm();
  if (confirm(cxlPage.confirmDelete)) {
    var theLink = cxlPage.imageSelection + '?dispatch=delete&id=' + image;
    window.location.href = theLink;
  }
}
