﻿
$(function () {
    LandingPageInit();
});

var RecaptchaWidget;

function LandingPageInit() {

    $(".ExtraFieldFilter .FilterButton").click(ExtraFieldFilterButtonClick);
    $(".ExtraFieldFilter .FilterCheckbox input").change(ExtraFieldFilterCheck);
    $(".MobileMenuListing .NormalButton").click(GotoButtonClick);
    $("#LandingPage .RegisterFormComponent .RegisterFormFieldset #RegisterFormButton").click(RegisterFormButtonClick);

    $("#LandingPage .LoginFormComponent .LoginForm #LoginButton").click(LoginFormButtonClick);
    $("#LandingPage .LoginFormComponent .LoginForm #LoginFormUsername, #LandingPage .LoginFormComponent .LoginForm #LoginFormPassword").enterKey(LoginFormButtonClick, true);

    $("#LandingPage .SalesHistory #OrderLines tr td .ShowInvoice").click(SalesHistoryShowInvoiceClick);
    $("#LandingPage .SalesHistory #OrderLines tr td .ShowOrder").click(SalesHistoryShowInvoiceClick);


    ContactFormInit();

    EmailFacetInit();

    PartnerSearchInit();

    PartnerFormInit();

    PartSearchInit();

    $(document).ready(function () {

        if (typeof $.fn.owlCarousel === "function") {

            var delay = $(".owl-carousel").attr("data-delay");

            if (delay == undefined || delay === "") {
                delay = "2000";
            }

            if (IsNumeric(delay)) {
                delay = parseInt(delay);
            } else {
                delay = 2000;
            }


            $(".owl-carousel").owlCarousel({
                nav: false,
                dots: true,
                loop: true,
                items: 1,
                margin: 0,
                mouseDrag: false,
                pullDrag: false,
                autoplay: true,
                autoplayTimeout: delay,
                autoplayHoverPause: true
            });
        }
    });



}


var onloadCallback = function () {
    if ($("#RecaptchaContainer").length > 0) {
        RecaptchaWidget = grecaptcha.render('RecaptchaContainer',
            {
                'sitekey': '6LcbMQ8UAAAAAILDkn__VIEpm7X8hEcnoj2x7W3f'
            });
    }
}


function DisplayCarouselItem(item) {

    item.addClass("Active");

    var sibling = item.next();

    if (sibling == undefined || sibling.length === 0) {
        sibling = item.parent().children().first();
    }


    setTimeout(function () {
        item.removeClass("Active");
        DisplayCarouselItem(sibling);
    }, 10000);

}


function GotoButtonClick() {
    var button = $(this);
    var parent = button.parent();
    var inner = parent.find(".MobileMenuListingInner");
    inner.attr("class", "MobileMenuListingInner");
    button.hide();
    $("#MenuSearchContainer").removeClass("IsStartPage");
}



function ExtraFieldFilterButtonClick() {
    var button = $(this);
    var parent = button.parent();
    parent.find(".FilterButton").removeClass("Selected");
    button.addClass("Selected");

    var grandparent = parent.parents(".ExtraFieldFilter");
    grandparent.find(".FilterRow").removeClass("Selected");
    var selectedButtons = grandparent.find(".FilterButton.Selected");

    var selector = "";
    for (var i = 0; i < selectedButtons.length; i++) {
        var selected = $(selectedButtons[i]);
        var index = selected.attr("data-index");
        var value = selected.attr("data-value");
        selector += "[data-extra-" + index + "='" + value + "']";
        selected.parents(".FilterRow").addClass("Selected");
    }

    var notSelectedRow = $(".ExtraFieldFilter .FilterRow ").not(".Selected");
    if (notSelectedRow.length > 0) {
        return;
    }

    $(".ExtraFiltrable").hide();
    $(".ExtraFiltrable" + selector).show();
    $(".ExtraFiltrable[data-no-extra='true']").show();


    $(".ExtraFiltrableContainer").show();
    $(".ExtraFiltrableContainer").each(function () {
        var group = $(this);
        var items = group.find(".ExtraFiltrable:visible");
        group.toggle(items.length > 0);
    });

}



