<!--

/**
 * 
 * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 * @title      JS Validate Form Data
 * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 * @author     Stefan Kloiber <stefan.kloiber@fresh-flava.net>
 * @version    1.5
 * @date       April 2006

 *                        @@@@@@                      
 *                      @@      @@                    
 *                    @@    @@    @@                  
 *                    @@  @@@@@@  @@                  
 *      @@@@@@        @@    @@    @@        @@@@@@    
 *    @@      @@        @@      @@        @@      @@  
 *  @@    @@    @@        @@@@@@        @@    @@    @@
 *  @@  @@@@@@  @@          @@          @@  @@@@@@  @@
 *  @@    @@    @@          @@          @@    @@    @@
 *    @@      @@@@          @@            @@      @@  
 *      @@@@@@    @@      @@@@@@            @@@@@@    
 *                  @@  @@@@@@@@@@            @@      
 *                  @@    @@@@@@            @@        
 *                @@@@@@    @@      @@@@@@@@    @@    
 *              @@@@@@@@    @@    @@  @@@@@@@@@@  @@  
 *                    @@    @@    @@    @@          @@
 *                    @@    @@  @@      @@          @@
 *                      @@  @@@@      @@              
 *              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@    
 *                                 FRESH-FLAVA.NET    

 * @desc       file contains functions for validating one or more form elements

 * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 * @           functions
 * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 * @func       addLoadEvent( func )                  -> on load handler from Simon Wilson
 * @func       init()                                -> initialise event handlers to elements on load
 * @func       addReqHint( fo )                      -> if initialised create hints to required fields
 * @func       resetForm( fo )                       -> removes all error messages and inputs
 * @func       validForm( fo, getId )                -> validates all required fields
 * @func       isEmailAddr( str )                    -> checks for right email address
 * @func       setErr( fo, obj, errorText, errId )   -> creates the error messages
 * @func       unsetErr( fo, obj )                   -> removes the error messages
 * 
**/




    var validOnBlur = false; // value check when leaving a required input field
    var addReqHints = false; // generate automatically hints on required fields
    var insErrBefore = true; // position of the error message


    addLoadEvent( init );


/**
 * on load handler, for more info see http://simon.incutio.com/archive/2004/05/26/addLoadEvent
 * 
 * func      = name of some function to run on page load
**/

    function addLoadEvent( func ) {
        var oldonload = window.onload;
        if (typeof window.onload != 'function') {
            window.onload = func;
        } else {
            window.onload = function() {
                oldonload();
                func();
            }
        }
    }


/**
 * initialise event handlers to elements and methods on page load
 * 
**/

    function init() {
        if (document.forms) {

            var c, formObj;
            formObj = document.getElementsByTagName('form');
            for (c = 0; c < formObj.length; c++) {
                formObj[c].onsubmit = function() { return validForm( this ) };
                formObj[c].onreset = function() { return resetForm( this ) };
                if (addReqHints === true) if (document.getElementById(formObj[c].id+ '_required')) addReqHint( formObj[c] );
            }
        }
    }


/**
 * if initialised, this function adds hints (*) to required fields
 * 
 * fo        object = the form element
**/

    function addReqHint( fo ) {
        var req, reqfields;
        req = document.getElementById(fo.id+ '_required').value;
        reqfields = req.split( ',' );

        for (var n = 0; n < reqfields.length; n++) {
            if (validOnBlur == true) document.getElementById( reqfields[n] ).onblur = function() { return validForm( fo, this ) };

            var labels = fo.getElementsByTagName('label');
            for (var nn = 0; nn < labels.length; nn++) if (labels[nn].getAttribute( 'for' ) == reqfields[n]) labels[nn].firstChild.data = labels[nn].firstChild.data+ ' *';
        }
        var reqHint = document.createElement( 'p' );
        reqHint.className = 'reqHint';
        var reqHintText = document.createTextNode( unescape( 'mit * gekennzeichnete felder m%FCssen ausgef%FCllt werden.' ) );
        reqHint.appendChild( reqHintText );
        //fo.insertBefore( reqHint, fo.firstChild ); // error message after form
        var pObjs = fo.getElementsByTagName('p');
        for (var i = 0; i < pObjs.length; i++)
            if (new RegExp( 'buttons' ).test( pObjs[i].className ))
                pObjs[i].parentNode.insertBefore( reqHint, pObjs[i] ); // error message before submit button
    }



/**
 * removes all error messages and input values
 * 
 * fo        object = the form element
**/

    function resetForm( fo ) {
        var errId = fo.id+ '_errStat';
        if (document.getElementById(errId)) document.getElementById(errId).parentNode.removeChild( document.getElementById(errId) );

        if (fo.tagName.toLowerCase() == 'form') {
            var labels = fo.getElementsByTagName('label');
            for (var k = 0; k < labels.length; k++) if (new RegExp( 'error' ).test( labels[k].className )) labels[k].className = labels[k].className.replace( 'error', '' );
        }
        var reqId = fo.id+ '_required';

        if (document.getElementById(reqId)) {
            var req = document.getElementById(reqId).value;
            var reqfields = req.split( ',' );
            for (var kk = 0; kk < reqfields.length; kk++) if (new RegExp( 'error' ).test( document.getElementById(reqfields[kk]).className )) document.getElementById(reqfields[kk]).className = document.getElementById(reqfields[kk]).className.replace( 'error', '' );
        }
    }


