// JavaScript source code
var doDrawGuestEvent, doDrawGuestReg;
var bookedTotal = 0;
var guestTotal = 0;
var guestEventTotal = 0;
var minPartySize = 0;
var maxPartySize = 0;
var maxEventSize = 0;
var maxGuestEventHeadcount = 0;
var minGuestThisRegistration = 0;
var maxGuestThisRegistration = 0;
//var revertToPreviousTimeSlot = 0;
var registeredMemberIDs = "";
var regLimitOverride = false;
var externalEventTotal = 0;
var WICKED_BIG_NUMBER = 1000000000000;
var eventId = '';
var previousCountedValues = [];
var hideMinimumAlert = false;
var hideMaximumAlert = false;
var namedTotal = 0;
var thisRegDBHeadcount = 0;
var newSelectedMax = 0;
var registrantType = '';
var waitlistActive = '';
var waitlsitAllowed = '';
var saveRegToWaitlist = 0;

function WaitlistText() {
    var text = $("#inEventItem.WaitlistText").val();
    if (text == undefined || text === '')
        text = 'Waitlist';

    return text;
}

showRegView = window.showRegView || (function showRegView() {
   $('#regButtonModal .modal-title').text('Registrants')
    $('#regButtonModal .modal-body').html('<iframe src="/club/scripts/calendar/View_User_Reg.asp?CID=' + (eventId || currentEventDetails.eventId) + '&display=R" style="border:none;width:100%;height:300px;" ></iframe>')
    $('#regButtonModal').modal('show')
});

function GetUserHeading() {
    var heading = $("#MEMBER_HEADING").val();
    if (heading == undefined || heading == '' || heading.length == 0)
        heading = 'Member';

    return heading;
}

// REMOVE REGISTRANT LOGIC
function removeAdditionalMember(sender, removeParentsParent) {
    // pull from hidden input with class .RegistrantID
    // its under the same parent of the div
    var thisUserID = $(sender).parent().parents('.bookedRow').find('.RegistrantID').val();
    var thisRegistrantType = $(sender).parent().parents('.bookedRow').find('#REGISTRANT_TYPE').val();

    var selectedTimeSlotID;
    var tmpMaxTimeSlot;
    if ($("#userType").val() === "BookedRegistrant") {
        selectedTimeSlotID = $("#timeSelected").attr("val");
        tmpMaxTimeSlot = parseInt($("#timeSelected").attr("max"));
    } else {
        selectedTimeSlotID = $("#timeSelected option:selected").val();
        tmpMaxTimeSlot = parseInt($("#timeSelected option:selected").attr("max"));
    }

    //OLD WAY $(sender).parent().parents('.bookedRow').remove();
    var isRemove = true;
    if (!$(sender).hasClass('removeButton')) {
        $(sender).parent().parents('.bookedRow').find('.registrantCounter').addClass('regCount');
        $(sender).parent().parents('.bookedRow').find('.RegistrantStatus').val('undeleted');
        $(sender).parent().parents('.bookedRow').find('.REGISTANT_TYPE').removeClass('deleted').addClass('active');
        $(sender).parent().parents('.bookedRow').find('.RegistrantBillCode').removeClass('deleted').addClass('active');
        //Change Buttons
        $(sender).parent().parents('.bookedRow').find('.removeButton').removeClass('hidden');
        $(sender).parent().parents('.bookedRow').find('.addBackButton').addClass('hidden');
        $(sender).parent().parents('.bookedRow').removeClass('removing');
        $(sender).parent().parents('.bookedRow').addClass('adding');

        //add back the word (registered) from menu display
        var nameDisplay = $("#addRelatedPerson option[value=" + thisUserID + "]").text();
        if (nameDisplay.indexOf('registered') < 0) {
            $("#addRelatedPerson option[value=" + thisUserID + "]").addClass('fontColorLightGray');
            $("#addRelatedPerson option[value=" + thisUserID + "]").text(nameDisplay + '( already registered)');
        }

        // if (doTimeDisplayChange) {
        if (changeDropDownTimeDisplay('add', selectedTimeSlotID, 1, 'registrantAdd')) {
            return;
        }

        //if a registered guest, re-activate their registration button.
        if (thisRegistrantType.indexOf('N') > 0) {
            $(".guestsDropDown").addClass('hidden');

            //Decrease Guest totals by 1
            guestTotal = parseInt($('#newThisRegGuestHeadcount').val());
            guestEventTotal = parseInt($('#newEventGuestHeadcount').val());
            var newEventTotal = guestEventTotal + 1;
            $('#newEventGuestHeadcount').val(newEventTotal);
            var newRegTotal = guestTotal + 1;
            guestTotal = guestTotal + 1;
            $('#newThisRegGuestHeadcount').val(newRegTotal);
            $('#formRegistrationGuestHeadcount').val(newRegTotal);
            currentEventDetails.currentGuestReg = newEventTotal
        }
    }
    else {
        if ($(sender).parent().parents('.bookedRow').find('.RegistrantStatus').hasClass('new')) {
            $(sender).parent().parents('.bookedRow').remove();
        }
        else {
            //Add 1 to deleted count
            //Add User ID to the delete field
            $(sender).parent().parents('.bookedRow').find('.registrantCounter').removeClass('regCount');
            $(sender).parent().parents('.bookedRow').find('.REGISTRANT_TYPE').removeClass('active').addClass('deleted');
            $(sender).parent().parents('.bookedRow').find('.RegistrantBillCode').removeClass('active').addClass('deleted');

            $(sender).parent().parents('.bookedRow').find('.registrantCounter').removeClass('regCount');
            $(sender).parent().parents('.bookedRow').find('.RegistrantStatus').val('deleted');

            //Change Buttons
            $(sender).parent().parents('.bookedRow').find('.removeButton').addClass('hidden');
            $(sender).parent().parents('.bookedRow').find('.addBackButton').removeClass('hidden');
            $(sender).parent().parents('.bookedRow').addClass('removing');
            $(sender).parent().parents('.bookedRow').removeClass('adding');

            if (!$(sender).parent().parents('.bookedRow').find('.details-panel-container').hasClass('hidden')) {
                toggleRegistrantContainer($(this).parents('.bookedRow').find('a.registrant_heading'), $(this).parents('.bookedRow').find('.details-panel-container'));
            }
        }

        //Remove the word (registered) from menu display
        var nameDisplay = $("#addRelatedPerson option[value=" + thisUserID + "]").text();
        if (nameDisplay.indexOf('registered') >= 0) {
            $("#addRelatedPerson option[value=" + thisUserID + "]").removeClass('fontColorLightGray');
            $("#addRelatedPerson option[value=" + thisUserID + "]").text(nameDisplay.substring(0, nameDisplay.indexOf("(")));
        }

        if (changeDropDownTimeDisplay('delete', selectedTimeSlotID, 1, 'registrantRemove')) {
            return;
        }

        //if a registered guest, re-activate their registration button.
        if (thisRegistrantType.indexOf('N') > 0) {
            $(".guestsDropDown").addClass('hidden');

            //Decrease Guest totals by 1
            guestTotal = parseInt($('#newThisRegGuestHeadcount').val());
            guestEventTotal = parseInt($('#newEventGuestHeadcount').val());
            var newEventTotal = guestEventTotal - 1;
            $('#newEventGuestHeadcount').val(newEventTotal);
            var newRegTotal = guestTotal - 1;
            guestTotal = guestTotal - 1;
            $('#newThisRegGuestHeadcount').val(newRegTotal);
            $('#formRegistrationGuestHeadcount').val(newRegTotal);
            currentEventDetails.currentGuestReg = newEventTotal
        } else {
            var bookingMemberName = $('#Booking_Resident_Container').find('.Name').first().text();
            var bookingMemberID = $('#Booking_Resident_Container').first().find('.RegistrantID').first().val();
            var currentGuestId
            //Change Responsibility of if this member was assigned to a guest

            $(".guestOfID").each(function () {
                if ($(this).is('select')) {
                    currentMemberID = $('option:selected', this).val();
                } else {
                    currentMemberID = $(this).attr('value');
                }

                if (thisUserID === currentMemberID) {
                    if ($(this).is('select')) {
                        $(this).val(bookingMemberID);
                    } else {
                        $(this).attr('value', (bookingMemberID));
                        $(this).text(bookingMemberName.trim());
                    }
                    currentGuestId = $(this).parents('.Booked_Resident').find('.RegistrantID').first().val();
                    $(this).siblings('.guestoftype').val('M');
                    $(this).siblings('#guestOfID').attr('value', bookingMemberID);
                    $(this).siblings('#guestOfName').attr('value', bookingMemberName.trim());
                    $(this).siblings('#guestOfInfo').val(currentGuestId + '*' + bookingMemberID + '*' + bookingMemberName.trim());
                }
            });
        }
    }

    //Remove the Registrant from the Guest of drop-down listing
    $(".guestOfID option[value=" + thisUserID + "]").remove();

    //Check to see if the Guest of Heading should be displayed - Only display if guests are on the registration
    checkForGuestOfDisplay();

    UpdateCounts();
    UpdateEventSize();
    UpdateRegistrationSummary();

    if (bookedTotal < maxPartySize) {
        $("#maxLimitReached").addClass('hidden');
        $("#addPersonDiv").removeClass('hidden');
    } else {
        if (regLimitOverride == true) {
            $("#maxLimitReached").addClass('hidden');
            $("#limitsOverriden").removeClass('hidden');
        } else {
            $("#maxLimitReached").removeClass('hidden');
        }
    }
}

// CHECK FOR DUPLICATE REGISTRANT
function IsMemberRegistered(inID) {
    var found = false;
    $('.RegistrantID').each(function () {
        if ($(this).val() == inID) {
            found = true;
        }
    });

    return found;
}

// UPDATING REGISTRATION COUNTS
function UpdateCounts() {
    bookedTotal = 0;
    maxPartySize = parseInt($("#maxSize").val());
    minPartySize = parseInt($("#minSize").text());
    window.currentEventDetails.currentGuestReg = parseInt($('#newThisRegGuestHeadcount').val())
    window.currentEventDetails.currentGuestEvent = parseInt($('#newEventGuestHeadcount').val())

    var staticDBHeadcount = parseInt($("#staticDBHeadcount").val());

    var tmpMaxTimeSlot = parseInt($("#timeSelected option:selected").attr("max"));
    if (tmpMaxTimeSlot === 0) {
        tmpMaxTimeSlot = WICKED_BIG_NUMBER;
    }

    namedTotal = 0;

    // var currentEventSize;
    $(".regCount").each(function () {
        var val = $.trim($(this).text());
        if (val) {
            val = parseFloat(val.replace(/^\$/, ""));
        } else {
            val = parseFloat(this.value);
        }
        bookedTotal += !isNaN(val) ? val : 0;
        namedTotal += !isNaN(val) ? val : 0;
    });

    $(".adminDefinedCount").each(function () {
        var adminCountNoNulls = 0;
        if (parseInt($(this).val())) {
            adminCountNoNulls = parseInt($(this).val());
        }
        bookedTotal += adminCountNoNulls;
    });

    window.currentEventDetails.bookedTotal = bookedTotal;
    $("#formRegistrationHeadcount").val(bookedTotal);

    saveRegToWaitlist = parseInt($('#saveToWaitlist').val());
    waitlistActive = $('#waitlistActive').val();

    $('.TOTAL_HEAD_COUNT').html(bookedTotal);

	if (bookedTotal == 0) {
        $("#nonAdmin_alinksave").addClass('hidden');
    } else {
        $("#nonAdmin_alinksave").removeClass('hidden');
	}

    if (regLimitOverride == true && !saveRegToWaitlist) {
        $('#addNewRegistrantButton').removeAttr('disabled');
        $("#limitsOverriden").removeClass('hidden');
        $(".override").text("Settings Overridden");
        $(".override").addClass("fontColorRed");
        $("#OverRideSetting").val("True");
        $(".relationsDropDown").addClass('hidden');

        $(".eventRegistrations .autoDiv").addClass('hidden');
        $(".guestsDropDown").addClass('hidden');
        $("#SEARCH_MEMBERS").attr('placeholder', 'Select from Members');
    } else {
        var newEventSize = staticDBHeadcount - thisRegDBHeadcount + bookedTotal;
        var newTimeSlotSize = parseInt($("#timeSelected option:selected").attr("current"));
        var waitlistEnabled = $('#waitListEnabledClicked').val();
        var uregID = $('#UREG_ID').val();

        if (newEventSize >= maxEventSize && regLimitOverride == false && !saveRegToWaitlist) {  //if limits are over the max event size
            if (saveRegToWaitlist === 0 || !waitlistEnabled) {
                if (!hideMaximumAlert) {
                    $("#maxEventLimitReached").removeClass('hidden');
                }
                $("#addPersonDiv").addClass('hidden');
                $('#addNewRegistrantButton').prop('disabled', true);
            }
        } else {
            if (bookedTotal >= maxPartySize && (regLimitOverride == false || waitlistEnabled)) {  //if limits are over the max registration size
                //if (saveRegToWaitlist === 0) {
                $("#addPersonDiv").addClass('hidden');
                $('#addNewRegistrantButton').prop('disabled', true);
                if (!hideMaximumAlert) {
                    $("#maxEventLimitReached").removeClass('hidden');
                }
                //}
            } else {
                $("#maxLimitReached").addClass('hidden');
                if (newTimeSlotSize >= tmpMaxTimeSlot && regLimitOverride == false) {  //if limits are over the max time slot size
                    if (saveRegToWaitlist === 0) {
                        $("#addPersonDiv").addClass('hidden');
                        $('#addNewRegistrantButton').prop('disabled', true);
                    }
                } else {
                    $("#maxLimitReached").addClass('hidden');
                    $("#addPersonDiv").removeClass('hidden');
                    $('#addNewRegistrantButton').removeAttr('disabled');
                }
            }
            $("#maxEventLimitReached").addClass('hidden');
        }

        if (minPartySize != "No Minimum" && minPartySize > 1) {
            if (bookedTotal < minPartySize && !hideMinimumAlert) {
                $("#minimumNotReached").removeClass('hidden');
            } else {
                $("#minimumNotReached").addClass('hidden');
            }
        }

        if (window.IS_PUBLIC_REGISTRATION == false) {
            if (minGuestThisRegistration > 0) {
                if (guestTotal < minGuestThisRegistration && !regLimitOverride) {
                    $("#minimumGuestNotReached").removeClass('hidden');
                } else {
                    $("#minimumGuestNotReached").addClass('hidden');
                }
            }
        }

        //hide selection boxes once used.
        $(".relationsDropDown").addClass('hidden');
        $('.relatedBookingMember').addClass('hidden');
        $(".eventRegistrations .autoDiv").addClass('hidden');
        $('.guestsDropDown').addClass('hidden');
        $('#addNewRegistrantButton').attr('data-registrantTypeSelected', '');
    }

    UpdateCalculatedHeadcounts();
    formatCurrentPartySizeDisplay();

    // hide or show change booking reg when regOthers and other members exist.
    if (parseInt($('#regOthers').val()) === 1) {
        if (namedTotal - currentEventDetails.currentGuestReg > 1) {
            $('#ChangeBookingBox').removeClass('hidden');
        } else {
            $('#ChangeBookingBox').addClass('hidden');
        }
    }
}

// Changes the event size totals in the footer.
function UpdateEventSize() {
    var newEventTotal = externalEventTotal + bookedTotal;
    currentEventSize = newEventTotal;
    currentEventDetails.currentEventSize = newEventTotal;
    formatEventSizeDisplay();
}

//Changes the page footer timeslot headcount totals and the drop down display.
function UpdateTimeSlotHeadcounts(inSelectedTimeSlotID, inMaxTimeSlot, inResetBookTotal, inChangedValue, inRevertToPreviousValue, inThisArrayPosition) {
    var tmpNewPartySize = inResetBookTotal + inChangedValue;

    if ($(".timeSelection").length) {
        if (inMaxTimeSlot > 0 && tmpNewPartySize > inMaxTimeSlot && regLimitOverride == false) {
            alert("This request exceeds the time slot limit.");
            previousCountedValues[inThisArrayPosition] = inRevertToPreviousValue;
            $("select[name=UREG_HEADCOUNT_" + inThisArrayPosition).val(inRevertToPreviousValue);
            $("select[name=UREG_HEADCOUNT_" + inThisArrayPosition).trigger('change');

            UpdateCounts();
            UpdateEventSize();
            UpdateRegistrationSummary();
            return;
        } else {
            var currentTimeSlotHeadCount = parseInt($("#timeSelected option[value=" + inSelectedTimeSlotID + "]").attr("current"));

            var newTimeSlotTotal = currentTimeSlotHeadCount - inRevertToPreviousValue + inChangedValue;

            changeDropDownTimeDisplay('change', inSelectedTimeSlotID, newTimeSlotTotal, 'UpdateTimeSlot');
        }
    }
}