function ExtraFieldFilterCheck() {
    var checkbox = $(this);
    var parent = checkbox.parent();

    var grandparent = parent.parents(".ExtraFieldFilter");
    var checkedBoxes = grandparent.find(".FilterCheckbox input:checked");

    var d = {};
    for (var i = 0; i < checkedBoxes.length; i++) {
        var box = $(checkedBoxes[i]);
        var item = box.parent();
        var index = item.attr("data-index");
        var value = item.attr("data-value");

        var key = index.toString();
        if (!(key in d)) {
            d[key] = [value];
        } else {
            d[key].push(value);
        }

        item.parents(".FilterRow").addClass("Selected");
    }


    var items = $(".ExtraFiltrable").filter(function () {
        var item = $(this);

        var found = 0;
        $.each(d, function (key, values) {
            var datakey = "extra-" + key;
            //var datavalue = (item.data(datakey) ?? "-notset-").toString();
            if (item.data(datakey) == null) {
                return;
            }
            var datavalue = item.data(datakey).toString();

            if (values.includes(datavalue)) {
                found += 1;
            }

            console.log(datakey + ": find " + item.data(datakey) + " in " + values + " (found=" + found + ")");
        });

        return found === Object.keys(d).length;
    });


    $(".ExtraFiltrable").hide();
    items.show();
    $(".ExtraFiltrable[data-no-extra='true']").show();


    $(".ExtraFiltrableContainer").show();
    $(".ExtraFiltrableContainer").each(function () {
        var group = $(this);
        var items = group.find(".ExtraFiltrable:visible");
        group.toggle(items.length > 0);
    });
}



function RegisterFormButtonClick() {
    var fieldset = $(this).parents(".RegisterFormFieldset");

    var data = null;

    if ($(fieldset).data("required").toUpperCase() === "TRUE") {
        data = JSON.stringify({
            args: {
                CustomField1: GetValueOrShake($(fieldset).find("#CustomField1")),
                CustomField2: GetValueOrShake($(fieldset).find("#CustomField2")),
                CustomField3: GetValueOrShake($(fieldset).find("#CustomField3")),
                InputsRequired: true,
                Firstname: GetValueOrShake($(fieldset).find("#Firstname")),
                Lastname: GetValueOrShake($(fieldset).find("#Lastname")),
                Address: GetValueOrShake($(fieldset).find("#Address")),
                ZipCode: GetValueOrShake($(fieldset).find("#PostalCode")),
                City: GetValueOrShake($(fieldset).find("#PostalCity")),
                Mobile: GetValueOrShake($(fieldset).find("#Mobile")),
                Email: GetValueOrShake($(fieldset).find("#Email")),
                ProspectType: $(fieldset).data("prospecttype"),
                ValidationField1: $(fieldset).data("validationfield1"),
                ValidationField2: $(fieldset).data("validationfield2"),
                CustomerCategory: $(fieldset).data("customercategory"),
                DiscountCode: $(fieldset).data("discountcode"),
                ForwardUrl: $(fieldset).data("forwardurl")
            }
        });
    } else {
        data = JSON.stringify({
            args: {
                CustomField1: GetValueOrShake($(fieldset).find("#CustomField1")),
                CustomField2: GetValueOrShake($(fieldset).find("#CustomField2")),
                CustomField3: GetValueOrShake($(fieldset).find("#CustomField3")),
                InputsRequired: false,
                Firstname: GetValueOrShake($(fieldset).find("#Firstname")),
                Lastname: GetValueOrShake($(fieldset).find("#Lastname")),
                Address: $(fieldset).find("#Address").val(),
                ZipCode: $(fieldset).find("#PostalCode").val(),
                City: $(fieldset).find("#PostalCity").val(),
                Mobile: $(fieldset).find("#Mobile").val(),
                Email: $(fieldset).find("#Email").val(),
                ProspectType: $(fieldset).data("prospecttype"),
                ValidationField1: $(fieldset).data("validationfield1"),
                ValidationField2: $(fieldset).data("validationfield2"),
                CustomerCategory: $(fieldset).data("customercategory"),
                DiscountCode: $(fieldset).data("discountcode"),
                ForwardUrl: $(fieldset).data("forwardurl")
            }
        });
    }


    var err = $(fieldset).find("input.Error");
    if (err.length > 0) {
        return false;
    };

    AjaxCallDataRaw("/Shared/LandingPage/LandingPageAjax.aspx/RegisterForm", data, RegisterFormComplete, HandleAjaxErrorVex);
}


