// form; check for mandatory fields
function checkMandatories(formName,alertText){
    var mw = $(".focusedWindow");
    $(".emptymandatory", mw).removeClass("emptymandatory");
     $.each( $('.mandatoryField',mw) , function () {
        var id =$(this).attr("id");
        var v = $(this).val();
        /* checkboxes / radios */
        if($(this).hasClass('optiongroup')){
            if($(":checked",$(this)).length>0){v="ok"}
        }else if($(this).hasClass('select')){
            t = $(":first", $(this)).val();
            if(v==t){v="";}
        }
        if(v.length<1){
            $(this).addClass("emptymandatory");
            if($(this).hasClass('checkbox') || $(this).hasClass('select')){
                $(this).parent().addClass("emptymandatory");
            }

        }
     });





    if ( alertText.length == 0 ) {
        alertText = "Bitte füllen Sie alle Pflichtfelder aus.";
    }
    var theForm=document[formName];
    var m=theForm.mgnlMandatory;
    var i=0;
    var ok=true;
    if (m)
    {
        if (!m[0])
        {
            var tmp=m;
            m=new Object();
            m[0]=tmp;
        }
        while (m[i])
        {
            var name=m[i].value;
            var type;
            var mgnlField;
            if(document.all) mgnlField=theForm(name);
            else mgnlField=theForm[name];

            if (mgnlField.type) type=mgnlField.type;
            else if (mgnlField[0] && mgnlField[0].type) type=mgnlField[0].type

            switch (type)
            {
                case "select-one":
                    if (mgnlField.selectedIndex==0) ok=false;
                    break;
                case "checkbox":
                case "radio":
                    var obj=new Object();
                    if (!mgnlField[0]) obj[0]=mgnlField;
                    else obj=mgnlField;
                    var okSmall=false;
                    var ii=0;
                    while (obj[ii])
                    {
                        if (obj[ii].checked)
                        {
                            okSmall=true;
                            break;
                        }
                        ii++;
                    }
                    if (!okSmall) ok=false;
                    break;
                default:
                    if (!mgnlField.value) ok=false;
            }
            if (!ok)
            {
                alert(alertText);
                if (!mgnlField[0]) {
                    $(mgnlField).addClass("emptymandatory");
                    mgnlField.focus();
                }else{
                    $(mgnlField).parent().parent().addClass("emptymandatory");

                }
                return false;
            }
            i++;
        }
    }
    if (ok) {return displayFormPreview();}
    else return false;
}
var isInPreviewMode = false;
var hasSpamField = false;
var spamFields = new Array();
var spamFieldTexts = new Array();

var hasDateDropDownField = false;
var dateDropDownFieldNames = new Array();
var dateDropDownTexts = new Array();

function selectFormFieldElement(group, index) {
        var c = document.contactForm[group];
        if(c.length>0){
            c = c[index];
        }
        if(c.type == "radio"){
            c.checked = true;
        }else{
            c.checked = !c.checked;
        }
    }

function checkSpamFields(){
    fillInDateFields();
    fillInMadField();
    if(hasSpamField){
        var c = spamFields.length;
        for(var i = 0; i<c; i++){
            if(!hasCorrectFormat(spamFields[i].value)){
                alert(spamFieldTexts[i]);
                $(spamFields[i]).addClass("emptymandatory");
                spamFields[i].focus();
                return false;
            }
        }
    }
    if(hasDateDropDownField){
        var c = dateDropDownFieldNames.length;
        for(var i = 0; i<c; i++){
            if(!dateDrowpDownsSelected(dateDropDownFieldNames[i])){
                alert(dateDropDownTexts[i]);
                $("#field_"+dateDropDownFieldNames[i]).val("field_"+dateDropDownFieldNames[i]);
                $("#field_"+dateDropDownFieldNames[i]).parent().parent().addClass("emptymandatory");
                return false;
            }
        }
    }
    return true;
}
function registerSpecialField(field, text){
    hasSpamField = true;
    spamFields.push(field);
    spamFieldTexts.push(text);
}
function hasCorrectFormat(stringval){
    var cf = true;
    var ai = stringval.lastIndexOf("@");
    var di = stringval.lastIndexOf(".");
    var li = stringval.length-1;
    if(ai < 1){ cf = false;}
    if(ai == li){ cf = false;}
    if(di < 2){ cf = false;}
    if(di < ai){ cf = false;}
    if(di == li){ cf = false;}
    return cf;
}
/* check date fields */
function registerDateDropdownlField(field, text){
    hasDateDropDownField = true;
    dateDropDownFieldNames.push(field);
    dateDropDownTexts.push(text);
}
function dateDrowpDownsSelected(f){
    var m=$("#mm_"+f).attr("selectedIndex");
    var d=$("#dd_"+f).attr("selectedIndex");
    var y=$("#yy_"+f).attr("selectedIndex");
    if($("#mm_"+f).length==0){m=1;}
    if($("#dd_"+f).length==0){d=1;}
    if($("#yy_"+f).length==0){y=1;}
    return (m>0&&d>0&&y>0);
}

/* max char checker */
function checkForMaxChars(f,m,d){
    var v =  $(f).val();
    var c = v.length;
    if(c>m){
        v = v.substring(0,m);
        $(f).val(v);
    }
    $("#"+d).text(c+"/"+m);
}


