// version: 0.9.2.21
/*
  conditions:
  oField.className.indexOf('integer')           - prueft auf zahlenwert
  oField.className.indexOf('intminmax')         - value muss innerhalb von 2 werten sein, steht in Klammern z.B. intminmax(10,200)
  oField.className.indexOf('agecheck')          - prueft auf volljaehrigkeit
  oField.className.indexOf('minlength')         - nach 'minlength' steht in Klammern die mindestlaenge z.B. minlength(4)
  oField.className.indexOf('numeral')           - es muss eine Zahl enthalten sein (hausnummer)
  oField.className.indexOf('ignore_safetyrule') - bei type 'password': es werden die aSafetyRule ignoriert
  oField.className.indexOf('msisdn')            - beginnt mit "0" oder "49", ist mind. 11-stellig?
  poField.className.indexOf('ignore_setup')     - feld wird bei do_setup_form_elements uebergangen
  poField.className.indexOf('legal_phonenumber')- es darf nicht jede (vorwahl) akzeptiert werden
*/
var bIsSubmit = false; // 2008-06-26 RB, verhindert doppeltes absenden
/* aSafetyRule - so darf ein password nicht lauten */
//a = "1191"
//if (debug) alert(/\d{4}/.test(a));
var aSafetyRule = new Array();
aSafetyRule[0] = '0000';
aSafetyRule[1] = '1111';
aSafetyRule[2] = '2222';
aSafetyRule[3] = '3333';
aSafetyRule[4] = '4444';
aSafetyRule[5] = '5555';
aSafetyRule[6] = '6666';
aSafetyRule[7] = '7777';
aSafetyRule[8] = '8888';
aSafetyRule[9] = '9999';
aSafetyRule[10] = '0123';
aSafetyRule[11] = '1234';
aSafetyRule[12] = '2345';
aSafetyRule[13] = '3456';
aSafetyRule[14] = '4567';
aSafetyRule[15] = '5678';
aSafetyRule[16] = '6789';
aSafetyRule[17] = '7890';
aSafetyRule[18] = '3210';
aSafetyRule[19] = '4321';
aSafetyRule[20] = '5432';
aSafetyRule[21] = '6543';
aSafetyRule[22] = '7654';
aSafetyRule[23] = '8765';
aSafetyRule[24] = '9876';
aSafetyRule[25] = '0987';

