
   function form_date_calendar_request(container_id, field_id, month, year, lang, cal_id, cal_class, sd, df, ds) {
      var params = '';
      var q = true;
      if (field_id != undefined) {
         params = params + (q ? '?' : '&') + 'field_id=' + field_id;
	 q = false;
      }
      if (month != undefined) {
         params = params + (q ? '?' : '&') + 'm=' + month;
	 q = false;
      }
      if (year != undefined) {
         params = params + (q ? '?' : '&') + 'y=' + year;
	 q = false;
      }
      if (lang != undefined) {
         params = params + (q ? '?' : '&') + 'lang=' + lang;
	 q = false;
      }
      if (cal_id != undefined) {
         params = params + (q ? '?' : '&') + 'cal_id=' + cal_id;
	 q = false;
      }
      if (cal_class != undefined) {
         params = params + (q ? '?' : '&') + 'cal_cls=' + cal_class;
	 q = false;
      }
      if (sd != undefined) {
         params = params + (q ? '?' : '&') + 'sd=' + sd;
	 q = false;
      }
      if (df != undefined) {
         params = params + (q ? '?' : '&') + 'df=' + df;
	 q = false;
      }
      if (ds != undefined) {
         params = params + (q ? '?' : '&') + 'ds=' + ds;
	 q = false;
      }
      url = 'http://acropora.pl/_xhr/form_date_calendar/' + params;
      xhr_request(xhr_fill_element_quiet, url, container_id);
   }


   function form_date_get_value(field_id, suffix) {
      var field_element = document.getElementById(field_id + '_' + suffix);
      if (field_element != null) {
         return field_element.value;
      } else {
         return false;
      }
   }
   
   function form_date_calendar_refresh(cal_id, field_id, lang, cal_class, sd, df, ds, offset) {
      var day   = parseInt(form_date_get_value(field_id, 'day'));
      var month = parseInt(form_date_get_value(field_id, 'month'));
      var year  = parseInt(form_date_get_value(field_id, 'year'));
      var maxday = 0;
      switch(offset) {
         case '+1':
            month++;
            if (month == 13) {
               month = 1;
	       year++;
            } 
	    break;
	 case '-1':
            month--;
            if (month == 0) {
               month = 12;
	       year--;
            } 
	    break;
      }
      switch(month) {
         case 1:
	 case 3:
	 case 5:
	 case 7:
	 case 8:
	 case 10:
	 case 12:
	    maxday = 31;
	    break;
	 case 4:
	 case 6:
	 case 9:
	 case 11:
	    maxday = 30;
	    break;
	 case 2:
	    maxday = 29;
	    break;
      }
      if (day > maxday && maxday > 0) {
         day = maxday;
      }
      if (day !== false && month !== false && year !== false) {
         form_date_calendar_request(cal_id + '-container', field_id, month, year, lang, cal_id, cal_class, sd, df, ds);
	 form_date_set_value(field_id, day, month, year);
      }
   }

   function form_date_set_value(field_id, day, month, year) {
      day_element = document.getElementById(field_id + '_day');
      month_element = document.getElementById(field_id + '_month');
      year_element = document.getElementById(field_id + '_year');
      
      if (day_element != null) {
         day_element.value = day;
      }
      if (month_element != null) {
         month_element.value = month;
      }
      if (year_element != null) {
         year_element.value = year;
      }
   }