function formatEventSizeDisplay() {
    var currentEventHeadCount = parseInt($("#currentEventHeadCount").text());

    if (currentEventHeadCount > parseInt(maxEventSize)) {
        $("#currentEventHeadCount").addClass("fontColorRed");
        $("#currentEventHeadCount").addClass("text-bold");
        $("#maxEventText").addClass("fontColorRed");

        //if party size reached warning is displayed don't show event level warning
        if ($("#maxLimitReached").hasClass('hidden') == false || regLimitOverride == true) {
            $("#maxEventLimitReached").addClass('hidden');
        } else {
            if (!saveRegToWaitlist) {
                $("#addPersonDiv").addClass('hidden');
                $("#maxEventLimitReached").removeClass('hidden');
            }
        }
    } else if (currentEventHeadCount == parseInt(maxEventSize)) {
        //if party size reached warning is displayed don't show event level warning
        if ($("#maxLimitReached").hasClass('hidden') == false) {
            $("#maxEventLimitReached").addClass('hidden');
        } else {
            if (!regLimitOverride) {
                if (bookedTotal >= maxPartySize) {
                    $("#maxLimitReached").removeClass('hidden');
                    $("#maxEventLimitReached").addClass('hidden');
                } else {
                    if (!saveRegToWaitlist) {
                        $("#maxEventLimitReached").removeClass('hidden');
                    }
                }
            }
            if (waitlistActive === 'False' && !saveRegToWaitlist) {
                removeWaitlistSettings();
            }
        }
        if (!regLimitOverride && !saveRegToWaitlist) {
            $("#addPersonDiv").addClass('hidden');
            //if (saveRegToWaitlist) {
            //    $("#maxLimitReached").removeClass('hidden');
            //}
        }
    } else {
        // if time slots are in use these settings have happened elsewhere
        if ($("#timeSelected").val() === 0) {
            $("#currentEventHeadCount").removeClass("fontColorRed");
            $("#currentEventHeadCount").removeClass("text-bold");
            $("#maxEventText").removeClass("fontColorRed");
            $("#maxEventLimitReached").addClass('hidden');
            $("#addPersonDiv").removeClass('hidden');
        }
    }

    // if guest registrations are in use change the max setting colors
    if ($('#guestsAllowed').val() > 0) {
        if (guestTotal > maxGuestThisRegistration) {
            $("#guestRegMaxText").addClass("fontColorRed");
        } else {
            $("#guestRegMaxText").removeClass("fontColorRed");
        }

        if (guestEventTotal > maxGuestEventHeadcount) {
            $("#guestEventMaxText").addClass("fontColorRed");
        } else {
            $("#guestEventMaxText").removeClass("fontColorRed");
        }
    }
}

// NUMBER OF REGISTRANTS HAS DROPPED BELOW NEED FOR WAITLIST && EVENT ISN'T CURRENTLY IN WAITLIST MODE
function removeWaitlistSettings() {
    $('#saveToWaitlist').val('0');
    if ($('#nonAdmin_alinksave').text().indexOf('Save') >= 0) {
        $('#nonAdmin_alinksave').text("Save Registration");
    } else if ($('#nonAdmin_alinksave').text().indexOf('Update') >= 0) {
        $('#nonAdmin_alinksave').text('Update Registration');
    }

    $('.eventRegHeadcountSummaryBox').removeClass('hidden');
}

//Changes Display if over the limit
function formatCurrentPartySizeDisplay() {
    var tmpCurrentSize = parseInt($('.TOTAL_HEAD_COUNT').first().text());

    if (tmpCurrentSize > maxPartySize || tmpCurrentSize < minPartySize) {
        $(".TOTAL_HEAD_COUNT").addClass("fontColorRed");
        if (tmpCurrentSize > maxPartySize) {
            $("#maxPartyText").addClass("fontColorRed");
        }

        if (tmpCurrentSize < minPartySize) {
            $("#minPartyText").addClass("fontColorRed");
        }
    } else {
        $(".TOTAL_HEAD_COUNT").removeClass("fontColorRed");
        $("#maxPartyText").removeClass("fontColorRed");
        $("#minPartyText").removeClass("fontColorRed");
    }
}

// Format the Time Slot Headcount Display
function formatCurrentTimeSlotDisplay() {
    var tmpCurrentTimeSlotCount = parseInt($("#currentTimeSlotCount").text());
    //Getting newSelectedMax value again because under certain conditions it's not set for admins.
    newSelectedMax = parseInt($("#timeSelected option:selected").attr("max"));

    if (newSelectedMax > 0 && tmpCurrentTimeSlotCount > newSelectedMax) {
        $("#currentTimeSlotCount").addClass("fontColorRed");
        $("#currentTimeSlotCount").removeClass("text-bold");
        $("#maxTimeSlotText").addClass("fontColorRed");
        // if ($("#userType").val() === "Admin") {
        //         $("#limitsOverriden").removeClass('hidden');
        //         regLimitOverride = true;
        // }
    } else if (newSelectedMax > 0 && tmpCurrentTimeSlotCount == newSelectedMax) {
        if (regLimitOverride == false) {
            $("#timeSlotLimitReached").removeClass('hidden');
            $("#addPersonDiv").addClass('hidden');
        }
    } else {
        $("#currentTimeSlotCount").removeClass("fontColorRed");
        $("#currentTimeSlotCount").removeClass("text-bold");
        $("#maxTimeSlotText").removeClass("fontColorRed");
        $("#timeSlotLimitReached").addClass('hidden');

        //Unhide addpersondiv only if registration limits have not been met
        if ($("#maxLimitReached").hasClass('hidden') == true) {
            $("#addPersonDiv").removeClass('hidden');
            $('#addNewRegistrantButton').removeAttr('disabled');
        }

        if (regLimitOverride == false) {
            $("#limitsOverriden").addClass('hidden');
        }
    }
}

// Format the Time Slot Registration Count Display
function formatCurrentTimeSlotRegistrationDisplay() {
    var tmpCurrentTimeRegCount = parseInt($("#currentTimeRegistrationCount").text());
    var tmpMaxTimeReg = parseInt($("#maxTimeRegistrationCount").text());

    if (tmpMaxTimeReg > 0 && tmpCurrentTimeRegCount > tmpMaxTimeReg) {
        $("#currentTimeRegistrationCount").addClass("fontColorRed");
        $("#currentTimeRegistrationCount").removeClass("text-bold");
        $("#maxTimeRegistrationText").addClass("fontColorRed");
        $("#limitsOverriden").removeClass('hidden');
    } else {
        $("#currentTimeRegistrationCount").removeClass("fontColorRed");
        $("#currentTimeRegistrationCount").removeClass("text-bold");
        $("#maxTimeRegistrationText").removeClass("fontColorRed");
        $("#limitsOverriden").addClass('hidden');
    }
}

// CHANGING THE TIME IN THE DROP-DOWN
function changeDropDownTimeDisplay(inAction, inTimeSlotID, inQuantity, inCalledFrom) {
    var newDisplayTime = '', selectedValue = '';
    if ($("#userType").val() === "BookedRegistrant") {
        selectedValue = $("#timeSelected").text();
    } else {
        selectedValue = $("#timeSelected option[value=" + inTimeSlotID + "]").text();
    }
    var selectedTime = selectedValue.substring(0, selectedValue.indexOf("-"));
    var selectedMax;
    if ($("#userType").val() === "BookedRegistrant") {
        selectedMax = parseInt($("#timeSelected").attr("max"));
    } else {
        selectedMax = parseInt($("#timeSelected option[value=" + inTimeSlotID + "]").attr("max"));
    }
    var selectedCurrentHC = parseInt($("#timeSelected option[value=" + inTimeSlotID + "]").attr("current"));
    var currentTimeAvailableCt = selectedMax - selectedCurrentHC;
    var registrationMax = parseInt($("#timeSelected option[value=" + inTimeSlotID + "]").attr("regMax"));
    var registrationCurrent = parseInt($("#timeSelected option[value=" + inTimeSlotID + "]").attr("regCurrent"));

    if (inAction == 'add') {
        var AvailableCtMinusInQty = currentTimeAvailableCt - inQuantity;
        var increaseHC;
        if (selectedMax > 0) {
            if (AvailableCtMinusInQty >= 0 || regLimitOverride == true) {
                increaseHC = parseInt(selectedCurrentHC) + inQuantity;

                //Only change Time Slot display if user type is Admin or GSC setting to hide headcount is not checked.
                if ($('#userType').val() === 'Admin' || $('#hideTimeSlotHeadcount').val() === 'False') {
                    if (AvailableCtMinusInQty >= 0) {
                        newDisplayTime = selectedTime + ' - ' + AvailableCtMinusInQty + ' available';
                    } else {
                        newDisplayTime = selectedTime + ' - 0 available';
                    }

                    $("#timeSelected option[value=" + inTimeSlotID + "]").text(newDisplayTime);
                }

                $("#timeSelected option[value=" + inTimeSlotID + "]").attr("current", increaseHC);

                $("#currentTimeSlotCount").text(increaseHC);
            } else {
                alert("This request exceeds the time slot limit.");
                $('#addRelatedPerson').prop('selectedIndex', 0);
                $('#addGuestPerson').prop('selectedIndex', 0);

                UpdateCounts();
                UpdateEventSize();
                UpdateRegistrationSummary();
                return false;
            }
            //if no registration maximums just update the headcounts for donut dislpay.
        } else {
            increaseHC = parseInt(selectedCurrentHC) + inQuantity;

            $("#timeSelected option[value=" + inTimeSlotID + "]").attr("current", increaseHC);
        }

        // Check for registration limits and change color display
        if (registrationMax > 0 && inCalledFrom == "timeChange") {
            //if (registrationMax > 0 ) {
            //    $("#timeSelected option[value=" + inTimeSlotID + "]").attr("regcurrent", registrationCurrent + 1);
            $("#currentTimeRegistrationCount").text(registrationCurrent + 1);
            if (registrationCurrent + 1 >= registrationMax) {
                $("#timeSelected option[value=" + inTimeSlotID + "]").attr("class", "overTimeSlotRegLimit");
            } else {
                $("#timeSelected option[value=" + inTimeSlotID + "]").attr("class", "");
            }
        } else {
            $("#timeSelected option[value=" + inTimeSlotID + "]").attr("regcurrent", registrationCurrent);
        }
    }

    if (inAction == 'change') {
        if (!inQuantity) {
            inQuantity = 0;
        }

        $("#timeSelected option[value=" + inTimeSlotID + "]").attr("current", inQuantity);
        $("#currentTimeSlotCount").text(inQuantity);

        if (selectedMax > 0) {
            var AvailableCtOnChange = selectedMax - inQuantity;

            //Only change Time Slot display if user type is Admin or GSC setting to hide headcount is not checked.
            if ($('#userType').val() === 'Admin' || $('#hideTimeSlotHeadcount').val() === 'False') {

                if (AvailableCtOnChange >= 0) {
                    newDisplayTime = selectedTime + ' - ' + AvailableCtOnChange + ' available';
                } else {
                    newDisplayTime = selectedTime + ' - 0 available';
                }

                $("#timeSelected option[value=" + inTimeSlotID + "]").text(newDisplayTime);
            }
        }
    }

    if (inAction == 'delete') {
        var tmpCurrentValue;
        var tmpDisplayValue;

        tmpCurrentValue = parseInt(selectedCurrentHC) - parseInt(inQuantity);
        tmpDisplayValue = parseInt(selectedMax) - parseInt(selectedCurrentHC) + parseInt(inQuantity);

        if (tmpCurrentValue < 0) {
            tmpCurrentValue = 0;
        }

        $("#timeSelected option[value=" + inTimeSlotID + "]").attr("current", tmpCurrentValue);

        $("#currentTimeSlotCount").text(tmpCurrentValue);

        //Booked Member Values are static and need to be captured differently.
        if ($("#userType").val() === "BookedRegistrant") {
            if (selectedMax > 0) {
                tmpDisplayValue = $("#timeSelected").attr("max") - $("#timeSelected").attr("current") + 1;
                //Only change Time Slot display if user type is Admin or GSC setting to hide headcount is not checked.
                if ($('#userType').val() === 'Admin' || $('#hideTimeSlotHeadcount').val() === 'False') {
                    $("#timeSelected").text(selectedTime + ' - ' + tmpDisplayValue + ' available');
                }
            }
            $("#timeSelected").attr("current", $("#timeSelected").attr("current") - 1);
        }

        if (selectedMax > 0) {
            //Only change Time Slot display if user type is Admin or GSC setting to hide headcount is not checked.
            if ($('#userType').val() === 'Admin' || $('#hideTimeSlotHeadcount').val() === 'False') {
                if (tmpDisplayValue <= 0) {
                    newDisplayTime = selectedTime + ' - 0 available';
                } else if (tmpDisplayValue > selectedMax) {
                    newDisplayTime = selectedTime + ' - ' + selectedMax + ' available';
                } else {
                    newDisplayTime = selectedTime + ' - ' + tmpDisplayValue + ' available';
                }
                $("#timeSelected option[value=" + inTimeSlotID + "]").text(newDisplayTime);
            }
        }

        if (registrationMax > 0) {
            // $("#timeSelected option[value=" + inTimeSlotID + "]").attr("regcurrent", registrationCurrent - 1);
            //$("#currentTimeRegistrationCount").text(registrationCurrent - 1);
            if (registrationCurrent - 1 >= registrationMax) {
                $("#timeSelected option[value=" + inTimeSlotID + "]").attr("class", "overTimeSlotRegLimit");
            } else {
                $("#timeSelected option[value=" + inTimeSlotID + "]").attr("class", "");
            }
        }
    }

    formatCurrentTimeSlotDisplay();
    // formatCurrentTimeSlotRegistrationDisplay();
}

// TIME SELECTION FOR EVENT CHANGED
function timeSelectionChange(previousTimeSlot) {
    newSelectedMax = parseInt($("#timeSelected option:selected").attr("max"));
    var newSelectedCurrent = parseInt($("#timeSelected option:selected").attr("current"));
    var tmpCurrentPartySize = parseInt($('.TOTAL_HEAD_COUNT').first().text());
    var newPartySize = newSelectedCurrent + tmpCurrentPartySize;
    var selectedTimeSlotID = $("#timeSelected option:selected").val();
    var registrationMax = parseInt($("#timeSelected option:selected").attr("regMax"));
    var registrationCurrent = parseInt($("#timeSelected option:selected").attr("regCurrent"));
    var prevRegCount = parseInt($("#timeSelected option[value=" + previousTimeSlot + "]").attr("regcurrent"));
    //  var prevHeadcount = parseInt($("#timeSelected option[value=" + previousTimeSlot + "]").attr("current"));

    //if the selection is the Default - remove time from current slot and don't do other checks
    if (selectedTimeSlotID === "0") {

        alert("Please select a valid time.");
        $("#timeSelected").val(previousTimeSlot);
        $("#timeSelected option[value=" + previousTimeSlot + "]").attr("selected", "selected");
        return;
        //$("#timeSelected option[value=" + previousTimeSlot + "]").attr("regcurrent", prevRegCount - 1);
        //changeDropDownTimeDisplay('delete', previousTimeSlot, tmpCurrentPartySize, 'timeChange');
    } else {
        //Check to see if registration maximums have been met.
        if (registrationMax > 0 && registrationCurrent >= registrationMax && regLimitOverride == false) {
            alert("The registration count limit for this time slot has been met.");
            //    $("#timeSelected").val(previousTimeSlot);
            $("#timeSelected option[value=" + previousTimeSlot + "]").attr("selected", "selected");
            return;
        }

        //Check to see if the current registrants fit in the time slot.
        if (newSelectedMax > 0 && newPartySize > newSelectedMax && regLimitOverride == false) {
            alert("Your party size exceeds the available spaces for this time slot.");
            $("#timeSelected").val(previousTimeSlot);
            //$("#timeSelected  option[value=" + previousTimeSlot + "]").attr("current", newPartySize);
            //$("#timeSelected option[value=" + previousTimeSlot + "]").attr("selected", "selected");
            return;
        }

        var timeSelectDisplay;
        //Only show time save dialog boxes if there are restrictions for the time slot.
        if (newSelectedMax > 0 || registrationMax > 0) {
            if ($("#isRegistered").attr('value') == "false") {
                timeSelectDisplay = "The time selected will be reserved once registration is saved.";
            } else {
                timeSelectDisplay = "The new time will not be confirmed until saved.\n\nNOTE: The time slot will revert to the original time if this time is no longer available.";
            }

            //  $("#timeSelected option:selected").attr("current", newPartySize);

            // REMOVE the registrations from the previous time.
            if (parseInt(previousTimeSlot) > 0) {
                //Reset current headcount and registration count for delete
                //  var revertHeadcount = prevHeadcount - tmpCurrentPartySize;
                //    $("#timeSelected option[value=" + previousTimeSlot + "]").attr("current", revertHeadcount);
                $("#timeSelected option[value=" + previousTimeSlot + "]").attr("regcurrent", prevRegCount - 1);
                $("#timeSelected option[value=" + previousTimeSlot + "]").attr('selected', false);

                //Change current dropdown display for delete
                changeDropDownTimeDisplay('delete', previousTimeSlot, tmpCurrentPartySize, 'timeChange');
            }

            // ADD to current registration.
            //Reset current headcount and registration count for delete
            //  $("#timeSelected option[value=" + selectedTimeSlotID + "]").attr("current", newPartySize);
            $("#timeSelected option[value=" + selectedTimeSlotID + "]").attr("regcurrent", registrationCurrent + 1);
            $("#timeSelected option[value=" + selectedTimeSlotID + "]").attr('selected', true);

            //Change current dropdown display for delete
            changeDropDownTimeDisplay('add', selectedTimeSlotID, tmpCurrentPartySize, 'timeChange');
        }
    }
}