// var aMobilePhone_alt = new Array();
// aMobilePhone_alt[0]  = '0150';  //Mobilfunk: Reservierung für Group3G/Quam; derzeit abgeschaltet
// aMobilePhone_alt[1]  = '01505'; // Mobilfunk: Group3G (Quam), derzeit abgeschaltet
// aMobilePhone_alt[2]  = '0151';  //  Mobilfunk: Reservierung für T-Mobile
// aMobilePhone_alt[3]  = '01511'; // Mobilfunk: T-Mobile
// aMobilePhone_alt[4]  = '01515'; // Mobilfunk: T-Mobile
// aMobilePhone_alt[5]  = '0152';  //  Mobilfunk: Reservierung für Vodafone
// aMobilePhone_alt[6]  = '01520'; // Mobilfunk: Vodafone
// aMobilePhone_alt[7]  = '0153';  //  Mobilfunk: (nicht vergeben)
// aMobilePhone_alt[8]  = '0154';  //  Mobilfunk: (nicht vergeben)
// aMobilePhone_alt[9]  = '0155';  //  Mobilfunk: Reservierung für E-Plus 3G Luxb.
// aMobilePhone_alt[10] = '0156';  //  Mobilfunk: Reservierung für Mobilcom
// aMobilePhone_alt[11] = '01566'; // Mobilfunk: Mobilcom
// aMobilePhone_alt[12] = '0157';  //  Mobilfunk: Reservierung für E-Plus
// aMobilePhone_alt[13] = '01570'; // Mobilfunk: Vistream
// aMobilePhone_alt[14] = '01577'; // Mobilfunk: E-Plus
// aMobilePhone_alt[15] = '0158';  //  Mobilfunk: (nicht vergeben)
// aMobilePhone_alt[16] = '0159';  //  Mobilfunk: Reservierung für O2 Germany
// aMobilePhone_alt[17] = '0160';  //  Mobilfunk: Zuteilung für T-Mobile
// aMobilePhone_alt[18] = '0161';  // (nicht vergeben, ehemals analoges C-Netz)
// aMobilePhone_alt[19] = '0162';  //  Mobilfunk: Zuteilung für Vodafone
// aMobilePhone_alt[20] = '0163';  //  Mobilfunk: Zuteilung für E-Plus
// aMobilePhone_alt[21] = '0164';  //  Funkmeldeempfänger: Cityruf (e*message)
// aMobilePhone_alt[22] = '0165';  // (nicht vergeben, ehemals Funkmeldeempfänger Quix)
// aMobilePhone_alt[23] = '0166';  //  Funkmeldeempfänger: Telmi (e*message)
// aMobilePhone_alt[24] = '0167';  //  Bündelfunknetze
// aMobilePhone_alt[25] = '01672'; // Bündelfunknetz: Dolphin Telecom
// aMobilePhone_alt[26] = '0168';  //  Funkmeldeempfänger: Scall (e*message)
// aMobilePhone_alt[27] = '0169';  //  Funkmeldeempfänger: Cityruf, Scall, Skyper (e*cityruf, e*message, e*skyper)
// aMobilePhone_alt[28] = '0170';  //  Mobilfunk: T-Mobile
// aMobilePhone_alt[29] = '0171';  //  Mobilfunk: T-Mobile
// aMobilePhone_alt[30] = '0172';  //  Mobilfunk: Vodafone
// aMobilePhone_alt[31] = '0173';  //  Mobilfunk: Vodafone
// aMobilePhone_alt[32] = '0174';  //  Mobilfunk: Vodafone
// aMobilePhone_alt[33] = '0175';  //  Mobilfunk: T-Mobile
// aMobilePhone_alt[34] = '0176';  //  Mobilfunk: O2 Germany
// aMobilePhone_alt[35] = '0177';  //  Mobilfunk: E-Plus
// aMobilePhone_alt[36] = '0178';  // Mobilfunk: E-Plus
// aMobilePhone_alt[37] = '0179';  // Mobilfunk: O2 Germany

var aMobilePhone = new Array();
aMobilePhone[0]  = '01505';
aMobilePhone[1]  = '01511';
aMobilePhone[2]  = '01512';
aMobilePhone[3]  = '01515';
aMobilePhone[4]  = '01520';
aMobilePhone[5]  = '01522';
aMobilePhone[6]  = '01570';
aMobilePhone[7]  = '01575';
aMobilePhone[8]  = '01577';
aMobilePhone[9]  = '0160';
aMobilePhone[10] = '0162';
aMobilePhone[11] = '0163';
aMobilePhone[12] = '0170';
aMobilePhone[13] = '0171';
aMobilePhone[14] = '0172';
aMobilePhone[15] = '0173';
aMobilePhone[16] = '0174';
aMobilePhone[17] = '0175';
aMobilePhone[18] = '0176';
aMobilePhone[19] = '0177';
aMobilePhone[20] = '0178';
aMobilePhone[21] = '0179';



