{"version":3,"sources":["1initializers.js","addparticipantmodals.js","attachments.js","constants.js","locations.js","nda.js","privatemessaging.js","procore.js","projectdashboardviews.js","projectdetailsviews.js","projectmessaging.js","projectmessagingdatatables.js","projectmessagingmodels.js","quickadd.js","reports.js"],"names":["PJQ","app","module","constants","modules","PROJECTWALL","addOldRoutes","route","name","callback","router","navigate","trigger","replace","projectWall","oldRoutes","projectId","routes","moduleName","session","preferences","hasPref","preferenceTypes","PROJECT_WALL_DEFAULT_MODULE","getPref","toString","set","response","initProjectNavigator","parseInt","detailedProject","projectMessageId","viewProjectMessageId","copyProjectMessageId","deleteProjectMessageId","viewName","view","noRoute","viewUserMessageId","submittalId","window","pjqSubmittalLoadId","msgContext","sessionId","projectContactTemp","pjqSessionId","isNewMsg","activeItem","viewOptions","project","isFetched","id","initNavigator","models","projects","Project","isDetail","fetch","notify","success","get","nda","accessKey","_","size","ajax","Request","endpoint","post","user","settings","SelectectContactGroupsTemp","SelectectContactsTemp","SharedFolderId","helpers","urlHelpers","generateEndpoint","value","put","done","bind","initNav","fetchUserMessageTypes","TokenManager","getTokensForAccessKey","error","this","views","SignProjectNDAModal","model","status","notifications","warningNotify","message","ErrorHandler","handle","toJSON","errorNotify","addRoutes","AddParticipantsDetailedModal","BaseModal","extend","defaults","template","templating","Template","minWidth","onSave","isWrapForm","wrapFormName","isUseNewAddressBook","events","click .btn-add-selected","beforeModalCreated","renderData","options","beforeRender","afterRender","data","Alert","$","type","text","extraClasses","addressBookView","addressbook","AddressBook","el","selectionMode","addressBook","ADD_TO_PROJECT","disabledContacts","disableContacts","contactsNoGroup","disabledContactGroups","isMultipleProjects","contactGroups","onSelection","contactsAll","prop","selectedContactsAll","fail","selectedCompanies","selectedContacts","selectedGroups","selectedContactGroups","pjqABContext","pjqIsAddProjectContacts","isHideMerge","isHideAddSelectedContacts","isHideReturnToProject","isHideImportExport","initAbEditCallback","isEditing","hide","show","$form","validator","validate","onsubmit","onkeyup","showErrors","errorMap","errorList","i","element","errorsFor","remove","defaultShowErrors","errorPlacement","html","attr","hasClass","appendTo","parent","errorClass","ignore","initAddressBook","addSelected","selectedContactsNoGroup","removeModal","contactIds","contactCompanyIds","contactGroupIds","projectContactIds","results","length","AddParticipantsErrorModal","onContinue","noop","click .btn-copy-phone","click .btn-continue","click .export","dataTables","DataTable","pageLength","isHideSearch","dom","order","columns","title","orderable","render","row","phoneFormatted","phone","formatHelpers","formatPhoneNumber","phoneExtension","continue","export","files","downloadFile","url","isEndpoint","copyPhone","e","inputId","uniqueId","hiddenInput","currentTarget","style","$el","append","select","document","execCommand","successNotify","Attachments","FileNavigator","subTemplates","file","fileMenu","sortBy","sortDirection","isHideDrawings","enableDrawings","canAdd","canShare","isAdmin","isReadOnly","hideHeader","foldersOnly","click .btn-upload-raw-files","click .btn-attach-documents","click .btn-add-shared-folder","click .btn-add-private-folder","click .btn-add-to-drawings","click .btn-select-contents","click .btn-add-selected-to-drawings","change .input-select-all","click .btn-download-all","beforeFirstRender","prefs","DISABLE_DRAWINGS","hasPermission","DISABLE_SHARE_PEI","RSVP_FOLDER_CHECKBOXES_ONLY","canAddDrawings","EXPAND_PROJECT_ATTACHMENTS","expandAllFolders","sfOverride","PROJECT_SHARED_FOLDER_NAME_OVERRIDE","sharedFolderNameOverride","fetchAttachments","isPrivate","DISABLE_PROJECT_PRIVATE_ATTACHMENTS","getMenuActions","self","onClick","attachRootAttachments","isShown","attachment","addFolder","uploadToFolder","downloadAttachments","getFolderAttachments","FileViewer","toLowerCase","endsWith","shareAttachments","exportFileList","addToDrawings","getDepth","selectFolderContents","cutAttachments","copyAttachments","paste","clipboard","renameAttachment","attachmentProperties","isDanger","deleteAttachments","selectFolderContentsClicked","$attachment","closest","collection","folder","addSelectedAttachmentIds","map","att","cid","getAttachmentElement","siblings","find","uploadRawFiles","RawFileUploaderModal","allChecked","isChecked","attachmentIds","selectedAttachmentIds","addSharedFolderClicked","getSharedFolder","addPrivateFolderClicked","getPrivateFolder","FileSelector","disabledAttachmentIds","attachFiles","attachments","replaceVersionFolders","shareDrawings","collections","drawings","Drawings","versionIds","allDrawings","DRAWING_SHARE_PREVENT_EXPIRATION","objectHelpers","refinedType","each","filter","indexOf","push","add","Drawing","guid","fileGuids","sharingModal","sharing","SharingModal","share","urlChanged","shareAtt","fnCheck","apply","_toConsumableArray","Files","downloadAll","addToDrawingsClicked","addSelectedToDrawings","versions","Versions","DrawingBatchModal","DrawingBatch","AttachmentsModal","maxWidth","click .btn-save","attachmentsView","expandSharedFolders","EXPAND_PROJECT_ROOT_SHARED_FOLDERS","projectMessaging","GROUPCOMP","GROUPCOMP_COMP","GROUPCOMP_COMP_CONT","GROUPCONT","GROUPCONT_CONT","MSGCONT","MSGCONT_CONT","RSPCONT","RSPCONT_CONT","COMP","COMP_CONT","CONT","CONTGROUP","BIDPKGS","BIDPKGS_CONT","LocationManagement","BaseView","tier","location","editLocation","click .location:not(.editing)","click .btn-add-location","keyup .input-location-name","click .btn-edit-location","click .btn-delete-location","click .btn-cancel-edit","click .btn-save-location","fetchLocations","locations","on","next","toggle","stopPropagation","renderTiers","locationNameChanged","key","keyCode","saveLocationClicked","addLocationClicked","renderLocationEdit","editLocationClicked","$location","endLocationEdit","addClass","renderSubTemplate","focus","$add","replaceWith","renderLocation","getActiveLocations","outerHTML","saveLocation","val","parentId","Location","contextLocation","save","locationClicked","deleteLocationClicked","children","getChildren","fnDelete","destroy","union","activeLocations","reverse","newContextLocation","modals","DeleteCancel","header","body","onDelete","result","getParents","$tiers","empty","nextTierLocations","ctActive","renderTier","getSiblings","getRootLocations","tierNumber","activeParent","TemplateRenderer","parseTemplate","activeIds","BaseModel","idAttribute","Locations","BaseCollection","arguments","undefined","fnGetChildren","_result","where","pId","fnGetParent","getPickerArray","getChildrenNames","parentName","child","newParentName","rootParent","getFullName","parents","click .btn-decline-nda","click .btn-sign-nda","change .input-nda-agree","inputHelpers","inputMaskPhone","agreeChanged","decline","Loader","updateResponse","projectContacts","bidStatus","DECLINE","close","signInNavigate","sign","isValid","$companyName","companyName","setInputError","$contactName","contactName","$title","$email","email","$phone","$error","loadingText","EditProjectNDAModal","change .cb-override","click .btn-delete-nda","click .btn-cancel-nda","click .btn-save-nda","fetchNDAs","ndas","fetchNDA","inputs","Selectpicker","hideDisabled","defaultValue","onChange","useNDA","ndaId","ndaText","overrideChanged","findWhere","isDefault","deleteClicked","cancelClicked","onCancel","saveClicked","SaveDontSave","isShowDontSaveButton","saveNda","silent","UserMessages","click .btn-view-message","click .btn-delete-message","click .btn-user-messages-add","click .btn-user-messages-inbox","click .btn-user-messages-sent","userMessageId","userMessage","userMessages","UserMessage","viewMessage","messageStats","userId","PRIVATE_MESSAGING_USER_ID_DEFAULT","$userFilter","totalMessageCount","reduce","stat","messageCount","memo","isMultiple","refreshView","dataTable","language","emptyTable","autoWidth","rowGroup","enable","rowText","from","to","width","Date","display","dateHelpers","getDateString","dateFormats","DATE_TIME","searchable","className","visible","onRowDoubleClick","$inboxBtn","$sentBtn","removeClass","resetData","openInbox","openSent","viewMessageClicked","getRow","updateViewed","refresh","UserMessageModal","onSend","newMessageClicked","deleteMessageClicked","removeRow","userMessageTypeId","change select.user-message-type","keyup .user-message-body","keyup .user-message-reply","click .btn-reply","keyup .user-message-bid-amount","click .user-message-close","click .user-message-send","click .user-message-export","userMessageType","userMessageTypes","thread","UserMessageThread","listenTo","isNew","newValue","uploader","FileUploaderGrid","canUpload","canDelete","onSuccess","valueChanged","afterDelete","replyUploader","isSmall","replyChanged","replyClicked","newMessage","replyToMessageId","canSend","onClose","onExport","ProcorePublishModal","onPublish","procoreProjectNumber","click .publish","isProcoreProjectNumber","companyInput","isIntChoices","isDisabled","companies","loader","afterCompanyChanged","xhr","err","startDateInput","Datepicker","datepickerOptions","format","datePicker","DATE","defaultDate","parseDateString","completeDateInput","ProjectAttachments","isHideDownload","isHideFiles","isHidePrivate","selectedAttachments","companyOffices","companyOfficeInput","setValue","updateChoices","choices","programs","projectProgramInput","projectTemplates","projectTemplateInput","projectTypes","projectTypeInput","projectStages","projectStageInput","publish","projectAddress","office_id","getValue","project_stage_id","program_id","project_type_id","project_template_id","square_feet","numbersOnly","PROCORE_PROJECT_NUMBER_CUSTOM_FIELD","postData","company_id","trim","project_number","address","city","zip","state_code","country_code","description","public_notes","est_start_date","est_completion_date","flagColor","pantera_project_id","documentListDrawings","join","documentListPublic","documentListPrivate","isSyncProjectContactVendors","is","responseJSON","exceptionMessage","dashboard","ProjectDashboard","click .btn-alert-order-prints","click .stack-takeoff","click .square-takeoff","click .e-takeoff","click .btn-update-my-info","click .btn-submit-bid","click .btn-feature-settings","ENABLE_BID_PACKAGES_COUNT","fetchBidPackages","bp","bidPackages","showBidPackages","bidPackage","n","mobile","getDevice","AppDownloadModal","renderBidPackages","ProjectStats","emptyCallback","Newsfeed","inviteHeader","ProjectInviteHeader","checkNested","cb","portal","customization","submitBidMessage","ProjectDetails","details","ProjectContactDetails","contact","ProjectMessagesSub","isHideEmptyFolders","BidPackages","orderPrints","OrderPrintsModal","updateMyInfo","contacts","BaseEditContactModal","ProjectContact","viewFeatureSettings","featureSettings","FeatureSettingsModal","FeatureSetting","stackTakeoff","href","squareTakeoff","SquareTakeoffModal","eTakeoff","eTakeoffModal","messageTypeId","DISABLE_PROJECT_PRIVATE_MESSAGES","ProjectProposals","newsfeedItems","pageNumber","pageSize","click .btn-project-newsfeed-refresh","click .btn-project-newsfeed-view-message-participants","click .btn-project-newsfeed-view-attachments","click .btn-project-newsfeed-copy-message","click .btn-project-newsfeed-delete-message","getNewsfeed","refreshNewsfeed","parameter","items","viewAttachments","item","auditAction","projectMessage","ViewMessageAttachmentsModal","viewMessageParticipants","IS_PROJECT_WALL_MESSAGING_NEW","copyMessage","deleteMessage","auditLogId","okButtonText","onOk","delete","selectedCommentId","DeleteProjectMessageByCommentId","isShowCancelButton","cancelButtonText","statItem","getProjectStats","projectStats","stats","labels","graphSet","backgroundColor","datasets","dataset","upperCaseFirstLetterEachWord","label","count","color","$chart","charts","Chart","height","showTotal","total","cutoutPercentage","legend","clickedSegments","segment","_index","click .send-user-message","getCompanyLogoUrl","hideBidsDue","PROJECT_WALL_HIDE_BIDS_DUE","projectResponseButtons","getProjectStatusList","index","colorClass","sendUserMessage","messageItems","click .project-message>.card-header","click .project-message .btn-download-attachment","shown.bs.collapse .project-message .collapse","fetchProjectMessageResponses","responses","projectStatuses","messageResponseButtons","getMessageStatusList","messages","renderMessageResponseButton","contextMessage","getContextMessage","setContextMessage","collapse","urlStatus","actualStatus","toUpperCase","handleResponse","renderContextMessageResponseButton","selectedMessage","canChangeStatus","noResponseMessages","getChangeableMessages","max","getDateDiff","getMessageElement","messageShown","messageType","GetGroupResponsesSubModal","responseButton","contextResponseControl","checkDeclinedResponseQuestion","projectMessages","ProjectContactGroups","contactGroup","ProjectContactGroup","ENABLE_PROJECT_MESSAGE_DECLINE_QUESTION","getProjectStatuses","statuses","declineQuestionSettings","projectParticipants","ProjectMessageDeclineQuestionSettings","projectLocation","recipientGroups","questions","question","ProjectMessageDeclineQuestionModal","ButtonGroup","colorInactiveButtons","buttonClasses","separateButtons","buttons","DOWNLOAD_CONTACT_UPDATE_REQ","alert","ENABLE_SUB_RESPONSE","stopPropagationIfSelected","downloadAttachment","click .group-status-close","click .group-status-save","groups","globalResponse","group","groupResponse","setSaveButton","getGroupElement","DownloadTermsModal","minHeight","onAccept","click .terms-accept","onAcceptClicked","DOWNLOAD_TERMS_SIGNATURE_REQ","ProjectMessageResponseModal","onResponse","click .square-video","click .square-login","click .square-register","watchVideo","open","login","register","click .etakeoff-download","click .etakeoff-launch","download","encodeURIComponent","launch","folderColors","preventSelectAll","canOrder","change .input-select-attachment","click .attachment .pretty","click .attachment","click .btn-order-selected","click .btn-download-attachment","click .btn-download-selected","click .btn-download-all-flattened","click .btn-download-all-combined","click .btn-view-attachment","DISABLE_ORDER_PRINT","isDeferred","renderAttachments","menus","ContextMenu","selector","actions","fetchElementData","onOpen","$container","sortAttachments","getRootSharedAttachments","renderAttachment","PROJ_DASHBOARD_SELECT_ALL_ATTACHMENTS","$checkbox","folderColor","isExpanded","expandedFolders","isSelected","$folder","selectedAttachment","folderAttachment","first","sort","a","b","aso","bso","sortHelpers","sortAlphaNum","attachmentClicked","expandFolder","css","background","attachmentChecked","folderAttachments","addSelectedAttachments","parentFolder","getParentFolder","contains","removeSelectedAttachments","removeSelectedChildAttachmentsRecursive","allAtt","setParentCheckbox","renderSelectedButton","removeSelectedParentFolderRecursive","selectedCount","hasUnselectedAttachments","folderHasUnselectedAttachments","checkDownloadRequirements","downloadSelected","downloadAllCombined","raster","merge","downloadAllFlattened","opts","viewAttachment","isImage","renderPhotoViewer","canRender","isFolder","YesNo","onYes","click .btn-download","entryIds","entryId","queueDownload","entryList","click .submit-response","change input[type=\"radio\"]","responseChanged","submitResponse","$question","substring","reason","field","layout","sortOrder","fields","classes","click .btn-project-edit-cancel","click .btn-project-save","click .btn-push-erp","click .btn-undo-push-erp","click .btn-link-erp","click .btn-unlink-erp","click .btn-project-export","change .input-project-nda","click .btn-edit-project-nda","change .input-details-admin-only","ENABLE_PROJECT_STATUS_ID","column","canEdit","IS_PROJECT_HOME_READONLY","mergePortalLayout","defs","portalDefaults","triggerPortalDefaults","startEndHide","START_END_HIDE","fetchProjectStatuses","fetchERPIntegration","erp","erpIntegration","fetchERPObject","renderERP","pushSupported","hasAvailableAction","integrations","PUSH_PROJECT","linkSupported","LINK_PROJECT","unlinkSupported","UNLINK_PROJECT","renderERPButtons","canPush","disablePushReason","erpSyncStatus","pushERP","_this","pushProject","undoPushERP","_this2","syncStatuses","REVIEWING","undoPush","linkERP","LinkERPProjectModal","erpProject","isERPSynced","unlinkERP","_this3","unlinkProject","findPortalLayoutField","searchField","col","nextSort","customFields","customField","cf","layoutOptions","notesHide","PROJECT_WALL_ADMIN_NOTES_HIDDEN","isNotesRequired","PROJECT_WALL_ADMIN_NOTES_REQUIRED","isUser2Required","PROJECT_WALL_ADMIN_USER_2_REQUIRED","isCityRequired","isStateRequired","isZipRequired","isBidDueDateRequired","PROJECT_WALL_ADMIN_BID_DUE_DATE_REQUIRED","notesLabel","PROJECT_NOTES_LABEL","responseDueLabel","RESPONSE_DUE_LABEL","startDateLabel","PROJECT_START_LABEL","finishDateLabel","PROJECT_FINISH_LABEL","user1Label","PROJECT_USER_1_LABEL","user2Label","PROJECT_USER_2_LABEL","user2Hide","PROJECT_USER_2_HIDE","defaultNDAChecked","PROJECT_NDA_CHECKED_DEFAULT","isEdit","canExport","PROJECT_DETAILS_EXPORT","changedId","def","reference","timeReference","refValue","timeRefValue","refCfId","refCf","refFieldValue","selChoice","timeRefCfId","timeRefCf","timeRefFieldValue","match","offset","getNewDateAddDays","defaultTime","dt","weekdaysOnly","minOffset","getTime","cfId","fieldValue","projectCustomFieldsForm","dueDatePicker","startDatePicker","endDatePicker","coreBinder","CustomFieldsForm","shouldRenderTemplate","fieldValues","fieldId","Binder","watchElements","statePicker","StatePicker","country","IS_DOCUMENT_CLERK","CountryPicker","zipInput","newTime","onShow","context","datetimepicker","date","PROJECT_DEFAULT_BID_DUE_TIME","PROJECT_DEFAULT_BID_DUE_TIME_AMPM","tempDate","timeParts","split","hours","minutes","getFullYear","getMonth","getDate","projectStatusIdSelectPicker","getDefault","userInput","ContactsSelectInput","contexts","USERS","selectedContact","isSingleChoice","emptyNotice","onAdd","user2Input","user2","ENABLE_SCOPES","ProjectScopes","ndaRequiredChanged","editProjectNDA","renderNDARequired","ProjectNDA","hasNDA","detailsAdminOnlyChanged","isDetailsAdminOnly","patch","alertMessage","exportPDF","Intl","DateTimeFormat","resolvedOptions","timeZone","handleDownload","cancelEdit","errors","REQUIRE_PROJECT_START_FINISH","PROJECT_STATUS_NON_DEFAULT_REQUIRED","wasNew","PROJECT_WALL_DEFAULT_PRIVATE_FOLDERS","PROJECT_WALL_DEFAULT_PUBLIC_FOLDERS","PROJECT_WALL_ADMIN_ZIP_REQUIRED","ProjectMapModal","click .map-recenter","mapRecenter","setCenter","myLatLng","markerTitle","geocoder","google","maps","Geocoder","Map","getElementById","mapOptions","geocode","GeocoderStatus","OK","geometry","Marker","position","getStreetView","setVisible","setMapTypeId","MapTypeId","SATELLITE","setZoom","Scopes","scopes","ProjectMessaging","selectedProjectMessageContactBroadcasts","isPrintOrder","isDownloaded","isVisited","isDelivered","isOpened","vendorSector","laborStatus","minorityStatus","hasCompanyLevelCustomFields","hasContactLevelCustomFields","keyup .input-pm-search","click .btn-pm-search","click .project-messages-filter","click .project-messages-clear-filter","click .btn-project-message-settings","change .project-message-enable-declined","click .btn-add-participants-from-project","click .btn-quick-add","click .btn-add-participant-new","click .btn-detailed-search","click .btn-detailed-search-new","click .btn-simple-search","click .btn-quick-search","click .project-message-delete-contacts","click .btn-send-message","click .btn-message-template-send","click .project-message-set-responses","click .project-message-order-prints","click .export-view","click .manage-bid-packages","click .import-bid-packages","click .btn-radius-package-add","click .filter-unsent","showGroupCompanyView","PROJECT_WALL_ADMIN_VIEW_GROUP_COMPANY","showGroupContactView","PROJECT_WALL_ADMIN_VIEW_GROUP_CONTACT","showCompanyView","PROJECT_WALL_ADMIN_VIEW_COMPANY","showContactView","PROJECT_WALL_ADMIN_VIEW_CONTACT","showBidPackagesView","ENABLE_BID_PACKAGES","PROJECT_WALL_ADMIN_VIEW_BID_PACKAGES","clearFilter","isTradesViewSelectAll","updateContactStats","PROJECT_MESSAGING_DISABLE_QUICKADD","ProjectMessageViewSettings","bidFormSettings","bidForms","Settings","fetchBidFormSettings","canViewBidAmount","isSealedBidContact","setting","columnsDefault","orderBy","defaultView","viewSelectPicker","renderContactStats","renderView","onNo","currentView","copyProjectMessage","getSearchFor","searchFor","getViewData","overrides","statusFilter","groupIdList","isPerGroup","publicPrivate","viewSettings","getSettings","filterCustomField","filterCustomFieldValue","filterData","filterCustomFieldName","company","ProjectParticipantsForView","withCustomFields","hasCustomFields","buildApiUrl","reset","filterCfValueLower","filterCustomFieldChoiceIds","cfChoice","checkCf","fieldTypes","CHOICE","intersection","renderViewData","cleanup","dataTableOptions","projectMessagingView","userSettings","afterDataTableRender","getDataTableInstance","ProjectMessagingTradesDataTable","ProjectMessagingCompanyDataTable","ProjectMessagingContactDataTable","ProjectMessagingMessagesDataTable","ProjectMessagingResponsesDataTable","ProjectMessagingBidPackagesDataTable","manageBidPackages","ManageBidPackagesModal","importBidPackages","ImportTemplateModal","onImport","submittals","totalCount","unsentCount","$buttons","addByBidPackageRadius","BidPackageRadiusModal","addSelectedContacts","uniq","removeSelectedContacts","contactId","clearSelectedContacts","addSelectedContactGroups","x","groupId","removeSelectedContactGroups","selectedContactGroup","isContactSelected","enableDeclinedChanged","enableDeclinedHelper","isEnableDeclined","rows","invalidate","draw","searchChanged","search","filterDialog","filterInfo","FilterInfo","FilterProjectParticipantsModal","onFilter","clearFilterClick","filterUnsent","ProjectMessagingSettingsModal","deleteContacts","isRemoveFromAB","deleteContactGroups","deleteParticipantsFromProject","removeFrom","DeleteProjectParticipants","sendMessage","sender","defaultTemplateKey","fetchProjectMessageEmailTemplates","replyToContacts","fnContinue","inviteModal","projectInvites","ProjectInviteModal","emailTemplates","PROJECT_WALL_MESSAGING_SHOW_TEMPLATES","projectMessageSettings","inviteSettings","onAddFromThisProject","onViewSelected","isShowQuickAdd","isShowAttachments","PROJECT_MESSAGING_ENABLE_REPLYTO_OVERRIDE","fetchProjectContacts","projectContact","attributes","quickAdd","QuickAddParticipantsModal","addNewContact","ProjectParticipant","masterUserId","isForceSaveExistingEmail","ADDRESS_BOOK_DEFAULT_COUNTRY","showNotes","showActive","deleteLabel","detailedSearch","DISABLE_NEW_ADDRESSBOOK","simpleSearch","showUnionStatus","IS_HIDE_UNION_STATUS","AddParticipantsModal","isDirectoryEnabled","ENABLE_DIRECTORY","isUnionStatusEnabled","isReturnContactIds","quickSearch","SelectContactsModal","disableBlacklisted","disableBadEmail","addParticipantsById","addParticipantsFromProject","unshift","AddParticipantsFromProjectModal","isBidFormsEnabled","ENABLE_BID_FORMS","projectResponses","templateKey","privateFolders","responseDue","DATE_YMD","deleteProjectMessage","ContactInfoList","recipients","onOrderPlaced","setResponses","SetProjectParticipantsStatusModal","companyComment","contactComment","ids","exportView","GradeProjectContactModal","onGrade","click button.grade","click button.clear-grade","gradeChanged","onClear","ProjectParticipantCommentModal","onComment","comments","participant","isCompanyComments","keyup .project-contact-comment","click .project-contact-comment-save","click .project-comment-delete","commentDeleted","selectedCard","comment","ProjectContactComment","contactCompanyId","projectContactCommentId","parentContainer","isLastCard","last","commentChanged","commentAdded","click button.filter","fieldSettingsEnabled","ENABLE_CONTACT_FIELD_SETTINGS","coreFieldSettings","fetchContactFieldSettings","checkFieldVisible","fieldName","ADDRESS_BOOK_HIDE_SECTOR","ADDRESS_BOOK_HIDE_MINORITY_STATUS","fieldSettings","sectorSelectPicker","publicPrivateSelectPicker","laborStatusSelectPicker","noneSelectedText","minorityStatusSelectPicker","groupSelector","GroupSelector","isShowNoGroup","isShowGroupCount","selectedGroupIds","onGroupSelected","input","groupsData","getGroupsData","selected","change .select-column","click button.settings-save","dbInstance","getColumns","selectedColumns","columnData","rowsPerPage","selectView","undelegateEvents","columnSelected","settingTemp","slice","columnTemp","ManageProjectParticipantTradesModal","click .manage-trades-save","change .select-trade","change .select-all-trades","ProjectParticipantGroups","tradeSelectChanged","tr","tradeSelectAllChanged","click .set-responses","click .comment-type>div","isContactComment","click","projectStatus","commentTypeClicked","$target","click .btn-remove","canDeleteContact","ProjectMessagingDataTable","zeroRecords","commentsTooltip","addCommentTooltip","enableColumnResize","onColumnResizeEnd","c","totalWidth","colWidths","colWidth","idx","colPercents","percent","Math","floor","newColumns","colTp","_typeof","beforeDataTableRender","scrollRows","ENABLE_DATA_TABLE_FIXED_HEADER","projectStatusList","childDataTables","contextMenuOptions","getContextMenuItems","isHideNoActions","setCustomOrder","fixedColumnsLeft","colReorder","realtime","createdRow","orderAscending","columnOrderChanged","orderByChanged","afterDataTableRenderChild","getRowChildTable","childOpts","getRowChildData","setRowStyle","isBlacklisted","statusChanged","getCustomFieldColumn","isCompany","rowField","getCompanyCustomField","getContactCustomField","TEXT","isURL","DATETIME","BOOL","choice","MONEY","parseFloat","formatCurrency","PHONE","phoneWrapped","customFieldId","gradeContactCompany","parentTR","prev","grade","childDT","rowParent","parentDataTable","childRowToggle","childClass","$childTable","class","childData","selectableContacts","declinedContacts","childTable","childDt","childRowToggleAll","eq","node","onStatusChanged","TR","updateStatus","isCompanyBlacklisted","RSVP_DISABLE_PER_GROUP","mouseoverComments","commentHoverContactId","commentHoverContactCompanyId","fnShowComments","Tooltip","container","companyComments","setTimeout","ProjectParticipantComments","mouseleaveComments","addComment","contextId","tp","off","which","preventDefault","commentText","manageComments","getIsRootView","dataIndex","click i.trade-toggle-row","click i.trade-toggle-all-rows","change .trade-select-all-contacts","includeAllColumns","includeColumns","totalParticipants","selectColumnHeader","selectColumnWidth","defaultContent","columnName","cName","cNameTp","innerHtml","statusPercent","textColor","colorHelpers","idealLinkColorForBackground","outerHtml","getChildTableType","getChildTableSettings","selectAll","enableDeclined","isDeclined","change select.bid-package-count","blur .bid-package-notes","_columns$push","enableCount","_defineProperty","d","note","onBidPackageCountChanged","updateBidPackageNotesCount","onBidPackageNotesChanged","notes","bidPackageId","click i.message-toggle-row","click .btn-show-message","click .btn-view-attachments","iconClass","templates","temp","tempKey","tokens","responseType","responseDueDate","substr","foregroundColor","getContactAnchor","showRowFullMessage","target","page_info","page","info","new_row_index","row_position","start","end","page_to_display","len","$dataTable","click i.response-toggle-row","click i.company-toggle-row","change select.company-project-status","click .btn-grade-project-contact-company","change .select-company","mouseover .comment-company","mouseleave .comment-company","click .btn-comment-company","click .btn-add-comment-company","change .select-all-companies","click .btn-show-groups","UploadParticipantBidDocumentsModal","isIndeterminate","distanceThreshold","PROJECT_MESSAGING_DISTANCE_ICON_THRESHOLD","canManage","icons","dist","groupDisplayLimit","groupArray","PROJECT_MESSAGING_MAX_GROUP_DISPLAY","rest","startsWith","companyStatus","companyGroupStatus","companySelectChanged","childRow","companySelectAllChanged","isGroupsView","statusColor","statusColors","blackListed","cssText","showRowGroups","click i.contact-toggle-row","change select.contact-project-status","change select.contact-message-status","click .btn-grade-project-contact","mouseover .comment-contact,.comment-company","mouseleave .comment-contact,.comment-company","click .btn-add-comment-contact,.btn-add-comment-company","click .btn-comment-contact,.btn-comment-contact-company","keyup .contact-bid-amount","blur .contact-bid-amount","change .select-contact","change .select-all-contacts","click .btn-copy-access-key","click .btn-copy-email","inputMaskCurrency","isShowAddContact","becameInactive","parentRow","groupNameList","ProjectParticipantHistoryModal","projectMessageContactBroadcastId","ADDRESS_BOOK_CONTACT_UPDATER_ENABLED","logging","Debug","LoggingActions","SEND_PREQUAL_UPDATE","DISABLE_PREQUAL","logicError","ReportContactModal","showRemoveFromProject","onReport","removeFromProject","PROJECT_ACTIVITY_RANK_STATUS_LIST","maxEmailWidth","proQual","screeningStatuses","Complete","InProcess","subject","origin","emailFormatted","toFixed","userType","userTypes","getByIsCompany","broadcastStatus","paging","ProjectMessagingContactTradesDataTable","parentView","statusChangedHelper","every","rowIdx","tableLoop","rowLoop","groupStatus","onMessageStatusChanged","bidAmountExited","bidAmount","getMoneyInputValue","bidAmountChanged","ctrlKey","queueSave","bidAmountTotal","contactSelectChanged","totalContacts","contactSelectAllChanged","rowCss","copyAccessKey","copyEmail","change select.project-contact-group-status","keyup .contact-group-bid-amount","blur .contact-group-bid-amount","contactBidTotal","companyBidTotal","parentParentTR","ProjectParticipantForView","endpointArr","ProjectParticipantGroupForView","ProjectParticipantCompanyForView","ProjectMessageForView","ProjectResponseForView","ProjectGroupForView","projectMessageBroadcastId","parse","beforeConstruct","keyup .input-email","click .btn-add","emailChanged","addParticipant","emails","newParticipant","isQuickAdd","mod","SelectGroupsModal","alertText","selectorOptions","includeGroupIds","AutoReport","click .export-pdf","jQuery","atob"],"mappings":"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","file":"app.js","sourcesContent":["if (PJQ.app.module === PJQ.constants.modules.PROJECTWALL) {\n\tPJQ.app.addOldRoutes([\n\t\t{\n\t\t\troute: '',\n\t\t\tname: 'default',\n\t\t\tcallback: function () {\n\t\t\t\tPJQ.app.router.navigate('projects', {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t]);\n}\n\nPJQ.modules.projectWall = {\n\toldRoutes: [\n\t\t{\n\t\t\troute: \"?projectid\",\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.app.router.navigate('projects/' + projectId, {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t],\n\troutes: [\n\t\t{\n\t\t\troute: 'projects/:projectId',\n\t\t\tname: 'projectRoot',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tlet moduleName = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_DEFAULT_MODULE) ?\n\t\t\t\t\tPJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_DEFAULT_MODULE) : 'dashboard';\n\t\t\t\tPJQ.app.router.navigate('projects/' + projectId.toString() + '/' + moduleName, {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/submitbid#tabPrivateMessage',\n\t\t\tname: 'projectSubmitBidLegacy',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.app.session.set('submitBid', true);\n\t\t\t\tPJQ.app.router.navigate('projects/' + projectId, {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/SubmitBid#tabPrivateMessage',\n\t\t\tname: 'projectSubmitBidLegacy',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.app.session.set('submitBid', true);\n\t\t\t\tPJQ.app.router.navigate('projects/' + projectId, {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/SubmitBid',\n\t\t\tname: 'projectSubmitBid',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.app.session.set('submitBid', true);\n\t\t\t\tPJQ.app.router.navigate('projects/' + projectId, {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/submitbid',\n\t\t\tname: 'projectSubmitBid',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.app.session.set('submitBid', true);\n\t\t\t\tPJQ.app.router.navigate('projects/' + projectId, {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/?response=:response',\n\t\t\tname: 'projectWithResponse',\n\t\t\tcallback: function (projectId, response) {\n\t\t\t\tPJQ.app.session.set('bidStatus', response);\n\t\t\t\tPJQ.app.router.navigate('projects/' + projectId, {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/ACCEPT',\n\t\t\tname: 'projectWithAcceptResponse',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.app.session.set('bidStatus', 'ACCEPT');\n\t\t\t\tPJQ.app.router.navigate('projects/' + projectId, {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/DECLINE',\n\t\t\tname: 'projectWithDeclineResponse',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.app.session.set('bidStatus', 'DECLINE');\n\t\t\t\tPJQ.app.router.navigate('projects/' + projectId, {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/dashboard',\n\t\t\tname: 'projectDashboard',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"dashboard\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/details',\n\t\t\tname: 'projectDetails',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"details\", {\n\t\t\t\t\tdetailedProject: true\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/locations',\n\t\t\tname: 'projectDetails',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"locations\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/mall',\n\t\t\tname: 'projectContainer',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"mall\", {\n\t\t\t\t\tdetailedProject: true\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/messaging',\n\t\t\tname: 'projectMessaging',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"messaging\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/messaging/:projectMessageId',\n\t\t\tname: 'projectMessagingView',\n\t\t\tcallback: function (projectId, projectMessageId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"messaging\", {\n\t\t\t\t\tviewProjectMessageId: projectMessageId\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/messagingnew',\n\t\t\tname: 'projectMessaging',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"messagingnew\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/messagingnew/:projectMessageId',\n\t\t\tname: 'projectMessagingViewNew',\n\t\t\tcallback: function (projectId, projectMessageId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"messagingnew\", {\n\t\t\t\t\tviewProjectMessageId: projectMessageId\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/messaging/:projectMessageId/copy',\n\t\t\tname: 'projectMessagingCopy',\n\t\t\tcallback: function (projectId, projectMessageId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"messaging\", {\n\t\t\t\t\tcopyProjectMessageId: projectMessageId\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/messagingnew/:projectMessageId/copy',\n\t\t\tname: 'projectMessagingCopyNew',\n\t\t\tcallback: function (projectId, projectMessageId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"messagingnew\", {\n\t\t\t\t\tcopyProjectMessageId: projectMessageId\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/messaging/:projectMessageId/delete',\n\t\t\tname: 'projectMessagingDelete',\n\t\t\tcallback: function (projectId, projectMessageId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"messaging\", {\n\t\t\t\t\tdeleteProjectMessageId: projectMessageId\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/privatemessaging/view/:viewName',\n\t\t\tname: 'privateMessagingSent',\n\t\t\tcallback: function (projectId, viewName) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"privatemessaging\", {\n\t\t\t\t\tview: viewName,\n\t\t\t\t\tnoRoute: true\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/privatemessaging',\n\t\t\tname: 'privateMessaging',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"privatemessaging\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/privatemessaging/:projectMessageId',\n\t\t\tname: 'privateMessagingMessage',\n\t\t\tcallback: function (projectId, projectMessageId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"privatemessaging\", {\n\t\t\t\t\tviewUserMessageId: projectMessageId\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/documents',\n\t\t\tname: 'projectDocuments',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"projectdocuments\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/attachments',\n\t\t\tname: 'projectAttachments',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"attachments\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/submittalsold',\n\t\t\tname: 'submittalList',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"submittals_old\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/submittals',\n\t\t\tname: 'submittalList',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"submittals\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/submittals/:submittalId',\n\t\t\tname: 'submittal',\n\t\t\tcallback: function (projectId, submittalId) {\n\t\t\t\twindow.pjqSubmittalLoadId = submittalId;\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"submittals\", {\n\t\t\t\t\tsubmittalId: submittalId\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/reports',\n\t\t\tname: 'projectreports',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"projectreports\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/reportsadhoc',\n\t\t\tname: 'projectreportsadhoc',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"projectreportsadhoc\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/autoreport',\n\t\t\tname: 'autoReport',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"rsvpautoreport\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/proposals',\n\t\t\tname: 'proposals',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"proposals\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/messaging/context/:msgContext/:sessionId/new',\n\t\t\tname: 'projectMessagingContextOld',\n\t\t\tcallback: function (projectId, msgContext, sessionId) {\n\t\t\t\twindow.projectContactTemp = msgContext;\n\t\t\t\twindow.pjqSessionId = sessionId;\n\t\t\t\tPJQ.app.session.set('sessionId', sessionId);\n\t\t\t\twindow.isNewMsg = true;\n\t\t\t\tPJQ.app.router.navigate('projects/' + projectId + '/messaging', {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/messaging/context/:msgContext/:sessionId',\n\t\t\tname: 'projectMessagingContextOld',\n\t\t\tcallback: function (projectId, msgContext, sessionId) {\n\t\t\t\twindow.projectContactTemp = msgContext;\n\t\t\t\twindow.pjqSessionId = sessionId;\n\t\t\t\tPJQ.app.session.set('sessionId', sessionId);\n\t\t\t\twindow.isNewMsg = false;\n\t\t\t\tPJQ.app.router.navigate('projects/' + projectId + '/messaging', {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t],\n\tinitProjectNavigator(projectId, activeItem, viewOptions) {\n\t\tif (!PJQ.app.session.project || !PJQ.app.session.project.isFetched || PJQ.app.session.project.id !== projectId) {\n\t\t\tPJQ.app.session.project = new PJQ.models.projects.Project({\n\t\t\t\tprojectId: projectId\n\t\t\t}, {isDetail: viewOptions != null && viewOptions.detailedProject === true});\n\t\t\tif (PJQ.app.session.project.id > 0) {\n\t\t\t\tPJQ.app.session.project.fetch({\n\t\t\t\t\tnotify: false,\n\t\t\t\t\tsuccess: function () {\n\t\t\t\t\t\tif (activeItem === 'dashboard' && PJQ.app.session.project.get('status') === 'ARCHIVE')\n\t\t\t\t\t\t\tactiveItem = 'details';\n\n\t\t\t\t\t\tif (PJQ.app.session.project.get('masterUserId') !== PJQ.app.session.get('masterUserId')\n\t\t\t\t\t\t\t&& PJQ.app.session.project.nda != null) {\n\t\t\t\t\t\t\tnew PJQ.views.projects.SignProjectNDAModal({\n\t\t\t\t\t\t\t\tmodel: PJQ.app.session.project,\n\t\t\t\t\t\t\t\tactiveItem: activeItem,\n\t\t\t\t\t\t\t\tviewOptions: viewOptions\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet accessKey = PJQ.app.session.get('accessKey');\n\t\t\t\t\t\tif (_.size(accessKey) > 0) {\n\t\t\t\t\t\t\tnew PJQ.ajax.Request({\n\t\t\t\t\t\t\t\tendpoint: \"/projects/\" + PJQ.app.session.project.id + \"/viewed?accessKey=\" + accessKey\n\t\t\t\t\t\t\t}).post();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (PJQ.app.session.user && PJQ.app.session.user.id > 0 && PJQ.app.session.project.get('masterUserId') !== PJQ.app.session.get('masterUserId')) {\n\t\t\t\t\t\t\tnew PJQ.ajax.Request({\n\t\t\t\t\t\t\t\tendpoint: \"/projects/\" + PJQ.app.session.project.id + \"/viewed\"\n\t\t\t\t\t\t\t}).post();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (window.settings != null) {\n\t\t\t\t\t\t\twindow.settings.SelectectContactGroupsTemp = [];\n\t\t\t\t\t\t\twindow.settings.SelectectContactsTemp = [];\n\t\t\t\t\t\t\twindow.settings.SharedFolderId = PJQ.app.session.project.get('sharedFolderId');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tnew PJQ.ajax.Request({\n\t\t\t\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tendpoint: 'session'\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tendpoint: 'project',\n\t\t\t\t\t\t\t\t\tvalue: projectId\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t}).put().done(_.bind(function () {\n\t\t\t\t\t\t\tlet initNav = function () {\n\t\t\t\t\t\t\t\tPJQ.app.initNavigator({\n\t\t\t\t\t\t\t\t\tactiveItem: activeItem,\n\t\t\t\t\t\t\t\t\tviewOptions: viewOptions\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tif (PJQ.app.session.project.get('masterUserId') !== PJQ.app.session.get('masterUserId')) {\n\t\t\t\t\t\t\t\tPJQ.app.session.project.fetchUserMessageTypes(function () {\n\t\t\t\t\t\t\t\t\tlet accessKey = PJQ.app.session.get('accessKey');\n\t\t\t\t\t\t\t\t\tif (_.size(accessKey) > 0) {\n\t\t\t\t\t\t\t\t\t\tPJQ.app.TokenManager.getTokensForAccessKey(accessKey, (success, error) => {\n\t\t\t\t\t\t\t\t\t\t\tinitNav();\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tinitNav();\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tinitNav();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, this))\n\t\t\t\t\t},\n\t\t\t\t\terror: function (model, response) {\n\t\t\t\t\t\tif(response.status === 401 && _.size(PJQ.app.session.get('accessKey')) > 0){\n\t\t\t\t\t\t\tPJQ.notifications.notify.warningNotify({\n\t\t\t\t\t\t\t\tmessage: 'This access key has expired'\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse{\n\t\t\t\t\t\t\tnew PJQ.ErrorHandler({}).handle(response, model.toJSON());\n\t\t\t\t\t\t}\n\t\t\t\t\t\tPJQ.app.router.navigate('/', {\n\t\t\t\t\t\t\ttrigger: true,\n\t\t\t\t\t\t\treplace: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\t\tmessage: 'This project cannot be found currently'\n\t\t\t\t});\n\t\t\t\tPJQ.app.router.navigate('/', {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tPJQ.app.initNavigator({\n\t\t\t\tactiveItem: activeItem,\n\t\t\t\tviewOptions: viewOptions\n\t\t\t});\n\t\t}\n\t}\n};\n\nPJQ.app.addRoutes(PJQ.modules.projectWall.routes);\nPJQ.app.addOldRoutes(PJQ.modules.projectWall.oldRoutes);\n","PJQ.views.projects.AddParticipantsDetailedModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Add-Participants-Detailed'),\n\t\tminWidth: '90%',\n\t\tonSave: null,\n\t\tisWrapForm: true,\n\t\twrapFormName: 'modal-add-participants',\n\t\tisUseNewAddressBook: false\n\t},\n\tevents: {\n\t\t'click .btn-add-selected': 'addSelected'\n\t},\n\tbeforeModalCreated: function () {\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\twrapFormName: this.options.wrapFormName,\n\t\t\tisUseNewAddressBook: this.options.isUseNewAddressBook\n\t\t};\n\t},\n\tbeforeRender: function () {\n\n\t},\n\tafterRender: function () {\n\t\tif (this.options.isUseNewAddressBook) {\n\t\t\tlet projectId = null\n\t\t\tif (this.options.projects) {\n\t\t\t\tprojectId = this.options.projects[0].get('projectId');\n\t\t\t}\n\t\t\tnew PJQ.ajax.Request({\n\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\t\tvalue: projectId ? projectId : PJQ.app.session.project.get('projectId')\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'pcg'\n\t\t\t\t\t}\n\t\t\t\t])\n\t\t\t}).get().done(_.bind(function (data) {\n\t\t\t\tif (PJQ.app.session.project) {\n\t\t\t\t\tnew PJQ.Alert(this.$('.alert-project-name'), {\n\t\t\t\t\t\ttype: 'primary',\n\t\t\t\t\t\ttext: 'Project Info: ' + PJQ.app.session.project.get('projectName') + ' ' + PJQ.app.session.project.get('city') + ' ' + PJQ.app.session.project.get('state') + ' ' + PJQ.app.session.project.get('zip'),\n\t\t\t\t\t\textraClasses: ['d-flex', 'text-align-center', 'align-content-center', 'justify-content-center']\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tthis.addressBookView = new PJQ.views.addressbook.AddressBook({\n\t\t\t\t\tel: this.$('.addressbook-container'),\n\t\t\t\t\tselectionMode: PJQ.constants.addressBook.selectionMode.ADD_TO_PROJECT,\n\t\t\t\t\tdisabledContacts: this.options.disableContacts ? this.options.disableContacts : data.contactsNoGroup,\n\t\t\t\t\tdisabledContactGroups: this.options.isMultipleProjects ? null : data.contactGroups,\n\t\t\t\t\tonSelection: _.bind(function (contactsAll, contactsNoGroup, contactGroups) {\n\t\t\t\t\t\tthis.$('.btn-add-selected').prop('disabled', (_.size(contactsNoGroup) + _.size(contactGroups)) === 0);\n\t\t\t\t\t\tthis.selectedContactsAll = contactsAll;\n\t\t\t\t\t}, this)\n\t\t\t\t});\n\t\t\t}, this)).fail(function () {\n\t\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\t\tmessage: 'Something went wrong!'\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\twindow.selectedCompanies = [];\n\t\t\twindow.selectedContacts = [];\n\t\t\twindow.selectedGroups = [];\n\t\t\twindow.selectedContactGroups = [];\n\t\t\twindow.pjqSessionId = PJQ.app.session.id;\n\t\t\twindow.pjqABContext = 'ap2';\n\t\t\twindow.pjqIsAddProjectContacts = false;\n\t\t\twindow.isHideMerge = true;\n\t\t\twindow.isHideAddSelectedContacts = true;\n\t\t\twindow.isHideReturnToProject = true;\n\t\t\twindow.isHideImportExport = true;\n\t\t\twindow.initAbEditCallback = _.bind(function (isEditing) {\n\t\t\t\tif (isEditing) {\n\t\t\t\t\tthis.$('.modal-btn-outer').hide();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.$('.modal-btn-outer').show();\n\t\t\t\t}\n\t\t\t}, this);\n\n\t\t\tlet $form = this.$(\"Form[name='\" + this.options.wrapFormName + \"']\");\n\t\t\twindow.validator = $form.validate({\n\t\t\t\tonsubmit: false,\n\t\t\t\tonkeyup: false,\n\t\t\t\tshowErrors: function showErrors(errorMap, errorList) {\n\t\t\t\t\tfor (let i = 0; errorList[i]; i++) {\n\t\t\t\t\t\tlet element = this.errorList[i].element;\n\t\t\t\t\t\t//solves the problem with brute force\n\t\t\t\t\t\t//remove existing error label and thus force plugin to recreate it\n\t\t\t\t\t\t//recreation == call to error placement function\n\t\t\t\t\t\tthis.errorsFor(element).remove();\n\t\t\t\t\t}\n\t\t\t\t\tthis.defaultShowErrors();\n\t\t\t\t},\n\t\t\t\terrorPlacement: function errorPlacement(error, element) {\n\t\t\t\t\terror.html('<br />' + error.text());\n\t\t\t\t\tif (element.attr('tagName') == 'select' || element.hasClass('pjq-numeric-field-width'))\n\t\t\t\t\t\terror.appendTo(element.parent().parent());\n\t\t\t\t\telse\n\t\t\t\t\t\terror.appendTo(element.parent());\n\t\t\t\t},\n\t\t\t\terrorClass: \"pjq-errortext\",\n\t\t\t\tignore: \"pjq-validate-ignore\"\n\t\t\t});\n\n\t\t\tinitAddressBook($form);\n\t\t}\n\t},\n\taddSelected: function () {\n\t\tthis.selectedContacts = [];\n\t\tthis.selectedCompanies = [];\n\t\tthis.selectedGroups = [];\n\n\t\tif (this.options.isUseNewAddressBook) {\n\t\t\tthis.selectedContacts = this.addressBookView.selectedContactsNoGroup;\n\t\t\tthis.selectedGroups = this.addressBookView.selectedContactGroups;\n\t\t}\n\t\telse {\n\t\t\tthis.selectedContacts = window.selectedContacts;\n\t\t\tthis.selectedCompanies = window.selectedCompanies;\n\t\t\tthis.selectedGroups = window.selectedGroups;\n\t\t}\n\n\t\tif (_.size(this.selectedContacts) + _.size(this.selectedCompanies) + _.size(this.selectedGroups) === 0) {\n\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\tmessage: 'No contacts were selected.  Please make selections to continue.'\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tif (_.size(this.selectedContacts) + _.size(this.selectedCompanies) > 3200 || _.size(this.selectedGroups) > 3200) {\n\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\tmessage: 'Too many results were selected.  Please refine your search to continue.'\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.options.isMultipleProjects) {\n\t\t\tlet callback = _.bind(function () {\n\t\t\t\tnew PJQ.ajax.Request({\n\t\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\t\t\tvalue: PJQ.app.session.project.id\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tendpoint: 'addpcg'\n\t\t\t\t\t\t}]),\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tcontactIds: this.selectedContacts,\n\t\t\t\t\t\tcontactCompanyIds: this.selectedCompanies,\n\t\t\t\t\t\tcontactGroupIds: this.selectedGroups\n\t\t\t\t\t}\n\t\t\t\t}).post().done(_.bind(function (data) {\n\t\t\t\t\tif (typeof this.options.onSave === 'function') {\n\t\t\t\t\t\tthis.options.onSave(data.contactIds, data.projectContactIds);\n\t\t\t\t\t}\n\t\t\t\t\tthis.removeModal();\n\t\t\t\t}, this)).fail(function () {\n\t\t\t\t});\n\t\t\t}, this);\n\n\t\t\tnew PJQ.ajax.Request({\n\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\t\tvalue: PJQ.app.session.project.id\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'checkpcg'\n\t\t\t\t\t}]),\n\t\t\t\tdata: {\n\t\t\t\t\tcontactIds: this.selectedContacts,\n\t\t\t\t\tcontactCompanyIds: this.selectedCompanies,\n\t\t\t\t\tcontactGroupIds: this.selectedGroups\n\t\t\t\t}\n\t\t\t}).post().done(_.bind(function (data) {\n\t\t\t\tif (data.results.length > 0) {\n\t\t\t\t\tnew PJQ.views.projects.AddParticipantsErrorModal({\n\t\t\t\t\t\tdata: data.results,\n\t\t\t\t\t\tcontactIds: this.selectedContacts,\n\t\t\t\t\t\tcontactCompanyIds: this.selectedCompanies,\n\t\t\t\t\t\tcontactGroupIds: this.selectedGroups,\n\t\t\t\t\t\tonContinue: _.bind(function () {\n\t\t\t\t\t\t\tcallback();\n\t\t\t\t\t\t}, this)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tcallback();\n\n\t\t\t}, this)).fail(function () {\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tthis.options.onSave(this.selectedContactsAll, {\n\t\t\t\tselectedContacts: this.selectedContacts,\n\t\t\t\tselectedCompanies: this.selectedCompanies,\n\t\t\t\tselectedGroups: this.selectedGroups\n\t\t\t});\n\t\t\tthis.removeModal();\n\t\t}\n\t}\n});\n\nPJQ.views.projects.AddParticipantsErrorModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Add-Participants-Error-List'),\n\t\tminWidth: '90%',\n\t\tdata: null,\n\t\tonContinue: _.noop\n\t},\n\tevents: {\n\t\t'click .btn-copy-phone': 'copyPhone',\n\t\t'click .btn-continue': 'continue',\n\t\t'click .export': 'export'\n\t},\n\tafterRender: function () {\n\t\tnew PJQ.views.dataTables.DataTable({\n\t\t\tel: this.$('.participant-errors'),\n\t\t\tpageLength: 999999,\n\t\t\tisHideSearch: true,\n\t\t\tdata: this.options.data,\n\t\t\tdom: 't',\n\t\t\torder: [],\n\t\t\tcolumns: [\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"companyName\",\n\t\t\t\t\t\"title\": \"Company\",\n\t\t\t\t\t\"orderable\": false\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"contactName\",\n\t\t\t\t\t\"title\": \"Contact\",\n\t\t\t\t\t\"orderable\": false\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"phone\",\n\t\t\t\t\t\"title\": \"Phone\",\n\t\t\t\t\t\"orderable\": false,\n\t\t\t\t\t\"render\": _.bind(function (data, type, row) {\n\t\t\t\t\t\tlet html = '<div style=\"min-width:100px;\" class=\"d-flex align-items-center\">',\n\t\t\t\t\t\t\tphoneFormatted = row.phone ? (PJQ.helpers.formatHelpers.formatPhoneNumber(row.phone) + (_.size(row.phoneExtension) === 0 ? '' : ' x' + row.phoneExtension)) : 'N/A';\n\n\t\t\t\t\t\tif (row.phone !== '')\n\t\t\t\t\t\t\thtml += '<button type=\"button\" class=\"btn btn-transparent-dark btn-copy-phone\" title=\"Copy Phone #\" data-phone=\"' + phoneFormatted + '\"><i class=\"far fa-phone text-dark\"></i></button>';\n\n\t\t\t\t\t\thtml += '<div class=\"flex-fill ' + (row.phone ? '' : 'text-muted') + '\">' + phoneFormatted + '</div>';\n\t\t\t\t\t\thtml += '</div>';\n\t\t\t\t\t\treturn html;\n\t\t\t\t\t}, this)\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"email\",\n\t\t\t\t\t\"title\": \"Email\",\n\t\t\t\t\t\"orderable\": false\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"reason\",\n\t\t\t\t\t\"title\": \"Reason\",\n\t\t\t\t\t\"orderable\": false\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\n\t},\n\tcontinue: function () {\n\t\tif (typeof this.options.onContinue === 'function')\n\t\t\tthis.options.onContinue();\n\n\t\tthis.removeModal();\n\t},\n\texport: function () {\n\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\tvalue: PJQ.app.session.project.id\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'checkpcg'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'export'\n\t\t\t\t}\n\t\t\t]),\n\t\t\tdata: {\n\t\t\t\tcontactIds: this.options.contactIds,\n\t\t\t\tcontactCompanyIds: this.options.contactCompanyIds,\n\t\t\t\tcontactGroupIds: this.options.contactGroupIds\n\t\t\t}\n\t\t}).post().success(_.bind(function (data) {\n\t\t\tPJQ.files.downloadFile(data.url, {isEndpoint: false});\n\t\t}, this));\n\t},\n\tcopyPhone: function (e) {\n\t\tlet inputId = 'h_input_' + _.uniqueId(),\n\t\t\thiddenInput = $('<input>', {\n\t\t\t\tvalue: $(e.currentTarget).data('phone'),\n\t\t\t\tstyle: 'position: absolute;left:-2000px;top:-2000px',\n\t\t\t\tid: inputId\n\t\t\t});\n\t\tthis.$el.append(hiddenInput);\n\t\thiddenInput[0].select();\n\t\tdocument.execCommand(\"copy\");\n\t\thiddenInput.remove();\n\t\tPJQ.notifications.notify.successNotify({\n\t\t\tmessage: 'Number copied to clipboard.'\n\t\t});\n\t}\n});\n","PJQ.views.projects.Attachments = PJQ.views.files.FileNavigator.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Attachments'),\n\t\tsubTemplates: {\n\t\t\tfile: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Attachment'),\n\t\t\tfileMenu: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Attachment-Menu')\n\t\t},\n\t\tsortBy: 'name',\n\t\tsortDirection: 'asc',\n\t\tisHideDrawings: false,\n\t\tenableDrawings: false,\n\t\tcanAdd: false,\n\t\tcanShare: false,\n\t\tisAdmin: false,\n\t\tisReadOnly: false,\n\t\thideHeader: false,\n\t\tfoldersOnly: false\n\t},\n\tevents: {\n\t\t'click .btn-upload-raw-files': 'uploadRawFiles',\n\t\t'click .btn-attach-documents': 'attachRootAttachments',\n\t\t'click .btn-add-shared-folder': 'addSharedFolderClicked',\n\t\t'click .btn-add-private-folder': 'addPrivateFolderClicked',\n\t\t'click .btn-add-to-drawings': 'addToDrawingsClicked',\n\t\t'click .btn-select-contents': 'selectFolderContentsClicked',\n\t\t'click .btn-add-selected-to-drawings': 'addSelectedToDrawings',\n\t\t'change .input-select-all': 'allChecked',\n\t\t'click .btn-download-all': 'downloadAll'\n\t},\n\tbeforeFirstRender: function () {\n\t\tlet prefs;\n\t\tif (this.options.project != null) {\n\t\t\tprefs = this.options.project.preferences;\n\n\t\t\tthis.options.enableDrawings = !this.options.isHideDrawings && !this.options.project.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_DRAWINGS);\n\t\t\tthis.options.canAdd = (this.options.project.get('masterUserId') === PJQ.app.session.get('masterUserId')\n\t\t\t\t&& this.options.project.hasPermission('attachments.canAdd'));\n\t\t\tthis.options.isAdmin = this.options.project.get('masterUserId') === PJQ.app.session.get('masterUserId')\n\t\t\t\t&& this.options.project.hasPermission('attachments.isAdmin');\n\t\t\tthis.options.canShare = this.options.project.get('masterUserId') === PJQ.app.session.get('masterUserId')\n\t\t\t\t&& this.options.project.hasPermission('attachments.canShare')\n\t\t\t\t&& !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_SHARE_PEI);\n\t\t\tthis.options.foldersOnly = this.options.project.preferences.hasPref(PJQ.constants.preferenceTypes.RSVP_FOLDER_CHECKBOXES_ONLY) &&\n\t\t\t\tthis.options.project.get('masterUserId') !== PJQ.app.session.get('masterUserId');\n\n\t\t\tthis.options.canAddDrawings = PJQ.app.session.project != null\n\t\t\t\t&& PJQ.app.session.project.hasPermission('drawings.isAdmin')\n\t\t\t\t&& (PJQ.app.session.project.get('masterUserId') === PJQ.app.session.get('masterUserId'));\n\t\t}\n\t\telse {\n\t\t\tprefs = PJQ.app.session.preferences;\n\t\t}\n\n\t\tif (prefs != null) {\n\t\t\tif(prefs.hasPref(PJQ.constants.preferenceTypes.EXPAND_PROJECT_ATTACHMENTS)){\n\t\t\t\tthis.options.expandAllFolders = true;\n\t\t\t}\n\n\t\t\t// this has to read from session, it is a portal preference\n\t\t\tlet sfOverride = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_SHARED_FOLDER_NAME_OVERRIDE);\n\t\t\tif(_.size(sfOverride) > 0){\n\t\t\t\tthis.options.sharedFolderNameOverride = sfOverride;\n\t\t\t}\n\t\t}\n\n\t\tif (this.options.isReadOnly) {\n\t\t\tthis.options.canAdd = false;\n\t\t\tthis.options.canShare = false;\n\t\t\tthis.options.isAdmin = false;\n\t\t\tthis.options.canAddDrawings = false;\n\t\t}\n\n\t\tthis.fetchAttachments({\n\t\t\tisPrivate: this.options.project == null || !this.options.project.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_PROJECT_PRIVATE_ATTACHMENTS)\n\t\t});\n\t},\n\tgetMenuActions: function () {\n\t\tlet self = this;\n\t\treturn [\n\t\t\t{\n\t\t\t\tname: 'Attach Folders',\n\t\t\t\tonClick: function () {\n\t\t\t\t\tself.attachRootAttachments();\n\t\t\t\t},\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn !attachment.get('isDrawing') && self.options.canAdd && attachment.get('entryId') === -1;\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'New Folder',\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.addFolder(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn !attachment.get('isDrawing') && self.options.canAdd && attachment.get('isFolder');\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Upload',\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.uploadToFolder(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn !attachment.get('isDrawing') && self.options.canAdd && attachment.get('entryId') > 0 && attachment.get('isFolder');\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Download',\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.downloadAttachments(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: _.bind(function (attachment) {\n\t\t\t\t\tif(this.options.foldersOnly && !attachment.get('isFolder')){\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn PJQ.app.session.project.get('isOnline') && (!attachment.get('isFolder') || _.size(attachment.getFolderAttachments()) > 0);\n\t\t\t\t}, this)\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'View',\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tnew PJQ.views.files.FileViewer({\n\t\t\t\t\t\tmodel: attachment\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn attachment.get('name').toLowerCase().endsWith('.pdf');\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Order',\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.order(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: _.bind(function (attachment) {\n\t\t\t\t\tif(this.options.foldersOnly && !attachment.get('isFolder')){\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn PJQ.app.session.project.get('isOnline') && (!attachment.get('isFolder') || _.size(attachment.getFolderAttachments()) > 0);\n\t\t\t\t}, this)\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Share',\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.shareAttachments(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: function () {\n\t\t\t\t\treturn self.options.canShare;\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Export File List',\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.exportFileList(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn !attachment.get('isDrawing') && attachment.get('entryId') > 0 && attachment.get('isFolder');\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Add to Drawings',\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.addToDrawings(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn !attachment.get('isDrawing') && self.options.isAdmin\n\t\t\t\t\t\t&& !PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_DRAWINGS)\n\t\t\t\t\t\t&& attachment.get('entryId') > 0 && attachment.getDepth() > 0\n\t\t\t\t\t\t&& self.options.canAddDrawings;\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Select Contents',\n\t\t\t\tonClick: _.bind(function (attachment) {\n\t\t\t\t\tthis.selectFolderContents(attachment);\n\t\t\t\t}, this),\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn attachment.get('isFolder');\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Cut',\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.cutAttachments(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn !attachment.get('isDrawing') && self.options.isAdmin && attachment.get('entryId') > 0\n\t\t\t\t\t\t&& attachment.getDepth() > 0;\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Copy',\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.copyAttachments(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn !attachment.get('isDrawing') && self.options.isAdmin && attachment.get('entryId') > 0\n\t\t\t\t\t\t&& attachment.getDepth() > 0;\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Paste',\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.paste(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn !attachment.get('isDrawing') && self.options.isAdmin && attachment.get('entryId') > 0\n\t\t\t\t\t\t&& attachment.get('isFolder') && self.clipboard != null;\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Rename',\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.renameAttachment(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn !attachment.get('isDrawing') && self.options.isAdmin && attachment.get('entryId') > 0\n\t\t\t\t\t\t&& attachment.getDepth() > 0;\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Properties',\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.attachmentProperties(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn !attachment.get('isDrawing') && self.options.isAdmin && attachment.get('entryId') > 0;\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Delete',\n\t\t\t\tisDanger: true,\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.deleteAttachments(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn !attachment.get('isDrawing') && self.options.isAdmin && attachment.get('entryId') > 0\n\t\t\t\t\t\t&& attachment.get('folderId') > 0;\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Detach',\n\t\t\t\tisDanger: true,\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.deleteAttachments(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn !attachment.get('isDrawing') && self.options.isAdmin && attachment.get('entryId') > 0 &&\n\t\t\t\t\t\tattachment.get('folderId') === -1;\n\t\t\t\t}\n\t\t\t},\n\t\t];\n\t},\n\tselectFolderContentsClicked: function (e) {\n\t\tlet $attachment = $(e.currentTarget).closest('.attachment'),\n\t\t\tattachment = this.collection.get($attachment.data('cid'));\n\t\tthis.selectFolderContents(attachment);\n\t},\n\tselectFolderContents: function (folder) {\n\t\tthis.addSelectedAttachmentIds(_.map(folder.getFolderAttachments(true), function (att) {\n\t\t\treturn att.cid;\n\t\t}));\n\t\tthis.getAttachmentElement(folder).siblings('.attachment-files-outer').find('.input-select-attachment').prop('checked', true);\n\t},\n\tuploadRawFiles: function () {\n\t\tnew PJQ.views.files.RawFileUploaderModal({\n\t\t\tproject: this.options.project\n\t\t});\n\t},\n\tallChecked: function (e) {\n\t\tlet isChecked = $(e.currentTarget).prop('checked');\n\t\tthis.$('.input-select-attachment').prop('checked', isChecked);\n\t\tif (isChecked) {\n\t\t\tlet attachmentIds = _.map(this.collection.models, function (attachment) {\n\t\t\t\treturn attachment.cid;\n\t\t\t});\n\t\t\tthis.addSelectedAttachmentIds(attachmentIds);\n\t\t}\n\t\telse {\n\t\t\tthis.selectedAttachmentIds = [];\n\t\t}\n\t},\n\taddSharedFolderClicked: function () {\n\t\tthis.addFolder(this.collection.getSharedFolder());\n\t},\n\taddPrivateFolderClicked: function () {\n\t\tthis.addFolder(this.collection.getPrivateFolder());\n\t},\n\tattachRootAttachments: function () {\n\t\tnew PJQ.views.files.FileSelector({\n\t\t\tfoldersOnly: true,\n\t\t\tdisabledAttachmentIds: _.map(this.collection.models, function (attachment) {\n\t\t\t\treturn attachment.get('entryId');\n\t\t\t}),\n\t\t\tonSave: _.bind(function (files) {\n\t\t\t\tthis.options.project.attachFiles(files, _.bind(function () {\n\t\t\t\t\tthis.collection.fetch();\n\t\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\t\tmessage: \"Attached files successfully\"\n\t\t\t\t\t});\n\t\t\t\t}, this));\n\t\t\t}, this)\n\t\t});\n\t},\n\tshareAttachments: function (attachments) {\n\t\tattachments = this.replaceVersionFolders(attachments);\n\n\t\tlet shareDrawings = new PJQ.collections.drawings.Drawings(),\n\t\t\tversionIds = [];\n\n\t\tshareDrawings.options.allDrawings = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DRAWING_SHARE_PREVENT_EXPIRATION);\n\n\t\tif (PJQ.helpers.objectHelpers.refinedType(attachments) === 'array') {\n\t\t\t_.each(_.filter(attachments, function (attachment) {\n\t\t\t\treturn !attachment.get('isFolder') && attachment.get('isDrawing');\n\t\t\t}), function (attachment) {\n\t\t\t\tif (versionIds.indexOf(attachment.get('versionId')) === -1) {\n\t\t\t\t\tversionIds.push(attachment.get('versionId'));\n\t\t\t\t}\n\t\t\t\tshareDrawings.add(new PJQ.models.drawings.Drawing({\n\t\t\t\t\tguid: attachment.get('guid')\n\t\t\t\t}));\n\t\t\t});\n\t\t}\n\t\telse if (attachments.get('isDrawing')) {\n\t\t\tversionIds.push(attachments.get('versionId'));\n\t\t\tshareDrawings.add(new PJQ.models.drawings.Drawing({\n\t\t\t\tguid: attachments.get('guid')\n\t\t\t}));\n\t\t}\n\n\t\tif (_.size(shareDrawings.models) > 0) {\n\t\t\tlet fileGuids = _.map(_.filter(attachments, function (attachment) {\n\t\t\t\t\treturn !attachment.get('isDrawing');\n\t\t\t\t}), function (attachment) {\n\t\t\t\t\treturn attachment.get('guid');\n\t\t\t\t}),\n\t\t\t\tsharingModal = new PJQ.views.sharing.SharingModal({\n\t\t\t\t\tcollection: shareDrawings,\n\t\t\t\t\tproject: this.options.project,\n\t\t\t\t\tonSave: _.bind(function (data) {\n\t\t\t\t\t\tshareDrawings.share(versionIds, fileGuids, data, this.options.project, _.bind(function (share) {\n\t\t\t\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\t\t\t\tmessage: 'File share email sent'\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}, this));\n\t\t\t\t\t}, this)\n\t\t\t\t});\n\t\t\tshareDrawings.share(versionIds, fileGuids, null, this.options.project, function (share) {\n\t\t\t\tlet callback = _.bind(sharingModal.urlChanged, sharingModal);\n\t\t\t\tcallback(share.url);\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tlet shareAtt = [],\n\t\t\t\tfnCheck = function (att) {\n\t\t\t\t\tif (att.get('entryId') === -1) {\n\t\t\t\t\t\tshareAtt.push(...att.getFolderAttachments());\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tshareAtt.push(att);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\tif (PJQ.helpers.objectHelpers.refinedType(attachments) === 'array') {\n\t\t\t\t_.each(attachments, function (att) {\n\t\t\t\t\tfnCheck(att);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfnCheck(attachments);\n\t\t\t}\n\t\t\tlet files = new PJQ.collections.files.Files(shareAtt),\n\t\t\t\tsharingModal = new PJQ.views.sharing.SharingModal({\n\t\t\t\t\tproject: this.options.project,\n\t\t\t\t\tonSave: _.bind(function (data) {\n\t\t\t\t\t\tfiles.share(data, this.options.project, _.bind(function (share) {\n\t\t\t\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\t\t\t\tmessage: 'File share email sent'\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}, this));\n\t\t\t\t\t}, this)\n\t\t\t\t});\n\t\t\tfiles.share(null, this.options.project, function (share) {\n\t\t\t\tlet callback = _.bind(sharingModal.urlChanged, sharingModal);\n\t\t\t\tcallback(share.url);\n\t\t\t});\n\t\t}\n\t},\n\tdownloadAll: function () {\n\t\tthis.downloadAttachments(this.collection.models);\n\t},\n\taddToDrawingsClicked: function (e) {\n\t\tlet $attachment = $(e.currentTarget).closest('.attachment'),\n\t\t\tattachment = this.collection.get($attachment.data('cid'));\n\t\tthis.addToDrawings(attachment);\n\t},\n\taddSelectedToDrawings: function () {\n\t\tthis.addToDrawings(this.collection.get(this.selectedAttachmentIds));\n\t},\n\taddToDrawings: function (files) {\n\t\tif (PJQ.helpers.objectHelpers.refinedType(files) === 'object') {\n\t\t\tfiles = [files];\n\t\t}\n\t\tPJQ.app.router.navigate('projects/' + this.options.project.id.toString() + '/drawings', {\n\t\t\ttrigger: true\n\t\t});\n\t\tlet versions = new PJQ.collections.drawings.Versions(null, {\n\t\t\tproject: this.options.project\n\t\t});\n\t\tversions.fetch({\n\t\t\tsuccess: _.bind(function () {\n\t\t\t\tnew PJQ.views.drawings.DrawingBatchModal({\n\t\t\t\t\tversions: versions,\n\t\t\t\t\tproject: this.options.project,\n\t\t\t\t\tmodel: new PJQ.models.drawings.DrawingBatch({\n\t\t\t\t\t\tfiles: files,\n\t\t\t\t\t\tprojectId: this.options.project.id\n\t\t\t\t\t})\n\t\t\t\t});\n\t\t\t}, this)\n\t\t});\n\t}\n});\n\nPJQ.views.projects.AttachmentsModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'modal-project-attachments'),\n\t\tsubTemplates: {},\n\t\tmaxWidth: 1400,\n\t\tonSave: _.noop\n\t},\n\tevents: {\n\t\t'click .btn-save': 'onSave'\n\t},\n\tafterRender: function () {\n\t\tif (PJQ.app.session.project) {\n\t\t\tthis.attachmentsView = new PJQ.views.projects.Attachments({\n\t\t\t\tel: this.$('.modal-body'),\n\t\t\t\texpandSharedFolders: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.EXPAND_PROJECT_ROOT_SHARED_FOLDERS),\n\t\t\t\tproject: PJQ.app.session.project,\n\t\t\t\tisReadOnly: PJQ.app.session.project.get('status') === 'ARCHIVE'\n\t\t\t})\n\t\t}\n\t},\n\tonSave: function () {\n\t\tthis.options.onSave(this.attachmentsView.collection.get(this.attachmentsView.selectedAttachmentIds));\n\t\tthis.removeModal();\n\t}\n});\n\n","PJQ.constants.projectMessaging = {\n\tviews: {\n\t\tGROUPCOMP: 'groupcompany',\n\t\tGROUPCOMP_COMP: 'groupcompany-company',\n\t\tGROUPCOMP_COMP_CONT: 'groupcompany-company-contact',\n\t\tGROUPCONT: 'groupcontact',\n\t\tGROUPCONT_CONT: 'groupcontact-contact',\n\t\tMSGCONT: 'messagecontact',\n\t\tMSGCONT_CONT: 'messagecontact-contact',\n\t\tRSPCONT: 'responsecontact',\n\t\tRSPCONT_CONT: 'responsecontact-contact',\n\t\tCOMP: 'company',\n\t\tCOMP_CONT: 'company-contact',\n\t\tCONT: 'contact',\n\t\tCONTGROUP: 'contactgroup',\n\t\tBIDPKGS: 'bidpackages',\n\t\tBIDPKGS_CONT: 'bidpackages-contact'\n\t}\n};\n","PJQ.views.projects.LocationManagement = PJQ.views.BaseView.extend({\r\n    defaults: {\r\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'location-management'),\r\n        subTemplates: {\r\n            tier: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'location-tier'),\r\n            location: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'location-item'),\r\n            editLocation: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'location-edit')\r\n        }\r\n    },\r\n    events: {\r\n        'click .location:not(.editing)': 'locationClicked',\r\n        'click .btn-add-location': 'addLocationClicked',\r\n        'keyup .input-location-name': 'locationNameChanged',\r\n        'click .btn-edit-location': 'editLocationClicked',\r\n        'click .btn-delete-location': 'deleteLocationClicked',\r\n        'click .btn-cancel-edit': 'endLocationEdit',\r\n        'click .btn-save-location': 'saveLocationClicked'\r\n    },\r\n    beforeFirstRender: function () {\r\n        this.options.project.fetchLocations(_.bind(function (locations) {\r\n            this.collection = locations;\r\n            this.render();\r\n        }, this))\r\n    },\r\n    afterRender: function () {\r\n        if (this.collection == null) {\r\n            return;\r\n        }\r\n\r\n        this.$el.on('click', function () {\r\n            $(this).find('.dropdown-menu').hide();\r\n        });\r\n\r\n        let $tiers = this.$('.location-tiers');\r\n        $tiers.on('click', '.location-dropdown-toggle', (function (e) {\r\n            $(this).next('.dropdown-menu').toggle();\r\n            e.stopPropagation();\r\n        }));\r\n\r\n        this.renderTiers();\r\n    },\r\n    locationNameChanged: function (e) {\r\n        if (e.key === 'Enter' || e.keyCode === 13) {\r\n            this.saveLocationClicked(e);\r\n        }\r\n    },\r\n    addLocationClicked: function (e) {\r\n        this.renderLocationEdit($(e.currentTarget));\r\n    },\r\n    editLocationClicked: function (e) {\r\n        e.stopPropagation();\r\n\r\n        let $location = $(e.currentTarget).closest('.location'),\r\n            id = $location.data('id'),\r\n            location = this.collection.get(id);\r\n\r\n        this.endLocationEdit();\r\n        this.editLocation = location;\r\n        if (location != null) {\r\n            $location.addClass('editing');\r\n            this.renderLocationEdit($location, location);\r\n        }\r\n    },\r\n    renderLocationEdit: function ($location, location) {\r\n        this.renderSubTemplate(false, this.options.subTemplates.editLocation, $location, {\r\n            location: location\r\n        }, _.bind(function () {\r\n            this.$('.input-location-name').focus().select();\r\n        }, this));\r\n    },\r\n    endLocationEdit: function (e) {\r\n        if (e) {\r\n            e.stopPropagation();\r\n\r\n            let $add = $(e.currentTarget).closest('.btn-add-location'),\r\n                parentId = $add.length > 0 ? $add.data('parentId') : null;\r\n            if (parentId != null) {\r\n                this.renderTiers();\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (this.editLocation != null) {\r\n            let $location = this.$('.location[data-id=\"' + this.editLocation.id + '\"]');\r\n            if ($location.length > 0) {\r\n                $location.replaceWith(this.renderLocation(this.editLocation, this.getActiveLocations()).outerHTML());\r\n            }\r\n            this.editLocation = null;\r\n        }\r\n    },\r\n    saveLocationClicked: function (e) {\r\n        e.stopPropagation();\r\n\r\n        let saveLocation = null,\r\n            name = $(e.currentTarget).parent().find('.input-location-name').val(),\r\n            $add = $(e.currentTarget).closest('.btn-add-location'),\r\n            parentId = $add.length > 0 ? $add.data('parentId') : null;\r\n        if (parentId != null) {\r\n            saveLocation = new PJQ.models.projects.Location({\r\n                projectId: this.options.project.id,\r\n                name: name,\r\n                parentId: parentId > 0 ? parentId : null\r\n            });\r\n            this.collection.add(saveLocation);\r\n            this.contextLocation = saveLocation;\r\n        } else if (_.size(name) > 0) {\r\n            this.editLocation.set('name', name);\r\n            saveLocation = this.editLocation;\r\n        }\r\n\r\n        if (saveLocation != null) {\r\n            saveLocation.save(null, {\r\n                success: _.bind(function () {\r\n                    //todo: notify saved, add loading maybe\r\n                    this.renderTiers();\r\n                }, this)\r\n            });\r\n        }\r\n    },\r\n    locationClicked: function (e) {\r\n        let id = $(e.currentTarget).data('id');\r\n        this.contextLocation = this.collection.get(id);\r\n        this.renderTiers();\r\n    },\r\n    deleteLocationClicked: function (e) {\r\n        e.stopPropagation();\r\n\r\n        let id = $(e.currentTarget).closest('.location').data('id'),\r\n            location = this.collection.get(id),\r\n            children = this.collection.getChildren(location, true),\r\n            fnDelete = _.bind(function () {\r\n                location.destroy({\r\n                    success: _.bind(function () {\r\n                        this.collection.remove(_.union([location], children));\r\n                        if (this.contextLocation != null && this.collection.get(this.contextLocation.id) == null) {\r\n                            // the context location was deleted\r\n                            // try to get the closest existing parent of it\r\n                            let activeLocations = this.getActiveLocations().reverse(),\r\n                                newContextLocation = null;\r\n                            for (let i = 0; i < _.size(activeLocations); i++) {\r\n                                if (activeLocations[i].id !== this.contextLocation.id) {\r\n                                    newContextLocation = activeLocations[i];\r\n                                    break;\r\n                                }\r\n                            }\r\n                            this.contextLocation = newContextLocation;\r\n                        }\r\n                        this.renderTiers();\r\n                    }, this)\r\n                });\r\n            }, this)\r\n\r\n        new PJQ.views.modals.DeleteCancel({\r\n            header: \"Confirm Deletion\",\r\n            body: \"Are you sure you want to delete this location?  All of it's child locations will also be deleted.\",\r\n            onDelete: _.bind(function () {\r\n                fnDelete();\r\n            }, this)\r\n        });\r\n    },\r\n    getActiveLocations: function () {\r\n        if (this.contextLocation == null) {\r\n            return [];\r\n        }\r\n\r\n        let result = this.collection.getParents(this.contextLocation);\r\n        result.push(this.contextLocation);\r\n        return result;\r\n    },\r\n    renderTiers: function () {\r\n        this.editLocation = null;\r\n\r\n        this.$tiers = this.$('.location-tiers');\r\n        this.$tiers.empty();\r\n\r\n        let nextTierLocations,\r\n            activeLocations = this.getActiveLocations(),\r\n            ctActive = _.size(activeLocations);\r\n        if (this.contextLocation != null) {\r\n            for (let i = 0; i < ctActive; i++) {\r\n                this.renderTier(i + 1, this.collection.getSiblings(activeLocations[i]), activeLocations, i > 0 ? activeLocations[i - 1] : null);\r\n            }\r\n\r\n            nextTierLocations = this.collection.getChildren(this.contextLocation);\r\n        } else {\r\n            nextTierLocations = this.collection.getRootLocations();\r\n        }\r\n        this.renderTier(ctActive + 1, nextTierLocations, activeLocations, ctActive > 0 ? activeLocations[ctActive - 1] : null);\r\n    },\r\n    renderTier: function (tierNumber, locations, activeLocations, activeParent) {\r\n        this.renderSubTemplate(true, this.options.subTemplates.tier, this.$tiers, {\r\n            tierNumber: tierNumber,\r\n            locations: locations,\r\n            activeLocations: activeLocations,\r\n            activeParent: activeParent,\r\n            renderLocation: _.bind(this.renderLocation, this)\r\n        });\r\n    },\r\n    renderLocation: function (location, activeLocations) {\r\n        return PJQ.templating.TemplateRenderer.parseTemplate(this.options.subTemplates.location, {\r\n            activeIds: activeLocations ? _.map(activeLocations, function (location) {\r\n                return location.id;\r\n            }) : [],\r\n            location: location\r\n        });\r\n    }\r\n});\r\n\r\nPJQ.models.projects.Location = PJQ.models.BaseModel.extend({\r\n    idAttribute: \"id\",\r\n    endpoint: function () {\r\n        return PJQ.helpers.urlHelpers.generateEndpoint([\r\n            {\r\n                endpoint: 'projects',\r\n                value: this.get('projectId')\r\n            },\r\n            {\r\n                endpoint: 'locations',\r\n                value: this.id\r\n            }\r\n        ])\r\n    }\r\n});\r\n\r\nPJQ.collections.projects.Locations = PJQ.collections.BaseCollection.extend({\r\n    model: PJQ.models.projects.Location,\r\n    endpoint: function () {\r\n        return PJQ.helpers.urlHelpers.generateEndpoint([\r\n            {\r\n                endpoint: 'projects',\r\n                value: this.options.project.id\r\n            },\r\n            {\r\n                endpoint: 'locations'\r\n            }\r\n        ]);\r\n    },\r\n    getRootLocations: function () {\r\n        return _.filter(this.models, function (location) {\r\n            return !(location.get(\"parentId\") > 0);\r\n        });\r\n    },\r\n    getChildren: function (location, recursive = false) {\r\n        if (recursive) {\r\n            let fnGetChildren = _.bind(function (locations, result) {\r\n                if (result == null) {\r\n                    result = [];\r\n                }\r\n\r\n                if (_.size(locations) === 0) {\r\n                    return result;\r\n                }\r\n\r\n                let children = [];\r\n                _.each(locations, function (location) {\r\n                    children.push(...this.where({parentId: location.id}));\r\n                }, this)\r\n                result.push(...children);\r\n\r\n                return fnGetChildren(children, result);\r\n            }, this)\r\n            return fnGetChildren([location]);\r\n        }\r\n\r\n        return this.where({parentId: location.id});\r\n    },\r\n    getSiblings: function (location) {\r\n        let pId = location.get('parentId');\r\n        if (pId > 0) {\r\n            return this.where({parentId: pId});\r\n        }\r\n        return this.getRootLocations();\r\n    },\r\n    getParents: function (location) {\r\n        let fnGetParent = _.bind(function (location, result) {\r\n            if (result == null) {\r\n                result = [];\r\n            }\r\n\r\n            let pId = location.get('parentId');\r\n            if (!(pId > 0)) {\r\n                return result;\r\n            }\r\n            let parent = this.get(pId);\r\n            if (parent == null) {\r\n                return result;\r\n            }\r\n            result.push(parent);\r\n            return fnGetParent(parent, result);\r\n        }, this)\r\n        return fnGetParent(location).reverse();\r\n    },\r\n    getPickerArray: function () {\r\n        let result = [],\r\n            getChildrenNames = _.bind(function (location, parentName) {\r\n                result.push({\r\n                    id: location.id,\r\n                    name: parentName\r\n                });\r\n                _.each(_.sortBy(this.where({parentId: location.id}), (location) => { return location.get('name') }), function (child) {\r\n                    let newParentName = parentName + ' > ' + child.get('name');\r\n                    getChildrenNames(child, newParentName);\r\n                });\r\n            }, this)\r\n        _.each(_.sortBy(this.where({parentId: null}), (location) => { return location.get('name') }), function (rootParent) {\r\n            getChildrenNames(rootParent, rootParent.get('name'));\r\n        });\r\n        return result;\r\n    },\r\n    getFullName: function (location) {\r\n        let parents = this.getParents(location),\r\n            result = '';\r\n        _.each(parents, function (parent) {\r\n            result += parent.get('name') + ' > ';\r\n        });\r\n        result += location.get('name');\r\n        return result;\r\n    }\r\n});","PJQ.views.projects.SignProjectNDAModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Sign-Project-NDA'),\n\t\tmaxWidth: '800px'\n\t},\n\tevents: {\n\t\t'click .btn-decline-nda': 'decline',\n\t\t'click .btn-sign-nda': 'sign',\n\t\t'change .input-nda-agree': 'agreeChanged'\n\t},\n\tbeforeRender: function () {\n\t\tthis.renderData = {\n\t\t\tmodel: this.model\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tPJQ.helpers.inputHelpers.inputMaskPhone(this.$('.input-phone'));\n\t},\n\tagreeChanged: function () {\n\t\tthis.$('.btn-sign-nda').prop('disabled', !this.$('.input-nda-agree').prop('checked'));\n\t},\n\tdecline: function () {\n\t\tnew PJQ.Loader(this.$('.modal-body'));\n\t\tPJQ.app.session.project.updateResponse(PJQ.constants.projectContacts.bidStatus.DECLINE, _.bind(function () {\n\t\t\tthis.close();\n\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\tmessage: 'Your response has been submitted'\n\t\t\t});\n\t\t\tPJQ.app.router.signInNavigate();\n\t\t}, this));\n\t},\n\tsign: function () {\n\t\tlet isValid = true,\n\t\t\t$companyName = this.$('.input-nda-company-name'),\n\t\t\tcompanyName = $companyName.val();\n\t\tPJQ.helpers.inputHelpers.setInputError($companyName, true);\n\t\tif (_.size(companyName) === 0) {\n\t\t\tisValid = false;\n\t\t\tPJQ.helpers.inputHelpers.setInputError($companyName, false);\n\t\t}\n\n\t\tlet $contactName = this.$('.input-nda-contact-name'),\n\t\t\tcontactName = $contactName.val();\n\t\tPJQ.helpers.inputHelpers.setInputError($contactName, true);\n\t\tif (_.size(contactName) === 0) {\n\t\t\tisValid = false;\n\t\t\tPJQ.helpers.inputHelpers.setInputError($contactName, false);\n\t\t}\n\n\t\tlet $title = this.$('.input-nda-title'),\n\t\t\ttitle = $title.val();\n\t\tPJQ.helpers.inputHelpers.setInputError($title, true);\n\t\tif (_.size(title) === 0) {\n\t\t\tisValid = false;\n\t\t\tPJQ.helpers.inputHelpers.setInputError($title, false);\n\t\t}\n\n\t\tlet $email = this.$('.input-nda-email'),\n\t\t\temail = $email.val();\n\t\tPJQ.helpers.inputHelpers.setInputError($email, true);\n\t\tif (_.size(email) === 0) {\n\t\t\tisValid = false;\n\t\t\tPJQ.helpers.inputHelpers.setInputError($email, false);\n\t\t}\n\n\t\tlet $phone = this.$('.input-nda-phone'),\n\t\t\tphone = $phone.val();\n\t\tPJQ.helpers.inputHelpers.setInputError($phone, true);\n\t\tif (_.size(phone) === 0) {\n\t\t\tisValid = false;\n\t\t\tPJQ.helpers.inputHelpers.setInputError($phone, false);\n\t\t}\n\n\t\tlet $error = this.$('.nda-error');\n\t\tif (!isValid) {\n\t\t\t$error.html('All required fields must be filled out before signing');\n\t\t\treturn;\n\t\t}\n\n\t\tlet isAgreed = this.$('.input-nda-agree').prop('checked');\n\t\tif (!isAgreed) {\n\t\t\t$error.html('You must agree to the non-disclosure before signing');\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\t$error.empty();\n\t\t}\n\n\t\tthis.$('.btn-decline-nda').prop('disabled', true);\n\t\tnew PJQ.Loader(this.$('.btn-sign-nda'), {\n\t\t\tloadingText: \"Signing...\"\n\t\t});\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\tvalue: this.model.id\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'nda',\n\t\t\t\t\tvalue: this.model.nda.get('ndaId')\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'sign'\n\t\t\t\t}\n\t\t\t]),\n\t\t\tdata: {\n\t\t\t\tcompanyName: companyName,\n\t\t\t\tcontactName: contactName,\n\t\t\t\ttitle: title,\n\t\t\t\temail: email,\n\t\t\t\tphone: phone\n\t\t\t}\n\t\t}).post().done(_.bind(function () {\n\t\t\tthis.model.isFetched = false;\n\t\t\tPJQ.modules.projectWall.initProjectNavigator(this.model.id, this.options.activeItem ? this.options.activeItem : \"dashboard\", this.options.viewOptions ? this.options.viewOptions : null);\n\t\t\tthis.removeModal();\n\t\t}, this));\n\t}\n});\n\nPJQ.views.projects.EditProjectNDAModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Edit-Project-NDA'),\n\t\tmaxWidth: '800px'\n\t},\n\tevents: {\n\t\t'change .cb-override': 'overrideChanged',\n\t\t'click .btn-delete-nda': 'deleteClicked',\n\t\t'click .btn-cancel-nda': 'cancelClicked',\n\t\t'click .btn-save-nda': 'saveClicked'\n\t},\n\tbeforeModalCreated: function () {\n\t\tif (this.options.project != null) {\n\t\t\tPJQ.app.session.fetchNDAs(_.bind(function (ndas) {\n\t\t\t\tthis.ndas = ndas;\n\t\t\t\tthis.options.project.fetchNDA(_.bind(function (nda) {\n\t\t\t\t\tthis.model = nda;\n\t\t\t\t\tthis.render();\n\t\t\t\t}, this));\n\t\t\t}, this));\n\t\t}\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\tmodel: this.model,\n\t\t\tproject: this.options.project,\n\t\t\tndas: this.ndas\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tif (this.model != null && this.options.project != null) {\n\t\t\tnew PJQ.inputs.Selectpicker({\n\t\t\t\tel: this.$('.select-nda'),\n\t\t\t\thideDisabled: true,\n\t\t\t\tdefaultValue: this.model.id,\n\t\t\t\tonChange: _.bind(function (value) {\n\t\t\t\t\tthis.useNDA(this.ndas.get(value));\n\t\t\t\t\tthis.render();\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t},\n\tuseNDA: function (nda) {\n\t\tthis.model.set({\n\t\t\tndaId: nda ? nda.id : null,\n\t\t\tname: nda ? nda.get('name') : '',\n\t\t\tndaText: nda ? nda.get('ndaText') : ''\n\t\t});\n\t},\n\toverrideChanged: function () {\n\t\tlet override = this.$('.cb-override').prop('checked');\n\t\tif (override) {\n\t\t\tthis.model.set({\n\t\t\t\tndaId: null,\n\t\t\t\tname: ''\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tthis.useNDA(this.ndas.findWhere({isDefault: true}));\n\t\t}\n\t\tthis.render();\n\t},\n\tdeleteClicked: function () {\n\t\tnew PJQ.views.modals.DeleteCancel({\n\t\t\theader: \"Delete NDA\",\n\t\t\tbody: \"Are you sure you want to delete this project NDA?\",\n\t\t\tonDelete: _.bind(function () {\n\t\t\t\tif (this.model.id > 0) {\n\t\t\t\t\tthis.model.destroy();\n\t\t\t\t}\n\n\t\t\t\tthis.removeModal();\n\t\t\t\tif (this.options.onDelete) {\n\t\t\t\t\tthis.options.onDelete(this.model);\n\t\t\t\t}\n\t\t\t}, this)\n\t\t});\n\t},\n\tcancelClicked: function () {\n\t\tthis.removeModal();\n\t\tif (this.options.onCancel) {\n\t\t\tthis.options.onCancel(this.model);\n\t\t}\n\t},\n\tsaveClicked: function () {\n\t\tif (this.options.project != null) {\n\t\t\tlet ndaText = this.$('.textarea-nda-text').val(),\n\t\t\t\tgNda = this.ndas.get(this.model.id);\n\t\t\tif (gNda == null && _.size(ndaText) === 0) {\n\t\t\t\tnew PJQ.views.modals.SaveDontSave({\n\t\t\t\t\theader: \"NDA Terms Empty\",\n\t\t\t\t\tbody: \"You have not entered any NDA agreement terms.  If you save this, the NDA will be disabled for this project.  Are you sure you want to save?\",\n\t\t\t\t\tisShowDontSaveButton: false,\n\t\t\t\t\tonSave: _.bind(function () {\n\t\t\t\t\t\tthis.save();\n\t\t\t\t\t}, this)\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.save();\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis.save();\n\t\t}\n\t},\n\tsave: function () {\n\t\tlet ndaText = this.$('.textarea-nda-text').val(),\n\t\t\tisDefault,\n\t\t\tname,\n\t\t\tsaveNda;\n\t\tif (this.options.project != null) {\n\t\t\tname = this.model.get('name');\n\t\t\tisDefault = false;\n\t\t\tsaveNda = this.ndas.get(this.model.id) != null || _.size(ndaText) > 0;\n\t\t\tthis.options.project.set('hasNDA', saveNda, {\n\t\t\t\tsilent: true\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tname = this.$('.input-nda-name').val();\n\t\t\tisDefault = this.$('.cb-default').prop('checked');\n\t\t\tsaveNda = true;\n\t\t}\n\t\tif (saveNda) {\n\t\t\tthis.model.save({\n\t\t\t\tname: name,\n\t\t\t\tndaText: ndaText,\n\t\t\t\tisDefault: isDefault\n\t\t\t}, {\n\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\tif (this.options.onSave) {\n\t\t\t\t\t\tthis.options.onSave(this.model);\n\t\t\t\t\t}\n\t\t\t\t\tthis.removeModal();\n\t\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\t\tmessage: \"NDA updated successfully\"\n\t\t\t\t\t});\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tif (this.options.project != null) {\n\t\t\t\tthis.model.destroy();\n\t\t\t}\n\t\t\tthis.removeModal();\n\t\t}\n\t}\n});\n","PJQ.views.projects.UserMessages = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-User-Messages'),\n\t\tview: 'inbox'\n\t},\n\tevents: {\n\t\t'click .btn-view-message': 'viewMessageClicked',\n\t\t'click .btn-delete-message': 'deleteMessageClicked',\n\t\t'click .btn-user-messages-add': 'newMessageClicked',\n\t\t'click .btn-user-messages-inbox': 'openInbox',\n\t\t'click .btn-user-messages-sent': 'openSent'\n\t},\n\tbeforeFirstRender: function () {\n\t\tif (this.options.userMessageId > 0) {\n\t\t\tlet userMessage = new PJQ.models.userMessages.UserMessage({\n\t\t\t\tuserMessageId: this.options.userMessageId\n\t\t\t});\n\t\t\tuserMessage.fetch({\n\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\tthis.viewMessage(userMessage);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t\tthis.options.userMessageId = null;\n\t\t}\n\n\t\tif (PJQ.app.session.get('masterUserId') === this.options.project.get('masterUserId')) {\n\t\t\tnew PJQ.ajax.Request({\n\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\t\tvalue: this.options.project.id\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'usermessages',\n\t\t\t\t\t\tvalue: 'stats'\n\t\t\t\t\t},\n\t\t\t\t])\n\t\t\t}).get().done(_.bind(function (data) {\n\t\t\t\tthis.messageStats = data;\n\t\t\t\tthis.render();\n\t\t\t}, this));\n\t\t\treturn false;\n\t\t}\n\t},\n\tafterRender: function () {\n\t\tif (this.messageStats != null) {\n\t\t\tthis.options.userId = PJQ.app.session.user.id;\n\t\t\tif (PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PRIVATE_MESSAGING_USER_ID_DEFAULT)) {\n\t\t\t\tthis.options.userId = (PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PRIVATE_MESSAGING_USER_ID_DEFAULT) == 0 ? -1 : PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PRIVATE_MESSAGING_USER_ID_DEFAULT));\n\t\t\t}\n\n\t\t\tlet $userFilter = this.$('select.user-messages-user-filter'),\n\t\t\t\ttotalMessageCount = _.reduce(_.map(this.messageStats, function (stat) {\n\t\t\t\t\treturn stat.messageCount\n\t\t\t\t}), function (memo, stat) {\n\t\t\t\t\treturn memo + stat;\n\t\t\t\t}, 0);\n\t\t\t$userFilter.append($('<option/>', {\n\t\t\t\tvalue: -1,\n\t\t\t\ttext: 'All (' + totalMessageCount.toString() + ')'\n\t\t\t}));\n\n\t\t\tlet myStat = _.find(this.messageStats, function (stat) {\n\t\t\t\treturn stat.userId === PJQ.app.session.user.id\n\t\t\t});\n\t\t\tif (myStat == null) {\n\t\t\t\t$userFilter.append($('<option/>', {\n\t\t\t\t\tvalue: PJQ.app.session.user.id,\n\t\t\t\t\ttext: PJQ.app.session.user.get('contactName') + ' (0)'\n\t\t\t\t}));\n\t\t\t}\n\t\t\t_.each(this.messageStats, _.bind(function (user) {\n\t\t\t\t$userFilter.append($('<option/>', {\n\t\t\t\t\tvalue: user.userId,\n\t\t\t\t\ttext: user.contactName + ' (' + user.messageCount.toString() + ')'\n\t\t\t\t}));\n\t\t\t}, this));\n\n\t\t\tnew PJQ.inputs.Selectpicker({\n\t\t\t\tel: this.$('select.user-messages-user-filter'),\n\t\t\t\tisMultiple: false,\n\t\t\t\tdefaultValue: this.options.userId,\n\t\t\t\tonChange: _.bind(function (value) {\n\t\t\t\t\tthis.options.userId = value;\n\t\t\t\t\tthis.refreshView();\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\n\t\tthis.dataTable = new PJQ.views.dataTables.DataTable({\n\t\t\tel: this.$('.user-messages-data-table'),\n\t\t\tlanguage: {\n\t\t\t\temptyTable: \"No messages found\"\n\t\t\t},\n\t\t\tautoWidth: false,\n\t\t\tdata: null,\n\t\t\tisHideSearch: true,\n\t\t\torder: [1, 'desc'],\n\t\t\trowGroup: {\n\t\t\t\tenable: false\n\t\t\t},\n\t\t\tcolumns: [\n\t\t\t\t{\n\t\t\t\t\t\"title\": 'Message Info',\n\t\t\t\t\t\"render\": _.bind(function (data, type, row) {\n\t\t\t\t\t\tlet rowText = '';\n\t\t\t\t\t\tif (type === 'sort' || type === 'type') {\n\t\t\t\t\t\t\tif (this.options.view === 'inbox')\n\t\t\t\t\t\t\t\trowText = row.from.get('companyName') + ' ' + row.from.get('contactName') + '<br />' + row.get('userMessageType');\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\trowText = row.to.get('companyName') + ' ' + row.to.get('contactName') + '<br />' + row.get('userMessageType');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.options.view === 'inbox')\n\t\t\t\t\t\t\trowText = row.from.get('companyName') + '<br />' + row.from.get('contactName') + '<br />' + row.get('userMessageType');\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\trowText = row.to.get('companyName') + '<br />' + row.to.get('contactName') + '<br />' + row.get('userMessageType');\n\n\t\t\t\t\t\tif (row.get('viewedOn') == null && this.options.view === 'inbox') {\n\t\t\t\t\t\t\treturn '<span class=\"font-weight-bold\">' + rowText + '</span>';\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treturn rowText;\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this),\n\t\t\t\t\t\"width\": \"65%\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": {\n\t\t\t\t\t\t\"_\": function (row) {\n\t\t\t\t\t\t\treturn new Date(row.get('createdOn'));\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"filter\": \"attributes.createdOn\",\n\t\t\t\t\t\t\"display\": _.bind(function (row) {\n\t\t\t\t\t\t\treturn PJQ.helpers.dateHelpers.getDateString(new Date(row.get('createdOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME);\n\t\t\t\t\t\t}, this)\n\t\t\t\t\t},\n\t\t\t\t\t\"render\": _.bind(function (data, type, row) {\n\t\t\t\t\t\tif (type === 'sort' || type === 'type') {\n\t\t\t\t\t\t\treturn new Date(row.get('createdOn'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet rowText = PJQ.helpers.dateHelpers.getDateString(new Date(row.get('createdOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME);\n\t\t\t\t\t\tif (row.get('viewedOn') == null && this.options.view === 'inbox') {\n\t\t\t\t\t\t\treturn '<span class=\"font-weight-bold\">' + rowText + '</span>';\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treturn rowText;\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this),\n\t\t\t\t\t\"title\": \"Last Activity\",\n\t\t\t\t\t\"width\": \"20%\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"title\": '',\n\t\t\t\t\t\"render\": function () {\n\t\t\t\t\t\tif (PJQ.app.session.project.get('masterUserId') === PJQ.app.session.get('masterUserId')) {\n\t\t\t\t\t\t\treturn '<div class=\"show-on-row-hover\"><button type=\"button\" class=\"btn btn-info btn-view-message mr-1\" title=\"View Message\"><i class=\"fal fa-arrow-alt-from-left\"></i></button><button type=\"button\" class=\"btn btn-danger btn-delete-message\" title=\"Delete Message\"><i class=\"fal fa-trash\"></i></button></div>';\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treturn '<div class=\"show-on-row-hover\"><button type=\"button\" class=\"btn btn-info btn-view-message mr-1\" title=\"View Message\"><i class=\"fal fa-arrow-alt-from-left\"></i></button></div>';\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"orderable\": false,\n\t\t\t\t\t\"searchable\": false,\n\t\t\t\t\t\"className\": \"text-center\",\n\t\t\t\t\t\"width\": \"80px\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"from.attributes.companyName\",\n\t\t\t\t\t\"visible\": false\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.userMessageType\",\n\t\t\t\t\t\"visible\": false\n\t\t\t\t}\n\t\t\t],\n\t\t\tpageLength: 10,\n\t\t\tonRowDoubleClick: _.bind(function (row) {\n\t\t\t\tthis.viewMessage(row.data());\n\t\t\t}, this)\n\t\t});\n\n\t\tthis.refreshView()\n\t},\n\trefreshView: function () {\n\t\tlet $inboxBtn = this.$('.btn-user-messages-inbox'),\n\t\t\t$sentBtn = this.$('.btn-user-messages-sent');\n\t\tif (this.options.view === 'inbox') {\n\t\t\t$inboxBtn.removeClass('text-muted');\n\t\t\t$sentBtn.addClass('text-muted');\n\t\t}\n\t\telse if (this.options.view === 'sent') {\n\t\t\t$sentBtn.removeClass('text-muted');\n\t\t\t$inboxBtn.addClass('text-muted');\n\t\t}\n\n\t\tthis.collection = new PJQ.collections.userMessages.UserMessages(null, {\n\t\t\tproject: this.options.project,\n\t\t\tview: this.options.view,\n\t\t\tuserId: this.options.userId\n\t\t});\n\t\tthis.collection.fetch({\n\t\t\tsuccess: _.bind(function () {\n\t\t\t\tthis.dataTable.resetData(this.collection.models);\n\t\t\t}, this)\n\t\t});\n\t},\n\topenInbox: function () {\n\t\tthis.options.view = 'inbox';\n\t\tthis.refreshView();\n\t},\n\topenSent: function () {\n\t\tthis.options.view = 'sent';\n\t\tthis.refreshView();\n\t},\n\tviewMessageClicked: function (e) {\n\t\tlet message = this.dataTable.getRow($(e.currentTarget).closest('tr')).data();\n\t\tif (message != null) {\n\t\t\tthis.viewMessage(message);\n\t\t}\n\t},\n\tviewMessage: function (message) {\n\t\tif (message.get('viewedOn') == null) {\n\t\t\tmessage.updateViewed();\n\t\t\tthis.dataTable.refresh();\n\t\t}\n\n\t\tnew PJQ.views.projects.UserMessageModal({\n\t\t\tproject: this.options.project,\n\t\t\tmodel: message,\n\t\t\tonSend: _.bind(function () {\n\t\t\t\tthis.refreshView();\n\t\t\t}, this)\n\t\t});\n\t},\n\tnewMessageClicked: function () {\n\t\tnew PJQ.views.projects.UserMessageModal({\n\t\t\tproject: this.options.project,\n\t\t\tonSend: _.bind(function () {\n\t\t\t\tthis.openSent();\n\t\t\t}, this)\n\t\t});\n\t},\n\tdeleteMessageClicked: function (e) {\n\t\tlet row = this.dataTable.getRow($(e.currentTarget).closest('tr')),\n\t\t\tmessage = row.data();\n\t\tnew PJQ.views.modals.DeleteCancel({\n\t\t\theader: \"Confirm Deletion\",\n\t\t\tbody: \"Are you sure you want to delete this message?\",\n\t\t\tonDelete: _.bind(function () {\n\t\t\t\tthis.collection.remove(message);\n\t\t\t\tmessage.destroy();\n\t\t\t\tif (row != null) {\n\t\t\t\t\tthis.dataTable.removeRow(row);\n\t\t\t\t}\n\t\t\t}, this)\n\t\t});\n\t}\n});\n\nPJQ.views.projects.UserMessageModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-User-Message'),\n\t\tmaxWidth: '550px',\n\t\tonSend: _.noop,\n\t\tuserMessage: null,\n\t\tuserMessageTypeId: null\n\t},\n\tevents: {\n\t\t'change select.user-message-type': 'userMessageTypeChanged',\n\t\t'keyup .user-message-body': 'valueChanged',\n\t\t'keyup .user-message-reply': 'replyChanged',\n\t\t'click .btn-reply': 'replyClicked',\n\t\t'keyup .user-message-bid-amount': 'valueChanged',\n\t\t'click .user-message-close': 'onClose',\n\t\t'click .user-message-send': 'onSend',\n\t\t'click .user-message-export': 'onExport'\n\t},\n\tbeforeModalCreated: function () {\n\t\tif (this.model == null) {\n\t\t\tthis.model = new PJQ.models.userMessages.UserMessage({\n\t\t\t\tproject: this.options.project\n\t\t\t});\n\t\t}\n\n\t\tthis.options.project.fetchUserMessageTypes(_.bind(function () {\n\t\t\tif (this.model.userMessageType == null) {\n\t\t\t\tif (this.options.userMessageTypeId != null) {\n\t\t\t\t\tthis.model.userMessageType = this.options.project.userMessageTypes.get(this.options.userMessageTypeId);\n\t\t\t\t}\n\n\t\t\t\t// we check here in case the previous user message set was null\n\t\t\t\tif (this.model.userMessageType == null) {\n\t\t\t\t\tthis.model.userMessageType = this.options.project.userMessageTypes.models[0];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.model.id > 0) {\n\t\t\t\tthis.thread = new PJQ.collections.userMessages.UserMessageThread(null, {\n\t\t\t\t\tmessage: this.model\n\t\t\t\t});\n\t\t\t\tthis.thread.fetch({\n\t\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\t\tif (_.size(this.thread.models) > 0) {\n\t\t\t\t\t\t\tthis.model = _.sortBy(this.thread.models, function (model) {\n\t\t\t\t\t\t\t\treturn model.id;\n\t\t\t\t\t\t\t})[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.listenTo(this.model, 'sync', this.render);\n\t\t\t\t\t\tthis.render();\n\t\t\t\t\t}, this)\n\t\t\t\t})\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.render();\n\t\t\t}\n\t\t}, this));\n\t},\n\tbeforeRender: function () {\n\t\tthis.renderData = {\n\t\t\tuserMessage: this.model,\n\t\t\tuserMessageTypes: this.options.project.userMessageTypes,\n\t\t\tthread: this.thread\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tif (this.model.userMessageType != null) {\n\t\t\tif (this.model.isNew()) {\n\t\t\t\tnew PJQ.inputs.Selectpicker({\n\t\t\t\t\tel: this.$('select.user-message-type'),\n\t\t\t\t\tdefaultValue: this.model.userMessageType.id,\n\t\t\t\t\tisMultiple: false,\n\t\t\t\t\tonChange: _.bind(function (newValue) {\n\t\t\t\t\t\tthis.model.userMessageType = this.options.project.userMessageTypes.get(newValue);\n\t\t\t\t\t\tthis.render();\n\t\t\t\t\t}, this)\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif ((this.model.isNew() || _.size(this.model.attachments.models) > 0) && this.$('.user-message-files').length > 0) {\n\t\t\tthis.uploader = new PJQ.views.files.FileUploaderGrid({\n\t\t\t\tel: this.$('.user-message-files'),\n\t\t\t\tcollection: this.model.attachments,\n\t\t\t\tcanUpload: this.model.isNew(),\n\t\t\t\tcanDelete: this.model.isNew(),\n\t\t\t\tonSuccess: _.bind(function (file) {\n\t\t\t\t\tthis.valueChanged();\n\t\t\t\t}, this),\n\t\t\t\tafterDelete: _.bind(function () {\n\t\t\t\t\tthis.valueChanged();\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\n\t\tif (!this.model.isNew()) {\n\t\t\tthis.replyUploader = new PJQ.views.files.FileUploaderGrid({\n\t\t\t\tel: this.$('.uploader-reply'),\n\t\t\t\tstyle: 'list',\n\t\t\t\tisSmall: true\n\t\t\t});\n\t\t}\n\t},\n\treplyChanged: function (e) {\n\t\tthis.$('.btn-reply').prop('disabled', _.size($(e.currentTarget).val()) === 0);\n\t},\n\treplyClicked: function () {\n\t\tlet newMessage = new PJQ.models.userMessages.UserMessage({\n\t\t\tproject: this.model.project,\n\t\t\treplyToMessageId: this.model.id,\n\t\t\tbody: this.$('.user-message-reply').val(),\n\t\t\tattachments: this.replyUploader.collection.models\n\t\t});\n\t\tthis.thread.add(newMessage);\n\t\tnewMessage.save(null, {\n\t\t\tsuccess: _.bind(function () {\n\t\t\t\tthis.render();\n\t\t\t}, this)\n\t\t})\n\t},\n\tvalueChanged: function () {\n\t\tlet canSend = true;\n\t\tif (this.model.userMessageType.get('isShowBidAmount') && _.size(this.$('.user-message-bid-amount').val()) === 0)\n\t\t\tcanSend = false;\n\t\tif (!this.model.userMessageType.get('isAttachmentOnly') && _.size(this.$('.user-message-body').val()) === 0)\n\t\t\tcanSend = false;\n\t\tif (this.model.userMessageType.get('isAttachmentOnly') && this.uploader.collection.length === 0)\n\t\t\tcanSend = false;\n\t\tif (this.model.userMessageType.get('isAttachmentRequired') && this.uploader.collection.length === 0)\n\t\t\tcanSend = false;\n\n\t\tthis.$('.user-message-send').prop('disabled', !canSend);\n\t},\n\tonClose: function () {\n\t\tthis.removeModal();\n\t},\n\tonSend: function () {\n\t\t// Disable send button to avoid double sending message\n\t\tthis.$('.user-message-send').attr('disabled', 'true');\n\n\t\tif (this.model.userMessageType.get('isShowBidAmount'))\n\t\t\tthis.model.set('bidAmount', parseInt(this.$('.user-message-bid-amount').val()));\n\n\t\tthis.model.save({\n\t\t\tbody: this.$('.user-message-body').val(),\n\t\t}, {\n\t\t\tsuccess: _.bind(function () {\n\t\t\t\tthis.removeModal();\n\t\t\t\tif (typeof this.options.onSend === 'function')\n\t\t\t\t\tthis.options.onSend();\n\t\t\t}, this),\n\t\t\terror: _.bind(function(){\n\t\t\t\t//Re-enable if the message fails for some reason\n\t\t\t\tthis.$('.user-message-send').attr('disabled', false);\n\t\t\t}, this)\n\t\t});\n\t},\n\tonExport: function() {\n\t\tPJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'usermessages',\n\t\t\t\tvalue: this.model.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'thread'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'export'\n\t\t\t}\n\t\t]));\n\n\t}\n});\n","PJQ.views.projects.ProcorePublishModal = PJQ.views.BaseModal.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Procore-Project-Publish'),\n        width: '800px',\n        minWidth: '800px',\n        onPublish: _.noop,\n        settings: null,\n        procoreProjectNumber: null\n    },\n    events: {\n        'click .publish' : 'publish'\n    },\n    beforeModalCreated: function () {\n    },\n    beforeRender: function () {\n        this.renderData = {\n            settings: this.options.settings,\n            isProcoreProjectNumber: this.options.procoreProjectNumber != null,\n            procoreProjectNumber: this.options.procoreProjectNumber\n        };\n    },\n    afterRender: function () {\n        this.companyInput = new PJQ.inputs.Selectpicker({\n            el: this.$('.procore-company'),\n            isIntChoices: true,\n            isDisabled: this.options.settings.companies.length === 1,\n            defaultValue: this.options.settings.companies[0].id,\n            onChange: _.bind(function (value) {\n                let loader = new PJQ.Loader(this.$('.modal-body'));\n\n                new PJQ.ajax.Request({\n                    endpoint: '/procore/settings/' + value\n                }).get().done(_.bind(function (response) {\n                    if (loader != null)\n                        loader.remove();\n                    this.options.settings = response;\n                    this.afterCompanyChanged();\n                }, this)).fail(_.bind(function (xhr, err, result) {\n                }, this));\n            }, this)\n        });\n\n        this.$('.procore-project-name').val(PJQ.app.session.project.get('projectName'));\n\n        this.startDateInput = new PJQ.inputs.Datepicker({\n            el: this.$('.procore-est-start'),\n            datepickerOptions: {\n                format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\n                defaultDate: PJQ.app.session.project.get('startDate') ? PJQ.helpers.dateHelpers.parseDateString(PJQ.app.session.project.get('startDate'), false) : null\n            }\n        });\n\n        this.completeDateInput = new PJQ.inputs.Datepicker({\n            el: this.$('.procore-est-complete'),\n            datepickerOptions: {\n                format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\n                defaultDate: PJQ.app.session.project.get('endDate') ? PJQ.helpers.dateHelpers.parseDateString(PJQ.app.session.project.get('endDate'), false) : null\n            }\n        });\n\n        new PJQ.views.projects.ProjectAttachments({\n            el: this.$('.project-attachments'),\n            project: PJQ.app.session.project,\n            isHideDownload: true,\n            isHideFiles: true,\n            isHidePrivate: false,\n            onChange: _.bind(function(attachments) {\n                this.options.selectedAttachments = attachments;\n            },this)\n        });\n\n        this.afterCompanyChanged();\n    },\n    afterCompanyChanged: function() {\n\n        if (this.options.settings.companyOffices.length === 1 && this.options.settings.companyOffices[0].id === null)\n            this.options.settings.companyOffices = [];\n\n        if (this.options.settings.companyOffices.length === 0) {\n            this.$('.procore-company-office').closest('div.form-group').hide();\n            if (this.companyOfficeInput)\n                this.companyOfficeInput.setValue(null);\n        }\n        else {\n            this.$('.procore-company-office').closest('div.form-group').show();\n            if (!this.companyOfficeInput)\n            {\n                this.companyOfficeInput = new PJQ.inputs.Selectpicker({\n                    el: this.$('.procore-company-office'),\n                    isIntChoices: true,\n                    isDisabled: this.options.settings.companyOffices.length === 1,\n                    choices: this.options.settings.companyOffices,\n                    defaultValue: this.options.settings.companyOffices[0].id\n                });\n            }\n            else\n            {\n                this.companyOfficeInput.updateChoices(this.options.settings.companyOffices);\n                this.companyOfficeInput.setValue(this.options.settings.companyOffices[0].id);\n            }\n        }\n\n        if (this.options.settings.programs.length === 1 && this.options.settings.programs[0].id === null)\n            this.options.settings.programs = [];\n\n        if (this.options.settings.programs.length === 0) {\n            this.$('.procore-project-program').closest('div.form-group').hide();\n            if (this.projectProgramInput)\n                this.projectProgramInput.setValue(null);\n        }\n        else {\n            this.$('.procore-project-program').closest('div.form-group').show();\n            if (!this.projectProgramInput)\n            {\n                this.projectProgramInput = new PJQ.inputs.Selectpicker({\n                    el: this.$('.procore-project-program'),\n                    isIntChoices: true,\n                    isDisabled: this.options.settings.programs.length === 1,\n                    choices: this.options.settings.programs,\n                    defaultValue: this.options.settings.programs[0].id\n                });\n            }\n            else\n            {\n                this.projectProgramInput.updateChoices(this.options.settings.programs);\n                this.projectProgramInput.setValue(this.options.settings.programs[0].id);\n            }\n        }\n\n        if (this.options.settings.projectTemplates.length === 1 && this.options.settings.projectTemplates[0].id === null)\n            this.options.settings.projectTemplates = [];\n\n        if (this.options.settings.projectTemplates.length === 0) {\n            this.$('.procore-project-template').closest('div.form-group').hide();\n            if (this.projectTemplateInput)\n                this.projectTemplateInput.setValue(null);\n        }\n        else {\n            this.$('.procore-project-template').closest('div.form-group').show();\n            if (!this.projectTemplateInput)\n            {\n                this.projectTemplateInput = new PJQ.inputs.Selectpicker({\n                    el: this.$('.procore-project-template'),\n                    isIntChoices: true,\n                    isDisabled: this.options.settings.projectTemplates.length === 1,\n                    choices: this.options.settings.projectTemplates,\n                    defaultValue: this.options.settings.projectTemplates[0].id\n                });\n            }\n            else\n            {\n                this.projectTemplateInput.updateChoices(this.options.settings.projectTemplates);\n                this.projectTemplateInput.setValue(this.options.settings.projectTemplates[0].id);\n            }\n        }\n\n        if (this.options.settings.projectTypes.length === 1 && this.options.settings.projectTypes[0].id === null)\n            this.options.settings.projectTypes = [];\n\n        if (this.options.settings.projectTypes.length === 0) {\n            this.$('.procore-project-type').closest('div.form-group').hide();\n            if (this.projectTypeInput)\n                this.projectTypeInput.setValue(null);\n        }\n        else {\n            this.$('.procore-project-type').closest('div.form-group').show();\n            if (!this.projectTypeInput)\n            {\n                this.projectTypeInput = new PJQ.inputs.Selectpicker({\n                    el: this.$('.procore-project-type'),\n                    isIntChoices: true,\n                    isDisabled: this.options.settings.projectTypes.length === 1,\n                    choices: this.options.settings.projectTypes,\n                    defaultValue: this.options.settings.projectTypes[0].id\n                });\n            }\n            else\n            {\n                this.projectTypeInput.updateChoices(this.options.settings.projectTypes);\n                this.projectTypeInput.setValue(this.options.settings.projectTypes[0].id);\n            }\n        }\n\n        if (this.options.settings.projectStages.length === 1 && this.options.settings.projectStages[0].id === null)\n            this.options.settings.projectStages = [];\n\n        if (this.options.settings.projectStages.length === 0) {\n            this.$('.procore-project-stage').closest('div.form-group').hide();\n            if (this.projectStageInput)\n                this.projectStageInput.setValue(null);\n        }\n        else {\n            this.$('.procore-project-stage').closest('div.form-group').show();\n            if (!this.projectStageInput)\n            {\n                this.projectStageInput = new PJQ.inputs.Selectpicker({\n                    el: this.$('.procore-project-stage'),\n                    isIntChoices: true,\n                    isDisabled: this.options.settings.projectStages.length === 1,\n                    choices: this.options.settings.projectStages,\n                    defaultValue: this.options.settings.projectStages[0].id\n                });\n            }\n            else\n            {\n                this.projectStageInput.updateChoices(this.options.settings.projectStages);\n                this.projectStageInput.setValue(this.options.settings.projectStages[0].id);\n            }\n        }\n    },\n    publish: function() {\n\n        let projectAddress = PJQ.app.session.project.get('address1');\n\n        if (PJQ.app.session.project.get('address2')) {\n\n            if (projectAddress)\n                projectAddress += ' ';\n\n            projectAddress += PJQ.app.session.project.get('address2');\n        }\n\n        let office_id = 0;\n        if (this.companyOfficeInput && this.companyOfficeInput.getValue())\n            office_id = this.companyOfficeInput.getValue();\n\n        let project_stage_id = 0;\n        if (this.projectStageInput && this.projectStageInput.getValue())\n            project_stage_id = this.projectStageInput.getValue();\n\n        let program_id = 0;\n        if (this.projectProgramInput && this.projectProgramInput.getValue())\n            program_id = this.projectProgramInput.getValue();\n\n        let project_type_id = 0;\n        if (this.projectTypeInput && this.projectTypeInput.getValue())\n            project_type_id = this.projectTypeInput.getValue();\n\n        let project_template_id = 0;\n        if (this.projectTemplateInput && this.projectTemplateInput.getValue())\n            project_template_id = this.projectTemplateInput.getValue();\n\n        let square_feet = 0;\n        if (_.size(PJQ.helpers.formatHelpers.numbersOnly(this.$('.procore-square-feet'))) > 0) {\n            square_feet = parseInt(PJQ.helpers.formatHelpers.numbersOnly(this.$('.procore-square-feet')));\n        }\n\n        let attachments = [], drawings = [];\n        if (this.options.selectedAttachments) {\n            attachments = _.map(_.filter(this.options.selectedAttachments.models, function(model) { return !model.get('isDrawing') }),\n                function(attachment) { return attachment.get('entryId'); });\n            drawings = _.map(_.filter(this.options.selectedAttachments.models, function(model) { return model.get('isDrawing') }),\n                function(attachment) { return attachment.get('folderId') == 0 ? -2 : attachment.get('versionId'); });\n        }\n\n        if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROCORE_PROJECT_NUMBER_CUSTOM_FIELD) && _.size(attachments) == 0 && _.size(drawings) == 0) {\n            PJQ.notifications.notify.errorNotify({\n                message: 'Select drawings or attachments in order to Publish to Procore'\n            });\n            return;\n        }\n\n        let postData = {\n            company_id: this.companyInput.getValue(),\n            name: this.$('.procore-project-name').val().trim(),\n            project_number: this.$('.procore-project-number').val().toString().trim(),\n            address: projectAddress,\n            city: PJQ.app.session.project.get('city').trim(),\n            zip: PJQ.app.session.project.get('zip').trim(),\n            state_code: PJQ.app.session.project.get('state'),\n            country_code: PJQ.app.session.project.get('country'),\n            description: '',\n            public_notes: '',\n            est_start_date: this.startDateInput.getValue() ? PJQ.helpers.dateHelpers.getDateString(this.startDateInput.getValue(), PJQ.helpers.dateHelpers.dateFormats.DATE) : '',\n            est_completion_date: this.completeDateInput.getValue() ? PJQ.helpers.dateHelpers.getDateString(this.completeDateInput.getValue(), PJQ.helpers.dateHelpers.dateFormats.DATE) : '',\n            square_feet: square_feet,\n            phone: '',\n            flagColor: '',\n            office_id: office_id,\n            project_stage_id: project_stage_id,\n            program_id: program_id,\n            project_type_id: project_type_id,\n            project_template_id: project_template_id,\n            pantera_project_id: PJQ.app.session.project.id,\n            documentListDrawings: drawings.join(','),\n            documentListPublic: attachments.join(','),\n            documentListPrivate: '',\n            isSyncProjectContactVendors: this.$('.procore-sync-contacts').is(':checked')\n        };\n\n\n        new PJQ.ajax.Request({\n            endpoint: '/procore/projects',\n            data: postData\n        }).post().done(_.bind(function (data) {\n            if (data != '0') {\n                PJQ.app.session.project.set('externalProjectId', 'PROCORE:' + data);\n                PJQ.app.router.navigate('projects/' + PJQ.app.session.project.id, {\n                    trigger: true\n                });\n                this.removeModal();\n                new PJQ.views.BaseModal({\n                    header: \"Procore Project\",\n                    body: '<a href=\"https://api.procore.com/' + data + '/project/home\" target=\"_blank\">Click here</a> to open your Procore project in a new window.  If Drawings or Attachments were selected, it may take some time for uploading to complete.'\n                });\n\n            }\n            else {\n                new PJQ.views.BaseModal({\n                    header: \"Procore Publish Error\",\n                    body: 'Unable to create/locate Procore Project. Error 124'\n                });\n            }\n        }, this)).fail(_.bind(function (xhr, err, result) {\n            new PJQ.views.BaseModal({\n                header: \"Procore Publish Error\",\n                body: (xhr.responseJSON.exceptionMessage ? xhr.responseJSON.exceptionMessage : 'Unknown error')\n            });\n        }, this));\n\n\n\n    }\n});\n","PJQ.views.projects.dashboard = {};\n\nPJQ.views.projects.ProjectDashboard = PJQ.views.BaseView.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Dashboard')\n    },\n    events: {\n        'click .btn-alert-order-prints': 'orderPrints',\n        'click .stack-takeoff': 'stackTakeoff',\n        'click .square-takeoff': 'squareTakeoff',\n        'click .e-takeoff': 'eTakeoff',\n        'click .btn-update-my-info': 'updateMyInfo',\n        'click .btn-submit-bid': 'submitBidMessage',\n        'click .btn-feature-settings': 'viewFeatureSettings'\n    },\n    beforeFirstRender: function () {\n        if (this.model == null) {\n            this.model = PJQ.app.session.project;\n        }\n\n        if (this.model.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_BID_PACKAGES_COUNT)) {\n            this.model.fetchBidPackages(_.bind(function (bp) {\n                this.bidPackages = bp;\n                this.render();\n            }, this));\n        }\n    },\n    renderData: function () {\n        return {\n            model: this.model,\n            isAdmin: (PJQ.app.session.get('masterUserId') === this.model.get('masterUserId')),\n            showBidPackages: this.showBidPackages()\n        };\n    },\n    showBidPackages: function () {\n        return this.model.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_BID_PACKAGES_COUNT)\n            && this.bidPackages != null\n            && _.size(_.filter(this.bidPackages.models, function (bidPackage) {\n                let n = bidPackage.get('notes');\n                return n != null && _.size(n.trim()) > 0;\n            })) > 0;\n    },\n    afterRender: function () {\n        if (this.model.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_BID_PACKAGES_COUNT)) {\n            if (this.bidPackages == null) {\n                return;\n            }\n        }\n        let showBidPackages = this.showBidPackages(),\n            device = PJQ.helpers.mobile.getDevice();\n        if (device != null) {\n            new PJQ.views.mobile.AppDownloadModal();\n        }\n\n        if (showBidPackages) {\n            this.renderBidPackages();\n        }\n\n        this.model.fetchUserMessageTypes(_.bind(function () {\n            if ((PJQ.app.session.get('masterUserId') === this.model.get('masterUserId'))) {\n                new PJQ.views.projects.dashboard.ProjectStats({\n                    el: this.$('.project-stats'),\n                    project: this.model,\n                    dashboard: this,\n                    emptyCallback: _.bind(function () {\n                        this.$('.project-stats-row').remove();\n                    }, this)\n                });\n\n\t\t\t\tnew PJQ.views.projects.dashboard.Newsfeed({\n\t\t\t\t\tel: this.$('.project-newsfeed'),\n\t\t\t\t\tproject: this.model,\n\t\t\t\t\tdashboard: this\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// sub command buttons\n\t\t\t\tthis.inviteHeader = new PJQ.views.projects.dashboard.ProjectInviteHeader({\n\t\t\t\t\tel: this.$('.project-invite-header'),\n\t\t\t\t\tproject: this.model,\n\t\t\t\t\tdashboard: this,\n\t\t\t\t\tafterRender: _.bind(function () {\n\t\t\t\t\t\tif (PJQ.helpers.objectHelpers.checkNested(PJQ.app, 'portal', 'customization', 'project', 'inviteHeader')) {\n\t\t\t\t\t\t\tlet cb = PJQ.app.portal.customization.project.inviteHeader.afterRender;\n\t\t\t\t\t\t\tif (typeof cb === 'function') {\n\t\t\t\t\t\t\t\tcb();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n                        if (PJQ.app.session.get('submitBid')) {\n                            this.submitBidMessage();\n                        }\n                    }, this)\n                });\n\n                new PJQ.views.projects.dashboard.ProjectDetails({\n                    el: this.$('.project-details'),\n                    model: this.model,\n                    afterRender: function () {\n                        if (PJQ.helpers.objectHelpers.checkNested(PJQ.app, 'portal', 'customization', 'project', 'details')) {\n                            let cb = PJQ.app.portal.customization.project.details.afterRender;\n                            if (typeof cb === 'function') {\n                                cb();\n                            }\n                        }\n                    }\n                });\n\n                if (this.model.user != null) {\n                    new PJQ.views.projects.dashboard.ProjectContactDetails({\n                        el: this.$('.project-contact-details'),\n                        model: this.model.user,\n                        project: this.model\n                    });\n                }\n\n                if (PJQ.app.session.contact != null) {\n                    new PJQ.views.projects.dashboard.ProjectMessagesSub({\n                        el: this.$('.project-messages-sub'),\n                        project: this.model,\n                        dashboard: this\n                    });\n                }\n            }\n\n            if (PJQ.app.session.get('masterUserId') !== this.model.get('masterUserId')\n                || this.model.hasPermission('attachments.canView')) {\n                this.$('.col-attachments').removeClass('hidden');\n                new PJQ.views.projects.ProjectAttachments({\n                    el: this.$('.project-attachments'),\n                    project: this.model,\n                    isHideEmptyFolders: true\n                });\n            }\n        }, this));\n    },\n    renderBidPackages: function () {\n        if (this.bidPackages != null) {\n            new PJQ.views.projects.dashboard.BidPackages({\n                el: this.$('.bid-packages'),\n                collection: this.bidPackages\n            });\n        }\n    },\n    orderPrints: function () {\n        new PJQ.views.files.OrderPrintsModal({\n            contact: PJQ.app.session.contact\n        });\n    },\n    updateMyInfo: function () {\n        new PJQ.views.contacts.BaseEditContactModal({\n            model: new PJQ.models.projectContacts.ProjectContact({\n                id: PJQ.app.session.contact.id,\n                projectId: this.model.id\n            })\n        });\n    },\n    viewFeatureSettings: function() {\n        new PJQ.views.featureSettings.FeatureSettingsModal({\n            model: new PJQ.models.featureSettings.FeatureSetting(PJQ.app.session.project.get('featureSettings'), {project: PJQ.app.session.project}),\n            project: PJQ.app.session.project\n        });\n    },\n    stackTakeoff: function () {\n        let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n            {\n                endpoint: 'projects',\n                value: this.model.id\n            },\n            {\n                endpoint: 'contacts',\n                value: PJQ.app.session.contact.id\n            },\n            {\n                endpoint: 'stackurl'\n            }\n        ]);\n        let request = new PJQ.ajax.Request({\n            endpoint: endpoint\n        });\n        request.get().done(_.bind(function (data) {\n            window.location.href = data;\n        }, this)).fail(function () {\n            //error();\n        });\n    },\n    squareTakeoff: function () {\n        new PJQ.views.projects.SquareTakeoffModal();\n    },\n    eTakeoff: function () {\n        new PJQ.views.projects.eTakeoffModal({\n            contact: PJQ.app.session.contact,\n            project: PJQ.app.session.project,\n            accessKey: PJQ.app.session.get('accessKey')\n        });\n    },\n    submitBidMessage: function () {\n        let messageTypeId = this.$('.btn-submit-bid').data('messageTypeId');\n        if (messageTypeId > 0) {\n            new PJQ.views.projects.UserMessageModal({\n                project: this.model,\n                userMessageTypeId: messageTypeId,\n                onSend: _.bind(function () {\n                    if (PJQ.app.session.project.hasPermission('privateMessaging.canView') &&\n                        !(PJQ.app.session.project.get('status') === 'ARCHIVE'\n                            || PJQ.app.session.project.get('status') === 'NEW'\n                            || (PJQ.app.session.user === null && PJQ.app.session.contact === null)\n                            || PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_PROJECT_PRIVATE_MESSAGES))) {\n                        PJQ.app.router.navigate('projects/' + PJQ.app.session.project.id + '/privatemessaging/view/sent', {\n                            trigger: true\n                        });\n                    }\n                    PJQ.notifications.notify.successNotify({\n                        message: 'Bid Submitted successfully.'\n                    });\n                }, this)\n            });\n        }\n    }\n});\n\nPJQ.views.projects.dashboard.ProjectDetails = PJQ.views.BaseView.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Details-Dashboard')\n    },\n    beforeRender: function () {\n        this.renderData = {\n            model: this.model,\n            project: this.options.project\n        };\n    },\n    afterRender: function () {\n\n    }\n});\n\nPJQ.views.projects.dashboard.ProjectContactDetails = PJQ.views.BaseView.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Contact-Details-Dashboard')\n    },\n    beforeRender: function () {\n        this.renderData = {\n            model: this.model,\n            project: this.options.project\n        };\n    },\n    afterRender: function () {\n\n    }\n});\n\nPJQ.views.projects.dashboard.ProjectProposals = PJQ.views.BaseView.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Proposals')\n    },\n    events: {\n        // 'click .group-status-close': 'onClose'\n    },\n    beforeRender: function () {\n        this.renderData = {\n            model: this.model\n        };\n    },\n    afterRender: function () {\n\n    }\n});\n\n// Newsfeed\nPJQ.views.projects.dashboard.Newsfeed = PJQ.views.BaseView.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Newsfeed'),\n        subTemplates: {\n            newsfeedItems: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Newsfeed-Items')\n        },\n        pageNumber: 1,\n        pageSize: 10\n    },\n    events: {\n        'click .btn-project-newsfeed-refresh': 'refreshNewsfeed',\n        'click .btn-project-newsfeed-view-message-participants': 'viewMessageParticipants',\n        'click .btn-project-newsfeed-view-attachments': 'viewAttachments',\n        'click .btn-project-newsfeed-copy-message': 'copyMessage',\n        'click .btn-project-newsfeed-delete-message': 'deleteMessage'\n    },\n    beforeFirstRender: function () {\n\n    },\n    beforeRender: function () {\n\n    },\n    afterRender: function () {\n        this.getNewsfeed(this.options.pageNumber);\n    },\n    refreshNewsfeed: function () {\n        this.options.pageNumber = 1;\n        this.$('.project-newsfeed-items').html('');\n        this.getNewsfeed(this.options.pageNumber);\n    },\n    getNewsfeed: function (pageNumber) {\n        let loader = new PJQ.Loader(this.$('.project-newsfeed-items'));\n        this.data = [];\n        new PJQ.ajax.Request({\n            endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n                {\n                    endpoint: 'projects',\n                    value: this.options.project.id\n                },\n                {\n                    endpoint: 'newsfeed'\n                },\n            ], [\n                {\n                    parameter: 'pageNumber',\n                    value: pageNumber\n                },\n                {\n                    parameter: 'pageSize',\n                    value: 9999\n                }\n            ])\n        }).get().done(_.bind(function (data) {\n            this.data = data;\n            loader.remove();\n            this.renderSubTemplate(true, this.options.subTemplates.newsfeedItems, this.$('.project-newsfeed-items'), {\n                items: data,\n                isAdmin: (PJQ.app.session.get('masterUserId') === this.options.project.get('masterUserId'))\n            });\n        }, this));\n    },\n    viewAttachments: function (e) {\n        let projectMessageId = parseInt(this.$(e.currentTarget).data('projectMessageId'));\n        _.each(this.data, _.bind(function (item) {\n            if (item.auditAction === 'ProjectMessage' && item.projectMessage && item.projectMessage.projectMessageId === projectMessageId) {\n                new PJQ.views.projects.dashboard.ViewMessageAttachmentsModal({\n                    attachments: item.attachments\n                });\n            }\n        }, this));\n    },\n    viewMessageParticipants: function (e) {\n        let projectMessageId = parseInt(this.$(e.currentTarget).data('projectMessageId'));\n        PJQ.app.router.navigate('projects/' + this.options.project.id + (PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.IS_PROJECT_WALL_MESSAGING_NEW) ? '/messagingnew/' : '/messaging/') + projectMessageId, {\n            trigger: true\n        });\n    },\n    copyMessage: function (e) {\n        let projectMessageId = parseInt(this.$(e.currentTarget).data('projectMessageId'));\n        PJQ.app.router.navigate('projects/' + this.options.project.id + (PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.IS_PROJECT_WALL_MESSAGING_NEW) ? '/messagingnew/' : '/messaging/') + projectMessageId + '/copy', {\n            trigger: true\n        });\n    },\n    deleteMessage: function (e) {\n        let auditLogId = parseInt(this.$(e.currentTarget).data('auditLogId'));\n        new PJQ.views.BaseModal({\n            header: 'Confirm Delete',\n            body: '<div class=\"text-dark fs-14\">Are you sure you want to delete this message and recipient responses?</div>',\n            okButtonText: 'Yes',\n            onOk: _.bind(function () {\n                if (PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.IS_PROJECT_WALL_MESSAGING_NEW)) {\n                    let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n                        {\n                            endpoint: 'projects',\n                            value: PJQ.app.session.project.id\n                        },\n                        {\n                            endpoint: 'projectmessages',\n                            value: parseInt(this.$(e.currentTarget).data('projectMessageId'))\n                        }\n                    ]);\n                    new PJQ.ajax.Request({\n                        endpoint: endpoint\n                    }).delete().done(_.bind(function () {\n                        PJQ.notifications.notify.successNotify({\n                            message: 'Message deleted successfully.'\n                        });\n                        this.refreshNewsfeed();\n                    }, this)).fail(function () {\n                        PJQ.notifications.notify.errorNotify({\n                            message: 'Something went wrong!'\n                        });\n                    });\n\n                } else {\n                    selectedCommentId = auditLogId;\n                    DeleteProjectMessageByCommentId(_.bind(function () {\n                        this.refreshNewsfeed();\n                    }, this));\n                }\n            }, this),\n            isShowCancelButton: true,\n            cancelButtonText: \"No\"\n        });\n    }\n});\n\n// Admin Project Stats\nPJQ.views.projects.dashboard.ProjectStats = PJQ.views.BaseView.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Stats'),\n        subTemplates: {\n            statItem: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Stats-Item')\n        },\n        emptyCallback: null\n    },\n    events: {},\n    beforeFirstRender: function () {\n\n    },\n    beforeRender: function () {\n\n    },\n    afterRender: function () {\n        this.getProjectStats();\n    },\n    getProjectStats: function () {\n        let loader = new PJQ.Loader(this.$('.project-stats-items'));\n        new PJQ.ajax.Request({\n            endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n                {\n                    endpoint: 'projects',\n                    value: this.options.project.id\n                },\n                {\n                    endpoint: 'stats'\n                },\n            ])\n        }).get().done(_.bind(function (data) {\n            loader.remove();\n\n            if (data == null || _.size(data.projectStats) === 0) {\n                if (typeof this.options.emptyCallback === 'function') {\n                    this.options.emptyCallback();\n                    return;\n                }\n            }\n\n            _.each(data.projectStats, _.bind(function (stats) {\n                let labels = [],\n                    graphSet = {\n                        data: [],\n                        backgroundColor: []\n                    };\n                _.each(stats.datasets, function (dataset) {\n                    labels.push(PJQ.helpers.formatHelpers.upperCaseFirstLetterEachWord(dataset.label));\n                    graphSet.data.push(dataset.count);\n                    graphSet.backgroundColor.push(dataset.color);\n                });\n\n                this.renderSubTemplate(true, this.options.subTemplates.statItem, this.$('.project-stats-items'), {\n                    stats: stats\n                }, _.bind(function ($chart) {\n                    new PJQ.charts.Chart($chart.find('.project-stat-chart'), {\n                        type: 'doughnut',\n                        height: 150,\n                        width: 150,\n                        showTotal: true,\n                        total: stats.total,\n                        data: {\n                            labels: labels,\n                            datasets: [\n                                graphSet\n                            ]\n                        },\n                        options: {\n                            cutoutPercentage: 70,\n                            legend: {\n                                display: false\n                            }\n                        },\n                        onClick: _.bind(function (clickedSegments) {\n                            if (_.size(clickedSegments) > 0) {\n                                let segment = clickedSegments[0],\n                                    stat = stats.datasets[segment._index];\n                                PJQ.app.router.navigate('projects/' + this.options.project.id + '/' + stat.route, {\n                                    trigger: true\n                                });\n                            }\n                        }, this)\n                    });\n                }, this));\n            }, this));\n\n        }, this));\n    }\n});\n\nPJQ.views.projects.dashboard.ProjectInviteHeader = PJQ.views.BaseView.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Invite-Header'),\n    },\n    events: {\n        'click .send-user-message': 'sendUserMessage'\n    },\n    beforeFirstRender: function () {\n        if (this.options.project != null) {\n            this.options.project.getCompanyLogoUrl(_.bind(function () {\n                this.render();\n            }, this));\n            return false;\n        }\n    },\n    beforeRender: function () {\n        this.renderData = {\n            options: this.options,\n            hideBidsDue: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_HIDE_BIDS_DUE)\n        }\n    },\n    afterRender: function () {\n        if (PJQ.app.session.contact != null) {\n            let projectResponseButtons = [];\n            _.each(this.options.project.getProjectStatusList(), _.bind(function (status, index) {\n                let colorClass = 'info';\n                if (index === 0)\n                    colorClass = 'success';\n                else if (index === 1)\n                    colorClass = 'danger';\n\n                if (status[1]) {\n                    projectResponseButtons.push({label: status[0], value: status[0], colorClass: colorClass});\n                }\n            }, this));\n\n            _.each(this.options.project.userMessageTypes.models, _.bind(function (type) {\n                if (type.get('isAlwaysVisible')) {\n                    this.$('.user-messages').removeClass('hidden');\n                }\n            }, this));\n        }\n    },\n    sendUserMessage: function (e) {\n        new PJQ.views.projects.UserMessageModal({\n            project: this.options.project,\n            userMessageTypeId: this.$(e.currentTarget).data('userMessageTypeId'),\n            onSend: _.bind(function () {\n                this.refresh();\n            }, this)\n        });\n    }\n});\n\n// Sub Project Messages\nPJQ.views.projects.dashboard.ProjectMessagesSub = PJQ.views.BaseView.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Messages-Sub'),\n        subTemplates: {\n            messageItems: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Messages-Sub-Items')\n        }\n    },\n    events: {\n        'click .project-message>.card-header': 'stopPropagationIfSelected',\n        'click .project-message .btn-download-attachment': 'downloadAttachment',\n        'shown.bs.collapse .project-message .collapse': 'messageShown'\n    },\n    beforeFirstRender: function () {\n        this.options.project.fetchProjectMessageResponses(_.bind(function (responses) {\n            this.model = responses;\n            this.render();\n        }, this));\n    },\n    afterRender: function () {\n        if (this.model && this.model.isFetched) {\n            let projectStatuses = this.options.project.getProjectStatusList();\n            this.renderSubTemplate(true, this.options.subTemplates.messageItems, this.$('.project-message-items'), {\n                model: this.model,\n                projectStatuses: projectStatuses\n            }, _.bind(function () {\n                this.projectResponseButtons = [];\n                _.each(projectStatuses, _.bind(function (status, index) {\n                    let colorClass = 'info';\n                    if (index === 0) {\n                        colorClass = 'success';\n                    } else if (index === 1) {\n                        colorClass = 'danger';\n                    }\n                    if (status[1]) {\n                        this.projectResponseButtons.push({\n                            label: status[0],\n                            value: status[0],\n                            colorClass: colorClass\n                        });\n                    }\n                }, this));\n\n                this.messageResponseButtons = [];\n                _.each(this.options.project.getMessageStatusList(), _.bind(function (status, index) {\n                    let colorClass = 'info';\n                    if (index === 0)\n                        colorClass = 'success';\n                    else if (index === 1)\n                        colorClass = 'danger';\n\n                    if (status[1]) {\n                        this.messageResponseButtons.push({\n                            label: status[0],\n                            value: status[0],\n                            colorClass: colorClass\n                        });\n                    }\n                }, this));\n                if (_.size(this.model.messages.models) > 0) {\n                    _.each(this.model.messages.models, function (model) {\n                        this.renderMessageResponseButton(model);\n                    }, this);\n\n                    // try to open the message matching the key they came in with\n                    let contextMessage = this.model.getContextMessage();\n                    contextMessage = this.setContextMessage(contextMessage);\n                    if (contextMessage != null) {\n                        this.$('#project-messages-sub-' + contextMessage.get('accessKey')).collapse('show');\n\n                        let urlStatus = PJQ.app.session.get('bidStatus');\n                        if (_.size(urlStatus) > 0) {\n                            PJQ.app.session.set('bidStatus', null);\n                            // make sure the status in the url was a valid status\n                            let actualStatus = _.find(_.union(PJQ.app.session.project.getProjectStatusList(), [['YES', true], ['NO', true]]), function (status) {\n                                return status[0].toUpperCase() === urlStatus.toUpperCase();\n                            });\n                            if (actualStatus != null) {\n                                this.handleResponse(contextMessage, actualStatus[0]);\n                                this.render();\n                            }\n                        }\n                    }\n                } else {\n                    this.renderContextMessageResponseButton();\n                }\n\n                this.$('#projectMessagesSubAccordion').on('shown.bs.collapse', function () {\n                    $(this).parent().find(\".card-header[aria-expanded='true'] .fa-chevron-down\").removeClass(\"fa-chevron-down\").addClass(\"fa-chevron-right\");\n                    $(this).parent().find(\".card-header[aria-expanded='false'] .fa-chevron-right\").removeClass(\"fa-chevron-right\").addClass(\"fa-chevron-down\");\n                });\n            }, this));\n        } else {\n            new PJQ.Loader(this.$('.project-message-items'));\n        }\n    },\n    setContextMessage: function (selectedMessage) {\n        let contextMessage = null;\n        if (selectedMessage != null && selectedMessage.canChangeStatus()) {\n            contextMessage = selectedMessage;\n        }\n\n        if (contextMessage == null) {\n            let noResponseMessages = this.model.messages.getChangeableMessages();\n            if (_.size(noResponseMessages) > 0) {\n                contextMessage = _.max(noResponseMessages, function (item) {\n                    return PJQ.helpers.dateHelpers.getDateDiff(new Date(), new Date(item.get('createdOn')));\n                });\n            }\n        }\n\n        if (contextMessage == null) {\n            if (_.size(this.model.messages) > 0) {\n                contextMessage = _.max(this.model.messages.models, function (item) {\n                    return PJQ.helpers.dateHelpers.getDateDiff(new Date(), new Date(item.get('createdOn')));\n                });\n            }\n        }\n\n        this.renderContextMessageResponseButton(contextMessage);\n\n        return contextMessage;\n    },\n    getMessageElement: function (message) {\n        return $('div.card[data-access-key=\"' + message.get('accessKey') + '\"]');\n    },\n    messageShown: function (e) {\n        let accessKey = $(e.currentTarget).data('accessKey').toString(),\n            selectedMessage = this.model.messages.findWhere({accessKey: accessKey.toUpperCase()});\n        this.setContextMessage(selectedMessage);\n    },\n    handleResponse: function (message, response) {\n        // if they have more than one group, collect responses per group\n        let messageType = message.get('type');\n\n        // 2023-08-14 do not check the message type anymore, since bid reminders get sent with no message type but have response buttons in them\n        //if (messageType === 'PROJECT' || messageType === 'MESSAGE') {\n            message.set('status', response);\n        //}\n\n        if (messageType != 'MESSAGE' && this.model.contactGroups.models.length > 1) {\n            new PJQ.views.projects.dashboard.GetGroupResponsesSubModal({\n                contactGroups: this.model.contactGroups,\n                accessKey: message.get('accessKey'),\n                onSave: _.bind(function (result) {\n                    // todo: update project contact accordingly so that other views can process the change\n                    if (message.responseButton)\n                        message.responseButton.setValue(result.response);\n\n                    if (this.contextResponseControl)\n                        this.contextResponseControl.setValue(result.response);\n\n                    PJQ.notifications.notify.successNotify({\n                        message: 'Your response of ' + result.response + ' has been recorded.'\n                    });\n                    this.checkDeclinedResponseQuestion(result.response, message.get('accessKey'));\n                }, this)\n            });\n        } else {\n            // just save the overall response\n            let contactGroups = new PJQ.collections.projectMessages.ProjectContactGroups(),\n                contactGroup = new PJQ.models.projectMessages.ProjectContactGroup();\n\n            contactGroup.set('groupStatus', response);\n            contactGroups.add(contactGroup);\n            contactGroups.accessKey = message.get('accessKey');\n\n            contactGroups.save({\n                success: _.bind(function (result) {\n                    if (this.contextResponseControl != null) {\n                        this.contextResponseControl.setValue(result.response);\n                    }\n\n                    PJQ.notifications.notify.successNotify({\n                        message: 'Your response of ' + result.response + ' has been recorded.'\n                    });\n\n                    if (messageType != 'MESSAGE')\n                        this.checkDeclinedResponseQuestion(result.response, message.get('accessKey'));\n                }, this)\n            });\n        }\n    },\n    checkDeclinedResponseQuestion: function(response, accessKey) {\n        if (!PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_PROJECT_MESSAGE_DECLINE_QUESTION))\n            return;\n\n        PJQ.app.session.project.getProjectStatuses(_.bind(function(statuses) {\n            if (response === statuses[1].name) {\n                let declineQuestionSettings = new PJQ.models.projectParticipants.ProjectMessageDeclineQuestionSettings(null, {\n                    project: PJQ.app.session.project\n                });\n\n                declineQuestionSettings.fetch({\n                    success: _.bind(function() {\n\n                        let projectLocation = '';\n                        if (PJQ.app.session.project.get('city'))\n                            projectLocation = PJQ.app.session.project.get('city');\n                        if (PJQ.app.session.project.get('state'))\n                            projectLocation += (PJQ.app.session.project.get('city') ? ', ' : '') + PJQ.app.session.project.get('state');\n                        if (PJQ.app.session.project.get('zip'))\n                            projectLocation += (_.size(projectLocation)>0 ? ' ' : '') + PJQ.app.session.project.get('zip');\n\n                        if (_.size(projectLocation) == 0)\n                            projectLocation = \"N/A\";\n\n                        let recipientGroups = _.map(this.model.contactGroups.models, function(contactGroup) {\n                            return contactGroup.get('groupName');\n                        });\n\n                        let companyName =  _.size(PJQ.app.session.project.user.get('companyName')) > 0 ? PJQ.app.session.project.user.get('companyName') : PJQ.app.session.project.user.get('contactName');\n\n                        let questions = _.map(declineQuestionSettings.get('questions'), _.bind(function(question) {\n                            question = question.replace(/\\[Project.Location\\]/g, projectLocation);\n                            question = question.replace(/\\[ProjectMessage.RecipientGroupListComma\\]/g, recipientGroups.join(', '));\n                            question = question.replace(/\\[Sender.CompanyName\\]/g, companyName);\n\n                            return question;\n\n                        }, this));\n\n                        new PJQ.views.projects.dashboard.ProjectMessageDeclineQuestionModal({\n                            questions: questions,\n                            accessKey: accessKey,\n                            response: response\n                        });\n\n                    }, this)\n                });\n            }\n        }, this));\n    },\n    renderMessageResponseButton: function (message) {\n        if (message.canChangeStatus()) {\n            message.responseButton = new PJQ.inputs.ButtonGroup({\n                el: this.getMessageElement(message).find('.message-responses'),\n                colorInactiveButtons: true,\n                buttonClasses: 'font-weight-bold',\n                separateButtons: true,\n                buttons: message.get('type') === 'PROJECT' ? this.projectResponseButtons : this.messageResponseButtons,\n                defaultValue: (_.size(message.get('status')) > 0 && message.get('status') !== 'PENDING') ? message.get('status') : null,\n                onChange: _.bind(function (value) {\n                    if (PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.DOWNLOAD_CONTACT_UPDATE_REQ) && PJQ.app.session.contact.get('updatedOn') == null) {\n                        new PJQ.views.contacts.BaseEditContactModal({\n                            alert: \"You must update your contact information before Responding.\",\n                            onSave: _.bind(function () {\n                                PJQ.app.session.contact.set('updatedOn', new Date());\n                                this.contextResponseControl.setValue(value);\n                                this.handleResponse(message, value);\n                            }, this),\n                            model: new PJQ.models.projectContacts.ProjectContact({\n                                id: PJQ.app.session.contact.id,\n                                projectId: PJQ.app.session.project.id\n                            })\n                        });\n                    } else {\n                        this.contextResponseControl.setValue(value);\n                        this.handleResponse(message, value);\n                    }\n                }, this)\n            });\n        }\n    },\n    renderContextMessageResponseButton: function (message) {\n        if (this.contextResponseControl != null) {\n            this.contextResponseControl.remove();\n        }\n        if (message != null && message.canChangeStatus()) {\n            this.contextResponseControl = new PJQ.inputs.ButtonGroup({\n                el: this.options.dashboard.inviteHeader.$('.responses-control'),\n                colorInactiveButtons: true,\n                buttonClasses: 'font-weight-bold',\n                separateButtons: true,\n                buttons: message.get('type') === 'PROJECT' ? this.projectResponseButtons : this.messageResponseButtons,\n                defaultValue: (_.size(message.get('status')) > 0 && message.get('status') !== 'PENDING') ? message.get('status') : null,\n                onChange: _.bind(function (value) {\n                    if (message.responseButton != null) {\n                        message.responseButton.setValue(value, true);\n                    }\n                }, this)\n            });\n        } else if (this.options.project.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_SUB_RESPONSE) && message && message.canChangeStatus()) {\n            this.contextResponseControl = new PJQ.inputs.ButtonGroup({\n                el: this.options.dashboard.inviteHeader.$('.responses-control'),\n                colorInactiveButtons: true,\n                buttonClasses: 'font-weight-bold',\n                separateButtons: true,\n                buttons: this.projectResponseButtons,\n                defaultValue: (_.size(this.options.project.get('bidResponse')) > 0 && this.options.project.get('bidResponse') !== 'PENDING') ? this.options.project.get('bidResponse') : null,\n                onChange: _.bind(function (value) {\n                    this.options.project.updateResponse(value, _.bind(function () {\n                        PJQ.notifications.notify.successNotify({\n                            message: 'Your response of ' + value + ' has been recorded.'\n                        });\n                        this.checkDeclinedResponseQuestion(value, message.get('accessKey'));\n                    }, this));\n                }, this)\n            });\n        } else {\n            this.options.dashboard.inviteHeader.$('.response-header').addClass('hidden');\n        }\n    },\n    stopPropagationIfSelected: function (e) {\n        if ($(e.currentTarget).attr('aria-expanded') === 'true')\n            e.stopPropagation();\n    },\n    downloadAttachment: function (e) {\n        let accessKey = $(e.currentTarget).closest('.collapse').data('accessKey').toString(),\n            cid = $(e.currentTarget).data('cid'),\n            message = this.model.messages.findWhere({accessKey: accessKey.toUpperCase()});\n\n        let attachment = message.attachments.get(cid);\n        this.options.project.downloadAttachments(attachment);\n    }\n});\n\nPJQ.views.projects.dashboard.GetGroupResponsesSubModal = PJQ.views.BaseModal.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Contact-Group-Status-Sub'),\n        minWidth: '50%',\n        onSave: _.noop,\n        contactGroups: null\n    },\n    events: {\n        'click .group-status-close': 'onClose',\n        'click .group-status-save': 'onSave'\n    },\n    beforeRender: function () {\n        this.renderData = {\n            groups: this.options.contactGroups.models\n        };\n    },\n    afterRender: function () {\n        this.projectResponseButtons = [];\n        _.each(PJQ.app.session.project.getProjectStatusList(), _.bind(function (status, index) {\n            let colorClass = 'info';\n            if (index === 0) {\n                colorClass = 'success';\n            } else if (index === 1) {\n                colorClass = 'danger';\n            }\n            if (status[1]) {\n                this.projectResponseButtons.push({\n                    label: status[0],\n                    value: status[0],\n                    colorClass: colorClass\n                });\n            }\n        }, this));\n\n        this.globalResponse = new PJQ.inputs.ButtonGroup({\n            el: this.$('.global-response'),\n            colorInactiveButtons: true,\n            buttons: this.projectResponseButtons,\n            defaultValue: null,\n            onChange: _.bind(function (value) {\n                _.each(this.options.contactGroups.models, _.bind(function (group) {\n                    group.groupResponse.setValue(value);\n                    group.set('groupStatus', value);\n                    this.setSaveButton();\n                }, this));\n            }, this)\n        });\n\n        _.each(this.options.contactGroups.models, _.bind(function (group) {\n            group.groupResponse = new PJQ.inputs.ButtonGroup({\n                el: this.getGroupElement(group).find('.group-response'),\n                colorInactiveButtons: true,\n                buttons: this.projectResponseButtons,\n                defaultValue: null,\n                onChange: _.bind(function (value) {\n                    group.set('groupStatus', value);\n                    this.setSaveButton();\n                }, this)\n            });\n        }, this));\n    },\n    getGroupElement: function (group) {\n        return $('div.group-response-container[data-group-id=\"' + group.get('groupId') + '\"]');\n    },\n    setSaveButton: function () {\n        this.$('.group-status-save').attr('disabled', false);\n        _.each(this.options.contactGroups.models, _.bind(function (group) {\n            if (_.size(group.groupResponse.getValue()) === 0)\n                this.$('.group-status-save').attr('disabled', true);\n        }, this));\n\n    },\n    onClose: function () {\n        this.removeModal();\n    },\n    onSave: function () {\n        this.options.contactGroups.accessKey = this.options.accessKey;\n        this.options.contactGroups.save({\n            success: _.bind(function (result) {\n\n                if (typeof this.options.onSave === 'function')\n                    this.options.onSave(result);\n\n                this.removeModal();\n\n            }, this)\n        });\n    }\n});\n\nPJQ.views.projects.DownloadTermsModal = PJQ.views.BaseModal.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Download-Terms'),\n        maxWidth: '600px',\n        minHeight: '500px',\n        onAccept: null\n    },\n    events: {\n        'click .terms-accept': 'onAcceptClicked',\n    },\n    renderData: function () {\n        return {\n            project: this.options.project\n        };\n    },\n    onAcceptClicked: function () {\n        this.options.project.set('downloadTermsAgreed', true);\n        if (typeof this.options.onAccept === 'function') {\n            this.options.onAccept();\n        }\n\n        if (this.options.project.preferences.hasPref(PJQ.constants.preferenceTypes.DOWNLOAD_TERMS_SIGNATURE_REQ)) {\n            new PJQ.ajax.Request({\n                endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n                    {\n                        endpoint: 'projects',\n                        value: this.options.project.id\n                    },\n                    {\n                        endpoint: 'downloadterms'\n                    },\n                    {\n                        endpoint: 'sign'\n                    }\n                ]),\n                data: {\n                    companyName: this.$('.input-terms-company-name').val(),\n                    contactName: this.$('.input-terms-contact-name').val(),\n                    title: this.$('.input-terms-title').val(),\n                    email: this.$('.input-terms-email').val()\n                },\n            }).put();\n        }\n        this.removeModal();\n    }\n});\n\nPJQ.views.projects.ProjectMessageResponseModal = PJQ.views.BaseModal.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Project-Message-Response'),\n        maxWidth: '600px',\n        minHeight: '500px',\n        onResponse: null\n    },\n    afterRender: function () {\n        let projectResponseButtons = [];\n        _.each(this.options.project.getProjectStatusList(), _.bind(function (status, index) {\n            let colorClass = 'info';\n            if (index === 0)\n                colorClass = 'success';\n            else if (index === 1)\n                colorClass = 'danger';\n\n            if (status[1]) {\n                projectResponseButtons.push({label: status[0], value: status[0], colorClass: colorClass});\n            }\n        }, this));\n        this.contextResponseControl = new PJQ.inputs.ButtonGroup({\n            el: this.$('.responses-control'),\n            colorInactiveButtons: true,\n            buttonClasses: 'font-weight-bold',\n            separateButtons: true,\n            buttons: projectResponseButtons,\n            defaultValue: (_.size(this.options.project.get('bidResponse')) > 0 && this.options.project.get('bidResponse') !== 'PENDING') ? this.options.project.get('bidResponse') : null,\n            onChange: _.bind(function (value) {\n                this.options.project.updateResponse(value, _.bind(function () {\n                    if (typeof this.options.onResponse === 'function') {\n                        this.options.onResponse(value);\n                    }\n                    this.removeModal();\n                }, this));\n            }, this)\n        });\n    }\n});\n\nPJQ.views.projects.SquareTakeoffModal = PJQ.views.BaseModal.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Square-Takeoff'),\n        maxWidth: '600px'\n    },\n    events: {\n        'click .square-video': 'watchVideo',\n        'click .square-login': 'login',\n        'click .square-register': 'register'\n    },\n    watchVideo: function () {\n        window.open('https://www.squaretakeoff.com/ref?id=6-video&url=https://squaretakeoff.com/pantera', '_blank');\n    },\n    login: function () {\n        window.open('https://www.squaretakeoff.com/ref?id=5-login&url=https://app.squaretakeoff.com', '_blank');\n    },\n    register: function () {\n        window.open('https://www.squaretakeoff.com/ref?id=7-register&url=https://squaretakeoff.com/sign-up', '_blank');\n    }\n});\n\nPJQ.views.projects.eTakeoffModal = PJQ.views.BaseModal.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-eTakeoff'),\n        maxWidth: '600px'\n    },\n    events: {\n        'click .etakeoff-download': 'download',\n        'click .etakeoff-launch': 'launch'\n    },\n    download: function () {\n        window.open('http://etakeoff.com/product/download/?partner_name=Pantera&gc_name=' + (this.options.contact ? encodeURIComponent(this.options.contact.get('companyName')) : ''), '_blank');\n    },\n    launch: function () {\n        PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\n            {\n                endpoint: 'projects',\n                value: this.options.project.id\n            },\n            {\n                endpoint: 'accesskey',\n                value: this.options.accessKey\n            },\n            {\n                endpoint: 'etakeoff'\n            }\n        ]));\n    }\n});\n\n// Project Attachments\nPJQ.views.projects.ProjectAttachments = PJQ.views.projects.Attachments.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Dashboard-Attachments'),\n        subTemplates: {\n            attachment: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Dashboard-Attachment')\n        },\n        folderColors: [\n            '#b7a1e0',\n            '#80bdff'\n        ],\n        isHideDrawings: false,\n        isHideDownload: false,\n        isHideFiles: false,\n        isHideEmptyFolders: false,\n        isHidePrivate: true,\n        onChange: _.noop,\n        selectedAttachments: null,\n        preventSelectAll: false,\n        foldersOnly: false,\n        canOrder: false\n    },\n    events: {\n        'change .input-select-attachment': 'attachmentChecked',\n        'click .attachment .pretty': 'stopPropagation',\n        'click .attachment': 'attachmentClicked',\n        'click .btn-order-selected': 'orderPrints',\n        'click .btn-download-attachment': 'downloadAttachment',\n        'click .btn-download-selected': 'downloadSelected',\n        'click .btn-download-all': 'downloadAll',\n        'click .btn-download-all-flattened': 'downloadAllFlattened',\n        'click .btn-download-all-combined': 'downloadAllCombined',\n        'click .btn-view-attachment': 'viewAttachment'\n    },\n    beforeFirstRender: function () {\n        let prefs = this.options.project.preferences;\n        if (prefs && prefs.hasPref(PJQ.constants.preferenceTypes.EXPAND_PROJECT_ATTACHMENTS)) {\n            this.options.expandAllFolders = true;\n        }\n\n        this.options.enableDrawings = !this.options.isHideDrawings && !PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_DRAWINGS);\n\n        this.options.foldersOnly = this.options.project.preferences.hasPref(PJQ.constants.preferenceTypes.RSVP_FOLDER_CHECKBOXES_ONLY) &&\n            this.options.project.get('masterUserId') !== PJQ.app.session.get('masterUserId');\n\n        this.selectedAttachments = this.options.selectedAttachments !== null ? this.options.selectedAttachments : new PJQ.collections.projects.ProjectAttachments(null, {\n            project: this.options.project\n        });\n\n        let sfOverride = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_SHARED_FOLDER_NAME_OVERRIDE);\n        if (_.size(sfOverride) > 0) {\n            this.options.sharedFolderNameOverride = sfOverride;\n        }\n\n        if (this.collection == null) {\n            this.fetchAttachments({isPrivate: !this.options.isHidePrivate});\n        }\n\n        this.options.canOrder = !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_ORDER_PRINT);\n    },\n    renderData: function () {\n        return {\n            project: this.options.project,\n            collection: this.collection,\n            isHideDownload: this.options.isHideDownload,\n            isHideFiles: this.options.isHideFiles,\n            canOrder: this.options.canOrder,\n            versions: this.versions,\n            enableDrawings: this.options.enableDrawings,\n            isFetched: this.isFetched(),\n            isDeferred: this.options.isDeferred\n        };\n    },\n    afterRender: function () {\n        if (this.isFetched()) {\n            this.renderAttachments();\n            if (!this.options.isHideDownload)\n                new PJQ.menus.ContextMenu({\n                    el: this.$('.attachments-container'),\n                    selector: '.attachment',\n                    actions: [\n                        {\n                            name: 'Download',\n                            onClick: _.bind(function (attachment) {\n                                this.downloadAttachments(attachment);\n                            }, this)\n                        }\n                    ],\n                    fetchElementData: _.bind(function (element) {\n                        return this.collection.get($(element).data('cid'));\n                    }, this),\n                    onOpen: _.bind(function (attachment) {\n                        this.getAttachmentElement(attachment).addClass('context-attachment');\n                    }, this),\n                    onClose: _.bind(function () {\n                        this.$('.context-attachment').removeClass('context-attachment');\n                    }, this)\n                });\n        }\n    },\n    renderAttachments: function () {\n        let $container = this.$('.attachments-container');\n        _.each(this.sortAttachments(this.collection.getRootSharedAttachments()), function (attachment) {\n            if (!this.options.isDeferred && ((this.options.isHideFiles && !attachment.get('isFolder')) || (this.options.isHideEmptyFolders && attachment.get('isFolder') && _.size(attachment.getFolderAttachments(true)) === 0))) {\n                return;\n            }\n            this.renderAttachment($container, attachment);\n        }, this);\n        if (!this.options.preventSelectAll && this.options.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJ_DASHBOARD_SELECT_ALL_ATTACHMENTS)) {\n            _.each(this.collection.getRootSharedAttachments(), function (attachment) {\n                let $checkbox = this.getAttachmentElement(attachment).find('.input-select-attachment');\n                $checkbox.prop('checked', true);\n                $checkbox.trigger('change');\n            }, this);\n        }\n    },\n    renderAttachment: function ($container, attachment) {\n        if (!this.options.isDeferred && this.options.isHideEmptyFolders && attachment.get('isFolder') && _.size(attachment.getFolderAttachments(true)) === 0) {\n            return;\n        }\n\n        this.renderSubTemplate(true, this.options.subTemplates.attachment, $container, {\n            model: attachment,\n            isDeferred: this.options.isDeferred,\n            foldersOnly: this.options.foldersOnly,\n            folderColor: this.options.folderColors[attachment.getDepth() % _.size(this.options.folderColors)],\n            isHideFiles: this.options.isHideFiles,\n            isExpanded: this.expandedFolders.indexOf(attachment.cid) !== -1,\n            isSelected: this.selectedAttachments.get(attachment.cid) != null,\n            options: this.options\n        }, _.bind(function ($folder) {\n            if (_.find(this.selectedAttachments.models, function (item) {\n                return item.get('entryId') === attachment.get('entryId');\n            }) != null)\n                $folder.find('.input-select-attachment').prop('checked', true);\n            else if (attachment.get('isFolder') && _.find(this.selectedAttachments.models, function (item) {\n                return item.get('entryId') === attachment.get('folderId');\n            }) != null) {\n                $folder.find('.input-select-attachment').prop('checked', true);\n            } else if (attachment.get('isFolder') && _.filter(attachment.getFolderAttachments(false, true), _.bind(function (item) {\n                return _.find(this.selectedAttachments.models, function (selectedAttachment) {\n                    return item.get('entryId') === selectedAttachment.get('entryId');\n                }) === undefined;\n            }, this)).length === 0 && _.size(attachment.getFolderAttachments(false, true)) > 0 && _.size(this.selectedAttachments.models) > 0) {\n                $folder.find('.input-select-attachment').prop('checked', true);\n            }\n\n            if (attachment.get('isFolder')) {\n                _.each(this.sortAttachments(_.filter(attachment.getFolderAttachments(), function (attachment) {\n                    return attachment.get('isFolder');\n                })), function (folderAttachment) {\n                    this.renderAttachment($folder.find('.attachment-files').first(), folderAttachment);\n                }, this);\n\n                _.each(this.sortAttachments(_.filter(attachment.getFolderAttachments(), function (attachment) {\n                    return !attachment.get('isFolder');\n                })), function (folderAttachment) {\n                    this.renderAttachment($folder.find('.attachment-files').first(), folderAttachment);\n                }, this);\n            }\n        }, this));\n    },\n    sortAttachments: function (attachments) {\n        return attachments.sort(function (a, b) {\n            let aso = a.get('sortOrder'),\n                bso = b.get('sortOrder');\n            return PJQ.helpers.sortHelpers.sortAlphaNum(aso != null ? aso.toString() : a.get('name'), bso != null ? bso.toString() : b.get('name'));\n        });\n    },\n    attachmentClicked: function (e) {\n        let $attachment = $(e.currentTarget),\n            attachment = this.collection.get($attachment.data('cid'));\n        if (attachment.get('isFolder')) {\n            this.expandFolder($attachment);\n\n            let $attachments = $attachment.siblings('.attachment-files-outer');\n            if (!$attachments.is(':visible')) {\n                $attachment.css({\n                    background: 'rgb(218, 218, 218)'\n                });\n            } else {\n                $attachment.css({\n                    background: ''\n                });\n            }\n        } else {\n            $attachment.find('.input-select-attachment').trigger('click');\n        }\n    },\n    attachmentChecked: function (e) {\n        let $checkbox = $(e.currentTarget),\n            $attachment = $checkbox.closest('.attachment'),\n            attachment = this.collection.get($attachment.data('cid')),\n            isChecked = $checkbox.prop('checked');\n\n        if (attachment.get('isFolder')) {\n            let folderAttachments = attachment.getFolderAttachments(true, this.options.isHideFiles);\n\n            // if we're operating at folder level add this folder to selection\n            if (this.options.isHideFiles) {\n                if (isChecked) {\n                    this.addSelectedAttachments([attachment]);\n                } else {\n\n                    // if we are not included, and the parent was, we need to remove it and include all our siblings.\n                    let parentFolder = attachment.getParentFolder();\n                    if (this.selectedAttachments.contains(parentFolder)) {\n                        _.each(parentFolder.getFolderAttachments(false, true), _.bind(function (folder) {\n                            this.selectedAttachments.add(folder);\n                        }, this));\n                    }\n                    this.removeSelectedAttachments([attachment]);\n                }\n\n                // we are either adding this parent (thus including all children), or removing this parent.  Either way the children do not need to be included.\n                this.removeSelectedChildAttachmentsRecursive(attachment);\n\n            } else {\n                let allAtt = _.union(folderAttachments, [attachment]);\n                if (isChecked) {\n                    this.addSelectedAttachments(allAtt);\n                } else {\n                    this.removeSelectedAttachments(allAtt);\n                }\n            }\n\n            let $folderAttachments = $checkbox.closest('.attachment').siblings('.attachment-files-outer');\n            $folderAttachments.find('.input-select-attachment').prop('checked', isChecked);\n        } else if (!this.options.isHideFiles) {\n            if (isChecked) {\n                this.addSelectedAttachments([attachment]);\n            } else {\n                this.removeSelectedAttachments([attachment]);\n            }\n        }\n\n        this.setParentCheckbox(attachment);\n\n        this.renderSelectedButton();\n    },\n    addSelectedAttachments: function (attachments) {\n        this.selectedAttachments.add(attachments);\n\n        if (typeof this.options.onChange === 'function')\n            this.options.onChange(this.selectedAttachments);\n\n        $('.print-alert').removeClass('hidden');\n    },\n    removeSelectedAttachments: function (attachments) {\n        this.selectedAttachments.remove(attachments);\n\n        if (this.options.isHideFiles) {\n            _.each(attachments, _.bind(function (attachment) {\n                this.removeSelectedParentFolderRecursive(attachment);\n            }, this));\n        }\n\n        if (typeof this.options.onChange === 'function')\n            this.options.onChange(this.selectedAttachments);\n    },\n    removeSelectedChildAttachmentsRecursive: function (folder) {\n        let attachments = folder.getFolderAttachments();\n        _.each(attachments, _.bind(function (attachment) {\n            if (attachment.get('isFolder')) {\n                this.removeSelectedAttachments(attachment);\n                this.removeSelectedChildAttachmentsRecursive(attachment);\n            }\n        }, this));\n    },\n    removeSelectedParentFolderRecursive: function (attachment) {\n        if (typeof attachment.getParentFolder !== 'function')\n            return;\n\n        let folder = attachment.getParentFolder();\n        if (folder != null && folder.id > 0) {\n            this.selectedAttachments.remove(folder);\n            this.removeSelectedParentFolderRecursive(folder);\n        }\n    },\n    renderSelectedButton: function () {\n        let selectedCount = _.size(_.filter(this.selectedAttachments.models, function (att) {\n            return !this.options.isHideEmptyFolders || !att.get('isFolder');\n        }, this));\n        this.$('.btn-download-selected').prop('disabled', !(selectedCount > 0));\n\n        if (!this.options.isDeferred) {\n            this.$('.ct-selected-attachments').text(selectedCount);\n        }\n    },\n    setParentCheckbox: function (attachment) {\n        let folder = attachment.getParentFolder();\n        if (folder != null && folder.id > 0) {\n            let hasUnselectedAttachments = this.folderHasUnselectedAttachments(folder);\n            this.getAttachmentElement(folder).find('.input-select-attachment').prop('checked', !hasUnselectedAttachments);\n\n            //set the checkbox for this folder's parent\n            //recursive until there are no more parent folders\n            this.setParentCheckbox(folder);\n        }\n    },\n    folderHasUnselectedAttachments: function (folder) {\n        let folderAttachments = folder.getFolderAttachments();\n        return _.find(folderAttachments, function (folderAttachment) {\n            if (folderAttachment.get('isFolder')) {\n                if (!this.options.isHideFiles)\n                    return this.folderHasUnselectedAttachments(folderAttachment);\n                else\n                    return this.selectedAttachments.get(folderAttachment.id) == null;\n            } else {\n                return this.selectedAttachments.get(folderAttachment.id) == null && !this.options.isHideFiles;\n            }\n        }, this) != null;\n    },\n    getAttachmentElement: function (attachment) {\n        return this.$(\".attachment[data-cid='\" + attachment.cid + \"']\");\n    },\n    downloadAttachment: function (e) {\n        e.stopPropagation();\n        let $attachment = $(e.currentTarget).closest('.attachment'),\n            attachment = this.collection.get($attachment.data('cid'));\n        this.options.project.checkDownloadRequirements(_.bind(function () {\n            this.downloadAttachments(attachment);\n        }, this));\n    },\n    downloadSelected: function () {\n        if (_.size(this.selectedAttachments) > 0) {\n            this.options.project.checkDownloadRequirements(_.bind(function () {\n                this.downloadAttachments(this.selectedAttachments);\n            }, this));\n        }\n    },\n    downloadAllCombined: function () {\n        this.downloadAll({\n            raster: true,\n            merge: true\n        })\n    },\n    downloadAllFlattened: function () {\n        this.downloadAll({\n            raster: true\n        });\n    },\n    downloadAll: function (opts = null) {\n        if (_.size(this.collection.models) > 0) {\n            this.options.project.checkDownloadRequirements(_.bind(function () {\n                this.downloadAttachments(this.collection, opts);\n            }, this));\n        }\n    },\n    viewAttachment: function (e) {\n        e.stopPropagation();\n\n        let $attachment = $(e.currentTarget).closest('.attachment'),\n            attachment = this.collection.get($attachment.data('cid'));\n        if (attachment.isImage()) {\n            PJQ.app.view.renderPhotoViewer({\n                model: attachment\n            });\n        } else if (attachment.canRender()) {\n            new PJQ.views.files.FileViewer({\n                model: attachment\n            });\n        }\n    },\n    orderPrints: function () {\n        let callback = _.bind(function () {\n            let selectedAttachments = this.selectedAttachments.where({isFolder: false});\n            new PJQ.views.files.OrderPrintsModal({\n                contact: PJQ.app.session.contact,\n                files: selectedAttachments\n            });\n        }, this);\n\n        if (PJQ.app.session.project && PJQ.app.session.project.get('status').toLowerCase() === 'busy') {\n            new PJQ.views.modals.YesNo({\n                header: \"Document(s) Processing\",\n                body: \"Please Note: New documents are currently being processed for this project.  Are you sure you want to place an order?\",\n                onYes: _.bind(function () {\n                    callback();\n                }, this)\n            });\n        } else\n            callback();\n    }\n});\n\nPJQ.views.projects.dashboard.BidPackages = PJQ.views.BaseView.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'bid-packages')\n    },\n    events: {},\n    renderData: function () {\n        return {\n            collection: this.collection\n        }\n    },\n    beforeFirstRender: function () {\n\n    },\n    afterRender: function () {\n\n    }\n});\n\nPJQ.views.projects.dashboard.ViewMessageAttachmentsModal = PJQ.views.BaseModal.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'modal-view-message-attachments'),\n        minWidth: '25%',\n        attachments: []\n    },\n    events: {\n        'click .btn-download': 'downloadFile',\n        'click .btn-download-all': 'downloadAll'\n    },\n    renderData: function () {\n        return {\n            attachments: this.options.attachments\n        }\n    },\n    downloadFile: function (e) {\n        let url = this.$(e.currentTarget).data('url');\n        PJQ.files.downloadFile(url, {\n            isEndpoint: false\n        });\n    },\n    downloadAll: function () {\n        let entryIds = _.map(this.options.attachments, function (attachment) {\n            return attachment.entryId\n        });\n        PJQ.files.queueDownload(PJQ.helpers.urlHelpers.generateEndpoint([\n            {\n                endpoint: 'files'\n            },\n            {\n                endpoint: 'downloadentryidlist'\n            }\n        ]), {entryList: entryIds});\n    }\n\n});\n\nPJQ.views.projects.dashboard.ProjectMessageDeclineQuestionModal = PJQ.views.BaseModal.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'modal-project-message-decline-question'),\n        minWidth: '40%'\n    },\n    events: {\n        'click .submit-response': 'submitResponse',\n        'change input[type=\"radio\"]': 'responseChanged'\n    },\n    renderData: function () {\n        return {\n            questions: this.options.questions,\n            response: this.options.response\n        }\n    },\n    responseChanged: function(e) {\n        this.$('.submit-response').prop('disabled', false);\n\n        if ($(e.currentTarget).prop('id') === 'question-other') {\n            this.$('.other-reason').removeClass('hidden');\n            this.$('.other-reason').focus();\n        }\n        else\n            this.$('.other-reason').addClass('hidden');\n\n    },\n    submitResponse: function() {\n        let $question = this.$('input[type=\"radio\"]:checked'), response = '';\n\n        if ($question.prop('id') === 'question-other') {\n            response = 'Other';\n\n            if (_.size(this.$('.other-reason').val()) > 0)\n                response += \": \" + this.$('.other-reason').val();\n        }\n        else\n            response = this.options.questions[$question.prop('id').substring($question.prop('id').indexOf('-')+1)];\n\n        new PJQ.ajax.Request({\n            endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n                {\n                    endpoint: 'projects',\n                    value: PJQ.app.session.project.get('projectId')\n                },\n                {\n                    endpoint: 'projectmessages'\n                },\n                {\n                    endpoint: 'accesskey',\n                    value: this.options.accessKey\n                },\n                {\n                    endpoint: 'response'\n                },\n                {\n                    endpoint: 'reason'\n                }\n            ]),\n            data: {\n                reason: response\n            }\n        }).post().done(_.bind(function (data) {\n            PJQ.notifications.notify.successNotify({\n                message: 'Response recorded successfully.'\n            });\n            this.removeModal();\n        }, this)).fail(function () {\n            PJQ.notifications.notify.errorNotify({\n                message: 'Unable to record response.'\n            });\n        });\n\n    }\n});\n","PJQ.views.projects.ProjectDetails = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Details'),\n\t\tsubTemplates: {\n\t\t\tfield: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Details-Core-Field')\n\t\t},\n\t\tlayout: {\n\t\t\tcolumns: [\n\t\t\t\t{\n\t\t\t\t\tsortOrder: 10,\n\t\t\t\t\tfields: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfield: \"projectName\",\n\t\t\t\t\t\t\tclasses: \"col-12\",\n\t\t\t\t\t\t\tsortOrder: 10\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfield: \"address1\",\n\t\t\t\t\t\t\tclasses: \"col-12\",\n\t\t\t\t\t\t\tsortOrder: 20\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfield: \"address2\",\n\t\t\t\t\t\t\tclasses: \"col-12\",\n\t\t\t\t\t\t\tsortOrder: 30\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfield: \"location\",\n\t\t\t\t\t\t\tclasses: \"col-12\",\n\t\t\t\t\t\t\tsortOrder: 40\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsortOrder: 20,\n\t\t\t\t\tfields: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfield: \"bidsDue\",\n\t\t\t\t\t\t\tclasses: \"col-12\",\n\t\t\t\t\t\t\tsortOrder: 10\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfield: \"user1\",\n\t\t\t\t\t\t\tclasses: \"col-12\",\n\t\t\t\t\t\t\tsortOrder: 20\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfield: \"user2\",\n\t\t\t\t\t\t\tclasses: \"col-12\",\n\t\t\t\t\t\t\tsortOrder: 30\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfield: \"notes\",\n\t\t\t\t\tclasses: \"col-12\",\n\t\t\t\t\tsortOrder: 40\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfield: \"startDate\",\n\t\t\t\t\tsortOrder: 50\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfield: \"finishDate\",\n\t\t\t\t\tsortOrder: 60\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\tevents: {\n\t\t'click .btn-project-edit-cancel': 'cancelEdit',\n\t\t'click .btn-project-save': 'save',\n\t\t'click .btn-push-erp': 'pushERP',\n\t\t'click .btn-undo-push-erp': 'undoPushERP',\n\t\t'click .btn-link-erp': 'linkERP',\n\t\t'click .btn-unlink-erp': 'unlinkERP',\n\t\t'click .btn-project-export': 'exportPDF',\n\t\t'change .input-project-nda': 'ndaRequiredChanged',\n\t\t'click .btn-edit-project-nda': 'editProjectNDA',\n\t\t'change .input-details-admin-only': 'detailsAdminOnlyChanged'\n\t},\n\tbeforeFirstRender: function () {\n\t\tif (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_PROJECT_STATUS_ID) &&\n\t\t\t(_.size(_.filter(this.options.layout.columns, function (column) {\n\t\t\t\treturn column.field === \"projectStatusId\"\n\t\t\t})) === 0)) {\n\t\t\tthis.options.layout.columns.push({\n\t\t\t\tfield: \"projectStatusId\",\n\t\t\t\tsortOrder: 70\n\t\t\t});\n\t\t}\n\n\t\tthis.options.canEdit = PJQ.app.session.project.get('masterUserId') === PJQ.app.session.get('masterUserId')\n\t\t\t&& !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_PROJECT_HOME_READONLY)\n\t\t\t&& PJQ.app.session.project.get('status') !== 'ARCHIVE' && PJQ.app.session.project.hasPermission('base.canEdit');\n\n\t\tthis.mergePortalLayout();\n\t\tif (this.options.canEdit) {\n\t\t\tif (PJQ.helpers.objectHelpers.checkNested(PJQ.app, 'portal', 'customization', 'project', 'details')) {\n\t\t\t\tlet defs = PJQ.app.portal.customization.project.details.defaults;\n\t\t\t\tif (defs != null) {\n\t\t\t\t\tthis.portalDefaults = defs;\n\t\t\t\t\tthis.triggerPortalDefaults();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.options.startEndHide = PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.START_END_HIDE);\n\n\t\tthis.listenTo(this.model, 'sync', this.render);\n\t\tthis.listenTo(this.model, 'change', _.bind(function (e) {\n\t\t\tthis.$('.btn-project-edit-cancel').add('.btn-project-save').prop('disabled', false);\n\t\t\tthis.$('.btn-project-export').prop('disabled', true);\n\t\t}, this));\n\n\t\tPJQ.app.session.fetchProjectStatuses(_.bind(function(statuses) {\n\t\t\tthis.projectStatuses = statuses;\n\n\t\t\tPJQ.app.session.fetchERPIntegration(_.bind(function (erp) {\n\t\t\t\tthis.erpIntegration = erp;\n\t\t\t\tif(this.erpIntegration != null){\n\t\t\t\t\tthis.model.fetchERPObject(_.bind(function(){\n\t\t\t\t\t\tthis.render();\n\t\t\t\t\t}, this));\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tthis.render();\n\t\t\t\t}\n\t\t\t}, this));\n\t\t}, this));\n\t\treturn false;\n\t},\n\trenderERP: function () {\n\t\tif (this.erpIntegration == null || this.model == null) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet pushSupported = this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_PROJECT),\n\t\t\tlinkSupported = this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.LINK_PROJECT),\n\t\t\tunlinkSupported = this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.UNLINK_PROJECT);\n\t\tPJQ.helpers.erp.renderERPButtons(this.$('.erp-sync'), {\n\t\t\tpushSupported: pushSupported,\n\t\t\tunlinkSupported: unlinkSupported,\n\t\t\tlinkSupported: linkSupported,\n\t\t\tcanPush: this.options.canEdit,\n\t\t\tdisablePushReason: null,\n\t\t\tstatus: this.model.erpSyncStatus()\n\t\t});\n\t},\n\tpushERP: function () {\n\t\tif (!this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_PROJECT)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.save((success) => {\n\t\t\tif (!success) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.erpIntegration.pushProject(this.model, () => {\n\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\tmessage: 'Project pushed to ERP'\n\t\t\t\t});\n\t\t\t\tthis.render();\n\t\t\t});\n\t\t});\n\t},\n\tundoPushERP: function () {\n\t\tif (this.model.erpSyncStatus() !== PJQ.constants.integrations.erp.syncStatuses.REVIEWING) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.erpIntegration.undoPush(this.model, () => {\n\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\tmessage: 'Project removed from ERP approval'\n\t\t\t});\n\t\t\tthis.render();\n\t\t});\n\t},\n\tlinkERP: function () {\n\t\tif (!this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.LINK_PROJECT)) {\n\t\t\treturn;\n\t\t}\n\n\t\tnew PJQ.integrations.models.LinkERPProjectModal({\n\t\t\tproject: PJQ.app.session.project,\n\t\t\tonSave: _.bind(function (erpProject) {\n\t\t\t\tif (erpProject.isERPSynced()) {\n\t\t\t\t\tthis.render();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t});\n\t},\n\tunlinkERP: function () {\n\t\tif (!this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.UNLINK_PROJECT)) {\n\t\t\treturn;\n\t\t}\n\n\t\tnew PJQ.views.modals.YesNo({\n\t\t\theader: \"Unlink from ERP\",\n\t\t\tbody: \"Are you sure you want to unlink this Project from your ERP system?\",\n\t\t\tonYes: () => {\n\t\t\t\tlet loader = new PJQ.Loader(this.$('.project-details'));\n\t\t\t\tthis.erpIntegration.unlinkProject(this.model, () => {\n\t\t\t\t\tloader.remove();\n\t\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\t\tmessage: 'Project unlinked from ERP'\n\t\t\t\t\t});\n\t\t\t\t\tthis.render();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t},\n\tmergePortalLayout: function () {\n\t\tlet layout = null;\n\t\tif (PJQ.helpers.objectHelpers.checkNested(PJQ.app, 'portal', 'customization', 'project', 'details')) {\n\t\t\tlayout = PJQ.app.portal.customization.project.details.layout;\n\t\t}\n\n\t\tlet findPortalLayoutField = _.bind(function (searchField) {\n\t\t\tlet result = null;\n\t\t\t_.each(layout.columns, function (column) {\n\t\t\t\tif (_.size(column.fields) > 0) {\n\t\t\t\t\tresult = result || _.find(column.fields, function (field) {\n\t\t\t\t\t\treturn field.field === searchField.field;\n\t\t\t\t\t});\n\t\t\t\t} else if (column.field != null && column.field === searchField.field) {\n\t\t\t\t\tresult = column;\n\t\t\t\t}\n\t\t\t}, this);\n\t\t\treturn result;\n\t\t}, this);\n\n\t\tif (layout != null) {\n\t\t\t_.each(this.options.layout.columns, function (column) {\n\t\t\t\tif (_.size(column.fields) > 0) {\n\t\t\t\t\tlet col = _.defaults({fields: []}, column);\n\t\t\t\t\t_.each(column.fields, function (field) {\n\t\t\t\t\t\tif (findPortalLayoutField(field) == null) {\n\t\t\t\t\t\t\tcol.fields.push(field);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tif (_.size(col.fields) > 0) {\n\t\t\t\t\t\tlayout.columns.push(col);\n\t\t\t\t\t}\n\t\t\t\t} else if (column.field != null) {\n\t\t\t\t\tif (findPortalLayoutField(column) == null) {\n\t\t\t\t\t\tlayout.columns.push(column);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tlayout = this.options.layout;\n\t\t}\n\n\t\t//add custom field columns to template that were not defined in the custom portal details layout\n\t\tlet nextSort = _.max(layout.columns, function (column) {\n\t\t\tif (_.size(column.fields) > 0) {\n\t\t\t\treturn _.max(column.fields, function (field) {\n\t\t\t\t\treturn field.sortOrder != null ? field.sortOrder : 0;\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn column.sortOrder != null ? column.sortOrder : 0;\n\t\t}).sortOrder;\n\t\t_.each(this.model.customFields.models, function (customField) {\n\t\t\tlet cfId = 'cf_' + customField.id.toString(),\n\t\t\t\tcf = {\n\t\t\t\t\tfield: cfId,\n\t\t\t\t\tsortOrder: nextSort\n\t\t\t\t};\n\t\t\tif (findPortalLayoutField(cf) == null) {\n\t\t\t\tlayout.columns.push(cf);\n\t\t\t\tnextSort += 10;\n\t\t\t}\n\t\t});\n\t\tthis.options.layout = layout;\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\tmodel: this.model,\n\t\t\tsubTemplates: this.options.subTemplates,\n\t\t\tlayout: this.options.layout,\n\t\t\tlayoutOptions: {\n\t\t\t\tnotesHide: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_NOTES_HIDDEN),\n\t\t\t\tisNotesRequired: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_NOTES_REQUIRED),\n\t\t\t\tisUser2Required: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_USER_2_REQUIRED),\n\t\t\t\tisCityRequired: this.isCityRequired(),\n\t\t\t\tisStateRequired: this.isStateRequired(),\n\t\t\t\tisZipRequired: this.isZipRequired(),\n\t\t\t\tisBidDueDateRequired: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_BID_DUE_DATE_REQUIRED),\n\t\t\t\tnotesLabel: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_NOTES_LABEL) ? PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_NOTES_LABEL) : 'Notes',\n\t\t\t\tresponseDueLabel: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.RESPONSE_DUE_LABEL) ? PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.RESPONSE_DUE_LABEL) : 'Response Due',\n\t\t\t\tstartDateLabel: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_START_LABEL) ? PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_START_LABEL) : 'Start Date',\n\t\t\t\tfinishDateLabel: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_FINISH_LABEL) ? PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_FINISH_LABEL) : 'Finish Date',\n\t\t\t\tuser1Label: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_USER_1_LABEL) ? PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_USER_1_LABEL) : 'Project Contact',\n\t\t\t\tuser2Label: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_USER_2_LABEL) ? PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_USER_2_LABEL) : 'Project Contact 2',\n\t\t\t\tuser2Hide: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_USER_2_HIDE),\n\t\t\t\tstartEndHide: this.options.startEndHide\n\t\t\t},\n\t\t\terpIntegration: this.erpIntegration,\n\t\t\tdefaultNDAChecked: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_NDA_CHECKED_DEFAULT),\n\t\t\tisEdit: this.options.canEdit,\n\t\t\tcanExport: this.options.canEdit && PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_DETAILS_EXPORT)\n\t\t};\n\t},\n\ttriggerPortalDefaults: function (changedId = null) {\n\t\tif (this.portalDefaults == null) {\n\t\t\treturn;\n\t\t}\n\n\t\t_.each(this.portalDefaults, function (def, id) {\n\t\t\tif ((def.reference != null && changedId == null) || (changedId != null && changedId !== def.reference && changedId !== def.timeReference) || (id === 'bidsDue' && this.model.get('responseDueDate') === 'ASAP')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet refValue = null,\n\t\t\t\ttimeRefValue = null;\n\t\t\tif (def.reference != null) {\n\t\t\t\tif (def.reference.indexOf('cf_') !== -1) {\n\t\t\t\t\tlet refCfId = parseInt(def.reference.replace('cf_', '')),\n\t\t\t\t\t\trefCf = this.model.customFields.get(refCfId),\n\t\t\t\t\t\trefFieldValue = _.findWhere(this.model.get('customFields'), {id: refCfId});\n\t\t\t\t\tif (refFieldValue != null) {\n\t\t\t\t\t\tif (refCf.get('fieldType').toLowerCase() === 'choice') {\n\t\t\t\t\t\t\tlet selChoice = refCf.choices.get(refFieldValue.value);\n\t\t\t\t\t\t\tif (selChoice != null) {\n\t\t\t\t\t\t\t\trefValue = selChoice.get('choiceName');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trefValue = refFieldValue.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\trefValue = this.model.get(def.reference);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (def.timeReference != null) {\n\t\t\t\tif (def.timeReference.indexOf('cf_') !== -1) {\n\t\t\t\t\tlet timeRefCfId = parseInt(def.timeReference.replace('cf_', '')),\n\t\t\t\t\t\ttimeRefCf = this.model.customFields.get(timeRefCfId),\n\t\t\t\t\t\ttimeRefFieldValue = _.findWhere(this.model.get('customFields'), {id: timeRefCfId});\n\t\t\t\t\tif (timeRefFieldValue != null) {\n\t\t\t\t\t\ttimeRefValue = timeRefFieldValue.value;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (timeRefCf.get('fieldType').toLowerCase() === 'choice') {\n\t\t\t\t\t\tlet selChoice = timeRefCf.choices.get(timeRefFieldValue.value);\n\t\t\t\t\t\tif (selChoice != null) {\n\t\t\t\t\t\t\ttimeRefValue = selChoice.get('choiceName');\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttimeRefValue = timeRefFieldValue.value;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttimeRefValue = this.model.get(def.reference);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet newValue = undefined;\n\t\t\tif (def.match != null) {\n\t\t\t\tlet match = def.match[refValue == null ? 'null' : refValue];\n\t\t\t\tif (typeof match === 'undefined') {\n\t\t\t\t\tif (refValue != null && _.size(refValue.toString()) > 0) {\n\t\t\t\t\t\tmatch = def.match[\"_notEmpty\"];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmatch = def.match[\"_empty\"];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (match != null) {\n\t\t\t\t\tif (match.from === 'today') {\n\t\t\t\t\t\tif (def.offset != null && def.offset !== 0) {\n\t\t\t\t\t\t\tnewValue = PJQ.helpers.dateHelpers.getNewDateAddDays(new Date(), def.offset);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnewValue = new Date();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (typeof match.value !== 'undefined') {\n\t\t\t\t\t\tnewValue = match.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch (def.type) {\n\t\t\t\t\tcase 'DATE':\n\t\t\t\t\tcase 'DATETIME':\n\t\t\t\t\t\tif (def.offset != null) {\n\t\t\t\t\t\t\tif (def.reference != null && refValue == null) {\n\t\t\t\t\t\t\t\tnewValue = null;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (def.defaultTime != null) {\n\t\t\t\t\t\t\t\t\tlet dt = new Date(PJQ.helpers.dateHelpers.getDateString(refValue ? new Date(refValue) : new Date(), PJQ.helpers.dateHelpers.dateFormats.DATE, true) + ' ' + (timeRefValue ? timeRefValue : def.defaultTime));\n\t\t\t\t\t\t\t\t\tnewValue = PJQ.helpers.dateHelpers.getNewDateAddDays(dt, def.offset, def.weekdaysOnly === true);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewValue = PJQ.helpers.dateHelpers.getNewDateAddDays(refValue ? new Date(refValue + (timeRefValue ? (' ' + timeRefValue) : '')) : new Date(), def.offset, def.weekdaysOnly === true);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (def.minOffset != null && newValue.getTime() < (new Date()).getTime()) {\n\t\t\t\t\t\t\t\t\tnewValue = PJQ.helpers.dateHelpers.getNewDateAddDays(new Date(), def.minOffset, def.weekdaysOnly === true);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (typeof def.value !== 'undefined') {\n\t\t\t\t\t\t\tnewValue = def.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'TEXT':\n\t\t\t\t\t\tnewValue = refValue;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof newValue == 'undefined')\n\t\t\t\treturn;\n\n\t\t\tif (def.type === 'DATE' && newValue != null && id.toLowerCase() !== 'startdate' && id.toLowerCase() !== 'enddate') {\n\t\t\t\tnewValue = PJQ.helpers.dateHelpers.getDateString(newValue, PJQ.helpers.dateHelpers.dateFormats.DATE);\n\t\t\t}\n\n\t\t\tif (id.indexOf('cf_') !== -1) {\n\t\t\t\tlet cfId = parseInt(id.replace('cf_', '')),\n\t\t\t\t\tfieldValue = _.findWhere(this.model.get('customFields'), {id: cfId});\n\n\t\t\t\tif (fieldValue.value != null && def.reference == null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfieldValue.value = newValue;\n\t\t\t\tif (this.projectCustomFieldsForm) {\n\t\t\t\t\tthis.projectCustomFieldsForm.setValue(cfId, newValue);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.model.set(id, newValue);\n\t\t\t\tif (id.toLowerCase() === 'bidsdue' && this.dueDatePicker != null) {\n\t\t\t\t\tthis.dueDatePicker.setValue(newValue);\n\t\t\t\t} else if (id.toLowerCase() === 'startdate' && this.startDatePicker != null) {\n\t\t\t\t\tthis.startDatePicker.setValue(newValue);\n\t\t\t\t} else if (id.toLowerCase() === 'enddate' && this.endDatePicker != null) {\n\t\t\t\t\tthis.endDatePicker.setValue(newValue);\n\t\t\t\t} else if (this.coreBinder != null) {\n\t\t\t\t\tthis.coreBinder.setValue(id, newValue);\n\t\t\t\t}\n\t\t\t}\n\t\t}, this);\n\t},\n\tafterRender: function () {\n\t\tif (this.projectStatuses == null) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.renderERP();\n\n\t\tthis.projectCustomFieldsForm = new PJQ.views.customFields.CustomFieldsForm({\n\t\t\tel: this.$el,\n\t\t\tshouldRenderTemplate: false,\n\t\t\tcollection: this.model.customFields,\n\t\t\tfieldValues: this.model.get('customFields'),\n\t\t\tisEdit: this.options.canEdit,\n\t\t\tonChange: _.bind(function (fieldId, value) {\n\t\t\t\tthis.triggerPortalDefaults('cf_' + fieldId.toString());\n\t\t\t\tthis.$('.btn-project-edit-cancel').add('.btn-project-save').prop('disabled', false);\n\t\t\t\tthis.$('.btn-project-export').prop('disabled', true);\n\t\t\t}, this)\n\t\t});\n\n\t\tthis.coreBinder = new PJQ.Binder(this.$('.project-details-form'), this.model, {\n\t\t\twatchElements: [\n\t\t\t\t'input',\n\t\t\t\t'textarea'\n\t\t\t]\n\t\t});\n\n\t\tlet statePicker = new PJQ.inputs.StatePicker({\n\t\t\tel: this.$('select.state'),\n\t\t\tcountry: this.model.get('country') ? this.model.get('country').toUpperCase() : null,\n\t\t\tdefaultValue: this.model.get('state') ? this.model.get('state').toUpperCase() : null,\n\t\t\tonChange: _.bind(function (value) {\n\t\t\t\tthis.model.set('state', value);\n\t\t\t}, this)\n\t\t});\n\n\t\tif (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_DOCUMENT_CLERK) && this.options.canEdit) {\n\t\t\tnew PJQ.inputs.Selectpicker({\n\t\t\t\tel: this.$('select.project-status'),\n\t\t\t\tonChange: _.bind(function (value) {\n\t\t\t\t\tthis.model.set('status', value);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\n\t\tnew PJQ.inputs.CountryPicker({\n\t\t\tel: this.$('select.country'),\n\t\t\tdefaultValue: this.model.get('country') ? this.model.get('country').toUpperCase() : null,\n\t\t\tstatePicker: statePicker,\n\t\t\tzipInput: this.$('.zip'),\n\t\t\tonChange: _.bind(function (value) {\n\t\t\t\tthis.model.set('country', value);\n\t\t\t}, this)\n\t\t});\n\n\t\tif (this.model.get('responseDueDate') === 'ASAP') {\n\t\t\tthis.$('.response-due-asap').prop('checked', true);\n\t\t\tthis.$('.input-response-due').prop('disabled', true);\n\t\t}\n\n\t\tthis.$('.response-due-asap').on('click', _.bind(function () {\n\t\t\tif (this.$('.response-due-asap').prop('checked')) {\n\t\t\t\tthis.model.set('bidsDue', null);\n\t\t\t\tthis.model.set('responseDueDate', 'ASAP');\n\t\t\t\tthis.$('.input-response-due').val('').prop('disabled', true);\n\t\t\t} else {\n\t\t\t\tthis.model.set('responseDueDate', '');\n\t\t\t\tthis.$('.input-response-due').prop('disabled', false);\n\t\t\t\tthis.triggerPortalDefaults('bidsdue');\n\t\t\t}\n\t\t}, this));\n\n\t\tthis.dueDatePicker = new PJQ.inputs.Datepicker({\n\t\t\tel: this.$('.input-response-due'),\n\t\t\tdatepickerOptions: {\n\t\t\t\tdefaultDate: this.model.get('bidsDue') ? this.model.get('bidsDue') : null\n\t\t\t},\n\t\t\tonChange: _.bind(function (newTime) {\n\t\t\t\tthis.model.set('bidsDue', newTime);\n\t\t\t\tthis.model.set('responseDueDate', PJQ.helpers.dateHelpers.getDateString(this.model.get('bidsDue'), PJQ.helpers.dateHelpers.dateFormats.DATE, false));\n\t\t\t\tthis.triggerPortalDefaults('bidsdue');\n\t\t\t}, this),\n\t\t\tonShow: _.bind(function (context) {\n\t\t\t\tif (!$(context.datetimepicker).data('DateTimePicker').date() && PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_DEFAULT_BID_DUE_TIME) && PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_DEFAULT_BID_DUE_TIME_AMPM)) {\n\t\t\t\t\tlet tempDate = new Date(),\n\t\t\t\t\t\ttimeParts = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_DEFAULT_BID_DUE_TIME).toString().split(':'),\n\t\t\t\t\t\thours = parseInt(timeParts[0]), minutes = parseInt(timeParts[1]);\n\t\t\t\t\tif (PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_DEFAULT_BID_DUE_TIME_AMPM) === 'PM' && hours !== 12 || hours === 12 && PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_DEFAULT_BID_DUE_TIME_AMPM) === 'AM')\n\t\t\t\t\t\thours += 12;\n\t\t\t\t\t$(context.datetimepicker).data('DateTimePicker').date(new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate(), hours, minutes, 0, 0));\n\t\t\t\t}\n\t\t\t}, this)\n\t\t});\n\n\t\tif (!this.options.startEndHide) {\n\t\t\tthis.startDatePicker = new PJQ.inputs.Datepicker({\n\t\t\t\tel: this.$('.input-project-start'),\n\t\t\t\tdatepickerOptions: {\n\t\t\t\t\tformat: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\n\t\t\t\t\tdefaultDate: this.model.get('startDate') != null ? PJQ.helpers.dateHelpers.parseDateString(this.model.get('startDate'), false) : null\n\t\t\t\t},\n\t\t\t\tonChange: _.bind(function (newTime) {\n\t\t\t\t\tthis.model.set('startDate', newTime);\n\t\t\t\t}, this)\n\t\t\t});\n\n\t\t\tthis.endDatePicker = new PJQ.inputs.Datepicker({\n\t\t\t\tel: this.$('.input-project-end'),\n\t\t\t\tdatepickerOptions: {\n\t\t\t\t\tformat: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\n\t\t\t\t\tdefaultDate: this.model.get('endDate') != null ? PJQ.helpers.dateHelpers.parseDateString(this.model.get('endDate'), false) : null\n\t\t\t\t},\n\t\t\t\tonChange: _.bind(function (newTime) {\n\t\t\t\t\tthis.model.set('endDate', newTime);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\n\t\tif (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_PROJECT_STATUS_ID)) {\n\t\t\tthis.projectStatusIdSelectPicker = new PJQ.inputs.Selectpicker({\n\t\t\t\tel: this.$('.project-status-id'),\n\t\t\t\tisIntChoices: true,\n\t\t\t\tdefaultValue: this.model.get('projectStatusId') ? this.model.get('projectStatusId') : PJQ.app.session.projectStatuses.getDefault().id,\n\t\t\t\tonChange: _.bind(function (value) {\n\t\t\t\t\tthis.model.set('projectStatusId', value)\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\n\t\tthis.userInput = new PJQ.views.contacts.ContactsSelectInput({\n\t\t\tel: this.$('.project-contact'),\n\t\t\tcontext: PJQ.constants.contacts.contexts.USERS,\n\t\t\tselectedContact: this.model.user,\n\t\t\tisSingleChoice: true,\n\t\t\temptyNotice: \"No User Selected\",\n\t\t\tisReadOnly: !this.options.canEdit,\n\t\t\tonAdd: _.bind(function (contacts) {\n\t\t\t\tthis.model.set('user', contacts);\n\t\t\t}, this),\n\t\t\tonDelete: _.bind(function () {\n\t\t\t\tthis.model.set('user', null);\n\t\t\t}, this)\n\t\t});\n\n\t\tthis.user2Input = new PJQ.views.contacts.ContactsSelectInput({\n\t\t\tel: this.$('.project-contact2'),\n\t\t\tcontext: PJQ.constants.contacts.contexts.USERS,\n\t\t\tselectedContact: this.model.user2,\n\t\t\tisSingleChoice: true,\n\t\t\temptyNotice: \"No User Selected\",\n\t\t\tisReadOnly: !this.options.canEdit,\n\t\t\tonAdd: _.bind(function (contacts) {\n\t\t\t\tthis.model.set('user2', contacts);\n\t\t\t}, this),\n\t\t\tonDelete: _.bind(function () {\n\t\t\t\tthis.model.set('user2', null);\n\t\t\t}, this)\n\t\t});\n\n\t\t// show a read-only version of scopes when if they are enabled and a sub is viewing the page.\n\t\tif (PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_SCOPES) && PJQ.app.session.project.get('masterUserId') !== PJQ.app.session.get('masterUserId')) {\n\t\t\tnew PJQ.views.projects.ProjectScopes({\n\t\t\t\tel: this.$('.project-scopes')\n\t\t\t});\n\t\t}\n\t},\n\tndaRequiredChanged: function () {\n\t\tlet hasNDA = this.$('.input-project-nda').prop('checked');\n\t\tif (hasNDA) {\n\t\t\tthis.editProjectNDA();\n\t\t} else {\n\t\t\tthis.model.set('hasNDA', false, {\n\t\t\t\tsilent: true\n\t\t\t});\n\t\t\tthis.renderNDARequired();\n\t\t\tnew PJQ.models.projects.ProjectNDA({\n\t\t\t\tndaId: -1,\n\t\t\t\tproject: this.model\n\t\t\t}).destroy({\n\t\t\t\tsuccess: function () {\n\t\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\t\tmessage: \"NDA has been disabled for this project\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\trenderNDARequired: function () {\n\t\tlet hasNDA = this.model.get('hasNDA');\n\t\tthis.$('.input-project-nda').prop('checked', hasNDA);\n\t\tif (hasNDA) {\n\t\t\tthis.$('.btn-edit-project-nda').removeClass('hidden');\n\t\t} else {\n\t\t\tthis.$('.btn-edit-project-nda').addClass('hidden');\n\t\t}\n\t},\n\teditProjectNDA: function () {\n\t\tnew PJQ.views.projects.EditProjectNDAModal({\n\t\t\tproject: this.model,\n\t\t\tonSave: _.bind(function () {\n\t\t\t\tthis.renderNDARequired();\n\t\t\t}, this),\n\t\t\tonCancel: _.bind(function () {\n\t\t\t\tthis.renderNDARequired();\n\t\t\t}, this)\n\t\t});\n\t},\n\tdetailsAdminOnlyChanged: function () {\n\t\tlet isDetailsAdminOnly = this.$('.input-details-admin-only').prop('checked');\n\t\tthis.model.set('isDetailsAdminOnly', isDetailsAdminOnly);\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\tvalue: this.model.id\n\t\t\t\t}\n\t\t\t], [\n\t\t\t\t{\n\t\t\t\t\tparameter: 'isDetailsAdminOnly',\n\t\t\t\t\tvalue: isDetailsAdminOnly\n\t\t\t\t}\n\t\t\t])\n\t\t}).patch().done(_.bind(function () {\n\t\t\tlet alertMessage;\n\t\t\tif (isDetailsAdminOnly) {\n\t\t\t\talertMessage = \"Project details are now hidden from non admins\";\n\t\t\t} else {\n\t\t\t\talertMessage = \"Project details are now visible to non admins\";\n\t\t\t}\n\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\tmessage: alertMessage\n\t\t\t});\n\t\t}, this));\n\t},\n\texportPDF: function () {\n\t\t// old export\n\t\t// PanteraScript.PanteraScriptService.GenerateExportNew(PJQ.app.session.id, 'project', 'pdf', parseInt(PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_DETAILS_EXPORT)), '', function(response) {\n\t\t// \tlet rr = jQuery.parseJSON(response);\n\t\t// \tPJQ.files.downloadFile(rr.DownloadURL, {\n\t\t// \t\tisEndpoint: false\n\t\t// \t});\n\t\t// }, null);\n\n\t\t// New JSReport Export\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\tvalue: this.model.get('projectId')\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'details'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'export'\n\t\t\t\t}\n\t\t\t], [\n\t\t\t\t{\n\t\t\t\t\tparameter: 'timeZone',\n\t\t\t\t\tvalue: Intl.DateTimeFormat().resolvedOptions().timeZone\n\t\t\t\t}\n\t\t\t]),\n\t\t\tdata: {}\n\t\t}).post().done(function (response) {\n\t\t\tPJQ.files.handleDownload(response);\n\t\t});\n\t},\n\tcancelEdit: function () {\n\t\tif (this.model.get('status') === 'NEW') {\n\t\t\tPJQ.app.router.navigate('projects', {\n\t\t\t\ttrigger: true,\n\t\t\t\treplace: true\n\t\t\t});\n\t\t} else {\n\t\t\tthis.model.fetch();\n\t\t\tthis.$('.btn-project-edit-cancel').add('.btn-project-save').prop('disabled', true);\n\t\t\tthis.$('.btn-project-export').prop('disabled', false);\n\t\t}\n\t},\n\tsave: function (callback = null) {\n\t\tlet errors = false;\n\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.project-name'), true);\n\t\tif (this.model.get('projectName').trim().length === 0) {\n\t\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.project-name'), false);\n\t\t\terrors = true;\n\t\t}\n\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.input-response-due'), true);\n\t\tif (PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_BID_DUE_DATE_REQUIRED) && this.model.get('bidsDue') === null && !this.$('.response-due-asap').prop('checked')) {\n\t\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.input-response-due'), false);\n\t\t\terrors = true;\n\t\t}\n\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.city'), true);\n\t\tif (this.isCityRequired() && this.model.get('city').trim().length === 0) {\n\t\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.city'), false);\n\t\t\terrors = true;\n\t\t}\n\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('select.state'), true);\n\t\tif (this.isStateRequired() && this.model.get('state').trim().length === 0) {\n\t\t\tPJQ.helpers.inputHelpers.setInputError(this.$('select.state'), false);\n\t\t\terrors = true;\n\t\t}\n\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.zip'), true);\n\t\tif (this.isZipRequired() && this.model.get('zip').trim().length === 0) {\n\t\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.zip'), false);\n\t\t\terrors = true;\n\t\t}\n\n\t\tif (!this.userInput.validate()) {\n\t\t\terrors = true;\n\t\t}\n\n\t\tif (PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_USER_2_REQUIRED)) {\n\t\t\tif (!this.user2Input.validate()) {\n\t\t\t\terrors = true;\n\t\t\t}\n\t\t}\n\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.input-project-start'), true);\n\t\tif (PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.REQUIRE_PROJECT_START_FINISH) && !this.model.get('startDate')) {\n\t\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.input-project-start'), false);\n\t\t\terrors = true;\n\t\t}\n\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.input-project-end'), true);\n\t\tif (PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.REQUIRE_PROJECT_START_FINISH) && !this.model.get('endDate')) {\n\t\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.input-project-end'), false);\n\t\t\terrors = true;\n\t\t}\n\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.project-notes'), true);\n\t\tif (PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_NOTES_REQUIRED) && this.model.get('notes').trim().length === 0) {\n\t\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.project-notes'), false);\n\t\t\terrors = true;\n\t\t}\n\n\t\tif (!this.projectCustomFieldsForm.validate())\n\t\t\terrors = true;\n\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.project-status-id'), true);\n\t\tif (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_STATUS_NON_DEFAULT_REQUIRED)) {\n\t\t\t_.each(PJQ.app.session.projectStatuses.models, _.bind(function (item) {\n\t\t\t\tif (item.get('projectStatusId') === this.model.get('projectStatusId') && item.get('isDefault')) {\n\t\t\t\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.project-status-id'), false);\n\t\t\t\t\terrors = true;\n\t\t\t\t}\n\t\t\t}, this));\n\t\t}\n\n\n\t\tif (errors) {\n\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\tmessage: 'One or more fields are not filled out correctly.  Please review the form.'\n\t\t\t});\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.$('.btn-project-edit-cancel').add('.btn-project-save').prop('disabled', true);\n\t\tthis.$('.btn-project-export').prop('disabled', false);\n\n\t\tlet wasNew = this.model.get('status') === 'NEW';\n\t\tthis.model.save(null, {\n\t\t\tnotify: true,\n\t\t\tsuccess: _.bind(function () {\n\t\t\t\tif (wasNew) {\n\t\t\t\t\tPJQ.app.router.navigate('projects/' + PJQ.app.session.project.id + \"/dashboard\", {\n\t\t\t\t\t\ttrigger: true\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthis.renderERP();\n\n\t\t\t\tif (typeof callback === 'function') {\n\t\t\t\t\tcallback(true);\n\t\t\t\t}\n\t\t\t}, this)\n\t\t});\n\t},\n\tisCityRequired: function () {\n\t\tlet prefs = PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_DEFAULT_PRIVATE_FOLDERS) ? PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_DEFAULT_PRIVATE_FOLDERS) : '' +\n\t\tPJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_DEFAULT_PUBLIC_FOLDERS) ? PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_DEFAULT_PUBLIC_FOLDERS) : '';\n\n\t\treturn prefs != null && prefs.indexOf('[Project.City]') !== -1;\n\t},\n\tisStateRequired: function () {\n\t\tlet prefs = PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_DEFAULT_PRIVATE_FOLDERS) ? PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_DEFAULT_PRIVATE_FOLDERS) : '' +\n\t\tPJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_DEFAULT_PUBLIC_FOLDERS) ? PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_DEFAULT_PUBLIC_FOLDERS) : '';\n\n\t\treturn prefs != null && prefs.indexOf('[Project.State]') !== -1;\n\t},\n\tisZipRequired: function () {\n\t\treturn PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_ZIP_REQUIRED);\n\t}\n});\n\nPJQ.views.projects.ProjectMapModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Project-Map'),\n\t\twidth: '800px',\n\t\tminWidth: '800px'\n\t},\n\tevents: {\n\t\t'click .map-recenter': 'mapRecenter'\n\t},\n\tbeforeModalCreated: function () {\n\t\tthis.options.project = this.options.project ? this.options.project : PJQ.app.session.project;\n\t},\n\tbeforeRender: function () {\n\t\tthis.renderData = {};\n\t},\n\tmapRecenter: function () {\n\t\tthis.map.setCenter(this.myLatLng);\n\t},\n\tafterRender: function () {\n\t\tlet address = PJQ.app.session.project.get('address1') + ' ' + PJQ.app.session.project.get('city') + ', ' + PJQ.app.session.project.get('state') + ' ' + PJQ.app.session.project.get('zip'),\n\t\t\tmarkerTitle = PJQ.app.session.project.get('projectName'),\n\t\t\tgeocoder = new google.maps.Geocoder();\n\n\t\tthis.map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);\n\n\n\t\taddress = address.trim();\n\t\tgeocoder.geocode({\n\t\t\t'address': address\n\t\t}, _.bind(function (results, status) {\n\t\t\tif (status == google.maps.GeocoderStatus.OK) {\n\t\t\t\tthis.map.setCenter(results[0].geometry.location);\n\t\t\t\tthis.myLatLng = results[0].geometry.location;\n\t\t\t\tlet marker = new google.maps.Marker({\n\t\t\t\t\tmap: this.map,\n\t\t\t\t\ttitle: markerTitle,\n\t\t\t\t\tposition: results[0].geometry.location\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\talert(\"Unable to find Project Location for the following reason: \" + status);\n\t\t\t}\n\t\t}, this));\n\n\t\tthis.map.getStreetView().setVisible(false);\n\t\tthis.map.setMapTypeId(google.maps.MapTypeId.SATELLITE);\n\t\tthis.map.setZoom(15);\n\t\tthis.map.setCenter(this.myLatLng);\n\t},\n});\n\n\nPJQ.views.projects.ProjectScopes = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Scopes')\n\t},\n\tevents: {},\n\tbeforeFirstRender: function () {\n\n\t\tthis.collection = new PJQ.collections.projects.Scopes(null, {\n\t\t\tproject: PJQ.app.session.project\n\t\t});\n\t\tthis.listenTo(this.collection, 'sync', this.render);\n\t\tthis.collection.fetch();\n\t},\n\tbeforeRender: function () {\n\t\tthis.renderData = {\n\t\t\tscopes: this.collection.models\n\t\t};\n\t},\n\tafterRender: function () {\n\t}\n});\n","PJQ.views.projects.ProjectMessaging = PJQ.views.BaseView.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Messages'),\n        selectedContacts: [],\n        selectedContactGroups: [],\n        selectedProjectMessageContactBroadcasts: [],\n        filter: {\n            status: [],\n            groups: [],\n            isPrintOrder: false,\n            isDownloaded: false,\n            isVisited: false,\n            isSelected: false,\n            isDelivered: false,\n            isOpened: false,\n            vendorSector: '',\n            laborStatus: [],\n            minorityStatus: []\n        },\n        hasCompanyLevelCustomFields: false,\n        hasContactLevelCustomFields: false\n    },\n    events: {\n        'keyup .input-pm-search': 'searchChanged',\n        'click .btn-pm-search': 'search',\n        'click .project-messages-filter': 'filterDialog',\n        'click .project-messages-clear-filter': 'clearFilterClick',\n        'click .btn-project-message-settings': 'settings',\n        'change .project-message-enable-declined': 'enableDeclinedChanged',\n        'click .btn-add-participants-from-project': 'addParticipantsFromProject',\n        'click .btn-quick-add': 'quickAdd',\n        'click .btn-add-participant-new': 'addNewContact',\n        'click .btn-detailed-search': 'detailedSearch',\n        'click .btn-detailed-search-new': 'detailedSearch',\n        'click .btn-simple-search': 'simpleSearch',\n        'click .btn-quick-search': 'quickSearch',\n        'click .project-message-delete-contacts': 'deleteParticipantsFromProject',\n        'click .btn-send-message': 'sendMessage',\n        'click .btn-message-template-send': 'sendMessage',\n        'click .project-message-set-responses': 'setResponses',\n        'click .project-message-order-prints': 'orderPrints',\n        'click .export-view': 'exportView',\n        'click .manage-bid-packages': 'manageBidPackages',\n        'click .import-bid-packages': 'importBidPackages',\n        'click .btn-radius-package-add': 'addByBidPackageRadius',\n        'click .filter-unsent': 'filterUnsent'\n    },\n    renderData: function () {\n        return {\n            project: this.options.project,\n            showGroupCompanyView: !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_GROUP_COMPANY) || PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_GROUP_COMPANY),\n            showGroupContactView: !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_GROUP_CONTACT) || PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_GROUP_CONTACT),\n            showCompanyView: !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_COMPANY) || PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_COMPANY),\n            showContactView: !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_CONTACT) || PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_CONTACT),\n            showBidPackagesView: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_BID_PACKAGES) && !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_BID_PACKAGES) || PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_BID_PACKAGES)\n        };\n    },\n    afterRender: function () {\n        this.clearFilter(false);\n        this.options.selectedContacts = [];\n        this.options.selectedContactGroups = [];\n        this.options.isTradesViewSelectAll = false;\n        this.updateContactStats();\n\n        if (PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_DISABLE_QUICKADD))\n            this.$('.btn-quick-add').hide();\n\n        this.options.isTradesViewSelectAll = false;\n        this.options.settings = new PJQ.models.projectParticipants.ProjectMessageViewSettings();\n        this.options.bidFormSettings = new PJQ.models.bidForms.Settings();\n        PJQ.app.session.project.fetchBidFormSettings(_.bind(function(bidFormSettings) {\n            this.options.bidFormSettings = bidFormSettings;\n            this.options.canViewBidAmount = !this.options.bidFormSettings.get('isSealBids') || this.options.bidFormSettings.isSealedBidContact(PJQ.app.session.user.get('id'));\n            this.options.settings.fetch({\n                success: _.bind(function () {\n                    // scan to make sure we haven't deleted a column that is referenced by groupBy or orderBy\n                    _.each(this.options.settings.get('settings'), _.bind(function (setting) {\n                        if (_.size(setting.columns) === 0) {\n                            if (setting.columnsDefault.indexOf(setting.orderBy) === -1) {\n                                setting.orderBy = setting.columnsDefault[0];\n                            }\n                        } else if (setting.columns.indexOf(setting.orderBy) === -1) {\n                            setting.orderBy = setting.columns[0];\n                        }\n                    }, this));\n\n                    let defaultView = this.options.viewProjectMessageId ? 'messagecontact' : this.options.settings.get('defaultView');\n                    this.viewSelectPicker = new PJQ.inputs.Selectpicker({\n                        el: this.$('.project-message-view'),\n                        defaultValue: defaultView,\n                        onChange: _.bind(function (value) {\n\n                            let callback = _.bind(function () {\n                                this.options.selectedContacts = [];\n                                this.options.selectedContactGroups = [];\n                                this.options.isTradesViewSelectAll = false;\n                                this.clearFilter(false, false);\n                                this.renderContactStats();\n                                this.renderView(value);\n                            }, this);\n\n                            if (_.size(this.options.selectedContacts) === 0)\n                                callback();\n                            else {\n                                new PJQ.views.modals.YesNo({\n                                    header: \"Selected Participants\",\n                                    body: \"Selected participants will be cleared when switching views.  Do you want to continue?\",\n                                    onYes: _.bind(function () {\n                                        callback();\n                                    }, this),\n                                    onNo: _.bind(function () {\n                                        this.viewSelectPicker.setValue(this.currentView);\n                                    }, this)\n                                });\n                            }\n                        }, this)\n                    });\n\n                    this.renderView(defaultView);\n\n                    if (this.options.copyProjectMessageId) {\n                        this.copyProjectMessage(this.options.copyProjectMessageId);\n                        this.options.copyProjectMessageId = null;\n                    }\n\n                }, this)\n            });\n        } , this));\n\n    },\n    getSearchFor: function() {\n        let searchFor = this.$('.input-pm-search').val().trim();\n\n        if (searchFor.length <= 15 && PJQ.helpers.formatHelpers.numbersOnly(searchFor).length == 10)\n            searchFor = PJQ.helpers.formatHelpers.numbersOnly(searchFor);\n\n        return searchFor;\n    },\n    getViewData: function (view, callback, overrides) {\n        let searchFor = this.getSearchFor(),\n            statusFilter = [...this.options.filter.status],\n            groupIdList = this.options.filter.groups.join(',');\n\n\n        if (overrides) {\n            if (overrides.isPerGroup)\n                statusFilter.push('PER_GROUP');\n        }\n\n        if (this.options.filter.isDelivered)\n            statusFilter.push('DELIVERED');\n\n        if (this.options.filter.isOpened)\n            statusFilter.push('OPENED');\n\n        if (this.options.filter.isVisited)\n            statusFilter.push('VISITED');\n\n        if (this.options.filter.isDownloaded)\n            statusFilter.push('DOWNLOADS');\n\n        if (this.options.filter.isPrintOrder)\n            statusFilter.push('ORDERS ONLY');\n\n        if (this.options.filter.publicPrivate)\n            statusFilter.push(this.options.filter.publicPrivate);\n\n        _.each(this.options.filter.laborStatus, _.bind(function (status) {\n            statusFilter.push('IS_' + status);\n        }, this));\n\n        _.each(this.options.filter.minorityStatus, _.bind(function (status) {\n            statusFilter.push('IS_' + status);\n        }, this));\n\n        let viewSettings = this.options.settings.getSettings(view),\n            filterCustomField = null,\n            filterCustomFieldValue = null;\n        if (searchFor.indexOf(\"::\") !== -1 && (view === PJQ.constants.projectMessaging.views.CONT || view === PJQ.constants.projectMessaging.views.COMP)) {\n            let filterData = searchFor.split('::'),\n                filterCustomFieldName = filterData[0].trim();\n\n            filterCustomFieldValue = filterData[1].trim();\n\n            if (_.size(filterCustomFieldName) > 0 && _.size(filterCustomFieldValue) > 0) {\n                filterCustomField = _.find(PJQ.app.session.customFields.company[PJQ.app.session.get('masterUserId')].models, _.bind(function (customField) {\n                    return customField.get('fieldName').toLowerCase() === filterCustomFieldName.toLowerCase();\n                }, this));\n                if (filterCustomField == null) {\n                    filterCustomField = _.find(PJQ.app.session.customFields.contact[PJQ.app.session.get('masterUserId')].models, _.bind(function (customField) {\n                        return customField.get('fieldName').toLowerCase() === filterCustomFieldName.toLowerCase();\n                    }, this));\n                }\n\n                if (filterCustomField != null) {\n                    searchFor = \"\";\n                }\n            }\n        }\n\n        let data = new PJQ.collections.projectParticipants.ProjectParticipantsForView(null, {\n            project: this.options.project,\n            view: view,\n            searchFor: searchFor,\n            statusFilter: statusFilter.join(','),\n            groupIdList: groupIdList,\n            withCustomFields: viewSettings.hasCustomFields\n        });\n\n        if (_.size(PJQ.helpers.urlHelpers.buildApiUrl(data.endpoint(), {})) > 2000) {\n            new PJQ.views.BaseModal({\n                header: \"Filter Error\",\n                body: \"The total size of the filter requested is too large.   Please reduce the number of filter options, or the amount of text being searched for.\",\n                onOk: _.bind(function() {\n                    callback({ models: [] });\n                }, this)\n            });\n        }\n        else {\n            data.fetch({\n                success: _.bind(function () {\n                    if (this.options.filter.isSelected) {\n                        data.reset(_.filter(data.models, _.bind(function (row) {\n                            return this.options.selectedContacts.indexOf(row.get('contactId')) !== -1;\n                        }, this)));\n                    }\n\n                    if (filterCustomField != null) {\n                        let filterCfValueLower = filterCustomFieldValue.toLowerCase(),\n                            filterCustomFieldChoiceIds = _.map(_.filter(filterCustomField.choices.models, function (cfChoice) {\n                                return cfChoice.get('choiceName').trim().toLowerCase().indexOf(filterCfValueLower) !== -1;\n                            }), function (cfChoice) {\n                                return cfChoice.id;\n                            });\n                        data.reset(_.filter(data.models, _.bind(function (row) {\n                            let checkCf = function (cf) {\n                                let result = false;\n                                if (cf.id === filterCustomField.id && cf.value != null) {\n                                    if (filterCustomField.get('fieldType') === PJQ.constants.customFields.fieldTypes.CHOICE) {\n                                        result = typeof cf.value.indexOf === 'function' && _.size(_.intersection(cf.value, filterCustomFieldChoiceIds)) > 0;\n                                    } else {\n                                        result = cf.value != null && cf.value.toString().trim().toLowerCase().indexOf(filterCfValueLower) !== -1;\n                                    }\n                                }\n                                return result;\n                            };\n                            return null != _.find(row.get('companyCustomFieldValues'), checkCf) || null != _.find(row.get('contactCustomFieldValues'), checkCf);\n                        }, this)));\n                    }\n\n                    callback(data);\n                }, this)\n            });\n        }\n    },\n    renderView: function (view) {\n        if (view != null) {\n            this.currentView = view;\n        }\n\n        // set response option only valid while NOT in Messages view\n        if (this.currentView === PJQ.constants.projectMessaging.views.MSGCONT) {\n            this.$('.project-message-set-responses').css('display', 'none');\n        } else {\n            this.$('.project-message-set-responses').css('display', '');\n        }\n\n        let loader = new PJQ.Loader(this.$el);\n        this.getViewData(this.currentView, _.bind(function (data) {\n            if (loader)\n                loader.remove();\n            loader = null;\n            this.renderViewData(this.currentView, data.models);\n        }, this));\n    },\n    renderViewData: function (view, data) {\n        if (this.dataTable)\n            this.dataTable.cleanup();\n\n        let dataTableOptions = {\n            el: this.$('.project-message-grid'),\n            data: data,\n            view: view,\n            projectMessagingView: this,\n            userSettings: this.options.settings,\n            settings: this.options.settings.getSettings(view),\n            afterDataTableRender: _.bind(function (dataTable) {\n                if (dataTable) {\n                    this.$('.datatable-paging-copy').empty();\n                    this.$('.dataTables_paginate', dataTable.el).first().appendTo(this.$('.datatable-paging-copy'));\n                }\n            }, this)\n        };\n\n        this.$('.filter-unsent').prop('disabled', (this.currentView === 'messagecontact') || this.$('.count-unsent-contacts').html() === '0');\n\n        this.dataTable = this.getDataTableInstance(dataTableOptions);\n    },\n    getDataTableInstance: function (options) {\n        let dataTable = null;\n        switch (options.view) {\n            case PJQ.constants.projectMessaging.views.GROUPCOMP:\n            case PJQ.constants.projectMessaging.views.GROUPCONT:\n                dataTable = new PJQ.views.projects.ProjectMessagingTradesDataTable(options);\n                break;\n            case PJQ.constants.projectMessaging.views.GROUPCOMP_COMP:\n            case PJQ.constants.projectMessaging.views.COMP:\n                dataTable = new PJQ.views.projects.ProjectMessagingCompanyDataTable(options);\n                break;\n            case PJQ.constants.projectMessaging.views.GROUPCOMP_COMP_CONT:\n            case PJQ.constants.projectMessaging.views.GROUPCONT_CONT:\n            case PJQ.constants.projectMessaging.views.RSPCONT_CONT:\n            case PJQ.constants.projectMessaging.views.MSGCONT_CONT:\n            case PJQ.constants.projectMessaging.views.COMP_CONT:\n            case PJQ.constants.projectMessaging.views.CONT:\n            case PJQ.constants.projectMessaging.views.BIDPKGS_CONT:\n                dataTable = new PJQ.views.projects.ProjectMessagingContactDataTable(options);\n                break;\n            case PJQ.constants.projectMessaging.views.MSGCONT:\n                dataTable = new PJQ.views.projects.ProjectMessagingMessagesDataTable(options);\n                break;\n            case PJQ.constants.projectMessaging.views.RSPCONT:\n                options.order = [];\n                dataTable = new PJQ.views.projects.ProjectMessagingResponsesDataTable(options);\n                break;\n            case PJQ.constants.projectMessaging.views.BIDPKGS:\n                dataTable = new PJQ.views.projects.ProjectMessagingBidPackagesDataTable(options);\n                break;\n        }\n\n        return dataTable;\n    },\n    manageBidPackages: function () {\n        new PJQ.views.bidPackages.ManageBidPackagesModal({\n            project: PJQ.app.session.project,\n            onClose: _.bind(function () {\n                this.renderView(this.dataTable.options.view);\n            }, this)\n        });\n    },\n    importBidPackages: function () {\n        new PJQ.views.bidPackages.ImportTemplateModal({\n            project: this.options.project,\n            onImport: _.bind(function (submittals) {\n                this.renderView(this.dataTable.options.view);\n            }, this)\n        });\n    },\n    updateContactStats: function () {\n        let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n            {\n                endpoint: 'projects',\n                value: this.options.project.id\n            },\n            {\n                endpoint: 'participants'\n            },\n            {\n                endpoint: 'stats'\n            }\n        ]);\n        new PJQ.ajax.Request({\n            endpoint: endpoint\n        }).get().done(_.bind(function (data) {\n            this.stats = data;\n            this.renderContactStats();\n        }, this));\n    },\n    renderContactStats: function () {\n        this.$('.count-total-contacts').html(this.stats.totalCount.toString());\n        this.$('.count-selected-contacts').html(_.size(this.options.selectedContacts));\n        this.$('.count-unsent-contacts').html(this.stats.unsentCount ? this.stats.unsentCount.toString() : \"0\");\n        this.$('.participant-stats').removeClass('hidden');\n        let $buttons = this.$('.project-message-sel-part-header,.project-message-set-responses,.project-message-delete-contacts,.project-message-order-prints,.project-message-resend-messages');\n        if (_.size(this.options.selectedContacts) > 0) {\n            $buttons.removeClass('hidden');\n        } else {\n            $buttons.addClass('hidden');\n        }\n\n        this.$('.filter-unsent').prop('disabled', (this.currentView === 'messagecontact') || this.stats.unsentCount === 0);\n    },\n    addByBidPackageRadius: function () {\n        new PJQ.views.bidPackages.BidPackageRadiusModal({\n            project: this.options.project,\n            onSave: _.bind(function (contacts) {\n                if (_.size(contacts) > 0) {\n                    this.addSelectedContacts(contacts);\n                    this.stats.unsentCount += _.size(contacts);\n                    this.renderContactStats();\n                    this.renderView();\n                }\n            }, this)\n        });\n    },\n    addSelectedContacts: function (contactIds) {\n        this.options.selectedContacts = _.uniq(_.union(contactIds, this.options.selectedContacts));\n        this.renderContactStats();\n    },\n    removeSelectedContacts: function (contactIds) {\n        _.each(contactIds, _.bind(function (contactId) {\n            this.options.selectedContacts = _.filter(this.options.selectedContacts, function (contact) {\n                return contact !== contactId;\n            });\n        }, this));\n        this.renderContactStats();\n    },\n    clearSelectedContacts: function () {\n        this.options.selectedContacts = [];\n        this.$('.trade-select-all-contacts, .select-all-contacts, .select-all-companies, .select-company, .select-contact').prop('checked', false);\n        this.renderContactStats();\n    },\n    addSelectedContactGroups: function (contactGroups) {\n        this.options.selectedContactGroups = _.uniq(_.union(contactGroups, this.options.selectedContactGroups), false, function (x) {\n            return x.contactId + '|' + x.groupId;\n        });\n    },\n    removeSelectedContactGroups: function (contactGroups) {\n        _.each(contactGroups, _.bind(function (contactGroup) {\n            this.options.selectedContactGroups = _.filter(this.options.selectedContactGroups, function (selectedContactGroup) {\n                return !(selectedContactGroup.contactId === contactGroup.contactId && selectedContactGroup.groupId === contactGroup.groupId);\n            });\n        }, this));\n    },\n    isContactSelected: function (contactId) {\n        return this.options.selectedContacts.indexOf(contactId) !== -1;\n    },\n    enableDeclinedChanged: function () {\n        // enable or disable all select-company and select-contact whose rows have a Disabled status.\n        // process the Parent view\n        this.enableDeclinedHelper(this.dataTable, this.isEnableDeclined());\n    },\n    enableDeclinedHelper: function (dataTable, isEnableDeclined) {\n\n        // process each row of this view\n        dataTable.dataTable.rows().invalidate().draw();\n\n        // process each child view of this view recursively\n\n    },\n    isEnableDeclined: function () {\n        return this.$('.project-message-enable-declined').prop('checked');\n    },\n    searchChanged: function (e) {\n        if (e.keyCode === 13) {\n            this.search();\n        }\n    },\n    search: function () {\n        this.renderView(this.dataTable.options.view);\n    },\n    filterDialog: function () {\n        let filterInfo = new PJQ.models.projectParticipants.FilterInfo(null, {\n            project: this.options.project,\n            view: this.dataTable.options.view.toLowerCase(),\n            searchFor: this.getSearchFor()\n        });\n        filterInfo.fetch({\n            success: _.bind(function () {\n                new PJQ.views.projects.FilterProjectParticipantsModal({\n                    filterInfo: filterInfo,\n                    filter: this.options.filter,\n                    projectMessagingView: this,\n                    onFilter: _.bind(function () {\n                        this.renderView(this.dataTable.options.view);\n                    }, this)\n                });\n            }, this)\n        });\n    },\n    clearFilterClick: function () {\n        if (this.options.selectedContacts.length > 0) {\n            new PJQ.views.modals.YesNo({\n                header: \"Participants Selected\",\n                body: \"Clearing the filter will also clear selected contacts.  Do you still want to continue?\",\n                onYes: _.bind(function () {\n                    this.options.selectedContacts = [];\n                    this.options.selectedContactGroups = [];\n                    this.options.selectedProjectMessageContactBroadcasts = [];\n                    this.renderContactStats();\n                    this.clearFilter();\n                }, this)\n            });\n        } else\n            this.clearFilter();\n    },\n    clearFilter: function (refresh = true, clearSearch = true) {\n        if (clearSearch)\n            this.$('.input-pm-search').val('');\n\n        this.$('.select-all-companies, .select-all-contacts, .trade-select-all-contacts').prop('checked', false);\n        this.options.isTradesViewSelectAll = false;\n        this.options.filter = {\n            status: [],\n            groups: [],\n            isPrintOrder: false,\n            isDownloaded: false,\n            isVisited: false,\n            isSelected: false,\n            isDelivered: false,\n            isOpened: false,\n            vendorSector: '',\n            publicPrivate: '',\n            laborStatus: [],\n            minorityStatus: []\n        };\n\n        if (refresh)\n            this.renderView(this.dataTable.options.view);\n    },\n    filterUnsent: function() {\n        this.clearFilter(false);\n        this.options.filter.status = ['UNSENT'];\n        this.renderView(this.dataTable.options.view);\n    },\n    settings: function () {\n        new PJQ.views.projects.ProjectMessagingSettingsModal({\n            projectMessagingView: this,\n            onSave: _.bind(function () {\n                this.renderView(this.dataTable.options.view);\n                PJQ.notifications.notify.successNotify({\n                    message: 'Settings updated successfully'\n                });\n            }, this)\n        });\n    },\n    deleteContacts: function (contacts, isRemoveFromAB) {\n        let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n            {\n                endpoint: 'projects',\n                value: this.options.project.id\n            },\n            {\n                endpoint: 'contacts'\n            }\n        ]);\n        new PJQ.ajax.Request({\n            endpoint: endpoint,\n            data: {\n                contacts: contacts,\n                isRemoveFromAB: isRemoveFromAB\n            }\n        }).delete().done(_.bind(function () {\n            this.removeSelectedContacts(contacts);\n            this.updateContactStats();\n            PJQ.notifications.notify.successNotify({\n                message: 'Contact' + (contacts.length > 1 ? 's' : '') + ' removed successfully.'\n            });\n            this.renderView();\n        }, this)).fail(function () {\n            PJQ.notifications.notify.errorNotify({\n                message: 'Something went wrong!'\n            });\n        });\n    },\n    deleteContactGroups: function (contactGroups, isRemoveFromAB) {\n        let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n            {\n                endpoint: 'projects',\n                value: this.options.project.id\n            },\n            {\n                endpoint: 'contactgroups'\n            }\n        ]);\n        new PJQ.ajax.Request({\n            endpoint: endpoint,\n            data: {\n                contactGroups: contactGroups,\n                isRemoveFromAB: isRemoveFromAB\n            }\n        }).delete().done(_.bind(function () {\n            this.options.selectedContacts = [];\n            this.options.selectedContactGroups = [];\n            this.updateContactStats();\n            PJQ.notifications.notify.successNotify({\n                message: 'Contact(s) removed successfully.'\n            });\n            this.renderView();\n        }, this)).fail(function () {\n            PJQ.notifications.notify.errorNotify({\n                message: 'Something went wrong!'\n            });\n        });\n    },\n    deleteParticipantsFromProject: function () {\n        let removeFrom = _.size(this.options.selectedContactGroups) > 0 ? 'selected trades' : 'project';\n\n        if (_.size(this.options.selectedContacts) === 0 && _.size(this.options.selectedContactGroups) === 0) {\n            new PJQ.views.BaseModal({\n                header: \"No Participants Selected\",\n                body: \"Please select one or more participants before using this feature.\"\n            });\n            return;\n        }\n\n        new PJQ.views.projects.DeleteProjectParticipants({\n            title: \"Remove Participant\" + (_.size(this.options.selectedContacts) > 1 ? 's' : ''),\n            body: \"Are you sure you want to remove the selected participant\" + (_.size(this.options.selectedContacts) > 1 ? 's' : '') + \" from the \" + removeFrom + '?',\n            onDelete: _.bind(function (isRemoveFromAB) {\n                if (_.size(this.options.selectedContactGroups) > 0)\n                    this.deleteContactGroups(this.options.selectedContactGroups, isRemoveFromAB);\n                else\n                    this.deleteContacts(this.options.selectedContacts, isRemoveFromAB);\n            }, this)\n        });\n    },\n    sendMessage: function (sender, contacts) {\n        let defaultTemplateKey = null;\n        if (sender && $(sender.currentTarget).data('templateKey')) {\n            defaultTemplateKey = $(sender.currentTarget).data('templateKey');\n        }\n        PJQ.app.session.fetchProjectMessageEmailTemplates(_.bind(function () {\n            let replyToContacts = [], fnContinue = _.bind(function () {\n                this.inviteModal = new PJQ.views.projectInvites.ProjectInviteModal({\n                    project: PJQ.app.session.project,\n                    emailTemplates: PJQ.app.session.emailTemplates.projectMessage.models,\n                    projectMessagingView: this,\n                    replyToContacts: replyToContacts,\n                    defaultTemplateKey: defaultTemplateKey,\n                    onSend: _.bind(function () {\n                        if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_MESSAGING_SHOW_TEMPLATES)) {\n                            $('.send-message-templates').show();\n                            $('.btn-send-message').hide();\n                        }\n                        this.$('.send-message-label').html('New Message');\n                        this.options.project.set('isOnline', true);\n                        this.options.selectedContacts = [];\n                        this.options.selectedContactGroups = [];\n                        this.options.selectedProjectMessageContactBroadcasts = [];\n                        this.options.projectMessageSettings = null;\n                        PJQ.app.session.project.inviteSettings = null;\n                        this.renderContactStats();\n                        this.renderView();\n                    }, this),\n                    onAddFromThisProject: _.bind(function (inviteSettings) {\n                        if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_MESSAGING_SHOW_TEMPLATES)) {\n                            $('.send-message-templates').hide();\n                            $('.btn-send-message').show();\n                        }\n                        $('div.project-messages span.send-message-label').html('Resume Message');\n                    }, this),\n                    onViewSelected: _.bind(function (inviteSettings) {\n                        if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_MESSAGING_SHOW_TEMPLATES)) {\n                            $('.send-message-templates').hide();\n                            $('.btn-send-message').show();\n                        }\n                        $('div.project-messages span.send-message-label').html('Resume Message');\n                        this.viewSelectPicker.setValue(PJQ.constants.projectMessaging.views.CONT);\n                        this.options.filter = {\n                            status: [],\n                            groups: [],\n                            isPrintOrder: false,\n                            isDownloaded: false,\n                            isVisited: false,\n                            isSelected: true,\n                            vendorSector: '',\n                            publicPrivate: '',\n                            laborStatus: [],\n                            minorityStatus: []\n                        };\n                        this.renderView(PJQ.constants.projectMessaging.views.CONT);\n                    }, this),\n                    onCancel: _.bind(function () {\n                        if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_MESSAGING_SHOW_TEMPLATES)) {\n                            this.$('.send-message-templates').show();\n                            this.$('.btn-send-message').hide();\n                        }\n                        $('div.project-messages span.send-message-label').html('New Message');\n                        PJQ.app.session.project.inviteSettings = null;\n                    }, this),\n                    isShowQuickAdd: !PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_DISABLE_QUICKADD),\n                    isShowAttachments: true\n                });\n            }, this);\n\n            if (!PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_ENABLE_REPLYTO_OVERRIDE)) {\n                if (PJQ.app.session.project.get('user'))\n                    replyToContacts.push(PJQ.app.session.project.get('user'));\n\n                if (PJQ.app.session.project.get('user2') && _.size(_.filter(replyToContacts, function (user) {\n                    return user.id == PJQ.app.session.project.get('user2').id\n                })) == 0)\n                    replyToContacts.push(PJQ.app.session.project.get('user2'));\n\n                PJQ.app.session.project.fetchProjectContacts(_.bind(function () {\n                    _.each(PJQ.app.session.project.projectContacts.models, _.bind(function (projectContact) {\n                        if (projectContact.get('id') < 0 && _.size(_.filter(replyToContacts, function (user) {\n                            return user.id == projectContact.get('id')\n                        })) == 0) {\n                            replyToContacts.push(projectContact.attributes);\n                        }\n                    }, this));\n                    fnContinue();\n                }, this));\n            } else {\n                fnContinue();\n            }\n        }, this));\n\n        if (contacts != null) {\n            this.inviteModal.addSelectedContacts(contacts);\n        }\n    },\n    quickAdd: function () {\n        new PJQ.views.projects.QuickAddParticipantsModal({\n            project: this.options.project,\n            onSave: _.bind(function (contact) {\n                this.addSelectedContacts([contact.id]);\n                this.stats.unsentCount++;\n                this.renderContactStats();\n                this.renderView();\n            }, this)\n        });\n    },\n    addNewContact: function () {\n        new PJQ.views.contacts.BaseEditContactModal({\n            model: new PJQ.models.projectParticipants.ProjectParticipant({\n                projectId: PJQ.app.session.project.id,\n                masterUserId: PJQ.app.session.get('masterUserId'),\n                isForceSaveExistingEmail: false,\n                country: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_DEFAULT_COUNTRY) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_DEFAULT_COUNTRY) : 'US'\n            }),\n            showNotes: true,\n            showActive: true,\n            deleteLabel: 'Remove from Project',\n            onSave: _.bind(function (model, isNew) {\n                this.addSelectedContacts([model.get('contactId')]);\n                this.stats.unsentCount++;\n                this.stats.totalCount++;\n                this.renderContactStats();\n                this.renderView();\n            }, this)\n        });\n    },\n    detailedSearch: function (e) {\n        $('form[name=\"modal-add-participants\"]').remove();\n        let options = {\n            onSave: _.bind(function (selectedContacts) {\n                this.addSelectedContacts(selectedContacts);\n                this.stats.unsentCount += _.size(selectedContacts);\n                this.renderContactStats();\n                this.renderView();\n            }, this)\n        };\n\n        if ($(e.currentTarget).hasClass('btn-detailed-search-new') && !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_NEW_ADDRESSBOOK)) {\n            options.isWrapForm = false;\n            options.wrapFormName = null;\n            options.isUseNewAddressBook = true;\n        }\n\n        new PJQ.views.projects.AddParticipantsDetailedModal(options);\n    },\n    simpleSearch: function () {\n        let showUnionStatus = true;\n        if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_HIDE_UNION_STATUS)) {\n            showUnionStatus = !PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.IS_HIDE_UNION_STATUS);\n        }\n        new PJQ.views.projectParticipants.AddParticipantsModal({\n            model: this.options.project,\n            isDirectoryEnabled: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_DIRECTORY),\n            isUnionStatusEnabled: showUnionStatus,\n            isReturnContactIds: true,\n            onSave: _.bind(function (selectedContacts, sendMessage = false) {\n                if (sendMessage && _.size(selectedContacts) > 0) {\n                    this.sendMessage(null, selectedContacts);\n                } else {\n                    this.addSelectedContacts(selectedContacts);\n                    this.stats.unsentCount += _.size(selectedContacts);\n                    this.renderContactStats();\n                    this.renderView();\n                }\n            }, this)\n        });\n    },\n    quickSearch: function () {\n        new PJQ.views.contacts.SelectContactsModal({\n            disableBlacklisted: true,\n            disableBadEmail: true,\n            isSingleChoice: false,\n            onSave: _.bind(function (selectedContacts) {\n                if (_.size(selectedContacts) === 0) {\n                    PJQ.notifications.notify.successNotify({\n                        message: 'No participants were added'\n                    });\n                    return;\n                }\n\n                this.options.project.addParticipantsById(selectedContacts, _.bind(function () {\n                    this.addSelectedContacts(_.map(selectedContacts, function (selectedContact) {\n                        return selectedContact.get('contactId');\n                    }));\n                    this.stats.unsentCount += _.size(selectedContacts);\n                    this.renderContactStats();\n                    this.renderView();\n                }, this));\n            }, this)\n        });\n    },\n    addParticipantsFromProject: function () {\n        let statuses = this.options.project.getProjectStatusList();\n        statuses.unshift(['PENDING', true]);\n        new PJQ.views.projectParticipants.AddParticipantsFromProjectModal({\n            model: this.options.project,\n            isBidFormsEnabled: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_BID_FORMS),\n            projectResponses: statuses,\n            isReturnContactIds: true,\n            onSave: _.bind(function (selectedContacts) {\n                this.addSelectedContacts(selectedContacts);\n                this.stats.unsentCount += _.size(selectedContacts);\n                this.renderContactStats();\n                this.renderView();\n            }, this)\n        });\n    },\n    copyProjectMessage: function (projectMessageId) {\n        let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n            {\n                endpoint: 'projects',\n                value: PJQ.app.session.project.id\n            },\n            {\n                endpoint: 'projectmessages',\n                value: projectMessageId\n            },\n            {\n                endpoint: 'copy'\n            }\n        ]);\n        new PJQ.ajax.Request({\n            endpoint: endpoint,\n        }).get().done(_.bind(function (data) {\n            data.messageType = data.templateKey;\n            data.privateFolders = new PJQ.collections.files.Files(data.privateFolders);\n            data.attachments = new PJQ.collections.files.Files(data.attachments);\n            data.responseDue = data.responseDue ? PJQ.helpers.dateHelpers.getDateString(new Date(data.responseDue), PJQ.helpers.dateHelpers.dateFormats.DATE_YMD) : '';\n            PJQ.app.session.project.inviteSettings = data;\n            this.sendMessage();\n        }, this)).fail(function () {\n            PJQ.notifications.notify.errorNotify({\n                message: 'Something went wrong.'\n            });\n        });\n\n    },\n    deleteProjectMessage: function (projectMessageId, callback) {\n        let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n            {\n                endpoint: 'projects',\n                value: PJQ.app.session.project.id\n            },\n            {\n                endpoint: 'projectmessages',\n                value: projectMessageId\n            }\n        ]);\n        new PJQ.ajax.Request({\n            endpoint: endpoint\n        }).delete().done(_.bind(function () {\n            PJQ.notifications.notify.successNotify({\n                message: 'Message deleted successfully.'\n            });\n            if (typeof callback === 'function')\n                callback();\n\n        }, this)).fail(function () {\n            PJQ.notifications.notify.errorNotify({\n                message: 'Something went wrong!'\n            });\n        });\n    },\n    orderPrints: function () {\n        let callback = _.bind(function () {\n            let contacts = new PJQ.collections.contacts.ContactInfoList(null, {\n                contactIds: this.options.selectedContacts\n            });\n            contacts.fetch({\n                success: _.bind(function () {\n                    new PJQ.views.files.OrderPrintsModal({\n                        recipients: contacts.models,\n                        onOrderPlaced: _.bind(function () {\n                            this.clearSelectedContacts();\n                        }, this)\n                    });\n                }, this)\n            });\n        }, this);\n\n        if (PJQ.app.session.project && PJQ.app.session.project.get('status').toLowerCase() === 'busy') {\n            new PJQ.views.modals.YesNo({\n                header: \"Document(s) Processing\",\n                body: \"Please Note: New documents are currently being processed for this project.  Are you sure you want to place an order?\",\n                onYes: _.bind(function () {\n                    callback();\n                }, this)\n            });\n        } else\n            callback();\n\n    },\n    setResponses: function () {\n        if (_.size(this.options.selectedContacts) === 0) {\n            new PJQ.views.BaseModal({\n                header: \"No Participants Selected\",\n                body: \"Please select one or more participants before using this feature.\"\n            });\n            return;\n        }\n\n        let statuses = this.options.project.getProjectStatusList();\n        statuses.unshift(['PENDING', true]);\n        new PJQ.views.projects.SetProjectParticipantsStatusModal({\n            projectResponses: statuses,\n            projectMessagingView: this,\n            onSave: _.bind(function (status, companyComment, contactComment) {\n                let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n                    {\n                        endpoint: 'projects',\n                        value: this.options.project.id\n                    },\n                    {\n                        endpoint: 'participants'\n                    },\n                    {\n                        endpoint: 'status'\n                    }\n                ]);\n\n                let loader = new PJQ.Loader(this.$el);\n                new PJQ.ajax.Request({\n                    endpoint: endpoint,\n                    data: {\n                        ids: this.options.selectedContacts,\n                        status: status,\n                        companyComment: companyComment,\n                        contactComment: contactComment\n                    }\n                }).post().done(_.bind(function () {\n                    loader.remove();\n                    PJQ.notifications.notify.successNotify({\n                        message: 'Contact' + (this.options.selectedContacts.length > 1 ? 's' : '') + ' updated successfully.'\n                    });\n                    this.renderView();\n                }, this)).fail(function () {\n                    loader.remove();\n                    PJQ.notifications.notify.errorNotify({\n                        message: 'Something went wrong!'\n                    });\n                });\n            }, this)\n        });\n    },\n    exportView: function () {\n        let statusFilter = [...this.options.filter.status];\n\n        if (this.options.filter.isDelivered)\n            statusFilter.push('DELIVERED');\n\n        if (this.options.filter.isOpened)\n            statusFilter.push('OPENED');\n\n        if (this.options.filter.isVisited)\n            statusFilter.push('VISITED');\n\n        if (this.options.filter.isDownloaded)\n            statusFilter.push('DOWNLOADS');\n\n        if (this.options.filter.isPrintOrder)\n            statusFilter.push('ORDERS ONLY');\n\n        if (this.options.filter.publicPrivate)\n            statusFilter.push(this.options.filter.publicPrivate);\n\n        _.each(this.options.filter.laborStatus, _.bind(function (status) {\n            statusFilter.push('IS_' + status);\n        }, this));\n\n        _.each(this.options.filter.minorityStatus, _.bind(function (status) {\n            statusFilter.push('IS_' + status);\n        }, this));\n\n        statusFilter = statusFilter.join(',');\n\n        PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\n            {\n                endpoint: 'projects',\n                value: this.options.project.id\n            },\n            {\n                endpoint: 'participants'\n            },\n            {\n                endpoint: 'views',\n                value: this.currentView\n            },\n            {\n                endpoint: 'export'\n            }\n        ], [\n            {\n                parameter: 'statusFilter',\n                value: statusFilter\n            },\n            {\n                parameter: 'groupIdList',\n                value: this.options.filter.groups.join(',')\n            },\n            {\n                parameter: 'searchFor',\n                value: this.getSearchFor()\n            },\n            {\n                parameter: 'withCustomFields',\n                value: true\n            }\n        ]));\n\n    }\n});\n\n// Modals\nPJQ.views.projects.GradeProjectContactModal = PJQ.views.BaseModal.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Grade-Project-Contact'),\n        width: '300px',\n        onGrade: _.noop,\n        row: null\n    },\n    events: {\n        'click button.grade': 'gradeChanged',\n        'click button.clear-grade': 'onClear'\n    },\n    beforeModalCreated: function () {\n    },\n    beforeRender: function () {\n        this.renderData = {\n            companyName: this.options.row.data().get('companyName')\n        };\n    },\n    afterRender: function () {\n        if (this.options.row.data().get('grade') > 0)\n            this.$('button[data-stars=\"1\"] i').removeClass('text-muted').addClass('text-gold');\n        if (this.options.row.data().get('grade') > 1)\n            this.$('button[data-stars=\"2\"] i').removeClass('text-muted').addClass('text-gold');\n        if (this.options.row.data().get('grade') > 2)\n            this.$('button[data-stars=\"3\"] i').removeClass('text-muted').addClass('text-gold');\n        if (this.options.row.data().get('grade') > 3)\n            this.$('button[data-stars=\"4\"] i').removeClass('text-muted').addClass('text-gold');\n        if (this.options.row.data().get('grade') > 4)\n            this.$('button[data-stars=\"5\"] i').removeClass('text-muted').addClass('text-gold');\n    },\n    gradeChanged: function (e) {\n        this.options.row.data().set('grade', parseInt(this.$(e.currentTarget).data('stars')));\n        this.$('button.grade').removeClass('text-gold').addClass('text-muted');\n        this.afterRender();\n        this.onGrade();\n    },\n    onGrade: function () {\n        if (typeof this.options.onGrade === 'function')\n            this.options.onGrade(this.options.row.data().get('grade'));\n        this.removeModal();\n    },\n    onClear: function () {\n        this.$('button.grade').removeClass('text-gold').addClass('text-muted');\n        this.options.row.data().set('grade', 0);\n        this.onGrade();\n    }\n});\n\nPJQ.views.projects.ProjectParticipantCommentModal = PJQ.views.BaseModal.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Project-Participant-Comment'),\n        minWidth: '400px',\n        onComment: _.noop,\n        project: null,\n        comments: [],\n        participant: null,\n        isCompanyComments: false\n    },\n    events: {\n        'keyup .project-contact-comment': 'commentChanged',\n        'click .project-contact-comment-save': 'commentAdded',\n        'click .project-comment-delete': 'commentDeleted'\n    },\n    beforeModalCreated: function () {\n    },\n    beforeRender: function () {\n        this.renderData = {\n            companyName: this.options.participant.attributes.companyName,\n            contactName: this.options.participant.attributes.contactName,\n            comments: this.options.comments\n        };\n    },\n    afterRender: function () {\n    },\n    commentDeleted: function (sender) {\n        this.selectedCard = this.$(sender.currentTarget).closest('div.card');\n        new PJQ.views.BaseModal({\n            header: \"Delete Comment\",\n            body: \"Are you sure you want to delete this comment?\",\n            isShowCancelButton: true,\n            onOk: _.bind(function () {\n                let comment = new PJQ.models.projectParticipants.ProjectContactComment(null, {\n                        project: this.options.project,\n                        contactId: this.options.isCompanyComments ? this.options.participant.attributes.contactCompanyId : this.options.participant.attributes.contactId\n                    }),\n                    projectContactCommentId = parseInt(this.selectedCard.data('projectContactCommentId')),\n                    parentContainer = this.selectedCard.parent(),\n                    isLastCard = this.selectedCard.hasClass('last-comment');\n\n                this.selectedCard.remove();\n\n                // if no comments left, return the 'empty comment' comment back to the caller\n                if ($('div.card', parentContainer).length === 0) {\n                    comment.set('comment', 'No Comments Added');\n                    if (typeof this.options.onComment === 'function')\n                        this.options.onComment(comment);\n\n                    this.$('.comments-header, .comments-list').hide();\n\n                } else if (isLastCard) {\n                    // if this was the newest comment, return the next newest comment back to the caller and mark the next newest comment\n                    comment.set('comment', this.$('div.card').last().find('.comment-body').text().trim());\n\n                    if (typeof this.options.onComment === 'function')\n                        this.options.onComment(comment);\n\n                    this.$('div.card').last().addClass('last-comment');\n                }\n\n                comment.set('projectContactCommentId', projectContactCommentId);\n                comment.destroy();\n            }, this)\n        });\n\n    },\n    commentChanged: function () {\n        this.$('.project-contact-comment-save').prop('disabled', _.size(this.$('.project-contact-comment').val()) === 0);\n    },\n    commentAdded: function () {\n        this.onComment();\n    },\n    onComment: function () {\n        let comment = new PJQ.models.projectParticipants.ProjectContactComment(null, {\n            project: this.options.project,\n            contactId: this.options.isCompanyComments ? this.options.participant.attributes.contactCompanyId : this.options.participant.attributes.contactId,\n            isCompanyComments: this.options.isCompanyComments\n        });\n        comment.set('comment', this.$('.project-contact-comment').val());\n        comment.save(null, {\n            success: _.bind(function () {\n                if (typeof this.options.onComment === 'function')\n                    this.options.onComment(comment);\n                this.removeModal();\n            }, this)\n        });\n    }\n});\n\nPJQ.views.projects.FilterProjectParticipantsModal = PJQ.views.BaseModal.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Filter-Project-Participants'),\n        width: '650px',\n        filterInfo: null,\n        filter: null,\n        onFilter: _.noop\n    },\n    events: {\n        'click button.filter': 'filter'\n    },\n    beforeModalCreated: function () {\n        this.options.fieldSettingsEnabled = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_CONTACT_FIELD_SETTINGS);\n        if (this.options.fieldSettingsEnabled && this.coreFieldSettings == null) {\n            PJQ.app.session.fetchContactFieldSettings(this.options.masterUserId, _.bind(function (settings) {\n                this.coreFieldSettings = settings;\n                this.render();\n            }, this));\n        }\n    },\n    beforeRender: function () {\n        this.renderData = {\n            filterInfo: this.options.filterInfo,\n            filter: this.options.filter,\n            view: this.options.projectMessagingView.dataTable.options.view,\n            checkFieldVisible: _.bind(this.checkFieldVisible, this)\n        };\n    },\n    checkFieldVisible: function (fieldName) {\n        if (this.coreFieldSettings == null) {\n            let prefs;\n            if (PJQ.app.session.project != null) {\n                prefs = PJQ.app.session.project.preferences;\n            } else {\n                prefs = PJQ.app.session.preferences;\n            }\n            let result;\n            switch (fieldName) {\n                case 'sector':\n                    result = !prefs.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_HIDE_SECTOR);\n                    break;\n                case 'laborStatus':\n                    result = prefs.getPref(PJQ.constants.preferenceTypes.IS_HIDE_UNION_STATUS) !== true;\n                    break;\n                case 'classifications':\n                    result = prefs.getPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_HIDE_MINORITY_STATUS) === false;\n                    break;\n                default:\n                    result = true;\n            }\n            return result;\n        } else {\n            let fieldSettings = this.coreFieldSettings.findWhere({fieldName: fieldName});\n            if (fieldSettings != null) {\n                return fieldSettings.get('isVisibleContact') || fieldSettings.get('isVisibleAdmin');\n            }\n        }\n        return true;\n    },\n    afterRender: function () {\n        _.each(this.options.filter.status, _.bind(function (status) {\n            this.$('input.filter-status[data-status=\"' + status + '\"]').prop('checked', true);\n        }, this));\n\n        this.$('input.filter-print-order').prop('checked', this.options.filter.isPrintOrder);\n        this.$('input.filter-download').prop('checked', this.options.filter.isDownloaded);\n        this.$('input.filter-visited').prop('checked', this.options.filter.isVisited);\n        this.$('input.filter-selected').prop('checked', this.options.filter.isSelected);\n        this.$('input.filter-delivered').prop('checked', this.options.filter.isDelivered);\n        this.$('input.filter-opened').prop('checked', this.options.filter.isOpened);\n\n        this.sectorSelectPicker = new PJQ.inputs.Selectpicker({\n            el: this.$('.filter-sector'),\n            defaultValue: this.options.filter.vendorSector\n        });\n\n        this.publicPrivateSelectPicker = new PJQ.inputs.Selectpicker({\n            el: this.$('.filter-public-private'),\n            defaultValue: this.options.filter.publicPrivate\n        });\n\n        this.laborStatusSelectPicker = new PJQ.inputs.Selectpicker({\n            el: this.$('.filter-labor-status'),\n            isMultiple: true,\n            noneSelectedText: 'All Labor Statuses',\n            defaultValue: this.options.filter.laborStatus\n        });\n\n        this.minorityStatusSelectPicker = new PJQ.inputs.Selectpicker({\n            el: this.$('.filter-minority-status'),\n            isMultiple: true,\n            noneSelectedText: 'All Certifications',\n            defaultValue: this.options.filter.minorityStatus\n        });\n\n        this.groupSelector = new PJQ.views.groups.GroupSelector({\n            el: this.$('.filter-groups'),\n            isShowNoGroup: true,\n            isShowGroupCount: true,\n            groups: this.options.filterInfo.get('groups'),\n            selectedGroupIds: this.options.filter.groups,\n            onGroupSelected: _.bind(function () {\n                //this.selectedGroups = this.groupSelector.getGroupsData().new;\n            }, this)\n        });\n\n    },\n    filter: function () {\n\n        this.options.projectMessagingView.options.filter.status = [];\n\n        _.each(this.$('input.filter-status'), _.bind(function (input) {\n            if ($(input).prop('checked'))\n                this.options.projectMessagingView.options.filter.status.push($(input).data('status'));\n        }, this));\n\n        this.options.projectMessagingView.options.filter.isPrintOrder = this.$('input.filter-print-order').prop('checked');\n        this.options.projectMessagingView.options.filter.isDownloaded = this.$('input.filter-download').prop('checked');\n        this.options.projectMessagingView.options.filter.isVisited = this.$('input.filter-visited').prop('checked');\n        this.options.projectMessagingView.options.filter.isDelivered = this.$('input.filter-delivered').prop('checked');\n        this.options.projectMessagingView.options.filter.isOpened = this.$('input.filter-opened').prop('checked');\n        this.options.projectMessagingView.options.filter.isSelected = this.$('input.filter-selected').prop('checked');\n        this.options.projectMessagingView.options.filter.vendorSector = this.$('select.filter-sector').val();\n        this.options.projectMessagingView.options.filter.publicPrivate = this.publicPrivateSelectPicker.getValue();\n        this.options.projectMessagingView.options.filter.laborStatus = this.laborStatusSelectPicker.getValue();\n        this.options.projectMessagingView.options.filter.minorityStatus = this.minorityStatusSelectPicker.getValue();\n\n        this.options.projectMessagingView.options.filter.groups = [];\n\n        let groupsData = this.groupSelector.getGroupsData();\n        _.each(groupsData.selected, _.bind(function (group) {\n            this.options.projectMessagingView.options.filter.groups.push(group.id);\n        }, this));\n\n        if (typeof this.options.onFilter === 'function')\n            this.options.onFilter();\n\n        this.removeModal();\n    }\n});\n\nPJQ.views.projects.ProjectMessagingSettingsModal = PJQ.views.BaseModal.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Project-Messaging-Settings'),\n        width: '600px',\n    },\n    events: {\n        'change .select-column': 'columnSelected',\n        'click button.settings-save': 'onSave'\n    },\n    beforeModalCreated: function () {\n    },\n    beforeRender: function () {\n        // copy settings for our UI; we only update global settings object on save.\n        this.options.settings = [];\n        this.options.defaultView = this.options.projectMessagingView.options.settings.get('defaultView');\n        _.each(this.options.projectMessagingView.options.settings.attributes.settings, _.bind(function (setting) {\n            let dbInstance = this.options.projectMessagingView.getDataTableInstance({\n                    view: setting.view,\n                    settings: this.options.projectMessagingView.options.settings.getSettings(setting.view)\n                }),\n                columns = [];\n            if (dbInstance != null) {\n                columns = dbInstance.getColumns(true);\n            }\n            selectedColumns = (_.size(setting.columns) > 0) ? setting.columns : setting.columnsDefault;\n            _.each(columns, _.bind(function (column) {\n                column.visible = selectedColumns.indexOf(column.columnData) !== -1\n            }, this));\n\n\n            this.options.settings.push({\n                view: setting.view,\n                rowsPerPage: setting.rowsPerPage,\n                columns: columns\n            });\n\n        }, this));\n\n        this.renderData = {\n            showGroupCompanyView: !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_GROUP_COMPANY) || PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_GROUP_COMPANY),\n            showGroupContactView: !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_GROUP_CONTACT) || PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_GROUP_CONTACT),\n            showCompanyView: !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_COMPANY) || PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_COMPANY),\n            showContactView: !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_CONTACT) || PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_CONTACT),\n            showBidPackagesView: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_BID_PACKAGES) && !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_BID_PACKAGES) || PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_BID_PACKAGES)\n        };\n    },\n    afterRender: function () {\n        new PJQ.inputs.Selectpicker({\n            el: this.$('select.select-view-default'),\n            defaultValue: this.options.defaultView,\n            onChange: _.bind(function (value) {\n                this.options.defaultView = value;\n            }, this)\n\n        });\n\n        new PJQ.inputs.Selectpicker({\n            el: this.$('select.select-view'),\n            defaultValue: this.options.projectMessagingView.dataTable.options.view,\n            onChange: _.bind(function (value) {\n                this.selectView(value);\n            }, this)\n        });\n\n        this.rowsPerPage = new PJQ.inputs.Selectpicker({\n            el: this.$('select.rows-per-page'),\n            isIntChoices: true,\n            onChange: _.bind(function (value) {\n                this.currentView.rowsPerPage = value;\n            }, this)\n\n        });\n\n        this.selectView(this.options.projectMessagingView.dataTable.options.view);\n    },\n    selectView: function (view) {\n        this.currentView = _.find(this.options.settings, _.bind(function (setting) {\n            return setting.view === view;\n        }, this));\n\n        if (view.indexOf('-') === -1) {\n            this.$('div.rows-per-page').show();\n            this.rowsPerPage.setValue(this.currentView.rowsPerPage);\n        } else\n            this.$('div.rows-per-page').hide();\n\n        if (view === PJQ.constants.projectMessaging.views.GROUPCOMP || view === PJQ.constants.projectMessaging.views.GROUPCONT || view === PJQ.constants.projectMessaging.views.MSGCONT || view === PJQ.constants.projectMessaging.views.RSPCONT || view === PJQ.constants.projectMessaging.views.BIDPKGS)\n            this.$('div.select-columns').hide();\n        else {\n            this.$('div.select-columns').show();\n\n            if (this.dataTable) {\n                this.dataTable.undelegateEvents();\n                $(this.dataTable.el).empty();\n            }\n\n            this.dataTable = new PJQ.views.dataTables.DataTable({\n                el: this.$('div.select-columns-datatable'),\n                data: this.currentView.columns,\n                isHideSearch: true,\n                order: [],\n                columns: [\n                    {\"data\": \"title\", \"title\": \"Column\", \"orderable\": false},\n                    {\n                        \"data\": \"visible\",\n                        \"title\": \"Show\",\n                        \"orderable\": false,\n                        \"searchable\": false,\n                        \"render\": _.bind(function (data) {\n                            return ('<div class=\"text-align-center\"><div class=\"pretty p-default p-smooth fs-18 m-0\"><input type=\"checkbox\"' + (data ? ' checked ' : '') + 'class=\"select-column\"/><div class=\"state p-primary\"><label class=\"wd-0\">&nbsp;</label></div></div></div>');\n                        }, this),\n                        \"width\": '10%'\n                    }\n                ],\n                dom: '<\"top\"<\"clear\">>rt<\"bottom\"p<\"clear\">>'\n\n            });\n        }\n    },\n    columnSelected: function (sender) {\n        this.dataTable.dataTable.row($(sender.currentTarget).closest('tr')).data().visible = $(sender.currentTarget).prop('checked');\n    },\n    onSave: function () {\n        //update global settings from local\n        this.options.projectMessagingView.options.settings.set('defaultView', this.options.defaultView);\n\n        _.each(this.options.settings, _.bind(function (settingTemp) {\n            _.each(this.options.projectMessagingView.options.settings.get('settings'), _.bind(function (setting) {\n                if (settingTemp.view === setting.view) {\n                    setting.rowsPerPage = settingTemp.rowsPerPage;\n\n                    let columns = _.size(setting.columns) > 0 ? setting.columns.slice() : setting.columnsDefault.slice();\n\n                    // update columns\n                    _.each(settingTemp.columns, _.bind(function (column) {\n                        if (column.visible) {\n                            if (columns.indexOf(column.columnData) === -1)\n                                columns.push(column.columnData);\n                        } else {\n                            if (columns.indexOf(column.columnData) !== -1)\n                                columns = _.filter(columns, _.bind(function (columnTemp) {\n                                    return columnTemp != column.columnData;\n                                }, this));\n                        }\n                    }, this));\n\n                    setting.columns = columns;\n                }\n            }, this));\n        }, this));\n\n        //save settings to database\n        this.options.projectMessagingView.options.settings.save(null, {\n            success: _.bind(function () {\n                if (typeof this.options.onSave === 'function')\n                    this.options.onSave();\n\n                this.removeModal();\n            }, this)\n        });\n    }\n});\n\nPJQ.views.projects.ManageProjectParticipantTradesModal = PJQ.views.BaseModal.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Project-Participant-Trades'),\n        minWidth: '900px',\n        onSave: _.noop\n    },\n    events: {\n        'click .manage-trades-save': 'onSave',\n        'change .select-trade': 'tradeSelectChanged',\n        'change .select-all-trades': 'tradeSelectAllChanged'\n    },\n    beforeRender: function () {\n        this.renderData = {};\n    },\n    afterRender: function () {\n        this.groups = new PJQ.collections.projectParticipants.ProjectParticipantGroups(null, {\n            contactId: this.options.contactId\n        });\n\n        this.groups.fetch({\n            success: _.bind(function () {\n                this.dataTable = new PJQ.views.dataTables.DataTable({\n                    el: this.$('.project-participant-trades'),\n                    pageLength: 999999,\n                    isHideSearch: true,\n                    data: this.groups.models,\n                    dom: 't',\n                    order: [],\n                    columns: [\n                        {\n                            \"data\": \"attributes.isSelected\",\n                            \"title\": '<div class=\"pretty p-default p-icon p-smooth fs-18 m-0\"><input type=\"checkbox\" class=\"select-all-trades\" /><div class=\"state p-primary\"><label class=\"wd-0\">&nbsp;</label></div></div>',\n                            \"orderable\": false,\n                            \"searchable\": false,\n                            \"render\": _.bind(function (data) {\n                                return ('<div class=\"text-align-center\"><div class=\"pretty p-default p-smooth fs-18 m-0\"><input type=\"checkbox\"' + (data ? ' checked ' : '') + 'class=\"select-trade\"/><div class=\"state p-primary\"><label class=\"wd-0\">&nbsp;</label></div></div></div>');\n                            }, this),\n                            \"width\": '10%'\n                        },\n                        {\n                            \"data\": \"attributes.groupName\",\n                            \"title\": \"Trade\",\n                            \"orderable\": false\n                        }\n                    ]\n                });\n            }, this)\n        });\n    },\n    tradeSelectChanged: function (e) {\n        let tr = $(e.currentTarget).closest('tr'),\n            row = this.dataTable.getRow(tr);\n\n        row.data().set('isSelected', $(e.currentTarget).prop('checked'));\n    },\n    tradeSelectAllChanged: function (e) {\n        _.each(this.$el.find('input.select-trade'), _.bind(function (input) {\n            let tr = $(input).closest('tr'),\n                row = this.dataTable.getRow(tr);\n\n            row.data().set('isSelected', $(e.currentTarget).prop('checked'));\n            $(input).prop('checked', $(e.currentTarget).prop('checked'));\n        }, this));\n\n    },\n    onSave: function () {\n        this.groups.save({\n            success: _.bind(function () {\n                if (typeof this.options.onSave === 'function')\n                    this.options.onSave(this.groups);\n\n                this.removeModal();\n            }, this)\n        });\n    }\n});\n\nPJQ.views.projects.SetProjectParticipantsStatusModal = PJQ.views.BaseModal.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Set-Project-Participants-Status'),\n        minWidth: '500px',\n        onSave: _.noop,\n        projectResponses: [],\n        projectMessagingView: null\n    },\n    events: {\n        'click .set-responses': 'onSave',\n        'click .comment-type>div': 'commentTypeClicked'\n    },\n    beforeRender: function () {\n        this.renderData = {\n            projectResponses: this.options.projectResponses\n        };\n    },\n    afterRender: function () {\n\n        let isContactComment = false;\n        _.each(this.options.projectMessagingView.options.settings.get('settings'), _.bind(function (setting) {\n            _.each(setting.columns, _.bind(function (column) {\n                if (column === 'commentsContact')\n                    isContactComment = true;\n            }, this));\n        }, this));\n\n        if (isContactComment)\n            this.$('.comment-type>div[data-filter=\"contact-comment\"]').click();\n\n        this.projectStatus = new PJQ.inputs.Selectpicker({\n            el: this.$('.project-status'),\n            defaultValue: this.options.projectResponses[0][0]\n        });\n    },\n    commentTypeClicked: function (e) {\n        let $target = $(e.currentTarget),\n            filter = $target.data('filter');\n        this.$('.comment-type>div').removeClass('selected');\n        $target.addClass('selected');\n\n        this.$('.comments>textarea').hide();\n        this.$('.' + $target.data('filter')).show();\n    },\n    onSave: function () {\n        new PJQ.views.modals.YesNo({\n            header: \"Set Status\",\n            body: \"Are you sure you want to set the Project Status for \" + _.size(this.options.projectMessagingView.options.selectedContacts) + \" participants?\",\n            onYes: _.bind(function () {\n                if (typeof this.options.onSave === 'function')\n                    this.options.onSave(this.projectStatus.getValue(), this.$('.company-comment').val(), this.$('.contact-comment').val());\n\n                this.removeModal();\n            }, this)\n        });\n    }\n});\n\nPJQ.views.projects.DeleteProjectParticipants = PJQ.views.BaseModal.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Delete-Project-Participants'),\n        minWidth: '500px',\n        onDelete: _.noop,\n        title: '',\n        body: ''\n    },\n    events: {\n        'click .btn-remove': 'onDelete'\n    },\n    beforeModalCreated: function () {\n        this.canDeleteContact = PJQ.app.session.hasPermission('contacts.canDelete');\n    },\n    renderData: function () {\n        return {\n            title: this.options.title,\n            body: this.options.body,\n            canDeleteContact: this.canDeleteContact\n        };\n    },\n    onDelete: function () {\n        if (typeof this.options.onDelete === 'function')\n            this.options.onDelete(this.canDeleteContact && this.$('.delete-ab').prop('checked'));\n\n        this.removeModal();\n    }\n});\n","PJQ.views.projects.ProjectMessagingDataTable = PJQ.views.dataTables.DataTable.extend({\n    defaults: {\n        language: {\n            zeroRecords: \"No data to display\"\n        },\n        subTemplates: {\n            commentsTooltip: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'tooltip-comments'),\n            addCommentTooltip: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'tooltip-add-comment'),\n        },\n        isHideSearch: true,\n        dom: '<\"top\"p<\"clear\">>rt<\"bottom\"p<\"clear\">>',\n        enableColumnResize: false\n    },\n    onColumnResizeEnd: function (c, columns) {\n        let totalWidth = 0,\n            colWidths = {};\n        _.each(columns, function (col) {\n            let colWidth = parseInt(col.width.replace('px', ''));\n            totalWidth += colWidth;\n            colWidths[col.idx] = colWidth;\n        });\n\n        let colPercents = {},\n            totalPercent = 0;\n        _.each(colWidths, function (col, idx) {\n            let percent = (col / totalWidth) * 100;\n            if (percent < 2) {\n                percent = 2;\n            } else {\n                percent = Math.floor(percent);\n            }\n            totalPercent += percent;\n            colPercents[idx] = percent;\n        });\n\n        let newColumns = [];\n        _.each(this.options.settings.columns, function (col, idx) {\n            let data,\n                colTp = typeof col;\n            if (colTp === 'string') {\n                data = col;\n            } else if (colTp === 'object' && typeof colTp.data === 'string') {\n                data = colTp.data;\n            } else {\n                data = \"\";\n            }\n            newColumns.push({\n                data: data,\n                width: colPercents[idx].toString() + '%'\n            });\n        })\n        this.options.settings.columns = newColumns;\n    },\n    beforeDataTableRender: function () {\n        this.options.scrollRows = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_DATA_TABLE_FIXED_HEADER);\n\n        this.options.projectStatusList = PJQ.app.session.project.getProjectStatusList();\n        this.options.childDataTables = [];\n\n        this.options.contextMenuOptions = {\n            actions: this.getContextMenuItems(),\n            isHideNoActions: true\n        };\n\n        if (this.options.settings) {\n            // enable paging for grids that have a setting for it / are not subgrids\n            if (this.options.settings.rowsPerPage !== 0 && this.options.view.indexOf('-') === -1)\n                this.options.pageLength = this.options.settings.rowsPerPage;\n            else\n                this.options.pageLength = 2147483646;\n\n            this.setCustomOrder();\n\n            let fixedColumnsLeft = 0;\n            switch (this.options.settings.view) {\n                case PJQ.constants.projectMessaging.views.GROUPCONT:\n                case PJQ.constants.projectMessaging.views.GROUPCONT_CONT:\n                case PJQ.constants.projectMessaging.views.GROUPCOMP:\n                case PJQ.constants.projectMessaging.views.GROUPCOMP_COMP_CONT:\n                case PJQ.constants.projectMessaging.views.MSGCONT:\n                case PJQ.constants.projectMessaging.views.MSGCONT_CONT:\n                case PJQ.constants.projectMessaging.views.RSPCONT:\n                case PJQ.constants.projectMessaging.views.RSPCONT_CONT:\n                case PJQ.constants.projectMessaging.views.BIDPKGS_CONT:\n                    fixedColumnsLeft = 1;\n                    break;\n                case PJQ.constants.projectMessaging.views.GROUPCOMP_COMP:\n                case PJQ.constants.projectMessaging.views.CONT:\n                case PJQ.constants.projectMessaging.views.COMP:\n                case PJQ.constants.projectMessaging.views.COMP_CONT:\n                    fixedColumnsLeft = 2;\n                    break;\n            }\n            if (fixedColumnsLeft > 0) {\n                this.options.colReorder = {\n                    fixedColumnsLeft: fixedColumnsLeft,\n                    realtime: false\n                };\n            }\n        }\n\n        this.options.createdRow = _.bind(this.createdRow, this);\n\n        if (typeof this.options.beforeDataTableRender === 'function') {\n            this.options.beforeDataTableRender();\n        }\n    },\n    setCustomOrder: function () {\n        if (!this.options.settings)\n            return;\n\n        if (this.options.settings.orderBy !== 'sortOrder') {\n            if (_.size(this.options.settings.columns) === 0) {\n                this.options.settings.orderBy = this.options.settings.columnsDefault[0];\n            } else if (this.options.settings.columns.indexOf(this.options.settings.orderBy) === -1) {\n                this.options.settings.orderBy = this.options.settings.columns[0];\n            }\n        }\n        _.each(this.getColumns(false, this.options.view), _.bind(function (column, index) {\n            if (column.columnData === this.options.settings.orderBy) {\n                this.options.order = [[index, this.options.settings.orderAscending ? 'asc' : 'desc']];\n            }\n        }, this));\n\n        if (this.options.settings.view !== PJQ.constants.projectMessaging.views.GROUPCONT &&\n            this.options.settings.view !== PJQ.constants.projectMessaging.views.GROUPCOMP &&\n            this.options.settings.view !== PJQ.constants.projectMessaging.views.BIDPKGS &&\n            this.options.settings.view !== PJQ.constants.projectMessaging.views.MSGCONT &&\n            this.options.settings.view !== PJQ.constants.projectMessaging.views.RSPCONT) {\n            _.each(this.getColumns(false, this.options.view), _.bind(function (column, index) {\n                if (column.columnData === 'companyName' && this.options.settings.orderBy !== 'companyName') {\n                    this.options.order.push([index, 'asc']);\n                }\n            }, this));\n            _.each(this.getColumns(false, this.options.view), _.bind(function (column, index) {\n                if (column.columnData === 'contactName' && this.options.settings.orderBy !== 'contactName') {\n                    this.options.order.push([index, 'asc']);\n                }\n            }, this));\n            if (this.dataTable) {\n                this.dataTable.order(this.options.order).draw();\n            }\n        }\n    },\n    columnOrderChanged: function (columns) {\n        if (this.options.userSettings != null) {\n            /* #311 - error when drag-drop sorting columns.\n            let settings = this.options.userSettings.get('settings');\n            for (let i = 0; i < _.size(settings); i++) {\n                if (settings[i].view === this.options.view) {\n                    settings[i].columns = columns;\n                }\n            }\n            this.options.userSettings.set('settings', settings);\n\n             */\n            this.options.userSettings.save();\n        }\n    },\n    orderByChanged: function (columns) {\n        this.setCustomOrder();\n        if (this.options.userSettings != null) {\n            let settings = this.options.userSettings.get('settings');\n            for (let i = 0; i < _.size(settings); i++) {\n                if (settings[i].view === this.options.settings.view) {\n                    settings[i].orderBy = this.options.settings.orderBy;\n                    settings[i].orderAscending = this.options.settings.orderAscending;\n                }\n            }\n            this.options.userSettings.set('settings', settings);\n            this.options.userSettings.save();\n        }\n    },\n    afterDataTableRender: function () {\n        this.afterDataTableRenderChild();\n    },\n    afterDataTableRenderChild: function () {\n    },\n    getRowChildTable: function (childOpts) {\n    },\n    getRowChildData: function (row) {\n    },\n    setRowStyle: function (row, status, isBlacklisted) {\n    },\n    getContextMenuItems: function () {\n\n    },\n    statusChanged: function (statuses) {\n    },\n    getCustomFieldColumn: function (customField, isCompany) {\n        return {\n            \"columnData\": (isCompany ? 'companyCustomField' : 'contactCustomField') + '_' + customField.get('id'),\n            \"title\": customField.get('fieldName'),\n            \"render\": function (data, type, row) {\n                let rowField;\n                if (isCompany) {\n                    rowField = row.getCompanyCustomField(customField.get('id'));\n                } else {\n                    rowField = row.getContactCustomField(customField.get('id'));\n                }\n\n                let fieldValue = null;\n                if (rowField != null) {\n                    fieldValue = rowField.value;\n                }\n                switch (customField.get('fieldType')) {\n                    case PJQ.constants.customFields.fieldTypes.TEXT:\n                        if (fieldValue && type !== 'sort' && type !== 'type') {\n                            if (PJQ.helpers.urlHelpers.isURL(fieldValue))\n                                fieldValue = '<a target=\"_blank\" href=\"' + fieldValue + '\">' + fieldValue + '</a>';\n                        }\n                        break\n                    case PJQ.constants.customFields.fieldTypes.DATE:\n                        if (fieldValue) {\n                            if (type !== 'sort' && type !== 'type')\n                                fieldValue = PJQ.helpers.dateHelpers.getDateString(new Date(fieldValue), PJQ.helpers.dateHelpers.dateFormats.DATE);\n                        }\n                        break;\n                    case PJQ.constants.customFields.fieldTypes.DATETIME:\n                        if (fieldValue) {\n                            if (type !== 'sort' && type !== 'type')\n                                fieldValue = PJQ.helpers.dateHelpers.getDateString(new Date(fieldValue), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME);\n                        }\n                        break;\n                    case PJQ.constants.customFields.fieldTypes.BOOL:\n                        if (fieldValue != null)\n                            fieldValue = fieldValue ? 'Yes' : 'No';\n                        else\n                            fieldValue = '';\n                        break;\n                    case PJQ.constants.customFields.fieldTypes.CHOICE:\n                        if (fieldValue) {\n                            let choices = [];\n\n                            // convert single choice value into array so that the logic below can work for both types.\n                            if (typeof fieldValue === 'number')\n                                fieldValue = [fieldValue];\n\n                            _.each(customField.choices.models, _.bind(function (choice) {\n                                if (_.find(fieldValue, function (value) {\n                                    return value === choice.get('id');\n                                }))\n                                    choices.push(choice.get('choiceName'));\n                            }, this));\n\n                            fieldValue = choices.join((', '));\n                        }\n                        break;\n                    case PJQ.constants.customFields.fieldTypes.MONEY:\n                        if (type === 'sort' || type === 'type') {\n                            if (fieldValue && fieldValue !== '$')\n                                fieldValue = parseFloat(PJQ.helpers.formatHelpers.numbersOnly(fieldValue, true));\n                            else\n                                fieldValue = 0;\n\n                        } else\n                            fieldValue = PJQ.helpers.formatHelpers.formatCurrency(fieldValue);\n                        break;\n                    case PJQ.constants.customFields.fieldTypes.PHONE:\n                        if (type !== 'sort' && type !== 'type') {\n                            let html = '<div style=\"min-width:100px;\" class=\"d-flex align-items-center\">',\n                                phoneFormatted = (fieldValue ? PJQ.helpers.formatHelpers.formatPhoneNumber(fieldValue) : 'N/A'),\n                                phoneWrapped = (fieldValue ? PJQ.helpers.formatHelpers.formatPhoneNumber(fieldValue, true) : 'N/A');\n\n                            if (fieldValue !== '')\n                                html += '<button type=\"button\" class=\"btn btn-transparent-dark btn-copy-phone\" title=\"Copy Phone #\" data-phone=\"' + phoneFormatted + '\"><i class=\"far fa-phone text-dark\"></i></button>';\n\n                            html += '<div class=\"flex-fill ' + (fieldValue ? '' : 'text-muted') + '\">' + phoneWrapped + '</div>';\n                            html += '</div>';\n\n                            fieldValue = html;\n                        }\n                        break;\n                }\n                return fieldValue;\n            },\n            \"customFieldId\": customField.get('id')\n        };\n    },\n    gradeContactCompany: function (sender) {\n        let $target = $(sender.currentTarget),\n            contactCompanyId = $target.data('contactCompanyId'),\n            tr = $target.closest('tr'),\n            parentTR = $target.closest('tr').parent().closest('tr').prev(),\n            row = this.getRow(tr);\n\n        new PJQ.views.projects.GradeProjectContactModal({\n            contactCompanyId: contactCompanyId,\n            row: row,\n            onGrade: _.bind(function (grade) {\n                let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n                    {\n                        endpoint: 'projects',\n                        value: PJQ.app.session.project.id\n                    },\n                    {\n                        endpoint: 'participants',\n                        value: row.data().get('contactCompanyId')\n\n                    },\n                    {\n                        endpoint: 'grade',\n                        value: row.data().get('grade')\n\n                    }\n                ]);\n                new PJQ.ajax.Request({\n                    endpoint: endpoint\n                }).post().done(_.bind(function (data) {\n                    row.data().set('gradeAverage', data);\n                    row.invalidate().draw();\n\n                    if (this.options.view === PJQ.constants.projectMessaging.views.COMP || this.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP) {\n                        // update child table for this company\n                        _.each(this.options.childDataTables, _.bind(function (childDT) {\n                            if (typeof childDT.statusChanged === 'function') {\n                                if (row.data().get('contactCompanyId') !== childDT.$el.data('id'))\n                                    return;\n\n                                _.each(childDT.dataTable.data(), _.bind(function (item) {\n                                    item.set('gradeAverage', data);\n                                    item.set('grade', row.data().get('grade'));\n                                }, this));\n\n                                childDT.dataTable.rows().invalidate().draw();\n                            }\n                        }, this));\n\n                    } else if (this.options.view === PJQ.constants.projectMessaging.views.COMP_CONT || this.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP_CONT) {\n                        // update all other rows in this table for the same company\n                        _.each(this.dataTable.data(), _.bind(function (item) {\n                            item.set('gradeAverage', data);\n                            item.set('grade', row.data().get('grade'));\n                        }, this));\n                        this.dataTable.rows().invalidate().draw();\n\n                        // update parent table / company row\n                        let rowParent = this.options.parentDataTable.getRow(parentTR);\n                        rowParent.data().set('gradeAverage', data);\n                        rowParent.data().set('grade', row.data().get('grade'));\n                        rowParent.invalidate().draw();\n                    }\n\n                    PJQ.notifications.notify.successNotify({\n                        message: 'Grade recorded successfully'\n                    });\n                }, this)).fail(function () {\n                    PJQ.notifications.notify.errorNotify({\n                        message: 'Unable to record Grade.  Please contact customer service.'\n                    });\n                });\n            }, this)\n        });\n    },\n    childRowToggle: function (sender) {\n        let $target = $(sender.currentTarget),\n            id = $target.data('id'),\n            tr = $target.closest('tr'),\n            row = this.getRow(tr);\n        if (row.child.isShown()) {\n            // This row is already open - close it\n            row.child.hide();\n            tr.removeClass('shown');\n            $target.removeClass('fa-minus-circle').addClass('fa-plus-circle');\n        } else {\n            $target.removeClass('fa-plus-circle').addClass('fa-minus-circle');\n            let childClass = 'subgrid-' + id.toString(),\n                $childTable = $('<div data-id=\"' + id + '\" />', {\n                    class: childClass + ' p-2'\n                });\n            row.child($childTable).show();\n\n            let childData = this.getRowChildData(row);\n            if (childData != null) {\n                childData.fetch({\n                    success: _.bind(function () {\n                        if (this.options.view === PJQ.constants.projectMessaging.views.GROUPCONT) {\n                            let selectedContactGroups = [], groupId = parseInt(childData.options.groupIdList);\n                            _.each(childData.models, _.bind(function (contact) {\n                                _.each(this.options.projectMessagingView.options.selectedContactGroups, _.bind(function (contactGroup) {\n                                    if (contactGroup.contactId === contact.get('contactId'))\n                                        selectedContactGroups.push({\n                                            contactId: contact.get('contactId'),\n                                            groupId: groupId\n                                        });\n                                }, this));\n                            }, this));\n                            this.options.projectMessagingView.addSelectedContactGroups(selectedContactGroups);\n                        }\n\n                        if (this.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP) {\n                            let selectedContactGroups = [], groupId = parseInt(childData.options.groupIdList),\n                                isEnableDeclined = this.options.projectMessagingView.isEnableDeclined();\n\n                            _.each(childData.models, _.bind(function (company) {\n\n                                let selectedContacts = company.attributes.selectableContacts;\n                                if (isEnableDeclined)\n                                    $.merge(selectedContacts, company.attributes.declinedContacts);\n\n                                _.each(selectedContacts, _.bind(function (contact) {\n                                    _.each(this.options.projectMessagingView.options.selectedContactGroups, _.bind(function (contactGroup) {\n\n                                        // iterate through selectable contacts and add em if their ids match the list\n                                        if (contactGroup.contactId === contact)\n                                            selectedContactGroups.push({contactId: contact, groupId: groupId});\n                                    }, this));\n\n                                }, this));\n\n                            }, this));\n\n                            this.options.projectMessagingView.addSelectedContactGroups(selectedContactGroups);\n                        }\n\n                        let childTable = this.getRowChildTable({\n                            el: $childTable,\n                            data: childData.models,\n                            parentDataTable: this,\n                            parentId: id,\n                            projectMessagingView: this.options.projectMessagingView\n                        });\n                        this.options.childDataTables = _.filter(this.options.childDataTables, _.bind(function (childDt) {\n                            return childDt.options.parentId !== id;\n                        }, this));\n                        this.options.childDataTables.push(childTable);\n                        tr.addClass('shown');\n                    }, this)\n                });\n            }\n        }\n    },\n    childRowToggleAll: function (sender) {\n        let $target = $(sender.currentTarget);\n\n        this.dataTable.rows().eq(0).each(_.bind(function (index) {\n            let row = this.dataTable.row(index), id = row.data().get('groupId');\n\n            if ($target.hasClass('fa-plus-circle') && !row.child.isShown()) {\n                let childClass = 'subgrid-' + id.toString(),\n                    $childTable = $('<div data-id=\"' + id + '\" />', {\n                        class: childClass\n                    });\n                row.child($childTable).show();\n\n                let childData = this.getRowChildData(row);\n                if (childData != null) {\n                    childData.fetch({\n                        success: _.bind(function () {\n                            let childTable = this.getRowChildTable({\n                                el: $childTable,\n                                data: childData.models,\n                                parentDataTable: this,\n                                parentId: id,\n                                projectMessagingView: this.options.projectMessagingView\n                            });\n                            this.options.childDataTables = _.filter(this.options.childDataTables, _.bind(function (childDt) {\n                                return childDt.options.parentId !== id;\n                            }, this));\n                            this.options.childDataTables.push(childTable);\n                            $(row.node()).addClass('shown');\n                        }, this)\n                    });\n                }\n            } else if ($target.hasClass('fa-minus-circle') && row.child.isShown()) {\n                row.child.hide();\n                $(row.node()).removeClass('shown');\n            }\n\n        }, this));\n\n        if ($target.hasClass('fa-plus-circle'))\n            $target.removeClass('fa-plus-circle').addClass('fa-minus-circle');\n        else\n            $target.removeClass('fa-minus-circle').addClass('fa-plus-circle');\n    },\n    onStatusChanged: function (e) {\n        let $target = $(e.currentTarget),\n            status = $target.val().toUpperCase(),\n            row = this.getRow($target.closest('tr')),\n            TR = $target.closest('tr'),\n            parentTR = $target.closest('tr').parent().closest('tr').prev(),\n            data = row.data(), callback = _.bind(function () {\n                data.updateStatus(status, _.bind(function (statuses) {\n\n                    data.set('status', status);\n\n                    if (this.options.parentDataTable != null) {\n\n                        if (this.options.view !== PJQ.constants.projectMessaging.views.CONTGROUP ||\n                            (this.options.parentDataTable.options.view !== PJQ.constants.projectMessaging.views.GROUPCOMP_COMP_CONT &&\n                                this.options.parentDataTable.options.view !== PJQ.constants.projectMessaging.views.GROUPCONT_CONT) ||\n                            parseInt(this.options.parentDataTable.dataTable.rows(0).row().data().collection.options.groupIdList) === row.data().get('groupId')) {\n\n                            this.options.parentDataTable.statusChanged(statuses, parentTR, this.options.view);\n                        }\n                    }\n\n                    _.each(this.options.childDataTables, _.bind(function (childDT) {\n                        if (typeof childDT.statusChanged === 'function') {\n                            let data = row.data();\n                            if ((data.collection.options.view === PJQ.constants.projectMessaging.views.COMP) && data.get('contactCompanyId') !== childDT.$el.data('id'))\n                                return;\n\n                            if ((data.collection.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP_CONT ||\n                                    data.collection.options.view === PJQ.constants.projectMessaging.views.GROUPCONT_CONT ||\n                                    data.collection.options.view === PJQ.constants.projectMessaging.views.COMP_CONT ||\n                                    data.collection.options.view === PJQ.constants.projectMessaging.views.CONT ||\n                                    data.collection.options.view === PJQ.constants.projectMessaging.views.MSGCONT_CONT ||\n                                    data.collection.options.view === PJQ.constants.projectMessaging.views.RSPCONT_CONT ||\n                                    data.collection.options.view === PJQ.constants.projectMessaging.views.BIDPKGS_CONT)\n                                && data.get('contactId') !== childDT.$el.data('id'))\n                                return;\n\n                            childDT.statusChanged(statuses, null, this.options.view);\n                        }\n                    }, this));\n\n                    this.setRowStyle(TR, data.attributes.status, data.attributes.isBlacklisted || data.attributes.isCompanyBlacklisted);\n\n                    PJQ.notifications.notify.successNotify({\n                        message: 'Status updated'\n                    });\n                }, this));\n            }, this);\n\n        let groupListArray = data.get('groupListDisplay') != null ? data.get('groupListDisplay').split(',') : [];\n        if (groupListArray.length > 1 && !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.RSVP_DISABLE_PER_GROUP) && this.options.view !== PJQ.constants.projectMessaging.views.GROUPCOMP_COMP_CONT && this.options.view !== PJQ.constants.projectMessaging.views.GROUPCONT_CONT && this.options.view !== PJQ.constants.projectMessaging.views.GROUPCOMP_COMP) {\n            new PJQ.views.modals.YesNo({\n                header: \"Confirm Status Change\",\n                body: \"Are you sure you want to change the status for all Trades for this Participant?\",\n                onYes: _.bind(function () {\n                    callback();\n                }, this),\n                onNo: _.bind(function () {\n                    $target.val(data.get('status'));\n                }, this)\n            });\n        } else {\n            callback();\n        }\n    },\n    mouseoverComments: function (e) {\n        let $target = $(e.currentTarget),\n            row = this.getRow($target.closest('tr')),\n            participant = row.data(),\n            isCompanyComments = $target.hasClass('comment-company');\n        if (_.size(isCompanyComments ? participant.get('lastCompanyComment') : participant.get('lastContactComment')) > 0) {\n            this.commentHoverContactId = isCompanyComments ? null : participant.id;\n            this.commentHoverContactCompanyId = isCompanyComments ? participant.id : null;\n            let fnShowComments = _.bind(function (comments) {\n                let tooltip = new PJQ.Tooltip($target, {\n                    template: this.options.subTemplates.commentsTooltip,\n                    container: this.$el,\n                    trigger: 'hover',\n                    renderData: function () {\n                        return {\n                            comments\n                        };\n                    }\n                });\n                tooltip.show();\n            }, this);\n            if (!isCompanyComments && participant.comments && participant.comments.isFetched) {\n                fnShowComments(participant.comments);\n            } else if (isCompanyComments && participant.companyComments && participant.companyComments.isFetched) {\n                fnShowComments(participant.companyComments);\n            } else {\n                setTimeout(_.bind(function () {\n                    if ((isCompanyComments && this.commentHoverContactCompanyId === participant.id)\n                        || !isCompanyComments && this.commentHoverContactId === participant.id) {\n                        let comments = new PJQ.collections.projectParticipants.ProjectParticipantComments(null, {\n                            participant: participant,\n                            project: PJQ.app.session.project,\n                            isCompanyComments: isCompanyComments\n                        });\n                        comments.fetch({\n                            success: _.bind(function () {\n                                if (isCompanyComments) {\n                                    participant.companyComments = comments;\n                                } else {\n                                    participant.comments = comments;\n                                }\n                                fnShowComments(comments);\n                            }, this)\n                        });\n                    }\n                }, this), 1000);\n            }\n        }\n    },\n    mouseleaveComments: function () {\n        this.commentHoverContactId = null;\n        this.commentHoverContactCompanyId = null;\n    },\n    addComment: function (e) {\n        let $target = $(e.currentTarget),\n            row = this.getRow($target.closest('tr')),\n            participant = row.data(),\n            isCompanyComments = $target.hasClass('btn-add-comment-company'),\n            contextId = isCompanyComments ? participant.attributes.contactCompanyId : participant.attributes.contactId,\n            tooltip = new PJQ.Tooltip($target, {\n                template: this.options.subTemplates.addCommentTooltip,\n                container: this.$el,\n                trigger: 'click',\n                title: '',\n                onShow: _.bind(function () {\n                    setTimeout(_.bind(function () {\n                        this.$el.find('.comment-text-tooltip').focus();\n                    }, this), 300);\n                }, this),\n                afterRender: _.bind(function (tp) {\n                    this.$el.off('keypress', '.comment-text-tooltip[data-contact-id=\"'+contextId+'\"]');\n                    this.$el.on('keypress', '.comment-text-tooltip[data-contact-id=\"'+contextId+'\"]', function (e) {\n                        if (e.which === 13) {\n                            $(this).siblings('.btn-add-comment-tooltip[data-contact-id=\"'+contextId+'\"]').trigger('click');\n                            e.preventDefault();\n                        }\n                    });\n\n                    this.$el.off('click', '.btn-add-comment-tooltip[data-contact-id=\"'+contextId+'\"]');\n                    this.$el.on('click', '.btn-add-comment-tooltip[data-contact-id=\"'+contextId+'\"]', _.bind(function (e) {\n                        let $comment = $(e.currentTarget).parent().find('.comment-text-tooltip[data-contact-id=\"'+contextId+'\"]'),\n                            commentText = $comment.val();\n                        if (_.size(commentText) > 0) {\n                            let comment = new PJQ.models.projectParticipants.ProjectContactComment({\n                                comment: commentText\n                            }, {\n                                project: PJQ.app.session.project,\n                                contactId: contextId,\n                                isCompanyComments: isCompanyComments\n                            });\n                            comment.save(null, {\n                                success: _.bind(function () {\n                                    tp.remove();\n\n                                    let parentTR = $target.closest('tr').parent().closest('tr').prev(),\n                                        rowParent = this.options.parentDataTable != null ? this.options.parentDataTable.getRow(parentTR) : null;\n                                    this.onComment(row, rowParent, comment, isCompanyComments);\n                                }, this)\n                            });\n                        }\n                    }, this));\n                }, this),\n                renderData: function () {\n                    return {\n                        participant : participant,\n                        contactId: contextId\n                    };\n                }\n            });\n        tooltip.show();\n    },\n    manageComments: function (e) {\n        let row = this.getRow($(e.currentTarget).closest('tr')),\n            parentTR = $(e.currentTarget).closest('tr').parent().closest('tr').prev(),\n            participant = row.data(),\n            isCompanyComments = $(e.currentTarget).hasClass('btn-comment-company') || $(e.currentTarget).hasClass('btn-comment-contact-company'),\n            comments = new PJQ.collections.projectParticipants.ProjectParticipantComments(null, {\n                participant: participant,\n                project: PJQ.app.session.project,\n                isCompanyComments: isCompanyComments\n            });\n        comments.fetch({\n            success: _.bind(function () {\n                new PJQ.views.projects.ProjectParticipantCommentModal({\n                    participant: participant,\n                    comments: comments.models,\n                    project: PJQ.app.session.project,\n                    isCompanyComments: isCompanyComments,\n                    onComment: _.bind(function (comment) {\n                        let rowParent = this.options.parentDataTable != null ? this.options.parentDataTable.getRow(parentTR) : null;\n                        this.onComment(row, rowParent, comment, isCompanyComments);\n                    }, this)\n                });\n            }, this)\n        });\n    },\n    onComment: function (row, rowParent, comment, isCompanyComments) {\n        row.data().set(isCompanyComments ? 'lastCompanyComment' : 'lastContactComment', {\n            comment: comment.get('comment')\n        });\n        row.invalidate().draw(false);\n\n        if (isCompanyComments) {\n            // if this is a contact child view, update the company parent in case it has a company comment column also\n            if (this.options.view === PJQ.constants.projectMessaging.views.COMP_CONT || this.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP_CONT) {\n                // update parent table / company row\n                if (rowParent != null) {\n                    rowParent.data().set('lastCompanyComment', {\n                        comment: comment.get('comment')\n                    });\n                    rowParent.invalidate().draw(false);\n                }\n            } else if (this.options.view === PJQ.constants.projectMessaging.views.COMP || this.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP) {\n                // if this is a company view, update the contact child view in case it has a company comment column also\n                _.each(this.options.childDataTables, _.bind(function (childDT) {\n                    if (typeof childDT.statusChanged === 'function') {\n                        if (row.data().get('contactCompanyId') !== childDT.$el.data('id'))\n                            return;\n\n                        _.each(childDT.dataTable.data(), _.bind(function (item) {\n                            item.set('lastCompanyComment', {\n                                comment: comment.get('comment')\n                            });\n                        }, this));\n                        childDT.dataTable.rows().invalidate().draw(false);\n\n                    }\n                }, this));\n            }\n        }\n    },\n    getColumns: function () {\n    },\n    cleanup: function () {\n        this.undelegateEvents();\n        $(this.el).empty();\n    },\n    getIsRootView: function () {\n        return (this.options.view.indexOf('-') === -1);\n    },\n    createdRow: function (row, data, dataIndex) {\n    }\n});\n\nPJQ.views.projects.ProjectMessagingTradesDataTable = PJQ.views.projects.ProjectMessagingDataTable.extend({\n    events: {\n        'click i.trade-toggle-row': 'childRowToggle',\n        'click i.trade-toggle-all-rows': 'childRowToggleAll',\n        'change .trade-select-all-contacts': 'selectAll'\n    },\n    getColumns: function (includeAllColumns = false) {\n        let columns = [], includeColumns = ['groupName', 'groupStatus', 'groupCount'];\n\n        this.totalParticipants = 0;\n        this.selectColumnHeader = '';\n        this.selectColumnWidth = '15px';\n        _.each(this.options.data, _.bind(function (row) {\n            this.totalParticipants += row.attributes.totalParticipants;\n        }, this));\n        if (this.totalParticipants < 1000) {\n            this.selectColumnHeader = '<i class=\"fal fa-plus-circle trade-toggle-all-rows mr-1\"></i>';\n            this.selectColumnWidth = '2.8em';\n        }\n        this.selectColumnHeader += '<div class=\"pretty p-default p-icon p-smooth fs-18 m-0\"><input type=\"checkbox\" class=\"trade-select-all-contacts\" ' + (this.options.projectMessagingView && this.options.projectMessagingView.options.isTradesViewSelectAll ? 'checked=\"checked\"' : '') + ' /><div class=\"state\"><i class=\"icon fal fa-check\"></i> <label class=\"wd-0\">&nbsp;</label></div></div>';\n\n        if (!includeAllColumns) {\n\n            if (_.size(this.options.settings.columns) > 0)\n                includeColumns = this.options.settings.columns;\n            else\n                includeColumns = this.options.settings.columnsDefault;\n\n            columns.push({\n                \"width\": this.selectColumnWidth,\n                \"columnData\": \"groupMembers\",\n                \"data\": null,\n                \"title\": this.selectColumnHeader,\n                \"className\": \"dt-center\",\n                \"orderable\": false,\n                \"searchable\": false,\n                \"defaultContent\": '',\n                \"render\": function (data, type, row) {\n                    return '<i class=\"fal fa-plus-circle trade-toggle-row\" data-id=\"' + row.get('groupId') + '\"></i>';\n                }\n            });\n        }\n\n        _.each(includeColumns, _.bind(function (columnName) {\n            let cName,\n                cNameTp = typeof columnName;\n            if (cNameTp === 'string') {\n                cName = columnName;\n            } else if (cNameTp === 'object' && typeof cNameTp.data === 'string') {\n                cName = cNameTp.data;\n            } else {\n                return;\n            }\n            switch (cName) {\n                case 'groupName':\n                    columns.push({\n                        \"columnData\": \"groupName\",\n                        \"data\": {\n                            \"_\": \"attributes.sortOrder\",\n                            \"sort\": \"attributes.sortOrder\",\n                            \"filter\": \"attributes.groupName\",\n                            \"display\": \"attributes.groupName\"\n                        },\n                        \"title\": \"Trade\",\n                    });\n                    break;\n                case 'groupStatus':\n                    columns.push({\n                        \"columnData\": \"groupStatus\",\n                        \"render\": function (data, type, row) {\n                            if (type === 'sort' || type === 'type')\n                                return '';\n\n                            let innerHtml = '';\n                            _.each(row.get('statuses'), _.bind(function (status) {\n                                let statusPercent = (status.count / row.get('totalParticipants')) * 100,\n                                    textColor = PJQ.helpers.colorHelpers.idealLinkColorForBackground(status.backgroundColor);\n                                innerHtml += '<div class=\"progress-bar\" role=\"progressbar\" title=\"' + status.status + ' (' + status.count + ')\" style=\"background-color: ' + status.backgroundColor + ';color: ' + textColor + ';width:' + statusPercent + '%\">\\n' +\n                                    status.count +\n                                    '</div>';\n                            }, this));\n                            let outerHtml = '<div class=\"progress\">';\n                            outerHtml += innerHtml + '</div>';\n                            return outerHtml;\n                        },\n                        \"title\": \"Status\",\n                        \"orderable\": false,\n                        \"width\": \"60%\"\n                    });\n                    break;\n                case 'groupCount':\n                    columns.push({\n                        \"columnData\": \"groupCount\",\n                        \"data\": \"attributes.totalParticipants\",\n                        \"title\": (this.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP ? \"Companies\" : \"Contacts\"),\n                        \"width\": \"40px\",\n                        \"render\": function (data) {\n                            return '<div class=\"text-align-center\">' + data.toString() + '</div>';\n                        }\n                    });\n                    break;\n            }\n        }, this));\n\n        return columns;\n    },\n    getChildTableType: function () {\n        if (this.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP) {\n            return PJQ.constants.projectMessaging.views.GROUPCOMP_COMP;\n        } else if (this.options.view === PJQ.constants.projectMessaging.views.GROUPCONT) {\n            return PJQ.constants.projectMessaging.views.GROUPCONT_CONT;\n        }\n    },\n    getChildTableSettings: function () {\n        return this.options.projectMessagingView.options.settings.getSettings(this.getChildTableType());\n    },\n    getRowChildTable: function (childOpts) {\n        childOpts.view = this.getChildTableType();\n        childOpts.settings = this.getChildTableSettings();\n        childOpts.userSettings = this.options.userSettings;\n        childOpts.projectMessagingView = this.options.projectMessagingView;\n        childOpts.parentDataTable = this;\n        childOpts.dom = 't';\n        return this.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP ? new PJQ.views.projects.ProjectMessagingCompanyDataTable(childOpts) : new PJQ.views.projects.ProjectMessagingContactDataTable(childOpts);\n    },\n    getRowChildData: function (row) {\n        let searchFor = this.options.projectMessagingView.getSearchFor(),\n            statusFilter = [...this.options.projectMessagingView.options.filter.status];\n\n        if (this.options.projectMessagingView.options.filter.isDelivered)\n            statusFilter.push('DELIVERED');\n\n        if (this.options.projectMessagingView.options.filter.isOpened)\n            statusFilter.push('OPENED');\n\n        if (this.options.projectMessagingView.options.filter.isVisited)\n            statusFilter.push('VISITED');\n\n        if (this.options.projectMessagingView.options.filter.isDownloaded)\n            statusFilter.push('DOWNLOADS');\n\n        if (this.options.projectMessagingView.options.filter.isPrintOrder)\n            statusFilter.push('ORDERS ONLY');\n\n        if (this.options.projectMessagingView.options.filter.publicPrivate)\n            statusFilter.push(this.options.projectMessagingView.options.filter.publicPrivate);\n\n        _.each(this.options.projectMessagingView.options.filter.laborStatus, _.bind(function (status) {\n            statusFilter.push('IS_' + status);\n        }, this));\n\n        _.each(this.options.projectMessagingView.options.filter.minorityStatus, _.bind(function (status) {\n            statusFilter.push('IS_' + status);\n        }, this));\n\n        return new PJQ.collections.projectParticipants.ProjectParticipantsForView(null, {\n            project: PJQ.app.session.project,\n            view: this.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP ? PJQ.constants.projectMessaging.views.COMP : PJQ.constants.projectMessaging.views.CONT,\n            groupIdList: row.data().get('groupId').toString(),\n            statusFilter: _.uniq(statusFilter).join(','),\n            searchFor: searchFor,\n            isPerGroup: true,\n            withCustomFields: this.getChildTableSettings().hasCustomFields\n        });\n    },\n    selectAll: function (e) {\n        let loader = new PJQ.Loader($('.nav-body'));\n        let isSelected = $(e.currentTarget).prop('checked');\n        this.options.projectMessagingView.options.isTradesViewSelectAll = isSelected;\n        this.options.projectMessagingView.options.selectedContacts = [];\n        if (isSelected) {\n            // get company/contact list for project, iterate through it and add any that aren't declined (unless enabledeclined is true)\n            this.options.projectMessagingView.getViewData(this.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP ? 'company' : 'contact', _.bind(function (data) {\n                let enableDeclined = this.options.projectMessagingView.isEnableDeclined();\n                _.each(data.models, _.bind(function (model) {\n\n                    if (this.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP) {\n                        _.each(model.get('selectableContacts'), _.bind(function (id) {\n                            this.options.projectMessagingView.options.selectedContacts.push(id);\n                        }, this));\n\n                        if ((enableDeclined) && _.size(model.get('declinedContacts')) > 0) {\n                            _.each(model.get('declinedContacts'), _.bind(function (id) {\n                                this.options.projectMessagingView.options.selectedContacts.push(id);\n                            }, this));\n\n                        }\n                    } else {\n                        let isDeclined = (this.options.projectStatusList[1].toString().split(',')[0].toLowerCase() === model.get('status').toString().toLowerCase());\n                        if ((enableDeclined || !isDeclined) && !model.attributes.isBlacklisted && !model.attributes.isCompanyBlacklisted)\n                            this.options.projectMessagingView.options.selectedContacts.push(model.id);\n                    }\n\n                }, this));\n\n                this.options.projectMessagingView.options.selectedContacts = _.uniq(this.options.projectMessagingView.options.selectedContacts);\n                this.options.projectMessagingView.renderContactStats();\n                this.options.projectMessagingView.renderView();\n                loader.remove();\n            }, this), {isPerGroup: true});\n        } else {\n            // clear any visible checkboxes in sub-grids\n            this.$('.select-company,.select-contact').prop('checked', false);\n            loader.remove();\n        }\n\n        this.options.projectMessagingView.renderContactStats();\n    }\n});\n\nPJQ.views.projects.ProjectMessagingBidPackagesDataTable = PJQ.views.projects.ProjectMessagingDataTable.extend({\n    events: {\n        'click i.trade-toggle-row': 'childRowToggle',\n        'click i.trade-toggle-all-rows': 'childRowToggleAll',\n        'change .trade-select-all-contacts': 'selectAll',\n        'change select.bid-package-count': 'onBidPackageCountChanged',\n        'blur .bid-package-notes': 'onBidPackageNotesChanged'\n    },\n    getColumns: function (includeAllColumns = false) {\n        let columns = [], includeColumns = ['name', 'bidPackageStatus', 'participantsCount'];\n\n        this.totalParticipants = 0;\n        this.selectColumnHeader = '';\n        this.selectColumnWidth = '15px';\n        _.each(this.options.data, _.bind(function (row) {\n            this.totalParticipants += row.attributes.totalParticipants;\n        }, this));\n        if (this.totalParticipants < 1000) {\n            this.selectColumnHeader = '<i class=\"fal fa-plus-circle trade-toggle-all-rows mr-1\"></i>';\n            this.selectColumnWidth = '2.8em';\n        }\n        this.selectColumnHeader += '<div class=\"pretty p-default p-icon p-smooth fs-18 m-0\"><input type=\"checkbox\" class=\"trade-select-all-contacts\" ' + (this.options.projectMessagingView && this.options.projectMessagingView.options.isTradesViewSelectAll ? 'checked=\"checked\"' : '') + ' /><div class=\"state\"><i class=\"icon fal fa-check\"></i> <label class=\"wd-0\">&nbsp;</label></div></div>';\n\n        let enableCount = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_BID_PACKAGES_COUNT);\n        if (!includeAllColumns) {\n            if (enableCount) {\n                includeColumns = ['name', 'bidPackageCount', 'bidPackageStatus', 'participantsCount'];\n            } else {\n                includeColumns = this.options.settings.columnsDefault;\n            }\n\n            columns.push({\n                \"width\": this.selectColumnWidth,\n                \"columnData\": \"groupMembers\",\n                \"data\": null,\n                \"title\": this.selectColumnHeader,\n                \"className\": \"dt-center\",\n                \"orderable\": false,\n                \"width\": \"5%\",\n                \"searchable\": false,\n                \"defaultContent\": '',\n                \"render\": function (data, type, row) {\n                    return '<i class=\"fal fa-plus-circle trade-toggle-row\" data-id=\"' + row.get('groupId') + '\"></i>';\n                }\n            });\n        }\n\n        _.each(includeColumns, _.bind(function (columnName) {\n            switch (columnName) {\n                case 'name':\n                    columns.push({\n                        \"columnData\": \"sortOrder\",\n                        \"width\": \"30%\",\n                        \"data\": {\n                            \"_\": \"attributes.sortOrder\",\n                            \"sort\": \"attributes.sortOrder\",\n                            \"filter\": \"attributes.bidPackageName\",\n                            \"display\": \"attributes.bidPackageName\"\n                        },\n                        \"render\": function (d, type, row) {\n                            let note = row.get('notes') ? row.get('notes') : '';\n                            if (row.get('bidPackageId') > 0) {\n                                return '<div><div class=\"wd-100 ' + (enableCount ? 'ht-90p' : '') + '\"><div class=\"mb-1 fs-16\">' + row.get(\"bidPackageName\") + '</div>' + (enableCount ? '<div class=\"form-group mb-2 ht-75p\"><textarea class=\"form-control wd-100 ht-100 resize-vert bid-package-notes\" data-cid=\"' + row.cid + '\">' + note + '</textarea></div></div></div>' : '');\n                            } else {\n                                return '<span>' + row.get('bidPackageName') + '</span>'\n                            }\n                        },\n                        \"title\": \"Bid Package\",\n                    });\n                    break;\n                case 'bidPackageCount':\n                    columns.push({\n                        \"columnData\": \"count\",\n                        \"data\": \"attributes.count\",\n                        \"width\": \"10%\",\n                        \"render\": function (data, type, row) {\n                            let count = row.get('count');\n                            if (row.get('bidPackageId') > 0) {\n                                let html = `<select class=\"form-control bid-package-count\" style=\"min-width:40px;\">`\n                                for (let i = 0; i <= 10; i++) {\n                                    if (parseInt(count) === i) {\n                                        html += `<option value=\"` + i + `\" selected>` + i + `</option>`\n                                    } else {\n                                        html += `<option value=\"` + i + `\">` + i + `</option>`\n                                    }\n                                }\n                                if (count && count.toLowerCase() === 'designated') {\n                                    html += `<option value=\"designated\" selected>Designated</option>`\n                                } else {\n                                    html += `<option value=\"designated\">Designated</option>`\n                                }\n                                html += `</select>`\n\n                                return html;\n                            } else {\n                                return '<div></div>';\n                            }\n                        },\n                        \"title\": \"Count\"\n                    });\n                    break;\n                case 'bidPackageStatus':\n                    columns.push({\n                        \"columnData\": \"bidPackageStatus\",\n                        \"render\": function (data, type, row) {\n                            if (type === 'sort' || type === 'type')\n                                return '';\n                            else if (_.size(row.get('statuses')) === 0) {\n                                return 'N/A';\n                            }\n\n                            let innerHtml = '';\n                            _.each(row.get('statuses'), _.bind(function (status) {\n                                let statusPercent = (status.count / row.get('totalParticipants')) * 100,\n                                    textColor = PJQ.helpers.colorHelpers.idealLinkColorForBackground(status.backgroundColor);\n                                innerHtml += '<div class=\"progress-bar\" role=\"progressbar\" title=\"' + status.status + ' (' + status.count + ')\" style=\"background-color: ' + status.backgroundColor + ';color: ' + textColor + ';width:' + statusPercent + '%\">\\n' +\n                                    status.count +\n                                    '</div>';\n                            }, this));\n                            let outerHtml = '<div class=\"progress\">';\n                            outerHtml += innerHtml + '</div>';\n                            return outerHtml;\n                        },\n                        \"title\": \"Status\",\n                        \"orderable\": false,\n                        \"width\": \"50%\"\n                    });\n                    break;\n                case 'participantsCount':\n                    columns.push({\n                        \"columnData\": \"participantCount\",\n                        \"data\": \"attributes.totalParticipants\",\n                        \"title\": \"Contacts\",\n                        \"width\": \"40px\",\n                        \"render\": function (data) {\n                            return '<div class=\"text-align-center\">' + data.toString() + '</div>';\n                        }\n                    });\n                    break;\n            }\n        }, this));\n        return columns;\n    },\n    getChildTableType: function () {\n        return PJQ.constants.projectMessaging.views.BIDPKGS_CONT;\n    },\n    getChildTableSettings: function () {\n        return this.options.projectMessagingView.options.settings.getSettings(this.getChildTableType());\n    },\n    getRowChildTable: function (childOpts) {\n        childOpts.view = this.getChildTableType();\n        childOpts.settings = this.getChildTableSettings();\n        childOpts.userSettings = this.options.userSettings;\n        childOpts.projectMessagingView = this.options.projectMessagingView;\n        childOpts.parentDataTable = this;\n        childOpts.dom = 't';\n        return new PJQ.views.projects.ProjectMessagingContactDataTable(childOpts);\n    },\n    onBidPackageCountChanged: function (e) {\n        let $target = $(e.currentTarget),\n            count = $target.val().toLowerCase(),\n            row = this.getRow($target.closest('tr')),\n            data = row.data();\n\n        data.set('count', count);\n        this.updateBidPackageNotesCount(data.get('bidPackageId'), data.get('notes'), count);\n    },\n    onBidPackageNotesChanged: function (e) {\n        let $target = $(e.currentTarget),\n            notes = $target.val(),\n            row = this.getRow($target.closest('tr')),\n            data = row.data();\n\n        data.set('notes', notes);\n        this.updateBidPackageNotesCount(data.get('bidPackageId'), notes, data.get('count'));\n    },\n    updateBidPackageNotesCount: function (bidPackageId, notes, count) {\n        new PJQ.ajax.Request({\n            endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n                {\n                    endpoint: 'projects',\n                    value: PJQ.app.session.project.get('projectId')\n                },\n                {\n                    endpoint: 'bidpackages',\n                    value: bidPackageId\n                },\n            ]),\n            data: {\n                notes: notes,\n                count: count\n            }\n        }).put().done(_.bind(function (response) {\n            PJQ.notifications.notify.successNotify({\n                message: 'Bid Package Successfully Updated'\n            });\n        }, this));\n    },\n    getRowChildData: function (row) {\n        let searchFor = this.options.projectMessagingView.getSearchFor(),\n            statusFilter = [...this.options.projectMessagingView.options.filter.status];\n\n        if (this.options.projectMessagingView.options.filter.isDelivered)\n            statusFilter.push('DELIVERED');\n\n        if (this.options.projectMessagingView.options.filter.isOpened)\n            statusFilter.push('OPENED');\n\n        if (this.options.projectMessagingView.options.filter.isVisited)\n            statusFilter.push('VISITED');\n\n        if (this.options.projectMessagingView.options.filter.isDownloaded)\n            statusFilter.push('DOWNLOADS');\n\n        if (this.options.projectMessagingView.options.filter.isPrintOrder)\n            statusFilter.push('ORDERS ONLY');\n\n        if (this.options.projectMessagingView.options.filter.publicPrivate)\n            statusFilter.push(this.options.projectMessagingView.options.filter.publicPrivate);\n\n        _.each(this.options.projectMessagingView.options.filter.laborStatus, _.bind(function (status) {\n            statusFilter.push('IS_' + status);\n        }, this));\n\n        _.each(this.options.projectMessagingView.options.filter.minorityStatus, _.bind(function (status) {\n            statusFilter.push('IS_' + status);\n        }, this));\n\n        return new PJQ.collections.projectParticipants.ProjectParticipantsForView(null, {\n            project: PJQ.app.session.project,\n            view: this.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP ? PJQ.constants.projectMessaging.views.COMP : PJQ.constants.projectMessaging.views.CONT,\n            groupIdList: '',\n            statusFilter: _.uniq(statusFilter).join(','),\n            searchFor: searchFor,\n            isPerGroup: false,\n            withCustomFields: this.getChildTableSettings().hasCustomFields,\n            bidPackageId: row.data().get('bidPackageId') > 0 ? row.data().get('bidPackageId') : -1\n        });\n    },\n    selectAll: function (e) {\n        let loader = new PJQ.Loader($('.nav-body'));\n        let isSelected = $(e.currentTarget).prop('checked');\n        this.options.projectMessagingView.options.isTradesViewSelectAll = isSelected;\n        this.options.projectMessagingView.options.selectedContacts = [];\n        if (isSelected) {\n            // get company/contact list for project, iterate through it and add any that aren't declined (unless enabledeclined is true)\n            this.options.projectMessagingView.getViewData('contact', _.bind(function (data) {\n                let enableDeclined = this.options.projectMessagingView.isEnableDeclined();\n                _.each(data.models, _.bind(function (model) {\n\n\n                    let isDeclined = (this.options.projectStatusList[1].toString().split(',')[0].toLowerCase() === model.get('status').toString().toLowerCase());\n                    if ((enableDeclined || !isDeclined) && !model.attributes.isBlacklisted && !model.attributes.isCompanyBlacklisted)\n                        this.options.projectMessagingView.options.selectedContacts.push(model.id);\n\n\n                }, this));\n\n                this.options.projectMessagingView.options.selectedContacts = _.uniq(this.options.projectMessagingView.options.selectedContacts);\n                this.options.projectMessagingView.renderContactStats();\n                this.options.projectMessagingView.renderView();\n                loader.remove();\n            }, this), {isPerGroup: true});\n        } else {\n            // clear any visible checkboxes in sub-grids\n            this.$('.select-company,.select-contact').prop('checked', false);\n            loader.remove();\n        }\n\n        this.options.projectMessagingView.renderContactStats();\n    }\n});\n\nPJQ.views.projects.ProjectMessagingMessagesDataTable = PJQ.views.projects.ProjectMessagingDataTable.extend({\n    events: {\n        'click i.message-toggle-row': 'childRowToggle',\n        'click .btn-show-message': 'showRowFullMessage',\n        'click .btn-view-attachments': 'viewAttachments'\n    },\n    getContextMenuItems: function () {\n        return [\n            {\n                name: 'Resend Message',\n                iconClass: 'fal fa-paper-plane',\n                onClick: _.bind(function (row) {\n                    new PJQ.views.modals.YesNo({\n                        header: \"Resend Message\",\n                        body: \"Are you sure you want to resend this message to all participants?\",\n                        onYes: _.bind(function () {\n                            let enableDeclined = this.options.projectMessagingView.isEnableDeclined();\n                            new PJQ.ajax.Request({\n                                endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n                                    {\n                                        endpoint: 'projects',\n                                        value: PJQ.app.session.project.id\n                                    },\n                                    {\n                                        endpoint: 'projectmessages',\n                                        value: row.data().attributes.projectMessageId\n                                    },\n                                    {\n                                        endpoint: 'resend'\n                                    }\n                                ], [\n                                    {\n                                        parameter: 'resendAll',\n                                        value: true\n                                    },\n                                    {\n                                        parameter: 'enableDeclined',\n                                        value: enableDeclined\n                                    }\n                                ])\n                            }).post().done(_.bind(function (data) {\n                                PJQ.notifications.notify.successNotify({\n                                    message: 'Message is being resent.'\n                                });\n                            }, this));\n\n                        }, this)\n                    });\n\n\n                }, this),\n                isShown: _.bind(function (row) {\n                    return ((this.options.view === PJQ.constants.projectMessaging.views.MSGCONT) && (row.data().get('projectMessageId') > 0));\n                }, this)\n            },\n            {\n                name: 'Copy Message',\n                iconClass: 'fal fa-copy',\n                onClick: _.bind(function (row) {\n                    this.options.projectMessagingView.copyProjectMessage(row.data().get('projectMessageId'));\n                }, this),\n                isShown: _.bind(function (row) {\n                    return (row.data().get('projectMessageId') > 0);\n                }, this)\n            },\n            {\n                name: 'Export Message',\n                iconClass: 'fal fa-copy',\n                onClick: _.bind(function (row) {\n                    this.export(row.data());\n                }, this),\n                isShown: _.bind(function (row) {\n                    return (row.data().get('projectMessageId') > 0);\n                }, this)\n            },\n            {\n                name: 'Delete Message',\n                iconClass: 'fal fa-trash',\n                onClick: _.bind(function (row) {\n                    new PJQ.views.modals.DeleteCancel({\n                        header: \"Delete Message\",\n                        body: \"Are you sure you want to delete this message?\",\n                        onDelete: _.bind(function () {\n                            this.options.projectMessagingView.deleteProjectMessage(row.data().get('projectMessageId'), _.bind(this.options.projectMessagingView.renderView, this.options.projectMessagingView));\n                        }, this)\n                    });\n                }, this),\n                isShown: _.bind(function (row) {\n                    return (row.data().get('projectMessageId') > 0);\n                }, this)\n            }\n        ];\n    },\n    export: function (message) {\n        PJQ.app.session.fetchProjectMessageEmailTemplates(_.bind(function (templates) {\n            this.options.project = PJQ.app.session.project;\n            _.each(templates.models, function (temp) {\n                if (temp.get('templateName') === message.get('templateName')) {\n                    this.tempKey = temp.get('templateKey');\n                }\n            }, this)\n\n            let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n                {\n                    endpoint: 'projects',\n                    value: PJQ.app.session.project.get('projectId')\n                },\n                {\n                    endpoint: 'projectmessagepreview'\n                }\n            ], [\n                {\n                    parameter: \"templateKey\",\n                    value: this.tempKey\n                }\n            ]);\n            new PJQ.ajax.Request({\n                endpoint: endpoint\n            }).post().done(_.bind(function (data) {\n                this.options.tokens = data\n                new PJQ.ajax.Request({\n                    endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n                        {\n                            endpoint: 'projects',\n                            value: this.options.project.get('projectId')\n                        },\n                        {\n                            endpoint: 'sendprojectmessages',\n                            value: message.get('projectMessageId')\n                        },\n                        {\n                            endpoint: 'export'\n                        }\n                    ]),\n                    data: {\n                        responseType: encodeURIComponent(this.options.tokens.projectMessage.responseType),\n                        responseDueDate: this.options.tokens.projectMessage.responseDueDate,\n                        templateKey: this.tempKey\n                    }\n                }).post().success(_.bind(function (data) {\n                    PJQ.files.downloadFile(data.url, {isEndpoint: false});\n                }, this));\n            }, this)).fail(function () {\n            });\n        }, this));\n    },\n    getColumns: function (includeAllColumns = false) {\n        let columns = [],\n            includeColumns = ['templateName', 'message', 'bidsDue', 'responseType', 'broadcastStatus', 'messageStatus', 'totalParticipants', 'sentBy', 'sentOn'];\n\n        if (!includeAllColumns) {\n\n            if (_.size(this.options.settings.columns) > 0)\n                includeColumns = this.options.settings.columns;\n            else\n                includeColumns = this.options.settings.columnsDefault;\n\n            columns.push({\n                \"width\": '15px',\n                \"columnData\": \"messageContacts\",\n                \"data\": null,\n                \"title\": \"\",\n                \"orderable\": false,\n                \"searchable\": false,\n                \"defaultContent\": '',\n                \"render\": function (data, type, row) {\n                    return '<i class=\"fal fa-plus-circle message-toggle-row\" data-type=\"projectMessageId\" data-id=\"' + row.get('projectMessageId') + '\"></i>';\n                }\n            });\n        }\n\n        _.each(includeColumns, _.bind(function (columnName) {\n            switch (columnName) {\n                case 'templateName':\n                    columns.push({\n                        \"columnData\": \"templateName\",\n                        \"data\": \"attributes.templateName\",\n                        \"title\": \"Type\"\n                    });\n                    break;\n                case 'message':\n                    columns.push({\n                        \"columnData\": \"message\",\n                        \"data\": \"attributes.message\",\n                        \"title\": \"Message\",\n                        \"orderable\": false,\n                        \"render\": function (data, type, row) {\n                            let html = '<div class=\"d-flex align-items-center\">';\n                            if (row.attributes.message && row.attributes.message !== \"\") {\n                                html += '<div class=\"flex-fill\">';\n                                if (_.size(row.attributes.message) > 40) {\n                                    html += '<a href=\"javascript:void(0)\" data-id=\" ' + row.attributes.projectMessageId + '\" class=\"btn-show-message\" title=\"Click to view full message\">' + row.attributes.message.substr(0, 40) + '...</a>'\n                                } else {\n                                    html += data;\n                                }\n                                html += '</div>';\n\n                                if (_.size(row.attributes.attachments) > 0) {\n                                    html += '<div class=\"\"><button type=\"button\" class=\"btn btn-transparent-dark btn-view-attachments\" title=\"View ' + _.size(row.attributes.attachments) + ' Attachments\" ><i class=\"fal fa-sm fa-paperclip text-dark\"></i></button></div>';\n                                }\n                            }\n                            html += '</div>';\n                            return html;\n                        }\n                    });\n                    break;\n                case 'bidsDue':\n                    columns.push({\n                        \"columnData\": \"bidsDue\",\n                        \"data\": \"attributes.bidsDue\",\n                        \"title\": \"Response Due\",\n                        \"render\": function (data, type, row) {\n                            let value = '';\n                            if (data) {\n                                value = PJQ.helpers.dateHelpers.getDateString(new Date(data), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\n                            }\n                            return value;\n                        }\n                    });\n                    break;\n                case 'responseType':\n                    columns.push({\n                        \"columnData\": \"responseType\",\n                        \"data\": \"attributes.responseType\",\n                        \"title\": \"Response Type\",\n                        \"render\": function (data, type, row) {\n                            let value = 'N/A';\n                            if (data === 'PROJECT')\n                                value = 'Accept/Decline';\n                            if (data === 'MESSAGE')\n                                value = 'Yes/No';\n                            return value;\n                        }\n                    });\n                    break;\n                case 'broadcastStatus':\n                    columns.push({\n                        \"columnData\": \"broadcastStatus\",\n                        \"render\": function (data, type, row) {\n                            if (type === 'sort' || type === 'type')\n                                return '';\n\n                            let innerHtml = '';\n                            _.each(row.get('broadcastStatuses'), _.bind(function (status) {\n                                let statusPercent = (status.count / row.get('totalParticipants')) * 100,\n                                    foregroundColor = PJQ.helpers.colorHelpers.idealLinkColorForBackground(status.backgroundColor);\n                                innerHtml += '<div class=\"progress-bar\" role=\"progressbar\" title=\"' + status.status + ' (' + status.count + ')\" style=\"background-color: ' + status.backgroundColor + ';color: ' + foregroundColor + ';width:' + statusPercent + '%\">\\n' +\n                                    status.count +\n                                    '</div>';\n                            }, this));\n                            let outerHtml = '<div class=\"progress\">';\n                            outerHtml += innerHtml + '</div>';\n                            return outerHtml;\n                        },\n                        \"title\": \"Broadcast Status\",\n                        \"orderable\": false\n                    });\n                    break;\n                case 'messageStatus':\n                    columns.push({\n                        \"columnData\": \"messageStatus\",\n                        \"render\": function (data, type, row) {\n                            if (type === 'sort' || type === 'type')\n                                return '';\n\n                            let innerHtml = '';\n                            _.each(row.get('messageStatuses'), _.bind(function (status) {\n                                let statusPercent = (status.count / row.get('totalParticipants')) * 100,\n                                    foregroundColor = PJQ.helpers.colorHelpers.idealLinkColorForBackground(status.backgroundColor);\n                                innerHtml += '<div class=\"progress-bar\" role=\"progressbar\" title=\"' + status.status + ' (' + status.count + ')\" style=\"background-color: ' + status.backgroundColor + ';color: ' + foregroundColor + ';width:' + statusPercent + '%\">\\n' +\n                                    status.count +\n                                    '</div>';\n                            }, this));\n                            let outerHtml = '<div class=\"progress\">';\n                            outerHtml += innerHtml + '</div>';\n                            return outerHtml;\n                        },\n                        \"title\": \"Response\",\n                        \"orderable\": false\n                    });\n                    break;\n                case 'totalParticipants':\n                    columns.push({\n                        \"columnData\": \"totalParticipants\",\n                        \"data\": \"attributes.totalParticipants\",\n                        \"title\": \"Contacts\",\n                        \"render\": function (data) {\n                            return '<div class=\"text-align-center\">' + data.toString() + '</div>';\n                        }\n                    });\n                    break;\n                case 'sentOn':\n                    columns.push(\n                        // There is no way to modify messages view columns currently, so just add sentBy column with sentOn.\n                        // If we ever add a way to modify columns for messages then we'll want to add a case for it.\n                        {\n                            \"columnData\": \"sentBy\",\n                            \"data\": \"attributes.sentBy\",\n                            \"title\": \"Sent By\",\n                            \"render\": function (data, type, row) {\n                                let result = '';\n                                if (data != null && data.id !== 0) {\n                                    return PJQ.helpers.contacts.getContactAnchor({contact: data});\n                                } else {\n                                    result = 'N/A';\n                                }\n                                return result;\n                            }\n                        },\n                        {\n                            \"columnData\": \"sentOn\",\n                            \"data\": \"attributes.sentOn\",\n                            \"title\": \"Sent On\",\n                            \"render\": function (data, type, row) {\n\n                                if (type === 'sort')\n                                    return data ? data : '2222-01-01T01:01:01.01Z';\n\n                                let value = '';\n                                if (data) {\n                                    value = PJQ.helpers.dateHelpers.getDateString(new Date(data), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME, false);\n                                }\n                                return value;\n                            }\n                        });\n                    break;\n            }\n        }, this));\n\n        return columns;\n    },\n    viewAttachments: function (e) {\n        let tr = $(e.currentTarget).closest('tr'),\n            row = this.getRow(tr);\n\n        new PJQ.views.projects.dashboard.ViewMessageAttachmentsModal({\n            attachments: row.data().get('attachments')\n        });\n    },\n    showRowFullMessage: function (e) {\n        let $target = $(e.currentTarget),\n            message = _.find(this.options.data, function (data) {\n                return data.attributes.projectMessageId === parseInt($target.data('id'));\n            });\n        e.target.outerHTML = message.attributes.message;\n    },\n    getChildTableType: function () {\n        return PJQ.constants.projectMessaging.views.MSGCONT_CONT;\n    },\n    getChildTableSettings: function () {\n        return this.options.projectMessagingView.options.settings.getSettings(this.getChildTableType());\n    },\n    getRowChildTable: function (childOpts) {\n        childOpts.view = this.getChildTableType();\n        childOpts.settings = this.getChildTableSettings();\n        childOpts.userSettings = this.options.userSettings;\n        childOpts.projectMessagingView = this.options.projectMessagingView;\n        childOpts.parentDataTable = this;\n        childOpts.dom = 't';\n        return new PJQ.views.projects.ProjectMessagingContactDataTable(childOpts);\n    },\n    getRowChildData: function (row) {\n        let searchFor = this.options.projectMessagingView.getSearchFor(),\n            statusFilter = [...this.options.projectMessagingView.options.filter.status];\n\n        if (this.options.projectMessagingView.options.filter.isDelivered)\n            statusFilter.push('DELIVERED');\n\n        if (this.options.projectMessagingView.options.filter.isOpened)\n            statusFilter.push('OPENED');\n\n        if (this.options.projectMessagingView.options.filter.isVisited)\n            statusFilter.push('VISITED');\n\n        if (this.options.projectMessagingView.options.filter.isDownloaded)\n            statusFilter.push('DOWNLOADS');\n\n        if (this.options.projectMessagingView.options.filter.isPrintOrder)\n            statusFilter.push('ORDERS ONLY');\n\n        if (row.data().get('projectMessageId') === 0)\n            statusFilter.push('UNSENT');\n\n        if (this.options.projectMessagingView.options.filter.publicPrivate)\n            statusFilter.push(this.options.projectMessagingView.options.filter.publicPrivate);\n\n        _.each(this.options.projectMessagingView.options.filter.laborStatus, _.bind(function (status) {\n            statusFilter.push('IS_' + status);\n        }, this));\n\n        _.each(this.options.projectMessagingView.options.filter.minorityStatus, _.bind(function (status) {\n            statusFilter.push('IS_' + status);\n        }, this));\n\n        return new PJQ.collections.projectParticipants.ProjectParticipantsForView(null, {\n            project: PJQ.app.session.project,\n            view: PJQ.constants.projectMessaging.views.CONT,\n            projectMessageId: row.data().get('projectMessageId'),\n            responseType: row.data().get('responseType'),\n            statusFilter: _.uniq(statusFilter).join(','),\n            searchFor: searchFor,\n            withCustomFields: this.getChildTableSettings().hasCustomFields\n        });\n    },\n    afterDataTableRenderChild: function () {\n        if (this.options.projectMessagingView && this.options.projectMessagingView.options.viewProjectMessageId) {\n            let page_info = this.dataTable.page.info(),\n                new_row_index = this.dataTable.row(_.bind(function (idx, data, node) {\n                    return data.get('projectMessageId') == this.options.projectMessagingView.options.viewProjectMessageId;\n                }, this)).index(),\n                row_position = this.dataTable.rows({search: 'applied'})[0].indexOf(new_row_index);\n\n            if (!(row_position >= page_info.start && row_position < page_info.end) && row_position > -1) {\n                let page_to_display = Math.floor(row_position / this.dataTable.page.len());\n                this.dataTable.page(page_to_display).draw(false);\n            }\n\n            if (row_position > -1)\n                this.childRowToggle({currentTarget: this.$dataTable.find('i.message-toggle-row[data-id=\"' + this.options.projectMessagingView.options.viewProjectMessageId + '\"]')});\n\n            this.options.projectMessagingView.options.viewProjectMessageId = null;\n        }\n    }\n});\n\nPJQ.views.projects.ProjectMessagingResponsesDataTable = PJQ.views.projects.ProjectMessagingDataTable.extend({\n    events: {\n        'click i.response-toggle-row': 'childRowToggle'\n    },\n    getColumns: function (includeAllColumns = false) {\n        let columns = [], includeColumns = ['status', 'totalParticipants'];\n\n        if (!includeAllColumns) {\n\n            if (_.size(this.options.settings.columns) > 0)\n                includeColumns = this.options.settings.columns;\n            else\n                includeColumns = this.options.settings.columnsDefault;\n\n            columns.push({\n                \"width\": '15px',\n                \"columnData\": \"responseContacts\",\n                \"data\": null,\n                \"title\": \"\",\n                \"orderable\": false,\n                \"searchable\": false,\n                \"defaultContent\": '',\n                \"render\": function (data, type, row) {\n                    return '<i class=\"fal fa-plus-circle response-toggle-row\" data-type=\"status\" data-id=\"' + row.get('status') + '\"></i>';\n                }\n            });\n        }\n\n        _.each(includeColumns, _.bind(function (columnName) {\n            switch (columnName) {\n                case 'status':\n                    columns.push({\n                        \"columnData\": \"status\",\n                        \"data\": \"attributes.status\",\n                        \"title\": \"Response\",\n                        \"orderable\": false\n                    });\n                    break;\n                case 'totalParticipants':\n                    columns.push({\n                        \"columnData\": \"totalParticipants\",\n                        \"data\": \"attributes.totalParticipants\",\n                        \"title\": \"Contacts\",\n                        \"orderable\": false,\n                        \"render\": function (data) {\n                            return '<div class=\"text-align-center\">' + data.toString() + '</div>';\n                        }\n                    });\n                    break;\n            }\n        }, this));\n\n        return columns;\n    },\n    getChildTableType: function () {\n        return this.options.view + '-contact';\n    },\n    getChildTableSettings: function () {\n        return this.options.projectMessagingView.options.settings.getSettings(this.getChildTableType());\n    },\n    getRowChildTable: function (childOpts) {\n        childOpts.view = this.getChildTableType();\n        childOpts.settings = this.getChildTableSettings();\n        childOpts.userSettings = this.options.userSettings;\n        childOpts.projectMessagingView = this.options.projectMessagingView;\n        childOpts.parentDataTable = this;\n        childOpts.dom = 't';\n        return new PJQ.views.projects.ProjectMessagingContactDataTable(childOpts);\n    },\n    getRowChildData: function (row) {\n        let searchFor = this.options.projectMessagingView.getSearchFor(),\n            statusFilter = [];\n\n        statusFilter.push(row.data().get('status'));\n\n        if (this.options.projectMessagingView.options.filter.isDelivered)\n            statusFilter.push('DELIVERED');\n\n        if (this.options.projectMessagingView.options.filter.isOpened)\n            statusFilter.push('OPENED');\n\n        if (this.options.projectMessagingView.options.filter.isVisited)\n            statusFilter.push('VISITED');\n\n        if (this.options.projectMessagingView.options.filter.isDownloaded)\n            statusFilter.push('DOWNLOADS');\n\n        if (this.options.projectMessagingView.options.filter.isPrintOrder)\n            statusFilter.push('ORDERS ONLY');\n\n        if (this.options.projectMessagingView.options.filter.publicPrivate)\n            statusFilter.push(this.options.projectMessagingView.options.filter.publicPrivate);\n\n        _.each(this.options.projectMessagingView.options.filter.laborStatus, _.bind(function (status) {\n            statusFilter.push('IS_' + status);\n        }, this));\n\n        _.each(this.options.projectMessagingView.options.filter.minorityStatus, _.bind(function (status) {\n            statusFilter.push('IS_' + status);\n        }, this));\n\n        return new PJQ.collections.projectParticipants.ProjectParticipantsForView(null, {\n            project: PJQ.app.session.project,\n            view: PJQ.constants.projectMessaging.views.CONT,\n            statusFilter: _.uniq(statusFilter).join(','),\n            searchFor: searchFor,\n            withCustomFields: this.getChildTableSettings().hasCustomFields\n        });\n    }\n});\n\nPJQ.views.projects.ProjectMessagingCompanyDataTable = PJQ.views.projects.ProjectMessagingDataTable.extend({\n    events: {\n        'click i.company-toggle-row': 'childRowToggle',\n        'change select.company-project-status': 'onStatusChanged',\n        'click .btn-grade-project-contact-company': 'gradeContactCompany',\n        'change .select-company': 'companySelectChanged',\n        'mouseover .comment-company': 'mouseoverComments',\n        'mouseleave .comment-company': 'mouseleaveComments',\n        'click .btn-comment-company': 'manageComments',\n        'click .btn-add-comment-company': 'addComment',\n        'change .select-all-companies': 'companySelectAllChanged',\n        \"click .btn-show-groups\": \"showRowGroups\"\n    },\n    getContextMenuItems: function () {\n        return [\n            {\n                name: 'Upload Bid Docs',\n                iconClass: 'fal fa-cloud-upload',\n                onClick: _.bind(function (row) {\n                    new PJQ.views.projects.UploadParticipantBidDocumentsModal({\n                        contact: row.data(),\n                        onSave: _.bind(function () {\n                            this.options.projectMessagingView.renderView();\n                        }, this)\n                    });\n                }, this),\n                isShown: _.bind(function () {\n                    return PJQ.app.session.project.hasPermission('messaging.canManage') && this.options.view === PJQ.constants.projectMessaging.views.COMP;\n                }, this)\n            },\n            {\n                name: 'Remove Company',\n                iconClass: 'fal fa-trash',\n                isDanger: true,\n                onClick: _.bind(function (row) {\n                    new PJQ.views.projects.DeleteProjectParticipants({\n                        title: \"Remove Company\",\n                        body: \"Are you sure you want to remove this company from this project?\",\n                        onDelete: _.bind(function (isRemoveFromAB) {\n                            this.options.projectMessagingView.deleteContacts(_.union(row.data().get('selectableContacts'), row.data().get('declinedContacts')), isRemoveFromAB);\n                        }, this)\n                    });\n                }, this),\n                isShown: _.bind(function (row) {\n                    return PJQ.app.session.project.hasPermission('messaging.canManage');\n                }, this)\n            }\n        ];\n    },\n    getColumns: function (includeAllColumns = false) {\n        let columns = [],\n            includeColumns = ['icons', 'companyName', 'unionStatus', 'sector', 'certifications', 'groupListDisplay', 'status', 'bidAmountTotal', 'commentsCompany', 'grade', 'contactCount'];\n        _.each(PJQ.app.session.customFields.company[PJQ.app.session.get('masterUserId')].models, _.bind(function (customField) {\n            includeColumns.push('companyCustomField_' + customField.id);\n        }, this));\n\n        if (!includeAllColumns) {\n\n            if (_.size(this.options.settings.columns) > 0)\n                includeColumns = this.options.settings.columns;\n            else\n                includeColumns = this.options.settings.columnsDefault;\n\n            if (this.options.projectMessagingView && !this.options.projectMessagingView.options.canViewBidAmount) {\n                includeColumns = _.filter(includeColumns, function(column) { return column != 'bidAmountTotal' });\n            }\n\n            columns.push({\n                \"columnData\": 'selectCompany',\n                \"title\": '<div class=\"pretty p-default p-icon p-smooth fs-18 m-0\"><input type=\"checkbox\" class=\"select-all-companies\" /><div class=\"state\"><i class=\"icon fal fa-check\"></i> <label class=\"wd-0\">&nbsp;</label></div></div>',\n                \"width\": \"20px\",\n                \"data\": \"null\",\n                \"orderable\": false,\n                \"searchable\": false,\n                \"render\": _.bind(function (data, type, row) {\n                    let selectedContacts = _.filter(row.get('selectableContacts'), _.bind(function (contact) {\n                        return this.options.projectMessagingView.isContactSelected(contact);\n                    }, this));\n\n                    _.each(row.get('declinedContacts'), _.bind(function (contact) {\n                        if (this.options.projectMessagingView.isContactSelected(contact))\n                            selectedContacts.push(contact);\n                    }, this));\n\n                    let isSelected = selectedContacts.length > 0,\n                        isIndeterminate = isSelected && (selectedContacts.length < _.size(row.get('selectableContacts')) + _.size(row.get('declinedContacts'))),\n                        enableDeclined = this.options.projectMessagingView.isEnableDeclined(),\n                        isDisabled = !enableDeclined && (this.options.projectStatusList[1].toString().split(',')[0].toLowerCase() === row.get('status').toString().toLowerCase());\n                    return ('<div class=\"text-align-center\"><div class=\"pretty p-default p-icon p-smooth p-has-indeterminate fs-18 m-0\">' +\n                        '<input type=\"checkbox\" ' + (isSelected ? ' checked ' : '') + (isDisabled ? ' disabled ' : '') + (isIndeterminate ? ' indeterminate ' : '') + ' class=\"select-company ' + (isIndeterminate ? ' indeterminate ' : '') + '\" />' +\n                        '<div class=\"state\"><i class=\"icon fal fa-check-double\"></i> <label class=\"wd-0\">&nbsp;</label></div>' +\n                        '<div class=\"state p-is-indeterminate\"><i class=\"icon fal fa-check\"></i> <label class=\"wd-0\">&nbsp;</label></div>' +\n                        '</div></div>');\n                }, this)\n            });\n\n            columns.push({\n                \"columnData\": \"groupCompanyContacts\",\n                \"data\": null,\n                \"title\": \"\",\n                \"orderable\": false,\n                \"searchable\": false,\n                \"defaultContent\": '',\n                \"render\": function (data, type, row) {\n                    return '<i class=\"fal fa-plus-circle company-toggle-row\" data-type=\"contactCompanyId\" data-id=\"' + row.get('contactCompanyId') + '\"></i>';\n                }\n            });\n        }\n\n        let distanceThreshold = PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_DISTANCE_ICON_THRESHOLD),\n            canManage = PJQ.app.session.project.hasPermission('messaging.canManage');\n        _.each(includeColumns, _.bind(function (columnName) {\n            switch (columnName) {\n                case 'icons':\n                    columns.push({\n                        \"columnData\": \"icons\",\n                        \"data\": null,\n                        \"title\": 'Info',\n                        \"width\": '50px',\n                        \"orderable\": false,\n                        \"render\": _.bind(function (data, type, row) {\n                            let icons = [];\n\n                            // directory stuff\n                            if (row.get('networkVerificationLevel') === 1)\n                                icons.push(\"<img class='project-participant-icon mr-1' src='/assets/modules2/global/images/select_network_icon.png' title='Select Network Member' />\");\n                            else if (row.get('networkVerificationLevel') === 2)\n                                icons.push(\"<img class='project-participant-icon mr-1' src='/assets/modules2/global/images/verified_network_icon.png' title='Verified Network Member' />\");\n                            else if (row.get('isDirectoryContact'))\n                                icons.push(\"<img class='project-participant-icon mr-1' src='/assets/modules2/global/images/directory_sub.png' title='Pantera Directory Member' />\");\n\n                            if (row.get('hasPrequal')) {\n                                icons.push(\"<i class='fas fa-check text-gold fs-18 mr-1' title='Prequalification Available'></i>\");\n                            }\n\n                            let dist = row.get('distance');\n                            if (typeof distanceThreshold === 'number' && dist != null && dist <= distanceThreshold) {\n                                icons.push(\"<i class='fas fa-map-marker-check text-orange fs-18 mr-1' title='Within \" + distanceThreshold.toString() + \" miles'></i>\");\n                            }\n\n                            return '<div class=\"d-flex justify-content-center\">' + icons.join('') + '</div>';\n                        }, this)\n                    });\n                    break;\n                case 'companyName':\n                    columns.push({\n                        \"columnData\": \"companyName\",\n                        \"data\": \"attributes.companyName\",\n                        \"title\": \"Company\",\n                    });\n                    break;\n                case 'unionStatus':\n                    columns.push({\n                        \"columnData\": 'unionStatus',\n                        \"title\": 'Union Status',\n                        \"render\": function (data, type, row) {\n                            let status = [];\n                            if (row.get('isUnion'))\n                                status.push('Union');\n                            if (row.get('isNonUnion'))\n                                status.push('Non-Union');\n                            if (row.get('isPrevailingWage'))\n                                status.push('Prevailing Wage');\n\n                            if (status.length === 0)\n                                status.push('N/A');\n\n                            return status.join(',');\n                        }\n                    });\n                    break;\n                case 'sector':\n                    columns.push({\n                        \"columnData\": 'sector',\n                        \"title\": 'Labor Sector',\n                        \"render\": function (data, type, row) {\n                            let status = [];\n                            if (row.get('isPublicSector'))\n                                status.push('Public');\n                            if (row.get('isPrivateSector'))\n                                status.push('Private');\n\n                            if (status.length === 0)\n                                status.push('N/A');\n\n                            return status.join(',');\n                        }\n                    });\n                    break;\n                case 'certifications':\n                    columns.push({\n                        \"columnData\": 'certifications',\n                        \"title\": 'Certification',\n                        \"render\": function (data, type, row) {\n                            let status = [];\n                            if (row.get('isDBE'))\n                                status.push('DBE');\n                            if (row.get('isDVBE'))\n                                status.push('DVBE');\n                            if (row.get('isMBE'))\n                                status.push('MBE');\n                            if (row.get('isSBE'))\n                                status.push('SBE');\n                            if (row.get('isSDVBE'))\n                                status.push('SDVBE');\n                            if (row.get('isWBE'))\n                                status.push('WBE');\n\n                            if (_.size(status) === 0)\n                                status.push('N/A');\n\n                            return status.join(',');\n                        }\n                    });\n                    break;\n                case 'groupListDisplay':\n                    columns.push({\n                        \"columnData\": \"groupListDisplay\",\n                        \"data\": \"attributes.groupListDisplay\",\n                        \"title\": \"Trades\",\n                        \"render\": function (data) {\n                            let groupDisplayLimit = 0, groupArray = data ? data.split(',') : [];\n                            if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_MAX_GROUP_DISPLAY)) {\n                                groupDisplayLimit = parseInt(PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_MAX_GROUP_DISPLAY));\n                            }\n\n                            if (groupDisplayLimit > 0 && (_.size(groupArray) > groupDisplayLimit)) {\n                                return _.rest(groupArray.reverse(), _.size(groupArray) - groupDisplayLimit).reverse().join(', ') + \" <br>\" +\n                                    \"<a href='javascript:void(0)' class='btn-show-groups' title='Click to show complete list of Trades'> \" + (_.size(groupArray) - groupDisplayLimit) + \" more item(s)</a>\";\n                            } else {\n                                return data;\n                            }\n                        }\n                    });\n                    break;\n                case 'status':\n                    columns.push({\n                        \"columnData\": 'status',\n                        \"data\": {\n                            \"_\": function (row) {\n                                return row.get('status') ? row.get('status') : 'PENDING';\n                            },\n                            \"display\": function (row) {\n\n                                if (canManage) {\n                                    let html = '<select class=\"form-control company-project-status\" style=\"min-width:100px;\">',\n                                        statuses = PJQ.app.session.project.getProjectStatusList();\n                                    statuses.unshift(['PENDING', true]);\n                                    _.each(statuses, _.bind(function (status, index) {\n                                        html += '<option value=\"' + status[0] + '\"' + (status[0] === row.get('status') ? ' SELECTED' : '') + '>' + status[0] + '</option>';\n                                    }, this));\n                                    html += '</select>';\n                                    return html;\n                                }\n\n                                let status = row.get('status');\n                                return '<span>' + (_.size(status) > 0 ? status.toUpperCase() : 'PENDING') + '</span>';\n                            }\n                        },\n                        \"title\": 'Status',\n                    });\n                    break;\n                case 'bidAmountTotal':\n                    columns.push({\n                        \"columnData\": \"bidAmountTotal\",\n                        \"data\": \"attributes.bidAmount\",\n                        \"title\": \"Bid Total\",\n                        \"render\": function (data, type, row) {\n                            return \"<span class='bid-amount-total'>\" + PJQ.helpers.formatHelpers.formatCurrency(row.get(\"bidAmount\"))  + \"</span>\";\n                        }\n                    });\n                    break;\n                case 'commentsCompany':\n                    columns.push({\n                        \"columnData\": 'commentsCompany',\n                        \"title\": 'Comments',\n                        \"render\": function (data, type, row) {\n                            let html = '<div style=\"min-width:150px;\" class=\"d-flex align-items-center\">';\n                            html += '<div class=\"flex-fill comment-company ' + (row.get('lastCompanyComment') ? '' : 'text-muted') + '\">' + (row.get('lastCompanyComment') ? row.get('lastCompanyComment').comment : 'No Comments Added') + '</div>';\n                            html += '<button type=\"button\" class=\"btn btn-transparent-dark btn-add-comment-company\" title=\"Add Comment\"><i class=\"far fa-comment-plus text-dark\"></i></button>';\n                            html += '<button type=\"button\" class=\"btn btn-transparent-dark btn-comment-company\" title=\"Comments\" data-contact-company-id=\"' + row.get('contactCompanyId') + '\"><i class=\"far fa-comments text-dark\"></i></button>';\n                            html += '</div>';\n                            return html;\n                        }\n                    });\n                    break;\n                case 'grade':\n                    columns.push({\n                        \"columnData\": 'grade',\n                        \"title\": 'Grade',\n                        \"width\": \"40px\",\n                        \"render\": function (data, type, row) {\n                            let html = '<span class=\"mr-1\">' + row.get('gradeAverage').toString() + '</span>';\n                            //todo: add preference for this\n                            if (PJQ.app.session.get('portalId') !== 506) {\n                                html += (row.get('grade') !== 0) ? '<button type=\"button\" class=\"btn btn-transparent-dark btn-grade-project-contact-company\" title=\"Review Grade\" data-contact-company-id=\"' + row.get('contactCompanyId') + '\"><i class=\"fas fa-star text-gold\"></i></button>' : '<button type=\"button\" class=\"btn btn-transparent-dark btn-grade-project-contact-company\" title=\"Grade\" data-contact-company-id=\"' + row.get('contactCompanyId') + '\"><i class=\"far fa-star text-muted\"></i></button>';\n                            }\n                            return html;\n                        }\n                    });\n                    break;\n                case 'contactCount':\n                    columns.push({\n                        \"columnData\": \"contactCount\",\n                        \"data\": \"attributes.contactCount\",\n                        \"title\": \"Contacts\",\n                        \"render\": function (data) {\n                            return '<div class=\"text-align-center\">' + data.toString() + '</div>';\n                        }\n                    });\n                    break;\n            }\n\n            if (columnName.startsWith('companyCustomField_')) {\n                let customFieldId = parseInt(columnName.substring(columnName.indexOf('_') + 1));\n                _.each(PJQ.app.session.customFields.company[PJQ.app.session.get('masterUserId')].models, _.bind(function (customField) {\n                    if (customField.id === customFieldId)\n                        columns.push(this.getCustomFieldColumn(customField, true));\n                }, this));\n            }\n        }, this));\n\n        return columns;\n    },\n    afterDataTableRenderChild: function () {\n        this.$el.find('.select-company.indeterminate').prop('indeterminate', 'true');\n    },\n    getChildTableType: function () {\n        return this.options.view + '-contact';\n    },\n    getChildTableSettings: function () {\n        return this.options.projectMessagingView.options.settings.getSettings(this.getChildTableType());\n    },\n    getRowChildTable: function (childOpts) {\n        childOpts.view = this.getChildTableType();\n        childOpts.settings = this.getChildTableSettings();\n        childOpts.userSettings = this.options.userSettings;\n        childOpts.projectMessagingView = this.options.projectMessagingView;\n        childOpts.parentDataTable = this;\n        childOpts.dom = 't';\n        return new PJQ.views.projects.ProjectMessagingContactDataTable(childOpts);\n    },\n    getRowChildData: function (row) {\n        let searchFor = this.options.projectMessagingView.getSearchFor(),\n            statusFilter = [...this.options.projectMessagingView.options.filter.status];\n\n        if (this.options.projectMessagingView.options.filter.isDelivered)\n            statusFilter.push('DELIVERED');\n\n        if (this.options.projectMessagingView.options.filter.isOpened)\n            statusFilter.push('OPENED');\n\n        if (this.options.projectMessagingView.options.filter.isVisited)\n            statusFilter.push('VISITED');\n\n        if (this.options.projectMessagingView.options.filter.isDownloaded)\n            statusFilter.push('DOWNLOADS');\n\n        if (this.options.projectMessagingView.options.filter.isPrintOrder)\n            statusFilter.push('ORDERS ONLY');\n\n        if (this.options.projectMessagingView.options.filter.publicPrivate)\n            statusFilter.push(this.options.projectMessagingView.options.filter.publicPrivate);\n\n        _.each(this.options.projectMessagingView.options.filter.laborStatus, _.bind(function (status) {\n            statusFilter.push('IS_' + status);\n        }, this));\n\n        _.each(this.options.projectMessagingView.options.filter.minorityStatus, _.bind(function (status) {\n            statusFilter.push('IS_' + status);\n        }, this));\n\n        return new PJQ.collections.projectParticipants.ProjectParticipantsForView(null, {\n            project: PJQ.app.session.project,\n            view: PJQ.constants.projectMessaging.views.CONT,\n            contactCompanyId: row.data().get('contactCompanyId'),\n            statusFilter: _.uniq(statusFilter).join(','),\n            searchFor: searchFor,\n            groupIdList: row.data().collection.options.groupIdList,\n            isPerGroup: row.data().collection.options.isPerGroup,\n            withCustomFields: this.getChildTableSettings().hasCustomFields\n        });\n    },\n    statusChanged: function (statuses, parentTR) {\n        let row = this.getRow(parentTR);\n        switch (this.options.view) {\n            case PJQ.constants.projectMessaging.views.COMP:\n                // this view cannot have a group status, so update the regular status column and redraw the row.\n                row.data().set('status', statuses.companyStatus);\n                break;\n            case PJQ.constants.projectMessaging.views.GROUPCOMP_COMP:\n                // this view must have a group status\n                row.data().set('status', statuses.companyGroupStatus);\n                break;\n        }\n        row.invalidate().draw();\n        this.setRowStyle(parentTR, row.data().get('status'), row.data().get('isBlacklisted') || row.data().get('isCompanyBlacklisted'));\n    },\n    companySelectChanged: function (e) {\n        let tr = $(e.currentTarget).closest('tr'),\n            row = this.getRow(tr);\n\n        // if we were partially checked, force ourself to be unchecked\n        if ($(e.currentTarget).hasClass('indeterminate'))\n            $(e.currentTarget).prop('checked', false).prop('indeterminate', false).removeClass('indeterminate');\n\n        if ($(e.currentTarget).prop('checked')) {\n            if (row.data().get('declinedContacts').length > 0)\n                $(e.currentTarget).prop('checked', false).prop('indeterminate', true).addClass('indeterminate');\n            else\n                $(e.currentTarget).prop('indeterminate', false).removeClass('indeterminate');\n\n            if (_.size(row.data().get('selectableContacts')) > 0)\n                this.options.projectMessagingView.addSelectedContacts(row.data().get('selectableContacts'));\n            else\n                $(e.currentTarget).prop('checked', false);\n\n            if (this.options.parentDataTable && this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP) {\n                let groupId = parseInt(row.data().collection.options.groupIdList), contactGroups = [];\n                _.each(row.data().get('selectableContacts'), _.bind(function (contact) {\n                    contactGroups.push({contactId: contact, groupId: groupId});\n                }, this));\n                this.options.projectMessagingView.addSelectedContactGroups(contactGroups);\n            }\n        } else {\n            this.options.projectMessagingView.removeSelectedContacts(_.union(row.data().get('selectableContacts'), row.data().get('declinedContacts')));\n\n            if (this.options.parentDataTable && this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP) {\n                let groupId = parseInt(row.data().collection.options.groupIdList), contactGroups = [];\n                _.each(_.union(row.data().get('selectableContacts'), row.data().get('declinedContacts')), _.bind(function (contact) {\n                    contactGroups.push({contactId: contact, groupId: groupId});\n                }, this));\n                this.options.projectMessagingView.removeSelectedContactGroups(contactGroups);\n            }\n        }\n\n        _.each(this.options.childDataTables, _.bind(function (childDT) {\n            if (row.data().get('contactCompanyId') !== childDT.$el.data('id'))\n                return;\n\n            _.each(childDT.$el.find('.select-contact'), _.bind(function (input) {\n                let childRow = childDT.getRow($(input).closest('tr'));\n                $(input).prop('checked', this.options.projectMessagingView.isContactSelected(childRow.data().get('contactId')));\n            }, this));\n\n        }, this));\n\n    },\n    companySelectAllChanged: function (e) {\n        let projectStatusList = PJQ.app.session.project.getProjectStatusList(),\n            isChecked = $(e.currentTarget).prop('checked'),\n            isEnableDeclined = this.options.projectMessagingView.isEnableDeclined(), selectedContacts = [];\n\n        _.each(this.dataTable.data(), _.bind(function (row) {\n            if (isChecked) {\n                if (!row.attributes.isBlacklisted)\n                    $.merge(selectedContacts, row.attributes.selectableContacts);\n\n                if (isEnableDeclined)\n                    $.merge(selectedContacts, row.attributes.declinedContacts);\n            } else {\n                $.merge(selectedContacts, row.attributes.selectableContacts);\n                $.merge(selectedContacts, row.attributes.declinedContacts);\n            }\n        }, this));\n\n        let selectedContactGroups = [], isGroupsView = false;\n        if (this.options.parentDataTable && this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP) {\n            let groupId = parseInt(this.options.data[0].collection.options.groupIdList);\n            _.each(selectedContacts, _.bind(function (contact) {\n                selectedContactGroups.push({contactId: contact, groupId: groupId});\n            }, this));\n            isGroupsView = true;\n        }\n\n        if (isChecked) {\n            this.options.projectMessagingView.addSelectedContacts(selectedContacts);\n\n            if (isGroupsView)\n                this.options.projectMessagingView.addSelectedContactGroups(selectedContactGroups);\n        } else {\n            this.options.projectMessagingView.removeSelectedContacts(selectedContacts);\n\n            if (isGroupsView)\n                this.options.projectMessagingView.removeSelectedContactGroups(selectedContactGroups);\n        }\n\n        _.each(this.$dataTable.find('tbody tr[role=\"row\"]'), _.bind(function (tr) {\n            let row = this.getRow(tr), input = $(tr).find('input.select-company');\n\n            if (input.length === 0)\n                return;\n\n            // if is declined, skip it unless enable declined is turned on\n            $(input).prop('indeterminate', false).removeClass('indeterminate');\n            if ($(e.currentTarget).prop('checked') === false || (!isEnableDeclined && projectStatusList[1].toString().split(',')[0].toLowerCase() === row.data().get('status').toString().toLowerCase()) || _.size(selectedContacts) == 0)\n                $(input).prop('checked', false);\n            else {\n                $(input).prop('checked', $(e.currentTarget).prop('checked'));\n\n                if (row.data().get('declinedContacts').length > 0 && !isEnableDeclined)\n                    $(input).prop('indeterminate', true).addClass('indeterminate');\n            }\n\n\n        }, this));\n\n        _.each(this.options.childDataTables, _.bind(function (childDT) {\n            _.each(childDT.$el.find('.select-contact'), _.bind(function (input) {\n                let childRow = childDT.getRow($(input).closest('tr'));\n                $(input).prop('checked', this.options.projectMessagingView.isContactSelected(childRow.data().get('contactId')));\n            }, this));\n        }, this));\n\n        this.refresh(false);\n    },\n    createdRow: function (row, data, dataIndex) {\n        this.setRowStyle(row, data.attributes.status, data.attributes.isBlacklisted)\n    },\n    setRowStyle: function (row, status, isBlacklisted) {\n        let statusColor = _.find(this.options.projectMessagingView.options.settings.attributes.statusColors, function (statusColor) {\n            return statusColor.status === status\n        });\n\n        let blackListed = '';\n        if (isBlacklisted)\n            blackListed = 'text-decoration: line-through !important;';\n\n        if (statusColor) {\n            let foregroundColor = PJQ.helpers.colorHelpers.idealLinkColorForBackground(statusColor.backgroundColor);\n            $(row).css({cssText: 'background-color:' + statusColor.backgroundColor + ' !important;' + 'color:' + foregroundColor + ' !important;' + blackListed});\n        } else\n            $(row).css({cssText: \"background-color: ''; color: '';\" + blackListed});\n    },\n    showRowGroups: function (e) {\n        let target = $(e.currentTarget),\n            row = this.getRow(target.closest('tr')),\n            data = row.data(),\n            groups = data.get('groupListDisplay').split(','),\n            groupDisplayLimit = parseInt(PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_MAX_GROUP_DISPLAY));\n        target[0].outerHTML = ' ' + _.rest(groups, groupDisplayLimit).join(', ')\n    }\n});\n\nPJQ.views.projects.ProjectMessagingContactDataTable = PJQ.views.projects.ProjectMessagingDataTable.extend({\n    events: {\n        'click i.contact-toggle-row': 'childRowToggle',\n        'change select.contact-project-status': 'onStatusChanged',\n        'change select.contact-message-status': 'onMessageStatusChanged',\n        'click .btn-grade-project-contact': 'gradeContactCompany',\n        'mouseover .comment-contact,.comment-company': 'mouseoverComments',\n        'mouseleave .comment-contact,.comment-company': 'mouseleaveComments',\n        'click .btn-add-comment-contact,.btn-add-comment-company': 'addComment',\n        'click .btn-comment-contact,.btn-comment-contact-company': 'manageComments',\n        'keyup .contact-bid-amount': 'bidAmountChanged',\n        'blur .contact-bid-amount': 'bidAmountExited',\n        'change .select-contact': 'contactSelectChanged',\n        'change .select-all-contacts': 'contactSelectAllChanged',\n        'click .btn-copy-access-key': 'copyAccessKey',\n        'click .btn-copy-phone': 'copyPhone',\n        'click .btn-copy-email': 'copyEmail',\n        \"click .btn-show-groups\": \"showRowGroups\"\n    },\n    afterDataTableRenderChild: function () {\n        PJQ.helpers.inputHelpers.inputMaskCurrency(this.$('.contact-bid-amount'), 2);\n    },\n    getContextMenuItems: function () {\n        return [\n            {\n                name: 'View Contact',\n                iconClass: 'fal fa-search',\n                onClick: _.bind(function (row) {\n                    new PJQ.views.contacts.BaseEditContactModal({\n                        model: new PJQ.models.projectParticipants.ProjectParticipant({\n                            id: row.data().get('contactId'),\n                            projectId: PJQ.app.session.project.id,\n                        }),\n                        showNotes: true,\n                        showActive: true\n                    });\n                }, this),\n                isShown: _.bind(function (row) {\n                    return !PJQ.app.session.hasPermission('contacts.isAdmin')\n                        && (PJQ.app.session.hasPermission('contacts.canView') || PJQ.app.session.project.hasPermission('projectContacts.canView'));\n                }, this)\n            },\n            {\n                name: 'Edit Contact',\n                iconClass: 'fal fa-pencil',\n                onClick: _.bind(function (row) {\n                    new PJQ.views.contacts.BaseEditContactModal({\n                        model: new PJQ.models.projectParticipants.ProjectParticipant({\n                            id: row.data().get('contactId'),\n                            projectId: PJQ.app.session.project.id\n                        }),\n                        isShowAddContact: true,\n                        showNotes: true,\n                        showActive: true,\n                        deleteLabel: 'Remove from Project',\n                        onDelete: _.bind(function (model) {\n                            this.options.projectMessagingView.deleteContacts([row.data().get('contactId')], false);\n\n                        }, this),\n                        onSave: _.bind(function (model, isNew) {\n                            if (isNew) {\n                                this.options.projectMessagingView.renderView();\n                                return;\n                            }\n\n                            let becameInactive = false;\n                            if (model.get('isBlacklisted') && !row.data().get('isBlacklisted')) {\n                                becameInactive = true;\n                                row.data().set('status', this.options.projectStatusList[1].toString().split(',')[0]);\n                            }\n\n                            row.data().set('isAutoSelectDisabled', model.get('isAutoSelectDisabled'));\n                            row.data().set('isBlacklisted', model.get('isBlacklisted'));\n                            row.data().set('contactTitle', model.get('contactTitle'));\n                            row.data().set('fax', model.get('fax'));\n                            row.data().set('cell', model.get('cell'));\n                            row.data().set('address1', model.get('address1'));\n                            row.data().set('address2', model.get('address2'));\n                            row.data().set('city', model.get('city'));\n                            row.data().set('zip', model.get('zip'));\n                            row.data().set('state', model.get('state'));\n                            row.data().set('country', model.get('country'));\n                            // row.data().set('groupIdList', model.get('groupIdList'));\n                            // row.data().set('groupListDisplay', model.get('groupListDisplay'));\n                            row.data().set('isCompanyBlacklisted', model.get('isCompanyBlacklisted'));\n                            row.data().set('isUnion', model.get('isUnion'));\n                            row.data().set('isNonUnion', model.get('isNonUnion'));\n                            row.data().set('isPrevailingWage', model.get('isPrevailingWage'));\n                            row.data().set('isPublicSector', model.get('isPublicSector'));\n                            row.data().set('isPrivateSector', model.get('isPrivateSector'));\n                            row.data().set('isDBE', model.get('isDBE'));\n                            row.data().set('isDVBE', model.get('isDVBE'));\n                            row.data().set('isMBE', model.get('isMBE'));\n                            row.data().set('isSBE', model.get('isSBE'));\n                            row.data().set('isSDVBE', model.get('isSDVBE'));\n                            row.data().set('isUDBE', model.get('isUDBE'));\n                            row.data().set('isVSBE', model.get('isVSBE'));\n                            row.data().set('isWBE', model.get('isWBE'));\n                            row.data().set('phone', model.get('phone'));\n                            row.data().set('phoneExtension', model.get('phoneExtension'));\n                            row.data().set('companyName', model.get('companyName'));\n                            row.data().set('contactName', model.get('contactName'));\n                            row.data().set('distance', model.get('distance'));\n                            row.data().set('email', model.get('email'));\n                            row.data().set('notes', model.get('notes'));\n                            row.data().set('contactCustomFieldValues', model.get('contactCustomFieldValues'));\n                            row.data().set('companyCustomFieldValues', model.get('companyCustomFieldValues'));\n\n                            row.invalidate().draw();\n                            this.setRowStyle(row.node(), row.data().attributes.status, row.data().attributes.isBlacklisted || row.data().attributes.isCompanyBlacklisted);\n\n                            let removeRow = _.bind(function () {\n                                    let parentRow = this.options.parentDataTable.getRow($(row.node()).parent().closest('tr').prev());\n                                    row.remove().draw();\n\n                                    // remove company if this was the only contact listed\n                                    if (this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP &&\n                                        parentRow.data().get('contactCount') === 1) {\n                                        parentRow.remove().draw();\n                                    }\n                                }, this),\n                                callback = _.bind(function () {\n                                    if (row.child.isShown()) {\n                                        row.child.hide();\n\n                                        this.childRowToggle({\n                                            currentTarget: row.selector.rows.find('i.contact-toggle-row')[0]\n                                        });\n                                    }\n\n                                    if (this.options.parentDataTable && (this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP ||\n                                        this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCONT)) {\n\n                                        let groupId = parseInt(row.data().collection.options.groupIdList);\n                                        if (groupId === 0) {\n                                            if (_.size(model.get('groups')) > 0) {\n                                                // they had no groups but now have groups, remove from no group\n                                                removeRow();\n                                            }\n                                        } else if (_.size(_.filter(model.get('groups'), function (group) {\n                                            return group.groupId === groupId\n                                        })) === 0) {\n                                            // they no longer have the group of the row they are being edited in\n                                            removeRow();\n                                        }\n                                    }\n                                }, this);\n\n                            if (becameInactive && this.options.parentDataTable && (this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.COMP || this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP)) {\n                                // update parent status and redraw\n                                let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n                                    {\n                                        endpoint: 'projects',\n                                        value: PJQ.app.session.project.id\n                                    },\n                                    {\n                                        endpoint: 'participants',\n                                        value: row.data().get('contactId')\n\n                                    },\n                                    {\n                                        endpoint: 'companystatus'\n                                    }\n                                ]);\n                                new PJQ.ajax.Request({\n                                    endpoint: endpoint\n                                }).get().done(_.bind(function (data) {\n                                    let parentTR = $(row.node()).parent().closest('tr').prev();\n                                    let rowParent = this.options.parentDataTable.getRow(parentTR);\n                                    rowParent.data().set('status', data.status);\n                                    rowParent.invalidate().draw();\n                                    this.options.parentDataTable.setRowStyle(parentTR, data.status, row.data().get('isCompanyBlacklisted'));\n                                    callback();\n\n                                }, this)).fail(function () {\n                                    PJQ.notifications.notify.errorNotify({\n                                        message: 'Unable to get Company Status.'\n                                    });\n                                });\n                            } else {\n                                callback();\n                            }\n\n                        }, this)\n                    });\n                }, this),\n                isShown: _.bind(function (row) {\n                    return PJQ.app.session.hasPermission('contacts.isAdmin');\n                }, this)\n            },\n            {\n                name: 'Manage Trades',\n                iconClass: 'fal fa-hard-hat',\n                onClick: _.bind(function (row) {\n                    new PJQ.views.projects.ManageProjectParticipantTradesModal({\n                        contactId: row.data().get('contactId'),\n                        onSave: _.bind(function (data) {\n                            // close/hide/dispose of child datatable so that it can be refreshed.  update current row's grouplist display.\n                            let groupIdList = [];\n                            let groupNameList = [];\n                            _.each(data.models, _.bind(function (model) {\n                                if (model.get('isSelected')) {\n                                    groupIdList.push(model.get('groupId'));\n                                    groupNameList.push(model.get('groupName'));\n                                }\n                            }, this));\n\n                            row.data().set('groupIdList', groupIdList.join(','));\n                            row.data().set('groupListDisplay', groupNameList.join(', '));\n                            row.invalidate().draw();\n\n                            if (row.child.isShown()) {\n                                row.child.hide();\n\n                                this.childRowToggle({\n                                    currentTarget: row.selector.rows.find('i.contact-toggle-row')[0]\n                                });\n                            }\n\n                        }, this)\n                    });\n                }, this),\n                isShown: _.bind(function (row) {\n                    return PJQ.app.session.project.hasPermission('messaging.canManage') && this.options.view !== PJQ.constants.projectMessaging.views.MSGCONT_CONT;\n                }, this)\n\n            },\n            {\n                name: 'Project History',\n                iconClass: 'fal fa-history',\n                onClick: _.bind(function (row) {\n                    new PJQ.views.projects.ProjectParticipantHistoryModal({\n                        project: this.options.project,\n                        contactId: row.data().get('contactId')\n                    });\n                }, this),\n                isShown: _.bind(function (row) {\n                    return true;\n                }, this)\n            },\n            {\n                name: 'Resend Message',\n                iconClass: 'fal fa-paper-plane',\n                onClick: _.bind(function (row) {\n                    new PJQ.ajax.Request({\n                        endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n                            {\n                                endpoint: 'projects',\n                                value: PJQ.app.session.project.id\n                            },\n                            {\n                                endpoint: 'projectmessages',\n                                value: row.data().collection.options.projectMessageId\n                            },\n                            {\n                                endpoint: 'resend'\n                            }\n                        ], [\n                            {\n                                parameter: 'projectMessageContactBroadcastIds',\n                                value: [row.data().attributes.projectMessageContactBroadcastId]\n                            }\n                        ])\n                    }).post().done(_.bind(function (data) {\n                        PJQ.notifications.notify.successNotify({\n                            message: 'Message is being resent.'\n                        });\n                    }, this));\n\n                }, this),\n                isShown: _.bind(function (row) {\n                    return PJQ.app.session.project.hasPermission('messaging.canManage') && this.options.view === PJQ.constants.projectMessaging.views.MSGCONT_CONT;\n                }, this)\n            },\n            {\n                name: 'Upload Bid Docs',\n                iconClass: 'fal fa-cloud-upload',\n                onClick: _.bind(function (row) {\n                    new PJQ.views.projects.UploadParticipantBidDocumentsModal({\n                        contact: row.data(),\n                        onSave: _.bind(function () {\n                            this.options.projectMessagingView.renderView();\n                        }, this)\n                    });\n                }, this),\n                isShown: function () {\n                    return PJQ.app.session.project.hasPermission('messaging.canManage');\n                }\n            },\n            {\n                name: 'Order Prints',\n                iconClass: 'fal fa-shopping-cart',\n                onClick: _.bind(function (row) {\n                    new PJQ.views.files.OrderPrintsModal({\n                        recipients: [row.data()],\n                        onOrderPlaced: _.bind(function () {\n                            this.options.projectMessagingView.clearSelectedContacts();\n                        }, this)\n                    });\n                }, this),\n                isShown: function () {\n                    return PJQ.app.session.project.hasPermission('messaging.canManage');\n                }\n            },\n            {\n                name: 'Send Update Request',\n                iconClass: 'fal fa-poll-h',\n                onClick: _.bind(function (row) {\n                    new PJQ.ajax.Request({\n                        endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n                            {\n                                endpoint: 'contacts',\n                                value: row.data().get('contactId')\n                            },\n                            {\n                                endpoint: 'updater'\n                            }\n                        ])\n                    }).post().done(_.bind(function () {\n                        PJQ.notifications.notify.successNotify({\n                            message: 'Contact Updater Request sent'\n                        });\n                    }, this)).fail(function (xhr, err, result) {\n                        PJQ.notifications.notify.errorNotify({\n                            message: 'Contact Updater Request failed'\n                        });\n                    });\n\n                }, this),\n                isShown: function (row) {\n                    return PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_CONTACT_UPDATER_ENABLED) &&\n                        PJQ.app.session.project.hasPermission('messaging.canManage') &&\n                        !row.data().get('isDirectoryContact');\n                }\n            },\n            {\n                name: 'Request Prequal',\n                iconClass: 'fal fa-envelope-open-text',\n                onClick: _.bind(function (row) {\n                    new PJQ.ajax.Request({\n                        endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n                            {\n                                endpoint: 'contacts',\n                                value: row.data().get('contactId')\n                            },\n                            {\n                                endpoint: 'prequal'\n                            },\n                            {\n                                endpoint: 'request'\n                            }\n                        ])\n                    }).post().done(_.bind(function (data) {\n                        if (data && data.success) {\n                            PJQ.notifications.notify.successNotify({\n                                message: 'Qualification request sent'\n                            });\n                        } else {\n                            PJQ.notifications.notify.errorNotify({\n                                message: 'Qualification update failed, invalid email address on contact'\n                            });\n                        }\n                    }, this)).fail(function (xhr, err, result) {\n                        new PJQ.logging.Debug(PJQ.logging.LoggingActions.SEND_PREQUAL_UPDATE, {\n                            error: err,\n                            result: result\n                        });\n                    });\n                }, this),\n                isShown: function () {\n                    return PJQ.app.session.hasPermission('prequal.canView') && !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_PREQUAL);\n                }\n            },\n            {\n                name: 'Export vCard',\n                iconClass: 'fal fa-address-card',\n                onClick: _.bind(function (row) {\n                    PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\n                        {\n                            endpoint: 'contacts',\n                            value: row.data().get('contactId')\n                        },\n                        {\n                            endpoint: 'vcard'\n                        }\n                    ]));\n                }, this)\n            },\n            {\n                name: 'Copy Public Vendor',\n                iconClass: 'fal fa-copy',\n                onClick: _.bind(function (row) {\n                    let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n                        {\n                            endpoint: 'contacts',\n                            value: row.data().get('contactId')\n                        },\n                        {\n                            endpoint: 'copydirectorycontact'\n                        }\n                    ]);\n                    new PJQ.ajax.Request({\n                        endpoint: endpoint\n                    }).post().done(_.bind(function () {\n                        PJQ.notifications.notify.successNotify({\n                            message: 'Contact copied successfully.'\n                        });\n                        // todo: update this view and maybe parent view if parent view is a company?\n                    }, this)).fail(function (xhr, err, result) {\n                        let logicError = xhr.responseJSON.message.indexOf('logic') === -1;\n                        PJQ.notifications.notify.errorNotify({\n                            title: logicError ? 'Duplicate Contact' : 'Something went wrong!',\n                            message: logicError ? 'Directory contact already exists in your address book.' : 'Something went wrong!'\n                        });\n                    });\n                }, this),\n                isShown: function (row) {\n                    return PJQ.app.session.project.hasPermission('messaging.canManage') && row.data().get('isDirectoryContact');\n                }\n            },\n            {\n                name: 'Report',\n                iconClass: 'fal fa-flag-alt',\n                onClick: _.bind(function (row) {\n                    new PJQ.views.contacts.ReportContactModal({\n                        contactId: row.data().get('contactId'),\n                        showRemoveFromProject: true,\n                        onReport: _.bind(function (removeFromProject) {\n                            if (removeFromProject)\n                                this.options.projectMessagingView.renderView();\n                        }, this)\n                    });\n                }, this),\n                isShown: function (row) {\n                    return PJQ.app.session.project.hasPermission('messaging.canManage') && row.data().get('isDirectoryContact');\n                }\n            },\n            {\n                name: 'Remove Contact',\n                iconClass: 'fal fa-trash',\n                isDanger: true,\n                onClick: _.bind(function (row) {\n                    new PJQ.views.projects.DeleteProjectParticipants({\n                        title: \"Remove Participant\",\n                        body: \"Are you sure you want to remove this contact from this project?\",\n                        onDelete: _.bind(function (isRemoveFromAB) {\n                            this.options.projectMessagingView.deleteContacts([row.data().get('contactId')], isRemoveFromAB);\n                        }, this)\n                    });\n                }, this),\n                isShown: _.bind(function (row) {\n                    return PJQ.app.session.project.hasPermission('messaging.canManage') && this.options.view !== PJQ.constants.projectMessaging.views.MSGCONT_CONT;\n                }, this)\n            }\n        ];\n    },\n    getColumns: function (includeAllColumns = false) {\n        let columns = [],\n            includeColumns = ['icons', 'companyName', 'contactName', 'contactTitle', 'address1', 'address2', 'city', 'state', 'zip', 'country', 'phone', 'cell', 'fax', 'email', 'unionStatus', 'sector', 'certifications', 'groupListDisplay', 'distance', 'grade', 'userType', 'commentsCompany', 'commentsContact', 'bidAmount', 'status'];\n\n        if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_ACTIVITY_RANK_STATUS_LIST))\n            includeColumns.push('activityRank');\n\n        if (this.options.view === PJQ.constants.projectMessaging.views.MSGCONT_CONT) {\n            includeColumns.push('accessKey');\n            includeColumns.push('broadcastStatus');\n            includeColumns.push('deliveredOn');\n            includeColumns.push('openedOn');\n            includeColumns.push('responded');\n        }\n\n        _.each(PJQ.app.session.customFields.company[PJQ.app.session.get('masterUserId')].models, _.bind(function (customField) {\n            includeColumns.push('companyCustomField_' + customField.id);\n        }, this));\n\n        _.each(PJQ.app.session.customFields.contact[PJQ.app.session.get('masterUserId')].models, _.bind(function (customField) {\n            includeColumns.push('contactCustomField_' + customField.id);\n        }, this));\n\n        if (!includeAllColumns) {\n            if (_.size(this.options.settings.columns) > 0)\n                includeColumns = this.options.settings.columns;\n            else\n                includeColumns = this.options.settings.columnsDefault;\n\n            if (this.options.projectMessagingView && !this.options.projectMessagingView.options.canViewBidAmount) {\n                includeColumns = _.filter(includeColumns, function(column) { return column != 'bidAmount' });\n            }\n\n            columns.push({\n                \"columnData\": '',\n                \"title\": (this.options.parentDataTable && (this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.COMP || this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP)) ? '' : '<div class=\"pretty p-default p-icon p-smooth fs-18 m-0\"><input type=\"checkbox\" class=\"select-all-contacts\" /><div class=\"state\"><i class=\"icon fal fa-check\"></i> <label class=\"wd-0\">&nbsp;</label></div></div>',\n                \"width\": \"20px\",\n                \"data\": \"null\",\n                \"orderable\": false,\n                \"searchable\": false,\n                \"render\": _.bind(function (data, type, row) {\n                    let isSelected = this.options.projectMessagingView.isContactSelected(row.get('contactId')),\n                        enableDeclined = this.options.projectMessagingView.isEnableDeclined(),\n                        isDisabled = !enableDeclined && (this.options.projectStatusList[1].toString().split(',')[0].toLowerCase() === row.get('status').toString().toLowerCase());\n                    return ('<div class=\"text-align-center\"><div class=\"pretty p-default p-icon p-smooth fs-18 m-0\">' +\n                        '<input type=\"checkbox\"' + (isSelected ? ' checked ' : '') + (isDisabled ? ' disabled ' : '') + ' class=\"select-contact\" />' +\n                        '<div class=\"state\"><i class=\"icon fal fa-check\"></i> <label class=\"wd-0\">&nbsp;</label></div>' +\n                        '</div></div>');\n                }, this)\n            });\n\n            if (!this.options.parentDataTable || this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.COMP || this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.RSPCONT || this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCONT || this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP) {\n                columns.push({\n                    \"columnData\": 'contactGroups',\n                    \"data\": null,\n                    \"title\": \"\",\n                    \"orderable\": false,\n                    \"searchable\": false,\n                    \"defaultContent\": '',\n                    \"render\": function (data, type, row) {\n                        return '<i class=\"fal fa-plus-circle contact-toggle-row\" data-id=\"' + row.get('contactId') + '\"></i>';\n                    }\n                });\n            }\n        }\n\n        let maxEmailWidth = $(window).width() > 1200 ? 225 : 100,\n            canManage = PJQ.app.session.project.hasPermission('messaging.canManage'),\n            distanceThreshold = PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_DISTANCE_ICON_THRESHOLD);\n        _.each(includeColumns, _.bind(function (columnName) {\n            let cName,\n                cNameTp = typeof columnName;\n            if (cNameTp === 'string') {\n                cName = columnName;\n            } else if (cNameTp === 'object' && typeof cNameTp.data === 'string') {\n                cName = cNameTp.data;\n            } else {\n                return;\n            }\n            switch (cName) {\n                case 'icons':\n                    columns.push({\n                        \"columnData\": \"icons\",\n                        \"data\": null,\n                        \"title\": 'Info',\n                        \"width\": '50px',\n                        \"orderable\": false,\n                        \"render\": _.bind(function (data, type, row) {\n                            let icons = [];\n\n                            if (row.get('isDefaultContact'))\n                                icons.push(\"<i class='far fa-crown mr-1' title='Primary Contact'></i>\");\n\n                            // proqual stuff\n                            if (row.get('hasUnpaidInvites'))\n                                icons.push(\"<img class='project-participant-icon mr-1' src='/assets/modules2/global/images/screening_pending.gif' title='Qualification Pending' />\");\n                            else if (row.get('minScreeningStatusId') < PJQ.constants.proQual.screeningStatuses.Complete &&\n                                row.get('maxScreeningInviteId') > 0 && new Date(row.get('maxInviteExpiresOn')) > new Date())\n                                icons.push(\"<img class='project-participant-icon mr-1' src='/assets/modules2/global/images/screening_inprocess.gif' title='Qualification In Process' />\");\n                            else if (row.get('minScreeningStatusId') >= PJQ.constants.proQual.screeningStatuses.Complete &&\n                                row.get('maxScreeningInviteId') > 0 && row.get('minScreeningGradeId') === 0 && new Date(row.get('maxInviteExpiresOn')) > new Date())\n                                icons.push(\"<img class='project-participant-icon mr-1' src='/assets/modules2/global/images/screening_review.gif' title='Qualification Needs Review' />\");\n                            else if (row.get('minScreeningStatusId') >= PJQ.constants.proQual.screeningStatuses.Complete &&\n                                row.get('maxScreeningInviteId') > 0 && row.get('minScreeningGradeId') > 0 && new Date(row.get('maxInviteExpiresOn')) > new Date())\n                                icons.push(\"<img class='project-participant-icon mr-1' src='/assets/modules2/global/images/screening_allclear.png' title='Qualification Approved' />\");\n                            else if (row.get('minScreeningStatusId') >= PJQ.constants.proQual.screeningStatuses.InProcess &&\n                                row.get('maxScreeningInviteId') > 0 && new Date(row.get('maxInviteExpiresOn')) > new Date())\n                                icons.push(\"<img class='project-participant-icon mr-1' src='/assets/modules2/global/images/screening_processed.gif' title='All Enrolled' />\");\n\n                            if (row.get('maxScreeningInviteId') > 0 && row.get('screeningCountFeedbackItems') > 0 && new Date(row.get('maxInviteExpiresOn')) > new Date())\n                                icons.push(\"<img class='project-participant-icon mr-1' src='/assets/modules2/global/images/screening_grade2.gif' title='Qualification Feedback Required' />\");\n\n                            if (row.get('maxScreeningInviteId') > 0 && new Date(row.get('maxInviteExpiresOn')) < new Date())\n                                icons.push(\"<img class='project-participant-icon mr-1' src='/assets/modules2/global/images/screening_expired.png' title='Qualification Expired' />\");\n\n                            // directory stuff\n                            if (row.get('networkVerificationLevel') === 1)\n                                icons.push(\"<img class='project-participant-icon mr-1' src='/assets/modules2/global/images/select_network_icon.png' title='Select Network Member' />\");\n                            else if (row.get('networkVerificationLevel') === 2)\n                                icons.push(\"<img class='project-participant-icon mr-1' src='/assets/modules2/global/images/verified_network_icon.png' title='Verified Network Member' />\");\n                            else if (row.get('isDirectoryContact'))\n                                icons.push(\"<img class='project-participant-icon mr-1' src='/assets/modules2/global/images/directory_sub.png' title='Pantera Directory Member' />\");\n\n                            // message stats stuff\n\n                            if (row.get('lastDownloadedOn'))\n                                icons.push(\"<i class='far fa-download mr-1' title='Last downloaded on \" + PJQ.helpers.dateHelpers.getDateString(new Date(row.get('lastDownloadedOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME) + \"'></i>\");\n                            else if (row.get('lastViewedOn') && (!this.options.parentDataTable || this.options.parentDataTable.options.view !== PJQ.constants.projectMessaging.views.MSGCONT))\n                                icons.push(\"<i class='far fa-eye mr-1' title='Last visited on \" + PJQ.helpers.dateHelpers.getDateString(new Date(row.get('lastViewedOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME) + \"'></i>\");\n                            else if (row.get('viewedOn') && this.options.parentDataTable && this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.MSGCONT)\n                                icons.push(\"<i class='far fa-eye mr-1' title='Visited on \" + PJQ.helpers.dateHelpers.getDateString(new Date(row.get('viewedOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME) + \"'></i>\");\n                            else if (row.get('openedOn') && this.options.parentDataTable && this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.MSGCONT)\n                                icons.push(\"<i class='far fa-envelope-open  mr-1' title='Opened email on \" + PJQ.helpers.dateHelpers.getDateString(new Date(row.get('openedOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME) + \"'></i>\");\n                            else if (row.get('lastOpenedOn') && (!this.options.parentDataTable || this.options.parentDataTable.options.view !== PJQ.constants.projectMessaging.views.MSGCONT))\n                                icons.push(\"<i class='far fa-envelope-open  mr-1' title='Last opened email on \" + PJQ.helpers.dateHelpers.getDateString(new Date(row.get('lastOpenedOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME) + \"'></i>\");\n                            else if (row.get('deliveredOn') && this.options.parentDataTable && this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.MSGCONT)\n                                icons.push(\"<i class='far fa-envelope  mr-1' title='Delivered on \" + PJQ.helpers.dateHelpers.getDateString(new Date(row.get('deliveredOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME) + \"'></i>\");\n                            else if (row.get('lastDeliveredOn') && (!this.options.parentDataTable || this.options.parentDataTable.options.view !== PJQ.constants.projectMessaging.views.MSGCONT))\n                                icons.push(\"<i class='far fa-envelope  mr-1' title='Last delivered email on \" + PJQ.helpers.dateHelpers.getDateString(new Date(row.get('lastDeliveredOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME) + \"'></i>\");\n\n                            if (row.get('lastBroadcastStatus') && (row.get('lastBroadcastStatus').toLowerCase().indexOf('fail') !== -1 || row.get('lastBroadcastStatus').toLowerCase().indexOf('error') !== -1))\n                                icons.push(\"<i class='far fa-exclamation-triangle  mr-1' title='Last Message Failed'></i>\");\n\n                            let dist = row.get('distance');\n                            if (typeof distanceThreshold === 'number' && dist != null && dist <= distanceThreshold) {\n                                icons.push(\"<i class='fas fa-map-marker-check text-orange fs-18 mr-1' title='Within \" + distanceThreshold.toString() + \" miles'></i>\");\n                            }\n\n                            return '<div class=\"d-flex justify-content-center\">' + icons.join('') + '</div>';\n                        }, this)\n                    });\n                    break;\n                case 'companyName':\n                    columns.push({\n                        \"columnData\": \"companyName\",\n                        \"data\": \"attributes.companyName\",\n                        \"title\": \"Company\",\n                    });\n                    break;\n                case 'contactName':\n                    columns.push({\n                        \"columnData\": \"contactName\",\n                        \"data\": \"attributes.contactName\",\n                        \"title\": \"Contact\",\n                    });\n                    break;\n                case 'contactTitle':\n                    columns.push({\n                        \"columnData\": \"contactTitle\",\n                        \"data\": \"attributes.contactTitle\",\n                        \"title\": \"Title\"\n                    });\n                    break;\n                case 'address1':\n                    columns.push({\n                        \"columnData\": \"address1\",\n                        \"data\": \"attributes.address1\",\n                        \"title\": \"Address 1\"\n                    });\n                    break;\n                case 'address2':\n                    columns.push({\n                        \"columnData\": \"address2\",\n                        \"data\": \"attributes.address2\",\n                        \"title\": \"Address 2\"\n                    });\n                    break;\n                case 'city':\n                    columns.push({\n                        \"columnData\": \"city\",\n                        \"data\": \"attributes.city\",\n                        \"title\": \"City\"\n                    });\n                    break;\n                case 'state':\n                    columns.push({\n                        \"columnData\": \"state\",\n                        \"data\": \"attributes.state\",\n                        \"title\": \"State\",\n                    });\n                    break;\n                case 'zip':\n                    columns.push({\n                        \"columnData\": \"zip\",\n                        \"data\": \"attributes.zip\",\n                        \"title\": \"Zip\",\n                    });\n                    break;\n                case 'country':\n                    columns.push({\n                        \"columnData\": \"country\",\n                        \"data\": \"attributes.country\",\n                        \"title\": \"Country\",\n                    });\n                    break;\n                case 'phone':\n                    columns.push({\n                        \"columnData\": \"phone\",\n                        \"data\": \"attributes.phone\",\n                        \"title\": \"Phone\",\n                        \"width\": \"110px\",\n                        \"render\": _.bind(function (data, type, row) {\n                            let html = '<div style=\"min-width:100px;\" class=\"d-flex align-items-center\">',\n                                phoneFormatted = (row.get('phone') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('phone')) + (_.size(row.get('phoneExtension')) === 0 ? '' : ' x' + row.get('phoneExtension')) : 'N/A'),\n                                phoneWrapped = (row.get('phone') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('phone'), true) + (_.size(row.get('phoneExtension')) === 0 ? '' : ' x' + row.get('phoneExtension')) : 'N/A');\n\n                            if (row.get('phone') !== '')\n                                html += '<button type=\"button\" class=\"btn btn-transparent-dark btn-copy-phone\" title=\"Copy Phone #\" data-phone=\"' + phoneFormatted + '\"><i class=\"far fa-phone text-dark\"></i></button>';\n\n                            html += '<div class=\"flex-fill ' + (row.get('phone') ? '' : 'text-muted') + '\">' + phoneWrapped + '</div>';\n                            html += '</div>';\n                            return html;\n                        }, this)\n                    });\n                    break;\n                case 'cell':\n                    columns.push({\n                        \"columnData\": \"cell\",\n                        \"data\": \"attributes.cell\",\n                        \"title\": \"Cell\",\n                        \"width\": \"110px\",\n                        \"render\": _.bind(function (data, type, row) {\n                            let html = '<div style=\"min-width:100px;\" class=\"d-flex align-items-center\">',\n                                phoneFormatted = (row.get('cell') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('cell')) : 'N/A'),\n                                phoneWrapped = (row.get('cell') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('cell'), true) : 'N/A');\n\n                            if (row.get('cell') !== '')\n                                html += '<button type=\"button\" class=\"btn btn-transparent-dark btn-copy-phone\" title=\"Copy Cell #\" data-phone=\"' + phoneFormatted + '\"><i class=\"far fa-mobile-alt text-dark\"></i></button>';\n\n                            html += '<div class=\"flex-fill ' + (row.get('cell') ? '' : 'text-muted') + '\">' + phoneWrapped + '</div>';\n                            html += '</div>';\n                            return html;\n                        }, this)\n                    });\n                    break;\n                case 'fax':\n                    columns.push({\n                        \"columnData\": \"fax\",\n                        \"data\": \"attributes.fax\",\n                        \"title\": \"Fax\",\n                        \"width\": \"110px\",\n                        \"render\": _.bind(function (data, type, row) {\n                            let html = '<div style=\"min-width:100px;\" class=\"d-flex align-items-center\">',\n                                phoneFormatted = (row.get('fax') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('fax')) : 'N/A'),\n                                phoneWrapped = (row.get('fax') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('fax'), true) : 'N/A');\n\n                            if (row.get('fax') !== '')\n                                html += '<button type=\"button\" class=\"btn btn-transparent-dark btn-copy-phone\" title=\"Copy Fax #\" data-phone=\"' + phoneFormatted + '\"><i class=\"far fa-fax text-dark\"></i></button>';\n\n                            html += '<div class=\"flex-fill ' + (row.get('fax') ? '' : 'text-muted') + '\">' + phoneWrapped + '</div>';\n                            html += '</div>';\n                            return html;\n                        }, this)\n                    });\n                    break;\n                case 'email':\n                    columns.push({\n                        \"columnData\": \"email\",\n                        \"data\": \"attributes.email\",\n                        \"title\": \"Email\",\n                        \"render\": function (data, type, row) {\n                            let email = data;\n                            if (_.size(email) === 0) {\n                                return '';\n                            }\n\n                            let project = PJQ.app.session.project,\n                                subject = project.get('projectName') + ' - ' + project.get('city') + ', ' + project.get('state'),\n                                accessKey = row.get('accessKey'),\n                                body;\n                            if (accessKey != null && _.size(accessKey.trim()) > 0) {\n                                let projectUrl = window.location.origin + '/?accessKey=' + accessKey + '#projects/' + project.id.toString() + '';\n                                body = 'Click here to view the project: ' + projectUrl;\n                            } else {\n                                body = '';\n                            }\n\n                            let html = '<div style=\"max-width:' + (maxEmailWidth != null ? (maxEmailWidth.toString() + 'px;') : 'auto') + '\" class=\"d-flex align-items-center wd-100\">',\n                                mailto = email + '?subject=' + encodeURIComponent(subject) + '&body=' + encodeURIComponent(body),\n                                emailFormatted = '<a target=\"_blank\" title=\"' + email + '\" style=\"color: inherit;\" href=\"mailto:' + mailto + '\">' + email + '</a>';\n                            html += '<button type=\"button\" class=\"btn btn-transparent-dark btn-copy-email\" title=\"Copy Email\" data-email=\"' + row.get('email') + '\"><i class=\"far fa-envelope text-dark\"></i></button>';\n                            html += '<div class=\"flex-fill of-hidden tof-ellipsis no-wrap' + (row.get('email') ? '' : 'text-muted') + '\">' + emailFormatted + '</div></div>';\n                            return html;\n                        }\n                    });\n                    break;\n                case 'unionStatus':\n                    columns.push({\n                        \"columnData\": 'unionStatus',\n                        \"title\": 'Union Status',\n                        \"render\": function (data, type, row) {\n                            let status = [];\n                            if (row.get('isUnion'))\n                                status.push('Union');\n                            if (row.get('isNonUnion'))\n                                status.push('Non-Union');\n                            if (row.get('isPrevailingWage'))\n                                status.push('Prevailing Wage');\n\n                            if (_.size(status) === 0)\n                                status.push('N/A');\n\n                            return status.join(',');\n                        }\n                    });\n                    break;\n                case 'sector':\n                    columns.push({\n                        \"columnData\": 'sector',\n                        \"title\": 'Labor Sector',\n                        \"render\": function (data, type, row) {\n                            let status = [];\n                            if (row.get('isPublicSector'))\n                                status.push('Public');\n                            if (row.get('isPrivateSector'))\n                                status.push('Private');\n\n                            if (_.size(status) === 0)\n                                status.push('N/A');\n\n                            return status.join(',');\n                        }\n                    });\n                    break;\n                case 'certifications':\n                    columns.push({\n                        \"columnData\": 'certifications',\n                        \"title\": 'Certification',\n                        \"render\": function (data, type, row) {\n                            let status = [];\n                            if (row.get('isDBE'))\n                                status.push('DBE');\n                            if (row.get('isDVBE'))\n                                status.push('DVBE');\n                            if (row.get('isMBE'))\n                                status.push('MBE');\n                            if (row.get('isSBE'))\n                                status.push('SBE');\n                            if (row.get('isSDVBE'))\n                                status.push('SDVBE');\n                            if (row.get('isWBE'))\n                                status.push('WBE');\n\n                            if (_.size(status) === 0)\n                                status.push('N/A');\n\n                            return status.join(',');\n                        }\n                    });\n                    break;\n                case 'groupListDisplay':\n                    columns.push({\n                        \"columnData\": \"groupListDisplay\",\n                        \"data\": \"attributes.groupListDisplay\",\n                        \"title\": \"Trades\",\n                        \"render\": function (data) {\n                            let groupDisplayLimit = 0, groupArray = data ? data.split(',') : [];\n                            if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_MAX_GROUP_DISPLAY)) {\n                                groupDisplayLimit = parseInt(PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_MAX_GROUP_DISPLAY));\n                            }\n\n                            if (groupDisplayLimit > 0 && (_.size(groupArray) > groupDisplayLimit)) {\n                                return _.rest(groupArray.reverse(), _.size(groupArray) - groupDisplayLimit).reverse().join(', ') + \" <br>\" +\n                                    \"<a href='javascript:void(0)' class='btn-show-groups' title='Click to show complete list of Trades'> \" + (_.size(groupArray) - groupDisplayLimit) + \" more item(s)</a>\";\n                            } else {\n                                return data;\n                            }\n                        }\n                    });\n                    break;\n                case 'distance':\n                    columns.push({\n                        \"columnData\": 'distance',\n                        \"data\": {\n                            \"_\": function (row) {\n                                return row.get('distance') == null ? 0 : row.get('distance');\n                            },\n                            \"display\": function (row) {\n                                if (row.get('distance') == null) {\n                                    return '';\n                                }\n                                return row.get('distance').toFixed(2).toString() + ' mi.';\n                            }\n                        },\n                        \"title\": 'Distance',\n                    });\n                    break;\n                case 'grade':\n                    columns.push({\n                        \"columnData\": 'grade',\n                        \"title\": 'Grade',\n                        \"width\": \"40px\",\n                        \"render\": function (data, type, row) {\n                            let html = '<span class=\"mr-1\">' + row.get('gradeAverage').toString() + '</span>';\n                            html += (row.get('grade') !== 0) ? '<button type=\"button\" class=\"btn btn-transparent-dark btn-grade-project-contact\" title=\"Review Grade\" data-contact-company-id=\"' + row.get('contactCompanyId') + '\"><i class=\"fas fa-star text-gold\"></i></button>' : '<button type=\"button\" class=\"btn btn-transparent-dark btn-grade-project-contact\" title=\"Grade\" data-contact-company-id=\"' + row.get('contactCompanyId') + '\"><i class=\"far fa-star text-muted\"></i></button>';\n                            return html;\n                        }\n                    });\n                    break;\n                case 'userType':\n                    columns.push({\n                        \"columnData\": 'userType',\n                        \"title\": 'Contact Type',\n                        \"data\": 'userType',\n                        \"render\": function (data, type, row) {\n                            let userType = _.filter(PJQ.app.session.userTypes.getByIsCompany(false), _.bind(function (userType) {\n                                return row.get('userTypeId') === userType.get('userTypeId');\n                            }, this))[0];\n\n                            return userType != null ? userType.get('name') : 'N/A';\n                        }\n                    });\n                    break;\n                case 'commentsCompany':\n                    columns.push({\n                        \"columnData\": 'commentsCompany',\n                        \"title\": 'Comments (Company)',\n                        \"render\": function (data, type, row) {\n                            let html = '<div style=\"min-width:150px;\" class=\"d-flex align-items-center\">';\n                            html += '<div data-id=\"' + row.get('contactCompanyId') + '\" class=\"flex-fill comment-company ' + (row.get('lastCompanyComment') ? '' : 'text-muted') + '\">' + (row.get('lastCompanyComment') ? row.get('lastCompanyComment').comment : 'No Comments Added') + '</div>';\n                            html += '<button type=\"button\" class=\"btn btn-transparent-dark btn-add-comment-company\" title=\"Add Comment\"><i class=\"far fa-comment-plus text-dark\"></i></button>';\n                            html += '<button type=\"button\" class=\"btn btn-transparent-dark btn-comment-contact-company\" title=\"Comments\" data-contact-company-id=\"' + row.get('contactCompanyId') + '\"><i class=\"far fa-comments text-dark\"></i></button>';\n                            html += '</div>';\n                            return html;\n                        }\n                    });\n                    break;\n                case 'commentsContact':\n                    columns.push({\n                        \"columnData\": 'commentsContact',\n                        \"title\": 'Comments (Contact)',\n                        \"render\": function (data, type, row) {\n                            let html = '<div style=\"min-width:150px;\" class=\"d-flex align-items-center\">';\n                            html += '<div data-id=\"' + row.get('contactId') + '\" class=\"flex-fill comment-contact ' + (row.get('lastContactComment') ? '' : 'text-muted') + '\">' + (row.get('lastContactComment') ? row.get('lastContactComment').comment : 'No Comments Added') + '</div>';\n                            html += '<button type=\"button\" class=\"btn btn-transparent-dark btn-add-comment-contact\" title=\"Add Comment\"><i class=\"far fa-comment-plus text-dark\"></i></button>';\n                            html += '<button type=\"button\" class=\"btn btn-transparent-dark btn-comment-contact\" title=\"Comments\" data-contact-id=\"' + row.get('contactId') + '\"><i class=\"far fa-comments text-dark\"></i></button>';\n                            html += '</div>';\n                            return html;\n                        }\n                    });\n                    break;\n                case 'bidAmount':\n                    columns.push({\n                        \"columnData\": \"bidAmount\",\n                        \"data\": {\n                            \"_\": function (row) {\n                                return row.get('bidAmount');\n                            },\n                            \"display\": function (row) {\n                                if (canManage) {\n                                    return '<input type=\"text\" class=\"form-control contact-bid-amount input-dollars-full\" value=\"' + PJQ.helpers.formatHelpers.formatCurrency(row.get('bidAmount'), 2, false) + '\" />';\n                                }\n\n                                return '<span>' + PJQ.helpers.formatHelpers.formatCurrency(row.get('bidAmount'), 2, true) + '</span>'\n                            }\n                        },\n                        \"title\": \"Bid Amount\"\n                    });\n                    break;\n                case 'status':\n                    if (this.options.view === PJQ.constants.projectMessaging.views.MSGCONT_CONT) {\n                        columns.push({\n                            \"columnData\": 'status',\n                            \"title\": 'Response',\n                            \"width\": \"100px\",\n                            \"data\": {\n                                \"_\": function (row) {\n                                    return row.get('status') ? row.get('status') : 'PENDING';\n                                },\n                                \"display\": function (row) {\n                                    let html = '<select class=\"form-control contact-message-status\" style=\"min-width:100px;\">',\n                                        statuses = [],\n                                        isProjectResponse = PJQ.app.session.project.getProjectStatusList().indexOf(row.get('status')) != -1;\n\n                                    if (row.collection.options.responseType === 'PROJECT')\n                                        statuses = PJQ.app.session.project.getProjectStatusList();\n                                    else if (row.collection.options.responseType === 'MESSAGE')\n                                        statuses = PJQ.app.session.project.getMessageStatusList();\n                                    else\n                                        return _.size(row.get('status')) === 0 ? 'N/A' : row.get('status');\n\n                                    statuses.unshift(['PENDING', true]);\n\n                                    _.each(statuses, _.bind(function (status, index) {\n                                        html += '<option value=\"' + status[0] + '\"' + (status[0] === row.get('status') ? ' SELECTED' : '') + '>' + status[0] + '</option>';\n                                    }, this));\n\n                                    html += '</select>';\n\n                                    if (row.collection.options.responseType === '')\n                                        html = _.size(row.get('status')) === 0 ? 'N/A' : row.get('status');\n\n                                    return html;\n                                }\n                            }\n                        });\n                    } else {\n                        columns.push({\n                            \"columnData\": 'status',\n                            \"title\": 'Status',\n                            \"width\": \"120px\",\n                            \"data\": {\n                                \"_\": function (row) {\n                                    return row.get('status') ? row.get('status') : 'PENDING';\n                                },\n                                \"display\": function (row) {\n                                    if (canManage) {\n                                        let html = '<select class=\"form-control contact-project-status\" style=\"min-width: 100px;\">',\n                                            statuses = PJQ.app.session.project.getProjectStatusList();\n                                        statuses.unshift(['PENDING', true]);\n                                        _.each(statuses, _.bind(function (status, index) {\n                                            html += '<option value=\"' + status[0] + '\"' + (status[0] === row.get('status') ? ' SELECTED' : '') + '>' + status[0] + '</option>';\n                                        }, this));\n                                        html += '</select>';\n                                        return html;\n                                    }\n\n                                    let status = row.get('status');\n                                    return '<span>' + (_.size(status) > 0 ? status.toUpperCase() : 'PENDING') + '</span>';\n                                }\n                            }\n                        });\n                    }\n                    break;\n                case 'accessKey':\n                    columns.push({\n                        \"columnData\": \"accessKey\",\n                        \"data\": \"attributes.accessKey\",\n                        \"title\": \"Access Key\",\n                        \"render\": function (data, type, row) {\n                            let html = '<div style=\"min-width:100px;\" class=\"d-flex align-items-center\">';\n                            html += '<div class=\"flex-fill ' + (row.get('accessKey') ? '' : 'text-muted') + '\">' + (row.get('accessKey') ? row.get('accessKey') : '') + '</div>';\n                            if (row.get('accessKey') !== '' && row.get('accessKey') !== ' ')\n                                html += '<button type=\"button\" class=\"btn btn-transparent-dark btn-copy-access-key\" title=\"Copy Access Key\" data-access-key=\"' + row.get('accessKey') + '\"><i class=\"far fa-key text-dark\"></i></button>';\n                            html += '</div>';\n                            return html;\n                        }\n                    });\n                    break;\n                case 'broadcastStatus':\n                    columns.push({\n                        \"columnData\": 'broadcastStatus',\n                        \"data\": \"attributes.broadcastStatus\",\n                        \"title\": 'Broadcast Status',\n                        \"render\": function (data, type, row) {\n                            let broadcastStatus = _.size(row.get('broadcastStatus')) === 0 ? 'PENDING' : row.get('broadcastStatus');\n                            return '<span title=\"' + (_.size(row.get('broadcastErrorMessage')) === 0 ? broadcastStatus : row.get('broadcastErrorMessage')) + '\" >' + broadcastStatus + '</span>';\n                        }\n                    });\n                    break;\n                case 'responded':\n                    columns.push({\n                        \"columnData\": \"responded\",\n                        \"data\": {\n                            \"_\": function (row) {\n                                return new Date(row.get('rsvpOn'));\n                            },\n                            \"filter\": \"attributes.rsvpOn\",\n                            \"display\": function (row) {\n                                return row.get('rsvpOn') ? PJQ.helpers.dateHelpers.getDateString(new Date(row.get('rsvpOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME, true) : 'N/A';\n                            }\n                        },\n                        \"title\": \"Responded\"\n                    });\n                    break;\n                case 'deliveredOn':\n                    columns.push({\n                        \"columnData\": \"deliveredOn\",\n                        \"data\": {\n                            \"_\": function (row) {\n                                return new Date(row.get('deliveredOn'));\n                            },\n                            \"filter\": \"attributes.deliveredOn\",\n                            \"display\": function (row) {\n                                return row.get('deliveredOn') ? PJQ.helpers.dateHelpers.getDateString(new Date(row.get('deliveredOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME, true) : 'N/A';\n                            }\n                        },\n                        \"title\": \"Delivered\"\n                    });\n                    break;\n                case 'openedOn':\n                    columns.push({\n                        \"columnData\": \"openedOn\",\n                        \"data\": {\n                            \"_\": function (row) {\n                                return new Date(row.get('openedOn'));\n                            },\n                            \"filter\": \"attributes.openedOn\",\n                            \"display\": function (row) {\n                                return row.get('openedOn') ? PJQ.helpers.dateHelpers.getDateString(new Date(row.get('openedOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME, true) : 'N/A';\n                            }\n                        },\n                        \"title\": \"Opened\"\n                    });\n                    break;\n                case 'activityRank':\n                    if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_ACTIVITY_RANK_STATUS_LIST)) {\n                        columns.push({\n                            \"columnData\": 'activityRank',\n                            \"data\": 'attributes.activityRank',\n                            \"title\": 'Activity'\n                        });\n                    }\n                    break;\n\n            }\n\n            if (columnName.startsWith('companyCustomField_')) {\n                let customFieldId = parseInt(columnName.substring(columnName.indexOf('_') + 1));\n\n                _.each(PJQ.app.session.customFields.company[PJQ.app.session.get('masterUserId')].models, _.bind(function (customField) {\n                    if (customField.id === customFieldId)\n                        columns.push(this.getCustomFieldColumn(customField, true));\n                }, this));\n            }\n\n            if (columnName.startsWith('contactCustomField_')) {\n                let customFieldId = parseInt(columnName.substring(columnName.indexOf('_') + 1));\n\n                _.each(PJQ.app.session.customFields.contact[PJQ.app.session.get('masterUserId')].models, _.bind(function (customField) {\n                    if (customField.id === customFieldId)\n                        columns.push(this.getCustomFieldColumn(customField, false));\n                }, this));\n            }\n\n        }, this));\n\n        return columns;\n    },\n    getChildTableType: function () {\n        return PJQ.constants.projectMessaging.views.CONTGROUP;\n    },\n    getRowChildTable: function (childOpts) {\n        childOpts.view = this.getChildTableType();\n        childOpts.dom = 't';\n        childOpts.parentDataTable = this;\n        childOpts.paging = false;\n        return new PJQ.views.projects.ProjectMessagingContactTradesDataTable(childOpts);\n    },\n    getRowChildData: function (row) {\n        return new PJQ.collections.projectParticipants.ProjectParticipantsForView(null, {\n            project: PJQ.app.session.project,\n            view: PJQ.constants.projectMessaging.views.CONTGROUP,\n            contactId: row.data().get('contactId')\n        });\n    },\n    statusChanged: function (statuses, parentTR, parentView) {\n\n        let self = this;\n        if (parentTR) {\n            this.statusChangedHelper(this.getRow(parentTR), statuses, parentTR, parentView);\n        } else {\n            this.dataTable.rows().every(function (rowIdx, tableLoop, rowLoop) {\n                self.statusChangedHelper(this, statuses, parentTR, parentView);\n            });\n        }\n        this.dataTable.draw();\n\n        // if this is the child of the company view, update the parent as well\n        if (this.options.parentDataTable != null) {\n            this.options.parentDataTable.statusChanged(statuses, parentTR ? parentTR.parent().closest('tr').prev() : null, parentView);\n        }\n\n    },\n    statusChangedHelper: function (row, statuses, parentTR, parentView) {\n        switch (this.options.view) {\n            case PJQ.constants.projectMessaging.views.COMP_CONT:\n            case PJQ.constants.projectMessaging.views.CONT:\n            case PJQ.constants.projectMessaging.views.RSPCONT_CONT:\n                // these views cannot have a group status, so update the regular status column and redraw the row.\n                row.data().set('status', statuses.projectStatus);\n                row.invalidate();\n                this.setRowStyle(row.node(), row.data().get('status'), row.data().get('isBlacklisted') || row.data().get('isCompanyBlacklisted'));\n\n\n                // update the groups subgrid if it exists\n                if (parentView !== PJQ.constants.projectMessaging.views.CONTGROUP) {\n                    _.each(this.options.childDataTables, _.bind(function (childDT) {\n                        if (typeof childDT.statusChanged === 'function') {\n                            childDT.statusChanged(statuses, null, this.options.view);\n                        }\n                    }, this));\n                }\n                break;\n            case PJQ.constants.projectMessaging.views.GROUPCOMP_COMP_CONT:\n            case PJQ.constants.projectMessaging.views.GROUPCONT_CONT:\n                // these views must have a group status, so update the group status column and redraw the row.\n                row.data().set('status', statuses.groupStatus);\n                row.invalidate();\n                this.setRowStyle(row.node(), row.data().get('status'), row.data().get('isBlacklisted') || row.data().get('isCompanyBlacklisted'));\n\n                // update the groups subgrid if it exists\n                _.each(this.options.childDataTables, _.bind(function (childDT) {\n                    if (row.data().get('contactId') !== childDT.options.parentId)\n                        return;\n\n                    if (typeof childDT.statusChanged === 'function') {\n                        childDT.statusChanged(statuses, null, this.options.view);\n                    }\n                }, this));\n                break;\n        }\n    },\n    onMessageStatusChanged: function (e) {\n        let $target = $(e.currentTarget),\n            status = $target.val().toUpperCase(),\n            row = this.getRow($target.closest('tr')),\n            data = row.data();\n\n        data.updateStatus(status, _.bind(function () {\n            this.setRowStyle(row.node(), row.data().get('status'), row.data().get('isBlacklisted') || row.data().get('isCompanyBlacklisted'));\n            PJQ.notifications.notify.successNotify({\n                message: 'Status updated'\n            });\n        }, this));\n        // no parents or children to update in this case as it is a Message status.\n    },\n    bidAmountExited: function(e) {\n        let bidAmount = PJQ.helpers.inputHelpers.getMoneyInputValue($(e.currentTarget).parent());\n        $(e.currentTarget).val(PJQ.helpers.formatHelpers.formatCurrency(bidAmount, 2, false));\n    },\n    bidAmountChanged: function (e) {\n        if (e.ctrlKey && e.key != 'v') {\n            e.stopPropagation();\n            return false;\n        }\n\n        let tr = $(e.currentTarget).closest('tr'),\n            parentTR = $(e.currentTarget).closest('tr').parent().closest('tr').prev(),\n            row = this.getRow(tr),\n            bidAmount = PJQ.helpers.inputHelpers.getMoneyInputValue($(e.currentTarget).parent()),\n            callback = function (context) {\n                if (context.options.parentDataTable !== undefined && (context.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.COMP || context.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP)) {\n                    let bidAmountTotal = 0;\n                    _.each(context.dataTable.data(), _.bind(function (item) {\n                        if (item.get('contactCompanyId') === row.data().get('contactCompanyId'))\n                            bidAmountTotal += item.get('bidAmount');\n                    }, context));\n\n                    let rowParent = context.options.parentDataTable.getRow(parentTR);\n                    rowParent.data().set('bidAmount', bidAmountTotal);\n                    //rowParent.invalidate().draw();\n                    $(parentTR).find('.bid-amount-total').text(PJQ.helpers.formatHelpers.formatCurrency(bidAmountTotal, 2, true));\n                }\n            };\n\n        row.data().set('bidAmount', bidAmount);\n        row.data().set('contactCompanyId', row.data().get('contactCompanyId'));\n        row.data().set('projectId', PJQ.app.session.project.id);\n        row.data().set('isUpdateBidAmount', true);\n        row.data().queueSave({bidAmount: bidAmount}, {\n            //patch: true,\n            success: _.bind(function () {\n                callback(this);\n            }, this)\n        }, 800);\n\n    },\n    contactSelectChanged: function (e) {\n        let tr = $(e.currentTarget).closest('tr'),\n            parentTR = $(e.currentTarget).closest('tr').parent().closest('tr').prev(),\n            row = this.getRow(tr);\n\n        if ($(e.currentTarget).prop('checked')) {\n            this.options.projectMessagingView.addSelectedContacts([row.data().get('contactId')]);\n\n            if (this.options.parentDataTable && (this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP || this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCONT)) {\n                let groupId = parseInt(row.data().collection.options.groupIdList);\n                this.options.projectMessagingView.addSelectedContactGroups([{\n                    contactId: row.data().get('contactId'),\n                    groupId: groupId\n                }]);\n            }\n        } else {\n            this.options.projectMessagingView.removeSelectedContacts([row.data().get('contactId')]);\n            if (this.options.parentDataTable && (this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP || this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCONT)) {\n                let groupId = parseInt(row.data().collection.options.groupIdList);\n                this.options.projectMessagingView.removeSelectedContactGroups([{\n                    contactId: row.data().get('contactId'),\n                    groupId: groupId\n                }]);\n            }\n        }\n\n        if (this.options.parentDataTable === undefined)\n            return;\n\n        let totalContacts = 0, selectedContacts = 0;\n        _.each(this.dataTable.data(), _.bind(function (item) {\n            if (item.get('contactCompanyId') === row.data().get('contactCompanyId')) {\n                totalContacts++;\n                if (this.options.projectMessagingView.isContactSelected(item.get('contactId')))\n                    selectedContacts++;\n            }\n        }, this));\n\n        if (selectedContacts === 0) {\n            parentTR.find('input.select-company').prop('checked', false).prop('indeterminate', false).removeClass('indeterminate');\n        } else if (selectedContacts === totalContacts) {\n            parentTR.find('input.select-company').prop('checked', true).prop('indeterminate', false).removeClass('indeterminate');\n        } else {\n            // indeterminate\n            parentTR.find('input.select-company').prop('checked', false).prop('indeterminate', true).addClass('indeterminate');\n        }\n    },\n    contactSelectAllChanged: function (e) {\n        let projectStatusList = PJQ.app.session.project.getProjectStatusList(),\n            isChecked = $(e.currentTarget).prop('checked'),\n            isEnableDeclined = this.options.projectMessagingView.isEnableDeclined(), selectedContacts = [],\n            groupId = null, isGroupsView = false, selectedContactGroups = [];\n\n        if (this.options.parentDataTable && (this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP || this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCONT)) {\n            isGroupsView = true;\n            groupId = parseInt(this.options.data[0].collection.options.groupIdList);\n        }\n\n        _.each(this.dataTable.data(), _.bind(function (row) {\n            if (isChecked) {\n                if ((isEnableDeclined || projectStatusList[1].toString().split(',')[0].toLowerCase() !== row.attributes.status.toString().toLowerCase()) &&\n                    !row.attributes.isBlacklisted && !row.attributes.isCompanyBlacklisted)\n                    selectedContacts.push(row.attributes.contactId);\n            } else {\n                selectedContacts.push(row.attributes.contactId);\n            }\n        }, this));\n\n        if (isGroupsView) {\n            _.each(selectedContacts, _.bind(function (selectedContact) {\n                selectedContactGroups.push({contactId: selectedContact, groupId: groupId});\n            }, this));\n        }\n\n        if (isChecked) {\n            this.options.projectMessagingView.addSelectedContacts(selectedContacts);\n            if (isGroupsView)\n                this.options.projectMessagingView.addSelectedContactGroups(selectedContactGroups);\n        } else {\n            this.options.projectMessagingView.removeSelectedContacts(selectedContacts);\n            if (isGroupsView)\n                this.options.projectMessagingView.removeSelectedContactGroups(selectedContactGroups);\n        }\n\n        this.refresh(false);\n    },\n    createdRow: function (row, data, dataIndex) {\n        let status = data.attributes.status;\n        if (this.options.view === PJQ.constants.projectMessaging.views.MSGCONT_CONT &&\n            data.collection.options.responseType !== 'PROJECT'\n            && data.collection.options.responseType !== 'MESSAGE')\n            status = '';\n\n        this.setRowStyle(row, status, data.attributes.isBlacklisted || data.attributes.isCompanyBlacklisted)\n    },\n    setRowStyle: function (row, status, isBlacklisted) {\n        let statusColor = _.find(this.options.projectMessagingView.options.settings.attributes.statusColors, function (statusColor) {\n            return statusColor.status === status\n        }), rowCss = '';\n\n        if (statusColor) {\n            let foregroundColor = PJQ.helpers.colorHelpers.idealLinkColorForBackground(statusColor.backgroundColor);\n            rowCss = 'background-color:' + statusColor.backgroundColor + ' !important;' + 'color:' + foregroundColor + ' !important;';\n        }\n\n        if (isBlacklisted)\n            rowCss += ' text-decoration: line-through !important;';\n\n        $(row).css({cssText: rowCss});\n\n    },\n    copyAccessKey: function (e) {\n        let inputId = 'h_input_' + _.uniqueId(),\n            hiddenInput = $('<input>', {\n                value: $(e.currentTarget).data('accessKey'),\n                style: 'position: absolute;left:-2000px;top:-2000px',\n                id: inputId\n            });\n        this.$el.append(hiddenInput);\n        hiddenInput[0].select();\n        document.execCommand(\"copy\");\n        hiddenInput.remove();\n        PJQ.notifications.notify.successNotify({\n            message: 'Access Key copied to clipboard.'\n        });\n    },\n    copyPhone: function (e) {\n        let inputId = 'h_input_' + _.uniqueId(),\n            hiddenInput = $('<input>', {\n                value: $(e.currentTarget).data('phone').replace(/ /g,''),\n                style: 'position: absolute;left:-2000px;top:-2000px',\n                id: inputId\n            });\n        this.$el.append(hiddenInput);\n        hiddenInput[0].select();\n        document.execCommand(\"copy\");\n        hiddenInput.remove();\n        PJQ.notifications.notify.successNotify({\n            message: 'Number copied to clipboard.'\n        });\n    },\n    copyEmail: function (e) {\n        let inputId = 'h_input_' + _.uniqueId(),\n            hiddenInput = $('<input>', {\n                value: $(e.currentTarget).data('email'),\n                style: 'position: absolute;left:-2000px;top:-2000px',\n                id: inputId\n            });\n        this.$el.append(hiddenInput);\n        hiddenInput[0].select();\n        document.execCommand(\"copy\");\n        hiddenInput.remove();\n        PJQ.notifications.notify.successNotify({\n            message: 'Email copied to clipboard.'\n        });\n    },\n    showRowGroups: function (e) {\n        let target = $(e.currentTarget),\n            row = this.getRow(target.closest('tr')),\n            data = row.data(),\n            groups = data.get('groupListDisplay').split(','),\n            groupDisplayLimit = parseInt(PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_MAX_GROUP_DISPLAY));\n        target[0].outerHTML = ' ' + _.rest(groups, groupDisplayLimit).join(', ')\n    }\n});\n\nPJQ.views.projects.ProjectMessagingContactTradesDataTable = PJQ.views.projects.ProjectMessagingDataTable.extend({\n    events: {\n        'change select.project-contact-group-status': 'onStatusChanged',\n        'keyup .contact-group-bid-amount': 'bidAmountChanged',\n        'blur .contact-group-bid-amount': 'bidAmountExited'\n    },\n    afterDataTableRenderChild: function () {\n        PJQ.helpers.inputHelpers.inputMaskCurrency(this.$('.contact-group-bid-amount'), 2);\n    },\n    getColumns: function (includeAllColumns = false) {\n        let columns = [];\n        columns.push({\n            \"columnData\": \"groupName\",\n            \"data\": \"attributes.groupName\",\n            \"title\": \"Trade\",\n            \"orderable\": false\n        });\n\n        columns.push({\n            \"columnData\": 'groupStatus',\n            \"width\": \"150px\",\n            \"title\": 'Trade Status',\n            \"render\": function (data, type, row) {\n                let html = '<select class=\"form-control project-contact-group-status\">',\n                    statuses = PJQ.app.session.project.getProjectStatusList();\n                statuses.unshift(['PENDING', true]);\n                _.each(statuses, _.bind(function (status, index) {\n                    html += '<option value=\"' + status[0] + '\"' + (status[0] === row.get('groupStatus') ? ' SELECTED' : '') + '>' + status[0] + '</option>';\n\n                }, this));\n                html += '</select>';\n                return html;\n            },\n            \"orderable\": false\n        });\n\n        if (this.options.projectMessagingView && this.options.projectMessagingView.options.canViewBidAmount) {\n            columns.push({\n                \"columnData\": \"bidAmount\",\n                \"data\": \"attributes.bidAmount\",\n                \"width\": \"100px\",\n                \"title\": \"Bid Amount\",\n                \"render\": function (data, type, row) {\n                    return '<input type=\"text\" class=\"form-control contact-group-bid-amount input-dollars-full\" value=\"' + PJQ.helpers.formatHelpers.formatCurrency(row.get('bidAmount'), 2, false) + '\" />';\n                }\n            });\n        }\n\n\n        return columns;\n    },\n    statusChanged: function (statuses, parentTR, parentView) {\n        if (!(parentView === PJQ.constants.projectMessaging.views.CONT || parentView === PJQ.constants.projectMessaging.views.COMP || parentView === PJQ.constants.projectMessaging.views.COMP_CONT || parentView === PJQ.constants.projectMessaging.views.GROUPCONT_CONT || parentView === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP_CONT || parentView === PJQ.constants.projectMessaging.views.RSPCONT_CONT || parentView === PJQ.constants.projectMessaging.views.BIDPKGS_CONT))\n            return;\n\n        let groupId = 0;\n        if (parentView === PJQ.constants.projectMessaging.views.GROUPCONT_CONT || parentView === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP_CONT)\n            groupId = parseInt(this.options.parentDataTable.dataTable.rows(0).row().data().collection.options.groupIdList);\n\n        // if we are being called, we must update ALL rows(trades) in our datatable and then redraw the whole thing.\n        _.each(this.dataTable.data(), _.bind(function (item) {\n            if (groupId === 0 || groupId === item.get('groupId'))\n                item.set('groupStatus', statuses.groupStatus);\n        }, this));\n\n        this.dataTable.rows().invalidate().draw();\n    },\n    bidAmountExited: function(e) {\n        let bidAmount = PJQ.helpers.inputHelpers.getMoneyInputValue($(e.currentTarget).parent());\n        $(e.currentTarget).val(PJQ.helpers.formatHelpers.formatCurrency(bidAmount, 2, false));\n    },\n    bidAmountChanged: function (e) {\n\n        if (e.ctrlKey && e.key != 'v') {\n            e.stopPropagation();\n            return false;\n        }\n\n        let tr = $(e.currentTarget).closest('tr'),\n            parentTR = tr.parent().closest('tr').prev(),\n            row = this.getRow(tr),\n            bidAmount = PJQ.helpers.inputHelpers.getMoneyInputValue($(e.currentTarget).parent());\n\n        /*\n\t\trow.data().set('contactCompanyId', row.data().get('contactCompanyId'));\n\t\trow.data().set('projectId', PJQ.app.session.project.id);\n\t\t*/\n\n        row.data().set('bidAmount', bidAmount);\n        row.data().queueSave({bidAmount: bidAmount}, {\n            patch: true,\n            success: _.bind(function (response) {\n                //row.invalidate().draw(); -- 2023-07-31 blue: this causes the field to lose focus\n\n                // iterate through all rows in this table to get the total for this contact\n                let contactBidTotal = 0;\n                _.each(this.dataTable.data(), _.bind(function (item) {\n                    contactBidTotal += item.get('bidAmount');\n                }, this));\n\n                // update the contact's Bid Amount field\n                let parentRow = this.options.parentDataTable.getRow(parentTR);\n                parentRow.data().set('bidAmount', contactBidTotal);\n                //parentRow.invalidate().draw(); -- 2023-07-31 blue: this causes the field to lose focus\n                $(parentTR).find('.contact-bid-amount').val(PJQ.helpers.formatHelpers.formatCurrency(contactBidTotal, 2, false));\n\n                // if main view is Company, iterate through all contacts to get their bid amounts\n                if (this.options.projectMessagingView.currentView === PJQ.constants.projectMessaging.views.COMP || this.options.projectMessagingView.currentView === PJQ.constants.projectMessaging.views.GROUPCOMP) {\n\n                    let companyBidTotal = 0, parentParentTR = parentTR.parent().closest('tr').prev();\n                    _.each(this.options.parentDataTable.dataTable.data(), _.bind(function (item) {\n                        companyBidTotal += item.get('bidAmount');\n                    }, this));\n\n                    // update parent company row's Bid Amount Total\n                    let parentParentRow = this.options.parentDataTable.options.parentDataTable.getRow(parentParentTR);\n                    parentParentRow.data().set('bidAmount', companyBidTotal);\n                    //parentParentRow.invalidate().draw(); -- 2023-07-31 blue: this causes the field to lose focus\n                    $(parentParentTR).find('.bid-amount-total').text(PJQ.helpers.formatHelpers.formatCurrency(contactBidTotal, 2, true));\n\n                }\n            }, this)\n        }, 800);\n\n    }\n});\n","// Models\nPJQ.models.projectParticipants.ProjectContactComment = PJQ.models.BaseModel.extend({\n\tidAttribute: \"projectContactCommentId\",\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: this.options.project.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'participants',\n\t\t\t\tvalue: this.options.contactId\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'comments',\n\t\t\t\tvalue: this.get('projectContactCommentId')\n\t\t\t}\n\t\t], [\n\t\t\t{\n\t\t\t\tparameter: 'isCompanyComments',\n\t\t\t\tvalue: this.options.isCompanyComments\n\t\t\t}\n\t\t])\n\t}\n});\n\nPJQ.models.projectParticipants.ProjectParticipantForView = PJQ.models.projectParticipants.ProjectParticipant.extend({\n\tupdateStatus: function (status, callback) {\n\t\tlet endpointArr = [\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: PJQ.app.session.project.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'participants',\n\t\t\t\tvalue: this.id\n\t\t\t}\n\t\t];\n\n\t\tif (this.collection != null && this.collection.options.groupId > 0) {\n\t\t\tendpointArr.push({\n\t\t\t\tendpoint: 'groups',\n\t\t\t\tvalue: this.collection.options.groupId\n\t\t\t});\n\t\t}\n\t\telse if (this.collection != null && this.collection.options.isPerGroup) {\n\t\t\tendpointArr.push({\n\t\t\t\tendpoint: 'groups',\n\t\t\t\tvalue: parseInt(this.collection.options.groupIdList)\n\t\t\t});\n\t\t}\n\n\t\tif (this.collection != null && this.collection.options.projectMessageId > 0) {\n\t\t\tendpointArr.push({\n\t\t\t\tendpoint: 'messages',\n\t\t\t\tvalue: this.get('projectMessageContactBroadcastId')\n\t\t\t});\n\t\t}\n\n\t\tendpointArr.push({\n\t\t\tendpoint: 'status'\n\t\t});\n\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint(endpointArr, [\n\t\t\t\t{\n\t\t\t\t\tparameter: \"status\",\n\t\t\t\t\tvalue: status\n\t\t\t\t}\n\t\t\t])\n\t\t}).post().done(_.bind(function (response) {\n\t\t\tthis.set('status', status);\n\t\t\tcallback(response);\n\t\t}, this));\n\t}\n});\n\nPJQ.models.projectParticipants.ProjectParticipantGroupForView = PJQ.models.projectParticipants.ProjectParticipant.extend({\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: PJQ.app.session.project.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'participants',\n\t\t\t\tvalue: this.get('contactId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'groups',\n\t\t\t\tvalue: this.get('groupId')\n\t\t\t}\n\t\t]);\n\t},\n\tupdateStatus: function (status, callback) {\n\t\tlet endpointArr = [\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: PJQ.app.session.project.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'participants',\n\t\t\t\tvalue: this.get('contactId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'groups',\n\t\t\t\tvalue: this.get('groupId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'status'\n\t\t\t}\n\t\t];\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint(endpointArr, [\n\t\t\t\t{\n\t\t\t\t\tparameter: \"status\",\n\t\t\t\t\tvalue: status\n\t\t\t\t}\n\t\t\t])\n\t\t}).post().done(_.bind(function (response) {\n\t\t\tthis.set('status', status);\n\t\t\tcallback(response);\n\t\t}, this));\n\t}\n});\n\nPJQ.models.projectParticipants.ProjectParticipantCompanyForView = PJQ.models.projectParticipants.ProjectParticipantForView.extend({});\n\nPJQ.models.projectParticipants.ProjectMessageForView = PJQ.models.BaseModel.extend({});\n\nPJQ.models.projectParticipants.ProjectResponseForView = PJQ.models.BaseModel.extend({});\n\nPJQ.models.projectParticipants.ProjectGroupForView = PJQ.models.BaseModel.extend({});\n\nPJQ.models.projectParticipants.FilterInfo = PJQ.models.BaseModel.extend({\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: this.options.project.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'participants'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'views'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'filter'\n\t\t\t}\n\t\t], [\n\t\t\t{\n\t\t\t\tparameter: 'searchFor',\n\t\t\t\tvalue: encodeURIComponent(this.options.searchFor ? this.options.searchFor : '')\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'view',\n\t\t\t\tvalue: this.options.view\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'projectMessageBroadcastId',\n\t\t\t\tvalue: this.options.projectMessageBroadcastId\n\t\t\t}\n\t\t])\n\t}\n});\n\nPJQ.models.projectParticipants.ProjectMessageViewSettings = PJQ.models.BaseModel.extend({\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'projectmessaging'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'settings'\n\t\t\t}\n\t\t]);\n\t},\n\tgetSettings: function (view) {\n\t\treturn _.find(this.attributes.settings, _.bind(function (setting) {\n\t\t\treturn setting.view === view;\n\t\t}, this));\n\t},\n\tparse: function (model) {\n\t\tif (model != null) {\n\t\t\t_.each(model.settings, function (setting) {\n\t\t\t\tif (setting.view === PJQ.constants.projectMessaging.views.COMP || setting.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP) {\n\t\t\t\t\tsetting.hasCustomFields = _.find(setting.columns, function (column) {\n\t\t\t\t\t\treturn column.toLowerCase().indexOf('companycustomfield_') !== -1;\n\t\t\t\t\t}) != null;\n\t\t\t\t}\n\t\t\t\telse if (setting.view === PJQ.constants.projectMessaging.views.CONT || setting.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP_CONT\n\t\t\t\t\t|| setting.view === PJQ.constants.projectMessaging.views.GROUPCONT_CONT || setting.view === PJQ.constants.projectMessaging.views.MSGCONT_CONT\n\t\t\t\t\t|| setting.view === PJQ.constants.projectMessaging.views.RSPCONT_CONT || setting.view === PJQ.constants.projectMessaging.views.BIDPKGS_CONT) {\n\t\t\t\t\tsetting.hasCustomFields = _.find(setting.columns, function (column) {\n\t\t\t\t\t\treturn column.toLowerCase().indexOf('contactcustomfield_') !== -1 || column.toLowerCase().indexOf('companycustomfield_') !== -1;\n\t\t\t\t\t}) != null;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tsetting.hasCustomFields = false;\n\t\t\t\t}\n\t\t\t}, this);\n\t\t}\n\t\treturn model;\n\t}\n});\n\nPJQ.models.projectParticipants.ProjectMessageDeclineQuestionSettings = PJQ.models.BaseModel.extend({\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: this.options.project.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'projectmessaging'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'declinequestion'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'settings'\n\t\t\t}\n\t\t]);\n\t}\n});\n\n//Collections\nPJQ.collections.projectParticipants.ProjectParticipantsForView = PJQ.collections.BaseCollection.extend({\n\tbeforeConstruct: function (models, options) {\n\t\tswitch (options.view) {\n\t\t\tcase PJQ.constants.projectMessaging.views.GROUPCOMP:\n\t\t\tcase PJQ.constants.projectMessaging.views.GROUPCONT:\n\t\t\t\tthis.model = PJQ.models.projectParticipants.ProjectGroupForView;\n\t\t\t\tbreak;\n\t\t\tcase PJQ.constants.projectMessaging.views.MSGCONT:\n\t\t\t\tthis.model = PJQ.models.projectParticipants.ProjectMessageForView;\n\t\t\t\tbreak;\n\t\t\tcase PJQ.constants.projectMessaging.views.RSPCONT:\n\t\t\t\tthis.model = PJQ.models.projectParticipants.ProjectResponseForView;\n\t\t\t\tbreak;\n\t\t\tcase PJQ.constants.projectMessaging.views.GROUPCOMP_COMP:\n\t\t\tcase PJQ.constants.projectMessaging.views.COMP:\n\t\t\t\tthis.model = PJQ.models.projectParticipants.ProjectParticipantCompanyForView;\n\t\t\t\tbreak;\n\t\t\tcase PJQ.constants.projectMessaging.views.GROUPCOMP_COMP_CONT:\n\t\t\tcase PJQ.constants.projectMessaging.views.GROUPCONT_CONT:\n\t\t\tcase PJQ.constants.projectMessaging.views.RSPCONT_CONT:\n\t\t\tcase PJQ.constants.projectMessaging.views.MSGCONT_CONT:\n\t\t\tcase PJQ.constants.projectMessaging.views.COMP_CONT:\n\t\t\tcase PJQ.constants.projectMessaging.views.CONT:\n\t\t\t\tthis.model = PJQ.models.projectParticipants.ProjectParticipantForView;\n\t\t\t\tbreak;\n\t\t\tcase PJQ.constants.projectMessaging.views.CONTGROUP:\n\t\t\t\tthis.model = PJQ.models.projectParticipants.ProjectParticipantGroupForView;\n\t\t\t\tbreak;\n\t\t}\n\t},\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: this.options.project.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'participants'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'views'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: this.options.view\n\t\t\t}\n\t\t], [\n\t\t\t{\n\t\t\t\tparameter: 'contactId',\n\t\t\t\tvalue: this.options.contactId\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'contactCompanyId',\n\t\t\t\tvalue: this.options.contactCompanyId\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'groupIdList',\n\t\t\t\tvalue: this.options.groupIdList\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'projectMessageId',\n\t\t\t\tvalue: this.options.projectMessageId\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'statusFilter',\n\t\t\t\tvalue: this.options.statusFilter\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'isPerGroup',\n\t\t\t\tvalue: this.options.isPerGroup\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'searchFor',\n\t\t\t\tvalue: encodeURIComponent(this.options.searchFor ? this.options.searchFor : '')\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'withCustomFields',\n\t\t\t\tvalue: this.options.withCustomFields != null ? this.options.withCustomFields : false\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'bidPackageId',\n\t\t\t\tvalue: this.options.bidPackageId\n\t\t\t}\n\t\t])\n\t}\n});\n\nPJQ.collections.projectParticipants.ProjectParticipantComments = PJQ.collections.BaseCollection.extend({\n\tidAttribute: 'commentId',\n\tmodel: PJQ.models.projectParticipants.ProjectContactComment,\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: this.options.project.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'participants',\n\t\t\t\tvalue: this.options.isCompanyComments ? this.options.participant.get('contactCompanyId') : this.options.participant.get('contactId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'comments'\n\t\t\t}\n\t\t], [\n\t\t\t{\n\t\t\t\tparameter: 'isCompanyComments',\n\t\t\t\tvalue: this.options.isCompanyComments\n\t\t\t}\n\t\t])\n\t}\n});\n\nPJQ.collections.projectParticipants.ProjectParticipantGroups = PJQ.collections.BaseCollection.extend({\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: \"projects\",\n\t\t\t\tvalue: PJQ.app.session.project.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: \"participants\",\n\t\t\t\tvalue: this.options.contactId\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: \"groups\"\n\t\t\t}\n\t\t]);\n\t}\n});\n","PJQ.views.projects.QuickAddParticipantsModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Quick-Add-Participants'),\n\t\tminWidth: '400px',\n\t\tonSave: null\n\t},\n\tevents: {\n\t\t'keyup .input-email': 'emailChanged',\n\t\t'click .btn-add': 'addParticipant'\n\t},\n\temailChanged: function (e) {\n\t\tthis.$('.btn-add').prop('disabled', _.size($(e.currentTarget).val()) === 0);\n\t},\n\taddParticipant: function () {\n\t\tlet emails = this.$('.input-email').val().split(';');\n\t\t_.each(emails, function (email) {\n\t\t\tlet newParticipant = new PJQ.models.projectParticipants.ProjectParticipant({\n\t\t\t\tproject: this.options.project,\n\t\t\t\temail: email,\n\t\t\t\tgroups: null,\n\t\t\t\tisQuickAdd: true\n\t\t\t});\n\t\t\tnewParticipant.save(null, {\n\t\t\t\tnotify: false,\n\t\t\t\tsuccess: _.bind(function (mod, data) {\n\t\t\t\t\tif (newParticipant.get('projectId') == null && newParticipant.groups != null && _.size(newParticipant.groups.models) > 0) {\n\t\t\t\t\t\tnewParticipant.set({\n\t\t\t\t\t\t\tid: null,\n\t\t\t\t\t\t\tprojectId: this.options.project.id\n\t\t\t\t\t\t});\n\t\t\t\t\t\tnew PJQ.views.groups.SelectGroupsModal({\n\t\t\t\t\t\t\talertText: 'Select trades to add with this participant',\n\t\t\t\t\t\t\tselectorOptions: {\n\t\t\t\t\t\t\t\tincludeGroupIds: _.map(newParticipant.groups.models, function (group) {\n\t\t\t\t\t\t\t\t\treturn group.id;\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonSave: _.bind(function (groups) {\n\t\t\t\t\t\t\t\tnewParticipant.groups.reset(groups.selected);\n\t\t\t\t\t\t\t\tnewParticipant.save(null, {\n\t\t\t\t\t\t\t\t\tnotify: false,\n\t\t\t\t\t\t\t\t\tsuccess: _.bind(function (mod, data) {\n\t\t\t\t\t\t\t\t\t\tthis.removeModal();\n\t\t\t\t\t\t\t\t\t\tif (typeof this.options.onSave === 'function') {\n\t\t\t\t\t\t\t\t\t\t\tthis.options.onSave(newParticipant);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}, this),\n\t\t\t\t\t\t\t\t\terror: _.bind(function () {\n\t\t\t\t\t\t\t\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\t\t\t\t\t\t\t\tmessage: newParticipant.get('email') + ' already exists on this project.'\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}, this)\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}, this)\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.removeModal();\n\t\t\t\t\t\tif (typeof this.options.onSave === 'function') {\n\t\t\t\t\t\t\tthis.options.onSave(newParticipant);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t\terror: _.bind(function () {\n\t\t\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\t\t\tmessage: newParticipant.get('email') + ' already exists on this project.'\n\t\t\t\t\t});\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}, this);\n\t}\n});","PJQ.views.projects.AutoReport = PJQ.views.BaseModal.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Auto-Report'),\n        minWidth: '800px'\n    },\n    events: {\n        'click .export-pdf': 'exportPDF'\n    },\n    afterRender: function() {\n        // fetch and display the report contents (in HTML format)\n        let loader = new PJQ.Loader(this.$('div.report-content'));\n        new PJQ.ajax.Request({\n            endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n                {\n                    endpoint: 'projects',\n                    value: PJQ.app.session.project.id\n                },\n                {\n                    endpoint: 'autoreport'\n                }\n            ])\n        }).get().done(_.bind(function (response) {\n            loader.remove();\n            jQuery('div.report-content').html(atob(response.data));\n            jQuery('div.report-content div div table tbody tr td[width=\"100%\"]').attr('width', '0px');\n        }, this));\n    },\n    exportPDF: function() {\n        // export the report to PDF and serve up the download.\n        PJQ.files.downloadFile(\n            PJQ.helpers.urlHelpers.generateEndpoint([\n                {\n                    endpoint: 'projects',\n                    value: PJQ.app.session.project.id\n                },\n                {\n                    endpoint: 'autoreport'\n                },\n                {\n                    endpoint: 'export'\n                }\n            ])\n        );\n    }\n});"]}