// PAGE LOAD
// search the data list stored in memory for matching items.
function searchMembers() {
    if ($(searchInput).val().trim().length < 3) {
        // it's possible for the user to clear the input without triggering the event handler.
        $('.autoComplete').addClass('hidden').find('ul').html('');
        userSearch = $(searchInput).val().trim();
        return;
    }

    var member = $.grep(returnedValues, function (item) {
        return item.value.toLowerCase().indexOf(userSearch.toLowerCase()) > -1;
    });

    var $list = $('.autoComplete ul');
    $list.html('');
    if (!member.length) {
        $('.autoComplete ul').html('<li data-regUserId="invalidUser" >No Records returned from Search for:  ' + userSearch + '</li>');
    } else {
        $.each(member, function (i, item) {
            // check for whether user is registered or whether they are already selected
            var isRegistered = item.isRegistered == 1;

            if (!isRegistered) {
                // loop through hidden inputs of registrant ids
                // if we have a match we are registered
                isRegistered = $(".RegistrantID[value='" + item.id + "']").length
            }

            if (isRegistered) {
                $list.append('<li data-regUserId=""><span class="fontColorLightGray" id="gray">' + item.value + ' (registered)</span></li>');
            } else {
                $list.append('<li data-regUserId=' + item.id + ' data-name="' + item.member_name + '" data-number="' + item.member_number + '" >' + item.value + '</li>');
            }
        });
    }
    $('.autoComplete').removeClass('hidden');
}
// get data from MRM
function getData(userSearch) {
    var searchTypeURLParemeter = '&SEARCH_TYPE=' + typeAheadSearchType;

    $.getJSON(searchURL + userSearch + searchTypeURLParemeter, function (response) {
        if (response.status === 0) {
            returnedValues = response.values;
            searchMembers();
        } else {
            $('.autoComplete ul').html('<li data-regUserId="invalidUser" >' + response.status_msg + ' ' + userSearch + '</li>');
            $('.autoComplete').removeClass('hidden');
        }
    });
}

function validateAdd() {
    var ct = $("#REG_PARTY_SIZE").text();
    var mct = $("#REG_MAX_PARTY_SIZE").text();
    return (ct < mct)
}

function checkForDups(uid) {
    // check if already used somewhere
    var isDup = false;
    $("#USER_TABLE tr").find("input:checkbox:checked").each(function () {
        var id = $(this).val();
        if (id == uid) {
            isDup = true;
        }
    });
    return isDup;
}

function doAddUser(inID, inName) {
    if (validateAdd()) {
        if (!checkForDups(inID)) {
            var $tr = $("#USER_TABLE").find("tr");

            var $tr = $("#USER_TABLE").find("tr").last().clone();
            $tr.find("td").first().text("Member");
            $tr.find("td").eq(1).text(inName);
            $tr.find("td").eq(2).find("input:checkbox").remove();

            // $cb = $tr.find("td").eq(2).find("input:checkbox").val(uid);

            var html = '<input type="checkbox" id="UREG_USER_ID" value="' + inID + '" class="userCheckbox" CHECKED>';

            $tr.find("td").eq(2).append($(html));

            $("#USER_TABLE").find("tr").last().after($tr);
            updatePartySize();

            return true;
        } else {
            alert(userHeading + " " + inName + " has already been added");
            return false;
        }
    } else {
        alert("Unable to add Another " + userHeading + " due to Max Party Size of " + $("#REG_MAX_PARTY_SIZE").text());
        return false;
    }
}

function updatePartySize() {
    var ct = 0;
    var ids = "";
    $("#USER_TABLE tr").find("input:checkbox:checked").each(function () {
        ct++;
        if (ct > 1) ids = ids + ",";
        ids = ids + $(this).val();
    });
    $("#REG_PARTY_SIZE").text(ct);
    $("#UREG_USER_IDS").val(ids);
};

// Change Select Option Color

function changeSelectOptionColor(pos) {
    pos.className = "form-control " + pos[pos.selectedIndex].className;
    pos.blur();
}
window.changeSelectOptionColor = changeSelectOptionColor;

// SETTINGS TO CHANGE IF USER OPTS TO CHANGE TO WAITLIST FROM ADD PERSON BUTTON OR ADMIN DEFINED POP-UP WINDOW
function saveThisRegToWaitlist() {
    $("#OverRideSetting").val("True");
    if (regLimitOverride == false) {
        $('#saveToWaitlist').val('1');
        if ($('#nonAdmin_alinksave').text().indexOf('Save') >= 0) {
            var linkText = "Save to " + WaitlistText();
            $('#nonAdmin_alinksave').text("Save to " + WaitlistText());
        } else if ($('#nonAdmin_alinksave').text().indexOf('Update') >= 0) {
            $('#nonAdmin_alinksave').text('Update and Move to ' + WaitlistText());
        }
        $('#maxEventLimitReached').addClass('hidden');
        $('.eventRegHeadcountSummaryBox').addClass('hidden');
        $("#addPersonDiv").removeClass('hidden');
        $('#addNewRegistrantButton').removeAttr('disabled');
    }
    regLimitOverride = true;
    $('#savingToWaitlist').removeClass('hidden');
    $('#waitListEnabledClicked').val('1');
    $('#moveToWaitlist').val('true');
    //$('#saveToWaitlist').val('1');
    //$('.override').addClass('hidden');
    //$("#limitsOverriden").removeClass('hidden');
}

function addPersonTypeAhead(inRegID, inRegName) {
    //Don't allow member to add themselves.
    var bookingMemberID = $('#BOOKING_MEMBER').val();
    if (parseInt(inRegID) === parseInt(bookingMemberID)) {
        alert('You are added to the registration by default.')
        //$(".eventRegistrations .autoDiv").addClass('hidden');
        return;
    }

    registrantType = $('#addNewRegistrantButton').attr('data-registrantTypeSelected');
    var registrantTypeDesc = getRegistrantTypeDesc(registrantType);

    var originalRegistrantType = "M";
    if( registrantType == 'N') originalRegistrantType = 'N';

    var template = getTemplate(registrantType,inRegID, inRegName);

    // if ($(".timeSelection").length) {
    //     var selectedTimeSlotID = $("#timeSelected option:selected").val();
    //     if (changeDropDownTimeDisplay('add', selectedTimeSlotID, 1, 'registrantAdd')) {
    //          return;
    //      }
    //  }

    var canAddRegistrant = false;
    if (isNaN(maxPartytSize) == true) {
        canAddRegistrant = true;
    } else if (bookedTotal + 1 <= maxPartytSize || regLimitOverride) {
        canAddRegistrant = true;
    }

    var guestLimitAlert = '';

    var canAddGuest = false;
    //Guest check for max registration and max event here
    if (registrantType === "N") {

        if (isNaN(maxGuestThisRegistration) || maxGuestThisRegistration === 0) {
            maxGuestThisRegistration = WICKED_BIG_NUMBER;
        }

        if (isNaN(maxGuestEventHeadcount) || maxGuestEventHeadcount === 0) {
            maxGuestEventHeadcount = WICKED_BIG_NUMBER;
        }

        //maxGuestThisRegistration = parseInt($('#maxGuestThisRegistration').val());
        guestTotal = parseInt($('#newThisRegGuestHeadcount').val());
        if (isNaN(guestTotal)) {
            guestTotal = 0;
        }
        //maxGuestEventHeadcount = parseInt($('#maxGuestEventHeadcount').val());
        guestEventTotal = parseInt($('#newEventGuestHeadcount').val());
        if (isNaN(guestEventTotal)) {
            guestEventTotal = 0;
        }

        //Waitlist must override limits to be added to the db.  Make sure only Admins can override actual guest limits.
        var allowGuestOverride = false;
        var thisUserType = $('#userType').val();
        if (thisUserType === 'Admin' && regLimitOverride) {
            //if override is true and override button hidden admin has actively chosen to override limits not just add to waitlist.
            if (regLimitOverride && !$('#limitsOverriden').hasClass('hidden')) {
                allowGuestOverride = true;
            }
        }

        if (guestTotal + 1 <= maxGuestThisRegistration || allowGuestOverride) {
            if (guestEventTotal + 1 <= maxGuestEventHeadcount || allowGuestOverride) {
                canAddGuest = true;
                guestTotal = guestTotal + 1;
                //Reset Guest Values
                var newEventTotal = guestEventTotal + 1;
                $('#newEventGuestHeadcount').val(newEventTotal);
                var newRegTotal = guestTotal + 1;
                $('#newThisRegGuestHeadcount').val(guestTotal);
                $('#formRegistrationGuestHeadcount').val(guestTotal);
                $('#addGuestButton_' + inRegID).addClass('hidden');
                $(".guestsDropDown").addClass('hidden');
            } else if (!allowGuestOverride) {
                guestLimitAlert = 'This exceeds the Guest Event Level Limit of ' + maxGuestEventHeadcount + ' for this event.';
                $(".guestsDropDown").addClass('hidden');
            }
        } else if (!allowGuestOverride) {
            guestLimitAlert = 'This exceeds the Guest Registration Limit of ' + maxGuestThisRegistration + ' for this registration.';
            $(".guestsDropDown").addClass('hidden');
        }
    } else {
        canAddGuest = true;
    }

    if ((canAddRegistrant == true && canAddGuest == true) || allowGuestOverride) {
        var isAlreadyRegistered = false;
        var inComingName = inRegName;

        if (inComingName.indexOf("registered") > 0) {
            isAlreadyRegistered = true;
        }

        if (IsMemberRegistered(inRegID) == false && isAlreadyRegistered == false) {
            addItemTemplate(template);
            //$("#Booking_Resident_Container").append('<div class="Booked_Resident bookedRow" id="Person_' + inRegID + '"><input type="hidden" class="RegistrantBillCode" value=0/><input type="hidden" class="RegistrantID" name="UREG_USER_ID[]" value="' + inRegID + '"/><div class="Type typeColumn">' + $("#registrantTypeSelect option:selected").text() + '</div><input type="hidden" class="REGISTRANT_TYPE" name="REGISTRANT_TYPE" id="REGISTRANT_TYPE" value="' + inRegID + '-' + $("#registrantTypeSelect option:selected").val() + '"><div class="Name nameColumn">' + inRegName + '</div><div class="regCount hidden">1</div><div class="guestOfColumn"  id="guestOfColumn_' + inRegID + '"></div><div class="infoColumn"><button class="infoButton actionButton"><i class="fa fa-info-circle"></i></button></div><div  class="Remove removeColumn"><button class="actionButton"><i class="fa fa-minus"></i></button></div></div>');

            //if a new registration the guestof info doesn't exist use the template.

            var thisGuestOfType;
            var assignMemberResponsibility;

            assignMemberResponsibility = $('#assignMemberResponsibility').val();
            var tmpBookingMemberID = $('#BOOKING_MEMBER').val();
            thisGuestOfID = $('#guestOfColumn_' + inRegID).find('.guestOfID  option:selected').val();;
            thisGuestOfName = $('#guestOfColumn_' + inRegID).find('.guestOfID  option:selected').text();

            // related will still get booking member
            if( registrantType == "M" && window.CLUB_CONFIG_EVENTREG_ASSIGN_MEMBER_RESPONSIBILITYOF_TO_MEMBER ) {
                //tmpBookingMemberID = inRegID;
                thisGuestOfID = inRegID;
                thisGuestOfName = inRegName;
            }

            //Member Search name is last, first until after reg is saved.  Change to first last.
            if (thisGuestOfName.indexOf(',') > 0) {
                thisGuestOfNameArray = thisGuestOfName.split(',');
                thisGuestOfName = thisGuestOfNameArray[1] + ' ' + thisGuestOfNameArray[0];
            }

            if (registrantType === "N" || assignMemberResponsibility === 'True') {
                // if (registrantType === "N") {
                var guestOfDropDowns = $('select.guestOfID').length;

                if (guestOfDropDowns > 0) {
                    if( registrantType != "M" && thisGuestOfID == tmpBookingMemberID) {
                        $('#Person_' + inRegID).find('.guestOfID option[value=' + thisGuestOfID + ']').attr('selected', 'selected');
                    }

                    thisGuestOfType = $('#guestOfColumn_' + inRegID).find('.guestOfID  option:selected').attr('guestoftype');

                    //Add new registrant to all guest of selection drop-downs
                    if (registrantType !== "N") {
                        $('.guestOfID').append($('<option>', { value: inRegID, text: inRegName, guestoftype: 'N' }));
                    }

                    if( registrantType == "M" && window.CLUB_CONFIG_EVENTREG_ASSIGN_MEMBER_RESPONSIBILITYOF_TO_MEMBER) {
                        $('#guestOfColumn_' + inRegID).find('#guestOfID').val(thisGuestOfID);
                        $('#guestOfColumn_' + inRegID).find('.guestOfID').attr('value', thisGuestOfID);
                    }
                } else {
                    thisGuestOfType = "M"; // hard coded in asp and js

                    $('#guestOfColumn_' + inRegID).find('#guestOfID').val(thisGuestOfID);
                    $('#guestOfColumn_' + inRegID).find('.guestOfID').attr('value', thisGuestOfID);
                    $('#guestOfColumn_' + inRegID).find('.guestOfID').html(thisGuestOfName);
                    $('#guestOfColumn_' + inRegID).find('#guestOfName').attr('value', thisGuestOfName);
                }

                $('#guestOfColumn_' + inRegID).find('.guestoftype').val(thisGuestOfType);
                $('#addGuestButton_' + inRegID).addClass('hidden');
                $('#checkmark_' + inRegID).removeClass('hidden');
                $('#Person_' + inRegID).find('#guestOfInfo').val(inRegID + '*' + thisGuestOfID + '*' + thisGuestOfName.trim());
                //Include Guest of Dropdown for members but hide the selection and set the value to 0.
            } else {
                $('#Person_' + inRegID).find('.guestOfID').addClass('hidden');
                //Add new registrant to all guest of selection drop-downs
                if ($('#guestOfAssignmentAllowed').val() === 'True') {
                    $('.guestOfID').append($('<option>', { value: inRegID, text: inRegName, guestoftype: 'M' }));
                    $('#Person_' + inRegID).find('.guestOfID').val(thisGuestOfID);
                } else {
                    $('#guestOfColumn_' + inRegID).find('#guestOfID').val('');
                    $('#guestOfColumn_' + inRegID).find('.guestoftype').val('');
                }
            }

            if (originalRegistrantType == "M") {
                if ($("#addRelatedPerson option[value='" + inRegID + "']").length > 0) {
                    // if ($("#registrantTypeSelect").val() === "R") {
                    $("#addRelatedPerson option[value='" + inRegID + "']").text($("#addRelatedPerson option[value='" + inRegID + "']").text() + " (registered)");
                    $("#addRelatedPerson option[value='" + inRegID + "']").addClass('fontColorLightGray');
                }
            }


            //edit time slot if using time
            if ($(".timeSelection").length) {
                var selectedTimeSlotID = $("#timeSelected option:selected").val();
                if (changeDropDownTimeDisplay('add', selectedTimeSlotID, 1, 'registrantAdd')) {
                    return;
                }
            }

            //Check to see if the Guest of Heading should be displayed - Only display if guests are on the registration
            checkForGuestOfDisplay();
            if ( window.PAGE_ENABLE_PAYMENT_PROCESSING ) {
                fetchRegistrantBillCode(inRegID, originalRegistrantType, true);
            }
        } else {
            alert("This person is already registered");
        }

        $('#addGuestPerson').prop('selectedIndex', 0);
        $('#addRelatedPerson').prop('selectedIndex', 0);

        UpdateCounts();
        UpdateEventSize();
        UpdateRegistrationSummary();
    }

    if (guestLimitAlert.length > 0) {
        alert(guestLimitAlert);
    }
}

