{"version":3,"sources":["scripts/app-086ba5dc5a.js"],"names":["angular","module","WizardController","$scope","$state","masjidservice","mgmtConstants","$stateParams","$location","logger","exception","spinnerService","vm","this","id","search","code","validAccountInfo","firstName","lastName","password","phone","confirmPassword","validMasjidInformation","masjidName","masjidEmail","masjidPhone","denominationType","adhanCalculationType","juristicType","streetNum","streetName","city","state","timeZoneId","longitude","latitude","goToMasidInfo","isUserInfoValid","addressStr","streetNumber","name","go","goToAccountInfo","goToTermsAndConditions","masjidInfoValid","setAddressAndGetTimeZone","components","location","lat","street","postalCode","postCode","getTimeZone","then","result","$watch","submitMasjid","acceptTermsAndConditions","error","masjidModel","userId","masjidAddress1","masjidAddress2","masjidCity","masjidState","masjidZip","masjidMainPhone","masjidMainEmailAddress","denominationTypeID","value","adhanCalculationTypeID","juristicMethodTypeID","lattitude","timeZone","address","showByName","spinnerName","createMasjid","hide","success","MasjidCreated","err","catcher","denominationDropDownOptions","dataSource","denominationTypes","dataTextField","dataValueField","adhanCalcTypeDropDownOptions","adhanCalculationTypes","juristicTypeDropDownOptions","juristicTypes","$inject","controller","routeConfig","$stateProvider","$urlRouterProvider","helpContent","usersResolve","userService","show","getUsers","url","templateUrl","controllerAs","data","pageTitle","pageHelp","users","resolve","resolveResults","config","UsersController","$uibModal","$log","_","addUser","user","debug","remove","item","push","sortUsers","sortBy","searchString","UserModalController","args","$uibModalInstance","setValidPermissions","userRoleDropDown","isValid","selectedPermissions","length","validPermissions","permissions","title","isNew","userType","phoneNumber","email","userSince","level","emailConfirmed","save","rolesToAssign","union","saving","action","showSuccess","close","showError","removing","deleteUser","dismiss","userRoleDropDownOptions","roles","change","$apply","selectOptions","placeholder","valuePrimitive","autoBind","filters","allRoles","editUser","getUser","modalInstance","open","backdrop","underContructionTemplate","abstract","template","moment","adhanIqamahTimesResolve","salahTimesService","setTimeType","timeType","adhanIqamahTimes","getMonthTimes","selectedDate","jummahTimesResolve","params","showSpinner","jummahTimes","monthName","format","startOf","adhanTimes","ReadOnlySalahTimesController","$window","styleService","prayerTimesService","masjid","bindPrayerTimes","window","setTimeout","setStyle","showTimes","countDownFinished","reload","JummahTimesController","$rootScope","dateService","activate","mainGridOptions","transport","read","e","isLoading","sort","field","dir","height","resizable","columns","gridColumns","month","dateFormats","string","groupHeaderTemplate","jummahDate","firstJummahAdhan","time","editor","timeEditor","attributes","class","firstJummahIqamah","firstJummahKhateeb","secondJummahAdhan","secondJummahIqamah","secondJummahKhateeb","thirdJummahAdhan","thirdJummahIqamah","thirdJummahKhateeb","yearsDataSource","years","maxYear","setGridColumns","mma_allowEdit","group","configureGrid","allowEdit","allow","grid","options","selectCurrentDate","saveChanges","dirtyItems","filter","dirty","areTimesValid","formatDates","saveJummah","response","$broadcast","AdhanTimesController","update","models","updateAdhanIqamah","fromDate","date","width","fajrAdhanTime","fajrIqamahTime","sunriseTime","duhrAdhanTime","duhrIqamahTime","asrAdhanTime","asrIqamahTime","maghribAdhanTime","maghribIqamahTime","ishaAdhanTime","ishaIqamahTime","showCreateTimesModal","hasTimes","ModalController","numberOfDaysLeft","minDate","getMinDate","minAvailableDate","maxDate","getMaxDate","maxAvailableDate","timesNeedsAttention","hasChanges","createEntriesForNextMonth","nextMonth","reloadAdhanIqamahPage","setHelpText","step","helpText","showHelpText","setPromptText","createNextMonth","promptText","createYear","masjidIqamahSetting","masjidAdhanSettings","numberOfDaysToAdd","add","fajr","fajrTime","dhuhr","dhuhrTime","asr","asrTime","maghrib","maghribTime","isha","ishaTime","fajrAngle","fajrOffset","ishaAngle","ishaOffset","maghribIshaDelta","validAdhanSettings","validiqamahsettings","goToIqamahSettimgs","uploadFile","createTimes","createTimesModel","createAdhanIqamah","goBack","showPrompt","configureTimes","fajrDropDownOptions","iqamahTimesSettings","dhuhrDropDownOptions","asrDropDownOptions","maghribDropDownOptions","ishaDropDownOptions","ramadanResolve","ramadanService","getTimes","ramadan","RamadanController","loadRamadanTimes","ramadanTime","console","log","taraweehTime","juzzFrom","juzzTo","iftaardaysID","iftaardaysDropDown","sahoorDaysId","sahoorDaysDropDown","qiyaamUlLailDaysId","qiyaamUlLailDaysDropDown","khatam","Date","formatDateMMDDYYYY","sahoorTime","qiyaamUlLailTime","eidDate","eidFirstSalahTime","eidFirstKhateebName","eidSecondSalahTime","eidSecondKhateebName","eidSalahVenue","eidSalahAddress2","qariOne","qariTwo","eidSalahAddress","streetnumber","model","debounce","isSaving","khatamPicker","eidDatePicker","taraweehTimePicker","sahoorTimePicker","qiyaamUlLailTimePicker","eidFirstSalahTimePicker","eidSecondSalahTimePicker","addTimes","updateTimes","leading","trailing","cancel","pickerOptions","parseFormats","interval","timePickerOptions","iftaardaysOptions","iftaarDays","sahoorDaysoptions","sahoorDays","qiyaamUlLailDaysOptions","qiyaamDays","notificationsResolve","notificationsService","getPushNotifications","pushNotifications","deleteNotification","NotificationsController","kendoService","modalModes","kendo","schema","fields","pushNotificationID","editable","nullable","tags","type","message","deviceType","encoded","createdDate","scheduledDate","createdByStr","processedDate","pageSize","sortable","pageable","filterable","mode","extra","number","cell","operator","$","html","dateTimeYY","customCss","notification","getDataModel","deletePushNotification","removeGridItem","addNotification","pushNotification","Add","groups","notificationTypes","refresh","notificationStatuses","$timeout","setModalTitle","selectedGroups","sendToEveryone","sendNow","pushNotificationPushNotificationTypes","Edit","isValidData","groupError","scheduleLaterError","scheduledTime","closeModal","form","$valid","$dirty","scheduleDatePicker","deviceDropDown","createPushNotification","groupSelectOptions","scheduleDatePickerOptions","max","toDate","min","scheduleTimePickerOptions","membersListResolve","memberService","getMembers","membersDashboardResolve","members","MembersController","excelService","sortMembers","MemberModalController","member","middleName","membershipType","gender","membershipID","address1","address2","zip","peopleInHousehold","maritalStatus","interestedInVolunteeringFlag","monthlyContributionAmount","monthlyContributionFlag","applicantType","applicationDate","addToEmailListFlag","paymentReceivedFlag","volunteerTitleDropDown","membershipTypeDropDown","deleteMember","volunteerTitleOptions","events","membershipTypeDropDownOptions","memberTypes","maritalStatusDropDownOptions","applicantTypeDropDownOptions","applicationType","editMember","getMember","size","membersCopy","copy","addMember","exportToExcel","messge","SuperAdminController","allMasjids","authService","isNewMasjid","createUser","goToSelectMasjid","selectedMasjid","gettingMasjid","getMasjid","setProperties","masjidID","logoUrl","navigationCollapsed","tahajud","halfNight","logoHasBackground","masjidDropDownOptions","SettingsController","loadMobileApiEndPoints","mobileApiSettings","salahTimesUrl","eventsUrl","pushNotificationsUrl","liveBroadCastUrl","newsUrl","boardMembersUrl","ramadanUrl","deviceTokenUrl","masjidInfoUrl","imaamInfoUrl","buildContainerStyle","containerStyleStr","max-height","overflow","margin","onColorChange","masjidSettings","debounceValue","isSuperAdmin","readOnlyCalenderUrl","readOnlySalahUrl","hijriAdjustment","adjustedHijriDate","systemHijriDate","publicSalahTimesStyle","containerStyle","getHijriAdjustment","isAdjustingHijri","timeToDateTime","countDownFontSizeChange","countDownFontSize","buttonFontSizeChange","buttonFontSize","prayerTimesFontSizeChange","prayerTimesFontSize","fontFamilyChange","fontStyle","widthChange","widthSpin","heightChange","heightSpin","validSettingsInformation","masjidSettingsForm","getTime","fajrTimePicker","dhuhrtimePicker","asrtimePicker","maghribTimePicker","ishatimePicker","updateMasjidSettings","updateMasjid","savePrayerTimesConfig","bordered","showCountDown","showDownload","fontColor","borderColor","rowColor","hoverColor","headerColor","altRowColor","backgroundColor","buttonColor","showJummah1","showJummah2","showJummah3","showTaraweeh","savingSalahConfig","createReadOnlyCalendarLink","creatingLink","addReadOnlyLink","createSalahTimesLink","creatingSalahLink","addSalahTimesLink","createMobileApiToken","creatingApiLink","addMobileApiToken","colorPickerSettings","control","theme","position","letterCase","colorPickerSettingsTopRight","superAdminResolve","getMasjids","masjidSettingsResolve","getMasjidSettings","newMasjid","MasjidController","masjidSocialMediaInfo","website","masjidWebSite","youtube","masjidYouTubeChannel","facebook","masjidFaceBookPage","instagram","masjidInstagramAccount","twitter","masjidTwitterHandle","needsTimeCalculation","masjidInfoForm","ModalPromptController","recalculateTimes","performSave","updateMasjidInfo","dontRecalculate","recalculate","imaamsRouteConfig","imaamsResolve","contactsService","getImaaams","imaams","ImaamsController","fileUploadService","titles","ImaamsModalController","imaam","allowDelete","myImage","myCroppedImage","contactPictureUrl","hasPicture","imageUploadText","imaage","isValidImaamImage","image","deletePicture","methodToCall","deleteImaam","contactID","results","titleOptions","titleID","editImaam","getImaam","addImaam","volunteersResolve","volunteerservice","getVolunteers","Events","NgRepeatController","applySearchFilter","toLowerCase","searchItems","split","noMatch","find","indexOf","isExcludedByFilter","$root","$currentWatchUnbinder","newName","oldName","VolunteersController","sortVolunteers","volunteers","EventModelController","volunteer","allSkillSets","addedSkillSets","volunteerFirstName","volunteerLastName","volunteerPhone","volunteerEmail","sex","volunteerSex","hoursAvailPerWeek","notes","volunteerSexDescr","text","deleteVolunteer","volunteerID","sortableOptions","connectWith","zIndex","disallowEdit","orderBy","editVolunteer","getVolunteer","addVolunteer","getAllSkillSets","eventsResolve","eventsService","getEvents","bannerText","views","eventDetails","EventsModalController","startChange","startDate","startPicker","endDate","endPicker","startDateIsInvalid","endChange","endDateIsInvalid","validateEndDate","recurrenceDropDown","event","eventModel","parseFormat","scheduler","defaultEndDateMessage","hasImage","eventImageFileName","recurrenceOptions","taskId","description","facebookLink","eventTitle","start","nodaTimeToDateTime","end","frequency","recurrDays","recurrenceDays","recurrMonthType","recurrMonthDay","recurrenceDayOfMonthOption","recurrenceWeekdayOfMonthOption","recurrEndOption","numberOfTimesToRepeat","recurrEndDate","eventVenue","eventCity","eventState","eventZip","eventAddress2","googleMapsUrl","eventCoordinator","eventCoordinatorPhone","eventCoordinatorEmail","allowRSVP","allowVolunteerRegistration","maxNumOfRSVP","maxNumOfVolunteers","numberOfVolunteersAdded","volunteerName","volunteerTitle","volunteerAssignment","volunteerCommitment","sendReminder","reminderUnit","reminderSeconds","notifyOnCreate","disableNotifyOnCreate","allowChanges","editingSeriesInstance","editingSeries","RemoveText","eventStart","diff","hour","recurrenceTypeId","eventTypes","eventRooms","addedVolunteers","eventType","$error","required","$invalid","validateForm","ownerId","eventTypeDropDown","recurrenceDayOfMonthDropDown","recurrenceWeekdayOfMonthDropDown","eventAddress1","place","notificationSettingsChanged","deleteEventImage","addEvent","uploadEventPhoto","updateEvent","loadVolunteers","availableVolunteers","getEventVolunteers","filteredVolunteers","allTasks","availableVolunteerCount","ui","target","droptarget","attr","addedVolunteersSortableOptions","deactivate","addedVolunteer","setSelectedVolunteer","forEach","isSelected","selectedVolunteer","selectedName","tasks","selectedVolunteerTasks","invalidWeeklySelection","invalidMonthlySelection","invalidRecurrenceEnd","showFrequency","showWeek","friday","monday","saturday","sunday","thursday","tuesday","wednesday","invalidWeeklySelectionMessage","showMonth","invalidMonthlySelectionMessage","invalidRecurrenceEndMessage","isBefore","removeEvent","configureFrequency","customEndDateMessage","frequencyText","replace","recurrenceTypeValues","showRepeatOn","showDay","showYear","isValidEndTime","isValidEndDate","recurrenceSelect","dataItem","eventTypeOptions","startDatePickerOptions","endDatePickerOptions","frequencyOptions","decimals","recurrenceTypes","select","recurrenceDayOfMonthOptions","recurrenceWeekdayOfMonthOptions","volunteerCommitmentOptions","stateOptions","usStates","reminderSecondsOptions","EventsController","$anchorScroll","schedulerOptions","eventTemplate","selected","batch","eventModels","destroy","last","from","defaultValue","validation","startTimezone","endTimezone","isAllDay","resources","confirmation","resize","selectedEvent","openModal","preventDefault","edit","dataBound","eventToolTip","recurrenceID","getEventRecurrence","openEventDetails","timezone","convert","getTimezoneOffset","setEventTypeInverseColor","each","brightnessValue","Color","color","percBrightness","inverseColor","onChangeEventType","selectedEventTypes","task","inArray","authorized","toolTipTemplate","$on","itemTemplate","tagTemplate","toolTipOptions","content","editSeries","editSingle","LiveBroadcastController","liveBroadcastService","releod","getLiveBroadcasts","liveBroadcasts","liveBroadCastLinkID","primaryLiveBroadCastURL","createDate","dateTime","addLink","createLiveBroadcast","link","liveBroadCastResolve","liveBroadcast","$q","hideAll","thrownDescription","newMessage","error_description","reject","service","factory","exceptionHandlerProvider","appErrorPrefix","configure","$get","$provide","decorator","extendExceptionHandler","$delegate","exceptionHandler","cause","errorData","provider","toastr","info","warning","warn","showMethod","positionClass","hideMethod","preventDuplicates","progressBar","closeButton","timeOut","showToasts","widgetUser","scope","element","attrs","isAuthenticated","fullName","capitalize","initials","logout","removeToken","removeClass","directive","widgetNavLinks","widgetNav","navCollapsed","superAdmin","admin","isAdmin","salah","hasSalah","jummah","hasJummah","hasEvents","news","hasNews","notifications","hasNotifications","hasMembers","broadcast","hasBroadcast","hasRamadan","hasVolunteer","userManagement","hasUserManagement","masjidManagement","hasMasjidManagement","widgetHeader","$element","showHelpContent","toggleHelpContent","slideDown","slideUp","helpIconVisible","current","toState","toParams","fromState","fromParams","mmaMasjidIqamahSettings","bindToController","mmaMasjidIqamahSettingsController","restrict","fajrtime","dhuhrtime","asrtime","maghribtime","ishatime","iqamahSettings","mmaMasjidanglesAndOffsetSettings","mmaMasjidanglesAndOffsetSettingsController","fajrangle","fajroffset","ishaangle","ishaoffset","maghribishadelta","mmaMasjidAdhanSettings","mmaMasjidAdhanSettingsController","denominationtype","adhancalculationtype","juristictype","postalcode","addressstr","timezoneid","masjidaddress1","masjidaddress2","adhanSettings","mmaHeader","mmaHeaderController","duration","init","year","displayMonth","showHelpIcon","mmaGridActions","mmaGridActionsController","mindate","maxdate","timetype","yearsdatasource","allowedit","createnext","setNextMonthToCreate","thisMonth","nextMonthToCreate","isAfter","disableNextMonthToCreate","disableEditButton","defaultView","isDefault","isEditGrid","isAddMonth","editGrid","saveText","addNextMonth","cancelEdit","saveOrAdd","addJummahTimes","nextYear","nextYearToCreate","setEditButonState","today","reloadData","getDefaultSelectedDate","defaultDate","setSelectedDate","monthSelectorOptions","toString","removeTimeZone","showDatePicker","showYearDropDown","selectedYear","jummhYearSelect","parseInt","mmaExport","exportToPDF","mmaCountDown","mmaCountDownController","$interval","displayCountDown","minutesLeft","schedule","minute","secondsLeft","seconds","btnCss","hourGlassCss","countDown","padStart","startTimer","TImer","isLoaded","stopTimer","isDefined","Timer","animationCss","$http","dataHelper","get","apiRootPath","sendResponseData","volunteerId","updateVolunteer","method","createVolunteer","post","masjidIDh","volunteerRegistrationDate","hasInvalidDate","eventID","serverPath","addEventVolunteers","eventId","eventVolunteers","getTasks","masjidId","downloadUrl","responseType","file","Blob","saveAs","usersRootPath","updateUser","joinDate","accountsRootPath","settings","padding","style","cssClass","stripped","stylesContainer","append","getDateRequestParams","getTimeType","_salahTimes","getReadOnlyTimes","numberOfMonths","createAdhanTimeModel","without","keys","adhanTimeID","iqamahTimeID","jummahTimesAndKhateebID","removeTimeZones","times","some","timesToValidate","isInvalid","jummahTimeEditor","utc","_timeType","modifiedBy","modifiedDate","formatDate","createdBy","deleteTimes","prayerTimes","secondsInCountDown","countDownReady","updatePushNotification","pushNotificationMessage","pushNotificationStatusTypeID","spinners","_register","hasOwnProperty","Error","_unregister","_unregisterGroup","_unregisterAll","spinnerText","delay","spinner","hideSpinner","hideByName","showGroup","groupExists","hideGroup","showAll","updateMember","createMember","memberSince","googleApiKey","withIncludes","getPrayerTimes","getPublicPrayerTimes","all","adjustMent","modifiedby","masjidTimeZone","adhanCalcInAppOrServer","deleteMasjid","callback","deferred","defer","unix","ajax","promise","excelOptions","fileName","proxyURL","exportFileUrl","pdfOptions","keywords","author","creator","landscape","paperSize","subject","saveAsExcel","exportToPdf","saveAsPDF","changeCallback","depth","todaysData","editCell","wrapper","uid","subtract","closeCell","sender","closest","dataModel","addGridItem","gridDataBound","total","colCount","addClass","on","keyCode","TAB","hasClass","nextCell","shiftKey","prevAll","prevRow","parent","prev","children","nextAll","nextRow","next","hideColumn","navigatable","Id","gridSchema","excel","pdf","isValidSize","maxImaamImage","fileSizeInKb","errorMessage","isValidImageExtension","Math","ceil","endsWith","maxfileSize","Upload","recurrenceId","getReadOnlyEvents","getEvent","isSeries","upload","origEventImageFileName","readUrl","mStart","mEnd","isSame","maxEndDate","getRecurrenceEndDate","recurrenceType","recurrEnd","momenttz","timeChange","container","appendTo","kendoTimePicker","prop","dates","coloums","set","contanctId","imaamsPath","updateImaam","isActive","uploadImaamPhoto","saveImaam","localStorageService","cachedToken","cachedUser","bearerToken","userProfileToken","setToken","token","setUser","superAdminRole","role","hasImaams","JSON","stringify","getToken","parse","props","accountsService","accountsData","transformLoginRequest","headersGetter","str","d","encodeURIComponent","join","loginUser","userModel","headers","Content-Type","transformRequest","getCurrentUser","resetPassword","resetPasswordModel","registerUser","registerModel","sendForgotPasswordLink","determineWhereToGo","publicSalahTimesResolve","specialClass","dateMonth","dataTypes","nonEditableNumber","nonEditableDate","nonEditableString","pushNotificationTypeID","2","3","4","5","iftaardays","imaamTitles","mobileDevices","abbreviation","constant","userName","helloText","descriptionText","mmaLoadingSpinner","linkFunction","loadingContainer","mmaLoadingController","Spinner","iosOverlay","showDelay","showMessageDelay","hideDelay","delayElapsed","opts","lines","radius","corners","rotate","speed","trail","shadow","hwaccel","className","top","left","spin","el","overlay","fadeIn","undefined","icon","stop","fadeOut","register","transclude","imgSrc","listener","sideNavigation","metisMenu","minimalizaSidebar","$sideMenu","minimalize","timeout","toggleClass","removeAttr","fullScroll","slimscroll","railOpacity","fitHeight","css","validateEquals","require","ngModelCtrl","validateEqual","valid","$eval","$setValidity","$parsers","$formatters","$setViewValue","$viewValue","icheck","$attrs","ngModel","newValue","iCheck","checkboxClass","radioClass","checked","getRequestParameters","isArray","postRequestParameters","putRequestParameters","authenticateRequestParameters","endPoint","hostname","$resource","apiCalls","registration","forgetPassword","sendLink","reset","login","loginModel","sendResetPassword","sendResetModel","helper","tz","TweenMax","TweenLite","httpHeaderConfigs","POST","GET","authenticate","authInterceptor","request","Authorization","responseError","rejection","status","spFadeInOut","done","spinnerContainer","to","opacity","onComplete","swapX","beforeAddClass","x","ease","Power2","easeNone","animation","alert","hasBeenShown","accountsRouteConfig","AccoutsController","UserName","FirstName","LastName","Email","Password","ConfirmPassword","grant_type","PasswordReset","access_token","res","PasswordCreated","document","ready","fix_height","heightWithoutNavbar","navbarHeigh","wrapperHeigh","bind","scroll","scrollTop","runBlock","handlingStateChangeError","destination","loadedTemplateUrl","msg","statusText","run","httpConfig","$httpProvider","interceptors","resourceConfig","$resourceProvider","defaults","stripTrailingSlashes","localStorageConfig","localStorageServiceProvider","setPrefix","locationProvicer","$locationProvider","html5Mode","laddaProvider","setOption","uiMaskConfig","uiMaskConfigProvider","routerConfig","otherwise","$templateCache","put"],"mappings":"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","file":"scripts/app-086ba5dc5a.js","sourcesContent":["(function(){\r\n\t'use strict';\r\n\t\r\n\tangular.module('inspinia.management',[\r\n\t\t'inspinia.core'\r\n\t]);\r\n\t\r\n})();\n(function() {\r\n 'use strict';\r\n\r\n angular.module('inspinia.management')\r\n .controller('WizardController', WizardController);\r\n\r\n /* @ngInject */\r\n function WizardController($scope, $state, masjidservice, mgmtConstants, $stateParams,$location, logger, exception, spinnerService) {\r\n var vm = this;\r\n var id = $location.search().id;\r\n var code = $location.search().code;\r\n\r\n vm.validAccountInfo = function () {\r\n return vm.firstName &&\r\n vm.lastName &&\r\n vm.password &&\r\n vm.phone &&\r\n vm.confirmPassword;\r\n };\r\n\r\n vm.validMasjidInformation = function() {\r\n return vm.masjidName &&\r\n vm.masjidEmail &&\r\n vm.masjidPhone &&\r\n vm.denominationType &&\r\n vm.adhanCalculationType &&\r\n vm.juristicType &&\r\n vm.streetNum &&\r\n vm.streetName &&\r\n vm.city &&\r\n vm.state &&\r\n vm.timeZoneId &&\r\n vm.longitude &&\r\n vm.latitude;\r\n };\r\n\r\n vm.goToMasidInfo = function () {\r\n if (!vm.validAccountInfo()) return;\r\n \r\n vm.isUserInfoValid = true;\r\n\r\n if (vm.addressStr) {\r\n vm.streetNumber.name = vm.addressStr;\r\n }\r\n $state.go('accounts.masjid.masjidInformation');\r\n };\r\n vm.goToAccountInfo = function () {\r\n if (!vm.validMasjidInformation()) return;\r\n $state.go('accounts.masjid.accountInformation');\r\n };\r\n vm.goToTermsAndConditions = function () {\r\n if (!vm.validMasjidInformation()) return;\r\n vm.masjidInfoValid = true;\r\n $state.go('accounts.masjid.termsAndConditions');\r\n };\r\n vm.setAddressAndGetTimeZone = function () {\r\n if (vm.streetNumber && vm.streetNumber.components.location.lat && vm.streetNumber.components.location.long) {\r\n vm.addressStr = vm.streetNumber.name;\r\n vm.streetNum = vm.streetNumber.components.streetNumber;\r\n vm.streetName = vm.streetNumber.components.street;\r\n vm.city = vm.streetNumber.components.city;\r\n vm.state = vm.streetNumber.components.state;\r\n vm.postalCode = vm.streetNumber.components.postCode || '';\r\n vm.longitude = vm.streetNumber.components.location.long;\r\n vm.latitude = vm.streetNumber.components.location.lat;\r\n\r\n masjidservice.getTimeZone(vm.latitude, vm.longitude)\r\n .then(function(result) {\r\n\r\n\r\n vm.timeZoneId = result.timeZoneId;\r\n });\r\n\r\n }\r\n };\r\n\r\n $scope.$watch('vm.streetNumber.components.location.lat', vm.setAddressAndGetTimeZone);\r\n\r\n vm.submitMasjid = function () {\r\n\r\n if (!vm.acceptTermsAndConditions) {\r\n logger.error(\"Please review and accept the terms and conditions\");\r\n return;\r\n }\r\n\r\n if (vm.validAccountInfo() && vm.validMasjidInformation()) {\r\n //Save masjid information.\r\n var masjidModel = {};\r\n masjidModel.userId = id;\r\n masjidModel.code = code;\r\n masjidModel.password = vm.password;\r\n masjidModel.confirmPassword = vm.confirmPassword;\r\n masjidModel.masjidName = vm.masjidName;\r\n masjidModel.masjidAddress1 = vm.streetNum + ' ' + vm.streetName;\r\n masjidModel.masjidAddress2 = vm.masjidAddress2;\r\n masjidModel.masjidCity = vm.city;\r\n masjidModel.masjidState = vm.state;\r\n masjidModel.masjidZip = vm.postalCode;\r\n masjidModel.masjidMainPhone = vm.masjidPhone;\r\n masjidModel.masjidMainEmailAddress = vm.masjidEmail;\r\n masjidModel.denominationTypeID = vm.denominationType.value;\r\n masjidModel.adhanCalculationTypeID = vm.adhanCalculationType.value;\r\n masjidModel.juristicMethodTypeID = vm.juristicType.value;\r\n masjidModel.longitude = vm.longitude;\r\n masjidModel.lattitude = vm.latitude;\r\n masjidModel.timeZone = vm.timeZoneId;\r\n masjidModel.address = vm.addressStr;\r\n \r\n spinnerService.showByName($stateParams.spinnerName);\r\n\r\n masjidservice.createMasjid(masjidModel)\r\n .then(function (result) {\r\n\r\n spinnerService.hide($stateParams.spinnerName);\r\n\r\n logger.success('Masjid Created!!, Click the button below to login.');\r\n vm.MasjidCreated = true;\r\n }).catch(function(err) {\r\n return exception.catcher('Something went wrong :(')(err);\r\n });\r\n }\r\n };\r\n\r\n vm.denominationDropDownOptions = {\r\n dataSource: mgmtConstants.denominationTypes,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.denominationType\r\n }\r\n\r\n\r\n vm.adhanCalcTypeDropDownOptions = {\r\n dataSource: mgmtConstants.adhanCalculationTypes,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.adhanCalculationType\r\n }\r\n vm.juristicTypeDropDownOptions = {\r\n dataSource: mgmtConstants.juristicTypes,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.juristicType\r\n }\r\n\r\n $state.go('accounts.masjid.accountInformation');\r\n };\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('inspinia.management')\r\n .config(routeConfig);\r\n\r\n /* @ngInject */\r\n function routeConfig($stateProvider, $urlRouterProvider, helpContent) {\r\n $stateProvider\r\n .state('management.users',\r\n {\r\n url: \"/users\",\r\n templateUrl: \"app/management/users/users.html\",\r\n controller: \"UsersController\",\r\n controllerAs: \"vm\",\r\n data: {\r\n pageTitle: 'User Management',\r\n pageHelp: helpContent.users || ''\r\n },\r\n resolve: {\r\n resolveResults: usersResolve\r\n }\r\n });\r\n\r\n /* @ngInject */\r\n function usersResolve(spinnerService, userService) {\r\n spinnerService.show();\r\n\r\n return userService.getUsers();\r\n }\r\n }\r\n})();\n(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('inspinia',\r\n [\r\n 'inspinia.core',\r\n 'inspinia.services',\r\n 'inspinia.accounts',\r\n 'inspinia.management',\r\n 'inspinia.public'\r\n ]);\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular.module('inspinia')\r\n .controller(\"UsersController\", UsersController);\r\n\r\n /* @ngInject */\r\n function UsersController(resolveResults, userService, spinnerService, $uibModal,$log, _) {\r\n var vm = this;\r\n\r\n spinnerService.hide();\r\n\r\n vm.filters = {\r\n searchString: \"\"\r\n };\r\n\r\n \r\n vm.users = sortUsers(resolveResults.users);\r\n vm.roles = resolveResults.allRoles;\r\n vm.permissions = resolveResults.permissions;\r\n\r\n //$log.debug(resolveResults);\r\n\r\n vm.editUser = function (user) {\r\n userService\r\n .getUser(user.userId)\r\n .then(function (result) {\r\n\r\n var modalInstance = $uibModal.open({\r\n templateUrl: \"app/management/users/editUser.html\",\r\n controller: UserModalController,\r\n controllerAs: \"vm\",\r\n backdrop: \"static\",\r\n resolve: {\r\n args: function () {\r\n return {\r\n result: result,\r\n isNew: false,\r\n roles: vm.roles,\r\n permissions: vm.permissions\r\n }\r\n }\r\n }\r\n });\r\n\r\n modalInstance.result.then(\r\n function (data) {\r\n if (data.action === 'save') {\r\n addUser(data.user);\r\n } else if (data.action === 'remove') {\r\n _.remove(vm.users, function (item) {\r\n return item.userId === data.user.userId;\r\n });\r\n vm.users = sortUsers(vm.users);\r\n }\r\n },\r\n function (data) { });\r\n });\r\n }\r\n\r\n vm.addUser = function (user) {\r\n\r\n user = {};\r\n var modalInstance = $uibModal.open({\r\n templateUrl: \"app/management/users/editUser.html\",\r\n controller: UserModalController,\r\n //size: 'lg',\r\n controllerAs: \"vm\",\r\n backdrop: \"static\",\r\n resolve: {\r\n args: function () {\r\n return {\r\n user: user,\r\n isNew: true,\r\n roles: vm.roles,\r\n permissions: vm.permissions\r\n }\r\n }\r\n }\r\n });\r\n\r\n modalInstance.result.then(\r\n function (data) {\r\n if (data.action === 'save') {\r\n addUser(data.user);\r\n }\r\n },\r\n function (data) { });\r\n }\r\n\r\n\r\n function addUser(user) {\r\n $log.debug(user);\r\n _.remove(vm.users, function(item) {\r\n return item.userId === user.userId;\r\n });\r\n\r\n vm.users.push(user);\r\n\r\n vm.users = sortUsers(vm.users);\r\n }\r\n\r\n\r\n function sortUsers(users) {\r\n return _.sortBy(users, function (item) {\r\n return item.searchString;\r\n });\r\n }\r\n\r\n /* @ngInject */\r\n function UserModalController($scope, args, $uibModalInstance, mgmtConstants, userService, _) {\r\n //$log.debug(args);\r\n\r\n var vm = this, user;\r\n\r\n vm.permissions = args.permissions;\r\n vm.title = args.isNew ? \"Add User\" : \"Edit User\";\r\n\r\n vm.isNew = args.isNew;\r\n vm.selectedPermissions = [];\r\n\r\n if (!vm.isNew) {\r\n user = args.result.users[0];\r\n vm.firstName = user.firstName;\r\n vm.lastName = user.lastName;\r\n vm.userType = user.userType;\r\n vm.phone = user.phoneNumber;\r\n vm.email = user.email;\r\n vm.userSince = user.userSince;\r\n vm.level = user.level;\r\n vm.selectedPermissions = user.selectedPermissions;\r\n vm.emailConfirmed = user.emailConfirmed;\r\n vm.validPermissions = true;\r\n if (!user.emailConfirmed) {\r\n vm.title = \"Pending User Registration\";\r\n }\r\n //setValidPermissions();\r\n }\r\n\r\n vm.save = function () {\r\n user = user || {};\r\n user.firstName = vm.firstName;\r\n user.lastName = vm.lastName;\r\n user.phoneNumber = vm.phone;\r\n user.email = vm.email;\r\n user.level = vm.userRoleDropDown.value();\r\n if (vm.userRoleDropDown.value() <= 2) {\r\n vm.selectedPermissions = [];\r\n }\r\n user.rolesToAssign = _.union(vm.selectedPermissions, [vm.userRoleDropDown.value()]);\r\n\r\n vm.saving = true;\r\n\r\n var action = 'updateUser';\r\n\r\n if (vm.isNew) {\r\n action = 'createUser';\r\n }\r\n\r\n userService[action](user)\r\n .then(function (result) {\r\n // $log.debug(result);\r\n spinnerService.showSuccess();\r\n $uibModalInstance.close({ user: result.users[0], action: 'save' });\r\n vm.close();\r\n })\r\n .catch(function (err) {\r\n spinnerService.showError();\r\n vm.saving = false;\r\n throw err;\r\n });\r\n\r\n };\r\n\r\n vm.remove = function () {\r\n vm.removing = true;\r\n\r\n userService.deleteUser(user.userId)\r\n .then(function(result) {\r\n spinnerService.showSuccess();\r\n $uibModalInstance.close({ user: user, action: 'remove' });\r\n vm.close();\r\n }).catch(function(err) {\r\n spinnerService.showError();\r\n vm.removing = false;\r\n throw err;\r\n });\r\n };\r\n\r\n vm.close = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n };\r\n\r\n function setValidPermissions() {\r\n if (vm.userRoleDropDown) {\r\n var isValid = true;\r\n if (vm.selectedPermissions.length === 1 && vm.selectedPermissions[0] === 2) {\r\n isValid = false;\r\n }\r\n vm.validPermissions = vm.userRoleDropDown.value() == 2 || (vm.userRoleDropDown.value() > 2 && vm.selectedPermissions.length > 0 && isValid);\r\n }\r\n }\r\n\r\n vm.userRoleDropDownOptions = {\r\n dataSource: args.roles,\r\n dataTextField: \"name\",\r\n dataValueField: \"roleId\",\r\n value: vm.level,\r\n change: function () {\r\n $scope.$apply(function () {\r\n setValidPermissions();\r\n });\r\n }\r\n };\r\n\r\n //function onChangeEventType() {\r\n // if (vm.selectedEventTypes.length > 0) {\r\n // vm.scheduler.dataSource.filter({\r\n // operator: function (task) {\r\n\r\n // return $.inArray(task.ownerId, vm.selectedEventTypes) >= 0;\r\n // }\r\n // });\r\n // } else {\r\n // vm.scheduler.dataSource.filter({\r\n // operator: function (task) {\r\n\r\n // return true;\r\n // }\r\n // });\r\n // }\r\n\r\n //}\r\n\r\n\r\n vm.selectOptions = {\r\n placeholder: \"Select at least one permission...\",\r\n dataTextField: \"name\",\r\n dataValueField: \"roleId\",\r\n valuePrimitive: true,\r\n autoBind: false,\r\n dataSource: vm.permissions,\r\n change: function () {\r\n $scope.$apply(function () {\r\n setValidPermissions();\r\n });\r\n }\r\n };\r\n }\r\n }\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('inspinia.management')\r\n .config(routeConfig)\r\n\r\n /* @ngInject */\r\n function routeConfig($stateProvider, $urlRouterProvider) {\r\n \r\n var underContructionTemplate =\r\n \"
\" +\r\n \"
\" +\r\n \"

This page is under construction

\";\r\n \r\n \r\n $stateProvider\r\n //School\r\n .state('quaranSchool', {\r\n abstract: true,\r\n url: \"/quaranSchool\",\r\n templateUrl: \"app/components/common/content.html\"\r\n })\r\n .state('quaranSchool.programs',\r\n {\r\n url: \"/programs\",\r\n template: underContructionTemplate,\r\n data: { pageTitle: 'Quaran School Programs' }\r\n })\r\n //News\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('inspinia.management')\r\n .config(routeConfig);\r\n\r\n /* @ngInject */\r\n function routeConfig($stateProvider, $urlRouterProvider, helpContent, moment) {\r\n $stateProvider\r\n .state('management.salahTimes',\r\n {\r\n url: \"/salahTimes\",\r\n abstract: true,\r\n template: \"
\",\r\n params: {\r\n //month: moment().format('MM'),//'07',//TODO : Get the current month using moment\r\n //year: moment().format('YYYY'),//TODO : Get current year using moment\r\n monthName: moment().format('MMMM'),\r\n selectedDate : moment().startOf('month'),\r\n showSpinner: true\r\n }\r\n })\r\n //Salah times\r\n .state('management.salahTimes.adhanIqamah',\r\n {\r\n url: \"/adhan\",\r\n templateUrl: \"app/management/salahTimes/adhanTimes.html\",\r\n data: { pageTitle: 'Adhan/Iqamah Times', pageHelp : helpContent.adhanTimes || '' },\r\n controller: \"AdhanTimesController\",\r\n controllerAs : \"vm\",\r\n resolve:{\r\n resolveResults: adhanIqamahTimesResolve\r\n }\r\n })\r\n .state('management.salahTimes.jummah',\r\n {\r\n url: \"/jummah\",\r\n templateUrl: \"app/management/salahTimes/jummahTimes.html\",\r\n data: { pageTitle: 'Jumah Times', pageHelp : helpContent.jummahTimes || '' },\r\n controller: \"JummahTimesController\",\r\n controllerAs : \"vm\",\r\n resolve:{\r\n resolveResults: jummahTimesResolve\r\n }\r\n });\r\n //Ramadan\r\n /* @ngInject */\r\n function adhanIqamahTimesResolve(salahTimesService, $stateParams, $state, mgmtConstants, spinnerService) {\r\n\r\n spinnerService.show();\r\n \r\n salahTimesService.setTimeType(mgmtConstants.timeType.adhanIqamahTimes);\r\n \r\n return salahTimesService.getMonthTimes($stateParams.selectedDate);\r\n };\r\n /* @ngInject */\r\n function jummahTimesResolve(salahTimesService, $stateParams, $state, mgmtConstants,spinnerService){\r\n if($state.params.showSpinner === true){\r\n spinnerService.show();\r\n }\r\n salahTimesService.setTimeType(mgmtConstants.timeType.jummahTimes);\r\n\r\n return salahTimesService.getMonthTimes($stateParams.selectedDate);\r\n }\r\n }\r\n})();\n(function() {\r\n 'use strict';\r\n\r\n angular.module('inspinia.management')\r\n .controller('ReadOnlySalahTimesController', ReadOnlySalahTimesController);\r\n\r\n /* @ngInject */\r\n function ReadOnlySalahTimesController($scope, $window, $location, resolveResults, styleService, prayerTimesService) {\r\n var vm = this;\r\n\r\n var masjid = resolveResults[0];\r\n\r\n\r\n\r\n if (masjid) {\r\n prayerTimesService.bindPrayerTimes($scope, vm, masjid, resolveResults[1]);\r\n\r\n window.setTimeout(function () {\r\n $scope.$apply(function () {\r\n styleService.setStyle(vm);\r\n vm.showTimes = true;\r\n });\r\n \r\n }, 1000);\r\n }\r\n\r\n vm.countDownFinished = function () {\r\n $window.location.reload();\r\n //$state.go('public.readOnlySalahTimes', { id: $location.search().id, code: $location.search().code }, { reload: true });\r\n };\r\n\r\n };\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular.module('inspinia.management')\r\n .controller('JummahTimesController', JummahTimesController);\r\n \r\n /* @ngInject */\r\n function JummahTimesController(resolveResults, logger, salahTimesService, mgmtConstants,\r\n spinnerService, $rootScope, dateService, _) {\r\n\r\n var vm = this;\r\n var jummahTimes = resolveResults.jummahTimes,\r\n dateFormats = mgmtConstants.dateFormats,\r\n gridColumns = mgmtConstants.gridColumns.jummahTimes;\r\n //console.log(jummahTimes);\r\n vm.timeType = mgmtConstants.timeType.jummahTimes;\r\n salahTimesService.setTimeType(vm.timeType);\r\n\r\n vm.isLoading = true;\r\n vm.yearsDataSource = resolveResults.years;\r\n vm.maxYear = resolveResults.maxYear;\r\n \r\n //vm.minDate = salahTimesService.getMinDate(resolveResults.minAvailableDate);\r\n //vm.maxDate = salahTimesService.getMaxDate(resolveResults.maxAvailableDate);\r\n\r\n salahTimesService.setGridColumns(gridColumns);\r\n\r\n activate();\r\n\r\n function activate() {\r\n vm.mainGridOptions = {\r\n dataSource: {\r\n transport: {\r\n read: function (e) {\r\n vm.isLoading = true;\r\n // console.log(jummahTimes);\r\n //if (jummahTimes && jummahTimes.length > 0) {\r\n // salahTimesService.removeTimeZones(jummahTimes);\r\n //};\r\n\r\n e.success(jummahTimes);\r\n vm.isLoading = false;\r\n }\r\n },\r\n sort: {\r\n field: \"jummahDate\",\r\n dir: \"asc\"\r\n }\r\n },\r\n height: 650,\r\n resizable: true,\r\n columns: [\r\n { field: gridColumns.month, title: 'Month', format: dateFormats.string, groupHeaderTemplate: '#= value #' },\r\n { field: gridColumns.jummahDate, title: 'Date', format: '{0:MM/dd/yyyy}' },\r\n { field: gridColumns.firstJummahAdhan, title: '1st Jumhah Adhan', format: dateFormats.time, editor: salahTimesService.timeEditor(), attributes: { 'class': '#: cssClass #' } },\r\n { field: gridColumns.firstJummahIqamah, title: '1st Jumhah Iqamah', format: dateFormats.time, editor: salahTimesService.timeEditor(), attributes: { 'class': '#: cssClass #' } },\r\n { field: gridColumns.firstJummahKhateeb, title: '1st Jummah Khateeb', format: dateFormats.string, attributes: { 'class': '#: cssClass #' } },\r\n { field: gridColumns.secondJummahAdhan, title: '2nd Jummah Adhan', format: dateFormats.time, editor: salahTimesService.timeEditor(), attributes: { 'class': '#: cssClass #' } },\r\n { field: gridColumns.secondJummahIqamah, title: '2nd Jummah Iqamah', format: dateFormats.time, editor: salahTimesService.timeEditor(), attributes: { 'class': '#: cssClass #' } },\r\n { field: gridColumns.secondJummahKhateeb, title: '2nd Jummah Khateeb', format: dateFormats.string, attributes: { 'class': '#: cssClass #' } },\n { field: gridColumns.thirdJummahAdhan, title: '3rd Jummah Adhan', format: dateFormats.time, editor: salahTimesService.timeEditor(), attributes: { 'class': '#: cssClass #' } },\r\n { field: gridColumns.thirdJummahIqamah, title: '3rd Jummah Iqamah', format: dateFormats.time, editor: salahTimesService.timeEditor(), attributes: { 'class': '#: cssClass #' } },\r\n { field: gridColumns.thirdJummahKhateeb, title: '3rd Jummah Khateeb', format: dateFormats.string, attributes: { 'class': '#: cssClass #' } }\r\n //{ command: ['edit', ], title: 'Actions', width: \"140px\" }\r\n ]\r\n };\r\n };\r\n // \r\n // function setDate(){\r\n // var displayedYear = $rootScope.$state.params.selectedDate.year();\r\n // if(displayedYear > vm.maxYear){\r\n // $rootScope.$state.params.selectedDate = moment(vm.maxYear + '-01-01');\r\n // }\r\n // };\r\n \r\n vm.mainGridOptions.timeType = mgmtConstants.timeType.jummahTimes;\r\n vm.mainGridOptions.mma_allowEdit = false;\r\n vm.mainGridOptions.dataSource.group = { field: 'month' };\r\n salahTimesService.configureGrid(vm.mainGridOptions, gridColumns, dateFormats);\r\n\r\n vm.allowEdit = function (allow) {\r\n vm.grid.options.mma_allowEdit = allow;\r\n if (allow) {\r\n salahTimesService.selectCurrentDate(vm.grid);\r\n }\r\n };\r\n vm.saveChanges = function () {\r\n // window.grid = vm.grid;\r\n var dirtyItems = _.filter(vm.grid.dataSource.data(), function (data) { return data.dirty === true });\r\n if (dirtyItems.length > 0) {\r\n var isValid = salahTimesService.areTimesValid(dirtyItems);\r\n\r\n if (isValid) {\r\n spinnerService.show(\"Saving\", 0);\r\n salahTimesService.formatDates(dirtyItems);\r\n\r\n salahTimesService.saveJummah(dirtyItems)\r\n .then(function (response) {\r\n\r\n vm.reload()\r\n .then(function () {\r\n $rootScope.$broadcast('mma-grid-save-success', 'Saved Jummah and Khateeb Times!');\r\n vm.grid.options.mma_allowEdit = false;\r\n spinnerService.showSuccess();\r\n });\r\n\r\n return true;\r\n })\r\n .catch(function (err) {\r\n spinnerService.showError();\r\n $rootScope.$broadcast('mma-grid-save-error');\r\n throw err;\r\n });\r\n } else {\r\n logger.error('Please enter all Jummah times and Khateeb for all days changed.');\r\n $rootScope.$broadcast('mma-grid-save-error');\r\n }\r\n }\r\n };\r\n vm.reload = function () {\r\n return salahTimesService.getMonthTimes()\r\n .then(function (response) {\r\n jummahTimes = response.jummahTimes;\r\n vm.grid.dataSource.read();\r\n })\r\n .catch(function (err) { throw err; })\r\n .finally(function () { vm.isLoading = false; });\r\n };\r\n vm.selectCurrentDate = function () {\r\n salahTimesService.selectCurrentDate(vm.grid);\r\n };\r\n\r\n function setAttributes(e) {\r\n return { class: e.cssClass }\r\n }\r\n };\r\n\r\n})();\n\n(function () {\r\n 'use strict';\r\n\r\n angular.module('inspinia.management')\r\n .controller('AdhanTimesController', AdhanTimesController);\r\n\r\n /* @ngInject */\r\n function AdhanTimesController(resolveResults, logger, salahTimesService, mgmtConstants, masjidservice,\r\n spinnerService, $rootScope, $uibModal) {\r\n\r\n var vm = this;\r\n var adhanIqamahTimes = resolveResults.adhanIqamahTimes,\r\n dateFormats = mgmtConstants.dateFormats,\r\n gridColumns = mgmtConstants.gridColumns.adhanIqamahTimes;\r\n\r\n vm.timeType = mgmtConstants.timeType.adhanIqamahTimes;\r\n salahTimesService.setTimeType(vm.timeType);\r\n\r\n vm.isLoading = true;\r\n vm.minDate = salahTimesService.getMinDate(resolveResults.minAvailableDate);\r\n vm.maxDate = salahTimesService.getMaxDate(resolveResults.maxAvailableDate);\r\n vm.hasTimes = resolveResults.hasTimes;\r\n\r\n if (!resolveResults.hasTimes) { \r\n //Show prompt \r\n showCreateTimesModal(false);\r\n //return;\r\n }\r\n if (resolveResults.timesNeedsAttention) {\r\n //Show prompt\r\n showCreateTimesModal(true);\r\n }\r\n\r\n salahTimesService.setGridColumns(gridColumns);\r\n\r\n activate();\r\n\r\n function activate() {\r\n vm.mainGridOptions = {\r\n dataSource: {\r\n transport: {\r\n read: function (e) {\r\n vm.isLoading = true;\r\n //window.adhanIqamahTimes = adhanIqamahTimes;\r\n //if (adhanIqamahTimes && adhanIqamahTimes.length > 0) {\r\n // salahTimesService.removeTimeZones(adhanIqamahTimes);\r\n //};\r\n\r\n e.success(adhanIqamahTimes);\r\n vm.isLoading = false;\r\n spinnerService.hide();\r\n //if (adhanIqamahTimes.length === 0) {\r\n\r\n //}\r\n\r\n },\r\n update: function (e) {\r\n var isValid = salahTimesService.areTimesValid(e.data.models);\r\n\r\n if (isValid) {\r\n //logger.info('Saved successfully'); return;\r\n spinnerService.show(\"Saving\", 0);\r\n salahTimesService.formatDates(e.data.models);\r\n // $log.debug(e.data.models);\r\n salahTimesService.updateAdhanIqamah(e.data.models)\r\n .then(function (response) {\r\n\r\n //logger.success(\"Saved successfully\");\r\n vm.reload()\r\n .then(function () {\r\n $rootScope.$broadcast('mma-grid-save-success', 'Save Adhan/Iqamah Times!');\r\n vm.grid.options.mma_allowEdit = false;\r\n spinnerService.showSuccess();\r\n });\r\n\r\n return true;\r\n })\r\n .catch(function (err) {\r\n spinnerService.showError();\r\n $rootScope.$broadcast('mma-grid-save-error');\r\n throw err;\r\n });\r\n } else {\r\n logger.error('Please fix the highlighted errors below.');\r\n $rootScope.$broadcast('mma-grid-save-error');\r\n }\r\n return false;\r\n }\r\n }\r\n },\r\n height: 650,\r\n resizable: true,\r\n \r\n columns: [\r\n { field: gridColumns.fromDate, title: 'Day', format: dateFormats.date, width: \"50px\" },\r\n { field: gridColumns.fajrAdhanTime, title: 'Fajr Adhan', format: dateFormats.time, width: \"70px\", editor: salahTimesService.timeEditor(), attributes: { 'class': '#: cssClass #' } },\r\n { field: gridColumns.fajrIqamahTime, title: 'Fajr Iqamah', format: dateFormats.time, width: \"70px\", editor: salahTimesService.timeEditor(), attributes: { 'class': '#: cssClass #' } },\r\n { field: gridColumns.sunriseTime, title: 'Sunrise', format: dateFormats.time, width: \"70px\", editor: salahTimesService.timeEditor(), attributes: { 'class': '#: cssClass #' } },\r\n { field: gridColumns.duhrAdhanTime, title: 'Dhuhr Adhan', format: dateFormats.time, width: \"70px\", editor: salahTimesService.timeEditor(), attributes: { 'class': '#: cssClass #' } },\r\n { field: gridColumns.duhrIqamahTime, title: 'Dhuhr Iqamah', format: dateFormats.time, width: \"70px\", editor: salahTimesService.timeEditor(), attributes: { 'class': '#: cssClass #' } },\r\n { field: gridColumns.asrAdhanTime, title: 'Asr Adhan', format: dateFormats.time, width: \"70px\", editor: salahTimesService.timeEditor(), attributes: { 'class': '#: cssClass #' } },\r\n { field: gridColumns.asrIqamahTime, title: 'Asr Iqamah', format: dateFormats.time, width: \"70px\", editor: salahTimesService.timeEditor(), attributes: { 'class': '#: cssClass #' } },\r\n { field: gridColumns.maghribAdhanTime, title: 'Maghrib Adhan', format: dateFormats.time, width: \"70px\", editor: salahTimesService.timeEditor(), attributes: { 'class': '#: cssClass #' } },\r\n { field: gridColumns.maghribIqamahTime, title: 'Maghrib Iqamah', format: dateFormats.time, width: \"70px\", editor: salahTimesService.timeEditor(), attributes: { 'class': '#: cssClass #' } },\r\n { field: gridColumns.ishaAdhanTime, title: 'Isha Adhan', format: dateFormats.time, width: \"70px\", editor: salahTimesService.timeEditor(), attributes: { 'class': '#: cssClass #' } },\r\n { field: gridColumns.ishaIqamahTime, title: 'Isha Iqamah', format: dateFormats.time, width: \"70px\", editor: salahTimesService.timeEditor(), attributes: { 'class': '#: cssClass #' } }\r\n ]\r\n };\r\n };\r\n\r\n vm.mainGridOptions.timeType = mgmtConstants.timeType.adhanIqamahTimes;\r\n vm.mainGridOptions.mma_allowEdit = false;\r\n salahTimesService.configureGrid(vm.mainGridOptions, gridColumns, dateFormats);\r\n\r\n vm.allowEdit = function (allow) {\r\n vm.grid.options.mma_allowEdit = allow;\r\n if (allow) {\r\n salahTimesService.selectCurrentDate(vm.grid);\r\n }\r\n };\r\n\r\n vm.saveChanges = function () {\r\n if (!vm.isLoading) {\r\n if (vm.grid.dataSource.hasChanges() === true) {\r\n vm.grid.saveChanges();\r\n }\r\n }\r\n };\r\n\r\n vm.reload = function () {\r\n return salahTimesService.getMonthTimes()\r\n .then(function (response) {\r\n adhanIqamahTimes = response.adhanIqamahTimes;\r\n vm.grid.dataSource.read();\r\n })\r\n .catch(function (err) { throw err; })\r\n .finally(function () { vm.isLoading = false; });\r\n };\r\n\r\n vm.selectCurrentDate = function () {\r\n salahTimesService.selectCurrentDate(vm.grid);\r\n };\r\n\r\n vm.createEntriesForNextMonth = function (nextMonth) {\r\n if (!vm.isLoading) {\r\n spinnerService.show(\"Creating\", 0);\r\n\r\n salahTimesService.createEntriesForNextMonth(nextMonth)\r\n .then(function (response) {\r\n spinnerService.showSuccess();\r\n salahTimesService.reloadAdhanIqamahPage(nextMonth, false);\r\n })\r\n .catch(function (err) {\r\n spinnerService.showError();\r\n throw err;\r\n })\r\n .finally(function () { vm.isLoading = false; });\r\n }\r\n };\r\n\r\n vm.showCreateTimesModal = function() {\r\n showCreateTimesModal(false);\r\n };\r\n\r\n function showCreateTimesModal(hasTimes) {\r\n var modalInstance = $uibModal.open({\r\n templateUrl: \"app/management/salahTimes/createTimesModal.html\",\r\n controller: ModalController,\r\n controllerAs: \"vm\",\r\n backdrop: \"static\",\r\n resolve: {\r\n args: function () {\r\n return {\r\n masjid: resolveResults.masjid,\r\n hasTimes: hasTimes,\r\n numberOfDaysLeft: resolveResults.numberOfDaysLeft\r\n }\r\n }\r\n }\r\n });\r\n\r\n modalInstance.result.then(\r\n function (result) {\r\n\r\n },\r\n function (data) { }\r\n );\r\n }\r\n };\r\n\r\n /* @ngInject */\r\n function ModalController($scope, $uibModalInstance, mgmtConstants, args, moment, masjidservice, spinnerService, salahTimesService, dateService) {\r\n var vm = this, masjidIqamahSetting, masjid, masjidAdhanSettings;\r\n spinnerService.hide();\r\n vm.step = 0;\r\n\r\n if (args.hasTimes) {\r\n vm.numberOfDaysLeft = args.numberOfDaysLeft > 0 ? args.numberOfDaysLeft : 0;\r\n vm.step = -1;\r\n var numberOfDaysToAdd = args.numberOfDaysLeft >= 0 ? 1 : 0;\r\n vm.nextMonth = 'for ' + moment().add(numberOfDaysToAdd, 'months').format('MMMM YYYY');\r\n } else {\r\n vm.nextMonth = 'through ' + moment().add(1, 'months').format('MMMM YYYY');\r\n }\r\n\r\n masjid = args.masjid;\r\n\r\n if (masjid) {\r\n vm.denominationType = masjid.denominationTypeID;\r\n vm.juristicType = masjid.juristicMethodTypeID;\r\n\r\n //Address Control\r\n vm.city = masjid.masjidCity;\r\n vm.state = masjid.masjidState;\r\n vm.postalCode = masjid.masjidZip;\r\n vm.longitude = masjid.longitude;\r\n vm.latitude = masjid.lattitude;\r\n vm.addressStr = masjid.address;\r\n vm.streetNumber = {\r\n name: masjid.address\r\n };\r\n vm.timeZoneId = masjid.timeZone;\r\n\r\n vm.adhanCalculationType = masjid.adhanCalculationTypeID;\r\n vm.juristicType = masjid.juristicMethodTypeID;\r\n \r\n vm.masjidAddress1 = masjid.masjidAddress1;\r\n vm.masjidAddress2 = masjid.masjidAddress2;\r\n\r\n masjidIqamahSetting = masjid.masjidIqamahSetting;\r\n masjidAdhanSettings = masjid.masjidAdhanSettings;\r\n }\r\n\r\n if (masjidIqamahSetting) {\r\n vm.fajr = masjidIqamahSetting.fajr;\r\n vm.fajrTime = masjidIqamahSetting.fajrTime;\r\n vm.dhuhr = masjidIqamahSetting.dhuhr;\r\n vm.dhuhrTime = masjidIqamahSetting.dhuhrTime;\r\n vm.asr = masjidIqamahSetting.asr;\r\n vm.asrTime = masjidIqamahSetting.asrTime;\r\n vm.maghrib = masjidIqamahSetting.maghrib;\r\n vm.maghribTime = masjidIqamahSetting.maghribTime;\r\n vm.isha = masjidIqamahSetting.isha;\r\n vm.ishaTime = masjidIqamahSetting.ishaTime;\r\n }\r\n\r\n if (masjidAdhanSettings) {\r\n \r\n vm.fajrAngle = masjidAdhanSettings.fajrAngle;\r\n vm.fajrOffset = masjidAdhanSettings.fajrOffset;\r\n vm.ishaAngle = masjidAdhanSettings.ishaAngle;\r\n vm.ishaOffset = masjidAdhanSettings.ishaOffset;\r\n vm.maghribIshaDelta = masjidAdhanSettings.maghribIshaDelta;\r\n }\r\n\r\n setHelpText();\r\n\r\n vm.validAdhanSettings = function () {\r\n return vm.denominationType &&\r\n vm.adhanCalculationType &&\r\n vm.juristicType &&\r\n vm.addressStr &&\r\n //vm.streetName &&\r\n vm.city &&\r\n vm.state &&\r\n vm.postalCode &&\r\n vm.timeZoneId &&\r\n vm.longitude &&\r\n vm.latitude;\r\n };\r\n\r\n vm.validiqamahsettings = function () {\r\n return (vm.fajr > 0 || vm.fajrTime) &&\r\n (vm.dhuhr > 0 || vm.dhuhrTime) &&\r\n (vm.asr > 0 || vm.asrTime) &&\r\n (vm.maghrib > 0 || vm.maghribTime) &&\r\n (vm.isha > 0 || vm.ishaTime);\r\n }\r\n\r\n vm.close = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n }\r\n\r\n $scope.goToIqamahSettimgs = function () {\r\n vm.createNextMonth = false;\r\n vm.createYear = false;\r\n vm.uploadFile = false;\r\n vm.streetNumber = {\r\n name: vm.addressStr\r\n };\r\n vm.step = 0;\r\n setHelpText();\r\n };\r\n\r\n $scope.createNextMonth = function () {\r\n vm.createNextMonth = true;\r\n vm.createYear = false;\r\n vm.uploadFile = false;\r\n vm.step = 2;\r\n setHelpText();\r\n setPromptText();\r\n };\r\n\r\n $scope.createYear = function () {\r\n vm.createYear = true;\r\n vm.createNextMonth = false;\r\n vm.uploadFile = false;\r\n vm.step = 2;\r\n setHelpText();\r\n setPromptText();\r\n };\r\n\r\n $scope.uploadFile = function () {\r\n vm.uploadFile = true;\r\n vm.createYear = false;\r\n vm.createNextMonth = false;\r\n vm.step = 2;\r\n setHelpText();\r\n setPromptText();\r\n };\r\n\r\n $scope.createTimes = function () {\r\n masjid = masjid || {};\r\n masjid.denominationTypeID = vm.denominationType;\r\n masjid.adhanCalculationTypeID = vm.adhanCalculationType;\r\n masjid.juristicMethodTypeID = vm.juristicType;\r\n masjid.masjidAddress1 = vm.masjidAddress1;\r\n masjid.masjidAddress2 = vm.masjidAddress2;\r\n masjid.masjidCity = vm.city;\r\n masjid.masjidState = vm.state;\r\n masjid.masjidZip = vm.postalCode;\r\n masjid.longitude = vm.longitude;\r\n masjid.lattitude = vm.latitude;\r\n masjid.address = vm.addressStr;\r\n masjid.timeZone = vm.timeZoneId;\r\n masjid.masjidIqamahSetting = masjid.masjidIqamahSetting || {};\r\n masjid.masjidIqamahSetting.fajr = vm.fajr;\r\n masjid.masjidIqamahSetting.fajrTime = vm.fajrTime;\r\n masjid.masjidIqamahSetting.dhuhr = vm.dhuhr;\r\n masjid.masjidIqamahSetting.dhuhrTime = vm.dhuhrTime;\r\n masjid.masjidIqamahSetting.asr = vm.asr;\r\n masjid.masjidIqamahSetting.asrTime = vm.asrTime;\r\n masjid.masjidIqamahSetting.maghrib = vm.maghrib;\r\n masjid.masjidIqamahSetting.maghribTime = vm.maghribTime;\r\n masjid.masjidIqamahSetting.isha = vm.isha;\r\n masjid.masjidIqamahSetting.ishaTime = vm.ishaTime;\r\n\r\n var createTimesModel = {\r\n createYear: vm.createYear,\r\n createNextMonth: vm.createNextMonth,\r\n uploadFile: vm.uploadFile,\r\n masjid: masjid\r\n }\r\n\r\n vm.saving = true;\r\n masjidservice\r\n .createAdhanIqamah(createTimesModel)\r\n .then(function (response) {\r\n vm.close();\r\n spinnerService.showSuccess();\r\n salahTimesService.reloadAdhanIqamahPage();\r\n }).catch(function (err) {\r\n spinnerService.showError();\r\n throw err;\r\n }).finally(function () { vm.saving = false; });\r\n };\r\n\r\n $scope.goBack = function () {\r\n vm.step = vm.step - 1;\r\n setHelpText();\r\n };\r\n\r\n $scope.showPrompt = function () {\r\n vm.step = 1;\r\n setHelpText();\r\n };\r\n\r\n $scope.configureTimes = function () {\r\n vm.step = 0;\r\n setHelpText();\r\n };\r\n\r\n function setHelpText() {\r\n if (vm.step === 0) {\r\n vm.helpText = \"Please review your Adhan and Iqamah time settings and make any necessary changes.\";\r\n vm.showHelpText = true;\r\n } if (vm.step === 1) {\r\n vm.helpText = \"Select the amount of time to generate or upload your times from a template.\";\r\n vm.showHelpText = true;\r\n } if (vm.step === 2) {\r\n vm.helpText = \"\";\r\n vm.showHelpText = false;\r\n }\r\n }\r\n\r\n function setPromptText() {\r\n if (vm.createNextMonth) {\r\n\r\n vm.promptText = \"Do you want to create entries \" + vm.nextMonth + \" ?\";\r\n \r\n }\r\n if (vm.createYear) {\r\n vm.promptText = \"Do you want to create entries for a Year ?\";\r\n }\r\n }\r\n\r\n vm.fajrDropDownOptions = {\r\n dataSource: mgmtConstants.iqamahTimesSettings,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.fajr\r\n }\r\n vm.dhuhrDropDownOptions = {\r\n dataSource: mgmtConstants.iqamahTimesSettings,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.dhuhr\r\n }\r\n vm.asrDropDownOptions = {\r\n dataSource: mgmtConstants.iqamahTimesSettings,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.asr\r\n }\r\n vm.maghribDropDownOptions = {\r\n dataSource: mgmtConstants.iqamahTimesSettings,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.maghrib\r\n }\r\n vm.ishaDropDownOptions = {\r\n dataSource: mgmtConstants.iqamahTimesSettings,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.isha\r\n }\r\n }\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('inspinia.management')\r\n .config(routeConfig)\r\n\r\n /* @ngInject */\r\n function routeConfig($stateProvider, helpContent) {\r\n var underContructionTemplate =\r\n \"
\" +\r\n \"
\" +\r\n \"

This page is under construction

\";\r\n\r\n $stateProvider\r\n .state('management.ramadan', {\r\n url: \"/ramadan\",\r\n templateUrl: \"app/management/ramadan/ramadan.html\",\r\n controller: \"RamadanController\",\r\n controllerAs: \"vm\",\r\n data: {\r\n pageTitle: 'Ramadan',\r\n pageHelp: helpContent.ramadan || ''\r\n },\r\n resolve: {\r\n resolveResults: ramadanResolve\r\n }\r\n });\r\n //.state('management.ramadan.taraweeh',\r\n //{\r\n // url: \"/taraweeh\",\r\n // template: \"
Under construction
\",\r\n // data: { pageTitle: 'Taraweeh Times' }\r\n //})\r\n //.state('management.ramadan.khatirah',\r\n //{\r\n // url: \"/khatirah\",\r\n // template: \"
Under construction
\",\r\n // data: { pageTitle: 'Khatirah Times' }\r\n //})\r\n //.state('management.ramadan.lail',\r\n //{\r\n // url: \"/lail\",\r\n // template: \"
Under construction
\",\r\n // data: { pageTitle: 'Lail Times' }\r\n //});\r\n\r\n /* @ngInject */\r\n function ramadanResolve(spinnerService, ramadanService) {\r\n spinnerService.show();\r\n\r\n return ramadanService.getTimes();\r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular.module('inspinia')\r\n .controller(\"RamadanController\", RamadanController);\r\n\r\n /* @ngInject */\r\n function RamadanController($scope, resolveResults, ramadanService, spinnerService, mgmtConstants, dateService, moment, _) {\r\n var vm = this,\r\n ramadanTime = resolveResults.model;\r\n\r\n spinnerService.hide();\r\n\r\n loadRamadanTimes();\r\n\r\n function loadRamadanTimes() {\r\n vm.isNew = ramadanTime.id === 0;\r\n console.log(ramadanTime);\r\n vm.taraweehTime = ramadanTime.taraweehTime;//new Date(dateService.formatDate(moment(ramadanTime.taraweehTime)));//new Date(moment(ramadanTime.taraweehTime).format('YYYY-MM-DD HH:mm'));//new Date(ramadanTime.taraweehTime);\r\n vm.juzzFrom = ramadanTime.juzzFrom;\r\n vm.juzzTo = ramadanTime.juzzTo;\r\n vm.iftaardaysID = ramadanTime.iftaardaysID;\r\n\r\n if (vm.iftaardaysDropDown) {\r\n vm.iftaardaysDropDown.value(ramadanTime.iftaardaysID);\r\n }\r\n\r\n vm.sahoorDaysId = ramadanTime.sahoorDaysId;\r\n if (vm.sahoorDaysDropDown) {\r\n vm.sahoorDaysDropDown.value(ramadanTime.sahoorDaysId);\r\n }\r\n\r\n vm.qiyaamUlLailDaysId = ramadanTime.qiyaamUlLailDaysId;\r\n if (vm.qiyaamUlLailDaysDropDown) {\r\n vm.qiyaamUlLailDaysDropDown.value(ramadanTime.qiyaamUlLailDaysId);\r\n }\r\n\r\n if (ramadanTime.khatam) {\r\n vm.khatam = new Date(dateService.formatDateMMDDYYYY(moment(ramadanTime.khatam)));//ramadanTime.khatam; \r\n }\r\n\r\n vm.sahoorTime = ramadanTime.sahoorTime;\r\n vm.qiyaamUlLailTime = ramadanTime.qiyaamUlLailTime;\r\n\r\n if (ramadanTime.eidDate) {\r\n vm.eidDate = new Date(dateService.formatDateMMDDYYYY(moment(ramadanTime.eidDate)));//ramadanTime.eidDate;\r\n }\r\n\r\n vm.eidFirstSalahTime = ramadanTime.eidFirstSalahTime;//new Date(dateService.formatDate(moment(ramadanTime.eidFirstSalahTime))); //ramadanTime.eidFirstSalahTime;\r\n vm.eidFirstKhateebName = ramadanTime.eidFirstKhateebName;\r\n vm.eidSecondSalahTime = ramadanTime.eidSecondSalahTime;//new Date(dateService.formatDate(moment(ramadanTime.eidSecondSalahTime))); //ramadanTime.eidSecondSalahTime;\r\n vm.eidSecondKhateebName = ramadanTime.eidSecondKhateebName;\r\n vm.eidSalahVenue = ramadanTime.eidSalahVenue;\r\n vm.eidSalahAddress2 = ramadanTime.eidSalahAddress2;\r\n vm.qariOne = ramadanTime.qariOne;\r\n vm.qariTwo = ramadanTime.qariTwo;\r\n if (ramadanTime.eidSalahAddress) {\r\n vm.streetnumber = {}\r\n vm.streetnumber.name = ramadanTime.eidSalahAddress;\r\n }\r\n }\r\n\r\n vm.save = _.debounce(function () {\r\n if (!vm.isSaving) {\r\n vm.isSaving = true;\r\n\r\n ramadanTime.juzzFrom = vm.juzzFrom;\r\n ramadanTime.juzzTo = vm.juzzTo;\r\n ramadanTime.iftaardaysID = vm.iftaardaysID;\r\n ramadanTime.khatam = vm.khatamPicker.value();\r\n ramadanTime.eidDate = vm.eidDatePicker.value();\r\n\r\n if (vm.taraweehTimePicker.value()) {\r\n ramadanTime.taraweehTime = moment(vm.taraweehTimePicker.value()).format(\"HH:mm\");\r\n } else {\r\n ramadanTime.taraweehTime = null;\r\n }\r\n\r\n if (vm.sahoorTimePicker.value()) {\r\n ramadanTime.sahoorTime = moment(vm.sahoorTimePicker.value()).format(\"HH:mm\");\r\n } else {\r\n ramadanTime.sahoorTime = null;\r\n }\r\n\r\n if (vm.qiyaamUlLailTimePicker.value()) {\r\n ramadanTime.qiyaamUlLailTime = moment(vm.qiyaamUlLailTimePicker.value()).format(\"HH:mm\");\r\n } else {\r\n ramadanTime.qiyaamUlLailTime = null;\r\n }\r\n\r\n if (vm.eidFirstSalahTimePicker.value()) {\r\n ramadanTime.eidFirstSalahTime = moment(vm.eidFirstSalahTimePicker.value()).format(\"HH:mm\");\r\n } else {\r\n ramadanTime.eidFirstSalahTime = null;\r\n }\r\n\r\n if (vm.eidSecondSalahTimePicker.value()) {\r\n ramadanTime.eidSecondSalahTime =\r\n moment(vm.eidSecondSalahTimePicker.value()).format(\"HH:mm\"); //vm.eidSecondSalahTime;\r\n } else {\r\n ramadanTime.eidSecondSalahTime = null;\r\n }\r\n ramadanTime.eidFirstKhateebName = vm.eidFirstKhateebName;\r\n\r\n ramadanTime.eidSecondKhateebName = vm.eidSecondKhateebName;\r\n ramadanTime.eidSalahVenue = vm.eidSalahVenue;\r\n ramadanTime.eidSalahAddress2 = vm.eidSalahAddress2;\r\n ramadanTime.qiyaamUlLailDaysId = vm.qiyaamUlLailDaysId;\r\n ramadanTime.sahoorDaysId = vm.sahoorDaysId;\r\n ramadanTime.qariOne = vm.qariOne;\r\n ramadanTime.qariTwo = vm.qariTwo;\r\n if (vm.streetnumber && vm.streetnumber.name) {\r\n ramadanTime.eidSalahAddress = vm.streetnumber.name;\r\n }\r\n\r\n if (vm.isNew) {\r\n ramadanService\r\n .addTimes(ramadanTime)\r\n .then(function () { spinnerService.showSuccess(); })\r\n .catch(function (err) {\r\n spinnerService.showError();\r\n throw err;\r\n })\r\n .finally(function () { vm.isSaving = false; });\r\n } else {\r\n\r\n ramadanService\r\n .updateTimes(ramadanTime)\r\n .then(function () { spinnerService.showSuccess(); })\r\n .catch(function () { spinnerService.showError(); })\r\n .finally(function () { vm.isSaving = false; });\r\n }\r\n }\r\n }, 500, { 'leading': true, 'trailing': false });\r\n\r\n vm.cancel = function () {\r\n loadRamadanTimes();\r\n }\r\n\r\n vm.pickerOptions = {\r\n parseFormats: [\"MM/dd/yyyy\"],\r\n interval: 15\r\n };\r\n vm.timePickerOptions = {\r\n parseFormats: [\"HH:mm\"],\r\n interval: 15\r\n }\r\n\r\n vm.iftaardaysOptions = {\r\n dataSource: resolveResults.iftaarDays,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.iftaardaysID\r\n };\r\n\r\n vm.sahoorDaysoptions = {\r\n dataSource: mgmtConstants.sahoorDays,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.sahoorDaysId\r\n };\r\n\r\n vm.qiyaamUlLailDaysOptions = {\r\n dataSource: mgmtConstants.qiyaamDays,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.qiyaamUlLailDaysId\r\n };\r\n }\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('inspinia.management')\r\n .config(routeConfig);\r\n\r\n /* @ngInject */\r\n function routeConfig($stateProvider, $urlRouterProvider, helpContent) {\r\n $stateProvider\r\n .state('management.notifications',\r\n {\r\n url: \"/notifications\",\r\n templateUrl: \"app/management/notifications/notifications.html\",\r\n controller: \"NotificationsController\",\r\n controllerAs : \"vm\",\r\n data: { \r\n pageTitle: 'Push Notifications', \r\n pageHelp : helpContent.pushNotifications || '' }, \r\n resolve:{\r\n resolveResults: notificationsResolve\r\n }\r\n });\r\n /* @ngInject */ \r\n function notificationsResolve(spinnerService, notificationsService){\r\n spinnerService.show();\r\n \r\n return notificationsService.getPushNotifications();\r\n }\r\n }\r\n})();\nvar deleteNotification;\r\n(function () {\r\n 'use strict';\r\n\r\n angular.module('inspinia.management')\r\n .controller('NotificationsController', NotificationsController);\r\n\r\n /* @ngInject */\r\n function NotificationsController($scope, resolveResults, mgmtConstants,\r\n spinnerService, notificationsService, kendoService, $uibModal, modalModes, moment, kendo, $state) {\r\n var vm = this;\r\n\r\n\r\n\r\n var pushNotifications = resolveResults.pushNotifications,\r\n notificationStatuses = resolveResults.notificationStatuses,\r\n notificationTypes = resolveResults.notificationTypes,\r\n dateFormats = mgmtConstants.dateFormats,\r\n gridColumns = mgmtConstants.gridColumns.pushNotifications;\r\n\r\n activate();\r\n spinnerService.hide();\r\n\r\n function activate() {\r\n vm.mainGridOptions = {\r\n dataSource: {\r\n transport: {\r\n read: function (e) {\r\n //window.ductus = pushNotifications;\r\n\r\n if (pushNotifications) {\r\n e.success(pushNotifications);\r\n }\r\n }\r\n },\r\n schema: {\r\n model: {\r\n id: \"pushNotificationID\",\r\n fields: {\r\n pushNotificationID: { editable: false, nullable: true },\r\n tags: { type: 'string' },\r\n //pushNotificationStatusTypeID: {\r\n // field: \"pushNotificationStatusTypeID\",\r\n // type: \"number\",\r\n // editable: false\r\n //},\r\n message: { type: 'string', editable: false },\r\n deviceType: { type: 'number', editable: false, encoded: false },\r\n createdDate: { type: 'date', editable: false },\r\n scheduledDate: { type: 'date', editable: false },\r\n createdByStr: { type: 'string', editable: false },\r\n processedDate: { type: 'date', editable: false, nullable: true }\r\n }\r\n }\r\n },\r\n sort: {\r\n field: \"createdDate\",\r\n dir: \"desc\"\r\n },\r\n pageSize: 30\r\n },\r\n editable: \"popup\",\r\n sortable: true,\r\n pageable: true,\r\n filterable: {\r\n mode: \"row\",\r\n extra:false\r\n },\r\n columns: [\r\n { field: gridColumns.pushNotificationID, title: 'Id', format: dateFormats.number, width: \"40px\", filterable: false, attributes: { 'class': \"text-center\" } },\r\n { field: \"tags\", title: 'Groups', format: dateFormats.string, width: \"100px\", filterable: { cell: { operator: \"contains\" } } },\r\n { field: gridColumns.message, title: 'Message', format: dateFormats.string, width: \"200px\", filterable: { cell: { operator: \"contains\" } } },\r\n { field: gridColumns.deviceType, title: 'Device', format: dateFormats.number, width: \"50px\",filterable: false, template: kendo.template($(\"#device-template\").html()), attributes: { 'class': \"text-center text-success\" } },\r\n // { field: gridColumns.pushNotificationStatusTypeID, width: \"50px\", values: notificationStatuses, title: 'Status' },\r\n { field: gridColumns.createdByStr, title: 'Create By', format: dateFormats.string, width: \"70px\", filterable: { cell: { operator: \"contains\" } } },\r\n { field: gridColumns.processedDate, title: 'Processe Date', format: dateFormats.dateTimeYY, width: \"80px\" },\r\n { field: gridColumns.scheduledDate, title: 'Schedule Date', format: dateFormats.dateTimeYY, width: \"80px\" },\r\n { field: gridColumns.createdDate, title: 'Create Date', format: dateFormats.dateTimeYY, width: \"80px\" },\r\n { width: \"30px\", template: kendo.template($(\"#command-template\").html()), attributes: { 'class': \"text-center text-success\" } }\r\n // { command: {text : \"Update\",click: showGridDetails, template: kendo.template($(\"#command-template\").html())}, title: \" \", width: \"50px\"}\r\n ],\r\n customCss: \"push-notifications\"\r\n };\r\n\r\n //function releod() {\r\n // notificationsService.getPushNotifications()\r\n // .then(function (data) {\r\n // pushNotifications = data.pushNotifications;\r\n // vm.grid.dataSource.read();\r\n // spinnerService.showSuccess();\r\n // });\r\n //};\r\n window.deleteNotification = function (e) {\r\n var notification = kendoService.getDataModel(vm.grid, e);\r\n // spinnerService.show(\"Deleting...\", 0);\r\n notificationsService\r\n .deletePushNotification(notification.pushNotificationID)\r\n .then(function () { kendoService.removeGridItem(vm.grid, notification); spinnerService.showSuccess(); })\r\n .catch(function (err) { spinnerService.showError(); throw err; });\r\n };\r\n $scope.addNotification = function () {\r\n $uibModal.open({\r\n templateUrl: \"app/management/notifications/editNotification.html\",\r\n controller: ModalController,\r\n controllerAs: \"vm\",\r\n backdrop: \"static\",\r\n resolve: {\r\n pushNotification: function () {\r\n return null;\r\n },\r\n mode: function () {\r\n return modalModes.Add;\r\n },\r\n groups: function () {\r\n return notificationTypes;\r\n }\r\n }\r\n })\r\n .result.then(\r\n function (result) {\r\n spinnerService.showSuccess();\r\n $state.go('management.notifications', {}, { reload: true });\r\n //result.data.createdDate = moment(result.data.createdDate).format('MM/DD/YYYY hh:mm A');\r\n //result.data.scheduledDate = moment(result.data.scheduledDate).format('MM/DD/YYYY hh:mm A');\r\n //var processedDate = moment(result.data.processedDate);\r\n //if (processedDate.isValid()) {\r\n // result.data.processedDate = processedDate.format('MM/DD/YYYY hh:mm A');\r\n //}\r\n\r\n //vm.grid.dataSource.insert(0, result.data);\r\n //kendoService.addGridItem(vm.grid, result.data);\r\n //vm.grid.dataSource.sort({ field: \"createdDate\", dir: \"desc\" });\r\n vm.grid.refresh();\r\n \r\n },\r\n function (data) { }\r\n );\r\n };\r\n };\r\n };\r\n\r\n /* @ngInject */\r\n function ModalController($scope,$uibModalInstance, pushNotification, mode, groups,\r\n modalModes, $timeout, notificationsService, spinnerService, mgmtConstants) {\r\n var vm = this;\r\n\r\n activate();\r\n\r\n\r\n function activate() {\r\n setModalTitle();\r\n vm.selectedGroups = [];\r\n vm.sendToEveryone = false;\r\n vm.sendNow = true;\r\n vm.scheduledDate = null;\r\n\r\n\r\n if (pushNotification) {\r\n vm.selectedGroups = pushNotification.pushNotificationPushNotificationTypes;\r\n vm.message = pushNotification.message;\r\n }\r\n };\r\n\r\n function setModalTitle() {\r\n if (mode === modalModes.Edit) {\r\n vm.title = \"Edit Push Notification\";\r\n } else if (mode === modalModes.Add) {\r\n vm.title = \"Add Push Notification\";\r\n }\r\n };\r\n\r\n vm.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n };\r\n vm.save = function (form) {\r\n if (form.$valid && form.$dirty) {\r\n\r\n var data = {\r\n pushNotificationPushNotificationTypes: vm.selectedGroups,\r\n message: vm.message,\r\n sendToEveryone: vm.sendToEveryone,\r\n sendNow: vm.sendNow,\r\n scheduledDate: vm.scheduleDatePicker ? vm.scheduleDatePicker.value() : null,\r\n scheduledTime: vm.scheduledTime,\r\n deviceType: vm.deviceDropDown.value()\r\n }\r\n \r\n if (isValidData(data)) {\r\n vm.saving = true;\r\n notificationsService.createPushNotification(data)\r\n .then(function(result) {\r\n //spinnerService.show(\"Adding...\", 0);\r\n closeModal(result);\r\n })\r\n .catch(function(err) {\r\n vm.saving = false;\r\n spinnerService.showError();\r\n throw err;\r\n });\r\n }\r\n }\r\n else {\r\n $uibModalInstance.dismiss('cancel');\r\n }\r\n };\r\n\r\n function isValidData(data) {\r\n vm.groupError = false;\r\n vm.scheduleLaterError = false;\r\n if (!data.sendToEveryone) {\r\n if (!vm.selectedGroups || vm.selectedGroups.length === 0) {\r\n vm.groupError = true;\r\n }\r\n }\r\n if (!vm.sendNow) {\r\n if (!moment(data.scheduledDate).isValid() || !moment(data.scheduledTime).isValid()) {\r\n vm.scheduleLaterError = true;\r\n }\r\n }\r\n\r\n return !vm.groupError && !vm.scheduleLaterError;\r\n };\r\n\r\n function closeModal(result) {\r\n vm.saving = false;\r\n $uibModalInstance.close({ data: result });\r\n vm.cancel();\r\n };\r\n\r\n vm.groupSelectOptions = {\r\n placeholder: \"Select at least one group to notify...\",\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n valuePrimitive: true,\r\n autoBind: false,\r\n dataSource: groups,\r\n change: function () {\r\n $scope.$apply(function () {\r\n vm.groupError = false;\r\n });\r\n }\r\n };\r\n\r\n vm.scheduleDatePickerOptions = {\r\n parseFormats: \"MM/dd/yyyy\",\r\n interval: 15,\r\n max: moment().add(1, \"years\").toDate(),\r\n min: moment().toDate(),\r\n change: function() {\r\n $scope.$apply(function () {\r\n vm.scheduleLaterError = false;\r\n });\r\n }\r\n };\r\n\r\n vm.scheduleTimePickerOptions = {\r\n interval: 5,\r\n change: function() {\r\n $scope.$apply(function () {\r\n vm.scheduleLaterError = false;\r\n });\r\n }\r\n }\r\n };\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('inspinia.management')\r\n .config(routeConfig);\r\n\r\n /* @ngInject */\r\n function routeConfig($stateProvider, $urlRouterProvider, helpContent) {\r\n $stateProvider\r\n .state('management.members',\r\n {\r\n url: \"/members\",\r\n abstract: true,\r\n template: \"
\"\r\n })\r\n .state('management.members.list',\r\n {\r\n url: \"/list\",\r\n templateUrl: \"app/management/members/members.html\",\r\n controller: \"MembersController\",\r\n controllerAs: \"vm\",\r\n data: {\r\n pageTitle: 'Members List',\r\n pageHelp: helpContent.members || ''\r\n },\r\n resolve: {\r\n resolveResults: membersListResolve\r\n }\r\n })\r\n .state('management.members.dashboard',\r\n {\r\n url: \"/dashboard\",\r\n templateUrl: \"app/management/members/dashboard.html\",\r\n controller: \"MembersController\",\r\n controllerAs: \"vm\",\r\n data: {\r\n pageTitle: 'Members Dashboard',\r\n pageHelp: helpContent.members || ''\r\n },\r\n resolve: {\r\n resolveResults: membersListResolve\r\n }\r\n });\r\n\r\n /* @ngInject */\r\n function membersListResolve(spinnerService, memberService) {\r\n spinnerService.show();\r\n\r\n return memberService.getMembers();\r\n }\r\n\r\n /* @ngInject */\r\n function membersDashboardResolve(spinnerService, memberService) {\r\n spinnerService.show();\r\n\r\n return memberService.getMembers();\r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular.module('inspinia')\r\n .controller(\"MembersController\", MembersController);\r\n\r\n /* @ngInject */\r\n function MembersController($scope, resolveResults, memberService, spinnerService, $uibModal,excelService,logger, _) {\r\n var vm = this;\r\n\r\n spinnerService.hide();\r\n\r\n vm.filters = {\r\n searchString: \"\"\r\n };\r\n\r\n resolveResults = sortMembers(resolveResults);\r\n\r\n vm.members = resolveResults;\r\n // console.log(vm.members);\r\n\r\n vm.editMember = function (member) {\r\n memberService\r\n .getMember(member.id)\r\n .then(function (result) {\r\n\r\n var modalInstance = $uibModal.open({\r\n templateUrl: \"app/management/members/editMember.html\",\r\n controller: MemberModalController,\r\n controllerAs: \"vm\",\r\n size: 'lg',\r\n backdrop: \"static\",\r\n resolve: {\r\n args: function () {\r\n return {\r\n member: result,\r\n isNew: false\r\n }\r\n }\r\n }\r\n });\r\n\r\n modalInstance.result.then(\r\n function (data) {\r\n if (data.action === 'save') {\r\n var membersCopy = angular.copy(vm.members);\r\n\r\n _.remove(membersCopy, function (item) {\r\n return item.id === data.member.id;\r\n });\r\n\r\n membersCopy.push(data.member);\r\n\r\n vm.members = sortMembers(membersCopy);\r\n\r\n } else if (data.action === 'remove') {\r\n _.remove(vm.members, function (item) {\r\n return item.id === data.member.id;\r\n });\r\n vm.members = sortMembers(vm.members);\r\n }\r\n },\r\n function (data) { });\r\n });\r\n }\r\n\r\n vm.addMember = function (member) {\r\n\r\n member = {};\r\n var modalInstance = $uibModal.open({\r\n templateUrl: \"app/management/members/editMember.html\",\r\n controller: MemberModalController,\r\n size: 'lg',\r\n controllerAs: \"vm\",\r\n backdrop: \"static\",\r\n resolve: {\r\n args: function () {\r\n return {\r\n member: member,\r\n isNew: true\r\n }\r\n }\r\n }\r\n });\r\n\r\n modalInstance.result.then(\r\n function (data) {\r\n if (data.action === 'save') {\r\n vm.members.push(data.member);\r\n vm.members = sortMembers(vm.members);\r\n }\r\n },\r\n function (data) { });\r\n }\r\n\r\n\r\n vm.exportToExcel = function () {\r\n memberService\r\n .exportToExcel()\r\n .then(function (messge) { logger.success(messge) })\r\n .catch(function (err){ logger.error(err)});\r\n\r\n };\r\n\r\n\r\n\r\n function sortMembers(members) {\r\n return _.sortBy(members, function (item) {\r\n return item.searchString;\r\n });\r\n }\r\n\r\n /* @ngInject */\r\n function MemberModalController(args, $uibModalInstance, mgmtConstants, memberService) {\r\n var vm = this,\r\n member = args.member;\r\n vm.title = args.isNew ? \"Add Member\" : \"Edit Member\";\r\n vm.isNew = args.isNew;\r\n\r\n if (!vm.isNew) {\r\n vm.firstName = member.firstName;\r\n vm.middleName = member.middleName;\r\n vm.lastName = member.lastName;\r\n vm.membershipType = member.membershipType;\r\n vm.phone = member.phone;\r\n vm.email = member.email;\r\n vm.gender = member.gender;\r\n\r\n vm.membershipID = member.membershipID;\r\n vm.address1 = member.address1;\r\n vm.address2 = member.address2;\r\n vm.city = member.city;\r\n vm.state = member.state;\r\n vm.zip = member.zip;\r\n vm.peopleInHousehold = member.peopleInHousehold;\r\n vm.maritalStatus = member.maritalStatus;\r\n vm.interestedInVolunteeringFlag = member.interestedInVolunteeringFlag;\r\n vm.monthlyContributionAmount = member.monthlyContributionAmount;\r\n vm.monthlyContributionFlag = member.monthlyContributionFlag;\r\n vm.applicantType = member.applicantType;\r\n vm.applicationDate = member.applicationDate;\r\n vm.addToEmailListFlag = member.addToEmailListFlag;\r\n vm.paymentReceivedFlag = member.paymentReceivedFlag;\r\n }\r\n\r\n vm.save = function () {\r\n member = member || {};\r\n\r\n member.firstName = vm.firstName;\r\n member.middleName = vm.middleName;\r\n member.lastName = vm.lastName;\r\n member.phone = vm.phone;\r\n member.email = vm.email;\r\n member.gender = vm.volunteerTitleDropDown.value();\r\n member.membershipType = vm.membershipTypeDropDown.value();\r\n\r\n member.peopleInHousehold = vm.peopleInHousehold;\r\n member.maritalStatus = vm.maritalStatus;\r\n member.interestedInVolunteeringFlag = vm.interestedInVolunteeringFlag;\r\n member.monthlyContributionAmount = vm.monthlyContributionAmount;\r\n member.applicantType = vm.applicantType;\r\n member.peopleInHousehold = vm.peopleInHousehold;\r\n member.maritalStatus = vm.maritalStatus;\r\n member.interestedInVolunteeringFlag = vm.interestedInVolunteeringFlag;\r\n member.monthlyContributionAmount = vm.monthlyContributionAmount;\r\n member.monthlyContributionFlag = vm.monthlyContributionFlag;\r\n member.applicantType = vm.applicantType;\r\n member.applicationDate = vm.applicationDate;\r\n member.addToEmailListFlag = vm.addToEmailListFlag;\r\n member.paymentReceivedFlag = vm.paymentReceivedFlag;\r\n member.membershipID = vm.membershipID;\r\n\r\n vm.saving = true;\r\n\r\n var action = 'updateMember';\r\n\r\n if (vm.isNew) {\r\n action = 'createMember';\r\n }\r\n\r\n memberService[action](member)\r\n .then(function (result) {\r\n spinnerService.showSuccess();\r\n $uibModalInstance.close({ member: result, action: 'save' });\r\n // vm.close();\r\n })\r\n .catch(function (err) {\r\n spinnerService.showError();\r\n vm.saving = false;\r\n throw err;\r\n });\r\n\r\n };\r\n\r\n vm.remove = function () {\r\n vm.removing = true;\r\n memberService.deleteMember(member.id)\r\n .then(function (result) {\r\n spinnerService.showSuccess();\r\n $uibModalInstance.close({ member: member, action: 'remove' });\r\n // vm.close();\r\n })\r\n .catch(function (err) {\r\n spinnerService.showError();\r\n vm.removing = false;\r\n throw err;\r\n });\r\n }\r\n\r\n vm.close = function() {\r\n $uibModalInstance.dismiss('cancel');\r\n };\r\n\r\n vm.volunteerTitleOptions = {\r\n dataSource: mgmtConstants.events.volunteerTitleOptions,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.gender\r\n };\r\n\r\n vm.membershipTypeDropDownOptions = {\r\n dataSource: mgmtConstants.memberTypes,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.membershipType\r\n };\r\n\r\n vm.maritalStatusDropDownOptions = {\r\n dataSource: mgmtConstants.maritalStatus,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.maritalStatus\r\n };\r\n\r\n vm.applicantTypeDropDownOptions = {\r\n dataSource: mgmtConstants.applicationType,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.applicantType\r\n };\r\n\r\n }\r\n }\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular.module('inspinia.management')\r\n .controller('SuperAdminController', SuperAdminController);\r\n\r\n\r\n /* @ngInject */\r\n function SuperAdminController($rootScope,$state, userService, allMasjids, masjidservice, authService, spinnerService) {\r\n var vm = this;\r\n //console.log(allMasjids);\r\n spinnerService.hide();\r\n\r\n vm.save = function() {\r\n vm.saving = true;\r\n var user = {};\r\n user.firstName = vm.firstName;\r\n user.lastName = vm.lastName;\r\n user.phoneNumber = vm.phone;\r\n user.email = vm.email;\r\n user.isNewMasjid = true;\r\n\r\n\r\n userService.createUser(user)\r\n .then(function(result) {\r\n spinnerService.showSuccess();\r\n vm.saving = false;\r\n })\r\n .catch(function(err) {\r\n spinnerService.showError();\r\n vm.saving = false;\r\n throw err;\r\n });\r\n };\r\n\r\n vm.goToSelectMasjid = function () {\r\n if (vm.selectedMasjid) {\r\n vm.gettingMasjid = true;\r\n //Get selected masjid\r\n masjidservice.getMasjid(vm.selectedMasjid)\r\n .then(function (result) {\r\n vm.gettingMasjid = false;\r\n //Set masjid properties\r\n authService.setProperties({\r\n masjidID: result.masjidID,\r\n logoUrl: result.logoUrl,\r\n navigationCollapsed: false,\r\n tahajud: result.tahajud,\r\n halfNight: result.halfNight,\r\n logoHasBackground: result.logoHasBackground\r\n });\r\n $state.go('management.salahTimes.adhanIqamah', {}, { reload: true });\r\n $rootScope.selectedMasjid = vm.selectedMasjid;\r\n //$rootScope.$broadcast('mma-user-changed', result);\r\n })\r\n .catch(function (err) {\r\n vm.gettingMasjid = false;\r\n spinnerService.showError();\r\n vm.saving = false;\r\n throw err;\r\n });\r\n\r\n }\r\n\r\n };\r\n\r\n\r\n vm.masjidDropDownOptions = {\r\n dataSource: allMasjids,\r\n dataTextField: \"masjidName\",\r\n dataValueField: \"masjidID\",\r\n value: vm.selectedMasjid || $rootScope.selectedMasjid\r\n }\r\n\r\n };\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular.module('inspinia.management')\r\n .controller('SettingsController', SettingsController);\r\n\r\n /* @ngInject */\r\n function SettingsController($scope, mgmtConstants, moment, resolveResults, masjidservice, spinnerService,\r\n authService, styleService, prayerTimesService, dateService) {\r\n var vm = this, masjidIqamahSetting, masjidSettings, debounceValue = 500;\r\n\r\n spinnerService.hide();\r\n\r\n var user = authService.getUser();\r\n if (user) {\r\n vm.isSuperAdmin = user.isSuperAdmin;\r\n }\r\n var masjid = resolveResults[0];\r\n //console.log(masjid);\r\n\r\n if (masjid) {\r\n vm.readOnlyCalenderUrl = masjid.readOnlyCalenderUrl;\r\n vm.readOnlySalahUrl = masjid.readOnlySalahUrl;\r\n loadMobileApiEndPoints(masjid);\r\n\r\n vm.adhanCalculationType = masjid.adhanCalculationTypeID;\r\n vm.juristicType = masjid.juristicMethodTypeID;\r\n masjidIqamahSetting = masjid.masjidIqamahSetting;\r\n masjidSettings = masjid.masjidSettings;\r\n vm.tahajud = masjid.tahajud;\r\n vm.halfNight = masjid.halfNight;\r\n vm.hijriAdjustment = masjid.hijriAdjustment;\r\n vm.adjustedHijriDate = masjid.adjustedHijriDate;\r\n vm.systemHijriDate = masjid.systemHijriDate;\r\n\r\n\r\n masjid.publicSalahTimesStyle = masjid.publicSalahTimesStyle || {};\r\n\r\n prayerTimesService.bindPrayerTimes($scope, vm, masjid, resolveResults[1]);\r\n\r\n vm.containerStyle = buildContainerStyle();\r\n\r\n vm.getHijriAdjustment = function () {\r\n $scope.$apply(function () {\r\n vm.isAdjustingHijri = true;\r\n masjidservice.getHijriAdjustment(masjid.masjidID, vm.hijriAdjustment)\r\n .then(function (result) {\r\n vm.adjustedHijriDate = result;\r\n vm.isAdjustingHijri = false;\r\n }).catch(function (err) {\r\n vm.isAdjustingHijri = false;\r\n return exception.catcher('Something went wrong :(')(err);\r\n });\r\n });\r\n }\r\n }\r\n\r\n if (masjidIqamahSetting) {\r\n vm.fajr = masjidIqamahSetting.fajr;\r\n vm.fajrTime = dateService.timeToDateTime(masjidIqamahSetting.fajrTime);\r\n vm.dhuhr = masjidIqamahSetting.dhuhr;\r\n vm.dhuhrTime = dateService.timeToDateTime(masjidIqamahSetting.dhuhrTime);\r\n vm.asr = masjidIqamahSetting.asr;\r\n vm.asrTime = dateService.timeToDateTime(masjidIqamahSetting.asrTime);\r\n vm.maghrib = masjidIqamahSetting.maghrib;\r\n vm.maghribTime = dateService.timeToDateTime(masjidIqamahSetting.maghribTime);\r\n vm.isha = masjidIqamahSetting.isha;\r\n vm.ishaTime = dateService.timeToDateTime(masjidIqamahSetting.ishaTime);\r\n }\r\n\r\n $scope.onColorChange = _.debounce(function () {\r\n vm.setStyle();\r\n\r\n }, debounceValue, { 'leading': false, 'trailing': true });\r\n\r\n\r\n vm.setStyle = function () {\r\n styleService.setStyle(vm);\r\n };\r\n vm.countDownFinished = function () {\r\n };\r\n\r\n vm.countDownFontSizeChange = _.debounce(function () {\r\n vm.countDownFontSize = this.value();\r\n refresh();\r\n }, debounceValue, { 'leading': false, 'trailing': true });\r\n\r\n vm.buttonFontSizeChange = _.debounce(function () {\r\n vm.buttonFontSize = this.value();\r\n refresh();\r\n }, debounceValue, { 'leading': false, 'trailing': true });\r\n\r\n vm.prayerTimesFontSizeChange = _.debounce(function () {\r\n vm.prayerTimesFontSize = this.value();\r\n refresh();\r\n }, debounceValue, { 'leading': false, 'trailing': true });\r\n\r\n vm.fontFamilyChange = _.debounce(function () {\r\n\r\n vm.fontStyle = this.value();\r\n refresh();\r\n }, debounceValue, { 'leading': false, 'trailing': true });\r\n\r\n vm.widthChange = _.debounce(function () {\r\n vm.width = this.value();\r\n $scope.$apply(function () {\r\n vm.containerStyle = buildContainerStyle();\r\n });\r\n }, debounceValue, { 'leading': false, 'trailing': true });\r\n\r\n vm.widthSpin = _.debounce(function () {\r\n var width = this.value();\r\n if (width !== vm.width) {\r\n vm.width = this.value();\r\n $scope.$apply(function () {\r\n vm.containerStyle = buildContainerStyle();\r\n });\r\n }\r\n }, debounceValue, { 'leading': false, 'trailing': true });\r\n\r\n vm.heightChange = _.debounce(function () {\r\n vm.height = this.value();\r\n $scope.$apply(function () {\r\n vm.containerStyle = buildContainerStyle();\r\n });\r\n }, debounceValue, { 'leading': false, 'trailing': true });\r\n\r\n vm.heightSpin = _.debounce(function () {\r\n var height = this.value();\r\n if (height !== vm.height) {\r\n vm.height = this.value();\r\n $scope.$apply(function () {\r\n vm.containerStyle = buildContainerStyle();\r\n });\r\n }\r\n }, debounceValue, { 'leading': false, 'trailing': true });\r\n\r\n vm.validSettingsInformation = function () {\r\n return vm.masjidName &&\r\n vm.masjidEmail &&\r\n vm.masjidPhone &&\r\n vm.adhanCalculationType;\r\n };\r\n\r\n vm.save = function (masjidSettingsForm) {\r\n\r\n masjid = masjid || {};\r\n\r\n if (vm.fajr) {\r\n masjid.masjidIqamahSetting = masjid.masjidIqamahSetting || {};\r\n masjid.masjidIqamahSetting.fajr = vm.fajr.value || vm.fajr;\r\n masjid.masjidIqamahSetting.fajrTime = dateService.getTime(vm.fajrTimePicker.value());\r\n }\r\n\r\n if (vm.dhuhr) {\r\n masjid.masjidIqamahSetting = masjid.masjidIqamahSetting || {};\r\n masjid.masjidIqamahSetting.dhuhr = vm.dhuhr.value || vm.dhuhr;\r\n masjid.masjidIqamahSetting.dhuhrTime = dateService.getTime(vm.dhuhrtimePicker.value());\r\n }\r\n\r\n if (vm.asr) {\r\n masjid.masjidIqamahSetting = masjid.masjidIqamahSetting || {};\r\n masjid.masjidIqamahSetting.asr = vm.asr.value || vm.asr;\r\n masjid.masjidIqamahSetting.asrTime = dateService.getTime(vm.asrtimePicker.value());\r\n }\r\n\r\n if (vm.maghrib) {\r\n masjid.masjidIqamahSetting = masjid.masjidIqamahSetting || {};\r\n masjid.masjidIqamahSetting.maghrib = vm.maghrib.value || vm.maghrib;\r\n masjid.masjidIqamahSetting.maghribTime = dateService.getTime(vm.maghribTimePicker.value());\r\n }\r\n\r\n if (vm.isha) {\r\n masjid.masjidIqamahSetting = masjid.masjidIqamahSetting || {};\r\n masjid.masjidIqamahSetting.isha = vm.isha.value || vm.isha;\r\n masjid.masjidIqamahSetting.ishaTime = dateService.getTime(vm.ishatimePicker.value());\r\n }\r\n\r\n masjid.adhanCalculationType = vm.adhanCalculationType.value || vm.adhanCalculationType;\r\n masjid.juristicType = vm.juristicType.value || vm.juristicType;\r\n\r\n masjid.tahajud = vm.tahajud;\r\n masjid.halfNight = vm.halfNight;\r\n masjid.hijriAdjustment = vm.hijriAdjustment;\r\n\r\n\r\n masjid.updateMasjidSettings = true;\r\n\r\n vm.saving = true;\r\n //window.ductus = vm.fajrTimePicker;\r\n //console.log(masjid);\r\n //return;\r\n masjidservice.updateMasjid(masjid)\r\n .then(function (result) {\r\n var user = authService.getUser();\r\n user.halfNight = masjid.halfNight;\r\n user.tahajud = masjid.tahajud;\r\n spinnerService.showSuccess();\r\n\r\n vm.saving = false;\r\n\r\n }).catch(function (err) {\r\n vm.saving = false;\r\n return exception.catcher('Something went wrong :(')(err);\r\n });\r\n\r\n }\r\n\r\n vm.savePrayerTimesConfig = function () {\r\n\r\n var publicSalahTimesStyle = masjid.publicSalahTimesStyle || {};\r\n\r\n publicSalahTimesStyle.width = vm.width;\r\n publicSalahTimesStyle.height = vm.height;\r\n\r\n publicSalahTimesStyle.containerStyle = vm.containerStyleStr;\r\n publicSalahTimesStyle.countDownFontSize = vm.countDownFontSize;\r\n publicSalahTimesStyle.prayerTimesFontSize = vm.prayerTimesFontSize;\r\n publicSalahTimesStyle.buttonFontSize = vm.buttonFontSize;\r\n publicSalahTimesStyle.bordered = vm.bordered;\r\n publicSalahTimesStyle.showCountDown = vm.showCountDown;\r\n publicSalahTimesStyle.showDownload = vm.showDownload;\r\n publicSalahTimesStyle.fontColor = vm.fontColor;\r\n publicSalahTimesStyle.borderColor = vm.borderColor;\r\n publicSalahTimesStyle.rowColor = vm.rowColor;\r\n publicSalahTimesStyle.hoverColor = vm.hoverColor;\r\n publicSalahTimesStyle.headerColor = vm.headerColor;\r\n publicSalahTimesStyle.altRowColor = vm.altRowColor;\r\n publicSalahTimesStyle.fontStyle = vm.fontStyle;\r\n publicSalahTimesStyle.backgroundColor = vm.backgroundColor;\r\n publicSalahTimesStyle.buttonColor = vm.buttonColor;\r\n publicSalahTimesStyle.showJummah1 = vm.showJummah1;\r\n publicSalahTimesStyle.showJummah2 = vm.showJummah2;\n publicSalahTimesStyle.showJummah3 = vm.showJummah3;\r\n publicSalahTimesStyle.showTaraweeh = vm.showTaraweeh;\r\n\r\n vm.savingSalahConfig = true;\r\n\r\n masjidservice.savePrayerTimesConfig(publicSalahTimesStyle)\r\n .then(function (result) {\r\n spinnerService.showSuccess();\r\n }).catch(function (err) {\r\n\r\n return exception.catcher('Something went wrong :(')(err);\r\n }).finally(function () { vm.savingSalahConfig = false; });\r\n }\r\n\r\n vm.createReadOnlyCalendarLink = function () {\r\n vm.creatingLink = true;\r\n masjidservice.addReadOnlyLink()\r\n .then(function (result) {\r\n vm.readOnlyCalenderUrl = result.readOnlyCalenderUrl;\r\n spinnerService.showSuccess();\r\n\r\n }).catch(function (err) {\r\n\r\n return exception.catcher('Something went wrong :(')(err);\r\n }).finally(function () { vm.creatingLink = false; });\r\n };\r\n\r\n vm.createSalahTimesLink = function () {\r\n vm.creatingSalahLink = true;\r\n masjidservice.addSalahTimesLink()\r\n .then(function (result) {\r\n vm.readOnlySalahUrl = result.readOnlySalahUrl;\r\n spinnerService.showSuccess();\r\n\r\n }).catch(function (err) {\r\n return exception.catcher('Something went wrong :(')(err);\r\n }).finally(function () { vm.creatingSalahLink = false; });\r\n };\r\n\r\n vm.createMobileApiToken = _.debounce(function () {\r\n vm.creatingApiLink = true;\r\n\r\n masjidservice.addMobileApiToken()\r\n .then(function (result) {\r\n loadMobileApiEndPoints(result);\r\n spinnerService.showSuccess();\r\n\r\n }).catch(function (err) {\r\n return exception.catcher('Something went wrong :(')(err);\r\n }).finally(function () { vm.creatingApiLink = false; });\r\n\r\n }, 500, { 'leading': true, 'trailing': false });\r\n\r\n function loadMobileApiEndPoints(mobileApiSettings) {\r\n vm.salahTimesUrl = mobileApiSettings.salahTimesUrl;\r\n vm.eventsUrl = mobileApiSettings.eventsUrl;\r\n vm.pushNotificationsUrl = mobileApiSettings.pushNotificationsUrl;\r\n vm.liveBroadCastUrl = mobileApiSettings.liveBroadCastUrl;\r\n vm.newsUrl = mobileApiSettings.newsUrl;\r\n vm.boardMembersUrl = mobileApiSettings.boardMembersUrl;\r\n vm.ramadanUrl = mobileApiSettings.ramadanUrl;\r\n vm.deviceTokenUrl = mobileApiSettings.deviceTokenUrl;\r\n vm.masjidInfoUrl = mobileApiSettings.masjidInfoUrl;\r\n vm.imaamInfoUrl = mobileApiSettings.imaamInfoUrl;\r\n }\r\n\r\n function buildContainerStyle() {\r\n vm.containerStyleStr = 'width:' + vm.width + 'px;' + 'max-height:' + vm.height\r\n + 'px; overflow:auto;';\r\n\r\n return { 'width': vm.width + 'px', 'max-height': vm.height + 'px', 'overflow': 'auto', 'margin': '80px auto 0px auto' };\r\n }\r\n\r\n function refresh() {\r\n $scope.$apply(function () {\r\n $scope.onColorChange();\r\n });\r\n }\r\n vm.adhanCalcTypeDropDownOptions = {\r\n dataSource: mgmtConstants.adhanCalculationTypes,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.adhanCalculationType\r\n }\r\n vm.juristicTypeDropDownOptions = {\r\n dataSource: mgmtConstants.juristicTypes,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.juristicType\r\n }\r\n vm.fajrDropDownOptions = {\r\n dataSource: mgmtConstants.iqamahTimesSettings,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.fajr\r\n }\r\n vm.dhuhrDropDownOptions = {\r\n dataSource: mgmtConstants.iqamahTimesSettings,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.dhuhr\r\n }\r\n vm.asrDropDownOptions = {\r\n dataSource: mgmtConstants.iqamahTimesSettings,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.asr\r\n }\r\n vm.maghribDropDownOptions = {\r\n dataSource: mgmtConstants.iqamahTimesSettings,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.maghrib\r\n }\r\n vm.ishaDropDownOptions = {\r\n dataSource: mgmtConstants.iqamahTimesSettings,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.isha\r\n }\r\n\r\n vm.colorPickerSettings = {\r\n control: 'wheel',\r\n theme: 'bootstrap',\r\n position: 'bottom right',\r\n letterCase: 'uppercase'\r\n };\r\n vm.colorPickerSettingsTopRight = {\r\n control: 'wheel',\r\n theme: 'bootstrap',\r\n position: 'top right',\r\n letterCase: 'uppercase'\r\n };\r\n }\r\n\r\n})();\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('inspinia.management')\r\n .config(routeConfig);\r\n\r\n /* @ngInject */\r\n function routeConfig($stateProvider, $urlRouterProvider, helpContent) {\r\n\r\n var underContructionTemplate =\r\n\"
\" +\r\n\"
\" +\r\n\"

This page is under construction

\";\r\n\r\n\r\n $stateProvider\r\n .state('management.masjid',\r\n {\r\n url: \"/masjid\",\r\n abstract: true,\r\n template: \"
\",\r\n data: {\r\n pageHelp: ''\r\n }\r\n })\r\n .state('management.superadmin',\r\n {\r\n url: \"/superadmin\",\r\n abstract: true,\r\n template: \"
\",\r\n data: {\r\n pageHelp: ''\r\n }\r\n })\r\n .state('management.masjid.info',\r\n {\r\n url: \"/info\",\r\n templateUrl: \"app/management/masjid/masjid.html\",\r\n controller: \"MasjidController\",\r\n controllerAs: \"vm\",\r\n data: {\r\n pageTitle: 'Masjid Info',\r\n pageHelp: helpContent.masjidSettings || ''\r\n },\r\n resolve: {\r\n masjid: masjidSettingsResolve\r\n }\r\n })\r\n .state('management.masjid.settings',\r\n {\r\n url: \"/settings\",\r\n templateUrl: \"app/management/masjid/settings.html\",\r\n controller: \"SettingsController\",\r\n controllerAs: \"vm\",\r\n data: {\r\n pageTitle: 'Masjid Settings',\r\n pageHelp: helpContent.masjidSettings || ''\r\n },\r\n resolve: {\r\n resolveResults: masjidSettingsResolve\r\n }\r\n })\r\n .state('management.masjid.news',\r\n {\r\n url: \"/news\",\r\n template: underContructionTemplate,\r\n data: {\r\n pageTitle: 'Masjid News'\r\n }\r\n })\r\n .state('management.superadmin.addmasjid',\r\n {\r\n url: \"/addmasjid\",\r\n templateUrl: \"app/management/masjid/newMasjid.html\",\r\n controller: \"SuperAdminController\",\r\n controllerAs: \"vm\",\r\n data: {\r\n pageTitle: 'New Masjid',\r\n pageHelp: helpContent.newMasjid || ''\r\n },\r\n resolve: {\r\n allMasjids: function() {\r\n return true;\r\n }\r\n }\r\n })\r\n .state('management.superadmin.selectmasjid',\r\n {\r\n url: \"/selectmasjid\",\r\n templateUrl: \"app/management/masjid/selectMasjid.html\",\r\n controller: \"SuperAdminController\",\r\n controllerAs: \"vm\",\r\n data: {\r\n pageTitle: 'Select Masjid'\r\n },\r\n resolve: {\r\n allMasjids: superAdminResolve\r\n }\r\n });\r\n\r\n /* @ngInject */\r\n function superAdminResolve(masjidservice, spinnerService) {\r\n spinnerService.show();\r\n return masjidservice.getMasjids();\r\n };\r\n /* @ngInject */\r\n function masjidSettingsResolve(masjidservice, spinnerService) {\r\n spinnerService.show();\r\n return masjidservice.getMasjidSettings();\r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular.module('inspinia.management')\r\n .controller('MasjidController', MasjidController);\r\n\r\n\r\n /* @ngInject */\r\n function MasjidController($scope, masjidservice, spinnerService, masjid, exception, $uibModal, mgmtConstants, authService) {\r\n var vm = this;\r\n spinnerService.hide();\r\n\r\n var user = authService.getUser();\r\n if (user) {\r\n vm.isSuperAdmin = user.isSuperAdmin;\r\n }\r\n\r\n //console.log(masjid);\r\n masjid = masjid[0];\r\n if (masjid) {\r\n vm.masjidName = masjid.masjidName;\r\n vm.masjidEmail = masjid.masjidMainEmailAddress;\r\n vm.masjidPhone = masjid.masjidMainPhone;\r\n vm.readOnlyCalenderUrl = masjid.readOnlyCalenderUrl;\r\n // loadMobileApiEndPoints(masjid);\r\n //vm.salahTimesUrl = masjid.salahTimesUrl;\r\n //vm.eventsUrl = masjid.eventsUrl;\r\n //vm.pushNotificationsUrl = masjid.pushNotificationsUrl;\r\n //vm.liveBroadCastUrl = masjid.liveBroadCastUrl;\r\n //vm.newsUrl = masjid.newsUrl;\r\n //vm.boardMembersUrl = masjid.boardMembersUrl;\r\n vm.denominationType = masjid.denominationTypeID;\r\n // vm.juristicType = masjid.juristicMethodTypeID;\r\n \r\n //vm.streetNum = masjid.streetNum;\r\n //vm.streetName = masjid.streetName;\r\n vm.city = masjid.masjidCity;\r\n vm.state = masjid.masjidState;\r\n vm.postalCode = masjid.masjidZip;\r\n vm.longitude = masjid.longitude;\r\n vm.latitude = masjid.lattitude;\r\n // vm.tahajud = masjid.tahajud;\r\n // vm.halfNight = masjid.halfNight;\r\n //vm.navigationCollapsed = masjid.navigationCollapsed;\r\n vm.addressStr = masjid.address;\r\n vm.streetNumber = {\r\n name: masjid.address\r\n };\r\n vm.masjidAddress2 = masjid.masjidAddress2;\r\n //vm.streetNumber.name = masjid.address;\r\n\r\n // vm.adhanCalculationType = masjid.adhanCalculationTypeID;\r\n // vm.juristicType = masjid.juristicMethodTypeID;\r\n vm.timeZoneId = masjid.timeZone;\r\n\r\n if (masjid.masjidSocialMediaInfo) {\r\n vm.website = masjid.masjidSocialMediaInfo.masjidWebSite;\r\n vm.youtube = masjid.masjidSocialMediaInfo.masjidYouTubeChannel;\r\n vm.facebook = masjid.masjidSocialMediaInfo.masjidFaceBookPage;\r\n vm.instagram = masjid.masjidSocialMediaInfo.masjidInstagramAccount;\r\n vm.twitter = masjid.masjidSocialMediaInfo.masjidTwitterHandle;\r\n }\r\n }\r\n\r\n vm.validMasjidInformation = function () {\r\n return vm.masjidName &&\r\n vm.masjidEmail &&\r\n vm.masjidPhone &&\r\n vm.denominationType &&\r\n //vm.adhanCalculationType &&\r\n //vm.juristicType &&\r\n (vm.streetNumber.name || masjid.address);\r\n //vm.streetName &&\r\n //vm.city &&\r\n //vm.state &&\r\n //vm.postalCode &&\r\n //vm.timeZoneId &&\r\n //vm.longitude &&\r\n //vm.latitude;\r\n };\r\n\r\n vm.needsTimeCalculation = function () {\r\n return false;\r\n //return ((vm.adhanCalculationType.value || vm.adhanCalculationType) !== masjid.adhanCalculationTypeID) ||\r\n // ((vm.juristicType.value || vm.juristicType) !== masjid.juristicMethodTypeID) ||\r\n // vm.timeZoneId !== masjid.timeZone;\r\n };\r\n\r\n\r\n vm.setAddressAndGetTimeZone = function() {\r\n if (vm.streetNumber && vm.streetNumber.components && vm.streetNumber.components.location.lat && vm.streetNumber.components.location.long) {\r\n vm.addressStr = vm.streetNumber.name;\r\n vm.streetNum = vm.streetNumber.components.streetNumber;\r\n vm.streetName = vm.streetNumber.components.street;\r\n vm.city = vm.streetNumber.components.city;\r\n vm.state = vm.streetNumber.components.state;\r\n vm.postalCode = vm.streetNumber.components.postCode || '';\r\n vm.longitude = vm.streetNumber.components.location.long;\r\n vm.latitude = vm.streetNumber.components.location.lat;\r\n\r\n masjidservice.getTimeZone(vm.latitude, vm.longitude)\r\n .then(function(result) {\r\n\r\n\r\n vm.timeZoneId = result.timeZoneId;\r\n });\r\n\r\n }\r\n };\r\n\r\n $scope.$watch('vm.streetNumber.components.location.lat', vm.setAddressAndGetTimeZone);\r\n\r\n //vm.createReadOnlyCalendarLink = function() {\r\n // vm.creatingLink = true;\r\n // masjidservice.addReadOnlyLink()\r\n // .then(function(result) {\r\n // vm.readOnlyCalenderUrl = result.readOnlyCalenderUrl;\r\n // spinnerService.showSuccess();\r\n\r\n // }).catch(function(err) {\r\n \r\n // return exception.catcher('Something went wrong :(')(err);\r\n // }).finally(function () { vm.creatingLink = false; });\r\n //};\r\n\r\n //vm.createMobileApiToken = _.debounce(function() {\r\n // vm.creatingApiLink = true;\r\n\r\n // masjidservice.addMobileApiToken()\r\n // .then(function (result) {\r\n // loadMobileApiEndPoints(result);\r\n // spinnerService.showSuccess();\r\n\r\n // }).catch(function(err) {\r\n // return exception.catcher('Something went wrong :(')(err);\r\n // }).finally(function () { vm.creatingApiLink = false; });\r\n\r\n //}, 500, { 'leading': true, 'trailing': false });\r\n\r\n vm.save = function (masjidInfoForm) {\r\n if (vm.validMasjidInformation() && masjidInfoForm.$dirty) {\r\n var masjidModel = masjid || {};\r\n if (vm.needsTimeCalculation()) {\r\n var modalInstance = $uibModal.open({\r\n templateUrl: \"app/management/masjid/timeCalculationPrompt.html\",\r\n controller: ModalPromptController,\r\n // size: 'lg',\r\n controllerAs: \"vm\",\r\n backdrop: \"static\"\r\n });\r\n\r\n modalInstance\r\n .result\r\n .then(\r\n function(data) {\r\n if (data.action == 'dontRecalculate') {\r\n masjidModel.recalculateTimes = false;\r\n } else if (data.action == 'recalculate') {\r\n masjidModel.recalculateTimes = true;\r\n }\r\n vm.performSave(masjidModel);\r\n },\r\n function(data) {}\r\n );\r\n } else {\r\n vm.performSave(masjidModel);\r\n }\r\n\r\n }\r\n };\r\n\r\n vm.performSave = function (masjidModel) {\r\n \r\n masjidModel.masjidName = vm.masjidName;\r\n masjidModel.masjidAddress1 = masjid.masjidAddress1;\r\n if (vm.addressStr) {\r\n masjidModel.masjidAddress1 = vm.streetNum + ' ' + vm.streetName;\r\n } \r\n \r\n masjidModel.masjidAddress2 = vm.masjidAddress2;\r\n masjidModel.masjidCity = vm.city;\r\n masjidModel.masjidState = vm.state;\r\n masjidModel.masjidZip = vm.postalCode;\r\n masjidModel.masjidMainPhone = vm.masjidPhone;\r\n masjidModel.masjidMainEmailAddress = vm.masjidEmail;\r\n masjidModel.denominationTypeID = vm.denominationType.value || vm.denominationType;\r\n //masjidModel.adhanCalculationTypeID = vm.adhanCalculationType.value || vm.adhanCalculationType;\r\n //masjidModel.juristicMethodTypeID = vm.juristicType.value || vm.juristicType;\r\n masjidModel.longitude = vm.longitude;\r\n masjidModel.lattitude = vm.latitude;\r\n masjidModel.timeZone = vm.timeZoneId;\r\n //masjidModel.navigationCollapsed = vm.navigationCollapsed;\r\n //masjidModel.tahajud = vm.tahajud;\r\n //masjidModel.halfNight = vm.halfNight;\r\n masjidModel.address = vm.addressStr;\r\n masjid.updateMasjidInfo = true;\r\n //console.log(masjidModel);\r\n //return;\r\n\r\n masjidModel.masjidSocialMediaInfo = masjidModel.masjidSocialMediaInfo || {};\r\n masjid.masjidSocialMediaInfo.masjidWebSite = vm.website;\r\n masjid.masjidSocialMediaInfo.masjidYouTubeChannel = vm.youtube;\r\n masjid.masjidSocialMediaInfo.masjidFaceBookPage = vm.facebook;\r\n masjid.masjidSocialMediaInfo.masjidInstagramAccount = vm.instagram;\r\n masjid.masjidSocialMediaInfo.masjidTwitterHandle = vm.twitter;\r\n\r\n vm.saving = true;\r\n\r\n masjidservice.updateMasjid(masjidModel)\r\n .then(function (result) {\r\n\r\n spinnerService.showSuccess();\r\n\r\n vm.saving = false;\r\n\r\n }).catch(function (err) {\r\n vm.saving = false;\r\n return exception.catcher('Something went wrong :(')(err);\r\n });\r\n };\r\n\r\n function loadMobileApiEndPoints(mobileApiSettings) {\r\n vm.salahTimesUrl = mobileApiSettings.salahTimesUrl;\r\n vm.eventsUrl = mobileApiSettings.eventsUrl;\r\n vm.pushNotificationsUrl = mobileApiSettings.pushNotificationsUrl;\r\n vm.liveBroadCastUrl = mobileApiSettings.liveBroadCastUrl;\r\n vm.newsUrl = mobileApiSettings.newsUrl;\r\n vm.boardMembersUrl = mobileApiSettings.boardMembersUrl;\r\n vm.ramadanUrl = mobileApiSettings.ramadanUrl;\r\n }\r\n\r\n vm.denominationDropDownOptions = {\r\n dataSource: mgmtConstants.denominationTypes,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.denominationType\r\n }\r\n //vm.adhanCalcTypeDropDownOptions = {\r\n // dataSource: mgmtConstants.adhanCalculationTypes,\r\n // dataTextField: \"text\",\r\n // dataValueField: \"value\",\r\n // value: vm.adhanCalculationType\r\n //}\r\n //vm.juristicTypeDropDownOptions = {\r\n // dataSource: mgmtConstants.juristicTypes,\r\n // dataTextField: \"text\",\r\n // dataValueField: \"value\",\r\n // value: vm.juristicType\r\n //}\r\n //vm.fajrDropDownOptions = {\r\n // dataSource: mgmtConstants.iqamahTimesSettings,\r\n // dataTextField: \"text\",\r\n // dataValueField: \"value\",\r\n // value: vm.fajr\r\n //}\r\n //vm.dhuhrDropDownOptions = {\r\n // dataSource: mgmtConstants.iqamahTimesSettings,\r\n // dataTextField: \"text\",\r\n // dataValueField: \"value\",\r\n // value: vm.dhuhr\r\n //}\r\n //vm.asrDropDownOptions = {\r\n // dataSource: mgmtConstants.iqamahTimesSettings,\r\n // dataTextField: \"text\",\r\n // dataValueField: \"value\",\r\n // value: vm.asr\r\n //}\r\n //vm.maghribDropDownOptions = {\r\n // dataSource: mgmtConstants.iqamahTimesSettings,\r\n // dataTextField: \"text\",\r\n // dataValueField: \"value\",\r\n // value: vm.maghrib\r\n //}\r\n //vm.ishaDropDownOptions = {\r\n // dataSource: mgmtConstants.iqamahTimesSettings,\r\n // dataTextField: \"text\",\r\n // dataValueField: \"value\",\r\n // value: vm.isha\r\n //}\r\n\r\n };\r\n\r\n\r\n /* @ngInject */\r\n function ModalPromptController($uibModalInstance) {\r\n var vm = this;\r\n\r\n vm.dontRecalculate = function () {\r\n $uibModalInstance.close({ action: 'dontRecalculate' });\r\n };\r\n\r\n vm.recalculate = function () {\r\n $uibModalInstance.close({ action: 'recalculate' });\r\n };\r\n vm.close = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n };\r\n\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('inspinia.management')\r\n .config(imaamsRouteConfig);\r\n\r\n /* @ngInject */\r\n function imaamsRouteConfig($stateProvider, helpContent) {\r\n $stateProvider\r\n .state('management.imaams',\r\n {\r\n url: \"/imaams\",\r\n templateUrl: \"app/management/imaams/imaams.html\",\r\n controller: \"ImaamsController\",\r\n controllerAs: \"vm\",\r\n data: {\r\n pageTitle: 'Imams',\r\n pageHelp: helpContent.imaams || ''\r\n },\r\n resolve: {\r\n imaams: imaamsResolve\r\n }\r\n });\r\n\r\n function imaamsResolve(spinnerService, contactsService) {\r\n spinnerService.show();\r\n return contactsService.getImaaams();\r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('inspinia')\r\n .controller('ImaamsController', ImaamsController);\r\n\r\n /* @ngInject */\r\n function ImaamsController($scope, imaams, spinnerService, $uibModal, $state, exception, contactsService, fileUploadService) {\r\n var vm = this;\r\n\r\n vm.title = '';\r\n\r\n activate();\r\n\r\n function activate() {\r\n spinnerService.hide();\r\n vm.imaams = imaams.imaams;\r\n vm.titles = imaams.titles;\r\n }\r\n\r\n vm.editImaam = function (imaam) {\r\n contactsService\r\n .getImaam(imaam.contactID)\r\n .then(function (result) {\r\n\r\n var modalInstance = $uibModal.open({\r\n templateUrl: \"app/management/imaams/imaams.modal.html\",\r\n controller: ImaamsModalController,\r\n size: 'lg',\r\n controllerAs: \"vm\",\r\n backdrop: \"static\",\r\n resolve: {\r\n args: function () {\r\n return {\r\n imaam: result.imaams[0],\r\n titles: vm.titles,\r\n isNew: false\r\n }\r\n }\r\n }\r\n });\r\n\r\n modalInstance.result.then(\r\n function (data) {\r\n if (data.action === 'save' || data.action === 'remove') {\r\n $state.go('management.imaams', {}, { reload: true });\r\n }\r\n });\r\n });\r\n }\r\n\r\n vm.addImaam = function () {\r\n var imaam = {};\r\n\r\n var modalInstance = $uibModal.open({\r\n templateUrl: \"app/management/imaams/imaams.modal.html\",\r\n controller: ImaamsModalController,\r\n size: 'lg',\r\n controllerAs: \"vm\",\r\n backdrop: \"static\",\r\n resolve: {\r\n args: function () {\r\n return {\r\n imaam: imaam,\r\n titles: vm.titles,\r\n isNew: true\r\n }\r\n }\r\n }\r\n });\r\n\r\n modalInstance.result.then(\r\n function (data) {\r\n if (data.action === 'save') {\r\n $state.go('management.imaams', {}, { reload: true });\r\n }\r\n });\r\n }\r\n\r\n /* @ngInject */\r\n function ImaamsModalController($scope, args, $uibModalInstance, contactsService, mgmtConstants, logger) {\r\n var vm = this;\r\n\r\n activate();\r\n\r\n\r\n function activate() {\r\n vm.imaam = args.imaam;\r\n vm.titles = args.titles;\r\n vm.title = args.isNew ? \"Add Imam\" : \"Edit Imam\";\r\n vm.allowDelete = !args.isNew;\r\n\r\n\r\n $scope.myImage = '';\r\n vm.myCroppedImage = '';\r\n vm.contactPictureUrl = vm.imaam.contactPictureUrl;\r\n vm.hasPicture = vm.contactPictureUrl && vm.contactPictureUrl.length > 0;\r\n\r\n vm.imageUploadText = vm.hasPicture ? \"Update Picture\" : \"Add Picture\";\r\n\r\n }\r\n\r\n\r\n vm.save = function (form) {\r\n if (form.$valid) {\r\n\r\n if (vm.imaage) {\r\n var result = fileUploadService.isValidImaamImage(vm.image);\r\n\r\n if (!result.isValid) {\r\n logger.error(result.message);\r\n return;\r\n }\r\n }\r\n\r\n vm.saving = true;\r\n\r\n vm.imaam.deletePicture = vm.deletePicture;\r\n \r\n\r\n var methodToCall = args.isNew ? \"saveImaam\" : \"updateImaam\";\r\n\r\n contactsService[methodToCall](vm.image, vm.imaam)\r\n .then(function (result) {\r\n spinnerService.showSuccess();\r\n vm.saving = false;\r\n $uibModalInstance.close({ action: 'save' });\r\n })\r\n .catch(function (err) {\r\n spinnerService.showError();\r\n vm.saving = false;\r\n exception.catcher('Save failed :(')(err);\r\n });\r\n\r\n }\r\n }\r\n\r\n vm.delete = function () {\r\n vm.saving = true;\r\n contactsService.deleteImaam(vm.imaam.contactID)\r\n .then(function (results) {\r\n vm.saving = false;\r\n spinnerService.showSuccess();\r\n $uibModalInstance.close({ action: 'remove' });\r\n }).catch(function (err) {\r\n spinnerService.showError();\r\n vm.saving = false;\r\n exception.catcher('Delete failed :(')(err);\r\n });\r\n }\r\n\r\n vm.close = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n }\r\n\r\n vm.titleOptions = {\r\n dataSource: vm.titles,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.imaam.titleID\r\n };\r\n }\r\n }\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('inspinia.management')\r\n .config(routeConfig)\r\n\r\n /* @ngInject */\r\n function routeConfig($stateProvider, $urlRouterProvider, helpContent) {\r\n $stateProvider\r\n .state('management.volunteers',{\r\n url:\"/volunteers\",\r\n data: { \r\n pageTitle: 'Volunteers',\r\n pageHelp: helpContent.Events || '' },\r\n resolve: {\r\n resolveResults : volunteersResolve\r\n },\r\n templateUrl: \"app/management/events/volunteers.html\",\r\n controller: \"VolunteersController\",\r\n controllerAs : \"vm\"\r\n });\r\n \r\n /* @ngInject */ \r\n function volunteersResolve(spinnerService, volunteerservice){\r\n \r\n spinnerService.show();\r\n \r\n return volunteerservice.getVolunteers();\r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular.module('inspinia')\r\n .controller(\"VolunteersController\", VolunteersController)\r\n .controller(\"NgRepeatController\", NgRepeatController);\r\n\r\n /* @ngInject */\r\n function NgRepeatController($scope) {\r\n $scope.isExcludedByFilter = applySearchFilter();\r\n\r\n $scope.$root.$currentWatchUnbinder = $scope.$watch(\r\n \"vm.filters.searchString\",\r\n function (newName, oldName) {\r\n\r\n if (newName === oldName) {\r\n return;\r\n }\r\n applySearchFilter();\r\n }\r\n );\r\n\r\n function applySearchFilter() {\r\n var filter;\r\n if ($scope.vm.filters.searchString) {\r\n filter = $scope.vm.filters.searchString.toLowerCase();\r\n //split search string\r\n var searchItems = _.split(filter, ' ');\r\n\r\n var name = $scope.item.searchString;\r\n\r\n //Check to see if any of the items are no match.\r\n var noMatch = _.find(searchItems, function(value) {\r\n return (name.indexOf(value) === -1);\r\n\r\n });\r\n \r\n $scope.isExcludedByFilter = noMatch;\r\n } else {\r\n $scope.isExcludedByFilter = false;\r\n }\r\n }\r\n\r\n };\r\n\r\n /* @ngInject */\r\n function VolunteersController(resolveResults, volunteerservice, spinnerService, $uibModal,logger, _) {\r\n var vm = this;\r\n\r\n spinnerService.hide();\r\n\r\n resolveResults = sortVolunteers(resolveResults);\r\n //console.log(resolveResults);\r\n vm.volunteers = resolveResults;\r\n\r\n vm.allowEdit = function (volunteer) {\r\n volunteer.allowEdit = true;\r\n };\r\n vm.disallowEdit = function (volunteer) {\r\n volunteer.allowEdit = false;\r\n };\r\n \r\n vm.orderBy = \"volunteerFirstName\";\r\n vm.filters = {\r\n searchString: \"\"\r\n };\r\n\r\n vm.editVolunteer = function (volunteer) {\r\n volunteerservice\r\n .getVolunteer(volunteer.volunteerID)\r\n .then(function (result) {\r\n\r\n var modalInstance = $uibModal.open({\r\n templateUrl: \"app/management/events/volunteerEdit.html\",\r\n controller: EventModelController,\r\n controllerAs: \"vm\",\r\n backdrop: \"static\",\r\n resolve: {\r\n args: function() {\r\n return {\r\n volunteer: result,\r\n isNew: false\r\n }\r\n }\r\n }\r\n });\r\n\r\n modalInstance.result.then(\r\n function(data) {\r\n if (data.action === 'save') {\r\n _.remove(vm.volunteers, function(item) {\r\n return item.volunteerID === data.volunteer.volunteerID;\r\n });\r\n vm.volunteers.push(data.volunteer);\r\n\r\n vm.volunteers = sortVolunteers(vm.volunteers);\r\n } else if (data.action === 'remove') {\r\n _.remove(vm.volunteers, function(item) {\r\n return item.volunteerID === data.volunteer.volunteerID;\r\n });\r\n vm.volunteers = sortVolunteers(vm.volunteers);\r\n }\r\n },\r\n function(data) {});\r\n });\r\n };\r\n\r\n vm.addVolunteer = function(volunteer) {\r\n volunteer = {};\r\n volunteerservice\r\n .getAllSkillSets()\r\n .then(function (result) {\r\n\r\n volunteer.allSkillSets = result;\r\n volunteer.addedSkillSets = [];\r\n\r\n var modalInstance = $uibModal.open({\r\n templateUrl: \"app/management/events/volunteerEdit.html\",\r\n controller: EventModelController,\r\n //size: 'lg',\r\n controllerAs: \"vm\",\r\n backdrop: \"static\",\r\n resolve: {\r\n args: function() {\r\n return {\r\n volunteer: volunteer,\r\n isNew: true\r\n }\r\n }\r\n }\r\n });\r\n\r\n modalInstance.result.then(\r\n function(data) {\r\n if (data.action === 'save') {\r\n vm.volunteers.push(data.volunteer);\r\n vm.volunteers = sortVolunteers(vm.volunteers);\r\n }\r\n },\r\n function(data) {});\r\n })\r\n .catch(function() {\r\n\r\n });\r\n };\r\n\r\n vm.exportToExcel = function () {\r\n volunteerservice\r\n .exportToExcel()\r\n .then(function (messge) { logger.success(messge) })\r\n .catch(function (err) { logger.error(err) });\r\n\r\n };\r\n \r\n function sortVolunteers(volunteers) {\r\n return _.sortBy(volunteers, function (item) {\r\n return item.searchString;\r\n });\r\n }\r\n\r\n /* @ngInject */\r\n function EventModelController(args, $uibModalInstance, mgmtConstants, volunteerservice) {\r\n var vm = this,\r\n volunteer = args.volunteer;\r\n vm.title = args.isNew ? \"Add Volunteer\" : \"Edit Volunteer\";\r\n vm.isNew = args.isNew;\r\n vm.allSkillSets = volunteer.allSkillSets;\r\n vm.addedSkillSets = volunteer.addedSkillSets;\r\n\r\n if (!vm.isNew) {\r\n vm.firstName = volunteer.volunteerFirstName;\r\n vm.lastName = volunteer.volunteerLastName;\r\n vm.phone = volunteer.volunteerPhone;\r\n vm.email = volunteer.volunteerEmail;\r\n vm.sex = volunteer.volunteerSex;\r\n vm.hoursAvailPerWeek = volunteer.hoursAvailPerWeek;\r\n vm.notes = volunteer.notes;\r\n }\r\n\r\n vm.close = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n };\r\n\r\n vm.save = function () {\r\n volunteer = volunteer || {};\r\n volunteer.volunteerFirstName = vm.firstName;\r\n volunteer.volunteerLastName = vm.lastName;\r\n volunteer.volunteerPhone = vm.phone;\r\n volunteer.volunteerEmail = vm.email;\r\n volunteer.volunteerSex = vm.sex;\r\n volunteer.volunteerSexDescr = vm.volunteerTitleDropDown.text();\r\n volunteer.hoursAvailPerWeek = vm.hoursAvailPerWeek;\r\n volunteer.notes = vm.notes;\r\n volunteer.addedSkillSets = vm.addedSkillSets;\r\n\r\n vm.saving = true;\r\n\r\n var action = 'updateVolunteer';\r\n\r\n if (vm.isNew) {\r\n action = 'createVolunteer';\r\n }\r\n\r\n volunteerservice[action](volunteer)\r\n .then(function(result) {\r\n spinnerService.showSuccess();\r\n $uibModalInstance.close({ volunteer: result, action: 'save' });\r\n })\r\n .catch(function(err) {\r\n spinnerService.showError();\r\n vm.saving = false;\r\n throw err;\r\n });\r\n\r\n };\r\n\r\n vm.remove = function () {\r\n vm.removing = true;\r\n\r\n volunteerservice\r\n .deleteVolunteer(volunteer.volunteerID)\r\n .then(function () {\r\n spinnerService.showSuccess();\r\n $uibModalInstance.close({ volunteer: volunteer, action: 'remove' });\r\n })\r\n .catch(function (err) {\r\n vm.removing = false;\r\n spinnerService.showError();\r\n throw err;\r\n });\r\n \r\n };\r\n\r\n vm.volunteerTitleOptions = {\r\n dataSource: mgmtConstants.events.volunteerTitleOptions,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.sex\r\n };\r\n\r\n vm.sortableOptions = {\r\n connectWith: \".connectList\",\r\n zIndex: 9000\r\n };\r\n }\r\n };\r\n\r\n})();\n\r\n\"use strict\";\r\n\r\nangular.module('inspinia')\r\n .controller(\"newsCtrl\", function () {\r\n\r\n });\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('inspinia.management')\r\n .config(routeConfig);\r\n\r\n /* @ngInject */\r\n function routeConfig($stateProvider, $urlRouterProvider, helpContent) {\r\n var underContructionTemplate =\r\n\"
\" +\r\n\"
\" +\r\n\"

This page is under construction

\";\r\n\r\n $stateProvider\r\n .state('management.events', {\r\n url: \"/events\",\r\n templateUrl: \"app/management/events/container.html\"\r\n })\r\n .state('management.events.calendar',\r\n {\r\n url: \"/calendar\",\r\n data: {\r\n pageTitle: 'Events',\r\n pageHelp: helpContent.Events || ''\r\n },\r\n resolve: {\r\n resolveResults: eventsResolve\r\n },\r\n params: {\r\n bannerText: 'Month'\r\n },\r\n views: {\r\n 'eventDetails': {\r\n templateUrl: \"app/management/events/events.html\",\r\n controller: \"EventsController\",\r\n controllerAs: \"vm\"\r\n }\r\n }\r\n })\r\n .state('management.events.programs',\r\n {\r\n url: \"/programs\",\r\n template: \"
Under construction
\",\r\n data: { pageTitle: 'Weekly Programs' }\r\n })\r\n .state('management.events.news',\r\n {\r\n url: \"/news\",\r\n template: underContructionTemplate,\r\n data: { pageTitle: 'News' }\r\n })\r\n .state('management.events.volunteers', {\r\n url: \"/volunteers\",\r\n data: {\r\n pageTitle: 'Volunteers',\r\n pageHelp: helpContent.Events || ''\r\n },\r\n resolve: {\r\n resolveResults: volunteersResolve\r\n },\r\n views: {\r\n 'eventDetails': {\r\n templateUrl: \"app/management/events/volunteers.html\",\r\n controller: \"VolunteersController\",\r\n controllerAs: \"vm\"\r\n }\r\n }\r\n });\r\n\r\n /* @ngInject */\r\n function eventsResolve(spinnerService, eventsService) {\r\n\r\n spinnerService.show();\r\n\r\n return eventsService.getEvents();\r\n };\r\n\r\n /* @ngInject */\r\n function volunteersResolve(spinnerService, volunteerservice) {\r\n\r\n spinnerService.show();\r\n\r\n return volunteerservice.getVolunteers();\r\n }\r\n\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular.module('inspinia')\r\n .controller(\"EventsModalController\", EventsModalController);\r\n\r\n /* @ngInject */\r\n function EventsModalController($scope, $uibModalInstance, args, logger,\r\n dateService, mgmtConstants, moment, eventsService, spinnerService, $log, $timeout, volunteerservice, fileUploadService, _) {\r\n\r\n $scope.$root.$uibModalInstance = $uibModalInstance;\r\n //window.ductus = args;\r\n var vm = this,\r\n event = args.eventModel,\r\n parseFormat = \"MM/dd/yyyy\";\r\n vm.scheduler = args.scheduler;\r\n vm.saving = false;\r\n\r\n // $log.debug(event);\r\n\r\n vm.defaultEndDateMessage = \"End date cannot be blank\";\r\n\r\n vm.imageUploadText = event.hasImage ? \"Update Picture\" : \"Add Picture\";\r\n vm.hasImage = event.hasImage;\r\n vm.eventImageFileName = event.eventImageFileName;\r\n\r\n var recurrenceOptions = {};\r\n\r\n vm.filters = {\r\n searchString: \"\"\r\n };\r\n\r\n //var filterWatchUnbinder = $scope.$watch(\r\n // \"vm.filters.searchString\",\r\n // function(newName, oldName) {\r\n\r\n // if (newName === oldName) {\r\n // return;\r\n // }\r\n // vm.filteredVolunteers = [];\r\n // $log.debug('Watching you!!!!');\r\n // }\r\n //);\r\n\r\n if (event.taskId > 0) {\r\n vm.isNew = false;\r\n vm.title = \"Edit Event\";\r\n vm.description = event.description;\r\n vm.facebookLink = event.facebookLink;\r\n //vm.ownerId = event.ownerId;\r\n vm.eventTitle = event.title;\r\n vm.start = dateService.nodaTimeToDateTime(event.start);\r\n vm.end = dateService.nodaTimeToDateTime(event.end);\r\n //Recurrence\r\n recurrenceOptions = event.recurrenceOptions;\r\n //Repeat Every\r\n vm.frequency = recurrenceOptions.frequency;\r\n //Weekly days\r\n //vm.recurrDays = {\"Monday\":false,\"Wednesday\":false,\"Saturday\":false,\"Friday\":false,\"Thursday\":true,\"Tuesday\":true,\"Sunday\":false};\r\n vm.recurrDays = recurrenceOptions.recurrenceDays;\r\n //1 - Day of Month, 2- Weekday of Month\r\n vm.recurrMonthType = recurrenceOptions.recurrMonthType;\r\n //Day(x) of month\r\n vm.recurrMonthDay = recurrenceOptions.recurrMonthDay;\r\n //First, Second, Third...\r\n vm.recurrenceDayOfMonthOption = recurrenceOptions.recurrenceDayOfMonthOption;\r\n //Monday, Tuesday, Wednesday...\r\n vm.recurrenceWeekdayOfMonthOption = recurrenceOptions.recurrenceWeekdayOfMonthOption;\r\n //On , After.\r\n vm.recurrEndOption = recurrenceOptions.recurrEndOption;\r\n vm.numberOfTimesToRepeat = recurrenceOptions.numberOfTimesToRepeat;\r\n vm.recurrEndDate = recurrenceOptions.recurrEndDate;\r\n\r\n vm.eventVenue = event.eventVenue;\r\n\r\n //Address Control\r\n vm.city = event.eventCity;\r\n vm.state = event.eventState;\r\n vm.zip = event.eventZip;\r\n // vm.address = event.address;\r\n vm.streetnumber = {}\r\n vm.streetnumber.name = event.address;\r\n\r\n vm.address2 = event.eventAddress2;\r\n\r\n vm.googleMapsUrl = event.googleMapsUrl;\r\n\r\n vm.eventCoordinator = event.eventCoordinator;\r\n vm.eventCoordinatorPhone = event.eventCoordinatorPhone;\r\n vm.eventCoordinatorEmail = event.eventCoordinatorEmail;\r\n\r\n vm.allowRSVP = event.allowRSVP;\r\n vm.allowVolunteerRegistration = event.allowVolunteerRegistration;\r\n vm.maxNumOfRSVP = event.maxNumOfRSVP || 0;\r\n vm.maxNumOfVolunteers = event.maxNumOfVolunteers || 0;\r\n vm.numberOfVolunteersAdded = event.numberOfVolunteersAdded;\r\n\r\n vm.volunteerName = event.volunteerName;\r\n vm.volunteerEmail = event.volunteerEmail;\r\n vm.volunteerPhone = event.volunteerPhone;\r\n vm.volunteerTitle = event.volunteerTitle;\r\n vm.volunteerAssignment = event.volunteerAssignment;\r\n vm.volunteerCommitment = event.volunteerCommitment;\r\n\r\n vm.sendReminder = event.sendReminder;\r\n vm.reminderUnit = event.reminderUnit;\r\n vm.reminderSeconds = event.reminderSeconds;\r\n vm.notifyOnCreate = event.notifyOnCreate;\r\n vm.disableNotifyOnCreate = true;\r\n vm.allowChanges = event.allowChanges;\r\n vm.editingSeriesInstance = event.editingSeriesInstance || false;\r\n vm.editingSeries = event.editingSeries || false;\r\n vm.RemoveText = \"Remove Event\";\r\n if (vm.editingSeries) {\r\n vm.RemoveText = \"Remove Series\";\r\n }\r\n\r\n } else {\r\n vm.isNew = true;\r\n vm.title = \"Add Event\";\r\n var eventStart = moment(event.start);\r\n vm.allowChanges = eventStart.diff(moment(), 'days') >= 0;\r\n vm.start = eventStart.hour(moment().hour() + 1).toDate();\r\n vm.end = moment(vm.start).add('30', 'minutes').toDate();\r\n\r\n recurrenceOptions.recurrenceTypeId = 1;\r\n event.recurrenceOptions = {};\r\n vm.recurrenceDayOfMonthOption = 1;\r\n vm.recurrenceWeekdayOfMonthOption = 1;\r\n vm.recurrMonthDay = 1;\r\n vm.recurrEndOption = 1;\r\n vm.numberOfTimesToRepeat = 1;\r\n vm.maxNumOfRSVP = 0;\r\n vm.maxNumOfVolunteers = 0;\r\n vm.numberOfVolunteersAdded = 0;\r\n vm.disableNotifyOnCreate = false;\r\n }\r\n\r\n vm.reminderUnit = vm.reminderUnit || 30;\r\n vm.eventTypes = args.eventTypes;\r\n vm.eventRooms = args.eventRooms;\r\n vm.addedVolunteers = [];\r\n // vm.recurrEndDate = vm.end;//moment(vm.end).add('7','days').toDate();\r\n\r\n //$scope.setAddressAndGetTimeZone = function() {\r\n // if (vm.streetnumber &&\r\n // vm.address &&\r\n // vm.streetnumber.components &&\r\n // vm.streetnumber.components.location.lat &&\r\n // vm.streetnumber.components.location.long) {\r\n\r\n // vm.addressstr = vm.streetnumber.name;\r\n // vm.streetNum = vm.streetnumber.components.streetNumber;\r\n // vm.streetName = vm.streetnumber.components.street;\r\n // vm.city = vm.streetnumber.components.city;\r\n // vm.state = vm.streetnumber.components.state;\r\n // vm.postalcode = vm.address.components.postCode;\r\n // vm.longitude = vm.streetnumber.components.location.long;\r\n // vm.latitude = vm.streetnumber.components.location.lat;\r\n // vm.masjidaddress1 = vm.streetNum + ' ' + vm.streetName;\r\n // }\r\n //};\r\n\r\n // $scope.$watch('vm.streetnumber.components.location.lat', $scope.setAddressAndGetTimeZone);\r\n\r\n vm.save = function (form) {\r\n if (vm.saving) return;\r\n\r\n if (!form.eventType.$error.required\r\n && !form.title.$invalid\r\n && !form.description.$invalid\r\n && !form.facebookLink.$error.url\r\n && !vm.startDateIsInvalid\r\n && !vm.endDateIsInvalid\r\n && !form.eventCoordinator.$invalid\r\n && !form.eventCoordinatorEmail.$invalid\r\n && !form.eventCoordinatorPhone.$invalid\r\n && !form.eventVenue.$invalid\r\n && (vm.streetnumber.name || event.address)) {\r\n\r\n if (vm.validateForm()) {\r\n vm.saving = true;\r\n event.ownerId = vm.eventTypeDropDown.value();\r\n event.title = vm.eventTitle;\r\n event.description = vm.description;\r\n event.facebookLink = vm.facebookLink;\r\n event.start = vm.start;\r\n event.end = vm.end;\r\n\r\n //Recurrence\r\n if (!vm.editingSeriesInstance) {\r\n if (vm.recurrenceDropDown) {\r\n event.recurrenceOptions.recurrenceTypeId = vm.recurrenceDropDown.value();\r\n }\r\n\r\n event.recurrenceOptions.frequency = vm.frequency;\r\n event.recurrenceOptions.recurrenceDays = vm.recurrDays;\r\n event.recurrenceOptions.recurrMonthDay = vm.recurrMonthDay;\r\n event.recurrenceOptions.recurrMonthType = vm.recurrMonthType;\r\n if (vm.recurrenceDayOfMonthDropDown) {\r\n event.recurrenceOptions.recurrenceDayOfMonthOption = vm.recurrenceDayOfMonthDropDown.value();\r\n }\r\n if (vm.recurrenceWeekdayOfMonthDropDown) {\r\n event.recurrenceOptions.recurrenceWeekdayOfMonthOption = vm.recurrenceWeekdayOfMonthDropDown.value();\r\n }\r\n event.recurrenceOptions.recurrEndOption = vm.recurrEndOption;\r\n event.recurrenceOptions.recurrEndDate = vm.recurrEndDate;\r\n event.recurrenceOptions.numberOfTimesToRepeat = vm.numberOfTimesToRepeat;\r\n }\r\n\r\n //Address\r\n event.eventVenue = vm.eventVenue;\r\n if (vm.streetnumber && vm.streetnumber.name && vm.streetnumber.components) {\r\n event.address = vm.streetnumber.name;\r\n event.eventAddress1 = vm.streetnumber.components.streetNumber + ' ' + vm.streetnumber.components.street; //vm.address1;\r\n event.eventAddress2 = vm.address2;\r\n if (vm.address && vm.address.place) {\r\n event.googleMapsUrl = vm.address.place.url;\r\n }\r\n\r\n event.eventCity = vm.streetnumber.components.city;//vm.city;\r\n event.eventState = vm.streetnumber.components.state; //vm.stateDropDown.value();\r\n event.eventZip = vm.streetnumber.components.postCode || ''; //vm.zip;\r\n }\r\n\r\n event.allowRSVP = vm.allowRSVP;\r\n event.allowVolunteerRegistration = vm.allowVolunteerRegistration;\r\n event.maxNumOfRSVP = vm.allowRSVP ? vm.maxNumOfRSVP : 0;\r\n event.maxNumOfVolunteers = vm.allowVolunteerRegistration ? vm.maxNumOfVolunteers : 0;\r\n\r\n //Volunteers and cordinator\r\n event.eventCoordinator = vm.eventCoordinator;\r\n event.eventCoordinatorPhone = vm.eventCoordinatorPhone;\r\n event.eventCoordinatorEmail = vm.eventCoordinatorEmail;\r\n\r\n event.editingSeriesInstance = vm.editingSeriesInstance;\r\n\r\n event.notifyOnCreate = vm.notifyOnCreate;\r\n event.notificationSettingsChanged = event.sendReminder != vm.sendReminder || event.reminderUnit != vm.reminderUnit || event.reminderSeconds != vm.reminderSeconds;\r\n event.sendReminder = vm.sendReminder;\r\n event.reminderUnit = vm.reminderUnit;\r\n event.reminderSeconds = vm.reminderSeconds;\r\n\r\n //Volunteers\r\n event.addedVolunteers = vm.addedVolunteers;\r\n\r\n //Images\r\n if (vm.image) {\r\n var result = fileUploadService.isValidImaamImage(vm.image);\r\n\r\n if (!result.isValid) {\r\n logger.error(result.message);\r\n return;\r\n }\r\n \r\n event.eventImageFileName = vm.image.name;\r\n \r\n\r\n }\r\n\r\n event.deleteEventImage = vm.deletePicture;\r\n //console.log(event);\r\n //console.log(vm.image);\r\n\r\n //return;\r\n\r\n if (vm.isNew) {\r\n spinnerService.show(\"Adding...\", 0);\r\n eventsService.addEvent(event, vm.image)\r\n .then(function (results) {\r\n eventsService\r\n .uploadEventPhoto(results, vm.image)\r\n .then(function () {\r\n spinnerService.showSuccess();\r\n $uibModalInstance.close({ event: event, action: 'add' });\r\n vm.close();\r\n })\r\n .catch(function () {\r\n spinnerService.showError();\r\n logger.error(\"Failed to upload event image.\");\r\n });\r\n })\r\n .catch(function (err) {\r\n spinnerService.showError();\r\n throw err;\r\n // $uibModalInstance.close({ event: event, action: 'add' });\r\n }).finally(function () {\r\n vm.saving = false;\r\n });\r\n \r\n } else {\r\n spinnerService.show(\"Saving...\", 0);\r\n\r\n eventsService\r\n .updateEvent(event, vm.image)\r\n .then(function () {\r\n eventsService\r\n .uploadEventPhoto(event, vm.image)\r\n .then(function () {\r\n spinnerService.showSuccess();\r\n $uibModalInstance.close({ event: event, action: 'save' });\r\n vm.close();\r\n })\r\n .catch(function () {\r\n spinnerService.showError();\r\n logger.error(\"Failed to upload event image.\");\r\n });\r\n })\r\n .catch(function (err) {\r\n spinnerService.showError();\r\n\r\n throw err;\r\n //$uibModalInstance.close({ event: event, action: 'save' });\r\n }).finally(function () {\r\n vm.saving = false;\r\n });\r\n }\r\n\r\n }\r\n } else {\r\n logger.error(\"Please enter all required (*) fields\");\r\n }\r\n };\r\n vm.loadVolunteers = function () {\r\n if (!vm.availableVolunteers && vm.allowVolunteerRegistration && !vm.editingSeries) {\r\n // console.log(\"Loading volunteers\");\r\n spinnerService.show();\r\n // console.log(event);\r\n volunteerservice\r\n .getEventVolunteers(event.taskId || 0)\r\n .then(function (data) {\r\n // console.log(data);\r\n vm.addedVolunteers = data.addedVolunteers || [];\r\n vm.availableVolunteers = data.availableVolunteers;\r\n vm.filteredVolunteers = data.availableVolunteers;\r\n vm.allTasks = data.allTasks;\r\n vm.availableVolunteerCount = vm.availableVolunteers.length;\r\n spinnerService.hide();\r\n\r\n vm.sortableOptions = {\r\n connectWith: \".connectList\",\r\n zIndex: 9000,\r\n update: function (event, ui) {\r\n if (event.target.id === 'sort-list-avail' &&\r\n ui.item.sortable.droptarget.attr('id') !== 'sort-list-avail' &&\r\n vm.addedVolunteers.length >= vm.maxNumOfVolunteers) {\r\n ui.item.sortable.cancel();\r\n logger.error(\"You have already added the maximum number of volunteers. Please increase the max volunteer count on the event tab.\");\r\n }\r\n }\r\n };\r\n vm.addedVolunteersSortableOptions = {\r\n connectWith: \".connectList\",\r\n zIndex: 9000,\r\n deactivate: function (event, ui) {\r\n //Get the added volunteer\r\n var addedVolunteer = _.find(vm.addedVolunteers, function (item) {\r\n return item.volunteerID == ui.item[0].id;\r\n });\r\n //Set the added volunteer to the first item if not found\r\n if (!addedVolunteer && vm.addedVolunteers.length > 0) {\r\n\r\n addedVolunteer = vm.addedVolunteers[0];\r\n }\r\n //Set the selected volunteer\r\n $scope.$apply(function () {\r\n vm.setSelectedVolunteer(addedVolunteer);\r\n });\r\n\r\n }\r\n }\r\n })\r\n .catch(function (err) {\r\n spinnerService.showError(); throw err;\r\n });\r\n }\r\n };\r\n vm.setSelectedVolunteer = function (volunteer) {\r\n if (volunteer) {\r\n _.forEach(vm.addedVolunteers, function (item) {\r\n item.isSelected = false;\r\n });\r\n\r\n vm.selectedVolunteer = volunteer;\r\n vm.selectedVolunteer.isSelected = true;\r\n vm.selectedName = vm.selectedVolunteer.volunteerFirstName + ' ' + vm.selectedVolunteer.volunteerLastName;\r\n // $log.debug(vm.selectedVolunteer);\r\n if (vm.selectedVolunteer.tasks && vm.selectedVolunteer.tasks.length > 0) {\r\n vm.selectedVolunteerTasks = vm.selectedVolunteer.tasks;\r\n }\r\n else {\r\n vm.selectedVolunteer.tasks = angular.copy(vm.allTasks);\r\n vm.selectedVolunteerTasks = vm.selectedVolunteer.tasks;\r\n }\r\n }\r\n vm.numberOfVolunteersAdded = vm.addedVolunteers.length;\r\n }\r\n vm.validateForm = function () {\r\n var isValid = true;\r\n vm.invalidWeeklySelection = false;\r\n vm.invalidMonthlySelection = false;\r\n vm.invalidRecurrenceEnd = false;\r\n\r\n if (vm.showFrequency) {\r\n //Weekly\r\n if (vm.showWeek) {\r\n if (vm.recurrDays.friday === false &&\r\n vm.recurrDays.monday === false &&\r\n vm.recurrDays.saturday === false &&\r\n vm.recurrDays.sunday === false &&\r\n vm.recurrDays.thursday === false &&\r\n vm.recurrDays.tuesday === false &&\r\n vm.recurrDays.wednesday === false) {\r\n vm.invalidWeeklySelectionMessage = \"Please select a week day\";\r\n vm.invalidWeeklySelection = true;\r\n isValid = false;\r\n }\r\n }\r\n\r\n if (vm.showMonth) {\r\n //Monthly\r\n if (vm.recurrMonthType === 1 && vm.recurrMonthDay == null) {\r\n vm.invalidMonthlySelection = true;\r\n vm.invalidMonthlySelectionMessage = \"Please select day of month\";\r\n isValid = false;\r\n }\r\n else if (vm.recurrMonthType === 2) {\r\n isValid = false;\r\n }\r\n }\r\n\r\n //Recurrence End\r\n if (vm.recurrEndOption === 1 && vm.numberOfTimesToRepeat == null) {\r\n vm.invalidRecurrenceEnd = true;\r\n vm.invalidRecurrenceEndMessage = \"Please select number of occurrences\";\r\n isValid = false;\r\n }\r\n else if (vm.recurrEndOption === 2 && vm.recurrEndDate == null) {\r\n vm.invalidRecurrenceEnd = true;\r\n vm.invalidRecurrenceEndMessage = \"Please recurrence end date\";\r\n isValid = false;\r\n }\r\n else if (vm.recurrEndOption === 2 && moment(vm.recurrEndDate).isBefore(moment(vm.end))) {\r\n vm.invalidRecurrenceEnd = true;\r\n vm.invalidRecurrenceEndMessage = \"The recurrence end date cannot be before the event end date\";\r\n isValid = false;\r\n }\r\n }\r\n\r\n return isValid;\r\n };\r\n vm.close = function () {\r\n // if (vm.isNew) {\r\n // args.scheduler.removeEvent(event);\r\n // }\r\n\r\n $uibModalInstance.dismiss('cancel');\r\n //$timeout(function () {\r\n\r\n //}, 300);\r\n\r\n };\r\n\r\n vm.remove = function () {\r\n vm.removing = true;;\r\n //scheduler.removeEvent(event);\r\n //vm.close();\r\n spinnerService.show(\"Removing...\", 0);\r\n eventsService.removeEvent(event.taskId, vm.editingSeries)\r\n .then(function () {\r\n spinnerService.showSuccess();\r\n $uibModalInstance.close({ event: event, action: 'remove' });\r\n vm.close();\r\n })\r\n .catch(function () {\r\n spinnerService.showError();\r\n vm.removing = false;;\r\n // $uibModalInstance.close({ event: event, action: 'remove' });\r\n });\r\n };\r\n\r\n vm.configureFrequency = function (recurrenceTypeId) {\r\n if (vm.editingSeriesInstance) return;\r\n\r\n vm.frequency = vm.frequency || 1;\r\n vm.customEndDateMessage = null;\r\n\r\n vm.frequencyText = _.replace(mgmtConstants.events.recurrenceTypeValues[recurrenceTypeId], \"s\", \"(s)\");\r\n\r\n vm.showFrequency = recurrenceTypeId > 1;\r\n\r\n vm.showRepeatOn = recurrenceTypeId === 3 || recurrenceTypeId === 4;\r\n\r\n vm.showDay = recurrenceTypeId === 2;\r\n vm.showWeek = recurrenceTypeId === 3;\r\n vm.showMonth = recurrenceTypeId === 4;\r\n vm.showYear = recurrenceTypeId === 5;\r\n\r\n vm.validateEndDate();\r\n };\r\n\r\n vm.validateEndDate = function (recurrenceTypeId) {\r\n var result = eventsService.isValidEndTime(recurrenceTypeId, vm.start, vm.end);\r\n if (!result.isValidEndDate) {\r\n vm.customEndDateMessage = result.message;\r\n vm.endDateIsInvalid = true;\r\n return;\r\n }\r\n vm.endDateIsInvalid = false;\r\n };\r\n\r\n vm.recurrenceSelect = function (e) {\r\n var dataItem = this.dataItem(e.item);\r\n //logger.info(vm.recurrenceDropDown.value());\r\n // vm.recurrenceTypeId = dataItem.value;\r\n vm.configureFrequency(dataItem.value);\r\n //logger.info(\"event :: select (\" + dataItem.text + \" : \" + dataItem.value + \")\" );\r\n };\r\n\r\n function startChange() {\r\n\r\n var startDate = vm.startPicker.value(),\r\n endDate = vm.endPicker.value();\r\n\r\n if (startDate) {\r\n vm.startDateIsInvalid = false;\r\n vm.endPicker.min(new Date(startDate));\r\n return;\r\n }\r\n vm.startDateIsInvalid = true;\r\n if (endDate) {\r\n vm.startPicker.max(new Date(endDate));\r\n } else {\r\n endDate = new Date();\r\n vm.startPicker.max(endDate);\r\n vm.endPicker.min(endDate);\r\n }\r\n };\r\n\r\n function endChange() {\r\n var endDate = vm.endPicker.value(),\r\n startDate = vm.startPicker.value();\r\n\r\n if (endDate) {\r\n vm.endDateIsInvalid = false;\r\n vm.startPicker.max(new Date(endDate));\r\n\r\n vm.validateEndDate(vm.recurrenceDropDown.value());\r\n return;\r\n }\r\n vm.endDateIsInvalid = true;\r\n if (startDate) {\r\n vm.endPicker.min(new Date(startDate));\r\n } else {\r\n endDate = new Date();\r\n vm.startPicker.max(endDate);\r\n vm.endPicker.min(endDate);\r\n }\r\n };\r\n\r\n function filterVolunteers(searchString) {\r\n\r\n }\r\n\r\n vm.eventTypeOptions = {\r\n dataSource: vm.eventTypes,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: event.ownerId\r\n };\r\n\r\n vm.startDatePickerOptions = {\r\n parseFormats: [parseFormat],\r\n change: function () {\r\n $scope.$apply(function () {\r\n startChange();\r\n });\r\n },\r\n // max: vm.end,\r\n interval: 15\r\n };\r\n vm.endDatePickerOptions = {\r\n parseFormats: [parseFormat],\r\n change: function () {\r\n $scope.$apply(function () {\r\n endChange();\r\n });\r\n }\r\n // min: vm.start\r\n };\r\n vm.frequencyOptions = {\r\n min: 1,\r\n max: 365,\r\n decimals: 0,\r\n format: \"#\",\r\n value: vm.frequency\r\n };\r\n\r\n vm.recurrenceOptions = {\r\n dataSource: mgmtConstants.events.recurrenceTypes,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n select: vm.recurrenceSelect,\r\n value: recurrenceOptions.recurrenceTypeId\r\n };\r\n vm.recurrenceDayOfMonthOptions = {\r\n dataSource: mgmtConstants.events.recurrenceDayOfMonthOptions,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.recurrenceDayOfMonthOption\r\n };\r\n vm.recurrenceWeekdayOfMonthOptions = {\r\n dataSource: mgmtConstants.events.recurrenceWeekdayOfMonthOptions,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.recurrenceWeekdayOfMonthOption\r\n };\r\n vm.volunteerTitleOptions = {\r\n dataSource: mgmtConstants.events.volunteerTitleOptions,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.volunteerTitle\r\n };\r\n vm.volunteerCommitmentOptions = {\r\n dataSource: mgmtConstants.events.volunteerCommitmentOptions,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.volunteerCommitment\r\n };\r\n\r\n vm.stateOptions = {\r\n dataSource: mgmtConstants.usStates,\r\n dataTextField: \"abbreviation\",\r\n dataValueField: \"abbreviation\",\r\n value: vm.state\r\n }\r\n\r\n vm.reminderSecondsOptions = {\r\n dataSource: mgmtConstants.reminderSeconds,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: vm.reminderSeconds\r\n }\r\n\r\n vm.configureFrequency(recurrenceOptions.recurrenceTypeId);\r\n\r\n }\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular.module('inspinia')\r\n .controller(\"EventsController\", EventsController);\r\n\r\n /* @ngInject */\r\n function EventsController($rootScope,$scope, resolveResults, spinnerService,\r\n eventsService, $uibModal, modalModes, logger, dateService, authService, kendo,\r\n $anchorScroll, $location, $log,moment,$timeout, _) {\r\n var vm = this,\r\n selectedEvent = null;\r\n \r\n if (resolveResults === \"NOT_AUTHORIZED\") {\r\n vm.authorized = false;\r\n spinnerService.hide();\r\n return;\r\n }\r\n\r\n vm.authorized = true;\r\n\r\n var editable = true;\r\n if ($location.search().id && $location.search().code) {\r\n editable = false;\r\n }\r\n\r\n var eventModels = resolveResults.eventModels,\r\n eventTypes = resolveResults.eventTypes,\r\n eventRooms = resolveResults.eventRooms;\r\n setEventTypeInverseColor(eventTypes);\r\n\r\n\r\n vm.toolTipTemplate = kendo.template($(\"#template\").html());\r\n\r\n activate();\r\n spinnerService.hide();\r\n\r\n function activate() {\r\n vm.schedulerOptions = {\r\n date: moment().toDate(),\r\n // startTime: new Date(\"2013/6/13 04:00 AM\"),\r\n height: 900,\r\n views: [\r\n { type: \"day\", eventTemplate: $(\"#event-template\").html(), editable: editable },\r\n { type: \"workWeek\", eventTemplate: $(\"#event-template\").html(), editable: editable },\r\n { type: \"week\", eventTemplate: $(\"#event-template\").html(), editable: editable },\r\n { type: \"month\", selected: true, eventTemplate: $(\"#event-template\").html(), editable: editable },\r\n { type: \"agenda\", eventTemplate: $(\"#event-template\").html(), editable: editable }\r\n\r\n ],\r\n //timezone: \"Etc/UTC\",\r\n // selectable: true,\r\n dataSource: {\r\n batch: true,\r\n transport: {\r\n read: function (e) {\r\n if (eventModels) {\r\n // console.log(eventModels);\r\n e.success(eventModels);\r\n $rootScope.$broadcast('mma-refreshScheduler');\r\n }\r\n },\r\n destroy: function (e) {\r\n var event = _.last(e.data.models);\r\n if (event && event.taskId > 0) {\r\n eventsService.removeEvent(event.taskId)\r\n .then(function () { spinnerService.showSuccess(); })\r\n .catch(function () { spinnerService.showError(); });\r\n }\r\n },\r\n update: function (e) {\r\n var event = _.last(e.data.models);\r\n spinnerService.show(\"Saving\", 0);\r\n updateEvent(event,true);\r\n }\r\n },\r\n schema: {\r\n model: {\r\n id: \"taskId\",\r\n fields: {\r\n taskId: { from: \"taskId\", type: \"number\" },\r\n title: { from: \"title\", defaultValue: \"No title\", validation: { required: true } },\r\n start: { type: \"date\", from: \"start\" },\r\n end: { type: \"date\", from: \"end\" },\r\n startTimezone: { from: \"startTimezone\" },\r\n endTimezone: { from: \"endTimezone\" },\r\n description: { from: \"description\" },\r\n // recurrenceId: { from: \"recurrenceID\" },\r\n // recurrenceRule: { from: \"recurrenceRule\" },\r\n // recurrenceException: { from: \"recurrenceException\" },\r\n ownerId: { from: \"ownerId\" },\r\n isAllDay: { type: \"boolean\", from: \"isAllDay\" }\r\n }\r\n }\r\n }\r\n },\r\n resources: [\r\n {\r\n field: \"ownerId\",\r\n title: \"Owner\",\r\n dataSource: eventTypes\r\n }\r\n ],\r\n editable: {\r\n confirmation: false,\r\n resize: false\r\n },\r\n add: function (e) {\r\n selectedEvent = e.event;\r\n openModal(event);\r\n e.preventDefault();\r\n },\r\n edit: function (e) {\r\n // $rootScope.$state.params.bannerText = 'kdkdkdd';\r\n //$rootScope.$broadcast('mma-bannerText-changed');\r\n\r\n if (e.event) {\r\n selectedEvent = e.event;\r\n //eventsService.getEvent(e.event.taskId)\r\n // .then(function (event) {\r\n // openModal(event);\r\n // });\r\n openModal(event);\r\n e.preventDefault();\r\n }\r\n\r\n },\r\n dataBound: function (e) {\r\n //scrollToView();\r\n }\r\n };\r\n\r\n }\r\n\r\n $rootScope.$on('mma-refreshScheduler', function() {\r\n $timeout(function () {\r\n if (vm.scheduler) {\r\n vm.scheduler.refresh();\r\n }\r\n // console.log('zzzz');\r\n }, 500);\r\n });\r\n\r\n function openModal(event) {\r\n \r\n vm.eventToolTip.hide();\r\n var eventModel;\r\n if (event && event.eventModels) {\r\n eventModel = event.eventModels[0];\r\n } else {\r\n eventModel = selectedEvent;\r\n }\r\n\r\n if (eventModel.recurrenceID != null) {\r\n $uibModal.open({\r\n templateUrl: \"app/management/events/eventRecurrencePrompt.html\",\r\n controller: ModalPromptController,\r\n //size: 'lg',\r\n controllerAs: \"vm\",\r\n backdrop: \"static\",\r\n resolve: {\r\n args: function () {\r\n return {\r\n eventModel: eventModel\r\n }\r\n }\r\n }\r\n })\r\n .result\r\n .then(\r\n function (data) {\r\n if (data.action == 'series') {\r\n eventModel.editingSeries = true;\r\n //Get the event recurrence options\r\n eventsService.getEventRecurrence(eventModel.recurrenceID)\r\n .then(function (results) {\r\n eventModel.recurrenceOptions = results;\r\n //console.log(eventModel);\r\n openEventDetails(eventModel);\r\n })\r\n .catch(function(err) {\r\n logger.error(\"An error occurred getting recurrence options.\");\r\n });\r\n \r\n }\r\n else if (data.action == 'single') {\r\n eventModel.editingSeriesInstance = true;\r\n openEventDetails(eventModel);\r\n }\r\n },\r\n function (data) { }\r\n );\r\n }\r\n else {\r\n openEventDetails(eventModel);\r\n }\r\n }\r\n\r\n function openEventDetails(eventModel) {\r\n var modalInstance = $uibModal.open({\r\n templateUrl: \"app/management/events/eventsModal.html\",\r\n controller: 'EventsModalController',\r\n size: 'lg',\r\n controllerAs: \"vm\",\r\n backdrop: \"static\",\r\n resolve: {\r\n args: function() {\r\n return {\r\n eventModel: eventModel,\r\n eventTypes: eventTypes,\r\n eventRooms: eventRooms,\r\n scheduler: vm.scheduler\r\n }\r\n }\r\n }\r\n });\r\n\r\n modalInstance.result.then(\r\n function(data) {\r\n if (data.action === 'save') {\r\n // spinnerService.show(\"Saving\", 0);\r\n // updateEvent(data.event);\r\n reload();\r\n } else if (data.action === 'add') {\r\n //spinnerService.show(\"Adding\", 0);\r\n //eventsService.addEvent(data.event)\r\n // .then(function () { spinnerService.showSuccess(); reload(); })\r\n // .catch(function () { spinnerService.showError(); });\r\n reload();\r\n } else if (data.action === 'remove') {\r\n //spinnerService.show(\"Removing\", 0);\r\n //eventsService.removeEvent(data.event.taskId)\r\n // .then(function () { spinnerService.showSuccess(); reload(); })\r\n // .catch(function () { spinnerService.showError(); });\r\n\r\n reload();\r\n }\r\n }\r\n );\r\n }\r\n\r\n function updateEvent(event, format) {\r\n if (event) {\r\n if (format) {\r\n var timeZoneId = authService.getUser().timeZoneId;\r\n event.start = kendo.timezone.convert(event.start, event.start.getTimezoneOffset(), timeZoneId);\r\n event.end = kendo.timezone.convert(event.end, event.end.getTimezoneOffset(), timeZoneId);\r\n }\r\n\r\n eventsService.updateEvent(event)\r\n .then(function () {\r\n //TODO : Update the scheduler dataSource\r\n spinnerService.showSuccess();\r\n reload();\r\n })\r\n .catch(function () { spinnerService.showError(); reload(); });\r\n }\r\n\r\n\r\n };\r\n\r\n function reload() {\r\n selectedEvent = null;\r\n //spinnerService.showSuccess();\r\n //vm.scheduler.dataSource.read();\r\n //vm.scheduler.refresh();\r\n eventsService.getEvents()\r\n .then(function (response) {\r\n //spinnerService.showSuccess();\r\n eventModels = response.eventModels;\r\n vm.scheduler.dataSource.read();\r\n });\r\n };\r\n\r\n function scrollToView() {\r\n $location.hash(\"scroll-To\");\r\n $anchorScroll();\r\n }\r\n\r\n function setEventTypeInverseColor(eventTypes) {\r\n _.each(eventTypes, function(item) {\r\n var brightnessValue = new kendo.Color(item.color).percBrightness();\r\n //console.log(brightnessValue);\r\n item.inverseColor = false;\r\n if (brightnessValue !== 0) {\r\n item.inverseColor = brightnessValue < 180;\r\n }\r\n \r\n });\r\n }\r\n\r\n function onChangeEventType() {\r\n if (vm.selectedEventTypes.length > 0) {\r\n vm.scheduler.dataSource.filter({\r\n operator: function(task) {\r\n\r\n return $.inArray(task.ownerId, vm.selectedEventTypes) >= 0;\r\n }\r\n });\r\n } else {\r\n vm.scheduler.dataSource.filter({\r\n operator: function(task) {\r\n\r\n return true;\r\n }\r\n });\r\n }\r\n\r\n }\r\n\r\n vm.selectedEventTypes = [];\r\n vm.selectOptions = {\r\n placeholder: \"Filter Event Types...\",\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n valuePrimitive: true,\r\n autoBind: false,\r\n dataSource: eventTypes,\r\n change: onChangeEventType,\r\n itemTemplate: '
#: text #
',\r\n tagTemplate: '
#: text #
'\r\n //itemTemplate: '
#: text #
',\r\n //tagTemplate: '#: text #'\r\n };\r\n vm.toolTipOptions = {\r\n filter: \".k-event,.k-task\",\r\n content: vm.toolTipTemplate\r\n }\r\n\r\n //$document.ready(function () {\r\n // // console.log(vm);\r\n // // console.log(vm.scheduler.dataSource);\r\n \r\n // angular.element('#event-scheduler').on(\"touchend\", \".k-event\", function (e) {\r\n // console.log(vm.scheduler.dataSource);\r\n // //var eventElement = $(e.currentTarget);\r\n // //var event = scheduler.occurrenceByUid(eventElement.data(\"uid\"));\r\n\r\n // //scheduler.editEvent(event);\r\n // });\r\n //});\r\n }\r\n\r\n /* @ngInject */\r\n function ModalPromptController(args, $uibModalInstance) {\r\n var vm = this;\r\n\r\n vm.editSeries = function () {\r\n $uibModalInstance.close({ event: args.eventModel, action: 'series' });\r\n };\r\n\r\n vm.editSingle = function () {\r\n $uibModalInstance.close({ event: args.eventModel, action: 'single' });\r\n };\r\n vm.close = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n };\r\n\r\n }\r\n\r\n})();\r\n\r\n// $rootScope.$state.transitionTo($rootScope.$state.current, $rootScope.$state.$stateParams, {\r\n// reload: true,\r\n// inherit: false,\r\n// notify: true\r\n// });\n(function () {\r\n 'use strict';\r\n\r\n angular.module('inspinia.management')\r\n .controller('LiveBroadcastController', LiveBroadcastController);\r\n\r\n function LiveBroadcastController($scope, resolveResults, mgmtConstants, spinnerService,\r\n liveBroadcastService, $uibModal) {\r\n var vm = this;\r\n\r\n spinnerService.hide();\r\n\r\n var liveBroadcasts = resolveResults,\r\n dateFormats = mgmtConstants.dateFormats;\r\n\r\n activate();\r\n\r\n function activate() {\r\n vm.mainGridOptions = {\r\n dataSource: {\r\n transport: {\r\n read: function (e) {\r\n // window.ductus = liveBroadcasts;\r\n if (liveBroadcasts) {\r\n e.success(liveBroadcasts);\r\n }\r\n }\r\n },\r\n schema: {\r\n model: {\r\n id: \"liveBroadCastLinkID\",\r\n fields: {\r\n liveBroadCastLinkID: { editable: false, nullable: true },\r\n primaryLiveBroadCastURL: { type: 'string' },\r\n // secondaryLiveBroadCastURL: { type: 'string' },\r\n createDate: { type: 'date', editable: false },\r\n createdByStr: { type: 'string', editable: false }\r\n }\r\n }\r\n },\r\n pageSize: 30\r\n },\r\n editable: \"popup\",\r\n sortable: true,\r\n pageable: true,\r\n columns: [\r\n { field: \"liveBroadCastLinkID\", title: 'Id', format: dateFormats.number, width: \"40px\", sortable: false, attributes: { class: \"text-center\" } },\r\n { field: \"primaryLiveBroadCastURL\", title: 'Link', format: dateFormats.string, width: \"220px\" },\r\n // { field: \"secondaryLiveBroadCastURL\", title: 'Secondary Link', format: dateFormats.string, width: \"220px\" },\r\n { field: \"createdByStr\", title: 'Created By', format: dateFormats.string, width: \"80px\" },\r\n { field: \"createDate\", title: 'Created Date', format: dateFormats.dateTime, width: \"80px\" }\r\n ]\r\n };\r\n\r\n function releod() {\r\n liveBroadcastService.getLiveBroadcasts()\r\n .then(function (data) {\r\n liveBroadcasts = data;\r\n vm.grid.dataSource.read();\r\n });\r\n };\r\n\r\n vm.addLink = function () {\r\n $uibModal.open({\r\n templateUrl: \"app/management/broadcast/addlink.html\",\r\n controller: ModalController,\r\n controllerAs: \"vm\",\r\n backdrop: \"static\"\r\n })\r\n .result.then(\r\n function (data) {\r\n releod();\r\n }\r\n );\r\n }\r\n };\r\n\r\n function ModalController($scope, $uibModalInstance, $timeout, spinnerService) {\r\n var vm = this;\r\n\r\n vm.save = function (form) {\r\n if (form.$valid) {\r\n $scope.saving = true;\r\n\r\n liveBroadcastService\r\n .createLiveBroadcast({ primaryLiveBroadCastURL: vm.link })\r\n .then(function (response) {\r\n closeModal();\r\n })\r\n .catch(function (err) {\r\n $scope.saving = false;\r\n throw err;\r\n });\r\n }\r\n else {\r\n $uibModalInstance.close();\r\n }\r\n };\r\n\r\n vm.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n };\r\n\r\n function closeModal() {\r\n $timeout(function() {\r\n spinnerService.showSuccess();\r\n $scope.saving = false;\r\n $uibModalInstance.close();\r\n }, 1000);\r\n }\r\n }\r\n }\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('inspinia.management')\r\n .config(routeConfig);\r\n\r\n /* @ngInject */\r\n function routeConfig($stateProvider,$urlRouterProvider, helpContent) {\r\n $stateProvider\r\n .state('management.broadcast',\r\n {\r\n url: \"/broadcast\",\r\n templateUrl: \"app/management/broadcast/livebroadcast.html\",\r\n controller: \"LiveBroadcastController\",\r\n controllerAs : \"vm\",\r\n data: { \r\n pageTitle: 'Live Broadcast', \r\n pageHelp : helpContent.liveBroadcast || '' }, \r\n resolve:{\r\n resolveResults: liveBroadCastResolve\r\n }\r\n });\r\n \r\n /* @ngInject */\r\n function liveBroadCastResolve(liveBroadcastService, spinnerService) {\r\n spinnerService.show();\r\n return liveBroadcastService.getLiveBroadcasts();\r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('inspinia.management')\r\n .config(routeConfig)\r\n\r\n /* @ngInject */\r\n function routeConfig($stateProvider) {\r\n $stateProvider\r\n .state('management.committees',\r\n {\r\n url: \"/committees\",\r\n template: \"
Under construction
\",\r\n data: { pageTitle: 'Committees' }\r\n })\r\n .state('management.board',\r\n {\r\n url: \"/board\",\r\n template: \"
Under construction
\",\r\n data: { pageTitle: 'Board of Directors' }\r\n });\r\n }\r\n})();\n(function() {\r\n 'use strict';\r\n\r\n angular.module('blocks.exception', ['blocks.logger']);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('blocks.exception')\r\n .factory('exception', exception);\r\n\r\n /* @ngInject */\r\n function exception($q, logger, spinnerService) {\r\n var service = {\r\n catcher: catcher\r\n };\r\n return service;\r\n\r\n function catcher(message) {\r\n return function (e) {\r\n \r\n spinnerService.hideAll();\r\n if (e.data) {\r\n var thrownDescription;\r\n var newMessage;\r\n \r\n e.data.description = e.data.description || e.data.error_description || e.data.message;\r\n if (e.data && e.data.description) {\r\n thrownDescription = '\\n' + e.data.description;\r\n newMessage = message + thrownDescription;\r\n }\r\n e.data.description = newMessage;\r\n logger.error(newMessage);\r\n }\r\n else{\r\n logger.error(message);\r\n }\r\n return $q.reject(e);\r\n };\r\n }\r\n }\r\n})();\r\n\n// Include in index.html so that app level exceptions are handled.\r\n// Exclude from testRunner.html which should run exactly what it wants to run\r\n(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('blocks.exception')\r\n .provider('exceptionHandler', exceptionHandlerProvider)\r\n .config(config);\r\n\r\n /**\r\n * Must configure the exception handling\r\n */\r\n function exceptionHandlerProvider() {\r\n /* jshint validthis:true */\r\n this.config = {\r\n appErrorPrefix: ''\r\n };\r\n\r\n this.configure = function (appErrorPrefix) {\r\n this.config.appErrorPrefix = appErrorPrefix;\r\n };\r\n\r\n this.$get = function() {\r\n return {config: this.config};\r\n };\r\n }\r\n\r\n config.$inject = ['$provide'];\r\n\r\n /**\r\n * Configure by setting an optional string value for appErrorPrefix.\r\n * Accessible via config.appErrorPrefix (via config value).\r\n * @param {Object} $provide\r\n */\r\n /* @ngInject */\r\n function config($provide) {\r\n $provide.decorator('$exceptionHandler', extendExceptionHandler);\r\n }\r\n\r\n // extendExceptionHandler.$inject = ['$delegate', 'exceptionHandler', 'logger'];\r\n\r\n /**\r\n * Extend the $exceptionHandler service to also display a toast.\r\n * @param {Object} $delegate\r\n * @param {Object} exceptionHandler\r\n * @param {Object} logger\r\n * @return {Function} the decorated $exceptionHandler service\r\n */\r\n /* @ngInject */\r\n function extendExceptionHandler($delegate, exceptionHandler, logger, spinnerService) {\r\n return function(exception, cause) {\r\n spinnerService.hideAll();\r\n //window.swal.close();\r\n var appErrorPrefix = exceptionHandler.config.appErrorPrefix || '';\r\n var errorData = {exception: exception, cause: cause};\r\n exception.message = \r\n appErrorPrefix + (exception.message || exception.data.message || exception.data.description || exception.data.error_description);\r\n $delegate(exception, cause);\r\n /**\r\n * Could add the error to a service's collection,\r\n * add errors to $rootScope, log errors to remote web server,\r\n * or log locally. Or throw hard. It is entirely up to you.\r\n * throw exception;\r\n *\r\n * @example\r\n * throw { message: 'error message we added' };\r\n */\r\n logger.error(exception.message, errorData);\r\n };\r\n }\r\n})();\r\n\n(function() {\r\n 'use strict';\r\n\r\n angular.module('blocks.logger', []);\r\n})();\r\n\n(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('blocks.logger')\r\n .factory('logger', logger);\r\n\r\n logger.$inject = ['$log', 'toastr'];\r\n\r\n /* @ngInject */\r\n function logger($log, toastr) {\r\n toastr.options = {\r\n showMethod : 'slideDown',\r\n positionClass : 'toast-top-center',\r\n hideMethod : 'slideUp',\r\n preventDuplicates: true,\r\n progressBar: true,\r\n closeButton: true,\r\n timeOut: '10000'\r\n };\r\n \r\n var service = {\r\n showToasts: true,\r\n\r\n error : error,\r\n info : info,\r\n success : success,\r\n warning : warning,\r\n\r\n // straight to console; bypass toastr\r\n log : $log.log\r\n };\r\n\r\n return service;\r\n /////////////////////\r\n\r\n function error(message, data, title) {\r\n toastr.error(message, title);\r\n $log.error('Error: ' + message, data);\r\n }\r\n\r\n function info(message, data, title) {\r\n toastr.info(message, title);\r\n $log.info('Info: ' + message, data);\r\n }\r\n\r\n function success(message, data, title) {\r\n toastr.success(message, title);\r\n $log.info('Success: ' + message, data);\r\n }\r\n\r\n function warning(message, data, title) {\r\n toastr.warning(message, title);\r\n $log.warn('Warning: ' + message, data);\r\n }\r\n \r\n }\r\n}());\r\n\n(function () {\r\n 'use strict';\r\n\r\n\r\n angular.module('inspinia').directive('widgetUser', widgetUser);\r\n \r\n \r\n // widgetUser.$inject = ['authService','$window'];\r\n /* @ngInject */\r\n function widgetUser(authService, $window, $state, roles,_) {\r\n \r\n var directive = {\r\n link: link,\r\n templateUrl: 'app/widgets/widgetUser.html'\r\n };\r\n return directive;\r\n\r\n function link(scope, element, attrs) {\r\n \r\n scope.isAuthenticated = authService.isAuthenticated();\r\n scope._ = $window._;\r\n \r\n var user = authService.getUser();\r\n // console.log(user);\r\n if (user) {\r\n if (user.isSuperAdmin) {\r\n scope.fullName = \"Super Admin : \" + _.capitalize(user.fullName);\r\n } else {\r\n scope.fullName = _.capitalize(user.fullName);\r\n scope.initials = user.initials;\r\n }\r\n\r\n }\r\n \r\n scope.logout = function(){\r\n authService.removeToken();\r\n $state.go('accounts.login', {}, { reload: true });\r\n $(\"body\").removeClass(\"mini-navbar\");\r\n }\r\n \r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n\r\n angular.module('inspinia').directive('widgetTopNavLinks', widgetNavLinks);\r\n\t\r\n\r\n /* @ngInject */\r\n function widgetNavLinks(authService, $state) {\r\n\r\n var directive = {\r\n link: link,\r\n templateUrl: 'app/widgets/widgetTopNavLinks.html'\r\n };\r\n return directive;\r\n\r\n function link(scope, element, attrs) {\r\n\r\n scope.isAuthenticated = authService.isAuthenticated();\r\n\r\n scope.logout = function () {\r\n authService.removeToken();\r\n $state.go('accounts.login', {}, { reload: true });\r\n }\r\n\r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n\r\n angular.module('inspinia').directive('widgetNav', widgetNav);\r\n\r\n /* @ngInject */\r\n function widgetNav(authService, roles, $rootScope) {\r\n\r\n var directive = {\r\n link: link,\r\n templateUrl: 'app/widgets/widgetNav.html'\r\n };\r\n return directive;\r\n\r\n function link($scope, element, attrs) {\r\n\r\n $scope.isAuthenticated = authService.isAuthenticated();\r\n var user = authService.getUser();\r\n\r\n $scope.logoUrl = user.logoUrl;\r\n $scope.navCollapsed = user.navigationCollapsed;\r\n \r\n $scope.logoHasBackground = user.logoHasBackground;\r\n\r\n $scope.superAdmin = user.isSuperAdmin;\r\n\r\n $scope.admin = user.isAdmin;\r\n $scope.salah = user.hasSalah;\r\n $scope.jummah = user.hasJummah;\r\n $scope.events = user.hasEvents;\r\n $scope.news = user.hasNews;\r\n $scope.notifications = user.hasNotifications;\r\n $scope.members = user.hasMembers;\r\n $scope.broadcast = user.hasBroadcast;\r\n $scope.ramadan = user.hasRamadan;\r\n $scope.volunteer = user.hasVolunteer;\r\n $scope.userManagement = user.hasUserManagement;\r\n $scope.masjidManagement = user.hasMasjidManagement;\r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n\r\n angular.module('inspinia').directive('widgetHeader', widgetHeader);\r\n \r\n /* @ngInject */\r\n function widgetHeader(authService, $state, $rootScope) {\r\n var directive = {\r\n link: link,\r\n templateUrl: 'app/widgets/widgetHeader.html'\r\n };\r\n return directive;\r\n\r\n function link(scope, $element, attrs) {\r\n scope.isAuthenticated = authService.isAuthenticated();\r\n scope.showHelpContent = false;\r\n\r\n scope.toggleHelpContent = function () {\r\n\r\n scope.showHelpContent = !scope.showHelpContent;\r\n // scope.toggle\r\n var helpContent = $element.find('#help-content');\r\n if(helpContent && helpContent.length > 0){\r\n \r\n if(scope.showHelpContent){\r\n helpContent.slideDown();\r\n }else{\r\n helpContent.slideUp();\r\n }\r\n }\r\n };\r\n \r\n scope.helpIconVisible = function(){\r\n return $state.current.data.pageHelp && $state.current.data.pageHelp.length > 0;\r\n }\r\n\r\n $rootScope.$on('$stateChangeSuccess',\r\n function (event, toState, toParams, fromState, fromParams) {\r\n scope.showHelpContent = false;\r\n });\r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('inspinia')\r\n .directive('mmaMasjidIqamahSettings', mmaMasjidIqamahSettings);\r\n\r\n\r\n /* @ngInject */\r\n function mmaMasjidIqamahSettings() {\r\n var directive = {\r\n bindToController: true,\r\n controller: mmaMasjidIqamahSettingsController,\r\n controllerAs: 'iqamahSettings',\r\n templateUrl: 'app/widgets/mmaMasjidIqamahSettings.html',\r\n restrict: 'E',\r\n scope: {\r\n fajr: '=',\r\n fajrtime: '=',\r\n dhuhr: '=',\r\n dhuhrtime: '=',\r\n asr: '=',\r\n asrtime: '=',\r\n maghrib: '=',\r\n maghribtime: '=',\r\n isha: '=',\r\n ishatime: '='\r\n }\r\n };\r\n return directive;\r\n };\r\n\r\n /* @ngInject */\r\n function mmaMasjidIqamahSettingsController(mgmtConstants) {\r\n var iqamahSettings = this;\r\n iqamahSettings.fajrDropDownOptions = {\r\n dataSource: mgmtConstants.iqamahTimesSettings,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: iqamahSettings.fajr\r\n }\r\n iqamahSettings.dhuhrDropDownOptions = {\r\n dataSource: mgmtConstants.iqamahTimesSettings,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: iqamahSettings.dhuhr\r\n }\r\n iqamahSettings.asrDropDownOptions = {\r\n dataSource: mgmtConstants.iqamahTimesSettings,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: iqamahSettings.asr\r\n }\r\n iqamahSettings.maghribDropDownOptions = {\r\n dataSource: mgmtConstants.iqamahTimesSettings,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: iqamahSettings.maghrib\r\n }\r\n iqamahSettings.ishaDropDownOptions = {\r\n dataSource: mgmtConstants.iqamahTimesSettings,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: iqamahSettings.isha\r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('inspinia')\r\n .directive('mmaMasjidanglesAndOffsetSettings', mmaMasjidanglesAndOffsetSettings);\r\n\r\n\r\n /* @ngInject */\r\n function mmaMasjidanglesAndOffsetSettings() {\r\n var directive = {\r\n bindToController: true,\r\n controller: mmaMasjidanglesAndOffsetSettingsController,\r\n controllerAs: 'anglesAndOffsetSettings',\r\n templateUrl: 'app/widgets/mmaMasjidAnglesAndOffsetSettings.html',\r\n restrict: 'E',\r\n scope: {\r\n fajrangle: '=',\r\n fajroffset: '=',\r\n ishaangle: '=',\r\n ishaoffset: '=',\r\n maghribishadelta: '='\r\n }\r\n };\r\n return directive;\r\n };\r\n\r\n /* @ngInject */\r\n function mmaMasjidanglesAndOffsetSettingsController() {\r\n var anglesAndOffsetSettings = this;\r\n console.log(\"zzzzzz\");\r\n\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('inspinia.management')\r\n .directive('mmaMasjidAdhanSettings', mmaMasjidAdhanSettings);\r\n\r\n\r\n /* @ngInject */\r\n function mmaMasjidAdhanSettings() {\r\n var directive = {\r\n bindToController: true,\r\n controller: mmaMasjidAdhanSettingsController,\r\n controllerAs: 'adhanSettings',\r\n templateUrl: 'app/widgets/mmaMasjidAdhanSettings.html',\r\n restrict: 'E',\r\n scope: {\r\n denominationtype: '=',\r\n adhancalculationtype: '=',\r\n juristictype: '=',\r\n streetnumber: '=',\r\n city: '=',\r\n state: '=',\r\n postalcode: '=',\r\n longitude: '=',\r\n latitude: '=',\r\n addressstr: '=',\r\n timezoneid: '=',\r\n masjidaddress1: '=',\r\n masjidaddress2: '=',\r\n fajrangle: '=',\r\n fajroffset: '=',\r\n ishaangle: '=',\r\n ishaoffset: '=',\r\n maghribishadelta: '='\r\n }\r\n };\r\n return directive;\r\n };\r\n\r\n /* @ngInject */\r\n function mmaMasjidAdhanSettingsController($scope,masjidservice, mgmtConstants) {\r\n var adhanSettings = this;\r\n\r\n adhanSettings.streetnumber = {\r\n name: adhanSettings.addressstr\r\n };\r\n\r\n $scope.setAddressAndGetTimeZone = function () {\r\n if (adhanSettings.streetnumber &&\r\n adhanSettings.address &&\r\n adhanSettings.streetnumber.components &&\r\n adhanSettings.streetnumber.components.location.lat &&\r\n adhanSettings.streetnumber.components.location.long) {\r\n\r\n adhanSettings.addressstr = adhanSettings.streetnumber.name;\r\n adhanSettings.streetNum = adhanSettings.streetnumber.components.streetNumber;\r\n adhanSettings.streetName = adhanSettings.streetnumber.components.street;\r\n adhanSettings.city = adhanSettings.streetnumber.components.city;\r\n adhanSettings.state = adhanSettings.streetnumber.components.state;\r\n adhanSettings.postalcode = adhanSettings.address.components.postCode || '';\r\n adhanSettings.longitude = adhanSettings.streetnumber.components.location.long;\r\n adhanSettings.latitude = adhanSettings.streetnumber.components.location.lat;\r\n adhanSettings.masjidaddress1 = adhanSettings.streetNum + ' ' + adhanSettings.streetName;\r\n\r\n masjidservice.getTimeZone(adhanSettings.latitude, adhanSettings.longitude)\r\n .then(function(result) {\r\n adhanSettings.timezoneid = result.timeZoneId;\r\n });\r\n\r\n }\r\n };\r\n\r\n $scope.$watch('adhanSettings.streetnumber.components.location.lat', $scope.setAddressAndGetTimeZone);\r\n\r\n function setFajrAngles(calcType) {\r\n if (calcType == mgmtConstants.adhanCalculationTypes[6].value) {\r\n\r\n adhanSettings.fajrAngleInput.enable(true);\r\n adhanSettings.ishAangleInput.enable(true);\r\n } else {\r\n adhanSettings.fajrAngleInput.enable(false);\r\n adhanSettings.ishAangleInput.enable(false);\r\n }\r\n }\r\n\r\n adhanSettings.denominationDropDownOptions = {\r\n dataSource: mgmtConstants.denominationTypes,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: adhanSettings.denominationtype\r\n }\r\n adhanSettings.adhanCalcTypeDropDownOptions = {\r\n dataSource: mgmtConstants.adhanCalculationTypes,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: adhanSettings.adhancalculationtype\r\n //change: function() {\r\n \r\n // var calcType = adhanSettings.adhanCalcTypeDropDown.value();\r\n // // setFajrAngles(calcType);\r\n // //if (calcType == mgmtConstants.adhanCalculationTypes[7].value) {\r\n \r\n // // adhanSettings.fajrAngleInput.enable(true);\r\n // // adhanSettings.ishAangleInput.enable(true);\r\n // //} else {\r\n // // adhanSettings.fajrAngleInput.enable(false);\r\n // // adhanSettings.ishAangleInput.enable(false);\r\n // //}\r\n //}\r\n }\r\n adhanSettings.juristicTypeDropDownOptions = {\r\n dataSource: mgmtConstants.juristicTypes,\r\n dataTextField: \"text\",\r\n dataValueField: \"value\",\r\n value: adhanSettings.juristictype\r\n }\r\n\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n\r\n angular.module('inspinia').directive('mmaHeader', mmaHeader);\r\n \r\n /* @ngInject */\r\n function mmaHeader(authService, $state, $rootScope) {\r\n var directive = {\r\n link: link,\r\n templateUrl: 'app/widgets/mmaHeader.html',\r\n bindToController: true,\r\n controller: mmaHeaderController,\r\n controllerAs: 'vm',\r\n restrict: 'E',\r\n };\r\n return directive;\r\n };\r\n\r\n function link(scope, $element, attrs) {\r\n scope.showHelpContent = true;\r\n scope.toggleHelpContent = function () {\r\n scope.showHelpContent = !scope.showHelpContent;\r\n var helpContent = $element.find('#help-content');\r\n if (helpContent) {\r\n var duration = 400;\r\n if (scope.showHelpContent) {\r\n helpContent.slideDown(duration);\r\n } else {\r\n helpContent.slideUp(duration);\r\n }\r\n }\r\n }\r\n };\r\n \r\n /* @ngInject */\r\n function mmaHeaderController(authService, $rootScope) {\r\n var vm = this;\r\n vm.isAuthenticated = authService.isAuthenticated();\r\n\r\n function init() {\r\n vm.pageTitle = $rootScope.$state.current.data.pageTitle;\r\n vm.bannerText = '';\r\n vm.year = '';\r\n if ($rootScope.$state.params.selectedDate) {\r\n var displayMonth = $rootScope.$state.current.name !== 'management.salahTimes.jummah';\r\n if (displayMonth) {\r\n vm.bannerText = ': ' + $rootScope.$state.params.selectedDate.format('MMMM');\r\n } else {\r\n vm.bannerText = ': ';\r\n }\r\n vm.year = $rootScope.$state.params.selectedDate.year();\r\n\r\n } else if ($rootScope.$state.params.bannerText) {\r\n vm.bannerText = ': ' + $rootScope.$state.params.bannerText;\r\n }\r\n vm.pageHelp = $rootScope.$state.current.data.pageHelp;\r\n\r\n vm.showHelpIcon = $rootScope.$state.current.data.pageHelp && $rootScope.$state.current.data.pageHelp.length > 0;\r\n };\r\n\r\n $rootScope.$on('$stateChangeSuccess',\r\n function (event, toState, toParams, fromState, fromParams) {\r\n if (fromState.name !== toState.name) {\r\n init();\r\n }\r\n });\r\n\r\n $rootScope.$on('mma-bannerText-changed', function () {\r\n init();\r\n });\r\n\r\n init();\r\n };\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('inspinia')\r\n .directive('mmaGridActions', mmaGridActions);\r\n\r\n /* @ngInject */\r\n function mmaGridActions() {\r\n var directive = {\r\n bindToController: true,\r\n controller: mmaGridActionsController,\r\n controllerAs: 'vm',\r\n templateUrl: 'app/widgets/mmaGridActions.html',\r\n restrict: 'E',\r\n scope: {\r\n save: '&',\r\n cancel: '&',\r\n reload: '&',\r\n mindate: '=',\r\n maxdate: '=',\r\n timetype: '=',\r\n yearsdatasource: '=',\r\n allowedit: '&',\r\n createnext: '&'\r\n }\r\n };\r\n return directive;\r\n };\r\n\r\n /* @ngInject */\r\n function mmaGridActionsController($scope, kendoService, dateService, $state, moment,\r\n spinnerService, mgmtConstants, $rootScope, $window, $timeout, kendo) {\r\n var vm = this;\r\n vm.disableEditButton = true;\r\n\r\n vm.defaultView = function () {\r\n vm.isDefault = true;\r\n vm.isEditGrid = false;\r\n vm.isAddMonth = false;\r\n vm.isLoading = false;\r\n };\r\n\r\n vm.editGrid = function () {\r\n if (!vm.isLoading) {\r\n vm.allowedit({ allow: true });\r\n\r\n vm.isDefault = false;\r\n vm.isEditGrid = true;\r\n vm.isAddMonth = false;\r\n vm.saveText = \"Save\";\r\n }\r\n };\r\n vm.addNextMonth = function () {\r\n if (!vm.isLoading) {\r\n vm.isDefault = false;\r\n vm.isEditGrid = false;\r\n vm.isAddMonth = true;\r\n vm.saveText = \"Create\";\r\n }\r\n };\r\n\r\n vm.addTimes = function () {\r\n if (!vm.isLoading) {\r\n vm.isDefault = false;\r\n vm.isEditGrid = false;\r\n vm.isAddMonth = true;\r\n }\r\n };\r\n\r\n vm.cancelEdit = function () {\r\n vm.allowedit({ allow: false });\r\n vm.cancel();\r\n vm.defaultView();\r\n };\r\n\r\n vm.saveOrAdd = function () {\r\n if (!vm.isLoading) {\r\n vm.isLoading = true;\r\n if (vm.isEditGrid) {\r\n vm.save();\r\n } else if (vm.isAddMonth) {\r\n vm.createnext({ nextMonth: vm.nextMonthToCreate });\r\n }\r\n }\r\n };\r\n\r\n vm.addJummahTimes = function () {\r\n if (!vm.isLoading) {\r\n vm.isLoading = true;\r\n vm.createnext({ nextYear: vm.nextYearToCreate });\r\n }\r\n }\r\n\r\n var setEditButonState = function () {\r\n var selectedDate = $state.params.selectedDate;// moment($state.selectedDate.year + '-' + $state.params.month + '-01');\r\n var today = moment();\r\n if (selectedDate.month() === today.month() && selectedDate.year() === today.year()) {\r\n vm.disableEditButton = false;\r\n }\r\n else if (selectedDate.isAfter(today)) {\r\n vm.disableEditButton = false;\r\n }\r\n else {\r\n vm.disableEditButton = true;\r\n }\r\n };\r\n\r\n function setNextMonthToCreate() {\r\n if ($state.params.selectedDate) {\r\n var thisMonth = moment();\r\n var maxDate = moment(vm.maxdate);\r\n\r\n if (maxDate.month() === thisMonth.month()) {\r\n vm.nextMonthToCreate = moment().add(1,'months');\r\n }\r\n else if (maxDate.isAfter(thisMonth)) {\r\n vm.nextMonthToCreate = maxDate.add(1,'months');\r\n }\r\n else {\r\n vm.nextMonthToCreate = moment();\r\n }\r\n\r\n if ($state.params.selectedDate.year() >= moment(vm.maxdate).year() && $state.params.selectedDate.month() >= moment(vm.maxdate).month()) {\r\n vm.disableNextMonthToCreate = false;\r\n } else {\r\n vm.disableNextMonthToCreate = true;\r\n }\r\n }\r\n };\r\n var reloadData = function () {\r\n spinnerService.show();\r\n vm.reload()\r\n .then(function () {\r\n $rootScope.$broadcast('mma-bannerText-changed');\r\n setEditButonState();\r\n })\r\n .finally(function () {\r\n spinnerService.hide();\r\n });;\r\n };\r\n var getDefaultSelectedDate = function (maxDate) {\r\n var defaultDate = $state.params.selectedDate;\r\n if (moment(maxDate).isBefore($state.params.selectedDate)) {\r\n defaultDate = moment(maxDate);\r\n kendoService.setSelectedDate(defaultDate);\r\n setNextMonthToCreate();\r\n $rootScope.$broadcast('mma-bannerText-changed');\r\n }\r\n\r\n return defaultDate.format('MM') + ' ' + defaultDate.format('YYYY');\r\n };\r\n vm.monthSelectorOptions =\r\n kendoService.monthSelectorOptions(\r\n {\r\n value: getDefaultSelectedDate(vm.maxdate),\r\n min: vm.mindate,\r\n max: vm.maxdate\r\n }\r\n ,\r\n function () {\r\n if (kendo.toString(this.value(), 'd')) {\r\n var selectedDate = dateService.removeTimeZone(kendo.toString(this.value(), 'd'));\r\n kendoService.setSelectedDate(selectedDate);\r\n setNextMonthToCreate();\r\n reloadData();\r\n }\r\n }\r\n );\r\n\r\n vm.showDatePicker = function () {\r\n return vm.timetype === mgmtConstants.timeType.adhanIqamahTimes;\r\n };\r\n vm.showYearDropDown = function () {\r\n return vm.timetype === mgmtConstants.timeType.jummahTimes;\r\n };\r\n vm.selectedYear = function () {\r\n return $rootScope.$state.params.selectedDate.year();\r\n };\r\n vm.jummhYearSelect = function (e) {\r\n var selectedYear = parseInt(e.item.text());\r\n kendoService.setSelectedDate(moment(selectedYear + '-12-31'));\r\n reloadData();\r\n };\r\n\r\n $rootScope.$on('mma-grid-save-success', function (event, data) {\r\n $timeout(function () {\r\n vm.defaultView();\r\n setEditButonState();\r\n }, 1000);\r\n });\r\n $rootScope.$on('mma-grid-save-error', function (event, data) {\r\n vm.isLoading = false;\r\n });\r\n\r\n vm.defaultView();\r\n setEditButonState();\r\n setNextMonthToCreate();\r\n };\r\n})();\n(function () {\r\n 'use strict';\r\n \r\n angular.module('inspinia').directive('mmaExport', mmaExport);\r\n \r\n /* @ngInject */\r\n function mmaExport(kendoService) {\r\n var directive = {\r\n restrict: 'AE',\r\n templateUrl: 'app/widgets/mmaExport.html',\r\n scope: {\r\n grid: '=',\r\n isLoading: '='\r\n },\r\n /* @ngInject */\r\n controller: function ($scope, $element) {\r\n $scope.exportToExcel = function () {\r\n if (!$scope.isLoading) {\r\n kendoService.exportToExcel($scope.grid);\r\n }\r\n };\r\n $scope.exportToPDF = function () {\r\n if (!$scope.isLoading) {\r\n kendoService.exportToPDF($scope.grid);\r\n }\r\n }\r\n }\r\n };\r\n\r\n return directive;\r\n };\r\n})();\n(function () {\r\n 'use strict';\r\n \r\n angular.module('inspinia').directive('mmaCountDown', mmaCountDown);\r\n \r\n /* @ngInject */\r\n function mmaCountDown() {\r\n var directive = {\r\n restrict: 'E',\r\n templateUrl: 'app/widgets/mmaCountDown.html',\r\n link: link,\r\n controller: mmaCountDownController,\r\n controllerAs: 'vm',\r\n bindToController: true,\r\n };\r\n\r\n return directive;\r\n };\r\n \r\n function link($scope, $element, attrs){\r\n\r\n };\r\n /* @ngInject */\r\n function mmaCountDownController($scope, $interval, _){\r\n var vm = this;\r\n vm.countDown = \"Loading...\";\r\n vm.btnCss = \"btn btn-primary btn-outline animated fadeInRight\";\r\n vm.hourGlassCss = \"fa fa-hourglass-start\";\r\n vm.animationCss = \"animated fadeInRight\";\r\n vm.isLoaded = false;\r\n var schedule = 10;\r\n\r\n function displayCountDown(){\r\n var date = moment(),\r\n minutesLeft = (schedule - (date.minute() % schedule)) - 1,\r\n secondsLeft = 60 - date.seconds();\r\n \r\n if(minutesLeft <= 0){\r\n vm.btnCss = \"btn btn-danger btn-outline animated bounce animation-infinite\";\r\n vm.hourGlassCss = \"fa fa-hourglass-end\";\r\n }else{\r\n vm.btnCss = \"btn btn-primary btn-outline animated fadeInRight\";\r\n vm.hourGlassCss = \"fa fa-hourglass-start\";\r\n }\r\n if (secondsLeft < 60) {\r\n vm.countDown = _.padStart(minutesLeft, 2, '0') + ' : ' + _.padStart(secondsLeft, 2, '0');\r\n }\r\n };\r\n \r\n function startTimer(){\r\n $scope.TImer = $interval(function(){\r\n displayCountDown();\r\n vm.isLoaded = true;\r\n },1000);\r\n };\r\n \r\n function stopTimer(){\r\n if(angular.isDefined($scope.Timer)){\r\n $interval.cancel($scope.Timer);\r\n }\r\n };\r\n \r\n \r\n $scope.$on('$destroy', function(e){\r\n stopTimer();\r\n });\r\n \r\n startTimer();\r\n\r\n };\r\n})();\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('inspinia.services',\r\n\t\t[\r\n\t\t\t'inspinia.data',\r\n\t\t\t'blocks.exception',\r\n\t\t\t'blocks.logger'\r\n\t\t]\r\n\t\t);\r\n\r\n})();\n(function () {\r\n 'use script';\r\n\r\n angular.module('inspinia.services')\r\n .factory('volunteerservice', volunteerservice);\r\n \r\n /* @ngInject */\r\n function volunteerservice(authService, $http, dataHelper, dateService) {\r\n var apiRootPath = dataHelper.serverPath() + 'volunteers/';\r\n\r\n var service = {\r\n getVolunteers: getVolunteers,\r\n getVolunteer: getVolunteer,\r\n getAllSkillSets: getAllSkillSets,\r\n updateVolunteer: updateVolunteer,\r\n createVolunteer: createVolunteer,\r\n isValid: isValid,\r\n deleteVolunteer: deleteVolunteer,\r\n getEventVolunteers: getEventVolunteers,\r\n addEventVolunteers: addEventVolunteers,\r\n getTasks: getTasks,\r\n exportToExcel: exportToExcel\r\n };\r\n\r\n return service;\r\n\r\n function getVolunteers() {\r\n return $http\r\n .get(apiRootPath + authService.getUser().masjidID)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function getVolunteer(volunteerId) {\r\n return $http\r\n .get(apiRootPath + 'volunteer/' + volunteerId)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function getAllSkillSets() {\r\n return $http\r\n .get(apiRootPath + 'skillSets/')\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function updateVolunteer(volunteer) {\r\n return $http({\r\n method: 'PUT',\r\n url: apiRootPath + volunteer.volunteerID,\r\n data: volunteer\r\n }).then(dataHelper.sendResponseData);\r\n }\r\n\r\n function createVolunteer(volunteer) {\r\n var user = authService.getUser();\r\n volunteer.masjidID = user.masjidID;\r\n\r\n return $http\r\n .post(apiRootPath, volunteer)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function isValid(volunteer) {\r\n if (volunteer) {\r\n var isValid = true;\r\n\r\n isValid = volunteer.masjidID && volunteer.masjidIDh > 0 &&\r\n volunteer.volunteerFirstName && volunteer.volunteerFirstName.length > 0 &&\r\n volunteer.volunteerLastName && volunteer.volunteerLastName.length > 0 &&\r\n volunteer.volunteerPhone && volunteer.volunteerPhone.length > 0 &&\r\n volunteer.volunteerEmail && volunteer.volunteerEmail.length > 0 &&\r\n volunteer.volunteerSex && volunteer.volunteerSex.length > 0 &&\r\n volunteer.volunteerRegistrationDate && !dateService.hasInvalidDate([volunteer.volunteerRegistrationDate]);\r\n\r\n return isValid;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function deleteVolunteer(volunteerID) {\r\n return $http\r\n .delete(apiRootPath + 'delete/' + volunteerID)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function getEventVolunteers(eventID) {\r\n var user = authService.getUser();\r\n\r\n return $http\r\n .get(dataHelper.serverPath() + 'eventvolunteer/' + user.masjidID + '/' + eventID)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function addEventVolunteers(eventId, eventVolunteers) {\r\n var user = authService.getUser();\r\n \r\n return $http({\r\n method: 'PUT',\r\n url: dataHelper.serverPath() + 'eventvolunteer/' + user.eventId,\r\n data: eventVolunteers\r\n });\r\n }\r\n \r\n function getTasks(masjidId){\r\n return $http\r\n .get(apiRootPath + 'tasks/' + authService.getUser().masjidID)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function exportToExcel() {\r\n var user = authService.getUser();\r\n var downloadUrl = apiRootPath + 'excel/' + user.masjidID;\r\n\r\n return $http.get(downloadUrl, { responseType: 'arraybuffer' })\r\n .then(function (response) {\r\n\r\n var file = new Blob([response.data], { type: 'application/vnd.ms-excel' });\r\n saveAs(file, 'Volunteers.xls');\r\n });\r\n }\r\n };\r\n})();\n(function () {\r\n 'use script';\r\n\r\n angular.module('inspinia.services')\r\n .factory('userService', userService);\r\n\r\n /* @ngInject */\r\n function userService(authService, $http, dataHelper, moment) {\r\n var usersRootPath = dataHelper.serverPath() + 'users/';\r\n var accountsRootPath = dataHelper.serverPath() + 'accounts/';\r\n\r\n var service = {\r\n getUsers: getUsers,\r\n getUser: getUser,\r\n updateUser: updateUser,\r\n createUser: createUser,\r\n deleteUser: deleteUser\r\n }\r\n\r\n return service;\r\n\r\n function getUsers() {\r\n return $http\r\n .get(usersRootPath + authService.getUser().masjidID)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function getUser(id) {\r\n return $http\r\n .get(usersRootPath + authService.getUser().masjidID + '/' + id)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function updateUser(data) {\r\n var user = authService.getUser();\r\n data.masjidID = user.masjidID;\r\n return $http({\r\n method: 'PUT',\r\n url: usersRootPath + data.userId,\r\n data: data\r\n }).then(dataHelper.sendResponseData);\r\n }\r\n\r\n function createUser(data) {\r\n var user = authService.getUser();\r\n data.masjidID = user.masjidID;\r\n data.joinDate = moment().format('YYYY-MM-DD HH:mm:ss');\r\n\r\n return $http\r\n .post(accountsRootPath + 'create/', data)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function deleteUser(id) {\r\n return $http\r\n .delete(usersRootPath + 'delete/' + id);\r\n }\r\n };\r\n})();\n(function () {\r\n 'use script';\r\n\r\n angular.module('inspinia.services')\r\n .factory('styleService', styleService);\r\n\r\n function styleService() {\r\n\r\n var stylesContainer = $('#mma-styleContainer');\r\n\r\n var service = {\r\n setStyle: setStyle\r\n }\r\n\r\n return service;\r\n\r\n\r\n function setStyle(settings) {\r\n\r\n settings.padding = settings.padding || 8;\r\n var style = '';\r\n\r\n settings.cssClass = \"table table-hover\";\r\n if (settings.stripped && settings.bordered) {\r\n settings.cssClass += \" table-striped table-bordered\";\r\n }\r\n else if (settings.stripped) {\r\n settings.cssClass += \" table-striped\";\r\n }\r\n else if (settings.bordered) {\r\n settings.cssClass += \" table-bordered\";\r\n }\r\n \r\n stylesContainer = $('#mma-styleContainer');\r\n \r\n stylesContainer.html('');\r\n \r\n //console.log(style);\r\n stylesContainer.append(style);\r\n }\r\n }\r\n\r\n})();\n(function () {\r\n 'use script';\r\n\r\n angular.module('inspinia.services')\r\n .factory('salahTimesService', salahTimesService);\r\n \r\n /* @ngInject */\r\n function salahTimesService(moment, kendoService, dateService, authService, $state, $http, dataHelper, mgmtConstants, $log, _) {\r\n\r\n var minDate, maxDate, _salahTimes = 'salahTimes', _timeType;\r\n\r\n function getDateRequestParams(date) {\r\n return {\r\n masjidID: authService.getUser().masjidID,\r\n year: date.year(),\r\n month: date.month() + 1\r\n }\r\n };\r\n\r\n var service = {\r\n getMonthTimes: getMonthTimes,\r\n updateAdhanIqamah: updateAdhanIqamah,\r\n saveJummah: saveJummah,\r\n createAdhanIqamah: createAdhanIqamah,\r\n configureGrid: configureGrid,\r\n selectCurrentDate: selectCurrentDate,\r\n getMinDate: getMinDate,\r\n getMaxDate: getMaxDate,\r\n setGridColumns: setGridColumns,\r\n removeTimeZones: removeTimeZones,\r\n areTimesValid: areTimesValid,\r\n formatDates: formatDates,\r\n timeEditor: timeEditor,\r\n reloadAdhanIqamahPage: reloadAdhanIqamahPage,\r\n setTimeType: setTimeType,\r\n getReadOnlyTimes: getReadOnlyTimes\r\n };\r\n\r\n return service;\r\n\r\n function getMonthTimes(selectedDate) {\r\n \r\n var params = getDateRequestParams(selectedDate || $state.params.selectedDate);\r\n if (getTimeType() == mgmtConstants.timeType.adhanIqamahTimes) {\r\n return $http\r\n .get(dataHelper.serverPath() + _salahTimes +\r\n '/AdhanIqamahTimes/' + params.masjidID + '/' + params.year + '/' + params.month)\r\n .then(dataHelper.sendResponseData);\r\n } else if (getTimeType() == mgmtConstants.timeType.jummahTimes) {\r\n // $log.debug('Getting Jummah Times : ' + params.year + ' ' + params.month);\r\n return $http\r\n .get(dataHelper.serverPath() + _salahTimes +\r\n '/JummahTimesAndKhateeb/' + params.masjidID + '/' + params.year)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n return null;\r\n };\r\n\r\n function updateAdhanIqamah(models) {\r\n return $http({\r\n method: 'PUT',\r\n url: dataHelper.serverPath() + _salahTimes + '/updateAdhanIqamahTimes',\r\n data: models\r\n });\r\n };\r\n function getReadOnlyTimes(id, code) {\r\n return $http\r\n .get(dataHelper.serverPath() +_salahTimes + '/mobile/salahJummahTimes/' +id + '/' +code)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n function saveJummah(models){\r\n return $http.post(dataHelper.serverPath() + _salahTimes + '/addUpdateJummahKhateebTimes', models);\r\n }\r\n function createAdhanIqamah(numberOfMonths, masjidSettings) {\r\n var createAdhanTimeModel = {\r\n masjidId: authService.getUser().masjidID,\r\n numberOfMonths: numberOfMonths,\r\n masjidSettings: masjidSettings\r\n };\r\n\r\n return $http\r\n .post(dataHelper.serverPath() + _salahTimes\r\n + '/createAdhanIqamah/', createAdhanTimeModel)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function configureGrid(mainGridOptions, gridColumns, dateFormats) {\r\n //Show hide columns\r\n if (getTimeType() == mgmtConstants.timeType.adhanIqamahTimes) {\r\n var user = authService.getUser();\r\n if (user) {\r\n if (user.halfNight == true) {\r\n mainGridOptions.columns.push({ field: gridColumns.halfNight, title: 'Half Night', format: dateFormats.time, width: \"70px\", editor: timeEditor(), attributes: { class: \"editable-cell\" } });\r\n }\r\n if (user.tahajud == true) {\r\n mainGridOptions.columns.push({ field: gridColumns.tahajud, title: 'Tahajud', format: dateFormats.time, width: \"70px\", editor: timeEditor(), attributes: { class: \"editable-cell\" } });\r\n }\r\n }\r\n }\r\n\r\n kendoService.configureGrid(mainGridOptions);\r\n }\r\n function selectCurrentDate(grid) {\r\n kendoService.selectCurrentDate(grid);\r\n }\r\n function getMinDate(minAvailableDate) {\r\n minDate = moment(minAvailableDate);\r\n //minDate = new Date(minDate.getFullYear(), minDate.getMonth(), 1);\r\n return new Date(minDate.year(), minDate.month(), 1);;\r\n }\r\n function getMaxDate(maxAvailableDate) {\r\n maxDate = moment(maxAvailableDate);\r\n // if(maxDate.isBefore(moment())){\r\n // maxDate = moment();\r\n // }\r\n //maxDate = new Date(maxDate.year(), maxDate.month, 1);\r\n return new Date(maxDate.year(), maxDate.month(), 1);\r\n }\r\n function setGridColumns(gridColumns) {\r\n if (getTimeType() == mgmtConstants.timeType.adhanIqamahTimes) {\r\n \r\n dateService.setGridColumns(_.without(_.keys(gridColumns),\r\n gridColumns.adhanTimeID,\r\n gridColumns.iqamahTimeID));\r\n \r\n } else if (getTimeType() == mgmtConstants.timeType.jummahTimes) {\r\n \r\n dateService.setGridColumns(_.without(_.keys(gridColumns),\r\n gridColumns.jummahTimesAndKhateebID, gridColumns.month));\r\n \r\n }\r\n }\r\n function removeTimeZones(times) {\r\n _.each(times, function (model) {\r\n dateService.removeTimeZones(model);\r\n });\r\n }\r\n function areTimesValid(times, columns) {\r\n var isValid = false;\r\n\r\n if (getTimeType() == mgmtConstants.timeType.adhanIqamahTimes) {\r\n isValid = !_.some(times, function (model) {\r\n return dateService.hasInvalidDate([\r\n model.fajrAdhanTime,\r\n //model.sunriseTime,\r\n model.duhrAdhanTime,\r\n model.asrAdhanTime,\r\n model.maghribAdhanTime,\r\n model.ishaAdhanTime,\r\n model.fajrIqamahTime,\r\n model.duhrIqamahTime,\r\n model.asrIqamahTime,\r\n model.maghribIqamahTime,\r\n model.ishaIqamahTime\r\n ]);\r\n });\r\n }\r\n else if (getTimeType() == mgmtConstants.timeType.jummahTimes) {\r\n isValid = !_.some(times, function (model) {\r\n var timesToValidate = [model.firstJummahAdhan, model.firstJummahIqamah];\r\n \r\n if ((model.secondJummahAdhan && model.secondJummahAdhan != null && model.secondJummahAdhan != \"\") ||\r\n (model.secondJummahIqamah && model.secondJummahIqamah != null && model.secondJummahIqamah != \"\")) {\r\n timesToValidate = [model.firstJummahAdhan, model.firstJummahIqamah, model.secondJummahIqamah, model.secondJummahIqamah];\r\n }\r\n var isInvalid = dateService.hasInvalidDate(timesToValidate);\r\n \r\n isInvalid = isInvalid || model.firstJummahKhateeb == null || model.firstJummahKhateeb.length == 0;\r\n //isInvalid = isInvalid || model.secondJummahKhateeb == null || model.secondJummahKhateeb.length == 0;\r\n return isInvalid;\r\n });\r\n }\r\n\r\n return isValid;\r\n }\r\n function formatDates(times) {\r\n _.each(times, function (model) {\r\n dateService.formatDates(model);\r\n });\r\n }\r\n function timeEditor() {\r\n if (getTimeType() == mgmtConstants.timeType.adhanIqamahTimes) {\r\n return dateService.timeEditor;\r\n }else if(getTimeType() == mgmtConstants.timeType.jummahTimes){\r\n return dateService.jummahTimeEditor;\r\n }\r\n }\r\n\r\n function reloadAdhanIqamahPage() {\r\n $state.go('management.salahTimes.adhanIqamah', { selectedDate: moment.utc().startOf('month'), monthName: moment.utc().format('MMMM') }, {\r\n reload: true\r\n });\r\n }\r\n\r\n function setTimeType(timeType) {\r\n _timeType = timeType;\r\n }\r\n function getTimeType() {\r\n return _timeType || mgmtConstants.timeType.adhanIqamahTimes;\r\n }\r\n };\r\n})();\n(function () {\r\n 'use script';\r\n\r\n angular.module('inspinia.services')\r\n .factory('ramadanService', ramadanService);\r\n \r\n /* @ngInject */\r\n function ramadanService(authService, $http, dataHelper, moment, dateService) {\r\n var apiRootPath = dataHelper.serverPath() + 'ramadan/';\r\n\r\n var service = {\r\n getTimes: getTimes,\r\n updateTimes: updateTimes,\r\n addTimes: addTimes,\r\n deleteTimes: deleteTimes\r\n };\r\n\r\n return service;\r\n\r\n function getTimes() {\r\n return $http\r\n .get(apiRootPath + authService.getUser().masjidID)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function updateTimes(model) {\r\n var user = authService.getUser();\r\n model.modifiedBy = user.id;\r\n model.modifiedDate = dateService.formatDate(moment());\r\n model.masjidId = user.masjidID;\r\n formatDates(model);\r\n\r\n return $http({\r\n method: 'PUT',\r\n url: apiRootPath + model.masjidId,\r\n data: model\r\n });\r\n }\r\n\r\n function addTimes(model) {\r\n var user = authService.getUser();\r\n model.createdDate = dateService.formatDate(moment());\r\n model.createdBy = user.id;\r\n model.masjidId = user.masjidID;\r\n formatDates(model);\r\n\r\n return $http\r\n .post(apiRootPath, model)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function deleteTimes() {\r\n var user = authService.getUser();\r\n return $http\r\n .get(apiRootPath + 'delete/' + user.masjidID);\r\n }\r\n\r\n function formatDates(model) {\r\n //model.taraweehTime = dateService.formatDate(moment(model.taraweehTime));\r\n model.khatam = dateService.formatDate(moment(model.khatam));\r\n model.eidDate = dateService.formatDate(moment(model.eidDate));\r\n // model.eidFirstSalahTime = dateService.formatDate(moment(model.eidFirstSalahTime));\r\n //model.eidSecondSalahTime = dateService.formatDate(moment(model.eidSecondSalahTime));\r\n }\r\n };\r\n})();\n(function () {\r\n 'use script';\r\n\r\n angular.module('inspinia.services')\r\n .factory('prayerTimesService', prayerTimesService);\r\n\r\n /* @ngInject */\r\n function prayerTimesService() {\r\n\r\n var service = {\r\n bindPrayerTimes: bindPrayerTimes\r\n };\r\n\r\n return service;\r\n\r\n function bindPrayerTimes($scope, vm, masjid, prayerTimes) {\r\n vm.stripped = true;\r\n vm.width = masjid.publicSalahTimesStyle.width;\r\n vm.height = masjid.publicSalahTimesStyle.height;\r\n vm.countDownFontSize = masjid.publicSalahTimesStyle.countDownFontSize;\r\n vm.prayerTimesFontSize = masjid.publicSalahTimesStyle.prayerTimesFontSize;\r\n vm.buttonFontSize = masjid.publicSalahTimesStyle.buttonFontSize;\r\n vm.padding = masjid.publicSalahTimesStyle.padding;\r\n vm.bordered = masjid.publicSalahTimesStyle.bordered;\r\n vm.showCountDown = masjid.publicSalahTimesStyle.showCountDown;\r\n //vm.showDownload = masjid.publicSalahTimesStyle.showDownload;\r\n vm.showDownload = false;\r\n vm.fontColor = masjid.publicSalahTimesStyle.fontColor;\r\n vm.borderColor = masjid.publicSalahTimesStyle.borderColor;\r\n vm.rowColor = masjid.publicSalahTimesStyle.rowColor;\r\n vm.hoverColor = masjid.publicSalahTimesStyle.hoverColor;\r\n vm.headerColor = masjid.publicSalahTimesStyle.headerColor;\r\n vm.altRowColor = masjid.publicSalahTimesStyle.altRowColor;\r\n vm.fontStyle = masjid.publicSalahTimesStyle.fontStyle;\r\n vm.backgroundColor = masjid.publicSalahTimesStyle.backgroundColor;\r\n vm.buttonColor = masjid.publicSalahTimesStyle.buttonColor;\r\n vm.showJummah1 = masjid.publicSalahTimesStyle.showJummah1;\r\n vm.showJummah2 = masjid.publicSalahTimesStyle.showJummah2;\n vm.showJummah3 = masjid.publicSalahTimesStyle.showJummah3;\r\n vm.showTaraweeh = masjid.publicSalahTimesStyle.showTaraweeh;\r\n vm.prayerTimes = prayerTimes;\r\n window.setTimeout(function () {\r\n $scope.$broadcast('timer-set-countdown-seconds', vm.prayerTimes.secondsInCountDown - 1);\r\n //$scope.$broadcast('timer-set-countdown-seconds', 10);\r\n $scope.$broadcast('timer-start');\r\n vm.countDownReady = true;\r\n }, 1000);\r\n }\r\n };\r\n})();\n\n(function () {\r\n 'use script';\r\n\r\n angular.module('inspinia.services')\r\n .factory('notificationsService', notificationsService);\r\n \r\n /* @ngInject */\r\n function notificationsService(authService, $http, dataHelper, moment, dateService) {\r\n var apiRootPath = dataHelper.serverPath() + 'pushNotifications/';\r\n\r\n var service = {\r\n getPushNotifications: getPushNotifications,\r\n updatePushNotification: updatePushNotification,\r\n createPushNotification: createPushNotification,\r\n isValid: isValid,\r\n deletePushNotification: deletePushNotification\r\n };\r\n\r\n return service;\r\n\r\n function getPushNotifications() {\r\n return $http\r\n .get(apiRootPath + authService.getUser().masjidID)\r\n .then(dataHelper.sendResponseData);\r\n };\r\n\r\n function updatePushNotification(data) {\r\n return $http({\r\n method: 'PUT',\r\n url: apiRootPath + data.pushNotificationID,\r\n data: data\r\n });\r\n };\r\n\r\n function createPushNotification(data) {\r\n var user = authService.getUser();\r\n data.masjidID = user.masjidID;\r\n data.createdBy = user.id;\r\n data.createdDate = dateService.formatDate(moment());\r\n\r\n data.scheduledDate = dateService.formatDate(moment(data.scheduledDate));\r\n\r\n data.scheduledTime = dateService.formatDate(moment(data.scheduledTime));\r\n\r\n return $http\r\n .post(apiRootPath, data)\r\n .then(dataHelper.sendResponseData);\r\n };\r\n\r\n function isValid(data) {\r\n if (data) {\r\n var isValid = true;\r\n\r\n isValid = data.pushNotificationMessage && data.pushNotificationMessage.length > 0;\r\n isValid = isValid && (data.pushNotificationStatusTypeID && data.pushNotificationStatusTypeID > 0);\r\n\r\n return isValid;\r\n }\r\n };\r\n\r\n function deletePushNotification(pushNotificationID) {\r\n return $http\r\n .get(apiRootPath + 'delete/' + pushNotificationID);\r\n };\r\n };\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular.module('inspinia.services').factory('spinnerService', spinnerService);\r\n \r\n /* @ngInject */\r\n function spinnerService() {\r\n var spinners = {}, spinnerName = 'spinner-wrapper';\r\n return {\r\n _register: function (data) {\r\n if (!data.hasOwnProperty('name')) {\r\n throw new Error(\"Spinner must specify a name when registering with the spinner service.\");\r\n }\r\n if (spinners.hasOwnProperty(data.name)) {\r\n throw new Error(\"A spinner with the name '\" + data.name + \"' has already been registered.\");\r\n }\r\n spinners[data.name] = data;\r\n },\r\n _unregister: function (name) {\r\n if (spinners.hasOwnProperty(name)) {\r\n delete spinners[name];\r\n }\r\n },\r\n _unregisterGroup: function (group) {\r\n for (var name in spinners) {\r\n if (spinners[name].group === group) {\r\n delete spinners[name];\r\n }\r\n }\r\n },\r\n _unregisterAll: function () {\r\n for (var name in spinners) {\r\n delete spinners[name];\r\n }\r\n },\r\n show: function (spinnerText, delay) {\r\n var spinner = spinners[spinnerName];\r\n if (!spinner) {\r\n return;\r\n //throw new Error(\"No spinner named '\" + name + \"' is registered.\");\r\n }\r\n spinner.showSpinner((spinnerText || \"Loading\"), delay);\r\n },\r\n showByName: function (name, spinnerText, delay) {\r\n var spinner = spinners[name];\r\n if (!spinner) {\r\n return;\r\n //throw new Error(\"No spinner named '\" + name + \"' is registered.\");\r\n }\r\n spinner.showSpinner((spinnerText || \"Loading\"), delay);\r\n },\r\n showSuccess: function (name) {\r\n var spinner = spinners[name ||spinnerName];\r\n if (!spinner) {\r\n return;\r\n //throw new Error(\"No spinner named '\" + name + \"' is registered.\");\r\n }\r\n spinner.showSuccess();\r\n },\r\n hide: function (name) {\r\n var spinner = spinners[name || spinnerName];\r\n if (!spinner) {\r\n return;\r\n //throw new Error(\"No spinner named '\" + name + \"' is registered.\");\r\n }\r\n spinner.hideSpinner();\r\n },\r\n hideByName: function (name) {\r\n var spinner = spinners[name];\r\n if (!spinner) {\r\n return;\r\n //throw new Error(\"No spinner named '\" + name + \"' is registered.\");\r\n }\r\n spinner.hideSpinner();\r\n },\r\n showError: function () {\r\n var spinner = spinners[spinnerName];\r\n if (!spinner) {\r\n return;\r\n //throw new Error(\"No spinner named '\" + name + \"' is registered.\");\r\n }\r\n spinner.showError();\r\n },\r\n showGroup: function (group) {\r\n var groupExists = false;\r\n for (var name in spinners) {\r\n var spinner = spinners[name];\r\n if (spinner.group === group) {\r\n spinner.showSpinner();\r\n groupExists = true;\r\n }\r\n }\r\n if (!groupExists) {\r\n throw new Error(\"No spinners found with group '\" + group + \"'.\")\r\n }\r\n },\r\n hideGroup: function (group) {\r\n var groupExists = false;\r\n for (var name in spinners) {\r\n var spinner = spinners[name];\r\n if (spinner.group === group) {\r\n spinner.hideSpinner();\r\n groupExists = true;\r\n }\r\n }\r\n if (!groupExists) {\r\n throw new Error(\"No spinners found with group '\" + group + \"'.\")\r\n }\r\n },\r\n showAll: function () {\r\n for (var name in spinners) {\r\n spinners[name].showSpinner();\r\n }\r\n },\r\n hideAll: function () {\r\n for (var name in spinners) {\r\n spinners[name].hideSpinner();\r\n }\r\n }\r\n };\r\n }\r\n\r\n\r\n})();\n(function () {\r\n 'use script';\r\n\r\n angular.module('inspinia.services')\r\n .factory('memberService', memberService);\r\n\r\n /* @ngInject */\r\n function memberService(authService, $http, dataHelper, moment,$q) {\r\n var apiRootPath = dataHelper.serverPath() + 'members/';\r\n\r\n var service = {\r\n getMembers: getMembers,\r\n getMember: getMember,\r\n updateMember: updateMember,\r\n createMember: createMember,\r\n deleteMember: deleteMember,\r\n exportToExcel: exportToExcel\r\n }\r\n\r\n return service;\r\n\r\n function getMembers() {\r\n return $http\r\n .get(apiRootPath + authService.getUser().masjidID)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function getMember(id) {\r\n return $http\r\n .get(apiRootPath + 'member/' + id)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function updateMember(member) {\r\n return $http({\r\n method: 'PUT',\r\n url: apiRootPath + member.id,\r\n data: member\r\n }).then(dataHelper.sendResponseData);\r\n }\r\n\r\n function createMember(data) {\r\n var user = authService.getUser();\r\n data.masjidID = user.masjidID;\r\n data.memberSince = moment().format('YYYY-MM-DD HH:mm:ss');\r\n\r\n return $http\r\n .post(apiRootPath, data)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function deleteMember(id) {\r\n return $http\r\n .get(apiRootPath + 'delete/' + id)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function exportToExcel() {\r\n var user = authService.getUser();\r\n var downloadUrl = apiRootPath + 'excel/' + user.masjidID;\r\n\r\n return $http.get(downloadUrl, { responseType: 'arraybuffer' })\r\n .then(function(response) {\r\n\r\n var file = new Blob([response.data], { type: 'application/vnd.ms-excel' });\r\n saveAs(file, 'Members.xls');\r\n });\r\n }\r\n };\r\n})();\n(function () {\r\n 'use script';\r\n\r\n angular.module('inspinia.services')\r\n .factory('masjidservice', masjidservice);\r\n\r\n /* @ngInject */\r\n function masjidservice(authService, $http, dataHelper, moment, googleApiKey, $q) {\r\n var apiRootPath = dataHelper.serverPath() + 'masjid/';\r\n\r\n var service = {\r\n getMasjid: getMasjid,\r\n getMasjidSettings: getMasjidSettings,\r\n getPublicPrayerTimes: getPublicPrayerTimes,\r\n getMasjids: getMasjids,\r\n updateMasjid: updateMasjid,\r\n createMasjid: createMasjid,\r\n isValid: isValid,\r\n deleteMasjid: deleteMasjid,\r\n getTimeZone: getTimeZone,\r\n createAdhanIqamah: createAdhanIqamah,\r\n addReadOnlyLink: addReadOnlyLink,\r\n addMobileApiToken: addMobileApiToken,\r\n addSalahTimesLink: addSalahTimesLink,\r\n savePrayerTimesConfig: savePrayerTimesConfig,\r\n getPrayerTimes: getPrayerTimes,\r\n getHijriAdjustment: getHijriAdjustment\r\n };\r\n\r\n return service;\r\n\r\n function getMasjid(masjidId, withIncludes) {\r\n\r\n masjidId = masjidId || authService.getUser().masjidID;\r\n\r\n withIncludes = withIncludes || false;\r\n\r\n return $http\r\n .get(apiRootPath + masjidId + '/' + withIncludes)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function getPrayerTimes(masjidId) {\r\n masjidId = masjidId || authService.getUser().masjidID;\r\n return $http\r\n .get(apiRootPath + 'prayerTimes/' + masjidId)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n function getPublicPrayerTimes(id, code) {\r\n\r\n return $q.all([\r\n $http.get(apiRootPath + 'publicSettings/' + id + '/' + code).then(dataHelper.sendResponseData),\r\n $http.get(apiRootPath + 'publicPrayerTimes/' + id + '/' + code).then(dataHelper.sendResponseData)\r\n ]).then(function (results) {\r\n return results;\r\n });\r\n }\r\n\r\n function getMasjidSettings(masjidId) {\r\n\r\n masjidId = masjidId || authService.getUser().masjidID;\r\n\r\n return $q.all([\r\n $http.get(apiRootPath + 'settings/' + masjidId).then(dataHelper.sendResponseData),\r\n $http.get(apiRootPath + 'prayerTimes/' + masjidId).then(dataHelper.sendResponseData)\r\n ]).then(function (results) {\r\n return results;\r\n });\r\n //return $http\r\n // .get(apiRootPath + 'settings/' + masjidId)\r\n // .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function getMasjids() {\r\n return $http\r\n .get(apiRootPath + 'allMasjids')\r\n .then(dataHelper.sendResponseData);\r\n }\r\n function getHijriAdjustment(masjidId, adjustMent) {\r\n return $http\r\n .get(apiRootPath + 'hijriAdjustment/' + masjidId + '/' + adjustMent)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n function updateMasjid(masjid) {\r\n var user = authService.getUser();\r\n masjid.modifiedby = user.id;\r\n masjid.modifiedDate = moment().format('YYYY-MM-DD HH:mm:ss');\r\n\r\n return $http({\r\n method: 'PUT',\r\n url: apiRootPath + masjid.masjidID,\r\n data: masjid\r\n });\r\n }\r\n\r\n function createMasjid(masjid) {\r\n masjid.createDate = moment().format('YYYY-MM-DD HH:mm:ss');\r\n\r\n return $http\r\n .post(apiRootPath + 'addMasjid', masjid)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function isValid(masjid) {\r\n if (masjid) {\r\n var isValid = true;\r\n\r\n isValid = masjid.masjidID && masjid.masjidIDh > 0 &&\r\n masjid.masjidName && masjid.masjidName.length > 0 &&\r\n masjid.masjidAddress1 && masjid.masjidAddress1.length > 0 &&\r\n masjid.masjidCity && masjid.masjidCity.length > 0 &&\r\n masjid.masjidState && masjid.masjidState.length > 0 &&\r\n masjid.masjidZip && masjid.masjidZip.length > 0 &&\r\n masjid.masjidMainPhone && masjid.masjidMainPhone.length > 0 &&\r\n masjid.masjidMainEmailAddress && masjid.masjidMainEmailAddress.length > 0 &&\r\n masjid.masjidTimeZone && masjid.masjidTimeZone.length > 0 &&\r\n masjid.denominationTypeID && masjid.denominationTypeID.length > 0 &&\r\n masjid.adhanCalculationTypeID && masjid.adhanCalculationTypeID.length > 0 &&\r\n masjid.juristicMethodTypeID && masjid.juristicMethodTypeID.length > 0 &&\r\n masjid.adhanCalcInAppOrServer && masjid.adhanCalcInAppOrServer.length > 0;\r\n\r\n return isValid;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function deleteMasjid(masjidId) {\r\n return $http\r\n .get(apiRootPath + 'delete/' + masjidId);\r\n }\r\n\r\n function getTimeZone(latitude, longitude, callback) {\r\n var deferred = $q.defer();\r\n var url = 'https://maps.googleapis.com/maps/api/timezone/json?location=' + latitude + ',' + longitude + '×tamp=' + moment().unix() + '&key=AIzaSyDyLlooPN8ZferL--9HO4EIZC6cr61YYlA';\r\n $.ajax(url, {\r\n success: function (response) {\r\n deferred.resolve(response);\r\n },\r\n error: function (error) {\r\n deferred.reject(error);\r\n }\r\n });\r\n return deferred.promise;\r\n }\r\n\r\n\r\n function createAdhanIqamah(createTimesModel) {\r\n\r\n return $http\r\n .post(apiRootPath + '/createAdhanIqamah/', createTimesModel)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function addReadOnlyLink() {\r\n return $http\r\n .get(apiRootPath + 'addReadOnlyLink/' + authService.getUser().masjidID)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function addMobileApiToken() {\r\n return $http\r\n .get(apiRootPath + 'addMobileApiToken/' + authService.getUser().masjidID)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function addSalahTimesLink() {\r\n return $http\r\n .get(apiRootPath + 'addSalahTimesLink/' + authService.getUser().masjidID)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function savePrayerTimesConfig(publicSalahTimesStyle) {\r\n return $http\r\n .post(apiRootPath + 'savePublicSalahTimesStyle/' + authService.getUser().masjidID, publicSalahTimesStyle)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n };\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular.module('inspinia.services')\r\n .factory('liveBroadcastService', liveBroadcastService);\r\n\r\n function liveBroadcastService(authService, $http, dataHelper) {\r\n var apiRootPath = dataHelper.serverPath() + 'liveBroadcast/';\r\n\r\n var service = {\r\n getLiveBroadcasts: getLiveBroadcasts,\r\n createLiveBroadcast: createLiveBroadcast\r\n };\r\n\r\n return service;\r\n\r\n function getLiveBroadcasts() {\r\n return $http\r\n .get(apiRootPath + authService.getUser().masjidID)\r\n .then(dataHelper.sendResponseData);\r\n };\r\n\r\n function createLiveBroadcast(data) {\r\n var user = authService.getUser();\r\n data.masjidID = user.masjidID;\r\n data.createdBy = user.id;\r\n\r\n return $http\r\n .post(apiRootPath, data)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n }\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular.module('inspinia.services')\r\n .factory('kendoService', kendoService);\r\n\r\n /* @ngInject */\r\n function kendoService(dataHelper, $state, logger, authService, mgmtConstants, $timeout, moment,kendo,spinnerService, _) {\r\n var exportFileUrl = dataHelper.serverPath() + 'saveFile/post';\r\n\r\n var service = {\r\n excelOptions: excelOptions,\r\n pdfOptions: pdfOptions,\r\n exportToPDF: exportToPdf,\r\n exportToExcel: exportToExcel,\r\n monthSelectorOptions: monthSelectorOptions,\r\n gridDataBound: gridDataBound,\r\n selectCurrentDate: selectCurrentDate,\r\n editGrid: editGrid,\r\n configureGrid: configureGrid,\r\n setSelectedDate: setSelectedDate,\r\n getDataModel: getDataModel,\r\n removeGridItem: removeGridItem,\r\n addGridItem: addGridItem\r\n };\r\n\r\n return service;\r\n\r\n function excelOptions(fileName) {\r\n return {\r\n fileName: fileName,\r\n proxyURL: exportFileUrl,\r\n filterable: true\r\n }\r\n }\r\n function pdfOptions(fileName, keywords) {\r\n return {\r\n author: \"Madsolusionz\",\r\n creator: \"Madsolusionz\",\r\n date: new Date(),\r\n fileName: fileName,\r\n keywords: keywords,\r\n landscape: true,\r\n paperSize: \"A4\",\r\n subject: fileName,\r\n title: fileName,\r\n proxyURL: exportFileUrl\r\n }\r\n }\r\n function exportToExcel(grid) {\r\n if (grid) {\r\n grid.saveAsExcel();\r\n logger.info(\"Exported to Excel.\");\r\n }\r\n }\r\n function exportToPdf(grid) {\r\n if (grid) {\r\n grid.saveAsPDF();\r\n logger.info(\"Exporting to PDF.\");\r\n }\r\n }\r\n function monthSelectorOptions(options, changeCallback) {\r\n return {\r\n start: \"year\",\r\n depth: \"year\",\r\n format: \"MM/yyyy\",\r\n parseFormats: [\"MM yyyy\"],\r\n value: options.value,\r\n min: options.min,\r\n max: options.max,\r\n change: changeCallback\r\n }\r\n }\r\n function selectCurrentDate(grid) {\r\n //Select the current date\r\n var todaysData = _.find(grid.dataSource.data(), function (data) {\r\n return data.cssClass === \"editable-cell\";\r\n // var date = data.fromDate || data.jummahDate;\r\n // if (date) {\r\n // var today = moment();\r\n // return date.getMonth() === today.month() && \r\n // date.getDate() === today.date();\r\n // }\r\n });\r\n\r\n if (todaysData) {\r\n grid.editCell(grid.wrapper.find('[data-uid=\"' + todaysData.uid + '\"]').find('td.editable-cell:eq(0)'));\r\n }\r\n }\r\n function editGrid(e) {\r\n var today = moment().subtract('day', 1);\r\n var fromDate = e.model.fromDate || e.model.jummahDate;\r\n if (fromDate && moment(fromDate).isBefore(today)) {\r\n // logger.error('Past times cannot be updated');\r\n this.closeCell();\r\n }\r\n else if (e.sender.options.mma_allowEdit === false) {\r\n // logger.info('Please click the Edit Times button to make changes');\r\n this.closeCell();\r\n }\r\n }\r\n function getDataModel(grid, element) {\r\n var uid = $(element).closest(\"[role='row']\").data('uid');\r\n var dataModel = _.find(grid.dataSource.data(), function (data) {\r\n return data.uid === uid;\r\n });\r\n return dataModel;\r\n }\r\n function removeGridItem(grid, item) {\r\n if (grid) {\r\n grid.dataSource.remove(item);\r\n grid.refresh();\r\n }\r\n }\r\n function addGridItem(grid, item) {\r\n if (grid) {\r\n grid.dataSource.add(item);\r\n grid.refresh();\r\n }\r\n }\r\n function gridDataBound(e) {\r\n var grid = e.sender;\r\n if (grid) {\r\n //No rows template\r\n if (grid.dataSource.total() == 0) {\r\n var colCount = grid.columns.length;\r\n $(grid.wrapper).addClass('k-grid-no-data')\r\n .find('tbody')\r\n .append('There is no data for the selected month.');\r\n }\r\n\r\n //Custom navigation\r\n grid.wrapper.find(\"table\").on('keydown', function (e) {\r\n if (e.keyCode === kendo.keys.TAB) {\r\n var current = grid.current();\r\n if (!current.hasClass(\"editable-cell\")) {\r\n var nextCell;\r\n if (e.shiftKey) {\r\n nextCell = current.prevAll(\".editable-cell\");\r\n if (!nextCell[0]) {\r\n //search the next row\r\n var prevRow = current.parent().prev();\r\n nextCell = prevRow.children(\".editable-cell:last\");\r\n }\r\n } else {\r\n nextCell = current.nextAll(\".editable-cell\");\r\n if (!nextCell[0]) {\r\n //search the next row\r\n var nextRow = current.parent().next();\r\n nextCell = nextRow.children(\".editable-cell:first\");\r\n }\r\n }\r\n grid.current(nextCell);\r\n grid.editCell(nextCell[0]);\r\n }\r\n }\r\n });\r\n\r\n if (grid.options.timeType && grid.options.timeType === mgmtConstants.timeType.jummahTimes) {\r\n grid.hideColumn(0);\r\n }\r\n }\r\n spinnerService.hide();\r\n }\r\n function configureGrid(mainGridOptions) {\r\n if (mainGridOptions) {\r\n\r\n var gridColumns = mgmtConstants.gridColumns[mainGridOptions.timeType];\r\n\r\n mainGridOptions.sortable = true;\r\n mainGridOptions.navigatable = true;\r\n mainGridOptions.editable = true;\r\n mainGridOptions.dataBound = gridDataBound;\r\n mainGridOptions.edit = editGrid;\r\n //mainGridOptions.dataSource.pageSize = mainGridOptions.dataSource.pageSize || 31;\r\n mainGridOptions.dataSource.batch = true;\r\n mainGridOptions.dataSource.schema = {\r\n model: {\r\n id: gridColumns.Id,\r\n fields: mgmtConstants.gridSchema[mainGridOptions.timeType]\r\n }\r\n };\r\n mainGridOptions.excel =\r\n excelOptions(_.capitalize(mainGridOptions.timeType) + '_Times' + $state.params.selectedDate.format('MMMM') + '_' + $state.params.selectedDate.year() + '.xlsx');\r\n mainGridOptions.pdf =\r\n pdfOptions(_.capitalize(mainGridOptions.timeType) + '_Times' + $state.params.selectedDate.format('MMMM') + '_' + $state.params.selectedDate.year + '.pdf', mainGridOptions.timeType);\r\n mainGridOptions.error = function (err) {\r\n throw err;\r\n };\r\n }\r\n }\r\n function setSelectedDate(selectedDate) {\r\n $state.params.monthName = moment(selectedDate).format('MMMM');\r\n $state.params.selectedDate = moment(selectedDate);\r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular.module('inspinia.services')\r\n .factory('fileUploadService', fileUploadService);\r\n\r\n\r\n /* @ngInject */\r\n function fileUploadService(_) {\r\n // var exportFileUrl = dataHelper.serverPath() + 'saveFile/post';\r\n var maxfileSize = 1000; //KB\r\n var maxImaamImage = maxfileSize / 2;\r\n\r\n var service = {\r\n isValidImaamImage: isValidImaamImage\r\n }\r\n\r\n return service;\r\n\r\n function isValidImaamImage(image) {\r\n var isValidSize = maxImaamImage > fileSizeInKb(image);\r\n\r\n var errorMessage = \"\";\r\n if (!isValidSize) {\r\n errorMessage += \"The maximum imaam image size is \" + maxImaamImage + \"KB. \";\r\n }\r\n if (!isValidImageExtension(image)) {\r\n errorMessage += \"Invalid file type. File extension must be .jpg, .img or .gif\";\r\n }\r\n\r\n return {\r\n isValid: errorMessage.length === 0,\r\n message: errorMessage\r\n }\r\n }\r\n\r\n\r\n function fileSizeInKb(file) {\r\n if (file) {\r\n return Math.ceil(file.size / 1024);\r\n }\r\n return 0;\r\n }\r\n\r\n function isValidImageExtension(file) {\r\n if (file) {\r\n return _.endsWith(file.name, '.jpg') ||\r\n _.endsWith(file.name, '.img') ||\r\n _.endsWith(file.name, '.png') ||\r\n _.endsWith(file.name, '.gif') ||\r\n _.endsWith(file.name, '.JPG') ||\r\n _.endsWith(file.name, '.IMG') ||\r\n _.endsWith(file.name, '.PNG') ||\r\n _.endsWith(file.name, '.GIF');\r\n }\r\n\r\n return false;\r\n }\r\n }\r\n})();\n(function() {\r\n 'use strict';\r\n\r\n angular.module('inspinia.services')\r\n .factory('excelService', excelService);\r\n\r\n function excelService(authService, $http, kendo) {\r\n // var exportFileUrl = dataHelper.serverPath() + 'saveFile/post';\r\n\r\n var service = {\r\n exportToExcel: exportToExcel\r\n }\r\n\r\n return service;\r\n\r\n function exportToExcel() {\r\n\r\n }\r\n }\r\n})();\n(function () {\r\n 'use script';\r\n\r\n angular.module('inspinia.services')\r\n .factory('eventsService', eventsService);\r\n\r\n /* @ngInject */\r\n function eventsService(authService, $http, dataHelper, dateService, moment, mgmtConstants, Upload) {\r\n var apiRootPath = dataHelper.serverPath() + 'events/';\r\n\r\n var service = {\r\n getEvents: getEvents,\r\n getEvent: getEvent,\r\n removeEvent: removeEvent,\r\n addEvent: addEvent,\r\n updateEvent: updateEvent,\r\n readUrl: readUrl,\r\n getRecurrenceEndDate: getRecurrenceEndDate,\r\n isValidEndTime: isValidEndTime,\r\n getReadOnlyEvents: getReadOnlyEvents,\r\n getEventRecurrence: getEventRecurrence,\r\n uploadEventPhoto: uploadEventPhoto\r\n };\r\n\r\n return service;\r\n\r\n function getEvents() {\r\n return $http\r\n .get(apiRootPath + authService.getUser().masjidID)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function getEventRecurrence(recurrenceId) {\r\n return $http\r\n .get(apiRootPath + 'recurrenceOptions/' + recurrenceId)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function getReadOnlyEvents(id, code) {\r\n return $http\r\n .get(apiRootPath + 'readonly/' + id + '/' + code)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function getEvent(eventId) {\r\n if (eventId > 0) {\r\n return $http\r\n .get(apiRootPath + authService.getUser().masjidID + '/' + eventId)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n return null;\r\n }\r\n\r\n function removeEvent(eventId, isSeries) {\r\n\r\n return $http\r\n .delete(apiRootPath + authService.getUser().masjidID + '/' + eventId + '/' + isSeries)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function addEvent(event) {\r\n event.start = dateService.formatDate(moment(event.start));\r\n event.end = dateService.formatDate(moment(event.end));\r\n var user = authService.getUser();\r\n event.masjidID = user.masjidID;\r\n event.createdBy = user.id;\r\n event.createDate = moment().format('YYYY-MM-DD HH:mm:ss');\r\n\r\n return $http.post(apiRootPath, event)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function updateEvent(event) {\r\n var user = authService.getUser();\r\n event.start = dateService.formatDate(moment(event.start));\r\n event.end = dateService.formatDate(moment(event.end));\r\n event.modifiedBy = user.id;\r\n\r\n return $http({\r\n method: 'PUT',\r\n url: apiRootPath + event.taskId,\r\n data: event\r\n });\r\n }\r\n\r\n function uploadEventPhoto(event, image) {\r\n return Upload.upload({\r\n url: apiRootPath + 'upload',\r\n file: image,\r\n method: \"POST\",\r\n data: { eventID: event.eventID, masjidID: event.masjidID, start: event.start, end: event.end, eventImageFileName: event.eventImageFileName, origEventImageFileName: event.origEventImageFileName }\r\n });\r\n }\r\n\r\n function readUrl() {\r\n return apiRootPath + authService.getUser().masjidID;\r\n }\r\n\r\n function isValidEndTime(recurrenceTypeId, start, end) {\r\n\r\n var mStart = moment(start),\r\n mEnd = moment(end);\r\n\r\n if (mStart.isSame(mEnd) || mStart.isAfter(mEnd)) {\r\n return { isValidEndDate: false, message: 'End date must be greater than start date' };\r\n }\r\n\r\n if (recurrenceTypeId > 1) {\r\n var maxEndDate = mStart.add('1', mgmtConstants.events.recurrenceTypeValues[recurrenceTypeId]),\r\n endDate = mEnd;\r\n if (endDate.isAfter(maxEndDate)) {\r\n return { isValidEndDate: false, message: 'End date cannot be greater than ' + maxEndDate.format(\"M/D/YYYY H:mm a\") };\r\n }\r\n\r\n // if (moment(recurrEnd).isBefore(endDate)) {\r\n // return { isValidEndDate: false, message: 'End date cannot be after the recurrence end date' };\r\n // }\r\n }\r\n\r\n return { isValidEndDate: true };\r\n }\r\n\r\n function getRecurrenceEndDate(recurrenceType, end, recurrEnd) {\r\n if (moment(recurrEnd).isBefore(moment(end))) {\r\n return moment(end).add('1', recurrenceType).toDate();\r\n }\r\n }\r\n }\r\n\r\n\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular.module('inspinia.services')\r\n .factory('dateService', dateService);\r\n\r\n /* @ngInject */\r\n function dateService(moment, momenttz, authService, kendo, _) {\r\n var gridColumns;\r\n var service = {\r\n timeEditor: timeEditor,\r\n jummahTimeEditor: jummahTimeEditor,\r\n formatDates: formatDates,\r\n formatDate: formatDate,\r\n removeTimeZone: removeTimeZone,\r\n //removeTimeZones: removeTimeZones,\r\n hasInvalidDate: hasInvalidDate,\r\n setGridColumns: setGridColumns,\r\n nodaTimeToDateTime: nodaTimeToDateTime,\r\n getTime: getTime,\r\n timeToDateTime: timeToDateTime,\r\n formatDateMMDDYYYY: formatDateMMDDYYYY\r\n };\r\n\r\n return service;\r\n\r\n function timeChange() {\r\n if (kendo.toString(this.value(), 't')) {\r\n this.element.closest('.editable-cell').removeClass('toast-error');\r\n }\r\n else {\r\n this.element.closest('.editable-cell').addClass('toast-error');\r\n }\r\n }\r\n function timeEditor(container, options) {\r\n $('')\r\n .appendTo(container)\r\n .kendoTimePicker({\r\n change: timeChange\r\n });\r\n //$('').appendTo(container);\r\n }\r\n function jummahTimeEditor(container, options) {\r\n $('')\r\n .appendTo(container)\r\n .kendoTimePicker({\r\n change: timeChange\r\n });\r\n //$('').appendTo(container);\r\n }\r\n //function removeTimeZones(model){\r\n // _.each(gridColumns, function(prop){\r\n // if(model.hasOwnProperty(prop) && model[prop]){\r\n // var date = moment.utc(model[prop].split(' ')[0]);\r\n // if(date.isValid()){\r\n // model[prop] = moment.utc(model[prop].split(' ')[0]).format('YYYY-MM-DD HH:mm');\r\n // }\r\n // }});\r\n //};\r\n function removeTimeZone(model) {\r\n return moment.utc(model);\r\n }\r\n function formatDates(model) {\r\n _.each(gridColumns, function (prop) {\r\n var date = moment(model[prop]);\r\n if (model.hasOwnProperty(prop) && date.isValid()) {\r\n model[prop] = formatDate(date);\r\n }\r\n });\r\n }\r\n\r\n function formatDate(date) {\r\n\r\n return date.format('YYYY-MM-DD HH:mm');\r\n }\r\n function formatDateMMDDYYYY(date) {\r\n return date.format('MM/DD/YYYY');\r\n }\r\n\r\n\r\n function hasInvalidDate(dates) {\r\n return _.some(dates, function (date) {\r\n return !kendo.toString(date, 't');\r\n //return !moment(date).isValid();\r\n });\r\n }\r\n function setGridColumns(coloums) {\r\n gridColumns = coloums;\r\n }\r\n function nodaTimeToDateTime(date) {\r\n return date;\r\n //return moment(date.split(' ')[0].replace(\"Z\", \"\")).toDate();\r\n // return moment.utc(date.split(' ')[0]).toDate()\r\n }\r\n function getTime(dateTime) {\r\n if (dateTime) {\r\n return moment(dateTime).format('H:m');\r\n }\r\n return \"\";\r\n }\r\n\r\n function timeToDateTime(time) {\r\n if (time) {\r\n var split = time.split(':');\r\n return moment().set({ 'hour': split[0], 'minute': split[1].split(' ')[0] }).toDate();\r\n }\r\n\r\n return null;\r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('inspinia.services')\r\n .factory('contactsService',contactsService);\r\n\r\n /* @ngInject */\r\n function contactsService(dataHelper, authService, $http, moment, Upload) {\r\n var apiRootPath = dataHelper.serverPath() + 'contacts/',\r\n imaamsPath = apiRootPath + 'imaams/';\r\n\r\n var service = {\r\n getImaaams: getImaaams,\r\n getImaam: getImaam,\r\n saveImaam: saveImaam,\r\n updateImaam: updateImaam,\r\n deleteImaam: deleteImaam\r\n };\r\n\r\n function getImaam(contanctId) {\r\n return $http\r\n .get(imaamsPath + authService.getUser().masjidID + '/' + contanctId)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function getImaaams() {\r\n return $http\r\n .get(imaamsPath + authService.getUser().masjidID)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function updateImaam(file, imaam) {\r\n var user = authService.getUser();\r\n imaam.modifiedDate = moment().format('YYYY-MM-DD HH:mm:ss');\r\n imaam.modifiedBy = user.Id;\r\n imaam.isActive = true;\r\n\r\n return uploadImaamPhoto(file,imaam);\r\n }\r\n\r\n function deleteImaam(id) {\r\n var user = authService.getUser();\r\n return $http\r\n .delete(imaamsPath + user.masjidID + '/' + id)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function saveImaam(file, imaam) {\r\n\r\n var user = authService.getUser();\r\n imaam.masjidID = user.masjidID;\r\n imaam.isActive = true;\r\n imaam.createdDate = moment().format('YYYY-MM-DD HH:mm:ss');\r\n imaam.createdBy = user.Id;\r\n\r\n return uploadImaamPhoto(file,imaam);\r\n }\r\n\r\n function uploadImaamPhoto(file, imaam) {\r\n return Upload.upload({\r\n url: imaamsPath + 'upload',\r\n file: file,\r\n method: \"POST\",\r\n data: imaam\r\n });\r\n }\r\n\r\n return service;\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular.module('inspinia.services').factory('authService', authService);\r\n\r\n // authService.$inject = ['localStorageService'];\r\n\r\n /* @ngInject */\r\n function authService(localStorageService, roles) {\r\n var cachedToken;\r\n var cachedUser;\r\n var bearerToken = 'BearerToken';\r\n var userProfileToken = 'UserProfile';\r\n\r\n var setToken = function (token) {\r\n cachedToken = token;\r\n localStorageService.set(bearerToken, token);\r\n };\r\n \r\n var setUser = function(user) {\r\n\r\n var superAdminRole = _.find(user.roles, function(role) {\r\n return role === roles.superAdmin;\r\n });\r\n\r\n if (superAdminRole) {\r\n user.isSuperAdmin = true;\r\n }\r\n\r\n user.isAdmin = _.find(user.roles, function (role) {\r\n return role === roles.admin;\r\n });\r\n user.hasSalah = _.find(user.roles, function (role) {\r\n return role === roles.salah;\r\n });\r\n user.hasJummah = _.find(user.roles, function (role) {\r\n return role === roles.jummah;\r\n });\r\n user.hasEvents = _.find(user.roles, function (role) {\r\n return role === roles.events;\r\n });\r\n user.hasNews = _.find(user.roles, function (role) {\r\n return role === roles.news;\r\n });\r\n user.hasNotifications = _.find(user.roles, function (role) {\r\n return role === roles.notifications;\r\n });\r\n user.hasMembers = _.find(user.roles, function (role) {\r\n return role === roles.members;\r\n });\r\n user.hasBroadcast = _.find(user.roles, function (role) {\r\n return role === roles.broadcast;\r\n });\r\n user.hasRamadan = _.find(user.roles, function (role) {\r\n return role === roles.ramadan;\r\n });\r\n user.hasVolunteer = _.find(user.roles, function (role) {\r\n return role === roles.volunteer;\r\n });\r\n user.hasUserManagement = _.find(user.roles, function (role) {\r\n return role === roles.userManagement;\r\n });\r\n user.hasMasjidManagement = _.find(user.roles, function (role) {\r\n return role === roles.masjidManagement;\r\n });\r\n user.hasImaams = _.find(user.roles, function (role) {\r\n return role === roles.imaams;\r\n });\r\n\r\n localStorageService.set(userProfileToken, JSON.stringify(user));\r\n }\r\n\r\n var getToken = function () {\r\n if (!cachedToken)\r\n cachedToken = localStorageService.get(bearerToken);\r\n \r\n return cachedToken;\r\n };\r\n \r\n var getUser = function(){\r\n if(!cachedUser){\r\n cachedUser = JSON.parse(localStorageService.get(userProfileToken));\r\n }\r\n return cachedUser;\r\n }\r\n var isAuthenticated = function () {\r\n if(cachedToken){\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n var removeToken = function () {\r\n cachedToken = null;\r\n localStorageService.remove(bearerToken);\r\n cachedUser = null;\r\n localStorageService.remove(userProfileToken);\r\n };\r\n\r\n var setProperties = function (props) {\r\n var user = getUser();\r\n if (props && user && user.isSuperAdmin) {\r\n user.masjidID = props.masjidID || user.masjidID;\r\n user.logoUrl = props.logoUrl || user.logoUrl;\r\n user.navigationCollapsed = false;\r\n user.tahajud = props.tahajud && props.tahajud === true;\r\n user.halfNight = props.halfNight && props.halfNight === true;\r\n user.navigationCollapsed = false;\r\n user.logoHasBackground = props.logoHasBackground && props.logoHasBackground === true;\r\n localStorageService.set(userProfileToken, JSON.stringify(user));\r\n }\r\n }\r\n\r\n return {\r\n setUser: setUser,\r\n getUser: getUser,\r\n setToken: setToken,\r\n getToken : getToken,\r\n isAuthenticated: isAuthenticated,\r\n removeToken: removeToken,\r\n setProperties: setProperties\r\n }\r\n };\r\n})();\n(function () {\r\n 'use script';\r\n\r\n angular.module('inspinia.services')\r\n .factory('accountsService', accountsService);\r\n \r\n /* @ngInject */\r\n function accountsService(accountsData, authService, logger, exception, $http, dataHelper) {\r\n\r\n var service = {\r\n loginUser: loginUser,\r\n getCurrentUser: getCurrentUser,\r\n resetPassword: resetPassword,\r\n registerUser: registerUser,\r\n sendForgotPasswordLink: sendForgotPasswordLink,\r\n determineWhereToGo: determineWhereToGo\r\n };\r\n\r\n return service;\r\n\r\n function transformLoginRequest(data, headersGetter) {\r\n var str = [];\r\n for (var d in data)\r\n str.push(encodeURIComponent(d) + '=' +\r\n encodeURIComponent(data[d]));\r\n return str.join('&');\r\n }\r\n \r\n function loginUser(userModel) {\r\n authService.removeToken();\r\n \r\n return $http(\r\n {\r\n method: 'POST',\r\n url: dataHelper.serverPath('oauth/token'),\r\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\r\n data: userModel,\r\n transformRequest: transformLoginRequest\r\n })\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function getCurrentUser() {\r\n return $http.get(dataHelper.serverPath() + 'accounts/currentuser')\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function resetPassword(resetPasswordModel) {\r\n return $http\r\n .post(dataHelper.serverPath() + 'accounts/resetPassword', resetPasswordModel)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function registerUser(registerModel) {\r\n authService.removeToken();\r\n\r\n return $http\r\n .post(dataHelper.serverPath() + 'accounts/confirmEmail', registerModel)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function sendForgotPasswordLink(model) {\r\n return $http\r\n .post(dataHelper.serverPath() + 'accounts/forgetPassword', model)\r\n .then(dataHelper.sendResponseData);\r\n }\r\n\r\n function determineWhereToGo() {\r\n var user = authService.getUser();\r\n if (user) {\r\n if (user.isSuperAdmin || user.isAdmin) {\r\n return 'management.salahTimes.adhanIqamah';\r\n }\r\n else if (user.hasSalah) {\r\n return 'management.salahTimes.adhanIqamah';\r\n }\r\n else if (user.hasJummah) {\r\n return 'management.salahTimes.jummah';\r\n }\r\n else if (user.hasEvents) {\r\n return 'management.events.calendar';\r\n }\r\n //else if (user.hasNews) {\r\n // return 'management.masjid.news'\r\n //}\r\n else if (user.hasNotifications) {\r\n return 'management.notifications';\r\n }\r\n else if (user.hasMembers) {\r\n return 'management.members';\r\n }\r\n else if (user.hasImaams) {\r\n return 'management.imaams';\r\n }\r\n else if (user.hasRamadan) {\r\n return 'management.ramadan';\r\n }\r\n else if (user.hasVolunteer) {\r\n return 'management.volunteers';\r\n }\r\n else if (user.hasBroadcast) {\r\n return 'management.broadcast';\r\n }\r\n else if (user.hasUserManagement) {\r\n return 'management.users';\r\n }\r\n else if (user.hasMasjidManagement) {\r\n return 'management.masjid.info';\r\n }\r\n }\r\n return 'accounts.login';\r\n }\r\n };\r\n})();\n\r\n\"use strict\";\r\n\r\nangular.module('inspinia')\r\n .controller(\"quoranSchoolCtrl\", function () {\r\n\r\n });\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular.module('inspinia.public', [\r\n 'inspinia.core'\r\n ]);\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('inspinia.public')\r\n .config(routeConfig);\r\n\r\n /* @ngInject */\r\n function routeConfig($stateProvider) {\r\n $stateProvider\r\n .state('public', {\r\n abstract: true,\r\n url: \"/public\",\r\n templateUrl: \"app/public/public.html\"\r\n })\r\n .state('public.readOnlySalahTimes',\r\n {\r\n url: \"/readOnlySalahTimes\",\r\n templateUrl: \"app/management/salahTimes/readOnlySalahTimes.html\",\r\n data: { specialClass: 'white-bg public public-salahTimes' },\r\n controller: \"ReadOnlySalahTimesController\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n resolveResults: publicSalahTimesResolve\r\n }\r\n })\r\n .state('public.readOnlyCalendar',\r\n {\r\n url: \"/readOnlyCalendar\",\r\n templateUrl: \"app/management/events/events.html\",\r\n data: { specialClass: 'white-bg public' },\r\n controller: \"EventsController\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n resolveResults: eventsResolve\r\n },\r\n params: {\r\n bannerText: 'Work Week'\r\n }\r\n });\r\n\r\n /* @ngInject */\r\n function eventsResolve(spinnerService, eventsService, $location) {\r\n var id = $location.search().id;\r\n var code = $location.search().code;\r\n if (id && code) {\r\n spinnerService.show();\r\n return eventsService.getReadOnlyEvents(id, code);\r\n }\r\n\r\n return null;\r\n };\r\n\r\n function publicSalahTimesResolve(masjidservice, $location, $stateParams) {\r\n var id = $location.search().id || $stateParams.id;\r\n var code = $location.search().code || $stateParams.code;\r\n if (id && code) {\r\n return masjidservice.getPublicPrayerTimes(id,code);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n }\r\n})();\n// (function () {\r\n// 'use strict';\r\n// angular.module('inspinia')\r\n// .config(restangularConfig);\r\n// \r\n// \r\n// /* @ngInject */\r\n// function restangularConfig(RestangularProvider) {\r\n// \r\n// if (window.location.hostname.indexOf('localhost') >= 0) {\r\n// RestangularProvider.setBaseUrl('https://microsoft-apiappb0ace786fe814338a5c5404868098dca.azurewebsites.net');\r\n// } else {\r\n// RestangularProvider.setBaseUrl('http://localhost:56857/MobileMasjidApps.WebApi');\r\n// }\r\n// \r\n// RestangularProvider.setDefaultHeaders({ 'Content-Type': 'application/json' });\r\n// \r\n// RestangularProvider.setFullRequestInterceptor(function (element, operation, route, url, headers, params, httpConfig) {\r\n// var token = null;//authService.getToken();\r\n// \r\n// if (token) {\r\n// headers.Authorization = 'Bearer ' + token;\r\n// }\r\n// \r\n// return{\r\n// element: element,\r\n// params: params,\r\n// headers: headers,\r\n// httpConfig: httpConfig\r\n// }\r\n// });\r\n// \r\n// }\r\n// \r\n// })();\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('inspinia.management')\r\n .config(routeConfig);\r\n\r\n /* @ngInject */\r\n function routeConfig($stateProvider) {\r\n $stateProvider\r\n .state('management', {\r\n abstract: true,\r\n url: \"/management\",\r\n templateUrl: \"app/components/common/content.html\"\r\n // data: {\r\n // specialClass: 'fixed-sidebar'\r\n // }\r\n });\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n //Time types\r\n var timeType = {\r\n adhanIqamahTimes: 'adhanIqamahTimes',\r\n jummahTimes: 'jummahTimes'\r\n }\r\n //Date Formats\r\n var dateFormats = {\r\n date: '{0:dd - ddd}',\r\n dateMonth: '{0:dd - MMMM}',\r\n time: '{0:hh:mm tt}',\r\n dateTime: '{0:MM/dd/yyyy hh:mm tt}',\r\n dateTimeYY: '{0:MM/dd/yy hh:mm tt}'\r\n }\r\n //Data types\r\n var dataTypes = {\r\n number: { type: 'number' },\r\n nonEditableNumber: { type: 'number', editable: false },\r\n nonEditableDate: { type: 'date', editable: false },\r\n date: { type: 'date' },\r\n string: { type: 'string' },\r\n nonEditableString: { type: 'string', editable: false }\r\n }\r\n //Grid columns\r\n var gridColumns = {\r\n adhanIqamahTimes: {\r\n fromDate: 'fromDate',\r\n Id: 'adhanTimeID',\r\n adhanTimeID: 'adhanTimeID',\r\n iqamahTimeID: 'iqamahTimeID',\r\n fajrAdhanTime: 'fajrAdhanTime',\r\n sunriseTime: 'sunriseTime',\r\n fajrIqamahTime: 'fajrIqamahTime',\r\n duhrAdhanTime: 'duhrAdhanTime',\r\n duhrIqamahTime: 'duhrIqamahTime',\r\n asrAdhanTime: 'asrAdhanTime',\r\n asrIqamahTime: 'asrIqamahTime',\r\n maghribAdhanTime: 'maghribAdhanTime',\r\n maghribIqamahTime: 'maghribIqamahTime',\r\n ishaAdhanTime: 'ishaAdhanTime',\r\n ishaIqamahTime: 'ishaIqamahTime',\r\n halfNight: 'halfNight',\r\n tahajud: 'tahajud'\r\n },\r\n jummahTimes: {\r\n month: 'month',\r\n jummahDate: 'jummahDate',\r\n Id: 'jummahTimesAndKhateebID',\r\n firstJummahAdhan: 'firstJummahAdhan',\r\n firstJummahIqamah: 'firstJummahIqamah',\r\n firstJummahKhateeb: 'firstJummahKhateeb',\r\n secondJummahAdhan: 'secondJummahAdhan',\r\n secondJummahIqamah: 'secondJummahIqamah',\r\n secondJummahKhateeb: 'secondJummahKhateeb',\n thirdJummahAdhan: 'thirdJummahAdhan',\r\n thirdJummahIqamah: 'thirdJummahIqamah',\r\n thirdJummahKhateeb: 'thirdJummahKhateeb'\r\n },\r\n pushNotifications: {\r\n pushNotificationID: 'pushNotificationID',\r\n pushNotificationTypeID: 'pushNotificationTypeID',\r\n pushNotificationStatusTypeID: 'pushNotificationStatusTypeID',\r\n message: 'message',\r\n deviceType: 'deviceType',\r\n createdByStr: 'createdByStr',\r\n createdDate: 'createdDate',\r\n scheduledDate: 'scheduledDate',\r\n processedDate: 'processedDate'\r\n }\r\n };\r\n //Grid Schema\r\n var gridSchema = {};\r\n gridSchema.adhanIqamahTimes = {};\r\n gridSchema.adhanIqamahTimes[gridColumns.adhanIqamahTimes.Id] = dataTypes.number;\r\n gridSchema.adhanIqamahTimes[gridColumns.adhanIqamahTimes.adhanTimeID] = dataTypes.number;\r\n gridSchema.adhanIqamahTimes[gridColumns.adhanIqamahTimes.iqamahTimeID] = dataTypes.number;\r\n gridSchema.adhanIqamahTimes[gridColumns.adhanIqamahTimes.fromDate] = dataTypes.nonEditableDate;\r\n gridSchema.adhanIqamahTimes[gridColumns.adhanIqamahTimes.fajrAdhanTime] = dataTypes.date;\r\n gridSchema.adhanIqamahTimes[gridColumns.adhanIqamahTimes.sunriseTime] = dataTypes.date;\r\n gridSchema.adhanIqamahTimes[gridColumns.adhanIqamahTimes.fajrIqamahTime] = dataTypes.date;\r\n gridSchema.adhanIqamahTimes[gridColumns.adhanIqamahTimes.duhrAdhanTime] = dataTypes.date;\r\n gridSchema.adhanIqamahTimes[gridColumns.adhanIqamahTimes.duhrIqamahTime] = dataTypes.date;\r\n gridSchema.adhanIqamahTimes[gridColumns.adhanIqamahTimes.asrAdhanTime] = dataTypes.date;\r\n gridSchema.adhanIqamahTimes[gridColumns.adhanIqamahTimes.asrIqamahTime] = dataTypes.date;\r\n gridSchema.adhanIqamahTimes[gridColumns.adhanIqamahTimes.maghribAdhanTime] = dataTypes.date;\r\n gridSchema.adhanIqamahTimes[gridColumns.adhanIqamahTimes.maghribIqamahTime] = dataTypes.date;\r\n gridSchema.adhanIqamahTimes[gridColumns.adhanIqamahTimes.ishaAdhanTime] = dataTypes.date;\r\n gridSchema.adhanIqamahTimes[gridColumns.adhanIqamahTimes.ishaIqamahTime] = dataTypes.date;\r\n gridSchema.adhanIqamahTimes[gridColumns.adhanIqamahTimes.halfNight] = dataTypes.date;\r\n gridSchema.adhanIqamahTimes[gridColumns.adhanIqamahTimes.tahajud] = dataTypes.date;\r\n\r\n gridSchema.jummahTimes = {};\r\n gridSchema.jummahTimes[gridColumns.jummahTimes.month] = dataTypes.string;\r\n gridSchema.jummahTimes[gridColumns.jummahTimes.Id] = dataTypes.number;\r\n gridSchema.jummahTimes[gridColumns.jummahTimes.jummahDate] = dataTypes.nonEditableDate;\r\n gridSchema.jummahTimes[gridColumns.jummahTimes.firstJummahAdhan] = dataTypes.date;\r\n gridSchema.jummahTimes[gridColumns.jummahTimes.firstJummahIqamah] = dataTypes.date;\r\n gridSchema.jummahTimes[gridColumns.jummahTimes.firstJummahKhateeb] = dataTypes.string;\r\n gridSchema.jummahTimes[gridColumns.jummahTimes.secondJummahAdhan] = dataTypes.date;\r\n gridSchema.jummahTimes[gridColumns.jummahTimes.secondJummahIqamah] = dataTypes.date;\r\n gridSchema.jummahTimes[gridColumns.jummahTimes.secondJummahKhateeb] = dataTypes.string;\n gridSchema.jummahTimes[gridColumns.jummahTimes.thirdJummahAdhan] = dataTypes.date;\r\n gridSchema.jummahTimes[gridColumns.jummahTimes.thirdJummahIqamah] = dataTypes.date;\r\n gridSchema.jummahTimes[gridColumns.jummahTimes.thirdJummahKhateeb] = dataTypes.string;\r\n\r\n gridSchema.pushNotifications = {};\r\n gridSchema.pushNotifications[gridColumns.pushNotifications.pushNotificationID] = {\r\n editable: false,\r\n nullable: true\r\n };\r\n gridSchema.pushNotifications[gridColumns.pushNotifications.pushNotificationTypeID] = {\r\n type: 'number',\r\n defaultValue: 1\r\n };\r\n gridSchema.pushNotifications[gridColumns.pushNotifications.pushNotificationMessage] = dataTypes.string;\r\n gridSchema.pushNotifications[gridColumns.pushNotifications.createdByStr] = dataTypes.nonEditableString;\r\n gridSchema.pushNotifications[gridColumns.pushNotifications.createdDate] = dataTypes.nonEditableDate;\r\n gridSchema.pushNotifications[gridColumns.pushNotifications.scheduledDate] = dataTypes.nonEditableDate;\r\n gridSchema.pushNotifications[gridColumns.pushNotifications.processedDate] = dataTypes.nonEditableDate;\r\n\r\n var events = {\r\n recurrenceTypes: [\r\n { text: \"Never\", value: 1 },\r\n { text: \"Daily\", value: 2 },\r\n { text: \"Weekly\", value: 3 },\r\n { text: \"Monthly\", value: 4 },\r\n { text: \"Yearly\", value: 5 }\r\n ],\r\n recurrenceDayOfMonthOptions: [\r\n { text: \"First\", value: 1 },\r\n { text: \"Second\", value: 2 },\r\n { text: \"Third\", value: 3 },\r\n { text: \"Fourth\", value: 4 },\r\n { text: \"Last\", value: 5 }\r\n ],\r\n recurrenceWeekdayOfMonthOptions: [\r\n { text: \"Monday\", value: 1 },\r\n { text: \"Tuesday\", value: 2 },\r\n { text: \"Wednesday\", value: 3 },\r\n { text: \"Thursday\", value: 4 },\r\n { text: \"Friday\", value: 5 },\r\n { text: \"Saturday\", value: 6 },\r\n { text: \"Sunday\", value: 7 }\r\n ],\r\n volunteerTitleOptions: [\r\n { text: \"Brother\", value: \"M\" },\r\n { text: \"Sister\", value: \"F\" }\r\n ],\r\n volunteerCommitmentOptions: [\r\n { text: \"One Shift\", value: 1 },\r\n { text: \"All Event\", value: 2 }\r\n ],\r\n prayerTimes: [\r\n { text: \"Fajr Iqamah\", value: 2 },\r\n { text: \"Duhr Iqamah\", value: 4 },\r\n { text: \"Asr Iqamah\", value: 6 },\r\n { text: \"Maghrib Iqamah\", value: 8 },\r\n { text: \"Isha Iqamah\", value: 10 }\r\n ],\r\n recurrenceTypeValues: {\r\n \"2\": \"days\",\r\n \"3\": \"weeks\",\r\n \"4\": \"months\",\r\n \"5\": \"years\"\r\n }\r\n };\r\n var memberTypes =\r\n [\r\n { text: \"Regular (Voting)\", value: 1 },\r\n { text: \"Honorary\", value: 2 },\r\n { text: \"Other\", value: 3 }\r\n ];\r\n var denominationTypes =\r\n [\r\n { text: \"Sunni\", value: 1 },\r\n { text: \"Shia\", value: 2 },\r\n { text: \"Ismailee\", value: 3 }\r\n ];\r\n var adhanCalculationTypes =\r\n [\r\n { text: \"Jafari\", value: 1 },\r\n { text: \"Karachi\", value: 2 },\r\n { text: \"ISNA\", value: 3 },\r\n { text: \"MWL\", value: 4 },\r\n // { text: \"Makkah\", value: 5 },\r\n { text: \"Egypt\", value: 6 },\r\n { text: \"Tehran\", value: 7 },\r\n { text: \"Custom\", value: 8 }\r\n ];\r\n var sahoorDays = [\r\n { text: \"Daily\", value: 1 },\r\n { text: \"Last 10 Nights\", value: 2 },\r\n { text: \"Last Odd Nights\", value: 3 },\r\n { text: \"Not Offered Currently\", value: 4 }\r\n ];\r\n var qiyaamDays = [\r\n { text: \"Daily\", value: 1 },\r\n { text: \"Last 10 Nights\", value: 2 },\r\n { text: \"Last Odd Nights\", value: 3 },\r\n { text: \"Not Offered Currently\", value: 4 }\r\n ];\r\n var calculationMethods = {\r\n \"MWLfajr\": 18,\r\n \"MWLisha\": 17,\r\n \"Egyptfajr\": 19.5,\r\n \"Egyptisha\": 17.5,\r\n \"Karachifajr\": 18,\r\n \"Karachiisha\": 18,\r\n \"ISNAfajr\": 15,\r\n \"ISNAisha\": 15,\r\n \"Jafarifajr\": 16,\r\n \"Jafariisha\": 14,\r\n \"Makkahfajr\": 18.5,\r\n \"Makkahisha\": 90\r\n }\r\n var juristicTypes =\r\n [\r\n { text: \"Shafii\", value: 1 },\r\n { text: \"Hanafi\", value: 2 }\r\n ];\r\n\r\n var iqamahTimesSettings = [\r\n { text: \"Do Nothing\", value: 1 },\r\n { text: \"Nearest :05 mark\", value: 5 },\r\n { text: \"Nearest :10 mark\", value: 10 },\r\n { text: \"Nearest :15 mark\", value: 15 },\r\n { text: \"5 minutes after Adhan\", value: 50 },\r\n { text: \"10 minutes after Adhan\", value: 100 },\r\n { text: \"15 minutes after Adhan\", value: 150 },\r\n { text: \"20 minutes after Adhan\", value: 200 },\r\n { text: \"25 minutes after Adhan\", value: 250 },\r\n { text: \"30 minutes after Adhan\", value: 300 },\r\n { text: \"Specific Time\", value: -1 }\r\n ];\r\n\r\n var reminderSeconds = [\r\n { text: \"Minutes\", value: 60 },\r\n { text: \"Hours\", value: 3600 },\r\n { text: \"Days\", value: 86400 },\r\n { text: \"Weeks\", value: 604800 }\r\n ];\r\n\r\n var iftaardays = [\r\n { text: \"Daily\", value: 1 },\r\n { text: \"Weekdays\", value: 2 },\r\n { text: \"Weekends (Sat & Sun)\", value: 3 },\r\n { text: \"Saturdays Only\", value: 4 },\r\n { text: \"Sundays Only\", value: 5 },\r\n { text: \"Friday's Only\", value: 6 }\r\n ];\r\n\r\n var maritalStatus = [\r\n { text: \"Single\", value: \"S\" },\r\n { text: \"Married\", value: \"M\" }\r\n ];\r\n\r\n var applicationType = [\r\n { text: \"Renewal\", value: \"Renewal\" },\r\n { text: \"New Member\", value: \"New Member\" }\r\n ];\r\n\r\n var imaamTitles = [\r\n { text: \"Primary Imam\", value: 6 },\r\n { text: \"Resident Scholar\", value: 8 }\r\n ];\r\n\r\n var mobileDevices = [\r\n { text: \"iOS Only\", value: 1 },\r\n { text: \"Android Only\", value: 2 },\r\n { text: \"iOS & Android\", value: 3 }\r\n ];\r\n\r\n var usStates =\r\n [\r\n {\r\n \"name\": \"Alabama\",\r\n \"abbreviation\": \"AL\"\r\n },\r\n {\r\n \"name\": \"Alaska\",\r\n \"abbreviation\": \"AK\"\r\n },\r\n {\r\n \"name\": \"American Samoa\",\r\n \"abbreviation\": \"AS\"\r\n },\r\n {\r\n \"name\": \"Arizona\",\r\n \"abbreviation\": \"AZ\"\r\n },\r\n {\r\n \"name\": \"Arkansas\",\r\n \"abbreviation\": \"AR\"\r\n },\r\n {\r\n \"name\": \"California\",\r\n \"abbreviation\": \"CA\"\r\n },\r\n {\r\n \"name\": \"Colorado\",\r\n \"abbreviation\": \"CO\"\r\n },\r\n {\r\n \"name\": \"Connecticut\",\r\n \"abbreviation\": \"CT\"\r\n },\r\n {\r\n \"name\": \"Delaware\",\r\n \"abbreviation\": \"DE\"\r\n },\r\n {\r\n \"name\": \"District Of Columbia\",\r\n \"abbreviation\": \"DC\"\r\n },\r\n {\r\n \"name\": \"Federated States Of Micronesia\",\r\n \"abbreviation\": \"FM\"\r\n },\r\n {\r\n \"name\": \"Florida\",\r\n \"abbreviation\": \"FL\"\r\n },\r\n {\r\n \"name\": \"Georgia\",\r\n \"abbreviation\": \"GA\"\r\n },\r\n {\r\n \"name\": \"Guam\",\r\n \"abbreviation\": \"GU\"\r\n },\r\n {\r\n \"name\": \"Hawaii\",\r\n \"abbreviation\": \"HI\"\r\n },\r\n {\r\n \"name\": \"Idaho\",\r\n \"abbreviation\": \"ID\"\r\n },\r\n {\r\n \"name\": \"Illinois\",\r\n \"abbreviation\": \"IL\"\r\n },\r\n {\r\n \"name\": \"Indiana\",\r\n \"abbreviation\": \"IN\"\r\n },\r\n {\r\n \"name\": \"Iowa\",\r\n \"abbreviation\": \"IA\"\r\n },\r\n {\r\n \"name\": \"Kansas\",\r\n \"abbreviation\": \"KS\"\r\n },\r\n {\r\n \"name\": \"Kentucky\",\r\n \"abbreviation\": \"KY\"\r\n },\r\n {\r\n \"name\": \"Louisiana\",\r\n \"abbreviation\": \"LA\"\r\n },\r\n {\r\n \"name\": \"Maine\",\r\n \"abbreviation\": \"ME\"\r\n },\r\n {\r\n \"name\": \"Marshall Islands\",\r\n \"abbreviation\": \"MH\"\r\n },\r\n {\r\n \"name\": \"Maryland\",\r\n \"abbreviation\": \"MD\"\r\n },\r\n {\r\n \"name\": \"Massachusetts\",\r\n \"abbreviation\": \"MA\"\r\n },\r\n {\r\n \"name\": \"Michigan\",\r\n \"abbreviation\": \"MI\"\r\n },\r\n {\r\n \"name\": \"Minnesota\",\r\n \"abbreviation\": \"MN\"\r\n },\r\n {\r\n \"name\": \"Mississippi\",\r\n \"abbreviation\": \"MS\"\r\n },\r\n {\r\n \"name\": \"Missouri\",\r\n \"abbreviation\": \"MO\"\r\n },\r\n {\r\n \"name\": \"Montana\",\r\n \"abbreviation\": \"MT\"\r\n },\r\n {\r\n \"name\": \"Nebraska\",\r\n \"abbreviation\": \"NE\"\r\n },\r\n {\r\n \"name\": \"Nevada\",\r\n \"abbreviation\": \"NV\"\r\n },\r\n {\r\n \"name\": \"New Hampshire\",\r\n \"abbreviation\": \"NH\"\r\n },\r\n {\r\n \"name\": \"New Jersey\",\r\n \"abbreviation\": \"NJ\"\r\n },\r\n {\r\n \"name\": \"New Mexico\",\r\n \"abbreviation\": \"NM\"\r\n },\r\n {\r\n \"name\": \"New York\",\r\n \"abbreviation\": \"NY\"\r\n },\r\n {\r\n \"name\": \"North Carolina\",\r\n \"abbreviation\": \"NC\"\r\n },\r\n {\r\n \"name\": \"North Dakota\",\r\n \"abbreviation\": \"ND\"\r\n },\r\n {\r\n \"name\": \"Northern Mariana Islands\",\r\n \"abbreviation\": \"MP\"\r\n },\r\n {\r\n \"name\": \"Ohio\",\r\n \"abbreviation\": \"OH\"\r\n },\r\n {\r\n \"name\": \"Oklahoma\",\r\n \"abbreviation\": \"OK\"\r\n },\r\n {\r\n \"name\": \"Oregon\",\r\n \"abbreviation\": \"OR\"\r\n },\r\n {\r\n \"name\": \"Palau\",\r\n \"abbreviation\": \"PW\"\r\n },\r\n {\r\n \"name\": \"Pennsylvania\",\r\n \"abbreviation\": \"PA\"\r\n },\r\n {\r\n \"name\": \"Puerto Rico\",\r\n \"abbreviation\": \"PR\"\r\n },\r\n {\r\n \"name\": \"Rhode Island\",\r\n \"abbreviation\": \"RI\"\r\n },\r\n {\r\n \"name\": \"South Carolina\",\r\n \"abbreviation\": \"SC\"\r\n },\r\n {\r\n \"name\": \"South Dakota\",\r\n \"abbreviation\": \"SD\"\r\n },\r\n {\r\n \"name\": \"Tennessee\",\r\n \"abbreviation\": \"TN\"\r\n },\r\n {\r\n \"name\": \"Texas\",\r\n \"abbreviation\": \"TX\"\r\n },\r\n {\r\n \"name\": \"Utah\",\r\n \"abbreviation\": \"UT\"\r\n },\r\n {\r\n \"name\": \"Vermont\",\r\n \"abbreviation\": \"VT\"\r\n },\r\n {\r\n \"name\": \"Virgin Islands\",\r\n \"abbreviation\": \"VI\"\r\n },\r\n {\r\n \"name\": \"Virginia\",\r\n \"abbreviation\": \"VA\"\r\n },\r\n {\r\n \"name\": \"Washington\",\r\n \"abbreviation\": \"WA\"\r\n },\r\n {\r\n \"name\": \"West Virginia\",\r\n \"abbreviation\": \"WV\"\r\n },\r\n {\r\n \"name\": \"Wisconsin\",\r\n \"abbreviation\": \"WI\"\r\n },\r\n {\r\n \"name\": \"Wyoming\",\r\n \"abbreviation\": \"WY\"\r\n }\r\n ];\r\n\r\n\r\n //var countries = [\r\n // { \"name\": \"Afghanistan\", \"code\": \"AF\" },\r\n // { \"name\": \"Ã…land Islands\", \"code\": \"AX\" },\r\n // { \"name\": \"Albania\", \"code\": \"AL\" },\r\n // { \"name\": \"Algeria\", \"code\": \"DZ\" },\r\n // { \"name\": \"American Samoa\", \"code\": \"AS\" },\r\n // { \"name\": \"AndorrA\", \"code\": \"AD\" },\r\n // { \"name\": \"Angola\", \"code\": \"AO\" },\r\n // { \"name\": \"Anguilla\", \"code\": \"AI\" },\r\n // { \"name\": \"Antarctica\", \"code\": \"AQ\" },\r\n // { \"name\": \"Antigua and Barbuda\", \"code\": \"AG\" },\r\n // { \"name\": \"Argentina\", \"code\": \"AR\" },\r\n // { \"name\": \"Armenia\", \"code\": \"AM\" },\r\n // { \"name\": \"Aruba\", \"code\": \"AW\" },\r\n // { \"name\": \"Australia\", \"code\": \"AU\" },\r\n // { \"name\": \"Austria\", \"code\": \"AT\" },\r\n // { \"name\": \"Azerbaijan\", \"code\": \"AZ\" },\r\n // { \"name\": \"Bahamas\", \"code\": \"BS\" },\r\n // { \"name\": \"Bahrain\", \"code\": \"BH\" },\r\n // { \"name\": \"Bangladesh\", \"code\": \"BD\" },\r\n // { \"name\": \"Barbados\", \"code\": \"BB\" },\r\n // { \"name\": \"Belarus\", \"code\": \"BY\" },\r\n // { \"name\": \"Belgium\", \"code\": \"BE\" },\r\n // { \"name\": \"Belize\", \"code\": \"BZ\" },\r\n // { \"name\": \"Benin\", \"code\": \"BJ\" },\r\n // { \"name\": \"Bermuda\", \"code\": \"BM\" },\r\n // { \"name\": \"Bhutan\", \"code\": \"BT\" },\r\n // { \"name\": \"Bolivia\", \"code\": \"BO\" },\r\n // { \"name\": \"Bosnia and Herzegovina\", \"code\": \"BA\" },\r\n // { \"name\": \"Botswana\", \"code\": \"BW\" },\r\n // { \"name\": \"Bouvet Island\", \"code\": \"BV\" },\r\n // { \"name\": \"Brazil\", \"code\": \"BR\" },\r\n // { \"name\": \"British Indian Ocean Territory\", \"code\": \"IO\" },\r\n // { \"name\": \"Brunei Darussalam\", \"code\": \"BN\" },\r\n // { \"name\": \"Bulgaria\", \"code\": \"BG\" },\r\n // { \"name\": \"Burkina Faso\", \"code\": \"BF\" },\r\n // { \"name\": \"Burundi\", \"code\": \"BI\" },\r\n // { \"name\": \"Cambodia\", \"code\": \"KH\" },\r\n // { \"name\": \"Cameroon\", \"code\": \"CM\" },\r\n // { \"name\": \"Canada\", \"code\": \"CA\" },\r\n // { \"name\": \"Cape Verde\", \"code\": \"CV\" },\r\n // { \"name\": \"Cayman Islands\", \"code\": \"KY\" },\r\n // { \"name\": \"Central African Republic\", \"code\": \"CF\" },\r\n // { \"name\": \"Chad\", \"code\": \"TD\" },\r\n // { \"name\": \"Chile\", \"code\": \"CL\" },\r\n // { \"name\": \"China\", \"code\": \"CN\" },\r\n // { \"name\": \"Christmas Island\", \"code\": \"CX\" },\r\n // { \"name\": \"Cocos (Keeling) Islands\", \"code\": \"CC\" },\r\n // { \"name\": \"Colombia\", \"code\": \"CO\" },\r\n // { \"name\": \"Comoros\", \"code\": \"KM\" },\r\n // { \"name\": \"Congo\", \"code\": \"CG\" },\r\n // { \"name\": \"Congo, The Democratic Republic of the\", \"code\": \"CD\" },\r\n // { \"name\": \"Cook Islands\", \"code\": \"CK\" },\r\n // { \"name\": \"Costa Rica\", \"code\": \"CR\" },\r\n // { \"name\": \"Cote D\\\"Ivoire\", \"code\": \"CI\" },\r\n // { \"name\": \"Croatia\", \"code\": \"HR\" },\r\n // { \"name\": \"Cuba\", \"code\": \"CU\" },\r\n // { \"name\": \"Cyprus\", \"code\": \"CY\" },\r\n // { \"name\": \"Czech Republic\", \"code\": \"CZ\" },\r\n // { \"name\": \"Denmark\", \"code\": \"DK\" },\r\n // { \"name\": \"Djibouti\", \"code\": \"DJ\" },\r\n // { \"name\": \"Dominica\", \"code\": \"DM\" },\r\n // { \"name\": \"Dominican Republic\", \"code\": \"DO\" },\r\n // { \"name\": \"Ecuador\", \"code\": \"EC\" },\r\n // { \"name\": \"Egypt\", \"code\": \"EG\" },\r\n // { \"name\": \"El Salvador\", \"code\": \"SV\" },\r\n // { \"name\": \"Equatorial Guinea\", \"code\": \"GQ\" },\r\n // { \"name\": \"Eritrea\", \"code\": \"ER\" },\r\n // { \"name\": \"Estonia\", \"code\": \"EE\" },\r\n // { \"name\": \"Ethiopia\", \"code\": \"ET\" },\r\n // { \"name\": \"Falkland Islands (Malvinas)\", \"code\": \"FK\" },\r\n // { \"name\": \"Faroe Islands\", \"code\": \"FO\" },\r\n // { \"name\": \"Fiji\", \"code\": \"FJ\" },\r\n // { \"name\": \"Finland\", \"code\": \"FI\" },\r\n // { \"name\": \"France\", \"code\": \"FR\" },\r\n // { \"name\": \"French Guiana\", \"code\": \"GF\" },\r\n // { \"name\": \"French Polynesia\", \"code\": \"PF\" },\r\n // { \"name\": \"French Southern Territories\", \"code\": \"TF\" },\r\n // { \"name\": \"Gabon\", \"code\": \"GA\" },\r\n // { \"name\": \"Gambia\", \"code\": \"GM\" },\r\n // { \"name\": \"Georgia\", \"code\": \"GE\" },\r\n // { \"name\": \"Germany\", \"code\": \"DE\" },\r\n // { \"name\": \"Ghana\", \"code\": \"GH\" },\r\n // { \"name\": \"Gibraltar\", \"code\": \"GI\" },\r\n // { \"name\": \"Greece\", \"code\": \"GR\" },\r\n // { \"name\": \"Greenland\", \"code\": \"GL\" },\r\n // { \"name\": \"Grenada\", \"code\": \"GD\" },\r\n // { \"name\": \"Guadeloupe\", \"code\": \"GP\" },\r\n // { \"name\": \"Guam\", \"code\": \"GU\" },\r\n // { \"name\": \"Guatemala\", \"code\": \"GT\" },\r\n // { \"name\": \"Guernsey\", \"code\": \"GG\" },\r\n // { \"name\": \"Guinea\", \"code\": \"GN\" },\r\n // { \"name\": \"Guinea-Bissau\", \"code\": \"GW\" },\r\n // { \"name\": \"Guyana\", \"code\": \"GY\" },\r\n // { \"name\": \"Haiti\", \"code\": \"HT\" },\r\n // { \"name\": \"Heard Island and Mcdonald Islands\", \"code\": \"HM\" },\r\n // { \"name\": \"Holy See (Vatican City State)\", \"code\": \"VA\" },\r\n // { \"name\": \"Honduras\", \"code\": \"HN\" },\r\n // { \"name\": \"Hong Kong\", \"code\": \"HK\" },\r\n // { \"name\": \"Hungary\", \"code\": \"HU\" },\r\n // { \"name\": \"Iceland\", \"code\": \"IS\" },\r\n // { \"name\": \"India\", \"code\": \"IN\" },\r\n // { \"name\": \"Indonesia\", \"code\": \"ID\" },\r\n // { \"name\": \"Iran, Islamic Republic Of\", \"code\": \"IR\" },\r\n // { \"name\": \"Iraq\", \"code\": \"IQ\" },\r\n // { \"name\": \"Ireland\", \"code\": \"IE\" },\r\n // { \"name\": \"Isle of Man\", \"code\": \"IM\" },\r\n // { \"name\": \"Israel\", \"code\": \"IL\" },\r\n // { \"name\": \"Italy\", \"code\": \"IT\" },\r\n // { \"name\": \"Jamaica\", \"code\": \"JM\" },\r\n // { \"name\": \"Japan\", \"code\": \"JP\" },\r\n // { \"name\": \"Jersey\", \"code\": \"JE\" },\r\n // { \"name\": \"Jordan\", \"code\": \"JO\" },\r\n // { \"name\": \"Kazakhstan\", \"code\": \"KZ\" },\r\n // { \"name\": \"Kenya\", \"code\": \"KE\" },\r\n // { \"name\": \"Kiribati\", \"code\": \"KI\" },\r\n // { \"name\": \"Korea, Democratic People\\\"S Republic of\", \"code\": \"KP\" },\r\n // { \"name\": \"Korea, Republic of\", \"code\": \"KR\" },\r\n // { \"name\": \"Kuwait\", \"code\": \"KW\" },\r\n // { \"name\": \"Kyrgyzstan\", \"code\": \"KG\" },\r\n // { \"name\": \"Lao People\\\"S Democratic Republic\", \"code\": \"LA\" },\r\n // { \"name\": \"Latvia\", \"code\": \"LV\" },\r\n // { \"name\": \"Lebanon\", \"code\": \"LB\" },\r\n // { \"name\": \"Lesotho\", \"code\": \"LS\" },\r\n // { \"name\": \"Liberia\", \"code\": \"LR\" },\r\n // { \"name\": \"Libyan Arab Jamahiriya\", \"code\": \"LY\" },\r\n // { \"name\": \"Liechtenstein\", \"code\": \"LI\" },\r\n // { \"name\": \"Lithuania\", \"code\": \"LT\" },\r\n // { \"name\": \"Luxembourg\", \"code\": \"LU\" },\r\n // { \"name\": \"Macao\", \"code\": \"MO\" },\r\n // { \"name\": \"Macedonia, The Former Yugoslav Republic of\", \"code\": \"MK\" },\r\n // { \"name\": \"Madagascar\", \"code\": \"MG\" },\r\n // { \"name\": \"Malawi\", \"code\": \"MW\" },\r\n // { \"name\": \"Malaysia\", \"code\": \"MY\" },\r\n // { \"name\": \"Maldives\", \"code\": \"MV\" },\r\n // { \"name\": \"Mali\", \"code\": \"ML\" },\r\n // { \"name\": \"Malta\", \"code\": \"MT\" },\r\n // { \"name\": \"Marshall Islands\", \"code\": \"MH\" },\r\n // { \"name\": \"Martinique\", \"code\": \"MQ\" },\r\n // { \"name\": \"Mauritania\", \"code\": \"MR\" },\r\n // { \"name\": \"Mauritius\", \"code\": \"MU\" },\r\n // { \"name\": \"Mayotte\", \"code\": \"YT\" },\r\n // { \"name\": \"Mexico\", \"code\": \"MX\" },\r\n // { \"name\": \"Micronesia, Federated States of\", \"code\": \"FM\" },\r\n // { \"name\": \"Moldova, Republic of\", \"code\": \"MD\" },\r\n // { \"name\": \"Monaco\", \"code\": \"MC\" },\r\n // { \"name\": \"Mongolia\", \"code\": \"MN\" },\r\n // { \"name\": \"Montserrat\", \"code\": \"MS\" },\r\n // { \"name\": \"Morocco\", \"code\": \"MA\" },\r\n // { \"name\": \"Mozambique\", \"code\": \"MZ\" },\r\n // { \"name\": \"Myanmar\", \"code\": \"MM\" },\r\n // { \"name\": \"Namibia\", \"code\": \"NA\" },\r\n // { \"name\": \"Nauru\", \"code\": \"NR\" },\r\n // { \"name\": \"Nepal\", \"code\": \"NP\" },\r\n // { \"name\": \"Netherlands\", \"code\": \"NL\" },\r\n // { \"name\": \"Netherlands Antilles\", \"code\": \"AN\" },\r\n // { \"name\": \"New Caledonia\", \"code\": \"NC\" },\r\n // { \"name\": \"New Zealand\", \"code\": \"NZ\" },\r\n // { \"name\": \"Nicaragua\", \"code\": \"NI\" },\r\n // { \"name\": \"Niger\", \"code\": \"NE\" },\r\n // { \"name\": \"Nigeria\", \"code\": \"NG\" },\r\n // { \"name\": \"Niue\", \"code\": \"NU\" },\r\n // { \"name\": \"Norfolk Island\", \"code\": \"NF\" },\r\n // { \"name\": \"Northern Mariana Islands\", \"code\": \"MP\" },\r\n // { \"name\": \"Norway\", \"code\": \"NO\" },\r\n // { \"name\": \"Oman\", \"code\": \"OM\" },\r\n // { \"name\": \"Pakistan\", \"code\": \"PK\" },\r\n // { \"name\": \"Palau\", \"code\": \"PW\" },\r\n // { \"name\": \"Palestinian Territory, Occupied\", \"code\": \"PS\" },\r\n // { \"name\": \"Panama\", \"code\": \"PA\" },\r\n // { \"name\": \"Papua New Guinea\", \"code\": \"PG\" },\r\n // { \"name\": \"Paraguay\", \"code\": \"PY\" },\r\n // { \"name\": \"Peru\", \"code\": \"PE\" },\r\n // { \"name\": \"Philippines\", \"code\": \"PH\" },\r\n // { \"name\": \"Pitcairn\", \"code\": \"PN\" },\r\n // { \"name\": \"Poland\", \"code\": \"PL\" },\r\n // { \"name\": \"Portugal\", \"code\": \"PT\" },\r\n // { \"name\": \"Puerto Rico\", \"code\": \"PR\" },\r\n // { \"name\": \"Qatar\", \"code\": \"QA\" },\r\n // { \"name\": \"Reunion\", \"code\": \"RE\" },\r\n // { \"name\": \"Romania\", \"code\": \"RO\" },\r\n // { \"name\": \"Russian Federation\", \"code\": \"RU\" },\r\n // { \"name\": \"RWANDA\", \"code\": \"RW\" },\r\n // { \"name\": \"Saint Helena\", \"code\": \"SH\" },\r\n // { \"name\": \"Saint Kitts and Nevis\", \"code\": \"KN\" },\r\n // { \"name\": \"Saint Lucia\", \"code\": \"LC\" },\r\n // { \"name\": \"Saint Pierre and Miquelon\", \"code\": \"PM\" },\r\n // { \"name\": \"Saint Vincent and the Grenadines\", \"code\": \"VC\" },\r\n // { \"name\": \"Samoa\", \"code\": \"WS\" },\r\n // { \"name\": \"San Marino\", \"code\": \"SM\" },\r\n // { \"name\": \"Sao Tome and Principe\", \"code\": \"ST\" },\r\n // { \"name\": \"Saudi Arabia\", \"code\": \"SA\" },\r\n // { \"name\": \"Senegal\", \"code\": \"SN\" },\r\n // { \"name\": \"Serbia and Montenegro\", \"code\": \"CS\" },\r\n // { \"name\": \"Seychelles\", \"code\": \"SC\" },\r\n // { \"name\": \"Sierra Leone\", \"code\": \"SL\" },\r\n // { \"name\": \"Singapore\", \"code\": \"SG\" },\r\n // { \"name\": \"Slovakia\", \"code\": \"SK\" },\r\n // { \"name\": \"Slovenia\", \"code\": \"SI\" },\r\n // { \"name\": \"Solomon Islands\", \"code\": \"SB\" },\r\n // { \"name\": \"Somalia\", \"code\": \"SO\" },\r\n // { \"name\": \"South Africa\", \"code\": \"ZA\" },\r\n // { \"name\": \"South Georgia and the South Sandwich Islands\", \"code\": \"GS\" },\r\n // { \"name\": \"Spain\", \"code\": \"ES\" },\r\n // { \"name\": \"Sri Lanka\", \"code\": \"LK\" },\r\n // { \"name\": \"Sudan\", \"code\": \"SD\" },\r\n // { \"name\": \"Suriname\", \"code\": \"SR\" },\r\n // { \"name\": \"Svalbard and Jan Mayen\", \"code\": \"SJ\" },\r\n // { \"name\": \"Swaziland\", \"code\": \"SZ\" },\r\n // { \"name\": \"Sweden\", \"code\": \"SE\" },\r\n // { \"name\": \"Switzerland\", \"code\": \"CH\" },\r\n // { \"name\": \"Syrian Arab Republic\", \"code\": \"SY\" },\r\n // { \"name\": \"Taiwan, Province of China\", \"code\": \"TW\" },\r\n // { \"name\": \"Tajikistan\", \"code\": \"TJ\" },\r\n // { \"name\": \"Tanzania, United Republic of\", \"code\": \"TZ\" },\r\n // { \"name\": \"Thailand\", \"code\": \"TH\" },\r\n // { \"name\": \"Timor-Leste\", \"code\": \"TL\" },\r\n // { \"name\": \"Togo\", \"code\": \"TG\" },\r\n // { \"name\": \"Tokelau\", \"code\": \"TK\" },\r\n // { \"name\": \"Tonga\", \"code\": \"TO\" },\r\n // { \"name\": \"Trinidad and Tobago\", \"code\": \"TT\" },\r\n // { \"name\": \"Tunisia\", \"code\": \"TN\" },\r\n // { \"name\": \"Turkey\", \"code\": \"TR\" },\r\n // { \"name\": \"Turkmenistan\", \"code\": \"TM\" },\r\n // { \"name\": \"Turks and Caicos Islands\", \"code\": \"TC\" },\r\n // { \"name\": \"Tuvalu\", \"code\": \"TV\" },\r\n // { \"name\": \"Uganda\", \"code\": \"UG\" },\r\n // { \"name\": \"Ukraine\", \"code\": \"UA\" },\r\n // { \"name\": \"United Arab Emirates\", \"code\": \"AE\" },\r\n // { \"name\": \"United Kingdom\", \"code\": \"GB\" },\r\n // { \"name\": \"United States\", \"code\": \"US\" },\r\n // { \"name\": \"United States Minor Outlying Islands\", \"code\": \"UM\" },\r\n // { \"name\": \"Uruguay\", \"code\": \"UY\" },\r\n // { \"name\": \"Uzbekistan\", \"code\": \"UZ\" },\r\n // { \"name\": \"Vanuatu\", \"code\": \"VU\" },\r\n // { \"name\": \"Venezuela\", \"code\": \"VE\" },\r\n // { \"name\": \"Viet Nam\", \"code\": \"VN\" },\r\n // { \"name\": \"Virgin Islands, British\", \"code\": \"VG\" },\r\n // { \"name\": \"Virgin Islands, U.S.\", \"code\": \"VI\" },\r\n // { \"name\": \"Wallis and Futuna\", \"code\": \"WF\" },\r\n // { \"name\": \"Western Sahara\", \"code\": \"EH\" },\r\n // { \"name\": \"Yemen\", \"code\": \"YE\" },\r\n // { \"name\": \"Zambia\", \"code\": \"ZM\" },\r\n // { \"name\": \"Zimbabwe\", \"code\": \"ZW\" }\r\n //];\r\n\r\n angular\r\n .module('inspinia.management')\r\n .constant('mgmtConstants',\r\n {\r\n gridColumns: gridColumns,\r\n timeType: timeType,\r\n gridSchema: gridSchema,\r\n dateFormats: dateFormats,\r\n events: events,\r\n usStates: usStates,\r\n memberTypes: memberTypes,\r\n denominationTypes: denominationTypes,\r\n adhanCalculationTypes: adhanCalculationTypes,\r\n juristicTypes: juristicTypes,\r\n iqamahTimesSettings: iqamahTimesSettings,\r\n reminderSeconds: reminderSeconds,\r\n iftaardays: iftaardays,\r\n maritalStatus: maritalStatus,\r\n applicationType: applicationType,\r\n imaamTitles: imaamTitles,\r\n mobileDevices: mobileDevices,\r\n sahoorDays: sahoorDays,\r\n qiyaamDays: qiyaamDays\r\n });\r\n})();\n\n'use strict';\r\n\r\nangular.module('inspinia')\r\n .controller('MainController', function () {\r\n\r\n var vm = this;\r\n\r\n vm.userName = 'Example user';\r\n vm.helloText = 'Welcome in INSPINIA Gulp SeedProject';\r\n vm.descriptionText = 'It is an application skeleton for a typical AngularJS web app. You can use it to quickly bootstrap your angular webapp projects.';\r\n\r\n });\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular.module('inspinia').directive('mmaLoadingSpinner', mmaLoadingSpinner);\r\n \r\n /* @ngInject */\r\n function mmaLoadingSpinner() {\r\n var directive = {\r\n restrict: 'A',\r\n replace: true,\r\n transclude: true,\r\n scope: {\r\n name: '@?',\r\n group: '@?',\r\n show: '=?',\r\n imgSrc: '@?',\r\n register: '@?',\r\n iosOverlay: '=?',\r\n class: '@?'\r\n },\r\n templateUrl: 'app/directives/mmaLoadingSpinner.html',\r\n link: linkFunction,\r\n bindToController: true,\r\n controllerAs: 'vm',\r\n controller: mmaLoadingController\r\n };\r\n\r\n\r\n function linkFunction(scope, element, attrs) {\r\n scope.loadingContainer = element.find('.mma-loading-spinner-container');\r\n };\r\n\r\n /* @ngInject */\r\n function mmaLoadingController($scope, Spinner, iosOverlay, spinnerService, $timeout) {\r\n var vm = this;\r\n\r\n vm.showDelay = 300;\r\n vm.showMessageDelay = 1000;\r\n vm.hideDelay = 500;\r\n vm.delayElapsed = false;\r\n \r\n //Spin.js settings\r\n vm.opts = {\r\n lines: 13, // The number of lines to draw\r\n length: 11, // The length of each line\r\n width: 5, // The line thickness\r\n radius: 17, // The radius of the inner circle\r\n corners: 1, // Corner roundness (0..1)\r\n rotate: 0, // The rotation offset\r\n color: '#FFF', // #rgb or #rrggbb\r\n speed: 1, // Rounds per second\r\n trail: 60, // Afterglow percentage\r\n shadow: false, // Whether to render a shadow\r\n hwaccel: false, // Whether to use hardware acceleration\r\n className: 'spinner', // The CSS class to assign to the spinner\r\n zIndex: 2e9, // The z-index (defaults to 2000000000)\r\n top: '50%', // Top position relative to parent in px\r\n left: '51%', // Left position relative to parent in px\r\n position: 'absolute'\r\n };\r\n\r\n vm.showSpinner = function (spinnerText, delay) {\r\n vm.delayElapsed = false;\r\n \r\n $timeout(function () {\r\n if (!vm.delayElapsed) {\r\n vm.spinner = vm.spinner || new Spinner(vm.opts);\r\n vm.spinner.spin();\r\n $scope.loadingContainer.append(vm.spinner.el);\r\n \r\n if (vm.iosOverlay) {\r\n $scope.loadingContainer.show();\r\n vm.overlay = iosOverlay({\r\n text: spinnerText,\r\n spinner: vm.spinner\r\n });\r\n\r\n } else {\r\n $scope.loadingContainer.fadeIn(200);\r\n }\r\n }\r\n }, (delay !== undefined ? delay : vm.showDelay));\r\n };\r\n\r\n vm.showSuccess = function () {\r\n if (vm.iosOverlay && vm.overlay) {\r\n $timeout(function() {\r\n vm.overlay.update({\r\n icon: \"../assets/images/check.png\",\r\n text: \"Success!\"\r\n });\r\n vm.hideSpinner(vm.showMessageDelay);\r\n }, 0);\r\n }else{\r\n iosOverlay({\r\n text: \"Success!\",\r\n duration: 1000,\r\n icon: \"../assets/images/check.png\"\r\n });\r\n }\r\n };\r\n \r\n\r\n vm.showError = function () {\r\n if (vm.iosOverlay && vm.overlay) {\r\n $timeout(function() {\r\n vm.overlay.update({\r\n icon: \"../assets/images/cross.png\",\r\n text: \"Error!\"\r\n });\r\n vm.hideSpinner(vm.showMessageDelay);\r\n }, 0);\r\n }else{\r\n iosOverlay({\r\n text: \"Error!\",\r\n duration: 1000,\r\n icon: \"../assets/images/cross.png\"\r\n }); \r\n }\r\n };\r\n\r\n vm.hideSpinner = function (delay) {\r\n vm.delayElapsed = true;\r\n if (vm.spinner) {\r\n $timeout(function () {\r\n if (vm.iosOverlay && vm.overlay) {\r\n vm.overlay.hide();\r\n vm.overlay = null;\r\n } else {\r\n vm.spinner.stop();\r\n }\r\n $scope.loadingContainer.fadeOut(200);\r\n }, delay || vm.hideDelay);\r\n }\r\n };\r\n \r\n // Declare a mini-API to hand off to our service so the service\r\n // doesn't have a direct reference to this directive's scope.\r\n // vm.api = {\r\n // name: vm.name,\r\n // group: vm.group,\r\n // show: vm.showSpinner,\r\n // hide: vm.hideSpinner\r\n // };\r\n \r\n // register should be true by default if not specified.\r\n if (!vm.hasOwnProperty('register')) {\r\n vm.register = true;\r\n } else {\r\n vm.register = vm.register.toLowerCase() === 'false' ? false : true;\r\n }\r\n \r\n // Register this spinner with the spinner service.\r\n if (vm.register === true) {\r\n spinnerService._register(vm);\r\n }\r\n\r\n // Unregister this spinner if the $destroy event is emitted on scope.\r\n $scope.$on('$destroy', function () {\r\n spinnerService._unregister(vm.name);\r\n });\r\n };\r\n\r\n return directive;\r\n };\r\n})();\n(function () {\r\n 'use strict';\r\n /**\r\n * pageTitle - Directive for set Page title - mata title\r\n */\r\n function pageTitle($rootScope, $timeout) {\r\n return {\r\n link: function (scope, element) {\r\n var listener = function (event, toState, toParams, fromState, fromParams) {\r\n // Default title - load on Dashboard 1\r\n var title = 'Mobile Masjid Apps | Register';\r\n // Create your own title pattern\r\n if (toState.data && toState.data.pageTitle) title = 'Mobile Masjid Apps | ' + toState.data.pageTitle;\r\n $timeout(function () {\r\n element.text(title);\r\n });\r\n };\r\n $rootScope.$on('$stateChangeStart', listener);\r\n }\r\n }\r\n };\r\n /**\r\n * sideNavigation - Directive for run metsiMenu on sidebar navigation\r\n */\r\n function sideNavigation($timeout) {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element) {\r\n // Call the metsiMenu plugin and plug it to sidebar navigation\r\n $timeout(function () {\r\n element.metisMenu();\r\n\r\n });\r\n }\r\n };\r\n };\r\n /**\r\n * minimalizaSidebar - Directive for minimalize sidebar\r\n */\r\n function minimalizaSidebar($timeout, authService) {\r\n \r\n return {\r\n restrict: 'A',\r\n template: '',\r\n controller: function ($scope,$rootScope, $element) {\r\n var $sideMenu = $('#side-menu');\r\n $scope.minimalize = function (timeout) {\r\n $(\"body\").toggleClass(\"mini-navbar\");\r\n\r\n if (!$('body').hasClass('mini-navbar') || $('body').hasClass('body-small')) {\r\n $(\"#masjid-logo\").removeAttr('width');\r\n // Hide menu in order to smoothly turn on when maximize menu\r\n $sideMenu.hide();\r\n $sideMenu.removeClass(\"nav-collapsed\");\r\n // For smoothly turn on menu\r\n setTimeout(\r\n function () {\r\n $sideMenu.fadeIn(timeout || 500);\r\n }, timeout || 100);\r\n } else if ($('body').hasClass('fixed-sidebar')) {\r\n //var $sideMenu = $('#side-menu');\r\n $sideMenu.hide();\r\n $sideMenu.removeClass(\"nav-collapsed\");\r\n setTimeout(\r\n function () {\r\n $sideMenu.fadeIn(timeout || 500);\r\n }, timeout || 300);\r\n } else {\r\n // Remove all inline style from jquery fadeIn function to reset menu state\r\n $sideMenu.removeAttr('style');\r\n $sideMenu.addClass(\"nav-collapsed\");\r\n $(\"#masjid-logo\").attr('width', 60);\r\n }\r\n\r\n $rootScope.$broadcast('mma-refreshScheduler');\r\n }\r\n },\r\n link: function ($scope) {\r\n if (authService.getUser().navigationCollapsed) {\r\n $scope.minimalize(0);\r\n }\r\n }\r\n };\r\n };\r\n /**\r\n * fullScroll - Directive for slimScroll with 100%\r\n */\r\n function fullScroll($timeout) {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element) {\r\n $timeout(function () {\r\n element.slimscroll({\r\n height: '100%',\r\n railOpacity: 0.9\r\n });\r\n\r\n });\r\n }\r\n };\r\n };\r\n /**\r\n * fitHeight - Directive for set height fit to window height\r\n */\r\n function fitHeight() {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element) {\r\n element.css(\"height\", $(window).height() + \"px\");\r\n element.css(\"min-height\", $(window).height() + \"px\");\r\n }\r\n };\r\n }\r\n\r\n //function disableContents() {\r\n // return {\r\n // restrict: 'A',\r\n // link:function(scope, element) {\r\n \r\n // }\r\n // }\r\n //}\r\n\r\n function validateEquals() {\r\n return {\r\n require: 'ngModel',\r\n link: function (scope, element, attrs, ngModelCtrl) {\r\n function validateEqual(value) {\r\n var valid = (value === scope.$eval(attrs.validateEquals));\r\n ngModelCtrl.$setValidity('equal', valid);\r\n return valid ? value : undefined;\r\n }\r\n ngModelCtrl.$parsers.push(validateEqual);\r\n ngModelCtrl.$formatters.push(validateEqual);\r\n\r\n scope.$watch(attrs.validateEquals, function() {\r\n ngModelCtrl.$setViewValue(ngModelCtrl.$viewValue);\r\n });\r\n }\r\n };\r\n };\r\n\r\n /**\r\n * icheck - Directive for custom checkbox icheck\r\n */\r\n function icheck($timeout) {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function ($scope, element, $attrs, ngModel) {\r\n return $timeout(function () {\r\n var value;\r\n value = $attrs['value'];\r\n\r\n $scope.$watch($attrs['ngModel'], function(newValue) {\r\n $(element).iCheck('update');\r\n });\r\n\r\n return $(element).iCheck({\r\n checkboxClass: 'icheckbox_square-green',\r\n radioClass: 'iradio_square-green'\r\n\r\n }).on('ifChanged', function (event) {\r\n if ($(element).attr('type') === 'checkbox' && $attrs['ngModel']) {\r\n $scope.$apply(function () {\r\n return ngModel.$setViewValue(event.target.checked);\r\n });\r\n }\r\n if ($(element).attr('type') === 'radio' && $attrs['ngModel']) {\r\n return $scope.$apply(function () {\r\n return ngModel.$setViewValue(value);\r\n });\r\n }\r\n });\r\n });\r\n }\r\n };\r\n }\r\n\r\n angular\r\n .module('inspinia')\r\n .directive('pageTitle', pageTitle)\r\n .directive('sideNavigation', sideNavigation)\r\n .directive('minimalizaSidebar', minimalizaSidebar)\r\n .directive('validateEquals', validateEquals)\r\n .directive('fullScroll', fullScroll)\r\n .directive('icheck', icheck)\r\n .directive('fitHeight', fitHeight);\r\n\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('inspinia.data',\r\n\t\t[\r\n\t\t\t'ngResource',\r\n\t\t\t'blocks.exception',\r\n\t\t\t'blocks.logger'\r\n\t\t]);\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('inspinia.data')\r\n .factory('dataHelper', dataHelper);\r\n\r\n function dataHelper() {\r\n var service = {\r\n getRequestParameters: getRequestParameters,\r\n postRequestParameters: postRequestParameters,\r\n putRequestParameters: putRequestParameters,\r\n authenticateRequestParameters: authenticateRequestParameters,\r\n serverPath: serverPath,\r\n sendResponseData: sendResponseData\r\n }\r\n\r\n return service;\r\n\r\n function getRequestParameters(isArray) {\r\n return {\r\n method: 'GET',\r\n headers: { 'Content-Type': 'application/json' },\r\n isArray: isArray || false\r\n }\r\n }\r\n\r\n function postRequestParameters() {\r\n return {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' }\r\n }\r\n }\r\n\r\n function putRequestParameters(isArray) {\r\n return {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json' },\r\n isArray: isArray || false\r\n }\r\n }\r\n\r\n function authenticateRequestParameters() {\r\n return {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\r\n transformRequest: function (data, headersGetter) {\r\n var str = [];\r\n for (var d in data)\r\n str.push(encodeURIComponent(d) + '=' +\r\n encodeURIComponent(data[d]));\r\n return str.join('&');\r\n }\r\n\r\n }\r\n }\r\n\r\n function serverPath(endPoint) {\r\n endPoint = endPoint || '';\r\n if (window.location.hostname.indexOf('localhost') >= 0) {\r\n return 'http://localhost:56857/' + endPoint;\r\n }\r\n else if (window.location.hostname.indexOf('stage') >= 0) {\r\n return 'http://masjidappsportal-stageapi.azurewebsites.net/' + endPoint;\r\n } else {\r\n\r\n return 'https://api.masjidapps.com/' + endPoint;\r\n \r\n }\r\n\r\n }\r\n \r\n function sendResponseData(response) {\r\n return response.data;\r\n };\r\n }\r\n})(); \r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('inspinia.data')\r\n .factory('accountsData', accountsData)\r\n\r\n accountsData.$inject = ['$resource', '$http', 'dataHelper'];\r\n\r\n function accountsData($resource, $http, dataHelper) {\r\n\r\n var helper = {\r\n registerUser: registerUser,\r\n login: login,\r\n getCurrentUser: getCurrentUser,\r\n sendResetPassword: sendResetPassword,\r\n resetPassword: resetPassword\r\n }\r\n\r\n return helper;\r\n\r\n function apiCalls() {\r\n return {\r\n registration: $resource(dataHelper.serverPath() + 'accounts/create', null,\r\n {\r\n 'registerUser': dataHelper.postRequestParameters()\r\n }),\r\n // login: $resource(dataHelper.serverPath('oauth/token'), null,\r\n // {\r\n // 'loginUser': dataHelper.authenticateRequestParameters()\r\n // }),\r\n forgetPassword: $resource(dataHelper.serverPath() + 'accounts/forgetPassword', null,\r\n {\r\n 'sendLink': dataHelper.postRequestParameters()\r\n }),\r\n resetPassword: $resource(dataHelper.serverPath() + 'accounts/resetPassword', null,\r\n {\r\n 'reset': dataHelper.postRequestParameters()\r\n }),\r\n user: $resource(dataHelper.serverPath() + 'accounts/currentuser', null,\r\n {\r\n 'getCurrentUser': dataHelper.getRequestParameters()\r\n })\r\n };\r\n }\r\n\r\n function transformLoginRequest(data, headersGetter) {\r\n var str = [];\r\n for (var d in data)\r\n str.push(encodeURIComponent(d) + '=' +\r\n encodeURIComponent(data[d]));\r\n return str.join('&');\r\n }\r\n\r\n\r\n function registerUser(registerModel) {\r\n return $http.post(dataHelper.serverPath() + 'accounts/currentuser');\r\n // return apiCalls().registration.registerUser(registerModel);\r\n }\r\n\r\n function login(loginModel) {\r\n \r\n $http({\r\n method: 'POST',\r\n url: dataHelper.serverPath('oauth/token'),\r\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' }\r\n }, loginModel, { transformRequest: transformLoginRequest });\r\n //return apiCalls().login.loginUser(loginModel);\r\n }\r\n\r\n function getCurrentUser() {\r\n return apiCalls().user.getCurrentUser();\r\n }\r\n\r\n function sendResetPassword(sendResetModel) {\r\n return apiCalls().resetPassword(sendResetModel);\r\n }\r\n\r\n function resetPassword(resetPasswordModel) {\r\n return apiCalls().user.resetPassword(resetPasswordModel);\r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('inspinia.core',\r\n [\r\n 'ngAnimate',\r\n 'ngCookies',\r\n 'ngTouch',\r\n 'ngSanitize',\r\n 'ngMessages',\r\n 'ngAria',\r\n 'ngResource',\r\n 'ui.router',\r\n 'ui.bootstrap',\r\n \r\n 'kendo.directives',\r\n 'LocalStorageModule',\r\n 'blocks.exception',\r\n 'blocks.logger',\r\n 'angular-ladda',\r\n 'ui.sortable',\r\n 'ui.mask',\r\n 'vsGoogleAutocomplete',\r\n 'ngclipboard',\r\n 'minicolors',\r\n 'timer',\r\n 'ngImgCrop',\r\n 'ngFileUpload'\r\n ]);\r\n\r\n} ());\n(function () {\r\n 'use strict';\r\n\r\n angular.module('inspinia.core')\r\n .constant('helpContent',\r\n {\r\n adhanTimes: 'Click on the Edit Times or Create Entries for Next Month to make changes.',\r\n newMasjid: 'Enter the masjid administrator information, a masjid admin will be created and an email will be sent to the administrator to create a new masjid.',\r\n masjidSettings: 'You will be prompted to re-calculate adhan times if the Adhan Calculation Type, Juristic Type or Timezone changes. Use the Iqamah Settings tab to configure and calculate your Iqamah Times.'\r\n });\r\n})();\n(function() {\r\n 'use strict';\r\n\r\n /* @ngInject */\r\n angular.module('inspinia.core')\r\n .constant('toastr', toastr)\r\n .constant('moment', moment)\r\n .constant('momenttz', moment.tz)\r\n .constant('_', _)\r\n .constant('kendo', kendo)\r\n .constant('TweenMax', TweenMax)\r\n .constant('TweenLite', TweenLite)\r\n .constant('Spinner', Spinner)\r\n .constant('iosOverlay', iosOverlay)\r\n .constant(\"appSettings\",\r\n {\r\n serverPath: \"https://microsoft-apiappb0ace786fe814338a5c5404868098dca.azurewebsites.net/\",\r\n //serverPath: \"http://localhost:56857/MobileMasjidApps.WebApi/\",\r\n httpHeaderConfigs: {\r\n POST: {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' }\r\n },\r\n GET: {\r\n method: 'GET',\r\n headers: { 'Content-Type': 'application/json' }\r\n },\r\n authenticate: {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\r\n transformRequest: function(data, headersGetter) {\r\n var str = [];\r\n for (var d in data)\r\n str.push(encodeURIComponent(d) + '=' +\r\n encodeURIComponent(data[d]));\r\n return str.join('&');\r\n }\r\n\r\n }\r\n }\r\n\r\n })\r\n .constant(\"modalModes\", {\r\n Edit: 1,\r\n Add: 2\r\n })\r\n .constant(\"roles\", {\r\n superAdmin: \"SuperAdmin\",\r\n admin: \"Admin\",\r\n user: \"User\",\r\n salah: \"Manage Salah Times\",\r\n jummah: \"Manage Jummah\",\r\n events: \"Events / Calendar Management\",\r\n news: \"Add/Update News Articles\",\r\n notifications: \"Send Push Notifications\",\r\n members: \"Member Management\",\r\n broadcast: \"LIVE Streaming Link Management\",\r\n ramadan: \"Ramadan\",\r\n volunteer: \"Volunteer Management\",\r\n userManagement: \"User Management\",\r\n masjidManagement: \"Masjid Management\",\r\n imaams: \"Imam Management\"\r\n })\r\n .constant(\"googleApiKey\", \"AIzaSyD-mThAKBJm0KlPpfanTatdcShNbq104yw\");\r\n})();\n\n// (function () {\r\n// 'use strict';\r\n// angular.module('inspinia.core')\r\n// .run(spinnerServiceConfig);\r\n// \r\n// /* @ngInject */\r\n// function spinnerServiceConfig(spinnerService){\r\n// console.log('Running Done');\r\n// Pace.on('done', function(){\r\n// spinnerService.hideAll(); \r\n// });\r\n// }\r\n// /* @ngInject */\r\n// function restangularConfig(RestangularProvider) {\r\n// \r\n// if (window.location.hostname.indexOf('localhost') >= 0) {\r\n// RestangularProvider.setBaseUrl('https://microsoft-apiappb0ace786fe814338a5c5404868098dca.azurewebsites.net');\r\n// } else {\r\n// RestangularProvider.setBaseUrl('http://localhost:56857/MobileMasjidApps.WebApi');\r\n// }\r\n// \r\n// RestangularProvider.setDefaultHeaders({ 'Content-Type': 'application/json' });\r\n// \r\n// RestangularProvider.setFullRequestInterceptor(function (element, operation, route, url, headers, params, httpConfig) {\r\n// var token = authService.getToken();\r\n// \r\n// if (token) {\r\n// headers.Authorization = 'Bearer ' + token;\r\n// }\r\n// \r\n// return{\r\n// element: element,\r\n// params: params,\r\n// headers: headers,\r\n// httpConfig: httpConfig\r\n// }\r\n// });\r\n// \r\n// }\r\n\r\n// })();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular.module('inspinia').factory('authInterceptor', authInterceptor);\r\n \r\n /* @ngInject */\r\n function authInterceptor(authService, spinnerService, $q, $location) {\r\n return {\r\n request: function (config) {\r\n \r\n var token = authService.getToken();\r\n \r\n if (token) {\r\n config.headers.Authorization = 'Bearer ' + token;\r\n \r\n }\r\n\r\n config.data = config.data || {};\r\n config.data['client_id'] = 'MobileMasjidAdmin';\r\n\r\n return config;\r\n },\r\n response: function (response) {\r\n return response;\r\n },\r\n responseError: function (rejection) {\r\n if (rejection.status === 401) {\r\n $location.url('/accounts.login');\r\n }\r\n\r\n /* If not a 401, do nothing with this error.\r\n * This is necessary to make a `responseError`\r\n * interceptor a no-op. */\r\n return $q.reject(rejection);\r\n }\r\n };\r\n };\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular.module('inspinia.core')\r\n .animation('.swap-x', swapX)\r\n .animation('.sp-fadeOutIn', spFadeInOut)\r\n .animation('.slide-up', slideUp);\r\n \r\n /* @ngInject */\r\n function spFadeInOut(TweenMax, $timeout) {\r\n var duration = .5;\r\n return {\r\n addClass: function (element, className, done) {\r\n\r\n if (className === \"ng-hide\") {\r\n var spinnerContainer = element.find('.sk-spinner-container');\r\n if (spinnerContainer) {\r\n TweenMax.to(spinnerContainer, duration, {\r\n opacity: 0,\r\n onComplete: done\r\n });\r\n $timeout(function () {\r\n spinnerContainer.addClass('hidden animation-pause');\r\n }, 500);\r\n\r\n }\r\n else {\r\n done();\r\n }\r\n }\r\n },\r\n removeClass: function (element, className, done) {\r\n\r\n if (className === \"ng-hide\") {\r\n // element.css({ 'display': \"block\" });\r\n var spinnerContainer = element.find('.sk-spinner-container');\r\n if (spinnerContainer) {\r\n spinnerContainer.removeClass('hidden animation-pause');\r\n TweenMax.to(spinnerContainer, 0, {\r\n opacity: 0.75,\r\n onComplete: done\r\n });\r\n \r\n // console.log('showing!!!');\r\n } else {\r\n done();\r\n }\r\n }\r\n }\r\n };\r\n };\r\n \r\n /* @ngInject */\r\n function swapX(TweenMax) {\r\n var duration = .5;\r\n return {\r\n beforeAddClass: function (element, className, done) {\r\n if (className === 'ng-hide') {\r\n element.addClass('hidden');\r\n TweenMax.to(element, 0, {\r\n opacity: 0,\r\n x: '+10%',\r\n onComplete: done\r\n });\r\n }\r\n },\r\n removeClass: function (element, className, done) {\r\n if (className === 'ng-hide') {\r\n element.addClass('pull-right');\r\n element.removeClass('hidden');\r\n TweenMax.to(element, duration, {\r\n opacity: 1,\r\n x: '0%',\r\n ease: Power2.easeNone,\r\n onComplete: done\r\n });\r\n }\r\n }\r\n };\r\n }\r\n \r\n /* @ngInject */\r\n function slideUp(TweenLite) {\r\n var duration = 300;\r\n return {\r\n addClass: function (element, className, done) {\r\n if (className === 'ng-hide') {\r\n element.slideUp(duration);\r\n }\r\n },\r\n removeClass: function (element, className, done) {\r\n if (className === 'ng-hide') {\r\n element.slideDown(duration);\r\n }\r\n }\r\n };\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular.module('inspinia.core')\r\n .service('alert', alert);\r\n\r\n alert.$inject = ['$rootScope', '$timeout'];\r\n\r\n function alert($rootScope, $timeout) {\r\n \r\n $rootScope.$on('$stateChangeStart', function(){\r\n if($rootScope.alert){\r\n $rootScope.alert.show = false;\r\n }\r\n });\r\n \r\n return function (type, title, message, timeout) {\r\n $rootScope.alert = {\r\n hasBeenShown: true,\r\n show: true,\r\n type: type,\r\n message: message,\r\n title: title,\r\n close: function(){\r\n $rootScope.alert.show = false;\r\n }\r\n };\r\n }\r\n }\r\n})();\r\n\n(function(){\r\n\t'use strict';\r\n\t\r\n\tangular.module('inspinia.accounts',[\r\n\t\t'inspinia.core',\r\n\t\t'inspinia.services'\r\n\t]);\r\n\t\r\n})();\n(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('inspinia.accounts')\r\n .config(accountsRouteConfig);\r\n\r\n /* @ngInject */\r\n function accountsRouteConfig($stateProvider, helpContent) {\r\n $stateProvider\r\n //Accounts\r\n .state('accounts', {\r\n abstract: true,\r\n url: \"/accounts\",\r\n templateUrl: \"app/accounts/layout.html\",\r\n data: { specialClass: 'navigation-bg account background' },\r\n params: {\r\n spinnerName: 'spinner-account'\r\n }\r\n })\r\n .state('accounts.login', {\r\n url: \"/login\",\r\n templateUrl: \"app/accounts/login.html\",\r\n controller: \"AccoutsController\",\r\n controllerAs: \"vm\",\r\n data: { pageTitle: 'Login' }\r\n })\r\n .state('accounts.register', {\r\n url: \"/register?id&code\",\r\n templateUrl: \"app/accounts/register.html\",\r\n controller: \"AccoutsController\",\r\n controllerAs: \"vm\",\r\n data: { pageTitle: 'Registration' }\r\n })\r\n .state('accounts.forgetPassword', {\r\n url: \"/forgetPassword\",\r\n templateUrl: \"app/accounts/forgetPassword.html\",\r\n controller: \"AccoutsController\",\r\n controllerAs: \"vm\",\r\n data: { pageTitle: 'Forget Password' }\r\n })\r\n .state('accounts.resetPassword', {\r\n url: \"/resetPassword?id&code\",\r\n templateUrl: \"app/accounts/resetPassword.html\",\r\n controller: \"AccoutsController\",\r\n controllerAs: \"vm\",\r\n data: { pageTitle: 'Reset Password' }\r\n\r\n })\r\n .state('accounts.masjid',\r\n {\r\n url: \"/masjid\",\r\n templateUrl: \"app/management/masjid/wizard/wizardContainer.html\",\r\n controller: \"WizardController\",\r\n controllerAs: \"vm\",\r\n data: {\r\n pageTitle: 'New Masjid',\r\n pageHelp: helpContent.newMasjid || '',\r\n specialClass: 'navigation-bg account background large-middle-box'\r\n }\r\n })\r\n .state('accounts.masjid.accountInformation',\r\n {\r\n url: \"/accountInformation\",\r\n templateUrl: \"app/management/masjid/wizard/accountInformation.html\"\r\n })\r\n .state('accounts.masjid.masjidInformation',\r\n {\r\n url: \"/masjidInformation\",\r\n templateUrl: \"app/management/masjid/wizard/masjidInformation.html\"\r\n })\r\n .state('accounts.masjid.termsAndConditions',\r\n {\r\n url: \"/termsAndConditions\",\r\n templateUrl: \"app/management/masjid/wizard/termsAndConditions.html\"\r\n });\r\n\r\n ///* @ngInject */\r\n //function masjidResolve(masjidservice) {\r\n // return masjidservice.getTimeZones();\r\n //}\r\n }\r\n})();\n// (function () {\r\n// 'use strict';\r\n// \r\n// angular\r\n// .module('inspinia.core')\r\n// .factory('accountService', userAccount)\r\n// \r\n// userAccount.$inject = ['$resource', 'appSettings','authService'];\r\n// \r\n// function userAccount($resource, appSettings,authService) {\r\n// return {\r\n// registration: $resource(appSettings.serverPath + 'api/accounts/create', null,\r\n// {\r\n// 'registerUser': appSettings.httpHeaderConfigs.POST\r\n// }),\r\n// login: $resource(appSettings.serverPath + 'oauth/token', null,\r\n// {\r\n// 'loginUser': appSettings.httpHeaderConfigs.authenticate\r\n// }),\r\n// forgetPassword: $resource(appSettings.serverPath + 'api/accounts/forgetPassword', null,\r\n// {\r\n// 'sendLink': appSettings.httpHeaderConfigs.POST\r\n// }),\r\n// resetPassword: $resource(appSettings.serverPath + 'api/accounts/resetPassword', null,\r\n// {\r\n// 'reset': appSettings.httpHeaderConfigs.POST\r\n// }),\r\n// user: $resource(appSettings.serverPath + 'api/accounts/currentuser', null,\r\n// {\r\n// 'getCurrentUser': appSettings.httpHeaderConfigs.GET\r\n// })\r\n// }\r\n// }\r\n// })();\n(function () {\r\n 'use strict';\r\n\r\n angular.module('inspinia.accounts')\r\n .controller('AccoutsController', AccoutsController);\r\n\r\n //AccoutsController.$inject = ['$state', 'accountsService','alert','$stateParams','$q', 'logger']\r\n\r\n /* @ngInject */\r\n function AccoutsController($state, accountsService, alert, $stateParams, $location,logger, exception, authService, spinnerService) {\r\n /*jshint validthis: true */\r\n\r\n var vm = this;\r\n vm.UserName = '';\r\n vm.FirstName = '';\r\n vm.LastName = '';\r\n vm.Email = '';\r\n vm.Password = '';\r\n vm.ConfirmPassword = '';\r\n vm.grant_type = 'password';\r\n vm.PasswordReset = false;\r\n var id = $location.search().id;\r\n var code = $location.search().code;\r\n \r\n function getCurrentUser() {\r\n // spinnerService.show($stateParams.spinnerName);\r\n accountsService.getCurrentUser()\r\n .then(function (response) {\r\n authService.setUser(response);\r\n spinnerService.hide($stateParams.spinnerName);\r\n if (response.masjidID > 0) {\r\n $state.go(accountsService.determineWhereToGo(), {}, { reload: true });\r\n } else {\r\n $state.go('management.superadmin.selectmasjid', {}, { reload: true });\r\n }\r\n \r\n }).catch(function (err) {\r\n authService.removeToken();\r\n return exception.catcher('Login failed')(err);\r\n });\r\n };\r\n\r\n vm.login = function () {\r\n spinnerService.showByName($stateParams.spinnerName);\r\n accountsService.loginUser({ \r\n userName: vm.UserName, \r\n password: vm.Password, \r\n grant_type: vm.grant_type })\r\n .then(function (response) {\r\n authService.setToken(response.access_token);\r\n getCurrentUser();\r\n \r\n })\r\n .catch(function (err) {\r\n exception.catcher('Login failed : (')(err);\r\n });\r\n };\r\n\r\n vm.sendResetPassword = function() {\r\n spinnerService.showByName($stateParams.spinnerName);\r\n accountsService.sendForgotPasswordLink({ email: vm.Email })\r\n .then(function(res) {\r\n spinnerService.hide($stateParams.spinnerName);\r\n logger.success('Reset password link has been sent. Please check your email and use the link to reset your password.');\r\n }).catch(function(err) {\r\n return exception.catcher('Something went wrong :(, Please make sure you entered the correct email.')(err);\r\n });\r\n };\r\n\r\n vm.register = function() {\r\n spinnerService.showByName($stateParams.spinnerName);\r\n accountsService.registerUser({\r\n Email: vm.Email,\r\n Password: vm.Password,\r\n id: id,\r\n code: code\r\n })\r\n .then(function(response) {\r\n spinnerService.hide($stateParams.spinnerName);\r\n vm.PasswordCreated = true;\r\n logger.success('Password Created!!, Click the button below to login.');\r\n }).catch(function(err) {\r\n return exception.catcher('Something went wrong :(')(err);\r\n });\r\n };\r\n\r\n vm.resetPassword = function(){\r\n spinnerService.showByName($stateParams.spinnerName);\r\n\r\n accountsService.resetPassword({ \r\n email : vm.Email, \r\n id: id,\r\n code: code,\r\n password : vm.Password,\r\n confirmPassword : vm.ConfirmPassword }\r\n ).then(function(res){\r\n spinnerService.hide($stateParams.spinnerName);\r\n logger.success('Your password has been reset. You can login by clicking the button below.');\r\n vm.PasswordReset = true;\r\n }).catch(function(err){\r\n return exception.catcher('Something went wrong :(')(err);\r\n });\r\n };\r\n };\r\n})();\n/**\r\n * INSPINIA - Responsive Admin Theme\r\n * 2.5\r\n *\r\n * Custom scripts\r\n */\r\n\r\nangular.element(document).ready(function ($timeout) {\r\n\r\n\r\n // Full height of sidebar\r\n function fix_height() {\r\n var heightWithoutNavbar = angular.element(\"body > #wrapper\").height() - 61;\r\n angular.element(\".sidebard-panel\").css(\"min-height\", heightWithoutNavbar + \"px\");\r\n\r\n var navbarHeigh = angular.element('nav.navbar-default').height();\r\n var wrapperHeigh = angular.element('#page-wrapper').height();\r\n\r\n if(navbarHeigh > wrapperHeigh){\r\n angular.element('#page-wrapper').css(\"min-height\", navbarHeigh + \"px\");\r\n }\r\n\r\n if(navbarHeigh < wrapperHeigh){\r\n angular.element('#page-wrapper').css(\"min-height\", angular.element(window).height() + \"px\");\r\n }\r\n\r\n if (angular.element('body').hasClass('fixed-nav')) {\r\n if (navbarHeigh > wrapperHeigh) {\r\n angular.element('#page-wrapper').css(\"min-height\", navbarHeigh - 60 + \"px\");\r\n } else {\r\n angular.element('#page-wrapper').css(\"min-height\", angular.element(window).height() - 60 + \"px\");\r\n }\r\n }\r\n\r\n }\r\n\r\n angular.element(window).bind(\"load resize scroll\", function() {\r\n if(!angular.element(\"body\").hasClass('body-small')) {\r\n fix_height();\r\n }\r\n });\r\n\r\n // Move right sidebar top after scroll\r\n angular.element(window).scroll(function(){\r\n if (angular.element(window).scrollTop() > 0 && !angular.element('body').hasClass('fixed-nav') ) {\r\n angular.element('#right-sidebar').addClass('sidebar-top');\r\n } else {\r\n angular.element('#right-sidebar').removeClass('sidebar-top');\r\n }\r\n });\r\n\r\n $timeout(function(){\r\n fix_height();\r\n });\r\n\r\n // Minimalize menu when screen is less than 768px\r\n angular.element(window).bind(\"load resize\", function() {\r\n if (angular.element(document).width() < 769) {\r\n angular.element('body').addClass('body-small')\r\n } else {\r\n angular.element('body').removeClass('body-small')\r\n }\r\n })\r\n\r\n});\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('inspinia')\r\n .run(runBlock);\r\n\r\n /** @ngInject */\r\n function runBlock($log, $location, $rootScope, $state, logger, authService, spinnerService) {\r\n $rootScope.$state = $state;\r\n var handlingStateChangeError = false;\r\n\r\n $rootScope.$on('$stateChangeError',\r\n function(event, toState, toParams, fromState, fromParams, error) {\r\n if (handlingStateChangeError) {\r\n return;\r\n }\r\n\r\n handlingStateChangeError = true;\r\n if (error.status === 401) {\r\n spinnerService.hideAll();\r\n $state.go('accounts.login');\r\n } else {\r\n\r\n var destination = (toState &&\r\n (toState.title || toState.name || toState.loadedTemplateUrl)) ||\r\n 'unknown target';\r\n\r\n if (destination.indexOf('accounts') === -1 && !authService.getUser()) {\r\n spinnerService.hideAll();\r\n $state.go('accounts.login');\r\n } else {\r\n\r\n var msg = 'Error routing to ' + destination + '. ' +\r\n (error.data ? error.data.message || '' : '') +\r\n (error.statusText ? '.
' + error.statusText : '') +\r\n (error.statusText ? ': ' + error.status : '');\r\n\r\n logger.error(msg, [toState]);\r\n }\r\n }\r\n\r\n handlingStateChangeError = false;\r\n });\r\n\r\n $rootScope.$on('$stateChangeStart',\r\n function(event, toState, toParams, fromState, fromParams) {\r\n if ($rootScope.$uibModalInstance) {\r\n $rootScope.$uibModalInstance.dismiss('cancel');\r\n $rootScope.$uibModalInstance = null;\r\n }\r\n if ($rootScope.$currentWatchUnbinder) {\r\n $rootScope.$currentWatchUnbinder();\r\n }\r\n spinnerService.hideAll();\r\n });\r\n $log.debug('runBlock end');\r\n }\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('inspinia')\r\n .config(routerConfig)\r\n .config(httpConfig)\r\n .config(resourceConfig)\r\n .config(localStorageConfig)\r\n .config(laddaProvider)\r\n .config(locationProvicer)\r\n .config(uiMaskConfig);\r\n\r\n /** @ngInject */\r\n function httpConfig($httpProvider) {\r\n $httpProvider.interceptors.push('authInterceptor');\r\n\r\n }\r\n\r\n /** @ngInject */\r\n function resourceConfig($resourceProvider) {\r\n $resourceProvider.defaults.stripTrailingSlashes = false;\r\n }\r\n\r\n /** @ngInject */\r\n function localStorageConfig(localStorageServiceProvider) {\r\n localStorageServiceProvider.setPrefix('mobilemMasjidApps');\r\n }\r\n\r\n /** @ngInject */\r\n function locationProvicer( $locationProvider ) {\r\n // In order to get the query string from the\r\n // $location object, it must be in HTML5 mode.\r\n $locationProvider.html5Mode( true );\r\n };\r\n\r\n /** @ngInject */\r\n function laddaProvider(laddaProvider) {\r\n laddaProvider.setOption({\r\n style: 'zoom-in'\r\n });\r\n }\r\n\r\n /** @ngInject */\r\n function uiMaskConfig(uiMaskConfigProvider) {\r\n\r\n }\r\n\r\n /** @ngInject */\r\n function routerConfig($stateProvider, $urlRouterProvider) {\r\n $stateProvider\r\n\r\n .state('index', {\r\n abstract: true,\r\n url: \"/index\",\r\n templateUrl: \"app/components/common/content.html\"\r\n })\r\n .state('index.main', {\r\n url: \"/main\",\r\n templateUrl: \"app/main/main.html\",\r\n data: { pageTitle: 'Example view' }\r\n })\r\n .state('index.minor', {\r\n url: \"/minor\",\r\n templateUrl: \"app/minor/minor.html\",\r\n data: { pageTitle: 'Example view' }\r\n });\r\n\r\n //$urlRouterProvider.otherwise('/index/main');\r\n $urlRouterProvider.otherwise('accounts/login');\r\n }\r\n\r\n})();\r\n\n//'use strict';\r\n\r\n////Directive used to set metisMenu and minimalize button\r\n//angular.module('inspinia')\r\n// .directive('sideNavigation', function ($timeout) {\r\n// return {\r\n// restrict: 'A',\r\n// link: function (scope, element) {\r\n// // Call metsi to build when user signup\r\n// scope.$watch('authentication.user', function() {\r\n// $timeout(function() {\r\n// element.metisMenu();\r\n// });\r\n// });\r\n\r\n// }\r\n// };\r\n// })\r\n// .directive('minimalizaSidebar', function ($timeout) {\r\n// return {\r\n// restrict: 'A',\r\n// template: '',\r\n// controller: function ($scope) {\r\n// $scope.minimalize = function () {\r\n// angular.element('body').toggleClass('mini-navbar');\r\n// if (!angular.element('body').hasClass('mini-navbar') || angular.element('body').hasClass('body-small')) {\r\n// // Hide menu in order to smoothly turn on when maximize menu\r\n// angular.element('#side-menu').hide();\r\n// // For smoothly turn on menu\r\n// $timeout(function () {\r\n// angular.element('#side-menu').fadeIn(400);\r\n// }, 200);\r\n// } else {\r\n// // Remove all inline style from jquery fadeIn function to reset menu state\r\n// angular.element('#side-menu').removeAttr('style');\r\n// }\r\n// };\r\n// }\r\n// };\r\n// });\r\n\r\n\r\n\n//(function () {\r\n// 'use strict';\r\n\r\n// angular.module('inspinia')\r\n// .config(stateConfig)\r\n// .config(httpConfig)\r\n// .config(resourceConfig)\r\n// .config(localStorageConfig)\r\n// .config(laddaProvider)\r\n// .config(uiMaskConfig)\r\n// .run(globalConfig);\r\n \r\n// /* @ngInject */\r\n// function httpConfig($httpProvider) {\r\n// $httpProvider.interceptors.push('authInterceptor');\r\n// }\r\n\r\n// /* @ngInject */\r\n// function resourceConfig($resourceProvider) {\r\n// $resourceProvider.defaults.stripTrailingSlashes = false;\r\n// }\r\n \r\n// /* @ngInject */\r\n// function localStorageConfig(localStorageServiceProvider) {\r\n// localStorageServiceProvider.setPrefix('mobilemMasjidApps');\r\n// }\r\n \r\n// /* @ngInject */\r\n// function laddaProvider(laddaProvider) {\r\n// laddaProvider.setOption({\r\n// style: 'zoom-in'\r\n// });\r\n// }\r\n\r\n// /* @ngInject */\r\n// function uiMaskConfig(uiMaskConfigProvider) {\r\n \r\n// }\r\n \r\n// /* @ngInject */\r\n// function stateConfig($stateProvider, $urlRouterProvider) {\r\n// $stateProvider\r\n// //Index\r\n// .state('index', {\r\n// abstract: true,\r\n// url: \"/index\",\r\n// templateUrl: \"app/components/common/content.html\",\r\n// data: {\r\n// specialClass: 'fixed-sidebar'\r\n// }\r\n// })\r\n// .state('index.main', {\r\n// url: \"/main\",\r\n// templateUrl: \"app/main/main.html\",\r\n// data: { pageTitle: 'Example view' }\r\n// })\r\n// .state('index.minor', {\r\n// url: \"/minor\",\r\n// templateUrl: \"app/minor/minor.html\",\r\n// data: { pageTitle: 'Example view' }\r\n// });\r\n\r\n// $urlRouterProvider.otherwise('accounts/login');\r\n// };\r\n \r\n// /** @ngInject */\r\n// function globalConfig($location, $rootScope, $state, logger) {\r\n// $rootScope.$state = $state;\r\n// var handlingStateChangeError = false;\r\n\r\n// $rootScope.$on('$stateChangeError',\r\n// function (event, toState, toParams, fromState, fromParams, error) {\r\n// if (handlingStateChangeError) {\r\n// return;\r\n// }\r\n\r\n// handlingStateChangeError = true;\r\n\r\n// if (error.status === 401) {\r\n// $state.go('accounts.login');\r\n// } else {\r\n// var destination = (toState &&\r\n// (toState.title || toState.name || toState.loadedTemplateUrl)) ||\r\n// 'unknown target';\r\n// var msg = 'Error routing to ' + destination + '. ' +\r\n// (error.data ? error.data.message || '' : '') +\r\n// (error.statusText ? '.
' + error.statusText : '') +\r\n// (error.statusText ? ': ' + error.status : '');\r\n\r\n// logger.error(msg, [toState]);\r\n\r\n// }\r\n\r\n// handlingStateChangeError = false;\r\n// });\r\n// // $rootScope.$on('$stateChangeSuccess',\r\n// // function (event, toState, toParams, fromState, fromParams) {\r\n// // spinnerService.hideAll();\r\n// // });\r\n// // Pace.on('done', function () {\r\n// // spinnerService.hideAll();\r\n// // });\r\n// }\r\n//})();\r\n\r\n\r\n\n//(function () {\r\n// 'use strict';\r\n\r\n// angular.module('inspinia',\r\n// [\r\n// 'inspinia.core',\r\n// 'inspinia.services',\r\n// 'inspinia.accounts',\r\n// 'inspinia.management'\r\n// ]);\r\n//})();\n(function() {\r\n 'use strict';\r\n\r\n angular.module('inspinia.widgets', []);\r\n})();\r\n\nangular.module(\"inspinia\").run([\"$templateCache\", function($templateCache) {$templateCache.put(\"app/accounts/confirmEmail.html\",\"

Enter Your Password

Click here to confirm your email
*
First Name canot be blank
\");\n$templateCache.put(\"app/accounts/forgetPassword.html\",\"

Forgot Password ?

Enter your email address and your password will be reset and emailed to you.

Please input a valid email address

Already an account?

Login to access you account
\");\n$templateCache.put(\"app/accounts/layout.html\",\"
\");\n$templateCache.put(\"app/accounts/login.html\",\"

Login

Enter your user name and password to access your account.

Please input a user name Your user name must be at least 3 characters Your user name cannot be longer than 20 characters User name is not a valid email
Please input a password Your password must be at least 8 characters

Forgot Password?

Forget password
\");\n$templateCache.put(\"app/accounts/register.html\",\"

Enter Password

Enter password to complete your registration.

Please input a password The password must be between 8 and 20 characters. Must contain a lower letter, uppercase letter, number and symbol.
Please match the passwords.
\");\n$templateCache.put(\"app/accounts/resetPassword.html\",\"

Reset Password

Enter your email and reset your password.

Please input a valid email address
Please input a password The password must be between 8 and 20 characters Must contain a lower letter, uppercase letter, number and symbol.
Please match the passwords.
Login to access you account
\");\n$templateCache.put(\"app/components/imageUpload.html\",\" \");\n$templateCache.put(\"app/components/readOnlySalahTimes.html\",\"
{{::vm.prayerTimes.prayerName}} In...
{{hhours}}:{{mminutes}}:{{sseconds}}
SalahAdhanIqamah
Fajr{{::vm.prayerTimes.fajrAdhan}}{{::vm.prayerTimes.fajrIqamah}}
Sunrise{{::vm.prayerTimes.sunrise}}
Dhuhr{{::vm.prayerTimes.duhrAdhan}}{{::vm.prayerTimes.duhrIqamah}}
Asr{{::vm.prayerTimes.asrAdhan}}{{::vm.prayerTimes.asrIqamah}}
Maghrib{{::vm.prayerTimes.maghribAdhan}}{{::vm.prayerTimes.maghribIqamah}}
Isha{{::vm.prayerTimes.ishaAdhan}}{{::vm.prayerTimes.ishaIqamah}}
Jummah{{::vm.prayerTimes.firstJummahAdhan}}{{::vm.prayerTimes.firstJummahIqamah}}
Khateeb{{::vm.prayerTimes.firstJummahKhateeb}}
Jummah 2{{::vm.prayerTimes.secondJummahAdhan}}{{::vm.prayerTimes.secondJummahIqamah}}
Khateeb{{::vm.prayerTimes.secondJummahKhateeb}}
Jummah 3{{::vm.prayerTimes.thirdJummahAdhan}}{{::vm.prayerTimes.thirdJummahIqamah}}
Khateeb{{::vm.prayerTimes.thirdJummahKhateeb}}
Taraweeh{{::vm.prayerTimes.taraweeh}}
View Month Times
\");\n$templateCache.put(\"app/core/404.html\",\"
404 Son!!!!!
\");\n$templateCache.put(\"app/core/alert.html\",\"
{{alert.title}} {{alert.message}}
\");\n$templateCache.put(\"app/core/errorMessages.html\",\"This item cannot be blank You have not met this item\\'s minimum length You have not met this item\\'s maximum length\");\n$templateCache.put(\"app/directives/mmaLoadingSpinner.html\",\"
\");\n$templateCache.put(\"app/main/main.html\",\"

{{main.helloText}}

{{main.descriptionText}}
\");\n$templateCache.put(\"app/minor/minor.html\",\"

Simple example of second view

Configure in app.js as index.minor state.
\");\n$templateCache.put(\"app/public/public.html\",\"
\");\n$templateCache.put(\"app/school/quoranSchool.html\",\"
Quaran School Yo.
\");\n$templateCache.put(\"app/widgets/mmaCountDown.html\",\"

The next batch of notifications will be sent in :   {{vm.countDown}}

\");\n$templateCache.put(\"app/widgets/mmaExport.html\",\"
\");\n$templateCache.put(\"app/widgets/mmaGridActions.html\",\"
\");\n$templateCache.put(\"app/widgets/mmaHeader.html\",\"

{{vm.pageTitle}}{{vm.bannerText}} {{vm.year}}

\");\n$templateCache.put(\"app/widgets/mmaMasjidAdhanSettings.html\",\"
*
Please enter Denomination Type
*
Please enter Adhan Calculation Type
*
Please enter Adhan Calculation Type
*
Address is not valid
{{adhanSettings.latitude}}
{{adhanSettings.longitude}}
{{adhanSettings.timezoneid}}
\");\n$templateCache.put(\"app/widgets/mmaMasjidAnglesAndOffsetSettings.html\",\"
\");\n$templateCache.put(\"app/widgets/mmaMasjidIqamahSettings.html\",\"
*
Please select Fajr
*
Please select Dhuhr
*
Please select Asr
*
Please select Maghrib
*
Please select Isha
\");\n$templateCache.put(\"app/widgets/mmaSelectMonth.html\",\"
\");\n$templateCache.put(\"app/widgets/widgetHeader.html\",\"

{{$state.current.data.pageTitle}}

\");\n$templateCache.put(\"app/widgets/widgetNav.html\",\"\");\n$templateCache.put(\"app/widgets/widgetTopNavLinks.html\",\"\");\n$templateCache.put(\"app/widgets/widgetUser.html\",\"\");\n$templateCache.put(\"app/components/common/content.html\",\"
\");\n$templateCache.put(\"app/components/common/footer.html\",\"
Powered By
\");\n$templateCache.put(\"app/components/common/ibox_tools.html\",\"
\");\n$templateCache.put(\"app/components/common/navigation.html\",\"\");\n$templateCache.put(\"app/components/common/topnavbar.html\",\"
\");\n$templateCache.put(\"app/management/broadcast/addlink.html\",\"

Add Braodcast Link

link canot be blank link must be a url
Close
\");\n$templateCache.put(\"app/management/broadcast/livebroadcast.html\",\"
\");\n$templateCache.put(\"app/management/events/container.html\",\"
\");\n$templateCache.put(\"app/management/events/eventRecurrencePrompt.html\",\"

Edit Recurring Item

Do you want to edit only this event occurrence or the whole series?

Edit current occurence
\");\n$templateCache.put(\"app/management/events/eventVolunteers.html\",\"
1Available Volunteers
Drag volunteers between list
  • {{::item.volunteerFirstName}} {{::item.volunteerLastName}}
2Added Volunteers
Drag volunteers between list
  • {{::volunteer.volunteerFirstName}} {{::volunteer.volunteerLastName}}
3Volunteer Tasks
Select tasks for
0\\\" class=\\\"slide-up row\\\">
{{::task.name}}
\");\n$templateCache.put(\"app/management/events/events.html\",\"

Not Authorized

You are not authorized to view this page.

{{dataItem.title}}
{{dataItem.title}}
\");\n$templateCache.put(\"app/management/events/eventsModal.html\",\"

{{::vm.title}}

Event Details
*
Please select eventType
*
Title canot be blank
*
Description canot be blank
Must be a valid url
*
Please enter a valid Start date
*
{{vm.customEndDateMessage || vm.defaultEndDateMessage}}
{{vm.frequencyText}}
occurrence(s)
{{vm.invalidRecurrenceEndMessage}}
{{vm.invalidWeeklySelectionMessage}}
Day of the month
of the month
{{vm.invalidMonthlySelectionMessage}}
Event Coordinator
Coordinator canot be blank
Coordinator Email must be a valid
Coordinator Phone canot be blank
Event Venue & Address
Please enter Event Venue
Address is not valid
Push Notifications
Event Flyer
{{vm.imageUploadText}}
File too large {{vm.errorFile.size / 1000000|number:1}}MB: max 1M
{{vm.eventImageFileName}} Delete
No image selected
{{vm.image.name}}
{{::vm.RemoveText}}

Changes are not allowed on Past Events

\");\n$templateCache.put(\"app/management/events/eventsReadonly.html\",\"
{{dataItem.title}}
{{dataItem.title}}
\");\n$templateCache.put(\"app/management/events/news.html\",\"
News Yo.
\");\n$templateCache.put(\"app/management/events/volunteerEdit.html\",\"

{{vm.title}}

*
First Name canot be blank
*
Last Name canot be blank
*
Phone canot be blank
*
Email canot be blank Email is not valid
*
Please select Brother/Sister
1Professional Skills
Drag skills between list
  • {{::skillSet.description}}
2Volunteer\\'s Skills
Drag skills between list
  • {{::skillSet.description}}
Delete
\");\n$templateCache.put(\"app/management/events/volunteers.html\",\"

{{::item.volunteerFirstName}} {{::item.volunteerLastName}}

  • {{::item.volunteerEmail}}
  • {{::item.volunteerPhone}}
\");\n$templateCache.put(\"app/management/imaams/imaams.html\",\"
0\\\">

{{::item.contactFirstName}} {{::item.contactLastName}}

  • {{::item.title}}
\");\n$templateCache.put(\"app/management/imaams/imaams.modal.html\",\"

{{vm.title}}

*
Please select Title
*
First Name canot be blank
*
Last Name canot be blank
*
Phone canot be blank
*
Email canot be blank Email is not valid
Must be a valid url
Imam Picture
{{vm.imageUploadText}}
File too large {{vm.errorFile.size / 1000000|number:1}}MB: max 1M
{{vm.imaam.contactPictureFileName}} Delete
No image selected
{{vm.image.name}}
*
Biography canot be blank
{{2000 - vm.imaam.contactBio.length}} characters left
Delete
\");\n$templateCache.put(\"app/management/masjid/masjid.adhanSettings.html\",\"\");\n$templateCache.put(\"app/management/masjid/masjid.html\",\"
Masjid Information
*
Masjid Name canot be blank
*
Email canot be blank Email is not valid
*
Phone canot be blank
*
Please enter Denomination Type
Website is not a valid url
Youtube is not a valid url
Facebook page is not a valid url
Masjid Address
*
Address is not valid
{{vm.latitude}}
{{vm.longitude}}
{{vm.timeZoneId}}
\");\n$templateCache.put(\"app/management/masjid/masjid.iqamahSettings.html\",\"
Please select Fajr
Please select Dhuhr
Please select Asr
Please select Maghrib
Please select Isha
\");\n$templateCache.put(\"app/management/masjid/newMasjid.html\",\"

Enter masjid admin information.

*
First Name canot be blank
*
Last Name canot be blank
*
Phone canot be blank
*
Email canot be blank Email is not valid
\");\n$templateCache.put(\"app/management/masjid/selectMasjid.html\",\"

Select or add Masjid.

\");\n$templateCache.put(\"app/management/masjid/settings.html\",\"
Adhan Times Settings
*
Please enter Adhan Calculation Type
*
Please enter Juristic Type
Iqamah Time Settings
Other Settings
   {{vm.systemHijriDate}}
{{vm.adjustedHijriDate}}
Read-Only Calendar
<div style=\\\"height:980px;position:relative;width:100%;\\\"><iframe width=\\\"100%\\\" height=\\\"100%\\\" style=\\\"border-width:0pt;\\\" frameborder=\\\"0\\\" scrolling=\\\"no\\\" src=\\\"{{vm.readOnlyCalenderUrl}}\\\"></iframe></div>
Public Prayer Times Url
<iframe width=\\\"{{vm.width}}px\\\" height=\\\"{{vm.height}}px\\\" style=\\\"border-width:0pt;\\\" frameborder=\\\"0\\\" scrolling=\\\"no\\\" src=\\\"{{vm.readOnlySalahUrl}}\\\"></iframe>
Public Prayer Times Widget Configuration








Mobile API Enpoints
{{vm.salahTimesUrl}}
Copy
{{vm.eventsUrl}}
Copy
{{vm.pushNotificationsUrl}}
Copy
{{vm.liveBroadCastUrl}}
Copy
{{vm.newsUrl}}
Copy
{{vm.imaamInfoUrl}}
Copy
{{vm.boardMembersUrl}}
Copy
{{vm.masjidInfoUrl}}
Copy
{{vm.deviceTokenUrl}}
Copy
{{vm.ramadanUrl}}
Copy
Generate New Mobile API key
\");\n$templateCache.put(\"app/management/masjid/timeCalculationPrompt.html\",\"

Recalculate Adhan times ?

Your timezone, calculation type or juristic type has changed, do you want to recalculate adhan times ?

Don\\'t recalculate Recalculate
\");\n$templateCache.put(\"app/management/members/dashboard.html\",\"
\");\n$templateCache.put(\"app/management/members/editMember.html\",\"

{{vm.title}}

Member Information
*
First Name canot be blank
*
*
Last Name canot be blank
*
Phone canot be blank
*
Email canot be blank Email is not valid
*
Please select Brother/Sister
{{vm.address1}} {{vm.address2}} {{vm.city}} , {{vm.state}} {{vm.zip}}
*
Please select Member Type
Member Details
Please select Marital Status
Please select Application Type
Delete
\");\n$templateCache.put(\"app/management/members/members.html\",\"
0\\\">
0\\\">

{{::item.firstName}} {{::item.lastName}}

  • {{::item.email}}
  • {{::item.membershipTypeDescr}} {{::item.phone}}
\");\n$templateCache.put(\"app/management/notifications/editNotification.html\",\"

{{vm.title}}

Please select at least one message group
This message will be sent to everyone regardless of notification settings, including all devices.
Got it, we will send it now
Please select both data and time
Message canot be blank
{{160 - vm.message.length}} characters left
Close
\");\n$templateCache.put(\"app/management/notifications/notifications.html\",\"
\");\n$templateCache.put(\"app/management/ramadan/ramadan.html\",\"
Taraweeh
Additional Information
EID Dates and Khateeb
EID Address
Cancel
\");\n$templateCache.put(\"app/management/salahTimes/adhanTimes.html\",\"

Please click on the button below to complete your Adhan/Iqamah times configuration.

\");\n$templateCache.put(\"app/management/salahTimes/createTimesModal.html\",\"

Create Salah Times

There are {{vm.numberOfDaysLeft}} days worth of Salah Times in the system. Do you want to create times now ?

{{vm.promptText}}

\");\n$templateCache.put(\"app/management/salahTimes/iqamahTimes.html\",\"
\");\n$templateCache.put(\"app/management/salahTimes/jummahTimes.html\",\"
\");\n$templateCache.put(\"app/management/salahTimes/readOnlySalahTimes.html\",\"
\");\n$templateCache.put(\"app/management/users/editUser.html\",\"

{{vm.title}}

*
First Name canot be blank
*
Last Name canot be blank
*
Phone canot be blank
*
Email canot be blank Email is not valid
*
Please select user role
2\\\">*
Please select permissions
Delete
\");\n$templateCache.put(\"app/management/users/users.html\",\"
0\\\">
0\\\">

{{::item.firstName}} {{::item.lastName}}

  • {{::item.email}}
  • {{::item.userTypeDescr}} {{::item.phoneNumber}}
\");\n$templateCache.put(\"app/management/masjid/wizard/accountInformation.html\",\"

Account Information

*
First Name canot be blank
*
Last Name canot be blank
*
Please input a password The password must be between 8 and 20 characters Must contain a lower letter, uppercase letter, number and symbol.
*
Please match the passwords.
*
Phone canot be blank
\");\n$templateCache.put(\"app/management/masjid/wizard/masjidInformation.html\",\"

Masjid Information

*
Masjid Name canot be blank
*
Email canot be blank Email is not valid
*
Phone canot be blank
*
Please enter Denomination Type
*
Please enter Adhan Calculation Type
*
Please enter Adhan Calculation Type
*
Address is not valid
{{vm.latitude}}
{{vm.longitude}}
{{vm.timeZoneId}}
\");\n$templateCache.put(\"app/management/masjid/wizard/termsAndConditions.html\",\"

Terms and Conditions

\\\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\\" Section 1.10.32 of \\\"de Finibus Bonorum et Malorum\\\", written by Cicero in 45 BC \\\"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?\\\" 1914 translation by H. Rackham \\\"But I must explain to you how all this mistaken idea of denouncing pleasure and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no annoying consequences, or one who avoids a pain that produces no resultant pleasure?\\\" Section 1.10.33 of \\\"de Finibus Bonorum et Malorum\\\", written by Cicero in 45 BC \\\"At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.\\\" 1914 translation by H. Rackham
Previous Submit
\");\n$templateCache.put(\"app/management/masjid/wizard/wizardContainer.html\",\"

New Masjid

Complete these steps below to create a masjid accont.

\");}]);"],"sourceRoot":"/source/"}