jQuery(document).ready(function() {
/*
 * Wenn Jvascript deaktiviert ist wird das Formular ausgeblendet
 */
    jQuery('.nonJavaScript').show();
/*
 * Versteckte Felder anzeigen auf der Startseite (Auswahl der Kinder)
 */
var versichern = jQuery('#versichern'),
    adult = jQuery('input#versichern-e[type="radio"]'),
    adultAndChild = jQuery('input#versichern-k[type="radio"]'),
    child = jQuery('input#versichern-ek[type="radio"]');
    
    function showVersElems() {
    	if(versichern.val() == 'e' || adult.is(':checked')) {
            jQuery('.persData').show();
        }
        else {
            jQuery('.persData').hide();
        }
        if(versichern.val() == 'e' || versichern.val() == 'ek' || adult.is(':checked') || adultAndChild.is(':checked')) {
            jQuery('.vnHelp').css({
                'display':''
            });
        } else {
            jQuery('.vnHelp').css({
                'display':'none'
            });
        }
        if(versichern.val() == 'ek' || versichern.val() == 'k' || adultAndChild.is(':checked') || child.is(':checked')) {
            jQuery('.versPers, .persData, .firstChild').show();
            jQuery('#kinder-versicherteKinder-1, #kinder-versicherteKinder-2').click(function() {
                if(jQuery('#kinder-versicherteKinder-1').is(':checked')) {
                    jQuery('div.firstChild').show();
                }
                else {
                    jQuery('div.firstChild').hide();
                }
                if(jQuery('#kinder-versicherteKinder-2').is(':checked')) {
                    jQuery('div.secondChild, div.firstChild').show();
                }
                else {
                    jQuery('div.secondChild').hide();
                }
                if(jQuery('#kinder-versicherteKinder-1').is(':checked')) {
                    jQuery('#kinder-geschlecht2-0, #kinder-geschlecht2-1').removeAttr('checked');
                    jQuery('#kinder-geburt2').val('');
                }
            });
        }
        else {
            jQuery('.versPers ,div.firstChild, div.secondChild').hide();
            jQuery('#kinder-versicherteKinder-1, #kinder-versicherteKinder-2, #kinder-geschlecht1-0, #kinder-geschlecht1-1, #kinder-geschlecht2-0, #kinder-geschlecht2-1').removeAttr('checked');
            jQuery('#kinder-geburt1, #kinder-geburt2').val('');
        }
        jQuery('#vn-berufsstatus').change(function() {
            if(jQuery(this).val() == 4 || jQuery(this).val() == 5) {
                jQuery('.beamter').show();
            } else {
                if (jQuery.browser.msie && jQuery.browser.version == '6.0') {
                    jQuery('.beamter').hide();
                } else {
                    jQuery('.beamter').removeAttr('style');
                }
            }

            /*
             * Für Splittest, Bug 80909. Hat bei den Standard-Templates keine Auswirkung,
             * da Klasse nicht definiert.
             */
            if(jQuery(this).val() == 1 || jQuery(this).val() == 19 || jQuery(this).val() == 11) {
                jQuery('.jahreseinkommen').show();
            } else {
                jQuery('#vn-jahreseinkommen').val("");
                if (jQuery.browser.msie && jQuery.browser.version == '6.0') {
                    jQuery('.jahreseinkommen').hide();
                } else {
                    jQuery('.jahreseinkommen').removeAttr('style');
                }
            }
        });


        jQuery('#nichtdeutsch').change(function() {
            if(jQuery(this).val() == 'ja') {
                jQuery('.nationalitaetForm').show();
                jQuery('.nationalitaetForm input#nationalitaet').val('');
                jQuery('.nationalitaetForm input#nationalitaet').keyup(function() {
                    jQuery('#vp_nationalitaet_Person1, #vp_nationalitaet_Person2, #vp_nationalitaet_Person3').val(jQuery(this).val());
                });
            }
            else {
                jQuery('.nationalitaetForm').removeAttr('style');
                jQuery('.nationalitaetForm input#nationalitaet').val('deutsch');
            }
        });
    };
    
    //Nur Anfrage- und Antragsformular: Felder dynamisch ein-/ausblenden
    if (jQuery('input[name=form]').val() == "anfrage" || jQuery('input[name=form]').val() == "antrag" || jQuery('input[name=form]').val() == "personen-data") {
        jQuery('#versichern-e, #versichern-k, #versichern-ek').click(function() {
            showVersElems();
        });
        
        showVersElems();
        
        if(jQuery('#kinder-versicherteKinder-2').is(':checked')) {
            jQuery('div.firstChild, div.secondChild').show();
        }
    }

/*
 * Tooltipp anzeigen !!STARTSEITE!!
 */ 
    jQuery('.pkvLabels .info').mouseover(function(e) {
        var leftPos = jQuery('.pkvLabels .info').offset().left + 20 - jQuery('.pkvLabels').offset().left,
        toolTippCont = jQuery('.infoCont'),
        contenWidth = jQuery(window).width() + jQuery(window).scrollLeft() - leftPos - toolTippCont.width();
        if(contenWidth > 0) {
            jQuery(this).next().next(toolTippCont).show().css({
                'left' : leftPos,
                'top' : '2px'
            });
        }
        else {
            jQuery(this).next().next(toolTippCont).show().css({
                'left' : leftPos - toolTippCont.width() - 42
            }).addClass('leftTipp');
        }
    }).mouseout(function(e) {
        if(!jQuery('.infoCont').hasClass('leftTipp') && e.pageX < jQuery('.pkvLabels .info').offset().left + jQuery('.pkvLabels .info').width() 
         || jQuery('.infoCont').hasClass('leftTipp') && e.pageX > jQuery('.pkvLabels .info').offset().left) {
            var toolTippCont = jQuery('.infoCont');
            jQuery(this).next().next(toolTippCont).hide().removeClass('leftTipp');
        }
    });
    jQuery('.infoCont').mouseleave(function() {
        jQuery(this).hide().removeClass('leftTipp');
    });
/*
 * Tooltipp anzeigen !!RESULTHEADER!!
 */
    jQuery('.pkvConditions #helpLink').live('mouseover', function(e) {
        var leftPos = jQuery('.pkvConditions #helpLink').offset().left;
        jQuery('.infoCont').show().css({
            'left' : leftPos + 35,
            'top' : '6px',
            'position' : 'absolute',
            'z-index' : '9999'
        });
        
    }).live('mouseout', function(e) {
        if(e.pageX < jQuery('.pkvConditions #helpLink').offset().left + jQuery('.pkvConditions #helpLink').width()) {
            jQuery('.infoCont').removeAttr('style');
        }
    });
    jQuery('.infoCont').live('mouseleave', function() {
        jQuery(this).removeAttr('style');
    });
/*
 * Tooltipp anzeigen !!ERGEBNISSEITE!!
 */
    jQuery('div.total span.info').live('mouseover', function(e) {
        enterMouse = 1;
        var leftPos = jQuery('div.total span.info').offset().left + 25,
        topPos = jQuery('div.total span.info').offset().top - 7,
        fadingTippCont = jQuery('.pkvTooltipp'),
        spaceRight = jQuery(window).width() + jQuery(window).scrollLeft() - leftPos - fadingTippCont.width();
        if(spaceRight > 0) {
            jQuery(this).next().next('.pkvTooltipp').show().css({
                'left' : leftPos - jQuery('div.total').offset().left,
                'top'  : topPos - jQuery('div.total').offset().top
            });
            e.stopPropagation();
        }
        else {
            jQuery(this).next().next('.pkvTooltipp').show().css({
            'left' : leftPos - fadingTippCont.width() - 55 - jQuery('div.total').offset().left,
            'top'  : topPos - jQuery('div.total').offset().top
            }).addClass('leftTipp');
            e.stopPropagation();
        }
    }).live('mouseout', function(e) {
        if(!jQuery('.pkvTooltipp').hasClass('leftTipp') && e.pageX < jQuery('div.total span.info').offset().left + jQuery('div.total span.info').width()
         || jQuery('.pkvTooltipp').hasClass('leftTipp') && e.pageX > jQuery('div.total span.info').offset().left) {
            jQuery(this).next().next('.pkvTooltipp').hide().removeAttr('style').removeClass('leftTipp');
        }
        });
    jQuery('.pkvTooltipp').live('mouseleave', function() {
        jQuery(this).hide().removeAttr('style').removeClass('leftTipp');
    });

/*
 * RefineForm anzeigen
 */
    jQuery('.showrefineBtn').live('click', function() {
            jQuery('.pkvSlideform, .refineHeader').show();
            jQuery(this).addClass('active');
    });
    jQuery('.showrefineBtn.active').live('click', function() {
        jQuery('.pkvSlideform, .refineHeader').hide();
        jQuery(this).removeClass('active');
    });
    if (jQuery.browser.msie && jQuery.browser.version == '6.0' || jQuery.browser.msie && jQuery.browser.version == '7.0'){
        jQuery('.pkvForm input, .pkvForm textarea, .pkvForm select').blur(function() {
            jQuery(this).addClass('bold');
        });
    }
    else {
        jQuery('.pkvForm input, .pkvForm textarea, .pkvForm select').change(function() {
            jQuery(this).addClass('bold');
        });
    }
    if(jQuery('.pkvForm input, .pkvForm textarea').val() != '') {
        jQuery('.pkvForm input, .pkvForm textarea').addClass('bold');
    }


/*
 * SummarySlideForm anzeigen und ausblenden (kurze Antragsstrecke letzte Seite)
 */
    var hideRefine = jQuery('.pruductSummarySlideForm, .pruductSummaryForm');
    if (!jQuery.browser.msie || (jQuery.browser.msie && jQuery.browser.version != '6.0')){
        hideRefine.addClass('itsHide');
        jQuery('.productSummaryBottom .showrefineBtn').live('click', function() {
            jQuery('.summaryShow').show();
            jQuery(this).addClass('active');
            hideRefine.removeClass('itsHide');
        });
        jQuery('.productSummaryBottom .showrefineBtn.active').live('click', function() {
            jQuery('.summaryShow').hide();
            jQuery(this).removeClass('active');
            hideRefine.addClass('itsHide');
        });
    }
    else {
        hideRefine.addClass('active');
        jQuery('button.showrefineBtn').hide();
    }
    eventShowInfo();
    
    var labelWidth = (jQuery('.pkvLabels').css('width')) ? jQuery('.pkvLabels').css('width').replace('px','') : 0;
    var maxDescriptionWidth = jQuery('.pkvForm').width() - labelWidth;
    jQuery('p.description').css('width', (maxDescriptionWidth - maxDescriptionWidth/4) + 'px');
    
/*
 * lange Antragsstrecke versteckte Felder einblenden (zB. Gesundheitsfragen)
 */
    jQuery('select').change(function() {
        if(window.pkv_depedencies) {
            var dependentElems = window.pkv_depedencies[this.id];
            if (dependentElems) {
                for (var val in dependentElems) {
                    for (var i = 0; i < dependentElems[val].length; i++) {
                        if (jQuery(this).val() == val) {
                            jQuery('#' + dependentElems[val][i]).parent().parent().show();
                        } else {
                            jQuery('#' + dependentElems[val][i]).parent().parent().removeAttr('style');
                        }
                    }
                }
            }
        }
    });
    
/*
 * !! Validation fürs gesamte Formular !!
 */
    jQuery('.pkvFormAntrag, #antrag').submit(validate);
    if(jQuery.browser.msie && jQuery.browser.version == '6.0' || jQuery.browser.msie && jQuery.browser.version == '7.0') {
        jQuery('.pkvFormAntrag input, .pkvFormAntrag textarea, .pkvFormAntrag select, #antrag input, #antrag textarea, #antrag select').blur(function() {
            validateWithoutSubmit(this.id);
        });
    }
    else{
        jQuery('.pkvFormAntrag input, .pkvFormAntrag textarea, .pkvFormAntrag select, #antrag input, #antrag textarea, #antrag select').change(function() {
            validateWithoutSubmit(this.id);
        });
    }
    
/*
 * Datepickeraufruf (min-, max-, defaultDate)
 */
    if (jQuery.datepicker) {
        var body = jQuery('body'),
            datepickerOptions = window.pkv_datepicker_options;

        jQuery.datepicker.setDefaults({
            changeYear: true,
            changeMonth: true,
            duration: 'fast'
        });

        if (datepickerOptions) {
            for(var fieldName in datepickerOptions) {
                if (fieldName != 'vn[vertragsbeginn]') {
                    jQuery(document.getElementsByName(fieldName)).datepicker(datepickerOptions[fieldName]);
                }
            }
        }

        body
            .children()
            .click(function () {
                var node = jQuery(this),
                    datepickerCont = body.find('#ui-datepicker-div');

                if (node.attr('id') != 'ui-datepicker-div') {
                    jQuery.datepicker._hideDatepicker();
                }
            });
    }
    /*
     * Submit Button frisieren für IE6
     */
    
    jQuery('#fullAntrag button[name="next"]').click(function() {
        jQuery(this.form).append('<input type="hidden" name="fullAntrag_goto_direction" value="1" />');
    });
});
/*
 * Popupeventhandler hinzufügen (simpleDialog, Tarifinformation)
 */