/* diese Rufnummern duerfen z.B. bei FaF nicht akzeptiert werden */
var aForbiddenPhoneNumber = new Array();
//aForbiddenPhoneNumber[0] = '00..'; //- Ausland - wird speziell abgefragt
aForbiddenPhoneNumber[0]  = '0190'; // Service
aForbiddenPhoneNumber[1]  = '0180'; // Service
aForbiddenPhoneNumber[2]  = '0137'; // Service
aForbiddenPhoneNumber[3]  = '0900'; // Service
// 2007-04-25 RB, neue nummern
aForbiddenPhoneNumber[4]  = '0137'; //XY
aForbiddenPhoneNumber[5]  = '0138'; //XY
aForbiddenPhoneNumber[6]  = '0180'; //XY
aForbiddenPhoneNumber[7]  = '0181';
aForbiddenPhoneNumber[8]  = '0182';
aForbiddenPhoneNumber[9]  = '0183';
aForbiddenPhoneNumber[10] = '0184';
aForbiddenPhoneNumber[11] = '0185';
aForbiddenPhoneNumber[12] = '0186';
aForbiddenPhoneNumber[13] = '0187';
aForbiddenPhoneNumber[14] = '0188';
aForbiddenPhoneNumber[15] = '0189';
aForbiddenPhoneNumber[16] = '0190'; //XY
aForbiddenPhoneNumber[17] = '0700'; //XY
aForbiddenPhoneNumber[18] = '0701'; //XY
aForbiddenPhoneNumber[19] = '0800'; //XY
aForbiddenPhoneNumber[20] = '00800'; //XY
aForbiddenPhoneNumber[21] = '0801'; //XY
aForbiddenPhoneNumber[22] = '0900'; //XY
aForbiddenPhoneNumber[23] = '0901';
aForbiddenPhoneNumber[24] = '0902';
aForbiddenPhoneNumber[25] = '0903';
aForbiddenPhoneNumber[26] = '0904';
aForbiddenPhoneNumber[27] = '0905';
aForbiddenPhoneNumber[28] = '118'; //XY
aForbiddenPhoneNumber[29] = '1180'; //XY

//Satelitentelefonie: '00..'; //- Ausland - wird speziell abgefragt
// aForbiddenPhoneNumber[18] = '008816';
// aForbiddenPhoneNumber[19] = '008817';
// aForbiddenPhoneNumber[20] = '00871';
// aForbiddenPhoneNumber[21] = '00872';
// aForbiddenPhoneNumber[22] = '00873';
// aForbiddenPhoneNumber[23] = '00874';
// aForbiddenPhoneNumber[24] = '0088216';


function check_mobilephone(poField)
{
    // checkt, ob es sich um eine Mobilfunknummer handelt
    var bIsMobilePhone = inArray(poField.value, aMobilePhone);
    
    if (document.getElementById('span_error_mobilphone')!=null)
    {
        document.getElementById('span_error_mobilphone').innerHTML = bIsMobilePhone ? '' : aErrorCause['no_mobilephone'];
    }
    do_mark_field(poField, !bIsMobilePhone);

}

