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();
    }    
    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;
    }     
} 

function checkLinkform() {
     // Eingabe pr�fen     
     // typ='edit' -> changeuser
	typ = 'request';
    // Fehlermeldungen leeren
    $("div#error").empty();
    $("div#error").show();

     var f = document.getElementById('addlink');
     var fields = $("#addlink input").get();

    var noError = true;

    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 == "request") {
        var f = document.getElementById('request');
        var fields = $("#request 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 'user':
            //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 = 'Your username may only consist of letters (a-z, A-Z) and digits (0-9).<br />';
                displayFieldhint(stErrorMsg);
                noError = false;
            }
            else if (el.value.charAt(el.value.length-1) == '_')
            {
                stErrorMsg = 'Your username may not end with a _!<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 = 'This username already exists!<br />';
                displayFieldhint(stErrorMsg);
                noError = false;
            }
            else if (el.value.length < 3)
            {
                stErrorMsg = 'Invalid username: The username must be longer than 3 characters!<br />';
                displayFieldhint(stErrorMsg);
                noError = false;
            }
            else
            {
                // hideFieldhint(r['top']);
                noError = true;
            }
            
            
            break;
        case 'password':
            if (typ == "edit" && el.value=="") {
                // muss nicht gef�llt sein
                noError = true;
            } else {
                if (el.value.length < 5)
                {
                    stErrorMsg = 'Your password must be longer than 5 characters.<br />';
                    displayFieldhint(stErrorMsg);
    
                    noError = false;
                }
                else
                {
                    // hideFieldhint(r['top']);
                    noError = true;
                }
            
            }
	            
            break;
        case 'password2':
            if (typ == "edit" && el.value=="") {
                // muss nicht gef�llt sein
                noError = true;
            } else {
                if (f.password.value != el.value)
                {
                    stErrorMsg = 'Please repeat your password.<br />';
                    displayFieldhint(stErrorMsg, 'error');
                    noError = false;
                }
                else
                {
                    // hideFieldhint(r['top']);
                    noError = true;
                }
            }
	            

            break;
        case 'email':
            if (checkEmail(el.value) == false)
            {
                stErrorMsg = 'Please enter a valid e-mail address.!<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 'name':
            if (el.value == '')
            {
                stErrorMsg = 'Please enter a valid name!<br />';
                displayFieldhint(stErrorMsg, 'error');
                noError = false;
            }
            else
            {
                noError = true;
            }
            break;
            
        case 'webmaster':
            if (el.value == '')
            {
                stErrorMsg = 'Please enter a name!<br />';
                displayFieldhint(stErrorMsg, 'error');
                noError = false;
            }
            else
            {
                noError = true;
            }
            break;
        case 'recipurl':
            if (el.value == '')
            {
                stErrorMsg = 'Please enter a valid url where we can find our link!<br />';
                displayFieldhint(stErrorMsg, 'error');
                noError = false;
            }
            else
            {
                noError = true;
            }
            break;
        case 'url':
            if (el.value == 'http://' || el.value == '')
            {
                stErrorMsg = 'Please enter a valid url!<br />';
                displayFieldhint(stErrorMsg, 'error');
                noError = false;
            }
            else
            {
                noError = true;
            }
            break;
        case 'website':
            if (el.value == '')
            {
                stErrorMsg = 'Please enter a Website!<br />';
                displayFieldhint(stErrorMsg, 'error');
                noError = false;
            }
            else
            {
                noError = true;
            }
            break;
        case 'subject':
            if (el.value == '')
            {
                stErrorMsg = 'Please enter a valid subject!<br />';
                displayFieldhint(stErrorMsg, 'error');
                noError = false;
            }
            else
            {
                noError = true;
            }
            break;
        
        case 'message':
        	alert(el.value);
            if (el.value.length == 0)
            {
                stErrorMsg = 'Please enter a message!<br />';
                displayFieldhint(stErrorMsg, 'error');
                noError = false;
            }
            else
            {
                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) {

    var http = createHTTP();
    
    if (!http)
    {
        alert("Dein Browser ist leider nicht in der Lage, die Anfrage zu bearbeiten.");
    }

    http.open("GET", 'action/user/do_exists.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;
}      
 
