﻿/************************************************************************  
DISPLAY MEMBERS JAVASCRIPT
**************************************************************************/

/************************************************************************  
VARS
**************************************************************************/
var _errorManager = new ErrorManagerJQ($(LayoutElementsJQ.JQDivError));

var _secondIInoneMissingMemberPicture = 'images/members/2nd2nonemissing.jpg';
var _secondIInoneEmptyMemberPicture = 'images/secondIInone/spacer.gif';

var _membersPage = 'Members.aspx';

var _riderText = "Rider";
var _toolTipTitleText = "SIIN Member Contact Info";
var _topContentHeaderText = "Mobile Number:&nbsp;&nbsp;";
var _bottomContentHeaderText = "Address:&nbsp;&nbsp;";

var _isUserAuthenticated = false;

var _currentSelectedUserId = 0;
var _currentUserId = 0;
var _isOfficer = 0;

var _selectedOrganizationId = 0;

var _members = null;
var _updateMemberData = null;

/************************************************************************ 
                        Page Element Enums
**************************************************************************/
var MemberElements =
{
    LiOfficeDropDownList: 'liOfficeDropDownList',
    DivSecondIINoneMembers: 'divSecondIINoneMembers',
    DivUpdateMember: 'divUpdateMember',
    BtnRegister: 'btnRegister',
    DdlMonth: 'ddlMonth',
    DdlDay: 'ddlDay',
    DdlOffice: 'ddlOffice',
    DdlState: 'ddlState',
    DdlChapters: 'ddlChapters',
    TxtCity: 'txtCity',
    TxtZipCode: 'txtZipCode',
    
    JQDivSecondIINoneMembers: '#divSecondIINoneMembers',
    JQDivUpdateMember: '#divUpdateMember',
    JQBtnRegister: '#btnRegister',
    JQDdlMonth: '#ddlMonth',
    JQDdlDay: '#ddlDay',
    JQDdlOffice: '#ddlOffice',
    JQDdlState: '#ddlState',
    JQTxtCity: '#txtCity',
    JQTxtZipCode: '#txtZipCode'
    
}

var MemberFieldNames =
{
    Username: 'Username',
    Password: 'Password',
    FirstName: 'First Name',
    LastName: 'Last Name',
    Month: 'Month',
    Day: 'Day',
    Year: 'Year',
    Office: 'Office',
    Email: 'Email',
    PhoneNumber: 'PhoneNumber',
    Address: 'Address',
    City: 'City',
    State: 'State',
    ZipCode: 'Zip Code'
}

/************************************************************************ 
                        Functions  
**************************************************************************/

function pageLoad() {
    setAuthenticationFlag();
    getOrganizationsUsingService();
    loadPageForDisplayMembers();
}

function getOrganizationsUsingService() {
    SecondIINoneUIService.GetOrganizations(onGetOrganizationsComplete, onSecondIINoneMembersError);
}

function onGetOrganizationsComplete(organizations) {
    var element = $get(MemberElements.DdlChapters);

    populateSecondIINoneOrganizationsWithSelectedOrganizationId(element, organizations, _selectedOrganizationId);
}

function loadPageForMemberUpdate(userId) {
    showWaitDialog(InformationMessages.UserInformationRetrieval);

    _currentSelectedUserId = userId;
    
    hideContent($get(MemberElements.DivSecondIINoneMembers));
    showContent($get(MemberElements.DivUpdateMember));

    var officeListItem = $get(MemberElements.LiOfficeDropDownList);
    if (_isOfficer) 
    {
        showContent(officeListItem);
    }
    else
    {
        hideContent(officeListItem);
    }

    getMemberDataForUpdateUsingService();
}

function loadPageForDisplayMembers() {
    showWaitDialog(InformationMessages.ClubMembersRetrieval);
    
    showContent($get(MemberElements.DivSecondIINoneMembers))
    hideContent($get(MemberElements.DivUpdateMember));

    getSecondIINoneMembersUsingService();
    
//    if (_members == null) {
//        getSecondIINoneMembersUsingService();
//    }
//    else {
//        populateSecondIINoneMembers(_members);
//    }
}