function RegisterFormComplete(msg) {
    if (IsMsgNull(msg)) {
        return;
    }

    if (!msg.d.Success) {
        AlertVex(msg.d.Message);
        return;
    }

    var forwardurl = msg.d.ForwardUrl;

    if (!forwardurl) {
        AlertVex(msg.d.Message);
        return;
    }

    window.location = forwardurl;
}



function LoginFormButtonClick() {
    var data = {};

    data.username = GetValueOrShake("#LoginFormUsername");
    data.password = GetValueOrShake("#LoginFormPassword");

    var err = $("#LoginContainer input.Error");
    if (err.length > 0) {
        return false;
    };

    AjaxCall("/Shared/LandingPage/LandingPageAjax.aspx/LoginNow", data, LoginFormButtonClickComplete, HandleAjaxErrorVex, $("#LandingPage .LoginFormComponent .LoginForm #LoginButton"));

    return false;
}

function LoginFormButtonClickComplete(msg) {
    if (IsMsgNull(msg)) {
        $("#Status").text("Feil brukernavn eller passord.");
        return;
    }

    if (msg.d.Success === false) {
        $("#Status").text("Feil brukernavn eller passord.");
        return;
    }

    window.location = "/";
}




// ================= Contact form ****************

function ContactFormInit() {
    $("#SendInquiry").click(SendInquiryClick);
    $("#InquiryType").change(HandleInqueryTypeChange);
    BuildExtraFields();
}


function HandleInqueryTypeChange() {
    var description = $("#InquiryType option:selected").attr("data-description");

    if (description == null || description === "") {
        $("#TypeDescriptionContainer").hide();
    } else {
        $("#TypeDescriptionContainer").show();
        $("#TypeDescription").text(description);
    }

    BuildExtraFields();
}

function BuildExtraFields() {
    $("#ExtraFields").empty();

    var fields = $("#InquiryType option:selected").attr("data-extra-fields");

    if (fields == null || fields === "") {
        return;
    }

    fields = fields.split(",");

    var readonly = $("#Name").hasClass("ReadOnly");

    for (var index = 0; index < fields.length; index++) {
        var name = "ExtraData" + (index + 1);
        var value = GetExtraFieldData();

        var labeltext = fields[index];
        var required = labeltext.indexOf("!") !== -1;
        var label = LABEL("", labeltext.replace("!", ""), "");
        var input = TEXTBOX("", value).attr("id", name).attr("data-index", (index + 1)).attr("data-required", required);

        if (readonly) {
            input.addClass("ReadOnly").attr("readonly", "readonly");
        }

        $("#ExtraFields").append([label, input]);
    }
}

function GetExtraFieldData() {
    var fields = $("#ExtraFieldsContainer div");
    if (fields.length === 0) {
        return "";
    }
    var field = fields.first();
    var value = field.text();
    field.remove();

    return value;
}


function SendInquiryClick() {

    var data = {};
    data.id = $("#Contact").attr("data-id");
    data.name = GetValueOrShake("#Name");
    data.email = GetValueOrShake("#Email", IsEmail);
    data.mobile = GetValueOrShake("#Mobile", IsPhoneEx);
    data.type = GetValueOrShake("#InquiryType");
    data.subject = GetValueOrShake("#Subject");
    data.body = GetValueOrShake("#Body");
    data.extras = GetExtraFields();


    var hasError = $(".Error").length > 0;

    if (hasError) {
        return;
    }

    AjaxCall("/Shared/LandingPage/LandingPageAjax.aspx/SendInquiry", data, SendInquiryComplete, HandleAjaxErrorVex, $("#SendInquiry"));
}

