    $(document).ready(function() {

        $("a#show_newGroup").click(function(){           
            $("div#container_newgroup").slideDown("fast",function(){ 
              window.scrollTo(0,0);
            });
            
        });      
        
        $("a#hide_newGroup").click(function(){           
            $("div#container_newgroup").hide();            
        });  
        
        /*
        // Diözesen auslesen und als Auswahlliste einfügen
        $.getJSON("action/getdioezese.php", function(j) {
          var options = '';
          for (var i = 0; i < j.length; i++) {
            options += '<option value="' + j[i]["id"] + '"' ;
            if (j[i]["id"]==0) options += ' selected="selected" ';
            options += '>' + j[i]["name"] + '</option>';
          }
          $("select#sel_dioezese").html(options);
        } );  
        */      
    }); 
    
    
    function showstamm(dioezeseId, elID){
        // Stamm auslesen und als Auswahlliste einfügen
        $.ajax({ 
		  type: "POST", 
		  url: "action/getstaemme.php", 
		  data: "id="+dioezeseId,
		  dataType: "json" ,  
		  success: function(j){ 
		      var options = '';
	          for (var i = 0; i < j.length; i++) {
	            if(i == 0) showgruppe(j[i]["id"]); 
	            options += '<option value="' + j[i]["id"] + '"' ;
	            if (j[i]["id"]==0) options += ' selected="selected" ';
	            options += '>' + j[i]["name"] + '</option>';
	          }
	          $("select#"+elID).html(options);
	          
		  } 
		});       
    }
    
    function showgruppe(stammesid){
        // Stamm auslesen und als Auswahlliste einfügen
        $.ajax({ 
          type: "POST", 
          url: "action/getgruppe.php", 
          data: "id="+stammesid,
          dataType: "json" ,  
          success: function(j){ 
              var options = '<option value="">';
              for (var i = 0; i < j.length; i++) {
                options += '<option value="' + j[i]["id"] + '"' ;
                if (j[i]["id"]==0) options += ' selected="selected" ';
                options += '>' + j[i]["name"] + '</option>';
              }
              $("select#gruppenid").html(options);
          } 
        });       
    }


      // let's start the jQuery while I wait.
      // step 1: onload - capture the submit event on the form.
      
      $(function() { // onload...do
        $('#newgroup').submit(function() {
          // now we're going to capture *all* the fields in the
          // form and submit it via ajax.
          
          
          // :input is a macro that grabs all input types, select boxes
          // textarea, etc.  Then I'm using the context of the form from 
          // the initial '#newgroup' to narrow down our selector
          var inputs = [];
          $(':input', this).each(function() {
            inputs.push(this.name + '=' + escape(this.value));
          })
          
          
          // now if I join our inputs using '&' we'll have a query string
          jQuery.ajax({
            data: inputs.join('&'),
            url: this.action,
            type: "POST", 
            dataType: "json",
            timeout: 2000,
            error: function() {
              //console.log("Failed to submit");
            },
            success: function(respond) {
              if (respond > 0){
                var gruppenname = $("input#groupname").val();
                $("div#error_newgroup").hide();
                $("div#error_newgroup").empty();
                // Formular für Gruppe ausblenden
                $("div#container_newgroup").slideUp("fast");
                // Name und id in User-Formular einfügen // #container_gruppe
                $("div#container_gruppe").empty();
                $("div#container_gruppe").append("<input type='hidden' id='gruppenid' name='gruppenid' value='"+respond+"'><input type='hidden' id='gruppenname' name='gruppenname' value='"+gruppenname+"'>"+gruppenname);
              }
              else {
                // Ausgabe :  Fehler! Bitte Eingaben überprüfen // error_newgroup
                $("div#error_newgroup").empty();
                $("div#error_newgroup").append("Fehler! Bitte überprüfe deine Eingaben.");
                $("div#error_newgroup").show();
                
              }
            }
          }) 
          // checkout http://jquery.com/api for more syntax and options on this method.
          // by default - we'll always return false so it doesn't redirect the user.
          return false;
        });
      });

      
      
      
 function checkReg(typ) {
     // Eingabe prüfen     
     // typ='edit' -> changeuser

    // Fehlermeldungen leeren
    $("div#error").empty();
    $("div#error").show();

    if (typ == "register") {
        var f = document.getElementById('newuser');
        var fields = $("#newuser input").get();
       }
    else if (typ == "edit") {
        var f = document.getElementById('edituser');
        var fields = $("#edituser input").get();
    }     
    var noError = true;
    
    

    // Felder überprüfen
    // Firefox kann getElementsByTagName auch für andere root-Elemente
    // als nur document machen. form wäre schön gewesen. Weil das aber
    // nicht geht, muss das ganze document genommen werden
    // var fields = YAHOO.util.Dom.getElementsByClassName('withhint', '', f);

    var fields_check = true;

    for (var i = 0; i < fields.length; i++ )
    {
        //console.log('CHECKFIELD: '+ fields[i].name);
        if (checkField(fields[i], 'checkform', typ) != true) {
            //console.log("false");
            fields_check = false;
        }
    }   
    
    if (!fields_check) {
        return false;
    }
    else {
	    // Formular abschicken
	    f.submit();
	    return true;
    }   
          
 }
      
      
      
      
 // Fehlermeldung ausgeben 
 function displayFieldhint(emsg) {
     $("div#error").append(emsg);
     return true;
 }    
      
      
      

