﻿
function RadioPurchaseTypeMap(rdoName, arrDivs)
{
    this.RadioName = rdoName;
    this.Divs = arrDivs;
}

var m_rfqTrackID = -1;
var m_currentStep = 1;
var m_arrMap
    = [
    new RadioPurchaseTypeMap("rdoOutright", ["divPrereg", "divTargetPrice"]),
    new RadioPurchaseTypeMap("rdoHP", ["divCreditHistory", "divTerm", "divDeposit", "divPrereg"]),
    new RadioPurchaseTypeMap("rdoPCP", ["divCreditHistory", "divMileage", "divTerm", "divMaintenance", "divDeposit"]),
    new RadioPurchaseTypeMap("rdoPCH", ["divCreditHistory", "divMaintenance", "divTerm", "divMileage"]),
    new RadioPurchaseTypeMap("rdoBCH", ["divMileage", "divTerm", "divMaintenance", "divBusiness"])
];

var m_baseId = '';
var m_enquiryType = '';

function RFQ_GetControlID(id)
{
    return m_baseId + "_" + id;
}

function RFQ_StepValidation(suppressMessage)
{
    var success = true;

    switch (m_currentStep)
    {
        case 1:

            var ddls = $("#rfq_step1 select:visible[value='']");

            if (ddls.length > 0)
            {
                success = false;

                if (!suppressMessage)
                {
                    ddls.css("background-color", CONTROL_ERROR_COLOUR);
                    alert("Please complete the vehicle selection form.");
                }
            }

            break;
        case 2:

            var buyOrLease = $("#rfq_step2 #fsBuyOrLease :radio:checked");
            $("#rfq_step2 #fsBuyOrLease").css("background-color", "transparent");
            if (buyOrLease.length === 0)
            {
                success = false;
                if (!suppressMessage)
                {
                    $("#rfq_step2 #fsBuyOrLease").css("background-color", CONTROL_ERROR_COLOUR);
                    alert("Please select whether you wish to purchase outright, or pay monthly by finance.");
                }
                break;
            }

            if ($("#fsLeaseOptions:visible").length > 0)
            {
                var purchaseTypes = $("#fsLeaseOptions :radio:checked");
                $("#fsLeaseOptions").css("background-color", "transparent");

                if (purchaseTypes.length === 0)
                {
                    success = false;
                    if (!suppressMessage)
                    {
                        $("#fsLeaseOptions").css("background-color", CONTROL_ERROR_COLOUR);
                        alert("Please select a finance / lease type.");
                    }
                    break;
                }
            }

            var restOfControls = $("#rfq_step2_options select, #rfq_step2_options :text").parent(":visible").children("select,:text").filter("[value='']");
            $("#rfq_step2_options select, #rfq_step2_options :text").css("background-color", CONTROL_NONERROR_COLOUR);

            if (restOfControls.length > 0)
            {
                success = false;

                if (!suppressMessage)
                {
                    restOfControls.css("background-color", CONTROL_ERROR_COLOUR);
                    alert("Please complete the questions.");
                }
            }


            break;
        case 3:

            var controls = $("#rfq_step3 select, #rfq_step3 :text:not([class*=optional])").parent(":visible").children("select,:text:not([class*=optional])").filter("[value='']:visible");
            $("#rfq_step3 select, #rfq_step3 :text").css("background-color", CONTROL_NONERROR_COLOUR);

            if (controls.length > 0)
            {
                success = false;

                if (!suppressMessage)
                {
                    controls.css("background-color", CONTROL_ERROR_COLOUR);
                    alert("Please answer the personal details questions.");
                }
                break;
            }

            var postCode = $("#" + RFQ_GetControlID("conAddressLookup_txtPostcode"))[0];

            var postCodeCheck = checkValidPostCode(postCode.value);
            if (postCodeCheck === false)
            {
                success = false;
                if (!suppressMessage)
                {
                    $(postCode).css("background-color", CONTROL_ERROR_COLOUR);
                    alert("You have entered an invalid postcode.");
                }
                break;
            }

            //                var chkAgree = $("#" + RFQ_GetControlID("chkAgree"));
            //                $("#rfq_step3 [for=" + RFQ_GetControlID("chkAgree") + "]").css("background-color", "transparent");
            //                if (chkAgree[0].checked == false)
            //                {
            //                    success = false;

            //                    if (!suppressMessage)
            //                    {
            //                        $("#rfq_step3 [for=" + RFQ_GetControlID("chkAgree") + "]").css("background-color", CONTROL_ERROR_COLOUR);
            //                        alert("Please confirm that you agree to be contacted by vehicle retailers\nin order to process your enquiry.");
            //                    }
            //                }

            break;
    }

    return success;
}

