﻿FormHelper = function() {
    this.RecommendDlgHeight = 400;
}

FormHelper.prototype = {
    GetFormObject: function(fieldDef, onValidationError) {
        var formObj = {};
        var isValid = true;

        for (var prop in fieldDef) {
            var fieldInfo = fieldDef[prop];

            if (!fieldInfo.field) {
                alert("Field info missing: " + prop);
                return;
            }

            var foundFields = $j("#" + fieldInfo.field);
            var foundField = null;
            if (foundFields.length != 0)
                foundField = foundFields.get(0);

            if (!foundField) {
                alert("Field does not exist: " + fieldInfo.field);
                return;
            }

            var fieldValue = null;
            if (foundField.tagName == "SELECT") {
                fieldValue = foundField.options[foundField.selectedIndex].value;
            }
            else {
                if ($j(foundField).attr("type") == "radio") {
                    var prefix = fieldInfo.field.substring(0, fieldInfo.field.length - 1);
                    var currentField = null;
                    var cbNum = 1;

                    do {
                        currentField = $j("#" + prefix + cbNum).get(0);
                        if (currentField.checked) {
                            fieldValue = currentField.value;
                            break;
                        }

                        cbNum++;
                    }
                    while (currentField);
                }
                else if ($j(foundField).attr("type") == "checkbox") {
                    if (foundField.checked) {
                        fieldValue = true;
                    }
                }
                else {
                    fieldValue = foundField.value;
                }
            }

            var fieldValue = TrimBoth(fieldValue);

            if (fieldInfo.required) {
                if (!fieldValue) {
                    foundField.style.border = "1px red solid";
                    isValid = false;
                }
                else {
                    foundField.style.border = "1px #000000 solid";
                    formObj[prop] = fieldValue;
                }
            }
            else if (fieldValue) {
                formObj[prop] = fieldValue;
            }
        }

        if (!isValid && onValidationError) {
            onValidationError();
        }

        return (isValid) ? formObj : null;
    },

    SendRecommendForm: function() {
        var formObject = formHelper.GetFormObject({
            firstNameSender: {
                field: "TbModalFirstNameSender",
                required: true
            },
            lastNameSender: {
                field: "TbModalLastNameSender",
                required: true
            },
            mailSender: {
                field: "TbModalMailSender",
                required: true
            },
            titleRecipient: {
                field: "DdlModalTitleRecipient",
                required: false
            },
            firstNameRecipient: {
                field: "TbModalFirstNameRecipient",
                required: true
            },
            lastNameRecipient: {
                field: "TbModalLastNameRecipient",
                required: true
            },
            mailRecipient: {
                field: "TbModalMailRecipient",
                required: true
            },
            comment: {
                field: "TbModalComment",
                required: false
            }
        });

        if (formObject) {
            modalHelper.ShowCustomHTML("<div style=\"padding-top:20px; text-align:center;\">E-Mail wird gesendet</div>", formHelper.RecommendDlgHeight);

            var requestObject = requestHelper.BuildRecommendRequest(formObject);
            services.corpussireomakler.de.SearchService.v1.IContactService.RecommendRealty(requestObject, formHelper.RecommendSuccess, formHelper.RecommendFailure);
        }
    },

    RecommendSuccess: function(e) {
        modalHelper.ShowCustomHTML("<div style=\"padding-top:20px; text-align:center;\">Die Email wurde erfolgreich versendet.</div><div style=\"margin-top:10px;\"><a href=\"#\" onclick=\"modalHelper.HideModal(); return false;\" class=\"TextWithGrayArrow\">Fertig</a></div>", formHelper.RecommendDlgHeight);
    },

    RecommendFailure: function(e) {
        modalHelper.ShowCustomHTML("<div style=\"padding-top:20px; text-align:center;\">Die Email konnte leider nicht versendet werden. Bitte versuchen Sie es später erneut.</div>", formHelper.RecommendDlgHeight);
    },

    SendWishListForm: function() {
        var formObject = formHelper.GetFormObject({
            firstName: {
                field: "TbWLFirstName",
                required: true
            },
            lastName: {
                field: "TbWLLastName",
                required: true
            },
            street: {
                field: "TbWLStreet",
                required: true
            },
            zip: {
                field: "TbWLZip",
                required: true
            },
            city: {
                field: "TbWLCity",
                required: true
            },
            phoneType: {
                field: "DdlWLPhoneType",
                required: false
            },
            phoneNumber: {
                field: "TbWLPhoneNumber",
                required: false
            },
            mobile: {
                field: "TbWLMobile",
                required: false
            },
            email: {
                field: "TbWLEMail",
                required: true
            },
            bestContact: {
                field: "TbWLBestContact",
                required: false
            },
            objectType: {
                field: "RbWLObjectType1",
                required: false
            },
            realtyType: {
                field: "DdlWLRealtyType",
                required: true
            },
            numberOfRooms: {
                field: "DdlWLNumberOfRooms",
                required: false
            },
            surface: {
                field: "TbWLSurface",
                required: true
            },
            location: {
                field: "TbWLLocation",
                required: true
            },
            maxPrice: {
                field: "TbWLMaxPrice",
                required: true
            },
            comment: {
                field: "TbWLComment",
                required: false
            },
            dataUsage: {
                field: "CbDataUsage",
                required: true
            }
        });

        if (formObject) {
            modalHelper.ShowCustomHTML("<div style=\"padding-top:20px; text-align:center;\"><img src=\"/Images/AjaxLoadingSmall.gif\"><div style=\"padding-top:4px;\">Ihre Anfrage wird übermittelt</div></div>", formHelper.RecommendDlgHeight);

            var requestObject = requestHelper.BuildWishlistRequest(formObject);
            services.corpussireomakler.de.SearchService.v1.IContactService.CreateWishList(requestObject, formHelper.WishlistSuccess, formHelper.WishlistFailure);
        }
    },

    WishlistSuccess: function() {
        modalHelper.ShowCustomHTML("<div style=\"padding:20px 0px 0px 10px; width:400px;\"><b>ERFOLGREICH ÜBERMITTELT</b><br />Ihre Wunschliste wurde erfolgreich an uns übermittelt.</div>", formHelper.RecommendDlgHeight);
    },

    WishlistFailure: function() {
        modalHelper.ShowCustomHTML("<div style=\"padding:20px 0px 0px 10px; width:400px;\"><b>ES IST EIN FEHLER AUFGETRETEN</b><br />Während der Übermittlung Ihrer Wunschliste ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut.</div>", formHelper.RecommendDlgHeight);
    },

    SendCallbackForm: function() {
        var formObject = formHelper.GetFormObject({
            title: {
                field: "DdlCSFTitle",
                required: false
            },
            firstName: {
                field: "TbCSFFirstName",
                required: true
            },
            lastName: {
                field: "TbCSFLastName",
                required: true
            },
            street: {
                field: "TbCSFStreet",
                required: true
            },
            zip: {
                field: "TbCSFZip",
                required: true
            },
            city: {
                field: "TbCSFCity",
                required: true
            },
            phone: {
                field: "TbCSFPhone",
                required: true
            },
            mobile: {
                field: "TbCSFMobile",
                required: false
            },
            mail: {
                field: "TbCSFMail",
                required: true
            },
            moreInfo: {
                field: "CbCSFMoreInfo",
                required: false
            },
            visitDate: {
                field: "CbCSFVisitDate",
                required: false
            },
            callbackRequest: {
                field: "CbCSFCallBackReq",
                required: false
            },
            visitDateString: {
                field: "TbCSFDate",
                required: false
            },
            visitTimeString: {
                field: "TbCSFTime",
                required: false
            },
            comment: {
                field: "TbCSFComment",
                required: false
            }
        }, function() {
            var cDefault = GetControlContextIndependent("CallbackIsRequiredDefault");
            if (cDefault)
                cDefault.style.display = "none";
            var cRed = GetControlContextIndependent("CallbackIsRequiredRed");
            if (cRed)
                cRed.style.display = "block";
        }
        );

        if (formObject) {
            modalHelper.ShowCustomHTML("<div style=\"padding-top:20px; text-align:center;\">...Processing...</div>", formHelper.RecommendDlgHeight);

            var requestObject = requestHelper.BuildCallbackRequest(formObject);
            services.corpussireomakler.de.SearchService.v1.IContactService.CallbackInstruction(requestObject, formHelper.CallbackFormSuccess, formHelper.CallbackFormFailure);
        }

        return (formObject != null);
    },

    CallbackFormSuccess: function() {
    $j("#CallbackServiceContainer").get(0).innerHTML = "<div style=\"padding-top:10px; font-weight:normal;\">Vielen Dank!<br />Wir werden uns schnellstmöglich bei Ihnen melden.<br />Ihr CORPUS SIREO - Team.</div><div style=\"display:none;\"><iframe src=\"/Search/ETrackerIframe.aspx?PageName=MehrInfos_Bestaetigung\" /><iframe src=\"/Search/GoogleAnalyticsIframe.aspx?PageName=MehrInfos_Bestaetigung\" /></div>";
        $j("#CallbackServiceContainer").animate({ "height": 80 }, 500);
    },

    CallbackFormFailure: function() {
        $j("#CallbackServiceContainer").get(0).innerHTML = "<div style=\"padding-top:10px; font-weight:normal;\">Vielen Dank für Ihr Interesse!<br />Leider ist beim Senden der Nachricht ein Fehler aufgetreten. Bitte versuchen Sie es später noch einmal.</div>";
        $j("#CallbackServiceContainer").animate({ "height": 80 }, 500);
    },

    SendSellRealtyForm: function() {
        var formObject = formHelper.GetFormObject({
            firstName: {
                field: "TbSRFirstName",
                required: true
            },
            lastName: {
                field: "TbSRLastName",
                required: true
            },
            street: {
                field: "TbSRStreet",
                required: true
            },
            zip: {
                field: "TbSRZip",
                required: true
            },
            city: {
                field: "TbSRCity",
                required: true
            },
            phoneType: {
                field: "DdlSRPhoneType",
                required: false
            },
            phoneNumber: {
                field: "TbSRPhoneNumber",
                required: false
            },
            mobile: {
                field: "TbSRMobile",
                required: false
            },
            email: {
                field: "TbSREMail",
                required: false
            },
            bestContact: {
                field: "TbSRBestContact",
                required: false
            },
            referenceDate: {
                field: "DdlSRMoveInDate",
                required: false
            },
            realtyType: {
                field: "DdlSRObjectRealtyType",
                required: false
            },
            objectStreet: {
                field: "TbSRObjectStreet",
                required: false
            },
            objectZip: {
                field: "TbSRObjectZip",
                required: false
            },
            objectCity: {
                field: "TbSRObjectCity",
                required: false
            },
            objectDistrict: {
                field: "TbSRObjectDistrict",
                required: false
            },
            comment: {
                field: "TbSRComment",
                required: false
            }
        });
        debugger;
        if (formObject) {
            if (window.modalHelper)
                modalHelper.ShowDefaultProcessingModal();

            var requestObject = requestHelper.BuildSellRealtyRequest(formObject);
            services.corpussireomakler.de.SearchService.v1.IContactService.SellRealty(requestObject, formHelper.SellRealtyFormSuccess, formHelper.SellRealtyFormFailure);
        }
    },

    SellRealtyFormSuccess: function(e) {
        window.location = "/Search/SellRealtySuccessful.aspx";
    },

    SellRealtyFormFailure: function(e) {
        if (window.modalHelper)
            modalHelper.ShowDefaultErrorModal();
    }
}

var formHelper = new FormHelper();