function GetExtraFields() {
    var values = "";

    $("#ExtraFields input").each(function () {
        var field = $(this);
        field.removeClass("Error");
        var value = $(this).val();

        var required = $(this).attr("data-required") === "true";

        if (required && (value == null || value === "")) {
            ErrorShake(field);
            field.addClass("Error");
        } else {
            if (values !== "") {
                values += "¤";
            }
            values += value;
        }
    });

    return values;
}


function SendInquiryComplete(msg) {

    if (msg == null) {
        return;
    }

    if (msg.d == null || msg.d === "") {
        return;
    }

    window.location = window.location.href + "?message_id=" + msg.d;
}


function GetValueOrShake(selector, extraCheckFunction) {
    var field = $(selector);

    field.removeClass("Error");

    var value = field.val();

    if (value == null || value === "") {
        ErrorShake(selector);
        field.addClass("Error");
        value = "";
    }

    if (value !== "" && extraCheckFunction != null && !extraCheckFunction(value)) {
        ErrorShake(selector);
        field.addClass("Error");
        value = "";
    }

    value = value.replace(new RegExp("\"", 'g'), "\\\"");


    return value;
}


function EmailFacetInit() {
    $(".EmailFacetButtonAction").click(EmailFacetButtonActionClick);
    $(".FacetImage").click(FacetImageClick);

    $(".EmailFacetCalendar .DatePicker .DateInput").datetimepicker({
        today: GH.Get("¯I_DAG¯"),
        clear: GH.Get("¯NULLSTILL¯"),
        close: GH.Get("¯AVBRYT¯"),
        format: "dd-mm-yyyy",
        formatSubmit: "dd-mm-yyyy",
        dayOfWeekStart: 1,
        disabledWeekDays: [0, 6],
        inline: true,
        timepicker: false,
        min: new Date()
    });

    $(".EmailFacetCalendar .TimePicker .Time").click(TimePickerTimeClick);
}


function EmailFacetButtonActionClick() {
    var button = $(this);

    var data = {};
    data.id = button.attr("id");
    data.groupName = button.attr("data-group-name");
    data.save = "";

    var error = false;

    $(".EmailFacetField").each(function () {
        var field = $(this);
        var id = field.attr("id");
        var type = field.attr("type");
        var isRequired = field.data("required");

        console.log(type);

        if (type == "checkbox") {
            var checked = field.prop("checked");

            if (!checked && isRequired)
            {
                ErrorShakeNew(field.parent());
                error = true;
            }
            else
            {
                if (data.save !== "") {
                    data.save += "¤";
                }
                data.save += id + ";" + Base64EncodeValue(checked ? "true": "false");
            }
            return true;
        }


        // Input, TextArea or Select
        var value = field.val();

        if (isRequired && value == "") {
            ErrorShakeNew(field);
            error = true;
            return true;
        }

        if (data.save !== "") {
            data.save += "¤";
        }

        data.save += id + ";" + Base64EncodeValue(value);
    });


    if (error) {
        return;
    }


    $(".EmailFacetImagesContainer").each(function () {
        var images = $(this);
        var id = images.attr("id");
        var values = "";
        var hasSelected = false;

        images.find(".FacetImage.Selected").each(function () {
            var selected = $(this);
            var value = selected.find(".ImageValueInner").text();
            hasSelected = true;

            if (values !== "") {
                values += ", ";
            }
            values += value;
        });

        if (hasSelected) {

            if (data.save !== "") {
                data.save += "¤";
            }
            data.save += id + ";" + Base64EncodeValue(values);
        }

        // well this should probably be a setting on the component
        var isRequired = true;
        if (!hasSelected && isRequired) {
            ErrorShakeNew($(this));
            return;
        }
    });

    if ($(".EmailFacetImagesContainer.Error").length > 0) {
        alert("Du må velge en verkstedtjeneste.");
        return;
    }



    $(".EmailFacetCalendar .DateTimePicker").each(function () {
        var calendar = $(this);

        var id = calendar.attr("id");
        var datePicker = calendar.find(".DatePicker .DateInput");
        var date = ToDbDate(datePicker.datetimepicker("getValue"));

        var timePicker = calendar.find(".TimePicker .Time.Selected");
        var time = timePicker.data("time");

        // well this should probably be a setting on the component
        var isRequired = true;
        if (isRequired && time == undefined) {
            ErrorShakeNew($(this));
            return;
        }

        if (data.save !== "") {
            data.save += "¤";
        }

        var value = date + " - " + time;

        data.save += id + ";" + Base64EncodeValue(value);
    });

    if ($(".EmailFacetCalendar .DateTimePicker.Error").length > 0) {
        alert("Du må velge en dato og tidspunkt for verkstedtime.");
        return;
    }



    $(".EmailFacetVehicle .EmailFacet").each(function () {
        var vehicle = $(this);

        //var id = vehicle.attr("id");
        var value = vehicle.find("input.VinSearchValue").val();

        // well this should probably be a setting on the component
        var isRequired = true;
        if (isRequired && vehicle.find("#ChooseOtherVehicle").length === 0) {
            ErrorShakeNew($(this));
            return;
        }
    });

    if ($(".EmailFacetVehicle .EmailFacet.Error").length > 0) {
        alert("Du må oppgi et gyldig reg.nr.");
        return;
    }


    //console.log(data);

    AjaxCall("/Shared/LandingPage/LandingPageAjax.aspx/SaveEmailFacet", data, SaveEmailFacetComplete, HandleAjaxErrorVex, button);
}