/**
 * Prüft die jeweiligen Felder auf ihre Gültigkeit.
 * 
 * @param {Object} el
 */
var checkField = function (el, mode, typ) {

    if (el == undefined || el.id == undefined)
        return false;
  
    /*
    if (mode != 'checkform')
    {
        // Wenn der User normal durch die Felder navigiert, sollen
        // leere Felder nicht als Fehler markiert werden. Nur beim
        // abschließenden CheckForm beim Abschicken der Registrierung
        if (el.value == '')
        {
            isError = false;
            return true;
        }   
    }
    */
    

    var reg, res, stErrorMsg = '', noError = true;
    
    //var f = document.getElementById('newuser');


    if (typ == "register") {
        var f = document.getElementById('newuser');
        var fields = $("#newuser input").get();
       }
    else if (typ == "edit") {
        var f = document.getElementById('edituser');
        var fields = $("#edituser input").get();
    }     

    //var f = getParentElement(el, 'form');
    //var r = YAHOO.util.Dom.getRegion(el);
    var ret = new Array();
    var noError = true;
    
    

    switch (el.name)
    {
        case 'username1':
            //var badwords = findBadwordsInString(el.value);
            
            reg = new RegExp('^([a-zA-Z0-9!_-]{1,17})$');
            res = (reg.test(el.value));
            
            //console.log(el.value.charAt(el.value.length-1));
            
            if (!res || el.value.charAt(0) == '_')
            {
                stErrorMsg = 'Bitte gib einen gültigen Benutzernamen mit maximal 17 Zeichen ein (a-z, A-Z, 0-9, !_-). Der Benutzername darf nicht mit einem _ beginnen oder enden.<br />';
                displayFieldhint(stErrorMsg);
                noError = false;
            }
            else if (el.value.charAt(el.value.length-1) == '_')
            {
                stErrorMsg = 'Dein Benutzername darf nicht mit einem Unterstrich enden!<br />';
                displayFieldhint(stErrorMsg);
                noError = false;
            }
            else if(checkIfUsernameAlreadyExists(el.value) == true)
            {
                //console.log("username existiert 2");
                // var altUsernames = getAlternativeUsernames(el.value);                
                // YAHOO.log(altUsernames['alternatives']);
                
                stErrorMsg = 'Dein gewählter Benutzername ist leider schon vergeben. Gib einfach einen anderen Namen ein. <br />';
                
                /*
                for (var i = 0; i < altUsernames['alternatives'].length; i++ )
                {
                    stErrorMsg += '<a href="#" onclick="return setAlternativeUsername(this);" title="'+altUsernames['alternatives'][i]+'">'+altUsernames['alternatives'][i]+'</a><br />';
                }
                stErrorMsg += '<br />';
                */               
                
                displayFieldhint(stErrorMsg);
                noError = false;
            }
            else if (el.value.length < 3)
            {
                stErrorMsg = 'Ungültiger Benutzername: Dein Benutzername muss mindestens 3 Buchstaben lang sein!<br />';
                displayFieldhint(stErrorMsg);
                noError = false;
            }
            else
            {
                // hideFieldhint(r['top']);
                noError = true;
            }
            
            
            break;
        case 'passwort1':
            if (typ == "edit" && el.value=="") {
                // muss nicht gefüllt sein
                noError = true;
            } else {
                if (el.value.length < 5)
                {
                    stErrorMsg = 'Dein Passwort muss mindestens 5 Zeichen umfassen!<br />';
                    displayFieldhint(stErrorMsg);
    
                    noError = false;
                }
                else
                {
                    // hideFieldhint(r['top']);
                    noError = true;
                }
            
            }
	            
            break;
        case 'passwort2':
            if (typ == "edit" && el.value=="") {
                // muss nicht gefüllt sein
                noError = true;
            } else {
                if (f.passwort1.value != el.value)
                {
                    stErrorMsg = 'Passwort nicht identisch: Bitte achte darauf, dass du das Passwort zweimal identisch eingibst. Nur so kann sicher gestellt werden, dass du dich nicht vertippt hast und nach der Registrierung einloggen kannst.<br />';
                    displayFieldhint(stErrorMsg, 'error');
                    noError = false;
                }
                else
                {
                    // hideFieldhint(r['top']);
                    noError = true;
                }
            }
	            

            break;
        case 'email':
            if (checkEmail(el.value) == false)
            {
                stErrorMsg = 'Bitte gib eine gültige E-Mail-Adresse an!<br />';
                displayFieldhint(stErrorMsg, 'error');
                noError = false;
            }
            /*
            else if (checkIfEmailAlreadyExists(el.value) == true)
            {
                stErrorMsg = 'Sorry... Ein Benutzer mit dieser E-Mail-Adresse wurde bereits angelegt!<br />';
                displayFieldhint(stErrorMsg, 'error');
                noError = false;
            }
            */
            else
            {
                // hideFieldhint(r['top']);
                noError = true;
            }

            break;

        case 'plz':
            if (el.value != "") {
                reg = new RegExp('^([0-9]{5})$');
                res = (reg.test(el.value));
                if (!res)
                {
                    stErrorMsg = 'Bitte gib deine Postleitzahl an. <br />';
                    displayFieldhint(stErrorMsg);
                    noError = false;
                } else{
                    noError = true;
                }    
                            
            } else {
                stErrorMsg = 'Bitte gib deine Postleitzahl an. <br />';
                displayFieldhint(stErrorMsg);
                noError = false;            
            }
            break;  
            
        case 'mitglnr':
            if (el.value != "") {
                reg = new RegExp('^([0-9]{1,13})$');
                res = (reg.test(el.value));
                
                //console.log(el.value.charAt(el.value.length-1));
                
                if (!res || el.value.charAt(0) == '_')
                {
                    stErrorMsg = 'Bitte gib deine gültige Mitgliedsnummer an. <br />';
                    displayFieldhint(stErrorMsg);
                    noError = false;
                }            
                            
            }
	        break;    
        case 'vorname':
            // var badwords = findBadwordsInString(el.value);
            
            if (el.value == '')
            {
                stErrorMsg = 'Bitte gib deinen Vornamen an.<br />';
                displayFieldhint(stErrorMsg, 'error');
                noError = false;
            }
            else
            {
                // hideFieldhint(r['top']);
                noError = true;
            }

            break;
        case 'nachname':
            // var badwords = findBadwordsInString(el.value);
        
            if (el.value == '')
            {
                stErrorMsg = 'Bitte nenne uns deinen Nachnamen.<br />';
                displayFieldhint(stErrorMsg, 'error');
                noError = false;
            }
            else
            {
                // hideFieldhint(r['top']);
                noError = true;
            }

            break;
        case 'day':
        case 'month':
        case 'year':
            if (checkBirthday(mode) == false)
            {
                stErrorMsg = 'Bitte nenne uns deinen vollständigen Geburtstag!<br />';
                displayFieldhint(stErrorMsg, 'error');
                noError = false;
            }
            else
            {
                // hideFieldhint(r['top']);
                noError = true;
            }

            break;
        case 'code':
            if (checkCaptcha() == false)
            {
                stErrorMsg = 'Falscher Code: Du hast die falsche Sicherheitszahl eingegeben.<br />';
                if (numOfWrongCaptchaTries > 0 && numOfWrongCaptchaTries != 3)
                {
                    stErrorMsg += '<p>' + numOfWrongCaptchaTries + "ter Fehlversuch.<br />";                  
                }
                else if (numOfWrongCaptchaTries == 3)
                {
                    stErrorMsg += 'Du hast die Sicherheitszahl ' + numOfWrongCaptchaTries + ' mal falsch eingegeben. Bitte gib nun die neue Sicherheitszahl an, die du links siehst.</strong><br />';
                    getNewCaptcha();
                    numOfWrongCaptchaTries = 0;
                }
                
                displayFieldhint(stErrorMsg, 'error');
                noError = false;
            }
            else
            {
                // hideFieldhint(r['top']);
                noError = true;
                numOfWrongCaptchaTries = 0;
            }

            break;
        case 'agb':
            if (el.checked == false)
            {
                stErrorMsg = 'Du musst den myPSG-AGB zustimmen.<br />';
                displayFieldhint(stErrorMsg, 'error');
                noError = false;
            }
            else
            {
                // hideFieldhint(r['top']);
                noError = true;
            }

            break;
        default:
            return true;
    }
    
    isError = !noError;
    
    if (isError == true)
    {
        fieldWithError = el.id;
    }

    return noError;
}
      
      
      
      
      
