/**

AjaxCalendar.js v1.0, 31.03.2008
Copyright (c) 2008-2009 Roland Kujundzic (http://www.web-to-print.eu)

@desc
Ajax Calendar functions. See client.html for usage example.

@provides

@variable arrival = ''
Form element name. Set to e.g. 'anreise' if Arrival/Departure-Calendar is used.

@variable departure = ''
Form element name. Set to e.g. 'abreise' if no Arrival/Departure-Calendar is used.

@variable ajax_url = 'ajax/index.php?dir=calendar&id='
Ajax script url.

@variable calendar_id = 'calendar'
ID of div block with calendar content.

@variable position_id = 'calendar'
ID of element the calendar position is relative to

@variable position_x_offset = 0
Calendar position x offset

@variable position_id = 0
Calendar position y offset

@function show(form_input_name, cal)
Show calendar. Use cal = null or cal = 'yyyymm'

@function close()
Hide calendar.

@function day(day)
Close calendar and set form input value. Use day = 'dd.mm.yyyy'.

 */


//-----------------------------------------------------------------------------
function AjaxCalendar() {
  this.arrival = '';
  this.departure = '';
  this.ajax_url = 'ajax/index.php?dir=calendar&id=';
  this.calendar_id = 'calendar';
  this.position_id = 'calendar';
  this.position_x_offset = 0;
  this.position_y_offset = 0;
}


//-----------------------------------------------------------------------------
AjaxCalendar.prototype.show = function(form_input_name, cal) {

  if (!form_input_name) {
    return;
  }

  if (form_input_name == this.departure) {
    this._check_departure();
  }

  var day = null;
  if (cal == null) {
    day = document.getElementsByName(form_input_name)[0].value;    
    if (day && day.length == 10) {
      cal = day.substr(6, 4) + day.substr(3, 2);
    }
  }

  var out = document.getElementById(this.calendar_id);
  var ckey = this.calendar_id + '_' + form_input_name + cal + day;

  if (ajax_cache[ckey] == undefined || !ajax_cache[ckey]) {
    out.innerHTML = ajax_cache['wait.gif'];
    var query = this.ajax_url + escape(form_input_name);

    if (day) {
      query += '&day=' + escape(day);
    }

    if (cal) {
      query += '&cal=' + escape(cal);
    }

    ajax_call(query, this.calendar_id, null, ckey);
  }
  else {
    out.innerHTML = ajax_cache[ckey];
  }

  if (this.position_id) {
    var xy_pos = JSLib.element_xy(document.getElementById(this.position_id));
    out.style.display = "block";
    out.style.left = (xy_pos.x + this.position_x_offset) + "px";
    out.style.top = (xy_pos.y + this.position_y_offset) + "px";
  }
}


//-----------------------------------------------------------------------------
AjaxCalendar.prototype.close = function() {
  var out = document.getElementById(this.calendar_id);
  out.style.display = "none";
  this._check_departure();
}


//-----------------------------------------------------------------------------
AjaxCalendar.prototype.day = function(form_input_name, day) {
  document.getElementsByName(form_input_name)[0].value = day;
  this.close();
}


//-----------------------------------------------------------------------------
AjaxCalendar.prototype._check_departure = function() {

  if (!this.arrival || !this.departure) {
    return;
  }

  var start = document.getElementsByName(this.arrival)[0].value;
  var end = document.getElementsByName(this.departure)[0].value;

  if (!start || !end) {
    return;
  }

  var d_start = this._dmy2date(start);
  var d_end = this._dmy2date(end);

  if (d_end.getTime() <= d_start.getTime()) {
    document.getElementsByName(this.departure)[0].value = this._next_day(start, 1);    
  }
}


//-----------------------------------------------------------------------------
AjaxCalendar.prototype._next_day = function(start, add) {
  var day = this._dmy2date(start);
  day.setDate(day.getDate() + add);

  var d = day.getDate();
  var m = day.getMonth() + 1;
  var y = day.getFullYear();

  if (d < 10) {
    d = '0' + d;
  }

  if (m < 10) {
    m = '0' + m;
  }

  var next = d + '.' + m + '.' + y;
  return next;
}


//-----------------------------------------------------------------------------
AjaxCalendar.prototype._dmy2date = function(dmy) {

  var now = new Date();
  var d = now.getDate();
  var m = now.getMonth() + 1;
  var y = now.getFullYear();

  if (dmy.length == 6) {
    y = dmy.substr(0, 4);
    m = dmy.substr(4, 2) - 1;
    d = 1;
  }
  else if (dmy.length == 10) {
    y = dmy.substr(6, 4);
    m = dmy.substr(3, 2) - 1;
    d = dmy.substr(0, 2);
  }

  var date = new Date(y, m, d);
  return date;
}
