function ALTERNATIVE_DATES () {

}

ALTERNATIVE_DATES.Dates = [];

ALTERNATIVE_DATES._WrongDates = {};

ALTERNATIVE_DATES._AlternateDates = {};

ALTERNATIVE_DATES.isWrongDay = function (_key, type, day, dateProp) {
  if (arguments.length != 4) {
    focus();
    throw new Error("ArgumentError:Falsche Anzahl Argumente!");
  }
  
  if (ALTERNATIVE_DATES._WrongDates[_key]){
    if (ALTERNATIVE_DATES._WrongDates[_key]['typ'] == type){
      if (ALTERNATIVE_DATES._WrongDates[_key]['day'] == day){
        return true;
      }
    }
  }
  return false;
}

ALTERNATIVE_DATES.isAlternateDay = function (_key, type, day, dateProp) {
  if (arguments.length != 4) {
    focus();
    throw new Error("ArgumentError:Falsche Anzahl Argumente!");
  }
  
  if (ALTERNATIVE_DATES._AlternateDates[_key]){
    if (ALTERNATIVE_DATES._AlternateDates[_key]['typ'] == type){
      if (ALTERNATIVE_DATES._AlternateDates[_key]['day'] == day){
        return true;
      }
    }
  }
  return false;
}

ALTERNATIVE_DATES.isResidualWaste = function (date, type, day) {
  if (arguments.length != 3) {
    focus();
    throw new Error("ArgumentError:Falsche Anzahl Argumente!");
  }
  if (! DateProperties){
    throw new Error("ArgumentError:kein Modul DateProperties installiert!");
  }
  var myDate = DateProperties.createDateProperties({'datum':date});
  var _key = DateProperties.formatDatum(myDate.datum(), 'dd.mm.yyyy');
  if (ALTERNATIVE_DATES.isAlternateDay(_key, type, day, myDate)){
    return true;
  }
  if (! ALTERNATIVE_DATES.isWrongDay(_key, type, day, myDate)){
    
  if (myDate.datum().getMonth() == '0' && myDate.kw() == '53') {
    // NEGIEREN WEGEN 53.WOCHE JANUAR (UNGERADE, SOLL TROTZDEM MÜLL AUS GERADEN WOCHEN ABGEHOLT WERDEN - WEGEN 2 WOCHEN-RYTHMUS)
    if (type == '10008') {
      type = '10007';
    }else {
      type = '10008';
    }
  }
      
      if (type == '10007'){
        // gerade
        if (! (parseInt(myDate.kw()) % 2)){
          if (CMS_CALENDAR_WEEKDAY_[myDate.name()] == day){
            return true;
          }
        }
      } else {
        // ungerade
        if ((parseInt(myDate.kw()) % 2)){
          if (CMS_CALENDAR_WEEKDAY_[myDate.name()] == day){
            return true;
          }
        }
      }
      
  }
  return false;
}

ALTERNATIVE_DATES.isYellowTon = function (date, type, day) {
  if (!arguments.length) {
    focus();
    throw new Error("ArgumentError:kein Argument!");
  }
  var myDate = DateProperties.createDateProperties({'datum':date});
  var _key = DateProperties.formatDatum(myDate.datum(), 'dd.mm.yyyy');
  if (YELLOW_TON[_key]){
    return true;
  }
  return false;
}

ALTERNATIVE_DATES.isBoth = function (date, type, day) {
  if (!arguments.length) {
    focus();
    throw new Error("ArgumentError:kein Argument!");
  }
  if (ALTERNATIVE_DATES.isYellowTon(date, type, day) && ALTERNATIVE_DATES.isResidualWaste(date, type, day)){
    return true;
  }
  return false;
}

ALTERNATIVE_DATES.getWochenTypCMS = function (date) {
  if (!arguments.length) {
    focus();
    throw new Error("ArgumentError:kein Argument!");
  }
  var myDate = DateProperties.createDateProperties({'datum':date});
  var type = '';
  if (! (parseInt(myDate.kw()) % 2)){
    // gerade
    type = '10007';
  } else {
    type = '10008';
  }
    
  if (myDate.datum().getMonth() == '0' && myDate.kw() == '53') {
    // NEGIEREN WEGEN 53.WOCHE JANUAR (UNGERADE, SOLL TROTZDEM MÜLL AUS GERADEN WOCHEN ABGEHOLT WERDEN - WEGEN 2 WOCHEN-RYTHMUS)
    if (type == '10008') {
      type = '10007';
    }else {
      type = '10008';
    }
  }
  
  return type;
}

ALTERNATIVE_DATES.getWochenTagCMS = function (date) {
  if (!arguments.length) {
    focus();
    throw new Error("ArgumentError:kein Argument!");
  }
  var key = parseInt(date.getDay());
  var keyWeekday = [];
  // Sonntag
  keyWeekday[0] = '10018';
  // Montag
  keyWeekday[1] = '10009';
  // Dienstag
  keyWeekday[2] = '10010';
  // Mittwoch
  keyWeekday[3] = '10011';
  // Donnerstag
  keyWeekday[4] = '10012';
  // Freitag
  keyWeekday[5] = '10013';
  // Samstag
  keyWeekday[6] = '10017';
  
  return keyWeekday[key];
}