/**
 * validates all required field values
 * 
 * fo        object = the form element
**/

    function validForm( fo, inputElem ) {

        var req, reqfields, count, f, ty, errText, errId, valReq, reqId;
        // alert( 'ä -> ' +escape( 'ä' )+ 'ö -> ' +escape( 'ö' )+ 'ü -> ' +escape( 'ü' ) );
        errText = unescape( 'Eines oder mehrere Pflichtfelder sind noch nicht richtig ausgef%FCllt! Bitte tragen Sie diese Informationen noch nach und versenden Sie dann das Formular erneut.' );
        errId = fo.id+ '_errStat';
        if (document.getElementById(errId)) document.getElementById(errId).parentNode.removeChild( document.getElementById(errId) );
        valReq = true;
        reqId = fo.id+ '_required';

        if (document.getElementById(reqId)) {
            req = inputElem ? inputElem.id : document.getElementById(reqId).value;
            reqfields = req.indexOf( ',' ) != -1 ? req.split( ',' ) : new Array( req );

            for (count = 0; count < reqfields.length; count++) {
                f = document.getElementById( reqfields[count] );
                if (f) {
                    ty = f.type.toLowerCase();

                    switch (ty) {
                        case 'text':
                            if (f.value == '') valReq = setErr( fo, f, errText, errId );
                              else unsetErr( fo, f );
                            if (new RegExp( 'email' ).test( f.id ) && !isEmailAddr(f.value)) valReq = setErr( fo, f, errText, errId );
                            break;
                        case 'password':
                            if (f.value == '') valReq = setErr( fo, f, errText, errId );
                              else unsetErr( fo, f );
                            break;
                        case 'textarea':
                            if (f.value == '') valReq = setErr( fo, f, errText, errId );
                              else unsetErr( fo, f );
                            break;
                        case 'checkbox':
                            if (!f.checked) valReq = setErr( fo, f, errText, errId );
                              else unsetErr( fo, f );
                            break;
                        case 'radio':
                            if (!f.checked) valReq = setErr( fo, f, errText, errId );
                              else unsetErr( fo, f );
                            break;
                        case 'select-one':
                            if (f.value == 0 || f.value == '') valReq = setErr( fo, f, errText, errId );
                              else unsetErr( fo, f );
                            break;
                        case 'select-multiple':
                            if (f.value == 0) valReq = setErr( fo, f, errText, errId );
                              else unsetErr( fo, f );
                            break;
                        case 'file':
                            if (f.value == '') valReq = setErr( fo, f, errText, errId );
                              else unsetErr( fo, f );
                            break;
                    }
                }
            }
        }
        return valReq;
    }


/**
 * the method checks the email address field
 * 
 * str       string = email address
**/

    function isEmailAddr( str ) {
        return str.match( /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/ );
    }


/**
 * creates the error messages
 * 
 * fo        object = the form element
 * obj       object = the input element
 * errorText string = error message
 * errId     string = error id
**/

    function setErr( fo, obj, errorText, errId ) {
        var label, labels;
        if (fo.tagName.toLowerCase() == 'form') {
            if (!document.getElementById(errId) && !document.getElementById('popup')) {
                var err = document.createElement( 'p' );
                err.id = errId;
                err.className = 'error';
                var errText = document.createTextNode( errorText );
                err.appendChild( errText );
                if (insErrBefore == true) {
                    fo.insertBefore( err, fo.firstChild ); // error message after form
                } else {
                    var pObjs = fo.getElementsByTagName('p');
                    for (var i = 0; i < pObjs.length; i++)
                        if (new RegExp( 'buttons' ).test( pObjs[i].className ))
                            pObjs[i].parentNode.insertBefore( err, pObjs[i] ); // error message before submit button
                }
            }
            obj.className = !(new RegExp( 'error' ).test( obj.className )) ? obj.className+ ' error' : obj.className;
            label = obj.id;
            labels = fo.getElementsByTagName('label');
            for (var ii = 0; ii < labels.length; ii++) if (labels[ii].getAttribute( 'for' ) == label && !(new RegExp( 'error' ).test( labels[ii].className ))) labels[ii].className = labels[ii].className+ ' error';
        }
        return false;
    }


/**
 * removes the error messages
 * 
 * fo        object = the form element
 * obj       object = the input element
**/

    function unsetErr( fo, obj ) {
        if (fo.tagName.toLowerCase() == 'form') {
            obj.className = !(new RegExp( 'error' ).test( obj.className )) ? obj.className : obj.className.replace( 'error', '' );
            var label = obj.id;
            var labels = fo.getElementsByTagName('label');
            for (var j = 0; j < labels.length; j++) if (labels[j].getAttribute( 'for' ) == label) labels[j].className = labels[j].className.replace( 'error', '' );
        }
    }



-->