function do_validate_form()
{   
    var oForm                = document.forms[0];
    var bFieldsComplete      = true;
    var oFieldIsMissingFirst = false;
    var aMissingField        = new Array();
    /*var aRequiredFieldNames = oForm.fld_required.value.split(',');*/
    
    if (oForm.fld_required && oForm.fld_required.value.trim() == '')
    {
        //alert(oForm.fld_required.maxLength)
        // sicherheitsmechanismus, hidden field wurde mit js geleert !!!??
        alert("Bitte Seite neu laden!");
        return;
    }
       
    /* 1. alle fields durchgehen */
    for(var i=0,j=0; i<oForm.elements.length;i++)
    {
        var oField     = oForm.elements[i];
        oField.isWrong = false;
        /* 2. momentanes field auf required pruefen */
        
        if (oField.name.indexOf('fld_') != -1 && (oForm.fld_required.value.indexOf(oField.name) != -1 /*|| (oField.type == 'text' && oField.value.trim() != '')*/ ) )
        {
            /* required fields stehen jeweils im hidden field am anfang der seite */
            
            var bFieldIsMissing = false;
            
            switch (oField.type)
            {
                case 'text':
                case 'textarea':
                case 'password':
                case 'hidden':
                {
                    var sTmpValue = oField.value.trim();
                    
                    var bMisstake1 = sTmpValue == ''; // darf nicht leer sein
                    var bMisstake2 = (oField.name.indexOf('email') != -1 && !checkEmail(sTmpValue)); // muss valide email-adresse sein
                    var bMisstake3 = oField.className.indexOf('integer') != -1 && /\D/.test(sTmpValue); // muss integer sein
                    var bMisstake4 = oField.name.indexOf('_wiederholen') != -1 && oField.value != oForm.elements[oField.name.replace('_wiederholen', '')].value; // wiederholungsfeld - mit ersteingabe vergleichen
                    
                    var bIsError = false;
                    if (oField.className.indexOf('minlength') != -1)
                    {
                        var iPosPre = oField.className.indexOf('(') + 1;
                        var iPosSuf = oField.className.indexOf(')');
                        var iFieldLength = oField.className.substring(iPosPre, iPosSuf);
                        bIsError = oField.className.indexOf('minlength') != -1 && sTmpValue.length < iFieldLength;
                        oField.errorinfo = bIsError && !bMisstake1? ' (min. '+iFieldLength+')' : '';
                    }
                    var bMisstake5 = bIsError;
                    
                    var bMisstake6 = oField.type == 'password' && oField.className.indexOf('ignore_safetyrule') == -1 && inArray(sTmpValue, aSafetyRule);// nicht konform mit Sicherheitsregeln fuer Passwoerter 
                    var bMisstake7 = oField.className.indexOf('numeral') != -1 && !/.*[0-9]+.*/.test(sTmpValue); // muss eine zahl enthalten
                    var bMisstake8 = oField.name.indexOf('fld_pkk') != -1 && oForm.fld_required.value.indexOf('fld_pkk_1') != -1 && oForm.fld_required.value.indexOf('fld_pkk_2') != -1 && oForm.fld_pkk_1.value == oForm.fld_pkk_2.value; // pkk_1 muss ungleich pkk_2 sein

                    if (oField.className.indexOf('intminmax') != -1)
                    {
                        var iPosPre = oField.className.indexOf('(') + 1;
                        var iPosSuf = oField.className.indexOf(')');
                        var sSubstr = oField.className.substring(iPosPre, iPosSuf);
                        var aMinMax = sSubstr.split(',');
                    }
                    var bMisstake9 = oField.className.indexOf('intminmax') != -1 && (Number(sTmpValue) < aMinMax[0] || Number(sTmpValue) > aMinMax[1]); // zahl muss innerhalt einer min- und maxgroesse sein

                    var bMisstake10 = oField.className.indexOf('msisdn') != -1 && ((oField.value.substr(0,1) != '0' && oField.value.substr(0,2) != '49') || oField.value.length < 11); // msisdn muss mit 0 bzw 49 beginnen, und mind. 11 zeichen lang sein
                    
                    var bIsError = false;
                    if (oField.className.indexOf('legal_phonenumber') != -1)
                    {
                        if (sTmpValue.substr(0,2) == '00' || sTmpValue.substr(0,1) != '0')
                        {
                            bIsError = true;
                        }
                        else
                        {
                            for (e in aForbiddenPhoneNumber)
                            {
                                if (sTmpValue.indexOf(aForbiddenPhoneNumber[e]) != -1)
                                {
                                    bIsError = true;
                                    break;
                                }
                            }
                        }
                    }
                    var bMisstake11 = bIsError;
                    
                    if ( 
                         bMisstake1  ||
                         bMisstake2  ||
                         bMisstake3  ||
                         bMisstake4  ||
                         bMisstake5  ||
                         bMisstake6  ||
                         bMisstake7  ||
                         bMisstake8  ||
                         bMisstake9  ||
                         bMisstake10 ||
                         bMisstake11
                       )
                    {
                        oField.isWrong  = true;
                        bFieldIsMissing = true;

                        oField.error_cause =
                        bMisstake1  ? 'is_empty' :
                        bMisstake2  ? 'wrong_email' :
                        bMisstake3  ? 'no_integer' :
                        bMisstake4  ? 'wrong_repitition' :
                        bMisstake5  ? 'wrong_length' :
                        bMisstake6  ? 'password_unsafe' :
                        bMisstake7  ? 'without_number' :
                        bMisstake8  ? 'pkk1_equal_pkk2' :
                        bMisstake9  ? 'outside_minmax' :
                        bMisstake10 ? 'no_msisdn' :
                        'illegal_phonenumber';
                    }
                    
                    break;
                }
                
                case 'radio':
                {           
                    var bOneIsChecked   = false;
                    var oRadioboxParent = oForm.elements[oField.name]; // virtueller parent, alle radioboxen gehoeren ja zu einem objekt
                    
                    if (oRadioboxParent.ignore_checking) continue;
                    
                    if (typeof(oRadioboxParent.length) == 'undefined') //wenn nur eine radiobox da ist, gibt es keine length!!!
                    {
                        bOneIsChecked = true;
                    }
                    
                    for(var iRadio=0; iRadio<oRadioboxParent.length;iRadio++)
                    {
                        if (oRadioboxParent[iRadio].checked)
                        {
                            bOneIsChecked = true;
                            oRadioboxParent.ignore_checking = true; /* hierdurch wissen alle zugehoerigen radio's, dass schon einer gechecked ist */
                            break;
                        }
                    }
                    
                    if (!bOneIsChecked)
                    {
                        oField.isWrong  = true;
                        bFieldIsMissing = true;
                        oField.error_cause = 'radio_not_checked';
                    }
                    
                    break;
                }
                
                case 'checkbox':
                {
                    if (!oField.checked)
                    {
                        oField.isWrong     = true;
                        oField.error_cause = 'not_checked';
                        bFieldIsMissing    = true;
                        
                        // pruefen ob ich vielleicht zu einer gruppe gehoere (name ist dann gleich)
                        for (var iii=0; iii<document.getElementsByName(oField.name).length; iii++)
                        {
                            if (document.getElementsByName(oField.name)[iii].checked)
                            {
                                oField.isWrong  = false;
                                bFieldIsMissing = false;
                                oField.error_cause = '';
                            }
                        }
                    }

                    break;
                }

                case 'select-one':
                {
                    // Erweiterung für Anrede mit Selectbox: 
                    if ( oField.name == 'fld_anrede' || oField.name == 'fld_abweichender_nutzer_anrede' )
                    {
                        // Erweiterung für bestellen3.inc.php
                        if(oField.value=="")
                        {
                            // alert("Select Feld " + oField.name + " ist undefined");
                            bFieldIsMissing = true;
                            oField.isWrong = true;
                            oField.error_cause = 'no_selection';
                        }
                    } 
                    else
                    {
                        var bDate          = oField.name.indexOf('tag') != -1 || oField.name.indexOf('monat') != -1 || oField.name.indexOf('jahr') != -1;
                        var bDateNotSelect = oField.value.indexOf('TT') != -1 || oField.value.indexOf('MM') != -1 || oField.value.indexOf('JJJJ') != -1;
                        
                        var bAgeCheck      = oField.className.indexOf('agecheck') != -1; // ist nur bei Tag vorhanden
                        var bIsAdult       = false;
                        
                        if (bAgeCheck)
                        {                
                            var bDateSiblingsNotSelect =
                                (oField.value.indexOf('TT') == -1 && oForm.elements[(i+1)].value.indexOf('MM') != -1 || oForm.elements[(i+2)].value.indexOf('JJJJ') != -1)
                                || (oField.value.indexOf('MM') == -1 && oForm.elements[(i-1)].value.indexOf('TT') != -1 || oForm.elements[(i+1)].value.indexOf('JJJJ') != -1)
                                || (oField.value.indexOf('JJJJ') == -1 && oForm.elements[(i-2)].value.indexOf('TT') != -1 || oForm.elements[(i-1)].value.indexOf('MM') != -1)
                            ;
                            // zusammengehoerige felder sind noch nicht komplett!
                            // die fehlende Felder melden dann einen fehler, nicht dieses feld
                            // erst dann auf agecheck testen
                            if (!bDateNotSelect && bDateSiblingsNotSelect) continue;
                        
                            /* geburtsdatum mit aktuellen datum vergleichen und auf volljaehrigkeit pruefen */
                            var sUserD = parseInt(oForm.elements[i].value);
                            var sUserM = parseInt(oForm.elements[(i+1)].value);
                            var sUserY = oForm.elements[(i+2)].value;
                            
                            var oDate = new Date();
                            var sNowD = oDate.getDate();
                            var sNowM = oDate.getMonth() + 1;// zaehlung beginnt bei 0!
                            var sNowY = oDate.getFullYear();
                            
                            var sMinAge          = 18;// mindestalter
                            var bAdultCondition1 = sUserY <  (sNowY - sMinAge);
                            var bAdultCondition2 = sUserY == (sNowY - sMinAge) && sUserM <  sNowM;
                            var bAdultCondition3 = sUserY == (sNowY - sMinAge) && sUserM == sNowM && sUserD <= sNowD;
                            
                            bIsAdult = bAdultCondition1 || bAdultCondition2 || bAdultCondition3;
                        }
                        
                        if (bDate && bDateNotSelect || bAgeCheck && !bIsAdult)
                        {
                            bFieldIsMissing = true;
                            oField.isWrong  = true;
                            
                            oField.error_cause = bDate && bDateNotSelect ? 'wrong_date' : 'not_adult';
                        }
                        
                        if (!bDate && !bAgeCheck)
                        {
                            if (oField.value == "") 
                            {
                                bFieldIsMissing = true;
                                oField.isWrong = true;
                                oField.error_cause = 'no_selection';
                            }
                        }
                        //alert(oField.name+" :pruef: "+oField.isWrong)
                    }
                    break;
                }
            }
            do_mark_field(oField,bFieldIsMissing);
            
            if (bFieldIsMissing)
            {
                if (bFieldsComplete)
                {
                    /* das erste feld merken -> focus */
                    oFieldIsMissingFirst = oField;
                }
                
                bFieldsComplete = false;
                
                aMissingField[j++] = oField;
            }
        }
        
        /* 3. field-type exceptions behandeln */
        if (0 && !bFieldIsMissing && oField.type == 'checkbox')
        {
            if (oField.name.indexOf('fld_') != -1)
            {
                if (!oField.checked)
                {
                    /* damit checkbox immer abgeschickt wird, und ggf. db eintrag ueberschrieben wird */
                    oField.checked = true;
                    oField.value   = '';
                }
            }
        }
    }

    /* 4. abschicken */
    if (bFieldsComplete)
    {
        /*---- content abdecken ----*/
        if (document.getElementById('div_content_cover'))
        {
            var oDiv = document.getElementById('div_content_cover');
            var oFrm = document.getElementById('frm_content_cover');
    
            if(oBrowser.sName == 'ie')
            {
                oDiv.style.position    = 'absolute';
                oDiv.style.top         = document.body.scrollTop + 'px';
                document.body.onscroll = function () { oDiv.style.top = document.body.scrollTop + 'px'; }
            }
            else
            {
                oDiv.style.position = 'fixed';
                oDiv.style.top      = '0px'; // + (window.pageYOffset ? window.pageYOffset : document.body.scrollTop) + 'px';
            }
            oDiv.style.visibility = 'visible';
            if (oBrowser.sName == 'ie') oFrm.style.display    = 'block';
        }
        /*----/content abdecken ----*/
        
        if (!bIsSubmit)
        {
            oForm.submit();
            return false;
        }
    }
    else // error
    {
        var sError = '<b class="error_headline">'+txt_error+' ('+aMissingField.length+' Fehler):</b><br /><br />';
        sError += '<table cellpadding="0" cellspacing="0" border="0">';
        for (e in aMissingField)
        {
            sError += '<tr>';
            sFieldName  = aMissingField[e].name;
            // z.B. angabe der minlength
            var sExtraInfo = typeof(aMissingField[e].errorinfo) != 'undefined' ? aMissingField[e].errorinfo : '';
            sErrorCause = aErrorCause[aMissingField[e].error_cause] + sExtraInfo; 
            //sError += sFieldName + ' - '+sErrorCause+'<br />';
            sError += '<td valign="top">' + aFieldName[sFieldName] + ':&nbsp;&nbsp;</td><td valign="top">' + sErrorCause + '</td>';
            sError += '</tr>';
        }
        sError += '</table>';

        document.getElementById('span_input_error').innerHTML = sError;
        document.getElementById('div_input_error').style.display = 'block';
        
        //if (oFieldIsMissingFirst.type != 'hidden') oFieldIsMissingFirst.focus();
        //Wenn Fehlermeldungen auftauchen, soll der Kunde zum Seitenbeginn geführt werden, damit er die FM dann auch sieht
        window.scrollTo(0, 0);

        /* muss auf error noch speziell reagiert werden? */
        if (typeof(do_on_validation_error) != 'undefined') do_on_validation_error();
        
        return false;
    }
}