function RFQ_StepRecordCallBack()
{
    if (m_rfqTrackID == -1)
    {
        try
        {
            var trackid = (Number)(arguments[0].d);
            m_rfqTrackID = trackid;
        }
        catch (e)
        {
        }
    }
}
function RFQ_StepRecord()
{
    try
    {
        CallAJAXMethod("SetRFQStep", RFQ_StepRecordCallBack, null, "stepIndex", m_currentStep - 1, "trackId", m_rfqTrackID);

        var vehicleType = ($("#" + RFQ_GetControlID("ddlVeh_VehicleType"))[0].value == 1 ? "car" : "van");
        var step = ((m_currentStep - 1) < 3 ? "step-" + (String)(m_currentStep - 1) : "thanks");
        var page = '/' + vehicleType + '-rfq-' + step;

        // Google Track
        m_googlePageTracker._trackPageview(page);
    }
    catch (e)
    {
    }
}

function RFQ_VehicleSelectHandler(e)
{
    if (RFQ_StepValidation(false))
    {
        __doPostBack(e.target.id.replace(/_/g, "$"), '');
    }

}

function RFQ_StepFadeIn()
{
    $("#rfq_step" + m_currentStep).css("position", "relative");
    $("#rfq_step" + m_currentStep).fadeIn(250);
    $("#rfq_step" + m_currentStep).css("position", "static");
}

function RFQ_StepHandler(e)
{
    var hideId = "1:visible,#rfq_step2:visible,#rfq_step3:visible";
    var showId = null;

    if (e != null && typeof(e) != undefined)
    {
        if (e.target.id == RFQ_GetControlID("lnkNextStep"))
        {
            if (m_currentStep == 4)
            { return; }

            if (!RFQ_StepValidation())
            { return; }

            hideId = m_currentStep;
            showId = m_currentStep + 1;
            m_currentStep++;
        }
        else if (e.target.id == RFQ_GetControlID("lnkPrevStep"))
        {
            hideId = (m_currentStep);
            showId = m_currentStep - 1;
            m_currentStep--;
        }

        // Record the step.
        RFQ_StepRecord();
    }
    else
    {
        showId = m_currentStep;
    }

    if (m_currentStep == 4)
    {
        // Get a list of visible controls for validation purposes.
        var visibleControls = $("#rfq_form select, #rfq_form :text").parent(":visible").children("select,:text").filter(":visible");
        var arrVisibleControlIDs = [];
        $.each(visibleControls, function ()
        {
            arrVisibleControlIDs.push(this.id);
        });

        $("#" + RFQ_GetControlID("lnkPrevStep")).hide();
        $("#" + RFQ_GetControlID("lnkNextStep")).hide();

        $("#rfq_step" + hideId).fadeOut(250, RFQ_StepFadeIn);

        document.getElementById(RFQ_GetControlID("hidVisibleControls")).value = arrVisibleControlIDs.join("|");
        // Perform a postback to the validation section
        __doPostBack(RFQ_GetControlID("lnkNextStep").replace(/_/g, "$"), '');
        return;
    }
    if (e != null)
    {
        $("#rfq_step" + hideId).fadeOut(250, RFQ_StepFadeIn);
    }
    else
    {
        $("#rfq_step" + hideId).hide();
        $("#rfq_step" + showId).show();
    }

    $("#rfq_progress" + hideId).removeClass("progress_on");
    if (showId != null)
    {
        $("#rfq_progress" + showId).addClass("progress_on");
    }

    $("#" + RFQ_GetControlID("lnkPrevStep")).text("Step " + (m_currentStep - 1));
    $("#" + RFQ_GetControlID("lnkNextStep")).text("Step " + (m_currentStep + 1));

    if (m_currentStep > 1)
    {
        $("#" + RFQ_GetControlID("lnkPrevStep")).show();
    }
    else
    {
        $("#" + RFQ_GetControlID("lnkPrevStep")).hide();
    }

    if (m_currentStep == 3)
    {
        $("#" + RFQ_GetControlID("lnkNextStep")).text("Finish");
    }

}
var m_postcodePostBackTimer = 0;