function overRideLimits() {
    regLimitOverride = true;
    $(".override").text("Settings Overridden");
    $(".override").addClass("fontColorRed");
    $("#addPersonDiv").removeClass('hidden');
    $("#limitsOverriden").removeClass('hidden');
    $("#maxLimitReached").addClass('hidden');
    $("#minimumNotReached").addClass('hidden');
    $("#minimumGuestNotReached").addClass('hidden');
    $("#maxEventLimitReached").addClass('hidden');
    $("#OverRideSetting").val("True");
    $(".mrm.registrationWarning").addClass('hidden');
    $(".registrationTable").removeClass('hidden');
    if( window.FUNCT_BILLING == true && window.ALLOW_CANCEL == false ) {
        // probably a paid item or billed, we cannot allow cancel
        $("#BTN_CANCEL").addClass('hidden');
    }
    else {
        $("#BTN_CANCEL").removeClass('hidden');
    }

    $("#OverRideSetting").val('true');
    $('#addNewRegistrantButton').removeAttr('disabled');

    //If override add headcount options to 100 in all dropdown menus.
    $(".adminDefinedCount").each(function () {
        var thisCountedSelected = parseInt($('option:selected', this).val());

        var maxCount = $(this).attr('max-count');
        if (maxCount == 0) {
            maxCount = 100;
        }

        $(this).empty();

        for (i = 0; i <= maxCount; i++) {
            if (i === thisCountedSelected) {
                $(this).append('<option value="' + i + '" Selected>' + i + '</option>');
            } else {
                $(this).append('<option value="' + i + '">' + i + '</option>');
            }
        }
    });

    $(".adminDefinedNoCount").each(function () {
        var thisUnCountedSelected = parseInt($('option:selected', this).val());
        var maxCount = $(this).attr('max-count');
        if (maxCount == 0) {
            maxCount = 100;
        }
        $(this).empty();
        for (i = 0; i <= maxCount; i++) {
            if (i === thisUnCountedSelected) {
                $(this).append('<option value="' + i + '" Selected>' + i + '</option>');
            } else {
                $(this).append('<option value="' + i + '">' + i + '</option>');
            }
        }
    });
}

var searchURL = '';
var userSearch;
var returnedValues = '';
var typeAheadSearchType = '';
//&CAL_ID =' + $("#cal_id").val() + '
var searchInput = '#SEARCH_MEMBERS';