function FacetImageClick(e) {
    if ($(e.target.parentElement).hasClass("GsExpandable")) {
        return;
    }
    var item = $(this);
    item.toggleClass("Selected");
}


function TimePickerTimeClick() {
    var item = $(this);
    item.siblings().removeClass("Selected");
    item.addClass("Selected");
}

function SaveEmailFacetComplete(msg) {

    if (IsMsgNull(msg)) {
        return;
    }

    if (!msg.d.Success) {
        AlertVex(msg.d.Message);
        return;
    }

    window.location = msg.d.ForwardUrl;
}


function PartnerSearchInit() {
    $("body").on("click", "#PartnerSearchButton", PartnerSearchButtonClick);
}


function PartnerSearchButtonClick() {
    var data = {};
    data.number = GetValueOrShake("#PartnerSearchInput", IsPostalCode);
    data.url = $("#PartnerSearchResult").attr("data-form-url");

    var hasError = $(".Error").length > 0;

    if (hasError) {
        return;
    }

    $("#PartnerSearchResult").empty();

    console.log(data);

    AjaxCall("/Shared/LandingPage/LandingPageAjax.aspx/PartnerSearch", data, PartnerSearchComplete, HandleAjaxErrorVex, $(this));
}

function PartnerSearchComplete(msg) {

    if (IsMsgNull(msg)) {
        return;
    }

    $("#PartnerSearchResult").append(msg.d);

}


function IsPostalCode(value) {

    if ((undefined === value) || (null === value)) {
        return false;
    }

    if (value.length !== 4) {
        return false;
    }

    return IsNumeric(value);
}


function PartnerFormInit() {


    $("body").on("click", "#PartnerFormSaveButton", PartnerFormSaveButtonClick);

    $("#PartnerFormDate").datetimepicker({
        lang: "no",
        closeOnDateSelect: true,
        weeks: true,

        today: GH.Get("¯I_DAG¯"),
        clear: GH.Get("¯NULLSTILL¯"),
        close: GH.Get("¯AVBRYT¯"),
        format: "d-m-Y",
        formatSubmit: "d-m-Y",
        dayOfWeekStart: 1,
        disabledWeekDays: [0, 6],
        inline: false,
        timepicker: false,
        min: new Date()
    });

    //format: "d-m-Y"

}


