  var smoothScroll = null;

  window.addEvent('domready', function() {
    smoothScroll = new Fx.Scroll(document.body);
  });

  function startZEUSmodul(modul) {
    var win = window.open("http://www.zeus-portal.de/apps/" + modul + "/index.htm", "zeusmodulfenster", "width=800,height=600,scrollbars=no,location=no,directories=no,status=no,menubar=no,toolbar=no,resizable=no");
	win.focus();
  }

  function getRegExFor(profile) {
    switch (profile) {
      case 'email':
        return new RegExp('^$|^(?:[a-z0-9!#$%&\'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&\'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$');
        break;
      case 'ip':
        return new RegExp('^((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))?$');
        break;
      case 'plz':
        return new RegExp('^([0-9]{4,5})?$');
        break;
      case 'phone':
        return new RegExp('^((\\(?\\+?[0-9 ]{1,4}\\)?)?[0-9 \\(\\)-]{4,}[0-9a-zA-Z \\(\\)-]*)?$');
        break;
      case 'name':
        return new RegExp('^[^!\"\\u00A7$%&/\\\\\\(\\)\\{\\}\\[\\]=?*#_;:@\\u20AC\\u00B5<>|^]*$');
    }
  }
  
  function checkForm(e) {
    var formValid = true;
    $$('.field input', '.field textarea', '.field select', '.checkfield input').each(function(field) {
      field.set('valid', 1);
      // Mandatory
      if (field.getParent().hasClass('mandatory') && (field.get('value')=="" || (field.get('type')=='checkbox' && !field.get('checked')))) {
        field.set('valid', 0);
        field.set('errMsg', field.getParent().getFirst('label').get('html') + ' ist ein Pflichtfeld');
        formValid=false;
      }
      // regExp: email
      if (field.hasClass('checkReg-email') && field.get('valid')==1 && !field.get('value').test(getRegExFor('email'))) {
        field.set('valid', 0);
        field.set('errMsg', field.getParent().getFirst('label').get('html') + ' enth&auml;lt keine g&uuml;ltige Mailadresse');
        formValid=false;
      }
      // regExp: ip
      if (field.hasClass('checkReg-ip') && field.get('valid')==1 && !field.get('value').test(getRegExFor('ip'))) {
        field.set('valid', 0);
        field.set('errMsg', field.getParent().getFirst('label').get('html') + ' enth&auml;lt keine g&uuml;ltige IP-Adresse');
        formValid=false;
      }
      // regExp: plz
      if (field.hasClass('checkReg-plz') && field.get('valid')==1 && !field.get('value').test(getRegExFor('plz'))) {
        field.set('valid', 0);
        field.set('errMsg', field.getParent().getFirst('label').get('html') + ' enth&auml;lt keine g&uuml;ltige Postleitzahl');
        formValid=false;
      }
      // regExp: phone
      if (field.hasClass('checkReg-phone') && field.get('valid')==1 && !field.get('value').test(getRegExFor('phone'))) {
        field.set('valid', 0);
        field.set('errMsg', field.getParent().getFirst('label').get('html') + ' enth&auml;lt keine g&uuml;ltige Telefonnummer');
        formValid=false;
      }
      // regExp: name
      if (field.hasClass('checkReg-name') && field.get('valid')==1 && !field.get('value').test(getRegExFor('name'))) {
        field.set('valid', 0);
        field.set('errMsg', field.getParent().getFirst('label').get('html') + ' enth&auml;lt ung&uuml;ltige Zeichen');
        formValid=false;
      }
      // Maxlength
      if (field.get('valid')==1 && field.get('maxlength')>-1 && field.get('value').length>field.get('maxlength')) {
        field.set('valid', 0);
        field.set('errMsg', field.getParent().getFirst('label').get('html') + ' darf maximal ' + field.get('maxlength') + ' Zeichen enthalten');
        formValid=false;
      }

      // Highligth Event.target if invalid
      if (e!=null && field==e.target) {
        if (field.get('valid')==1) {
          field.morph('.valid');
          var msg = $('msg_'+field.get('id'))
          if (msg!=null) msg.dispose();
        } else {
          field.morph('.error');
          var msg = $('msg_'+field.get('id'))
          if (msg!=null) msg.dispose();
          var msg = new Element('li', {'id':    'msg_'+field.get('id'),
                                       'class': 'error',
                                       'html':   field.get('errMsg')
                                      });
          msg.inject($('formMessages'));
        }
      }
    });

    if($('submit')!=null) {
      if (formValid) {
        $('submit').fade('in');
      } else {
        $('submit').fade('out');
      }
    }
    if (e==null) return formValid;
  }