function initEventReg() {
    //---------------------------------------------------------------------------------------
    //START TYPE AHEAD CODE
    setTimeout(function () {
        $('.regButtonHolderThing').show()
        $('.uil-ellipsis-css').hide();
    }, 1500);

    var memfac = $("#cal_item_mem_fac").val();
    searchURL = '/common/Includes/Member_Search_API.asp?ACTION=FILTER_LIST&FIELD=USER_NAME_LAST&USER_ID=' + window.USER_ID;
    searchURL += '&USER_TYPE=' + $("#userType").val() + '&CAL_ID=' + $("#CLUBCAL_ID").val() + '&MEM_FAC_ID=' + memfac + '&VALUE=';

    // on keyup of the search field, check if the length is greater than 2.
    // if it is, and there's no stored data, get it from MRM, otherwise, check the stored data
    $(searchInput).keydown(function (e) {
        // up
        if (e.keyCode == 38) {
            if ($('.autoComplete li').length) {
                if ($('.autoComplete li.highlight').length) {
                    $('.autoComplete li.highlight').removeClass('highlight').prev().addClass('highlight');
                } else {
                    $('.autoComplete li:last-of-type').addClass('highlight');
                }
            }
        }
        // down
        if (e.keyCode == 40) {
            if ($('.autoComplete li').length) {
                if ($('.autoComplete li.highlight').length) {
                    $('.autoComplete li.highlight').removeClass('highlight').next().addClass('highlight');
                } else {
                    $('.autoComplete li:first-of-type').addClass('highlight');

                }
            }
        }
    });

    $(searchInput).keypress(function (e) {
        if (e.keyCode == 13) {
            e.stopPropagation();
            e.preventDefault();
            if ($('.autoComplete li.highlight').length) {
                $('.autoComplete li.highlight').click();
            }
            return false;
        }
    });

    $(searchInput).keyup(function (e) {
        if (e.keyCode == 13 || e.keyCode == 37 || e.keyCode == 38 || e.keyCode == 39 || e.keyCode == 40) {
            return;
        }

        userSearch = $(this).val().trim();
        if (userSearch.length > 2 && returnedValues === '') {
            getData(userSearch);
        } else if (userSearch.length <= 2) {
            returnedValues = '';
            $('.autoComplete').addClass('hidden').find('ul').html('');
        } else {
            searchMembers();
        }
    });

    // when the user clicks an item, add it to the search field
    $('.autoComplete ul').on('click', 'li', function () {
        // prevent the user from selecting an error message as a booked member
        if ($(this).attr('data-regUserId') == 'invalidUser') {
            return;
        }
        addPersonTypeAhead($(this).attr('data-regUserId'), $(this).attr('data-name'));
        $(searchInput).val('');
        $('.autoComplete').addClass('hidden');
    });

    // when user focuses on input, it should search if there's a value there
    $(searchInput).focus(function () {
        if (userSearch && userSearch.length > 2 && $('.autoComplete ul li').length > 0) {
            userSearch = $(this).val();
            searchMembers();
        }
    });
    // handle user clicking out of the search box. If they over the dropdown, don't close it.
    $(searchInput).blur(function () {
        setTimeout(function () {
            if ($('.autoComplete').is(':hover')) {
                return;
            }
            $('.autoComplete').addClass('hidden');
        }, 300)

    });

    //END TYPE AHEAD CODE
    //---------------------------------------------------------------------------------------

    //START DOCUMNET.READY JAVASCRIPT TAKEN FROM VIEW_CLUB_CALENDARITEM.ASP
    //if Group Registration send to the group
    $("#eventRegGroupRegisterButton").click(function () {
        var groupID = $(this).attr("rgid");

        window.location = "/club/scripts/calendar/Register_Group.asp?RGID=" + groupID;
    });

    // Set default values
    if ($("#OverRideSetting").val()) {
        if ($("#OverRideSetting").val().toLowerCase() === "true") {
            regLimitOverride = true;
            overRideLimits();
        }
    } else {
        console.warn("No Override Setting field found");
    }

    // Set Global Guest Variables
    guestTotal = parseInt($('#newThisRegGuestHeadcount').val());
    maxGuestThisRegistration = parseInt($('#maxGuestThisRegistration').val());
    maxGuestEventHeadcount = parseInt($('#maxGuestEventHeadcount').val());
    minGuestThisRegistration = parseInt($('#minGuestThisRegistration').val());
    guestEventTotal = parseInt($('#staticDBGuestHeadcount').val());

    //Only display GuestOf text if a Non member is present.
    checkForGuestOfDisplay();
    var emptyGuestOfCount;
    $(".guestOfID").each(function () {
        registrantType = $(this).parents('.bookedRow').find('#REGISTRANT_TYPE').val();
        if (registrantType) {
            if (registrantType.indexOf("N") > 0) {
                emptyGuestOfCount = emptyGuestOfCount + 1;
            }
        }
    });

    //check for registered or not and display form or registerbutton accordingly.
    thisRegDBHeadcount = $("#thisRegDBHeadcount").val();
    newSelectedMax = parseInt($("#timeSelected option:selected").attr("max"));
    waitlistActive = $('#waitlistActive').val();
    saveToWaitlist = $('#saveToWaitlist').val();

    var calledFromMobileApp = $("#calledFromMobileApp").val();

    // its a div with a value attribute?
    var isRegisteredValue = $("#isRegistered").attr('value');

    //If is not registered hide form and show buttons.
    if ($('#eventIsClosed').val() === 'True') {
        $("#eventIsClosedDisplay").removeClass('hidden');
    }
    else if (isRegisteredValue == "false") {
        //Mobile App goes directly to the form unless registration is unavailable.
        if (calledFromMobileApp === "False" || (calledFromMobileApp === "True" && $(".registrationWarning").length)) {
            if (waitlistActive === "True" || saveToWaitlist === "1") {
                $(".eventRegWaitlistButton").removeClass('hidden');
            } else {
                if (!saveRegToWaitlist) {
                    $(".eventRegRegisterButton").removeClass('hidden');
                }
            }
            $(".eventRegLandingPageViewRegButton").removeClass('hidden');
            $(".eventRegLandingPageViewWaitlistButton").removeClass('hidden');
            if (!window.SYSTEM_IS_CLUBCORP) {
                $(".eventRegistrations").addClass('hidden');
            }
            if (regLimitOverride == false) {
                $("#timeSelected").val('0');
            }
        }
    }

    if ($(".mrm.registrationWarning").length && regLimitOverride == false) {
        $(".registrationTable").addClass('hidden');
        $(".mrm.registrationWarning").removeClass('hidden');
        $(".eventRegRegisterButton").addClass('hidden');
        $(".eventRegWaitlistButton").addClass('hidden');

    } else {
        $(".mrm.registrationWarning").addClass('hidden');
        $(".registrationTable").removeClass('hidden');
    }

    bookedTotal = 0;

    maxPartytSize = currentEventDetails.maxPartySize;
    currentEventSize = currentEventDetails.currentEventSize;
    currentEventGuests = currentEventDetails.currentNumReg;

    if (currentEventDetails.maxEventSize > 0) {
        maxEventSize = currentEventDetails.maxEventSize;
    } else {
        maxEventSize = WICKED_BIG_NUMBER; // parseInt($("#maxSize").val());
    }

    if (currentEventDetails.minEventSize > 0) {
        minPartySize = currentEventDetails.minPartySize;
    } else {
        minPartySize = 1; // parseInt($("#maxSize").val());
    }

    externalEventTotal = maxEventSize;

    //Get Default Headcount breakout totals
    var defaultHeadCountBreakOutTotal = 0;

    $('.adminDefinedCount').each(function () {
        defaultHeadCountBreakOutTotal += parseFloat(this.value);
    });

    bookedTotal = bookedTotal + defaultHeadCountBreakOutTotal;

    // var previousCountedValues = [];
    var arrayPosition;

    //Capture current values of Additional counted to revert to if necessary.
    $(".adminDefinedCount").each(function () {
        arrayPosition = $(this).attr("name").replace(/\D/g, '');
        previousCountedValues[arrayPosition] = parseInt($(this).val());
    });

    $("#maxLimitReached").addClass('hidden');
    $("#limitsOverriden").addClass('hidden');
    $("#minimumNotReached").addClass('hidden');
    $("#maxEventLimitReached").addClass('hidden');
    $(".debugDiv").addClass('hidden');
    $("#timeSlotLimitReached").addClass('hidden');

    UpdateCounts();
    formatEventSizeDisplay();
    formatCurrentPartySizeDisplay();

    //Check if outside of the edit window and highlight warning.
    if ($("#CanNotEdit").length || window.EditRestrictionsExist) {
        $("#editsTimeDisplay").addClass("fontColorRed");
    }

    //Check if outside of the cancel window and highlight warning.
    if (window.CancelRestrictionsExist) {
        $("#cancelTimeDisplay").addClass("fontColorRed");
    }



    var inTimeSlotCurrentHeadcount, inTimeSlotMax, inTimeSlotRegMax, inTimeSlotCurrentReg;
    // if ($(".timeSelection").length) {
    if ($("#timeSelected").length) {
        //field is a select if user can edit and a div if they can't.  Get correct fieldID.
        if ($("#timeSelected option:selected").length) {
            inTimeSlotCurrentHeadcount = $("#timeSelected option:selected").attr("current");
            inTimeSlotMax = $("#timeSelected option:selected").attr("max");
            inTimeSlotRegMax = $("#timeSelected option:selected").attr("regmax");
            inTimeSlotCurrentReg = $("#timeSelected option:selected").attr("regcurrent");
        } else {
            inTimeSlotCurrentHeadcount = $("#timeSelected").attr("current");
            inTimeSlotMax = $("#timeSelected").attr("max");
            inTimeSlotRegMax = $("#timeSelected").attr("regmax");
            inTimeSlotCurrentReg = $("#timeSelected").attr("regcurrent");
        }

        if (inTimeSlotMax > 0) {
            $("#currentTimeSlotCount").text(inTimeSlotCurrentHeadcount);
            $("#maxTimeSlot").text(inTimeSlotMax);

            formatCurrentTimeSlotDisplay();
        }

        if (inTimeSlotRegMax > 0) {
            $("#currentTimeRegistrationCount").text(inTimeSlotCurrentReg);
            $("#maxTimeRegistrationCount").text(inTimeSlotRegMax);

            formatCurrentTimeSlotRegistrationDisplay();
        } else {
            $("#registrationCountDisplay").addClass('hidden');
        }

        // CHANGING REGISTRATION TIME SELECTIONS
        var revertToPreviousTimeSlot = 0;

        $("#timeSelected").on('focus', function () {
            revertToPreviousTimeSlot = $(this).val();
        }).change(function () {
            timeSelectionChange(revertToPreviousTimeSlot);
        });

    }

    externalEventTotal = parseInt(currentEventSize) - currentEventDetails.currentPartySize;

    $(document).on("click", "button.Remove", function () {
        removeAdditionalMember(this, true);
    });

    // ADDING REGISTRANT LOGIC
    $("#addRelatedPerson").change(function () {
        var inComingRegID = $(this).val();
        var inComingName = $("#addRelatedPerson option:selected").text();
        if (!inComingRegID){return false } // there should be some clear option here?
        if (!$('.relatedBookingMember').hasClass('hidden') && $('#assign-related-booking-member').is(':checked')) {
            if (!IsMemberRegistered(inComingRegID) && inComingName.indexOf("(") < 0 ) {
                var originalBookingRegistrant = $('.Booking_Resident').find('.RegistrantID').val();

                $('.Booking_Resident').find('.RegistrantID').val(inComingRegID);
                $('.Booking_Resident').find('.REGISTRANT_TYPE').val(inComingRegID + '-B');
                $('.Booking_Resident').find('.REGISTRANT_TYPE').attr('name', 'REGISTRANT_TYPE_' + inComingRegID);
                $('.Booking_Resident').find('.registrant_name').html(inComingName);
                $("#addRelatedPerson option:selected").prop('disabled', true);
                $('#addGuestPerson').prop('selectedIndex', 0);
                $('#addRelatedPerson').prop('selectedIndex', 0);
                $('.relatedBookingMember').html('');
                $('.isTemplate').each(function () {
                    $(this).find('#guestOfID').val(inComingRegID);
                    $(this).find('#guestOfName').val(inComingName);
                    $(this).find('#guestOfInfo').val('[NEW_REGISTRANT_ID]*' + inComingRegID + '*' + inComingName);
                    $(this).find('.guestOfID').attr('value', inComingRegID).html(inComingName);
                });
                $('.bookedRow.NewPerson').each(function () {
                    $(this).find('#guestOfID').val(inComingRegID);
                    $(this).find('#guestOfName').val(inComingName);
                    $(this).find('#guestOfInfo').val($(this).find('.RegistrantID').val() + '*' + inComingRegID + '*' + inComingName);
                    $(this).find('.guestOfID').attr('value', inComingRegID).html(inComingName);
                });
                //registrantTypeSelect

                UpdateCounts();
                UpdateEventSize();
                UpdateRegistrationSummary();
            } else {
                alert(inComingName.substring(0, inComingName.indexOf("(")) + ' is already registered for this event.');
                $('#addRelatedPerson').prop('selectedIndex', 0);
            }
        } else {
            addPersonTypeAhead(inComingRegID, inComingName);
        }
    });

    $("#addGuestPerson").change(function () {
        var inComingRegID = $("#addGuestPerson").val();
        var inComingName = $("#addGuestPerson option:selected").text();
		AddUpdateGuest(inComingRegID);
    //    addPersonTypeAhead(inComingRegID, inComingName);
    });

    // SHOWS INITIAL REGISTRATION FORM TO MEMBERS WHEN REGISTER BUTTON IS CLICKED.
    $("#eventRegRegisterButton").click(function () {
        $(".eventRegistrations").removeClass('hidden');
        $(".eventRegRegisterButton").addClass('hidden');
        $(".eventRegLandingPageViewRegButton").addClass('hidden');
    });

    // SHOWS INITIAL REGISTRATION FORM TO MEMBERS WHEN ADD TO WAITLIST BUTTON IS CLICKED.
    $("#eventRegWaitListButton").click(function () {
        $(".eventRegistrations").removeClass('hidden');
        $(".eventRegWaitlistButton").addClass('hidden');
        $(".eventRegLandingPageViewRegButton").addClass('hidden');
    });

    // REGISTRANT HAS OPTED TO SAVE THE REGISTRATION TO WAITLIST
    $("#enableWaitListButton").click(function () {
        saveThisRegToWaitlist();
		UpdateRemainingBalances();
    });

    // ADMIN DEFINED COUNTER LOGIC
    $(".adminDefinedCount").change(function () {
        var newBreakoutTotal = 0;
        var newNamedTotal = 0;
        var waitlistEnabled = $('#waitListEnabledClicked').val();
        saveRegToWaitlist = $('#saveToWaitlist').val();
        var resetGuestTotal;
        var resetGuestEventTotal;
        var newEventTotal;
        var canAddGuest = 'false';

        // removes previous select value from the bookedTotal and Current Event Size.

        //Capture current reset value and reset to current value.
        thisArrayPosition = $(this).attr("name").replace(/\D/g, '');

        var revertToPreviousValue = parseInt(previousCountedValues[thisArrayPosition]);
        if (isNaN(revertToPreviousValue)) {
            revertToPreviousValue = 0;
        }

        previousCountedValues[thisArrayPosition] = parseInt($(this).val());
        var resetBookedTotal = bookedTotal - revertToPreviousValue;
        var resetEventSize = currentEventSize - revertToPreviousValue;

        var tmpMaxTimeSlot = parseInt($("#timeSelected option:selected").attr("max"));
        var tmpOriginalTimeCt = parseInt($("#timeSelected option:selected").attr("original"));
        var resetTimeSlot = parseInt($("#timeSelected option:selected").attr("current"));
        var selectedTimeSlotID = $("#timeSelected option:selected").val();
        var newValue = Number($(this).val());

        var isMemberField = ($(this).attr('member'));

        //thisRegDBHeadcount = $("#thisRegDBHeadcount").val();

        $('.adminDefinedCount').each(function () {
            newBreakoutTotal += parseInt(this.value);
        });

        newRegTotal = parseInt(namedTotal) + newBreakoutTotal;

        //if (newValue < revertToPreviousValue && isMemberField === 'true') {
        if (newValue < revertToPreviousValue) {
            if (isMemberField === 'false') {
                resetGuestTotal = parseInt($('#newThisRegGuestHeadcount').val()) - revertToPreviousValue;
                resetGuestEventTotal = parseInt($('#newEventGuestHeadcount').val()) - revertToPreviousValue;
                guestTotal = resetGuestTotal + newValue;
                newEventTotal = resetGuestEventTotal + newValue;
                guestEventTotal = newEventTotal;
                $('#newEventGuestHeadcount').val(newEventTotal);
                $('#newThisRegGuestHeadcount').val(guestTotal);
                $('#formRegistrationGuestHeadcount').val(guestTotal);
            }

            UpdateCounts();
            UpdateEventSize();
            UpdateRegistrationSummary();
            UpdateTimeSlotHeadcounts(selectedTimeSlotID, tmpMaxTimeSlot, resetBookedTotal, newValue, revertToPreviousValue, thisArrayPosition);
        } else {
            if (isNaN(tmpMaxTimeSlot) || tmpMaxTimeSlot === 0) {
                tmpMaxTimeSlot = WICKED_BIG_NUMBER;
            }

            //if Not a member category check guest totals first.
            if (isMemberField === 'false') {
                var guestLimitAlert = '';

                if (isNaN(maxGuestThisRegistration) || maxGuestThisRegistration === 0) {
                    maxGuestThisRegistration = WICKED_BIG_NUMBER;
                }

                if (isNaN(maxGuestEventHeadcount) || maxGuestEventHeadcount === 0) {
                    maxGuestEventHeadcount = WICKED_BIG_NUMBER;
                }

                //Waitlist must override limits to be added to the db.  Make sure only Admins can override actual guet limits.
                var allowGuestOverride = false;
                var thisUserType = $('#userType').val();
                if (thisUserType === 'Admin' && regLimitOverride) {
                    //if override is true and override button hidden admin has actively chosen to override limits not just add to waitlist.
                    if (regLimitOverride && !$('#limitsOverriden').hasClass('hidden')) {
                        allowGuestOverride = true;
                    }
                }

                resetGuestTotal = parseInt($('#newThisRegGuestHeadcount').val()) - revertToPreviousValue;
                resetGuestEventTotal = parseInt($('#newEventGuestHeadcount').val()) - revertToPreviousValue;

                if (((maxGuestEventHeadcount == 0 || (maxGuestEventHeadcount > 0 && resetGuestEventTotal + newValue <= maxGuestEventHeadcount)) && (resetEventSize + newValue <= maxEventSize || saveRegToWaitlist === '1')) || allowGuestOverride) {

                    if ((resetGuestTotal + newValue <= maxGuestThisRegistration && resetBookedTotal + newValue <= maxPartySize) || allowGuestOverride) {
                        canAddGuest = true;
                        guestTotal = resetGuestTotal + newValue;
                        //Reset Guest Values
                        newEventTotal = resetGuestEventTotal + newValue;
                        $('#newEventGuestHeadcount').val(newEventTotal);
                        var newRegTotal = resetBookedTotal + newValue;
                        $('#newThisRegGuestHeadcount').val(guestTotal);
                        $('#formRegistrationGuestHeadcount').val(guestTotal);
                        guestEventTotal = newEventTotal;
                        if (resetGuestTotal + newValue >= minGuestThisRegistration || window.IS_PUBLIC_REGISTRATION ) {
                            $("#minimumGuestNotReached").addClass('hidden');
                        } else {
                            $("#minimumGuestNotReached").removeClass('hidden');
                        }
                    } else if (!allowGuestOverride) {
                        if (resetBookedTotal + newValue > maxPartySize) {
                            guestLimitAlert = 'This exceeds the headcount limit of ' + maxPartySize + ' for this registration.';
                            UpdateCounts();
                            UpdateEventSize();
                            UpdateRegistrationSummary();
                        } else {
                            guestLimitAlert = 'This exceeds the guest headcount limit of ' + maxGuestThisRegistration + ' for this registration.';
                            UpdateCounts();
                            UpdateEventSize();
                            UpdateRegistrationSummary();
                        }
                    }
                } else if (!allowGuestOverride) {
                    if (resetEventSize + newValue > maxEventSize && saveRegToWaitlist === '0') {
                        guestLimitAlert = 'This exceeds the Event Level Headcount Limit of ' + maxEventSize + ' for this event.';
                        UpdateCounts();
                        UpdateEventSize();
                        UpdateRegistrationSummary();
                    } else {
                        guestLimitAlert = 'This exceeds the Guest Event Headcount Level Limit of ' + maxGuestEventHeadcount + ' for this event.';
                        UpdateCounts();
                        UpdateEventSize();
                        UpdateRegistrationSummary();
                    }
                }
            } else {
                canAddGuest = 'true';
            }

            if (canAddGuest === 'false' && !allowGuestOverride) {
                previousCountedValues[thisArrayPosition] = revertToPreviousValue;
                alert(guestLimitAlert);
                $(this).val(revertToPreviousValue);
                $(this).trigger('change');
                UpdateCounts();
                UpdateEventSize();
                UpdateRegistrationSummary();
            } else {
                if (resetEventSize + newValue <= maxEventSize || regLimitOverride == true || saveRegToWaitlist === '1') {  //Checks if within the total event limit
                    if (resetBookedTotal + newValue <= maxPartySize || (regLimitOverride == true && waitlistEnabled === '0')) {  //Checks if within the registration
                        if (tmpMaxTimeSlot === WICKED_BIG_NUMBER) {  //if no time slots update records and exit
                            UpdateCounts();
                            UpdateEventSize();
                            UpdateRegistrationSummary();
                            UpdateTimeSlotHeadcounts(selectedTimeSlotID, tmpMaxTimeSlot, resetBookedTotal, newValue, revertToPreviousValue, thisArrayPosition);
                        } else {
                            //if ((resetEventSize + newValue) <= tmpMaxTimeSlot || regLimitOverride == true) {  //Checks if within the time slot limit
                            if (((tmpOriginalTimeCt - thisRegDBHeadcount) + newRegTotal) <= tmpMaxTimeSlot || regLimitOverride == true) {
                                UpdateTimeSlotHeadcounts(selectedTimeSlotID, tmpMaxTimeSlot, resetBookedTotal, newValue, revertToPreviousValue, thisArrayPosition);
                                UpdateCounts();
                                UpdateEventSize();
                                UpdateRegistrationSummary();

                            } else {
                                previousCountedValues[thisArrayPosition] = revertToPreviousValue;
                                alert("This request exceeds the allowed time slot limit. ");
                                $(this).val(revertToPreviousValue);
                                //$(this).trigger('change');
                                UpdateCounts();
                                UpdateEventSize();
                                UpdateRegistrationSummary();
                            }
                        }
                    } else {
                        previousCountedValues[thisArrayPosition] = revertToPreviousValue;
                        alert("This request exceeds the allowed registration headcount limit.\nThe maximum headcount allowed for this event is " + maxPartySize + ".");
                        $(this).val(revertToPreviousValue);
                        $(this).trigger('change');
                        UpdateCounts();
                        UpdateEventSize();
                        UpdateRegistrationSummary();
                    }
                } else {
                    waitlistAvailable = $('#waitlistAvailable').val();
                    if (saveRegToWaitlist === '0' || waitlistAvailable === "false") {
                        previousCountedValues[thisArrayPosition] = revertToPreviousValue;
                        alert("This request exceeds the allowed event level registration headcount limit.");
                        $(this).val(revertToPreviousValue);
                        $(this).trigger('change');
                    } else if (waitlistAvailable === "true" && saveRegToWaitlist === "0") {
                        var confirmText = "This request exceeds the allowed event level registration limit.\n If you continue this registration will be placed on the waitlist.\n\nContinue?"

                        var saveToWaitlistConfirm = confirm(confirmText);

                        if (saveToWaitlistConfirm) {
                            saveThisRegToWaitlist();
                        } else {
                            previousCountedValues[thisArrayPosition] = revertToPreviousValue;
                            alert("This request exceeds the allowed event level registration limit.");
                            $(this).val(revertToPreviousValue);
                            $(this).trigger('change');
                        }
                    }
                    UpdateCounts();
                    UpdateEventSize();
                    UpdateRegistrationSummary();
                }
                //  UpdateTimeSlotHeadcounts(selectedTimeSlotID, tmpMaxTimeSlot, resetBookedTotal, newValue, revertToPreviousValue, thisArrayPosition);
            } //if (newValue < revertToPreviousValue)
        } // if canAddGuest ==== 'false'

        //  Just in case guest modal is showing . . . hide it.
        $(".guestsDropDown").addClass('hidden');
    }); // END ADMIN DEFINED COUNTER LOGIC

    // OVERRIDE LIMITS FOR ADMIN.
    $(".override button").click(function () {
        overRideLimits();
    });

    //Check if event reg count is overridden and display alert.
    if ($("#maxRegOverride").val() == "True") {
        if (!$("#saveToWaitlist").val()) {
            $("#limitsOverriden").removeClass('hidden');
        }
    }

    //Controls Information button for all registrants in real time with ajax call.
    $(document).on('click', '.infoButton', function (e) {
        e.preventDefault();

        var infoRegistrantID;
        var infoRegistrantType;

        infoRegistrantID = $(this).parents('.bookedRow').find('.RegistrantID').val();
        infoRegistrantType = $(this).parents('.bookedRow').find('#REGISTRANT_TYPE').val();
        if (infoRegistrantType.indexOf("N") > 0) {
            infoRegistrantType = 'N';
        } else {
            infoRegistrantType = 'M';
        }

        var registrantInfoURL = '/common/Scripts/Calendar/Register_Get_Registrant_Info_ajax.asp';
        var thisClubID = $('#clubID').val();
        var thisUserID = infoRegistrantID;
        var thisUserType = infoRegistrantType;

        // Modified to use AJAX Load
        data = {
            club_id: thisClubID,
            user_id: thisUserID,
            user_type: thisUserType,
        };

        var container = $('#registrantInfoModal');
        container.load(registrantInfoURL, data, function () {
            if ($(container).html().length) {
                $(container).dialog({
                    title: "Registrant Details",
                    position: {
                        my: "center top",
                        at: "center top+150",
                        of: window
                    },
                    modal: true,
                    resizable: false,
                    buttons: {
                        "Done": function () {
                            $(this).dialog("close");
                        }
                    },
                    open: function (event, ui) {
                        $(".ui-dialog-titlebar-close", ui.dialog | ui).hide();
                    }
                });
            }
        });

    });

    currentEventDetails.maxPartySize = isNaN(+currentEventDetails.maxPartySize) ? 0 : currentEventDetails.maxPartySize;

    //Controls Guest Information Box
    $(document).on('click', '.guestInfoButton', function (e) {
        e.preventDefault();

        var guestInfoURL = '/common/Scripts/Calendar/Register_Guest_Get_Info_ajax.asp';
        var thisGuestID = $(this).attr('gid');
        var thisEventID = $('#event_id').val();
        var thisClubID = $('#guest_club_id').val();
        var thisUregUserID = $('#guest_created_by_ID').val();
        //pre-populate formContent with failure message which will be overwritten with valid data if successful.
        var formContent = 'The requested information failed to load.';
        //hide add to registration button unless successful.
        $('.nonMemInfoSave').addClass('hidden');

        if ($(this).attr('id') === 'AddNewGuestButton') {
            varTitle = "Add New Guest Information";
            isNew = true;
        } else {
            varTitle = "Edit Guest Information";
            isNew = false;
        }

        // Modified to use AJAX Load
        data = {
            club_id: thisClubID,
            guest_id: thisGuestID,
            event_id: thisEventID,
            uregUserID: thisUregUserID,
            check_Mandatory_Data: false
        };

        var el = $('#guestInfoModal');
        el.load(guestInfoURL, data, function () {
            $(el).find('.calloutRow').each(function () {
                if($(this).hasClass('hidden')) {
                    $(this).css({ 'display': 'none' });
                }
                else {
                    $(this).css({ 'display': '' });
                }
            });

            $(el).dialog({
                title: varTitle,
                position: {
                my: "center top",
                at: "center top+150",
                of: window
            },
                modal: true,
                resizable: false,
                buttons: {
                    "Save": function () {

                        saveGuestInformation(this, isNew);
                    }
                    , "Close": function () {


                        $(this).dialog("close");
                    }
                },
                open: function (event, ui) {
                    $(".ui-dialog-titlebar-close", ui.dialog | ui).hide();
                }
            });

        });
    });

    //NonMember Add to Registration button - check for missing data and add to registration
	function AddUpdateGuest(GuestID) {
        var guestInfoURL = '/common/Scripts/Calendar/Register_Guest_Get_Info_ajax.asp';
        var thisGuestID = GuestID;
        var thisEventID = $('#event_id').val();
        var thisClubID = $('#guest_club_id').val();
        var thisUregUserID = $('#guest_created_by_ID').val();
        var thisGuestName = $(this).attr('gName');
        if (thisGuestName == undefined) thisGuestName = '';

        isNew = thisGuestID == 0;

        // Modified to use AJAX Load
        data = {
            club_id: thisClubID,
            guest_id: thisGuestID,
            event_id: thisEventID,
            uregUserID: thisUregUserID,
            check_Mandatory_Data: !isNew
        };

        if (thisGuestID == 0) {
            varTitle = "Add New Guest";
        } else {
            varTitle = "Edit Guest Information";
        }

        var el = $('#guestInfoModal');
        el.load(guestInfoURL, data, function () {
            if ($(el).html().length) {
                $(el).dialog({
                    title: varTitle,
                    position: {
                        my: "center top",
                        at: "center top+150",
                        of: window
                    },
                    modal: true,
                    resizable: false,
                    buttons: {
                        "Save": function () {

                            saveGuestInformation(this, true);
                        }
                        , "Close": function () {
                            $(this).dialog("close");
                        }
                    },
                    open: function (event, ui) {
                        $(".ui-dialog-titlebar-close", ui.dialog | ui).hide();
                    }
                });
            }
            else {
                addPersonTypeAhead(thisGuestID, thisGuestName);
                $(".guestsDropDown").addClass('hidden');
            }
        });
    }

    //NonMember Add to Registration button - check for missing data and add to registration
    $(document).on('click', '.addGuestButton', function (e) {
        e.preventDefault();

        var guestInfoURL = '/common/Scripts/Calendar/Register_Guest_Get_Info_ajax.asp';
        var thisGuestID = $(this).attr('gid');
        var thisEventID = $('#event_id').val();
        var thisClubID = $('#guest_club_id').val();
        var thisUregUserID = $('#guest_created_by_ID').val();
        var thisGuestName = $(this).attr('gName');
        if (thisGuestName == undefined) thisGuestName = '';
        isNew = thisGuestID == 0;

        // Modified to use AJAX Load
        data = {
            club_id: thisClubID,
            guest_id: thisGuestID,
            event_id: thisEventID,
            uregUserID: thisUregUserID,
            check_Mandatory_Data: !isNew
        };

        if (thisGuestID == 0) {
            varTitle = "Add New Guest";
        } else {
            varTitle = "Edit Guest Information";
        }

        var el = $('#guestInfoModal');
        el.load(guestInfoURL, data, function () {
            if ($(el).html().length) {
                $(el).dialog({
                    title: varTitle,
                    position: {
                        my: "center top",
                        at: "center top+150",
                        of: window
                    },
                    modal: true,
                    resizable: false,
                    buttons: {
                        "Save": function () {
                            saveGuestInformation(this, isNew);
                        }, "Close": function () {
                            $(this).dialog("close");
                        }
                    },
                    open: function (event, ui) {
                        $(".ui-dialog-titlebar-close", ui.dialog | ui).hide();
                    }
                });
            }
            else {
                addPersonTypeAhead(thisGuestID, thisGuestName);
                $(".guestsDropDown").addClass('hidden');
            }
        });
    });

    //Guest form Validations
    $(document).on('blur', '#guest_first_name', function (e) {
        if ($('#guest_first_name').val().indexOf(',') >= 0) {
            var noCommaFirstName = $('#guest_first_name').val().replace(/,/g, '');
            $('#guest_first_name').val(noCommaFirstName);
            alert('Commas are not allowed in first name fields.');
        }
        var firstNameParensExist = false;
        if ($('#guest_first_name').val().indexOf('(') >= 0) {
            var noOpenParenFirstName = $('#guest_first_name').val().replace(/[(]/g, '');
            $('#guest_first_name').val(noOpenParenFirstName);
            var firstNameParensExist = true;
        }
        if ($('#guest_first_name').val().indexOf(')') >= 0) {
            var noCloseParenFirstName = $('#guest_first_name').val().replace(/[)]/g, '');
            $('#guest_first_name').val(noCloseParenFirstName);
            var firstNameParensExist = true;
        }
        if (firstNameParensExist) {
            alert('Parentheses are not allowed in first name fields.');
        }
    });

    $(document).on('blur', '#guest_last_name', function (e) {
        if ($('#guest_last_name').val().indexOf(',') >= 0) {
            var noCommaLastName = $('#guest_last_name').val().replace(/,/g, '');
            $('#guest_last_name').val(noCommaLastName);
            alert('Commas are not allowed in last name fields.');
        }
        var lastNameParensExist = false;
        if ($('#guest_last_name').val().indexOf('(') >= 0) {
            var noOpenParenLastName = $('#guest_last_name').val().replace(/[(]/g, '');
            $('#guest_last_name').val(noOpenParenLastName);
            var lastNameParensExist = true;
        }
        if ($('#guest_last_name').val().indexOf(')') >= 0) {
            var noCloseParenLastName = $('#guest_last_name').val().replace(/[)]/g, '');
            $('#guest_last_name').val(noCloseParenLastName);
            var lastNameParensExist = true;
        }
        if (lastNameParensExist) {
            alert('Parentheses are not allowed in last name fields.');
        }
    });

    $(document).on('blur', '#guest_age', function (e) {
        if ($('#guest_age').val().length) {
            var guestAge = $('#guest_age').val();
            var isAValidNumber = validateNumber(0, 120, guestAge, false);
            if (!isAValidNumber) {
                $('#guest_age').val('');
                alert('Please enter a valid Age.');
            }
        }
    });

    $(document).on('blur', '#guest_ghin_number', function (e) {
        if ($('#guest_ghin_number').val().length) {
            var ghinNumber = $('#guest_ghin_number').val();
            var isAValidNumber = ValidateNumberWithDashes(ghinNumber);
            if (!isAValidNumber) {
                $('#guest_ghin_number').val('');
                alert('Please enter a valid GHIN number.');
            }
        }
    });

    $(document).on('blur', '#guest_handicap_index', function (e) {
        if ($('#guest_handicap_index').val().length) {
            var handicapNumber = $('#guest_handicap_index').val();
            var isAValidNumber = validateNumber(-50, 50, handicapNumber, true);
            if (!isAValidNumber) {
                $('#guest_handicap_index').val('');
                alert('Please enter a valid Handicap Index.');
            }
        }
    });

    $(document).on('blur', '#guest_tennis_rating', function (e) {
        if ($('#guest_tennis_rating').val().length) {
            var tennisRating = $('#guest_tennis_rating').val();
            var isAValidNumber = validateNumber(1, 8, tennisRating, true);
            if (!isAValidNumber) {
                $('#guest_tennis_rating').val('');
                alert('Please enter a valid Tennis Rating.');
            }
        }
    });

    $(document).on('blur', '#guest_dob', function (e) {
        var birthdate = $('#guest_dob').val();
        if (birthdate.length) {
            birthdate = birthdate;
        }
        if (birthdate) {
            var dateCheck = new RegExp(/\b\d{1,2}[\/-]\d{1,2}[\/-]\d{4}\b/);
            var isValidDate = dateCheck.test(birthdate);

            if (!isValidDate) {
                var dateCheckFour = new RegExp(/\b\d{1,2}[\/-]\d{1,2}[\/-]\d{2}\b/);
                isValidDate = dateCheckFour.test(birthdate);
                if (isValidDate) {
                    try{
                        // user likely entered valid date with 2 digit year. let's try to solve this for them instead of dumping the entire thing
                        var arr = birthdate.split('/')
                        var currYear  = ((new Date()).getFullYear() + "").substr(-2)
                        if (+arr[2] > +currYear ) {
                            arr[2] = '19'+ arr[2]
                        } else {
                            arr[2] = '20' + arr[2]
                        }
                        arr = arr.join('/')
                        if (dateCheck.test(arr)) {
                            $('#guest_dob').val(arr);
                            setTimeout(function(){
                                alert('Date of Birth must have a four digit year. Please verify the year is correct');
                            }, 300)
                        }
                    } catch (e) {
                        $('#guest_dob').val('')
                        alert('Please enter a valid Date of Birth. (mm/dd/yyyy)');
                    }
                } else {
                    $('#guest_dob').val('')
                    alert('Please enter a valid Date of Birth. (mm/dd/yyyy)');
                }


            }
        }
    });

    $(document).on('blur', '#guest_phonenumber', function (e) {
        if ($('#guest_phonenumber').val().length) {
            var guestPhoneNumber = $('#guest_phonenumber').val();
            if (!ValidateNumberWithDashes(guestPhoneNumber)) {
                $('#guest_phonenumber').val('');
                alert('Please enter a valid Home Phone Number.');
            }
        }
    });

    $(document).on('blur', '#guest_phone_cell', function (e) {
        if ($('#guest_phone_cell').val().length) {
            var guestCellNumber = $('#guest_phone_cell').val();
            if (!ValidateNumberWithDashes(guestCellNumber)) {
                $('#guest_phone_cell').val('');
                alert('Please enter a valid Cell Phone Number.');
            }
        }
    });

    $(document).on('blur', '#guest_email', function (e) {
        if ($('#guest_email').val().length) {
            var email = $('#guest_email').val();
            if (!ValidateEmailAddress(email)) {
                alert('Please provide a valid email address');
                $('#guest_email').val('');
                email.focus;
                return false;
            }
        }
    });

    //Delete Non-Member from the default display list
    $(document).on('click', '.removeGuestButton', function (event) {

        var thisGuestID = '';
        var thisDisplayName = '';

        thisGuestID = $(this).attr('gid');
        thisDisplayName = $(this).parents('.guestRow').find('.Name').text();

        var deleteGuest = confirm(thisDisplayName + " will be removed from your " + $("#registrantTypeSelect option:selected").text() + " listing upon adding or updating a registration.  (Guest list removals do not take effect when canceling.)\n\nWould you like to continue?");

        if (deleteGuest === true) {
            //Add guest ID to hidden Remove Guest form field and display undo button.
            $('#removeGuest_' + thisGuestID).val(thisGuestID);
            $('#undoRemoveButton_' + thisGuestID).removeClass('hidden');

            //Add hidden classes and strike through class to deactivate guest
            $('#removeGuestButton_' + thisGuestID).addClass('hidden');
            $(this).parents('.guestRow').find('.addGuestButton').addClass('hidden');
            $(this).parents('.guestRow').find('.guestInfoButton').addClass('hidden');
            $(this).parents('.guestRow').find('.Name').addClass('guestDeleted');
        }
    });

    //Return Non-Member to the default display list
    $(document).on('click', '.undoRemoveButton', function (event) {

        var thisGuestID = '';

        thisGuestID = $(this).attr('gid');

        //Remove guest ID to hidden Remove Guest form field and display delete button.
        $('#removeGuest_' + thisGuestID).val('');
        $('#removeGuestButton_' + thisGuestID).removeClass('hidden');


        //Add hidden classes and strike through class to deactivate guest
        $('#undoRemoveButton_' + thisGuestID).addClass('hidden');
        if ($('#checkmark_' + thisGuestID).hasClass('hidden')) {
            $(this).parents('.guestRow').find('.addGuestButton').removeClass('hidden');
        }
        $(this).parents('.guestRow').find('.guestInfoButton').removeClass('hidden');
        $(this).parents('.guestRow').find('.Name').removeClass('guestDeleted');

    });

    //Change guestOfType if the GuestOfID changes
    $(document).on('change', '.guestOfID', function (event) {

        var thisGuestID = $(this).parents('.bookedRow').find('.RegistrantID').val();
        var thisGuestOfType = $('option:selected', this).attr('guestoftype');
        var thisGuestOfID = $('option:selected', this).val();
        var thisGuestOfName = $('option:selected', this).text();
        //Member Search name is last, first until after reg is saved.  Change to first last.
        if (thisGuestOfName.indexOf(',') > 0) {
            thisGuestOfNameArray = thisGuestOfName.split(',');
            thisGuestOfName = thisGuestOfNameArray[1] + ' ' + thisGuestOfNameArray[0];
        }
        $(this).siblings('.guestoftype').val(thisGuestOfType);
        $(this).siblings('#guestOfName').val(thisGuestOfName.trim());
        $(this).siblings('#guestOfInfo').val(thisGuestID + '*' + thisGuestOfID + '*' + thisGuestOfName.trim());
    });

    //------------------------------------------------------------------------------------------
    //Manage Status Display if group registrations are in use
    if ($('#regGroupID').val() > 0 && $("#regGroupType").val() !== "COURSE") {
        if ($('#UREG_STATUS option:selected').attr('headcount') > 0) {
            $('.adminDefined').removeClass('hidden')
            $('.headcountNoteColumn').addClass('hidden')
        } else {
            $('.adminDefined').addClass('hidden')
            $('.headcountNoteColumn').removeClass('hidden')
        }
    }
    //------------------------------------------------------------------------------------------
} // end initEventReg document.ready