function PartnerFormSaveButtonClick() {

    var data = {};
    data.id = $(".PartnerFormContainer").attr("data-id");
    data.forward = $(".PartnerFormContainer").attr("data-forward-url");
    data.name = GetValueOrShake("#PartnerFormName");
    data.email = GetValueOrShake("#PartnerFormEmail", IsEmail);
    data.phone = GetValueOrShake("#PartnerFormPhone", IsPhone);
    data.vin = GetValueOrShake("#PartnerFormVin", IsVin);
    data.service = $("#PartnerFormService").val();
    data.date = $("#PartnerFormDate").val();
    data.mileage = $("#PartnerFormMileage").val();
    data.message = $("#PartnerFormMessage").val();
    data.recaptcha = grecaptcha.getResponse(RecaptchaWidget);


    /*
    //data.vin = data.vin.replace(/\s/g, "");
    if (data.vin == null || data.vin.length !== 7) {
        ErrorShake("#VinInputDesktop");
        $("#VinInputDesktop").addClass("Error");
        return;
    }
    */

    console.log(data);

    var hasError = $(".Error").length > 0;
    if (hasError) {
        return;
    }

    if (data.recaptcha === "") {
        $("#RecaptchaOuterContainer").shake2(10, 10, 1000);
        return;
    }

    AjaxCall("/Shared/LandingPage/LandingPageAjax.aspx/PartnerFormSave", data, PartnerFormSaveComplete, HandleAjaxErrorVex);

}


function PartnerFormSaveComplete(msg) {

    if (IsMsgNull(msg)) {
        return;
    }

    if (!msg.d.Ok) {
        alert(msg.d.Message);
        return;

    }
    window.location = msg.d.ForwardUrl;

}


function SalesHistoryShowInvoiceClick() {
    var number = $(this).closest("tr").data().id;
    var type = $(this).closest("tr").data().type;

    if (type === "invoice") {
        window.location = "/minside/faktura/" + number;
    } else {
        window.location = "/minside/ordre/" + number;
    }
}


function PartSearchInit() {
    $("body").on("click", ".PartSearch .ComponentPartSearchContainer .PartSearchButton", PartSearchClick);
    $("body").on("keypress", ".PartSearch .ComponentPartSearchContainer .PartSearchInput", PartSearchKeypress)

}

function PartSearchKeypress(e) {
    if (e.which == 13) {
        PartSearchNow(e.target);
    }
}


function PartSearchClick() {
    var btn = $(this);
    var input = btn.siblings(".PartSearchInput");

    PartSearchNow(input);
}


function PartSearchNow(searchInput) {
    var input = $(searchInput);
    var term = input.val();
    if (term == null) {
        term = "";
    }
    term = term.trim();

    if (term === "" || term.length < 3) {
        ErrorShake(input);
        return;
    }

    var container = input.parents(".ComponentPartSearchContainer");


    var garageEquipment = container.data("garageequipment");
    var exactMatchOnly = container.data("exactmatchonly");
    var excludeModelDependentParts = container.data("excludemodeldependentparts");
    var requireWebSearchGroups = container.data("requirewebsearchgroups");

    var render = container.hasClass("newpage") ? "newpage" : "under";

    if (render == "newpage") {
        term = encodeURIComponent(term);
        window.location = "/sokv2?q=" + term;
    } else {
        var data = {};
        data.term = term;
        data.garageEquipmentSearch = garageEquipment.toUpperCase() == "TRUE";
        data.onlyEqualMatches = exactMatchOnly.toUpperCase() == "TRUE";
        data.excludeModelDependentParts = excludeModelDependentParts;
        data.requireWebSearchGroups = requireWebSearchGroups;

        var complete = function (msg) {
            if (IsMsgNull(msg)) {
                return;
            }

            var result = input.parent().siblings(".ComponentPartSearchResultContainer")

            result.html("");
            result.append(msg.d);
        }

        AjaxCall("/Shared/LandingPage/LandingPageAjax.aspx/PartSearch", data, complete, HandleAjaxErrorVex, $(".PartSearch .ComponentPartSearchContainer .PartSearchInput"));
    }
}