function getSecondIINoneMembersBySelectedOrganizationId() {
    showWaitDialog(InformationMessages.ClubMembersRetrieval);

    _selectedOrganizationId = getSelectedValue($get(MemberElements.DdlChapters));

    getSecondIINoneMembersUsingService();
}

function setAuthenticationFlag() {
    SecondIINoneUIService.IsUserAuthenticated(onSetAuthenticationFlagComplete, onSecondIINoneCommonError);
}

function onSetAuthenticationFlagComplete(isAuthenticated) {
    _isUserAuthenticated = isAuthenticated;
}

function getSecondIINoneMembersUsingService() {
    UserUIService.GetSecondIINoneMembersByBrowsedOrganization(_selectedOrganizationId, onGetSecondIINoneMembersComplete, onSecondIINoneMembersError);
}

function onGetSecondIINoneMembersComplete(secondIInoneMembers) {
    _members = secondIInoneMembers

    populateSecondIINoneMembers();
}

function populateSecondIINoneMembers() {
    var divError = $get(LayoutElements.DivError);
    hideContent(divError);

    var secondIInoneMembersLabel = $get(MemberElements.DivSecondIINoneMembers);

    if (_members.length > 0) {

        var secondIInoneMembersString = ''

        _currentUserId = _members[0].CurrentUserId;
        _isOfficer = _members[0].IsOfficer;

        for (var secondIInoneMemberRowCount = 0; secondIInoneMemberRowCount < _members.length; secondIInoneMemberRowCount++) {

            secondIInoneMembersString = secondIInoneMembersString + '<table cellpadding="0" cellspacing="15" class="secondIInoneMembersTable">';
            secondIInoneMembersString = secondIInoneMembersString + '<tr>';

            for (var i = 0; i < 3; i++) {
                if (secondIInoneMemberRowCount < (_members.length)) {
                    _toolTipTitleText = capitalizeWords(_members[secondIInoneMemberRowCount].Username);

                    secondIInoneMembersString = secondIInoneMembersString + '<th>';
                    secondIInoneMembersString = secondIInoneMembersString + '<div class="secondIInoneMembersPictureDiv">';

                    var memberImageToolTip = '';
                    if (_isUserAuthenticated) {
                        var toolTipText = _topContentHeaderText + '<br/>' + _members[secondIInoneMemberRowCount].PhoneNumber + '<br/><br/>';
                        toolTipText = toolTipText + _bottomContentHeaderText + '<br/>' + capitalizeWords(_members[secondIInoneMemberRowCount].Address.Address1) + '<br/>';
                        toolTipText = toolTipText + capitalizeWords(_members[secondIInoneMemberRowCount].Address.City) + ',&nbsp;';
                        toolTipText = toolTipText + capitalizeWords(_members[secondIInoneMemberRowCount].Address.State) + '&nbsp;';
                        toolTipText = toolTipText + _members[secondIInoneMemberRowCount].Address.Zip + '&nbsp;';

                        memberImageToolTip = 'onmouseover="Tip(\'' + toolTipText + '\',TITLE,\'' + _toolTipTitleText + '\',SHADOW ,\'true\', SHADOWCOLOR, \'black\', OPACITY, \'75\')" onmouseout="UnTip()"';
                    }

                    if (_members[secondIInoneMemberRowCount].Picture.length > 0) {
                        secondIInoneMembersString = secondIInoneMembersString + '<img class="memberPicture" ' + memberImageToolTip + ' src="';
                        secondIInoneMembersString = secondIInoneMembersString + _members[secondIInoneMemberRowCount].Picture;
                        secondIInoneMembersString = secondIInoneMembersString + '" /><br />';
                    }
                    else {
                        secondIInoneMembersString = secondIInoneMembersString + '<img class="memberPicture" src="';
                        secondIInoneMembersString = secondIInoneMembersString + _secondIInoneMissingMemberPicture;
                        secondIInoneMembersString = secondIInoneMembersString + '" /><br />';
                    }

                    secondIInoneMembersString = secondIInoneMembersString + '<span style="font-size: 17px;">';

                    var canUserUpdate = false
                    if (
                            _currentUserId == _members[secondIInoneMemberRowCount].Id
                            ||
                            _members[secondIInoneMemberRowCount].IsOfficer
                        ) {
                        canUserUpdate = true;
                    }

                    if (canUserUpdate) {
                        secondIInoneMembersString = secondIInoneMembersString + '<a href="#" onclick="javascript:loadPageForMemberUpdate(' + _members[secondIInoneMemberRowCount].Id + ')">';
                    }

                    secondIInoneMembersString = secondIInoneMembersString + capitalizeWords(_members[secondIInoneMemberRowCount].Username);

                    if (canUserUpdate) {
                        secondIInoneMembersString = secondIInoneMembersString + '</a>';
                    }

                    secondIInoneMembersString = secondIInoneMembersString + '</span>';
                    secondIInoneMembersString = secondIInoneMembersString + '<br />';

                    if (_members[secondIInoneMemberRowCount].Office != _riderText) {
                        secondIInoneMembersString = secondIInoneMembersString + _members[secondIInoneMemberRowCount].Office;
                        secondIInoneMembersString = secondIInoneMembersString + '<br />';
                        secondIInoneMembersString = secondIInoneMembersString + '</div>';
                        secondIInoneMembersString = secondIInoneMembersString + '</th>';
                    }

                }
                else {
                    secondIInoneMembersString = secondIInoneMembersString + '<th>';
                    secondIInoneMembersString = secondIInoneMembersString + '<div>';
                    secondIInoneMembersString = secondIInoneMembersString + '<img class="emptyMemberPicture" src="';
                    secondIInoneMembersString = secondIInoneMembersString + _secondIInoneEmptyMemberPicture;
                    secondIInoneMembersString = secondIInoneMembersString + '" /><br />';
                    secondIInoneMembersString = secondIInoneMembersString + '<br />';
                    secondIInoneMembersString = secondIInoneMembersString + '</div>';
                    secondIInoneMembersString = secondIInoneMembersString + '</th>';
                }
                secondIInoneMemberRowCount++
            }

            secondIInoneMemberRowCount--

            secondIInoneMembersString = secondIInoneMembersString + '</tr>';
            secondIInoneMembersString = secondIInoneMembersString + '</table>';
        }

        secondIInoneMembersLabel.innerHTML = '';
        secondIInoneMembersLabel.innerHTML = secondIInoneMembersString;

        window.scrollTo(0, 250);
    }
    else {
        secondIInoneMembersLabel.innerHTML = '';
    }
   
   hideWaitDialog();

   performPostLoadOperations();
}