function RFQ_PostCode_KeyUp(e)
{
    // If tab key pressed. ignore.
    if (e.keyCode == 9)
    { return; }

    if (m_postcodePostBackTimer > 0)
    {
        window.clearTimeout(m_postcodePostBackTimer);
        m_postcodePostBackTimer = 0;
    }
    var txt = document.getElementById(e.target.id);
    var result = checkValidPostCode(txt.value);

    if (result !== false)
    {
        if (e.keyCode == 13)
        {
            PostCode_Find(result);
            return;
        }
        m_postcodePostBackTimer = window.setTimeout("RFQ_PostCode_Find('" + result + "');", 500);
    }
}
function RFQ_TitleChangeHandler(e)
{

    var other = $("#" + RFQ_GetControlID("txtOtherTitle"));
    var obj = $("#" + RFQ_GetControlID("ddlTitle"))[0];

    if (obj.options[obj.selectedIndex].text == "Other")
    {
        other.show(300, function () { $(this).focus(); });
    }
    else
    {
        other.hide(300);
    }
}
function RFQ_InitAfterPostback()
{
    if (m_currentStep == 4)
    {
        $("#rfq_step3, #rfq_step2, #rfq_step1").hide();
        $("#rfq_step" + m_currentStep).show();
        return;
    }
    $("#rfq_vehicleselect a").click(RFQ_VehicleSelectHandler);
    $("#rfq_vehicleselect a").attr("href", "javascript:void(0);");

    $("#" + RFQ_GetControlID("lnkNextStep") + ",#" + RFQ_GetControlID("lnkPrevStep")).click(RFQ_StepHandler);
    $("#" + RFQ_GetControlID("lnkNextStep") + ",#" + RFQ_GetControlID("lnkPrevStep")).attr("href", "javascript:void(0);");

    $("#" + RFQ_GetControlID("ddlTitle")).change(RFQ_TitleChangeHandler);

    $("#" + RFQ_GetControlID("conAddressLookup_txtPostcode")).keyup(RFQ_PostCode_KeyUp);
}

function RFQ_StartRequest(sender, args)
{
}
function RFQ_EndRequest(sender, args)
{
    RFQ_InitAfterPostback();
}
function RFQ_RemovePleaseSelect(e)
{
    if (e.target.options[0].value == "")
    {
        e.target.remove(0);
    }

    var control = $(e.target);
    if (control.css("background-color") == CONTROL_ERROR_COLOUR)
    {
        control.css("background-color", CONTROL_NONERROR_COLOUR);
    }
}
function RFQ_PurchaseTypeUI(id)
{

    $("#rfq_step2_options > div[id^='div']").hide();
    $("#rfq_step2_options").show();

    var map = null;

    for (var i = 0; i < m_arrMap.length; i++)
    {
        if (id.endsWith("_" + m_arrMap[i].RadioName))
        {
            map = m_arrMap[i];
            break;
        }
    }
    if (map != null)
    {
        for (var x = 0; x < map.Divs.length; x++)
        {
            $("#" + map.Divs[x]).show();
        }
    }
}

function RFQ_PurchaseTypeClickHandler(e)
{
    $("#fsLeaseOptions").css("background-color", "transparent");
    RFQ_PurchaseTypeUI(e.target.id);
}


