/*
  © 2010 by Martin Teufel, OOP SOLUTIONS GmbH & Co. KG
*/
var oop = oop || {
  $      : jQuery.noConflict(),      // releasing $
  copyright: '©  2011, Company: OOP SOLUTIONS GmbH & Co. KG | Author: Martin Teufel',
  data    : { 'contact': []}
};

(function($) {
  $(document).ready(function() {
      //oop.cmp.contact.init();
  });
})(oop.$);

(function($) {
  oop.cmp = oop.cmp || {};
  $.extend(oop.cmp, {
    contact: {
      /**
       * JS for contact detection
       *
       * @param {String} c DOM Context
       */
      init: function(){
        var self = this;

        oop.data.contact[1] = {
                               0: {type: 'radio', name: 'anfrage'},
                               1: {type: 'input', name: 'anrede'},
                               2: {type: 'input', name: 'vorname'},
                               3: {type: 'input', name: 'name'}
                              };
        oop.data.contact[21] = {
                               0: {type: 'textarea', name: 'nachricht'},
                               1: {type: 'select', name: 'kontaktoption'}
                              };
        oop.data.contact[22] = {
                               0: {type: 'select', name: 'thema'},
                               1: {type: 'textarea', name: 'nachricht_beratung'},
                               6: {type: 'select', name: 'kontaktoption_termin'},
                               3: {type: 'radio', name: 'beratungsort'},
                               4: {type: 'select', name: 'geschaeftsstelle'},
                               5: {type: 'textarea', name: 'ort'}
                              };
        oop.data.contact[3] = {
                               0: {type: 'input', name: 'email'},
                               1: {type: 'input', name: 'telefon'},
                               3: {type: 'input', name: 'strasse'},
                               4: {type: 'input', name: 'plzort'}
                              };

        $('div.contact_form ul li').each(function(i, el){
          $(el).attr('rel', i);
        });

        $('div.contact_form fieldset').each(function(i, el){
          var class_name = (i == 0) ? 'ui-state-active' : 'ui-helper-hidden';
          $(el).addClass(class_name);
        });

        $('div.contact_form form button').attr('disabled','disabled');

        this._set_init_status_fields();

        $('div.contact_form form').submit(function(e){
          e.preventDefault();
          var error_msg = self._validation(3);

          if(error_msg.length == 0){
            self._submit_form($(this));
          }
          else{
            //alert(error_msg);
          }
          return false;
        });

        $('div.contact_form ul li').click(function(e){
          e.preventDefault();
          if($(this).hasClass('back')){
            self._click_prev($(this));
          }
        });

        $('div.contact_form a[id ^= "btn_step"]').click(function(e){
          e.preventDefault();
          self._click_next($(this));
        });

        $('#kontaktoption, #kontaktoption_termin').change(function(e){
          e.preventDefault();
          self._change_contact_option($(this));
        });

        $('input[name="beratungsort"]').change(function(e){
          //e.preventDefault();
          self._change_beratungsort($(this));
        });

      },
      _set_init_status_fields: function(){
        this._change_beratungsort($('input[name="beratungsort"]'));
      },
      _submit_form: function(form){
        var data = form.serialize();

        $.ajax({
          url: form.attr('action'),
          data: data,
          type: 'POST',
          timeout: 2000,
          dataType: 'html',
          beforeSend: function(){
            jQuery('.contact_form form').animate( { opacity:"0.1" } , 100 );
          },
          error: function() {
            return false;
          },
          success: function(data){
            if(data == 1){
              jQuery('.contact_form form').hide();
              jQuery('.contact_form').append('<h1 class="emailInfo">Die Email wurde erfolgreich versendet!</h1>');
            }
            else if(data == 0){
              jQuery('.contact_form form').animate( { opacity:"1" } , 300 );
            }
          }
        });
      },
      _click_next: function(next){
        var error_msg = oop.cmp.contact._validation(next.attr('rel'));

        if(error_msg == ''){
          $('div.contact_form ul li.ui-state-active').removeClass('ui-state-active').addClass('back').next().addClass('ui-state-active');
          if(parseInt(next.attr('rel')) + 1 == 2){
            if($('input[name="anfrage"]:checked').val() == 'Beratungswunsch'){
              $('div#step_2a').addClass('ui-helper-hidden');
              $('#termin_from').attr('disabled', false).parents('div.row').removeClass('ui-helper-hidden');
              $('#termin_to').attr('disabled', false);
            }
            else{
              $('div#step_2b').addClass('ui-helper-hidden');
              $('#termin_from').attr('disabled', true).parents('div.row').addClass('ui-helper-hidden');
              $('#termin_to').attr('disabled', true);
            }
          }

          if(parseInt(next.attr('rel')) >= 20){
            $('div.contact_form form button').removeAttr('disabled');
          }

          $('div.contact_form fieldset.ui-state-active').next().addClass('ui-state-active').removeClass('ui-helper-hidden').siblings('fieldset').removeClass('ui-state-active').addClass('ui-helper-hidden');
        }
        else{
          //alert(error_msg);
        }
      },
      _click_prev: function(prev){
        var last_index = prev.index();
        $('div.contact_form ul li.ui-state-active').removeClass('ui-state-active');
        $('div.contact_form fieldset.ui-state-active').removeClass('ui-state-active').addClass('ui-helper-hidden');
        $('div.contact_form form button').attr('disabled','disabled');

        $('div.contact_form ul li').each(function(i, el){
          (i > last_index) ? $(el).removeClass('back') : (i == last_index) ? $(el).removeClass('back').addClass('ui-state-active') : '';
        });

        $('div.contact_form fieldset').each(function(i, el){
          if(i == last_index)
            $(el).addClass('ui-state-active').removeClass('ui-helper-hidden');
        });
      },
      _change_beratungsort: function(radio){
        if(radio.val() == 'Geschäftsstelle'){
          $('select#geschaeftsstelle').attr('disabled', false);
          $('textarea#ort').attr('disabled', true);
        }
        else{
          $('select#geschaeftsstelle').attr('disabled', true);
          $('textarea#ort').attr('disabled', false);
        }
      },
      _change_contact_option: function(select){
        if(select.val() == 'email'){
            $('#telefon').attr('disabled', true).parents('div.row').addClass('ui-helper-hidden');
            $('#email').attr('disabled', false).parents('div.row').removeClass('ui-helper-hidden');
            if($('input[name="anfrage"]:checked').val() != 'Beratungswunsch'){
              $('#termin_to').attr('disabled', true).parents('div.row').addClass('ui-helper-hidden');
              $('#termin_from').attr('disabled', true);
            }
          }
          if(select.val() == 'telefon'){
            $('#email').attr('disabled', true).parents('div.row').addClass('ui-helper-hidden');
            $('#telefon').attr('disabled', false).parents('div.row').removeClass('ui-helper-hidden');
            $('#termin_from').attr('disabled', false).parents('div.row').removeClass('ui-helper-hidden');
            $('#termin_to').attr('disabled', false);
          }
          $('label[for ="strasse"], label[for ="plzort"]').html().replace(' *', '');

          if(select.val() == 'brief'){
            $('#email').attr('disabled', true).parents('div.row').addClass('ui-helper-hidden');
            $('label[for ="strasse"], label[for ="plzort"]').append(' *');
          }

          if(select.val() == ''){
            $('#email, #telefon').attr('disabled', false).parents('div.row').removeClass('ui-helper-hidden');
          }
      },
      _validation: function(step){
      step = $.trim(step);
        var error_msg = value = '';
        var hasError = false;
        var pre_error_msg = 'Bitte kontrollieren Sie Ihre Eingaben:<br />';
        var single_step    = step.length == 1 ? step : step.substr(0,1);
        var error_container = $('fieldset#step_'+single_step);

        $.each(oop.data.contact[step], function(i, e){
         if(e.type == 'radio'){
           if($('input[name="'+e.name+'"]:checked').val() === undefined){
             value = $('label[for ="'+e.name+'"]').html().replace(' *', '');
             error_msg += value+' ist nicht ausgewählt.'+''+"<br />";
             $('label[for ="'+e.name+'"]').parents('.wglFormRow').addClass('error');
           }
           else{
             $('label[for ="'+e.name+'"]').parents('.wglFormRow').removeClass('error');
           }
         }
         else if(e.type == 'input' || e.type == 'textarea'){

           if($.trim($('#'+e.name).val()).length == 0 && !$('#'+e.name).attr('disabled') && $('label[for ="'+e.name+'"]').html().indexOf(' *')  > 0){
             value = $('label[for ="'+e.name+'"]').html().replace(' *', '');
             error_msg += value+' ist nicht ausgefüllt.'+''+"<br />";
             $('#'+e.name).addClass('error');
           }
           else{
             $('#'+e.name).removeClass('error');
           }
         }
         else if(e.type == 'select'){
           if($('#'+e.name).val() == '' && !$('#'+e.name).attr('disabled')){
             value = $('label[for ="'+e.name+'"]').html().replace(' *', '');
             error_msg += value+' ist nicht ausgewählt.'+''+"<br />";
             $('#'+e.name).addClass('error');
           }
           else{
             $('#'+e.name).removeClass('error');
           }
         }
        });
        
        if(error_container.find('> div.error_msg').length == 0){
          error_container.prepend('<div class="error_msg"></div>');
      }  

        if(error_msg.length > 0){
          error_container.find('> div.error_msg').html(pre_error_msg+error_msg);
      }
      else if(error_msg.length == 0){
        error_container.find('> div.error_msg').remove();
      }
        
        return error_msg;
      }
    }
  });
})(oop.$);