/************************************************************************  
UPDATE MEMBER JAVASCRIPT
**************************************************************************/

/************************************************************************  
VARS
**************************************************************************/

/************************************************************************ 
Functions  
**************************************************************************/

function register(e) {
    evt = e || window.event;
    if (evt.keyCode == 13) {
        validateUpdateMemberForm();
    }
}

function validateUpdateMemberForm() {
    var username = $(MemberASPElements.JQTxtUsername);
    var firstname = $(MemberASPElements.JQTxtFirstName);
    var lastname = $(MemberASPElements.JQTxtLastName);
    var month = $(MemberElements.JQDdlMonth);
    var day = $(MemberElements.JQDdlDay);
    var year = $(MemberASPElements.JQTxtYear);
    var office = $(MemberElements.JQDdlOffice);
    var email = $(MemberASPElements.JQTxtEmail);
    var phoneNumber = $(MemberASPElements.JQTxtPhoneNumber);
    var address = $(MemberASPElements.JQTxtAddress);
    var city = $(MemberElements.JQTxtCity);
    var state = $(MemberElements.JQDdlState);
    var zipCode = $(MemberElements.JQTxtZipCode);


    _errorManager.ClearErrors();

    var errorCount = 0;

    if (username.val().trim() == "") {
        _errorManager.AddErrorMessage(username, String.format(ErrorMessages.RequiredField, MemberFieldNames.Username));
        errorCount++;
    }
    
    if (firstname.val().trim() == "") {
        _errorManager.AddErrorMessage(firstname, String.format(ErrorMessages.RequiredField, MemberFieldNames.FirstName));
        errorCount++;
    }
    
    if (lastname.val().trim() == "") {
        _errorManager.AddErrorMessage(lastname, String.format(ErrorMessages.RequiredField, MemberFieldNames.LastName));
        errorCount++;
    }
    
    if (month.val() == 0) {
        _errorManager.AddErrorMessage(month, String.format(ErrorMessages.RequiredField, MemberFieldNames.Month));
        errorCount++;
    }
    
    if (day.val() == 0) {
        _errorManager.AddErrorMessage(day, String.format(ErrorMessages.RequiredField, MemberFieldNames.Day));
        errorCount++;
    }
    
    if (year.val().trim() == "") {
        _errorManager.AddErrorMessage(year, String.format(ErrorMessages.RequiredField, MemberFieldNames.Year));
        errorCount++;
    }
    
    if (office.val() == 0) {
        _errorManager.AddErrorMessage(office, String.format(ErrorMessages.RequiredField, MemberFieldNames.Office));
        errorCount++;
    }

    if (email.val().trim().length > 0) {
        if (isEmailValid(email.val()) == false) {
            _errorManager.AddErrorMessage(email, ErrorMessages.InvalidEmail);
            errorCount++;
        }
    }
    else
    {
        _errorManager.AddErrorMessage(email, String.format(ErrorMessages.RequiredField, MemberFieldNames.Email));
        errorCount++;
    }

    if (phoneNumber.val().trim().length > 0) {
        if (!isPhoneNumberValid(phoneNumber.val())) {
            _errorManager.AddErrorMessage(phoneNumber, ErrorMessages.InvalidPhoneNumber);
            errorCount++;
        }
    }
    else
    {
        _errorManager.AddErrorMessage(phoneNumber, String.format(ErrorMessages.RequiredField, MemberFieldNames.PhoneNumber));
    }
    
    if (address.val().trim() == "") {
        _errorManager.AddErrorMessage(address, String.format(ErrorMessages.RequiredField, MemberFieldNames.Address));
        errorCount++;
    }
    
    if (city.val().trim() == "") {
        _errorManager.AddErrorMessage(city, String.format(ErrorMessages.RequiredField, MemberFieldNames.City));
        errorCount++;
    }
    
    if (state.val() == 0) {
        _errorManager.AddErrorMessage(state, String.format(ErrorMessages.RequiredField, MemberFieldNames.State));
        errorCount++;
    }

    if (zipCode.val().trim().length > 0) {
        if (isZipCodeValid(zipCode.val()) == false) {
            _errorManager.AddErrorMessage(zipCode, ErrorMessages.InvalidZipCode);
            errorCount++;
        }
    }
    else{
        _errorManager.AddErrorMessage(zipCode, String.format(ErrorMessages.RequiredField, MemberFieldNames.ZipCode));
        errorCount++;
    }
    
    
    if (errorCount > 0) {
        _errorManager.ShowErrors();
        return false;
    }
    else {
        return true;
    }
}