function RFQ_BuyOrLeaseUI(sourceId)
{

    $("#fsBuyOptions").hide();
    $("#fsLeaseOptions").hide();
    $("#rfq_step2_options").hide();

    $("#rfq_step2 #fsBuyOrLease").css("background-color", "transparent");

    if (sourceId == RFQ_GetControlID("rdoBuy"))
    {
        RFQ_PurchaseTypeUI(RFQ_GetControlID("rdoOutright"));
    }
    else
    {
        var alreadySelected = $("#fsLeaseOptions :radio:checked");
        if (alreadySelected.length > 0)
        {
            RFQ_PurchaseTypeUI(alreadySelected[0].id);
        }
        $("#fsLeaseOptions").show();
    }
}
function RFQ_BuyOrLeaseHandler(e)
{
    var sourceId = e.target.id;
    RFQ_BuyOrLeaseUI(sourceId);
}

function RFQ_Initiate()
{
    $("#" + RFQ_GetControlID("rdoBuy")).click(RFQ_BuyOrLeaseHandler);
    $("#" + RFQ_GetControlID("rdoLease")).click(RFQ_BuyOrLeaseHandler);

    $("#fsBuyOptions :radio").click(RFQ_PurchaseTypeClickHandler);
    $("#fsLeaseOptions :radio").click(RFQ_PurchaseTypeClickHandler);

    // Add handler to remove -- Please Select -- once the option is selected from drop downs.
    $("#rfq_step2_options select").change(RFQ_RemovePleaseSelect);
    $("#rfq_step3 select").change(RFQ_RemovePleaseSelect);

    var prm = Sys.WebForms.PageRequestManager.getInstance();

    prm.add_initializeRequest(RFQ_StartRequest);
    prm.add_endRequest(RFQ_EndRequest);

    InitialiseLoadingImage();

    RFQ_InitAfterPostback();

    RFQ_StepRecord();

}


function RFB_StepRecord(step)
{
    try
    {
        step = ((step) < 1 ? "step-" + (String)(step) : "thanks");
        var page = '/' + m_enquiryType + '-' + step;

        // Google Track
        m_googlePageTracker._trackPageview(page);
    }
    catch (e)
    {
    }
}


function RFQ_PostCode_Find(result)
{
    var txt = document.getElementById(RFQ_GetControlID("conAddressLookup_txtPostcode"));
    txt.value = result;
    __doPostBack(RFQ_GetControlID("conAddressLookup_btnFind").replace(/_/g, "$"), '');
}
function RFQ_AddressFound_CallBack()
{
    alert("Please now select an address from the list.");
}
function RFQ_AddressNotFound_CallBack()
{
    alert("We're sorry but we couldn't find the address for the postcode you entered.\n\nTry again or manually enter your address details.");
    $("#" + RFQ_GetControlID("txtBuildingNumberName")).focus();
}

function RFQ_AddressSearchComplete(result)
{
    switch (result)
    {
        case 1: // Failed - Couldn't find.
            $("#divManualAddress").slideDown(500, RFQ_AddressNotFound_CallBack);
            $("#divFoundAddresses").hide();
            break;
        case 2: // Success
            $("#divFoundAddresses").slideDown(500, RFQ_AddressFound_CallBack);
            $("#divManualAddress").hide();

            break;
        case 3: // Selected from list.
            $("#divManualAddress").slideDown(500);
            $("#divFoundAddresses").slideUp(500);
            break;
    }
}




function RFQ_ValidationReturn(step, responseMessage, responseControls)
{

    // re-initialise the handlers.
    RFQ_Initiate();

    // re-select things that should be selected.
    RFQ_BuyOrLeaseUI($("#rfq_step2 #fsBuyOrLease :radio:checked")[0].id);
    RFQ_TitleChangeHandler();
    RFQ_AddressSearchComplete(3);
    // Set the step
    m_currentStep = step;

    $("#" + RFQ_GetControlID("lnkPrevStep")).show();
    $("#" + RFQ_GetControlID("lnkNextStep")).show();

    // Take us to the correct step
    RFQ_StepHandler(null);

    $("#rfq_step4").hide();

    // clear any set backgrounds.
    RFQ_StepValidation(true);
    // Set backgrounds of errored controls.
    $(responseControls).css("background-color", CONTROL_ERROR_COLOUR);
    // Show us the response message
    alert("Please correct the following errors:\n\n" + responseMessage);
}