function eventShowInfo() {
    var linkOff;
    if(jQuery('.tarifInfo a, #antragPopup').length != 0) {
        jQuery('.tarifInfo a, #antragPopup').click(function() {
            linkOff = jQuery(this).offset().top;            
        }).simpleDialogJson({
            height: jQuery(window).height()-60,
            width: 600,            
            useTitleAttr: true,
            footer:true,
            showCloseLabel: false,
            open: function(){
                var thisATag = jQuery(this).find('.sdHeader').text().split('schließen');
                var iframeBox = jQuery('#sdContainer').prev().prev().attr('id');                
                if(iframeBox == 'iframeBox') { 
                    jQuery('.sdContent').css({
                        'height' : (jQuery('.sdContent').height()>380)? '380px' : jQuery('.sdContent').height(),
                        'margin-bottom' : '10px'
                    });
                    jQuery('#sdContainer').css({
                        'top' : (linkOff < (jQuery('.sdContent').height() + 40) )? linkOff : linkOff-(jQuery('.sdContent').height()+40),
                        'height' : jQuery('.sdContent').height() + jQuery('.sdHeader').height() + 15 + 'px',
                        'left' : '0'
                    });        
                }
                else {
                    jQuery('.sdContent').css({
                        'height' : (jQuery('.sdContainer').height()-jQuery('.sdHeader').height()-10)+'px',
                        'margin-bottom' : '10px'
                    });
                }
            }
        });
    }
}