/**
 * Überprüft einen String, ob es sich dabei um eine gültige EMail-Adresse handelt
 * Quelle: http://www.drweb.de/javascript/email_check.shtml
 * 
 * @param {Object} s
 */
var checkEmail = function (s) {
    var a = false;
    var res = false;
    
    if(typeof(RegExp) == 'function')
    {
        var b = new RegExp('abc');
        if(b.test('abc') == true){a = true;}
    }
    
    if(a == true)
    {
        reg = new RegExp('^([a-zA-Z0-9\\-\\.\\_]+)'+ '(\\@)([a-zA-Z0-9\\-\\.]+)'+'(\\.)([a-zA-Z]{2,4})$');
        res = (reg.test(s));
    }
    else
    {
        res = (s.search('@') >= 1 && s.lastIndexOf('.') > s.search('@') && s.lastIndexOf('.') >= s.length-5);
    }

    return(res);
}




/**
 * Überprüft, ob ein Benutzername bereits vergeben ist  
 * 
 * @param {Object} stUsername
 */
var checkIfUsernameAlreadyExists = function (stUsername) {
    /*
    //console.log("checkUsername");
        $.ajax({ 
          type: "POST", 
          url: "action/checkusername.php", 
          data: "name="+stUsername,
          dataType: "json" ,  
          success: function(j){ 
              var res = (j["resultcode"]);
              console.log(res);
              if (res == true) {
                //console.log("Name existiert");
                return true;
              }
              else {
                return false;
              }
          } 
        });  

    
    */

    var http = createHTTP();
    
    if (!http)
    {
        alert("Dein Browser ist leider nicht in der Lage, die Anfrage zu bearbeiten.");
    }

    http.open("GET", 'action/checkusername.php?name='+stUsername, false);
    http.send(null);
    
    
    
    var res2 = eval('(' + http.responseText + ')');
    var res = res2.resultcode;
/*
            var res = o.responseText;
            var res = eval('(' + res + ')');

            resultCode = res.result_code;
            
            switch (resultCode)
*/   
    // YAHOO.log("'" + res + "'");

    if (res == '1')
    {
        // Benutzer existiert bereits
        return true;
    }
    else
    {
        // Benutzer existiert noch nicht
        return false;
    }
    
}






/**
 * Erstellt eine HTTP-Verbindung. Mit dieser Verbindung ist es möglich, auch
 * SYNCHRONE Requests abzusetzen, also so, dass auf die Antwort gewartet wird,
 * bevor der Code weiter ausgeführt wird. Dies ist beim Login sinnvoll.
 * 
 * Ansonsten sind asynchrone Abfragen (AJAX) vorzuziehen. Diese sollten mit
 * dem YUI-Connection-Objekt erstellt werden 
 * http://developer.yahoo.com/yui/connection/ 
 *
 * Quelle: clipfish
 */
var createHTTP = function () {
    var http = null;
    // Mozilla, Opera, Safari sowie Internet Explorer 7
    if (typeof XMLHttpRequest != 'undefined') {
        http = new XMLHttpRequest();
    }
    if (!http) {
        // Internet Explorer 6 und älter
        try {
            http  = new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {
            try {
                http  = new ActiveXObject("Microsoft.XMLHTTP");
            } catch(e) {
                http  = null;
            }
        }
    }
    
    return http;
}      
 
 
 