/*
Requests Control's Section
*/
function RFB_Validation(suppressMessage)
{
    var success = true;

    var controls = $("#rfb_step2 select, #rfb_step2 :text:not([class*=optional])").parent(":visible").children("select,:text:not([class*=optional])").filter("[value='']:visible");
    $("#rfb_step2 select, #rfb_step2 :text").css("background-color", CONTROL_NONERROR_COLOUR);

    if (controls.length > 0)
    {
        success = false;

        if (!suppressMessage)
        {
            controls.css("background-color", CONTROL_ERROR_COLOUR);
            alert("Please answer the questions.");
        }
    }
    else
    {
        var postCode = $("#" + RFQ_GetControlID("conAddressLookup_txtPostcode"))[0];

        var postCodeCheck = checkValidPostCode(postCode.value);
        if (postCodeCheck === false)
        {
            success = false;
            if (!suppressMessage)
            {
                $(postCode).css("background-color", CONTROL_ERROR_COLOUR);
                alert("You have entered an invalid postcode.");
            }
        }
    }

    return success;
}
function CallValidation()
{
    if (!RFB_Validation(false))
    {
        return;
    }
    else
    {
        $("#rfb_step2").hide();
        $("#" + RFQ_GetControlID("btnSubmit") + ",#" + RFQ_GetControlID("lnkSubmit")).hide();
        $("#rfb_processing").show();

        RFB_StepRecord(1);

        if ($("#" + RFQ_GetControlID("btnSubmit")).length > 0)
        {
            __doPostBack(RFQ_GetControlID("btnSubmit").replace(/_/g, "$"), '');
        }
        else if ($("#" + RFQ_GetControlID("lnkSubmit")).length > 0)
        {
            __doPostBack(RFQ_GetControlID("lnkSubmit").replace(/_/g, "$"), '');
        }

    }
}
function RFB_InitAfterPostback()
{
    $("#" + RFQ_GetControlID("ddlTitle")).change(RFQ_TitleChangeHandler);
    $("#" + RFQ_GetControlID("conAddressLookup_txtPostcode")).keyup(RFQ_PostCode_KeyUp);
    $("#" + RFQ_GetControlID("btnSubmit") + ",#" + RFQ_GetControlID("lnkSubmit")).click(CallValidation);
    $("#" + RFQ_GetControlID("btnSubmit") + ",#" + RFQ_GetControlID("lnkSubmit")).attr("href", "javascript:void(0);");
}
function RFB_Initiate()
{
    var prm = Sys.WebForms.PageRequestManager.getInstance();

    prm.add_initializeRequest(RFQ_StartRequest);
    prm.add_endRequest(RFQ_EndRequest);
    InitialiseLoadingImage();
    $("#rfb_processing").hide();
    RFB_InitAfterPostback();

    RFB_StepRecord(0);
}



function RFB_ValidationReturn(responseMessage, responseControls)
{
    // re-initialise the handlers.
    RFQ_Initiate();

    // re-select things that should be selected.
    RFQ_TitleChangeHandler();
    RFQ_AddressSearchComplete(3);

    // clear any set backgrounds.
    RFB_Validation(false);
    // Set backgrounds of errored controls.
    $(responseControls).css("background-color", CONTROL_ERROR_COLOUR);
    // Show us the response message
    alert("Please correct the following errors:\n\n" + responseMessage);
}
function RFB_Redirect()
{
    $("#rfb_step2").hide();
    $("#" + RFQ_GetControlID("btnSubmit") + ",#" + RFQ_GetControlID("lnkSubmit")).hide();
    $("#rfb_processing").show();
}