function ValidateNumberWithDashes(thisPhoneNumber) {
    var checkPhoneNumber = new RegExp(/^[0-9-+]+$/);
    return checkPhoneNumber.test(thisPhoneNumber);
}

//VALIDATE NUMBER ENTRY
function validateNumber(minNumber, maxNumber, thisNumber, allowDecimal) {
    var isValid = true;
    var isNumeric;

    if (allowDecimal) {
        var checkforAlpha = new RegExp(/^[0-9-+\.]+$/);
    } else {
        var checkforAlpha = new RegExp(/^[0-9-+]+$/);
    }
    isNumeric = checkforAlpha.test(thisNumber);

    if (!isNumeric) {
        return false;
    }

    if (isNaN(parseFloat(thisNumber)) && !isFinite(thisNumber)) {
        isValid = false;
    } else if (thisNumber < minNumber || thisNumber > maxNumber) {
        isValid = false;
    }

    if (allowDecimal) {
        oneDot = thisNumber.split('.');
        if (oneDot.length > 2) {
            isValid = false;
        }
    }

    return isValid;
}

function checkForGuestOfDisplay() {
    var guestCount = 0;
    $(".guestOfID").each(function () {
        registrantType = $(this).parents('.bookedRow').find('#REGISTRANT_TYPE').val();
        if (registrantType) {
            if (registrantType.indexOf("N") > 0) {
                guestCount = guestCount + 1;
            }
        }
    });

    if (guestCount == 0) {
        $('#guestOfHeading').addClass('hidden');
    } else {
        $('#guestOfHeading').removeClass('hidden');
    }
}

//----------------------------------------------------------------------------------------------------------------
// START CHANGE BOOKING MEMBER FUNCTIONALITY

$(document).on('click', '#regChangeBookingButton', function (e) {
    $('.removeColumn').addClass('hidden');
    $('.changeBookingColumn').removeClass('hidden');
    $('#regChangeBookingButton').addClass('hidden');
    $('#regChangeBookingCancelButton').removeClass('hidden');

    var self = this;
    var foundPossible = false;
    $('.change-booking-member-star').each(function () {
        if (!$(self).parents('.bookedRow').hasClass('removing')) {
            $(this).css("visibility", "visible");
            foundPossible = true;
        }
    });
    if (foundPossible == false) {
        $("#JAVASCRIPT_ALERTS").removeClass('hidden').addClass('alert').addClass('alert-info').html('We could not find any possible new booking members. You may need to save any new registrants before you can assign them as booking member.');
    }
    $('.new-booking-member').each(function () {
        $(this).removeClass('new-booking-member');
        $(this).find('i').removeClass('far').addClass('fas');
    });

    //$('.user_instructions_container').html("To change the booking member, click on the star next to the member's name in the form below. To undo/cancel you change (prior to save), re-select the change... drop down and select Reset Booking Member.");
    //$('.user_instructions_container').removeClass('hidden');
});

$(document).on('click', '#regChangeBookingCancelButton', function (e) {
    $('.removeColumn').removeClass('hidden');
    $('.changeBookingColumn').addClass('hidden');
    $('#regChangeBookingButton').removeClass('hidden');
    $('#regChangeBookingCancelButton').addClass('hidden');
    $('#changeBookingProcessButton').addClass('hidden');
    $('#newBookingMember').val('');
    var name  = '';
    if ($('.former-booking-member').length) {
        name = $('.former-booking-member').parent().find('.registrant_name').text();
        $('.former-booking-member').removeClass('former-booking-member');
    }

    $('.change-booking-member-star').each(function () {
        $(this).css("visibility", "hidden");
    });

    var foundNew = false;
    $('.new-booking-member').each(function () {
        $(this).find('i').removeClass('fas').addClass('far');
        $(this).removeClass('new-booking-member');
        foundNew = true;
    });

    if (foundNew == true) {
        $('.newBookingMember').each(function () {
            $(this).val('false');
        });

        if (name.indexOf('(') > 0) {
            name = name.substr(0, name.indexOf(' ('));
        }
        if (name.indexOf('<') > 0) {
            name = name.substr(0, name.indexOf('<'));
        }

        var msg = name.trim() + ' will be restored as Booking Registrant.';
        $("#JAVASCRIPT_ALERTS").removeClass('hidden').addClass('alert').addClass('alert-info').html(msg);
    }

});