/**
 * wird nach dem ersten Submit-Versuch auf true gesetzt - erst dann soll die Live-Validierung aktiv werden
 */
var submitFailed = false;

/*
 * Validationsmethode definieren
 */
function validate() {
    jQuery(".antragAttentionNichtPkvFaehig").remove();
    var successResponseCount = 0; //Anzahl der zurückgelieferten Erfolgsmeldungen
    jQuery.getJSON(window.validateUrl, jQuery('.pkvForm').serializeArray(), function(json) {
        jQuery('.errors, .iconCont').remove();
        if (json.result != "OK") {
            displayErrors(json);
            jQuery('html, body').animate(
                    {scrollTop: jQuery(jQuery(".errors label")[0]).offset().top},
                    500
            );
        } else if (++successResponseCount == 2 || !window.pkvCheckUrl) { //wenn Formularvalidierung + kannPkv ok ist...
            jQuery(".pkvForm").unbind('submit',validate);
            jQuery(".pkvSubmitBtn").click();
        }
    });

    if (window.pkvCheckUrl && (jQuery('#vn-jahreseinkommen').val() != "" || !jQuery('.jahreseinkommen').is(':visible'))) {
        var params = jQuery('.pkvForm').serializeArray();
        params.push({'name': "zvurl", 'value': window.zvUrl});
        jQuery.getJSON(window.pkvCheckUrl, params, function(json) {
            if (!json.kannPkv) {
                jQuery('.pkvHeader').before('<div class="antragAttentionNichtPkvFaehig antragAttentionSecond">' + json.message + '</div>');
                jQuery('html, body').animate(
                        {scrollTop: jQuery(".antragAttentionNichtPkvFaehig").offset().top},
                        500
                );
            }
            else if (++successResponseCount == 2) { //wenn Formularvalidierung + kannPkv ok ist...
                jQuery(".pkvForm").unbind('submit',validate);
                jQuery(".pkvSubmitBtn").click();
            }
        });
    }
    
    submitFailed = true;
    
    return false;
}

