{"version":3,"sources":["1initializers.js","annotationmodels.js","annotationsviews.js","batchviews.js","drawingsviews.js","drawingviewer.js","drawingviewerarea.js","helpers.js","models.js","ordering.js","utilityviews.js"],"names":["PJQ","collections","drawings","models","views","modules","routes","route","name","callback","projectId","projectWall","initProjectNavigator","parseInt","versionId","accessKey","ajax","Request","endpoint","helpers","urlHelpers","generateEndpoint","value","get","success","_","bind","data","prj","versions","Versions","attachments","files","Files","hasDrawings","find","version","size","projects","Project","done","settings","$container","$","class","app","$el","html","downloadPerFileFee","createPsuedoFolders","each","attachment","isFetched","view","renderView","Attachments","el","project","collection","forShare","isAdmin","orderSettings","Dashboard","this","tmp","templating","Template","constants","DRAWINGS","TemplateRenderer","renderTemplate","fail","responseJSON","message","dashboardModes","VIEW","EDIT","SELECT","downloadStatus","FAILED","NEW","QUEUED","IN_PROGRESS","COMPLETE","downloadFrameId","imageExtensions","annotationTypes","INSPECT","PEN","HIGHLIGHTER","LINE","ARROW","RECTANGLE","ELLIPSE","CLOUD","LINK_RECTANGLE","LINK_ELLIPSE","LINK_CLOUD","TEXT","PHOTO","RULER","AREA_RECT","RULER_FREE_FORM","AREA_FREE_FORM","CALIBRATION","PIN_PUNCH_LIST_ITEM","PIN_ACTION_ITEM","PIN_RFI","PIN_SUBMITTAL","annotationTypeNames","refTypes","DRAWING","PUNCH_LIST_ITEM","ACTION_ITEM","RFI","SUBMITTAL","dragPoints","START","END","TOP_LEFT","TOP_RIGHT","BOTTOM_LEFT","BOTTOM_RIGHT","scaleTypes","IMPERIAL","METRIC","addRoutes","Annotation","BaseModel","extend","idAttribute","notifyName","minWidth","minHeight","afterInit","objectHelpers","checkNested","options","isAPIv2","session","preferences","hasPref","preferenceTypes","ENABLE_DRAWING_ANNOTATION_REFS","indexOf","id","canEdit","user","canEditColor","type","parse","model","AnnotationAttachments","refData","refId","refType","punchlistItemId","punchListItem","punchlists","PunchlistItem","actionItemId","actionItem","actionItems","ActionItem","getDisplayName","getDeepLink","drawDragPoints","ct","scale","getStrokeColor","stroke","strokeColor","lineWidth","setLineDash","strokeStyle","getFillColor","fill","fillColor","fillStyle","start","x","y","set","Math","round","attributes","end","normalize","arguments","length","undefined","normalizeCoords","move","xDiff","yDiff","maxX","maxY","newStartX","newStartY","newEndX","newEndY","moveDragPoint","dragPoint","position","getCoords","coords","getNormalizedCoords","startX","startY","endX","endY","height","width","encodePath","decodePath","collides","getCollidingDragPoint","point","trigHelpers","checkRectCollision","beforeSave","getChangedModels","publish","toJSON","put","Pen","path","floor","push","stopDrawing","smooth","prevX","prevY","index","thisX","thisY","isAdd","pts","decodedPts","deltaX","deltaY","i","dComb","distance","lineLen","draw","beginPath","pointX","pointY","moveTo","lineTo","result","ptCount","sStartX","ptWidth","sStartY","eStartX","eStartY","clearRect","canvasHelpers","drawRoundRect","Highlighter","ts","max","rgb","colorHelpers","getRGBFromHex","R","toString","G","B","Line","Arrow","headLength","dx","dy","angle","atan2","cos","PI","sin","Rectangle","rect","drawLink","margin","tlStartX","tlStartY","brStartX","brStartY","trStartX","trStartY","blStartX","blStartY","Ellipse","radiusX","radiusY","centerX","centerY","a","pi2","closePath","Cloud","lastX","lastY","bumpWidth","bumpWidthHalf","bumpHeight","thisBumpWidth","thisBumpHeight","bezierCurveTo","Text","beforeConstruct","text","textSize","getTextSize","font","words","split","line","n","testLine","measureText","fillText","isDrawing","Pin","prototype","call","newX","newY","isHf","getIconSize","getIcon","is","PinRFI","PinPunchListItem","res","getStatusColor","_this$punchListItem","setPunchListItem","item","title","itemNumber","status","isDirty","PinActionItem","_this$actionItem","setActionItem","PinSubmittal","Photo","LinkRectangle","_this","document","fonts","load","then","LinkEllipse","_this2","LinkCloud","Ruler","len","sqrt","gap","min","d1","d2","middle1","middle2","rulerLength","getRulerLength","drawing","rulerText","inches","d","AreaRectangle","RulerFreeForm","AreaFreeForm","AnnotationAttachment","File","Layers","BaseCollection","Layer","fetchAnnotations","drawingId","fetchedDrawingIds","annotations","annotation","layer","layerId","add","Annotations","attrs","mod","toUpperCase","merge","mergeAnnotations","contextId","_this3","fnMerge","exist","findWhere","annotationId","remove","cid","refinedType","params","context","parameter","saveAll","_this4","annotationsMap","saveAnnotations","map","changedCt","saveNextAnnotation","thisSet","response","EditAnnotation","BaseView","defaults","template","subTemplates","textSizePicker","focusText","isEditLink","onShapeChange","onPublish","onDelete","onClose","onAnnotationDataChange","onAttachmentChange","onDrawingSelected","events","click .text-size-picker>button","click .version-drawing-outer","click .btn-edit-link","click .btn-save-link","click .btn-cancel-link","click .view-punch-list-item","click .view-action-item","click .btn-publish-annotation","click .btn-delete-annotation","click .btn-close-annotation","beforeFirstRender","renderData","afterRender","inputs","Selectpicker","defaultValue","onChange","render","choices","sortBy","getUniqueDrawings","refIdPicker","isIntChoices","isLiveSearch","fileUploader","FileUploaderGrid","previewImageDimension","canUpload","canDelete","onSuccess","renderTextSizePicker","focus","renderPunchListDetails","renderActionItemDetails","Binder","watchElements","afterChange","attribute","editLink","e","stopPropagation","saveLink","getValue","cancelEditLink","drawingClicked","getDrawing","_this5","canAdd","permissions","hasPermission","fnMapItems","items","punchListItems","$selectItem","punchListItemSelect","pickerWidth","setValue","newPunchListItem","fnUpdateChoices","updateChoices","setTimeout","toggle","loader","Loader","fetchPunchListItems","newItem","viewPunchListItem","viewPunchListItemClicked","currentTarget","_this6","PunchlistItemEditorModal","onSave","_this7","actionItemSelect","newActionItem","fetchActionItems","viewActionItem","viewActionItemClicked","_this8","ActionItemEditorModal","renderSubTemplate","textSizeClicked","delete","close","DrawingBatchModal","BaseModal","step","batchHeader","drawingTags","drawingDetailHeader","sortDrawings","isShowCloseButton","click .btn-next-step","click .btn-prev-step","change .checkbox-new-version","change .checkbox-existing-version","click .existing-version","keyup .input-version-name","click .select-batch-drawing","click .btn-drawing-rotate-90","click .btn-drawing-rotate-180","click .btn-drawing-rotate-270","click .btn-drawing-delete","click .btn-save","click .btn-publish","click .btn-cancel","click .btn-close","blur .input-drawing-name,.input-drawing-title,.input-drawing-tag","focus .input-drawing-name,.input-drawing-title,.input-drawing-tag","keydown .input-drawing-name","keyup .input-drawing-name","keydown .input-drawing-title","keyup .input-drawing-title","keydown .input-drawing-tag","keyup .input-drawing-tag","click .btn-add-drawing-tag","click .btn-delete-tag","click .btn-upload-log","change .checkbox-add-current-set","change .checkbox-add-all-current-set","change .checkbox-replace-current-set","change .cb-replace-existing-drawing","click .btn-highlight-area","highlightArea","DrawingAreaHighlight","batch","nameArea","layers","titleArea","patch","beforeModalCreated","DrawingBatch","fetch","setCurrentSetDefaults","currentSetDefault","DRAWINGS_CURRENT_SET_DEFAULT_OFF","beforeRender","fitHeight","publishedIds","getWidth","maxWidth","initVersionSelect","initFileUpload","initBatchWait","initBatchPublish","initBatchSort","Datepicker","isShowTimezone","datepickerOptions","format","dateHelpers","dateFormats","datePicker","DATE","newDate","validateNewVersion","useNewVersion","uploads","allowedExtensions","style","dataChanged","onFileStatusChange","onDrop","afterDelete","hasUploads","queued","uploading","upload","$queued","addClass","$uploaded","$success","empty","append","prop","isUploading","checkBatchStatus","refreshTags","drawingVersionCounts","fullSet","filter","matchedDrawing","renderBatchDrawing","renderBatchDrawingAutoCompletes","renderReplaceCurrentSet","lazyLoad","update","_this9","AutocompleteInput","onSelect","sel","drawingNameChanged","source","req","term","names","toLowerCase","DRAWING_HIDE_TAG","tags","tag","getBatchDrawingElement","fullSetDrawing","drawingName","$header","inCurrentSet","curSet","getVersionStatsForDrawing","same","versionCount","renderDrawingTags","renderBatchHeader","newCount","revisedCount","count","older","newer","replaceCurrentSet","totalCount","_this10","sortDrawingsView","SortDrawings","css","fetchStatus","statusTimeout","viewUploadLog","DrawingUploadLogModal","$name","versionNameExists","isNameValid","$issuedOn","isIssuedValid","newerVersionCount","Date","inputHelpers","setInputError","errors","previousStep","nextStep","hasFiles","isNew","save","guid","uuid","invalidDrawings","isValid","existingDrawing","$drawing","setBatchError","error","$err","versionNameChanged","val","valLen","keyCode","removeClass","Version","useExistingVersion","existingVersionSelected","$target","viewBatchDrawing","_this11","closest","DrawingViewer","showSortableViewLink","isEdit","changed","rotateBatchDrawing90Clicked","rotateDrawing","rotateBatchDrawing180Clicked","rotateBatchDrawing270Clicked","degrees","rotateLoader","rotate","attr","thumbUrl","cropUrl","deleteBatchDrawing","$row","drawingBlur","drawingFocus","select","drawingCenter","scrollTop","top","drawingNameKeydown","which","shiftKey","$next","nextDrawing","firstDrawing","prevDrawing","target","drawingTitleKeydown","drawingTitleChanged","drawingTagKeydown","addDrawingTags","$firstDrawing","first","$prevDrawing","prev","$nextDrawing","next","drawingTagChanged","siblings","addDrawingTagClicked","$tag","deleteTagClicked","tagName","deleteTag","tagTrim","trim","addTags","batchTags","apply","_toConsumableArray","union","uniq","getDrawingTags","addAllToCurrentSetChanged","addAllToCurrent","shouldAdd","replaceCurrentSetChanged","replaceCurrent","addToCurrentSetChanged","addCurrent","replaceExistingDrawingChanged","replaceExisting","cancel","modals","SaveDontSave","header","body","onDontSave","removeModal","closeModal","clearTimeout","autoNotify","_verAppend","verAppend","verName","DrawingBatchNotification","batchId","subject","allProjectContacts","notify","_this12","hasNonCurSetPublish","fnPublish","billRawFileUploadId","billDeerfieldTicketId","notes","urlOptions","isShowCancelButton","fnPrePublish","IS_DOCUMENT_CLERK","ENABLE_RAW_FILE_UPLOAD_BILLING","RawFileUploadBilling","onContinue","rawFileUploadId","deerfieldTicketId","onSkip","okButtonText","isShowSecondaryButton","secondaryButtonText","onOk","noop","click .billing-skip","click .billing-continue","inputmask","alias","prefix","digits","placeholder","clearMaskOnLostFocus","rightAlign","billingReferenceSelectPicker","isMultiple","mustSelectValue","skipBilling","continueBilling","rawFileUpload","rawFileUploads","RawFileUpload","notifications","errorNotify","mode","versionGrid","versionList","versionStats","versionSelect","emptyState","isReadOnly","click .btn-share-drawings","click .btn-download-all-split","click .btn-download-all-merged","click .btn-download-version-split","click .btn-download-version-merged","click .btn-download-filtered-split","click .btn-download-filtered-merged","click .btn-download-advanced","click .btn-export-drawing-list","click .btn-order-version","click .btn-order-filtered","click .btn-order-advanced","click .btn-bulk-tag","click .btn-sort-version","click .btn-save-version","click .btn-edit-version","click .btn-cancel-edit-version","click .btn-new-batch","click .version-select","click .btn-manage-versions","keyup .input-drawings-search","click .btn-view-grid","click .btn-view-list","click .btn-delete-drawing","contextVersion","IS_DOCUMENT_CLERK_COMPANY","canShare","DISABLE_SHARE_PEI","ENABLE_ADMIN_PAID_DOWNLOADS","canDownload","isPaidDownload","canOrder","DISABLE_ORDER_PRINT","hideIssuedOn","HIDE_VERSION_SELECTOR_ISSUED_ON","fetchCallback","listenTo","getUnPublishedBatchesCount","batchCount","unPublishedBatchCount","fetchVersions","_this$options$initOpt","initOptions","mVersionId","console","log","drawingCount","getDrawingCount","search","tagSelectPicker","filterTags","noneSelectedText","renderContextVersion","renderEmptyState","refresh","deleteDrawing","self","DeleteVersionModal","onDeleteInAll","destroy","verDrawing","compDrawing","parent","onDeleteInThis","updateTagChoices","sort","sortHelpers","sortAlphaNum","renderViewGrid","renderViewList","saveVersion","valid","thisValid","compareDrawing","duplicateNameAlert","isFileAPI","contextDrawing","otherDrawing","silent","Alert","isBefore","extraClasses","bulkTag","BulkTagModal","sortVersion","SortDrawingsModal","sortFullSet","onDone","editVersion","cancelEditVersion","restore","getFilteredDrawings","isSearch","isFilterTags","filterTag","drawingTag","versionTmpl","renderVersionSelector","getDateString","newBatch","initViewer","checkDownloadRequirements","versionSelected","$versionSelect","ver","currentSet","manageVersions","ManageVersionsModal","shareDrawings","DrawingShareModal","Drawings","versionIds","allDrawings","DRAWING_SHARE_PREVENT_EXPIRATION","guids","Drawing","sharingModal","sharing","SharingModal","share","successNotify","urlChanged","url","downloadDrawings","download","createDownload","downloadContextVersionSplit","entryIds","CAN_ORDER_ON_ACCOUNT","OrderDownloadAdmin","OrderPrintsModal","modes","DOWNLOAD","downloadContextVersionMerged","downloadFilteredSplit","downloadFilteredMerged","downloadAdvanced","AdvancedDownloadModal","exportDrawingList","downloadFile","orderContextVersion","PRINT","orderFiltered","orderAdvanced","isPrintOrder","defaultEvents","selectedVersions","DrawingSelectorTree","flatten","click .version-expand","change .cb-version","change .cb-drawing","selectedDrawings","expandVersion","toggleClass","$outer","isSelected","versionCid","selectedVersion","ids","deleteVersion","drawingSelected","drawingCid","contains","without","$cbVersion","isShowOkButton","okButtonColorClass","secondaryButtonColorClass","onSecondary","cancelButtonText","onCancel","change .cb-specify-version","click .btn-add-tag","keyup .input-tag","renderDrawingSelector","renderExistingTags","drawingSelector","validateTag","tagChanged","addTag","getSelectedDrawingIds","getInputTags","tagString","drawingIds","allVersions","isDelete","mVer","mDr","post","clearTagInput","alterTags","photos","PhotoViewer","elementId","drawingDetails","annotationMenu","isAnnotationsEnabled","onAnnotationChange","canAddAnnotations","shouldCreateCanvas","noNavigation","zoomValue","snapView","maxZoom","refreshOnResize","zoomOnMouseWheel","triggerRoute","isDisableDownload","onSortChange","keyListeners","keys","window","viewDrawingDetails","click .iv-canvas,.iv-active-canvas","click .btn-prev-drawing","click .btn-next-drawing","click .btn-drawing-details","click .btn-add-to-current","click .btn-remove-from-current","click .btn-delete-pub-drawing","mouseup .iv-image-view","mousemove .iv-active-canvas","mouseleave .iv-active-canvas","_this13","showNavigationControls","canEditDrawing","renderDrawingSort","setDrawing","$sort","showViewLink","$drawingDetails","$btnDetails","hasClass","animateCSS","addToCurrentSet","YesNo","onYes","existing","renderDrawingDetails","removeFromCurrentSet","deletePublishedDrawing","attached","newCurSetDrawing","replacement","newDrawing","currentImg","canvas","prevItemInfo","imageDim","renderPagingState","hasPrevious","hasNext","setContextVersion","contextAnnotation","calibration","clearAnnotations","getTime","fnFindByName","contextVerDrawing","activeVersion","contextVerIssued","prevVersions","renderDrawing","show","renderUrl","persistZoom","canViewAnnotations","isAnnotationsAdmin","systemPermissions","ann","renderAnnotations","$controls","hide","hideDisabled","selectedDrawing","findVersionsForDrawing","showCurrentSetLabel","canEditTags","canRemoveCurrentSet","$details","on","nameChanged","titleChanged","drawingTagInputChanged","tagNameLen","DeleteCancel","mouse","isClicked","isDragging","isMoving","moveContext","current","isCalibrating","relativeMouse","toCanvasX","clientX","toCanvasY","clientY","toCanvas","setMouseStart","getMouse","canDraw","getType","canEditAnnotations","startDraw","stopDraw","startMove","clone","stopMove","startDrag","stopDrag","startCalibrating","stopCalibrating","startCalibrationStep","drawCalibration","activeCtx","clearCanvas","terminatorHalf","colors","RED","closeCalibration","drawAnnotations","stepContent","fnAfterRender","calibrationTypeBtn","ButtonGroup","colorInactiveButtons","buttons","colorClass","label","buttonClasses","$metric","$imperial","calibrationType","$feet","$inches","feet","isNaN","updateScale","nextType","afterCalibrateType","setType","imageView","onMouseDown","_this$annotationMenu","_this14","collidingDragPoint","fnFindColliding","colliding","_this14$contextAnnota","editAnnotation","annotationType","setContextAnnotation","cancelEditAnnotation","canvasMouseMove","newAnnotation","color","getColor","drawContextAnnotation","pixelsX","pixelsY","saveAnnotation","queueSave","queuePatch","canvasMouseUp","fnSave","hasChanged","enableConsecutive","canvasMouseLeave","afterDimensionChange","afterLoad","loaded","renderAnnotationMenu","reset","ctx","_this15","_this16","removeEditView","$iv","$editOuter","editAnnotationView","publishAnnotation","deleteAnnotation","redraw","enablePicker","enableColorPicker","setColor","$canvas","canvasClicked","collapseSubMenus","AnnotationMenu","onColorChange","onTypeChange","$activeCanvas","BLUE","click .sub-menu-item","click .consecutive-item","click .color-picker-item","click .menu-item","click .iv-content","cookieHelpers","getCookie","cookies","ENABLE_CONSECUTIVE_DRAWING_ANNOTATIONS","canViewPunchList","canViewActionItems","enableRefs","renderColorPicker","colorPicker","SimpleColorPicker","onColorPicked","colorClicked","colorPickerMenuItemClicked","colorPickerEnabled","hideColorPicker","typeClicked","selectedType","subMenuItemClicked","isActive","consecutiveItemClicked","setCookie","enabled","$colorPicker","isHighlighting","click .btn-select-name","click .btn-select-title","mousedown .iv-image-view","mousemove .iv-image-view","canvasX","canvasY","startMouse","offset","left","canvasMouseDown","mousedown","curMouse","contextLayer","wd","ht","renderSelectionActions","nameLayer","drawRectangle","titleLayer","selectName","selectTitle","canDrag","raster","includeAttachments","includeMyAnnotations","includePublishedAnnotations","annotationMode","versionsObj","arr","queueDownload","trigger","urlOpts","revert","file","join","createdBy","users","User","withAnnotations","downloadUrl","isApi2","includeAccessKey","cropNameUrl","cropTitleUrl","curRotation","newRotation","rotation","newTags","difference","fnAdd","_this$get","fnDelete","scaleType","total","ownVersion","ownIssued","ownCreated","thisIssued","thisCreated","includeOwnVersion","excludeVersion","foundNames","drawingsFolderId","uniqueId","drawingAttachments","tryHideCurrentSet","getPref","HIDE_CURRENT_SET_WHEN_POSSIBLE","isHideCurrentSet","versionsWithDrawings","getDrawingNames","drawingNames","currentSetDrawingNames","isEqual","versionFolderId","ProjectAttachment","entryId","folderId","sortOrder","isFolder","modifiedOn","DrawingBatches","byName","fileGuids","emails","drawingGuids","DrawingDownload","endpointArr","DrawingsShare","onOrderPlaced","fnContinue","createOrder","price","xhr","err","contact","formatHelpers","formatCurrency","Order","description","poNumber","largeFormatBinding","ORDER_LARGE_FORMAT_BINDING_TYPE","largeFormatPaperType","ORDER_LARGE_FORMAT_PAPER_TYPE","largeFormatQuantity","ORDER_LARGE_FORMAT_QUANTITY","smallFormatBinding","ORDER_SMALL_FORMAT_BINDING_TYPE","smallFormatQuantity","ORDER_SMALL_FORMAT_QUANTITY","smallFormatPaperType","ORDER_SMALL_FORMAT_PAPER_TYPE","halfSizeQuantity","cdQuantity","shippingSpeed","ORDER_DELIVER_BY","recipients","contacts","Contact","notifyEmail","billingCompanyName","billingContactName","billingPhone","billingPhoneExtension","billingAddress1","billingAddress2","billingCity","billingState","billingZip","billingCountry","isDownload","placeOrder","location","href","origin","isSelectRecipients","orderCalculatedItems","change .input-select-recipients","click .ordering-folder","click .select-file","click .order-jump-step","click .view-file","click .delete-recipient","click .edit-recipient","click .select-all-files","ALT_PRINT","selectRecipientsChanged","Contacts","ContactsSelectInput","contexts","PARTICIPANTS","CONTACTS","selectedContact","showSelectorAddress","isSingleChoice","selectedContacts","statePicker","countryChanged","inputMaskPhone","calculateCost","goToStep","renderFolderPicker","renderAddressBook","deleteRecipient","contactId","editRecipient","BaseEditContactModal","selectAllFiles","isChecked","fileSelects","selectedFolderFiles","viewFile","filesTable","getRow","isImage","renderPhotoViewer","canRender","FileViewer","selectedFolder","fnRender","folders","isSecondLevel","getFolderAttachments","hideFolders","folder","renderFilesTable","fetchAttachments","isShared","isPrivate","forceRecursive","addressBookView","addressbook","AddressBook","selectionMode","addressBook","ADD_TO_PROJECT","disabledContacts","disabledContactGroups","onSelection","contactsAll","contactsNoGroup","contactGroups","selectedRecipients","dataTables","DataTable","rowId","order","language","zeroRecords","pageLength","onRowDoubleClick","row","columns","columnData","orderable","searchable","renderFileSelect","b","selectFolder","manageSelectAllButtonState","fileSelectChanged","tr","country","states","state","abbreviation","inputMaskZip","isSelectAll","thisStep","thisStepHeader","not","collapse","isOnline","renderCalculatedTotals","orders","templateData","hasError","ORDER_PO_REQUIRED","$po","$company","$contact","$address1","$city","$zip","$state","$country","$email","$phone","orderType","click .btn-revert-batch","click .btn-notify","click .btn-publish-batch","click .btn-delete-batch","dataTable","isHideSearch","getContactAnchor","display","DATE_TIME","content","dom","BatchNotifyModal","revertBatch","publishBatch","deleteBatch","removeRow","click .btn-view-drawing","click .btn-sort-common","click .btn-sort-alpha-num","click .btn-sort-up","click .btn-sort-down","click .btn-sort-top","click .btn-sort-bottom","_this17","mergeCurrentSet","fullset","isCurrentSet","isPublished","where","matches","toReversed","sortDrawing","sDrawing","sortItem","drawingsSorted","drawingSortable","Sortable","containment","multiple","connectWith","onStop","setSortLabels","match","viewDrawing","sortCommon","autoSort","sortAlphaNumeric","sortCommonPageNumbers","sortDrawingUp","insertBefore","sortDrawingDown","insertAfter","sortTop","moveSelectedTop","sortBottom","moveSelectedBottom","click .btn-done","click .btn-download","selDrawingCount","dl","click .btn-upload-to-version","click .btn-delete-version","onTableDraw","contextEditVersion","disabledAttr","uploadToVersion","isIssuedOnValid","emailBadge","GLOBAL","click .btn-back","click .btn-next","click .btn-send","click .btn-add-project-contacts","keyup .input-share-search","focus .input-share-search","click .share-email-delete","mousedown .modal-dialog","_beforeModalCreated","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_verAppend2","wrap","_context","selectedEmailsTo","selectedEmailsCC","stop","_this18","StepIndicator","steps","activeStep","bodyEditor","HTMLEditor","editorHeight","isHideTokens","contents","email","renderEmail","addProjectContacts","_this19","selector","SelectContactsModal","PROJECTCONTACTS","enableSelectAll","newContacts","toValid","subjectValid","focusSearch","_this20","focusType","contactEmailSelector","ContactSearchSelect","selectedEmails","getFocusSearchText","onAdd","checkIsFocused","targetParent","parentElement","searchChanged","renderRecipientCount","emailCount","deleteEmail","emailContainer","emailLineType","emailArray","send","_this21","to","cc","_this22"],"mappings":"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","file":"app.js","sourcesContent":["PJQ.collections.drawings = {};\n\nPJQ.models.drawings = {};\n\nPJQ.views.drawings = {};\n\n//Routes\nPJQ.modules.drawings = {\n    routes: [\n        {\n            route: 'projects/:projectId/drawings',\n            name: 'drawings',\n            callback: function (projectId) {\n                PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"drawings\");\n            }\n        },\n        {\n            route: 'projects/:projectId/drawings/:versionId',\n            name: 'drawings',\n            callback: function (projectId, versionId) {\n                PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"drawings\", {\n                    versionId: versionId\n                });\n            }\n        },\n        {\n            route: 'drawings/share/:accessKey',\n            name: 'shareDrawings',\n            callback: function (accessKey) {\n                new PJQ.ajax.Request({\n                    endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n                        {\n                            endpoint: 'drawings'\n                        },\n                        {\n                            endpoint: 'share',\n                            value: accessKey\n                        }\n                    ])\n                }).get().success(_.bind(function (data) {\n                    let versions = new PJQ.collections.drawings.Versions(data.versions),\n                        attachments = new PJQ.collections.files.Files(data.attachments),\n                        hasDrawings = _.find(versions.models, function (version) {\n                            return _.size(version.drawings.models) > 0;\n                        }) != null, prj;\n\n                    if (data.projectId > 0) {\n                        prj = new PJQ.models.projects.Project({\n                            projectId: data.projectId\n                        });\n                    } else {\n                        prj = null;\n                    }\n\n                    if (_.size(attachments.models) === 0 && !hasDrawings) {\n                        let tmp = new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'share-not-available');\n                        PJQ.templating.TemplateRenderer.renderTemplate(false, tmp, PJQ.app.$el);\n                    } else {\n                        new PJQ.ajax.Request({\n                            endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n                                {\n                                    endpoint: 'orders'\n                                },\n                                {\n                                    endpoint: 'settings'\n                                }\n                            ])\n                        }).get().done(_.bind(function (settings) {\n                            let $container = $('<div>', {\n                                class: 'p-3'\n                            });\n                            PJQ.app.$el.html($container);\n                            if (_.size(attachments.models) > 0 || settings.downloadPerFileFee > 0) {\n                                versions.createPsuedoFolders(attachments);\n\n                                _.each(attachments.models, function (attachment) {\n                                    if (attachment.get('isFolder'))\n                                        attachment.isFetched = true;\n                                });\n\n                                PJQ.app.view.renderView(PJQ.views.projects.Attachments, {\n                                    el: $container,\n                                    project: prj,\n                                    collection: attachments,\n                                    forShare: true,\n                                    isAdmin: false,\n                                    orderSettings: settings,\n                                    accessKey: accessKey\n                                });\n                            } else {\n                                PJQ.app.view.renderView(PJQ.views.drawings.Dashboard, {\n                                    el: $container,\n                                    project: prj,\n                                    collection: versions,\n                                    forShare: true,\n                                    orderSettings: settings,\n                                    accessKey: accessKey\n                                });\n                            }\n                        }, this));\n                    }\n\n                }, this)).fail(_.bind(function (data) {\n                    if (data.responseJSON.message == 'BUSY') {\n                        PJQ.app.$el.html(`\n\t\t\t\t\t\t\t<div class=\"d-flex align-items-center justify-content-center ht-100 text-align-center wd-100\">\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<div><i class=\"fal fa-circle-exclamation fa-9x text-orange mb-2\"></i></div>\n\t\t\t\t\t\t\t\t\t<div class=\"fs-36\">Drawing Share Unavailable</div>\n\t\t\t\t\t\t\t\t\t<div class=\"fs-24\">Files for this project are currently being processed.<br />Please try again later.</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`);\n                    } else if (data.responseJSON.message == 'OFFLINE') {\n                        PJQ.app.$el.html(`\n\t\t\t\t\t\t\t<div class=\"d-flex align-items-center justify-content-center ht-100 text-align-center wd-100\">\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<div><i class=\"fal fa-circle-exclamation fa-9x text-orange mb-2\"></i></div>\n\t\t\t\t\t\t\t\t\t<div class=\"fs-36\">Drawing Share Unavailable</div>\n\t\t\t\t\t\t\t\t\t<div class=\"fs-24\">This project is currently unavailable for download.<br />Please try again later, or check with the sender if the issue persists.</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`);\n                    } else {\n                        PJQ.app.$el.html(`\n\t\t\t\t\t\t\t<div class=\"d-flex align-items-center justify-content-center ht-100 text-align-center wd-100\">\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<div><i class=\"fal fa-clock fa-9x text-orange mb-2\"></i></div>\n\t\t\t\t\t\t\t\t\t<div class=\"fs-36\">Drawing Share Expired</div>\n\t\t\t\t\t\t\t\t\t<div class=\"fs-24\">This drawing share has expired and can no longer be viewed</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`);\n                    }\n                }, this));\n            }\n        }\n    ]\n};\n\nPJQ.constants.drawings = {\n    dashboardModes: {\n        VIEW: 'VIEW',\n        EDIT: 'EDIT',\n        SELECT: 'SELECT'\n    },\n    downloadStatus: {\n        FAILED: -1,\n        NEW: 0,\n        QUEUED: 1,\n        IN_PROGRESS: 2,\n        COMPLETE: 3\n    },\n    downloadFrameId: 'pjqDownload',\n    imageExtensions: ['jpg', 'jpeg', 'png', 'bmp', 'gif'],\n    annotationTypes: {\n        INSPECT: 'INSPECT',\n        PEN: 'PEN',\n        HIGHLIGHTER: 'HIGHLIGHTER',\n        LINE: 'LINE',\n        ARROW: 'ARROW',\n        RECTANGLE: 'RECT',\n        ELLIPSE: 'ELLIPSE',\n        CLOUD: 'CLOUD',\n        LINK_RECTANGLE: 'LINK_RECT',\n        LINK_ELLIPSE: 'LINK_ELLIPSE',\n        LINK_CLOUD: 'LINK_CLOUD',\n        TEXT: 'TEXT',\n        PHOTO: 'PHOTO',\n        RULER: 'RULER',\n        AREA_RECT: 'AREA_RECT',\n        RULER_FREE_FORM: 'RULER_FREE_FROM',\n        AREA_FREE_FORM: 'AREA_FREE_FORM',\n        CALIBRATION: 'CALIBRATION',\n        PIN_PUNCH_LIST_ITEM: 'PIN_PUNCH_LIST_ITEM',\n        PIN_ACTION_ITEM: 'PIN_ACTION_ITEM',\n        PIN_RFI: 'PIN_RFI',\n        PIN_SUBMITTAL: 'PIN_SUBMITTAL'\n    },\n    annotationTypeNames: {\n        INSPECT: 'Inspect/Select',\n        LINE: 'Line',\n        PEN: 'Pen',\n        HIGHLIGHTER: 'Highlighter',\n        ARROW: 'Arrow',\n        RECTANGLE: 'Rectangle',\n        ELLIPSE: 'Ellipse',\n        CLOUD: 'Cloud',\n        LINK_RECTANGLE: 'Rectangle Link',\n        LINK_ELLIPSE: 'Ellipse Link',\n        LINK_CLOUD: 'Cloud Link',\n        TEXT: 'Text Box',\n        PHOTO: 'Photo',\n        RULER: 'Ruler',\n        AREA_RECT: 'Area Rectangle',\n        RULER_FREE_FORM: 'Free Form Ruler',\n        AREA_FREE_FORM: 'Free Form Area',\n        CALIBRATION: 'Calibration',\n        PIN_PUNCH_LIST_ITEM: 'Punch List Item',\n        PIN_ACTION_ITEM: 'Action Item',\n        PIN_RFI: 'RFI',\n        PIN_SUBMITTAL: 'Submittal'\n    },\n    refTypes: {\n        DRAWING: 'DRAWING',\n        PUNCH_LIST_ITEM: 'PUNCH',\n        ACTION_ITEM: 'ACTION',\n        RFI: 'RFI',\n        SUBMITTAL: 'SUBMITTAL'\n    },\n    dragPoints: {\n        START: 'START',\n        END: 'END',\n        TOP_LEFT: 'TL',\n        TOP_RIGHT: 'TR',\n        BOTTOM_LEFT: 'BL',\n        BOTTOM_RIGHT: 'BR'\n    },\n    scaleTypes: {\n        IMPERIAL: 'IMPERIAL',\n        METRIC: 'METRIC'\n    }\n};\n\nPJQ.app.addRoutes(PJQ.modules.drawings.routes);","PJQ.models.drawings.Annotation = PJQ.models.BaseModel.extend({\n    idAttribute: 'annotationId',\n    notifyName: 'Annotation',\n    minWidth: 0,\n    minHeight: 0,\n    afterInit: function () {\n        if (PJQ.helpers.objectHelpers.checkNested(PJQ.app, 'session', 'preferences')) {\n            this.options.isAPIv2 = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_DRAWING_ANNOTATION_REFS);\n        }\n    },\n    endpoint: function (options) {\n        if (!options) {\n            options = {};\n        }\n\n        options.isAPIv2 = this.options.isAPIv2 = [PJQ.constants.drawings.annotationTypes.PIN_RFI,\n            PJQ.constants.drawings.annotationTypes.PIN_PUNCH_LIST_ITEM,\n            PJQ.constants.drawings.annotationTypes.PIN_ACTION_ITEM,\n            PJQ.constants.drawings.annotationTypes.PIN_SUBMITTAL].indexOf(this.get('type')) !== -1;\n\n        if (this.id > 0) {\n            return PJQ.helpers.urlHelpers.generateEndpoint([\n                {\n                    endpoint: 'drawings'\n                },\n                {\n                    endpoint: 'annotations',\n                    value: this.id\n                }\n            ]);\n        }\n        return PJQ.helpers.urlHelpers.generateEndpoint([\n            {\n                endpoint: 'drawings',\n                value: this.get('drawingId')\n            },\n            {\n                endpoint: 'annotations'\n            }\n        ]);\n    },\n    canEdit: function () {\n        return (PJQ.app.session.user != null && this.get('userId') === -PJQ.app.session.user.id) || this.get('canEdit');\n    },\n    canEditColor: function (type) {\n        if (type == null) {\n            type = this.get('type');\n        }\n        return type !== PJQ.constants.drawings.annotationTypes.PIN_PUNCH_LIST_ITEM && type !== PJQ.constants.drawings.annotationTypes.PIN_ACTION_ITEM\n            && type !== PJQ.constants.drawings.annotationTypes.PIN_RFI && type !== PJQ.constants.drawings.annotationTypes.PIN_SUBMITTAL;\n    },\n    parse: function (model) {\n        if (!model) {\n            return model;\n        }\n\n        if (_.size(model.attachments) > 0) {\n            this.attachments = new PJQ.collections.drawings.AnnotationAttachments(model.attachments);\n        } else if (this.attachments == null) {\n            this.attachments = new PJQ.collections.drawings.AnnotationAttachments();\n        }\n\n        if (model.refData && model.refId > 0) {\n            switch (model.refType) {\n                case PJQ.constants.drawings.refTypes.PUNCH_LIST_ITEM:\n                    model.refData.punchlistItemId = model.refId;\n                    this.punchListItem = new PJQ.models.punchlists.PunchlistItem(model.refData);\n                    break;\n                case PJQ.constants.drawings.refTypes.ACTION_ITEM:\n                    model.refData.actionItemId = model.refId;\n                    this.actionItem = new PJQ.models.actionItems.ActionItem(model.refData);\n                    break;\n            }\n        }\n\n        return model;\n    },\n    getDisplayName: function () {\n        return '';\n    },\n    getDeepLink: function () {\n        return null;\n    },\n    drawDragPoints: function (ct, scale) {\n        this.dragPoints = [];\n    },\n    getStrokeColor: function () {\n        return this.get('color');\n    },\n    stroke: function (ct, scale) {\n        let strokeColor = this.getStrokeColor();\n        if (strokeColor) {\n            ct.lineWidth = 6 / scale;\n            ct.setLineDash([0]);\n            ct.strokeStyle = strokeColor;\n            ct.stroke();\n        }\n    },\n    getFillColor: function () {\n        return this.get('color') + '75';\n    },\n    fill: function (ct) {\n        let fillColor = this.getFillColor();\n        if (fillColor) {\n            ct.fillStyle = fillColor;\n            ct.fill();\n        }\n    },\n    start: function (x, y) {\n        this.set({\n            start: {\n                x: Math.round(x),\n                y: Math.round(y)\n            }\n        });\n\n        if (this.attributes.end == null) {\n            this.end(x, y);\n        }\n    },\n    end: function (x, y, normalize = false) {\n        this.set({\n            end: {\n                x: Math.round(x),\n                y: Math.round(y)\n            }\n        });\n\n        if (normalize) {\n            this.normalizeCoords();\n        }\n\n        if (this.minHeight > this.attributes.end.y - this.attributes.start.y) {\n            this.attributes.end.y = this.attributes.start.y + this.minHeight;\n        }\n\n        if (this.minWidth > this.attributes.end.x - this.attributes.start.x) {\n            this.attributes.end.x = this.attributes.start.x + this.minWidth;\n        }\n    },\n    move: function (xDiff, yDiff, maxX, maxY) {\n        let start = this.attributes.start,\n            end = this.attributes.end,\n            newStartX = start.x + xDiff,\n            newStartY = start.y + yDiff,\n            newEndX = end.x + xDiff,\n            newEndY = end.y + yDiff;\n\n        if (newStartX < 0) {\n            newEndX -= newStartX;\n            newStartX = 0;\n        } else if (newEndX >= maxX) {\n            newStartX -= newEndX - maxX;\n            newEndX = maxX;\n        }\n\n        if (newStartY < 0) {\n            newEndY -= newStartY;\n            newStartY = 0;\n        } else if (newEndY >= maxY) {\n            newStartY -= newEndY - maxY;\n            newEndY = maxY;\n        }\n\n        this.start(newStartX, newStartY);\n        this.end(newEndX, newEndY);\n    },\n    moveDragPoint: function (dragPoint, x, y) {\n        let start = this.attributes.start,\n            end = this.attributes.end;\n        switch (dragPoint.position) {\n            case PJQ.constants.drawings.dragPoints.TOP_LEFT:\n            case PJQ.constants.drawings.dragPoints.START:\n                this.start(x, y);\n                break;\n            case PJQ.constants.drawings.dragPoints.BOTTOM_RIGHT:\n            case PJQ.constants.drawings.dragPoints.END:\n                this.end(x, y);\n                break;\n            case PJQ.constants.drawings.dragPoints.TOP_RIGHT:\n                this.start(start.x, y);\n                this.end(x, end.y);\n                break;\n            case PJQ.constants.drawings.dragPoints.BOTTOM_LEFT:\n                this.start(x, start.y);\n                this.end(end.x, y);\n                break;\n        }\n    },\n    getCoords(scale = 1) {\n        let coords = this.getNormalizedCoords();\n        if (coords == null) {\n            return null;\n        }\n\n        let startX = coords.start.x / scale,\n            startY = coords.start.y / scale,\n            endX = coords.end.x / scale,\n            endY = coords.end.y / scale;\n        return {\n            start: {\n                x: startX,\n                y: startY\n            },\n            end: {\n                x: endX,\n                y: endY\n            },\n            height: endY - startY,\n            width: endX - startX\n        };\n    },\n    encodePath: function () {\n        return null;\n    },\n    decodePath: function () {\n        return null;\n    },\n    normalizeCoords: function () {\n        this.set(this.getNormalizedCoords());\n    },\n    getNormalizedCoords: function () {\n        let start = this.get('start'),\n            end = this.get('end');\n        if (start == null || end == null) {\n            return null;\n        }\n        return {\n            start: start,\n            end: end\n        };\n    },\n    collides: function (x, y) {\n        return false;\n    },\n    getCollidingDragPoint: function (x, y) {\n        if (this.dragPoints == null) {\n            return null;\n        }\n\n        return _.find(this.dragPoints, function (point) {\n            return PJQ.helpers.trigHelpers.checkRectCollision(point.start, point.end, x, y);\n        });\n    },\n    beforeSave: function () {\n        if (this.attachments) {\n            this.set('attachments', this.attachments.getChangedModels());\n        }\n    },\n    publish: function (callback) {\n        new PJQ.ajax.Request({\n            endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n                {\n                    endpoint: 'drawings'\n                },\n                {\n                    endpoint: 'annotations',\n                    value: this.id\n                },\n                {\n                    endpoint: 'publish'\n                }\n            ]),\n            data: this.toJSON()\n        }).put().done(_.bind(function () {\n            if (typeof callback === 'function') {\n                callback();\n            }\n        }, this)).fail(_.bind(function () {\n            this.set('isPublished', !this.get('isPublished'));\n            if (typeof callback === 'function') {\n                callback();\n            }\n        }, this));\n    }\n});\n\nPJQ.models.drawings.Pen = PJQ.models.drawings.Annotation.extend({\n    getDisplayName: function () {\n        return PJQ.constants.drawings.annotationTypeNames.PEN;\n    },\n    start: function (x, y) {\n        // start in the case of pen creates a points array and adds the coordinate as the start point\n        if (_.size(this.attributes.path) > 0) {\n            this.attributes.path[0][0] = x;\n            this.attributes.path[0][1] = y;\n        } else if (_.size(this.path) === 0) {\n            this.path = [[Math.floor(x), Math.floor(y)]];\n        }\n    },\n    end: function (x, y) {\n        if (this.path != null) {\n            this.path.push([Math.floor(x), Math.floor(y)]);\n        } else {\n            this.start(x, y);\n        }\n    },\n    normalizeCoords: function (stopDrawing) {\n        if (stopDrawing && _.size(this.path) > 0) {\n            let smooth = [],\n                threshold = 25,\n                prevX = null,\n                prevY = null;\n            _.each(this.path, function (point, index) {\n                // remove points which are less than 25 units away (x and y) from the previous point\n                let thisX = point[0],\n                    thisY = point[1],\n                    isAdd = false;\n                if (prevX != null && prevY != null) {\n                    let xDiff = thisX - prevX,\n                        yDiff = thisY - prevY;\n                    if ((xDiff > threshold || xDiff < -threshold) || (yDiff > threshold || yDiff < -threshold))\n                        isAdd = true;\n                } else {\n                    isAdd = true;\n                }\n\n                if (isAdd) {\n                    prevX = thisX;\n                    prevY = thisY;\n                    smooth.push(point);\n                }\n\n                // take every 10th point to cut down the amount of data stored for the path\n                // this method results in about a 5% reduction from the above method\n                // the downside to this method is thicker lines look blocky\n                // if (index % 10 === 0) {\n                // \tsmooth.push(point);\n                // }\n            });\n            this.encodePath(smooth);\n        }\n    },\n    moveDragPoint: function (dragPoint, x, y) {\n        let pts = this.get('path');\n        if (_.size(pts) > 0) {\n            switch (dragPoint.position) {\n                case PJQ.constants.drawings.dragPoints.START:\n                    pts[0][0] = Math.floor(x);\n                    pts[0][1] = Math.floor(y);\n                    break;\n                case PJQ.constants.drawings.dragPoints.END:\n                    let decodedPts = this.decodePath();\n                    pts[0][0] = Math.floor(pts[0][0] + x - decodedPts[decodedPts.length - 1][0]);\n                    pts[0][1] = Math.floor(pts[0][1] + y - decodedPts[decodedPts.length - 1][1]);\n                    break;\n            }\n            this.set('path', pts);\n        }\n    },\n    encodePath: function (pts) {\n        // delta encode each point x/y coordinate corresponding to the previous\n        let path = [],\n            prevX = null,\n            prevY = null;\n        if (_.size(pts) > 0) {\n            _.each(pts, function (point, index) {\n                let thisX = pts[index][0],\n                    thisY = pts[index][1],\n                    deltaX,\n                    deltaY;\n                if (prevX != null && prevY != null) {\n                    deltaX = thisX - prevX;\n                    deltaY = thisY - prevY;\n                } else {\n                    deltaX = thisX;\n                    deltaY = thisY;\n                }\n                prevX = thisX;\n                prevY = thisY;\n                path.push([deltaX, deltaY]);\n            }, this);\n        }\n        this.set('path', path);\n        return path;\n    },\n    decodePath: function () {\n        // delta encode each point x/y coordinate corresponding to the previous\n        let pts = this.get('path'),\n            path = [],\n            prevX = null,\n            prevY = null;\n        if (_.size(pts) > 0) {\n            _.each(pts, function (point, index) {\n                let thisX = pts[index][0],\n                    thisY = pts[index][1],\n                    deltaX,\n                    deltaY;\n                if (prevX != null && prevY != null) {\n                    deltaX = prevX + thisX;\n                    deltaY = prevY + thisY;\n                } else {\n                    deltaX = thisX;\n                    deltaY = thisY;\n                }\n                prevX = deltaX;\n                prevY = deltaY;\n                path.push([deltaX, deltaY]);\n            }, this);\n        }\n        return path;\n    },\n    collides: function (x, y) {\n        if (_.size(this.get('path')) > 0) {\n            let path = this.decodePath(),\n                buffer = 20,\n                start = {\n                    x: 0,\n                    y: 0\n                };\n            for (let i = 0; i < _.size(path); i++) {\n                let end = {\n                    x: path[i][0],\n                    y: path[i][1]\n                };\n                if (i > 0) {\n                    let dStart = PJQ.helpers.trigHelpers.distance(start.x, start.y, x, y),\n                        dEnd = PJQ.helpers.trigHelpers.distance(end.x, end.y, x, y),\n                        dComb = dStart + dEnd,\n                        lineLen = PJQ.helpers.trigHelpers.distance(start.x, start.y, end.x, end.y);\n                    if (dComb >= lineLen - buffer && dComb <= lineLen + buffer) {\n                        return true;\n                    }\n                }\n                start = end;\n            }\n        }\n        return false;\n    },\n    draw: function (ct, scale) {\n        let path;\n        if (_.size(this.get('path')) > 0) {\n            path = this.decodePath();\n        } else if (_.size(this.path) > 0) {\n            path = this.path;\n        } else {\n            path = null;\n        }\n        if (path != null) {\n            ct.beginPath();\n            let startX = null,\n                startY = null;\n            _.each(path, function (point) {\n                let pointX = point[0] / scale,\n                    pointY = point[1] / scale;\n                if (startX == null && startY == null) {\n                    startX = pointX;\n                    startY = pointY;\n                    ct.moveTo(startX, startY);\n                } else {\n                    ct.lineTo(pointX, pointY);\n                }\n            });\n            this.stroke(ct, scale);\n        }\n    },\n    getCoords: function (scale) {\n        let result = {\n            start: {\n                x: 0,\n                y: 0\n            },\n            end: {\n                x: 0,\n                y: 0\n            }\n        };\n        let path = this.decodePath(),\n            ptCount = _.size(path);\n        if (ptCount > 0) {\n            result.start.x = path[0][0] / scale;\n            result.start.y = path[0][1] / scale;\n            if (ptCount > 1) {\n                result.end.x = path[ptCount - 1][0] / scale;\n                result.end.y = path[ptCount - 1][1] / scale;\n            }\n        }\n        return result;\n    },\n    drawDragPoints: function (ct, scale) {\n        let ptWidth = 15,\n            coords = this.getCoords(scale),\n            hfPtWidth = ptWidth / 2,\n            sStartX = coords.start.x - hfPtWidth,\n            sStartY = coords.start.y - hfPtWidth,\n            eStartX = coords.end.x - hfPtWidth,\n            eStartY = coords.end.y - hfPtWidth\n\n        this.dragPoints = [\n            {\n                position: PJQ.constants.drawings.dragPoints.START,\n                start: {\n                    x: sStartX,\n                    y: sStartY\n                },\n                end: {\n                    x: sStartX + ptWidth,\n                    y: sStartY + ptWidth\n                }\n            },\n            {\n                position: PJQ.constants.drawings.dragPoints.END,\n                start: {\n                    x: eStartX,\n                    y: eStartY\n                },\n                end: {\n                    x: eStartX + ptWidth,\n                    y: eStartY + ptWidth\n                }\n            }\n        ];\n\n        ct.beginPath();\n        ct.lineWidth = 3;\n        ct.strokeStyle = '#343a40';\n        ct.setLineDash([]);\n        _.each(this.dragPoints, function (point) {\n            ct.clearRect(point.start.x, point.start.y, ptWidth, ptWidth);\n            PJQ.helpers.canvasHelpers.drawRoundRect(ct, point.start.x, point.start.y, ptWidth, ptWidth, 4, false, true)\n        });\n    }\n});\n\nPJQ.models.drawings.Highlighter = PJQ.models.drawings.Pen.extend({\n    getDisplayName: function () {\n        return PJQ.constants.drawings.annotationTypeNames.HIGHLIGHTER;\n    },\n    stroke: function (ct, scale) {\n        let strokeColor = this.getStrokeColor();\n        if (strokeColor) {\n            let ts = this.get('textSize');\n            ct.lineWidth = Math.max(20, ts ? ts : 0) / scale;\n            ct.setLineDash([0]);\n            let rgb = PJQ.helpers.colorHelpers.getRGBFromHex(strokeColor);\n            ct.strokeStyle = 'rgba(' + rgb.R.toString() + ',' + rgb.G.toString() + ',' + rgb.B.toString() + ', 0.5)';\n            ct.stroke();\n        }\n    },\n});\n\nPJQ.models.drawings.Line = PJQ.models.drawings.Annotation.extend({\n    getDisplayName: function () {\n        return PJQ.constants.drawings.annotationTypeNames.LINE;\n    },\n    end: function (x, y, normalize = false) {\n        this.set({\n            end: {\n                x: Math.round(x),\n                y: Math.round(y)\n            }\n        });\n\n        if (normalize) {\n            this.normalizeCoords();\n        }\n    },\n    collides: function (x, y) {\n        let start = this.get('start'),\n            end = this.get('end');\n\n        if (start == null || end == null) {\n            return false;\n        }\n\n        let dStart = PJQ.helpers.trigHelpers.distance(start.x, start.y, x, y),\n            dEnd = PJQ.helpers.trigHelpers.distance(end.x, end.y, x, y),\n            dComb = dStart + dEnd,\n            lineLen = PJQ.helpers.trigHelpers.distance(start.x, start.y, end.x, end.y),\n            buffer = 20;\n        if (dComb >= lineLen - buffer && dComb <= lineLen + buffer) {\n            return true;\n        }\n    },\n    draw: function (ct, scale) {\n        let coords = this.getCoords(scale);\n        if (coords == null) {\n            return;\n        }\n\n        ct.beginPath();\n        ct.moveTo(coords.start.x, coords.start.y);\n        ct.lineTo(coords.end.x, coords.end.y);\n\n        this.stroke(ct, scale);\n    },\n    drawDragPoints: function (ct, scale) {\n        let ptWidth = 15,\n            coords = this.getCoords(scale),\n            hfPtWidth = ptWidth / 2,\n            sStartX = coords.start.x - hfPtWidth,\n            sStartY = coords.start.y - hfPtWidth,\n            eStartX = coords.end.x - hfPtWidth,\n            eStartY = coords.end.y - hfPtWidth\n\n        this.dragPoints = [\n            {\n                position: PJQ.constants.drawings.dragPoints.START,\n                start: {\n                    x: sStartX,\n                    y: sStartY\n                },\n                end: {\n                    x: sStartX + ptWidth,\n                    y: sStartY + ptWidth\n                }\n            },\n            {\n                position: PJQ.constants.drawings.dragPoints.END,\n                start: {\n                    x: eStartX,\n                    y: eStartY\n                },\n                end: {\n                    x: eStartX + ptWidth,\n                    y: eStartY + ptWidth\n                }\n            }\n        ];\n\n        ct.beginPath();\n        ct.lineWidth = 3;\n        ct.strokeStyle = '#343a40';\n        ct.setLineDash([]);\n        _.each(this.dragPoints, function (point) {\n            ct.clearRect(point.start.x, point.start.y, ptWidth, ptWidth);\n            PJQ.helpers.canvasHelpers.drawRoundRect(ct, point.start.x, point.start.y, ptWidth, ptWidth, 4, false, true)\n        });\n    }\n});\n\nPJQ.models.drawings.Arrow = PJQ.models.drawings.Line.extend({\n    getDisplayName: function () {\n        return PJQ.constants.drawings.annotationTypeNames.ARROW;\n    },\n    draw: function (ct, scale) {\n        let coords = this.getCoords(scale);\n        if (coords == null) {\n            return;\n        }\n\n        let headLength = 100 / scale,\n            dx = coords.end.x - coords.start.x,\n            dy = coords.end.y - coords.start.y,\n            angle = Math.atan2(dy, dx);\n\n        ct.beginPath();\n        ct.moveTo(coords.start.x, coords.start.y);\n        ct.lineTo(coords.end.x, coords.end.y);\n\n        ct.lineTo(coords.end.x - headLength * Math.cos(angle - Math.PI / 6), coords.end.y - headLength * Math.sin(angle - Math.PI / 6));\n\n        ct.moveTo(coords.end.x, coords.end.y);\n        ct.lineTo(coords.end.x - headLength * Math.cos(angle + Math.PI / 6), coords.end.y - headLength * Math.sin(angle + Math.PI / 6));\n\n        this.stroke(ct, scale);\n    }\n});\n\nPJQ.models.drawings.Rectangle = PJQ.models.drawings.Annotation.extend({\n    getDisplayName: function () {\n        return PJQ.constants.drawings.annotationTypeNames.RECTANGLE;\n    },\n    minWidth: 100,\n    minHeight: 100,\n    getNormalizedCoords: function () {\n        let start = this.get('start'),\n            end = this.get('end');\n        if (start == null || end == null) {\n            return null;\n        }\n\n        let result = {\n            start: start,\n            end: end\n        };\n        if (start.x > end.x && start.y > end.y) {\n            // starts at bottom right - swap end/start points\n            result = {\n                start: end,\n                end: start\n            };\n        } else if (start.y > end.y) {\n            // starts at bottom left\n            result = {\n                start: {\n                    x: start.x,\n                    y: end.y\n                },\n                end: {\n                    x: end.x,\n                    y: start.y\n                }\n            };\n        } else if (start.x > end.x) {\n            // starts at top right\n            result = {\n                start: {\n                    x: end.x,\n                    y: start.y\n                },\n                end: {\n                    x: start.x,\n                    y: end.y\n                }\n            };\n        }\n        return result;\n    },\n    collides: function (x, y) {\n        let start = this.get('start'),\n            end = this.get('end');\n\n        if (start == null || end == null) {\n            return false;\n        }\n\n        return PJQ.helpers.trigHelpers.checkRectCollision(start, end, x, y);\n    },\n    draw: function (ct, scale) {\n        let coords = this.getCoords(scale);\n        if (coords == null) {\n            return;\n        }\n\n        ct.beginPath();\n        ct.rect(coords.start.x, coords.start.y, coords.width, coords.height);\n\n        this.stroke(ct, scale);\n\n        if (typeof this.drawLink === 'function') {\n            this.drawLink(ct, scale);\n        }\n    },\n    drawDragPoints: function (ct, scale) {\n        let ptWidth = 16,\n            margin = 10 / scale,\n            coords = this.getCoords(scale),\n            tlStartX = coords.start.x - ptWidth - margin,\n            tlStartY = coords.start.y - ptWidth - margin,\n            brStartX = coords.end.x + margin,\n            brStartY = coords.end.y + margin,\n            trStartX = coords.end.x + margin,\n            trStartY = coords.start.y - ptWidth - margin,\n            blStartX = coords.start.x - ptWidth - margin,\n            blStartY = coords.end.y + margin;\n\n        ct.beginPath();\n        ct.rect(tlStartX + (ptWidth / 2), tlStartY + (ptWidth / 2), brStartX - tlStartX, brStartY - tlStartY);\n        ct.setLineDash([6]);\n        ct.lineWidth = 3;\n        ct.strokeStyle = '#343a40';\n        ct.stroke()\n\n        this.dragPoints = [{\n            position: PJQ.constants.drawings.dragPoints.TOP_LEFT,\n            start: {\n                x: tlStartX,\n                y: tlStartY\n            },\n            end: {\n                x: tlStartX + ptWidth,\n                y: tlStartY + ptWidth\n            }\n        }, {\n            position: PJQ.constants.drawings.dragPoints.BOTTOM_RIGHT,\n            start: {\n                x: brStartX,\n                y: brStartY\n            },\n            end: {\n                x: brStartX + ptWidth,\n                y: brStartY + ptWidth\n            }\n        }, {\n            position: PJQ.constants.drawings.dragPoints.TOP_RIGHT,\n            start: {\n                x: trStartX,\n                y: trStartY\n            },\n            end: {\n                x: trStartX + ptWidth,\n                y: trStartY + ptWidth\n            }\n        }, {\n            position: PJQ.constants.drawings.dragPoints.BOTTOM_LEFT,\n            start: {\n                x: blStartX,\n                y: blStartY\n            },\n            end: {\n                x: blStartX + ptWidth,\n                y: blStartY + ptWidth\n            }\n        }];\n\n        ct.beginPath();\n        ct.lineWidth = 3;\n        ct.strokeStyle = '#343a40';\n        ct.setLineDash([]);\n        _.each(this.dragPoints, function (point) {\n            ct.clearRect(point.start.x, point.start.y, ptWidth, ptWidth);\n            PJQ.helpers.canvasHelpers.drawRoundRect(ct, point.start.x, point.start.y, ptWidth, ptWidth, 4, false, true)\n        });\n    }\n});\n\nPJQ.models.drawings.Ellipse = PJQ.models.drawings.Rectangle.extend({\n    getDisplayName: function () {\n        return PJQ.constants.drawings.annotationTypeNames.ELLIPSE;\n    },\n    draw: function (ct, scale) {\n        let coords = this.getCoords(scale);\n        if (coords == null) {\n            return;\n        }\n\n        let radiusX = (coords.end.x - coords.start.x) * 0.5,\n            radiusY = (coords.end.y - coords.start.y) * 0.5,\n            centerX = coords.start.x + radiusX,\n            centerY = coords.start.y + radiusY,\n            step = 0.01,\n            a = step,\n            pi2 = Math.PI * 2 - step;\n\n        ct.beginPath();\n        ct.moveTo(centerX + radiusX * Math.cos(0), centerY + radiusY * Math.sin(0));\n        for (; a < pi2; a += step) {\n            ct.lineTo(centerX + radiusX * Math.cos(a),\n                centerY + radiusY * Math.sin(a));\n        }\n        ct.closePath();\n\n        this.stroke(ct, scale);\n\n        if (typeof this.drawLink === 'function') {\n            this.drawLink(ct, scale);\n        }\n    }\n});\n\nPJQ.models.drawings.Cloud = PJQ.models.drawings.Rectangle.extend({\n    getDisplayName: function () {\n        return PJQ.constants.drawings.annotationTypeNames.CLOUD;\n    },\n    draw: function (ct, scale) {\n        let coords = this.getCoords(scale);\n        if (coords == null) {\n            return;\n        }\n\n        let lastX = coords.start.x,\n            lastY = coords.start.y,\n            bumpWidth = 60 / scale,\n            bumpWidthHalf = bumpWidth / 2,\n            bumpHeight = bumpWidth / 3;\n\n        ct.beginPath();\n        ct.moveTo(lastX, lastY);\n        while (lastX < coords.end.x) {\n            if (lastX + bumpWidth > coords.end.x) {\n                let thisBumpWidth = coords.end.x - lastX,\n                    thisBumpHeight = (thisBumpWidth / bumpWidth) * bumpHeight;\n                ct.bezierCurveTo(lastX + (thisBumpWidth / 2), lastY - thisBumpHeight, lastX + (thisBumpWidth / 2), lastY - thisBumpHeight, coords.end.x, lastY);\n                lastX = coords.end.x;\n            } else {\n                ct.bezierCurveTo(lastX + bumpWidthHalf, lastY - bumpHeight, lastX + bumpWidthHalf, lastY - bumpHeight, lastX + bumpWidth, lastY);\n                lastX += bumpWidth;\n            }\n        }\n        while (lastY < coords.end.y) {\n            if (lastY + bumpWidth > coords.end.y) {\n                let thisBumpWidth = coords.end.y - lastY,\n                    thisBumpHeight = (thisBumpWidth / bumpWidth) * bumpHeight;\n                ct.bezierCurveTo(lastX + thisBumpHeight, lastY + (thisBumpWidth / 2), lastX + thisBumpHeight, lastY + (thisBumpWidth / 2), lastX, coords.end.y);\n                lastY = coords.end.y;\n            } else {\n                ct.bezierCurveTo(lastX + bumpHeight, lastY + bumpWidthHalf, lastX + bumpHeight, lastY + bumpWidthHalf, lastX, lastY + bumpWidth);\n                lastY += bumpWidth;\n            }\n        }\n        while (lastX > coords.start.x) {\n            if (lastX - bumpWidth < coords.start.x) {\n                let thisBumpWidth = lastX - coords.start.x,\n                    thisBumpHeight = (thisBumpWidth / bumpWidth) * bumpHeight;\n                ct.bezierCurveTo(lastX - (thisBumpWidth / 2), lastY + thisBumpHeight, lastX - (thisBumpWidth / 2), lastY + thisBumpHeight, coords.start.x, lastY);\n                lastX = coords.start.x;\n            } else {\n                ct.bezierCurveTo(lastX - bumpWidthHalf, lastY + bumpHeight, lastX - bumpWidthHalf, lastY + bumpHeight, lastX - bumpWidth, lastY);\n                lastX -= bumpWidth;\n            }\n        }\n        while (lastY > coords.start.y) {\n            if (lastY - bumpWidth < coords.start.y) {\n                let thisBumpWidth = lastY - coords.start.y,\n                    thisBumpHeight = (thisBumpWidth / bumpWidth) * bumpHeight;\n                ct.bezierCurveTo(lastX - thisBumpHeight, lastY - (thisBumpWidth / 2), lastX - thisBumpHeight, lastY - (thisBumpWidth / 2), lastX, coords.start.y);\n                lastY = coords.start.y;\n            } else {\n                ct.bezierCurveTo(lastX - bumpHeight, lastY - bumpWidthHalf, lastX - bumpHeight, lastY - bumpWidthHalf, lastX, lastY - bumpWidth);\n                lastY -= bumpWidth;\n            }\n        }\n        ct.closePath();\n\n        this.stroke(ct, scale);\n\n        if (typeof this.drawLink === 'function') {\n            this.drawLink(ct, scale);\n        }\n    }\n});\n\nPJQ.models.drawings.Text = PJQ.models.drawings.Rectangle.extend({\n    beforeConstruct: function (attributes) {\n        attributes.text = attributes.text != null ? attributes.text : \"\";\n        attributes.textSize = attributes.textSize != null ? attributes.textSize : 100;\n    },\n    getDisplayName: function () {\n        return PJQ.constants.drawings.annotationTypeNames.TEXT;\n    },\n    getTextSize: function (scale = 1) {\n        let ts = this.get('textSize');\n        return (60 * ((ts ? ts : 100) / 100) / scale);\n    },\n    draw: function (ct, scale, options = {}) {\n        let coords = this.getCoords(scale);\n        if (coords == null) {\n            return;\n        }\n\n        let textSize = this.getTextSize(scale);\n        ct.beginPath();\n        ct.fillStyle = this.getStrokeColor();\n        ct.font = textSize + 'px Roboto';\n\n        // we start the y position at y + textsize because\n        // the y coordinate of text is at the bottom of the characters\n        let y = coords.start.y + textSize,\n            words = this.attributes.text.split(' '),\n            line = '';\n        for (let n = 0; n < words.length; n++) {\n            let testLine = line + words[n],\n                metrics = ct.measureText(testLine + ' '),\n                testWidth = metrics.width;\n            if (testWidth > coords.width && n > 0) {\n                ct.fillText(line, coords.start.x, y);\n                line = words[n] + ' ';\n                y += textSize;\n            } else {\n                line = testLine + ' ';\n            }\n        }\n        ct.fillText(line, coords.start.x, y);\n\n        if (options.isDrawing) {\n            ct.beginPath();\n            ct.rect(coords.start.x, coords.start.y, coords.width, coords.height);\n            ct.setLineDash([6]);\n            ct.lineWidth = 6 / scale;\n            ct.strokeStyle = '#343a40';\n            ct.stroke();\n        }\n    }\n});\n\nPJQ.models.drawings.Pin = PJQ.models.drawings.Annotation.extend({\n    getDisplayName: function () {\n        return \"\";\n    },\n    end: function (x, y) {\n        PJQ.models.drawings.Annotation.prototype.end.call(this, x, y)\n        return this.start(x, y);\n    },\n    move: function (xDiff, yDiff, maxX, maxY) {\n        let newX = this.attributes.start.x + xDiff,\n            newY = this.attributes.start.y + yDiff;\n        if (newX < 0) {\n            newX = 0;\n        } else if (newX > maxX) {\n            newX = maxX;\n        }\n\n        if (newY < 0) {\n            newY = 0;\n        } else if (newY > maxY) {\n            newY = maxY;\n        }\n\n        this.end(newX, newY);\n    },\n    collides: function (x, y) {\n        let start = this.get('start');\n        if (start == null) {\n            return false;\n        }\n\n        let isHf = this.getIconSize() / 2;\n        return PJQ.helpers.trigHelpers.checkRectCollision({\n            x: start.x - isHf,\n            y: start.y - isHf\n        }, {\n            x: start.x + isHf,\n            y: start.y + isHf\n        }, x, y);\n    },\n    getIcon: function () {\n        return \"\\uF041\";\n    },\n    getIconSize: function (scale = 1) {\n        return (80 / scale);\n    },\n    draw: function (ct, scale) {\n        let coords = this.getCoords(scale);\n        if (coords == null) {\n            return;\n        }\n\n        let is = this.getIconSize(scale),\n            isHf = is / 2,\n            font = '900 ' + is + 'px \"Font Awesome 5 Pro\"';\n        ct.beginPath();\n        ct.font = font;\n        ct.fillStyle = this.getStrokeColor();\n        ct.fillText(this.getIcon(), coords.start.x - isHf, coords.start.y + isHf);\n    }\n});\n\nPJQ.models.drawings.PinRFI = PJQ.models.drawings.Pin.extend({\n    getDisplayName: function () {\n        return PJQ.constants.drawings.annotationTypeNames.PIN_RFI;\n    },\n    getIcon: function () {\n        return \"\\uF60b\";\n    }\n});\n\nPJQ.models.drawings.PinPunchListItem = PJQ.models.drawings.Pin.extend({\n    getDisplayName: function () {\n        let res = PJQ.constants.drawings.annotationTypeNames.PIN_PUNCH_LIST_ITEM;\n        if (this.punchListItem != null) {\n            res += ' #' + this.punchListItem.get('itemNumber');\n        }\n        return res\n    },\n    getIcon: function () {\n        return \"\\uF606\";\n    },\n    getStrokeColor: function () {\n        if (this.punchListItem != null) {\n            return this.punchListItem.getStatusColor();\n        }\n        return PJQ.models.drawings.Pin.prototype.getStrokeColor.call(this);\n    },\n    getFillColor: function () {\n        if (this.punchListItem != null) {\n            return this.punchListItem.getStatusColor() + '75';\n        }\n        return PJQ.models.drawings.Pin.prototype.getFillColor.call(this);\n    },\n    getDeepLink: function () {\n        return this.punchListItem?.getDeepLink();\n    },\n    setPunchListItem: function (item) {\n        this.set({\n            refId: item.id,\n            refType: PJQ.constants.drawings.refTypes.PUNCH_LIST_ITEM,\n            refData: {\n                id: item.id,\n                title: item.get('title'),\n                itemNumber: item.get('itemNumber'),\n                status: item.get('status'),\n            },\n            isDirty: true\n        });\n        this.punchListItem = item;\n    }\n});\n\nPJQ.models.drawings.PinActionItem = PJQ.models.drawings.Pin.extend({\n    getDisplayName: function () {\n        let res = PJQ.constants.drawings.annotationTypeNames.PIN_ACTION_ITEM;\n        if (this.actionItem != null) {\n            res += ' #' + this.actionItem.get('itemNumber');\n        }\n        return res\n    },\n    getIcon: function () {\n        return \"\\uF608\";\n    },\n    getStrokeColor: function () {\n        if (this.actionItem != null) {\n            return this.actionItem.getStatusColor();\n        }\n        return PJQ.models.drawings.Pin.prototype.getStrokeColor.call(this);\n    },\n    getFillColor: function () {\n        if (this.actionItem != null) {\n            return this.actionItem.getStatusColor() + '75';\n        }\n        return PJQ.models.drawings.Pin.prototype.getFillColor.call(this);\n    },\n    getDeepLink: function () {\n        return this.actionItem?.getDeepLink();\n    },\n    setActionItem: function (item) {\n        this.set({\n            refId: item.id,\n            refType: PJQ.constants.drawings.refTypes.ACTION_ITEM,\n            refData: {\n                id: item.id,\n                title: item.get('title'),\n                itemNumber: item.get('itemNumber'),\n                status: item.get('status'),\n            },\n            isDirty: true\n        });\n        this.actionItem = item;\n    },\n});\n\nPJQ.models.drawings.PinSubmittal = PJQ.models.drawings.Pin.extend({\n    getDisplayName: function () {\n        return PJQ.constants.drawings.annotationTypeNames.PIN_SUBMITTAL;\n    },\n    getIcon: function () {\n        return \"\\uF041\";\n    }\n});\n\nPJQ.models.drawings.Photo = PJQ.models.drawings.Pin.extend({\n    getDisplayName: function () {\n        return PJQ.constants.drawings.annotationTypeNames.PHOTO;\n    },\n    getIcon: function () {\n        return \"\\uF030\";\n    }\n});\n\nPJQ.models.drawings.LinkRectangle = PJQ.models.drawings.Rectangle.extend({\n    getDisplayName: function () {\n        return PJQ.constants.drawings.annotationTypeNames.LINK_RECTANGLE;\n    },\n    drawLink: function (ct, scale) {\n        let coords = this.getCoords(scale);\n        if (coords == null) {\n            return null;\n        }\n\n        let is = (80 / scale),\n            isHf = is / 2,\n            font = '900 ' + is + 'px \"Font Awesome 5 Pro\"';\n        document.fonts.load(font).then((_) => {\n            ct.beginPath();\n            ct.font = font;\n            ct.fillStyle = this.getStrokeColor();\n            ct.fillText(\"\\uf0c1\", coords.start.x + isHf, coords.end.y - isHf);\n        })\n    }\n});\n\nPJQ.models.drawings.LinkEllipse = PJQ.models.drawings.Ellipse.extend({\n    getDisplayName: function () {\n        return PJQ.constants.drawings.annotationTypeNames.LINK_ELLIPSE;\n    },\n    drawLink: function (ct, scale) {\n        let coords = this.getCoords(scale);\n        if (coords == null) {\n            return null;\n        }\n\n        let is = (80 / scale),\n            isHf = is / 2,\n            font = '900 ' + is + 'px \"Font Awesome 5 Pro\"';\n        document.fonts.load(font).then((_) => {\n            let x = coords.start.x + (coords.width / 2),\n                y = coords.end.y\n            ct.beginPath();\n            ct.font = font;\n            ct.fillStyle = this.getStrokeColor();\n            ct.fillText(\"\\uf0c1\", x - isHf, y - isHf);\n        })\n    }\n});\n\nPJQ.models.drawings.LinkCloud = PJQ.models.drawings.Cloud.extend({\n    getDisplayName: function () {\n        return PJQ.constants.drawings.annotationTypeNames.LINK_CLOUD;\n    },\n    drawLink: PJQ.models.drawings.LinkRectangle.prototype.drawLink\n});\n\nPJQ.models.drawings.Ruler = PJQ.models.drawings.Line.extend({\n    getDisplayName: function () {\n        return PJQ.constants.drawings.annotationTypeNames.RULER;\n    },\n    draw: function (ct, scale, options) {\n        let coords = this.getCoords(scale);\n        if (coords == null) {\n            return;\n        }\n\n        // draw the line with a gap in the middle for the length text\n        // to do this, we find 2 points offset \"gap\" pixels in either direction (scaled) from the center point of the line\n        // we then draw 2 lines, 1 from the start to center offset 1 - the other from center offset 2 to the end\n        let dx = coords.start.x - coords.end.x,\n            dy = coords.start.y - coords.end.y,\n            len = Math.sqrt(dx * dx + dy * dy) / 2,\n            gap = Math.min(50, len / 4),\n            textSize = (gap * 0.8) / scale,\n            d1 = len - (gap / scale),\n            d2 = len + (gap / scale),\n            angle = Math.atan2(coords.end.y - coords.start.y, coords.end.x - coords.start.x),\n            middle1 = {\n                x: coords.start.x + d1 * Math.cos(angle),\n                y: coords.start.y + d1 * Math.sin(angle)\n            },\n            middle2 = {\n                x: coords.start.x + d2 * Math.cos(angle),\n                y: coords.start.y + d2 * Math.sin(angle)\n            };\n        ct.beginPath();\n        ct.moveTo(coords.start.x, coords.start.y);\n        ct.lineTo(middle1.x, middle1.y);\n        ct.moveTo(middle2.x, middle2.y);\n        ct.lineTo(coords.end.x, coords.end.y);\n        this.stroke(ct, scale);\n\n        // write the ruler calculated length\n        // we start the y position at y + textsize because\n        // the y coordinate of text is at the bottom of the characters\n        let rulerLength = this.getRulerLength(options.drawing.get('scale')),\n            scaleType = options.drawing.get('scaleType'),\n            rulerText = '';\n        if (scaleType === PJQ.constants.drawings.scaleTypes.IMPERIAL) {\n            let inches = rulerLength,\n                feet = 0;\n            if (inches > 12) {\n                feet = Math.floor(inches / 12);\n                rulerText = feet.toString() + \"' \" + (inches % 12).toString() + \"\\\"\";\n            } else {\n                rulerText = inches.toString() + \"\\\"\";\n            }\n        } else {\n\n        }\n\n        ct.beginPath();\n        ct.fillStyle = this.getStrokeColor();\n        ct.font = textSize + 'px Roboto';\n        ct.fillText(rulerText, middle1.x, middle1.y);\n    },\n    getRulerLength: function (scale) {\n        let start = this.get('start'),\n            end = this.get('end'),\n            dx = end.x - start.x,\n            dy = end.y - start.y,\n            d = Math.sqrt(dx * dx + dy * dy);\n        return Math.round(d / scale);\n    }\n});\n\nPJQ.models.drawings.AreaRectangle = PJQ.models.drawings.Rectangle.extend({\n    getDisplayName: function () {\n        return PJQ.constants.drawings.annotationTypeNames.AREA_RECT;\n    }\n});\n\nPJQ.models.drawings.RulerFreeForm = PJQ.models.drawings.Pen.extend({\n    getDisplayName: function () {\n        return PJQ.constants.drawings.annotationTypeNames.RULER_FREE_FORM;\n    }\n});\n\nPJQ.models.drawings.AreaFreeForm = PJQ.models.drawings.Pen.extend({\n    getDisplayName: function () {\n        return PJQ.constants.drawings.annotationTypeNames.AREA_FREE_FORM;\n    }\n});\n\nPJQ.models.drawings.AnnotationAttachment = PJQ.models.files.File.extend({\n    idAttribute: 'attachmentId',\n    endpoint: function () {\n        return PJQ.helpers.urlHelpers.generateEndpoint([\n            {\n                endpoint: 'drawings'\n            },\n            {\n                endpoint: 'annotations',\n                value: this.get('annotationId')\n            },\n            {\n                endpoint: 'attachments',\n                value: this.id\n            }\n        ]);\n    }\n});\n\nPJQ.collections.drawings.Layers = PJQ.collections.BaseCollection.extend({\n    model: PJQ.models.drawings.Layer,\n    endpoint: function () {\n        return PJQ.helpers.urlHelpers.generateEndpoint([\n            {\n                endpoint: 'projects',\n                value: this.options.projectId\n            },\n            {\n                endpoint: 'layers'\n            }\n        ]);\n    },\n    fetchAnnotations: function (drawingId, callback) {\n        if (_.indexOf(this.fetchedDrawingIds, drawingId) === -1) {\n            if (this.fetchedDrawingIds == null) {\n                this.fetchedDrawingIds = [drawingId];\n            } else {\n                this.fetchedDrawingIds.push(drawingId);\n            }\n            new PJQ.ajax.Request({\n                endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n                    {\n                        endpoint: 'drawings',\n                        value: drawingId\n                    },\n                    {\n                        endpoint: 'annotations'\n                    }\n                ])\n            }).get().done(_.bind(function (annotations) {\n                _.each(annotations, function (annotation) {\n                    let layer = this.get(annotation.layerId);\n                    if (layer != null) {\n                        layer.annotations.add(annotation);\n                    }\n                }, this);\n                callback();\n            }, this)).fail(_.bind(function () {\n                callback();\n            }, this));\n        } else {\n            callback();\n        }\n    }\n});\n\nPJQ.collections.drawings.Annotations = PJQ.collections.BaseCollection.extend({\n    afterInit: function () {\n        if (PJQ.helpers.objectHelpers.checkNested(PJQ.app, 'session', 'preferences')) {\n            this.options.isAPIv2 = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_DRAWING_ANNOTATION_REFS);\n        }\n    },\n    model: function (attrs, options) {\n        let mod;\n        switch (attrs.type.toUpperCase()) {\n            case PJQ.constants.drawings.annotationTypes.LINE:\n                mod = PJQ.models.drawings.Line;\n                break;\n            case PJQ.constants.drawings.annotationTypes.PEN:\n                mod = PJQ.models.drawings.Pen;\n                break;\n            case PJQ.constants.drawings.annotationTypes.HIGHLIGHTER:\n                mod = PJQ.models.drawings.Highlighter;\n                break;\n            case PJQ.constants.drawings.annotationTypes.ARROW:\n                mod = PJQ.models.drawings.Arrow;\n                break;\n            case PJQ.constants.drawings.annotationTypes.RECTANGLE:\n                mod = PJQ.models.drawings.Rectangle;\n                break;\n            case PJQ.constants.drawings.annotationTypes.ELLIPSE:\n                mod = PJQ.models.drawings.Ellipse;\n                break;\n            case PJQ.constants.drawings.annotationTypes.CLOUD:\n                mod = PJQ.models.drawings.Cloud;\n                break;\n            case PJQ.constants.drawings.annotationTypes.LINK_RECTANGLE:\n                mod = PJQ.models.drawings.LinkRectangle;\n                break;\n            case PJQ.constants.drawings.annotationTypes.LINK_ELLIPSE:\n                mod = PJQ.models.drawings.LinkEllipse;\n                break;\n            case PJQ.constants.drawings.annotationTypes.LINK_CLOUD:\n                mod = PJQ.models.drawings.LinkCloud;\n                break;\n            case PJQ.constants.drawings.annotationTypes.TEXT:\n                mod = PJQ.models.drawings.Text;\n                break;\n            case PJQ.constants.drawings.annotationTypes.PHOTO:\n                mod = PJQ.models.drawings.Photo;\n                break;\n            case PJQ.constants.drawings.annotationTypes.RULER:\n                mod = PJQ.models.drawings.Ruler;\n                break;\n            case PJQ.constants.drawings.annotationTypes.AREA_RECT:\n                mod = PJQ.models.drawings.AreaRectangle;\n                break;\n            case PJQ.constants.drawings.annotationTypes.RULER_FREE_FORM:\n                mod = PJQ.models.drawings.RulerFreeForm;\n                break;\n            case PJQ.constants.drawings.annotationTypes.AREA_FREE_FORM:\n                mod = PJQ.models.drawings.AreaFreeForm;\n                break;\n            case PJQ.constants.drawings.annotationTypes.PIN_RFI:\n                mod = PJQ.models.drawings.PinRFI;\n                break;\n            case PJQ.constants.drawings.annotationTypes.PIN_PUNCH_LIST_ITEM:\n                mod = PJQ.models.drawings.PinPunchListItem;\n                break;\n            case PJQ.constants.drawings.annotationTypes.PIN_ACTION_ITEM:\n                mod = PJQ.models.drawings.PinActionItem;\n                break;\n            case PJQ.constants.drawings.annotationTypes.PIN_SUBMITTAL:\n                mod = PJQ.models.drawings.PinSubmittal;\n                break;\n            default:\n                mod = PJQ.models.drawings.Annotation;\n                break;\n        }\n        return new mod(attrs, options)\n    },\n    merge: function (mergeAnnotations, contextId) {\n        let fnMerge = (annotation) => {\n            if ((contextId == null || annotation.get('contextId') === contextId) && (this.options.drawingId == null || this.options.drawingId === annotation.get('drawingId'))) {\n                if (annotation.id > 0) {\n                    let exist = this.findWhere({annotationId: annotation.id});\n                    if (exist != null) {\n                        this.remove(exist.cid);\n                    }\n                }\n                this.add(annotation);\n            }\n        }\n        if (PJQ.helpers.objectHelpers.refinedType(mergeAnnotations) === 'array') {\n            _.each(mergeAnnotations, (annotation) => {\n                fnMerge(annotation);\n            });\n        } else {\n            fnMerge(mergeAnnotations);\n        }\n    },\n    endpoint: function (options) {\n        if (!options) {\n            options = {};\n        }\n\n        options.isAPIv2 = this.options.isAPIv2 = [PJQ.constants.drawings.annotationTypes.PIN_RFI,\n            PJQ.constants.drawings.annotationTypes.PIN_PUNCH_LIST_ITEM,\n            PJQ.constants.drawings.annotationTypes.PIN_ACTION_ITEM,\n            PJQ.constants.drawings.annotationTypes.PIN_SUBMITTAL].indexOf(this.get('type')) !== -1;\n\n        let params;\n        if (_.size(this.options.context) > 0 && this.options.contextId > 0) {\n            params = [{\n                parameter: 'context',\n                value: this.options.context\n            }, {\n                parameter: 'contextId',\n                value: this.options.contextId\n            }];\n        } else {\n            params = [];\n        }\n\n        if (this.options.accessKey != null) {\n            params.push({\n                parameter: 'accessKey',\n                value: this.options.accessKey\n            });\n        }\n\n        return PJQ.helpers.urlHelpers.generateEndpoint([\n            {\n                endpoint: 'drawings',\n                value: this.options.drawingId\n            },\n            {\n                endpoint: 'annotations'\n            }\n        ], params);\n    },\n    saveAll: function (callback) {\n        let annotationsMap = {};\n        _.each(this.models, (annotation) => {\n            if (annotationsMap[annotation.get('drawingId')] == null) {\n                annotationsMap[annotation.get('drawingId')] = [];\n            }\n            annotation.beforeSave();\n            annotationsMap[annotation.get('drawingId')].push(annotation);\n        });\n\n        let saveAnnotations = _.map(annotationsMap, function (annotations) {\n            return annotations;\n        });\n        let changedCt = _.size(saveAnnotations),\n            saveNextAnnotation = (i) => {\n                if (changedCt < i + 1) {\n                    if (typeof callback === 'function') {\n                        callback();\n                    }\n                    return;\n                }\n                let thisSet = saveAnnotations[i];\n                if (_.size(thisSet) > 0) {\n                    let drawingId = thisSet[0].get('drawingId');\n                    new PJQ.ajax.Request({\n                        endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n                            {\n                                endpoint: 'drawings',\n                                value: drawingId\n                            },\n                            {\n                                endpoint: 'annotations'\n                            }\n                        ]),\n                        data: thisSet\n                    }).put().done(_.bind(function (response) {\n                        saveNextAnnotation(i + 1);\n                    }, this));\n                } else {\n                    saveNextAnnotation(i + 1);\n                }\n            };\n        saveNextAnnotation(0);\n    }\n});\n\nPJQ.collections.drawings.AnnotationAttachments = PJQ.collections.files.Files.extend({\n    model: PJQ.models.drawings.AnnotationAttachment\n});","PJQ.views.drawings.EditAnnotation = PJQ.views.BaseView.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'annotation-edit'),\n        subTemplates: {\n            textSizePicker: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'text-size-picker')\n        },\n        focusText: false,\n        isEditLink: false,\n        onShapeChange: null,\n        onPublish: null,\n        canEdit: false,\n        onDelete: null,\n        onClose: null,\n        onAnnotationDataChange: null,\n        onAttachmentChange: null,\n        onDrawingSelected: null\n    },\n    events: {\n        \"click .text-size-picker>button\": \"textSizeClicked\",\n        \"click .version-drawing-outer\": \"drawingClicked\",\n        \"click .btn-edit-link\": \"editLink\",\n        \"click .btn-save-link\": \"saveLink\",\n        \"click .btn-cancel-link\": \"cancelEditLink\",\n        \"click .view-punch-list-item\": \"viewPunchListItemClicked\",\n        \"click .view-action-item\": \"viewActionItemClicked\",\n        \"click .btn-publish-annotation\": \"publish\",\n        \"click .btn-delete-annotation\": \"delete\",\n        \"click .btn-close-annotation\": \"close\"\n    },\n    beforeFirstRender: function () {\n        let type = this.model.get('type');\n        if (type === PJQ.constants.drawings.annotationTypes.LINK_RECTANGLE || type === PJQ.constants.drawings.annotationTypes.LINK_ELLIPSE || type === PJQ.constants.drawings.annotationTypes.LINK_CLOUD) {\n            if (this.model.get('refType') == null) {\n                this.model.set('refType', PJQ.constants.drawings.refTypes.DRAWING);\n            }\n        }\n    },\n    renderData: function () {\n        return {\n            model: this.model,\n            versions: this.options.versions,\n            context: this.options.context,\n            isEditLink: this.options.isEditLink,\n            canEdit: this.options.canEdit,\n            isAdmin: this.options.isAdmin\n        };\n    },\n    afterRender: function () {\n        let type = this.model.get('type');\n        if (type === PJQ.constants.drawings.annotationTypes.LINK_RECTANGLE || type === PJQ.constants.drawings.annotationTypes.LINK_ELLIPSE || type === PJQ.constants.drawings.annotationTypes.LINK_CLOUD) {\n            new PJQ.inputs.Selectpicker({\n                el: this.$('.select-link-ref-type'),\n                defaultValue: this.model.get('refType'),\n                onChange: _.bind(function (value) {\n                    this.model.set('refType', value);\n                    this.render();\n                }, this)\n            });\n\n            let choices = _.map(_.sortBy(this.options.versions.getUniqueDrawings(), (drawing) => {\n                return drawing.get('sortOrder');\n            }), (drawing) => {\n                return {\n                    id: drawing.id,\n                    name: drawing.get('name')\n                };\n            });\n            this.refIdPicker = new PJQ.inputs.Selectpicker({\n                el: this.$('.select-link-ref-id'),\n                defaultValue: this.model.get('refId'),\n                isIntChoices: true,\n                isLiveSearch: true,\n                choices: choices,\n                size: 15,\n                onChange: _.bind(function (value) {\n                    if (value > 0 && this.model.get('refId') == null) {\n                        this.model.set('refId', value);\n                        this.render();\n                        this.onAnnotationDataChange();\n                    }\n                }, this)\n            });\n        } else if (type === PJQ.constants.drawings.annotationTypes.PHOTO) {\n            this.fileUploader = new PJQ.views.files.FileUploaderGrid({\n                el: this.$('.annotation-file-uploader'),\n                collection: this.model.attachments,\n                previewImageDimension: 140,\n                canUpload: this.options.canEdit,\n                canDelete: this.options.canEdit,\n                onSuccess: _.bind(function () {\n                    if (typeof this.options.onAttachmentChange === 'function') {\n                        this.options.onAttachmentChange(this.model);\n                    }\n                }, this),\n                onDelete: _.bind(function (attachment, callback) {\n                    if (attachment.id > 0) {\n                        attachment.set('isDeleted', true);\n                    } else {\n                        this.model.attachments.remove(attachment);\n                    }\n                    this.model.isDirty = true;\n\n                    attachment.set('drawingId', this.model.id);\n                    if (typeof this.options.onAttachmentChange === 'function') {\n                        this.options.onAttachmentChange(this.model);\n                    }\n                    callback();\n                }, this)\n            });\n        } else if (type === PJQ.constants.drawings.annotationTypes.TEXT) {\n            this.renderTextSizePicker();\n\n            if (this.options.focusText) {\n                this.$('.input-annotation-text').focus();\n            }\n        } else if (type === PJQ.constants.drawings.annotationTypes.PIN_PUNCH_LIST_ITEM) {\n            this.renderPunchListDetails();\n        } else if (type === PJQ.constants.drawings.annotationTypes.PIN_ACTION_ITEM) {\n            this.renderActionItemDetails();\n        }\n\n        new PJQ.Binder(this.$el, this.model, {\n            watchElements: [\n                'input',\n                'textarea'\n            ],\n            afterChange: _.bind(function (_, attribute) {\n                if (attribute === 'text') {\n                    this.onShapeChange();\n                } else {\n                    this.onAnnotationDataChange();\n                }\n            }, this)\n        });\n    },\n    editLink: function (e) {\n        e.stopPropagation();\n        this.options.isEditLink = true;\n        this.render();\n    },\n    saveLink: function () {\n        this.model.set('refId', this.refIdPicker.getValue());\n        this.onAnnotationDataChange();\n        this.cancelEditLink();\n    },\n    cancelEditLink: function () {\n        this.options.isEditLink = false;\n        this.render();\n    },\n    drawingClicked: function () {\n        if (typeof this.options.onDrawingSelected === 'function') {\n            let drawing = this.options.versions.getDrawing(this.model.get('refId'));\n            if (drawing != null) {\n                this.options.onDrawingSelected(drawing);\n            }\n        }\n    },\n    renderPunchListDetails: function () {\n        let canAdd = this.options.project.permissions.hasPermission('punchList.canAdd'),\n            choices,\n            fnMapItems = () => {\n                let items = _.map(this.punchListItems.models, (punchListItem) => {\n                    return {\n                        id: punchListItem.id,\n                        name: '<strong>' + punchListItem.get('itemNumber') + '</strong>' + \" - \" + punchListItem.get('title')\n                    };\n                });\n                if (!canAdd) {\n                    return items;\n                }\n\n                return [\n                    {\n                        name: '',\n                        choices: [\n                            {\n                                id: 0,\n                                name: '<i class=\"fal fa-plus mr-1\"></i>New Item'\n                            }\n                        ]\n                    },\n                    {\n                        name: '',\n                        choices: items\n                    }\n                ];\n            }\n\n        if (!(this.model.get('refId') > 0)) {\n            if (this.punchListItems != null) {\n                choices = fnMapItems();\n            } else {\n                choices = [];\n            }\n\n            let $selectItem = this.$('.select-punch-list-item'),\n                punchListItemSelect = new PJQ.inputs.Selectpicker({\n                    el: $selectItem,\n                    isLiveSearch: true,\n                    choices: choices,\n                    isIntChoices: true,\n                    pickerWidth: '275px',\n                    onChange: (value) => {\n                        if (value === 0) {\n                            punchListItemSelect.setValue(null);\n                            this.newPunchListItem();\n                            return;\n                        }\n\n                        let item = this.punchListItems.get(value);\n                        if (item == null) {\n                            return;\n                        }\n\n                        this.model.setPunchListItem(item);\n                        this.render();\n                        this.onAnnotationDataChange();\n                    }\n                });\n\n            let fnUpdateChoices = () => {\n                punchListItemSelect.updateChoices(fnMapItems());\n                setTimeout(() => {\n                    punchListItemSelect.toggle();\n                }, 100);\n            };\n            if (this.punchListItems != null) {\n                fnUpdateChoices();\n            } else {\n                let loader = new PJQ.Loader($selectItem);\n                this.options.project.fetchPunchListItems((punchListItems) => {\n                    loader.remove();\n                    this.punchListItems = punchListItems;\n                    fnUpdateChoices();\n                });\n            }\n        }\n    },\n    newPunchListItem: function () {\n        let newItem = new PJQ.models.punchlists.PunchlistItem({\n            projectId: this.options.project ? this.options.project.id : null\n        });\n        this.viewPunchListItem(newItem);\n    },\n    viewPunchListItemClicked: function (e) {\n        let target = $(e.currentTarget),\n            id = target.data('id'),\n            item = this.model.punchListItem;\n        if (item == null) {\n            item = new PJQ.models.punchlists.PunchlistItem({\n                id: id\n            })\n        }\n        this.viewPunchListItem(item);\n    },\n    viewPunchListItem: function (item) {\n        new PJQ.views.punchlists.PunchlistItemEditorModal({\n            model: item,\n            collection: this.punchListItems,\n            project: this.options.project,\n            onSave: () => {\n                this.model.setPunchListItem(item);\n                this.render();\n                this.onAnnotationDataChange();\n            }\n        });\n    },\n    renderActionItemDetails: function () {\n        let canAdd = this.options.project.permissions.hasPermission('actionItems.canAdd'),\n            choices,\n            fnMapItems = () => {\n                let items = _.map(this.actionItems.models, (actionItem) => {\n                    return {\n                        id: actionItem.id,\n                        name: '<strong>' + actionItem.get('itemNumber') + '</strong>' + \" - \" + actionItem.get('title')\n                    };\n                });\n                if (!canAdd) {\n                    return items;\n                }\n\n                return [\n                    {\n                        name: '',\n                        choices: [\n                            {\n                                id: 0,\n                                name: '<i class=\"fal fa-plus mr-1\"></i>New Item'\n                            }\n                        ]\n                    },\n                    {\n                        name: '',\n                        choices: items\n                    }\n                ];\n            }\n\n        if (this.model.actionItem == null) {\n            if (this.actionItems != null) {\n                choices = fnMapItems();\n            } else {\n                choices = [];\n            }\n\n            let $selectItem = this.$('.select-action-item'),\n                actionItemSelect = new PJQ.inputs.Selectpicker({\n                    el: $selectItem,\n                    isLiveSearch: true,\n                    choices: choices,\n                    isIntChoices: true,\n                    pickerWidth: '275px',\n                    onChange: (value) => {\n                        if (value === 0) {\n                            actionItemSelect.setValue(null);\n                            this.newActionItem();\n                            return;\n                        }\n\n                        let item = this.actionItems.get(value);\n                        if (item == null) {\n                            return;\n                        }\n\n                        this.model.setActionItem(item);\n                        this.render();\n                        this.onAnnotationDataChange();\n                    }\n                });\n\n            let fnUpdateChoices = () => {\n                actionItemSelect.updateChoices(fnMapItems());\n                setTimeout(() => {\n                    actionItemSelect.toggle();\n                }, 100);\n            };\n            if (this.actionItems != null) {\n                fnUpdateChoices();\n            } else {\n                let loader = new PJQ.Loader($selectItem);\n                this.options.project.fetchActionItems((actionItems) => {\n                    loader.remove();\n                    this.actionItems = actionItems;\n                    fnUpdateChoices();\n                });\n            }\n        }\n    },\n    newActionItem: function () {\n        let newItem = new PJQ.models.actionItems.ActionItem({\n            projectId: this.options.project ? this.options.project.id : null\n        });\n        this.viewActionItem(newItem);\n    },\n    viewActionItemClicked: function (e) {\n        let target = $(e.currentTarget),\n            id = target.data('id'),\n            item = this.model.actionItem\n        if (item == null) {\n            item = new PJQ.models.actionItems.ActionItem({\n                id: id\n            })\n        }\n        this.viewActionItem(item);\n    },\n    viewActionItem: function (item) {\n        new PJQ.views.actionItems.ActionItemEditorModal({\n            model: item,\n            collection: this.actionItems,\n            project: this.options.project,\n            onSave: () => {\n                this.model.setActionItem(item);\n                this.render();\n                this.onAnnotationDataChange();\n            }\n        });\n    },\n    renderTextSizePicker: function () {\n        this.renderSubTemplate(false, this.options.subTemplates.textSizePicker, this.$('.text-size-outer'), {\n            textSize: this.model.get('textSize')\n        });\n    },\n    textSizeClicked: function (e) {\n        e.stopPropagation();\n        this.model.set('textSize', parseInt($(e.currentTarget).data('textSize')));\n        this.renderTextSizePicker();\n        this.onShapeChange();\n    },\n    onAnnotationDataChange: function () {\n        if (typeof this.options.onAnnotationDataChange === 'function') {\n            this.options.onAnnotationDataChange(this.model);\n        }\n    },\n    onShapeChange: function () {\n        if (typeof this.options.onShapeChange === 'function') {\n            this.options.onShapeChange(this.model);\n        }\n    },\n    publish: function () {\n        if (typeof this.options.onPublish === 'function') {\n            this.options.onPublish(this.model);\n        }\n        this.render();\n    },\n    delete: function () {\n        if (typeof this.options.onDelete === 'function') {\n            this.options.onDelete(this.model);\n        }\n        this.close();\n    },\n    close: function () {\n        this.remove();\n        if (typeof this.options.onClose === 'function') {\n            this.options.onClose(this.model);\n        }\n    }\n});\n\n","PJQ.views.drawings.DrawingBatchModal = PJQ.views.BaseModal.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Modal-New-Drawing-Batch'),\n        step: 1,\n        subTemplates: {\n            batchHeader: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Drawing-Batch-Header'),\n            drawingTags: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Drawing-Tags'),\n            drawingDetailHeader: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Upload-Drawing-Detail-Header'),\n            sortDrawings: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Sort-Drawings')\n        },\n        isShowCloseButton: true\n    },\n    events: {\n        'click .btn-next-step': 'nextStep',\n        'click .btn-prev-step': 'previousStep',\n        'change .checkbox-new-version': 'useNewVersion',\n        'change .checkbox-existing-version': 'useExistingVersion',\n        'click .existing-version': 'existingVersionSelected',\n        'keyup .input-version-name': 'versionNameChanged',\n        'click .select-batch-drawing': 'viewBatchDrawing',\n        'click .btn-drawing-rotate-90': 'rotateBatchDrawing90Clicked',\n        'click .btn-drawing-rotate-180': 'rotateBatchDrawing180Clicked',\n        'click .btn-drawing-rotate-270': 'rotateBatchDrawing270Clicked',\n        'click .btn-drawing-delete': 'deleteBatchDrawing',\n        'click .btn-save': 'save',\n        'click .btn-publish': 'publish',\n        'click .btn-cancel': 'cancel',\n        'click .btn-close': 'closeModal',\n        'blur .input-drawing-name,.input-drawing-title,.input-drawing-tag': 'drawingBlur',\n        'focus .input-drawing-name,.input-drawing-title,.input-drawing-tag': 'drawingFocus',\n        'keydown .input-drawing-name': 'drawingNameKeydown',\n        'keyup .input-drawing-name': 'drawingNameChanged',\n        'keydown .input-drawing-title': 'drawingTitleKeydown',\n        'keyup .input-drawing-title': 'drawingTitleChanged',\n        'keydown .input-drawing-tag': 'drawingTagKeydown',\n        'keyup .input-drawing-tag': 'drawingTagChanged',\n        'click .btn-add-drawing-tag': 'addDrawingTagClicked',\n        'click .btn-delete-tag': 'deleteTagClicked',\n        'click .btn-upload-log': 'viewUploadLog',\n        'change .checkbox-add-current-set': 'addToCurrentSetChanged',\n        'change .checkbox-add-all-current-set': 'addAllToCurrentSetChanged',\n        'change .checkbox-replace-current-set': 'replaceCurrentSetChanged',\n        'change .cb-replace-existing-drawing': 'replaceExistingDrawingChanged',\n        'click .btn-highlight-area': 'highlightArea'\n    },\n    highlightArea: function (e) {\n        let drawing = this.model.drawings.models[0];\n        new PJQ.views.drawings.DrawingAreaHighlight({\n            model: drawing,\n            batch: this.model,\n            versions: this.options.versions,\n            onSave: _.bind(function (result) {\n                this.model.set({\n                    nameArea: result.layers.name,\n                    titleArea: result.layers.title\n                });\n                this.model.patch(this.model.attributes, {\n                    success: _.bind(function () {\n                        this.options.step = 3;\n                        this.render();\n                    }, this)\n                });\n            }, this)\n        });\n    },\n    beforeModalCreated: function () {\n        if (this.model == null) {\n            this.model = new PJQ.models.drawings.DrawingBatch({\n                projectId: this.options.project.id\n            });\n\n            if (this.options.version != null) {\n                this.model.version = this.options.version;\n                this.options.step = 2;\n            }\n        } else if (this.model.id > 0) {\n            // we are continuing an existing upload\n            this.options.step = 4;\n            this.model.fetch({\n                success: _.bind(function () {\n                    this.setCurrentSetDefaults();\n                    this.render();\n                }, this)\n            });\n        }\n    },\n    setCurrentSetDefaults: function () {\n        this.options.currentSetDefault = !PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.DRAWINGS_CURRENT_SET_DEFAULT_OFF);\n        if (this.model) {\n            _.each(this.model.drawings.models, function (drawing) {\n                drawing.set(\"isCurrentSet\", this.options.currentSetDefault);\n            }, this);\n        }\n    },\n    beforeRender: function () {\n        this.options.fitHeight = this.options.step === 5;\n\n        if (this.options.step === 4) {\n            let publishedIds = [];\n            _.each(this.model.drawings.models, function (drawing) {\n                if (drawing.get('isPublished')) {\n                    publishedIds.push(drawing.id);\n                }\n            });\n            this.model.drawings.remove(publishedIds);\n        }\n    },\n    getWidth: function () {\n        let result;\n        if (this.options.step === 4) {\n            result = {\n                minWidth: 400,\n                maxWidth: '80%',\n                width: 1200\n            };\n        } else {\n            result = {\n                minWidth: 600,\n                maxWidth: this.options.maxWidth,\n                width: this.options.width\n            };\n        }\n        return result;\n    },\n    renderData: function () {\n        return {\n            model: this.model,\n            versions: this.options.versions,\n            step: this.options.step\n        };\n    },\n    afterRender: function () {\n        switch (this.options.step) {\n            case 1:\n                this.initVersionSelect();\n                break;\n            case 2:\n                this.initFileUpload();\n                break;\n            case 3:\n                this.initBatchWait();\n                break;\n            case 4:\n                if (this.model.isFetched) {\n                    this.initBatchPublish();\n                }\n                break;\n            case 5:\n                this.initBatchSort();\n                break;\n        }\n    },\n    initVersionSelect: function () {\n        this.$(\".input-version-name\").focus();\n        new PJQ.inputs.Datepicker({\n            el: this.$('.input-version-date-issued'),\n            isShowTimezone: false,\n            datepickerOptions: {\n                format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE\n            },\n            onChange: _.bind(function (newDate) {\n                this.model.version.set('issuedOn', newDate);\n                this.validateNewVersion();\n            }, this)\n        });\n        this.useNewVersion();\n    },\n    initFileUpload: function () {\n        this.fileUploader = new PJQ.views.files.FileUploaderGrid({\n            el: this.$('.version-file-uploader'),\n            collection: this.model.uploads,\n            allowedExtensions: ['pdf', 'tif', 'tiff'],\n            style: 'list',\n            onSuccess: _.bind(this.dataChanged, this),\n            onFileStatusChange: _.bind(this.dataChanged, this),\n            onDrop: _.bind(this.dataChanged, this),\n            afterDelete: _.bind(this.dataChanged, this)\n        });\n    },\n    dataChanged: function () {\n        let uploadCount = _.size(this.model.uploads.models),\n            hasUploads = uploadCount > 0,\n            queued = 0,\n            uploading = 0,\n            success = 0;\n        _.each(this.model.uploads.models, function (upload) {\n            switch (upload.get('status')) {\n                case 'queued':\n                    queued++;\n                    break;\n                case 'uploading':\n                    uploading++;\n                    break;\n                case 'success':\n                    success++;\n                    break;\n            }\n\n            let $queued = $('<span class=\"text-primary mr-2\">Queued: ' + queued.toString() + '</span>');\n            if (queued === 0) {\n                $queued.addClass('op-6 font-weight-light');\n            }\n\n            let $uploaded = $('<span class=\"text-orange mr-2\">Uploading: ' + uploading.toString() + '</span>');\n            if (uploading === 0) {\n                $uploaded.addClass('op-6 font-weight-light');\n            }\n\n\n            let $success = $('<span class=\"text-success\">Uploaded: ' + success.toString() + '</span>');\n            if (success === 0) {\n                $success.addClass('op-6 font-weight-light');\n            }\n\n            this.$('.upload-files-status').empty().append([$queued, $uploaded, $success]);\n        }, this);\n        this.$('.btn-next-step').prop('disabled', !hasUploads || this.fileUploader.isUploading());\n    },\n    initBatchWait: function () {\n        if (this.model.get('status') === 0 || this.model.get('status') === 1) {\n            this.checkBatchStatus();\n        } else {\n            this.options.step++;\n            this.render();\n        }\n    },\n    initBatchPublish: function () {\n        this.refreshTags();\n\n        this.drawingVersionCounts = {};\n        this.fullSet = null;\n\n        _.each(_.filter(this.model.drawings.models, _.bind(function (drawing) {\n            return !drawing.get('isPublished');\n        }), this), _.bind(function (drawing) {\n\n            if (_.size(drawing.get('name')) > 0 && _.size(drawing.get('tags')) == 0) {\n                let matchedDrawing = null;\n                _.each(this.options.versions.models, function (version) {\n                    if (matchedDrawing == null) {\n                        _.each(version.drawings.models, function (model) {\n                            if (model.get('name') === drawing.get('name') && matchedDrawing == null && _.size(model.get('tags')) > 0) {\n                                matchedDrawing = model;\n                                drawing.set('tags', matchedDrawing.get('tags'));\n                            }\n                        });\n                    }\n                });\n            }\n\n            this.renderBatchDrawing(drawing);\n        }, this));\n        this.renderBatchDrawingAutoCompletes();\n\n        this.renderReplaceCurrentSet();\n\n        PJQ.app.lazyLoad().update();\n    },\n    renderBatchDrawingAutoCompletes: function () {\n        new PJQ.inputs.AutocompleteInput({\n            el: this.$('.input-drawing-name'),\n            onSelect: (sel) => {\n                this.drawingNameChanged(sel.e);\n            },\n            source: (req, res) => {\n                if (_.size(req.term) === 0) {\n                    return [];\n                }\n                res(_.filter(this.names, function (name) {\n                    if (name.toLowerCase().indexOf(req.term.toLowerCase()) !== -1) {\n                        return name;\n                    }\n                }));\n            }\n        });\n\n        if (!PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DRAWING_HIDE_TAG)) {\n            new PJQ.inputs.AutocompleteInput({\n                el: this.$('.input-drawing-tag'),\n                source: _.bind(function (req, res) {\n                    if (_.size(req.term) === 0) {\n                        return [];\n                    }\n                    res(_.filter(this.options.tags, function (tag) {\n                        if (tag.toLowerCase().indexOf(req.term.toLowerCase()) !== -1) {\n                            return tag;\n                        }\n                    }));\n                }, this)\n            });\n        }\n    },\n    getBatchDrawingElement: function (drawing) {\n        return this.$('.batch-drawing[data-cid=\"' + drawing.cid + '\"]')\n    },\n    renderBatchDrawing: function (drawing) {\n        if (this.fullSet == null) {\n            this.fullSet = this.options.versions.getUniqueDrawings();\n            this.names = [];\n            _.each(this.fullSet, _.bind(function (fullSetDrawing) {\n                let drawingName = fullSetDrawing.get('name');\n                if (this.names.indexOf(drawingName) === -1) {\n                    this.names.push(drawingName);\n                }\n            }, this));\n        }\n\n        let $drawing = this.getBatchDrawingElement(drawing),\n            $header = $drawing.find('.drawing-details-header');\n\n        let inCurrentSet = false,\n            curSet = this.options.versions.get(-1);\n        if (curSet != null) {\n            inCurrentSet = curSet.drawings.findWhere({name: drawing.get('name')}) != null;\n        }\n        this.drawingVersionCounts[drawing.cid] = this.options.versions.getVersionStatsForDrawing(drawing);\n        if (!this.drawingVersionCounts[drawing.cid].same) {\n            drawing.set('keepExisting', false);\n        }\n\n        this.renderSubTemplate(false, this.options.subTemplates.drawingDetailHeader, $header, {\n            inCurrentSet: inCurrentSet,\n            versionCount: this.drawingVersionCounts[drawing.cid],\n            drawing: drawing\n        });\n\n        this.renderDrawingTags(drawing);\n\n        this.renderBatchHeader();\n    },\n    renderBatchHeader: function () {\n        let newCount = 0,\n            revisedCount = 0;\n        _.each(this.drawingVersionCounts, function (count, cid) {\n            let drawing = this.model.drawings.get(cid);\n            if (drawing == null || drawing.get('isDeleted')) {\n                return;\n            }\n\n            if (count.older + count.newer > 0) {\n                revisedCount++;\n            } else {\n                newCount++;\n            }\n        }, this);\n        this.renderSubTemplate(false, this.options.subTemplates.batchHeader, this.$('.batch-header'), {\n            currentSetDefault: this.options.currentSetDefault,\n            replaceCurrentSet: this.model.get('replaceCurrentSet'),\n            newCount: newCount,\n            revisedCount: revisedCount,\n            totalCount: newCount + revisedCount\n        });\n    },\n    initBatchSort: function () {\n        this.sortDrawingsView = new PJQ.views.drawings.SortDrawings({\n            el: this.$('.sort-drawings'),\n            batch: this.model,\n            versions: this.options.versions,\n            afterRender: () => {\n                this.$('.drawings-sort').css('height', parseInt(this.$('.modal-body').css('min-height')) - 220);\n            }\n        });\n    },\n    checkBatchStatus: function () {\n        this.model.fetchStatus(_.bind(function (status) {\n            if (status === 0 || status === 1) {\n                this.model.statusTimeout = setTimeout(_.bind(function () {\n                    this.checkBatchStatus();\n                }, this), 2000);\n            } else {\n                this.model.fetch({\n                    success: _.bind(function () {\n                        this.setCurrentSetDefaults();\n                        this.render();\n                    }, this)\n                });\n            }\n        }, this));\n    },\n    viewUploadLog: function () {\n        this.close();\n        new PJQ.views.drawings.DrawingUploadLogModal({\n            project: this.options.project,\n            versions: this.options.versions\n        });\n    },\n    validateNewVersion: function (onSave = false) {\n        let $name = this.$('.input-version-name'),\n            versionNameExists = false,\n            isNameValid = !onSave || _.size(this.model.version.get('name')) > 0,\n            $issuedOn = this.$('.input-version-date-issued'),\n            isIssuedValid = !onSave || this.model.version.get('issuedOn') != null;\n\n        let newerVersionCount = 0;\n        _.each(this.options.versions.models, _.bind(function (version) {\n            if (new Date(this.model.version.get('issuedOn')) < new Date(version.get('issuedOn'))) {\n                newerVersionCount++;\n            }\n\n            if (this.model.version.get('name').toLowerCase() === version.get('name').toLowerCase()) {\n                versionNameExists = true;\n            }\n        }, this));\n        isNameValid = isNameValid && !versionNameExists;\n\n        PJQ.helpers.inputHelpers.setInputError($name, isNameValid);\n        PJQ.helpers.inputHelpers.setInputError($issuedOn, isIssuedValid);\n\n        let errors = '';\n        if (newerVersionCount > 0) {\n            errors += '<div class=\"text-info\">There are ' + newerVersionCount.toString() + ' versions newer than this</div>';\n        }\n        if (versionNameExists) {\n            errors += '<div class=\"text-danger\">There is already a version with this name</div>';\n        }\n        this.$('.new-version-errors').html('<div>' + errors + '</div>');\n\n        return isNameValid && isIssuedValid;\n    },\n    previousStep: function () {\n        // this should only be allowed when going back from sorting to naming\n        this.options.step--;\n        this.render();\n    },\n    nextStep: function () {\n        switch (this.options.step) {\n            case 1:\n                let hasFiles = _.size(this.model.files.models) > 0;\n                if (this.model.version.isNew()) {\n                    let isValid = this.validateNewVersion(true);\n                    if (isValid) {\n                        this.options.versions.add(this.model.version);\n                        this.model.version.save(null, {\n                            success: _.bind(function () {\n                                if (hasFiles) {\n                                    //skip the upload step\n                                    this.options.step = this.options.step + 2;\n                                    this.model.save(null, {\n                                        success: _.bind(function () {\n                                            this.render();\n                                        }, this)\n                                    });\n                                } else {\n                                    this.options.step++;\n                                    this.render();\n                                }\n                            }, this)\n                        });\n                    }\n                } else if (hasFiles) {\n                    //skip the upload step\n                    this.options.step = this.options.step + 2;\n                    this.model.save(null, {\n                        success: _.bind(function () {\n                            this.render();\n                        }, this)\n                    });\n                } else {\n                    this.options.step++;\n                    this.render();\n                }\n                break;\n            case 2:\n                this.model.save({\n                    guid: this.fileUploader.options.uuid\n                }, {\n                    success: _.bind(function () {\n                        this.options.step++;\n                        this.render();\n                    }, this)\n                });\n                break;\n            case 4:\n                let invalidDrawings = [];\n                _.each(this.model.drawings.models, function (drawing) {\n                    if (drawing.get('isDeleted')) {\n                        return;\n                    }\n\n                    let isValid = true;\n                    if (_.find(this.model.drawings.models, function (existingDrawing) {\n                        return existingDrawing.get('name') === drawing.get('name') && existingDrawing.id !== drawing.id && !existingDrawing.get('isDeleted');\n                    }) != null) {\n                        invalidDrawings.push(drawing);\n                        isValid = false;\n                    }\n                    let $drawing = this.getBatchDrawingElement(drawing);\n                    PJQ.helpers.inputHelpers.setInputError($drawing.find('.input-drawing-name'), isValid);\n                }, this);\n\n                if (_.size(invalidDrawings) > 0) {\n                    this.setBatchError(\"Some drawings have duplicated names, please fix these before finalizing\");\n                } else {\n                    this.setBatchError();\n                    this.options.step++;\n                    this.render();\n                }\n                break;\n            default:\n                this.options.step++;\n                this.render();\n                break;\n        }\n    },\n    setBatchError: function (error) {\n        let $err = this.$('.batch-error');\n        if (error != null) {\n            $err.html(error);\n        } else {\n            $err.empty();\n        }\n    },\n    versionNameChanged: function (e) {\n        let val = $(e.currentTarget).val(),\n            valLen = _.size(val);\n        if (valLen > 0 && e.keyCode === 13) {\n            this.nextStep();\n            return;\n        }\n        this.model.version.set(\"name\", val);\n        this.$(\".btn-next-step\").prop('disabled', valLen === 0);\n        this.validateNewVersion();\n    },\n    useNewVersion: function () {\n        this.$('.checkbox-new-version').prop('checked', true);\n        this.$('.checkbox-existing-version').prop('checked', false);\n        this.$('.new-version').removeClass('disabled');\n        this.$('.existing-versions').addClass('disabled');\n        this.model.version = new PJQ.models.drawings.Version({\n            projectId: this.options.project.id,\n            name: this.$('.input-version-name').val()\n        });\n    },\n    useExistingVersion: function () {\n        this.$('.checkbox-existing-version').prop('checked', true);\n        this.$('.checkbox-new-version').prop('checked', false);\n        this.$('.existing-versions').removeClass('disabled');\n        this.$('.new-version').addClass('disabled');\n        this.$(\".btn-next-step\").prop('disabled', false);\n        this.model.version = this.options.versions.get(this.$('.existing-version.selected').data('cid'));\n    },\n    existingVersionSelected: function (e) {\n        let $target = $(e.currentTarget);\n        this.$('.existing-version').removeClass('selected');\n        $target.addClass('selected');\n        this.model.version = this.options.versions.get($target.data('cid'));\n    },\n    viewBatchDrawing: function (e) {\n        this.$el.addClass('hidden');\n\n        let $drawing = $(e.currentTarget).closest('.batch-drawing'),\n            cid = $drawing.data('cid'),\n            drawing = this.model.drawings.get(cid);\n        new PJQ.views.drawings.DrawingViewer({\n            model: drawing,\n            batch: this.model,\n            showSortableViewLink: false,\n            isEdit: true,\n            versions: this.options.versions,\n            onClose: (changed) => {\n                this.$el.removeClass('hidden');\n                if (changed) {\n                    this.render();\n                }\n            }\n        });\n    },\n    rotateBatchDrawing90Clicked: function (e) {\n        let $row = $(e.currentTarget).closest('.batch-drawing'),\n            cid = $row.data('cid'),\n            drawing = this.model.drawings.get(cid);\n        this.rotateDrawing(drawing, 90);\n    },\n    rotateBatchDrawing180Clicked: function (e) {\n        let $row = $(e.currentTarget).closest('.batch-drawing'),\n            cid = $row.data('cid'),\n            drawing = this.model.drawings.get(cid);\n        this.rotateDrawing(drawing, 180);\n    },\n    rotateBatchDrawing270Clicked: function (e) {\n        let $row = $(e.currentTarget).closest('.batch-drawing'),\n            cid = $row.data('cid'),\n            drawing = this.model.drawings.get(cid);\n        this.rotateDrawing(drawing, 270);\n    },\n    rotateDrawing: function (drawing, degrees) {\n        let $drawing = this.getBatchDrawingElement(drawing),\n            rotateLoader = new PJQ.Loader($drawing);\n        drawing.rotate(degrees, _.bind(function () {\n            rotateLoader.remove();\n            $drawing.find('.batch-drawing-thumb').attr('src', drawing.thumbUrl());\n            $drawing.find('.batch-drawing-crop').attr('src', drawing.cropUrl());\n            this.renderBatchDrawing(drawing);\n        }, this));\n    },\n    deleteBatchDrawing: function (e) {\n        let $row = $(e.currentTarget).closest('.batch-drawing'),\n            cid = $row.data('cid'),\n            drawing = this.model.drawings.get(cid);\n        drawing.set('isDeleted', true);\n        $row.remove();\n        this.renderBatchHeader();\n    },\n    drawingBlur: function () {\n        this.$('.batch-drawing').removeClass('focus');\n    },\n    drawingFocus: function (e) {\n        let $target = $(e.currentTarget),\n            $drawing = $target.closest('.batch-drawing');\n        this.drawingBlur();\n        $drawing.addClass('focus');\n        $target.select();\n    },\n    drawingCenter: function ($drawing) {\n        this.$el.scrollTop($drawing.position().top - $drawing.height())\n    },\n    drawingNameKeydown: function (e) {\n        let $drawing = $(e.currentTarget).closest('.batch-drawing');\n        if (e.which === 13 || (e.shiftKey && e.which === 40)) {\n            let $next = this.nextDrawing($drawing);\n            if (_.size($next) > 0) {\n                $next.find('.input-drawing-name').focus();\n            } else {\n                this.firstDrawing().find('.input-drawing-title').focus();\n            }\n        } else if (e.shiftKey && (e.which === 8 || e.which === 38)) {\n            let $prev = this.prevDrawing($drawing);\n            $prev.find('.input-drawing-name').focus();\n        }\n    },\n    drawingNameChanged: function (e) {\n        let $target = $(e.target),\n            $drawing = $target.closest('.batch-drawing'),\n            cid = $drawing.data('cid'),\n            drawing = this.model.drawings.get(cid),\n            name = $target.val(),\n            matchedDrawing = null;\n        _.each(this.options.versions.models, function (version) {\n            if (matchedDrawing == null) {\n                _.each(version.drawings.models, function (drawing) {\n                    if (drawing.get('name') === name && (matchedDrawing == null || _.size(matchedDrawing.get('title')) === 0)) {\n                        matchedDrawing = drawing;\n                    }\n                });\n            }\n        });\n\n        if (matchedDrawing != null) {\n            let title = matchedDrawing.get('title'),\n                tags = matchedDrawing.get('tags');\n            drawing.set({\n                name: name,\n                title: title,\n                tags: tags\n            });\n            $drawing.find('.input-drawing-title').val(title);\n            this.renderDrawingTags(drawing, null);\n        } else {\n            drawing.set({\n                name: name\n            });\n        }\n\n        this.renderBatchDrawing(drawing);\n    },\n    drawingTitleKeydown: function (e) {\n        let $drawing = $(e.currentTarget).closest('.batch-drawing');\n        if (e.which === 13 || (e.shiftKey && e.which === 40)) {\n            let $next = this.nextDrawing($drawing);\n            if (_.size($next) > 0) {\n                $next.find('.input-drawing-title').focus();\n            } else {\n                this.firstDrawing().find('.input-drawing-tag').focus();\n            }\n        } else if (e.shiftKey && (e.which === 8 || e.which === 38)) {\n            let $prev = this.prevDrawing($drawing);\n            $prev.find('.input-drawing-title').focus();\n            return false;\n        }\n    },\n    drawingTitleChanged: function (e) {\n        let $target = $(e.currentTarget),\n            cid = $target.closest('.batch-drawing').data('cid'),\n            drawing = this.model.drawings.get(cid);\n        drawing.set('title', $target.val());\n    },\n    drawingTagKeydown: function (e) {\n        let $target = $(e.currentTarget),\n            tag = $target.val(),\n            $drawing = $target.closest('.batch-drawing'),\n            drawing = this.model.drawings.get($drawing.data('cid'));\n        if (e.shiftKey && (e.which === 13 || e.which === 40)) {\n            let $next = this.nextDrawing($drawing);\n            $next.find('.input-drawing-tag').focus();\n            return false;\n        } else if (e.shiftKey && (e.which === 8 || e.which === 38)) {\n            let $prev = this.prevDrawing($drawing);\n            $prev.find('.input-drawing-tag').focus();\n            return false;\n        } else if (e.which === 13) {\n            this.addDrawingTags(drawing, tag);\n            $target.val('');\n            return false;\n        } else if (e.which === 9) {\n            this.nextDrawing($drawing);\n        }\n    },\n    firstDrawing: function () {\n        let $firstDrawing = this.$('.batch-drawing').first();\n        this.drawingCenter($firstDrawing);\n        return $firstDrawing;\n    },\n    prevDrawing: function ($drawing) {\n        let $prevDrawing = $drawing.prev();\n        if (_.size($prevDrawing) > 0) {\n            this.drawingCenter($prevDrawing);\n        }\n        return $prevDrawing;\n    },\n    nextDrawing: function ($drawing) {\n        let $nextDrawing = $drawing.next();\n        if (_.size($nextDrawing) > 0) {\n            this.drawingCenter($nextDrawing);\n        }\n        return $nextDrawing;\n    },\n    drawingTagChanged: function (e) {\n        let $target = $(e.currentTarget);\n        $target.siblings('.btn-add-drawing-tag').prop('disabled', _.size($target.val()) === 0);\n    },\n    addDrawingTagClicked: function (e) {\n        let $target = $(e.currentTarget),\n            $drawing = $target.closest('.batch-drawing'),\n            $tag = $drawing.find('.input-drawing-tag'),\n            tag = $tag.val();\n        if (_.size(tag) > 0) {\n            let drawing = this.model.drawings.get($drawing.data('cid'));\n            this.addDrawingTags(drawing, tag);\n            $tag.val('');\n        }\n    },\n    deleteTagClicked: function (e) {\n        let $target = $(e.currentTarget),\n            tagName = $target.closest('.drawing-tag').data('name'),\n            $drawing = $target.closest('.batch-drawing'),\n            drawing = this.model.drawings.get($drawing.data('cid'));\n        drawing.deleteTag(tagName, null, _.bind(function () {\n            this.refreshTags();\n            this.renderDrawingTags(drawing, _.bind(function ($drawing) {\n                $drawing.find('.input-drawing-tag').focus();\n            }, this));\n        }, this));\n    },\n    addDrawingTags: function (drawing, tag) {\n        let tags = [];\n        if (_.size(tag) > 0) {\n            _.each(tag.split(','), function (tag) {\n                let tagTrim = tag.trim();\n                if (_.size(tagTrim) > 0) {\n                    tags.push(tagTrim);\n                }\n            });\n        }\n\n        drawing.addTags(tags, {\n            save: false\n        }, _.bind(function () {\n            this.refreshTags();\n            this.renderDrawingTags(drawing, _.bind(function ($drawing) {\n                $drawing.find('.input-drawing-tag').focus();\n            }, this));\n        }, this));\n    },\n    renderDrawingTags: function (drawing, callback) {\n        let $drawing = this.getBatchDrawingElement(drawing);\n        this.renderSubTemplate(false, this.options.subTemplates.drawingTags, $drawing.find('.drawing-tags'), {\n            tags: drawing.get('tags')\n        }, function () {\n            if (typeof callback === 'function') {\n                callback($drawing);\n            }\n        });\n    },\n    refreshTags: function () {\n        let batchTags = [];\n        _.each(this.model.drawings.models, function (drawing) {\n            let drawingTags = drawing.get('tags');\n            if (_.size(drawingTags) > 0) {\n                batchTags.push(...drawingTags);\n            }\n        });\n\n        this.options.tags = [];\n        _.each(_.union(_.uniq(batchTags), this.options.versions.getDrawingTags()), _.bind(function (tag) {\n            if (_.size(tag) > 0 && this.options.tags.indexOf(tag) === -1) {\n                this.options.tags.push(tag);\n            }\n        }, this));\n    },\n    addAllToCurrentSetChanged: function (e) {\n        this.addAllToCurrent($(e.currentTarget).prop('checked'));\n    },\n    addAllToCurrent: function (shouldAdd) {\n        this.$('.checkbox-add-all-current-set,.checkbox-add-current-set').prop('checked', shouldAdd);\n        _.each(this.model.drawings.models, function (drawing) {\n            drawing.set('isCurrentSet', shouldAdd);\n        });\n    },\n    replaceCurrentSetChanged: function (e) {\n        let $target = $(e.currentTarget),\n            replaceCurrent = $target.prop('checked');\n        this.model.set('replaceCurrentSet', replaceCurrent);\n        this.addAllToCurrent(true);\n        this.renderReplaceCurrentSet();\n    },\n    renderReplaceCurrentSet: function () {\n        this.$('.checkbox-add-all-current-set,.checkbox-add-current-set').prop('disabled', this.model.get('replaceCurrentSet'));\n    },\n    addToCurrentSetChanged: function (e) {\n        let $target = $(e.currentTarget),\n            cid = $target.closest('.batch-drawing').data('cid'),\n            drawing = this.model.drawings.get(cid),\n            addCurrent = $target.prop('checked');\n\n        drawing.set('isCurrentSet', addCurrent);\n\n        if (!addCurrent) {\n            this.$('.checkbox-add-all-current-set').prop('checked', false);\n        }\n    },\n    replaceExistingDrawingChanged: function (e) {\n        let $target = $(e.currentTarget),\n            cid = $target.closest('.batch-drawing').data('cid'),\n            drawing = this.model.drawings.get(cid),\n            replaceExisting = $target.prop('checked');\n        drawing.set('keepExisting', !replaceExisting);\n    },\n    cancel: function () {\n        if (this.options.step === 4 || this.options.step === 5) {\n            new PJQ.views.modals.SaveDontSave({\n                header: \"Unsaved Changes\",\n                body: \"Do you want to save changes?\",\n                onSave: _.bind(function () {\n                    this.save();\n                }, this),\n                onDontSave: _.bind(function () {\n                    this.removeModal();\n                }, this)\n            });\n        } else {\n            this.removeModal();\n        }\n    },\n    closeModal: function () {\n        this.removeModal();\n        if (this.model.statusTimeout != null) {\n            clearTimeout(this.model.statusTimeout);\n            this.model.statusTimeout = null;\n        }\n    },\n    close: function () {\n        if (this.options.step === 3) {\n            this.closeModal();\n        } else {\n            this.cancel();\n        }\n    },\n    save: function () {\n        this.model.save(null, {\n            success: _.bind(function () {\n                this.removeModal();\n            }, this)\n        });\n    },\n    autoNotify: function (callback) {\n        let verAppend = null,\n            verName = '';\n        if (this.options.versions != null) {\n            let version = this.options.versions.get(this.model.get('versionId'));\n            if (version != null) {\n                verName = version.get('name');\n                verAppend = ' (' + verName + ')';\n            }\n        }\n\n        this.model = new PJQ.models.drawings.DrawingBatchNotification({\n            batchId: this.model.id,\n            subject: 'Drawings Published to ' + this.options.project.get('projectName') + (verAppend ?? \"\"),\n            message: 'New drawings have been published to ' + this.options.project.get('projectName') + ' - <b>Version:</b> ' + verName + '.',\n            allProjectContacts: true\n        });\n        this.model.save(null, {\n            notify: false,\n            success: () => {\n                callback();\n            },\n            error: () => {\n                callback();\n            }\n        });\n    },\n    publish: function (callback) {\n        let hasNonCurSetPublish = _.find(this.model.drawings.models, function (drawing) {\n                return drawing.get('versionId') === this.model.get('versionId') && drawing.get('isCurrentSet') === false;\n            }, this) != null,\n            fnPublish = (billRawFileUploadId, billDeerfieldTicketId, notes) => {\n                new PJQ.Loader(this.$('.modal-content'));\n                this.model.save(null, {\n                    urlOptions: {\n                        publish: true,\n                        billRawFileUploadId: billRawFileUploadId,\n                        billDeerfieldTicketId: billDeerfieldTicketId,\n                        notes: notes\n                    },\n                    success: () => {\n                        if ((billRawFileUploadId > 0 || billDeerfieldTicketId > 0) && this.model.get('docClerkOrderId') > 0) {\n                            new PJQ.views.BaseModal({\n                                header: \"Doc Clerk Order Created\",\n                                body: 'The Order ID is ' + this.model.get('docClerkOrderId'),\n                                isShowCancelButton: false\n                            });\n                        }\n\n                        this.autoNotify(() => {\n                            this.options.versions.fetch({\n                                success: () => {\n                                    this.removeModal();\n\n                                    if (typeof callback === 'function') {\n                                        callback();\n                                    }\n                                }\n                            });\n                        });\n                    }\n                });\n            },\n            fnPrePublish = _.bind(function () {\n                if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_DOCUMENT_CLERK) && PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_RAW_FILE_UPLOAD_BILLING)) {\n                    new PJQ.views.drawings.RawFileUploadBilling({\n                        onContinue: _.bind(function (rawFileUploadId, deerfieldTicketId, notes) {\n                            fnPublish(rawFileUploadId, deerfieldTicketId, notes);\n                        }, this),\n                        onSkip: _.bind(function () {\n                            fnPublish();\n                        }, this)\n                    });\n                } else\n                    fnPublish();\n            }, this);\n\n        if (hasNonCurSetPublish) {\n            new PJQ.views.BaseModal({\n                header: \"Confirm Publish\",\n                okButtonText: \"Confirm\",\n                isShowSecondaryButton: true,\n                secondaryButtonText: \"Cancel\",\n                body: \"You have selected for some drawings to not be published as part of the current set.  Please confirm this selection.\",\n                onOk: _.bind(function () {\n                    fnPrePublish();\n                }, this)\n            });\n        } else {\n            fnPrePublish();\n        }\n    }\n});\n\nPJQ.views.drawings.RawFileUploadBilling = PJQ.views.BaseModal.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Modal-Raw-File-Upload-Billing'),\n        onSkip: _.noop(),\n        onContinue: _.noop()\n    },\n    events: {\n        'click .billing-skip': 'skipBilling',\n        'click .billing-continue': 'continueBilling'\n    },\n    afterRender: function () {\n        this.$('.billing-id').inputmask({\n            alias: \"integer\",\n            prefix: \"\",\n            digits: 0,\n            placeholder: \" \",\n            clearMaskOnLostFocus: true,\n            rightAlign: false\n        });\n\n        this.billingReferenceSelectPicker = new PJQ.inputs.Selectpicker({\n            el: this.$('.billing-reference'),\n            isIntChoices: false,\n            isMultiple: false,\n            mustSelectValue: true,\n            defaultValue: 'rawFileUploadId'\n        });\n    },\n    skipBilling: function () {\n        if (typeof this.options.onSkip === 'function') {\n            this.options.onSkip();\n            this.removeModal();\n        } else\n            this.removeModal();\n    },\n    continueBilling: function () {\n        let rawFileUploadId = 0,\n            deerfieldTicketId = 0;\n\n        if (this.billingReferenceSelectPicker.getValue() === 'rawFileUploadId')\n            rawFileUploadId = parseInt(this.$('.billing-id').val());\n        else\n            deerfieldTicketId = parseInt(this.$('.billing-id').val());\n\n        let rawFileUpload = new PJQ.models.rawFileUploads.RawFileUpload({\n            rawFileUploadId: rawFileUploadId,\n            projectId: PJQ.app.session.project.id\n        });\n\n        if (rawFileUploadId > 0) {\n            rawFileUpload.fetch({\n                success: _.bind(function () {\n                    this.options.onContinue(rawFileUpload.id, null, this.$('.notes').val());\n                    this.removeModal();\n                }, this),\n                error: _.bind(function () {\n                    PJQ.notifications.notify.errorNotify({\n                        message: 'Raw Upload Id not found, or does not match this Project.'\n                    });\n                }, this)\n            });\n        } else if (deerfieldTicketId > 0) {\n            this.options.onContinue(null, deerfieldTicketId, this.$('.notes').val());\n            this.removeModal();\n        } else {\n            PJQ.notifications.notify.errorNotify({\n                message: 'Enter Raw Upload Id or Deerfield Ticket Id to continue.'\n            });\n        }\n    }\n});","PJQ.views.drawings.Dashboard = PJQ.views.BaseView.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Dashboard'),\n        view: 'grid',\n        mode: PJQ.constants.drawings.dashboardModes.VIEW,\n        subTemplates: {\n            versionGrid: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Dashboard-Version-Grid'),\n            versionList: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Dashboard-Version-List'),\n            versionStats: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Dashboard-Version-Stats'),\n            versionSelect: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Drawing-Viewer-Version-Selector'),\n            emptyState: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Dashboard-Empty-State')\n        },\n        isReadOnly: false\n    },\n    events: {\n        'click .btn-share-drawings': 'shareDrawings',\n        'click .btn-download-all-split': 'downloadAllSplit',\n        'click .btn-download-all-merged': 'downloadAllMerged',\n        'click .btn-download-version-split': 'downloadContextVersionSplit',\n        'click .btn-download-version-merged': 'downloadContextVersionMerged',\n        'click .btn-download-filtered-split': 'downloadFilteredSplit',\n        'click .btn-download-filtered-merged': 'downloadFilteredMerged',\n        'click .btn-download-advanced': 'downloadAdvanced',\n        'click .btn-export-drawing-list': 'exportDrawingList',\n        'click .btn-order-version': 'orderContextVersion',\n        'click .btn-order-filtered': 'orderFiltered',\n        'click .btn-order-advanced': 'orderAdvanced',\n        'click .btn-bulk-tag': 'bulkTag',\n        'click .btn-sort-version': 'sortVersion',\n        'click .btn-save-version': 'saveVersion',\n        'click .btn-edit-version': 'editVersion',\n        'keyup .input-drawing-name': 'drawingNameChanged',\n        'keyup .input-drawing-title': 'drawingTitleChanged',\n        'click .btn-cancel-edit-version': 'cancelEditVersion',\n        'click .btn-new-batch': 'newBatch',\n        'click .version-drawing-outer': 'drawingClicked',\n        'click .version-select': 'versionSelected',\n        'click .btn-manage-versions': 'manageVersions',\n        'click .btn-upload-log': 'viewUploadLog',\n        'keyup .input-drawings-search': 'renderContextVersion',\n        'click .btn-view-grid': 'renderViewGrid',\n        'click .btn-view-list': 'renderViewList',\n        'click .btn-delete-drawing': 'deleteDrawing',\n        'click .btn-drawing-rotate-90': 'rotateBatchDrawing90Clicked',\n        'click .btn-drawing-rotate-180': 'rotateBatchDrawing180Clicked',\n        'click .btn-drawing-rotate-270': 'rotateBatchDrawing270Clicked',\n    },\n    contextVersion: null,\n    beforeFirstRender: function () {\n        this.options.canEdit = PJQ.app.session.project != null\n            && PJQ.app.session.project.hasPermission('drawings.isAdmin')\n            && (PJQ.app.session.project.get('masterUserId') === PJQ.app.session.get('masterUserId'));\n        if (PJQ.app.session.user == null || (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_DOCUMENT_CLERK_COMPANY) && PJQ.app.session.user.id !== 81732 &&\n            !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_DOCUMENT_CLERK))) {\n            this.options.canEdit = false;\n        }\n        this.options.canShare = PJQ.app.session.project != null\n            && PJQ.app.session.project.hasPermission('drawings.canShare')\n            && (PJQ.app.session.project.get('masterUserId') === PJQ.app.session.get('masterUserId'))\n            && (!PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_SHARE_PEI)) &&\n            (this.options.orderSettings == null || (this.options.orderSettings.get('downloadPerFileFee') === 0 || !PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_ADMIN_PAID_DOWNLOADS)));\n\n        this.options.canDownload = true;\n        this.options.isPaidDownload = false;\n        this.options.canOrder = !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_ORDER_PRINT);\n\n        if (!this.options.orderSettings && PJQ.app.session.project && PJQ.app.session.project.orderSettings)\n            this.options.orderSettings = PJQ.app.session.project.orderSettings;\n\n        if (this.options.orderSettings && PJQ.app.session.project != null && !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_DOCUMENT_CLERK)) {\n            this.options.canDownload = this.options.orderSettings.get('downloadPerFileFee') === 0 || PJQ.app.session.project.get('masterUserId') === PJQ.app.session.get('masterUserId');\n            this.options.isPaidDownload = !(this.options.orderSettings.get('downloadPerFileFee') === 0 || (PJQ.app.session.project.get('masterUserId') === PJQ.app.session.get('masterUserId') && !PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_ADMIN_PAID_DOWNLOADS)));\n        }\n\n        if (this.options.isReadOnly) {\n            this.options.canEdit = false;\n            this.options.canShare = false;\n        }\n\n        if (this.options.project != null) {\n            this.options.hideIssuedOn = this.options.project.preferences.hasPref(PJQ.constants.preferenceTypes.HIDE_VERSION_SELECTOR_ISSUED_ON);\n        } else {\n            this.options.hideIssuedOn = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.HIDE_VERSION_SELECTOR_ISSUED_ON);\n        }\n\n        let fetchCallback = _.bind(function () {\n            this.listenTo(this.collection, 'update', _.bind(function () {\n                this.render();\n            }, this));\n            // set the context version to current set if it has drawings\n            if (this.options.project != null && this.options.canEdit) {\n                PJQ.helpers.drawings.getUnPublishedBatchesCount(this.options.project.id, _.bind(function (batchCount) {\n                    this.unPublishedBatchCount = batchCount;\n                    this.render();\n                }, this));\n            } else {\n                this.render();\n            }\n        }, this);\n        if (this.collection == null) {\n            this.options.project.fetchVersions(_.bind(function (versions) {\n                this.collection = versions;\n                fetchCallback();\n            }, this));\n        } else {\n            fetchCallback();\n        }\n    },\n    beforeRender: function () {\n        if (this.collection != null) {\n            if (this.contextVersion == null && this.options.initOptions?.versionId > 0) {\n                let mVersionId = parseInt(this.options.initOptions.versionId);\n                this.contextVersion = _.find(this.collection.models, (version) => {\n                    return version.id === mVersionId;\n                });\n                console.log({\n                    versionId: this.options.initOptions.versionId,\n                    contextVersion: this.contextVersion\n                });\n            } else if (this.contextVersion == null) {\n                this.contextVersion = _.find(this.collection.models, (version) => {\n                    return version.id === -1;\n                });\n            }\n\n            if (this.contextVersion != null && _.size(this.contextVersion.drawings.models) === 0 && _.size(this.collection.models) > 0) {\n                this.contextVersion = this.contextVersion = _.find(this.collection.models, function (version) {\n                    return _.size(version.drawings.models) > 0;\n                });\n            }\n\n            if (this.contextVersion == null && _.size(this.collection.models) > 0) {\n                this.contextVersion = this.collection.models[0];\n            }\n        }\n    },\n    renderData: function () {\n        return {\n            hideIssuedOn: this.options.hideIssuedOn,\n            canEdit: this.options.canEdit,\n            canShare: this.options.canShare,\n            canDownload: this.options.canDownload,\n            canOrder: this.options.canOrder,\n            isPaidDownload: this.options.isPaidDownload,\n            drawingCount: this.collection ? this.collection.getDrawingCount() : 0,\n            versions: this.collection,\n            view: this.options.view,\n            mode: this.options.mode,\n            search: this.options.search,\n            contextVersion: this.contextVersion,\n            unPublishedBatchCount: this.unPublishedBatchCount\n        };\n    },\n    afterRender: function () {\n        if (this.collection != null) {\n            if (this.collection.getDrawingCount() > 0) {\n                this.tagSelectPicker = new PJQ.inputs.Selectpicker({\n                    el: this.$('select.drawings-filter'),\n                    defaultValue: this.filterTags,\n                    noneSelectedText: 'Filter Tags',\n                    isMultiple: true,\n                    onChange: _.bind(function (value) {\n                        this.filterTags = value;\n                        this.renderContextVersion();\n                    }, this)\n                });\n                this.renderContextVersion();\n                if (this.scrollTop > 0) {\n                    this.$('.version-drawings').scrollTop(this.scrollTop);\n                    this.scrollTop = null;\n                }\n            } else if (this.collection.isFetched) {\n                this.renderEmptyState();\n            }\n        }\n    },\n    refresh: function () {\n        this.scrollTop = $('.version-drawings').scrollTop();\n        this.render();\n    },\n    deleteDrawing: function (e) {\n        e.stopPropagation();\n\n        let $drawing = $(e.currentTarget).closest('.version-drawing-outer'),\n            drawing = this.contextVersion.drawings.get($drawing.data('cid')),\n            self = this;\n        new PJQ.views.modals.DeleteVersionModal({\n            onDeleteInAll: function () {\n                drawing.destroy({\n                    success: function () {\n                        _.each(self.collection.models, function (version) {\n                            let verDrawing = _.find(version.drawings.models, function (compDrawing) {\n                                return drawing.get('name') === compDrawing.get('name');\n                            });\n                            if (verDrawing != null) {\n                                verDrawing.destroy();\n                                version.drawings.remove(verDrawing);\n                            }\n                        });\n                        $drawing.parent().remove();\n                    }\n                });\n            },\n            onDeleteInThis: function () {\n                drawing.destroy({\n                    success: function () {\n                        let curSet = self.collection.get(-1);\n                        if (curSet != null) {\n                            let verDrawing = _.find(curSet.drawings.models, function (compDrawing) {\n                                return drawing.get('name') === compDrawing.get('name');\n                            });\n                            if (verDrawing != null) {\n                                verDrawing.destroy();\n                                curSet.drawings.remove(verDrawing);\n                            }\n                        }\n                        $drawing.parent().remove();\n                    }\n                });\n            }\n        });\n    },\n    rotateBatchDrawing90Clicked: function (e) {\n        e.stopPropagation();\n        this.rotateDrawing(e, 90);\n    },\n    rotateBatchDrawing180Clicked: function (e) {\n        e.stopPropagation();\n        this.rotateDrawing(e, 180);\n    },\n    rotateBatchDrawing270Clicked: function (e) {\n        e.stopPropagation();\n        this.rotateDrawing(e, 270);\n    },\n    rotateDrawing: function (e, degrees) {\n        let $drawing = $(e.currentTarget).closest('.version-drawing-outer'),\n            drawing = this.contextVersion.drawings.get($drawing.data('cid')),\n            rotateLoader = new PJQ.Loader($drawing);\n        drawing.rotate(degrees, _.bind(function () {\n            rotateLoader.remove();\n            $drawing.find('.version-drawing').attr('src', drawing.thumbUrl());\n            rotateLoader.remove();\n        }, this));\n    },\n    updateTagChoices: function () {\n        if (this.tagSelectPicker != null) {\n            let tags = this.contextVersion.getDrawingTags().sort(PJQ.helpers.sortHelpers.sortAlphaNum);\n            this.tagSelectPicker.updateChoices(tags);\n        }\n    },\n    renderViewGrid: function () {\n        this.$('.btn-view-grid').removeClass('btn-light').addClass('btn-primary');\n        this.$('.btn-view-list').removeClass('btn-primary').addClass('btn-light');\n        this.options.view = 'grid';\n        this.renderContextVersion();\n    },\n    renderViewList: function () {\n        this.$('.btn-view-list').removeClass('btn-light').addClass('btn-primary');\n        this.$('.btn-view-grid').removeClass('btn-primary').addClass('btn-light');\n        this.options.view = 'list';\n        this.renderContextVersion();\n    },\n    saveVersion: function () {\n        this.contextVersion.drawings.options.project = this.options.project;\n\n        let valid = true;\n        _.each(this.contextVersion.drawings.models, function (drawing) {\n            let thisValid = null == _.find(this.contextVersion.drawings.models, function (compareDrawing) {\n                return drawing.cid !== compareDrawing.cid && drawing.get('name') === compareDrawing.get('name');\n            });\n            valid = valid && thisValid;\n\n            let $drawing = this.$('.version-drawing-outer[data-cid=\"' + drawing.cid + '\"]');\n            PJQ.helpers.inputHelpers.setInputError($drawing.find('.input-drawing-name'), thisValid);\n        }, this);\n\n        if (!valid) {\n            if (this.duplicateNameAlert == null) {\n                this.duplicateNameAlert = new PJQ.Alert(this.$('.version-drawings'), {\n                    type: 'danger',\n                    isBefore: true,\n                    text: 'Some of the drawings have duplicated names.  Drawing names must be unique per version.',\n                    extraClasses: ['alert-duplicate-name']\n                });\n            }\n            return;\n        } else if (this.duplicateNameAlert != null) {\n            this.duplicateNameAlert.destroy();\n            this.duplicateNameAlert = null;\n        }\n\n        this.contextVersion.drawings.save({\n            put: true,\n            urlOptions: {\n                isFileAPI: true\n            },\n            success: _.bind(function () {\n                _.each(this.contextVersion.drawings.models, function (contextDrawing) {\n                    _.each(this.collection.models, function (version) {\n                        _.each(version.drawings.models, function (otherDrawing) {\n                            if (otherDrawing.get('name') === contextDrawing.get('name')) {\n                                otherDrawing.set('title', contextDrawing.get('title'), {\n                                    silent: true\n                                });\n                            }\n                        });\n                    });\n                }, this);\n\n                this.options.mode = PJQ.constants.drawings.dashboardModes.VIEW;\n                this.render();\n            }, this)\n        });\n    },\n    bulkTag: function () {\n        new PJQ.views.drawings.BulkTagModal({\n            collection: this.collection,\n            onClose: _.bind(function () {\n                this.render();\n            }, this)\n        });\n    },\n    sortVersion: function () {\n        new PJQ.views.drawings.SortDrawingsModal({\n            versions: this.collection,\n            sortVersion: this.contextVersion,\n            sortFullSet: true,\n            onDone: _.bind(function () {\n                this.render();\n            }, this)\n        });\n    },\n    editVersion: function () {\n        this.options.mode = PJQ.constants.drawings.dashboardModes.EDIT;\n        this.render();\n    },\n    cancelEditVersion: function () {\n        _.each(this.contextVersion.drawings.models, function (drawing) {\n            drawing.restore();\n        });\n        this.options.mode = PJQ.constants.drawings.dashboardModes.VIEW;\n        this.render();\n    },\n    getFilteredDrawings: function () {\n        this.options.search = this.$('.input-drawings-search').val().toLowerCase();\n\n        let result,\n            isSearch = _.size(this.options.search) > 0,\n            isFilterTags = _.size(this.filterTags) > 0;\n        if (isSearch || isFilterTags) {\n            result = [];\n            _.each(this.contextVersion.drawings.models, _.bind(function (drawing) {\n                if (isSearch && drawing.get('name').toLowerCase().indexOf(this.options.search) === -1 && drawing.get('title').toLowerCase().indexOf(this.options.search) === -1) {\n                    return false;\n                }\n                if (isFilterTags && _.find(this.filterTags, function (filterTag) {\n                    return _.find(drawing.get('tags'), function (drawingTag) {\n                        return filterTag === drawingTag;\n                    }) != null;\n                }) == null) {\n                    return false;\n                }\n                result.push(drawing);\n            }, this));\n        } else {\n            result = this.contextVersion.drawings.models;\n        }\n        return result;\n    },\n    renderEmptyState: function () {\n        this.renderSubTemplate(false, this.options.subTemplates.emptyState, this.$('.version-drawings'), {\n            canEdit: this.options.canEdit\n        });\n    },\n    renderContextVersion: function () {\n        if (this.options.mode === PJQ.constants.drawings.dashboardModes.VIEW && this.contextVersion.get('issuedOn') != null) {\n            this.renderVersionSelector();\n        }\n\n        this.$('.selector-version-name,.context-version-name').text(this.contextVersion.get('name'));\n        this.$('.context-version-issued').text(PJQ.helpers.dateHelpers.getDateString(new Date(this.contextVersion.get('issuedOn')), PJQ.helpers.dateHelpers.dateFormats.DATE, true));\n        this.$('.context-version-drawing-count').text(_.size(this.contextVersion.drawings.models));\n        this.updateTagChoices();\n        let versionTmpl;\n        if (this.options.view === 'list') {\n            versionTmpl = this.options.subTemplates.versionList;\n        } else {\n            versionTmpl = this.options.subTemplates.versionGrid;\n        }\n        this.renderSubTemplate(false, versionTmpl, this.$('.version-drawings'), {\n            mode: this.options.mode,\n            versions: this.collection,\n            canEdit: this.options.canEdit,\n            drawings: this.getFilteredDrawings()\n        }, _.bind(function () {\n            PJQ.app.lazyLoad().update();\n            this.renderSubTemplate(false, this.options.subTemplates.versionStats, this.$('.version-stats'), {\n                versions: this.collection,\n                contextVersion: this.contextVersion\n            });\n        }, this));\n    },\n    newBatch: function () {\n        new PJQ.views.drawings.DrawingBatchModal({\n            versions: this.collection,\n            project: this.options.project\n        });\n    },\n    drawingNameChanged: function (e) {\n        let $target = $(e.currentTarget),\n            $drawing = $target.closest('.version-drawing-outer'),\n            cid = $drawing.data('cid'),\n            drawing = this.contextVersion.drawings.get(cid),\n            name = $target.val();\n        drawing.set('name', name);\n    },\n    drawingTitleChanged: function (e) {\n        let $target = $(e.currentTarget),\n            cid = $target.closest('.version-drawing-outer').data('cid'),\n            drawing = this.contextVersion.drawings.get(cid);\n        drawing.set('title', $target.val());\n    },\n    drawingClicked: function (e) {\n        let cid = $(e.currentTarget).data('cid'),\n            drawing = this.contextVersion.drawings.get(cid);\n\n        let initViewer = _.bind(function () {\n            new PJQ.views.drawings.DrawingViewer({\n                model: drawing,\n                project: this.options.project,\n                forShare: this.options.forShare,\n                isEdit: this.options.mode === PJQ.constants.drawings.dashboardModes.EDIT,\n                canEdit: this.options.canEdit,\n                contextVersion: this.contextVersion,\n                accessKey: this.options.accessKey,\n                versions: this.collection,\n                onClose: _.bind(function (changed) {\n                    if (changed) {\n                        this.refresh();\n                    }\n                }, this),\n                onDelete: _.bind(function () {\n                    this.refresh();\n                }, this)\n            });\n        }, this);\n        if (this.options.project != null) {\n            this.options.project.checkDownloadRequirements(_.bind(function () {\n                initViewer();\n            }, this));\n        } else {\n            initViewer();\n        }\n    },\n    versionSelected: function (e) {\n        let cid = $(e.currentTarget).data('cid');\n        if (cid != null) {\n            this.contextVersion = this.collection.get(cid);\n            this.renderContextVersion();\n        }\n    },\n    renderVersionSelector: function () {\n        let $versionSelect = this.$('.drawing-versions');\n        this.renderSubTemplate(false, this.options.subTemplates.versionSelect, $versionSelect, {\n            versions: _.filter(this.collection.models, function (ver) {\n                return _.size(ver.drawings) > 0;\n            }),\n            hideIssuedOn: this.options.hideIssuedOn,\n            contextVersion: this.contextVersion,\n            currentSet: this.collection.get(-1)\n        });\n    },\n    manageVersions: function () {\n        new PJQ.views.drawings.ManageVersionsModal({\n            collection: this.collection,\n            project: this.options.project,\n        });\n    },\n    viewUploadLog: function () {\n        new PJQ.views.drawings.DrawingUploadLogModal({\n            project: this.options.project,\n            versions: this.collection\n        });\n    },\n    shareDrawings: function () {\n        new PJQ.views.drawings.DrawingShareModal({\n            collection: this.collection,\n            onSave: _.bind(function (versions) {\n                let shareDrawings = new PJQ.collections.drawings.Drawings(),\n                    versionIds = [];\n\n                shareDrawings.options.allDrawings = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DRAWING_SHARE_PREVENT_EXPIRATION);\n\n                _.each(versions, function (version) {\n                    versionIds.push(version.versionId);\n                    _.each(version.guids, function (guid) {\n                        shareDrawings.add(new PJQ.models.drawings.Drawing({\n                            guid: guid\n                        }));\n                    });\n                });\n                let sharingModal = new PJQ.views.sharing.SharingModal({\n                    collection: shareDrawings,\n                    subject: 'Drawings have been shared with you',\n                    onSave: _.bind(function (data) {\n                        shareDrawings.share(versionIds, null, data, this.options.project, _.bind(function (share) {\n                            PJQ.notifications.notify.successNotify({\n                                message: 'Drawing share email sent'\n                            });\n                        }, this));\n                    }, this)\n                });\n                shareDrawings.share(versionIds, null, null, this.options.project, function (share) {\n                    let callback = _.bind(sharingModal.urlChanged, sharingModal);\n                    callback(share.url);\n                });\n            }, this)\n        });\n    },\n    downloadDrawings: function (drawings, options) {\n        let download = _.bind(function () {\n            PJQ.helpers.drawings.createDownload(this.options.project, [{\n                versionId: this.contextVersion.id,\n                guids: _.map(drawings, function (drawing) {\n                    return drawing.get('guid');\n                })\n            }], options);\n        }, this);\n        if (this.options.project != null) {\n            this.options.project.checkDownloadRequirements(_.bind(function () {\n                download();\n            }, this));\n        } else {\n            download();\n        }\n    },\n    downloadContextVersionSplit: function () {\n        if (this.options.isPaidDownload) {\n            let entryIds = [];\n            _.each(this.contextVersion.drawings.models, function (model) {\n                entryIds.push(model.get('drawingId') * -1);\n            });\n\n            if (PJQ.app.session.project != null && PJQ.app.session.project.get('masterUserId') === PJQ.app.session.get('masterUserId') && (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.CAN_ORDER_ON_ACCOUNT) || PJQ.app.session.hasPermission('documents.onAccount'))) {\n                new PJQ.views.drawings.OrderDownloadAdmin({\n                    entryIds: entryIds,\n                    orderSettings: this.options.orderSettings\n                });\n            } else {\n                new PJQ.views.drawings.OrderPrintsModal({\n                    mode: PJQ.constants.files.modes.DOWNLOAD,\n                    entryIds: entryIds,\n                    orderSettings: this.options.orderSettings\n                });\n            }\n        } else {\n            this.downloadDrawings(this.contextVersion.drawings.models);\n        }\n    },\n    downloadContextVersionMerged: function () {\n        this.downloadDrawings(this.contextVersion.drawings.models, {\n            merge: true\n        });\n    },\n    downloadFilteredSplit: function () {\n        if (this.options.isPaidDownload) {\n            let entryIds = [];\n            _.each(this.getFilteredDrawings(), function (model) {\n                entryIds.push(model.get('drawingId') * -1);\n            });\n\n            if (PJQ.app.session.project != null && PJQ.app.session.project.get('masterUserId') === PJQ.app.session.get('masterUserId') && (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.CAN_ORDER_ON_ACCOUNT) || PJQ.app.session.hasPermission('documents.onAccount'))) {\n                new PJQ.views.drawings.OrderDownloadAdmin({\n                    entryIds: entryIds,\n                    orderSettings: this.options.orderSettings\n                });\n            } else {\n                new PJQ.views.drawings.OrderPrintsModal({\n                    mode: PJQ.constants.files.modes.DOWNLOAD,\n                    entryIds: entryIds,\n                    orderSettings: this.options.orderSettings\n                });\n            }\n        } else {\n            this.downloadDrawings(this.getFilteredDrawings());\n        }\n\n    },\n    downloadFilteredMerged: function () {\n        this.downloadDrawings(this.getFilteredDrawings(), {\n            merge: true\n        });\n    },\n    downloadAdvanced: function () {\n        new PJQ.views.drawings.AdvancedDownloadModal({\n            project: this.options.project,\n            orderSettings: this.options.orderSettings,\n            collection: this.collection,\n            isPaidDownload: this.options.isPaidDownload\n        });\n    },\n    exportDrawingList: function () {\n        PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\n            {\n                endpoint: 'projects',\n                value: PJQ.app.session.project.id\n            },\n            {\n                endpoint: 'drawings'\n            },\n            {\n                endpoint: 'export'\n            }\n        ]));\n    },\n    orderContextVersion: function () {\n        let entryIds = [];\n        _.each(this.contextVersion.drawings.models, function (model) {\n            entryIds.push(model.get('drawingId') * -1);\n        });\n        new PJQ.views.drawings.OrderPrintsModal({\n            mode: PJQ.constants.files.modes.PRINT,\n            entryIds: entryIds,\n            orderSettings: this.options.orderSettings\n        });\n\n    },\n    orderFiltered: function () {\n        let entryIds = [];\n        _.each(this.getFilteredDrawings(), function (model) {\n            entryIds.push(model.get('drawingId') * -1);\n        });\n        if (_.size(entryIds) > 0) {\n            new PJQ.views.drawings.OrderPrintsModal({\n                mode: PJQ.constants.files.modes.PRINT,\n                entryIds: entryIds,\n                orderSettings: this.options.orderSettings\n            });\n        } else {\n            PJQ.notifications.notify.errorNotify({\n                message: 'No drawings in filter'\n            });\n        }\n\n    },\n    orderAdvanced: function () {\n        new PJQ.views.drawings.AdvancedDownloadModal({\n            project: this.options.project,\n            orderSettings: this.options.orderSettings,\n            collection: this.collection,\n            isPaidDownload: false,\n            isPrintOrder: true\n        });\n    }\n});\n\nPJQ.views.drawings.DrawingShareModal = PJQ.views.BaseModal.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Modal-Drawing-Share'),\n        onSave: null\n    },\n    defaultEvents: {\n        'click .btn-cancel': 'removeModal',\n        'click .btn-save': 'save'\n    },\n    beforeModalCreated: function () {\n        this.selectedVersions = [];\n    },\n    afterRender: function () {\n        new PJQ.views.drawings.DrawingSelectorTree({\n            el: this.$('.drawings-tree'),\n            collection: this.collection,\n            onChange: _.bind(function (versions) {\n                this.selectedVersions = versions;\n            }, this)\n        });\n    },\n    renderData: function () {\n        return {\n            collection: this.collection\n        };\n    },\n    save: function () {\n        if (typeof this.options.onSave === 'function') {\n            this.options.onSave(this.selectedVersions);\n        }\n        this.removeModal();\n    }\n});\n\nPJQ.views.drawings.DrawingSelectorTree = PJQ.views.BaseView.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Drawing-Selector-Tree'),\n        flatten: false,\n        onChange: null\n    },\n    events: {\n        'click .version-expand': 'expandVersion',\n        'change .cb-version': 'versionSelected',\n        'change .cb-drawing': 'drawingSelected'\n    },\n    beforeFirstRender: function () {\n        this.selectedVersions = [];\n        this.selectedDrawings = [];\n        this.drawings = this.collection.getUniqueDrawings();\n    },\n    renderData: function () {\n        return {\n            versions: this.collection.models,\n            drawings: this.drawings,\n            flatten: this.options.flatten\n        };\n    },\n    flatten: function (flatten) {\n        this.options.flatten = flatten;\n        this.render();\n    },\n    expandVersion: function (e) {\n        let $outer = $(e.currentTarget).closest('.version-outer'),\n            $drawings = $outer.find('.version-drawings');\n        $drawings.toggleClass('hidden');\n    },\n    versionSelected: function (e) {\n        let $target = $(e.currentTarget),\n            $outer = $target.closest('.version-outer'),\n            isSelected = $target.prop('checked'),\n            versionCid = $target.data('versionCid'),\n            version = this.collection.get(versionCid);\n\n        if (isSelected) {\n            let selectedVersion = _.findWhere(this.selectedVersions, {versionId: version.id});\n            if (selectedVersion == null) {\n                selectedVersion = {\n                    versionId: version.id,\n                };\n            }\n            selectedVersion.guids = _.map(version.drawings.models, function (drawing) {\n                return drawing.get('guid');\n            });\n            selectedVersion.ids = _.map(version.drawings.models, function (drawing) {\n                return drawing.id;\n            });\n\n            if (_.size(selectedVersion.guids) > 0 || _.size(selectedVersion.ids) > 0) {\n                this.selectedVersions.push(selectedVersion);\n            }\n        } else {\n            this.selectedVersions = _.filter(this.selectedVersions, function (deleteVersion) {\n                return deleteVersion.versionId !== version.id;\n            });\n        }\n        $outer.find('.cb-drawing').prop('checked', isSelected);\n        this.onChange();\n    },\n    drawingSelected: function (e) {\n        let $target = $(e.currentTarget),\n            isSelected = $target.prop('checked'),\n            drawingCid = $target.data('drawingCid');\n\n        if (this.options.flatten) {\n            let drawing = _.find(this.drawings, function (drawing) {\n                return drawing.cid === drawingCid;\n            });\n            if (isSelected && !_.contains(this.selectedDrawings, drawing.id)) {\n                this.selectedDrawings.push(drawing.id);\n            } else {\n                this.selectedDrawings = _.without(this.selectedDrawings, drawing.id);\n            }\n        } else {\n            let $outer = $target.closest('.version-outer'),\n                $cbVersion = $outer.find('.cb-version'),\n                versionCid = $target.data('versionCid'),\n                version = this.collection.get(versionCid),\n                drawing = _.find(version.drawings.models, function (drawing) {\n                    return drawing.cid === drawingCid;\n                }),\n                selectedVersion = _.findWhere(this.selectedVersions, {versionId: version.id});\n            if (isSelected) {\n                if (selectedVersion == null) {\n                    selectedVersion = {\n                        versionId: version.id,\n                        guids: [drawing.get('guid')],\n                        ids: [drawing.id]\n                    };\n                    this.selectedVersions.push(selectedVersion);\n                } else {\n                    selectedVersion.guids.push(drawing.get('guid'));\n                    selectedVersion.ids.push(drawing.id);\n                }\n\n                if (_.size($outer.find(\".cb-drawing:not(:checked)\")) === 0) {\n                    $cbVersion.prop('checked', true);\n                }\n            } else if (selectedVersion != null) {\n                selectedVersion.guids = _.without(selectedVersion.guids, drawing.get('guid'));\n                selectedVersion.ids = _.without(selectedVersion.ids, drawing.id);\n                if (_.size(selectedVersion.guids) === 0) {\n                    this.selectedVersions = _.filter(this.selectedVersions, function (deleteVersion) {\n                        return deleteVersion.versionId !== version.id;\n                    });\n                }\n\n                $cbVersion.prop('checked', false);\n            }\n        }\n\n        this.onChange();\n    },\n    onChange: function () {\n        if (typeof this.options.onChange === 'function') {\n            this.options.onChange(this.options.flatten ? this.selectedDrawings : this.selectedVersions);\n        }\n    }\n});\n\nPJQ.views.modals.DeleteVersionModal = PJQ.views.BaseModal.extend({\n    defaults: {\n        header: \"Confirm Delete\",\n        body: \"Where would you like to delete this drawing from?\"\n    },\n    beforeModalCreated: function () {\n        this.options = _.defaults({\n            isShowOkButton: true,\n            okButtonText: 'All Versions',\n            okButtonColorClass: 'danger',\n            onOk: _.bind(function () {\n                if (typeof this.options.onDeleteInAll === 'function') {\n                    this.options.onDeleteInAll();\n                }\n            }, this),\n            isShowSecondaryButton: true,\n            secondaryButtonColorClass: 'outline-danger',\n            secondaryButtonText: 'This Version',\n            onSecondary: _.bind(function () {\n                if (typeof this.options.onDeleteInThis === 'function') {\n                    this.options.onDeleteInThis();\n                }\n            }, this),\n            isShowCancelButton: true,\n            cancelButtonText: \"Cancel\",\n            onClose: _.bind(function () {\n                if (typeof this.options.onCancel === 'function') {\n                    this.options.onCancel();\n                }\n            }, this)\n        }, this.options);\n    }\n});\n\nPJQ.views.drawings.BulkTagModal = PJQ.views.BaseModal.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Modal-Bulk-Tag'),\n        subTemplates: {\n            drawingTags: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Drawing-Tags'),\n        },\n        onClose: null\n    },\n    defaultEvents: {\n        'change .cb-specify-version': 'renderDrawingSelector',\n        'click .btn-add-tag': 'addTag',\n        'click .btn-delete-tag': 'deleteTag',\n        'keyup .input-tag': 'tagChanged',\n        'click .btn-close': 'close'\n    },\n    afterRender: function () {\n        this.renderDrawingSelector();\n        this.renderExistingTags();\n    },\n    renderDrawingSelector: function () {\n        this.selectedVersions = [];\n        this.selectedDrawings = [];\n        let flatten = !this.$('.cb-specify-version').prop('checked');\n        if (this.drawingSelector == null) {\n            this.drawingSelector = new PJQ.views.drawings.DrawingSelectorTree({\n                el: this.$('.drawings-tree'),\n                flatten: !this.$('.cb-specify-version').prop('checked'),\n                collection: this.collection,\n                onChange: _.bind(function (data) {\n                    if (!this.$('.cb-specify-version').prop('checked')) {\n                        this.selectedDrawings = data;\n                    } else {\n                        this.selectedVersions = data;\n                    }\n                    this.renderExistingTags();\n                    this.validateTag();\n                }, this)\n            });\n        } else {\n            this.drawingSelector.flatten(flatten);\n        }\n    },\n    tagChanged: function (e) {\n        if (e.keyCode === 13) {\n            this.addTag();\n            return;\n        }\n\n        this.validateTag();\n    },\n    validateTag: function () {\n        let tag = this.$('.input-tag').val();\n        this.$('.btn-add-tag').prop('disabled', _.size(this.getSelectedDrawingIds()) === 0 || _.size(tag) === 0);\n    },\n    getInputTags: function () {\n        let tagString = $('.input-tag').val(),\n            tags = [];\n        if (_.size(tagString) > 0) {\n            _.each(tagString.split(','), function (tag) {\n                let tagTrim = tag.trim();\n                if (_.size(tagTrim) > 0) {\n                    tags.push(tagTrim);\n                }\n            });\n        }\n        return tags;\n    },\n    getSelectedDrawingIds: function () {\n        let drawingIds = [];\n        _.each(this.selectedVersions, function (version) {\n            drawingIds.push(...version.ids);\n        });\n        drawingIds.push(...this.selectedDrawings);\n        return drawingIds;\n    },\n    endpoint: function (allVersions = false, isDelete = false) {\n        return PJQ.helpers.urlHelpers.generateEndpoint([\n            {\n                endpoint: 'projects',\n                value: PJQ.app.session.project.id\n            },\n            {\n                endpoint: 'drawings'\n            },\n            {\n                endpoint: 'tags'\n            }\n        ], [\n            {\n                parameter: 'delete',\n                value: isDelete\n            },\n            {\n                parameter: 'allVersions',\n                value: allVersions\n            }\n        ]);\n    },\n    renderExistingTags: function () {\n        let tags = [];\n        if (_.size(this.selectedVersions) > 0) {\n            _.each(this.selectedVersions, _.bind(function (version) {\n                let mVer = this.collection.get(version.versionId);\n                _.each(version.ids, function (drawingId) {\n                    let mDr = mVer.drawings.get(drawingId);\n                    _.each(mDr.get('tags'), function (tag) {\n                        if (!_.contains(tags, tag)) {\n                            tags.push(tag);\n                        }\n                    });\n                });\n            }, this));\n        }\n\n        if (_.size(this.selectedDrawings) > 0) {\n            _.each(this.selectedDrawings, _.bind(function (drawingId) {\n                _.each(this.collection.models, function (version) {\n                    let mDr = version.drawings.get(drawingId);\n                    if (mDr != null) {\n                        _.each(mDr.get('tags'), function (tag) {\n                            if (!_.contains(tags, tag)) {\n                                tags.push(tag);\n                            }\n                        });\n                    }\n                });\n            }, this));\n        }\n        this.renderSubTemplate(false, this.options.subTemplates.drawingTags, this.$('.drawing-tags'), {\n            tags: tags\n        });\n    },\n    addTag: function () {\n        let allVersions = !this.$('.cb-specify-version').prop('checked'),\n            tags = this.getInputTags();\n        new PJQ.ajax.Request({\n            endpoint: this.endpoint(allVersions),\n            data: {\n                drawingIds: this.getSelectedDrawingIds(),\n                tags: tags\n            }\n        }).post().done(_.bind(function () {\n            this.clearTagInput();\n            this.alterTags(tags);\n            this.renderExistingTags();\n        }, this)).fail(function () {\n            this.error();\n        });\n    },\n    deleteTag: function (e) {\n        let allVersions = !this.$('.cb-specify-version').prop('checked'),\n            tag = $(e.currentTarget).closest('.drawing-tag').data('name');\n        new PJQ.ajax.Request({\n            endpoint: this.endpoint(allVersions, true),\n            data: {\n                drawingIds: this.getSelectedDrawingIds(),\n                tags: [tag]\n            }\n        }).post().done(_.bind(function (data) {\n            this.clearTagInput();\n            this.alterTags(tag, true);\n            this.renderExistingTags();\n        }, this)).fail(function () {\n            this.error()\n        });\n    },\n    alterTags: function (tags, isDelete = false) {\n        if (_.size(this.selectedVersions) > 0) {\n            _.each(this.selectedVersions, _.bind(function (version) {\n                let mVer = this.collection.get(version.versionId);\n                _.each(version.ids, function (drawingId) {\n                    let mDr = mVer.drawings.get(drawingId);\n                    if (isDelete) {\n                        mDr.deleteTag(tags, {\n                            save: false\n                        });\n                    } else {\n                        mDr.addTags(tags, {\n                            save: false\n                        });\n                    }\n                });\n            }, this));\n        }\n\n        if (_.size(this.selectedDrawings) > 0) {\n            _.each(this.selectedDrawings, _.bind(function (drawingId) {\n                _.each(this.collection.models, function (version) {\n                    let mDr = version.drawings.get(drawingId);\n                    if (mDr != null) {\n                        if (isDelete) {\n                            mDr.deleteTag(tags, {\n                                save: false\n                            });\n                        } else {\n                            mDr.addTags(tags, {\n                                save: false\n                            });\n                        }\n                    }\n                });\n            }, this));\n        }\n    },\n    clearTagInput: function () {\n        this.$('.input-tag').val('');\n        this.validateTag();\n    },\n    error: function () {\n\n    },\n    close: function () {\n        this.removeModal();\n        if (typeof this.options.onClose === 'function') {\n            this.options.onClose();\n        }\n    }\n});\n","PJQ.views.drawings.DrawingViewer = PJQ.views.photos.PhotoViewer.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'drawing-viewer'),\n        elementId: 'dv-outer',\n        subTemplates: {\n            versionSelect: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'drawing-viewer-version-selector'),\n            drawingDetails: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'drawing-viewer-details')\n        },\n        annotationMenu: {\n            type: PJQ.constants.drawings.annotationTypes.INSPECT\n        },\n        batch: null,\n        isAnnotationsEnabled: false,\n        onAnnotationChange: null,\n        mergeAnnotations: null,\n        canEdit: true,\n        canAddAnnotations: true,\n        shouldCreateCanvas: true,\n        noNavigation: false,\n        zoomValue: 100,\n        snapView: true,\n        isEdit: false,\n        context: null,\n        maxZoom: 500,\n        refreshOnResize: true,\n        zoomOnMouseWheel: true,\n        triggerRoute: false,\n        isDisableDownload: false,\n        onSortChange: null,\n        showSortableViewLink: true,\n        keyListeners: [\n            {\n                which: 27,\n                keys: ['Escape', 'Esc'],\n                callback: function () {\n                    this.destroy();\n                }\n            },\n            {\n                which: 37,\n                callback: function () {\n                    this.prevDrawing();\n                }\n            },\n            {\n                which: 13,\n                callback: function () {\n                    this.nextDrawing();\n                }\n            },\n            {\n                which: 66,\n                shiftKey: true,\n                callback: function () {\n                    this.prevDrawing();\n                }\n            },\n            {\n                which: 39,\n                callback: function () {\n                    this.nextDrawing();\n                }\n            },\n            {\n                which: 78,\n                shiftKey: true,\n                callback: function () {\n                    this.nextDrawing();\n                }\n            },\n            {\n                which: 68,\n                shiftKey: true,\n                callback: function () {\n                    this.downloadFile();\n                    $(window).focus();\n                }\n            },\n            {\n                which: 73,\n                shiftKey: true,\n                callback: function () {\n                    this.viewDrawingDetails();\n                }\n            }\n        ]\n    },\n    defaultEvents: {\n        'click .iv-canvas,.iv-active-canvas': 'canvasClicked',\n        'click .version-select': 'versionSelected',\n        'click .btn-prev-drawing': 'prevDrawing',\n        'click .btn-next-drawing': 'nextDrawing',\n        'click .btn-drawing-details': 'viewDrawingDetails',\n        'keyup .input-drawing-name': 'nameChanged',\n        'keyup .input-drawing-title': 'titleChanged',\n        'keyup .input-tag': 'drawingTagInputChanged',\n        'click .btn-add-tag': 'addTag',\n        'click .btn-delete-tag': 'deleteTag',\n        'click .btn-add-to-current': 'addToCurrentSet',\n        'click .btn-remove-from-current': 'removeFromCurrentSet',\n        'click .btn-delete-pub-drawing': 'deletePublishedDrawing',\n        'mouseup .iv-image-view': 'canvasMouseUp',\n        'mousemove .iv-active-canvas': 'canvasMouseMove',\n        'mouseleave .iv-active-canvas': 'canvasMouseLeave'\n    },\n    beforeRender: function () {\n        this.options.project = PJQ.app.session.project;\n        if (this.options.project != null) {\n            this.options.isAnnotationsEnabled = this.options.batch == null;\n            if (this.options.project.orderSettings) {\n                this.options.isDisableDownload = this.options.project.orderSettings.get('downloadPerFileFee') > 0 && (PJQ.app.session.get('masterUserId') !== this.options.project.get('masterUserId') || this.options.project.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_ADMIN_PAID_DOWNLOADS));\n            } else {\n                this.options.isDisableDownload = true;\n            }\n\n            if (this.options.versions == null && !this.options.noNavigation) {\n                this.options.project.fetchVersions((versions) => {\n                    this.options.versions = versions;\n                });\n            }\n        } else {\n            this.options.isAnnotationsEnabled = this.options.batch == null;\n        }\n    },\n    renderData: function () {\n        return {\n            options: this.options,\n            showNavigationControls: this.options.versions != null\n        };\n    },\n    initViewer: function () {\n        // tracking mechanism for if any model was changed in this viewer session\n        this.changed = false;\n        this.options.canEditDrawing = this.options.canEdit && (!PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_DOCUMENT_CLERK_COMPANY) ||\n            PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_DOCUMENT_CLERK));\n\n        if (this.options.batch != null) {\n            this.options.contextVersion = this.options.batch.version;\n        }\n\n        this.renderDrawingSelector();\n        this.renderDrawingSort();\n        this.setDrawing(this.model, this.options.contextVersion);\n    },\n    renderDrawingSort: function () {\n        if (this.options.batch != null) {\n            let $sort = this.$('.sort-container');\n            new PJQ.views.drawings.SortDrawings({\n                el: $sort,\n                batch: this.options.batch,\n                contextDrawing: this.model,\n                showViewLink: this.options.showSortableViewLink,\n                versions: this.options.versions,\n                onChange: _.bind(function () {\n                    this.changed = true;\n                    if (typeof this.options.onSortChange === 'function') {\n                        this.options.onSortChange();\n                    }\n                }, this)\n            });\n            $sort.removeClass('hidden');\n        }\n    },\n    viewDrawingDetails: function () {\n        let $drawingDetails = this.$('.drawing-details'),\n            $btnDetails = this.$('.btn-drawing-details');\n        if ($drawingDetails.hasClass('hidden')) {\n            $btnDetails.addClass('text-primary');\n            $drawingDetails.animateCSS('fadeInRight', _.bind(function () {\n                this.refresh();\n            }, this));\n        } else {\n            $btnDetails.removeClass('text-primary');\n            $drawingDetails.animateCSS('fadeOutRight', _.bind(function () {\n                this.refresh();\n            }, this));\n        }\n    },\n    addToCurrentSet: function () {\n        new PJQ.views.modals.YesNo({\n            header: \"Add to Current Set\",\n            body: \"Are you sure you want to add this drawing to the current set?  If this sheet number already exists in the current set, it will be replaced by this version.\",\n            onYes: _.bind(function () {\n                this.model.patch(null, {\n                    urlOptions: {\n                        currentSet: true\n                    },\n                    success: _.bind(function () {\n                        this.options.versions.fetch({\n                            success: _.bind(function () {\n                                let currentSet = this.options.versions.get(-1);\n                                if (currentSet != null) {\n                                    let existing = _.findWhere(currentSet.drawings.models, {title: this.model.get('title')});\n                                    // remove any drawings that match this drawings title from the current set\n                                    currentSet.drawings.remove(existing);\n                                    // add this drawing to the current set\n                                    currentSet.drawings.add(this.model);\n                                }\n                                this.renderVersionSelector();\n                                this.renderDrawingDetails();\n                            }, this)\n                        });\n                    }, this)\n                });\n            }, this)\n        });\n    },\n    removeFromCurrentSet: function () {\n        new PJQ.views.modals.YesNo({\n            header: \"Add to Current Set\",\n            body: \"Are you sure you want to remove this drawing from the current set?\",\n            onYes: _.bind(function () {\n                this.model.patch(null, {\n                    urlOptions: {\n                        currentSet: false\n                    },\n                    success: _.bind(function () {\n                        this.options.versions.fetch({\n                            success: _.bind(function () {\n                                let currentSet = this.options.versions.get(-1);\n                                if (currentSet != null) {\n                                    currentSet.drawings.remove(this.model);\n                                }\n                                this.renderVersionSelector();\n                                this.renderDrawingDetails();\n                            }, this)\n                        });\n                    }, this)\n                });\n            }, this)\n        });\n    },\n    deletePublishedDrawing: function () {\n        new PJQ.ajax.Request({\n            endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n                {\n                    endpoint: 'drawings',\n                    value: this.model.get('guid')\n                },\n                {\n                    endpoint: 'checkattached'\n                }\n            ])\n        }).get().done(_.bind(function (response) {\n            new PJQ.views.modals.YesNo({\n                header: \"Delete Drawing\",\n                body: response.attached ? \"<b>This drawing is currently attached to at least 1 item on this project.</b> Deleting the drawing will unlink it from all items. Are you sure you want to delete this drawing?\" : \"Are you sure you want to delete this drawing?\",\n                onYes: _.bind(function (model, data) {\n                    this.model.destroy({\n                        success: _.bind(function () {\n                            let newCurSetDrawing = null;\n                            _.each(this.options.versions.models, function (version) {\n                                if (data && data.replacement > 0) {\n                                    _.each(version.drawings.models, function (drawing) {\n                                        if (drawing.id === data.replacement) {\n                                            newCurSetDrawing = drawing;\n                                            drawing.set('isCurrentSet', true);\n                                        }\n                                    }, this);\n                                }\n                                version.drawings.remove(this.model);\n                            }, this);\n\n                            this.renderDrawingSelector();\n\n                            if (newCurSetDrawing != null) {\n                                this.setDrawing(newCurSetDrawing);\n                            }\n                            // then try to go to the next drawing\n                            else if (!this.nextDrawing()) {\n                                // then try to go to the previous drawing\n                                if (!this.prevDrawing()) {\n                                    // next try to go to a different drawing in a different version\n                                    let newDrawing = _.find(this.options.versions.models, function (version) {\n                                        if (_.size(version.drawings.models) > 0) {\n                                            return version.drawings.models[0];\n                                        }\n                                    }, this);\n                                    if (newDrawing != null) {\n                                        this.setDrawing(newDrawing);\n                                    } else {\n                                        // we couldnt find any other drawings to go to\n                                        // close the viewer\n                                        this.destroy();\n                                    }\n                                }\n                            }\n\n                            if (typeof this.options.onDelete === 'function') {\n                                this.options.onDelete();\n                            }\n\n                            PJQ.notifications.notify.successNotify({\n                                message: 'Drawing deleted'\n                            });\n                        }, this)\n                    });\n                }, this)\n            });\n        }, this));\n    },\n    prevDrawing: function () {\n        let item = this.currentImg,\n            canvas = this.canvas;\n        this.prevItemInfo = {\n            position: item.position(),\n            size: this.imageDim,\n            canvas: canvas\n        };\n        let contextDrawing = _.find(_.sortBy(this.fullSet, function (drawing) {\n            return -drawing.get('sortOrder');\n        }), _.bind(function (drawing) {\n            return drawing.get('sortOrder') < this.model.get('sortOrder');\n        }, this));\n        if (contextDrawing != null) {\n            this.setDrawing(contextDrawing);\n            return true;\n        }\n        return false;\n    },\n    nextDrawing: function () {\n        let item = this.currentImg,\n            canvas = this.canvas;\n        this.prevItemInfo = {\n            position: item.position(),\n            size: this.imageDim,\n            canvas: canvas\n        };\n        let contextDrawing = _.find(_.sortBy(this.fullSet, function (drawing) {\n            return drawing.get('sortOrder');\n        }), _.bind(function (drawing) {\n            return drawing.get('sortOrder') === this.model.get('sortOrder') + 1;\n        }, this));\n\n        if (contextDrawing == null) {\n            contextDrawing = _.find(_.sortBy(this.fullSet, function (drawing) {\n                return drawing.get('sortOrder');\n            }), _.bind(function (drawing) {\n                return drawing.get('sortOrder') > this.model.get('sortOrder');\n            }, this));\n        }\n\n        if (contextDrawing != null) {\n            this.setDrawing(contextDrawing);\n            return true;\n        }\n        return false;\n    },\n    renderPagingState: function () {\n        let hasPrevious = _.find(_.sortBy(this.fullSet, function (drawing) {\n                return -drawing.get('sortOrder');\n            }), _.bind(function (drawing) {\n                return drawing.get('sortOrder') < this.model.get('sortOrder');\n            }, this)) != null,\n            hasNext = _.find(_.sortBy(this.fullSet, function (drawing) {\n                return drawing.get('sortOrder');\n            }), _.bind(function (drawing) {\n                return drawing.get('sortOrder') > this.model.get('sortOrder');\n            }, this)) != null;\n        this.$('.btn-prev-drawing').prop('disabled', !hasPrevious);\n        this.$('.btn-next-drawing').prop('disabled', !hasNext);\n    },\n    versionSelected: function (e) {\n        let cid = $(e.currentTarget).data('cid');\n        if (cid != null) {\n            let ver = this.options.versions.get(cid),\n                drawing = ver.drawings.findWhere({name: this.model.get('name')});\n            this.setDrawing(drawing, ver);\n        }\n    },\n    setContextVersion: function (version) {\n        this.contextVersion = version;\n        if (this.options.batch != null) {\n            this.fullSet = _.filter(this.options.batch.drawings.models, function (drawing) {\n                return !drawing.get('isPublished');\n            });\n        } else if (this.options.isEdit || this.contextVersion != null) {\n            this.fullSet = this.contextVersion.drawings.models;\n        } else {\n            this.fullSet = this.options.versions.getUniqueDrawings();\n        }\n\n        this.renderDrawingSelector();\n        this.renderDrawingSort();\n    },\n    setDrawing: function (drawing, version) {\n        this.contextAnnotation = null;\n        this.calibration = null;\n        this.clearAnnotations();\n\n        if (version != null) {\n            this.setContextVersion(version);\n        }\n\n        if (this.options.versions != null && this.options.batch == null) {\n            if (this.contextVersion == null) {\n                // no version was provided, and we dont already have a context version\n                // use the current set (if exists), else use the most recent version by issued on\n                this.contextVersion = this.options.versions.get(-1);\n                if (this.contextVersion == null) {\n                    this.contextVersion = _.sortBy(this.options.versions.models, function (version) {\n                        return -(new Date(version.get('issuedOn'))).getTime();\n                    })[0];\n                }\n            }\n\n            let fnFindByName = function (ver) {\n                return _.find(ver.drawings.models, _.bind(function (verDrawing) {\n                    return drawing.get('name') === verDrawing.get('name');\n                }, this));\n            }\n\n            let contextVerDrawing = fnFindByName(this.contextVersion);\n            if (contextVerDrawing != null) {\n                this.model = contextVerDrawing;\n                this.activeVersion = this.contextVersion;\n            } else {\n                // we weren't able to find the drawing in the context version\n                // find the newest version that was published BEFORE the context version which does contain this drawing\n                let contextVerIssued = (new Date(this.contextVersion.get('issuedOn'))).getTime(),\n                    prevVersions = _.sortBy(_.filter(this.options.versions.models, _.bind(function (ver) {\n                        return ver.id !== -1 && ver.id !== this.contextVersion.id && contextVerIssued >= (new Date(ver.get('issuedOn'))).getTime() && fnFindByName(ver) != null;\n                    }, this)), function (version) {\n                        return -(new Date(version.get('issuedOn'))).getTime();\n                    });\n                if (_.size(prevVersions) > 0) {\n                    this.activeVersion = prevVersions[0];\n                } else {\n                    // we werent able to find this drawing in a version older than the context version\n                    // find the oldest version we have of this drawing that is not the current set\n                    this.activeVersion = _.sortBy(_.filter(this.options.versions.models, function (ver) {\n                        return ver.id !== -1 && fnFindByName(ver) != null;\n                    }), function (version) {\n                        return (new Date(version.get('issuedOn'))).getTime();\n                    })[0];\n                }\n                this.model = fnFindByName(this.activeVersion);\n            }\n        } else {\n            if (version != null) {\n                this.contextVersion = version;\n                this.activeVersion = version;\n            }\n            this.model = drawing;\n        }\n        this.renderDrawing();\n        this.renderPagingState();\n        return {\n            drawing: this.model,\n            version: this.activeVersion\n        };\n    },\n    renderDrawing: function () {\n        if (this.drawingSelector != null) {\n            this.drawingSelector.setValue(this.model.get('name'));\n        }\n\n        this.renderDrawingDetails();\n        this.renderVersionSelector();\n        this.show(this.model.renderUrl(), {\n            persistZoom: true\n        });\n\n        if (this.options.project != null) {\n            this.options.canViewAnnotations = this.options.project.permissions.hasPermission('drawings.canViewAnnotations');\n            this.options.isAnnotationsAdmin = this.options.project.permissions.hasPermission('drawings.isAnnotationsAdmin');\n        } else if (this.options.forShare) {\n            this.options.canViewAnnotations = true;\n            this.options.canAddAnnotations = false;\n            this.options.isAnnotationsAdmin = false;\n        } else {\n            this.options.canViewAnnotations = PJQ.app.session.systemPermissions.hasPermission('drawings.canViewAnnotations');\n            this.options.isAnnotationsAdmin = PJQ.app.session.systemPermissions.hasPermission('drawings.isAnnotationsAdmin');\n        }\n\n        if (this.options.isAnnotationsEnabled && this.options.canViewAnnotations) {\n            this.model.fetchAnnotations({\n                context: this.options.context,\n                contextId: this.options.contextId,\n                accessKey: this.options.accessKey\n            }, _.bind(function (ann) {\n                this.annotations = ann;\n\n                if (this.options.mergeAnnotations != null) {\n                    this.annotations.merge(this.options.mergeAnnotations, this.options.contextId);\n                }\n                this.renderAnnotations();\n            }, this));\n        } else {\n            this.renderAnnotations();\n        }\n    },\n    renderDrawingSelector: function () {\n        let $controls = this.$('.drawing-nav-controls');\n        if (this.options.noNavigation) {\n            $controls.hide();\n            return;\n        }\n\n        let choices = _.map(_.sortBy(this.fullSet, function (drawing) {\n            return drawing.get('sortOrder');\n        }), function (drawing) {\n            return drawing.get('name');\n        });\n\n        if (_.size(choices) === 0) {\n            $controls.hide();\n        } else if (this.drawingSelector != null) {\n            this.drawingSelector.updateChoices(choices);\n            this.drawingSelector.setValue(this.model.get('name'));\n        } else {\n            $controls.show();\n            this.drawingSelector = new PJQ.inputs.Selectpicker({\n                el: this.$('.select-drawing'),\n                hideDisabled: true,\n                defaultValue: this.model.get('name'),\n                choices: choices,\n                onChange: _.bind(function (value) {\n                    let selectedDrawing;\n                    if (this.contextVersion != null) {\n                        selectedDrawing = this.contextVersion.drawings.findWhere({name: value});\n                    }\n                    if (selectedDrawing == null) {\n                        selectedDrawing = _.find(this.fullSet, function (drawing) {\n                            return drawing.get('name') === value;\n                        });\n                    }\n                    this.setDrawing(selectedDrawing)\n                }, this)\n            });\n        }\n    },\n    renderVersionSelector: function () {\n        let $versionSelect = this.$('.drawing-versions');\n        if (this.options.versions == null || this.options.noNavigation) {\n            $versionSelect.empty();\n            return;\n        }\n\n        if (this.options.batch == null && !this.options.isEdit) {\n            let hideIssuedOn;\n            if (this.options.project != null) {\n                hideIssuedOn = this.options.project.preferences.hasPref(PJQ.constants.preferenceTypes.HIDE_VERSION_SELECTOR_ISSUED_ON);\n            } else {\n                hideIssuedOn = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.HIDE_VERSION_SELECTOR_ISSUED_ON);\n            }\n            this.renderSubTemplate(false, this.options.subTemplates.versionSelect, $versionSelect, {\n                versions: this.options.versions.findVersionsForDrawing(this.model, true),\n                contextVersion: this.activeVersion,\n                showCurrentSetLabel: true,\n                hideIssuedOn: hideIssuedOn,\n                currentSet: this.options.versions && this.options.versions.get(-1)\n            });\n        }\n    },\n    renderDrawingDetails: function (callback) {\n        if (this.options.versions == null) {\n            this.$('.btn-drawing-details').addClass('hidden');\n            return;\n        }\n\n        this.$('.btn-drawing-details').removeClass('hidden');\n\n        let canEditTags = this.options.project != null\n            && this.options.project.hasPermission('drawings.isAdmin')\n            && (this.options.project.get('masterUserId') === PJQ.app.session.get('masterUserId'));\n        this.renderSubTemplate(false, this.options.subTemplates.drawingDetails, this.$('.drawing-details'), {\n            model: this.model,\n            version: this.activeVersion,\n            isEdit: this.options.isEdit,\n            currentSet: this.options.versions.get(-1),\n            canEditTags: canEditTags,\n            canEditDrawing: this.options.canEditDrawing,\n            canRemoveCurrentSet: this.options.canEdit\n        }, _.bind(function ($details) {\n            $details.find('.input-drawing-name,.input-drawing-title').on('keydown', _.bind(function (e) {\n                if (e.which === 13) {\n                    if (e.shiftKey) {\n                        if (this.prevDrawing()) {\n                            this.$('.input-drawing-name').focus().select();\n                        }\n                    } else {\n                        if (this.nextDrawing()) {\n                            this.$('.input-drawing-name').focus().select();\n                        }\n                    }\n                }\n            }, this));\n            let tags = [],\n                drawingTags = this.model.get('tags');\n            _.each(this.options.versions.getDrawingTags(), _.bind(function (tag) {\n                if (drawingTags != null && drawingTags.indexOf(tag) === -1 && tags.indexOf(tag) === -1) {\n                    tags.push(tag);\n                }\n            }, this));\n            if (_.size(tags) > 0 && canEditTags) {\n                new PJQ.inputs.AutocompleteInput({\n                    el: $details.find('.input-tag'),\n                    source: tags\n                });\n            }\n            if (typeof callback === 'function') {\n                callback();\n            }\n        }, this));\n    },\n    download: function (e) {\n        this.model.download($(e.currentTarget).data('annotations') === true, this.options.context, this.options.contextId);\n    },\n    nameChanged: function (e) {\n        let name = $(e.currentTarget).val();\n        this.model.set('name', name);\n        this.renderDrawingSelector();\n        this.changed = true;\n    },\n    titleChanged: function (e) {\n        let title = $(e.currentTarget).val();\n        this.model.set('title', title);\n        this.changed = true;\n    },\n    drawingTagInputChanged: function (e) {\n        let tagNameLen = _.size($(e.currentTarget).val().trim());\n        if (e.keyCode === 13 && tagNameLen > 0) {\n            this.addTag();\n            return;\n        }\n\n        this.$('.btn-add-tag').prop('disabled', tagNameLen === 0);\n        this.changed = true;\n    },\n    addTag: function () {\n        let tagString = this.$('.input-tag').val(),\n            tags = [];\n        if (_.size(tagString) > 0) {\n            _.each(tagString.split(','), function (tag) {\n                let tagTrim = tag.trim();\n                if (_.size(tagTrim) > 0) {\n                    tags.push(tagTrim);\n                }\n            });\n        }\n        this.model.addTags(tags, null, _.bind(function () {\n            this.renderDrawingDetails(_.bind(function () {\n                this.$('.input-tag').focus();\n            }, this));\n        }, this));\n        this.changed = true;\n    },\n    deleteTag: function (e) {\n        let tagName = $(e.currentTarget).closest('.drawing-tag').data('name');\n        this.model.deleteTag(tagName, null, _.bind(function () {\n            this.renderDrawingDetails();\n        }, this));\n        this.changed = true;\n    },\n    deleteDrawing: function () {\n        new PJQ.views.modals.DeleteCancel({\n            header: \"Confirm Deletion\",\n            body: \"Are you sure you want to delete this drawing?\",\n            onDelete: _.bind(function () {\n                this.model.destroy({\n                    success: _.bind(function () {\n                        this.changed = true;\n                        this.options.versions.fetch({\n                            success: _.bind(function () {\n                                this.destroy();\n                            }, this)\n                        });\n                    }, this)\n                });\n            }, this)\n        });\n    },\n    scale: 1,\n    mouse: {\n        isClicked: false,\n        isDrawing: false,\n        isDragging: false,\n        dragPoint: null,\n        isMoving: false,\n        moveContext: null,\n        start: null,\n        current: null,\n        isCalibrating: false\n    },\n    relativeMouse: function (e) {\n        let toCanvasX = (e.clientX - this.canvas.x),\n            toCanvasY = (e.clientY - this.canvas.y);\n        return {\n            toCanvas: {\n                x: toCanvasX,\n                y: toCanvasY\n            },\n            x: toCanvasX * this.scale,\n            y: toCanvasY * this.scale\n        };\n    },\n    setMouseStart: function (e) {\n        if (!e) {\n            this.mouse.start = null;\n            return;\n        }\n        this.mouse.start = this.relativeMouse(e);\n        return this.mouse.start;\n    },\n    getMouse: function (e) {\n        return {\n            start: this.mouse.start,\n            current: this.relativeMouse(e),\n            dragPoint: this.mouse.dragPoint,\n            moveContext: this.mouse.moveContext\n        };\n    },\n    isClicked: function () {\n        return this.mouse.isClicked === true;\n    },\n    isDrawing: function () {\n        return this.mouse.isDrawing === true;\n    },\n    canDraw: function () {\n        if (this.annotationMenu == null) {\n            return false;\n        }\n\n        let type = this.annotationMenu.getType();\n        return type !== PJQ.constants.drawings.annotationTypes.INSPECT;\n    },\n    isDragging: function () {\n        return this.mouse.isDragging === true;\n    },\n    isMoving: function () {\n        return this.mouse.isMoving === true;\n    },\n    isCalibrating: function () {\n        return this.mouse.isCalibrating === true;\n    },\n    canEditAnnotations: function () {\n        return !this.isDrawing() && this.annotationMenu != null && this.annotationMenu.getType() === PJQ.constants.drawings.annotationTypes.INSPECT;\n    },\n    startDraw: function (e) {\n        this.setMouseStart(e);\n        this.mouse.isDrawing = true;\n        return this.getMouse(e);\n    },\n    stopDraw: function () {\n        this.mouse.isDrawing = false;\n        this.setMouseStart();\n    },\n    startMove: function (e) {\n        this.setMouseStart(e);\n        this.mouse.moveContext = {\n            start: _.clone(this.contextAnnotation.attributes.start),\n            end: _.clone(this.contextAnnotation.attributes.end),\n            path: this.contextAnnotation.decodePath()\n        }\n        this.mouse.isMoving = true;\n    },\n    stopMove: function () {\n        this.mouse.isMoving = false;\n        this.moveContext = null;\n        this.setMouseStart();\n    },\n    startDrag: function (dragPoint) {\n        this.mouse.isDragging = true;\n        this.mouse.dragPoint = dragPoint;\n    },\n    stopDrag: function () {\n        this.mouse.isDragging = false;\n        this.mouse.dragPoint = null;\n    },\n    startCalibrating: function (e) {\n        let start = this.setMouseStart(e);\n        this.calibration = {\n            start: {\n                x: start.x,\n                y: start.y\n            }\n        };\n        this.mouse.isCalibrating = true;\n    },\n    stopCalibrating: function () {\n        this.mouse.isCalibrating = false;\n        this.setMouseStart();\n        this.startCalibrationStep(2);\n    },\n    drawCalibration: function () {\n        if (this.activeCtx != null && this.calibration != null && this.calibration.end != null) {\n            this.clearCanvas(this.activeCtx);\n            let start = {\n                    x: this.calibration.start.x / this.scale,\n                    y: this.calibration.start.y / this.scale\n                },\n                end = {\n                    x: this.calibration.end.x / this.scale,\n                    y: this.calibration.end.y / this.scale\n                },\n                terminatorHeight = 40 / this.scale,\n                terminatorHalf = terminatorHeight / 2;\n            this.activeCtx.beginPath();\n            this.activeCtx.moveTo(start.x, start.y);\n            this.activeCtx.lineTo(end.x, end.y);\n            this.activeCtx.moveTo(start.x, start.y - terminatorHalf);\n            this.activeCtx.lineTo(start.x, start.y + terminatorHalf);\n            this.activeCtx.moveTo(end.x, end.y - terminatorHalf);\n            this.activeCtx.lineTo(end.x, end.y + terminatorHalf);\n            this.activeCtx.lineWidth = 4 / this.scale;\n            this.activeCtx.setLineDash([0]);\n            this.activeCtx.strokeStyle = PJQ.constants.colors.RED;\n            this.activeCtx.stroke();\n        }\n    },\n    closeCalibration: function () {\n        this.$('.calibration-outer').remove();\n        this.calibration = null;\n        this.drawAnnotations();\n    },\n    startCalibrationStep: function (step) {\n        let stepContent,\n            fnAfterRender = null;\n        switch (step) {\n            case 1:\n                stepContent = '<div class=\"fs-28\">Start the calibration by drawing a line on a known length</div>';\n                break;\n            case 2:\n                stepContent = `<div class=\"fs-24 mb-1\">Enter the length of the drawn line</div>\n\t\t\t\t\t\t\t\t<div class=\"input-group\">\n\t\t\t\t\t\t\t\t\t<div class=\"calibration-type mr-3\"></div>\n\t\t\t\t\t\t\t\t\t<input class=\"form-control calibration-imperial calibration-length-feet wd-80p\">\n\t\t\t\t\t\t\t\t\t<span class=\"calibration-imperial ml-1 mr-2 fs-18 d-flex align-items-center\">feet</span>\n\t\t\t\t\t\t\t\t\t<input class=\"form-control calibration-imperial calibration-length-inches wd-80p\">\n\t\t\t\t\t\t\t\t\t<span class=\"calibration-imperial ml-1 fs-18 d-flex align-items-center\">inches</span>\n\t\t\t\t\t\t\t\t\t<input class=\"form-control calibration-metric wd-100p hidden\" placeholder=\"i.e. 10cm, 10m, 10km\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"mt-2\">\n\t\t\t\t\t\t\t\t\t<button class=\"btn btn-primary btn-save-calibration\">Save Calibration</button>\n\t\t\t\t\t\t\t\t\t<button class=\"btn btn-secondary btn-cancel-calibration\">Cancel</button>\n\t\t\t\t\t\t\t\t</div>`;\n                fnAfterRender = _.bind(function () {\n                    let calibrationTypeBtn = new PJQ.inputs.ButtonGroup({\n                        el: this.$('.calibration-type'),\n                        colorInactiveButtons: true,\n                        buttons: [{\n                            colorClass: 'info',\n                            label: 'Imperial',\n                            value: PJQ.constants.drawings.scaleTypes.IMPERIAL\n                        }, {\n                            colorClass: 'info',\n                            label: 'Metric',\n                            value: PJQ.constants.drawings.scaleTypes.METRIC\n                        }],\n                        buttonClasses: 'wd-80p',\n                        fitHeight: true,\n                        defaultValue: PJQ.constants.drawings.scaleTypes.IMPERIAL,\n                        onChange: _.bind(function (value) {\n                            let $metric = this.$('.calibration-metric'),\n                                $imperial = this.$('.calibration-imperial');\n                            if (value === PJQ.constants.drawings.scaleTypes.METRIC) {\n                                $imperial.addClass('hidden');\n                                $metric.removeClass('hidden');\n                            } else {\n                                $metric.addClass('hidden');\n                                $imperial.removeClass('hidden');\n                            }\n                        }, this)\n                    });\n\n                    this.$('.btn-save-calibration').on('click', _.bind(function () {\n                        let dx = this.calibration.end.x - this.calibration.start.x,\n                            dy = this.calibration.end.y - this.calibration.start.y,\n                            d = Math.sqrt(dx * dx + dy * dy),\n                            calibrationType = calibrationTypeBtn.getValue(),\n                            scale = null;\n                        if (calibrationType.toUpperCase() === PJQ.constants.drawings.scaleTypes.IMPERIAL) {\n                            let $feet = this.$('.calibration-length-feet'),\n                                $inches = this.$('.calibration-length-inches'),\n                                feet = parseInt($feet.val()),\n                                inches = parseInt($inches.val());\n                            if (isNaN(feet)) {\n                                feet = 0;\n                            }\n                            if (isNaN(inches)) {\n                                inches = 0;\n                            }\n                            scale = d / ((feet * 12) + inches);\n                        } else {\n\n                        }\n\n                        if (scale > 0) {\n                            this.model.updateScale(Math.round(scale), calibrationType, _.bind(function () {\n                                PJQ.notifications.notify.successNotify({\n                                    message: 'Calibration saved'\n                                });\n                                this.closeCalibration();\n                                if (this.annotationMenu != null) {\n                                    let nextType;\n                                    if (this.afterCalibrateType != null) {\n                                        nextType = this.afterCalibrateType;\n                                    } else {\n                                        nextType = PJQ.constants.drawings.annotationTypes.INSPECT;\n                                    }\n                                    this.annotationMenu.setType(nextType);\n                                }\n                                this.afterCalibrateType = null;\n                            }, this));\n                        }\n                    }, this));\n                    this.$('.btn-cancel-calibration').on('click', _.bind(function () {\n                        this.closeCalibration();\n                    }, this));\n                }, this);\n                break;\n        }\n        this.$('.calibration-outer').remove();\n        this.imageView.append('<div class=\"calibration-outer\"><div class=\"calibration-inner\">' + stepContent + '</div></div>');\n\n        if (typeof fnAfterRender === 'function') {\n            fnAfterRender();\n        }\n    },\n    onMouseDown: function (e) {\n        if (this.annotations == null) {\n            return;\n        }\n\n        this.mouse.isClicked = true;\n\n        let mouse = this.getMouse(e);\n        if (this.contextAnnotation != null && !this.isDrawing()) {\n            let collidingDragPoint = this.contextAnnotation.getCollidingDragPoint(mouse.current.toCanvas.x, mouse.current.toCanvas.y);\n            if (collidingDragPoint != null) {\n                this.startDrag(collidingDragPoint);\n                return false;\n            }\n        }\n\n        let fnFindColliding = () => {\n            if (this.isMoving() || this.isDrawing() || this.isDragging()) {\n                return false;\n            }\n\n            let colliding = this.annotations.find((a) => {\n                return a.cid !== this.contextAnnotation?.cid && a.collides(mouse.current.x, mouse.current.y);\n            });\n            if (colliding != null) {\n                this.editAnnotation(colliding);\n                return true;\n            }\n            return false;\n        }\n\n        if (!this.options.canAddAnnotations) {\n            fnFindColliding();\n            return false;\n        }\n\n        let canEdit = this.canEditAnnotations(),\n            annotationType = this.annotationMenu?.getType();\n        if (this.annotationMenu != null && annotationType === PJQ.constants.drawings.annotationTypes.CALIBRATION) {\n            this.setContextAnnotation(null);\n            this.startCalibrating(e);\n            return false;\n        } else if ((canEdit || this.annotationMenu == null) && annotationType === PJQ.constants.drawings.annotationTypes.INSPECT) {\n            if (this.contextAnnotation != null && this.contextAnnotation.canEdit()) {\n                if (this.contextAnnotation.collides(mouse.current.x, mouse.current.y)) {\n                    //this currently selected annotation collides\n                    // loop through colliding items and find the next one\n                    setTimeout(() => {\n                        if (this.isClicked()) {\n                            this.startMove(e);\n                            return;\n                        }\n\n                        fnFindColliding();\n                    }, 100);\n                    return !canEdit;\n                }\n            }\n\n            if (fnFindColliding()) {\n                return true;\n            }\n\n            if (!this.isMoving() && !this.isDrawing() && !this.isDragging()) {\n                setTimeout(_.bind(function () {\n                    //if its still clicked, then its moving/dragging/drawing\n                    if (!this.isClicked()) {\n                        this.cancelEditAnnotation();\n                    }\n                }, this), 100);\n            }\n        } else {\n            if (this.contextAnnotation != null) {\n                this.setContextAnnotation(null);\n            }\n            if (annotationType !== PJQ.constants.drawings.annotationTypes.INSPECT) {\n                this.startDraw(e);\n            }\n            return false;\n        }\n    },\n    canvasMouseMove: function (e) {\n        if (this.isCalibrating()) {\n            let mouse = this.getMouse(e);\n            this.calibration.end = {\n                x: mouse.current.x,\n                y: mouse.current.y\n            };\n            this.drawCalibration(e);\n        } else if (this.isDrawing()) {\n            let mouse = this.getMouse(e);\n            if (this.contextAnnotation == null) {\n                let newAnnotation = this.annotations.model({\n                    drawingId: this.model.id,\n                    type: this.annotationMenu.getType(),\n                    color: this.annotationMenu.getColor(),\n                    context: this.options.context,\n                    contextId: this.options.contextId\n                });\n                this.setContextAnnotation(newAnnotation);\n            }\n            this.contextAnnotation.start(mouse.start.x, mouse.start.y);\n            this.contextAnnotation.end(mouse.current.x, mouse.current.y);\n            this.drawContextAnnotation();\n        } else if (this.isDragging()) {\n            let mouse = this.getMouse(e);\n            this.contextAnnotation.moveDragPoint(mouse.dragPoint, mouse.current.x, mouse.current.y);\n            this.drawContextAnnotation();\n        } else if (this.isMoving()) {\n            let mouse = this.getMouse(e),\n                xDiff = mouse.current.x - mouse.start.x,\n                yDiff = mouse.current.y - mouse.start.y;\n            if (_.size(mouse.moveContext.path) > 0) {\n                let newStartX = mouse.moveContext.path[0][0] + xDiff,\n                    newStartY = mouse.moveContext.path[0][1] + yDiff;\n                this.contextAnnotation.start(newStartX, newStartY);\n                this.drawContextAnnotation();\n            } else if (mouse.moveContext.start != null && mouse.moveContext.end != null) {\n                let newStartX = mouse.moveContext.start.x + xDiff,\n                    newStartY = mouse.moveContext.start.y + yDiff,\n                    newEndX = mouse.moveContext.end.x + xDiff,\n                    newEndY = mouse.moveContext.end.y + yDiff,\n                    maxX = this.model.attributes.pixelsX,\n                    maxY = this.model.attributes.pixelsY;\n\n                if (newStartX < 0) {\n                    newEndX -= newStartX;\n                    newStartX = 0;\n                } else if (newEndX >= maxX) {\n                    newStartX -= newEndX - maxX;\n                    newEndX = maxX;\n                }\n\n                if (newStartY < 0) {\n                    newEndY -= newStartY;\n                    newStartY = 0;\n                } else if (newEndY >= maxY) {\n                    newStartY -= newEndY - maxY;\n                    newEndY = maxY;\n                }\n\n                this.contextAnnotation.start(newStartX, newStartY);\n                this.contextAnnotation.end(newEndX, newEndY);\n                this.drawContextAnnotation();\n            }\n        }\n    },\n    saveAnnotation: function (annotation) {\n        if (typeof this.options.onAnnotationChange === 'function') {\n            this.options.onAnnotationChange(annotation);\n        } else {\n            this.contextAnnotation.beforeSave();\n            this.contextAnnotation.isNew() ? this.contextAnnotation.queueSave() : this.contextAnnotation.queuePatch();\n        }\n    },\n    canvasMouseUp: function (e) {\n        this.mouse.isClicked = false;\n        if (this.isCalibrating()) {\n            this.stopCalibrating();\n        } else if (this.isDrawing() || this.isDragging() || this.isMoving()) {\n            let fnSave = _.bind(function () {\n                if (this.contextAnnotation.hasChanged()) {\n                    this.saveAnnotation(this.contextAnnotation);\n                }\n            }, this);\n            if (this.isDrawing()) {\n                this.stopDraw();\n                this.contextAnnotation.normalizeCoords(true);\n                this.annotations.add(this.contextAnnotation);\n                fnSave();\n                this.editAnnotation(this.contextAnnotation);\n\n                if (!this.annotationMenu.enableConsecutive) {\n                    this.annotationMenu.setType(PJQ.constants.drawings.annotationTypes.INSPECT);\n                }\n            } else if (this.isDragging()) {\n                this.stopDrag();\n                this.contextAnnotation.normalizeCoords();\n                fnSave();\n            } else if (this.isMoving()) {\n                this.stopMove();\n                fnSave();\n            }\n        }\n    },\n    canvasMouseLeave: function () {\n        this.mouse.isClicked = false;\n        if (this.isDrawing()) {\n            // this.stopDraw();\n        }\n        if (this.isDragging()) {\n            this.stopDrag();\n        }\n        if (this.isMoving()) {\n            this.stopMove();\n        }\n    },\n    updateScale: function () {\n        this.scale = this.model.attributes.pixelsX / this.canvas.width;\n    },\n    afterDimensionChange: function () {\n        this.updateScale();\n        this.renderAnnotations();\n    },\n    afterLoad: function () {\n        this.renderAnnotations();\n    },\n    renderAnnotations: function () {\n        if (this.options.isAnnotationsEnabled && this.loaded && this.annotations && this.annotations.isFetched) {\n            this.clearAnnotations();\n            this.renderAnnotationMenu();\n            this.drawAnnotations();\n        }\n    },\n    clearCanvas: function (ct) {\n        if (ct != null) {\n            // ct.clearRect(0, 0, this.canvas.width, this.canvas.height);\n            ct.reset();\n        }\n    },\n    clearAnnotations: function () {\n        this.clearCanvas(this.ctx);\n        this.clearCanvas(this.activeCtx);\n    },\n    drawAnnotations: function () {\n        this.drawContextAnnotation();\n        if (this.calibration != null) {\n            this.drawCalibration();\n        }\n\n        this.clearCanvas(this.ctx);\n        _.each(_.filter(this.annotations.models, (annotation) => {\n            return !annotation.get('delete') && (this.options.contextId == null || annotation.get('contextId') == null || (annotation.get('contextId') === this.options.contextId && annotation.get('context') === this.options.context));\n        }), function (annotation) {\n            if (this.contextAnnotation != null && this.contextAnnotation.cid === annotation.cid) {\n                return;\n            }\n            annotation.draw(this.ctx, this.scale, {\n                isDrawing: false,\n                drawing: this.model\n            });\n        }, this);\n    },\n    drawContextAnnotation: function () {\n        this.clearCanvas(this.activeCtx);\n        if (this.contextAnnotation != null) {\n            this.contextAnnotation.draw(this.activeCtx, this.scale, {\n                isDrawing: this.isDrawing(),\n                drawing: this.model\n            });\n            if (!this.isDrawing() && (this.options.isAnnotationsAdmin || !this.contextAnnotation.get('isPublished'))) {\n                this.contextAnnotation.drawDragPoints(this.activeCtx, this.scale);\n            }\n        }\n    },\n    editAnnotation: function (annotation) {\n        this.setContextAnnotation(annotation, true);\n        this.removeEditView();\n\n        let $iv = this.$('.iv-content'),\n            $editOuter = this.$('.annotation-edit-outer');\n        if ($editOuter.length === 0) {\n            $editOuter = $('<div>', {\n                class: 'annotation-edit-outer ht-100 wd-350p position-absolute right-0 top-0 elevation-3'\n            });\n            $iv.append($editOuter);\n        }\n        $iv.addClass('annotating');\n\n        this.editAnnotationView = new PJQ.views.drawings.EditAnnotation({\n            el: $editOuter,\n            model: annotation,\n            project: this.options.project,\n            context: this.options.context,\n            versions: this.options.versions,\n            canEdit: this.options.isAnnotationsAdmin || annotation.canEdit(),\n            isAdmin: this.options.isAnnotationsAdmin,\n            focusText: annotation.isNew() && annotation.get('type') === PJQ.constants.drawings.annotationTypes.TEXT,\n            onAttachmentChange: () => {\n                this.saveAnnotation(annotation);\n            },\n            onAnnotationDataChange: () => {\n                this.drawContextAnnotation();\n                this.saveAnnotation(annotation);\n            },\n            onShapeChange: () => {\n                this.drawContextAnnotation();\n                this.saveAnnotation(annotation);\n            },\n            onPublish: (annotation) => {\n                this.publishAnnotation(annotation);\n            },\n            onDelete: (annotation) => {\n                this.deleteAnnotation(annotation);\n            },\n            onClose: () => {\n                this.cancelEditAnnotation();\n            },\n            onDrawingSelected: (drawing) => {\n                this.cancelEditAnnotation();\n                this.setDrawing(drawing);\n            }\n        });\n    },\n    cancelEditAnnotation() {\n        this.setContextAnnotation(null, true);\n        this.removeEditView();\n    },\n    removeEditView: function () {\n        if (this.editAnnotationView != null) {\n            this.editAnnotationView.remove();\n            this.editAnnotationView = null;\n            this.$('.iv-content').removeClass('annotating');\n        }\n    },\n    publishAnnotation: function (annotation) {\n        if (annotation != null) {\n            annotation.set('isPublished', !annotation.get('isPublished'));\n            if (typeof this.options.onAnnotationChange === 'function') {\n                this.options.onAnnotationChange(annotation);\n            } else {\n                annotation.publish();\n            }\n        }\n    },\n    deleteAnnotation: function (annotation) {\n        if (annotation != null) {\n            if (typeof this.options.onAnnotationChange === 'function') {\n                annotation.set('delete', true);\n                this.options.onAnnotationChange(annotation);\n            } else {\n                this.annotations.remove(annotation);\n                annotation.destroy();\n                this.cancelEditAnnotation();\n            }\n        }\n    },\n    setContextAnnotation: function (annotation = null, redraw = true) {\n        let enablePicker = annotation == null || annotation.canEditColor();\n        if (this.annotationMenu != null) {\n            this.annotationMenu.enableColorPicker(enablePicker);\n        }\n\n        if (annotation) {\n            this.contextAnnotation = annotation;\n            if (this.annotationMenu != null && enablePicker) {\n                this.annotationMenu.setColor(this.contextAnnotation.getStrokeColor());\n            }\n            if (this.$canvas) {\n                this.$canvas.css('opacity', '0.5');\n            }\n        } else {\n            this.contextAnnotation = null;\n            if (this.$canvas) {\n                this.$canvas.css('opacity', 'initial');\n            }\n        }\n\n        if (redraw) {\n            this.drawAnnotations();\n        }\n    },\n    canvasClicked: function () {\n        if (this.annotationMenu != null) {\n            this.annotationMenu.collapseSubMenus();\n        }\n    },\n    renderAnnotationMenu: function () {\n        if (this.annotationMenu != null) {\n            this.annotationMenu.remove();\n        }\n\n        if (this.options.canAddAnnotations === false) {\n            return;\n        }\n\n        this.annotationMenu = new PJQ.views.drawings.AnnotationMenu({\n            el: this.$('.annotation-menu-outer'),\n            type: this.options.annotationMenu.type,\n            color: this.options.annotationMenu.color,\n            project: this.options.project,\n            onColorChange: _.bind(function (color) {\n                this.options.annotationMenu.color = color;\n                if (this.contextAnnotation != null) {\n                    this.contextAnnotation.set('color', color);\n                    this.drawContextAnnotation();\n                    this.contextAnnotation.isNew() ? this.contextAnnotation.queueSave() : this.contextAnnotation.queuePatch();\n                }\n            }, this),\n            onTypeChange: _.bind(function (type) {\n                if (type !== PJQ.constants.drawings.annotationTypes.INSPECT) {\n                    this.setContextAnnotation(null, false);\n                }\n\n                this.options.annotationMenu.type = type;\n                this.drawAnnotations();\n                if (this.canDraw()) {\n                    this.$activeCanvas.addClass('annotate');\n                } else {\n                    this.$activeCanvas.removeClass('annotate');\n                }\n\n                if (this.model.get('scale') == null && (type === PJQ.constants.drawings.annotationTypes.RULER || type === PJQ.constants.drawings.annotationTypes.AREA_RECT\n                    || type === PJQ.constants.drawings.annotationTypes.RULER_FREE_FORM || type === PJQ.constants.drawings.annotationTypes.AREA_FREE_FORM)) {\n                    this.afterCalibrateType = type;\n                    type = PJQ.constants.drawings.annotationTypes.CALIBRATION;\n                    this.annotationMenu.setType(type);\n                }\n\n                if (type === PJQ.constants.drawings.annotationTypes.CALIBRATION) {\n                    this.startCalibrationStep(1);\n                } else {\n                    this.closeCalibration();\n                }\n            }, this)\n        });\n    },\n    onClose: function () {\n        if (typeof this.options.onClose === 'function') {\n            this.options.onClose(this.changed === true);\n        }\n    },\n});\n\nPJQ.views.drawings.AnnotationMenu = PJQ.views.BaseView.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'annotation-menu'),\n        color: PJQ.constants.colors.BLUE,\n        onTypeChange: null,\n        onColorChange: null,\n        enableConsecutive: false\n    },\n    events: {\n        'click .sub-menu-item': 'subMenuItemClicked',\n        'click .consecutive-item': 'consecutiveItemClicked',\n        'click .color-picker-item': 'colorPickerMenuItemClicked',\n        'click .menu-item': 'typeClicked',\n        'click .iv-content': 'collapseAnnotationMenu',\n    },\n    beforeFirstRender: function () {\n        this.enableConsecutive = 'true' === PJQ.helpers.cookieHelpers.getCookie(PJQ.constants.cookies.ENABLE_CONSECUTIVE_DRAWING_ANNOTATIONS);\n        if (this.options.type == null) {\n            this.options.type = PJQ.constants.drawings.annotationTypes.INSPECT;\n        }\n    },\n    renderData: function () {\n        return {\n            enableConsecutive: this.enableConsecutive,\n            type: this.getType(),\n            color: this.getColor(),\n            canViewPunchList: this.options.project.permissions.hasPermission('punchList.canView'),\n            canViewActionItems: this.options.project.permissions.hasPermission('actionItems.canView'),\n            enableRefs: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_DRAWING_ANNOTATION_REFS)\n        };\n    },\n    afterRender: function () {\n        this.renderColorPicker();\n    },\n    renderColorPicker: function () {\n        this.colorPicker = new PJQ.colors.SimpleColorPicker(this.$('.color-menu-outer'), {\n            color: this.options.color,\n            onColorPicked: _.bind(function (color) {\n                this.colorClicked(color);\n            }, this)\n        });\n    },\n    colorClicked: function (color) {\n        this.options.color = color;\n        this.$('.active-color').css('background', this.options.color);\n        if (typeof this.options.onColorChange === 'function') {\n            this.options.onColorChange(this.options.color);\n        }\n        this.render();\n    },\n    colorPickerMenuItemClicked: function () {\n        if (this.colorPickerEnabled === false) {\n            return;\n        }\n\n        this.collapseSubMenus();\n        this.colorPicker.toggle();\n    },\n    hideColorPicker: function () {\n        if (this.colorPicker != null) {\n            this.colorPicker.hide();\n        }\n    },\n    setColor: function (color) {\n        this.options.color = color;\n        if (this.colorPicker != null) {\n            this.colorPicker.setColor(this.options.color);\n            this.render();\n        }\n    },\n    getColor: function () {\n        return this.options.color;\n    },\n    typeClicked: function (e) {\n        e.stopPropagation();\n        let $target = $(e.currentTarget),\n            selectedType = $target.data('type');\n        if (selectedType != null && selectedType !== this.options.type) {\n            this.setType(selectedType);\n        } else {\n            this.render();\n        }\n    },\n    setType: function (type) {\n        this.options.type = type;\n        this.render();\n        if (typeof this.options.onTypeChange === 'function') {\n            this.options.onTypeChange(this.options.type);\n        }\n\n        this.enableColorPicker(PJQ.models.drawings.Annotation.prototype.canEditColor(this.options.type));\n    },\n    getType: function () {\n        return this.options.type;\n    },\n    subMenuItemClicked: function (e) {\n        let $target = $(e.currentTarget),\n            isActive = $target.hasClass('active');\n        this.collapseSubMenus();\n        if (!isActive) {\n            $target.addClass('active');\n        }\n    },\n    consecutiveItemClicked: function () {\n        this.enableConsecutive = !this.enableConsecutive;\n        PJQ.helpers.cookieHelpers.setCookie(PJQ.constants.cookies.ENABLE_CONSECUTIVE_DRAWING_ANNOTATIONS, this.enableConsecutive.toString());\n        this.render();\n    },\n    collapseSubMenus: function (hideColorPicker = false) {\n        this.$('.sub-menu-item').removeClass('active');\n        if (hideColorPicker) {\n            this.hideColorPicker();\n        }\n    },\n    enableColorPicker: function (enabled) {\n        let $colorPicker = this.$('.color-picker-item');\n        if (enabled) {\n            $colorPicker.removeClass('op-3');\n        } else {\n            $colorPicker.addClass('op-3');\n        }\n        this.colorPickerEnabled = enabled;\n    }\n});\n","PJQ.views.drawings.DrawingAreaHighlight = PJQ.views.drawings.DrawingViewer.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Drawing-Area-Highlight'),\n\t\tcanEdit: true,\n\t\tshouldCreateCanvas: true,\n\t\tzoomValue: 100,\n\t\tsnapView: true,\n\t\tisEdit: false,\n\t\tcontext: null,\n\t\tmaxZoom: 500,\n\t\trefreshOnResize: true,\n\t\tzoomOnMouseWheel: true,\n\t\tisHighlighting: false,\n\t\tkeyListeners: []\n\t},\n\tevents: {\n\t\t'click .btn-select-name': 'selectName',\n\t\t'click .btn-select-title': 'selectTitle',\n\t\t'mousedown .iv-image-view': 'canvasMouseDown',\n\t\t'mouseup .iv-image-view': 'canvasMouseUp',\n\t\t'mousemove .iv-image-view': 'canvasMouseMove',\n\t\t'click .btn-save': 'save'\n\t},\n\tcanvasX: 0,\n\tcanvasY: 0,\n\tmouse: {\n\t\tstartX: 0,\n\t\tstartY: 0\n\t},\n\tgetMouse: function (e) {\n\t\treturn {\n\t\t\tx: parseInt((e.clientX - this.canvasX) * this.scale),\n\t\t\ty: parseInt((e.clientY - this.canvasY) * this.scale),\n\t\t\tstartX: this.mouse.startX,\n\t\t\tstartY: this.mouse.startY\n\t\t};\n\t},\n\trenderDrawingDetails: function () {\n\t\t// override from base view - we never want this to do anything in the area picker\n\t},\n\tstartMouse: function (e) {\n\t\tthis.canvasX = this.$canvas.offset().left;\n\t\tthis.canvasY = this.$canvas.offset().top;\n\t\tthis.mouse.startX = parseInt((e.clientX - this.canvasX) * this.scale);\n\t\tthis.mouse.startY = parseInt((e.clientY - this.canvasY) * this.scale);\n\t},\n\tcanvasMouseDown: function (e) {\n\t\tif (!this.options.isHighlighting) {\n\t\t\treturn false;\n\t\t}\n\t\tthis.startMouse(e);\n\t\tthis.mousedown = true;\n\n\t\tlet curMouse = this.getMouse(e);\n\t\tthis.contextLayer.set({\n\t\t\tx: curMouse.startX,\n\t\t\ty: curMouse.startY\n\t\t});\n\t},\n\tcanvasMouseUp: function () {\n\t\tthis.mousedown = false;\n\t\tif (this.contextLayer != null) {\n\t\t\tif (this.contextLayer.get('width') < 0) {\n\t\t\t\tlet wd = this.contextLayer.get('width');\n\t\t\t\tthis.contextLayer.set({\n\t\t\t\t\twidth: -wd,\n\t\t\t\t\tx: this.contextLayer.get('x') + wd\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (this.contextLayer.get('height') < 0) {\n\t\t\t\tlet ht = this.contextLayer.get('height');\n\t\t\t\tthis.contextLayer.set({\n\t\t\t\t\theight: -ht,\n\t\t\t\t\ty: this.contextLayer.get('y') + ht\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (this.contextLayer.get('width') + this.contextLayer.get('x') > this.model.get('pixelsX')) {\n\t\t\t\tthis.contextLayer.set('width', this.model.get('pixelsX') - this.contextLayer.get('x'));\n\t\t\t}\n\n\t\t\tif (this.contextLayer.get('height') + this.contextLayer.get('y') > this.model.get('pixelsY')) {\n\t\t\t\tthis.contextLayer.set('height', this.model.get('pixelsY') - this.contextLayer.get('y'));\n\t\t\t}\n\n\t\t\tthis.contextLayer = null;\n\t\t\tthis.options.isHighlighting = false;\n\t\t\tthis.$activeCanvas.removeClass('annotate');\n\t\t\tthis.renderSelectionActions();\n\t\t}\n\t},\n\tcanvasMouseMove: function (e) {\n\t\tif (!this.options.isHighlighting || !this.mousedown) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet curMouse = this.getMouse(e);\n\t\tthis.contextLayer.set({\n\t\t\twidth: curMouse.x - curMouse.startX,\n\t\t\theight: curMouse.y - curMouse.startY,\n\t\t});\n\t\tthis.renderAnnotations();\n\t},\n\trenderAnnotations: function () {\n\t\tif (this.loaded) {\n\t\t\tthis.clearCanvas(this.activeCtx);\n\t\t\tif (this.nameLayer != null) {\n\t\t\t\tthis.drawRectangle(this.nameLayer);\n\t\t\t}\n\t\t\tif (this.titleLayer != null) {\n\t\t\t\tthis.drawRectangle(this.titleLayer);\n\t\t\t}\n\t\t}\n\t},\n\tdrawRectangle: function (rect) {\n\t\tthis.activeCtx.beginPath();\n\t\tthis.activeCtx.rect(rect.get('x') / this.scale, rect.get('y') / this.scale, rect.get('width') / this.scale, rect.get('height') / this.scale);\n\t\tthis.activeCtx.fillStyle = rect.get('color');\n\t\tthis.activeCtx.fill();\n\t},\n\tselectName: function () {\n\t\tif (this.options.isHighlighting) {\n\t\t\tthis.contextLayer = null;\n\t\t\tthis.options.isHighlighting = false\n\t\t\tthis.$activeCanvas.removeClass('annotate');\n\t\t}\n\t\telse {\n\t\t\tthis.options.isHighlighting = true;\n\t\t\tthis.$activeCanvas.addClass('annotate');\n\t\t\tthis.nameLayer = null;\n\t\t\tthis.renderAnnotations();\n\t\t\tthis.nameLayer = new PJQ.models.BaseModel({\n\t\t\t\tlayerId: 'name',\n\t\t\t\ttype: 'rect',\n\t\t\t\tcolor: '#4caf5075'\n\t\t\t});\n\t\t\tthis.contextLayer = this.nameLayer;\n\t\t}\n\t\tthis.renderSelectionActions();\n\t},\n\tselectTitle: function () {\n\t\tif (this.options.isHighlighting) {\n\t\t\tthis.contextLayer = null;\n\t\t\tthis.options.isHighlighting = false;\n\t\t\tthis.$activeCanvas.removeClass('annotate');\n\t\t}\n\t\telse {\n\t\t\tthis.options.isHighlighting = true;\n\t\t\tthis.$activeCanvas.addClass('annotate');\n\t\t\tthis.titleLayer = null;\n\t\t\tthis.renderAnnotations();\n\t\t\tthis.titleLayer = new PJQ.models.BaseModel({\n\t\t\t\tlayerId: 'title',\n\t\t\t\ttype: 'rect',\n\t\t\t\tcolor: '#ef6c0075'\n\t\t\t});\n\t\t\tthis.contextLayer = this.titleLayer;\n\t\t}\n\t\tthis.renderSelectionActions();\n\t},\n\trenderSelectionActions: function () {\n\t\tif (this.contextLayer != null) {\n\t\t\tif (this.contextLayer.get('layerId') === 'title') {\n\t\t\t\tthis.$('.btn-select-name').prop('disabled', true);\n\t\t\t\tthis.$('.btn-select-title').text('Stop Selecting Title').prop('disabled', false);\n\t\t\t}\n\t\t\telse if (this.contextLayer.get('layerId') === 'name') {\n\t\t\t\tthis.$('.btn-select-title').prop('disabled', true);\n\t\t\t\tthis.$('.btn-select-name').text('Stop Selecting Name').prop('disabled', false);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis.$('.btn-select-name').text(this.nameLayer != null ? 'Change Name Area' : 'Select Name Area').prop('disabled', false);\n\t\t\tthis.$('.btn-select-title').text(this.titleLayer != null ? 'Change Title Area' : 'Select Title Area').prop('disabled', false);\n\t\t}\n\n\t},\n\tcanDrag: function () {\n\t\treturn !this.options.isHighlighting;\n\t},\n\tsave: function () {\n\t\tif (typeof this.options.onSave === 'function') {\n\t\t\tthis.options.onSave({\n\t\t\t\tlayers: {\n\t\t\t\t\tname: this.nameLayer,\n\t\t\t\t\ttitle: this.titleLayer\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.destroy();\n\t\t}\n\t}\n});","PJQ.helpers.drawings = {\n\tcreateDownload: function (project, versions, options) {\n\t\tlet params = [];\n\t\tif (options) {\n\t\t\tif (options.raster) {\n\t\t\t\tparams.push({\n\t\t\t\t\tparameter: 'raster',\n\t\t\t\t\tvalue: options.raster\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (options.merge) {\n\t\t\t\tparams.push({\n\t\t\t\t\tparameter: 'merge',\n\t\t\t\t\tvalue: options.merge\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (options.includeAttachments) {\n\t\t\t\tparams.push({\n\t\t\t\t\tparameter: 'attachments',\n\t\t\t\t\tvalue: options.includeAttachments\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (options.includeMyAnnotations || options.includePublishedAnnotations) {\n\t\t\t\tlet annotationMode = 0;\n\t\t\t\tif (options.includeMyAnnotations && options.includePublishedAnnotations) {\n\t\t\t\t\tannotationMode = 3;\n\t\t\t\t}\n\t\t\t\telse if (options.includeMyAnnotations) {\n\t\t\t\t\tannotationMode = 1;\n\t\t\t\t}\n\t\t\t\telse if (options.includePublishedAnnotations) {\n\t\t\t\t\tannotationMode = 2;\n\t\t\t\t}\n\t\t\t\tparams.push({\n\t\t\t\t\tparameter: 'annotationMode',\n\t\t\t\t\tvalue: annotationMode\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (_.size(PJQ.app.session.get('accessKey')) > 0) {\n\t\t\tparams.push({\n\t\t\t\tparameter: 'accessKey',\n\t\t\t\tvalue: PJQ.app.session.get('accessKey')\n\t\t\t});\n\t\t}\n\n\t\tlet versionsObj = {},\n\t\t\tarr = [];\n\n\t\tif (project != null) {\n\t\t\tarr.push({\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: project.id\n\t\t\t});\n\t\t}\n\t\tarr.push({\n\t\t\tendpoint: 'drawings'\n\t\t});\n\t\tarr.push({\n\t\t\tendpoint: 'downloads'\n\t\t});\n\n\t\t_.each(versions, function (version) {\n\t\t\tversionsObj[version.versionId] = version.guids;\n\t\t});\n\t\tlet endpoint = PJQ.helpers.urlHelpers.generateEndpoint(arr, params),\n\t\t\tdata = {\n\t\t\t\tversions: versionsObj\n\t\t\t};\n\t\tPJQ.files.queueDownload(endpoint, data);\n\t},\n\tgetUnPublishedBatchesCount: function (projectId, callback) {\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: projectId\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'drawings'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'batches'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'unpublished'\n\t\t\t\t}\n\t\t\t])\n\t\t}).get().done(function (data) {\n\t\t\tcallback(data.count);\n\t\t}).fail(function () {\n\t\t\tcallback(null);\n\t\t});\n\t}\n};","PJQ.models.drawings.Version = PJQ.models.BaseModel.extend({\n    idAttribute: 'versionId',\n    notifyName: 'Version',\n    endpoint: function () {\n        return PJQ.helpers.urlHelpers.generateEndpoint([\n            {\n                endpoint: 'projects',\n                value: this.get('projectId')\n            },\n            {\n                endpoint: 'versions',\n                value: this.id\n            }\n        ]);\n    },\n    parse: function (model) {\n        this.drawings = new PJQ.collections.drawings.Drawings(model.drawings);\n        this.listenTo(this.drawings, 'change', _.bind(function () {\n            this.trigger('change');\n        }, this));\n        return model;\n    },\n    beforeSave: function () {\n        this.set('drawings', this.drawings.getChangedModels());\n    },\n    download: function () {\n        PJQ.files.queueDownload(this.endpoint() + '/download');\n    },\n    getDrawingTags: function () {\n        let tags = [];\n        _.each(this.drawings.models, function (drawing) {\n            let drawingTags = drawing.get('tags');\n            if (_.size(drawingTags) > 0) {\n                tags.push(...drawingTags);\n            }\n        });\n        return _.uniq(tags);\n    }\n});\n\nPJQ.models.drawings.DrawingBatch = PJQ.models.BaseModel.extend({\n    idAttribute: 'batchId',\n    notifyName: 'Batch',\n    defaults: {\n        isFileAPI: true\n    },\n    endpoint: function (urlOpts) {\n        if (this.id > 0) {\n            let params = null;\n            if (urlOpts && urlOpts.publish) {\n                params = [\n                    {\n                        parameter: 'publish',\n                        value: true\n                    }\n                ];\n\n                if (urlOpts.billRawFileUploadId) {\n                    params.push({\n                        parameter: 'billRawFileUploadId',\n                        value: urlOpts.billRawFileUploadId\n                    });\n                }\n                if (urlOpts.billDeerfieldTicketId) {\n                    params.push({\n                        parameter: 'billDeerfieldTicketId',\n                        value: urlOpts.billDeerfieldTicketId\n                    });\n                }\n\n            } else if (urlOpts && urlOpts.revert) {\n                params = [\n                    {\n                        parameter: 'revert',\n                        value: true\n                    }\n                ];\n            }\n\n            return PJQ.helpers.urlHelpers.generateEndpoint([\n                {\n                    endpoint: 'drawings'\n                },\n                {\n                    endpoint: 'batches',\n                    value: this.id\n                }\n            ], params);\n        } else if (_.size(this.files.models) > 0) {\n            return PJQ.helpers.urlHelpers.generateEndpoint([\n                {\n                    endpoint: 'projects',\n                    value: this.get('projectId')\n                },\n                {\n                    endpoint: 'drawings'\n                },\n                {\n                    endpoint: 'versions',\n                    value: this.version.id\n                },\n                {\n                    endpoint: 'filebatch'\n                },\n            ], [\n                {\n                    parameter: 'entryList',\n                    value: _.map(this.files.models, function (file) {\n                        return file.get('entryId');\n                    }).join(',')\n                }\n            ]);\n        }\n        return PJQ.helpers.urlHelpers.generateEndpoint([\n            {\n                endpoint: 'projects',\n                value: this.get('projectId')\n            },\n            {\n                endpoint: 'drawings'\n            },\n            {\n                endpoint: 'batches',\n                value: this.id\n            }\n        ]);\n    },\n    parse: function (model) {\n        if (model != null) {\n            if (model.createdBy != null) {\n                this.createdBy = new PJQ.models.users.User(model.createdBy);\n            }\n\n            if (model.version != null) {\n                this.version = new PJQ.models.drawings.Version(model.version);\n            }\n        }\n\n        this.files = new PJQ.collections.files.Files(model.files);\n        this.uploads = new PJQ.collections.drawings.Drawings(model.uploads);\n        this.drawings = new PJQ.collections.drawings.Drawings(model.drawings);\n        return model;\n    },\n    fetchStatus: function (callback) {\n        new PJQ.ajax.Request({\n            endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n                {\n                    endpoint: 'drawings'\n                },\n                {\n                    endpoint: 'batches',\n                    value: this.get('guid')\n                },\n                {\n                    endpoint: 'status'\n                }\n            ])\n        }).get().done(_.bind(function (data) {\n            this.set('status', data.status);\n            callback(data.status);\n        }, this));\n    },\n    beforeSave: function () {\n        if (this.version != null) {\n            this.set('versionId', this.version.id);\n        }\n\n        this.set('files', this.files.getChangedModels());\n        this.set('uploads', this.uploads.getChangedModels());\n        this.set('drawings', this.drawings);\n    }\n});\n\nPJQ.models.drawings.DrawingBatchNotification = PJQ.models.BaseModel.extend({\n    defaults: {\n        isAPIv2: true\n    },\n    endpoint: function () {\n        return PJQ.helpers.urlHelpers.generateEndpoint([\n            {\n                endpoint: 'drawings'\n            },\n            {\n                endpoint: 'batches',\n                value: this.get('batchId')\n            },\n            {\n                endpoint: 'notify',\n                value: this.id\n            }\n        ]);\n    },\n    beforeSave: function () {\n\n    }\n});\n\nPJQ.models.drawings.Drawing = PJQ.models.files.File.extend({\n    idAttribute: 'drawingId',\n    endpoint: function (urlOpts) {\n        let params = [];\n        if (urlOpts && urlOpts.currentSet != null) {\n            params = [\n                {\n                    parameter: 'currentSet',\n                    value: urlOpts.currentSet\n                }\n            ];\n        }\n        return PJQ.helpers.urlHelpers.generateEndpoint([\n            {\n                endpoint: 'drawings',\n                value: _.size(this.get('guid')) > 0 ? this.get('guid') : this.id\n            }\n        ], params);\n    },\n    download: function (withAnnotations = false, context = null, contextId = null) {\n        let downloadUrl = this.endpoint() + '/download';\n        if (PJQ.app.session.project != null) {\n            downloadUrl = \"/projects/\" + PJQ.app.session.project.id.toString() + \"/\" + downloadUrl\n        }\n\n        if (withAnnotations) {\n            downloadUrl += \"?annotations=true&_=\" + PJQ.helpers.guid();\n\n            if (_.size(context) > 0 && contextId > 0) {\n                downloadUrl = downloadUrl + (downloadUrl.indexOf(\"?\") === -1 ? \"?\" : \"&\") + \"context=\" + context + \"&contextId=\" + contextId.toString();\n            }\n        }\n\n        PJQ.files.downloadFile(downloadUrl, {\n            isApi2: true,\n            includeAccessKey: true\n        });\n    },\n    thumbUrl: function () {\n        return this.url({\n            isFileAPI: true\n        }) + \"/thumbnail?r=\" + this.get('rotation').toString();\n    },\n    cropUrl: function () {\n        return this.url({\n            isFileAPI: true\n        }) + \"/crop?r=\" + this.get('rotation').toString() + '&g=' + PJQ.helpers.guid();\n    },\n    cropNameUrl: function () {\n        return this.url({\n            isFileAPI: true\n        }) + \"/cropname?r=\" + this.get('rotation').toString() + '&g=' + PJQ.helpers.guid();\n    },\n    cropTitleUrl: function () {\n        return this.url({\n            isFileAPI: true\n        }) + \"/croptitle?r=\" + this.get('rotation').toString() + '&g=' + PJQ.helpers.guid();\n    },\n    renderUrl: function () {\n        return this.url({\n            isFileAPI: true\n        }) + \"/render?r=\" + this.get('rotation').toString();\n    },\n    rotate: function (degrees, callback) {\n        let curRotation = this.get('rotation'),\n            newRotation = (curRotation ? curRotation : 0) + degrees;\n        if (newRotation >= 360) {\n            newRotation = newRotation -= 360;\n        } else if (newRotation < 0) {\n            newRotation = newRotation += 360;\n        }\n\n        new PJQ.ajax.Request({\n            endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n                {\n                    endpoint: 'drawings',\n                    value: this.get('guid')\n                },\n                {\n                    endpoint: 'rotate'\n                }\n            ], [\n                {\n                    parameter: 'degrees',\n                    value: degrees\n                }\n            ]),\n            isApi2: true\n        }).post().done(_.bind(function (data) {\n            this.set({\n                rotation: newRotation\n            });\n            if (typeof callback === 'function') {\n                callback(true);\n            }\n        }, this)).fail(function () {\n            if (typeof callback === 'function') {\n                callback(false);\n            }\n        });\n    },\n    addTags: function (tags, options, callback) {\n        let newTags = _.difference(tags, this.get('tags')),\n            fnAdd = _.bind(function () {\n                this.get('tags').push(...newTags);\n                this.trigger(\"change\");\n                if (typeof callback === 'function') {\n                    callback(newTags);\n                }\n            }, this);\n        if (options == null || options.save !== false) {\n            new PJQ.ajax.Request({\n                endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n                    {\n                        endpoint: 'drawings',\n                        value: this.id\n                    },\n                    {\n                        endpoint: 'tags'\n                    }\n                ], [\n                    {\n                        parameter: 'tags',\n                        value: newTags.join(',')\n                    }\n                ])\n            }).post().done(_.bind(function () {\n                fnAdd();\n            }, this)).fail(function () {\n                if (typeof callback === 'function') {\n                    callback(null);\n                }\n            });\n        } else {\n            fnAdd();\n        }\n    },\n    deleteTag: function (name, options, callback) {\n        let fnDelete = _.bind(function () {\n            this.set('tags', _.without(this.get('tags'), name));\n            this.trigger(\"change\");\n            if (typeof callback === 'function') {\n                callback(true);\n            }\n        }, this);\n\n        if (options == null || options.save !== false) {\n            new PJQ.ajax.Request({\n                endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n                    {\n                        endpoint: 'drawings',\n                        value: this.id\n                    },\n                    {\n                        endpoint: 'tags'\n                    }\n                ], [\n                    {\n                        parameter: 'name',\n                        value: name\n                    }\n                ])\n            }).delete().done(_.bind(function () {\n                fnDelete();\n            }, this)).fail(function () {\n                callback(false);\n            });\n        } else {\n            fnDelete();\n        }\n    },\n    fetchAnnotations: function (options, callback) {\n        if (this.annotations != null && options.context == this.annotations.options.context && options.contextId == this.annotations.options.contextId) {\n            callback(this.annotations);\n            return;\n        }\n\n        this.annotations = new PJQ.collections.drawings.Annotations(null, {\n            drawingId: this.id,\n            context: options != null ? options.context : null,\n            contextId: options != null ? options.contextId : null,\n            accessKey: options != null ? options.accessKey : null\n        });\n        this.annotations.fetch({\n            success: _.bind(function () {\n                callback(this.annotations);\n            }, this)\n        });\n    },\n    updateScale: function (scale, scaleType, callback) {\n        new PJQ.ajax.Request({\n            endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n                {\n                    endpoint: 'drawings',\n                    value: this.id\n                }\n            ], [\n                {\n                    parameter: 'scale',\n                    value: scale\n                },\n                {\n                    parameter: 'scaleType',\n                    value: scaleType\n                }\n            ])\n        }).put().done(_.bind(function () {\n            this.set({\n                scale: scale,\n                scaleType: scaleType\n            });\n            callback(true);\n        }, this)).fail(function () {\n            callback(false);\n        });\n    }\n});\n\nPJQ.collections.drawings.Versions = PJQ.collections.BaseCollection.extend({\n    model: PJQ.models.drawings.Version,\n    endpoint: function () {\n        if (_.size(this.options.accessKey) > 0) {\n            return PJQ.helpers.urlHelpers.generateEndpoint([\n                {\n                    endpoint: 'drawings'\n                },\n                {\n                    endpoint: 'share',\n                    value: this.options.accessKey\n                }\n            ]);\n        }\n\n        return PJQ.helpers.urlHelpers.generateEndpoint([\n            {\n                endpoint: 'projects',\n                value: this.options.project.id\n            },\n            {\n                endpoint: 'versions'\n            }\n        ]);\n    },\n    getDrawing: function (drawingId) {\n        let result = null;\n        _.each(this.models, function (version) {\n            let drawing = _.find(version.drawings.models, function (drawing) {\n                return drawing.id === drawingId;\n            });\n            if (drawing != null) {\n                result = drawing\n            }\n        });\n        return result;\n    },\n    getDrawingCount: function () {\n        let result = 0;\n        _.each(this.models, function (version) {\n            result += _.size(version.drawings.models);\n        });\n        return result;\n    },\n    getVersionStatsForDrawing: function (drawing) {\n        // total starts at 1 because the code below will not match on \"own version\"\n        // drawings have to belong to at least 1 version, so it starts at 1\n        let result = {\n                older: 0,\n                newer: 0,\n                total: 1,\n                same: false,\n                hide: false\n            },\n            ownVersion = this.get(drawing.get('versionId'))\n        if (ownVersion == null) {\n            result.hide = true;\n        } else {\n            let ownIssued = new Date(ownVersion.get('issuedOn')),\n                ownCreated = new Date(ownVersion.get('createdOn'));\n            _.each(this.models, function (version) {\n                if (version.id > 0 && version.drawings.find(function (verDrawing) {\n                    return drawing.get('name') === verDrawing.get('name') && verDrawing.id !== drawing.id;\n                }) != null) {\n                    result.total++;\n                    if (version.id === ownVersion.id) {\n                        result.same = true;\n                    } else {\n                        let thisIssued = new Date(version.get('issuedOn'));\n                        if (thisIssued > ownIssued) {\n                            result.newer++;\n                        } else if (thisIssued < ownIssued) {\n                            result.older++;\n                        } else {\n                            let thisCreated = new Date(version.get('createdOn'));\n                            if (thisCreated > ownCreated) {\n                                result.newer++;\n                            } else if (thisCreated < ownCreated) {\n                                result.older++;\n                            }\n                        }\n                    }\n                }\n            });\n        }\n        return result;\n    },\n    findVersionsForDrawing: function (drawing, includeOwnVersion = true) {\n        return _.filter(this.models, function (version) {\n            return (includeOwnVersion || (!includeOwnVersion && version.id !== drawing.get('versionId'))) && version.drawings.findWhere({name: drawing.get('name')}) != null;\n        }, this);\n    },\n    getDrawingTags: function () {\n        let result = [];\n        _.each(this.models, function (version) {\n            result.push(...version.getDrawingTags());\n        });\n        return result;\n    },\n    getUniqueDrawings: function (excludeVersion) {\n        let foundNames = [],\n            fullSet = [];\n        _.each(this.models, _.bind(function (version) {\n            if (excludeVersion != null && version.id === excludeVersion.id) {\n                return;\n            }\n\n            _.each(version.drawings.models, _.bind(function (drawing) {\n                let drawingName = drawing.get('name');\n                if (foundNames.indexOf(drawingName) === -1) {\n                    foundNames.push(drawingName);\n                    fullSet.push(drawing);\n                }\n            }, this));\n        }, this));\n        return fullSet;\n    },\n    createPsuedoFolders: function (attachments) {\n        let hasDrawings = false,\n            drawingsFolderId = -parseInt(_.uniqueId()),\n            drawingAttachments = [],\n            tryHideCurrentSet = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.HIDE_CURRENT_SET_WHEN_POSSIBLE),\n            isHideCurrentSet = false;\n        if (tryHideCurrentSet) {\n            let versionsWithDrawings = _.filter(this.models, (version) => {\n                return version.drawings.models.length > 0;\n            });\n            if (versionsWithDrawings.length <= 2) {\n                let getDrawingNames = (version) => {\n                        let drawingNames = [];\n                        _.each(version.drawings.models, (drawing) => {\n                            drawingNames.push(drawing.get('name'));\n                        });\n                        return drawingNames;\n                    },\n                    currentSet = this.get(-1);\n                if (currentSet != null) {\n                    let currentSetDrawingNames = getDrawingNames(currentSet);\n                    isHideCurrentSet = null == _.find(versionsWithDrawings, (version) => {\n                        if (version.id === -1) {\n                            return false;\n                        }\n                        return version.id !== -1 && !_.isEqual(currentSetDrawingNames, getDrawingNames(version));\n                    });\n                }\n            }\n        }\n        _.each(_.sortBy(this.models, function (version) {\n            return new Date(version.get('issuedOn'));\n        }), _.bind(function (version, index) {\n            if (isHideCurrentSet && version.id === -1) {\n                return;\n            }\n\n            if (_.size(version.drawings.models) > 0) {\n                hasDrawings = true;\n\n                let versionFolderId = -parseInt(_.uniqueId());\n                drawingAttachments.push(new PJQ.models.projects.ProjectAttachment({\n                    entryId: versionFolderId,\n                    name: version.get('name'),\n                    folderId: drawingsFolderId,\n                    sortOrder: version.id === -1 ? -1 : index,\n                    isFolder: true,\n                    isDrawing: true,\n                    versionId: version.id,\n                    modifiedOn: version.get('createdOn')\n                }));\n                _.each(version.drawings.models, _.bind(function (drawing) {\n                    drawingAttachments.push(new PJQ.models.projects.ProjectAttachment({\n                        entryId: -parseInt(_.uniqueId()),\n                        name: drawing.get('fileName'),\n                        guid: drawing.get('guid'),\n                        folderId: versionFolderId,\n                        size: drawing.get('fileSize'),\n                        url: drawing.get('url'),\n                        drawingId: drawing.id,\n                        isFolder: false,\n                        isDrawing: true,\n                        versionId: version.id,\n                        sortOrder: drawing.get('sortOrder'),\n                        modifiedOn: version.get('createdOn')\n                    }));\n                }, this));\n            }\n        }, this));\n        if (_.size(drawingAttachments) > 0) {\n            attachments.add(new PJQ.models.projects.ProjectAttachment({\n                entryId: drawingsFolderId,\n                name: \"Drawings\",\n                folderId: 0,\n                isFolder: true,\n                isDrawing: true,\n                modifiedOn: _.max(this.models, function (ver) {\n                    return ver.id;\n                }).get('createdOn'),\n                sortOrder: -2\n            }));\n            attachments.add(drawingAttachments);\n        }\n        return attachments;\n    },\n    download: function () {\n\n    },\n    merge: function () {\n\n    }\n});\n\nPJQ.collections.drawings.DrawingBatches = PJQ.collections.files.Files.extend({\n    model: PJQ.models.drawings.DrawingBatch,\n    endpoint: function () {\n        return PJQ.helpers.urlHelpers.generateEndpoint([\n            {\n                endpoint: 'projects',\n                value: this.options.project.id\n            },\n            {\n                endpoint: 'drawings'\n            },\n            {\n                endpoint: 'batches'\n            }\n        ]);\n    }\n});\n\nPJQ.collections.drawings.Drawings = PJQ.collections.files.Files.extend({\n    model: PJQ.models.drawings.Drawing,\n    endpoint: function (urlOptions) {\n        let params = [];\n        if (urlOptions.byName) {\n            params.push({\n                parameter: 'byName',\n                value: true\n            });\n        }\n        return PJQ.helpers.urlHelpers.generateEndpoint([\n            {\n                endpoint: 'projects',\n                value: this.options.project.id\n            },\n            {\n                endpoint: 'drawings'\n            }\n        ], params);\n    },\n    share: function (versionIds, fileGuids, data, project, callback) {\n        this.options.versionIds = versionIds;\n        this.options.fileGuids = fileGuids;\n        this.options.data = data;\n        this.options.projectId = project ? project.id : null;\n\n        let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n            {\n                endpoint: 'drawings'\n            },\n            {\n                endpoint: 'share'\n            }\n        ], [\n            {\n                parameter: 'allDrawings',\n                value: this.options.allDrawings === true ? true : null\n            }\n        ]);\n        new PJQ.ajax.Request({\n            endpoint: endpoint,\n            data: {\n                projectId: this.options.projectId,\n                subject: data != null ? data.subject : null,\n                emails: data != null ? data.emails : null,\n                versionIds: this.options.versionIds,\n                drawingGuids: _.map(this.models, function (model) {\n                    return model.get('guid');\n                }),\n                guids: this.options.fileGuids\n            }\n        }).post().done(_.bind(function (data) {\n            this.options.url = data.url;\n            this.options.accessKey = data.accessKey;\n            if (typeof callback === 'function') {\n                callback(data);\n            }\n        }, this)).fail(function () {\n            callback();\n        });\n    },\n    update: function (callback) {\n        let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n            {\n                endpoint: 'drawings'\n            },\n            {\n                endpoint: 'share',\n                value: this.options.accessKey\n            }\n        ], [\n            {\n                parameter: 'allDrawings',\n                value: this.options.allDrawings === true ? true : null\n            }\n        ]);\n\n        let data = this.options.data;\n        new PJQ.ajax.Request({\n            endpoint: endpoint,\n            data: {\n                projectId: this.options.projectId,\n                subject: data != null ? data.subject : null,\n                emails: data != null ? data.emails : null,\n                versionIds: this.options.versionIds,\n                drawingGuids: _.map(this.models, function (model) {\n                    return model.get('guid');\n                }),\n                guids: this.options.fileGuids\n            }\n        }).put().done(function (data) {\n            if (typeof callback === 'function') {\n                callback(data);\n            }\n        }).fail(function () {\n            callback();\n        });\n    }\n});\n\nPJQ.models.drawings.DrawingDownload = PJQ.models.files.File.extend({\n    endpointArr: function () {\n        return [\n            {\n                endpoint: 'drawings'\n            },\n            {\n                endpoint: 'downloads',\n                value: this.get('guid')\n            }\n        ];\n    },\n    cancel: function () {\n\n    }\n});\n\nPJQ.collections.drawings.DrawingsShare = PJQ.collections.files.Files.extend({\n    model: PJQ.models.drawings.Drawing,\n    endpoint: function () {\n        return PJQ.helpers.urlHelpers.generateEndpoint([\n            {\n                endpoint: 'drawings'\n            },\n            {\n                endpoint: 'share',\n                value: this.options.accessKey\n            }\n        ]);\n    }\n});","PJQ.views.drawings.OrderDownloadAdmin = PJQ.views.BaseModal.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'modal-order-download-admin'),\n        minWidth: '200px',\n        onOrderPlaced: null\n    },\n    events: {\n        'click .btn-save': 'placeOrder'\n    },\n    beforeModalCreated: function () {\n\n        let fnContinue = _.bind(function() {\n            this.createOrder();\n\n            this.model.beforeSave();\n            let endpoint = this.model.project != null ? [\n                {\n                    endpoint: 'projects',\n                    value: this.model.project.get('projectId')\n                },\n                {\n                    endpoint: 'orders'\n                },\n                {\n                    endpoint: 'calculate'\n                }\n            ] : [\n                {\n                    endpoint: 'orders'\n                },\n                {\n                    endpoint: 'calculate'\n                }\n            ];\n\n            new PJQ.ajax.Request({\n                endpoint: PJQ.helpers.urlHelpers.generateEndpoint(endpoint),\n                data: this.model.attributes\n            }).post().done(_.bind(function (data) {\n                this.price = data.total * 100;\n                this.render();\n            }, this)).fail(function (xhr, err, result) {\n            });\n        }, this);\n\n        if (PJQ.app.session.contact != null) {\n            PJQ.app.session.preferences.fetch();\n            if (!PJQ.app.session.contact.isFetched) {\n                PJQ.app.session.contact.fetch({\n                    success: _.bind(function () {\n                        fnContinue();\n                    }, this)\n                });\n            }\n            else\n                fnContinue();\n        } else if (PJQ.app.session.user != null) {\n            PJQ.app.session.preferences.fetch();\n            if (!PJQ.app.session.user.isFetched) {\n                PJQ.app.session.user.fetch({\n                    success: _.bind(function () {\n                        fnContinue();\n                    }, this)\n                });\n            }\n            else\n                fnContinue();\n        }\n\n    },\n    afterRender: function() {\n        this.$('.file-count').text(_.size(this.options.entryIds));\n        this.$('.unit-cost').text(PJQ.helpers.formatHelpers.formatCurrency(PJQ.app.session.project.orderSettings.get('downloadPerFileFee')));\n        this.$('.total').text(PJQ.helpers.formatHelpers.formatCurrency(this.price));\n        if (this.price)\n            this.$('.btn-save').prop('disabled', false);\n    },\n    createOrder: function () {\n        if (this.model == null) {\n            this.model = new PJQ.models.drawings.Order({\n                project: PJQ.app.session.project,\n                description: \"\",\n                poNumber: \"\",\n                notes: \"\",\n                largeFormatBinding: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ORDER_LARGE_FORMAT_BINDING_TYPE) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_LARGE_FORMAT_BINDING_TYPE) : \"STAPLED\",\n                largeFormatPaperType: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ORDER_LARGE_FORMAT_PAPER_TYPE) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_LARGE_FORMAT_PAPER_TYPE) : \"WHITE BOND\",\n                largeFormatQuantity: PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_LARGE_FORMAT_QUANTITY) > 0 ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_LARGE_FORMAT_QUANTITY) : 1,\n                smallFormatBinding: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ORDER_SMALL_FORMAT_BINDING_TYPE) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_SMALL_FORMAT_BINDING_TYPE) : \"STAPLED\",\n                smallFormatQuantity: PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_SMALL_FORMAT_QUANTITY) > 0 ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_SMALL_FORMAT_QUANTITY) : 1,\n                smallFormatPaperType: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ORDER_SMALL_FORMAT_PAPER_TYPE) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_SMALL_FORMAT_PAPER_TYPE) : \"WHITE BOND\",\n                halfSizeQuantity: 0,\n                cdQuantity: 0,\n                shippingSpeed: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ORDER_DELIVER_BY) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_DELIVER_BY) : \"Next Day (Morning)\",\n                entryIds: this.options.entryIds\n            });\n        }\n\n        this.model.recipients = null;\n        let contact;\n        if (PJQ.app.session.contact != null) {\n            contact = PJQ.app.session.contact;\n        } else if (PJQ.app.session.user != null) {\n            contact = PJQ.app.session.user;\n        } else {\n            contact = new PJQ.models.contacts.Contact();\n        }\n        this.model.set({\n            notifyEmail: contact.get('email'),\n            billingCompanyName: contact.get('companyName'),\n            billingContactName: contact.get('contactName'),\n            billingPhone: contact.get('phone'),\n            billingPhoneExtension: contact.get('phoneExtension'),\n            billingAddress1: contact.get('address1'),\n            billingAddress2: contact.get('address2'),\n            billingCity: contact.get('city'),\n            billingState: contact.get('state'),\n            billingZip: contact.get('zip'),\n            billingCountry: contact.get('country'),\n            isDownload: true\n        });\n    },\n    placeOrder: function() {\n        this.model.save(null, {\n            success: _.bind(function (result) {\n                if (result.get('status') === 'NEW') {\n                    this.removeModal();\n\n                    new PJQ.views.BaseModal({\n                        header: \"Order Completed\",\n                        body: 'Order #' + result.get('orderId') + ' has been placed successfully.',\n                        isShowCancelButton: false\n                    });\n\n                    if (typeof this.options.onOrderPlaced === 'function') {\n                        this.options.onOrderPlaced();\n                    }\n                } else {\n                    let orderType = 'Download';\n                    window.location.href = window.location.origin + '/DesktopModules/PanteraModuleGlobal/OrderPayment.aspx?oc=PROJECT_WALLS&o=' + this.model.id + '&ot=' + orderType;\n                }\n            }, this)\n        });\n    }\n});\n\nPJQ.views.drawings.OrderPrintsModal = PJQ.views.BaseModal.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Modal-Order-Prints'),\n        minWidth: '600px',\n        maxWidth: '1400px',\n        isSelectRecipients: false,\n        onOrderPlaced: null,\n        mode: PJQ.constants.files.modes.PRINT,\n        subTemplates: {\n            orderCalculatedItems: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'ordering-calculated-items')\n        },\n    },\n    events: {\n        'change .input-select-recipients': 'selectRecipientsChanged',\n        'click .btn-close': 'onCancel',\n        'click .btn-save': 'onSave',\n        'click .ordering-folder': 'selectFolder',\n        'click .select-file': 'fileSelectChanged',\n        'click .order-jump-step': 'goToStep',\n        'click .view-file': 'viewFile',\n        'click .delete-recipient': 'deleteRecipient',\n        'click .edit-recipient': 'editRecipient',\n        'click .select-all-files': 'selectAllFiles'\n    },\n    beforeModalCreated: function () {\n        this.options.isAdmin = PJQ.app.session.project != null && PJQ.app.session.project.get('masterUserId') === PJQ.app.session.get('masterUserId');\n        this.mode = this.options.mode ? this.options.mode : 'PRINTS';\n        this.options.maxWidth = this.mode === PJQ.constants.files.modes.ALT_PRINT || (PJQ.app.session.project && PJQ.app.session.project.get('status').toLowerCase() === \"busy\") ? '1400px' : '600px';\n\n        if (this.options.isAdmin && _.size(this.options.recipients) > 0) {\n            this.options.isSelectRecipients = true;\n        }\n\n        // Fetch any updated preferences to make sure all are up to date\n        if (PJQ.app.session.contact != null) {\n            PJQ.app.session.preferences.fetch();\n            if (!PJQ.app.session.contact.isFetched) {\n                PJQ.app.session.contact.fetch({\n                    success: _.bind(function () {\n                        this.render();\n                    }, this)\n                });\n            }\n        } else if (PJQ.app.session.user != null) {\n            PJQ.app.session.preferences.fetch();\n            if (!PJQ.app.session.user.isFetched) {\n                PJQ.app.session.user.fetch({\n                    success: _.bind(function () {\n                        this.render();\n                    }, this)\n                });\n            }\n        }\n    },\n    beforeRender: function () {\n        this.createOrder();\n    },\n    selectRecipientsChanged: function () {\n        this.options.isSelectRecipients = this.$('.input-select-recipients').prop('checked');\n        this.render();\n    },\n    createOrder: function () {\n        if (this.model == null) {\n            this.model = new PJQ.models.drawings.Order({\n                project: PJQ.app.session.project,\n                description: \"\",\n                poNumber: \"\",\n                notes: \"\",\n                largeFormatBinding: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ORDER_LARGE_FORMAT_BINDING_TYPE) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_LARGE_FORMAT_BINDING_TYPE) : \"STAPLED\",\n                largeFormatPaperType: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ORDER_LARGE_FORMAT_PAPER_TYPE) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_LARGE_FORMAT_PAPER_TYPE) : \"WHITE BOND\",\n                largeFormatQuantity: PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_LARGE_FORMAT_QUANTITY) > 0 ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_LARGE_FORMAT_QUANTITY) : 1,\n                smallFormatBinding: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ORDER_SMALL_FORMAT_BINDING_TYPE) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_SMALL_FORMAT_BINDING_TYPE) : \"STAPLED\",\n                smallFormatQuantity: PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_SMALL_FORMAT_QUANTITY) > 0 ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_SMALL_FORMAT_QUANTITY) : 1,\n                smallFormatPaperType: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ORDER_SMALL_FORMAT_PAPER_TYPE) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_SMALL_FORMAT_PAPER_TYPE) : \"WHITE BOND\",\n                halfSizeQuantity: 0,\n                cdQuantity: 0,\n                shippingSpeed: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ORDER_DELIVER_BY) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_DELIVER_BY) : \"Next Day (Morning)\",\n                entryIds: this.options.entryIds\n            });\n        }\n\n        if (this.options.isAdmin && this.options.isSelectRecipients) {\n            this.model.recipients = new PJQ.collections.contacts.Contacts(this.options.recipients != null ? this.options.recipients : []);\n        } else {\n            this.model.recipients = null;\n            let contact;\n            if (PJQ.app.session.contact != null) {\n                contact = PJQ.app.session.contact;\n            } else if (PJQ.app.session.user != null) {\n                contact = PJQ.app.session.user;\n            } else {\n                contact = new PJQ.models.contacts.Contact();\n            }\n            this.model.set({\n                notifyEmail: contact.get('email'),\n                billingCompanyName: contact.get('companyName'),\n                billingContactName: contact.get('contactName'),\n                billingPhone: contact.get('phone'),\n                billingPhoneExtension: contact.get('phoneExtension'),\n                billingAddress1: contact.get('address1'),\n                billingAddress2: contact.get('address2'),\n                billingCity: contact.get('city'),\n                billingState: contact.get('state'),\n                billingZip: contact.get('zip'),\n                billingCountry: _.size(contact.get('country')) > 0 ? contact.get('country') : 'us',\n                isDownload: this.mode === PJQ.constants.files.modes.DOWNLOAD\n            });\n        }\n    },\n    renderData: function () {\n        return {\n            isAdmin: this.options.isAdmin,\n            isSelectRecipients: this.options.isSelectRecipients,\n            mode: this.mode,\n            model: this.model,\n            price: this.price,\n            isPaidDownload: this.options.isPaidDownload\n        };\n    },\n    afterRender: function () {\n        if (this.model != null) {\n            if (this.options.isAdmin && this.options.isSelectRecipients) {\n                new PJQ.views.contacts.ContactsSelectInput({\n                    el: this.$('.order-recipients'),\n                    context: PJQ.app.session.project != null ? PJQ.constants.contacts.contexts.PARTICIPANTS : PJQ.constants.contacts.contexts.CONTACTS,\n                    selectedContact: this.model.recipients.models,\n                    showSelectorAddress: true,\n                    isSingleChoice: false,\n                    onChange: _.bind(function (selectedContacts) {\n                        this.model.recipients.reset(selectedContacts);\n                    }, this)\n                });\n            } else {\n                this.statePicker = new PJQ.inputs.Selectpicker({\n                    el: this.$('.contact-edit-state'),\n                    noneSelectedText: 'Select Value',\n                    defaultValue: this.model.get('billingState'),\n                    onChange: _.bind(function (value) {\n                        this.model.set('billingState', value.toUpperCase());\n                    }, this)\n                });\n                this.countryChanged();\n\n                new PJQ.inputs.Selectpicker({\n                    el: this.$('.contact-edit-country'),\n                    noneSelectedText: 'Select Value',\n                    defaultValue: this.model.get('billingCountry'),\n                    onChange: _.bind(function (value) {\n                        this.model.set('billingCountry', value.toUpperCase());\n                        this.model.set('billingZip', '');\n                        this.model.set('billingState', '');\n                        this.statePicker.setValue('');\n                        this.$('.contact-edit-zip').val('');\n                        this.countryChanged();\n                    }, this)\n                });\n\n                PJQ.helpers.inputHelpers.inputMaskPhone(this.$('.contact-edit-phone'));\n                PJQ.helpers.inputHelpers.inputMaskPhone(this.$('.contact-edit-fax'));\n                PJQ.helpers.inputHelpers.inputMaskPhone(this.$('.contact-edit-cell'));\n            }\n\n            /*\n            new PJQ.views.files.FileSelectInput({\n                el: this.$('.order-files'),\n                project: this.model.project,\n                selectedFiles: this.model.files,\n                collection: this.options.collection,\n                selectorOptions: {\n                    header: 'Select files to order',\n                    confirmButton: 'Update Order'\n                },\n                isShowChangeButton: true,\n                onChange: _.bind(function (selectedFiles) {\n                    this.model.files = selectedFiles;\n                    this.calculateCost();\n                }, this)\n            });\n\n             */\n\n            new PJQ.inputs.Selectpicker({\n                el: this.$('.order-lf-paper'),\n                defaultValue: this.model.get('largeFormatPaperType'),\n                onChange: _.bind(function (value) {\n                    this.model.set('largeFormatPaperType', value.toUpperCase());\n                }, this)\n            });\n            new PJQ.inputs.Selectpicker({\n                el: this.$('.order-lf-binding'),\n                defaultValue: this.model.get('largeFormatBinding'),\n                onChange: _.bind(function (value) {\n                    this.model.set('largeFormatBinding', value.toUpperCase());\n                }, this)\n            });\n\n            new PJQ.inputs.Selectpicker({\n                el: this.$('.order-sf-paper'),\n                defaultValue: this.model.get('smallFormatPaperType'),\n                onChange: _.bind(function (value) {\n                    this.model.set('smallFormatPaperType', value.toUpperCase());\n                }, this)\n            });\n            new PJQ.inputs.Selectpicker({\n                el: this.$('.order-sf-binding'),\n                defaultValue: this.model.get('smallFormatBinding'),\n                onChange: _.bind(function (value) {\n                    this.model.set('smallFormatBinding', value.toUpperCase());\n                }, this)\n            });\n\n            new PJQ.inputs.Selectpicker({\n                el: this.$('.order-shipping-speed'),\n                defaultValue: this.model.get('shippingSpeed'),\n                onChange: _.bind(function (value) {\n                    this.model.set('shippingSpeed', value.toUpperCase());\n                }, this)\n            });\n\n            if (this.price == null && this.mode === PJQ.constants.files.modes.DOWNLOAD) {\n                this.calculateCost();\n            }\n\n            if(this.mode === PJQ.constants.files.modes.ALT_PRINT){\n                this.goToStep(1)\n                this.renderFolderPicker();\n                this.renderAddressBook();\n            }\n\n            new PJQ.Binder(this.$el, this.model);\n        } else {\n            new PJQ.Loader(this.$('.order-loading'));\n        }\n    },\n    deleteRecipient: function(e){\n        let target = $(e.currentTarget),\n            contactId = target.closest('.card-body').data('id');\n\n        this.model.recipients.remove(contactId);\n        this.calculateCost();\n    },\n    editRecipient: function(e){\n        let target = $(e.currentTarget),\n            contactId = target.closest('.card-body').data('id');\n\n        new PJQ.views.contacts.BaseEditContactModal({\n            model: this.model.recipients.get(contactId),\n            onSave: _.bind(function () {\n                this.calculateCost();\n            }, this)\n        });\n    },\n    selectAllFiles: function(e){\n        let isChecked = $(e.currentTarget).prop('checked'),\n            fileSelects = this.$('.select-file');\n\n        if(isChecked){\n            this.model.files = _.union(this.model.files, this.selectedFolderFiles);\n        }\n        else{\n            _.each(this.selectedFolderFiles, function(file){\n                this.model.files = _.without(this.model.files, file);\n            }, this)\n        }\n\n        fileSelects.prop('checked', isChecked);\n\n        this.$('.order-selected-file-count').text(this.model.files.length);\n        this.$('.step-1-continue').attr('disabled', !_.size(this.model.files) > 0);\n    },\n    viewFile: function(e){\n        let target = $(e.currentTarget),\n            row = this.filesTable.getRow(target.closest('tr')),\n            file = row.data();\n\n        if (file.isImage()) {\n            PJQ.app.view.renderPhotoViewer({\n                model: file,\n                canDownload: false,\n                canDelete: false\n            });\n        }\n        else if (file.canRender()) {\n            new PJQ.views.files.FileViewer({\n                model: file,\n                isDisableDownload: true\n            });\n        }\n    },\n    renderFolderPicker: function(selectedFolder){\n        let fnRender = _.bind(function(){\n            this.folders = _.filter(this.attachments.models, function (attachment) {\n                let isSecondLevel = false;\n                if(attachment.get('isFolder') && attachment.get('entryId') !== -1){\n                    let parent = this.attachments.get(attachment.get('folderId'));\n                    if(parent){\n                        isSecondLevel = parent.get('entryId') === -1 || parent.get('folderId') === 0;\n                    }\n                }\n                return isSecondLevel && _.size(attachment.getFolderAttachments(true, {\n                    hideFolders: true\n                })) > 0;\n            }, this);\n\n            if (selectedFolder) {\n                this.selectedFolder = _.find(this.attachments.models, function (folder) {\n                    return folder.id === selectedFolder;\n                })\n            }\n            else {\n                this.selectedFolder = this.folders[0];\n            }\n\n            if(this.selectedFolder){\n                this.selectedFolderFiles = _.filter(this.attachments.models, function (attachment) {\n                    return attachment.get('folderId') === this.selectedFolder.get('entryId') && !attachment.get('isFolder');\n                }, this)\n            }\n\n            let templateData = {\n                models: this.folders,\n                selectedFolder: this.selectedFolder\n            }\n            this.renderFilesTable();\n        }, this);\n        if(this.attachments == null || this.folders == null) {\n            this.options.project.fetchAttachments({\n                isShared: true,\n                isPrivate: false,\n                forceRecursive: true\n            }, _.bind(function (attachments) {\n                this.attachments = attachments;\n                fnRender();\n            }, this))\n        }\n        else{\n            fnRender();\n        }\n    },\n    renderAddressBook: function(){\n        this.addressBookView = new PJQ.views.addressbook.AddressBook({\n            el: this.$('.address-book'),\n            selectionMode: PJQ.constants.addressBook.selectionMode.ADD_TO_PROJECT,\n            disabledContacts: [],\n            disabledContactGroups: null,\n            onSelection: _.bind(function (contactsAll, contactsNoGroup, contactGroups) {\n                this.$('.order-selected-contact-count').text(contactsAll.length);\n                this.$('.step-2-continue').attr('disabled', !contactsAll.length > 0);\n                this.selectedRecipients = contactsAll;\n            }, this)\n        });\n    },\n    renderFilesTable: function () {\n        this.filesTable = new PJQ.views.dataTables.DataTable({\n            el: this.$(\".file-selector-table\"),\n            data: this.selectedFolderFiles,\n            rowId: \"cid\",\n            order: [0, 'asc'],\n            language: {\n                zeroRecords: 'Folder contains no files'\n            },\n            pageLength: 50,\n            onRowDoubleClick: _.bind(function (row) {\n\n            }, this),\n            columns: [\n                {\n                    \"columnData\": '',\n                    \"title\": '<div class=\"pretty p-default p-icon p-smooth fs-18 m-0\"><input type=\"checkbox\" class=\"select-all-files\" /><div class=\"state\"><label class=\"wd-0\">&nbsp;</label></div></div>',\n                    \"width\": \"20px\",\n                    \"data\": \"null\",\n                    \"orderable\": false,\n                    \"searchable\": false,\n                    \"render\": _.bind(this.renderFileSelect, this)\n                },\n                {\n                    \"title\": \"Name\",\n                    \"data\": \"attributes.name\",\n                    \"orderable\": true\n                },\n                {\n                    \"title\": \"Folder\",\n                    \"data\": \"\",\n                    \"orderable\": true,\n                    \"render\": _.bind(function (data, a, b) {\n                        return this.selectedFolder.get('name');\n                    }, this)\n                },\n                {\n                    \"data\": \"\",\n                    \"title\": \"\",\n                    \"orderable\": false,\n                    \"searchable\": false,\n                    \"width\": \"80px\",\n                    \"render\": _.bind(function (data, type, row) {\n                        if(row.canRender() || row.isImage()){\n                            return '<div class=\"text-align-right show-on-row-hover\"><button type=\"button\" class=\"btn btn-info view-file ht-30p wd-35p ml-1 fs-14\"><span class=\"fal fa-eye\"></span></button></div>';\n                        }\n                        else{\n                            return '';\n                        }\n                    }, this)\n                }\n            ]\n        });\n    },\n    selectFolder: function(e){\n        let target = $(e.currentTarget);\n        this.renderFolderPicker(target.data('id'));\n    },\n    renderFileSelect: function (data, type, row) {\n        let isSelected = _.find(this.model.files, function(file){\n            return file.get('entryId') === row.get('entryId')\n        }, this) != null\n\n        this.manageSelectAllButtonState();\n\n        return ('<div class=\"text-align-center\"><div class=\"pretty p-default p-curve fs-22 m-0\">' +\n            '<input type=\"checkbox\"' + (isSelected  ? ' checked ' : '') + ' class=\"select-file' + '\" />' +\n            '<div class=\"state p-primary\"><label class=\"wd-0\">&nbsp;</label></div>' +\n            '</div></div>');\n    },\n    fileSelectChanged: function (e) {\n        let tr = $(e.currentTarget).closest('tr'),\n            row = this.filesTable.getRow(tr),\n            file = row.data();\n        if ($(e.currentTarget).prop('checked')) {\n            this.model.files.push(file);\n        }\n        else {\n            this.model.files = _.without(this.model.files, file);\n        }\n\n        this.manageSelectAllButtonState();\n        this.$('.order-selected-file-count').text(this.model.files.length);\n        this.$('.step-1-continue').attr('disabled', !_.size(this.model.files) > 0);\n    },\n    countryChanged: function () {\n        let country = this.model.get('billingCountry') && this.model.get('billingCountry').length > 0 ? this.model.get('billingCountry').toLowerCase() : 'us',\n            options = '<option disabled value=\"\">Select Value</option>';\n        _.each(PJQ.constants.states[country], function (state) {\n            options += '<option value=\"' + state.abbreviation.toLowerCase() + '\">' + state.name + '</option>';\n        });\n        this.statePicker.$el.html(options);\n        this.statePicker.refresh();\n        if (this.model.get('billingState'))\n            this.statePicker.setValue(this.model.get('billingState').toLowerCase());\n\n        PJQ.helpers.inputHelpers.inputMaskZip(this.$('.contact-edit-zip'), country);\n    },\n    manageSelectAllButtonState: function() {\n        let isSelectAll = true;\n        _.each(this.selectedFolderFiles, function(row){\n            if(isSelectAll){\n                isSelectAll = _.find(this.model.files, function(file){\n                    return file.get('entryId') === row.get('entryId')\n                }, this) != null\n            }\n        }, this)\n\n        this.$('.select-all-files').prop('checked', isSelectAll);\n    },\n    goToStep: function (step) {\n        if(step.currentTarget){\n            this.step = $(step.currentTarget).data('step')\n        }\n        else{\n            this.step = step;\n        }\n        let thisStep = $('.step-' + this.step.toString()),\n            thisStepHeader = $('.step-header-' + this.step.toString());\n        this.$('[class*=step-]').not(thisStep).collapse('hide');\n        this.$('[class*=step-header-]').not(thisStepHeader).removeClass('text-primary').addClass('text-dark op-4');\n        thisStepHeader.removeClass('text-dark op-4').addClass('text-primary');\n\n        if (this.step === 1) {\n            this.$('.order-selected-file-count').parent().removeClass('text-dark op-4').addClass('text-info');\n            this.$('.order-selected-contact-count').parent().removeClass('text-info').addClass('text-dark op-4');\n        }\n        else if (this.step === 2) {\n            this.$('.order-selected-file-count').parent().removeClass('text-info').addClass('text-dark op-4');\n            this.$('.order-selected-contact-count').parent().removeClass('text-dark op-4').addClass('text-info');\n        }\n        else if (this.step === 3) {\n            this.$('.order-selected-contact-count').parent().removeClass('text-info').addClass('text-dark op-4');\n\n            if(this.model.recipients == null){\n                this.model.recipients = new PJQ.collections.contacts.Contacts();\n            }\n            this.model.recipients.reset(_.map(this.selectedRecipients, function(contact, a, b){\n                return new PJQ.models.contacts.Contact({\n                    contactId: contact,\n                    id: contact\n                });\n            }, this));\n            this.calculateCost();\n        }\n\n\n        // don't hide the footer if the project is offline\n        let isOnline = false;\n        if(!PJQ.app.session.project){\n            isOnline = true;\n        }\n        else if(PJQ.app.session.project && PJQ.app.session.project.get('status').toLowerCase() !== \"busy\"){\n            isOnline = true;\n        }\n\n        this.$('.modal-footer').attr('hidden', this.step !== 3 && isOnline);\n\n        thisStep.collapse('show');\n    },\n    calculateCost: function () {\n        this.model.beforeSave();\n        let endpoint = this.model.project != null ? [\n            {\n                endpoint: 'projects',\n                value: this.model.project.get('projectId')\n            },\n            {\n                endpoint: 'orders'\n            },\n            {\n                endpoint: this.mode === PJQ.constants.files.modes.ALT_PRINT ? 'calculatemultiple' : 'calculate'\n            }\n        ] : [\n            {\n                endpoint: 'orders'\n            },\n            {\n                endpoint: 'calculate'\n            }\n        ];\n\n        new PJQ.ajax.Request({\n            endpoint: PJQ.helpers.urlHelpers.generateEndpoint(endpoint),\n            data: this.model.attributes\n        }).post().done(_.bind(function (data) {\n            if(this.mode === PJQ.constants.files.modes.ALT_PRINT){\n                this.renderCalculatedTotals(data);\n            }\n            else{\n                this.price = data.total * 100;\n                this.render();\n            }\n        }, this)).fail(function (xhr, err, result) {\n        });\n    },\n    renderCalculatedTotals: function(orders) {\n        let templateData = {\n            orders: orders\n        }\n        this.renderSubTemplate(false, this.options.subTemplates.orderCalculatedItems, this.$('.calculated-totals'), templateData);\n    },\n    onCancel: function () {\n        this.removeModal();\n    },\n    onSave: function () {\n        let hasError = false;\n\n        if (this.options.isAdmin && this.options.isSelectRecipients) {\n            if (_.size(this.model.recipients.models) === 0) {\n                hasError = true;\n            }\n        }\n        else if(this.mode === PJQ.constants.files.modes.ALT_PRINT){\n            if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ORDER_PO_REQUIRED)) {\n                let $po = this.$('.order-po-number');\n                PJQ.helpers.inputHelpers.setInputError($po, true);\n                if (_.size(this.model.get('poNumber')) === 0) {\n                    PJQ.helpers.inputHelpers.setInputError($po, false);\n                    hasError = true;\n                }\n            }\n        }\n        else{\n            let $company = this.$('.contact-edit-company');\n            PJQ.helpers.inputHelpers.setInputError($company, true);\n            if (_.size($company.val()) === 0) {\n                PJQ.helpers.inputHelpers.setInputError($company, false);\n                hasError = true;\n            }\n\n            let $contact = this.$('.contact-edit-name');\n            PJQ.helpers.inputHelpers.setInputError($contact, true);\n            if (_.size($contact.val()) === 0) {\n                PJQ.helpers.inputHelpers.setInputError($contact, false);\n                hasError = true;\n            }\n\n            let $address1 = this.$('.contact-edit-address-1');\n            PJQ.helpers.inputHelpers.setInputError($address1, true);\n            if (_.size($address1.val()) === 0) {\n                PJQ.helpers.inputHelpers.setInputError($address1, false);\n                hasError = true;\n            }\n\n            let $city = this.$('.contact-edit-city');\n            PJQ.helpers.inputHelpers.setInputError($city, true);\n            if (_.size($city.val()) === 0) {\n                PJQ.helpers.inputHelpers.setInputError($city, false);\n                hasError = true;\n            }\n\n            let $zip = this.$('.contact-edit-zip');\n            PJQ.helpers.inputHelpers.setInputError($zip, true);\n            if (_.size($zip.val()) === 0) {\n                PJQ.helpers.inputHelpers.setInputError($zip, false);\n                hasError = true;\n            }\n\n            let $state = this.$('select.contact-edit-state');\n            PJQ.helpers.inputHelpers.setInputError($state, true);\n            if (_.size(this.model.get('billingState')) === 0) {\n                PJQ.helpers.inputHelpers.setInputError($state, false);\n                hasError = true;\n            }\n\n            let $country = this.$('select.contact-edit-country');\n            PJQ.helpers.inputHelpers.setInputError($country, true);\n            if (_.size(this.model.get('billingCountry')) === 0) {\n                PJQ.helpers.inputHelpers.setInputError($country, false);\n                hasError = true;\n            }\n\n            let $email = this.$('.contact-edit-email');\n            PJQ.helpers.inputHelpers.setInputError($email, true);\n            if (_.size($email.val()) === 0) {\n                PJQ.helpers.inputHelpers.setInputError($email, false);\n                hasError = true;\n            }\n\n            let $phone = this.$('.contact-edit-phone');\n            PJQ.helpers.inputHelpers.setInputError($phone, true);\n            if (_.size(this.model.get('billingPhone')) === 0) {\n                PJQ.helpers.inputHelpers.setInputError($phone, false);\n                hasError = true;\n            }\n        }\n\n        if (_.size(this.options.entryIds) === 0)\n            hasError = true;\n\n        if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ORDER_PO_REQUIRED) && this.mode !== PJQ.constants.files.modes.DOWNLOAD) {\n            let $po = this.$('.order-po-number');\n            PJQ.helpers.inputHelpers.setInputError($po, true);\n            if (_.size(this.model.get('poNumber')) === 0) {\n                PJQ.helpers.inputHelpers.setInputError($po, false);\n                hasError = true;\n            }\n        }\n\n        if (hasError) {\n            this.$('.ordering-error').removeClass('hidden');\n        } else {\n            this.$('.ordering-error').addClass('hidden');\n            this.model.save(null, {\n                success: _.bind(function (result) {\n                    if (this.options.isAdmin && result.get('status') === 'NEW' && this.mode !== PJQ.constants.files.modes.DOWNLOAD) {\n                        PJQ.notifications.notify.successNotify({\n                            message: 'Order #' + result.get('orderId') + ' placed successfully'\n                        });\n                        this.removeModal();\n\n                        if (typeof this.options.onOrderPlaced === 'function') {\n                            this.options.onOrderPlaced();\n                        }\n                    } else {\n                        let orderType = this.mode === PJQ.constants.files.modes.DOWNLOAD ? 'Download' : 'OrderPrints';\n                        window.location.href = window.location.origin + '/DesktopModules/PanteraModuleGlobal/OrderPayment.aspx?oc=PROJECT_WALLS&o=' + this.model.id + '&ot=' + orderType;\n                    }\n                }, this)\n            });\n        }\n    }\n});\n\nPJQ.models.drawings.Order = PJQ.models.BaseModel.extend({\n    idAttribute: 'orderId',\n    endpoint: function () {\n        if (this.project != null) {\n            return PJQ.helpers.urlHelpers.generateEndpoint([\n                {\n                    endpoint: 'projects',\n                    value: this.project.id\n                },\n                {\n                    endpoint: 'orders'\n                }\n            ])\n        }\n\n        return PJQ.helpers.urlHelpers.generateEndpoint([\n            {\n                endpoint: 'orders'\n            }\n        ])\n    },\n    parse: function (model) {\n        if (model == null) {\n            return model;\n        }\n\n        if (model.project != null) {\n            this.project = model.project;\n        }\n\n        if (model.recipients != null) {\n            this.recipients = model.recipients;\n        }\n\n        return model;\n    },\n    beforeSave: function () {\n        this.set({\n            recipients: this.recipients ? this.recipients.toJSON() : []\n        })\n    }\n});\n","PJQ.views.drawings.DrawingUploadLogModal = PJQ.views.BaseModal.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Modal-Upload-Log'),\n        width: 800,\n        maxWidth: '90%'\n    },\n    events: {\n        'click .btn-revert-batch': 'revertBatch',\n        'click .btn-notify': 'notify',\n        'click .btn-publish-batch': 'publishBatch',\n        'click .btn-delete-batch': 'deleteBatch',\n        'click .btn-new-batch': 'newBatch',\n        'click .btn-close': 'close'\n    },\n    beforeModalCreated: function () {\n        this.collection = new PJQ.collections.drawings.DrawingBatches(null, {\n            project: this.options.project\n        });\n        this.collection.fetch({\n            success: _.bind(function () {\n                this.render();\n                this.listenTo(this.collection, 'fetch', this.render);\n            }, this)\n        });\n    },\n    afterRender: function () {\n        this.dataTable = new PJQ.views.dataTables.DataTable({\n            el: this.$('.upload-log'),\n            data: this.collection.models,\n            language: {\n                zeroRecords: 'Click \"Upload Drawings\" to publish a new version'\n            },\n            isHideSearch: true,\n            order: [3, 'desc'],\n            columns: [\n                {\n                    \"data\": \"attributes.drawingCount\",\n                    \"render\": _.bind(function (data, type, row) {\n                        if (row.get('status') === 2) {\n                            return '<div class=\"text-orange fs-16\"><i class=\"fad fa-file\"></i> ' + data.toString() + '</div>';\n                        }\n                        return '';\n                    }, this),\n                    \"title\": \"\",\n                    \"width\": \"50px\"\n                },\n                {\"data\": \"attributes.versionName\", \"title\": \"Version\", \"orderable\": true},\n                {\n                    \"data\": \"createdBy\",\n                    \"render\": _.bind(function (data) {\n                        return PJQ.helpers.contacts.getContactAnchor({id: -data.id, name: data.get('companyName')});\n                    }, this),\n                    \"title\": \"Created By\"\n                },\n                {\n                    \"data\": {\n                        \"_\": function (row) {\n                            return new Date(row.get('createdOn'));\n                        },\n                        \"filter\": \"attributes.createdOn\",\n                        \"display\": function (row) {\n                            return PJQ.helpers.dateHelpers.getDateString(new Date(row.get('createdOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME);\n                        }\n                    },\n                    \"title\": \"Created On\",\n                    \"width\": \"150px\"\n                },\n                {\n                    \"data\": \"attributes.isPublished\",\n                    \"title\": \"\",\n                    \"orderable\": false,\n                    \"searchable\": false,\n                    \"render\": _.bind(function (data, type, row) {\n                        let status = row.get('status'),\n                            content;\n                        if (status === 0 || status === 1) {\n                            content = '<span class=\"text-info fs-16 font-weight-light\">Processing...</span>';\n                        } else if (status === 2 && row.get('isPublished')) {\n                            let btn = `<div class=\"btn-group\">\n                                <button type=\"button\"\n                                        class=\"btn btn-light dropdown-toggle btn-sm ml-2\" data-toggle=\"dropdown\"\n                                        aria-haspopup=\"true\"\n                                        aria-expanded=\"false\">\n                                    <i class=\"fad fa-ellipsis-v ml-1\"></i>\n                                </button>\n                                <div class=\"dropdown-menu\">\n                                    <a class=\"dropdown-item btn-notify\" title=\"Save these project action items as a template\"\n                                       href=\"javascript:void(0)\">Send Notifications</a>\n                                    <div class=\"dropdown-divider\"></div>\n                                    <a class=\"dropdown-item btn-revert-batch\" title=\"Import system template to this project\"\n                                       href=\"javascript:void(0)\">Un-Publish</a>\n                                </div>\n                            </div>`;\n                            // let btn = '<button type=\"button\" title=\"Revert\" class=\"btn btn-light ml-2 btn-revert-batch\"><i class=\"fad fa-undo\"></i></button>';\n                            content = '<span class=\"text-success fs-16 font-weight-light\">Published</span>' + btn;\n                        } else {\n                            content = '<button type=\"button\" class=\"btn btn-sm btn-success btn-publish-batch mr-1\">Publish</button><button type=\"button\" class=\"btn btn-sm btn-danger btn-delete-batch\">Delete</button>';\n                        }\n                        return '<div class=\"text-align-center\">' + content + '</div>';\n                    }, this),\n                    \"width\": '150px'\n                }\n            ],\n            dom: '<\"top\"<\"clear\">>rt<\"bottom\"p<\"clear\">>'\n        });\n\n        _.each(this.collection.models, _.bind(function (batch) {\n            this.checkBatchStatus(batch)\n        }, this));\n    },\n    checkBatchStatus: function (batch) {\n        if (batch.get('status') === 0 || batch.get('status') === 1) {\n            batch.statusTimeout = setTimeout(_.bind(function () {\n                batch.fetchStatus(_.bind(function (status) {\n                    if (status === 2) {\n                        // we want to fetch the batch now to get the correct drawing count\n                        this.collection.fetch({\n                            success: _.bind(function () {\n                                this.dataTable.refresh();\n                            }, this)\n                        });\n                        return;\n                    }\n                    this.checkBatchStatus(batch);\n                }, this));\n            }, this), 3000)\n        }\n    },\n    notify: function (e) {\n        this.removeModal();\n\n        let row = this.dataTable.getRow($(e.currentTarget).closest('tr')),\n            batch = row.data();\n        new PJQ.views.drawings.BatchNotifyModal({\n            batch: batch,\n            versions: this.options.versions\n        });\n    },\n    revertBatch: function (e) {\n        let row = this.dataTable.getRow($(e.currentTarget).closest('tr')),\n            batch = row.data();\n        new PJQ.views.modals.YesNo({\n            header: \"Revert Upload\",\n            body: \"Are you sure you want to revert?  This will un-publish all of the drawings in this upload.\",\n            onYes: _.bind(function () {\n                batch.save(null, {\n                    urlOptions: {\n                        revert: true\n                    },\n                    success: _.bind(function () {\n                        batch.set('isPublished', false);\n                        this.dataTable.refresh();\n                        this.options.versions.fetch({\n                            success: _.bind(function () {\n                                PJQ.notifications.notify.successNotify({\n                                    message: 'Drawing upload reverted'\n                                });\n                            }, this)\n                        });\n                    }, this)\n                });\n            }, this)\n        });\n    },\n    publishBatch: function (e) {\n        let row = this.dataTable.getRow($(e.currentTarget).closest('tr')),\n            batch = row.data();\n        this.close();\n        new PJQ.views.drawings.DrawingBatchModal({\n            model: batch,\n            versions: this.options.versions,\n            project: this.options.project\n        });\n    },\n    deleteBatch: function (e) {\n        let $row = $(e.currentTarget).closest('tr'),\n            row = this.dataTable.getRow($row),\n            batch = row.data();\n        new PJQ.views.modals.DeleteCancel({\n            header: \"Delete Upload\",\n            body: \"Are you sure you want to delete this upload?\",\n            onDelete: _.bind(function () {\n                batch.destroy({\n                    success: _.bind(function () {\n                        this.collection.remove(batch);\n                        this.dataTable.removeRow(row);\n                    }, this)\n                });\n            }, this)\n        });\n    },\n    newBatch: function () {\n        this.close();\n        new PJQ.views.drawings.DrawingBatchModal({\n            versions: this.options.versions,\n            project: this.options.project\n        });\n    },\n    close: function () {\n        this.removeModal();\n        _.each(this.collection.models, _.bind(function (batch) {\n            if (batch.statusTimeout != null) {\n                clearTimeout(batch.statusTimeout);\n                batch.statusTimeout = null;\n            }\n        }, this));\n    }\n});\n\nPJQ.views.drawings.SortDrawings = PJQ.views.BaseView.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Sort-Drawings'),\n        onChange: null,\n        showViewLink: true,\n        batch: null,\n        sortFullSet: false\n    },\n    events: {\n        'click .btn-view-drawing': 'viewDrawing',\n        'click .btn-sort-common': 'sortCommon',\n        'click .btn-sort-alpha-num': 'sortAlphaNumeric',\n        'click .btn-sort-up': 'sortDrawingUp',\n        'click .btn-sort-down': 'sortDrawingDown',\n        'click .btn-sort-top': 'sortTop',\n        'click .btn-sort-bottom': 'sortBottom'\n    },\n    beforeFirstRender: function () {\n        this.sortDrawings = [];\n        this.fullset = [];\n        let mergeCurrentSet = false;\n        if (this.options.batch != null) {\n            let hasCurrentSetChange = !this.options.batch.get('replaceCurrentSet') && null != this.options.batch.drawings.findWhere({\n                isCurrentSet: true,\n                isPublished: false\n            });\n\n            if (!hasCurrentSetChange) {\n                this.options.batch.drawings.reset(this.options.batch.drawings.where({isPublished: false}));\n            } else {\n                mergeCurrentSet = true;\n            }\n\n            _.each(this.options.batch.drawings.models, function (drawing) {\n                if (!drawing.get('isDeleted')) {\n                    this.fullset.push(drawing);\n                    this.sortDrawings.push({\n                        drawing: drawing,\n                        matches: []\n                    });\n                }\n            }, this);\n\n            _.each(this.sortDrawings.toReversed(), function (sortDrawing, index) {\n                sortDrawing.drawing.set('sortOrder', index * -1);\n            });\n\n        } else if (this.options.sortVersion != null) {\n            let curSet = this.options.versions.get(-1);\n            mergeCurrentSet = null != _.find(this.options.sortVersion.drawings.models, (sDrawing) => {\n                return curSet.drawings.findWhere({name: sDrawing.get('name')});\n            });\n        } else {\n            mergeCurrentSet = true;\n        }\n\n        if (this.options.sortVersion != null && !mergeCurrentSet) {\n            _.each(this.options.sortVersion.drawings.models, (drawing) => {\n                this.sortDrawings.push({\n                    drawing: drawing,\n                    matches: []\n                });\n                this.fullset.push(drawing);\n            });\n        } else {\n            let self = this,\n                curSet = self.options.versions.get(-1);\n            if (curSet != null) {\n                _.each(curSet.drawings.models, function (drawing) {\n                    let sortItem = _.find(self.sortDrawings, function (sortItem) {\n                        return drawing.get('name') === sortItem.drawing.get('name');\n                    });\n                    if (sortItem != null) {\n                        sortItem.matches.push(drawing);\n                        sortItem.drawing.set('sortOrder', drawing.get('sortOrder'));\n                    } else {\n                        self.fullset.push(drawing);\n                        self.sortDrawings.push({\n                            drawing: drawing,\n                            matches: []\n                        });\n\n                        if (self.options.batch != null) {\n                            // we have to add this drawing to the batch so it gets saved with the new sort order\n                            // it will save across all by name if the drawing being updated is already published\n                            self.options.batch.drawings.add(drawing);\n                        }\n                    }\n                });\n            }\n\n            _.each(self.options.versions.models, function (version) {\n                _.each(version.drawings.models, function (drawing) {\n                    if (!drawing.get('isDeleted')) {\n                        let sortItem = _.find(self.sortDrawings, function (sortItem) {\n                            return drawing.get('name') === sortItem.drawing.get('name');\n                        });\n                        if (sortItem != null) {\n                            sortItem.matches.push(drawing);\n                        } else if (self.options.sortFullSet) {\n                            self.fullset.push(drawing);\n                            self.sortDrawings.push({\n                                drawing: drawing,\n                                matches: []\n                            });\n\n                            if (self.options.batch != null) {\n                                // we have to add this drawing to the batch so it gets saved with the new sort order\n                                // it will save across all by name if the drawing being updated is already published\n                                self.options.batch.drawings.add(drawing);\n                            }\n                        }\n                    }\n                });\n            });\n\n            // iterate through each of the models in order of their sort order and e-set their sort order\n            // this is to ensure they are sequential with no gaps or duplicates\n            if (self.options.batch != null) {\n                let drawingsSorted = _.sortBy(self.options.batch.drawings.models, function (drawing) {\n                    return drawing.get('sortOrder');\n                });\n                for (let i = 0; i < drawingsSorted.length; i++) {\n                    drawingsSorted[i].set('sortOrder', i + 1);\n                }\n            }\n        }\n    },\n    renderData: function () {\n        return {\n            showViewLink: this.options.showViewLink,\n            sortDrawings: this.fullset,\n            contextDrawing: this.options.contextDrawing\n        };\n    },\n    afterRender: function () {\n        let self = this;\n        self.drawingSortable = new PJQ.Sortable(self.$('.drawings-sort'), {\n            containment: \"parent\",\n            items: '.drawing-sort',\n            multiple: true,\n            connectWith: '.drawing-sort',\n            onStop: function () {\n                self.setSortLabels();\n            }\n        });\n    },\n    setSortLabels: function () {\n        let self = this;\n        self.$('.drawing-sort').each(function (index) {\n            let id = $(this).data('id'),\n                item = _.find(self.fullset, function (sortDrawing) {\n                    return sortDrawing.id === id\n                }),\n                name = item.get(\"name\"),\n                sortItem = _.find(self.sortDrawings, function (sortDrawing) {\n                    return sortDrawing.drawing.get('name') === name\n                }),\n                sortOrder = index + 1;\n\n            sortItem.drawing.set('sortOrder', sortOrder);\n            _.each(sortItem.matches, function (match) {\n                match.set('sortOrder', sortOrder);\n            });\n            $(this).find('.sort-index').html(sortOrder.toString() + '.');\n        });\n        this.onChange();\n    },\n    viewDrawing: function (e) {\n        let drawingId = $(e.currentTarget).closest('.drawing-sort').data('id'),\n            drawing = _.find(this.fullset, function (d) {\n                return d.id === drawingId;\n            });\n        new PJQ.views.drawings.DrawingViewer({\n            model: drawing,\n            contextVersion: this.options.versions.get(drawing.get('versionId')),\n            batch: this.options.batch,\n            versions: this.options.versions,\n            onSortChange: _.bind(function () {\n                this.onChange();\n                this.render();\n            }, this)\n        });\n    },\n    sortCommon: function () {\n        this.autoSort('common');\n    },\n    sortAlphaNumeric: function () {\n        this.autoSort('alpha');\n    },\n    autoSort: function (type) {\n        switch (type) {\n            case 'common':\n                this.fullset = this.fullset.sort(function (a, b) {\n                    return PJQ.helpers.sortHelpers.sortCommonPageNumbers(a.get('name'), b.get('name'));\n                });\n                break;\n            case 'alpha':\n                this.fullset = this.fullset.sort(function (a, b) {\n                    return PJQ.helpers.sortHelpers.sortAlphaNum(a.get('name'), b.get('name'));\n                });\n                break;\n        }\n\n        _.each(this.fullset, function (drawing, index) {\n            let sortItem = _.find(this.sortDrawings, function (sortDrawing) {\n                    return sortDrawing.drawing.get('name') === drawing.get('name');\n                }),\n                sortOrder = index + 1;\n            sortItem.drawing.set('sortOrder', sortOrder);\n            _.each(sortItem.matches, function (match) {\n                match.set('sortOrder', sortOrder);\n            });\n        }, this);\n        this.onChange();\n        this.render();\n    },\n    sortDrawingUp: function (e) {\n        let $drawing = $(e.currentTarget).closest('.drawing-sort');\n        $drawing.insertBefore($drawing.prev());\n        this.setSortLabels();\n    },\n    sortDrawingDown: function () {\n        let $drawing = $(e.currentTarget).closest('.drawing-sort');\n        $drawing.insertAfter($drawing.next());\n        this.setSortLabels();\n    },\n    sortTop: function () {\n        this.drawingSortable.moveSelectedTop();\n    },\n    sortBottom: function () {\n        this.drawingSortable.moveSelectedBottom();\n    },\n    onChange: function () {\n        if (typeof this.options.onChange === 'function') {\n            this.options.onChange();\n        }\n    }\n});\n\nPJQ.views.drawings.SortDrawingsModal = PJQ.views.BaseModal.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Modal-Sort-Drawings'),\n        width: 600,\n        maxWidth: '90%',\n        onDone: _.noop,\n        sortFullSet: false\n    },\n    events: {\n        'click .btn-done': 'done'\n    },\n    afterRender: function () {\n        new PJQ.views.drawings.SortDrawings({\n            el: this.$('.sort-drawings'),\n            versions: this.options.versions,\n            sortVersion: this.options.sortVersion,\n            batch: this.options.batch,\n            sortFullSet: this.options.sortFullSet\n        });\n    },\n    done: function () {\n        if (typeof this.options.onDone === 'function') {\n            this.options.onDone();\n        }\n        this.removeModal();\n    }\n});\n\nPJQ.views.drawings.AdvancedDownloadModal = PJQ.views.BaseModal.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Modal-Advanced-Download'),\n        width: 500,\n        maxWidth: '90%',\n        onDone: _.noop\n    },\n    events: {\n        'click .btn-download': 'download'\n    },\n    renderData: function () {\n        return {\n            project: this.options.project,\n            isPaidDownload: this.options.isPaidDownload,\n            isPrintOrder: this.options.isPrintOrder\n        };\n    },\n    afterRender: function () {\n        if (this.options.isPrintOrder) {\n            this.$('.context-title').text('Order Prints')\n            this.$('.btn-download').text('Continue');\n        }\n\n        this.renderDrawingSelector();\n    },\n    renderDrawingSelector: function () {\n        new PJQ.views.drawings.DrawingSelectorTree({\n            el: this.$('.drawings-tree'),\n            collection: this.collection,\n            onChange: _.bind(function (versions) {\n                this.selectedVersions = versions;\n\n                let selDrawingCount = 0;\n                _.each(versions, function (version) {\n                    selDrawingCount += _.size(version.guids);\n                });\n                this.$('.btn-download').prop('disabled', selDrawingCount === 0);\n            }, this)\n        });\n    },\n    download: function () {\n        let raster = this.$('.checkbox-raster').prop('checked'),\n            merge = this.$('.checkbox-merge').prop('checked'),\n            includeAttachments = this.$('.checkbox-attachments').prop('checked'),\n            includeMyAnnotations = this.$('.checkbox-my-annotations').prop('checked'),\n            includePublishedAnnotations = this.$('.checkbox-published-annotations').prop('checked');\n\n        let dl = _.bind(function () {\n            let entryIds = [];\n            _.each(this.selectedVersions, function (selectedVersions) {\n                entryIds.push(..._.map(selectedVersions.ids, function (id) {\n                    return id * -1;\n                }));\n            });\n            if (this.options.isPaidDownload) {\n                if (PJQ.app.session.project != null && PJQ.app.session.project.get('masterUserId') === PJQ.app.session.get('masterUserId') && (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.CAN_ORDER_ON_ACCOUNT) || PJQ.app.session.hasPermission('documents.onAccount'))) {\n                    new PJQ.views.drawings.OrderDownloadAdmin({\n                        entryIds: entryIds,\n                        orderSettings: this.options.orderSettings\n                    });\n                } else {\n                    new PJQ.views.drawings.OrderPrintsModal({\n                        mode: PJQ.constants.files.modes.DOWNLOAD,\n                        entryIds: entryIds,\n                        orderSettings: this.options.orderSettings\n                    });\n                }\n            } else if (this.options.isPrintOrder) {\n                new PJQ.views.drawings.OrderPrintsModal({\n                    mode: PJQ.constants.files.modes.PRINT,\n                    entryIds: entryIds,\n                    orderSettings: this.options.orderSettings\n                });\n            } else {\n                PJQ.helpers.drawings.createDownload(this.options.project, this.selectedVersions, {\n                    raster: raster,\n                    merge: merge,\n                    includeAttachments: includeAttachments,\n                    includeMyAnnotations: includeMyAnnotations,\n                    includePublishedAnnotations: includePublishedAnnotations\n                });\n            }\n        }, this);\n        if (this.options.project != null) {\n            this.options.project.checkDownloadRequirements(_.bind(function () {\n                dl();\n                this.removeModal();\n            }, this));\n        } else {\n            dl();\n        }\n    }\n});\n\nPJQ.views.drawings.ManageVersionsModal = PJQ.views.BaseModal.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Modal-Manage-Versions'),\n        width: 600,\n        maxWidth: '90%'\n    },\n    events: {\n        'click .btn-upload-to-version': 'uploadToVersion',\n        'click .btn-new-batch': 'newBatch',\n        'click .btn-sort-version': 'sortVersion',\n        'click .btn-edit-version': 'editVersion',\n        'click .btn-cancel-edit-version': 'cancelEditVersion',\n        'click .btn-delete-version': 'deleteVersion',\n        'click .btn-save-version': 'saveVersion',\n        'click .btn-close': 'close'\n    },\n    beforeModalCreated: function () {\n        if (this.collection == null) {\n            this.collection = new PJQ.collections.drawings.Versions(null, {\n                project: this.options.project\n            });\n            this.collection.fetch({\n                success: _.bind(function () {\n                    this.render();\n                }, this)\n            });\n        }\n    },\n    afterRender: function () {\n        this.dataTable = new PJQ.views.dataTables.DataTable({\n            el: this.$('.upload-log'),\n            data: _.filter(this.collection.models, function (version) {\n                return version.id > 0;\n            }),\n            language: {\n                zeroRecords: 'Click \"Upload Drawings\" to publish a new version'\n            },\n            onTableDraw: _.bind(function () {\n                if (this.contextEditVersion != null) {\n                    this.datePicker = new PJQ.inputs.Datepicker({\n                        el: this.$('.input-version-date-issued'),\n                        isShowTimezone: false,\n                        datepickerOptions: {\n                            format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE\n                        },\n                        onChange: _.bind(function (newDate) {\n                            this.contextEditVersion.set('issuedOn', newDate);\n                        }, this)\n                    });\n                }\n            }, this),\n            isHideSearch: true,\n            order: [1, 'desc'],\n            columns: [\n                // {\n                // \t\"data\": \"attributes.drawings\",\n                // \t\"render\": _.bind(function (data, type, row) {\n                // \t\tlet drawingCount = _.size(row.drawings);\n                // \t\tif (drawingCount > 0) {\n                // \t\t\treturn '<div class=\"text-orange fs-16\"><i class=\"fad fa-file\"></i> ' + drawingCount.toString() + '</div>';\n                // \t\t}\n                // \t\telse {\n                // \t\t\treturn '<div class=\"text-muted fs-16\"><i class=\"fad fa-file\"></i> ' + drawingCount.toString() + '</div>';\n                // \t\t}\n                // \t}, this),\n                // \t\"title\": \"\",\n                // \t\"width\": \"50px\"\n                // },\n                {\n                    \"data\": {\n                        \"_\": function (row) {\n                            return new Date(row.get('name'));\n                        },\n                        \"filter\": \"attributes.name\",\n                        \"display\": _.bind(function (row) {\n                            if (this.contextEditVersion != null && this.contextEditVersion.id === row.id) {\n                                return '<input type=\"text\" class=\"form-control input-version-name\" value=\"' + row.get('name') + '\">';\n                            } else {\n                                return row.get('name');\n                            }\n                        }, this)\n                    },\n                    \"title\": \"Version Name\"\n                },\n                {\n                    \"data\": {\n                        \"_\": function (row) {\n                            return new Date(row.get('issuedOn'));\n                        },\n                        \"filter\": \"attributes.issuedOn\",\n                        \"display\": _.bind(function (row) {\n                            if (this.contextEditVersion != null && this.contextEditVersion.id === row.id) {\n                                return '<input type=\"text\" class=\"form-control input-version-date-issued\" value=\"' + row.get('issuedOn') + '\" />';\n                            } else {\n                                return PJQ.helpers.dateHelpers.getDateString(new Date(row.get('issuedOn')), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\n                            }\n                        }, this)\n                    },\n                    \"title\": \"Issued On\",\n                    \"width\": \"100px\"\n                },\n                {\n                    \"data\": \"\",\n                    \"title\": \"\",\n                    \"orderable\": false,\n                    \"searchable\": false,\n                    \"render\": _.bind(function (data, type, row) {\n                        let content = '';\n                        if (this.contextEditVersion != null && this.contextEditVersion.id === row.id) {\n                            content = '<button type=\"button\" class=\"btn btn-success btn-save-version wd-30p mr-1\"><i class=\"fal fa-save\"></i></button><button type=\"button\" class=\"btn btn-danger btn-cancel-edit-version wd-30p\"><i class=\"fal fa-times\"></i></button>';\n                        } else {\n                            let disabledAttr = this.contextEditVersion != null ? ' disabled ' : '';\n                            content = '<button type=\"button\" title=\"Upload Drawings\" class=\"btn btn-success btn-upload-to-version wd-30p mr-1\"' + disabledAttr + '><i class=\"fal fa-file-plus\"></i></button><button type=\"button\" class=\"btn btn-info btn-edit-version wd-30p mr-1\"' + disabledAttr + '><i class=\"fal fa-pencil\"></i></button><button type=\"button\" class=\"btn btn-danger btn-delete-version wd-30p\"' + disabledAttr + '><i class=\"fal fa-trash\"></i></button>';\n                        }\n                        return '<div class=\"text-align-right\">' + content + '</div>'\n                    }, this),\n                    \"width\": '100px'\n                }\n            ],\n            dom: '<\"top\"<\"clear\">>rt<\"bottom\"p<\"clear\">>'\n        });\n    },\n    newBatch: function () {\n        this.close();\n        new PJQ.views.drawings.DrawingBatchModal({\n            versions: this.collection,\n            project: this.options.project\n        });\n    },\n    uploadToVersion: function (e) {\n        let $row = $(e.currentTarget).closest('tr'),\n            version = this.dataTable.getRow($row).data();\n        this.close();\n        new PJQ.views.drawings.DrawingBatchModal({\n            version: version,\n            project: this.options.project,\n            versions: this.collection\n        });\n    },\n    editVersion: function (e) {\n        this.contextEditVersion = this.dataTable.getRow($(e.currentTarget).closest('tr')).data();\n        this.dataTable.refresh();\n    },\n    cancelEditVersion: function () {\n        this.contextEditVersion = null;\n        this.dataTable.refresh();\n    },\n    saveVersion: function (e) {\n        let $row = $(e.currentTarget).closest('tr'),\n            version = this.dataTable.getRow($row).data(),\n            $name = $row.find('.input-version-name');\n        version.set('name', $name.val());\n\n        let isNameValid = _.size(version.get('name')) > 0;\n        PJQ.helpers.inputHelpers.setInputError($name, isNameValid);\n\n        let isIssuedOnValid = version.get('issuedOn') != null;\n        PJQ.helpers.inputHelpers.setInputError(this.$('.input-version-date-issued'), isIssuedOnValid);\n\n        if (isNameValid && isIssuedOnValid) {\n            version.save(null, {\n                success: _.bind(function () {\n                    this.contextEditVersion = null;\n                    this.dataTable.refresh();\n                }, this)\n            });\n        }\n    },\n    deleteVersion: function (e) {\n        let $row = $(e.currentTarget).closest('tr'),\n            row = this.dataTable.getRow($row),\n            version = row.data();\n        new PJQ.views.modals.DeleteCancel({\n            header: \"Delete Version\",\n            body: \"Are you sure you want to delete this version?\",\n            onDelete: _.bind(function () {\n                version.destroy({\n                    success: _.bind(function () {\n                        this.collection.remove(version);\n                        this.dataTable.removeRow(row);\n                    }, this)\n                });\n            }, this)\n        });\n    },\n    close: function () {\n        this.removeModal();\n        _.each(this.collection.models, _.bind(function (batch) {\n            if (batch.statusTimeout != null) {\n                clearTimeout(batch.statusTimeout);\n                batch.statusTimeout = null;\n            }\n        }, this));\n    }\n});\n\nPJQ.views.drawings.BatchNotifyModal = PJQ.views.BaseModal.extend({\n    defaults: {\n        template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'modal-batch-notify'),\n        subTemplates: {\n            emailBadge: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Share-Email-Badge')\n        },\n        maxWidth: 650,\n    },\n    events: {\n        'click .btn-back': 'previousStep',\n        'click .btn-next': 'nextStep',\n        'click .btn-send': 'send',\n        'click .btn-cancel': 'cancel',\n        'click .btn-add-project-contacts': 'addProjectContacts',\n        'keyup .input-share-search': 'searchChanged',\n        'focus .input-share-search': 'focusSearch',\n        'click .share-email-delete': 'deleteEmail',\n        'mousedown .modal-dialog': 'checkIsFocused'\n    },\n    beforeModalCreated: async function () {\n        if (this.options.project == null) {\n            this.options.project = PJQ.app.session.project;\n        }\n\n        this.isFetched = false;\n        this.step = 1;\n\n        this.selectedEmailsTo = [];\n        this.selectedEmailsCC = [];\n\n        let verAppend = null;\n        if (this.options.versions != null) {\n            let version = this.options.versions.get(this.options.batch.get('versionId'));\n            if (version != null) {\n                verAppend = ' (' + version.get('name') + ')';\n            }\n        }\n\n        this.model = new PJQ.models.drawings.DrawingBatchNotification({\n            batchId: this.options.batch.id,\n            subject: 'Drawings Published to ' + this.options.project.get('projectName') + (verAppend ?? \"\"),\n            message: ''\n        });\n\n        this.isFetched = true;\n        this.render();\n    },\n    renderData: function () {\n        return {\n            model: this.model,\n            step: this.step,\n            batch: this.options.batch,\n            selectedEmailsTo: this.selectedEmailsTo,\n            selectedEmailsCC: this.selectedEmailsCC\n        }\n    },\n    afterRender: function () {\n        if (!this.isFetched) {\n            return;\n        }\n\n        new PJQ.StepIndicator(this.$('.steps-outer'), {\n            steps: [{\n                name: 'Compose Email'\n            }, {\n                name: 'Review & Send'\n            }],\n            activeStep: this.step - 1\n        });\n\n        switch (this.step) {\n            case 1:\n                this.bodyEditor = new PJQ.inputs.HTMLEditor({\n                    el: this.$('.email-message'),\n                    editorHeight: 300,\n                    isHideTokens: true,\n                    onChange: (contents) => {\n                        this.model.set('message', contents);\n                    }\n                });\n\n                _.each(this.selectedEmailsTo, (email) => {\n                    this.renderEmail(email, 'to');\n                });\n\n                _.each(this.selectedEmailsCC, (email) => {\n                    this.renderEmail(email, 'cc');\n                })\n                break;\n            case 2:\n                break;\n            case 3:\n                break;\n        }\n    },\n    addProjectContacts: function () {\n        this.selector = new PJQ.views.contacts.SelectContactsModal({\n            context: PJQ.constants.contacts.contexts.PROJECTCONTACTS,\n            enableSelectAll: true,\n            isSingleChoice: false,\n            // saveButtonText: this.options.saveButtonText,\n            onSave: (newContacts) => {\n                let emails = _.filter(_.map(newContacts, (contact) => {\n                    return contact.get('email');\n                }), (email) => {\n                    return _.size(email) > 0;\n                });\n                _.each(emails, (email) => {\n                    if (_.contains(this.selectedEmailsTo, email)) {\n                        return;\n                    }\n                    this.selectedEmailsTo.push(email);\n                    this.renderEmail(email, 'to');\n                });\n            }\n        });\n    },\n    previousStep: function () {\n        this.step--;\n        this.render();\n    },\n    nextStep: function () {\n        switch (this.step) {\n            case 1:\n                let toValid = _.size(this.selectedEmailsTo) > 0;\n                PJQ.helpers.inputHelpers.setInputError(this.$('.input-to'), toValid);\n\n                let subject = this.$('.input-subject').val(),\n                    subjectValid = _.size(subject) > 0;\n                this.model.set('subject', subject);\n                PJQ.helpers.inputHelpers.setInputError(this.$('.input-subject'), subjectValid);\n\n                if (!subjectValid || !toValid) {\n                    return;\n                }\n                break;\n            case 2:\n                break;\n            case 3:\n                break;\n        }\n\n        this.step++;\n        this.render();\n    },\n    focusSearch: function (e) {\n        this.focusType = $(e.currentTarget).data('email-line');\n        if (this.contactEmailSelector != null)\n            this.contactEmailSelector.remove();\n\n        this.contactEmailSelector = new PJQ.views.email.ContactSearchSelect({\n            el: this.focusType === \"to\" ? this.$('.contact-emails-to') : this.$('.contact-emails-cc'),\n            selectedEmails: this.focusType === \"to\" ? this.selectedEmailsTo : this.selectedEmailsCC,\n            search: this.getFocusSearchText(),\n            project: this.options.project,\n            onAdd: (email) => {\n                this.renderEmail(email);\n            }\n        });\n    },\n    checkIsFocused: function (e) {\n        if (this.$(e.target).closest('.share-contact').length > 0) {\n            return;\n        }\n\n        // Removes contact email selector if not selecting a contact, or entering an email\n        let target = $(e.target),\n            targetParent = $(e.target.parentElement);\n\n        if (this.focusType != null\n            && !target.hasClass('share-contact')\n            && !targetParent.hasClass('share-contact')\n            && !target.hasClass('input-share-search')\n            && !target.hasClass('share-contact-email')\n            && !target.hasClass('share-email-entry')\n            && !target.hasClass('share-contact-name')) {\n            this.contactEmailSelector.remove();\n            this.focusType = null;\n        }\n    },\n    getFocusSearchText: function () {\n        return this.focusType != null ? this.$('.input-share-search[data-email-line=\"' + this.focusType + '\"]').val().toLowerCase() : this.$('.input-share-search').val().toLowerCase();\n    },\n    searchChanged: function () {\n        if (this.contactEmailSelector == null) {\n            return;\n        }\n\n        this.contactEmailSelector.searchChanged(this.getFocusSearchText());\n    },\n    renderRecipientCount: function () {\n        let emailCount = _.size(this.selectedEmailsTo) + _.size(this.selectedEmailsCC);\n        this.$('.recipient-count').html(emailCount.toString() + (emailCount === 1 ? ' recipient' : ' recipients'));\n    },\n    renderEmail: function (email, type = null) {\n        this.renderSubTemplate(true, this.options.subTemplates.emailBadge, this.$('.share-selected-emails[data-email-line=\"' + (type ?? this.focusType) + '\"]'), {\n            email: email\n        });\n        this.$('.input-share-search').val('');\n        this.$('.modal-share-send').prop('disabled', false);\n        this.renderRecipientCount();\n        this.$('.input-share-search[data-email-line=\"' + this.focusType + '\"]').focus();\n    },\n    deleteEmail: function (e) {\n        let emailContainer = $(e.currentTarget).closest('.share-email'),\n            emailLineType = $(e.currentTarget).closest('.share-selected-emails').data('email-line'),\n            emailArray = emailLineType === \"to\" ? this.selectedEmailsTo : this.selectedEmailsCC\n        emailArray = _.without(emailArray, emailContainer.data('email').toLowerCase());\n\n        if (emailLineType === \"to\")\n            this.selectedEmailsTo = emailArray\n        else\n            this.selectedEmailsCC = emailArray\n\n        emailContainer.remove();\n        this.searchChanged();\n        this.$('.modal-share-send').prop('disabled', _.size(emailArray) === 0);\n        this.renderRecipientCount();\n    },\n    send: function () {\n        let loader = new PJQ.Loader(this.$('.modal-content'));\n        this.model.set({\n            to: this.selectedEmailsTo,\n            cc: this.selectedEmailsCC\n        })\n\n        this.model.save(null, {\n            success: () => {\n                PJQ.notifications.notify.successNotify({\n                    message: 'Published Drawings Notification sent'\n                });\n                this.removeModal();\n            },\n            error: () => {\n                PJQ.notifications.notify.errorNotify({\n                    message: 'Encountered an error sending notification, please contact customer service'\n                });\n            },\n        });\n    },\n    cancel: function () {\n        new PJQ.views.modals.YesNo({\n            header: \"Cancel Notification?\",\n            body: \"Are you sure you want to cancel sending this notification?\",\n            onYes: () => {\n                this.removeModal();\n            }\n        });\n    }\n});"]}