$(document).on('click', '.newBookMemUnchecked', function (e) {
    var clickedMemberID = $(this).val();
    $('.newBookMemUnchecked').removeClass('hidden');
    $('.newBookMemChecked').addClass('hidden');
    $('#cbu' + clickedMemberID).addClass('hidden');
    $('#cbc' + clickedMemberID).removeClass('hidden');
    //Set new booking member ID
    $('#newBookingMember').val(clickedMemberID);

});


$(document).on('click', '#changeBookingProcessButton', function (e) {
    var newBookingMemberID;
    var newBookingMemberName;
    var currentBookingMemberID;
    var currentBookingMemberName;
    var eventID;
    var regID;
    var memberHeadingDisplay;

    newBookingMemberID = $('#newBookingMember').val();
    newBookingMemberName = $('.new-booking-member').parents('.bookedRow').find('.registrant_name').text();
    currentBookingMemberID = $('#BOOKING_MEMBER').val();
    currentBookingMemberName = $('.former-booking-member').parents('.bookedRow').find('.registrant_name').text();
    memberHeadingDisplay = $('#MEMBER_HEADING').val();
    eventID = $('#eventID').val();
    regID = $('#UREG_ID').val();

    if (newBookingMemberID.length <= 0) {
        alert('Please select a new Booking ' + memberHeadingDisplay + '.');
        return false;
    }



    //Start jquery pop box to confirm combining registrations
    ; CHANGEBOOKINGMEMBER = {

        changeBookingMember: function (e) {
            e.preventDefault();

            var confirmText1 = 'Change Booking ' + memberHeadingDisplay + ' for this registration to ' + newBookingMemberName + '?'

            var html = '<div id="changeBookingMember-model-dialog"><h1>Change Booking ' + memberHeadingDisplay + '?</h1></br>';
            html += '<div class="changeBookingMemberAlertText" id="confirmText1">' + confirmText1 + '</div>';
            html += '</div>';

            $(html).dialog({
                title: 'Change Booking ' + memberHeadingDisplay,
                modal: true,
                draggable: false,
                resizable: false,
                position: {
                my: "center top",
                at: "center top+150",
                of: window
            },
                //show: 'blind',
                //hide: 'blind',
                width: 500,
                buttons: {
                    "Cancel": function () {
                        $(this).dialog("close");
                        return false;
                    },
                    "Change": function () {

                        //$("form[name='frmMain']").submit();
                        var url = "/admin/scripts/registrations/Reg_Change_Booking_Member_API.asp";
                        $.ajax({
                            type: "POST",
                            data: {
                                CLUBCAL_ID: eventID,
                                UREG_ID: regID,
                                newBook: newBookingMemberID,
                                newBookName: newBookingMemberName,
                                oldBook: currentBookingMemberID
                            },

                            url: url, success: function (result) {
                                if (result.SUCCESS == 1)
                                {
                                    window.location = "/admin/scripts/registrations/reg_edit.asp?URID=" + result.UREG_ID;
                                }
                            }
                        });
                    },

                },
                open: function (event, ui) {
                    $(".ui-dialog-titlebar-close", ui.dialog | ui).hide();
                }
            });
        }
    }



    CHANGEBOOKINGMEMBER.changeBookingMember(e);



});

// END CHANGE BOOKING MEMBER FUNCTIONALITY
//----------------------------------------------------------------------------------------------------------------

//START VALIDATION JAVASCRIPT TAKEN FROM VIEW_CLUB_CALENDARITEM.ASP
//This code must live here for the mobile app to function properly.

// function confirmCancel() {
//     var cancelPath = $('#cancelPath').val();
//     if (confirm("Are you sure you want to Cancel this entire Registration ?")) {
//         $('#nonAdmin_BTN_CANCEL').html('<i class="fa fa-spinner fa-spin"></i> Cancelling Registration...');
//         $('#frmCancel').submit();
//     }
// }

/* --------------------------------------------------------------------------------------
  Leaving the above code until we confirm this will not break mobile app functionality
  --------------------------------------------------------------------------------------- */

function getCancelDialogText() {
    var dlgHtml = '<div id="cancel-reservations-model-dialog" style="z-index: 9999;">';
    dlgHtml += '<h2>Cancel Reservations?</h2></br>';
    dlgHtml += '<p>Are you sure you wish to cancel the selected reservations?</p>';
    dlgHtml += '</div>';

    return dlgHtml;
}


function confirmCancel() {
    var dlgHtml = getCancelDialogText();

    $(dlgHtml).dialog({
        modal: true,
        draggable: true,
        resizable: false,
        position: {
            my: "center top",
            at: "center top+150",
            of: window
        },
        show: 'blind',
        hide: 'blind',
        width: 500,
        buttons: {
            "Close": function () {
                $(this).dialog("close");
                return false;
            },
            "Cancel Reservation": function () {
                $('#nonAdmin_BTN_CANCEL').html('<i class="fa fa-spinner fa-spin"></i> Cancelling Registration...');
                $('#frmCancel').submit();
                $(this).dialog("close");
            }
        },
        open: function (event, ui) {
            $(".ui-dialog-titlebar-close", ui.dialog | ui).hide();
        }
    });
}
//------------------------------------------------------------------

function fetchRegistrantBillCode(inRegID, registrantType, updateSummary)
{
    var getBillingInfoUrl = '/common/scripts/calendar/Register_Get_Registrant_Billing_Info_Ajax.asp';
    var data = {
        CCID: window.CLUBCAL_ID,
        User_ID: inRegID,
        user_type: registrantType
    };

    $.get(getBillingInfoUrl, data, function (d) {
        if (d.Person != undefined) {
            $('.RegistrantID').each(function() {
                if( $(this).val() == inRegID )
                {
                    let billCodeId = parseInt(d.Person.BillCode);
                    if(isNaN(billCodeId) === false){
                        $(this).parent().find('.RegistrantBillCode').val(d.Person.BillCode);
                    }

                    let price = parseFloat(d.Person.Price);
                    if(isNaN(price) === false){
                        if(price < 0){
                            $(this).parent().parents('.bookedRow').find('.registrant_price').html("");
                        } else {
                            $(this).parent().parents('.bookedRow').find('.registrant_price').html('($' + d.Person.Price + ')');
                        }
                    }
                }
            });
        }
        if ( updateSummary == true ) {
            UpdateRegistrationSummary();
        }
    });
}

function UpdateRemainingBalances() {
    var url = window.EVENTREGISTRATIONSERVICE_API_URL + '/GetEventRegistrationTotals';
    var data = {
        ClubID: window.CLUB_ID,
        CID: window.CLUBCAL_ID,
        URID: window.UREG_ID,
        Waitlist: window.IS_WAITLIST
    };

    $.get(url, data, function (d) {
        if( d.Totals != undefined ) {
            for(t = 0; t < d.Totals.length; t++) {
                var item = d.Totals[t];

                if( item.Number > 0 ) {
                    if( item.MaxAvail > 0 )
                    {
                        var maxAllowed = item.TotalRemaining;
                        maxAllowed += item.HeadCount;

                        // in event that the max allowed is < 0 (over capacity) set it to the headcount
                        if( item.HeadCount > 0 && item.HeadCount > maxAllowed )
                        {
                            maxAllowed = item.HeadCount;
                        }

                        var remaining = maxAllowed - item.HeadCount;
                        var text = remaining + ' Left';

						//waitlist override.  if this is a waitlist reg, we just use the waitlist values and ignore the registration totals
						if (window.IS_WAITLIST || regLimitOverride)
							{
							maxAllowed = item.MaxCount;
							text = '';
							}
						//end of waitlist override

                        var itemClass= "red";
                        if( (remaining <= 0 || remaining / item.MaxAvail <= .2) && window.EVENTREG_BREAKOUT_HIDE_RED ) itemClass= "hidden";
                        if( remaining > 0 && remaining / item.MaxAvail > .2 ) itemClass= "orange";
                        if( remaining > 0 && remaining / item.MaxAvail > .2 && window.EVENTREG_BREAKOUT_HIDE_ORANGE ) itemClass= "hidden";
                        if( remaining > 0 && remaining / item.MaxAvail > .5 ) itemClass= "green";
                        if( remaining > 0 && remaining / item.MaxAvail > .5 && window.EVENTREG_BREAKOUT_HIDE_GREEN ) itemClass= "hidden";

                        if( item.HeadCount > 0 && remaining < item.MaxCount)
                        {
                            $("#" + item.FieldName + " option[value=' + item.HeadCount + ']").text(item.HeadCount + ' *');
                        }

                        $('.' + item.FieldName +'_STATUS').removeClass('red').removeClass('orange').removeClass('green').removeClass("hidden");

                        if( remaining > 0 ) {
                            $('.' + item.FieldName +'_STATUS').removeClass('hidden').addClass(itemClass).html( text);
                        }
                        else if (remaining <= 0 ) {
                            text = '0 Left';
                            $('.' + item.FieldName +'_STATUS').removeClass('hidden').html( text);
                        }
                        //if( remaining <= 0 ) text = 'No more available';
                        for ( var i = 1; i <= item.MaxCount; i++)
                        {
                            if( i > maxAllowed ) {
                                if( $('#' + item.FieldName + ' option[value=' + i + ']').length ) {
                                    $('#' + item.FieldName + ' option[value=' + i + ']').prop('disabled',true);
                                    $('#' + item.FieldName + ' option[value=' + i + ']').addClass('disabled-by-remaining');
                                    $('#' + item.FieldName + ' option[value=' + i + ']').text(i + ' (Not Available)');
                                }
                            }
                            else  {
                                if( $('#' + item.FieldName + ' option[value=' + i + ']').length ) {
                                    if( $('#' + item.FieldName + ' option[value=' + i + ']').hasClass('disabled-by-remaining')) {
                                        $('#' + item.FieldName + ' option[value=' + i + ']').removeAttr('disabled');
                                        $('#' + item.FieldName + ' option[value=' + i + ']').removeClass('disabled-by-remaining');
                                        $('#' + item.FieldName + ' option[value=' + i + ']').text(i);
                                    }
                                }
                            }
                        }

                        if (remaining <= 0 && Number($('#' + item.FieldName).attr('min-count')) > 0) {
                            if (!$('#' + item.FieldName + ' option[value=0]').length) {
                                $('#' + item.FieldName).append('<option value=0>0</option>');
                                if (maxAllowed == 0) {
                                    $('#' + item.FieldName).val(0);
                                }
                            }
                        }
                    }
                }
            }
        }
    });
}

function ValidateBreakoutHeadcountsAgainstRemaining() {
    var iCanSubmit = true;
    if (window.CLUB_CONFIG_EVENTREG_ENABLE_BREAKOUT_HC_MAX_AVAIL == true) {

        var url = window.EVENTREGISTRATIONSERVICE_API_URL + '/GetEventRegistrationTotals';
        var data = {
            ClubID: window.CLUB_ID,
            CID: window.CLUBCAL_ID,
            URID: window.UREG_ID,
            Waitlist: window.IS_WAITLIST
        };

        $.get(url, data, function (d) {
            if (d.Totals != undefined) {
                for (t = 0; t < d.Totals.length; t++) {
                    var item = d.Totals[t];
                    if (item.Number > 0) {
                        if (item.MaxAvail > 0) {
                            var maxAllowed = item.TotalRemaining;
                            maxAllowed += item.HeadCount;

                            // in event that the max allowed is < 0 (over capacity) set it to the headcount
                            if (item.HeadCount > 0 && item.HeadCount > maxAllowed) {
                                maxAllowed = item.HeadCount;
                            }

							var WaitListOverride = false;
							if (window.IS_WAITLIST || regLimitOverride)
								{
								WaitListOverride = true;
							}

                            var remaining = maxAllowed - item.HeadCount;
                            var currentValue = $('#' + item.FieldName).val();
                            if (item.HeadCount < currentValue && currentValue > remaining  && !WaitListOverride) {
                                iCanSubmit = false;
                                $("#JAVASCRIPT_ALERTS").removeClass('hidden').addClass('alert').addClass('alert-danger').html('Unable to save registration information: ' + item.Heading + ' exceeds event limits.');
                            }
                        }
                    }
                }

                if (iCanSubmit == true) {
                    submitRegister();
                }
                else {
                    alert($("#JAVASCRIPT_ALERTS").html());
                }
            }
        });
    }
    else {
        if (iCanSubmit == true) {
            submitRegister();
        }
    }
}

function updateRegistration() {
    if (inside_submit_registration == true)
        return;

    inside_submit_registration = true;

    if (window.IS_PUBLIC_REGISTRATION) {
        if( $('input.mandatory').length > 0) {
            var missingFieldCt = 0;
            $('.mandatory').each(function () {
                var thisVal = $(this).val();
                if (!thisVal.length) {
                    missingFieldCt += 1;
                    $(this).addClass('error');
                }
                else {
                    $(this).removeClass('error');
                }
            });

            if( missingFieldCt > 0) {
                inside_submit_registration = false;
                alert(missingFieldCt + ' mandatory fields require a value to be entered.');
                return false;
            }
        }
    }

    ValidateBreakoutHeadcountsAgainstRemaining();
}

var inside_submit_registration = false;
function submitRegister() {
    // Check to make sure all non-members have assigned responsibility.
    var emptyGuestOfCount = 0;
    var registrantType;
    var nonMemberLabel;
    var customFieldsOk = true;
    $('.customFieldWrapper').find('input, select, textarea').each(function () {
        if ($(this).attr('required') == 'required' || $(this).attr('required') == true || $(this).hasClass('required')) {
            if ((($(this).attr('type') == 'checkbox' || $(this).attr('type') == 'radio') && !$('input[name="' + $(this).attr('name') + '"]:checked').length) || !$(this).val()) {
                customFieldsOk = false;
            }
        }
    });

    if (!customFieldsOk) {
        alert('Please answer required registration questions.')
        inside_submit_registration = false;
        return false;
    }
    $(".guestOfID").each(function () {

        if (!$(this).parents('.bookedRow').parent().hasClass('isTemplate')) {
            registrantType = $(this).parents('.bookedRow').find('#REGISTRANT_TYPE').val();
            nonMemberLabel = $(this).parents('.bookedRow').find('.typeColumn').text();

            if (registrantType) {
                if (registrantType.indexOf("N") > 0 && $(this).val() == 0 && $(this).attr('value') == 0) {
                    emptyGuestOfCount = emptyGuestOfCount + 1;
                }
            }
        }
    });

    if (emptyGuestOfCount > 0) {
        alert('Please make sure all ' + nonMemberLabel + 's have responsibility selected.');
        inside_submit_registration = false;
        return false;
    }

    //Check minimum total registration
    var thisRegMin = parseInt($("#minSize").val());
    var thisRegHeadcount = parseInt($('.TOTAL_HEAD_COUNT').first().text());
    if (thisRegMin > 1 && thisRegHeadcount < thisRegMin && !hideMinimumAlert) {
        alert("You have not reached the minimum headcount of " + thisRegMin + " per registration.");
        inside_submit_registration = false;
        return false;
    }

    if (!window.IS_PUBLIC_REGISTRATION) {
        //Check minimum guest registration
        var thisGuestRegMin = parseInt($("#minGuestThisRegistration").val());
        var thisGuestHeadcount = parseInt($("#newThisRegGuestHeadcount").val());
        if (thisGuestRegMin > 0 && thisGuestHeadcount < thisGuestRegMin && !hideMinimumAlert) {
            alert("You have not reached the minimum guest headcount of " + thisGuestRegMin + " per registration.");
            inside_submit_registration = false;
            return false;
        }
    }


    if (!$('#regGroupID').val() || (+$('#regGroupID').val() > 0 && $("#regGroupType").val() !== "CLASSIC")) {
        // only check 0 headcount if not classic reg group.
        if (parseInt($('.TOTAL_HEAD_COUNT:first').text()) === 0) {
            alert("No registrants have been added.");
            inside_submit_registration = false;
            return false;
        }
    }
    if ($("#timeSlotsExist").val() === "false") {
        //return true;
    } else {
        if ($("#timeSelected option:selected").text() === "Select a time") {
            alert("You must select a registration time.");
            inside_submit_registration = false;
            return false;
        }
    }

    if ($("#frmRegister .h-captcha").length > 0){
        iframe = $('#frmRegister .h-captcha iframe');
        widget = iframe.attr('data-hcaptcha-widget-id');
        if (iframe.length > 0){
            var checkCaptcha = hcaptcha.getResponse(widget);
            if (checkCaptcha == '') {
                alert('Please verify the captcha before the form will submit.');
                inside_submit_registration = false;
                return false;
            }
        }
    }

    // we made it here, submit
    if( window.IS_ADMIN == true ) {
        document.forms["frmMain"].submit();
    }
    else
    {
        $('#nonAdmin_alinksave').html('<i class="fa fa-spinner fa-spin"></i> Processing...');
        $('#nonAdmin_alinksave').attr('title', 'Do Not Refresh');
        $('#frmRegister').submit();
        $('#nonAdmin_alinksave').parent().parent().append('<div class="col-xs-12 text-center"><div class="booking-process-status"><span style="text-align: left;">Please remain on this page and do not close your browser while we process your registration.</span></div></div>');

        setInterval(function () {
            updateRegistrationProcessStatus('.booking-process-status span');
        }, 5000);


    }
} // end of submit