function getMemberDataForUpdateUsingService() {
    UserUIService.GetMemberData(_currentSelectedUserId, onGetMemberDataForUpdateComplete, onSecondIINoneMembersError);
}

function onGetMemberDataForUpdateComplete(memberData) {
    onGetMonthsComplete(memberData.Months);
    onGetMonthDaysComplete(memberData.MonthDays);
    onGetOfficesComplete(memberData.Offices);
    onGetStatesComplete(memberData.States);
    onGetMemberByIdComplete(memberData.User);

    hideWaitDialog();
}

function onGetMonthsComplete(months) {

    var element = $get(MemberElements.DdlMonth);

    clearChildElements(element);

    if (months.length > 0) {
        for (var rowCount = 0; rowCount < months.length; rowCount++) {

            if (months[rowCount] != InformationMessages.None && months[rowCount] != InformationMessages.Unknown) {
                var optMonth = new Option(months[rowCount], rowCount, false, false);
                element.options[element.options.length] = optMonth;
            }
            else {
                var optMonth = new Option(InformationMessages.Select, rowCount, false, false);
                element.options[element.options.length] = optMonth;
            }
        }
    }
}

function onGetMonthDaysComplete(days) {

    var element = $get(MemberElements.DdlDay);

    clearChildElements(element);

    if (days.length > 0) {
        var optDay = new Option(InformationMessages.Select, 0, false, false);
        element.options[element.options.length] = optDay;

        for (var rowCount = 0; rowCount < days.length; rowCount++) {

            if (days[rowCount] != InformationMessages.None && days[rowCount] != InformationMessages.Unknown) {
                var optDay = new Option(days[rowCount], rowCount + 1, false, false);
                element.options[element.options.length] = optDay;
            }
        }
    }
}

