/*  Copyright websline, 2008 | www.websline.de
 * --------------------------------------------------------------------------
 *
 * The DHTML Calendar EXTENSION, version 1.0 
 *   
 * Developed by melko 
 *
 * This script is distributed under the GNU Lesser General Public License.
 * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html 
 * 
 * Don't change anything in this file !!! 
 ----------------------------------------------------------------------------
 */

// init Variablen
var aktDate = new Date();
var beginnSeason = new Date();
var beg_dt = new Date();
var end_dt = new Date();

// setze die Stunden auf null
aktDate.setHours(00, 00, 00, 00);
beginnSeason.setHours(00, 00, 00, 00);
beg_dt.setHours(00, 00, 00, 00);
end_dt.setHours(00, 00, 00, 00);

/*--------------------------------------------------*/
/* Calendar ÜberprüfungsFunktionen                  */
/*--------------------------------------------------*/

// hole das Saison-Beginn-Datum
getBeginnSeason();

/*
* holt das Saison-Beginn-Datum
* 
* Füllt die globalen Variablen beginnSeason
* und beg_dt_sel mit dem richtigen Datum
*/
function getBeginnSeason() {
  
  if(beg_year != 0){
    beginnSeason.setYear(beg_year);
    beginnSeason.setMonth(beg_mon);
    beginnSeason.setDate(beg_day);
    
    if(beginnSeason < aktDate){
      beginnSeason = aktDate;
    }
  } 
  else {
    if(beg_mon <= end_mon){
      if(beg_mon <= aktDate.getMonth()){
        beginnSeason = aktDate;
      }
      else{
        beginnSeason.setYear(aktDate.getFullYear());
        beginnSeason.setDate(beg_day);
        beginnSeason.setMonth(beg_mon);
      }
    }
    else{
      if(end_mon >= aktDate.getMonth()){
        beginnSeason = aktDate;
      }
      else{
        beginnSeason.setYear(aktDate.getFullYear());
        beginnSeason.setDate(beg_day);
        beginnSeason.setMonth(beg_mon);
      }
    }
  }  
}

/*
* Calculates the other date
* if the akt-inputField is arrive_date
* 
* Called by the inputField -> disableFunc
*
* Sets also the date-limit for the leave_date
*/
function calcOtherDate(cal) {
    
    var date = cal.date; 
    
    // if selected field is arrive_date
    if (cal.params.leaveFieldID != null) {
      // field to set Date is leave_date
      field = document.getElementById(cal.params.leaveFieldID);
      
      // add the right number of days
      var date2 = addDays(date);
          
      // write it
      field.value = date2.print(cal.params.ifFormat);
    }
}

/*
* Check the visible date and definies 
* if it is disabled or not
* 
* Called by the inputField -> onUpdate
* 
* Returns:
*  TRUE   -> date is disabled
*  FALSE  -> date isn't disabled
*/
function disableDate(date) {

    // set beginn and end date
    setBegEndDate(date);
    
    // Calendar-instanz
    var cal = window.calendar;
     
    // if selected field is leave_date
    if (cal.params.arriveFieldID != null) {
      
      // beg_dt_from_arriveField
      var datum = document.getElementById(cal.params.arriveFieldID).value;
      
      var beg_dt_sel = new Date();
      beg_dt_sel.setHours(00, 00, 00, 00);
      
      if(datum != ""){
        var werte = datum.split(".");
        beg_dt_sel.setYear(werte[2]);
        beg_dt_sel.setDate(werte[0]);
        beg_dt_sel.setMonth(werte[1]-1);
      }
      else {
        beg_dt_sel = beginnSeason;
      }
    
      if(date < beg_dt_sel){
        return true;
      }
    }

    // date is in the past
    if(date < aktDate){
      return true;
    }
    // date is in season
    else if(date >= beg_dt && date <= end_dt){
      return false;
    }
    
    // disable all other dates
    return true;
}

/*
* Sets the global variables beg_dt and end_dt
* with the right season_beginn and season_end
*/
function setBegEndDate(date) {
    
    // is year defined?? 
    if(beg_year == 0 && end_year == 0){
      // is beg_mon < end_mon??
      if(beg_mon <= end_mon){
        // year is date.YEAR
        beg_dt.setYear(date.getFullYear());
      }
      else{
        // is date.MONTH < end_mon ??
        if(date.getMonth() <= end_mon){
          beg_dt.setYear(date.getFullYear()-1);
        }
        else if(date.getMonth() >= beg_mon){
          beg_dt.setYear(date.getFullYear());
        }
        else{
          beg_dt.setYear(date.getFullYear());
        }
      }
	  // end_dt Jahr ist IMMER beg_dt.YEAR + 5
	  end_dt.setYear(beg_dt.getFullYear() + 5);
    }
    // year is defined
    else{
      // then set it
      beg_dt.setYear(beg_year);
      end_dt.setYear(end_year);
    }

    beg_dt.setDate(beg_day);
    beg_dt.setMonth(beg_mon);

    end_dt.setDate(end_day);
    end_dt.setMonth(end_mon);
}

/*
* Add so many days as defined
*/
function addDays(date) {

  var date2 = new Date(date);
  // add Days
  date2.setDate(date.getDate() + add_days);
  
  // set right date
  if(date2 < aktDate){
     date2 = aktDate;
  }
  else if(date2 < beg_dt){
    date2 = beg_dt;
  }
  else if(date2 > end_dt){
    date2 = end_dt;
  }
  return date2;
}

/*
* Sets the akt beg-date and end-date
* 
* If leave_field_id is "", then only arrive_field is set.
*/
function setBegSeason(arrive_field_id, leave_field_id) {
  
  // arrive_field element
  aField = document.getElementById(arrive_field_id);
  
  setBegEndDate(beginnSeason);
  
  // arrive_field date
  aField.value = beginnSeason.print("%d.%m.%Y");
  
  if(leave_field_id != "") {
    
    // leave_field element
    lField = document.getElementById(leave_field_id);

    // leave_field date
    lField.value = addDays(beginnSeason).print("%d.%m.%Y");
  }
}