/* dynamic adding of form elements */
var addFormElemntFields = new Array();
var addFormElemntFieldsCount = new Array();
function addFormElement(uuid, maxitems, wid, link){
    var c = addFormElemntFieldsCount[uuid];
    if(c < maxitems){
        addFormElemntFieldsCount[uuid]++;
        $("#"+addFormElemntFields[uuid][c]).fadeIn(function(){
            /* re-initialize scrolling since height of window content has changed */
            skinWindowDisplayScrollBar();
        });
        if(addFormElemntFieldsCount[uuid]==maxitems){$("#"+link).fadeTo(100, 0.4);}
    }

}

function removeFormElement(link, fid,muuid){
    $("#"+fid).fadeOut(function(){
        /* re-initialize scrolling since height of window content has changed */
        skinWindowDisplayScrollBar();
    });
    addFormElemntFieldsCount[muuid]--;
    $("#"+link).fadeTo(1, 1);
}
/* concatenate date fields */
function fillInDateFields(){
    $(".MMDDYY").each(function(){
        var fid =$(this).attr("id");
        var f = fid.substring(5);
        var m = $("#mm"+f).val();
        var d = $("#dd"+f).val();
        var y = $("#yy"+f).val();
        var v = "";
        if($("#dd"+f).length!=0&&d!=""){v+=d+"."}
        if($("#mm"+f).length!=0&&m!=""){v+=m+".";}
        if($("#yy"+f).length!=0&&y!=""){v+=y}
        $(this).val(v);
    });
}
/* populate fields for generating mad excel sheet */
function fillInMadField(){
    if(!isInPreviewMode){

    $.each( $('[id^=mad]') , function () {
        var id =$(this).attr("id");
        var fid = "field"+id.substring(3);
        var vfield = $("#"+fid);
//        console.log(vfield.attr("id")+": "+vfield.is(':visible')+" / "+vfield.val()+" | "+vfield.parent().parent().parent().attr("class"));
//        console.log(vfield.is(':visible') || !vfield.parent().parent().parent().hasClass("hiddenFormElement"));
        /* check for hidden form elements */
        if(vfield.is(':visible') || !vfield.parent().parent().parent().hasClass("hiddenFormElement")){
            var v = vfield.val();
            /* checkboxes / radios */
            if($("#"+fid).hasClass('optiongroup')){
                $("#"+fid+" :checked").each(function() {
                    v += $(this).val()+", ";
                });
                /* chop off trailing coma */
                if(v.length>2){
                    v = v.substring(0,v.length-2);
                }
            }else if(vfield.hasClass("select")){
                /* dropdowns */
            }
            $(this).val(v);
//            console.log($(this).attr("id")+" / "+v);
        }else{
            $(this).val("");
        }
    });
    }
}
function removeEmptyMadFields(){
    $.each( $('[id^=mad]') , function () {
        var v = $(this).val();
//        console.log($(this).attr("id")+": "+v);
        if(v==""){$(this).remove();}

    });
    return false;
}

var uploadInformationText = "";
function setUploadInformationText(t){
    uploadInformationText = t;
}
function displayFormPreview(){
    var fakePathString = "C:\\fakepath\\";
    var mw = $(".focusedWindow");
    if(!isInPreviewMode){
        $.each( $('[id^=prev]',mw) , function () {
            var id =$(this).attr("id");
            var fid = "field"+id.substring(4);
            var v = $("#"+fid).val();

            if(v.toLowerCase().indexOf(fakePathString.toLowerCase())!=-1){
                v = v.substring(fakePathString.length);
            }
            /* checkboxes / radios */
            if($("#"+fid).hasClass('optiongroup')){
                $("#"+fid+" :checked").each(function() {
                    v += $(this).val()+", ";
                });
                /* chop off trailing coma */
                if(v.length>2){
                    v = v.substring(0,v.length-2);
                }
            }
            $(this).parent().prepend("<div class='preview'>"+v+"</div>");

        });
        $(".hideInMailPreview",mw).hide();
        $(".hiddenForPreview",mw).removeClass("hiddenForPreview").addClass("showInPreview");
        $(".form :input:not(.showInPreview)",mw).addClass("hiddenForPreview");
        $(".optiongroup",mw).addClass("hiddenForPreview");
        $(".addelements a",mw).addClass("hiddenForPreview");
        isInPreviewMode = true;
        /* jump to top */
//        try{$(".contentWrapper", $(".focusedWindow"))[0].scrollTo(0);}catch(pokemon){}
//        try{$(".contentWrapper",$(".focusedWindow")).data('jsp').scrollTo(0);}catch(pokemon){}
        /* re-initialize scrolling since height of window content has changed */
        moveScrollBarToPosition(0);
//        skinWindowDisplayScrollBar();
        return false;
    }else{
//        $(".jScrollPaneTrack").hide();
        $('<div class="formUploadLoader"><div class="formUploadLoaderInfo">'+uploadInformationText+'</div></div>').prependTo(".focusedWindow .windowWrapperContent")
        moveScrollBarToPosition(0);
        return true;
    }
}
function switchOffFormPreview(){
    var mw = $(".focusedWindow");
    isInPreviewMode = false;
    $(".hideInMailPreview",mw).show();
    $(".hiddenForPreview",mw).removeClass("hiddenForPreview");
    $(".preview",mw).remove();
    $(".MMDDYY",mw).each(function(){$(this).val($(this).attr("id"))});
    $(".showInPreview",mw).removeClass("showInPreview").addClass("hiddenForPreview");
    /* jump to top */
    moveScrollBarToPosition(0);
    /* re-initialize scrolling since height of window content has changed */
    skinWindowDisplayScrollBar();
}