function do_setup_form_elements()
{
    // um initial errror-icon(trans.gif) zu erstellen

    var oForm = document.forms[0];
        
    for(var i=0; i<oForm.elements.length;i++)
    {
        var oField = oForm.elements[i];
        
        if (oField.name.indexOf('fld_') != -1)
        {
            if (
                oField.name.indexOf('fld_') != -1 &&
                oField.name != 'fld_required' &&
                oField.name != 'fld_login_msisdn' &&
                oField.name != 'fld_login_password' &&
                oField.name != 'fld_login_typ' &&
                oField.name != 'fld_login_msisdn_instant' &&
                oField.name != 'fld_login_password_instant'
               )
            {
                do_mark_field(oField,false);
            }
        }
    }
}

var error_icon_name='/icon_error.gif';
var ok_icon_name='/haekchen_rund.gif';


function do_mark_field(poField,pbIsMissing)
{
    var oForm    = document.forms[0];
    var oParent  = poField.parentNode; // div drumrum
    var bIsGroup = oParent.className.indexOf('div_fld_group') != -1;
    
    if (typeof(poField.parentNode.oIcon) == 'undefined')
    {
        // errror-icon erstellen und darstellen
        // poField.parentNode ist immer das div drumrum
        var oImg                 = poField.parentNode.appendChild(document.createElement("img"));
        poField.parentNode.oIcon = oImg;
        oImg.id                  = poField.name+'_icon_error';
        oImg.style.width         = '15px';
        oImg.style.height        = '15px';
        oImg.style.marginLeft    = '2px';
        oImg.style.zIndex        = '3';
    
        if (poField.type == 'radio')
        {
            var oRadioboxParent = oForm.elements[poField.name];
            poField.oImg        = oImg;
            
            if (poField.checked || oRadioboxParent.bIsSetup || poField.className.indexOf('ignore_setup') != -1)
            {
                // radioboxen sind nicht abwaehlbar (eine is immer gechecked)!!!
                // wenn ein radio gechecked ist, kann er nicht mehr unausgewählt sein, icon nicht notwendig
                if (oRadioboxParent.length > 0)
                {
                    for (var i=0; i<oRadioboxParent.length; i++)
                    {
                        if (oRadioboxParent[i].oImg) oRadioboxParent[i].oImg.style.display = 'none';
                    }
                }
                else poField.oImg.style.display = 'none';
                
                oRadioboxParent.bIsSetup = true;
                return;
            }
        }
    }
    else var oImg = poField.parentNode.oIcon;
    
    if (bIsGroup)
    {
        // bei gruppierungen soll nur ein fehlt-icon erscheinen (Geburtsdatum), sobald einer falsch ist sind alle falsch
        
        for (var ii=0;ii<=oParent.childNodes.length;ii++)
        {
            //if (oParent.childNodes[ii] && oParent.childNodes[ii].tagName == 'SELECT')
            if (oParent.childNodes[ii])
            {
                //alert("markieren: "+oParent.childNodes[ii].name+" "+oParent.childNodes[ii].isWrong)
                if (oParent.childNodes[ii].isWrong)
                {
                    pbIsMissing = true;
                    break;
                }
            }
        }
    }
    
    if (oImg)
      oImg.src = pbIsMissing ? sRoot+'/images/'+mandant+error_icon_name: sRoot+'/images/trans.gif';
}
