{"version":3,"sources":["../js/app.js"],"names":["angular","module","constant","window","sug_refs","al_networks","as_channels","st_units","addModules","SUGApp","confirmationWindowController","sugConditionalModules","length","forEach","dependency","requires","push","value","factory","$q","$http","expirations","cache","set","key","val","Date","now","copy","get","defVal","expires","Math","round","service","$modal","$rootScope","$sce","$routeParams","$location","$window","adService","sugCacheFactory","$on","scope","next","curr","adconfig","document","getElementById","adOverride","search","adNetwork","toString","toLowerCase","network","platform","category","section","type","position","setHeaderAdCode","isDefined","deployads","newPage","$$route","originalPath","isStringNullOrEmpty","string","isString","test","generateHash","data","hasher","Hashes","MD5","SHA256","hex","dataStr","isObject","JSON","stringify","error","alertOpen","alertWindowCtrl","$scope","$modalInstance","alertMessage","alertStyle","glyphIcon","alertTitle","trustAsHtml","ok","close","helpModalController","txtHelpTitle","txtHelpBody","lblOkButton","dismiss","confirmationModalController","txtConfirmationTitle","txtConfirmationMessage","lblYesButton","lblCancelButton","lblAltButton","confirm","altconfirm","cancel","addDirectiveStyles","stylesheetName","stylesArray","directiveStylePrefix","insertIndex","Array","isArray","styleSheet","findStyleSheet","cssIndex","stylesExist","sheetrules","cssRules","rules","r","hasOwnProperty","selectorText","styleObj","insertRule","selector","rule","addRule","addOpacity2color","rgb","opacity","replace","ajaxErrorHandler","errorObj","errMessage","isDefinedNotNullNotEmpty","resultErrorHandler","indexOf","CODE","location","reload","showMagnificAlert","ajaxResultInvalid","APISyncCall","APISyncCallV3","Method","url","goAction","timeout","deferred","defer","endPointURL","execute","isUndefined","resolve","SUCCESS","MESSAGE","isUndefinedOrNullOrEmpty","promise","t","isNaN","request","method","headers","Accept","Content-Type","e","APISyncCallWithCaching","ttl","hashObj","hashKey","endpoint","endpointResponse","Object","keys","then","response","backSlashesToFrontSlashes","path","broadCast","msg","$broadcast","color2rgb","color","d","createElement","style","body","appendChild","rgbColor","getComputedStyle","substr","lastIndexOf","removeChild","combineDateAndTime","date","time","hours","minutes","seconds","milliseconds","isDate","getHours","getMinutes","getSeconds","getMilliseconds","year","getFullYear","month","getMonth","day","getDate","dateStringtoDate","dateString","dateFormatID","tmpDateArray","tmpDateObj","split","dateToEpoch","getTime","dateToUsersTimezone","dateToConvert","tzName","parsedDate","toLocaleString","timeZone","epochToDate","epoch","formatMessageForModal","arrMessage","m","generateUUID","c","random","getAjaxResponseMessage","result","lowerCaseKeys","code","getGridSettings","getDeleteImageConfirmationMessage","filename","signupcount","themecount","portalcount","isIntegerGT0","message","messagePrefix","messageSuffix","themeStr","themeSeparator","portalStr","getReCaptcha","hasPrecision","testVal","precision","isFinite","decimalPart","injectConversions","conversions","targetSelector","targetElem","querySelector","convsContainer","element","ci","ciLen","append","checkExists","setInterval","clearInterval","isBoolean","variable","isEmptyObject","item","getOwnPropertyNames","isInteger","Number","isIntegerGTE0","isMobile","excludeTablet","navigator","userAgent","isNotBlankOrEmpty","isStringContainingAlpha","isStringLenGT0","isUndefinedOrEmptyObject","isUUID","RegExp","keyExists","obj","simplecheck","nestedKeys","parentObj","ki","lightOrDark","strColor","g","b","match","slice","sqrt","localToUtcDate","localDate","getTimezoneOffset","numToString","parseFloat","removeArrayDuplicates","arr","modifyOriginal","prims","boolean","number","objs","retArr","filter","resetServices","serviceName","saveGridSettings","showAlert","alertType","overrideController","fLocal","this","AT","controller","open","templateUrl","showConfirmationModal","fnClosed","fnDismissed","fnAlt","isFunction","showDateSelectionModal","labels","dateSelectionModalViewController","showHelpModal","showLoading","displayElem","left","top","topPosition","target","leftPosition","opts","lines","width","radius","corners","rotate","direction","speed","trail","shadow","hwaccel","className","zIndex","Spinner","spin","toCurrencyFloat","retVal","toFixed","utcToLocalDate","utcDate","tzOffset","validateCaptcha","validateEmail","email","validatePhone","phone","deepCopy","tmpArr","returnArray","assign","returnData","equals","keyArr","returnObject","hasCsvChars","s","regExp","refreshPageAds","setTimeout","refreshAds","go","Message","resp","statustext","status","success","tempArray","keyList","amountOfKeys","newObject","newKey","alertTemplate","template","constructor","floor","sheetName","foundSheet","sheets","styleSheets","i","href","urlParts","http","config","params","statusText","SUGHTTP","authorize","permission","_cf_clientid","hasPermission","httpFactory","settings","URI","sugtoken","post","endPointURI","token","isSUGToken","Authorization","X-SUG-Token","store","dataFactory","getSuccess","setSuccess","getMessage","setMessage","getData","setData","reset","init","ordersManager","loadAllOrders","activeOnly","messageClass","reject","remoteService","resource","callURL","resourceObject","resourceMethod","cfcMethod","geniusDrive","select","selectedNode","nodeChanged","node","selectResource","isfolder","fileid","localStorageFactory","localStoragePrefix","localStorage","log","console","setItem","defaultValue","getItem","setObject","getObject","parse","remove","removeItem","clear","len","substring","blnChangeOnlyFirstLetters","str","first","charAt","rest","toUpperCase","strReturn","join","$filter","input","decimals","percentified","html","text","matchClosedTags","matchUnclosedTags","charcount","trim","concat","$parse","array","groupByField","prev_item","groupKey","filteredData","directive","$timeout","link","attrs","$watch","sugFocus","focus","restrict","require","elm","ctrl","$setPristine","$pristine","address","SUGUtilities","$sanitize","arrNodes","tmp","nodes","showInline","output","showBr","es","arrErrors","$watchCollection","nVal","oVal","hasErrors","arrReturn","getErrors","err","dismissMessage","show","title","transclude","listid","owner","memberid","placement","sticky","routerefresh","util","sce","$document","$route","tags","header","isSticky","getAd","ad","p","stickyAdScroll","window_top","scrollY","el","topAnchor","div_top","offsetTop","offsetParent","window_bottom","on","sugBreadcrumb","destination","class","action","height","fn","elem","event","keyCode","$apply","card","complete","confirmation","lblNoButton","confirmationMessage","days","dateselectionvm","heading","lblFrom","lblOk","lblTo","opened","opened2","dateformat","startdate","theDate","enddate","$event","preventDefault","stopPropagation","open2","globalRouteChangeHandler","AnalyticsProvider","setAccount","trackPages","trackUrlParams","run","Analytics","arrUsPrivacy","ga","userdef","usertype","usprivacystring","utility","getCookie","_hsq","hubSpotPagePath","pathname","hash","globalUrlConsumer","objUrlParams","getAllUrlParams","arrAttributionParams","attributionparams","$provide","$exceptionHandler","$delegate","$injector","exception","cause","decorator","$inject","id","fjs","getElementsByTagName","js","src","parentNode","insertBefore","globalcfg","prop","showFooterAd","broadCastSent","eventListenerHandler","evt","bounding","adContainer","getBoundingClientRect","bottom","innerHeight","documentElement","clientHeight","n","o","addEventListener","removeEventListener","objConfig","themeid","showadminbar","previewonly","showleft","showright","showsecondary","showthin","adconfigleft","adconfigright","isRSVP","shownoadlink","adspacing","showbottom","showsinglewantad","getSecondary","signupheight","$","outerHeight","stacked","adcount","topspacing","bottomspacing","forceThin","forceSide","wideView","sideVal","ResizeObserver","observe","innerWidth","adheight","minspacing","setScroll","ready","setConfig","isrsvp","scrollSignUpAds","bottomBuffer","strAd","strAnchor","strBottom","intAdHeight","intBuffer","div_bot","locktop","elAd","scrollTop","offset","css","margin","adnetworkdatafile","themeData","responsive","secondary","bottomAdLoaded","triggerAd","$set","empty","adscript","docWriter","write","content","innerHTML","adElem","urlParams","URLSearchParams","previewOnly","sug_memberinfo","MEMBERID","upgradelink","USERTYPE","recordImpression","adnetwork","parseInt","theme","adTagTheme","themesegments","themeobj","adnetworks","networks","getAdNetwork","viewportSize","getWidth","current","v","randomStringGenerator","possible","nextElement","adjust","localName","eyeTemplate","passwordy","eyeball","classList","add","after","$httpProvider","interceptors"],"mappings":"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","file":"app.min.js","sourcesContent":["/**\r\n * SignUpGenius AngularJS Main App\r\n *\r\n * @author SignUpGenius\r\n **/\r\n\r\n// ad network modules\r\nangular\r\n .module(\"adnetworkdatafile\", [])\r\n .constant(\r\n \"adnetworkdatafile\",\r\n typeof window.sug_refs !== \"undefined\" &&\r\n typeof window.sug_refs.al_networks !== \"undefined\"\r\n ? window.sug_refs.al_networks\r\n : {}\r\n );\r\nangular\r\n .module(\"as_channels\", [])\r\n .constant(\r\n \"as_channels\",\r\n typeof window.sug_refs !== \"undefined\" &&\r\n typeof window.sug_refs.as_channels !== \"undefined\"\r\n ? window.sug_refs.as_channels\r\n : {}\r\n );\r\nangular\r\n .module(\"st_units\", [])\r\n .constant(\r\n \"st_units\",\r\n typeof window.sug_refs !== \"undefined\" &&\r\n typeof window.sug_refs.st_units !== \"undefined\"\r\n ? window.sug_refs.st_units\r\n : {}\r\n );\r\n\r\n// setup app\r\nvar SUGApp =\r\n SUGApp ||\r\n angular.module(\"SUGApp\", [\r\n \"ngRoute\",\r\n \"googlechart\",\r\n \"ngSanitize\",\r\n \"ui.bootstrap\",\r\n \"ngAnimate\",\r\n \"ui.sortable\",\r\n \"ngImgCrop\",\r\n \"angular-google-analytics\",\r\n \"adModule\",\r\n \"adnetworkdatafile\",\r\n \"as_channels\",\r\n \"st_units\",\r\n ]);\r\n\r\n// conditional load extra module dependencies\r\nif (window.sugConditionalModules && window.sugConditionalModules.length) {\r\n var addModules = window.sugConditionalModules;\r\n angular.forEach(addModules, function (dependency) {\r\n SUGApp.requires.push(dependency);\r\n });\r\n}\r\n\r\n// constant\r\nSUGApp.value(\"myself\", \"/index.cfm?go=\");\r\n\r\n/**\r\n * Cache Factory - Custom implementation (rather than $cacheFactory) allowing get with default return value\r\n **/\r\nSUGApp.factory(\"sugCacheFactory\", [\r\n \"$q\",\r\n \"$http\",\r\n function ($q, $http) {\r\n var expirations = {};\r\n var cache = {};\r\n var factory = {\r\n set: function (key, val) {\r\n expirations[key] = Date.now();\r\n cache[key] = angular.copy(val);\r\n },\r\n get: function (key, defVal, expires) {\r\n if (\r\n expires &&\r\n (!expirations[key] ||\r\n Math.round(Date.now() - expirations[key]) > expires)\r\n ) {\r\n // remove the expired data from the cache\r\n if( expirations[key] ) delete expirations[key];\r\n if( cache[key] ) delete cache[key];\r\n\r\n return typeof defVal !== \"undefined\" ? defVal : null;\r\n } else {\r\n return typeof cache[key] !== \"undefined\"\r\n ? cache[key]\r\n : typeof defVal !== \"undefined\"\r\n ? defVal\r\n : null;\r\n }\r\n },\r\n };\r\n return factory;\r\n },\r\n]);\r\n\r\n/**\r\n * SUG Utilities\r\n **/\r\nSUGApp.service(\"SUGUtilities\", [\r\n \"$http\",\r\n \"$q\",\r\n \"$modal\",\r\n \"$rootScope\",\r\n \"$sce\",\r\n \"$routeParams\",\r\n \"$location\",\r\n \"$window\",\r\n \"adService\",\r\n \"sugCacheFactory\",\r\n function (\r\n $http,\r\n $q,\r\n $modal,\r\n $rootScope,\r\n $sce,\r\n $routeParams,\r\n $location,\r\n $window,\r\n adService,\r\n sugCacheFactory\r\n ) {\r\n\r\n // monitor route change so we can reload ads -- leaving this code for backwards compatibility for now\r\n $rootScope.$on(\"$routeChangeSuccess\", function (scope, next, curr) {\r\n // set header ad code on route change\r\n if (document.getElementById(\"headerAdCode\") !== null) {\r\n var adOverride = $location.search()[\"adnetwork\"];\r\n if (typeof adOverride !== \"undefined\" && adOverride !== \"\") {\r\n $rootScope.adNetwork = adOverride.toString().toLowerCase();\r\n var adconfig = {\r\n network: $rootScope.adNetwork,\r\n platform: \"desktop\",\r\n category: \"\",\r\n section: \"\",\r\n type: \"\",\r\n position: \"\",\r\n };\r\n adService.setHeaderAdCode(adconfig);\r\n }\r\n }\r\n\r\n // similar to google refresh on route change\r\n if (\r\n angular.isDefined($rootScope.adNetwork) &&\r\n $rootScope.adNetwork === \"sortable\" &&\r\n typeof deployads !== \"undefined\" &&\r\n angular.isDefined(deployads.newPage) &&\r\n typeof deployads.newPage === \"function\"\r\n ) {\r\n if (\r\n typeof curr !== \"undefined\" &&\r\n typeof next !== \"undefined\" &&\r\n angular.isDefined(curr.$$route.originalPath) &&\r\n angular.isDefined(next.$$route.originalPath) &&\r\n next.$$route.originalPath !== curr.$$route.originalPath\r\n ) {\r\n // call new page\r\n deployads.newPage();\r\n }\r\n }\r\n });\r\n\r\n // alert window service default controller\r\n var alertOpen = false;\r\n var alertWindowCtrl = [\r\n \"$scope\",\r\n \"$modalInstance\",\r\n \"alertMessage\",\r\n \"alertStyle\",\r\n \"glyphIcon\",\r\n \"alertTitle\",\r\n \"$sce\",\r\n function (\r\n $scope,\r\n $modalInstance,\r\n alertMessage,\r\n alertStyle,\r\n glyphIcon,\r\n alertTitle,\r\n $sce\r\n ) {\r\n $scope.alertMessage = $sce.trustAsHtml(alertMessage);\r\n $scope.alertStyle = alertStyle;\r\n $scope.glyphIcon = glyphIcon;\r\n $scope.alertTitle = alertTitle;\r\n $scope.ok = function () {\r\n $modalInstance.close(true);\r\n alertOpen = false;\r\n };\r\n },\r\n ];\r\n\r\n /* Global Help Modal Controller */\r\n var helpModalController = [\r\n \"$scope\",\r\n \"$modalInstance\",\r\n \"txtHelpTitle\",\r\n \"txtHelpBody\",\r\n \"lblOkButton\",\r\n function (\r\n $scope,\r\n $modalInstance,\r\n txtHelpTitle,\r\n txtHelpBody,\r\n lblOkButton\r\n ) {\r\n $scope.txtHelpTitle = txtHelpTitle;\r\n $scope.txtHelpBody = $sce.trustAsHtml(txtHelpBody);\r\n $scope.lblOkButton = lblOkButton;\r\n $scope.close = function () {\r\n $modalInstance.close(true);\r\n };\r\n $scope.dismiss = function () {\r\n $modalInstance.dismiss(false);\r\n };\r\n },\r\n ];\r\n\r\n /* Global Help Modal */\r\n var showHelpModal = function (data, fnClosed, fnDismissed) {\r\n $modal\r\n .open({\r\n templateUrl: \"/view/public/dsphelpmodal.html?v=1496872430\",\r\n controller: helpModalController,\r\n resolve: {\r\n txtHelpTitle: function () {\r\n return angular.isDefined(data.txtHelpTitle)\r\n ? data.txtHelpTitle\r\n : \"Help\";\r\n },\r\n txtHelpBody: function () {\r\n return angular.isDefined(data.txtHelpBody)\r\n ? data.txtHelpBody\r\n : \"\";\r\n },\r\n lblOkButton: function () {\r\n return angular.isDefined(data.lblOkButton)\r\n ? data.lblOkButton\r\n : \"OK\";\r\n },\r\n },\r\n })\r\n .result.then(\r\n function (response) {\r\n if (angular.isFunction(fnClosed)) {\r\n fnClosed(response);\r\n }\r\n },\r\n function (response) {\r\n if (angular.isFunction(fnDismissed)) {\r\n fnDismissed(response);\r\n }\r\n }\r\n );\r\n };\r\n\r\n /* Global Confirmation Modal Controller (Magnific) */\r\n var confirmationModalController = [\r\n \"$scope\",\r\n \"$modalInstance\",\r\n \"txtConfirmationTitle\",\r\n \"txtConfirmationMessage\",\r\n \"lblYesButton\",\r\n \"lblCancelButton\",\r\n \"lblAltButton\",\r\n function (\r\n $scope,\r\n $modalInstance,\r\n txtConfirmationTitle,\r\n txtConfirmationMessage,\r\n lblYesButton,\r\n lblCancelButton,\r\n lblAltButton\r\n ) {\r\n $scope.txtConfirmationTitle = txtConfirmationTitle;\r\n $scope.txtConfirmationMessage = $sce.trustAsHtml(\r\n txtConfirmationMessage\r\n );\r\n $scope.lblYesButton = lblYesButton;\r\n $scope.lblCancelButton = lblCancelButton;\r\n $scope.lblAltButton = lblAltButton;\r\n $scope.confirm = function () {\r\n $modalInstance.close(true);\r\n };\r\n $scope.altconfirm = function () {\r\n $modalInstance.close(false);\r\n };\r\n $scope.cancel = function () {\r\n $modalInstance.dismiss(false);\r\n };\r\n },\r\n ];\r\n\r\n /* Global Confirmation Modal */\r\n var showConfirmationModal = function (data, fnClosed, fnDismissed, fnAlt) {\r\n $modal\r\n .open({\r\n templateUrl: \"/view/public/dspconfirmationmodal.html?v=1496872430\",\r\n controller: confirmationModalController,\r\n resolve: {\r\n txtConfirmationTitle: function () {\r\n return angular.isDefined(data.txtConfirmationTitle)\r\n ? data.txtConfirmationTitle\r\n : \"Are you sure?\";\r\n },\r\n txtConfirmationMessage: function () {\r\n return angular.isDefined(data.txtConfirmationMessage)\r\n ? data.txtConfirmationMessage\r\n : \"\";\r\n },\r\n lblYesButton: function () {\r\n return angular.isDefined(data.lblYesButton)\r\n ? data.lblYesButton\r\n : \"Yes\";\r\n },\r\n lblCancelButton: function () {\r\n return angular.isDefined(data.lblCancelButton)\r\n ? data.lblCancelButton\r\n : \"\";\r\n },\r\n lblAltButton: function () {\r\n return angular.isDefined(data.lblAltButton)\r\n ? data.lblAltButton\r\n : \"\";\r\n },\r\n },\r\n })\r\n .result.then(\r\n function (response) {\r\n if (angular.isFunction(fnClosed)) {\r\n fnClosed(response);\r\n }\r\n },\r\n function (response) {\r\n if (angular.isFunction(fnDismissed)) {\r\n fnDismissed(response);\r\n }\r\n },\r\n function (response) {\r\n if (angular.isFunction(fnAlt)) {\r\n fnAlt(response);\r\n }\r\n }\r\n );\r\n };\r\n\r\n /* Global Date Selection Modal */\r\n /**\r\n * Global Date Selection Modal\r\n * @param {Object} labels - Optional labels object to override button labels.\r\n *\r\n * @returns {Promise}\r\n */\r\n var showDateSelectionModal = function (labels) {\r\n labels = typeof labels !== \"undefined\" ? labels : {};\r\n return $modal.open({\r\n templateUrl: \"/view/public/dspdateselectionmodal.html?v=1\",\r\n controller: dateSelectionModalViewController,\r\n resolve: {\r\n labels: function () {\r\n return labels;\r\n },\r\n },\r\n }).result;\r\n };\r\n\r\n /* Validate not null, not empty string, and not whitespace only */\r\n // covers things like notastring, '',' ', '0' (should pass but needs special check)\r\n var isStringNullOrEmpty = function (string) {\r\n return !angular.isString(string) || !string || !/\\S/.test(string)\r\n ? true\r\n : false;\r\n };\r\n\r\n /**\r\n * Tests whether a string includes csv-related formula characters (=+-) as leading character\r\n * Characters are considered a security threat for downloaded csv reports\r\n *\r\n * @param {string} s - string to be analyzed\r\n * @returns {boolean}\r\n */\r\n var hasCsvChars = function (s) {\r\n var regExp = /^[=\\-\\+]/;\r\n if (regExp.test(s)) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n /**\r\n * Generates a hash from the given data.\r\n *\r\n * @param {*} data - data to hash\r\n * @param {string} type - MD5(default) or SHA256\r\n * @returns\r\n */\r\n var generateHash = function(data, type) {\r\n var hasher = new Hashes.MD5;\r\n if (type === 'SHA256')\r\n hasher = new Hashes.SHA256;\r\n\r\n\r\n if( isString(data) )\r\n return hasher.hex(data);\r\n\r\n var dataStr = '';\r\n\r\n if( isObject(data) ){\r\n try {\r\n dataStr = JSON.stringify(data);\r\n return hasher.hex(dataStr);\r\n } catch (error) {\r\n return dataStr;\r\n }\r\n }\r\n\r\n try{\r\n dataStr = data.toString();\r\n return hasher.hex(dataStr);\r\n } catch (error) {\r\n return dataStr;\r\n }\r\n };\r\n\r\n return {\r\n // add all publicly shared methods here\r\n addDirectiveStyles: addDirectiveStyles,\r\n addOpacity2color: addOpacity2color,\r\n ajaxErrorHandler: ajaxErrorHandler,\r\n ajaxResultInvalid: ajaxResultInvalid,\r\n APISyncCall: APISyncCall,\r\n APISyncCallV3: APISyncCallV3,\r\n APISyncCallWithCaching: APISyncCallWithCaching,\r\n backSlashesToFrontSlashes: backSlashesToFrontSlashes,\r\n broadCast: broadCast,\r\n color2rgb: color2rgb,\r\n combineDateAndTime: combineDateAndTime,\r\n dateStringtoDate: dateStringtoDate,\r\n dateToEpoch: dateToEpoch,\r\n dateToUsersTimezone: dateToUsersTimezone,\r\n epochToDate: epochToDate,\r\n findStyleSheet: findStyleSheet,\r\n formatMessageForModal: formatMessageForModal,\r\n generateUUID: generateUUID,\r\n getAjaxResponseMessage: getAjaxResponseMessage,\r\n getGridSettings: getGridSettings,\r\n getDeleteImageConfirmationMessage: getDeleteImageConfirmationMessage,\r\n getReCaptcha: getReCaptcha,\r\n hasPrecision: hasPrecision,\r\n injectConversions: injectConversions,\r\n isArray: isArray,\r\n isBoolean: isBoolean,\r\n isDefined: isDefined,\r\n isDefinedNotNullNotEmpty: isDefinedNotNullNotEmpty,\r\n isEmptyObject: isEmptyObject,\r\n isInteger: Number.isInteger || isInteger,\r\n isIntegerGT0: isIntegerGT0,\r\n isIntegerGTE0: isIntegerGTE0,\r\n isMobile: isMobile,\r\n isNotBlankOrEmpty: isNotBlankOrEmpty,\r\n isObject: isObject,\r\n isString: isString,\r\n isStringContainingAlpha: isStringContainingAlpha,\r\n isStringLenGT0: isStringLenGT0,\r\n isStringNullOrEmpty: isStringNullOrEmpty,\r\n isUndefinedOrEmptyObject: isUndefinedOrEmptyObject,\r\n isUndefinedOrNullOrEmpty: isUndefinedOrNullOrEmpty,\r\n isUUID: isUUID,\r\n keyExists: keyExists,\r\n lightOrDark: lightOrDark,\r\n localToUtcDate: localToUtcDate,\r\n lowerCaseKeys: lowerCaseKeys,\r\n numToString: numToString,\r\n removeArrayDuplicates: removeArrayDuplicates,\r\n resetServices: resetServices,\r\n resultErrorHandler: resultErrorHandler,\r\n saveGridSettings: saveGridSettings,\r\n showAlert: showAlert,\r\n showConfirmationModal: showConfirmationModal,\r\n showDateSelectionModal: showDateSelectionModal,\r\n showHelpModal: showHelpModal,\r\n showLoading: showLoading,\r\n showMagnificAlert: showMagnificAlert,\r\n toCurrencyFloat: toCurrencyFloat,\r\n utcToLocalDate: utcToLocalDate,\r\n validateCaptcha: validateCaptcha,\r\n validateEmail: validateEmail,\r\n validatePhone: validatePhone,\r\n deepCopy: deepCopy,\r\n hasCsvChars: hasCsvChars,\r\n generateHash: generateHash,\r\n refreshPageAds: refreshPageAds,\r\n };\r\n\r\n /**\r\n * Asynchronous call - will not wait for the response\r\n *\r\n * @Method - valid values: get,post\r\n * @URL - the http request endpoint - default set to \"/SUGboxAPI.cfm?go=\"\r\n * @data - object containing one or more elements\r\n * @goAction - the circuit action (e.g. 'a.getMember')\r\n * @timeout - how long to wait for a response\r\n **/\r\n function APISyncCall(Method, url, data, goAction, timeout) {\r\n // default\r\n var deferred = $q.defer();\r\n var go = isDefinedNotNullNotEmpty(goAction) ? goAction : \"\";\r\n var endPointURL = isDefinedNotNullNotEmpty(url)\r\n ? url\r\n : \"/SUGboxAPI.cfm?go=\" + go;\r\n var execute = true;\r\n\r\n /**\r\n * simple validation\r\n **/\r\n if (angular.isUndefined(Method)) {\r\n execute = false;\r\n deferred.resolve({ SUCCESS: false, MESSAGE: [\"Method is required.\"] });\r\n }\r\n\r\n if (Method !== \"get\" && Method !== \"post\") {\r\n execute = false;\r\n deferred.resolve({\r\n SUCCESS: false,\r\n MESSAGE: [\"Method is not supported.\"],\r\n });\r\n }\r\n\r\n if (isUndefinedOrNullOrEmpty(url) && isUndefinedOrNullOrEmpty(goAction)) {\r\n execute = false;\r\n deferred.resolve({\r\n SUCCESS: false,\r\n MESSAGE: [\"goAction is required when URL is null or empty.\"],\r\n });\r\n }\r\n\r\n if (!execute) return deferred.promise;\r\n\r\n /**\r\n * if everything passes, try the call\r\n **/\r\n try {\r\n var t =\r\n typeof timeout !== \"undefined\" && !isNaN(timeout) ? timeout : 10000; // default\r\n var config = {\r\n method: Method,\r\n url: endPointURL,\r\n headers: {\r\n Accept: \"application/json, text/plain, */*\",\r\n \"Content-Type\": \"application/json, text/plain; charset=UTF-8\",\r\n },\r\n data: data,\r\n timeout: t,\r\n };\r\n\r\n // make the request\r\n var request = $http(config);\r\n // set result to deferred\r\n deferred.resolve(request);\r\n\r\n // return the 'promised' data\r\n return deferred.promise;\r\n } catch (e) {\r\n return {\r\n SUCCESS: false,\r\n MESSAGE: [\"An error occurred while processing your request: \" + e],\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Asynchronous call - will not wait for the response\r\n *\r\n * @Method - valid values: get,post\r\n * @URL - the http request endpoint - default set to \"/SUGboxAPI.cfm?go=\"\r\n * @data - object containing one or more elements\r\n * @timeout - how long to wait for a response\r\n **/\r\n function APISyncCallV3(Method, url, data, goAction, timeout) {\r\n // default\r\n var deferred = $q.defer();\r\n var endPointURL = url;\r\n var execute = true;\r\n\r\n /**\r\n * simple validation\r\n **/\r\n if (angular.isUndefined(Method)) {\r\n execute = false;\r\n deferred.resolve({ SUCCESS: false, MESSAGE: [\"Method is required.\"] });\r\n }\r\n\r\n if (\r\n Method != \"get\" &&\r\n Method != \"post\" &&\r\n Method != \"patch\" &&\r\n Method != \"delete\"\r\n ) {\r\n execute = false;\r\n deferred.resolve({\r\n SUCCESS: false,\r\n MESSAGE: [\"Method is not supported.\"],\r\n });\r\n }\r\n\r\n if (isUndefinedOrNullOrEmpty(url)) {\r\n execute = false;\r\n deferred.resolve({ SUCCESS: false, MESSAGE: [\"URL is required.\"] });\r\n }\r\n\r\n if (!execute) return deferred.promise;\r\n\r\n /**\r\n * if everything passes, try the call\r\n **/\r\n try {\r\n var t =\r\n typeof timeout !== \"undefined\" && !isNaN(timeout) ? timeout : 10000; // default\r\n var config = {\r\n method: Method,\r\n url: endPointURL,\r\n headers: {\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json; charset=UTF-8\",\r\n },\r\n data: data,\r\n timeout: t,\r\n };\r\n\r\n // make the request\r\n var request = $http(config);\r\n // set result to deferred\r\n deferred.resolve(request);\r\n\r\n // return the 'promised' data\r\n return deferred.promise;\r\n } catch (e) {\r\n return {\r\n SUCCESS: false,\r\n MESSAGE: [\"An error occurred while processing your request: \" + e],\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Asynchronous call with caching\r\n *\r\n * @method - valid values: get,post\r\n * @url - the http request endpoint - default set to \"/SUGboxAPI.cfm?go=\"\r\n * @data - object containing one or more elements\r\n * @goAction - the circuit action (e.g. 'a.getMember')\r\n * @timeout - how long to wait for a response\r\n * @ttl - time to live in milliseconds\r\n **/\r\n function APISyncCallWithCaching(method, url, data, goAction, timeout, ttl) {\r\n var deferred = $q.defer();\r\n var hashObj = angular.copy(data);\r\n hashObj.endpoint = goAction;\r\n var hashKey = generateHash(hashObj);\r\n var endpointResponse = sugCacheFactory.get(hashKey, {}, ttl);\r\n if (Object.keys(endpointResponse).length === 0) {\r\n APISyncCall( method, url, data, goAction, timeout ).then(function (response) {\r\n if ( !ajaxResultInvalid(response) ) {\r\n sugCacheFactory.set(hashKey, response);\r\n }\r\n deferred.resolve(response);\r\n });\r\n } else {\r\n deferred.resolve(endpointResponse);\r\n }\r\n\r\n return deferred.promise;\r\n }\r\n\r\n /**\r\n * private method: success handler\r\n **/\r\n function successHandler(result) {\r\n return result.data;\r\n }\r\n\r\n /**\r\n * private method: error handler\r\n **/\r\n function errorHandler(result) {\r\n if (!angular.isObject(result)) return result;\r\n else return { SUCCESS: false, MESSAGE: [\"Unknown error occurred.\"] };\r\n }\r\n\r\n /**\r\n * method to check if a variable is undefined or null or empty\r\n **/\r\n function isUndefinedOrNullOrEmpty(variable) {\r\n return (\r\n angular.isUndefined(variable) ||\r\n variable === null ||\r\n variable.length === 0\r\n );\r\n }\r\n\r\n /**\r\n * method check if a variable is defined and not null and not empty\r\n **/\r\n function isDefinedNotNullNotEmpty(variable) {\r\n return (\r\n typeof variable != \"undefined\" &&\r\n variable !== null &&\r\n (variable.length > 0 || !!Object.keys(variable).length)\r\n );\r\n }\r\n\r\n /**\r\n * method to check if a variable is not blank\r\n **/\r\n function isNotBlankOrEmpty(variable) {\r\n return variable.length > 0 && variable !== \"\";\r\n }\r\n\r\n /**\r\n * method to check if a variable is boolean\r\n **/\r\n function isBoolean(variable) {\r\n return variable === true || variable === false;\r\n }\r\n\r\n /**\r\n * method to reset application services\r\n * NOTE: at some point, we'll have to start passing user auth\r\n **/\r\n function resetServices(serviceName) {\r\n if (isUndefinedOrNullOrEmpty(serviceName))\r\n return { SUCCESS: false, MESSAGE: [\"Service name is required.\"] };\r\n\r\n return APISyncCall(\r\n \"post\",\r\n \"\",\r\n { serviceName: serviceName },\r\n \"g.ResetService\"\r\n ).then(function (result) {\r\n if (typeof result.data.SUCCESS !== \"undefined\" && result.data.SUCCESS) {\r\n return { SUCCESS: true, MESSAGE: [] };\r\n } else {\r\n // something happened to the reset\r\n return result.data;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * method loadSpinner, dependent on spin.js\r\n * the parameters can be turned into variables, too.\r\n **/\r\n function showLoading(displayElem, left, top) {\r\n if (isUndefinedOrNullOrEmpty(displayElem)) return;\r\n var topPosition = \"50%\";\r\n var leftPosition = \"50%\";\r\n if (typeof top !== \"undefined\") topPosition = top;\r\n if (typeof left !== \"undefined\") leftPosition = left;\r\n var opts = {\r\n lines: 15,\r\n length: 15,\r\n width: 5,\r\n radius: 20,\r\n corners: 1,\r\n left: leftPosition,\r\n top: topPosition,\r\n rotate: 0,\r\n direction: 1,\r\n speed: 1,\r\n color: \"#ef9934\",\r\n trail: 60,\r\n shadow: false,\r\n hwaccel: false,\r\n className: \"spinner fade-in delay-1\",\r\n zIndex: 2e9,\r\n };\r\n\r\n var target = document.getElementById(displayElem);\r\n var spinner = new Spinner(opts).spin(target);\r\n }\r\n\r\n /**\r\n * method to display an alert\r\n **/\r\n function showAlert(message, alertType, overrideController, alertTitle) {\r\n /** prevent multiple alert boxes from being opened **/\r\n if (alertOpen) return;\r\n\r\n var fLocal;\r\n fLocal = this;\r\n fLocal.alertMessage = message;\r\n fLocal.alertStyle = \"text-danger\";\r\n fLocal.alertTitle =\r\n typeof alertTitle !== \"undefined\" ? alertTitle : \"Error\";\r\n fLocal.glyphIcon = \"glyphicon-remove-sign\";\r\n fLocal.AT = typeof alertType !== \"undefined\" ? alertType : \"error\";\r\n fLocal.controller =\r\n typeof overrideController !== \"undefined\" && overrideController !== \"\"\r\n ? overrideController\r\n : alertWindowCtrl;\r\n\r\n if (fLocal.AT === \"success\") {\r\n fLocal.alertStyle = \"text-green\";\r\n fLocal.alertTitle =\r\n typeof alertTitle !== \"undefined\" ? alertTitle : \"Success\";\r\n fLocal.glyphIcon = \"glyphicon-ok-sign\";\r\n } else if (fLocal.AT === \"warning\") {\r\n fLocal.alertStyle = \"text-warning\";\r\n fLocal.alertTitle =\r\n typeof alertTitle !== \"undefined\" ? alertTitle : \"Warning\";\r\n fLocal.glyphIcon = \"glyphicon-exclamation-sign\";\r\n }\r\n\r\n $modal.open({\r\n templateUrl: \"/view/public/alertwindow.html\",\r\n controller: fLocal.controller,\r\n resolve: {\r\n alertMessage: function () {\r\n return fLocal.alertMessage;\r\n },\r\n alertStyle: function () {\r\n return fLocal.alertStyle;\r\n },\r\n glyphIcon: function () {\r\n return fLocal.glyphIcon;\r\n },\r\n alertTitle: function () {\r\n return fLocal.alertTitle;\r\n },\r\n },\r\n });\r\n\r\n alertOpen = true;\r\n }\r\n\r\n /**\r\n * Method for ajax error result handler\r\n **/\r\n function resultErrorHandler(result) {\r\n var Message = \"\";\r\n var resp = isDefinedNotNullNotEmpty(result) ? lowerCaseKeys(result) : {};\r\n if (angular.isDefined(resp.message)) {\r\n if (angular.isArray(resp.message)) {\r\n angular.forEach(resp.message, function (obj, key) {\r\n Message += obj + \" \";\r\n });\r\n } else {\r\n Message = resp.message;\r\n }\r\n } else {\r\n if (isDefinedNotNullNotEmpty(resp.statustext)) {\r\n Message = resp.statustext;\r\n } else if (typeof resp.status !== undefined && resp.status === 0) {\r\n Message =\r\n \"Request timeout exceeded. Make sure you are logged in and have an active session.\";\r\n } else {\r\n Message = \"An unknown error occurred while processing your request\";\r\n }\r\n }\r\n\r\n // return message\r\n return Message;\r\n }\r\n\r\n /**\r\n * Method to check if the server response is invalid\r\n **/\r\n function ajaxResultInvalid(result) {\r\n result = lowerCaseKeys(result);\r\n\r\n if (\r\n typeof result.data !== \"undefined\" &&\r\n typeof result.data.success !== \"undefined\"\r\n ) {\r\n //standard CF returned response that has data.data nested in it\r\n return (\r\n typeof result.data.success === \"undefined\" ||\r\n !result.data.success ||\r\n typeof result.data.data === \"undefined\"\r\n );\r\n } else {\r\n //API friendly type response from a JS service that is only: success, message, data\r\n return (\r\n typeof result.data === \"undefined\" ||\r\n !result.data ||\r\n typeof result.success === \"undefined\" ||\r\n !result.success\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Method to get just the error message from the server response\r\n *\r\n * @param result required structure, either the base xhr result or the nested result.data\r\n **/\r\n function getAjaxResponseMessage(result) {\r\n result = lowerCaseKeys(result);\r\n if (typeof result.code !== \"undefined\") {\r\n return resultErrorHandler(result);\r\n } else if (typeof result.data !== \"undefined\") {\r\n return resultErrorHandler(result.data);\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n\r\n /**\r\n * Method to display an error modal when an Ajax error occurs\r\n **/\r\n /**\r\n * Method to display an error modal when an Ajax error occurs\r\n **/\r\n function ajaxErrorHandler(errorObj) {\r\n if (isDefinedNotNullNotEmpty(errorObj)) {\r\n var errMessage = resultErrorHandler(errorObj);\r\n if (\r\n errMessage\r\n .toString()\r\n .indexOf(\r\n \"Make sure you are logged in and have an active session.\"\r\n ) >= 0\r\n ) {\r\n $window.location.reload();\r\n return;\r\n }\r\n // no longer logged in\r\n if (errorObj.CODE && errorObj.CODE === 1002) {\r\n $window.location.reload();\r\n return;\r\n } else {\r\n showMagnificAlert(errMessage, \"error\", \"\", \"Sorry!\");\r\n }\r\n } else {\r\n showMagnificAlert(\r\n \"Invalid or unexpected response.\",\r\n \"error\",\r\n \"\",\r\n \"Sorry!\"\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Method used for broadcasting events\r\n **/\r\n function broadCast(msg, data) {\r\n $rootScope.$broadcast(msg, data);\r\n }\r\n\r\n function lowerCaseKeys(data) {\r\n if (Array.isArray(data)) {\r\n // in case there are arrays of objects\r\n var length = data.length;\r\n var tempArray = [];\r\n\r\n while (length--) {\r\n tempArray[length] = lowerCaseKeys(data[length]);\r\n }\r\n\r\n return tempArray;\r\n } else if (typeof data === \"object\" && data !== null) {\r\n // this section actually changes the keys\r\n\r\n var keyList = Object.keys(data); // array of keys\r\n var amountOfKeys = keyList.length;\r\n var newObject = {}; // stores the new lowercase object\r\n\r\n while (amountOfKeys--) {\r\n var key = keyList[amountOfKeys];\r\n var newKey = key.toLowerCase();\r\n newObject[newKey] = data[key];\r\n\r\n if (\r\n Array.isArray(newObject[newKey]) ||\r\n typeof newObject[newKey] === \"object\"\r\n ) {\r\n newObject[newKey] = lowerCaseKeys(newObject[newKey]);\r\n }\r\n }\r\n\r\n return newObject;\r\n } else {\r\n return data; // no need to change anything here\r\n }\r\n }\r\n\r\n /* Deep copy function */\r\n function deepCopy(data) {\r\n //deals with Array as the parent\r\n if (Array.isArray(data) && data.length > 0) {\r\n var tmpArr = [];\r\n var returnArray = [];\r\n\r\n tmpArr = Object.assign([], data);\r\n\r\n //loop through items in the array\r\n for (var item = 0; item < tmpArr.length; item++) {\r\n if (Array.isArray(tmpArr[item])) {\r\n returnArray[item] = Object.assign([], tmpArr[item]);\r\n } else if (typeof tmpArr[item] === \"object\") {\r\n returnArray[item] = Object.assign({}, tmpArr[item]);\r\n } else {\r\n //fallback - safetynet\r\n returnArray[item] = angular.copy(tmpArr[item]);\r\n }\r\n }\r\n\r\n //release array - enable garbage collection\r\n data = null;\r\n tmpArr = null;\r\n return returnArray;\r\n } else if (Array.isArray(data) && data.length === 0) {\r\n //release data object - enable garbage collection\r\n data = null;\r\n //returns an empty array\r\n return [];\r\n\r\n //deals with Object as the parent\r\n } else if (typeof data === \"object\" && data !== null) {\r\n var keyArr = Object.keys(data); // array of keys\r\n var returnObject = {}; //temp Object\r\n\r\n for (var obj = 0; obj < keyArr.length; obj++) {\r\n var key = keyArr[obj];\r\n\r\n if (Array.isArray(data[key])) {\r\n returnObject[key] = Object.assign([], data[key]);\r\n } else if (typeof data[key] === \"object\") {\r\n returnObject[key] = Object.assign({}, data[key]);\r\n } else {\r\n //fallback - safetynet\r\n returnObject[key] = angular.copy(data[key]);\r\n }\r\n }\r\n\r\n //release data object - enable garbage collection\r\n data = null;\r\n return returnObject;\r\n } else if (typeof data === \"object\" && angular.equals({}, data)) {\r\n //release data object - enable garbage collection\r\n data = null;\r\n //return an empty object\r\n return {};\r\n } else {\r\n //fallback - safetynet\r\n var returnData = angular.copy(data);\r\n //release data object - enable garbage collection\r\n data = null;\r\n return returnData;\r\n }\r\n }\r\n\r\n /** magnific popup version of the modal **/\r\n function showMagnificAlert(\r\n message,\r\n alertType,\r\n overrideController,\r\n alertTitle,\r\n alertTemplate\r\n ) {\r\n /** prevent multiple alert boxes from being opened **/\r\n if (alertOpen) return;\r\n var fLocal;\r\n fLocal = this;\r\n fLocal.template =\r\n typeof alertTemplate !== \"undefined\"\r\n ? alertTemplate\r\n : \"/view/public/magnificalertmodal.html\";\r\n fLocal.alertMessage = message;\r\n fLocal.alertStyle = \"text-danger\";\r\n fLocal.alertTitle =\r\n typeof alertTitle !== \"undefined\" ? alertTitle : \"Error\";\r\n fLocal.glyphIcon = \"glyphicon-remove-sign\";\r\n fLocal.AT = typeof alertType !== \"undefined\" ? alertType : \"error\";\r\n fLocal.controller =\r\n typeof overrideController !== \"undefined\" && overrideController !== \"\"\r\n ? overrideController\r\n : alertWindowCtrl;\r\n\r\n if (fLocal.AT === \"success\") {\r\n fLocal.alertStyle = \"text-green\";\r\n fLocal.alertTitle =\r\n typeof alertTitle !== \"undefined\" ? alertTitle : \"Success\";\r\n fLocal.glyphIcon = \"glyphicon-ok-sign\";\r\n } else if (fLocal.AT === \"warning\") {\r\n fLocal.alertStyle = \"text-warning\";\r\n fLocal.alertTitle =\r\n typeof alertTitle !== \"undefined\" ? alertTitle : \"Warning\";\r\n fLocal.glyphIcon = \"glyphicon-exclamation-sign\";\r\n }\r\n\r\n $modal.open({\r\n templateUrl: fLocal.template,\r\n controller: fLocal.controller,\r\n resolve: {\r\n alertMessage: function () {\r\n return fLocal.alertMessage;\r\n },\r\n alertStyle: function () {\r\n return fLocal.alertStyle;\r\n },\r\n glyphIcon: function () {\r\n return fLocal.glyphIcon;\r\n },\r\n alertTitle: function () {\r\n return fLocal.alertTitle;\r\n },\r\n },\r\n });\r\n\r\n alertOpen = true;\r\n }\r\n\r\n /** method to save settings found on grids/tables **/\r\n function getGridSettings(data) {\r\n return APISyncCall(\"post\", \"\", data, \"c.getMySettings\", 15000);\r\n }\r\n\r\n /** method to get settings found on grids/tables **/\r\n function saveGridSettings(data) {\r\n return APISyncCall(\"post\", \"\", data, \"c.saveMySettings\", 15000);\r\n }\r\n\r\n function validateEmail(email) {\r\n var regExp =\r\n /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n return regExp.test(email);\r\n }\r\n\r\n function validatePhone(phone) {\r\n var regExp = /^\\(?([0-9]{3})\\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/;\r\n return phone.toString().match(regExp) ? true : false;\r\n }\r\n\r\n /** method to get recaptcha script and elements **/\r\n function getReCaptcha(data) {\r\n return APISyncCall(\"post\", \"\", data, \"g.getReCaptcha\");\r\n }\r\n\r\n /*** method converts Message Array text into a string suitable for a modal message **/\r\n function formatMessageForModal(arrMessage) {\r\n var msg = \"\";\r\n\r\n if (arrMessage.length > 0) {\r\n msg = '';\r\n\r\n for (var m in arrMessage) {\r\n if (arrMessage.hasOwnProperty(m)) {\r\n //append the next message string, and a Line Break if this isn't the last element\r\n msg += arrMessage[m];\r\n if (arrMessage.length > 1 && m != arrMessage.length - 1) {\r\n msg += '';\r\n }\r\n }\r\n }\r\n msg += \"\";\r\n }\r\n\r\n return msg;\r\n }\r\n\r\n /** method to verify the captcha response **/\r\n function validateCaptcha(key) {\r\n return APISyncCall(\"post\", \"\", key, \"g.validateCaptcha\");\r\n }\r\n\r\n // generic validation helpers\r\n function isDefined(item) {\r\n return typeof item !== \"undefined\";\r\n }\r\n function isArray(item) {\r\n return isDefined(item) && item.constructor === Array;\r\n }\r\n function isString(item) {\r\n // doesn't account for string objects, but we shouldn't be using string objects\r\n return typeof item === \"string\";\r\n }\r\n function isStringContainingAlpha(string) {\r\n return isString(string) && /[a-z]/.test(string.toLowerCase());\r\n }\r\n function isObject(item) {\r\n return typeof item === \"object\" && item !== null;\r\n }\r\n function isInteger(item) {\r\n // MDN polyfill\r\n return (\r\n typeof item === \"number\" && isFinite(item) && Math.floor(item) === item\r\n );\r\n }\r\n function isIntegerGT0(item) {\r\n return isInteger(item) && item > 0;\r\n }\r\n function isIntegerGTE0(item) {\r\n return isInteger(item) && item >= 0;\r\n }\r\n function isStringLenGT0(item) {\r\n return isString(item) && item.length > 0;\r\n }\r\n function isEmptyObject(item) {\r\n return isObject(item) && Object.getOwnPropertyNames(item).length === 0;\r\n }\r\n function isUndefinedOrEmptyObject(item) {\r\n return (\r\n !isDefined(item) ||\r\n (isObject(item) && Object.getOwnPropertyNames(item).length === 0)\r\n );\r\n }\r\n /**\r\n * Check if a key or keys exist on an object\r\n * @param {Object} obj - the object to check for key(s)\r\n * @param {String} key - the key or '.' delimited list of keys to check for existence on the object\r\n * @param {Boolean} simplecheck - whether to just use a simple typeof check (will not check for nested keys), defaults to false\r\n */\r\n function keyExists(obj, key, simplecheck) {\r\n if (\r\n isDefined(obj) &&\r\n isObject(obj) &&\r\n Object.getOwnPropertyNames(obj).length &&\r\n key.toString().length\r\n ) {\r\n if (simplecheck) {\r\n return typeof obj[key] !== \"undefined\";\r\n } else {\r\n var nestedKeys = key.toString().split(\".\");\r\n var parentObj = angular.copy(obj);\r\n for (var ki = 0; ki < nestedKeys.length; ki++) {\r\n if (Object.keys(parentObj).indexOf(nestedKeys[ki]) < 0) {\r\n return false;\r\n } else {\r\n parentObj = parentObj[nestedKeys[ki]];\r\n }\r\n }\r\n }\r\n } else {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Performs an ad refresh for SPA navigation against ad generic interface\r\n */\r\n function refreshPageAds() {\r\n if (typeof deployads !== 'undefined' ){\r\n setTimeout(function(){\r\n deployads.refreshAds();\r\n }, 500);\r\n }\r\n }\r\n\r\n // safely convert Number (incl scientific / exponential / E-notation) to string\r\n function numToString(val) {\r\n if (!isNaN(parseFloat(val, 10)) && isFinite(val)) {\r\n return val.toString();\r\n } else {\r\n return val;\r\n }\r\n /* disabling this for now since the root cause of this use case is server-side\r\n\t\tif(!isNaN(parseFloat(val)) && isFinite(val)){\r\n\t\t\t// check if scientific / exponential / E-notation\r\n\t\t\tif(/\\d+\\.?\\d*e[\\+\\-]*\\d+/i.test(val)) {\r\n\t\t\t\tvar data= String(val).split(/[eE]/);\r\n\t\t\t\tif(data.length== 1) return data[0];\r\n\t\t\t\tvar z= '';\r\n\t\t\t\tvar sign = val < 0 ? '-' : '';\r\n\t\t\t\tvar str = data[0].replace('.','');\r\n\t\t\t\tvar mag = Number(data[1]) + 1;\r\n\t\t\t\tif(mag<0){\r\n\t\t\t\t\tz= sign + '0.';\r\n\t\t\t\t\twhile(mag++) z += '0';\r\n\t\t\t\t\treturn z + str.replace(/^\\-/,'');\r\n\t\t\t\t}\r\n\t\t\t\tmag -= str.length;\r\n\t\t\t\twhile(mag--) z += '0';\r\n\t\t\t\treturn str + z;\r\n\r\n\t\t\t} else {\r\n\t\t\t\treturn val.toString();\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\treturn val;\r\n\t\t}\r\n\t\t*/\r\n }\r\n /**\r\n * Convert a value to a currency / two-decimal float (enforce radix = 10)\r\n * @param {String|Number} val - value to be converted to a two decimal currency style float\r\n */\r\n function toCurrencyFloat(val) {\r\n // default to 0.00\r\n var retVal = parseFloat(0, 10).toFixed(2);\r\n if (typeof val !== \"undefined\") {\r\n // convert to x.xx\r\n retVal = parseFloat(val, 10).toFixed(2);\r\n }\r\n // parseFloat again to convert back to a number (toFixed() returns string)\r\n return parseFloat(retVal);\r\n }\r\n\r\n /**\r\n * Convert the given js date to an epoch number\r\n * @param {Date} date\r\n */\r\n function dateToEpoch(date) {\r\n // subtract milliseconds so we get a whole number\r\n return (date.getTime() - date.getMilliseconds()) / 1000;\r\n }\r\n\r\n /**\r\n * Convert an epoch number to a js date\r\n * @param {Number} epoch\r\n */\r\n function epochToDate(epoch) {\r\n return new Date(epoch * 1000);\r\n }\r\n\r\n /**\r\n * combines two js date objects, one that represents date and the other time\r\n * @param {Date} date\r\n * @param {Date} time - defaults to midnight if it is not a date or undefined\r\n * @returns {Date} the combined date and time as a js Date\r\n */\r\n function combineDateAndTime(date, time) {\r\n var hours = 0;\r\n var minutes = 0;\r\n var seconds = 0;\r\n var milliseconds = 0;\r\n if (angular.isDefined(time) && angular.isDate(time)) {\r\n hours = time.getHours();\r\n minutes = time.getMinutes();\r\n seconds = time.getSeconds();\r\n milliseconds = time.getMilliseconds();\r\n }\r\n\r\n var year = date.getFullYear();\r\n var month = date.getMonth();\r\n var day = date.getDate();\r\n\r\n return new Date(year, month, day, hours, minutes, seconds, milliseconds);\r\n }\r\n\r\n /**\r\n * Convert a UTC date to a local date, does not actually change the date object's timezone but\r\n * rather changes the time value to reflect its local time\r\n *\r\n * @param {Date} utcDate\r\n * @returns Date\r\n */\r\n function utcToLocalDate(utcDate) {\r\n // first get the offset of the date/time object after it is converted ( we need this to account for DST )\r\n var tzOffset = new Date(\r\n utcDate.getTime() + 60000 * utcDate.getTimezoneOffset()\r\n ).getTimezoneOffset();\r\n // use this offset to actually convert\r\n var localDate = new Date(utcDate.getTime() + 60000 * tzOffset);\r\n return localDate;\r\n }\r\n\r\n /**\r\n * Convert a local date to UTC, does not actually change the date object's timezone but\r\n * rather changes the time value to reflect its UTC time\r\n *\r\n * @param {Date} localDate\r\n * @returns Date\r\n */\r\n function localToUtcDate(localDate) {\r\n var utcDate = new Date(\r\n localDate.getTime() - 60000 * localDate.getTimezoneOffset()\r\n );\r\n return utcDate;\r\n }\r\n\r\n /**\r\n * Convert a date to the user's preferred timezone.\r\n * The TimeZone Name can be found in the response from\r\n * globalService.getDateAndTZFormats() > response.data.data.timezone.data.zone_name\r\n *\r\n * @param {dateToConvert} The date to convert\r\n * @param {tzName} The user's TimeZone name value. ex. 'America/New_York'\r\n * @returns Date\r\n */\r\n function dateToUsersTimezone(dateToConvert, tzName) {\r\n //format the date: convert to the right timezone, then convert that string back to a date\r\n var parsedDate = new Date(dateToConvert).toLocaleString(\"en-US\", {\r\n timeZone: tzName,\r\n });\r\n return new Date(parsedDate.replace(\",\", \"\"));\r\n }\r\n\r\n /**\r\n * Generate a unique identifier string\r\n * https://stackoverflow.com/questions/6194950/what-does-the-single-pipe-do-in-javascript\r\n */\r\n function generateUUID() {\r\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(\r\n /[xy]/g,\r\n function (c) {\r\n var r = (Math.random() * 16) | 0;\r\n var v = c == \"x\" ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Check if a value is a UUID (like those created by generateUUID)\r\n *\r\n * @param {Any} value - The value to check, will be converted to string\r\n * @returns Boolean\r\n */\r\n function isUUID(value) {\r\n // case sensitive\r\n // 8 alphanumeric, '-', 4 alphanumeric, '-', 4, 3 alphanumeric, '-', 4 alphanumeric, '-', 12 alphanumeric\r\n var validUUID = RegExp(\r\n \"([a-z0-9]){8}-([a-z0-9]){4}-4([a-z0-9]){3}-([a-z0-9]){4}-([a-z0-9]){12}\"\r\n );\r\n return validUUID.test(value.toString());\r\n }\r\n\r\n /**\r\n * Takes a string date and converts to a JS date based on the dateformat id\r\n * @param {String} dateString - A string date\r\n * @param {Number} dateFormatID - The SUG date format id the string is using\r\n */\r\n function dateStringtoDate(dateString, dateFormatID) {\r\n var tmpDateArray = [];\r\n var tmpDateObj = null;\r\n if (dateFormatID === 1) {\r\n tmpDateArray = dateString.toString().split(\"/\");\r\n if (tmpDateArray.length === 3) {\r\n tmpDateObj = new Date(\r\n tmpDateArray[2],\r\n tmpDateArray[0] - 1,\r\n tmpDateArray[1]\r\n );\r\n }\r\n } else if (dateFormatID === 2) {\r\n tmpDateArray = dateString.toString().split(\"/\");\r\n if (tmpDateArray.length === 3) {\r\n tmpDateObj = new Date(\r\n tmpDateArray[2],\r\n tmpDateArray[1] - 1,\r\n tmpDateArray[0]\r\n );\r\n }\r\n } else if (dateFormatID === 3) {\r\n tmpDateArray = dateString.toString().split(\"-\");\r\n if (tmpDateArray.length === 3) {\r\n tmpDateObj = new Date(\r\n tmpDateArray[0],\r\n tmpDateArray[1] - 1,\r\n tmpDateArray[2]\r\n );\r\n }\r\n }\r\n return tmpDateObj;\r\n }\r\n\r\n /**\r\n * Convert backslashes to front slashes (system path > url path)\r\n * @param {String} path - The string (path) to convert\r\n */\r\n function backSlashesToFrontSlashes(path) {\r\n return path.replace(/\\\\/g, \"/\");\r\n }\r\n\r\n /**\r\n * Returns true if testVal has a precision that is greater than or equal to the provided precision\r\n * @param {String | Number} testVal - value to test\r\n * @param {Integer} precision - precision of float\r\n */\r\n function hasPrecision(testVal, precision) {\r\n if (!isFinite(testVal)) {\r\n return false;\r\n }\r\n var decimalPart = (testVal % 1).toString().split(\".\")[1];\r\n return decimalPart && decimalPart.length >= precision;\r\n }\r\n\r\n /**\r\n * Remove duplicates from an array (type sensitive)\r\n * @param {Array} arr - Required, the source array from which to remove duplicates\r\n * @param {Boolean} modifyOriginal - Optional, whether to return a duplicate or modify the original array, defaults to false\r\n */\r\n function removeArrayDuplicates(arr, modifyOriginal) {\r\n var prims = {\r\n boolean: {},\r\n number: {},\r\n string: {},\r\n };\r\n var objs = [];\r\n var retArr = [];\r\n if (modifyOriginal) {\r\n retArr = arr;\r\n }\r\n retArr = arr.filter(function (item) {\r\n var type = typeof item;\r\n if (type in prims) {\r\n return prims[type].hasOwnProperty(item)\r\n ? false\r\n : (prims[type][item] = true);\r\n } else {\r\n return objs.indexOf(item) >= 0 ? false : objs.push(item);\r\n }\r\n });\r\n return retArr;\r\n }\r\n\r\n function isMobile(excludeTablet) {\r\n if (!excludeTablet) {\r\n if (\r\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(\r\n navigator.userAgent\r\n ) ||\r\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(\r\n navigator.userAgent.substr(0, 4)\r\n )\r\n ) {\r\n return true;\r\n }\r\n } else {\r\n // tablets not considered mobile: omit ipad|Android|Silk\r\n if (\r\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(\r\n navigator.userAgent\r\n ) ||\r\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(\r\n navigator.userAgent.substr(0, 4)\r\n )\r\n ) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Injects conversion snippets into the DOM using the target class name.\r\n *\r\n * @param {object[]} conversions - array of conversion snippets\r\n * @param {string} targetSelector - selector for target element to inject snippets\r\n */\r\n function injectConversions(conversions, targetSelector) {\r\n var deferred = $q.defer();\r\n var targetElem = document.querySelector(targetSelector);\r\n\r\n if (\r\n conversions &&\r\n isArray(conversions) &&\r\n conversions.length &&\r\n targetElem\r\n ) {\r\n var convsContainer = angular.element(targetElem);\r\n for (var ci = 0, ciLen = conversions.length; ci < ciLen; ci++) {\r\n convsContainer.append(conversions[ci]);\r\n }\r\n // esnure the conversions are loaded\r\n var checkExists = setInterval(function () {\r\n if (convsContainer.length) {\r\n deferred.resolve(true);\r\n clearInterval(checkExists);\r\n }\r\n }, 100); // check every 100ms\r\n } else {\r\n deferred.resolve(true);\r\n }\r\n\r\n return deferred.promise;\r\n }\r\n\r\n /**\r\n * Generates the confirmation message when deleting an image from the image library.\r\n * @param {string} filename - Image file name\r\n * @param {integer} signupcount - number of sign ups that uses the image as a theme override\r\n * @param {integer} themecount - number of themes that use the image\r\n * @param {integer} portalcount - number of portal pages that use the image in the banner section\r\n */\r\n function getDeleteImageConfirmationMessage(\r\n filename,\r\n signupcount,\r\n themecount,\r\n portalcount\r\n ) {\r\n // ensure we have valid values for all params and if not, set defaults\r\n filename = !isStringNullOrEmpty(filename) ? filename : \"\";\r\n signupcount = isIntegerGT0(signupcount) ? signupcount : 0;\r\n themecount = isIntegerGT0(themecount) ? themecount : 0;\r\n portalcount = isIntegerGT0(portalcount) ? portalcount : 0;\r\n\r\n var message = \"\";\r\n var messagePrefix =\r\n \"The custom image \" +\r\n filename +\r\n \" is currently selected for \";\r\n var messageSuffix = {\r\n inuse:\r\n \".
Deleting the image will completely remove it from our site.\",\r\n notinuse: \"This will delete \" + filename + \".\",\r\n };\r\n\r\n // add in-use specific messages\r\n // sign ups\r\n if (isIntegerGT0(signupcount)) {\r\n var signupStr = signupcount + \" sign up\" + (signupcount > 1 ? \"s\" : \"\");\r\n message += messagePrefix + signupStr;\r\n }\r\n // themes\r\n if (isIntegerGT0(themecount)) {\r\n var themeStr =\r\n themecount + \" custom theme\" + (themecount > 1 ? \"s\" : \"\");\r\n var themeSeparator = isIntegerGT0(portalcount) ? \", \" : \" and \";\r\n message += (message.length ? themeSeparator : messagePrefix) + themeStr;\r\n }\r\n // portal pages\r\n if (isIntegerGT0(portalcount)) {\r\n var portalStr =\r\n portalcount + \" portal page\" + (portalcount > 1 ? \"s\" : \"\");\r\n message += (message.length ? \" and \" : messagePrefix) + portalStr;\r\n }\r\n // always add this part.\r\n message += message.length ? messageSuffix.inuse : messageSuffix.notinuse;\r\n\r\n return message;\r\n }\r\n\r\n /**\r\n * Method calculates a color’s HSP value, and uses that to determine whether the color is light or dark\r\n * @author Andreas Wik (https:\\\\awik.io)\r\n *\r\n * @param {string} strColor - A HEX (ex. #FF0000 ) or RGB (ex. rgb(0,191,255) ) value of a color you want to evaluate as light or dark.\r\n * @return {integer} LIGHT:1 / DARK:0\r\n */\r\n function lightOrDark(strColor) {\r\n // Variables for red, green, blue values\r\n var r, g, b, hsp;\r\n\r\n // Check the format of the color, HEX or RGB?\r\n if (strColor.match(/^rgb/)) {\r\n // If HEX --> store the red, green, blue values in separate variables\r\n strColor = strColor.match(\r\n /^rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*(\\d+(?:\\.\\d+)?))?\\)$/\r\n );\r\n r = strColor[1];\r\n g = strColor[2];\r\n b = strColor[3];\r\n } else {\r\n // If RGB --> Convert it to HEX: http://gist.github.com/983661\r\n strColor = +(\r\n \"0x\" + strColor.slice(1).replace(strColor.length < 5 && /./g, \"$&$&\")\r\n );\r\n\r\n r = strColor >> 16;\r\n g = (strColor >> 8) & 255;\r\n b = strColor & 255;\r\n }\r\n\r\n // HSP (Highly Sensitive Poo) equation from http://alienryderflex.com/hsp.html\r\n hsp = Math.sqrt(0.299 * (r * r) + 0.587 * (g * g) + 0.114 * (b * b));\r\n\r\n // Using the HSP value, determine whether the color is light or dark\r\n if (hsp > 127.5) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n\r\n /**\r\n * Convert color to rgb value\r\n * @param {string} color to be converted\r\n */\r\n function color2rgb(color) {\r\n if (typeof color === \"undefined\") {\r\n return;\r\n }\r\n // convert color to rgb\r\n // this essentially uses the browser's built in translation to handle strings ('white', 'red', etc), hex, or rgb values\r\n // create element\r\n var d = document.createElement(\"span\");\r\n // assign color\r\n d.style.color = color;\r\n // append to body so window has access\r\n document.body.appendChild(d);\r\n // get computed color (will return rgb / rgba)\r\n var rgbColor = window.getComputedStyle(d).color;\r\n // remove alpha if it's already there so we get the base color\r\n if (rgbColor.indexOf(\"a\") > -1) {\r\n rgbColor =\r\n rgbColor\r\n .replace(\"rgba\", \"rgb\")\r\n .substr(0, rgbColor.lastIndexOf(\",\") - 1) + \")\";\r\n }\r\n // clean up body\r\n document.body.removeChild(d);\r\n // return value\r\n return rgbColor;\r\n }\r\n\r\n /**\r\n * Adds opacity alpha to rgb color\r\n * @param {string} rgb - color in rgb format \"rgb(255, 255, 255)\"\r\n * @param {number} opacity - opacity value to apply ( 0.15 )\r\n */\r\n function addOpacity2color(rgb, opacity) {\r\n if (typeof rgb === \"undefined\" || typeof opacity === \"undefined\") {\r\n return;\r\n }\r\n // replace rgb( with rgba(, add alpha element to end of color\r\n var rgbaColor = rgb\r\n .replace(\"rgb(\", \"rgba(\")\r\n .replace(\")\", \", \" + opacity.toString() + \")\");\r\n return rgbaColor;\r\n }\r\n\r\n /**\r\n * Loops through the browser's loaded sheets and returns the one requested\r\n * @param {string} sheetName - name of a style sheet to find\r\n * @return {Object} A document.styleSheets Object\r\n */\r\n function findStyleSheet(sheetName) {\r\n var foundSheet = {};\r\n if (typeof sheetName === \"string\") {\r\n var sheets = document.styleSheets;\r\n\r\n for (var i = 0; i < sheets.length; i++) {\r\n if (sheets.hasOwnProperty(i)) {\r\n if (typeof sheets[i].href === \"string\") {\r\n var urlParts = sheets[i].href.split(\"/\");\r\n //Determine if the last part of the URL has the name of the sheet we want\r\n if (\r\n urlParts[urlParts.length - 1]\r\n .toLowerCase()\r\n .indexOf(sheetName.toLowerCase()) >= 0\r\n ) {\r\n foundSheet = sheets[i];\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return foundSheet;\r\n }\r\n\r\n /**\r\n * Injects directive styles into the specified style sheet\r\n * If necessary, these styles can be overridden in normal scss/css to customize the Directive look\r\n * @param {string} stylesheetName - REQUIRED; Name of a style sheet to find; typically the minified version (ex. sugstylev3.min.css)\r\n * @param {array} stylesArray - REQUIRED; An array of objects to define styles. Objects contain \"selector\" and \"rule\" keys (ex. [{selector: \".ipp li \", rule: \"color: #222222;\"}] )\r\n * @param {string} directiveStylePrefix - REQUIRED; A CSS classname prefix for the directive. Should appear in your directive's root element. Used to isolate classes and determine if styles already exist. (ex. \".ipp\")\r\n * @param {string} insertIndex - Optional; Default 0; The starting index position to start inserting your new styles. Indexes must be AFTER any css imports in the targeted stylesheet\r\n */\r\n function addDirectiveStyles(\r\n stylesheetName,\r\n stylesArray,\r\n directiveStylePrefix,\r\n insertIndex\r\n ) {\r\n //validate arguments\r\n if (\r\n typeof stylesheetName === \"string\" &&\r\n stylesheetName.length &&\r\n Array.isArray(stylesArray) &&\r\n stylesArray.length &&\r\n typeof directiveStylePrefix === \"string\" &&\r\n directiveStylePrefix.length\r\n ) {\r\n var styleSheet = findStyleSheet(stylesheetName);\r\n\r\n if (typeof styleSheet !== \"undefined\") {\r\n //insertIndex is optional, so make sure we have something to work with\r\n if (typeof insertIndex !== \"number\") {\r\n insertIndex = 0;\r\n }\r\n var stylesExist = false;\r\n var sheetrules = styleSheet.cssRules\r\n ? styleSheet.cssRules\r\n : styleSheet.rules;\r\n\r\n //determine if the style(s) to insert already exist by checking for their directive style prefix\r\n for (var r = 0; r < sheetrules.length; r++) {\r\n if (sheetrules.hasOwnProperty(r)) {\r\n //IE capitalizes selectorText, so lower case it\r\n if (\r\n typeof sheetrules[r].selectorText !== \"undefined\" &&\r\n sheetrules[r].selectorText.toLowerCase() == directiveStylePrefix\r\n ) {\r\n stylesExist = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n //Add styles if they don't exist; handle for all browser variations (IE/Opera: addRule, Others: insertRule)\r\n //Add at the top of the rules, so subsequent directive searches (above) are faster\r\n //Note: insert indexes must be AFTER any css imports. Ex. sugstylev3 rule[0] is a CSSimport\r\n if (!stylesExist) {\r\n var cssIndex = insertIndex;\r\n\r\n if (\"insertRule\" in styleSheet) {\r\n //insertRule takes 2 arguments: \"class definition\", placement index\r\n stylesArray.forEach(function (styleObj) {\r\n styleSheet.insertRule(\r\n styleObj.selector + \" { \" + styleObj.rule + \" } \",\r\n cssIndex\r\n );\r\n cssIndex++;\r\n });\r\n } else if (\"addRule\" in styleSheet) {\r\n //addRule takes 3 arguments: \"selector\", \"rule\", placement index\r\n stylesArray.forEach(function (styleObj) {\r\n styleSheet.addRule(styleObj.selector, styleObj.rule, cssIndex);\r\n cssIndex++;\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n]);\r\n\r\nSUGApp.factory(\"SUGHTTP\", [\r\n \"$http\",\r\n function ($http) {\r\n return {\r\n http: function (Method, url, data) {\r\n var config = {\r\n method: Method,\r\n url: url,\r\n data: data,\r\n params: {},\r\n };\r\n if (Method == \"get\") {\r\n config.params = data;\r\n }\r\n if (Method == \"post\") {\r\n config.params.method = data.method;\r\n }\r\n return $http(config).then(\r\n function (result) {\r\n return result.data;\r\n },\r\n function (result) {\r\n return {\r\n SUCCESS: false,\r\n MESSAGE: [\r\n \"An error occurred while processing your request:\" +\r\n result.status +\r\n \" \" +\r\n result.statusText,\r\n ],\r\n };\r\n }\r\n );\r\n },\r\n };\r\n },\r\n]);\r\n\r\nSUGApp.factory(\"authService\", [\r\n \"$window\",\r\n \"SUGHTTP\",\r\n function ($window, SUGHTTP) {\r\n var factory = {};\r\n\r\n factory.authorize = function (permission) {\r\n SUGHTTP.http(\"get\", \"/model/remote/authRemote.cfc\", {\r\n method: \"hasPermission\",\r\n permission: permission,\r\n _cf_clientid: _cf_clientid,\r\n }).then(function (data) {\r\n if (!data.SUCCESS) {\r\n $window.location.href = \"/index.cfm?go=a.admin\";\r\n }\r\n });\r\n };\r\n factory.hasPermission = function (permission, method) {\r\n SUGHTTP.http(\"get\", \"/model/remote/authRemote.cfc\", {\r\n method: \"hasPermission\",\r\n permission: permission,\r\n _cf_clientid: _cf_clientid,\r\n }).then(method);\r\n };\r\n\r\n return factory;\r\n },\r\n]);\r\n\r\nSUGApp.factory(\"httpService\", [\r\n \"$http\",\r\n function ($http) {\r\n var httpFactory = {};\r\n\r\n var settings = {};\r\n settings.URI = \"\";\r\n settings.sugtoken = \"\";\r\n\r\n httpFactory.post = function (endPointURI, data, sugtoken) {\r\n //reusable factory object for http 'POST' requests\r\n var token = \"\";\r\n var isSUGToken = false;\r\n\r\n if (typeof sugtoken != \"undefined\") {\r\n token = sugtoken;\r\n isSUGToken = true;\r\n } else if (settings.sugtoken.length) {\r\n token = settings.sugtoken;\r\n isSUGToken = true;\r\n }\r\n // this type of token is passed in admin area\r\n if (\"token\" in data) {\r\n token = data.token;\r\n delete data.token;\r\n }\r\n // include settings.URI if endPoint does not include http.\r\n if (endPointURI.indexOf(\"http\") == -1) {\r\n endPointURI = settings.URI + endPointURI;\r\n }\r\n\r\n var config = {\r\n method: \"POST\",\r\n url: endPointURI,\r\n data: data,\r\n };\r\n if (token.length) {\r\n config.headers = {\r\n Accept: \"application/json, text/plain, */*\",\r\n \"Content-Type\": \"application/json, text/plain\",\r\n Authorization: \"Bearer \" + token,\r\n };\r\n if (isSUGToken) {\r\n config.headers[\"X-SUG-Token\"] = \"SUGToken\";\r\n config.headers.Authorization = \"SUGToken \" + token;\r\n }\r\n } else {\r\n config.headers = {\r\n Accept: \"application/json, text/plain, */*\",\r\n \"Content-Type\": \"application/json, text/plain\",\r\n };\r\n }\r\n\r\n return $http(config);\r\n };\r\n httpFactory.get = function (endPointURI, sugtoken) {\r\n //reusable factory object for http 'GET' requests\r\n // include settings.URI if endPoint does not include http.\r\n if (endPointURI.indexOf(\"http\") == -1) {\r\n endPointURI = settings.URI + endPointURI;\r\n }\r\n var config = {\r\n method: \"GET\",\r\n url: endPointURI,\r\n };\r\n\r\n if (settings.sugtoken.length && typeof sugtoken == \"undefined\") {\r\n sugtoken = settings.sugtoken;\r\n }\r\n\r\n if (typeof sugtoken != \"undefined\") {\r\n config.headers = {\r\n Accept: \"application/json, text/plain, */*\",\r\n \"Content-Type\": \"application/json, text/plain\",\r\n \"X-SUG-Token\": \"SUGTOKEN\",\r\n Authorization: \"SUGToken \" + sugtoken,\r\n };\r\n } else {\r\n config.headers = {\r\n Accept: \"application/json, text/plain, */*\",\r\n \"Content-Type\": \"application/json, text/plain\",\r\n };\r\n }\r\n\r\n return $http(config);\r\n };\r\n httpFactory.config = function (data) {\r\n for (var key in data) {\r\n if (data.hasOwnProperty(key)) {\r\n settings[key] = data[key];\r\n }\r\n }\r\n };\r\n\r\n return httpFactory;\r\n },\r\n]);\r\n\r\nSUGApp.factory(\"dataService\", function () {\r\n var store = {};\r\n store.success = true;\r\n store.message = [];\r\n store.data = {};\r\n\r\n var dataFactory = {};\r\n\r\n dataFactory.getSuccess = function () {\r\n return store.success;\r\n };\r\n dataFactory.setSuccess = function (data) {\r\n store.success = data;\r\n };\r\n dataFactory.getMessage = function () {\r\n return store.message;\r\n };\r\n dataFactory.setMessage = function (data) {\r\n store.message = data;\r\n };\r\n dataFactory.getData = function () {\r\n return store.data;\r\n };\r\n dataFactory.setData = function (data) {\r\n store.data = data;\r\n };\r\n // return the entire data store or data for a specific key\r\n dataFactory.get = function (key) {\r\n if (typeof key == \"undefined\") {\r\n return store;\r\n }\r\n return store[key];\r\n };\r\n // allow custom key to be defined on the data store\r\n dataFactory.set = function (key, data) {\r\n store[key] = data;\r\n };\r\n\r\n dataFactory.reset = function () {\r\n store.success = true;\r\n store.data = {};\r\n store.message = [];\r\n };\r\n\r\n dataFactory.init = function () {\r\n store = {};\r\n store.success = true;\r\n store.data = {};\r\n store.message = [];\r\n };\r\n return dataFactory;\r\n});\r\n\r\nSUGApp.factory(\"ordersManager\", [\r\n \"$http\",\r\n \"$q\",\r\n \"SUGHTTP\",\r\n function ($http, $q, SUGHTTP) {\r\n var ordersManager = {};\r\n var deferred = $q.defer();\r\n ordersManager.loadAllOrders = function (activeOnly) {\r\n var config = {\r\n method: \"get\",\r\n url: \"/model/remote/orderRemote.cfc\",\r\n data: { activeOnly: activeOnly },\r\n params: {\r\n method: \"getActiveOrdersForAdmin\",\r\n _cf_clientid: _cf_clientid,\r\n },\r\n };\r\n $http(config)\r\n .success(function (data) {\r\n var returnData = {};\r\n if (typeof data.SUCCESS == \"boolean\" && !data.SUCCESS) {\r\n returnData = {\r\n success: false,\r\n data: { messageClass: \"failMessage\" },\r\n message: [\"Ooops ... something happened\"],\r\n };\r\n } else {\r\n returnData = data;\r\n }\r\n deferred.resolve(returnData);\r\n })\r\n .error(function () {\r\n deferred.reject();\r\n });\r\n return deferred.promise;\r\n };\r\n return ordersManager;\r\n },\r\n]);\r\n\r\nSUGApp.factory(\"remoteService\", [\r\n \"$http\",\r\n \"$q\",\r\n \"$window\",\r\n function ($http, $q, $window) {\r\n var remoteService = {};\r\n var deferred = $q.defer();\r\n var execute = true;\r\n remoteService.request = function (resource, data, Method) {\r\n if (angular.isUndefined(Method)) {\r\n Method = \"get\";\r\n }\r\n resource = resource.split(\".\");\r\n if (resource.length != 2) {\r\n deferred.resolve({\r\n SUCCESS: false,\r\n MESSAGE: [\"Invalid resource called. Must be in format object.method\"],\r\n });\r\n execute = false;\r\n }\r\n if (execute) {\r\n var resourceObject = resource[0];\r\n var resourceMethod = resource[1];\r\n var callURL = \"/model/remote/\" + resourceObject + \".cfc\";\r\n var config = {};\r\n config.params = {};\r\n config.params.method = \"access\";\r\n config.method = Method;\r\n config.url = callURL;\r\n config.data = data;\r\n config.data.cfcMethod = resourceMethod;\r\n if (Method == \"get\") {\r\n angular.forEach(data, function (obj, key) {\r\n config.params[key] = obj;\r\n });\r\n }\r\n return $http(config).then(\r\n //success\r\n function (response) {\r\n // NOTE: Coldfusion error is still a successful ajax call\r\n return response.data;\r\n },\r\n //error\r\n function (response) {\r\n if (response.status == 401) {\r\n //$window.location.href = 'index.cfm?go=c.login';\r\n }\r\n return $q.reject(response.data);\r\n }\r\n );\r\n }\r\n return deferred.promise;\r\n };\r\n return remoteService;\r\n },\r\n]);\r\n\r\nSUGApp.factory(\"geniusDrive\", [\r\n \"$modal\",\r\n \"$q\",\r\n function ($modal, $q) {\r\n var geniusDrive = {};\r\n geniusDrive.select = function () {\r\n var deferred = $q.defer();\r\n $modal\r\n .open({\r\n templateUrl: \"view/tools/geniusdriveselect.html\",\r\n controller: [\r\n \"$scope\",\r\n \"$modalInstance\",\r\n function ($scope, $modalInstance) {\r\n $scope.selectedNode = \"\";\r\n // set the current node when navigating tree\r\n $scope.nodeChanged = function (node) {\r\n $scope.selectedNode = node;\r\n };\r\n // dialog select button action\r\n $scope.selectResource = function () {\r\n $modalInstance.close($scope.selectedNode);\r\n };\r\n // dialog cancel button action\r\n $scope.cancel = function () {\r\n $modalInstance.dismiss(\"cancel\");\r\n };\r\n },\r\n ],\r\n })\r\n .result.then(function (selectedNode) {\r\n if (selectedNode.isfolder != \"true\") {\r\n deferred.resolve(selectedNode.fileid);\r\n }\r\n });\r\n return deferred.promise;\r\n };\r\n return geniusDrive;\r\n },\r\n]);\r\n\r\n/*\r\n * localStorage service for getting, setting, removing, and clearing data. Uses a global prefix for organization.\r\n */\r\nSUGApp.factory(\"$localstorage\", [\r\n \"$window\",\r\n function ($window) {\r\n var localStorageFactory = {};\r\n var localStoragePrefix = \"SUG_\";\r\n if ($window.localStorage) {\r\n localStorageFactory = {\r\n log: function () {\r\n console.log($window.localStorage);\r\n },\r\n set: function (key, value) {\r\n $window.localStorage.setItem(localStoragePrefix + key, value);\r\n },\r\n get: function (key, defaultValue) {\r\n return (\r\n $window.localStorage.getItem(localStoragePrefix + key) ||\r\n defaultValue\r\n );\r\n },\r\n setObject: function (key, value) {\r\n $window.localStorage.setItem(\r\n localStoragePrefix + key,\r\n JSON.stringify(value)\r\n );\r\n },\r\n getObject: function (key, defaultValue) {\r\n return (\r\n JSON.parse(\r\n $window.localStorage.getItem(localStoragePrefix + key)\r\n ) || defaultValue\r\n );\r\n },\r\n remove: function (key) {\r\n $window.localStorage.removeItem(localStoragePrefix + key);\r\n },\r\n clear: function () {\r\n for (var i = 0, len = $window.localStorage.length; i < len; i++) {\r\n if (\r\n $window.localStorage\r\n .key(i)\r\n .substring(0, localStoragePrefix.length) == localStoragePrefix\r\n ) {\r\n $window.localStorage.removeItem($window.localStorage.key(i));\r\n }\r\n }\r\n },\r\n };\r\n }\r\n return localStorageFactory;\r\n },\r\n]);\r\n\r\n/* Global filter for outputting a string in title case\r\n * i.e. 'this is my string' becomes 'This Is My String'\r\n *\r\n * @string - this is the string that the filter is applied to\r\n * @blnChangeOnlyFirstLetters - whether we should only uppercase the first letter of each word and leave the rest of the string as-is\r\n */\r\nSUGApp.filter(\"titleCase\", function () {\r\n return function (string, blnChangeOnlyFirstLetters) {\r\n var stringTitleCased = string || \"\";\r\n return stringTitleCased.replace(/\\w\\S*/g, function (str) {\r\n var first = str.charAt(0);\r\n var rest = str.substr(1);\r\n if (blnChangeOnlyFirstLetters) {\r\n return first.toUpperCase() + rest;\r\n } else {\r\n return first.toUpperCase() + rest.toLowerCase();\r\n }\r\n });\r\n };\r\n});\r\n\r\n/* Global filter for outputting a string with variables in it\r\n * i.e. string 'This is my !test! string' is output in a view like {{string | sugString:[{test:'super cool'}]}} to render as 'This is my super cool string\r\n * Useful for defining static string resources that include variable content like a count or name.\r\n *\r\n * @string - this is the string that the filter is applied to\r\n * @data - this is the array of variables/keys that will be replaced\r\n */\r\nSUGApp.filter(\"sugString\", function () {\r\n return function (string, data) {\r\n if (string) {\r\n var strReturn = angular.copy(string);\r\n for (var i = 0, len = data.length; i < len; i++) {\r\n for (var key in data[i]) {\r\n if (data[i].hasOwnProperty(key)) {\r\n strReturn = strReturn.split(\"!\" + key + \"!\").join(data[i][key]);\r\n }\r\n }\r\n }\r\n return strReturn;\r\n }\r\n return \"\";\r\n };\r\n});\r\n\r\n// Global filter for percentage formatting\r\nSUGApp.filter(\"percentage\", [\r\n \"$filter\",\r\n function ($filter) {\r\n return function (input, decimals) {\r\n if (!input) input = 0;\r\n if (!decimals) decimals = 2;\r\n var percentified = $filter(\"number\")(input * 100, decimals) + \"%\";\r\n return percentified !== \"%\" ? percentified : 0;\r\n };\r\n },\r\n]);\r\n\r\n// Global filter for trusting html content (e.g. ng-bind-html=\"something | trustHtml\")\r\nSUGApp.filter(\"trustHtml\", [\r\n \"$sce\",\r\n function ($sce) {\r\n return function (html) {\r\n return $sce.trustAsHtml(html);\r\n };\r\n },\r\n]);\r\n\r\n// Global filter for removing restricted tags like