function UpdateCalculatedHeadcounts()
{
    var mCount = 0;
    var rCount = 0;
    var nCount = 0;

    $('.REGISTRANT_TYPE').each(function() {
        if( $(this).val().indexOf('-B') > 0) mCount += 1;
        if( $(this).val().indexOf('-M') > 0) mCount += 1;
        if( $(this).val().indexOf('-R') > 0) rCount += 1;
        if( $(this).val().indexOf('-N') > 0) nCount += 1;
        if( $(this).val().indexOf('-P') > 0) nCount += 1;
    });

    $('.COUNT_UREG_HEADCOUNT_M').html(mCount);
    $('.COUNT_UREG_HEADCOUNT_R').html(rCount);
    $('.COUNT_UREG_HEADCOUNT_N').html(nCount);
}

function toggleRegistrantContainer(inLink, inContainerID) {
    if ($(inContainerID).hasClass('hidden')) {
        $(inContainerID).removeClass('hidden');
        $(inLink).parent().find('.karat').removeClass('fa-angle-down').addClass('fa-angle-up');
    }
    else {
        $(inContainerID).addClass('hidden');
        $(inLink).parent().find('.karat').removeClass('fa-angle-up').addClass('fa-angle-down');

    }
}

function addItemTemplate(itemTemplate) {
    var firstEmptySeatObject = undefined;

    $('.bookedContainer .bookedRow').each(function () {
            if (!$(this).parent().hasClass('isTemplate')) {
                firstEmptySeatObject = $(this);
            }
    });

    $(itemTemplate).insertAfter($(firstEmptySeatObject));
}

var nextRegistrantID = 100;
function getTemplate(registrantType, registrantID, registrantName) {
    var newIx = nextRegistrantID;
    var itemTemplate = $('#NEWREGISTRANTTEMPLATE_' + registrantType).html();

    var returnTemplate = "";
    // javascript only replaces first instance of a string
    // loop through and append new ix to all but last instance in the tokens
    var tokens = itemTemplate.split('[NEW_ITEM_NUMBER]');
    for (var t = 0; t < tokens.length; t++) {
        returnTemplate += tokens[t];
        if (t < (tokens.length - 1)) returnTemplate += newIx.toString();
    }

    tokens = returnTemplate.split('[NEW_REGISTRANT_NAME]');
    var returnTemplate2 = "";
    for (t = 0; t < tokens.length; t++) {
        returnTemplate2 += tokens[t];
        if (t < (tokens.length - 1)) returnTemplate2 += registrantName;
    }

    tokens = returnTemplate2.split('[NEW_REGISTRANT_ID]');
    var returnTemplate3 = "";
    for (t = 0; t < tokens.length; t++) {
        returnTemplate3 += tokens[t];
        if (t < (tokens.length - 1)) returnTemplate3 += registrantID;
    }

    tokens = returnTemplate3.split('[PLACE_HOLDER]');
    var returnTemplate4 = "";
    for (t = 0; t < tokens.length; t++) {
        returnTemplate4 += tokens[t];
        if (t < (tokens.length - 1)) returnTemplate4 += "";
    }

    var templateAfter = returnTemplate4;
    nextRegistrantID += 1;
    return templateAfter;
}

function validateGuestInformation(self) {

}

function assignBookingMember(sender) {

    $('.newBookingMember').each(function () {
        $(this).val('false');
    });

    if (Number($(sender).parent().parents('.bookedRow').find('.RegistrantID').val()) <= 0) {
        return;
    }

    $('#newBookingMember').val(Number($(sender).parent().parents('.bookedRow').find('.RegistrantID').val()));

    $(sender).parent().parents('.bookedRow').find('.newBookingMember').val('true');

    $('.booking-member-star.fas.fa-star').addClass('former-booking-member');

    $('.change-booking-member-star').each(function () {
        $(this).css("visibility", "hidden");
    });
    $(sender).addClass('new-booking-member');
    $(sender).css("visibility", "visible");
    $(sender).find('i').removeClass('far').addClass('fas');

    var name = $(sender).parent().parents('.bookedRow').find('.registrant_name').text();
    if (name.indexOf('(') > 0) {
        name = name.substr(0, name.indexOf('('));
    }
    if (name.indexOf('<') > 0) {
        name = name.substr(0, name.indexOf('<'));
    }
    $('#changeBookingProcessButton').removeClass('hidden');
    var msg = name.trim() + ' will be assigned Booking Registrant upon "Processing" the change. To complete this request, press the "Process" button.';
    $("#JAVASCRIPT_ALERTS").removeClass('hidden').addClass('alert').addClass('alert-info').html(msg);
}

//NonMember Add to Registration from Info Edit popup box - check for missing data and add to registration.
function saveGuestInformation(inDialog, addToRegistration) {

    var missingMandatoryFields = '';
    var missingMandatoryMessage = '';
    var newGuestID = 0;

    //Check that mandatory fields for this guest have content.
    $('#guestInfoModal').find('.mandatory').each(function () {
        if ($(this).val().length <= 0) {
            missingMandatoryFields = missingMandatoryFields + $(this).attr('fieldLabel') + ', '
        }
    });

    //check if missing mandatory fields were found and send alert
    if (missingMandatoryFields.length > 0) {

        missingMandatoryFields = missingMandatoryFields.slice(0, -2);

        missingMandatoryMessage = 'Missing Mandatory Fields:\n\n'
        missingMandatoryMessage = missingMandatoryMessage + missingMandatoryFields + '\n\n'

        alert(missingMandatoryMessage);
        return;

    } else {


        var newGuestID = 0;
        var guest_ID = 0;

        if ($('#guestInfoModal').find('.GuestInfoFormGID').val() > 0) {
            guest_ID = $('#guestInfoModal').find('.GuestInfoFormGID').val();
        }


        var guest_club_id = $('#guest_club_id').val();
        var guest_title = $('#guestInfoModal').find('#guest_title').val() || '';
        var guest_first_name = $('#guestInfoModal').find('#guest_first_name').val();
        var guest_middle_name = $('#guestInfoModal').find('#guest_middle_name').val() || '';
        var guest_last_name = $('#guestInfoModal').find('#guest_last_name').val() || '';
        var guest_suffix = $('#guestInfoModal').find('#guest_suffix').val() || '';
        var guest_familiarname = $('#guestInfoModal').find('#guest_familiarname').val() || '';

        var guest_addressOne = $('#guestInfoModal').find('#guest_address1').val() || '';
        var guest_addressTwo = $('#guestInfoModal').find('#guest_address2').val() || '';
        var guest_addressThree = $('#guestInfoModal').find('#guest_address3').val() || '';
        var guest_city = $('#guestInfoModal').find('#guest_city').val() || '';
        var guest_state = $('#guestInfoModal').find('#guest_state option:selected').val() || 0;
        var guest_postalcode = $('#guestInfoModal').find('#guest_postalcode').val() || '';
        var guest_country = $('#guestInfoModal').find('#guest_country option:selected').val() || 0;

        var guest_email = $('#guestInfoModal').find('#guest_email').val() || '';
        if (guest_email) {
            if (!ValidateEmailAddress(guest_email)) {
                alert("Invalid Email Address")
                $('#guestInfoModal').find('#guest_email').focus()
                return false;
            }
        }

        var guest_phonenumber = $('#guestInfoModal').find('#guest_phonenumber').val() || '';
        var guest_phone_cell = $('#guestInfoModal').find('#guest_phone_cell').val() || '';
        var guest_gender = $('#guestInfoModal').find('#guest_gender').val() || '';
        var guest_dob = $('#guestInfoModal').find('#guest_dob').val() || '';
        var guest_age = $('#guestInfoModal').find('#guest_age').val() || '';
        var guest_home_club = $('#guestInfoModal').find('#guest_home_club').val() || '';
        var guest_ghin_number = $('#guestInfoModal').find('#guest_ghin_number').val() || '';
        var guest_handicap_index = $('#guestInfoModal').find('#guest_handicap_index').val() || '';
        var guest_tennis_rating = $('#guestInfoModal').find('#guest_tennis_rating').val() || '';

        var guest_created_by_ID = $('#guest_created_by_ID').val();
        var guestlink_member_id = $('#guestlink_member_id').val();
        var event_id = $('#event_id').val();
        var guest_memfacID = $('#cal_item_mem_fac').val();
        var guestDoNotSell = $("#guestDoNotSell").is(':checked') || false;


        var saveGuestURL = '/common/Scripts/Calendar/Register_Guest_Save_ajax.asp';

        $.ajax({
            type: "POST",
            data: {
                params: JSON.stringify({
                    guest_club_id: guest_club_id,
                    guest_ID: guest_ID,
                    guest_title: guest_title,
                    guest_first_name: guest_first_name,
                    guest_middle_name: guest_middle_name,
                    guest_last_name: guest_last_name,
                    guest_suffix: guest_suffix,
                    guest_familiarname: guest_familiarname,

                    guest_addressOne: guest_addressOne,
                    guest_addressTwo: guest_addressTwo,
                    guest_addressThree: guest_addressThree,
                    guest_city: guest_city,
                    guest_state: guest_state,
                    guest_postalcode: guest_postalcode,
                    guest_country: guest_country,

					guest_memfacID: guest_memfacID,

                    guest_email: guest_email,
                    guest_phonenumber: guest_phonenumber,
                    guest_phone_cell: guest_phone_cell,
                    guest_gender: guest_gender,
                    guest_dob: guest_dob,
                    guest_age: guest_age,
                    guest_home_club: guest_home_club,
                    guest_ghin_number: guest_ghin_number,
                    guest_handicap_index: guest_handicap_index,
                    guest_tennis_rating: guest_tennis_rating,

                    guest_created_by_ID: guest_created_by_ID,
                    guestlink_member_id: guestlink_member_id,
                    event_id: event_id,
                    guest_do_not_sell: guestDoNotSell

                })
            },

            url: saveGuestURL, success: function (result) {
                newGuestID = result;
                //Create a new line for the registration for the newly created guest
                guestName = "";
                guestName = guestName + guest_first_name + ' ';
                guestName = guestName + guest_last_name + ' ';

                if (guest_suffix.length > 0) {
                    guestName = guestName + guest_suffix + ' ';
                }

                if (newGuestID > 0) {
                    //Creat a new line in the guest listing with the newly created guest information.
                    $('select.guestList').append('<option value="' + newGuestID + '">' + guestName + '</option>');
                    //existing member - set newGuestID to existing GuestID to use the same add code for both new and existing.
                } else { //if (newGuestID > 0)

                    newGuestID = guest_ID;
                    //UPDATE LISTING FOR EXISTING RECORD FOR ANY NAME CHANGES.
                    $("#guestName_" + newGuestID).text(guestName);
                    $(".RegistrantID[value='" + newGuestID + "']").siblings('.Name').text(guestName);
                    //$("#addGuestButton_" + newGuestID).parents('.guestRow').first().find('.Name').text(guestName);


                }//if (newGuestID > 0)

                //Add to the registration if add to registration is true
                if (addToRegistration === true) {
                    addPersonTypeAhead(newGuestID, guestName);
                } else {

                    var guestIsRegistered = false;
                    $(".RegistrantID").each(function () {
                        if (newGuestID == $(this).val()) {
                            guestIsRegistered = true;
                            $(this).parent().parents('.bookedRow').find('.registrant_name').text(guestName);
                            $(this).parent().parents('.bookedRow').find('.registrant_name_display').text(guestName);

                        }
                    });
                }

                //if previous guest was deleted
                $("#guestName_" + newGuestID).removeClass('guestDeleted');
                $("#guestName_" + newGuestID).parents('.guestRow').first().find('.undoRemoveButton').addClass('hidden');
            }

        });

        $(inDialog).dialog("close");
        $(".guestsDropDown").addClass('hidden');
    }
}

function getRegistrantAge(inToday, dateString) {
    if (!dateString.length) return 0;

    var today = new Date(inToday);
    var birthDate = new Date(dateString);
    var age = today.getFullYear() - birthDate.getFullYear();
    var m = today.getMonth() - birthDate.getMonth();
    if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
        age--;
    }
    return age;
}

function fetchPublicRegistrantBillCode(inRegID, registrantType, inAge) {
    var getBillingInfoUrl = '/common/scripts/calendar/Register_Get_Registrant_Billing_Info_Ajax.asp';
    var data = {
        CCID: window.CLUBCAL_ID,
        User_ID: inRegID,
        user_type: registrantType,
        AGE: inAge
    };

    $.get(getBillingInfoUrl, data, function (d) {
        if (d.Person != undefined) {
            $('#UREG_HEADCOUNT_0').attr('price', d.Person.Price);
            UpdateRegistrationSummary();
        }
    });
}

function getRegistrantTypeDesc(inRegType) {
    switch (inRegType) {
        case "M":
            return window.REGISTRANT_DESC_M;
            break;
        case "R":
            return window.REGISTRANT_DESC_R;
            break;
        case "N":
            return window.REGISTRANT_DESC_N;
            break;
        case "P":
            return window.REGISTRANT_DESC_P;
            break;
        case "F":
            return window.REGISTRANT_DESC_F;
            break;
        case "B":
            return window.REGISTRANT_DESC_B;
            break;
    }
}

function onAddPersonToParty(inRegistrantType) {
    $('#addNewRegistrantButton').attr('data-registrantTypeSelected', inRegistrantType);
    // SHOW SELECTION BASED ON SELECTED OPTION.
    //reset type ahead values
    returnedValues = '';
    typeAheadSearchType = inRegistrantType;
    $("#SEARCH_MEMBERS").val("");
    $('.relatedBookingMember').addClass('hidden');

    if (inRegistrantType == 'R') {
        $(".relationsDropDown").removeClass('hidden');
        $(".eventRegistrations .autoDiv").addClass('hidden');
        $(".guestsDropDown").addClass('hidden');
        $('.relatedBookingMember').removeClass('hidden');
    } else if (inRegistrantType == 'M') {
        $(".eventRegistrations .autoDiv").removeClass('hidden');
        $(".relationsDropDown").addClass('hidden');
        $("#SEARCH_MEMBERS").attr('placeholder', 'Enter Last Name, First');
        $(".guestsDropDown").addClass('hidden');
    } else if (inRegistrantType == 'F') {
        $(".eventRegistrations .autoDiv").removeClass('hidden');
        $(".relationsDropDown").addClass('hidden');
        $("#SEARCH_MEMBERS").attr('placeholder', 'Select from Members');
        $(".guestsDropDown").addClass('hidden');
    } else if (inRegistrantType == 'N') {
        $(".eventRegistrations .autoDiv").addClass('hidden');
        $(".relationsDropDown").addClass('hidden');
        $(".guestsDropDown").removeClass('hidden');
        $("#SEARCH_MEMBERS").attr('placeholder', 'Select from Members');
    } else {
        $(".relationsDropDown").addClass('hidden');
        $(".eventRegistrations .autoDiv").addClass('hidden');
        $(".guestsDropDown").addClass('hidden');
    }
}

function updateRegistrationProcessStatus(inPlaceholder) {
    $(inPlaceholder).append('.');
}