function onGetOfficesComplete(offices) {

    var element = $get(MemberElements.DdlOffice);

    clearChildElements(element);

    if (offices.length > 0) {
        for (var rowCount = 0; rowCount < offices.length; rowCount++) {

            if (offices[rowCount] != InformationMessages.None && offices[rowCount] != InformationMessages.Unknown) {
                var optOffice = new Option(offices[rowCount], rowCount, false, false);
                element.options[element.options.length] = optOffice;
            }
            else {
                var optOffice = new Option(InformationMessages.Select, rowCount, false, false);
                element.options[element.options.length] = optOffice;
            }
        }
    }
}

function onGetStatesComplete(states) {

    var element = $get(MemberElements.DdlState);

    clearChildElements(element);

    if (states.length > 0) {
        for (var rowCount = 0; rowCount < states.length; rowCount++) {

            if (states[rowCount] != InformationMessages.None && states[rowCount] != InformationMessages.Unknown) {
                var optState = new Option(states[rowCount], rowCount, false, false);
                element.options[element.options.length] = optState;
            }
            else {
                var optState = new Option(InformationMessages.Select, rowCount, false, false);
                element.options[element.options.length] = optState;
            }
        }
    }
}

function onGetMemberByIdComplete(user) {

    var username = $get(MemberASPElements.TxtUsername);
    var firstname = $get(MemberASPElements.TxtFirstName);
    var middleInitial = $get(MemberASPElements.TxtMiddleInitial);
    var lastname = $get(MemberASPElements.TxtLastName);
    var month = $get(MemberElements.DdlMonth);
    var day = $get(MemberElements.DdlDay);
    var year = $get(MemberASPElements.TxtYear);
    var office = $get(MemberElements.DdlOffice);
    var email = $get(MemberASPElements.TxtEmail);
    var phoneNumber = $get(MemberASPElements.TxtPhoneNumber);
    var address = $get(MemberASPElements.TxtAddress);
    var city = $get(MemberElements.TxtCity);
    var state = $get(MemberElements.DdlState);
    var zipCode = $get(MemberElements.TxtZipCode);

    var birthday = user.Birthday.split("/")

    username.value = user.Username;
    firstname.value = user.FirstName;
    middleInitial.value = user.MiddleInitial;
    lastname.value = user.LastName;
    year.value = birthday[2];
    email.value = user.Email;
    phoneNumber.value = user.PhoneNumber;
    address.value = user.Address.Address1;
    city.value = user.Address.City;
    zipCode.value = user.Address.Zip;

    setSelectedDropDownListIndex(month, birthday[0]);
    setSelectedDropDownListIndex(day, birthday[1]);
    setSelectedDropDownListIndex(office, user.Office);
    setSelectedDropDownListIndex(state, user.Address.State);
}

function saveUser() {

   var formValidated = validateUpdateMemberForm();

   if (!formValidated) {
       return false;
   }
   else {
       showWaitDialog(InformationMessages.UserSaveMessage);
       saveUserInformation();
   }
}

