$(document).ready(function() {
  $('.date-pick').datePicker();

  $('div.sub').each(function() {
    if($(this).prev().children().children('input').attr('checked') == false) $(this).children('input').attr('disabled', 'disabled').addClass('disabled');
    $(this).prev().children().children('input').click(function() {
      if($(this).attr('checked') == true) {
        $(this).parent().parent().next().children('input').removeAttr('disabled').removeClass('disabled');
      } else {
        $(this).parent().parent().next().children('input').attr('disabled', 'disabled').addClass('disabled');
      }
    });
  });

  //** zeitspannendropdown
  var weekday = (new Date()).getDay();
  var today = (new Date()).getDate()
  var dates = {today:{},tomorrow:{},thisWeek:{},thisWeekend:{},nextWeek:{},nextWeekend:{}}
  for(var s in dates){ dates[s].begin = new Date(); dates[s].end = new Date();}
  dates.tomorrow.begin.setDate(today+1);
  dates.tomorrow.end.setDate(today+1);
  dates.thisWeek.begin.setDate(today+1-weekday);
  dates.thisWeek.end.setDate(today+7-weekday);
  dates.thisWeekend.begin.setDate(today+6-weekday);
  dates.thisWeekend.end.setDate(today+7-weekday);
  dates.nextWeek.begin.setDate(today+8-weekday);
  dates.nextWeek.end.setDate(today+14-weekday);
  dates.nextWeekend.begin.setDate(today+13-weekday);
  dates.nextWeekend.end.setDate(today+14-weekday);
  
  $("span#label-datum").after('<div><select name="zeitraum" id="zeitraum"><option value="none" ></option><option value="today" >heute</option><option value="tomorrow">morgen</option><option value="thisWeek">diese Woche</option><option value="thisWeekend">dieses Wochenende</option><option value="nextWeek">nächste Woche</option><option value="nextWeekend">nächstes Wochenende</option></select></div>');
  $("span#label-datum").parent().removeClass('text').addClass('select');
  $("span#label-datum").parent().find('div:eq(1)').addClass('text').addClass('sub');
  
  $("select#zeitraum").change(function() {
    if($(this).val() != 'none') {
      $("input#vom").val( dates[$(this).val()].begin.to_s() );
      $("input#bis").val( dates[$(this).val()].end.to_s() );
    }
  });
  
  $("input#vom,input#bis").change(function() {
    if($("input#bis").val().to_date() && $("input#vom").val().to_date()) {
      $("input#bis").val($("input#bis").val().to_date() < $("input#vom").val().to_date() ? $("input#vom").val() : $("input#bis").val());
      $("input#bis").val($("input#bis").val().to_date().to_s());
      $("input#vom").val($("input#vom").val().to_date().to_s());
      for(var s in dates){
        if(dates[s].begin.to_s() == $("input#vom").val() && dates[s].end.to_s() == $("input#bis").val())  {
          $("select#zeitraum > option[value="+$("select#zeitraum").val()+"]").removeAttr('selected');
          $("select#zeitraum > option[value="+s+"]").attr("selected","selected");
          return;
        }
      }
      $("select#zeitraum > option[value=none]").attr("selected","selected");
    }
  });

  $("input#vom,input#bis").each(function(){
    if($(this).val() == '') {
      $(this).val(dates.today.begin.to_s())
      $("select#zeitraum > option[value=today]").attr("selected","selected");
    } else {
      for(var s in dates){
        if(dates[s].begin.to_s() == $("input#vom").val() && dates[s].end.to_s() == $("input#bis").val())  {
          $("select#zeitraum > option[value="+$("select#zeitraum").val()+"]").removeAttr('selected');
          $("select#zeitraum > option[value="+s+"]").attr("selected","selected");
          return;
        }
      }
    }
  });
  /**
  if($("input#vom").val() == '' && $("input#bis").val() == '') {
    $("input#vom").val(dates.thisWeek.begin.to_s());
    $("input#bis").val(dates.thisWeek.end.to_s());
    $("select#zeitraum > option[value=thisWeek]").attr("selected","selected");
  } else {
    for(var s in dates){
      if(dates[s].begin.to_s() == $("input#vom").val() && dates[s].end.to_s() == $("input#bis").val())  {
        $("select#zeitraum > option[value="+$("select#zeitraum").val()+"]").removeAttr('selected');
        $("select#zeitraum > option[value="+s+"]").attr("selected","selected");
        return;
      }
    }
  }
  **/

  //***

  $("#rueckruf").click(function() {
    if($(this).attr('checked')) { $("label[for=telefon]").append('<dfn title="Pflichtangabe">*</dfn>'); }
    else{ $("label[for=telefon]:has(dfn)").children('dfn').remove(); }
  });
  

  $("form").submit(function() {
    var errors = [];
    var product_count = 1;
    var zimmer_count = 1;

    var valid = {
      email:new RegExp(/^(([^@\s]+)@((?:[\-a-z0-9]+\.)+[a-z]{2,}))$/i),
      anrede:new RegExp(/^Herr|Frau$/),
      name:new RegExp(/^.+$/),
      text:new RegExp(/^.+$/m),
      telefon:new RegExp(/^.+$/),
      strasse:new RegExp(/^.+$/),
      plz:new RegExp(/^\d{5}$/),
      ort:new RegExp(/^.+$/),
      erwachsene:new RegExp(/^\d$/),
      angebotstour:new RegExp(/^.+$/),
      uhrzeit:new RegExp(/^(\d{1,2}:\d{2})$|^(\d{1,2})$/)
    };

    $(this).find('li.error, p.error').removeClass('error');

    $(this).find('input[id^=item]:first').each(function(){ product_count = 0; });
    $(this).find('input[id^=item]').each(function(){ product_count += parseInt($(this).val()) ? parseInt($(this).val()) : 0; });

    $(this).find('select#einzelzimmer,select#doppelzimmer,select#dreibettzimmer,select#mehrbettzimmer').each(function(){ zimmer_count = 0; });
    $(this).find('select#einzelzimmer,select#doppelzimmer,select#dreibettzimmer,select#mehrbettzimmer').each(function(){ zimmer_count += parseInt($(this).val()) ? parseInt($(this).val()) : 0; });

    if (product_count === 0){ errors.push({object:$('p.text:has(input[id^=item]),li.text:has(input[id^=item]'),label:'Produktauswahl'}); }
    if (zimmer_count === 0){ errors.push({object:$('div#label-zimmer').parent(),label:'Zimmerwunsch'}); }

    if($(this).find('input#agb').length > 0 && !$(this).find('input#agb').attr('checked')) { errors.push({object:false,label:'Allgemeine Nutzungsbedingungen'}); };

    $(this).find("li > label:has(dfn),span.label:has(dfn) > label").each(function() {
      if(!valid[$(this).attr('for')].test($('#'+$(this).attr('for')).val())) { errors.push({object:$('#'+$(this).attr('for')).parent().parent(),label:$(this).text().replace(/\*$/,'').replace(/^\s/,'')}); }
    });

    if(errors.length > 0) {
      var msg = "Bitte überprüfen Sie folgende Felder: \n\n";
      for(var e in errors){
        if(!isNaN(e)){
          msg += ("  "+errors[e].label+"\n");
          if(errors[e].object){ errors[e].object.addClass('error'); }
        }
      }
      alert(msg);
      return false;
    } else {
      return true;
    }
  });
});

// patches
String.prototype.leftPad = function (l, c) { return new Array(l - this.length + 1).join(c || '0') + this; };
String.prototype.to_date = function () { if(this.split('.').length != 3) {return false;} if(this.split('.')[2].length != 4) {return false;} var date = new Date(this.split('.')[1]+'/'+this.split('.')[0]+'/'+this.split('.')[2]); return date == "Invalid Date" ? false : date; };
Date.prototype.to_s = function() { return  this.getDate().toString().leftPad(2,'0') + "." + (this.getMonth() + 1).toString().leftPad(2,'0') + "." + this.getFullYear().toString(); };