function validateWithoutSubmit(modifiedField) {
    if (submitFailed) {
        showValidationIndicator(modifiedField);
        jQuery(".antragAttentionNichtPkvFaehig").remove();
        jQuery.getJSON(window.validateUrl, jQuery('.pkvForm').serializeArray(), function(json) {
            displayErrors(json, modifiedField);
        });
    }
    return false;
}

function initValidationContainers(fieldid) {
    if (!jQuery('*[id^=' + fieldid + ']:first').closest('div').find('.errors').length) {
        jQuery('*[id^=' + fieldid + ']:first').closest('div').prepend('<div class="errors"></div>');
        jQuery('*[id^=' + fieldid + ']:first').closest('div').find('.errors').after('<div style="position:relative" class="iconCont"></div>');
    }
}

function displayErrors(json, optFieldId) {
    var throbberRemoved = false;
    if (json.errors) {
        jQuery.each(json.errors, function(key,vals){
            jQuery.each(vals,function(k,v){
                if (!optFieldId || optFieldId == key) {
                    initValidationContainers(key);
                    
                    var leftPosInput = jQuery('*[id^=' + key + ']:first').offset().left - 
                    jQuery('*[id^=' + key + ']:first').closest('div').find('.iconCont').offset().left,
                    inputHeight = jQuery('*[id^=' + key + ']:first').height(),
                    closestDiv = jQuery('*[id^=' + key + ']:first').closest('div');
                    closestDiv.find('.iconCont > .validateIcon_' + key).remove();
                    throbberRemoved = true;
                    
                    var el = document.getElementById(key) || document.getElementsByName(key)[0];
                    if(el && el.type != "radio" && el.type != "checkbox") {
                        closestDiv.find('.iconCont').append('<span style="left:'+leftPosInput+'px" class="errorIcon' + ' ' +'validateIcon_' + key + '">&nbsp;</span>');
                    }
                    if (closestDiv.find('.errors .errorLabel_' + key).length == 0) {
                        closestDiv.find('.errors').append('<label class="errorLabel_' + key + '" style="display:block" for="' + key + '">' + v + '</label>');
                    }
                }
            });
        });
    }
    
    /*
     * Wenn alles OK ist, liefert die Schnittstelle keine Liste der gültigen Felder
     * trotzdem muss das aktuelle Feld als valid markiert werden
     */
    if (json.result == "OK" && optFieldId) {
        json.validFields = new Array();
        json.validFields.push(optFieldId);
    }
    
    if (json.validFields) {
        jQuery.each(json.validFields, function(index, fieldid){
            if (!optFieldId || optFieldId.indexOf(fieldid) == 0) {
                initValidationContainers(fieldid);
                
                var leftPosInput = jQuery('*[id^=' + fieldid + ']:first').offset().left - 
                jQuery('*[id^=' + fieldid + ']:first').closest('div').find('.iconCont').offset().left,
                inputHeight = jQuery('*[id^=' + fieldid + ']:first').height(),
                inputWidth = jQuery('*[id^=' + fieldid + ']:first').width();
                jQuery('*[id^=' + fieldid + ']:first').closest('div').find('.errors .errorLabel_' + fieldid).remove();
                jQuery('*[id^=' + fieldid + ']:first').closest('div').find('.iconCont > .validateIcon_' + fieldid).remove();
                throbberRemoved = true;
                if (jQuery('#' + fieldid + ':not([type="radio"])').length && jQuery('#' + fieldid + ':not([type="checkbox"])').length) {
                    jQuery('*[id^=' + fieldid + ']:first').closest('div').find('.iconCont').append('<span style="left:' + (leftPosInput+inputWidth) + 'px" class="validIcon' + ' ' +'validateIcon_' + fieldid + '">&nbsp;</span>');
                }
            }
        });
    }
    
    if (!throbberRemoved && optFieldId) {
        jQuery('*[id^=' + optFieldId + ']:first').closest('div').find('.iconCont > .validateIcon_' + optFieldId).remove();
    }
}
/*
 * Bei Validation wird ajax Loader angezeigt
 */
function showValidationIndicator(fieldID) {
    initValidationContainers(fieldID);
    
    var leftPosInput = jQuery('*[id^=' + fieldID + ']:first').offset().left - 
    jQuery('*[id^=' + fieldID + ']:first').closest('div').find('.iconCont').offset().left,
    inputHeight = jQuery('*[id^=' + fieldID + ']:first').height(),
    closestDiv = jQuery('*[id^=' + fieldID + ']:first').closest('div');
    
    if(jQuery('#' + fieldID + ':not([type="radio"], [type="checkbox"])').length){
        closestDiv.find('.iconCont > .validateIcon_' + fieldID).remove();
        closestDiv.find('.iconCont').append('<span style="left:'+leftPosInput+'px" class="busyIcon' + ' ' +'validateIcon_' + fieldID + '">&nbsp;</span>');
    }
};
