
GVD = function() {

  var $D = YAHOO.util.Dom;
  var $E = YAHOO.util.Event;
  var $ = $D.get;

  var form = Object();
  var config = Object();

  

  return {

    loadFormConf: function(o){
      if(o.responseText !== undefined){
        config =  eval('('+ o.responseText +')');
        for(var i = 0; i < form.length; i++) {
          if(form[i].type == 'select-one' || form[i].type == 'radio'
               || form[i].type == 'checkbox') {
            $E.on(form[i], 'change', function(e) {
              for(var i = 0; i < form.length; i++) {
                GVD.handleRequirements(form[i]);
              }
              if(config[this.name].confirm) {
                $(config[this.name].confirm).innerHTML = this.value
                  + '<br>' + this.options[this.selectedIndex].getAttribute('title');
              }
            });
          } else {
            $E.on(form[i], 'keyup', function(e) {
              for(var i = 0; i < form.length; i++) {
                GVD.handleRequirements(form[i]);
              }
            });
          }
          if(config[form[i].name] 
                && config[form[i].name].requirements) {
            GVD.handleRequirements(form[i]);
          }
        }
      }
    },

    handleRequirements: function(field) {

      if(!config[field.name] || !config[field.name].requirements) {
        return;
      }

      var c = config;
      var f = form;

      var requirements = config[field.name].requirements;
      $D.setStyle($D.getAncestorByTagName(field, 'tr'), 'display', 'table-row');

      if(form[field.name].disabled == true) {
        form[field.name].value = config[field.name].defaultValue;
      } else {
        config[field.name].defaultValue = form[field.name].value;
      }

      form[field.name].disabled = false;
      form[field.name].style.backgroundColor = "white";

      for(var i = 0; i < requirements.length; i++) {

        var r = requirements[i];

        if(r.length == 1 && config[r[0]].type == 'checkone') {
          if(form[r[0]].checked != true) {
            form[field.name].disabled = true;
            form[field.name].value = '';
            $D.setStyle(form[field.name], 'backgroundColor', "#D1D1D1");
          }
        } else if(r.length == 1) {
          if(form[r].value == '' || form[r].value == '_empty_') {
            form[field.name].disabled = true;
            form[field.name].value = '';
            $D.setStyle(form[field.name], 'backgroundColor', "#D1D1D1");
          }
        } else if (r.length == 2) {
          if(form[r[0]].value == '' || form[r[0]].value == '_empty_') {
            form[field.name].disabled = true;
            form[field.name].value = '';
            $D.setStyle(form[field.name], 'backgroundColor', "#D1D1D1");
          } else if(form[r[0]].value != r[1]) {
            form[field.name].disabled = true;
            form[field.name].value = '';
            $D.setStyle(form[field.name], 'backgroundColor', "#D1D1D1");
          }
        } else if (r.length == 3) {
          if(form[r[0]].value == '' || form[r[0]].value == '_empty_') {
            form[field.name].disabled = true;
            form[field.name].value = '';
            $D.setStyle(form[field.name], 'backgroundColor', "#D1D1D1");
          } else if(r[2] == '>' && form[r[0]].value <= r[1]) {
            form[field.name].disabled = true;
            form[field.name].value = '';
            $D.setStyle(form[field.name], 'backgroundColor', "#D1D1D1");
          } else if(r[2] == '<' && form[r[0]].value >= r[1]) {
            form[field.name].disabled = true;
            form[field.name].value = '';
            $D.setStyle(form[field.name], 'backgroundColor', "#D1D1D1");
          } else if(r[2] == '>=' && form[r[0]].value < r[1]) {
            form[field.name].disabled = true;
            form[field.name].value = '';
            $D.setStyle(form[field.name], 'backgroundColor', "#D1D1D1");
          } else if(r[2] == '<=' && form[r[0]].value > r[1]) {
            form[field.name].disabled = true;
            form[field.name].value = '';
            $D.setStyle(form[field.name], 'backgroundColor', "#D1D1D1");
          } else if(r[2] == '==' && form[r[0]].value != r[1]) {
            form[field.name].disabled = true;
            form[field.name].value = '';
            $D.setStyle(form[field.name], 'backgroundColor', "#D1D1D1");
          } else if(r[2] == '!=' && form[r[0]].value == r[1]) {
            form[field.name].disabled = true;
            form[field.name].value = '';
            $D.setStyle(form[field.name], 'backgroundColor', "#D1D1D1");
          } else if((r[3] == '>' && form[r[0]].value <= r[2]) || (r[3] == '>' && form[r[1]].value <= r[2])) {
            form[field.name].disabled = true;
            form[field.name].value = '';
            $D.setStyle(form[field.name], 'backgroundColor', "#D1D1D1");
          }
        } // end if requirements length
      } // end for each requirement

      if(form[field.name].disabled == false) {
        form[field.name].value = config[field.name].defaultValue;
      }

    },

    init: function() {

      var popups = $D.getElementsByClassName('popup', 'img');
      if(popups.length) {
        $D.setStyle(popups, 'cursor', 'pointer');
        $E.on(popups, 'click', function() {
          var classes = this.className.split(' ');
          window.open(this.src.replace('.1.', '.0.'), 'pop', 'width='+classes[1].substr(5)+',height='+classes[2].substr(6)+',status=0,menubar=0');
        });
      }

      $E.onAvailable('query', function() { 
        this.value = 'Suchbegriff'; 
        $E.on(this, 'focus', function() { 
          if(this.value == 'Suchbegriff') { this.value = ''; }
        });
        $E.on(this, 'blur', function() { 
          if(this.value == '') { this.value = 'Suchbegriff'; }
        });
      });

      form = $('main');

      if(form) {

        var request = YAHOO.util.Connect.asyncRequest('GET', $('src').value, { 
            success:GVD.loadFormConf }); 

        $E.on(form, 'submit', function(e) {

          $E.stopEvent(e);
          var msg = '';

          for(var i = 0; i < form.length; i++) {

            if(!config[form[i].name] 
                || !config[form[i].name].required
                || config[form[i].name].required != true) {
              continue;
            }

            if(config[form[i].name].type == 'checkone') {
              if(form[i].checked == false) {
                msg += config[form[i].name].label.replace(':', '') + "\n";
              }
            } else if(!form[i].value) {
              msg += config[form[i].name].label.replace(':', '') + "\n";
            } else if(form[i].value == config[form[i].name].value) {
              msg += config[form[i].name].label.replace(':', '') + "\n";
            } else if(form[i].value == '_empty_') {
              msg += config[form[i].name].label.replace(':', '') + "\n";
            }

          }

          if(msg.length != 0) {
            alert('Bitte alle Pflichtfelder ausfüllen: ' + "\n\n" + msg);
          } else {
            this.submit();
          }

        });

      }
    }

  };

}();

YAHOO.util.Event.onDOMReady(GVD.init);