function saveUserInformation() {

    var username = getElementText($get(MemberASPElements.TxtUsername));
    var firstname = getElementText($get(MemberASPElements.TxtFirstName));
    var middleInitial = getElementText($get(MemberASPElements.TxtMiddleInitial));
    var lastname = getElementText($get(MemberASPElements.TxtLastName));
    var month = getSelectedValue($get(MemberElements.DdlMonth));
    var day = getSelectedValue($get(MemberElements.DdlDay));
    var year = getElementText($get(MemberASPElements.TxtYear));
    var office = getSelectedValue($get(MemberElements.DdlOffice));
    var email = getElementText($get(MemberASPElements.TxtEmail));
    var phoneNumber = getElementText($get(MemberASPElements.TxtPhoneNumber));
    var address = getElementText($get(MemberASPElements.TxtAddress));
    var city = getElementText($get(MemberElements.TxtCity));
    var state = getSelectedValue($get(MemberElements.DdlState));
    var zipCode = getElementText($get(MemberElements.TxtZipCode));

    var userData = new UserData();
    userData.Account = new UserAccountData();
    userData.Address = new AddressData();

    userData.Id = _currentSelectedUserId;
    userData.Username = username;
    userData.FirstName = firstname;
    userData.MiddleInitial = middleInitial;
    userData.LastName = lastname;
    userData.Birthday = month + "/" + day + "/" + year;
    userData.Office = office;
    userData.PhoneNumber = phoneNumber;
    userData.Email = email;
    userData.IsActive = true;
    userData.Address.Address1 = address;
    userData.Address.City = city;
    userData.Address.State = state;
    userData.Address.Zip = zipCode;
    userData.Address.IsActive = true

    _updateMemberData = userData;
    
    saveUserInformationUsingService(userData);
}

function saveUserInformationUsingService(userData, addressData) {
    UserUIService.SaveUser(userData, onSaveUserInformationComplete, onSecondIINoneMembersError);
}

function onSaveUserInformationComplete() {
    hideWaitDialog();
    loadPageForDisplayMembers();
}

//function updateMemberRow() {
//    if (_updateMemberData != null)
//    {
//        var officeList = $get(MemberElements.DdlOffice);

//        for (var secondIInoneMemberRowCount = 0; secondIInoneMemberRowCount < _members.length; secondIInoneMemberRowCount++) {
//            if (_updateMemberData.Id == _members[secondIInoneMemberRowCount].Id) {
//                _members[secondIInoneMemberRowCount].Id = _updateMemberData.Id;
//                _members[secondIInoneMemberRowCount].Username = _updateMemberData.Username;
//                _members[secondIInoneMemberRowCount].FirstName = _updateMemberData.FirstName;
//                _members[secondIInoneMemberRowCount].MiddleInitial = _updateMemberData.MiddleInitial;
//                _members[secondIInoneMemberRowCount].LastName = _updateMemberData.LastName;
//                _members[secondIInoneMemberRowCount].Birthday = _updateMemberData.Birthday;
//                _members[secondIInoneMemberRowCount].Office = officeList.options[_updateMemberData.Office].text;
//                _members[secondIInoneMemberRowCount].PhoneNumber = _updateMemberData.PhoneNumber;
//                _members[secondIInoneMemberRowCount].Email = _updateMemberData.Email;
//                _members[secondIInoneMemberRowCount].IsActive = _updateMemberData.IsActive;
//                _members[secondIInoneMemberRowCount].Address.Address1 = _updateMemberData.Address.Address1;
//                _members[secondIInoneMemberRowCount].Address.City = _updateMemberData.Address.City;
//                _members[secondIInoneMemberRowCount].Address.State = _updateMemberData.Address.State;
//                _members[secondIInoneMemberRowCount].Address.Zip = _updateMemberData.Address.Zip;
//                _members[secondIInoneMemberRowCount].Address.IsActive = _updateMemberData.Address.IsActive
//            }
//        }
//    }
//}

function onSecondIINoneMembersError(result) {
    var problems = new Array();
    problems[problems.length] = result.get_message();
    setErrorInformation($get(LayoutElements.DivError), problems);

    hideWaitDialog();
}
