From cb0b222c8ade7a4a2680116f857c99dc4bf899eb Mon Sep 17 00:00:00 2001 From: Rob McGuinness Date: Wed, 20 Jan 2016 21:35:41 -0500 Subject: [PATCH] bump package version v1.8.1 --- bower.json | 2 +- dist/availity-angular-ui-templates.js | 2 +- dist/availity-angular-ui-templates.min.js | 2 +- dist/availity-angular-ui.js | 11 +++++++++-- dist/availity-angular-ui.min.js | 6 +++--- dist/availity-angular.js | 4 ++-- dist/availity-angular.min.js | 4 ++-- dist/css/availity-angular.css | 2 +- dist/css/availity-angular.min.css | 2 +- dist/css/maps/availity-angular.min.css.map | 2 +- dist/maps/availity-angular-ui-templates.min.js.map | 2 +- dist/maps/availity-angular-ui.js.map | 2 +- dist/maps/availity-angular-ui.min.js.map | 2 +- dist/maps/availity-angular.min.js.map | 2 +- package.json | 2 +- 15 files changed, 27 insertions(+), 20 deletions(-) diff --git a/bower.json b/bower.json index e9012842..ea7c9bfe 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "availity-angular", "description": "Availity Angular SDK", - "version": "1.8.0", + "version": "1.8.1", "keywords": [ "availity", "angular", diff --git a/dist/availity-angular-ui-templates.js b/dist/availity-angular-ui-templates.js index 1e7eaaff..22615fc9 100644 --- a/dist/availity-angular-ui-templates.js +++ b/dist/availity-angular-ui-templates.js @@ -1,5 +1,5 @@ /** - * availity-angular v1.8.0 -- January-15 + * availity-angular v1.8.1 -- January-20 * Copyright 2016 Availity, LLC */ diff --git a/dist/availity-angular-ui-templates.min.js b/dist/availity-angular-ui-templates.min.js index 7e1003fb..8387cdb8 100644 --- a/dist/availity-angular-ui-templates.min.js +++ b/dist/availity-angular-ui-templates.min.js @@ -1,5 +1,5 @@ /** - * availity-angular v1.8.0 -- January-15 + * availity-angular v1.8.1 -- January-20 * Copyright 2016 Availity, LLC */ diff --git a/dist/availity-angular-ui.js b/dist/availity-angular-ui.js index c4e00b74..5ba03a39 100644 --- a/dist/availity-angular-ui.js +++ b/dist/availity-angular-ui.js @@ -1,5 +1,5 @@ /** - * availity-angular v1.8.0 -- January-15 + * availity-angular v1.8.1 -- January-20 * Copyright 2016 Availity, LLC */ @@ -1280,7 +1280,14 @@ var items = this.collection($scope); var index = _.findIndex(items, function(item) { - return angular.equals(item, model); + if (!self.valueFn) { + return angular.equals(item, model); + } else { + var locals = {}; + locals[self.valueName] = item; + var value = self.valueFn($scope, locals); + return angular.equals(value, model); + } }); return index; diff --git a/dist/availity-angular-ui.min.js b/dist/availity-angular-ui.min.js index f16ff7a3..6bb714e5 100644 --- a/dist/availity-angular-ui.min.js +++ b/dist/availity-angular-ui.min.js @@ -1,8 +1,8 @@ /** - * availity-angular v1.8.0 -- January-15 + * availity-angular v1.8.1 -- January-20 * Copyright 2016 Availity, LLC */ -(function(root){"use strict";var availity=root.availity||{};availity.MODULE_UI="availity.ui";availity.ui=angular.module(availity.MODULE_UI,["ng","ngSanitize"]);availity.ui.constant("AV_UI",{NG_OPTIONS:/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/});if(typeof module!=="undefined"&&module.exports){module.exports=availity}})(window);(function(root){"use strict";var availity=root.availity;availity.ui.factory("avTemplateCache",function($q,$templateCache,$http){return{get:function(options){var valid=!options.template||!options.templateUrl;if(!valid){throw new Error("Either options.template or options.templateUrl must be defined for avTemplateCache")}return options.template?$q.when(options.template):$http.get(options.templateUrl,{cache:$templateCache}).then(function(result){return result.data})}}})})(window);(function(root){"use strict";var availity=root.availity;availity.ui.constant("AV_MODAL",{OPTIONS:{scope:null,templateUrl:null,template:null,id:null,container:null,keyboard:true,backdrop:true,show:false,remote:false},EVENTS:{SHOW:"show.av.modal",SHOWN:"shown.av.modal",HIDE:"hide.av.modal",HIDDEN:"hidden.av.modal"},NAMESPACE:{MODAL:"bs.modal"},BS_EVENTS:{SHOW:"show.bs.modal",SHOWN:"shown.bs.modal",HIDE:"hide.bs.modal",HIDDEN:"hidden.bs.modal"},TEMPLATES:{MODAL:"ui/modal/modal-tpl.html"}});availity.ui.factory("avModalManager",function(){var AvModalManager=function(){this.instances=[]};var proto=AvModalManager.prototype;proto.add=function(id){this.instances.push(id)};proto.remove=function(id){this.instances=_.without(this.instances,id)};proto.closeAll=function(){_.forEach(this.instances,function(id){var $el=$("#"+id);if(!$el){return}var bsModal=$el.data("bs.modal");if(bsModal){bsModal.removeBackdrop();bsModal.$body.removeClass("modal-open");bsModal.resetAdjustments();bsModal.resetScrollbar()}var avModal=$el.data("AvModal");if(avModal){avModal.destroy()}})};return new AvModalManager});var ModalFactory=function($rootScope,$timeout,$compile,AV_MODAL,avTemplateCache,$q,avModalManager){var Modal=function(options){var self=this;this.templateDefer=$q.defer();this.templatePromise=this.templateDefer.promise;this.options=angular.extend({},AV_MODAL.OPTIONS,{scope:$rootScope.$new()},options);avTemplateCache.get(options).then(function(template){self.options.template=template;self._build()})};Modal.create=function(options){return new Modal(options)};var proto=Modal.prototype;proto._build=function(){var self=this;var scope=this.options.scope;this.$element=angular.element(this.options.template);this._createId();this._scope();$compile(this.$element)(scope);$timeout(function(){self._init()},0,true);this.options.container?this.$element.appendTo(this.options.container):this.$element.appendTo("body")};proto._init=function(){this.$element.data("AvModal",this);this.templateDefer.resolve(true);this.$element.modal({backdrop:this.options.backdrop,keyboard:this.options.keyboard,show:this.options.show,remote:this.options.remote});this._listeners()};proto._scope=function(){var self=this;var scope=this.options.scope;scope.modalShow=function(){return self.show()};scope.modalToggle=function(){return self.toggle()};scope.modalHide=function(){return self.hide()}};proto._listeners=function(){var self=this;var scope=this.options.scope;var $element=this.$element;this.animationShowDefer=$q.defer();this.animationHideDefer=$q.defer();$element.on(AV_MODAL.BS_EVENTS.SHOW,function(event){scope.$emit(AV_MODAL.EVENTS.SHOW,event,self)});$element.on(AV_MODAL.BS_EVENTS.SHOWN,function(event){if(angular.isFunction(self.options.onShown)){self.options.onShown()}self.animationShowDefer.resolve(true);scope.$emit(AV_MODAL.EVENTS.SHOWN,event,self)});$element.on(AV_MODAL.BS_EVENTS.HIDE,function(event){scope.$emit(AV_MODAL.EVENTS.HIDE,event,self)});$element.on(AV_MODAL.BS_EVENTS.HIDDEN,function(event){if(angular.isFunction(self.options.onHidden)){self.options.onHidden.call(this)}self.animationHideDefer.resolve(true);scope.$emit(AV_MODAL.EVENTS.HIDDEN,event,self);scope.$evalAsync(function(){self.destroy()})});scope.$on("$destroy",function(){avModalManager.remove(self._id);self.destroy()})};proto.show=function(){var self=this;this.animationShowDefer=$q.defer();this.templatePromise.then(function(){self.isShown()?self.animationShowDefer.resolve(true):self.$element.modal("show")});return this.animationShowDefer.promise};proto.hide=function(){var self=this;this.animationHideDefer=$q.defer();this.templatePromise.then(function(){!self.isShown()?self.animationHideDefer.resolve(true):self.$element.modal("hide")});return this.animationHideDefer.promise};proto.isShown=function(){return this.$element.data(AV_MODAL.NAMESPACE.MODAL).isShown},proto.toggle=function(){var self=this;return this.templatePromise.then(function(){return self.isShown()?self.hide():self.show()})};proto.destroy=function(){var self=this;return this.templatePromise.then(function(){self.$element.data("AvModal",null);self.$element.remove()})};proto._createId=function(){var id=this.$element.attr("id");if(!id){id=this.options.id?this.options.id:availity.uuid("av-modal-id");this.$element.attr("id",id)}this._id=id;avModalManager.add(id)};return Modal};availity.ui.factory("AvModal",ModalFactory);availity.ui.directive("avModal",function(AV_MODAL){return{restrict:"A",replace:true,transclude:true,scope:{size:"@"},templateUrl:AV_MODAL.TEMPLATES.MODAL}})})(window);(function(root){"use strict";var availity=root.availity;availity.ui.controller("avValFormController",function(){this.ngForm=null;this.rulesKey=null;this.avValOn=null;this.avValDebounce=null;this.avValInvalid=false;this.violations={};this.init=function(form){this.ngForm=form};this.record=function(id,count){this.violations[id]=count;var violocationCount=_.reduce(this.violations,function(sum,num){return sum+num},0);this.ngForm.$setValidity("av",violocationCount===0)};this.unrecord=function(id){if(id&&this.violations[id]){delete this.violations[id]}};this.reset=function(){this.ngForm.$setPristine();this.ngForm.$submitted=false};this.$setSubmitted=function(){this.ngForm.$submitted=true};this.setRulesKey=function(key){this.rulesKey=key}});availity.ui.directive("avValForm",function($log,$timeout,$parse,AV_VAL,avValAdapter,$rootScope){return{restrict:"A",priority:10,require:["form","avValForm"],controller:"avValFormController",compile:function(){return{pre:function(scope,iEl,iAttrs,controllers){var ruleFn=$parse(iAttrs.avValForm);var rulesKey=ruleFn(scope);rulesKey=rulesKey||iAttrs.avValForm;if(!rulesKey){$log.error("avValForm requires a rules key in order to run the proper validation rules.");return}scope.$watch(ruleFn,function(_rulesKey,_oldRulesKey){if(_rulesKey){avForm.setRulesKey(_rulesKey);if(_rulesKey!==_oldRulesKey){$timeout(function(){$log.info("avValForm revalidate");$rootScope.$broadcast(AV_VAL.EVENTS.REVALIDATE)})}}});var ngForm=controllers[0];var avForm=controllers[1];avForm.avValOn=iAttrs.avValOn||null;avForm.avValDebounce=iAttrs.avValDebounce||null;avForm.avValInvalid=iAttrs.avValInvalid||false;avForm.init(ngForm);avForm.setRulesKey(rulesKey)},post:function(scope,iEl,iAttrs,controllers){iEl.attr("novalidate","novalidate");var fn;if(iAttrs.ngSubmit){iEl.off("submit");fn=$parse(iAttrs.ngSubmit,true)}else if(iAttrs.ngClick){iEl.off("click");fn=$parse(iAttrs.ngClick,true)}var ngForm=controllers[0];var avForm=controllers[1];scope.$on(AV_VAL.EVENTS.RESET,function(){avForm.reset()});iEl.bind("submit",function(event){scope.$broadcast(AV_VAL.EVENTS.SUBMITTED);avForm.$setSubmitted();if(ngForm.$invalid){scope.$broadcast(AV_VAL.EVENTS.FAILED);$log.info("avValForm invalid. preventing default submit action");event.preventDefault();event.stopImmediatePropagation();scope.$broadcast(event);avValAdapter.scroll(iEl);return}ngForm.$setPristine();if(!fn){return}var callback=function(){fn(scope,{$event:event})};scope.$apply(callback)})}}}}})})(window);(function(root){"use strict";var availity=root.availity;availity.ui.controller("AvValFieldController",function($element,avValAdapter,$attrs,avVal,$log,$timeout,$scope,$sniffer){this.ngModel=null;this.rule=null;this.avValForm=null;this.avValInvalid=false;var self=this;var placeholder=$element[0].placeholder;var noEvent={};this.createId=function(){this.ngModel.avId=availity.uuid("avVal")};this.setNgModel=function(ngModel){this.ngModel=ngModel};this.setRule=function(rule){this.rule=rule};this.avValForm=function(avValForm){this.avValForm=avValForm};this.updateModel=function(results){var self=this;var validationKeys=[];this.ngModel.avResults=results;angular.forEach(results.violations,function(result){var key="av-"+result.contraintName;validationKeys.push(key);self.ngModel.$setValidity(key,result.valid)});this.ngModel.$setValidity("av",this.ngModel.avResults.isValid);this.ngModel.avViolations=this.ngModel.avResults.violations;this.avValForm.record(this.ngModel.avId,this.ngModel.avResults.violations.length);angular.forEach(this.ngModel.$error,function(value,key){if(_.indexOf(validationKeys,key)===-1&&key.lastIndexOf("av-",0)===0){self.ngModel.$setValidity(key,true)}})};this.updateView=function(){if(this.ngModel.$dirty||$scope.avValShow){avValAdapter.element($element,this.ngModel,this.ngModel.avResults.isValid);avValAdapter.message($element,this.ngModel)}};this.validate=function(value){$log.info("validating value ["+value+"]");var rulesKey=self.avValForm.rulesKey;var results=avVal.validate(rulesKey,$element,value,self.rule);self.updateModel.call(self,results);self.updateView.call(self);return results};this.validateModel=function(value){self.validate(value,true);return value};this.validateView=function(value){var results=self.validate(value);if(self.avValForm.avValInvalid||self.avValInvalid){return value}return results.isValid?value:undefined};this.onDebounce=function(){var value=$element.val().trim();if(this.isCheckbox()){this.ngModel.$setViewValue($element[0].checked)}else if(this.isRadio()){this.ngModel.$setViewValue($attrs.value)}else{this.ngModel.$setViewValue(value)}};this.isRadio=function(){return $element.is("input")&&$attrs.type==="radio"};this.isCheckbox=function(){return $element.is("input")&&$attrs.type==="checkbox"};this.reset=function(){var violations=this.ngModel.avResults.violations;violations.splice(0,violations.length);avValAdapter.message($element,this.ngModel);avValAdapter.reset($element)};this.event=function(event,avValDebounce){var self=this;$element.unbind("input");var debounce;$element.on(event,function(){if($sniffer.msie<=11&&(event||noEvent).type==="input"&&$element[0].placeholder!==placeholder){placeholder=$element[0].placeholder;return}$timeout.cancel(debounce);debounce=$timeout(function(){$scope.$apply(function(){self.onDebounce()})},avValDebounce)})}});availity.ui.directive("avValField",function($log,$timeout,avVal,avValAdapter,AV_VAL){return{restrict:"A",controller:"AvValFieldController",require:["^avValForm","ngModel","avValField"],scope:{avValDebounce:"@?",avValOn:"@?",avValShow:"=?"},link:function(scope,element,attrs,controllers){var rule=attrs.avValField;var avValForm=controllers[0];var ngModel=controllers[1];var avValField=controllers[2];var avValOn=scope.avValOn||avValForm.avValOn||"input";if(!ngModel&&!rule){$log.error("avValField requires ngModel and a validation rule to run.");return}avValField.avValInvalid=attrs.avValInvalid||false;avValField.setNgModel(ngModel);avValField.avValForm(avValForm);avValField.setRule(rule);avValField.createId();var avValDebounce=parseInt(scope.avValDebounce||(avValForm.avValDebounce||AV_VAL.DEBOUNCE),10);avValDebounce=_.isNumber(avValDebounce)?avValDebounce:AV_VAL.DEBOUNCE;var debounceAllowed=!avValField.isRadio()&&!avValField.isCheckbox()&&avValOn!=="blur";if(!debounceAllowed){avValDebounce=0}avValField.event(avValOn,avValDebounce);ngModel.$parsers.push(avValField.validateView);ngModel.$formatters.unshift(avValField.validateModel);scope.$on(AV_VAL.EVENTS.REVALIDATE,function(){avValField.validate(ngModel.$viewValue)});scope.$on(AV_VAL.EVENTS.SUBMITTED,function(){ngModel.$dirty=true;avValField.validate(ngModel.$viewValue)});scope.$on(AV_VAL.EVENTS.RESET,function(){avValField.reset()});scope.$on("$destroy",function(){avValForm.unrecord(ngModel.avId)})}}})})(window);(function(root){"use strict";var availity=root.availity;availity.ui.provider("avPopoverConfig",function(){var config={showOnLoadHideDelay:1e4};this.set=function(options){angular.extend(config,options)};this.$get=function(){return angular.copy(config)}});availity.ui.constant("AV_POPOVER",{NAME:"bs.popover"});availity.ui.controller("AvPopoverController",function($element,$scope,AV_POPOVER,$timeout,avPopoverConfig){this.options=angular.extend({},avPopoverConfig);this.listeners=function(){var self=this;angular.forEach(["show","shown","hide","hidden"],function(name){$element.on(name+".bs.popover",function(ev){$scope.$emit("av:popover:"+name,ev)})});$scope.$on("destroy",function(){self.destroy()})};this.plugin=function(){return $element.data(AV_POPOVER.NAME)};this.show=function(){$element.popover("show")};this.hide=function(){$element.popover("hide")};this.toggle=function(){$element.popover("toggle")};this.destroy=function(){$element.popover("destroy")};this.init=function(){this.listeners();if($scope.showOnLoad){this.show();if($scope.delay&&$scope.delay.hide){$timeout(this.hide,$scope.delay.hide,false);return}$timeout(this.hide,this.options.showOnLoadHideDelay,false)}}});availity.ui.directive("avPopover",function(){return{restrict:"A",controller:"AvPopoverController",scope:{showOnLoad:"=",delay:"="},link:function(scope,element,attrs,avPopover){var options={};scope.$evalAsync(function(){element.popover(angular.extend({},options,{html:true}));avPopover.init()})}}})})(window);(function(root){"use strict";var availity=root.availity;availity.ui.controller("avValContainerController",function($scope,$timeout){this.message=function(ngModel){var message=null;if(ngModel.avResults.violations.length&&ngModel.avResults.violations[0].message){message=ngModel.avResults.violations[0].message}else{message=null}$timeout(function(){$scope.messages.message=message})}});availity.ui.directive("avValContainer",function(){return{restrict:"A",controller:"avValContainerController",template:'

',replace:true,scope:{},link:function(scope){scope.messages=_.extend({},scope.messages,{message:null,id:null})}}})})(window);(function(root){"use strict";var availity=root.availity;availity.ui.constant("AV_BOOTSTRAP_ADAPTER",{CLASSES:{SUCCESS:"has-success",WARNING:"has-warning",ERROR:"has-error",FEEDBACK:"has-feedback",HELP:"help-block",FORM_GROUP:".form-group:first",NAVBAR:"navbar-fixed-top"},SELECTORS:{CONTAINER:"container-id",DATA_CONTAINER:"data-container-id"},CONTROLLER:"$avValContainerController"});availity.ui.factory("avValBootstrapAdapter",function(AV_BOOTSTRAP_ADAPTER,$timeout,$log){return{element:function(element,ngModel){if(ngModel.$valid){element.parents(AV_BOOTSTRAP_ADAPTER.CLASSES.FORM_GROUP).removeClass(AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR)}else{element.parents(AV_BOOTSTRAP_ADAPTER.CLASSES.FORM_GROUP).addClass(AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR)}},reset:function(element){element.parents(AV_BOOTSTRAP_ADAPTER.CLASSES.FORM_GROUP).removeClass(AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR)},message:function(element,ngModel){var selector=[".",AV_BOOTSTRAP_ADAPTER.CLASSES.HELP].join("");var $el=$(element);var target=$el.attr(AV_BOOTSTRAP_ADAPTER.SELECTORS.CONTAINER);target=target||$el.attr(AV_BOOTSTRAP_ADAPTER.SELECTORS.DATA_CONTAINER);target=target?$("#"+target):$el.siblings(selector);if(target.length===0){$log.warn("avValBootstrapAdapter could not find validation container for {0}",[element]);return}var el=target[0];$el=angular.element(el);var avValModel=$el.data(AV_BOOTSTRAP_ADAPTER.CONTROLLER);if(avValModel){avValModel.message(ngModel)}},scroll:function(form){var navbarSelector=[".",AV_BOOTSTRAP_ADAPTER.CLASSES.NAVBAR].join("");var offset=0;$(navbarSelector).each(function(){offset+=$(this).outerHeight()});var selector=[".",AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR,":first"].join("");var $target=$(form).find(selector);$timeout(function(){$("body, html").animate({scrollTop:$target.offset().top-offset},"fast")},0,false)}}})})(window);(function(root){"use strict";var availity=root.availity;availity.ui.constant("AV_VAL_ADAPTER",{DEFAULT:"avValBootstrapAdapter"});availity.ui.provider("avValAdapter",function(){var that=this;this.setAdapter=function(adapter){this.adapter=adapter};this.$get=function(AV_VAL_ADAPTER,$injector){var Adapter=function(){var adapterName=that.adapter||AV_VAL_ADAPTER.DEFAULT;this.adapter=$injector.get(adapterName)};var proto=Adapter.prototype;proto.element=function(element,ngModel){this.adapter.element(element,ngModel)};proto.reset=function(element){this.adapter.reset(element)};proto.message=function(element,ngModel){this.adapter.message(element,ngModel)},proto.scroll=function(form){this.adapter.scroll(form)};return new Adapter}})})(window);(function(root){"use strict";var availity=root.availity;availity.ui.provider("avDropdownConfig",function(){var config={closeOnResize:true,dropdownAutoWidth:true,minimumResultsForSearch:5};this.set=function(options){angular.extend(config,options)};this.$get=function(){return angular.copy(config)}});availity.ui.constant("AV_DROPDOWN",{OPTIONS:["width","minimumInputLength","maximumInputLength","minimumResultsForSearch","maximumSelectionSize","placeholderOption","separator","allowClear","multiple","closeOnSelect","openOnEnter","id","matcher","sortResults","formatSelection","formatResult","formatResultCssClass","formatNoMatches","formatSearching","formatAjaxError","formatInputTooShort","formatInputTooLong","formatSelectionTooBig","formatLoadMore","createSearchChoice","createSearchChoicePosition","initSelection","tokenizer","tokenSeparators","query","ajax","data","tags","containerCss","containerCssClass","dropdownCss","dropdownCssClass","dropdownAutoWidth","adaptContainerCssClass","adaptDropdownCssClass","escapeMarkup","selectOnBlur","loadMorePadding","nextSearchTerm","correlationId"]});availity.ui.controller("AvDropdownController",function($element,$attrs,AV_UI,AV_DROPDOWN,avDropdownConfig,$log,$scope,$timeout,$parse){var self=this;this.options={};this.match=null;this.ngModel=null;this.init=function(){self.options=angular.extend({},avDropdownConfig);_.forEach($attrs,function(value,key){if(_.contains(AV_DROPDOWN.OPTIONS,key.replace("data-",""))){self.options[key]=$scope.$eval(value)}});if(this.isRemoteMultiple()){self.options.multiple=angular.isDefined($attrs.multiple)}self.multiple=angular.isDefined($attrs.multiple);if(self.options.query){self.queryFn=self.options.query;self.options.query=self.query;self.options.id=self.getId}};this.isRemoteMultiple=function(){if(angular.isDefined($attrs.multiple)&&$element.get(0).tagName.toLowerCase()==="input"){return true}return false};this.setRemoteViewValue=function(e){var values=this.ngModel.$viewValue;if(!angular.isArray(values)||!angular.isObject(values)){values=[]}if(e.added){values.push(e.added)}else{var index=_.findIndex(values,function(value){return _.matches(e.removed)(value)});values.splice(index,1)}this.ngModel.$setViewValue(values)};this.setViewValue=function(e){this.ngModel.$setViewValue(e.added)};this.setNgModel=function(ngModel){this.ngModel=ngModel};this.getSelected=function(model){if(self.options.query){return 0}var items=this.collection($scope);var index=_.findIndex(items,function(item){return angular.equals(item,model)});return index};this.getId=function(result){return result.id};this.query=function(options){self.queryFn(options).then(function(response){options.callback({more:response.more,results:response.results})})};this.setValue=function(){var viewValue=self.ngModel.$viewValue;var selected=null;if(viewValue){selected=this.getSelected(viewValue)}$timeout(function(){$element.select2("val",selected===null||selected==="undefined"?"":selected)})};this.getMultiSelected=function(viewValue){var indices=[];if($element.get(0).tagName.toLowerCase()!=="input"){var options=this.collection($scope);_.each(viewValue,function(savedObject){var index=_.findIndex(options,function(value){var temp=angular.copy(savedObject);return _.matches(temp)(value)});indices.push(index)})}else{var inputViewValues=this.ngModel.$modelValue;_.each(inputViewValues,function(savedObject){if(_.isUndefined(savedObject.id)){if(savedObject.id||savedObject[self.options.correlationId]){savedObject.id=savedObject[self.options.correlationId]}else{throw new Error("dropdown list must have a id or a alternative value to use as a id")}}})}if(indices.length>0){viewValue=indices}return viewValue};this.setValues=function(){var viewValue=self.ngModel.$viewValue;if(!angular.isArray(viewValue)){viewValue=[]}if(!_.isEmpty(viewValue)&&_.isObject(viewValue[0])){viewValue=this.getMultiSelected(viewValue)}$timeout(function(){$element.select2("val",viewValue)})};this.ngOptions=function(){this.match=$attrs.ngOptions.match(AV_UI.NG_OPTIONS);if(!this.match){throw new Error("Invalid ngOptions for avDropdown")}this.displayFn=$parse(this.match[2]||this.match[1]);this.collection=$parse(this.match[7]);this.valueName=this.match[4]||this.match[6];this.valueFn=$parse(this.match[2]?this.match[1]:this.valueName);this.keyName=this.match[5];$scope.$watchCollection(this.collection,function(newVal,oldVal){if(angular.equals(newVal,oldVal)){return}self.setValue()},true)}});availity.ui.directive("avDropdown",function($timeout,$log,$window){return{restrict:"A",require:["ngModel","avDropdown"],controller:"AvDropdownController",link:function(scope,element,attrs,controllers){var ngModel=controllers[0];var avDropdown=controllers[1];avDropdown.setNgModel(ngModel);avDropdown.init();if(attrs.ngOptions){avDropdown.ngOptions()}ngModel.$parsers.push(function(value){var parent=element.prev();parent.toggleClass("ng-invalid",!ngModel.$valid).toggleClass("ng-valid",ngModel.$valid).toggleClass("ng-invalid-required",!ngModel.$valid).toggleClass("ng-valid-required",ngModel.$valid).toggleClass("ng-dirty",ngModel.$dirty).toggleClass("ng-pristine",ngModel.$pristine);return value});element.on("change",function(e){if(avDropdown.options.query){$timeout(function(){if(avDropdown.isRemoteMultiple()){avDropdown.setRemoteViewValue(e)}else{avDropdown.setViewValue(e)}},false,0)}$log.info(e)});element.on("select2-focus",function(){if(attrs.ngFocus){scope.$eval(scope.$eval(attrs.ngFocus))}});element.on("select2-blur",function(){if(attrs.ngBlur){scope.$eval(scope.$eval(attrs.ngBlur))}});element.on("select2-open",function(){if(element.parents('[class*="has-"]').length){var classNames=$(this).parents('[class*="has-"]')[0].className.split(/\s+/);for(var i=0;i0){instance.startLoader()}}}})})(window);(function(root){"use strict";var availity=root.availity;availity.ui.constant("AV_TABS",{TEMPLATES:{TABS:"ui/tabs/tabs-tpl.html",TAB:"ui/tabs/tab-tpl.html"}});function TabsController($scope){var self=this;$scope.tabs=[];self.tabs=$scope.tabs;this.addTab=function(tab){self.tabs.push(tab);if(self.tabs.length===1){tab.active=true}else if(tab.active){self.selectTab(tab)}else{tab.active=false}};this.removeTab=function(tab){var index=self.tabs.indexOf(tab);if(tab.active&&self.tabs.length>1){var newActiveIndex=index===self.tabs.length-1?index-1:index+1;self.selectTab(self.tabs[newActiveIndex])}self.tabs.splice(index,1)};this.selectTab=function(selectedTab){angular.forEach(self.tabs,function(tab){if(tab.active&&tab!==selectedTab){tab.active=false;tab.onDeselect()}});selectedTab.active=true;selectedTab.onSelect()}}TabsController.$inject=["$scope"];availity.ui.controller("AvTabsController",TabsController);function TabsDirective(AV_TABS){return{restrict:"AE",templateUrl:AV_TABS.TEMPLATES.TABS,transclude:true,replace:true,controller:"AvTabsController",scope:true,link:function(scope,element,attrs){scope.justified=!!attrs.justified;scope.tabType=attrs.tabType;scope.vertical=!!attrs.vertical;if(angular.isUndefined(attrs.padContent)){scope.padContent=true}}}}TabsDirective.$inject=["AV_TABS"];availity.ui.directive("avTabs",TabsDirective);function TabDirective(AV_TABS){return{restrict:"AE",templateUrl:AV_TABS.TEMPLATES.TAB,replace:true,require:"^avTabs",transclude:true,scope:{heading:"@",template:"=",templateUrl:"=",onSelect:"&select",onDeselect:"&deselect"},controller:function(){},link:function(scope,element,attrs,tabsController,transclude){scope.transcludeFn=transclude;tabsController.addTab(scope);scope.$on("destroy",function(){tabsController.removeTab(scope)});scope.select=function(){if(!scope.disabled){tabsController.selectTab(scope)}};scope.$watch("active",function(active){if(active){tabsController.selectTab(scope)}});if(angular.isDefined(attrs.active)){scope.active=attrs.active;scope.$parent.$watch(attrs.active,function(active){if(active){tabsController.selectTab(scope)}})}if(angular.isDefined(attrs.disable)){scope.$parent.$watch(attrs.disable,function(disabled){scope.disabled=!!disabled})}}}}TabDirective.$inject=["AV_TABS"];availity.ui.directive("avTab",TabDirective);function TabPaneDirective(avTemplateCache,$compile){return{restrict:"AE",require:"^avTabs",link:function(scope,element,attrs){var tab=scope.$eval(attrs.avTabPane);if(angular.isDefined(tab.template)||angular.isDefined(tab.templateUrl)){avTemplateCache.get(tab).then(function(template){element.append($compile(template)(scope))})}else{tab.transcludeFn(tab.$parent,function(contents){angular.forEach(contents,function(node){element.append(node)})})}}}}TabPaneDirective.$inject=["avTemplateCache","$compile"];availity.ui.directive("avTabPane",TabPaneDirective)})(window);(function(root){"use strict";var availity=root.availity;availity.ui.constant("AV_SCROLL_PAGINATION",{TEMPLATE:"ui/scroll-pagination/scroll-pagination-tpl.html",DEFAULT_OPTIONS:{limit:50,offset:0,maxCached:100,loadMoreText:"Load more items",entryIdAttribute:"id",apiParams:{},beforePageLoad:undefined,afterPageLoad:undefined}});availity.ui.factory("avScrollPaginationService",function($log){function AvScrollPaginationService(){this.instances={}}var proto=AvScrollPaginationService.prototype;proto.registerInstance=function(instanceInterface,id){if(this.instances[id]){$log.warn("Found existing instance with id "+id)}this.instances[id]=instanceInterface};proto.unregisterInstance=function(id){delete this.instances[id]};proto.resetInstance=function(id){if(this.instances[id]){this.instances[id].reset();return true}return false};return new AvScrollPaginationService});availity.ui.controller("AvScrollPaginationController",function($scope,$element,$timeout,$log,AV_SCROLL_PAGINATION,blockUI,avScrollPaginationService){var self=this;this.buildOptions=function(){$scope._options={};_.extend($scope._options,AV_SCROLL_PAGINATION.DEFAULT_OPTIONS,$scope.options||{});$scope._options.lowOffset=$scope._options.offset;$scope._options.highOffset=$scope._options.offset};var originalEntries=angular.copy($scope.entries);this.buildOptions();this.updateButtonVisibilityFlags=function(data){$scope.showNext=$scope._options.highOffset+data.count0};this.loadEntries=function(prepend){var block=blockUI.instances.get("scroll-pagination-block-"+$scope.avScrollPagination);block.start();if(_.isFunction($scope._options.beforePageLoad)){$scope._options.beforePageLoad($scope._options)}var params={};_.extend(params,$scope._options.apiParams,{limit:$scope._options.limit,offset:$scope._options.offset});$scope.apiResource.query({params:params}).then(function(response){var responseData=self.getResponseData(response);if($scope._options.afterPageLoad){$scope._options.afterPageLoad(responseData)}if(responseData&&responseData[$scope._options.resourceId]){self.addEntries(responseData[$scope._options.resourceId],prepend)}self.updateButtonVisibilityFlags(responseData);block.stop()},function(){$log.error("API call failed");block.stop()})};this.getResponseData=function(data){if(data){if($scope._options.responseKey){var keys=$scope._options.responseKey.split(".");var nestedData=data;var noData=false;_.each(keys,function(key){if(!noData){nestedData=nestedData[key];if(!nestedData){noData=true}}});return noData?[]:nestedData}else{return data}}return[]};this.addEntries=function(entries,prepend){var oldEntries=angular.copy($scope.entries);if(prepend){$scope.entries.unshift.apply($scope.entries,entries)}else{$scope.entries.push.apply($scope.entries,entries)}if($scope.entries.length>$scope._options.maxCached){var diff=$scope.entries.length-$scope._options.maxCached;var trackedElementId;if(prepend){$scope.entries=$scope.entries.slice(0,$scope._options.maxCached);$scope._options.highOffset-=diff;trackedElementId=oldEntries[oldEntries.length-diff-1]?oldEntries[oldEntries.length-diff-1][$scope._options.entryIdAttribute]:undefined}else{$scope.entries=$scope.entries.slice(diff,$scope.entries.length);$scope._options.lowOffset+=diff;trackedElementId=oldEntries[diff]?oldEntries[diff][$scope._options.entryIdAttribute]:undefined}self.autoscroll(trackedElementId,prepend)}};this.autoscroll=function(trackedElementId,prepend){if(trackedElementId){var trackedElement=$element.find("#"+trackedElementId);var trackedElementTop=trackedElement.offset().top;$timeout(function(){var newScrollTop=$element.scrollTop()+trackedElement.offset().top-trackedElementTop;$element.animate({scrollTop:newScrollTop},0)},0,false)}else{$timeout(function(){if(prepend){$element.animate({scrollTop:$element.prop("scrollHeight")},0)}else{$element.animate({scrollTop:0},0)}},0,false)}};this.loadPrev=function(){$scope._options.lowOffset-=$scope._options.limit;$scope._options.offset=$scope._options.lowOffset;self.loadEntries(true)};this.loadNext=function(){$scope._options.highOffset+=$scope._options.limit;$scope._options.offset=$scope._options.highOffset;self.loadEntries()};avScrollPaginationService.registerInstance({reset:function(){$element.animate({scrollTop:0},0);$scope.entries=angular.copy(originalEntries);self.buildOptions();self.loadEntries()}},$scope.avScrollPagination);$scope.$on("$destroy",function(){avScrollPaginationService.unregisterInstance($scope.avScrollPagination)});$scope.loadPrev=self.loadPrev;$scope.loadNext=self.loadNext;this.loadEntries()});availity.ui.directive("avScrollPagination",function($log,AV_SCROLL_PAGINATION){return{restrict:"A",controller:"AvScrollPaginationController",transclude:true,templateUrl:AV_SCROLL_PAGINATION.TEMPLATE,scope:{apiResource:"=",entries:"=",options:"=",avScrollPagination:"@"},link:function($scope){if(!$scope.avScrollPagination){$log.error("Directive must include an id")}}}})})(window); +(function(root){"use strict";var availity=root.availity||{};availity.MODULE_UI="availity.ui";availity.ui=angular.module(availity.MODULE_UI,["ng","ngSanitize"]);availity.ui.constant("AV_UI",{NG_OPTIONS:/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/});if(typeof module!=="undefined"&&module.exports){module.exports=availity}})(window);(function(root){"use strict";var availity=root.availity;availity.ui.factory("avTemplateCache",function($q,$templateCache,$http){return{get:function(options){var valid=!options.template||!options.templateUrl;if(!valid){throw new Error("Either options.template or options.templateUrl must be defined for avTemplateCache")}return options.template?$q.when(options.template):$http.get(options.templateUrl,{cache:$templateCache}).then(function(result){return result.data})}}})})(window);(function(root){"use strict";var availity=root.availity;availity.ui.constant("AV_MODAL",{OPTIONS:{scope:null,templateUrl:null,template:null,id:null,container:null,keyboard:true,backdrop:true,show:false,remote:false},EVENTS:{SHOW:"show.av.modal",SHOWN:"shown.av.modal",HIDE:"hide.av.modal",HIDDEN:"hidden.av.modal"},NAMESPACE:{MODAL:"bs.modal"},BS_EVENTS:{SHOW:"show.bs.modal",SHOWN:"shown.bs.modal",HIDE:"hide.bs.modal",HIDDEN:"hidden.bs.modal"},TEMPLATES:{MODAL:"ui/modal/modal-tpl.html"}});availity.ui.factory("avModalManager",function(){var AvModalManager=function(){this.instances=[]};var proto=AvModalManager.prototype;proto.add=function(id){this.instances.push(id)};proto.remove=function(id){this.instances=_.without(this.instances,id)};proto.closeAll=function(){_.forEach(this.instances,function(id){var $el=$("#"+id);if(!$el){return}var bsModal=$el.data("bs.modal");if(bsModal){bsModal.removeBackdrop();bsModal.$body.removeClass("modal-open");bsModal.resetAdjustments();bsModal.resetScrollbar()}var avModal=$el.data("AvModal");if(avModal){avModal.destroy()}})};return new AvModalManager});var ModalFactory=function($rootScope,$timeout,$compile,AV_MODAL,avTemplateCache,$q,avModalManager){var Modal=function(options){var self=this;this.templateDefer=$q.defer();this.templatePromise=this.templateDefer.promise;this.options=angular.extend({},AV_MODAL.OPTIONS,{scope:$rootScope.$new()},options);avTemplateCache.get(options).then(function(template){self.options.template=template;self._build()})};Modal.create=function(options){return new Modal(options)};var proto=Modal.prototype;proto._build=function(){var self=this;var scope=this.options.scope;this.$element=angular.element(this.options.template);this._createId();this._scope();$compile(this.$element)(scope);$timeout(function(){self._init()},0,true);this.options.container?this.$element.appendTo(this.options.container):this.$element.appendTo("body")};proto._init=function(){this.$element.data("AvModal",this);this.templateDefer.resolve(true);this.$element.modal({backdrop:this.options.backdrop,keyboard:this.options.keyboard,show:this.options.show,remote:this.options.remote});this._listeners()};proto._scope=function(){var self=this;var scope=this.options.scope;scope.modalShow=function(){return self.show()};scope.modalToggle=function(){return self.toggle()};scope.modalHide=function(){return self.hide()}};proto._listeners=function(){var self=this;var scope=this.options.scope;var $element=this.$element;this.animationShowDefer=$q.defer();this.animationHideDefer=$q.defer();$element.on(AV_MODAL.BS_EVENTS.SHOW,function(event){scope.$emit(AV_MODAL.EVENTS.SHOW,event,self)});$element.on(AV_MODAL.BS_EVENTS.SHOWN,function(event){if(angular.isFunction(self.options.onShown)){self.options.onShown()}self.animationShowDefer.resolve(true);scope.$emit(AV_MODAL.EVENTS.SHOWN,event,self)});$element.on(AV_MODAL.BS_EVENTS.HIDE,function(event){scope.$emit(AV_MODAL.EVENTS.HIDE,event,self)});$element.on(AV_MODAL.BS_EVENTS.HIDDEN,function(event){if(angular.isFunction(self.options.onHidden)){self.options.onHidden.call(this)}self.animationHideDefer.resolve(true);scope.$emit(AV_MODAL.EVENTS.HIDDEN,event,self);scope.$evalAsync(function(){self.destroy()})});scope.$on("$destroy",function(){avModalManager.remove(self._id);self.destroy()})};proto.show=function(){var self=this;this.animationShowDefer=$q.defer();this.templatePromise.then(function(){self.isShown()?self.animationShowDefer.resolve(true):self.$element.modal("show")});return this.animationShowDefer.promise};proto.hide=function(){var self=this;this.animationHideDefer=$q.defer();this.templatePromise.then(function(){!self.isShown()?self.animationHideDefer.resolve(true):self.$element.modal("hide")});return this.animationHideDefer.promise};proto.isShown=function(){return this.$element.data(AV_MODAL.NAMESPACE.MODAL).isShown},proto.toggle=function(){var self=this;return this.templatePromise.then(function(){return self.isShown()?self.hide():self.show()})};proto.destroy=function(){var self=this;return this.templatePromise.then(function(){self.$element.data("AvModal",null);self.$element.remove()})};proto._createId=function(){var id=this.$element.attr("id");if(!id){id=this.options.id?this.options.id:availity.uuid("av-modal-id");this.$element.attr("id",id)}this._id=id;avModalManager.add(id)};return Modal};availity.ui.factory("AvModal",ModalFactory);availity.ui.directive("avModal",function(AV_MODAL){return{restrict:"A",replace:true,transclude:true,scope:{size:"@"},templateUrl:AV_MODAL.TEMPLATES.MODAL}})})(window);(function(root){"use strict";var availity=root.availity;availity.ui.controller("avValFormController",function(){this.ngForm=null;this.rulesKey=null;this.avValOn=null;this.avValDebounce=null;this.avValInvalid=false;this.violations={};this.init=function(form){this.ngForm=form};this.record=function(id,count){this.violations[id]=count;var violocationCount=_.reduce(this.violations,function(sum,num){return sum+num},0);this.ngForm.$setValidity("av",violocationCount===0)};this.unrecord=function(id){if(id&&this.violations[id]){delete this.violations[id]}};this.reset=function(){this.ngForm.$setPristine();this.ngForm.$submitted=false};this.$setSubmitted=function(){this.ngForm.$submitted=true};this.setRulesKey=function(key){this.rulesKey=key}});availity.ui.directive("avValForm",function($log,$timeout,$parse,AV_VAL,avValAdapter,$rootScope){return{restrict:"A",priority:10,require:["form","avValForm"],controller:"avValFormController",compile:function(){return{pre:function(scope,iEl,iAttrs,controllers){var ruleFn=$parse(iAttrs.avValForm);var rulesKey=ruleFn(scope);rulesKey=rulesKey||iAttrs.avValForm;if(!rulesKey){$log.error("avValForm requires a rules key in order to run the proper validation rules.");return}scope.$watch(ruleFn,function(_rulesKey,_oldRulesKey){if(_rulesKey){avForm.setRulesKey(_rulesKey);if(_rulesKey!==_oldRulesKey){$timeout(function(){$log.info("avValForm revalidate");$rootScope.$broadcast(AV_VAL.EVENTS.REVALIDATE)})}}});var ngForm=controllers[0];var avForm=controllers[1];avForm.avValOn=iAttrs.avValOn||null;avForm.avValDebounce=iAttrs.avValDebounce||null;avForm.avValInvalid=iAttrs.avValInvalid||false;avForm.init(ngForm);avForm.setRulesKey(rulesKey)},post:function(scope,iEl,iAttrs,controllers){iEl.attr("novalidate","novalidate");var fn;if(iAttrs.ngSubmit){iEl.off("submit");fn=$parse(iAttrs.ngSubmit,true)}else if(iAttrs.ngClick){iEl.off("click");fn=$parse(iAttrs.ngClick,true)}var ngForm=controllers[0];var avForm=controllers[1];scope.$on(AV_VAL.EVENTS.RESET,function(){avForm.reset()});iEl.bind("submit",function(event){scope.$broadcast(AV_VAL.EVENTS.SUBMITTED);avForm.$setSubmitted();if(ngForm.$invalid){scope.$broadcast(AV_VAL.EVENTS.FAILED);$log.info("avValForm invalid. preventing default submit action");event.preventDefault();event.stopImmediatePropagation();scope.$broadcast(event);avValAdapter.scroll(iEl);return}ngForm.$setPristine();if(!fn){return}var callback=function(){fn(scope,{$event:event})};scope.$apply(callback)})}}}}})})(window);(function(root){"use strict";var availity=root.availity;availity.ui.controller("AvValFieldController",function($element,avValAdapter,$attrs,avVal,$log,$timeout,$scope,$sniffer){this.ngModel=null;this.rule=null;this.avValForm=null;this.avValInvalid=false;var self=this;var placeholder=$element[0].placeholder;var noEvent={};this.createId=function(){this.ngModel.avId=availity.uuid("avVal")};this.setNgModel=function(ngModel){this.ngModel=ngModel};this.setRule=function(rule){this.rule=rule};this.avValForm=function(avValForm){this.avValForm=avValForm};this.updateModel=function(results){var self=this;var validationKeys=[];this.ngModel.avResults=results;angular.forEach(results.violations,function(result){var key="av-"+result.contraintName;validationKeys.push(key);self.ngModel.$setValidity(key,result.valid)});this.ngModel.$setValidity("av",this.ngModel.avResults.isValid);this.ngModel.avViolations=this.ngModel.avResults.violations;this.avValForm.record(this.ngModel.avId,this.ngModel.avResults.violations.length);angular.forEach(this.ngModel.$error,function(value,key){if(_.indexOf(validationKeys,key)===-1&&key.lastIndexOf("av-",0)===0){self.ngModel.$setValidity(key,true)}})};this.updateView=function(){if(this.ngModel.$dirty||$scope.avValShow){avValAdapter.element($element,this.ngModel,this.ngModel.avResults.isValid);avValAdapter.message($element,this.ngModel)}};this.validate=function(value){$log.info("validating value ["+value+"]");var rulesKey=self.avValForm.rulesKey;var results=avVal.validate(rulesKey,$element,value,self.rule);self.updateModel.call(self,results);self.updateView.call(self);return results};this.validateModel=function(value){self.validate(value,true);return value};this.validateView=function(value){var results=self.validate(value);if(self.avValForm.avValInvalid||self.avValInvalid){return value}return results.isValid?value:undefined};this.onDebounce=function(){var value=$element.val().trim();if(this.isCheckbox()){this.ngModel.$setViewValue($element[0].checked)}else if(this.isRadio()){this.ngModel.$setViewValue($attrs.value)}else{this.ngModel.$setViewValue(value)}};this.isRadio=function(){return $element.is("input")&&$attrs.type==="radio"};this.isCheckbox=function(){return $element.is("input")&&$attrs.type==="checkbox"};this.reset=function(){var violations=this.ngModel.avResults.violations;violations.splice(0,violations.length);avValAdapter.message($element,this.ngModel);avValAdapter.reset($element)};this.event=function(event,avValDebounce){var self=this;$element.unbind("input");var debounce;$element.on(event,function(){if($sniffer.msie<=11&&(event||noEvent).type==="input"&&$element[0].placeholder!==placeholder){placeholder=$element[0].placeholder;return}$timeout.cancel(debounce);debounce=$timeout(function(){$scope.$apply(function(){self.onDebounce()})},avValDebounce)})}});availity.ui.directive("avValField",function($log,$timeout,avVal,avValAdapter,AV_VAL){return{restrict:"A",controller:"AvValFieldController",require:["^avValForm","ngModel","avValField"],scope:{avValDebounce:"@?",avValOn:"@?",avValShow:"=?"},link:function(scope,element,attrs,controllers){var rule=attrs.avValField;var avValForm=controllers[0];var ngModel=controllers[1];var avValField=controllers[2];var avValOn=scope.avValOn||avValForm.avValOn||"input";if(!ngModel&&!rule){$log.error("avValField requires ngModel and a validation rule to run.");return}avValField.avValInvalid=attrs.avValInvalid||false;avValField.setNgModel(ngModel);avValField.avValForm(avValForm);avValField.setRule(rule);avValField.createId();var avValDebounce=parseInt(scope.avValDebounce||(avValForm.avValDebounce||AV_VAL.DEBOUNCE),10);avValDebounce=_.isNumber(avValDebounce)?avValDebounce:AV_VAL.DEBOUNCE;var debounceAllowed=!avValField.isRadio()&&!avValField.isCheckbox()&&avValOn!=="blur";if(!debounceAllowed){avValDebounce=0}avValField.event(avValOn,avValDebounce);ngModel.$parsers.push(avValField.validateView);ngModel.$formatters.unshift(avValField.validateModel);scope.$on(AV_VAL.EVENTS.REVALIDATE,function(){avValField.validate(ngModel.$viewValue)});scope.$on(AV_VAL.EVENTS.SUBMITTED,function(){ngModel.$dirty=true;avValField.validate(ngModel.$viewValue)});scope.$on(AV_VAL.EVENTS.RESET,function(){avValField.reset()});scope.$on("$destroy",function(){avValForm.unrecord(ngModel.avId)})}}})})(window);(function(root){"use strict";var availity=root.availity;availity.ui.provider("avPopoverConfig",function(){var config={showOnLoadHideDelay:1e4};this.set=function(options){angular.extend(config,options)};this.$get=function(){return angular.copy(config)}});availity.ui.constant("AV_POPOVER",{NAME:"bs.popover"});availity.ui.controller("AvPopoverController",function($element,$scope,AV_POPOVER,$timeout,avPopoverConfig){this.options=angular.extend({},avPopoverConfig);this.listeners=function(){var self=this;angular.forEach(["show","shown","hide","hidden"],function(name){$element.on(name+".bs.popover",function(ev){$scope.$emit("av:popover:"+name,ev)})});$scope.$on("destroy",function(){self.destroy()})};this.plugin=function(){return $element.data(AV_POPOVER.NAME)};this.show=function(){$element.popover("show")};this.hide=function(){$element.popover("hide")};this.toggle=function(){$element.popover("toggle")};this.destroy=function(){$element.popover("destroy")};this.init=function(){this.listeners();if($scope.showOnLoad){this.show();if($scope.delay&&$scope.delay.hide){$timeout(this.hide,$scope.delay.hide,false);return}$timeout(this.hide,this.options.showOnLoadHideDelay,false)}}});availity.ui.directive("avPopover",function(){return{restrict:"A",controller:"AvPopoverController",scope:{showOnLoad:"=",delay:"="},link:function(scope,element,attrs,avPopover){var options={};scope.$evalAsync(function(){element.popover(angular.extend({},options,{html:true}));avPopover.init()})}}})})(window);(function(root){"use strict";var availity=root.availity;availity.ui.controller("avValContainerController",function($scope,$timeout){this.message=function(ngModel){var message=null;if(ngModel.avResults.violations.length&&ngModel.avResults.violations[0].message){message=ngModel.avResults.violations[0].message}else{message=null}$timeout(function(){$scope.messages.message=message})}});availity.ui.directive("avValContainer",function(){return{restrict:"A",controller:"avValContainerController",template:'

',replace:true,scope:{},link:function(scope){scope.messages=_.extend({},scope.messages,{message:null,id:null})}}})})(window);(function(root){"use strict";var availity=root.availity;availity.ui.constant("AV_BOOTSTRAP_ADAPTER",{CLASSES:{SUCCESS:"has-success",WARNING:"has-warning",ERROR:"has-error",FEEDBACK:"has-feedback",HELP:"help-block",FORM_GROUP:".form-group:first",NAVBAR:"navbar-fixed-top"},SELECTORS:{CONTAINER:"container-id",DATA_CONTAINER:"data-container-id"},CONTROLLER:"$avValContainerController"});availity.ui.factory("avValBootstrapAdapter",function(AV_BOOTSTRAP_ADAPTER,$timeout,$log){return{element:function(element,ngModel){if(ngModel.$valid){element.parents(AV_BOOTSTRAP_ADAPTER.CLASSES.FORM_GROUP).removeClass(AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR)}else{element.parents(AV_BOOTSTRAP_ADAPTER.CLASSES.FORM_GROUP).addClass(AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR)}},reset:function(element){element.parents(AV_BOOTSTRAP_ADAPTER.CLASSES.FORM_GROUP).removeClass(AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR)},message:function(element,ngModel){var selector=[".",AV_BOOTSTRAP_ADAPTER.CLASSES.HELP].join("");var $el=$(element);var target=$el.attr(AV_BOOTSTRAP_ADAPTER.SELECTORS.CONTAINER);target=target||$el.attr(AV_BOOTSTRAP_ADAPTER.SELECTORS.DATA_CONTAINER);target=target?$("#"+target):$el.siblings(selector);if(target.length===0){$log.warn("avValBootstrapAdapter could not find validation container for {0}",[element]);return}var el=target[0];$el=angular.element(el);var avValModel=$el.data(AV_BOOTSTRAP_ADAPTER.CONTROLLER);if(avValModel){avValModel.message(ngModel)}},scroll:function(form){var navbarSelector=[".",AV_BOOTSTRAP_ADAPTER.CLASSES.NAVBAR].join("");var offset=0;$(navbarSelector).each(function(){offset+=$(this).outerHeight()});var selector=[".",AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR,":first"].join("");var $target=$(form).find(selector);$timeout(function(){$("body, html").animate({scrollTop:$target.offset().top-offset},"fast")},0,false)}}})})(window);(function(root){"use strict";var availity=root.availity;availity.ui.constant("AV_VAL_ADAPTER",{DEFAULT:"avValBootstrapAdapter"});availity.ui.provider("avValAdapter",function(){var that=this;this.setAdapter=function(adapter){this.adapter=adapter};this.$get=function(AV_VAL_ADAPTER,$injector){var Adapter=function(){var adapterName=that.adapter||AV_VAL_ADAPTER.DEFAULT;this.adapter=$injector.get(adapterName)};var proto=Adapter.prototype;proto.element=function(element,ngModel){this.adapter.element(element,ngModel)};proto.reset=function(element){this.adapter.reset(element)};proto.message=function(element,ngModel){this.adapter.message(element,ngModel)},proto.scroll=function(form){this.adapter.scroll(form)};return new Adapter}})})(window);(function(root){"use strict";var availity=root.availity;availity.ui.provider("avDropdownConfig",function(){var config={closeOnResize:true,dropdownAutoWidth:true,minimumResultsForSearch:5};this.set=function(options){angular.extend(config,options)};this.$get=function(){return angular.copy(config)}});availity.ui.constant("AV_DROPDOWN",{OPTIONS:["width","minimumInputLength","maximumInputLength","minimumResultsForSearch","maximumSelectionSize","placeholderOption","separator","allowClear","multiple","closeOnSelect","openOnEnter","id","matcher","sortResults","formatSelection","formatResult","formatResultCssClass","formatNoMatches","formatSearching","formatAjaxError","formatInputTooShort","formatInputTooLong","formatSelectionTooBig","formatLoadMore","createSearchChoice","createSearchChoicePosition","initSelection","tokenizer","tokenSeparators","query","ajax","data","tags","containerCss","containerCssClass","dropdownCss","dropdownCssClass","dropdownAutoWidth","adaptContainerCssClass","adaptDropdownCssClass","escapeMarkup","selectOnBlur","loadMorePadding","nextSearchTerm","correlationId"]});availity.ui.controller("AvDropdownController",function($element,$attrs,AV_UI,AV_DROPDOWN,avDropdownConfig,$log,$scope,$timeout,$parse){var self=this;this.options={};this.match=null;this.ngModel=null;this.init=function(){self.options=angular.extend({},avDropdownConfig);_.forEach($attrs,function(value,key){if(_.contains(AV_DROPDOWN.OPTIONS,key.replace("data-",""))){self.options[key]=$scope.$eval(value)}});if(this.isRemoteMultiple()){self.options.multiple=angular.isDefined($attrs.multiple)}self.multiple=angular.isDefined($attrs.multiple);if(self.options.query){self.queryFn=self.options.query;self.options.query=self.query;self.options.id=self.getId}};this.isRemoteMultiple=function(){if(angular.isDefined($attrs.multiple)&&$element.get(0).tagName.toLowerCase()==="input"){return true}return false};this.setRemoteViewValue=function(e){var values=this.ngModel.$viewValue;if(!angular.isArray(values)||!angular.isObject(values)){values=[]}if(e.added){values.push(e.added)}else{var index=_.findIndex(values,function(value){return _.matches(e.removed)(value)});values.splice(index,1)}this.ngModel.$setViewValue(values)};this.setViewValue=function(e){this.ngModel.$setViewValue(e.added)};this.setNgModel=function(ngModel){this.ngModel=ngModel};this.getSelected=function(model){if(self.options.query){return 0}var items=this.collection($scope);var index=_.findIndex(items,function(item){if(!self.valueFn){return angular.equals(item,model)}else{var locals={};locals[self.valueName]=item;var value=self.valueFn($scope,locals);return angular.equals(value,model)}});return index};this.getId=function(result){return result.id};this.query=function(options){self.queryFn(options).then(function(response){options.callback({more:response.more,results:response.results})})};this.setValue=function(){var viewValue=self.ngModel.$viewValue;var selected=null;if(viewValue){selected=this.getSelected(viewValue)}$timeout(function(){$element.select2("val",selected===null||selected==="undefined"?"":selected)})};this.getMultiSelected=function(viewValue){var indices=[];if($element.get(0).tagName.toLowerCase()!=="input"){var options=this.collection($scope);_.each(viewValue,function(savedObject){var index=_.findIndex(options,function(value){var temp=angular.copy(savedObject);return _.matches(temp)(value)});indices.push(index)})}else{var inputViewValues=this.ngModel.$modelValue;_.each(inputViewValues,function(savedObject){if(_.isUndefined(savedObject.id)){if(savedObject.id||savedObject[self.options.correlationId]){savedObject.id=savedObject[self.options.correlationId]}else{throw new Error("dropdown list must have a id or a alternative value to use as a id")}}})}if(indices.length>0){viewValue=indices}return viewValue};this.setValues=function(){var viewValue=self.ngModel.$viewValue;if(!angular.isArray(viewValue)){viewValue=[]}if(!_.isEmpty(viewValue)&&_.isObject(viewValue[0])){viewValue=this.getMultiSelected(viewValue)}$timeout(function(){$element.select2("val",viewValue)})};this.ngOptions=function(){this.match=$attrs.ngOptions.match(AV_UI.NG_OPTIONS);if(!this.match){throw new Error("Invalid ngOptions for avDropdown")}this.displayFn=$parse(this.match[2]||this.match[1]);this.collection=$parse(this.match[7]);this.valueName=this.match[4]||this.match[6];this.valueFn=$parse(this.match[2]?this.match[1]:this.valueName);this.keyName=this.match[5];$scope.$watchCollection(this.collection,function(newVal,oldVal){if(angular.equals(newVal,oldVal)){return}self.setValue()},true)}});availity.ui.directive("avDropdown",function($timeout,$log,$window){return{restrict:"A",require:["ngModel","avDropdown"],controller:"AvDropdownController",link:function(scope,element,attrs,controllers){var ngModel=controllers[0];var avDropdown=controllers[1];avDropdown.setNgModel(ngModel);avDropdown.init();if(attrs.ngOptions){avDropdown.ngOptions()}ngModel.$parsers.push(function(value){var parent=element.prev();parent.toggleClass("ng-invalid",!ngModel.$valid).toggleClass("ng-valid",ngModel.$valid).toggleClass("ng-invalid-required",!ngModel.$valid).toggleClass("ng-valid-required",ngModel.$valid).toggleClass("ng-dirty",ngModel.$dirty).toggleClass("ng-pristine",ngModel.$pristine);return value});element.on("change",function(e){if(avDropdown.options.query){$timeout(function(){if(avDropdown.isRemoteMultiple()){avDropdown.setRemoteViewValue(e)}else{avDropdown.setViewValue(e)}},false,0)}$log.info(e)});element.on("select2-focus",function(){if(attrs.ngFocus){scope.$eval(scope.$eval(attrs.ngFocus))}});element.on("select2-blur",function(){if(attrs.ngBlur){scope.$eval(scope.$eval(attrs.ngBlur))}});element.on("select2-open",function(){if(element.parents('[class*="has-"]').length){var classNames=$(this).parents('[class*="has-"]')[0].className.split(/\s+/);for(var i=0;i0){instance.startLoader()}}}})})(window);(function(root){"use strict";var availity=root.availity;availity.ui.constant("AV_TABS",{TEMPLATES:{TABS:"ui/tabs/tabs-tpl.html",TAB:"ui/tabs/tab-tpl.html"}});function TabsController($scope){var self=this;$scope.tabs=[];self.tabs=$scope.tabs;this.addTab=function(tab){self.tabs.push(tab);if(self.tabs.length===1){tab.active=true}else if(tab.active){self.selectTab(tab)}else{tab.active=false}};this.removeTab=function(tab){var index=self.tabs.indexOf(tab);if(tab.active&&self.tabs.length>1){var newActiveIndex=index===self.tabs.length-1?index-1:index+1;self.selectTab(self.tabs[newActiveIndex])}self.tabs.splice(index,1)};this.selectTab=function(selectedTab){angular.forEach(self.tabs,function(tab){if(tab.active&&tab!==selectedTab){tab.active=false;tab.onDeselect()}});selectedTab.active=true;selectedTab.onSelect()}}TabsController.$inject=["$scope"];availity.ui.controller("AvTabsController",TabsController);function TabsDirective(AV_TABS){return{restrict:"AE",templateUrl:AV_TABS.TEMPLATES.TABS,transclude:true,replace:true,controller:"AvTabsController",scope:true,link:function(scope,element,attrs){scope.justified=!!attrs.justified;scope.tabType=attrs.tabType;scope.vertical=!!attrs.vertical;if(angular.isUndefined(attrs.padContent)){scope.padContent=true}}}}TabsDirective.$inject=["AV_TABS"];availity.ui.directive("avTabs",TabsDirective);function TabDirective(AV_TABS){return{restrict:"AE",templateUrl:AV_TABS.TEMPLATES.TAB,replace:true,require:"^avTabs",transclude:true,scope:{heading:"@",template:"=",templateUrl:"=",onSelect:"&select",onDeselect:"&deselect"},controller:function(){},link:function(scope,element,attrs,tabsController,transclude){scope.transcludeFn=transclude;tabsController.addTab(scope);scope.$on("destroy",function(){tabsController.removeTab(scope)});scope.select=function(){if(!scope.disabled){tabsController.selectTab(scope)}};scope.$watch("active",function(active){if(active){tabsController.selectTab(scope)}});if(angular.isDefined(attrs.active)){scope.active=attrs.active;scope.$parent.$watch(attrs.active,function(active){if(active){tabsController.selectTab(scope)}})}if(angular.isDefined(attrs.disable)){scope.$parent.$watch(attrs.disable,function(disabled){scope.disabled=!!disabled})}}}}TabDirective.$inject=["AV_TABS"];availity.ui.directive("avTab",TabDirective);function TabPaneDirective(avTemplateCache,$compile){return{restrict:"AE",require:"^avTabs",link:function(scope,element,attrs){var tab=scope.$eval(attrs.avTabPane);if(angular.isDefined(tab.template)||angular.isDefined(tab.templateUrl)){avTemplateCache.get(tab).then(function(template){element.append($compile(template)(scope))})}else{tab.transcludeFn(tab.$parent,function(contents){angular.forEach(contents,function(node){element.append(node)})})}}}}TabPaneDirective.$inject=["avTemplateCache","$compile"];availity.ui.directive("avTabPane",TabPaneDirective)})(window);(function(root){"use strict";var availity=root.availity;availity.ui.constant("AV_SCROLL_PAGINATION",{TEMPLATE:"ui/scroll-pagination/scroll-pagination-tpl.html",DEFAULT_OPTIONS:{limit:50,offset:0,maxCached:100,loadMoreText:"Load more items",entryIdAttribute:"id",apiParams:{},beforePageLoad:undefined,afterPageLoad:undefined}});availity.ui.factory("avScrollPaginationService",function($log){function AvScrollPaginationService(){this.instances={}}var proto=AvScrollPaginationService.prototype;proto.registerInstance=function(instanceInterface,id){if(this.instances[id]){$log.warn("Found existing instance with id "+id)}this.instances[id]=instanceInterface};proto.unregisterInstance=function(id){delete this.instances[id]};proto.resetInstance=function(id){if(this.instances[id]){this.instances[id].reset();return true}return false};return new AvScrollPaginationService});availity.ui.controller("AvScrollPaginationController",function($scope,$element,$timeout,$log,AV_SCROLL_PAGINATION,blockUI,avScrollPaginationService){var self=this;this.buildOptions=function(){$scope._options={};_.extend($scope._options,AV_SCROLL_PAGINATION.DEFAULT_OPTIONS,$scope.options||{});$scope._options.lowOffset=$scope._options.offset;$scope._options.highOffset=$scope._options.offset};var originalEntries=angular.copy($scope.entries);this.buildOptions();this.updateButtonVisibilityFlags=function(data){$scope.showNext=$scope._options.highOffset+data.count0};this.loadEntries=function(prepend){var block=blockUI.instances.get("scroll-pagination-block-"+$scope.avScrollPagination);block.start();if(_.isFunction($scope._options.beforePageLoad)){$scope._options.beforePageLoad($scope._options)}var params={};_.extend(params,$scope._options.apiParams,{limit:$scope._options.limit,offset:$scope._options.offset});$scope.apiResource.query({params:params}).then(function(response){var responseData=self.getResponseData(response);if($scope._options.afterPageLoad){$scope._options.afterPageLoad(responseData)}if(responseData&&responseData[$scope._options.resourceId]){self.addEntries(responseData[$scope._options.resourceId],prepend)}self.updateButtonVisibilityFlags(responseData);block.stop()},function(){$log.error("API call failed");block.stop()})};this.getResponseData=function(data){if(data){if($scope._options.responseKey){var keys=$scope._options.responseKey.split(".");var nestedData=data;var noData=false;_.each(keys,function(key){if(!noData){nestedData=nestedData[key];if(!nestedData){noData=true}}});return noData?[]:nestedData}else{return data}}return[]};this.addEntries=function(entries,prepend){var oldEntries=angular.copy($scope.entries);if(prepend){$scope.entries.unshift.apply($scope.entries,entries)}else{$scope.entries.push.apply($scope.entries,entries)}if($scope.entries.length>$scope._options.maxCached){var diff=$scope.entries.length-$scope._options.maxCached;var trackedElementId;if(prepend){$scope.entries=$scope.entries.slice(0,$scope._options.maxCached);$scope._options.highOffset-=diff;trackedElementId=oldEntries[oldEntries.length-diff-1]?oldEntries[oldEntries.length-diff-1][$scope._options.entryIdAttribute]:undefined}else{$scope.entries=$scope.entries.slice(diff,$scope.entries.length);$scope._options.lowOffset+=diff;trackedElementId=oldEntries[diff]?oldEntries[diff][$scope._options.entryIdAttribute]:undefined}self.autoscroll(trackedElementId,prepend)}};this.autoscroll=function(trackedElementId,prepend){if(trackedElementId){var trackedElement=$element.find("#"+trackedElementId);var trackedElementTop=trackedElement.offset().top;$timeout(function(){var newScrollTop=$element.scrollTop()+trackedElement.offset().top-trackedElementTop;$element.animate({scrollTop:newScrollTop},0)},0,false)}else{$timeout(function(){if(prepend){$element.animate({scrollTop:$element.prop("scrollHeight")},0)}else{$element.animate({scrollTop:0},0)}},0,false)}};this.loadPrev=function(){$scope._options.lowOffset-=$scope._options.limit;$scope._options.offset=$scope._options.lowOffset;self.loadEntries(true)};this.loadNext=function(){$scope._options.highOffset+=$scope._options.limit;$scope._options.offset=$scope._options.highOffset;self.loadEntries()};avScrollPaginationService.registerInstance({reset:function(){$element.animate({scrollTop:0},0);$scope.entries=angular.copy(originalEntries);self.buildOptions();self.loadEntries()}},$scope.avScrollPagination);$scope.$on("$destroy",function(){avScrollPaginationService.unregisterInstance($scope.avScrollPagination)});$scope.loadPrev=self.loadPrev;$scope.loadNext=self.loadNext;this.loadEntries()});availity.ui.directive("avScrollPagination",function($log,AV_SCROLL_PAGINATION){return{restrict:"A",controller:"AvScrollPaginationController",transclude:true,templateUrl:AV_SCROLL_PAGINATION.TEMPLATE,scope:{apiResource:"=",entries:"=",options:"=",avScrollPagination:"@"},link:function($scope){if(!$scope.avScrollPagination){$log.error("Directive must include an id")}}}})})(window); //# sourceMappingURL=maps/availity-angular-ui.min.js.map diff --git a/dist/availity-angular.js b/dist/availity-angular.js index 68cafdcd..efec85ef 100644 --- a/dist/availity-angular.js +++ b/dist/availity-angular.js @@ -1,5 +1,5 @@ /** - * availity-angular v1.8.0 -- January-15 + * availity-angular v1.8.1 -- January-20 * Copyright 2016 Availity, LLC */ @@ -11,7 +11,7 @@ 'use strict'; var availity = root.availity || {}; - availity.VERSION = 'v1.8.0'; + availity.VERSION = 'v1.8.1'; availity.MODULE = 'availity'; availity.core = angular.module(availity.MODULE, ['ng']); diff --git a/dist/availity-angular.min.js b/dist/availity-angular.min.js index e85cc17d..e75d9745 100644 --- a/dist/availity-angular.min.js +++ b/dist/availity-angular.min.js @@ -1,8 +1,8 @@ /** - * availity-angular v1.8.0 -- January-15 + * availity-angular v1.8.1 -- January-20 * Copyright 2016 Availity, LLC */ -(function(root){"use strict";var availity=root.availity||{};availity.VERSION="v1.8.0";availity.MODULE="availity";availity.core=angular.module(availity.MODULE,["ng"]);var originalModule=angular.module;var modules=[];angular.module=function(name,deps){if(deps&&_.indexOf(modules,name)!==-1&&!window.__karma__){throw new Error("redefining module: "+name)}modules.push(name);return originalModule(name,deps)};root.availity=availity;if(typeof module!=="undefined"&&module.exports){module.exports=availity}})(window);(function(root){"use strict";var availity=root.availity;availity._stringify=function(object){if(object===null){return""}return""+object};availity.isBlank=function(str){return/^\s*$/.test(availity._stringify(str))}})(window);(function(root){"use strict";var availity=root.availity;var uid=["0","0","0"];availity.uuid=function(prefix){var index=uid.length;var digit;while(index){index--;digit=uid[index].charCodeAt(0);if(digit===57){uid[index]="A";return prefix?prefix+uid.join(""):uid.join("")}if(digit===90){uid[index]="0"}else{uid[index]=String.fromCharCode(digit+1);return prefix?prefix+uid.join(""):uid.join("")}}uid.unshift("0");return prefix?prefix+uid.join(""):uid.join("")}})(window);(function(root){"use strict";var availity=root.availity;availity.REGEX_API_URL=/^.*?api.availity.com(.*)$/;availity.getRelativeUrl=function(url){var result=url.match(availity.REGEX_API_URL);if(result&&result[1]){return"/api"+result[1]}return url}})(window);(function(root){"use strict";var availity=root.availity;availity.print=function(){if(document.queryCommandSupported("print")){document.execCommand("print",false,null)}else{window.focus();window.print()}}})(window);(function(root){"use strict";var availity=root.availity;availity.core.constant("AV_THROTTLE",{OPTIONS:{wait:1e3,update:false,trailing:true,leading:false}});availity.core.factory("avThrottle",function(AV_THROTTLE,$timeout){return function(fn,wait,options){options=_.merge({},AV_THROTTLE.OPTIONS,options);wait=wait?wait:AV_THROTTLE.THRESHOLD;var update=angular.isDefined(options.update)?options.update:AV_THROTTLE.UPDATE;var timer=null;return function(){var context=options.context||this;var args=arguments;if(!timer){if(options.leading!==false){fn.apply(context,args)}var later=function(){timer=null;if(options.trailing!==false){fn.apply(context,args)}};timer=$timeout(later,wait,update)}return timer}}})})(window);(function(root){"use strict";var availity=root.availity;availity.core.provider("AvLogger",function(){var _enabled=false;this.enabled=function(enabled){_enabled=!!enabled};this.$get=function($injector){var AvLogger=function(context,$delegate){this.context=context||"";this.$log=$delegate};var proto=AvLogger.prototype;AvLogger.supplant=function(str,o){var _supplant=function(a,b){var r=o[b];return r};return str.replace(/\{([^{}]*)\}/g,_supplant)};AvLogger.isObject=function(element){var elemStr=!angular.isUndefined(element)&&!angular.isUndefined(element.constructor)?element.constructor.toString():"";return elemStr.indexOf("Object")>-1};AvLogger.getFormattedTimestamp=function(date){return AvLogger.supplant("{0}:{1}:{2}:{3}",[date.getHours(),date.getMinutes(),date.getSeconds(),date.getMilliseconds()])};proto._log=function(originalFn,args){var hash=window.location.hash;hash=hash||"";if(!_enabled&&hash.indexOf("avLogger")<0&&originalFn!=="error"){return}var now=AvLogger.getFormattedTimestamp(new Date);var message="";var supplantData=[];var context=this.context?" ["+this.context+"] ":"";switch(args.length){case 1:supplantData=args[0];message=AvLogger.supplant("{0}{1} - {2}",[now,context,args[0]]);break;case 3:supplantData=args[2];message=AvLogger.supplant("{0}{1} - {2}('{3}')",[now,context,args[0],args[1]]);break;case 2:if(typeof args[1]==="string"){message=AvLogger.supplant("{0}{1} - {2}('{3}')",[now,context,args[0],args[1]])}else{if(args[0].stack){var errorMessage=this.formatError(args[0]);message=AvLogger.supplant("{0}{1} - {2}",[now,context,errorMessage]);supplantData=args[1]}else{supplantData=args[1]}}break}var $log=this.$log||$injector.get("$log");var params=AvLogger.isObject(supplantData)?[message,supplantData]:[AvLogger.supplant(message,supplantData)];$log[originalFn].apply(null,params)};proto.log=function(){this._log("log",arguments)};proto.info=function(){this._log("info",arguments)};proto.warn=function(){this._log("warn",arguments)};proto.debug=function(){this._log("debug",arguments)};proto.formatError=function(arg){if(arg instanceof Error){if(arg.stack){arg=arg.message&&arg.stack.indexOf(arg.message)===-1?"Error: "+arg.message+"\n"+arg.stack:arg.stack}else if(arg.sourceURL){arg=arg.message+"\n"+arg.sourceURL+":"+arg.line}}return arg};proto.error=function(){this._log("error",arguments)};return AvLogger}})})(window);(function(root){"use strict";var availity=root.availity;availity.core.config(function($provide){$provide.decorator("$log",function($delegate,AvLogger){return new AvLogger(null,$delegate)})})})(window);(function(root){"use strict";var availity=root.availity;availity.core.constant("AV_POLLING",{INTERVAL:1e3,MAX_ELAPSED_TIME:5e3,MAX_RETRY:30,DECAY:1.2,EVENTS:{MAX_RETRY:"av:polling:max:retry"},REGEX_URL:/^.*?api.availity.com(.*)$/});var PollingServiceFactory=function($rootScope,$q,$injector,$timeout,$log,AV_POLLING,AV_API){var AvPollingService=function(){this.pendingRequests=[]};var proto=AvPollingService.prototype;proto.response=function(response){if(this.isAsyncResponse(response)){return this.onAsyncReponse(response)}return response||$q.when(response)};proto.setDefaults=function(config){var defaultOptions={pollingInterval:AV_POLLING.INTERVAL,pollingDecay:AV_POLLING.DECAY,pollingMaxInterval:AV_POLLING.MAX_ELAPSED_TIME,pollingRetryCount:0,pollingStartTime:(new Date).getTime()};return _.extend(defaultOptions,config)};proto.responseError=function(response){return $q.reject(response)};proto.isAsyncResponse=function(response){return response&&response.config&&response.config.api&&response.status&&response.status===202&&angular.isFunction(response.headers)&&!availity.isBlank(response.headers(AV_API.HEADERS.SERVER.LOCATION))};proto.onAsyncReponse=function(response){response.config=this.setDefaults(response.config);var deferred=$q.defer();this.queueRequest(deferred,response);$timeout(function(){deferred.notify(response)},0,false);return deferred.promise};proto.getUrl=function(url){var result=url.match(AV_POLLING.REGEX_URL);if(result&&result[1]){return"/api"+result[1]}return url};proto.queueRequest=function(deferred,response){var self=this;var _url=availity.getRelativeUrl(response.headers(AV_API.HEADERS.SERVER.LOCATION));var _config=response.config;var config={method:"GET",api:true,headers:_config.headers,pollingInterval:_config.pollingInterval,pollingMaxRetry:_config.pollingMaxRetry,pollingMaxInterval:_config.pollingMaxInterval,pollingStartTime:_config.pollingStartTime,_pollingDecay:_config._pollingDecay,pollingRetryCount:_config.pollingRetryCount,pollingDecay:_config.pollingDecay,url:_url,cache:false};var request={id:availity.uuid("request-"),config:config,deferred:deferred};var timeout=this.getPollingTimeout(config);var timer=$timeout(function(){self.retryRequest(request.id)},timeout,false);request.timer=timer;this.pushRequest(request)};proto.popRequest=function(id){var index=null;var request=null;for(var i=0;iconfig.pollingMaxInterval;return isElapsed},proto.isMaxRetried=function(config){return config.pollingRetryCount>=AV_POLLING.MAX_RETRY};proto.isPollable=function(config){var _isTimeout=this.isPollingMaxTimeout(config);var _isMax=this.isMaxRetried(config);return _isTimeout||_isMax?false:true};proto.retryRequest=function(id){var self=this;var request=this.popRequest(id);$timeout.cancel(request.timer);var config=request.config;var deferred=request.deferred;if(!this.isPollable(config)){$log.info("Rejecting pollable response due to timeout");return deferred.reject(request)}this.increment(config);function successCallback(response){if(self.isAsyncResponse(response)){deferred.notify(response);self.queueRequest(request.deferred,response)}else{deferred.resolve(response)}}function errorCallback(response){deferred.reject(response)}var $http=$injector.get("$http");$http(config).then(successCallback,errorCallback)};proto.increment=function(config){this.incrementCounter(config);this.incrementDecay(config)};proto.incrementDecay=function(config){if(!config._pollingDecay){config._pollingDecay=config.pollingDecay}config.pollingDecay*=config._pollingDecay};proto.incrementCounter=function(config){config.pollingRetryCount++};proto.clearRequests=function(){angular.forEach(this.pendingRequests,function(request){$timeout.cancel(request.timer)});this.pendingRequests=[]};return new AvPollingService};availity.core.factory("avPollingService",PollingServiceFactory)})(window);(function(root){"use strict";var availity=root.availity;availity.core.constant("AV_API",{HEADERS:{SERVER:{ID:"X-API-ID",LOCATION:"Location",STATUS:"X-Status-Message",GLOBAL_ID:"X-Global-Transaction-ID"},CLIENT:{SESSION_ID:"X-Session-ID",AUTH:"Authorization",OVERRIDE:"X-HTTP-Method-Override",CALLBACK_URL:"X-Callback-URL",CUSTOMER_ID:"X-Availity-Customer-ID"}}});var defaultOptions={prefix:"",path:"/api",resourceGroup:"",url:null,version:"/v1",level:"",suffix:"",cache:true,api:true,pollingRetryCount:0,pollingInterval:1e3,pollingDecay:1.2,pollingMaxInterval:3e4};var ApiResourcesFactory=function($http,$q,avPollingService){var AvApiResource=function(options){if(!options){throw new Error("[options] cannot be null or undefined")}if(angular.isString(options)){options=options.charAt(0)==="/"?options:"/"+options;options=angular.extend({},{url:options})}if(!options.url){throw new Error("[url] cannot be null")}this.options=angular.extend({},defaultOptions,options||{})};var proto=AvApiResource.prototype;proto._config=function(config){return angular.extend({},this.options,config||{})},proto._cacheBust=function(config){config.cacheBust=null;config.params=config.params||{};config.params.cacheBust=(new Date).getTime();return config},proto._getUrl=function(id){if(this.options.api){return this._getApiUrl(id)}return this.options.url};proto._createResponse=function(data,status,headers,config){return{data:data,status:status,headers:headers,config:config}};proto._request=function(config,afterCallback){var self=this;var defer=$q.defer();$http(config).success(function(data,status,headers,_config){var _response={data:data,status:status,headers:headers,config:_config};var _promise=$q.when(avPollingService.response(_response));defer.notify(_response);_promise.then(function(successResponse){if(afterCallback){successResponse=afterCallback.call(self,successResponse,config.data)}defer.resolve(successResponse)},function(errorResponse){defer.reject(errorResponse)},function(notifyResponse){defer.notify(notifyResponse)})}).error(function(data,status,headers,_config){var response=self._createResponse(data,status,headers,_config);defer.reject(response)});var promise=defer.promise;promise.success=function(fn){promise.then(function(response){fn(response.data,response.status,response.headers,response.config)});return promise};promise.error=function(fn){promise.then(null,function(response){fn(response.data,response.status,response.headers,config)});return promise};promise.always=promise["finally"];return promise};proto.normalize=function(url){return url.replace(/[\/]+/g,"/").replace(/\/$/,"")};proto.join=function(){var joined=[].slice.call(arguments,0).join("/");return this.normalize(joined)};proto._getApiUrl=function(id){id=id?"/"+id:"";var url=this.join(this.options.prefix,this.options.path,this.options.level,this.options.resourceGroup,this.options.version,this.options.url,id);return url+this.options.suffix};proto.create=function(data,config){if(!data){throw new Error("called method without [data]")}if(this.beforeCreate){data=this.beforeCreate(data)}config=this._config(config);config.method="POST";config.url=this._getUrl();config.data=data;return this._request(config,this.afterCreate)};proto.get=function(id,config){if(!id){throw new Error("called method without [id]")}config=this._config(config);if(config.cacheBust){config=this._cacheBust(config)}config.method="GET";config.url=this._getUrl(id);return this._request(config,this.afterGet)};proto.query=function(config){config=this._config(config);if(config.cacheBust){config=this._cacheBust(config)}config.method="GET";config.url=this._getUrl();return this._request(config,this.afterQuery)};proto.update=function(id,data,config){var url;if(_.isString(id)||_.isNumber(id)){url=this._getUrl(id)}else{url=this._getUrl();config=data;data=id}if(this.beforeUpdate){data=this.beforeUpdate(data)}config=this._config(config);config.method="PUT";config.url=url;config.data=data;return this._request(config,this.afterUpdate)};proto.remove=function(id,config){var url;var data;if(_.isString(id)||_.isNumber(id)){url=this._getUrl(id)}else{url=this._getUrl();data=id}config=this._config(config);config.method="DELETE";config.url=url;config.data=data;return this._request(config,this.afterRemove)};proto.beforeCreate=null;proto.afterCreate=null;proto.afterQuery=null;proto.afterGet=null;proto.beforeUpdate=null;proto.afterUpdate=null;proto.afterRemove=null;return AvApiResource};availity.core.factory("AvApiResource",ApiResourcesFactory)})(window);(function(root){"use strict";var availity=root.availity;var UserServiceFactory=function(AvApiResource){var AvUsersResource=function(){AvApiResource.call(this,"users")};angular.extend(AvUsersResource.prototype,AvApiResource.prototype,{afterGet:function(response){var user=response.data.user?response.data.user:response.data;return user},me:function(config){return this.get("me",config)}});return new AvUsersResource};availity.core.factory("avUsersResource",UserServiceFactory)})(window);(function(root){"use strict";var availity=root.availity;availity.core.factory("avCoveragesResource",function(AvApiResource){return new AvApiResource({version:"/v1",url:"/configurations",cache:false})})})(window);(function(root){"use strict";var availity=root.availity;availity.core.factory("avConfigurationsResource",function(AvApiResource){return new AvApiResource({version:"/v1",url:"/configurations"})})})(window);(function(root){"use strict";var availity=root.availity;var LogMessagesFactory=function(AvApiResource){var AvLogMessagesResource=function(){AvApiResource.call(this,{version:"/v1",url:"/log-messages"})};angular.extend(AvLogMessagesResource.prototype,AvApiResource.prototype,{buildRequest:function(level,entries){var requestPayload={};if(entries.level){delete entries.level}requestPayload.level=level;requestPayload.entries=entries;return requestPayload},debug:function(entries){return this.create(this.buildRequest("debug",entries))},info:function(entries){return this.create(this.buildRequest("info",entries))},warn:function(entries){return this.create(this.buildRequest("warn",entries))},error:function(entries){return this.create(this.buildRequest("error",entries))}});return new AvLogMessagesResource};availity.core.factory("avLogMessagesResource",LogMessagesFactory)})(window);(function(root){"use strict";var availity=root.availity;var AvDocumentsResourceFactory=function(AvApiResource){var AvDocumentsResource=function(){AvApiResource.call(this,"documents")};angular.extend(AvDocumentsResource.prototype,AvApiResource.prototype,{getContents:function(id){var config=this._config();config.url=this.getContentsUrl(id);return this._request(config)},getContentsUrl:function(id){return this._getUrl(id)+"/contents"}});return new AvDocumentsResource};availity.core.factory("avDocumentsResource",AvDocumentsResourceFactory)})(window);(function(root){"use strict";var availity=root.availity;var OrganizationResourceFactory=function(AvApiResource){var OrganizationResource=function(){AvApiResource.call(this,"organizations")};angular.extend(OrganizationResource.prototype,AvApiResource.prototype,{getOrganizations:function(config){return this.query(config).then(function(response){return response.data.organizations?response.data.organizations:response.data})}});return new OrganizationResource};availity.core.factory("avOrganizationsResource",OrganizationResourceFactory)})(window);(function(root){"use strict";var availity=root.availity;availity.core.factory("avCodesResource",function(AvApiResource){return new AvApiResource({version:"/v1",url:"/codes"})});var AvCodesResourceFactory=function(AvApiResource){var AvCodesResource=function(){AvApiResource.call(this,"codes")};angular.extend(AvCodesResource.prototype,AvApiResource.prototype,{getCodes:function(data){var config={};config.params={};if(data.page){config.params.offset=50*(data.page-1)}if(data.offset){config.params.offset=data.offset}if(data.list){config.params.list=data.list}if(data.q){config.params.q=data.q}return this.query(config).then(function(response){var results=response.data.codes;if(results&&!_.has(results[0],"id")){_.each(results,function(code){code.id=code.code})}var moreVal=response.data.offset0:false}};return new AvUserAuthorizations};availity.core.factory("avUserAuthorizations",AvUserAuthorizationsFactory)})(window);(function(root){"use strict";var availity=root.availity;availity.core.constant("AV_SESSION",{SESSION_TIMEOUT:"av:auth:session:timeout",NOT_AUTHORIZED:"av:auth:not:authorized"});availity.core.factory("avSession",function($q,avUsersResource){var AvSession=function(){this.user=null;this.permissions=null};var proto=AvSession.prototype;proto.getUser=function(){var self=this;if(this.user){return $q.when(this.user)}return avUsersResource.me().then(function(user){self.user=user;return self.user})};proto.destroy=function(){this.user=null;this.permisions=null};return new AvSession})})(window);(function(root){"use strict";var availity=root.availity;availity.core.constant("AV_IDLE",{EVENTS:{IDLE_INACTIVE:"av:idle:inactive",IDLE_ACTIVE:"av:idle:active",SESSION_TIMEOUT_ACTIVE:"av:idle:session:active",SESSION_TIMEOUT_REDIRECT:"av:idle:session:redirect",HUMAN:"keydown.av.idle mousedown.av.idle keydown.av.idle",MACHINE:"$locationChangeSuccess"},INTERVALS:{PING:3*60*1e3,IDLE:25*60*1e3,SESSION:30*60*1e3},URLS:{HOME:"/availity/web/public.elegant.login",PING:"/api/v1/users/me"}});availity.core.provider("avIdle",function(AV_IDLE){var enabled=false;var pingUrl;var redirectUrl;var sessionTimeout;var idleTimeout;var pingTimeout;this.enable=function(value){if(arguments.length){enabled=!!value}return enabled};this.setSessionTimeout=function(timeout){sessionTimeout=timeout||AV_IDLE.INTERVALS.SESSION};this.setIdleTimeout=function(timeout){idleTimeout=timeout||AV_IDLE.INTERVALS.IDLE};this.setPingTimeout=function(timeout){pingTimeout=timeout||AV_IDLE.INTERVALS.PING};this.setPingUrl=function(url){pingUrl=url||AV_IDLE.URLS.PING};this.$get=function(AV_IDLE,$log,$document,$rootScope,$timeout,avThrottle,$q,$injector){var AvIdle=function(){this._idleTimer=null;this._sessionTimer=null;this._pingTimer=null;this._keepAlive=null;this.idleActive=false;this.sessionActive=false;this.listeners=[];this.init()};var proto=AvIdle.prototype;proto.init=function(){if(!enabled){this.stop();return}this.start()};proto.start=function(){$log.info("avIdle start");var self=this;var listener;!sessionTimeout&&this.setSessionTimeout();!idleTimeout&&this.setIdleTimeout();!pingTimeout&&this.setPingTimeout();!pingUrl&&this.setPingUrl();!redirectUrl&&this.setRedirectUrl();$rootScope.$on("$destroy",function(){self.stop()});$document.find("body").on(AV_IDLE.EVENTS.HUMAN,function(event){self.onEvent(event)});listener=$rootScope.$on(AV_IDLE.EVENTS.MACHINE,function(event,oldUrl,newUrl){if(oldUrl!==newUrl){self.onEvent(event)}});this.listeners.push(listener);$rootScope.$on(AV_IDLE.EVENTS.SESSION_TIMEOUT_REDIRECT,function(){document.location.href=redirectUrl});this.startIdleTimer();this.startSessionTimer()};proto.stop=function(){$document.find("body").off(AV_IDLE.EVENTS.HUMAN);_.each(this.listeners,function(listener){listener()});this.stopPing();this.stopSessionTimer();this.stopIdleTimer()};proto.isEnabled=function(){return enabled};proto.enable=function(value){if(arguments.length){enabled=!!value}return this};proto.setSessionTimeout=function(timeout){sessionTimeout=timeout||AV_IDLE.INTERVALS.SESSION;return this};proto.setIdleTimeout=function(timeout){idleTimeout=timeout||AV_IDLE.INTERVALS.IDLE;return this};proto.setPingTimeout=function(timeout){pingTimeout=timeout||AV_IDLE.INTERVALS.PING;return this};proto.setPingUrl=function(url){pingUrl=url||AV_IDLE.URLS.PING;return this};proto.setRedirectUrl=function(url){redirectUrl=url||AV_IDLE.URLS.HOME;return this};proto.response=function(response){if(this.isApiRequest(response)){this.startSessionTimer()}return response};proto.isApiRequest=function(response){return response&&response.config&&response.config.api};proto.responseError=function(response){if(this.isApiRequest(response)&&response.status!==401){this.startSessionTimer()}if(this.isApiRequest()&&response.status===401){this.stopPing()}return $q.reject(response)};proto.startSessionTimer=function(){var self=this;this.stopSessionTimer();var later=function(){$log.info("avIdle session has TIMED OUT");self.stop();$rootScope.$broadcast(AV_IDLE.EVENTS.SESSION_TIMEOUT_ACTIVE)};$log.info("avIdle session timer has STARTED");this._sessionTimer=$timeout(later,sessionTimeout,false)};proto.stopSessionTimer=function(){$log.info("avIdle session timer has STOPPED");$timeout.cancel(this._sessionTimer)};proto.startIdleTimer=function(){var self=this;this.stopIdleTimer();var later=function(){self.stopIdleTimer();$log.info("avIdle is IDLING");$rootScope.$broadcast(AV_IDLE.EVENTS.IDLE_ACTIVE)};$log.info("avIdle idle timer has STARTED");this._idleTimer=$timeout(later,idleTimeout,false)};proto.stopIdleTimer=function(){$log.info("avIdle idle timer has STOPPED");$timeout.cancel(this._idleTimer)};proto.startPing=function(){if(!this._keepAlive){$log.info("avIdle ping timer has STARTED");this._keepAlive=avThrottle(this.keepAlive,pingTimeout,{context:this})}this._pingTimer=this._keepAlive()};proto.stopPing=function(){$log.info("avIdle ping timer has STOPPED");if(this._pingTimer){$timeout.cancel(this._pingTimer)}};proto.keepAlive=function(){this._keepAlive=null;var $http=$injector.get("$http");$http.get(pingUrl,{cache:false,api:true}).success(function(){$log.info("avIdle keep-alive SUCCESS")}).error(function(){$log.error("avIdle keep-alive FAILURE")})};proto.onEvent=function(){this.startIdleTimer();this.startPing()};return new AvIdle}})})(window);(function(root){"use strict";var availity=root.availity;availity.core.factory("avIdleInterceptor",function(avIdle){return{response:function(response){return avIdle.response(response)},responseError:function(response){return avIdle.responseError(response)}}});availity.core.config(function($httpProvider){$httpProvider.interceptors.push("avIdleInterceptor")})})(window);(function(root){"use strict";var availity=root.availity;availity.core.value("avValConfig",{classes:{valid:"ng-valid",invalid:"ng-invalid",dirty:"ng-dirty",pristine:"ng-pristine",touched:"ng-touched",untouched:"ng-untouched",submitted:"ng-submitted"},validators:["avValPattern","avValSize","avValRequired","avValDateRange","avValDate","avValPhone","avValEmail","avValNpi"]});availity.core.constant("AV_VAL",{EVENTS:{REVALIDATE:"av:val:revalidate",SUBMITTED:"av:val:submitted",FAILED:"av:val:failed",RESET:"av:val:reset"},DEBOUNCE:800,DATE_FORMAT:{SIMPLE:"MM/DD/YYYY"},PATTERNS:{ALPHA_ONLY:/[^A-Za-z]+/g,NUMERIC_ONLY:/[^0-9]+/g}});availity.core.provider("avVal",function(){var validators=[];var rules={};var services={};this.addRules=function(_rules){rules=angular.extend({},rules,_rules);return rules};this.addValidators=function(_validators){validators=validators.concat(_validators);return validators};this.$get=function($injector,$rootScope,$http,$log,avValConfig,AV_VAL){var AvValidation=function(){this.initValidators()};var proto=AvValidation.prototype;proto.initValidators=function(){var self=this;validators=avValConfig.validators.concat(validators);angular.forEach(validators,function(name){self.addValidator(name)})};proto.addValidator=function(name){var validator=$injector.get(name);services[validator.name]=validator};proto.addRules=function(_rules){rules=angular.extend({},rules,_rules);$rootScope.$broadcast(AV_VAL.EVENTS.REVALIDATE)};proto.validate=function(key,element,value,ruleName){var ruleConfig=rules[key];if(!ruleConfig){$log.error("Failed to get rules key ["+key+"]. Forms must be tagged with a rules set name for validation to work.");return}var contraints=ruleConfig[ruleName];if(!contraints){$log.info("Rule named ["+ruleName+"] could not be found in the current schema.");contraints=[]}var el=element[0];var results=[];var violations=[];var _valid=true;angular.forEach(contraints,function(rule,contraintName){if(!rule){return}var validator=services[contraintName];if(angular.isUndefined(validator)){$log.warn("No validator defined for `"+name+"`");return}var valid=validator.validate(value,rule,element);var validationResult={valid:valid,ruleName:ruleName,contraintName:contraintName,value:value,message:rule.message,field:el.name||el.id};var result=angular.extend({},rule,validationResult);results.push(result);if(!valid){violations.push(validationResult)}_valid=_valid&&valid});return{isValid:_valid,all:results,violations:violations}};return new AvValidation}})})(window);(function(root){"use strict";var availity=root.availity;availity.core.factory("avValUtils",function(){return{isDefined:function(value){return angular.isDefined(value)&&value!==""&&value!==null},isEmpty:function(value){return!this.isDefined(value)||$.trim(value)===""}}})})(window);(function(root){"use strict";var availity=root.availity;availity.core.factory("avValSize",function(avValUtils){var validator={name:"size",validate:function(value,rule){var min=rule.min||0;var max=rule.max;var type=rule.type?rule.type.toLowerCase():"text";if(_.isNull(value)||_.isUndefined(value)){value=""}if(type==="text"){value=value+"";return avValUtils.isEmpty(value)||value.length>=min&&(max===undefined||value.length<=max)}if(!_.isNumber(value)&&/^\d+$/.test(value)){value=parseInt(value,10)}return avValUtils.isEmpty(value)||value>=min&&(max===undefined||value<=max)}};return validator})})(window);(function(root){"use strict";var availity=root.availity;availity.core.factory("avValPattern",function(avValUtils){var validator={name:"pattern",REGEX:/^\/(.*)\/([gim]*)$/,asRegExp:function(pattern){var match;if(pattern.test){return pattern}else{match=pattern.match(validator.REGEX);if(match){return new RegExp(match[1],match[2])}else{throw"Expected "+pattern+" to be a RegExp"}}},validate:function(value,rule){var values=_.isArray(rule.value)?rule.value:[rule.value];var valid=false;_.each(values,function(expresion){var pattern=validator.asRegExp(expresion);if(avValUtils.isEmpty(value)||pattern.test(value)){valid=true}});return valid}};return validator})})(window);(function(root){"use strict";var availity=root.availity;availity.core.factory("avValRequired",function(avValUtils){var validator={name:"required",validate:function(value,rule,element){var ctrl=element&&element.data("$ngModelController");if(ctrl){return!ctrl.$isEmpty(value)}return!avValUtils.isEmpty(value)}};return validator})})(window);(function(root){"use strict";var availity=root.availity;availity.core.factory("avValDateRange",function(AV_VAL,avValUtils){var validator={name:"dateRange",getStartDate:function(start){return validator.setMin(moment().add(start.value,start.units))},getEndDate:function(end){return validator.setMax(moment().add(end.value,end.units))},setMin:function(value){value.set("hours",0);value.set("minutes",0);value.set("seconds",0);return value},setMax:function(value){value.set("hours",23);value.set("minutes",59);value.set("seconds",59);return value},validation:function(value,rules){var date;var startDate;var endDate;date=moment(value,rules.format||AV_VAL.DATE_FORMAT.SIMPLE);date.set("hours",0); +(function(root){"use strict";var availity=root.availity||{};availity.VERSION="v1.8.1";availity.MODULE="availity";availity.core=angular.module(availity.MODULE,["ng"]);var originalModule=angular.module;var modules=[];angular.module=function(name,deps){if(deps&&_.indexOf(modules,name)!==-1&&!window.__karma__){throw new Error("redefining module: "+name)}modules.push(name);return originalModule(name,deps)};root.availity=availity;if(typeof module!=="undefined"&&module.exports){module.exports=availity}})(window);(function(root){"use strict";var availity=root.availity;availity._stringify=function(object){if(object===null){return""}return""+object};availity.isBlank=function(str){return/^\s*$/.test(availity._stringify(str))}})(window);(function(root){"use strict";var availity=root.availity;var uid=["0","0","0"];availity.uuid=function(prefix){var index=uid.length;var digit;while(index){index--;digit=uid[index].charCodeAt(0);if(digit===57){uid[index]="A";return prefix?prefix+uid.join(""):uid.join("")}if(digit===90){uid[index]="0"}else{uid[index]=String.fromCharCode(digit+1);return prefix?prefix+uid.join(""):uid.join("")}}uid.unshift("0");return prefix?prefix+uid.join(""):uid.join("")}})(window);(function(root){"use strict";var availity=root.availity;availity.REGEX_API_URL=/^.*?api.availity.com(.*)$/;availity.getRelativeUrl=function(url){var result=url.match(availity.REGEX_API_URL);if(result&&result[1]){return"/api"+result[1]}return url}})(window);(function(root){"use strict";var availity=root.availity;availity.print=function(){if(document.queryCommandSupported("print")){document.execCommand("print",false,null)}else{window.focus();window.print()}}})(window);(function(root){"use strict";var availity=root.availity;availity.core.constant("AV_THROTTLE",{OPTIONS:{wait:1e3,update:false,trailing:true,leading:false}});availity.core.factory("avThrottle",function(AV_THROTTLE,$timeout){return function(fn,wait,options){options=_.merge({},AV_THROTTLE.OPTIONS,options);wait=wait?wait:AV_THROTTLE.THRESHOLD;var update=angular.isDefined(options.update)?options.update:AV_THROTTLE.UPDATE;var timer=null;return function(){var context=options.context||this;var args=arguments;if(!timer){if(options.leading!==false){fn.apply(context,args)}var later=function(){timer=null;if(options.trailing!==false){fn.apply(context,args)}};timer=$timeout(later,wait,update)}return timer}}})})(window);(function(root){"use strict";var availity=root.availity;availity.core.provider("AvLogger",function(){var _enabled=false;this.enabled=function(enabled){_enabled=!!enabled};this.$get=function($injector){var AvLogger=function(context,$delegate){this.context=context||"";this.$log=$delegate};var proto=AvLogger.prototype;AvLogger.supplant=function(str,o){var _supplant=function(a,b){var r=o[b];return r};return str.replace(/\{([^{}]*)\}/g,_supplant)};AvLogger.isObject=function(element){var elemStr=!angular.isUndefined(element)&&!angular.isUndefined(element.constructor)?element.constructor.toString():"";return elemStr.indexOf("Object")>-1};AvLogger.getFormattedTimestamp=function(date){return AvLogger.supplant("{0}:{1}:{2}:{3}",[date.getHours(),date.getMinutes(),date.getSeconds(),date.getMilliseconds()])};proto._log=function(originalFn,args){var hash=window.location.hash;hash=hash||"";if(!_enabled&&hash.indexOf("avLogger")<0&&originalFn!=="error"){return}var now=AvLogger.getFormattedTimestamp(new Date);var message="";var supplantData=[];var context=this.context?" ["+this.context+"] ":"";switch(args.length){case 1:supplantData=args[0];message=AvLogger.supplant("{0}{1} - {2}",[now,context,args[0]]);break;case 3:supplantData=args[2];message=AvLogger.supplant("{0}{1} - {2}('{3}')",[now,context,args[0],args[1]]);break;case 2:if(typeof args[1]==="string"){message=AvLogger.supplant("{0}{1} - {2}('{3}')",[now,context,args[0],args[1]])}else{if(args[0].stack){var errorMessage=this.formatError(args[0]);message=AvLogger.supplant("{0}{1} - {2}",[now,context,errorMessage]);supplantData=args[1]}else{supplantData=args[1]}}break}var $log=this.$log||$injector.get("$log");var params=AvLogger.isObject(supplantData)?[message,supplantData]:[AvLogger.supplant(message,supplantData)];$log[originalFn].apply(null,params)};proto.log=function(){this._log("log",arguments)};proto.info=function(){this._log("info",arguments)};proto.warn=function(){this._log("warn",arguments)};proto.debug=function(){this._log("debug",arguments)};proto.formatError=function(arg){if(arg instanceof Error){if(arg.stack){arg=arg.message&&arg.stack.indexOf(arg.message)===-1?"Error: "+arg.message+"\n"+arg.stack:arg.stack}else if(arg.sourceURL){arg=arg.message+"\n"+arg.sourceURL+":"+arg.line}}return arg};proto.error=function(){this._log("error",arguments)};return AvLogger}})})(window);(function(root){"use strict";var availity=root.availity;availity.core.config(function($provide){$provide.decorator("$log",function($delegate,AvLogger){return new AvLogger(null,$delegate)})})})(window);(function(root){"use strict";var availity=root.availity;availity.core.constant("AV_POLLING",{INTERVAL:1e3,MAX_ELAPSED_TIME:5e3,MAX_RETRY:30,DECAY:1.2,EVENTS:{MAX_RETRY:"av:polling:max:retry"},REGEX_URL:/^.*?api.availity.com(.*)$/});var PollingServiceFactory=function($rootScope,$q,$injector,$timeout,$log,AV_POLLING,AV_API){var AvPollingService=function(){this.pendingRequests=[]};var proto=AvPollingService.prototype;proto.response=function(response){if(this.isAsyncResponse(response)){return this.onAsyncReponse(response)}return response||$q.when(response)};proto.setDefaults=function(config){var defaultOptions={pollingInterval:AV_POLLING.INTERVAL,pollingDecay:AV_POLLING.DECAY,pollingMaxInterval:AV_POLLING.MAX_ELAPSED_TIME,pollingRetryCount:0,pollingStartTime:(new Date).getTime()};return _.extend(defaultOptions,config)};proto.responseError=function(response){return $q.reject(response)};proto.isAsyncResponse=function(response){return response&&response.config&&response.config.api&&response.status&&response.status===202&&angular.isFunction(response.headers)&&!availity.isBlank(response.headers(AV_API.HEADERS.SERVER.LOCATION))};proto.onAsyncReponse=function(response){response.config=this.setDefaults(response.config);var deferred=$q.defer();this.queueRequest(deferred,response);$timeout(function(){deferred.notify(response)},0,false);return deferred.promise};proto.getUrl=function(url){var result=url.match(AV_POLLING.REGEX_URL);if(result&&result[1]){return"/api"+result[1]}return url};proto.queueRequest=function(deferred,response){var self=this;var _url=availity.getRelativeUrl(response.headers(AV_API.HEADERS.SERVER.LOCATION));var _config=response.config;var config={method:"GET",api:true,headers:_config.headers,pollingInterval:_config.pollingInterval,pollingMaxRetry:_config.pollingMaxRetry,pollingMaxInterval:_config.pollingMaxInterval,pollingStartTime:_config.pollingStartTime,_pollingDecay:_config._pollingDecay,pollingRetryCount:_config.pollingRetryCount,pollingDecay:_config.pollingDecay,url:_url,cache:false};var request={id:availity.uuid("request-"),config:config,deferred:deferred};var timeout=this.getPollingTimeout(config);var timer=$timeout(function(){self.retryRequest(request.id)},timeout,false);request.timer=timer;this.pushRequest(request)};proto.popRequest=function(id){var index=null;var request=null;for(var i=0;iconfig.pollingMaxInterval;return isElapsed},proto.isMaxRetried=function(config){return config.pollingRetryCount>=AV_POLLING.MAX_RETRY};proto.isPollable=function(config){var _isTimeout=this.isPollingMaxTimeout(config);var _isMax=this.isMaxRetried(config);return _isTimeout||_isMax?false:true};proto.retryRequest=function(id){var self=this;var request=this.popRequest(id);$timeout.cancel(request.timer);var config=request.config;var deferred=request.deferred;if(!this.isPollable(config)){$log.info("Rejecting pollable response due to timeout");return deferred.reject(request)}this.increment(config);function successCallback(response){if(self.isAsyncResponse(response)){deferred.notify(response);self.queueRequest(request.deferred,response)}else{deferred.resolve(response)}}function errorCallback(response){deferred.reject(response)}var $http=$injector.get("$http");$http(config).then(successCallback,errorCallback)};proto.increment=function(config){this.incrementCounter(config);this.incrementDecay(config)};proto.incrementDecay=function(config){if(!config._pollingDecay){config._pollingDecay=config.pollingDecay}config.pollingDecay*=config._pollingDecay};proto.incrementCounter=function(config){config.pollingRetryCount++};proto.clearRequests=function(){angular.forEach(this.pendingRequests,function(request){$timeout.cancel(request.timer)});this.pendingRequests=[]};return new AvPollingService};availity.core.factory("avPollingService",PollingServiceFactory)})(window);(function(root){"use strict";var availity=root.availity;availity.core.constant("AV_API",{HEADERS:{SERVER:{ID:"X-API-ID",LOCATION:"Location",STATUS:"X-Status-Message",GLOBAL_ID:"X-Global-Transaction-ID"},CLIENT:{SESSION_ID:"X-Session-ID",AUTH:"Authorization",OVERRIDE:"X-HTTP-Method-Override",CALLBACK_URL:"X-Callback-URL",CUSTOMER_ID:"X-Availity-Customer-ID"}}});var defaultOptions={prefix:"",path:"/api",resourceGroup:"",url:null,version:"/v1",level:"",suffix:"",cache:true,api:true,pollingRetryCount:0,pollingInterval:1e3,pollingDecay:1.2,pollingMaxInterval:3e4};var ApiResourcesFactory=function($http,$q,avPollingService){var AvApiResource=function(options){if(!options){throw new Error("[options] cannot be null or undefined")}if(angular.isString(options)){options=options.charAt(0)==="/"?options:"/"+options;options=angular.extend({},{url:options})}if(!options.url){throw new Error("[url] cannot be null")}this.options=angular.extend({},defaultOptions,options||{})};var proto=AvApiResource.prototype;proto._config=function(config){return angular.extend({},this.options,config||{})},proto._cacheBust=function(config){config.cacheBust=null;config.params=config.params||{};config.params.cacheBust=(new Date).getTime();return config},proto._getUrl=function(id){if(this.options.api){return this._getApiUrl(id)}return this.options.url};proto._createResponse=function(data,status,headers,config){return{data:data,status:status,headers:headers,config:config}};proto._request=function(config,afterCallback){var self=this;var defer=$q.defer();$http(config).success(function(data,status,headers,_config){var _response={data:data,status:status,headers:headers,config:_config};var _promise=$q.when(avPollingService.response(_response));defer.notify(_response);_promise.then(function(successResponse){if(afterCallback){successResponse=afterCallback.call(self,successResponse,config.data)}defer.resolve(successResponse)},function(errorResponse){defer.reject(errorResponse)},function(notifyResponse){defer.notify(notifyResponse)})}).error(function(data,status,headers,_config){var response=self._createResponse(data,status,headers,_config);defer.reject(response)});var promise=defer.promise;promise.success=function(fn){promise.then(function(response){fn(response.data,response.status,response.headers,response.config)});return promise};promise.error=function(fn){promise.then(null,function(response){fn(response.data,response.status,response.headers,config)});return promise};promise.always=promise["finally"];return promise};proto.normalize=function(url){return url.replace(/[\/]+/g,"/").replace(/\/$/,"")};proto.join=function(){var joined=[].slice.call(arguments,0).join("/");return this.normalize(joined)};proto._getApiUrl=function(id){id=id?"/"+id:"";var url=this.join(this.options.prefix,this.options.path,this.options.level,this.options.resourceGroup,this.options.version,this.options.url,id);return url+this.options.suffix};proto.create=function(data,config){if(!data){throw new Error("called method without [data]")}if(this.beforeCreate){data=this.beforeCreate(data)}config=this._config(config);config.method="POST";config.url=this._getUrl();config.data=data;return this._request(config,this.afterCreate)};proto.get=function(id,config){if(!id){throw new Error("called method without [id]")}config=this._config(config);if(config.cacheBust){config=this._cacheBust(config)}config.method="GET";config.url=this._getUrl(id);return this._request(config,this.afterGet)};proto.query=function(config){config=this._config(config);if(config.cacheBust){config=this._cacheBust(config)}config.method="GET";config.url=this._getUrl();return this._request(config,this.afterQuery)};proto.update=function(id,data,config){var url;if(_.isString(id)||_.isNumber(id)){url=this._getUrl(id)}else{url=this._getUrl();config=data;data=id}if(this.beforeUpdate){data=this.beforeUpdate(data)}config=this._config(config);config.method="PUT";config.url=url;config.data=data;return this._request(config,this.afterUpdate)};proto.remove=function(id,config){var url;var data;if(_.isString(id)||_.isNumber(id)){url=this._getUrl(id)}else{url=this._getUrl();data=id}config=this._config(config);config.method="DELETE";config.url=url;config.data=data;return this._request(config,this.afterRemove)};proto.beforeCreate=null;proto.afterCreate=null;proto.afterQuery=null;proto.afterGet=null;proto.beforeUpdate=null;proto.afterUpdate=null;proto.afterRemove=null;return AvApiResource};availity.core.factory("AvApiResource",ApiResourcesFactory)})(window);(function(root){"use strict";var availity=root.availity;var UserServiceFactory=function(AvApiResource){var AvUsersResource=function(){AvApiResource.call(this,"users")};angular.extend(AvUsersResource.prototype,AvApiResource.prototype,{afterGet:function(response){var user=response.data.user?response.data.user:response.data;return user},me:function(config){return this.get("me",config)}});return new AvUsersResource};availity.core.factory("avUsersResource",UserServiceFactory)})(window);(function(root){"use strict";var availity=root.availity;availity.core.factory("avCoveragesResource",function(AvApiResource){return new AvApiResource({version:"/v1",url:"/configurations",cache:false})})})(window);(function(root){"use strict";var availity=root.availity;availity.core.factory("avConfigurationsResource",function(AvApiResource){return new AvApiResource({version:"/v1",url:"/configurations"})})})(window);(function(root){"use strict";var availity=root.availity;var LogMessagesFactory=function(AvApiResource){var AvLogMessagesResource=function(){AvApiResource.call(this,{version:"/v1",url:"/log-messages"})};angular.extend(AvLogMessagesResource.prototype,AvApiResource.prototype,{buildRequest:function(level,entries){var requestPayload={};if(entries.level){delete entries.level}requestPayload.level=level;requestPayload.entries=entries;return requestPayload},debug:function(entries){return this.create(this.buildRequest("debug",entries))},info:function(entries){return this.create(this.buildRequest("info",entries))},warn:function(entries){return this.create(this.buildRequest("warn",entries))},error:function(entries){return this.create(this.buildRequest("error",entries))}});return new AvLogMessagesResource};availity.core.factory("avLogMessagesResource",LogMessagesFactory)})(window);(function(root){"use strict";var availity=root.availity;var AvDocumentsResourceFactory=function(AvApiResource){var AvDocumentsResource=function(){AvApiResource.call(this,"documents")};angular.extend(AvDocumentsResource.prototype,AvApiResource.prototype,{getContents:function(id){var config=this._config();config.url=this.getContentsUrl(id);return this._request(config)},getContentsUrl:function(id){return this._getUrl(id)+"/contents"}});return new AvDocumentsResource};availity.core.factory("avDocumentsResource",AvDocumentsResourceFactory)})(window);(function(root){"use strict";var availity=root.availity;var OrganizationResourceFactory=function(AvApiResource){var OrganizationResource=function(){AvApiResource.call(this,"organizations")};angular.extend(OrganizationResource.prototype,AvApiResource.prototype,{getOrganizations:function(config){return this.query(config).then(function(response){return response.data.organizations?response.data.organizations:response.data})}});return new OrganizationResource};availity.core.factory("avOrganizationsResource",OrganizationResourceFactory)})(window);(function(root){"use strict";var availity=root.availity;availity.core.factory("avCodesResource",function(AvApiResource){return new AvApiResource({version:"/v1",url:"/codes"})});var AvCodesResourceFactory=function(AvApiResource){var AvCodesResource=function(){AvApiResource.call(this,"codes")};angular.extend(AvCodesResource.prototype,AvApiResource.prototype,{getCodes:function(data){var config={};config.params={};if(data.page){config.params.offset=50*(data.page-1)}if(data.offset){config.params.offset=data.offset}if(data.list){config.params.list=data.list}if(data.q){config.params.q=data.q}return this.query(config).then(function(response){var results=response.data.codes;if(results&&!_.has(results[0],"id")){_.each(results,function(code){code.id=code.code})}var moreVal=response.data.offset0:false}};return new AvUserAuthorizations};availity.core.factory("avUserAuthorizations",AvUserAuthorizationsFactory)})(window);(function(root){"use strict";var availity=root.availity;availity.core.constant("AV_SESSION",{SESSION_TIMEOUT:"av:auth:session:timeout",NOT_AUTHORIZED:"av:auth:not:authorized"});availity.core.factory("avSession",function($q,avUsersResource){var AvSession=function(){this.user=null;this.permissions=null};var proto=AvSession.prototype;proto.getUser=function(){var self=this;if(this.user){return $q.when(this.user)}return avUsersResource.me().then(function(user){self.user=user;return self.user})};proto.destroy=function(){this.user=null;this.permisions=null};return new AvSession})})(window);(function(root){"use strict";var availity=root.availity;availity.core.constant("AV_IDLE",{EVENTS:{IDLE_INACTIVE:"av:idle:inactive",IDLE_ACTIVE:"av:idle:active",SESSION_TIMEOUT_ACTIVE:"av:idle:session:active",SESSION_TIMEOUT_REDIRECT:"av:idle:session:redirect",HUMAN:"keydown.av.idle mousedown.av.idle keydown.av.idle",MACHINE:"$locationChangeSuccess"},INTERVALS:{PING:3*60*1e3,IDLE:25*60*1e3,SESSION:30*60*1e3},URLS:{HOME:"/availity/web/public.elegant.login",PING:"/api/v1/users/me"}});availity.core.provider("avIdle",function(AV_IDLE){var enabled=false;var pingUrl;var redirectUrl;var sessionTimeout;var idleTimeout;var pingTimeout;this.enable=function(value){if(arguments.length){enabled=!!value}return enabled};this.setSessionTimeout=function(timeout){sessionTimeout=timeout||AV_IDLE.INTERVALS.SESSION};this.setIdleTimeout=function(timeout){idleTimeout=timeout||AV_IDLE.INTERVALS.IDLE};this.setPingTimeout=function(timeout){pingTimeout=timeout||AV_IDLE.INTERVALS.PING};this.setPingUrl=function(url){pingUrl=url||AV_IDLE.URLS.PING};this.$get=function(AV_IDLE,$log,$document,$rootScope,$timeout,avThrottle,$q,$injector){var AvIdle=function(){this._idleTimer=null;this._sessionTimer=null;this._pingTimer=null;this._keepAlive=null;this.idleActive=false;this.sessionActive=false;this.listeners=[];this.init()};var proto=AvIdle.prototype;proto.init=function(){if(!enabled){this.stop();return}this.start()};proto.start=function(){$log.info("avIdle start");var self=this;var listener;!sessionTimeout&&this.setSessionTimeout();!idleTimeout&&this.setIdleTimeout();!pingTimeout&&this.setPingTimeout();!pingUrl&&this.setPingUrl();!redirectUrl&&this.setRedirectUrl();$rootScope.$on("$destroy",function(){self.stop()});$document.find("body").on(AV_IDLE.EVENTS.HUMAN,function(event){self.onEvent(event)});listener=$rootScope.$on(AV_IDLE.EVENTS.MACHINE,function(event,oldUrl,newUrl){if(oldUrl!==newUrl){self.onEvent(event)}});this.listeners.push(listener);$rootScope.$on(AV_IDLE.EVENTS.SESSION_TIMEOUT_REDIRECT,function(){document.location.href=redirectUrl});this.startIdleTimer();this.startSessionTimer()};proto.stop=function(){$document.find("body").off(AV_IDLE.EVENTS.HUMAN);_.each(this.listeners,function(listener){listener()});this.stopPing();this.stopSessionTimer();this.stopIdleTimer()};proto.isEnabled=function(){return enabled};proto.enable=function(value){if(arguments.length){enabled=!!value}return this};proto.setSessionTimeout=function(timeout){sessionTimeout=timeout||AV_IDLE.INTERVALS.SESSION;return this};proto.setIdleTimeout=function(timeout){idleTimeout=timeout||AV_IDLE.INTERVALS.IDLE;return this};proto.setPingTimeout=function(timeout){pingTimeout=timeout||AV_IDLE.INTERVALS.PING;return this};proto.setPingUrl=function(url){pingUrl=url||AV_IDLE.URLS.PING;return this};proto.setRedirectUrl=function(url){redirectUrl=url||AV_IDLE.URLS.HOME;return this};proto.response=function(response){if(this.isApiRequest(response)){this.startSessionTimer()}return response};proto.isApiRequest=function(response){return response&&response.config&&response.config.api};proto.responseError=function(response){if(this.isApiRequest(response)&&response.status!==401){this.startSessionTimer()}if(this.isApiRequest()&&response.status===401){this.stopPing()}return $q.reject(response)};proto.startSessionTimer=function(){var self=this;this.stopSessionTimer();var later=function(){$log.info("avIdle session has TIMED OUT");self.stop();$rootScope.$broadcast(AV_IDLE.EVENTS.SESSION_TIMEOUT_ACTIVE)};$log.info("avIdle session timer has STARTED");this._sessionTimer=$timeout(later,sessionTimeout,false)};proto.stopSessionTimer=function(){$log.info("avIdle session timer has STOPPED");$timeout.cancel(this._sessionTimer)};proto.startIdleTimer=function(){var self=this;this.stopIdleTimer();var later=function(){self.stopIdleTimer();$log.info("avIdle is IDLING");$rootScope.$broadcast(AV_IDLE.EVENTS.IDLE_ACTIVE)};$log.info("avIdle idle timer has STARTED");this._idleTimer=$timeout(later,idleTimeout,false)};proto.stopIdleTimer=function(){$log.info("avIdle idle timer has STOPPED");$timeout.cancel(this._idleTimer)};proto.startPing=function(){if(!this._keepAlive){$log.info("avIdle ping timer has STARTED");this._keepAlive=avThrottle(this.keepAlive,pingTimeout,{context:this})}this._pingTimer=this._keepAlive()};proto.stopPing=function(){$log.info("avIdle ping timer has STOPPED");if(this._pingTimer){$timeout.cancel(this._pingTimer)}};proto.keepAlive=function(){this._keepAlive=null;var $http=$injector.get("$http");$http.get(pingUrl,{cache:false,api:true}).success(function(){$log.info("avIdle keep-alive SUCCESS")}).error(function(){$log.error("avIdle keep-alive FAILURE")})};proto.onEvent=function(){this.startIdleTimer();this.startPing()};return new AvIdle}})})(window);(function(root){"use strict";var availity=root.availity;availity.core.factory("avIdleInterceptor",function(avIdle){return{response:function(response){return avIdle.response(response)},responseError:function(response){return avIdle.responseError(response)}}});availity.core.config(function($httpProvider){$httpProvider.interceptors.push("avIdleInterceptor")})})(window);(function(root){"use strict";var availity=root.availity;availity.core.value("avValConfig",{classes:{valid:"ng-valid",invalid:"ng-invalid",dirty:"ng-dirty",pristine:"ng-pristine",touched:"ng-touched",untouched:"ng-untouched",submitted:"ng-submitted"},validators:["avValPattern","avValSize","avValRequired","avValDateRange","avValDate","avValPhone","avValEmail","avValNpi"]});availity.core.constant("AV_VAL",{EVENTS:{REVALIDATE:"av:val:revalidate",SUBMITTED:"av:val:submitted",FAILED:"av:val:failed",RESET:"av:val:reset"},DEBOUNCE:800,DATE_FORMAT:{SIMPLE:"MM/DD/YYYY"},PATTERNS:{ALPHA_ONLY:/[^A-Za-z]+/g,NUMERIC_ONLY:/[^0-9]+/g}});availity.core.provider("avVal",function(){var validators=[];var rules={};var services={};this.addRules=function(_rules){rules=angular.extend({},rules,_rules);return rules};this.addValidators=function(_validators){validators=validators.concat(_validators);return validators};this.$get=function($injector,$rootScope,$http,$log,avValConfig,AV_VAL){var AvValidation=function(){this.initValidators()};var proto=AvValidation.prototype;proto.initValidators=function(){var self=this;validators=avValConfig.validators.concat(validators);angular.forEach(validators,function(name){self.addValidator(name)})};proto.addValidator=function(name){var validator=$injector.get(name);services[validator.name]=validator};proto.addRules=function(_rules){rules=angular.extend({},rules,_rules);$rootScope.$broadcast(AV_VAL.EVENTS.REVALIDATE)};proto.validate=function(key,element,value,ruleName){var ruleConfig=rules[key];if(!ruleConfig){$log.error("Failed to get rules key ["+key+"]. Forms must be tagged with a rules set name for validation to work.");return}var contraints=ruleConfig[ruleName];if(!contraints){$log.info("Rule named ["+ruleName+"] could not be found in the current schema.");contraints=[]}var el=element[0];var results=[];var violations=[];var _valid=true;angular.forEach(contraints,function(rule,contraintName){if(!rule){return}var validator=services[contraintName];if(angular.isUndefined(validator)){$log.warn("No validator defined for `"+name+"`");return}var valid=validator.validate(value,rule,element);var validationResult={valid:valid,ruleName:ruleName,contraintName:contraintName,value:value,message:rule.message,field:el.name||el.id};var result=angular.extend({},rule,validationResult);results.push(result);if(!valid){violations.push(validationResult)}_valid=_valid&&valid});return{isValid:_valid,all:results,violations:violations}};return new AvValidation}})})(window);(function(root){"use strict";var availity=root.availity;availity.core.factory("avValUtils",function(){return{isDefined:function(value){return angular.isDefined(value)&&value!==""&&value!==null},isEmpty:function(value){return!this.isDefined(value)||$.trim(value)===""}}})})(window);(function(root){"use strict";var availity=root.availity;availity.core.factory("avValSize",function(avValUtils){var validator={name:"size",validate:function(value,rule){var min=rule.min||0;var max=rule.max;var type=rule.type?rule.type.toLowerCase():"text";if(_.isNull(value)||_.isUndefined(value)){value=""}if(type==="text"){value=value+"";return avValUtils.isEmpty(value)||value.length>=min&&(max===undefined||value.length<=max)}if(!_.isNumber(value)&&/^\d+$/.test(value)){value=parseInt(value,10)}return avValUtils.isEmpty(value)||value>=min&&(max===undefined||value<=max)}};return validator})})(window);(function(root){"use strict";var availity=root.availity;availity.core.factory("avValPattern",function(avValUtils){var validator={name:"pattern",REGEX:/^\/(.*)\/([gim]*)$/,asRegExp:function(pattern){var match;if(pattern.test){return pattern}else{match=pattern.match(validator.REGEX);if(match){return new RegExp(match[1],match[2])}else{throw"Expected "+pattern+" to be a RegExp"}}},validate:function(value,rule){var values=_.isArray(rule.value)?rule.value:[rule.value];var valid=false;_.each(values,function(expresion){var pattern=validator.asRegExp(expresion);if(avValUtils.isEmpty(value)||pattern.test(value)){valid=true}});return valid}};return validator})})(window);(function(root){"use strict";var availity=root.availity;availity.core.factory("avValRequired",function(avValUtils){var validator={name:"required",validate:function(value,rule,element){var ctrl=element&&element.data("$ngModelController");if(ctrl){return!ctrl.$isEmpty(value)}return!avValUtils.isEmpty(value)}};return validator})})(window);(function(root){"use strict";var availity=root.availity;availity.core.factory("avValDateRange",function(AV_VAL,avValUtils){var validator={name:"dateRange",getStartDate:function(start){return validator.setMin(moment().add(start.value,start.units))},getEndDate:function(end){return validator.setMax(moment().add(end.value,end.units))},setMin:function(value){value.set("hours",0);value.set("minutes",0);value.set("seconds",0);return value},setMax:function(value){value.set("hours",23);value.set("minutes",59);value.set("seconds",59);return value},validation:function(value,rules){var date;var startDate;var endDate;date=moment(value,rules.format||AV_VAL.DATE_FORMAT.SIMPLE);date.set("hours",0); date.set("minutes",0);date.set("seconds",0);if(!avValUtils.isEmpty(rules.start.units)&&!avValUtils.isEmpty(rules.end.units)){startDate=validator.getStartDate(rules.start);endDate=validator.getEndDate(rules.end)}else{startDate=moment(rules.start.value,rules.format);endDate=validator.setMax(moment(rules.end.value,rules.format))}return date.isValid()&&date.isBetween(startDate,endDate,"day")||date.isSame(startDate,"day")||date.isSame(endDate,"day")},validate:function(value,rule){return avValUtils.isEmpty(value)||validator.validation(value,rule)}};return validator})})(window);(function(root){"use strict";var availity=root.availity;availity.core.factory("avValDate",function(AV_VAL,avValUtils){var validator={name:"dateFormat",validate:function(value,rules){var format=rules&&rules.format?rules.format:AV_VAL.DATE_FORMAT.SIMPLE;return avValUtils.isEmpty(value)||moment(value,format,true).isValid()}};return validator})})(window);(function(root){"use strict";var availity=root.availity;availity.core.factory("avValNpi",function(){var validator={name:"npi",INTEGER_REGEX:/^\d*$/,validate:function(value){var npi=value||"";if(!validator.INTEGER_REGEX.test(npi)||npi.length!==10){return false}var firstDigit=npi.charAt(0);if(!("1"===firstDigit||"2"===firstDigit||"3"===firstDigit||"4"===firstDigit)){return false}var digit=parseInt(npi.charAt(9),10);npi=npi.substring(0,9);npi="80840"+npi;var alternate=true;var total=0;for(var i=npi.length;i>0;i--){var next=parseInt(npi.charAt(i-1),10);if(alternate){next=next*2;if(next>9){next=next%10+1}}total+=next;alternate=!alternate}var roundUp=Math.ceil(total/10)*10;var calculatedCheck=roundUp-total;if(calculatedCheck!==digit){return false}return true}};return validator})})(window);(function(root){"use strict";var availity=root.availity;availity.core.factory("avValPhone",function(avValPattern){var PHONE_PATTERN=/^([0-9][\.\-]?)?[(]{0,1}[0-9]{3}[)\.\- ]{0,1}[0-9]{3}[\.\- ]{0,1}[0-9]{4}$/;var validator={name:"phone",validate:function(value,rule){return avValPattern.validate(value,angular.extend({},rule,{value:PHONE_PATTERN}))}};return validator})})(window);(function(root){"use strict";var availity=root.availity;availity.core.factory("avValEmail",function(avValPattern){var EMAIL_PATTERN=/[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;var validator={name:"email",validate:function(value,rule){return avValPattern.validate(value,angular.extend({},rule,{value:EMAIL_PATTERN}))}};return validator})})(window);(function(root){"use strict";var availity=root.availity;availity.core.constant("AV_GLOBALS",{REGIONS:[{name:"Alabama",code:"AL"},{name:"Alaska",code:"AK"},{name:"Arizona",code:"AZ"},{name:"Arkansas",code:"AR"},{name:"California",code:"CA"},{name:"Colorado",code:"CO"},{name:"Connecticut",code:"CT"},{name:"Delaware",code:"DE"},{name:"District Of Columbia",code:"DC"},{name:"Florida",code:"FL"},{name:"Georgia",code:"GA"},{name:"Hawaii",code:"HI"},{name:"Idaho",code:"ID"},{name:"Illinois",code:"IL"},{name:"Indiana",code:"IN"},{name:"Iowa",code:"IA"},{name:"Kansas",code:"KS"},{name:"Kentucky",code:"KY"},{name:"Louisiana",code:"LA"},{name:"Maine",code:"ME"},{name:"Maryland",code:"MD"},{name:"Massachusetts",code:"MA"},{name:"Michigan",code:"MI"},{name:"Minnesota",code:"MN"},{name:"Mississippi",code:"MS"},{name:"Missouri",code:"MO"},{name:"Montana",code:"MT"},{name:"Nebraska",code:"NE"},{name:"Nevada",code:"NV"},{name:"New Hampshire",code:"NH"},{name:"New Jersey",code:"NJ"},{name:"New Mexico",code:"NM"},{name:"New York",code:"NY"},{name:"North Carolina",code:"NC"},{name:"North Dakota",code:"ND"},{name:"Ohio",code:"OH"},{name:"Oklahoma",code:"OK"},{name:"Oregon",code:"OR"},{name:"Pennsylvania",code:"PA"},{name:"Rhode Island",code:"RI"},{name:"South Carolina",code:"SC"},{name:"South Dakota",code:"SD"},{name:"Tennessee",code:"TN"},{name:"Texas",code:"TX"},{name:"Utah",code:"UT"},{name:"Vermont",code:"VT"},{name:"Virginia",code:"VA"},{name:"Washington",code:"WA"},{name:"West Virginia",code:"WV"},{name:"Wisconsin",code:"WI"},{name:"Wyoming",code:"WY"}]})})(window);(function(root){"use strict";var availity=root.availity;availity.core.constant("AV_ANALYTICS",{VIRTUAL_PAGE_TRACKING:true,SERVICES:{PIWIK:"avPiwikAnalytics",SPLUNK:"avSplunkAnalytics"},EVENTS:{PAGE:"$locationChangeSuccess",DEFAULT:"click"},PRE_FIX:/^avAnalytics(.*)$/,IGNORE:["avAnalyticsOn","avAnalyticsIf"],ENV:{PROD:{DOMAIN:"apps.availity.com",URL:"https://piwik.availity.com/piwik/"},QA:{URL:"https://qa-piwik.availity.com/piwik/"}}});availity.core.provider("avAnalytics",function(AV_ANALYTICS){var plugins=[];var virtualPageTracking=AV_ANALYTICS.VIRTUAL_PAGE_TRACKING;var appId;this.registerPlugins=function(_plugins){if(angular.isString(_plugins)){_plugins=[_plugins]}if(_.isArray(_plugins)){plugins=_plugins}else{throw new Error("AvAnalytics.registerPlugins() expects a string or an array.")}return plugins};this.setVirtualPageTracking=function(value){if(arguments.length){virtualPageTracking=!!value}};this.isVirtualPageTracking=function(){return virtualPageTracking};this.setAppID=function(id){appId=id;return appId};this.$get=function($injector,$q,$log,$rootScope,$location){var AvAnalytics=function(){var self=this;this.services={};if(!plugins||plugins.length===0){plugins=[AV_ANALYTICS.SERVICES.PIWIK,AV_ANALYTICS.SERVICES.SPLUNK]}angular.forEach(plugins,function(plugin){try{self.services[plugin]=$injector.get(plugin)}catch(err){$log.error("Could not load `{0}` plugin",[plugin])}})};var proto=AvAnalytics.prototype;proto.init=function(){var self=this;if(this.isVirtualPageTracking()){$rootScope.$on(AV_ANALYTICS.EVENTS.PAGE,function(){self.trackPageView($location.absUrl())})}angular.forEach(this.services,function(handler){if(handler.isEnabled()&&handler.init){handler.init()}})};proto.trackEvent=function(properties){var promises=[];angular.forEach(this.services,function(handler){var promise=handler.trackEvent(properties);promises.push(promise)});return $q.all(promises)};proto.getAppId=function(){return appId};proto.isVirtualPageTracking=function(){return virtualPageTracking};proto.trackPageView=function(url){var promises=[];angular.forEach(this.services,function(handler){var promise=handler.trackPageView(url);promises.push(promise)});return $q.all(promises)};return new AvAnalytics}})})(window);(function(root){"use strict";var availity=root.availity;availity.core.factory("avAnalyticsUtils",function(AV_ANALYTICS,$log){var AnalyticsUtils=function(){};var proto=AnalyticsUtils.prototype;proto.getProperties=function(attributes){var self=this;var props={};_.forEach(attributes,function(value,key){if(self.isValidAttribute(key)&&self.isNotIgnored(key)){var result=self.getAttribute(key,value);props[result.key]=result.value}});return props};proto.isExternalLink=function(attrs){return attrs.href&&!attrs.ngClick};proto.isNotIgnored=function(key){var ignored=_.includes(AV_ANALYTICS.IGNORE,key);return!ignored};proto.isValidAttribute=function(key){return AV_ANALYTICS.PRE_FIX.test(key)};proto.lowercase=function(str){return str.substr(0,1).toLowerCase()+str.substr(1)};proto.getAttribute=function(key,value){var simpleKey=key.match(AV_ANALYTICS.PRE_FIX);if(simpleKey&&simpleKey[1]){return{key:this.lowercase(simpleKey[1]),value:value}}};proto.toNum=function(value){var parsed=parseInt(value,10);value=isNaN(parsed)?0:parsed;return value};proto.isValid=function(trackingValues){var valid=true;if(trackingValues.value||trackingValues.value===0){delete trackingValues.value}_.forEach(trackingValues,function(key,value){if(availity.isBlank(value)||_.isUndefined(value)){$log.warn("The analytic tracking value for "+key.toUpperCase()+" is not defined.");valid=false}});return valid};return new AnalyticsUtils})})(window);(function(root){"use strict";var availity=root.availity;availity.core.factory("avSplunkAnalytics",function($log,avLogMessagesResource,$location){var SplunkAnalyticsService=function(){};var proto=SplunkAnalyticsService.prototype;proto.trackEvent=function(properties){properties.url=$location.$$absUrl||"N/A";properties.level=properties.level||"info";return avLogMessagesResource[properties.level](properties)};proto.trackPageView=function(url){var properties={event:"page",level:"info",url:url||$location.$$absUrl()};return avLogMessagesResource[properties.level](properties)};proto.isEnabled=function(){return true};return new SplunkAnalyticsService})})(window);(function(root){"use strict";var availity=root.availity;availity.core.provider("avPiwikAnalytics",function(){var self;var siteId;var enabled=false;var customVariables=[];this.enabled=function(_enabled){enabled=!!_enabled};this._setCustomVariable=function(index,valueName,value,scope){if(!index||isNaN(index)){throw new Error("index must be a number")}else if(!valueName){throw new Error("valueName must be declared")}else{customVariables.push(["setCustomVariable",index,valueName,value,scope])}};this.setSiteID=function(_siteID){this.enabled(true);siteId=_siteID};this.setVisitVariables=function(items){_.forEach(items,function(item){self._setCustomVariable(item[0],item[1],item[2],"visit")})};this.setPageVariables=function(index,name,value){this._setCustomVariable(index,name,value,"page")};this.$get=function(avAnalyticsUtils,avUsersResource,AV_ANALYTICS,$injector,$log,$q,$document,$location){var AvPiwikAnalytics=function(){window._paq=window._paq||[]};var proto=AvPiwikAnalytics.prototype;proto.trackEvent=function(properties){if(!window._paq){$log.warn("Piwik object `_paq` not found in global scope");return $q.when(false)}if(properties.value){properties.value=avAnalyticsUtils.toNum(properties.event)}if(!avAnalyticsUtils.isValid(properties)){$log.warn("Invalid properties being passed. Tracking info will not be sent.");return $q.when(false)}return $q.when(window._paq.push(["trackEvent",properties.category,properties.action||properties.event,properties.label,properties.value]))};proto.trackPageView=function(url){if(!window._paq){$log.warn("Piwik object `_paq` not found in global scope");return $q.when(false)}return $q.when([window._paq.push(["setCustomUrl",url]),window._paq.push(["trackPageView",url])])};proto.init=function(){avUsersResource.me().then(function(user){window._paq.push(["setUserId",user.id])});if(!_.isFinite(siteId)){$log.warn("Invalid Piwik Site Id. Piwik analytics has been disabled.");return}var url;if($location.$$host===AV_ANALYTICS.ENV.PROD.DOMAIN){url=AV_ANALYTICS.ENV.PROD.URL}else{url=AV_ANALYTICS.ENV.QA.URL}window._paq.push(["enableLinkTracking"]);window._paq.push(["setTrackerUrl",url+"piwik.php"]);window._paq.push(["setSiteId",siteId]);_.forEach(customVariables,function(variable){window._paq.push(variable)});$.getScript(url+"piwik.js",function(){})};proto.isEnabled=function(){return enabled&&siteId};return new AvPiwikAnalytics}})})(window);(function(root){"use strict";var availity=root.availity;availity.core.constant("AV_EXCEPTIONS",{MESSAGES:{NOT_APPLICABLE:"N/A"},TYPES:{EXCEPTION:"exception"}});availity.core.provider("avExceptionAnalytics",function(){var _enabled=true;var appId;this.enabled=function(enabled){_enabled=!!enabled};this.setAppId=function(_id){appId=_id};this.$get=function(avLogMessagesResource,$location,AV_EXCEPTIONS){var AvExceptionAnalytics=function(){};var proto=AvExceptionAnalytics.prototype;proto.init=function(){var self=this;if(!_enabled){return}TraceKit.remoteFetching=false;TraceKit.surroundingLinesToCollect=11;TraceKit.report.subscribe(function(stacktrace){self.onError(stacktrace)})};proto.prettyPrint=function(stacktrace){var message="";var length=stacktrace.stack.length;for(var i=0;i \");\n$templateCache.put(\"ui/badge/badge-tpl.html\",\" 0\\\" data-ng-bind=\\\"count | avApproximate\\\">\");\n$templateCache.put(\"ui/block/block-tpl.html\",\"
0\\\">
\");\n$templateCache.put(\"ui/breadcrumbs/breadcrumbs-tpl.html\",\"
\");\n$templateCache.put(\"ui/idle/idle-session-tpl.html\",\"

Session Expired

Your session has expired. If you want to continue, click Log into Availity and enter your login credentials.

\");\n$templateCache.put(\"ui/idle/idle-tpl.html\",\"
\");\n$templateCache.put(\"ui/idle/idle-warning-tpl.html\",\"

Are you still working?

Your session is about to expire. Click anywhere on the screen to let us know you are still here.

\");\n$templateCache.put(\"ui/labels/removable-label-tpl.html\",\"\");\n$templateCache.put(\"ui/modal/modal-tpl.html\",\"
\");\n$templateCache.put(\"ui/scroll-pagination/scroll-pagination-tpl.html\",\"
\");\n$templateCache.put(\"ui/tabs/tab-tpl.html\",\"
  • {{heading}}
  • \");\n$templateCache.put(\"ui/tabs/tabs-tpl.html\",\"
      \");}]);\nvar availity = window.availity || {}; if(typeof module !== 'undefined' && module.exports) {module.exports = availity; } })();\n\n//# sourceMappingURL=maps/availity-angular-ui-templates.js.map\n",null,"
      \n \n \n \n
      \n"," 0\" data-ng-bind=\"count | avApproximate\">\n","
      0\"\n class=\"block-ui-overlay\"\n data-ng-class=\"{ 'block-ui-visible': state.blocking }\">\n
      \n
      \n
      \n \n
      \n
      \n\n","
        \n
      • \n \n \n
      • \n
      \n","
      \n

      Session Expired

      \n
      \n
      \n
      \n
      \n \n
      \n
      \n

      Your session has expired. If you want to continue, click Log into Availity and enter your login credentials.

      \n
      \n
      \n
      \n
      \n \n
      \n\n\n","
      \n
      \n
      \n
      \n","
      \n

      Are you still working?

      \n
      \n
      \n
      \n
      \n \n
      \n
      \n

      Your session is about to expire. Click anywhere on the screen to let us know you are still here.

      \n
      \n
      \n
      \n
      \n \n
      \n\n","\n","
      \n
      \n
      \n \n
      \n
      \n
      \n\n","
      \n \n
      \n \n
      ","
    • \n {{heading}}\n
    • \n","
      \n
        \n
        \n
        \n
        \n
        \n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["availity-angular-ui-templates.js","/source/availity-angular-ui-templates.js","/source/ui/animation/loader-tpl.html","/source/ui/badge/badge-tpl.html","/source/ui/block/block-tpl.html","/source/ui/breadcrumbs/breadcrumbs-tpl.html","/source/ui/idle/idle-session-tpl.html","/source/ui/idle/idle-tpl.html","/source/ui/idle/idle-warning-tpl.html","/source/ui/labels/removable-label-tpl.html","/source/ui/modal/modal-tpl.html","/source/ui/scroll-pagination/scroll-pagination-tpl.html","/source/ui/tabs/tab-tpl.html","/source/ui/tabs/tabs-tpl.html"],"names":["angular","module","run","$templateCache","put","availity","window","exports"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA,CCLA,WACA,YADAA,SAAAC,OAAA,4BAAAC,KAAA,iBAAA,SAAAC,gBCAAA,eAAAC,IAAA,+BAAA,wKCAAD,gBAAAC,IAAA,0BAAA,4FCAAD,gBAAAC,IAAA,0BAAA,wYCAAD,gBAAAC,IAAA,sCAAA,4RCAAD,gBAAAC,IAAA,gCAAA,6gBCAAD,gBAAAC,IAAA,wBAAA,uECAAD,gBAAAC,IAAA,gCAAA,ycCAAD,gBAAAC,IAAA,qCAAA,wGCAAD,gBAAAC,IAAA,0BAAA,mOCAAD,gBAAAC,IAAA,kDAAA,mWCAAD,gBAAAC,IAAA,uBAAA,6ICAAD,gBAAAC,IAAA,wBAAA,qXbmBA,IAAIC,UAAWC,OAAOD,YAAgB,UAAUJ,UAAW,aAAeA,OAAOM,QAAS,CAACN,OAAOM,QAAUF","file":"availity-angular-ui-templates.min.js","sourcesContent":["/**\n * availity-angular v1.8.1 -- January-20\n * Copyright 2016 Availity, LLC \n */\n\n(function() {\n'use strict';\nangular.module(\"availity.ui.templates\", []).run([\"$templateCache\", function($templateCache) {$templateCache.put(\"ui/animation/loader-tpl.html\",\"
        \");\n$templateCache.put(\"ui/badge/badge-tpl.html\",\" 0\\\" data-ng-bind=\\\"count | avApproximate\\\">\");\n$templateCache.put(\"ui/block/block-tpl.html\",\"
        0\\\">
        \");\n$templateCache.put(\"ui/breadcrumbs/breadcrumbs-tpl.html\",\"
        \");\n$templateCache.put(\"ui/idle/idle-session-tpl.html\",\"

        Session Expired

        Your session has expired. If you want to continue, click Log into Availity and enter your login credentials.

        \");\n$templateCache.put(\"ui/idle/idle-tpl.html\",\"
        \");\n$templateCache.put(\"ui/idle/idle-warning-tpl.html\",\"

        Are you still working?

        Your session is about to expire. Click anywhere on the screen to let us know you are still here.

        \");\n$templateCache.put(\"ui/labels/removable-label-tpl.html\",\"\");\n$templateCache.put(\"ui/modal/modal-tpl.html\",\"
        \");\n$templateCache.put(\"ui/scroll-pagination/scroll-pagination-tpl.html\",\"
        \");\n$templateCache.put(\"ui/tabs/tab-tpl.html\",\"
      • {{heading}}
      • \");\n$templateCache.put(\"ui/tabs/tabs-tpl.html\",\"
          \");}]);\nvar availity = window.availity || {}; if(typeof module !== 'undefined' && module.exports) {module.exports = availity; } })();\n\n//# sourceMappingURL=maps/availity-angular-ui-templates.js.map\n",null,"
          \n \n \n \n
          \n"," 0\" data-ng-bind=\"count | avApproximate\">\n","
          0\"\n class=\"block-ui-overlay\"\n data-ng-class=\"{ 'block-ui-visible': state.blocking }\">\n
          \n
          \n
          \n \n
          \n
          \n\n","
            \n
          • \n \n \n
          • \n
          \n","
          \n

          Session Expired

          \n
          \n
          \n
          \n
          \n \n
          \n
          \n

          Your session has expired. If you want to continue, click Log into Availity and enter your login credentials.

          \n
          \n
          \n
          \n
          \n \n
          \n\n\n","
          \n
          \n
          \n
          \n","
          \n

          Are you still working?

          \n
          \n
          \n
          \n
          \n \n
          \n
          \n

          Your session is about to expire. Click anywhere on the screen to let us know you are still here.

          \n
          \n
          \n
          \n
          \n \n
          \n\n","\n","
          \n
          \n
          \n \n
          \n
          \n
          \n\n","
          \n \n
          \n \n
          ","
        • \n {{heading}}\n
        • \n","
          \n
            \n
            \n
            \n
            \n
            \n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/maps/availity-angular-ui.js.map b/dist/maps/availity-angular-ui.js.map index f76fbcba..a23ceaa9 100644 --- a/dist/maps/availity-angular-ui.js.map +++ b/dist/maps/availity-angular-ui.js.map @@ -1 +1 @@ -{"version":3,"sources":["availity-angular-ui.js","index.js","template.js","modal.js","form.js","field.js","popover.js","container.js","adapter-bootstrap.js","adapter.js","dropdown.js","datepicker.js","idle-notifier.js","mask.js","has-permission.js","analytics.js","placeholder.js","breadcrumbs.js","approximate.js","badge.js","removable-label.js","loader.js","block.js","block-directive.js","tabs.js","scroll-pagination.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA,ACLA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvBA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5BA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnTA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClMA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClQA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3GA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3CA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChGA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChDA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7cA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvPA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChJA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtCA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/CA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9EA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnCA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjEA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzBA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxCA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7BA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5EA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClFA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzBA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7KA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"availity-angular-ui.js","sourcesContent":[null,"/*global module*/\n\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity || {};\n\n availity.MODULE_UI = 'availity.ui';\n availity.ui = angular.module(availity.MODULE_UI, ['ng', 'ngSanitize']);\n\n availity.ui.constant('AV_UI', {\n // jscs: disable\n NG_OPTIONS: /^\\s*([\\s\\S]+?)(?:\\s+as\\s+([\\s\\S]+?))?(?:\\s+group\\s+by\\s+([\\s\\S]+?))?\\s+for\\s+(?:([\\$\\w][\\$\\w]*)|(?:\\(\\s*([\\$\\w][\\$\\w]*)\\s*,\\s*([\\$\\w][\\$\\w]*)\\s*\\)))\\s+in\\s+([\\s\\S]+?)(?:\\s+track\\s+by\\s+([\\s\\S]+?))?$/\n // jscs: enable\n });\n\n if(typeof module !== 'undefined' && module.exports) {\n module.exports = availity;\n }\n\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.factory('avTemplateCache', function($q, $templateCache, $http) {\n\n return {\n\n get: function(options) {\n\n var valid = !options.template || !options.templateUrl;\n\n if(!valid) {\n throw new Error('Either options.template or options.templateUrl must be defined for avTemplateCache');\n }\n\n return options.template ? $q.when(options.template) :\n $http.get(options.templateUrl, {cache: $templateCache})\n .then(function(result) {\n return result.data;\n });\n }\n };\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_MODAL', {\n\n OPTIONS: {\n scope: null,\n templateUrl: null,\n template: null,\n id: null,\n container: null,\n\n // Bootstrap defaults\n keyboard: true,\n backdrop: true,\n show: false,\n remote: false\n },\n\n EVENTS: {\n SHOW: 'show.av.modal',\n SHOWN: 'shown.av.modal',\n HIDE: 'hide.av.modal',\n HIDDEN: 'hidden.av.modal'\n },\n\n NAMESPACE: {\n MODAL: 'bs.modal'\n },\n\n BS_EVENTS: {\n SHOW: 'show.bs.modal',\n SHOWN: 'shown.bs.modal',\n HIDE: 'hide.bs.modal',\n HIDDEN: 'hidden.bs.modal'\n },\n\n TEMPLATES: {\n MODAL: 'ui/modal/modal-tpl.html'\n }\n });\n\n availity.ui.factory('avModalManager', function() {\n\n var AvModalManager = function() {\n this.instances = [];\n };\n\n var proto = AvModalManager.prototype;\n\n proto.add = function(id) {\n this.instances.push(id);\n };\n\n proto.remove = function(id) {\n this.instances = _.without(this.instances, id);\n };\n\n proto.closeAll = function() {\n\n _.forEach(this.instances, function(id) {\n\n var $el = $('#' + id);\n\n if(!$el) {\n return;\n }\n\n var bsModal = $el.data('bs.modal');\n if(bsModal) {\n bsModal.removeBackdrop();\n bsModal.$body.removeClass('modal-open');\n bsModal.resetAdjustments();\n bsModal.resetScrollbar();\n }\n\n var avModal = $el.data('AvModal');\n if(avModal) {\n avModal.destroy();\n }\n\n });\n };\n\n return new AvModalManager();\n\n });\n\n var ModalFactory = function($rootScope, $timeout, $compile, AV_MODAL, avTemplateCache, $q, avModalManager) {\n\n var Modal = function(options) {\n\n var self = this;\n\n this.templateDefer = $q.defer();\n this.templatePromise = this.templateDefer.promise;\n\n this.options = angular.extend({}, AV_MODAL.OPTIONS, {scope: $rootScope.$new()}, options);\n\n avTemplateCache.get(options).then(function(template) {\n self.options.template = template;\n self._build();\n });\n\n };\n\n Modal.create = function(options) {\n return new Modal(options);\n };\n\n var proto = Modal.prototype;\n\n proto._build = function() {\n\n var self = this;\n\n var scope = this.options.scope;\n this.$element = angular.element(this.options.template);\n\n this._createId();\n\n this._scope();\n\n $compile(this.$element)(scope);\n\n $timeout(function() {\n self._init();\n }, 0, true);\n\n // Append to container or \n this.options.container ? this.$element.appendTo(this.options.container) : this.$element.appendTo('body');\n\n };\n\n proto._init = function() {\n\n this.$element.data('AvModal', this);\n\n this.templateDefer.resolve(true);\n\n // Initialize Bootstrap jQuery plugin\n this.$element.modal({\n 'backdrop': this.options.backdrop,\n 'keyboard': this.options.keyboard,\n 'show': this.options.show,\n 'remote': this.options.remote\n });\n\n this._listeners();\n };\n\n // Add helpers to scope so clients can call internal methods\n proto._scope = function() {\n\n var self = this;\n var scope = this.options.scope;\n\n scope.modalShow = function() {\n return self.show();\n };\n\n scope.modalToggle = function() {\n return self.toggle();\n };\n\n scope.modalHide = function() {\n return self.hide();\n };\n\n };\n\n proto._listeners = function() {\n\n var self = this;\n var scope = this.options.scope;\n var $element = this.$element;\n\n this.animationShowDefer = $q.defer();\n this.animationHideDefer = $q.defer();\n\n $element.on(AV_MODAL.BS_EVENTS.SHOW, function(event) {\n scope.$emit(AV_MODAL.EVENTS.SHOW, event, self);\n });\n\n $element.on(AV_MODAL.BS_EVENTS.SHOWN, function(event) {\n\n if(angular.isFunction(self.options.onShown)) {\n self.options.onShown();\n }\n\n self.animationShowDefer.resolve(true);\n\n scope.$emit(AV_MODAL.EVENTS.SHOWN, event, self);\n });\n\n $element.on(AV_MODAL.BS_EVENTS.HIDE, function(event) {\n scope.$emit(AV_MODAL.EVENTS.HIDE, event, self);\n });\n\n $element.on(AV_MODAL.BS_EVENTS.HIDDEN, function(event) {\n\n if(angular.isFunction(self.options.onHidden)) {\n self.options.onHidden.call(this);\n }\n\n self.animationHideDefer.resolve(true);\n scope.$emit(AV_MODAL.EVENTS.HIDDEN, event, self);\n\n scope.$evalAsync(function() {\n self.destroy();\n });\n\n });\n\n // Garbage collection\n scope.$on('$destroy', function() {\n avModalManager.remove(self._id);\n self.destroy();\n });\n\n };\n\n proto.show = function() {\n\n var self = this;\n this.animationShowDefer = $q.defer();\n\n this.templatePromise.then(function() {\n self.isShown() ? self.animationShowDefer.resolve(true) : self.$element.modal('show');\n });\n\n return this.animationShowDefer.promise;\n\n };\n\n proto.hide = function() {\n\n var self = this;\n this.animationHideDefer = $q.defer();\n\n this.templatePromise.then(function() {\n !self.isShown() ? self.animationHideDefer.resolve(true) : self.$element.modal('hide');\n });\n\n return this.animationHideDefer.promise;\n };\n\n proto.isShown = function() {\n return this.$element.data(AV_MODAL.NAMESPACE.MODAL).isShown;\n },\n\n proto.toggle = function() {\n\n var self = this;\n\n return this.templatePromise.then(function() {\n return self.isShown() ? self.hide() : self.show();\n });\n\n };\n\n proto.destroy = function() {\n\n var self = this;\n\n return this.templatePromise.then(function() {\n self.$element.data('AvModal', null);\n self.$element.remove();\n });\n\n };\n\n proto._createId = function() {\n // Create a unique id for the modal if not present or passed in via options\n var id = this.$element.attr('id');\n if(!id) {\n // Get id from options or create a unique id\n id = this.options.id ? this.options.id : availity.uuid('av-modal-id');\n this.$element.attr('id', id);\n }\n\n this._id = id;\n\n avModalManager.add(id);\n };\n\n return Modal;\n };\n\n availity.ui.factory('AvModal', ModalFactory);\n\n availity.ui.directive('avModal', function(AV_MODAL) {\n return {\n restrict: 'A',\n replace: true,\n transclude: true,\n scope: {\n size: '@'\n },\n templateUrl: AV_MODAL.TEMPLATES.MODAL\n };\n });\n\n})(window);\n","/**\n * 1. All fields should be pristine on first load\n * 2. If field is modified an invalid the field should be marked with an error\n *\n */\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.controller('avValFormController', function() {\n\n this.ngForm = null;\n this.rulesKey = null;\n this.avValOn = null;\n this.avValDebounce = null;\n this.avValInvalid = false;\n\n // Object that stores the unique id (key) and violation count (value) of all the form fields\n //\n // EX:\n //\n // {\n // avVal001: 0\n // avVal002: 2\n // avVal003: 1\n // }\n this.violations = {};\n\n this.init = function(form) {\n this.ngForm = form;\n };\n\n /**\n * Records id of the form field and number of violations\n * @param {[type]} id [description]\n * @param {[type]} count [description]\n * @return {[type]} [description]\n */\n this.record = function(id, count) {\n this.violations[id] = count;\n\n var violocationCount = _.reduce(this.violations, function(sum, num) {\n return sum + num;\n }, 0);\n\n this.ngForm.$setValidity('av', violocationCount === 0);\n };\n\n this.unrecord = function(id) {\n if(id && this.violations[id]) {\n delete this.violations[id];\n }\n };\n\n this.reset = function() {\n this.ngForm.$setPristine();\n this.ngForm.$submitted = false;\n };\n\n this.$setSubmitted = function() {\n this.ngForm.$submitted = true;\n };\n\n this.setRulesKey = function(key) {\n this.rulesKey = key;\n };\n\n });\n\n // form.$error = {};\n // form.$$success = {};\n // form.$pending = undefined;\n // form.$name = $interpolate(attrs.name || attrs.ngForm || '')($scope);\n // form.$dirty = false;\n // form.$pristine = true;\n // form.$valid = true;\n // form.$invalid = false;\n // form.$submitted = false;\n\n availity.ui.directive('avValForm', function($log, $timeout, $parse, AV_VAL, avValAdapter, $rootScope) {\n return {\n restrict: 'A',\n priority: 10,\n require: ['form', 'avValForm'],\n controller: 'avValFormController',\n compile: function() {\n return {\n pre: function(scope, iEl, iAttrs, controllers) {\n\n var ruleFn = $parse(iAttrs.avValForm);\n var rulesKey = ruleFn(scope);\n rulesKey = rulesKey || iAttrs.avValForm; // interpolated rule from scope || fixed string\n\n if(!rulesKey) {\n $log.error('avValForm requires a rules key in order to run the proper validation rules.');\n return;\n }\n\n scope.$watch(ruleFn, function(_rulesKey, _oldRulesKey) {\n if(_rulesKey) {\n avForm.setRulesKey(_rulesKey);\n\n if(_rulesKey !== _oldRulesKey) {\n $timeout(function() {\n $log.info('avValForm revalidate');\n $rootScope.$broadcast(AV_VAL.EVENTS.REVALIDATE);\n });\n }\n\n }\n\n });\n\n var ngForm = controllers[0];\n var avForm = controllers[1];\n\n // Allow form attributes to define the validation behavior of the form fields\n // inside it. If `av-val-on` or `av-val-debounce` are on the form then all form\n // fields inside the form would inherit this behavior.\n avForm.avValOn = iAttrs.avValOn || null;\n avForm.avValDebounce = iAttrs.avValDebounce || null;\n // Allows fields to update with invalid data for dirty form saving\n avForm.avValInvalid = iAttrs.avValInvalid || false;\n\n avForm.init(ngForm);\n avForm.setRulesKey(rulesKey);\n\n },\n post: function(scope, iEl, iAttrs, controllers) {\n\n iEl.attr('novalidate', 'novalidate'); // prevent HTML5 validation from kicking in\n\n // Disable ng-submit or ng-click handlers and store the function to call for submitting\n var fn;\n if(iAttrs.ngSubmit) {\n // Disable ng-submit event\n iEl.off('submit');\n fn = $parse(iAttrs.ngSubmit, /* expensiveChecks */ true);\n }else if(iAttrs.ngClick) {\n // Disable ng-click event\n iEl.off('click');\n fn = $parse(iAttrs.ngClick, /* expensiveChecks */ true);\n }\n\n var ngForm = controllers[0];\n var avForm = controllers[1];\n\n scope.$on(AV_VAL.EVENTS.RESET, function () {\n avForm.reset();\n });\n\n iEl.bind('submit', function(event) {\n\n scope.$broadcast(AV_VAL.EVENTS.SUBMITTED);\n avForm.$setSubmitted();\n\n if(ngForm.$invalid) {\n\n scope.$broadcast(AV_VAL.EVENTS.FAILED);\n\n $log.info('avValForm invalid. preventing default submit action');\n\n event.preventDefault();\n event.stopImmediatePropagation();\n scope.$broadcast(event);\n\n avValAdapter.scroll(iEl);\n return;\n }\n\n ngForm.$setPristine();\n\n if(!fn) {\n return;\n }\n\n var callback = function() {\n fn(scope, {$event:event});\n };\n\n scope.$apply(callback);\n\n });\n\n }\n };\n }\n };\n });\n\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.controller('AvValFieldController', function($element, avValAdapter, $attrs, avVal, $log, $timeout, $scope, $sniffer) {\n\n this.ngModel = null;\n this.rule = null;\n this.avValForm = null;\n this.avValInvalid = false;\n\n var self = this;\n\n var placeholder = $element[0].placeholder;\n var noEvent = {};\n\n this.createId = function() {\n this.ngModel.avId = availity.uuid('avVal');\n };\n\n this.setNgModel = function(ngModel) {\n this.ngModel = ngModel;\n };\n\n this.setRule = function(rule) {\n this.rule = rule;\n };\n\n this.avValForm = function(avValForm) {\n this.avValForm = avValForm;\n };\n\n this.updateModel = function(results) {\n\n var self = this;\n var validationKeys = [];\n\n this.ngModel.avResults = results;\n\n // set state for each violation\n angular.forEach(results.violations, function (result) {\n var key = 'av-' + result.contraintName;\n validationKeys.push(key);\n self.ngModel.$setValidity(key, result.valid);\n });\n\n // set overall state for validation state\n this.ngModel.$setValidity('av', this.ngModel.avResults.isValid);\n\n // store violations\n this.ngModel.avViolations = this.ngModel.avResults.violations;\n\n // record the id and violation count in the av-form controller. this determines if the form is\n // valid if sum of violations for all form inputs === zero\n this.avValForm.record(this.ngModel.avId, this.ngModel.avResults.violations.length);\n\n // remove violation keys that are no longer falsy\n angular.forEach(this.ngModel.$error, function(value, key) {\n\n if(_.indexOf(validationKeys, key) === -1 && key.lastIndexOf('av-', 0) === 0) {\n self.ngModel.$setValidity(key, true);\n }\n });\n };\n\n this.updateView = function() {\n if(this.ngModel.$dirty || $scope.avValShow) {\n avValAdapter.element($element, this.ngModel, this.ngModel.avResults.isValid);\n avValAdapter.message($element, this.ngModel);\n }\n };\n\n this.validate = function(value) {\n\n $log.info('validating value [' + value + ']');\n\n var rulesKey = self.avValForm.rulesKey;\n var results = avVal.validate(rulesKey, $element, value, self.rule);\n\n // validate function is called within the context of angular so fn.call and set the context\n // to \"this\"\n self.updateModel.call(self, results);\n self.updateView.call(self);\n\n return results;\n };\n\n this.validateModel = function(value) {\n\n self.validate(value, true);\n return value;\n\n };\n\n this.validateView = function(value) {\n\n var results = self.validate(value);\n\n if(self.avValForm.avValInvalid || self.avValInvalid) {\n // allows invalid data from view to update model for dirty saving\n return value;\n }\n\n // prevent invalid data from view to update model\n return results.isValid ? value : undefined;\n\n };\n\n this.onDebounce = function() {\n\n var value = $element.val().trim();\n\n if(this.isCheckbox()) {\n this.ngModel.$setViewValue($element[0].checked);\n } else if(this.isRadio()) {\n this.ngModel.$setViewValue($attrs.value);\n }else {\n this.ngModel.$setViewValue(value);\n }\n\n };\n\n this.isRadio = function() {\n return $element.is('input') && $attrs.type === 'radio';\n };\n\n this.isCheckbox = function() {\n return $element.is('input') && $attrs.type === 'checkbox';\n };\n\n this.reset = function() {\n\n var violations = this.ngModel.avResults.violations;\n violations.splice(0, violations.length);\n\n avValAdapter.message($element, this.ngModel);\n avValAdapter.reset($element);\n\n };\n\n this.event = function(event, avValDebounce) {\n\n var self = this;\n\n $element.unbind('input');\n\n var debounce;\n\n $element.on(event, function() {\n\n // https://github.com/angular/angular.js/blob/v1.2.27/src/ng/directive/input.js#L508\n if($sniffer.msie <= 11 && (event || noEvent).type === 'input' && $element[0].placeholder !== placeholder) {\n placeholder = $element[0].placeholder;\n return;\n }\n\n $timeout.cancel(debounce);\n debounce = $timeout(function() {\n $scope.$apply(function() {\n self.onDebounce();\n });\n }, avValDebounce);\n\n });\n\n };\n\n });\n\n // Events:\n //\n // click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown\n // keyup keypress submit focus blur copy cut paste\n availity.ui.directive('avValField', function($log, $timeout, avVal, avValAdapter, AV_VAL) {\n return {\n restrict: 'A',\n controller: 'AvValFieldController',\n require: ['^avValForm', 'ngModel', 'avValField'],\n scope: {\n avValDebounce: '@?',\n avValOn: '@?',\n avValShow: '=?'\n },\n link: function(scope, element, attrs, controllers) {\n\n var rule = attrs.avValField;\n var avValForm = controllers[0];\n var ngModel = controllers[1];\n var avValField = controllers[2];\n\n var avValOn = scope.avValOn || avValForm.avValOn || 'input';\n\n if(!ngModel && !rule) {\n $log.error('avValField requires ngModel and a validation rule to run.');\n return;\n }\n\n // Allows fields to update with invalid data for dirty form saving\n avValField.avValInvalid = attrs.avValInvalid || false;\n\n // CACHE THE MODEL\n avValField.setNgModel(ngModel);\n\n avValField.avValForm(avValForm);\n\n avValField.setRule(rule);\n\n avValField.createId();\n\n // DEBOUNCE\n var avValDebounce = parseInt(scope.avValDebounce || (avValForm.avValDebounce || AV_VAL.DEBOUNCE), 10);\n avValDebounce = _.isNumber(avValDebounce) ? avValDebounce : AV_VAL.DEBOUNCE;\n\n var debounceAllowed = !avValField.isRadio() && !avValField.isCheckbox() && avValOn !== 'blur';\n\n if(!debounceAllowed) {\n avValDebounce = 0;\n }\n\n // EVENT LISTENER\n avValField.event(avValOn, avValDebounce);\n\n // (view to model)\n ngModel.$parsers.push(avValField.validateView);\n\n // (model to view) - added to beginning of array because formatters\n // are processed in reverse order thus allowing the model to be transformed\n // before the validation framework check for validity.\n ngModel.$formatters.unshift(avValField.validateModel);\n\n scope.$on(AV_VAL.EVENTS.REVALIDATE, function() {\n avValField.validate(ngModel.$viewValue);\n });\n\n // SUBMITTED EVENT\n scope.$on(AV_VAL.EVENTS.SUBMITTED, function() {\n ngModel.$dirty = true;\n avValField.validate(ngModel.$viewValue);\n });\n\n // - Removes all errors on page,\n // - does not reset view or model values. This is to be handled by the app.\n scope.$on(AV_VAL.EVENTS.RESET, function () {\n avValField.reset();\n });\n\n scope.$on('$destroy', function () {\n avValForm.unrecord(ngModel.avId);\n });\n\n }\n };\n });\n\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.provider('avPopoverConfig', function() {\n\n var config = {\n showOnLoadHideDelay: 10000\n };\n\n this.set = function(options) {\n angular.extend(config, options);\n };\n\n this.$get = function() {\n return angular.copy(config);\n };\n });\n\n availity.ui.constant('AV_POPOVER', {\n NAME: 'bs.popover'\n });\n\n availity.ui.controller('AvPopoverController', function($element, $scope, AV_POPOVER, $timeout, avPopoverConfig) {\n this.options = angular.extend({}, avPopoverConfig);\n\n this.listeners = function() {\n\n var self = this;\n\n angular.forEach(['show', 'shown', 'hide', 'hidden'], function(name) {\n $element.on(name + '.bs.popover', function(ev) {\n $scope.$emit('av:popover:' + name, ev);\n });\n });\n\n $scope.$on('destroy', function() {\n self.destroy();\n });\n };\n\n this.plugin = function() {\n return $element.data(AV_POPOVER.NAME);\n };\n\n this.show = function() {\n $element.popover('show');\n };\n\n this.hide = function() {\n $element.popover('hide');\n };\n\n this.toggle = function() {\n $element.popover('toggle');\n };\n\n this.destroy = function() {\n $element.popover('destroy');\n };\n\n\n this.init = function() {\n\n this.listeners();\n\n if($scope.showOnLoad) {\n\n this.show();\n\n if($scope.delay && $scope.delay.hide) {\n $timeout(this.hide, $scope.delay.hide, false);\n return;\n }\n // If no delay is found or cannot be parsed, set a default timeout so that the popover doesn't stick around forever\n $timeout(this.hide, this.options.showOnLoadHideDelay, false);\n }\n };\n\n\n });\n\n availity.ui.directive('avPopover', function() {\n return {\n restrict: 'A',\n controller: 'AvPopoverController',\n scope: {\n showOnLoad: '=',\n delay: '='\n },\n link: function(scope, element, attrs, avPopover) {\n\n var options = {};\n\n scope.$evalAsync(function() {\n element.popover(angular.extend({}, options, {\n html: true\n }));\n avPopover.init();\n });\n }\n };\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.controller('avValContainerController', function($scope, $timeout) {\n\n this.message = function(ngModel) {\n\n var message = null;\n if(ngModel.avResults.violations.length && ngModel.avResults.violations[0].message) {\n message = ngModel.avResults.violations[0].message;\n }else {\n message = null;\n }\n\n // $timeout is needed to update the UI from $broadcast events\n $timeout(function() {\n $scope.messages.message = message;\n });\n\n };\n\n });\n\n availity.ui.directive('avValContainer', function() {\n return {\n restrict: 'A',\n controller: 'avValContainerController',\n template: '

            ',\n replace: true,\n scope: {\n\n },\n link: function(scope) {\n scope.messages = _.extend({}, scope.messages, { message: null, id: null });\n }\n };\n });\n\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_BOOTSTRAP_ADAPTER', {\n CLASSES: {\n SUCCESS: 'has-success',\n WARNING: 'has-warning',\n ERROR: 'has-error',\n FEEDBACK: 'has-feedback',\n HELP: 'help-block',\n FORM_GROUP: '.form-group:first',\n NAVBAR: 'navbar-fixed-top'\n },\n SELECTORS: {\n CONTAINER: 'container-id',\n DATA_CONTAINER: 'data-container-id'\n },\n CONTROLLER: '$avValContainerController'\n });\n\n availity.ui.factory('avValBootstrapAdapter', function(AV_BOOTSTRAP_ADAPTER, $timeout, $log) {\n\n return {\n\n element: function(element, ngModel) {\n if(ngModel.$valid) {\n element.parents(AV_BOOTSTRAP_ADAPTER.CLASSES.FORM_GROUP).removeClass(AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR);\n }else {\n element.parents(AV_BOOTSTRAP_ADAPTER.CLASSES.FORM_GROUP).addClass(AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR);\n }\n },\n\n reset: function(element) {\n element.parents(AV_BOOTSTRAP_ADAPTER.CLASSES.FORM_GROUP).removeClass(AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR);\n },\n\n message: function(element, ngModel) {\n\n var selector = [\n '.',\n AV_BOOTSTRAP_ADAPTER.CLASSES.HELP\n ].join('');\n\n var $el = $(element);\n\n var target = $el.attr(AV_BOOTSTRAP_ADAPTER.SELECTORS.CONTAINER);\n target = target || $el.attr(AV_BOOTSTRAP_ADAPTER.SELECTORS.DATA_CONTAINER);\n // default to siblings\n target = target ? $('#' + target) : $el.siblings(selector);\n\n if(target.length === 0) {\n $log.warn('avValBootstrapAdapter could not find validation container for {0}', [element]);\n return;\n }\n\n var el = target[0];\n $el = angular.element(el);\n var avValModel = $el.data(AV_BOOTSTRAP_ADAPTER.CONTROLLER); // get the av val message controller\n if(avValModel) {\n avValModel.message(ngModel);\n }\n },\n\n scroll: function(form) {\n\n // Bootstrap fixed navbars causes bad scroll-to offsets so find them all\n var navbarSelector = [\n '.',\n AV_BOOTSTRAP_ADAPTER.CLASSES.NAVBAR\n ].join('');\n\n // Add up all the heights to find the true offset\n var offset = 0;\n $(navbarSelector).each(function() {\n offset += $(this).outerHeight();\n });\n\n var selector = [\n '.',\n AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR,\n ':first'\n ].join('');\n\n var $target = $(form).find(selector);\n $timeout(function() {\n // scroll to offset top of first error minus the offset of the navbars\n $('body, html').animate({scrollTop: $target.offset().top - offset}, 'fast');\n }, 0, false);\n }\n };\n });\n\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_VAL_ADAPTER', {\n DEFAULT: 'avValBootstrapAdapter'\n });\n\n availity.ui.provider('avValAdapter', function() {\n\n var that = this;\n\n this.setAdapter = function(adapter) {\n this.adapter = adapter;\n };\n\n this.$get = function(AV_VAL_ADAPTER, $injector) {\n\n var Adapter = function() {\n var adapterName = that.adapter || AV_VAL_ADAPTER.DEFAULT;\n this.adapter = $injector.get(adapterName);\n };\n\n var proto = Adapter.prototype;\n\n proto.element = function(element, ngModel) {\n this.adapter.element(element, ngModel);\n };\n\n proto.reset = function(element) {\n this.adapter.reset(element);\n };\n\n proto.message = function(element, ngModel) {\n this.adapter.message(element, ngModel);\n },\n\n proto.scroll = function(form) {\n this.adapter.scroll(form);\n };\n\n return new Adapter();\n };\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.provider('avDropdownConfig', function() {\n var config = {\n closeOnResize: true,\n dropdownAutoWidth: true,\n minimumResultsForSearch: 5\n };\n\n this.set = function(options) {\n angular.extend(config, options);\n };\n\n this.$get = function() {\n return angular.copy(config);\n };\n });\n\n availity.ui.constant('AV_DROPDOWN', {\n OPTIONS: [\n 'width',\n 'minimumInputLength',\n 'maximumInputLength',\n 'minimumResultsForSearch',\n 'maximumSelectionSize',\n 'placeholderOption',\n 'separator',\n 'allowClear',\n 'multiple',\n 'closeOnSelect',\n 'openOnEnter',\n 'id',\n 'matcher',\n 'sortResults',\n 'formatSelection',\n 'formatResult',\n 'formatResultCssClass',\n 'formatNoMatches',\n 'formatSearching',\n 'formatAjaxError',\n 'formatInputTooShort',\n 'formatInputTooLong',\n 'formatSelectionTooBig',\n 'formatLoadMore',\n 'createSearchChoice',\n 'createSearchChoicePosition',\n 'initSelection',\n 'tokenizer',\n 'tokenSeparators',\n 'query',\n 'ajax',\n 'data',\n 'tags',\n 'containerCss',\n 'containerCssClass',\n 'dropdownCss',\n 'dropdownCssClass',\n 'dropdownAutoWidth',\n 'adaptContainerCssClass',\n 'adaptDropdownCssClass',\n 'escapeMarkup',\n 'selectOnBlur',\n 'loadMorePadding',\n 'nextSearchTerm',\n 'correlationId'\n ]\n });\n\n\n availity.ui.controller('AvDropdownController', function($element, $attrs, AV_UI, AV_DROPDOWN, avDropdownConfig, $log, $scope, $timeout, $parse) {\n\n var self = this;\n this.options = {};\n this.match = null;\n this.ngModel = null;\n\n this.init = function() {\n\n self.options = angular.extend({}, avDropdownConfig);\n\n _.forEach($attrs, function(value, key) {\n if(_.contains(AV_DROPDOWN.OPTIONS, key.replace('data-', ''))) {\n self.options[key] = $scope.$eval(value);\n }\n });\n\n if(this.isRemoteMultiple()) {\n self.options.multiple = angular.isDefined($attrs.multiple);\n }\n\n self.multiple = angular.isDefined($attrs.multiple);\n\n if(self.options.query) {\n\n self.queryFn = self.options.query;\n // Function used to query results for the search term.\n self.options.query = self.query;\n // Function used to get the id from the choice object or a string representing the key under which the id is stored.\n self.options.id = self.getId;\n }\n\n };\n\n this.isRemoteMultiple = function() {\n if(angular.isDefined($attrs.multiple) && $element.get(0).tagName.toLowerCase() === 'input') {\n return true;\n }\n return false;\n };\n\n this.setRemoteViewValue = function(e) {\n\n var values = this.ngModel.$viewValue;\n\n if(!angular.isArray(values) || !angular.isObject(values)) {\n values = [];\n }\n\n if(e.added) {\n // Adding to collection\n values.push(e.added);\n } else {\n // Removing from collection\n var index = _.findIndex(values, function(value) {\n return _.matches(e.removed)(value);\n });\n values.splice(index, 1);\n }\n\n this.ngModel.$setViewValue(values);\n\n };\n\n this.setViewValue = function(e) {\n this.ngModel.$setViewValue(e.added);\n };\n\n this.setNgModel = function(ngModel) {\n this.ngModel = ngModel;\n };\n\n this.getSelected = function(model) {\n\n if(self.options.query) {\n return 0;\n }\n\n var items = this.collection($scope);\n\n var index = _.findIndex(items, function(item) {\n return angular.equals(item, model);\n });\n\n return index;\n\n };\n\n // Result:\n //\n // {\n // \"code\": \"252Y00000X\",\n // \"value\": \"AGENCIES,EARLY INTERVENTION PROVIDER AGENCY,NOT APPLICABLE|Agency\",\n // \"id\": \"252Y00000X\"\n // }\n this.getId = function(result) {\n return result.id;\n };\n\n // Wrapper around the query function for Select2. When the promise resolves\n // the callback\n this.query = function(options) {\n\n self.queryFn(options).then(function(response) {\n\n // Callback function that should be called with the result object. The result object:\n //\n // result.results (object) - Array of result objects. The default renderers\n // expect objects with id and text keys. The id property is required,\n // even if custom renderers are used. The object may also contain a children\n // key if hierarchical data is displayed. The object may also contain a disabled\n // boolean property indicating whether this result can be selected.\n //\n // result.more (boolean) - true if more results are available for the current\n // search term.\n //\n // results.context (object) - A user-defined object that should be made available\n // as the context parameter to the query function on subsequent queries to load\n // more result pages for the same search term. See the description of\n // options.context parameter.\n options.callback({more: response.more, results: response.results});\n });\n };\n\n this.setValue = function() {\n\n var viewValue = self.ngModel.$viewValue;\n var selected = null;\n if(viewValue) {\n selected = this.getSelected(viewValue);\n }\n\n // var apply = scope.$evalAsync || $timeout;\n $timeout(function() {\n $element\n .select2('val', (selected === null || selected === 'undefined') ? '' : selected); // null === '' for Select2\n });\n };\n\n this.getMultiSelected = function(viewValue) {\n\n var indices = [];\n\n if($element.get(0).tagName.toLowerCase() !== 'input') {\n var options = this.collection($scope);\n\n _.each(viewValue, function(savedObject) {\n var index = _.findIndex(options, function(value) {\n var temp = angular.copy(savedObject); // remove hashkeys for comparison\n return _.matches(temp)(value);\n });\n indices.push(index);\n });\n\n } else {\n\n var inputViewValues = this.ngModel.$modelValue;\n\n _.each(inputViewValues, function(savedObject) {\n\n if(_.isUndefined(savedObject.id) ) {\n\n if(savedObject.id || savedObject[self.options.correlationId]) {\n\n savedObject.id = savedObject[self.options.correlationId];\n\n } else {\n\n throw new Error('dropdown list must have a id or a alternative value to use as a id');\n }\n\n }\n\n });\n }\n\n if(indices.length > 0) {\n viewValue = indices;\n }\n\n return viewValue;\n\n };\n\n this.setValues = function() {\n\n var viewValue = self.ngModel.$viewValue;\n\n if(!angular.isArray(viewValue)) {\n viewValue = [];\n }\n\n if(!_.isEmpty(viewValue) && _.isObject(viewValue[0])) {\n viewValue = this.getMultiSelected(viewValue);\n }\n\n $timeout(function() {\n $element\n .select2('val', viewValue);\n });\n };\n\n this.ngOptions = function() {\n\n this.match = $attrs.ngOptions.match(AV_UI.NG_OPTIONS);\n if(!this.match) {\n throw new Error('Invalid ngOptions for avDropdown');\n }\n // AV_UI.NG_OPTIONS regex will parse into arrays like below:\n //\n // 0: \"state.name for state in states\"\n // 1: \"state.name\"\n // 2: undefined\n // 3: undefined\n // 4: \"state\"\n // 5: undefined\n // 6: undefined\n // 7: \"states\"\n // 8: undefined\n //\n // 0: \"state.id as state.name for state in states\"\n // 1: \"state.id\"\n // 2: \"state.name\"\n // 3: undefined\n // 4: \"state\"\n // 5: undefined\n // 6: undefined\n // 7: \"states\"\n // 8: undefined\n //\n // 0: \"state.name for state in states track by state.id\"\n // 1: \"state.name\"\n // 2: undefined\n // 3: undefined\n // 4: \"state\"\n // 5: undefined\n // 6: undefined\n // 7: \"states\"\n // 8: \"state.id\"\n //\n // 0: \"person.fullName as (person.lastName + ', ' + person.firstName) for person in feeScheduleModel.persons\"\n // 1: \"person.fullName\"\n // 2: \"(person.lastName + ', ' + person.firstName)\"\n // 3: undefined\n // 4: \"person\"\n // 5: undefined\n // 6: undefined\n // 7: \"feeScheduleModel.persons\"\n // 8: undefined\n //\n this.displayFn = $parse(this.match[2] || this.match[1]); // this is the function to retrieve the text to show as\n this.collection = $parse(this.match[7]);\n this.valueName = this.match[4] || this.match[6];\n this.valueFn = $parse(this.match[2] ? this.match[1] : this.valueName);\n this.keyName = this.match[5];\n\n $scope.$watchCollection(this.collection, function(newVal, oldVal) {\n if(angular.equals(newVal, oldVal)) {\n return;\n }\n\n self.setValue();\n\n }, true);\n\n };\n });\n\n availity.ui.directive('avDropdown', function($timeout, $log, $window) {\n\n return {\n restrict: 'A',\n require: ['ngModel', 'avDropdown'],\n controller: 'AvDropdownController',\n link: function(scope, element, attrs, controllers) {\n var ngModel = controllers[0];\n var avDropdown = controllers[1];\n\n avDropdown.setNgModel(ngModel);\n avDropdown.init();\n\n if(attrs.ngOptions ) {\n avDropdown.ngOptions();\n }\n\n ngModel.$parsers.push(function(value) {\n var parent = element.prev();\n parent\n .toggleClass('ng-invalid', !ngModel.$valid)\n .toggleClass('ng-valid', ngModel.$valid)\n .toggleClass('ng-invalid-required', !ngModel.$valid)\n .toggleClass('ng-valid-required', ngModel.$valid)\n .toggleClass('ng-dirty', ngModel.$dirty)\n .toggleClass('ng-pristine', ngModel.$pristine);\n return value;\n });\n\n element.on('change', function(e) {\n\n // special case since the ajax handling doesn't bind to the model correctly\n // this has to do with select2 (v3.5.2) using a hidden field instead of a select for ajax\n if(avDropdown.options.query) {\n $timeout(function() {\n // look at moving this to the controller\n if(avDropdown.isRemoteMultiple()) {\n avDropdown.setRemoteViewValue(e);\n } else {\n avDropdown.setViewValue(e);\n }\n\n }, false, 0);\n }\n\n $log.info(e);\n\n });\n\n // fires ng-focus when select2-focus fires.\n element.on('select2-focus', function() {\n if(attrs.ngFocus) {\n scope.$eval(scope.$eval(attrs.ngFocus));\n }\n });\n\n // fires ng-blur when select2-blur occurs.\n element.on('select2-blur', function() {\n if(attrs.ngBlur) {\n scope.$eval(scope.$eval(attrs.ngBlur));\n }\n });\n\n // https://github.com/t0m/select2-bootstrap-css/issues/37#issuecomment-42714589\n element.on('select2-open', function () {\n // look for .has-success, .has-warning, .has-error\n // (really look for .has-* … which is good enough for the demo page, but obviously might interfere with other CSS-classes starting with \"has-\")\n if(element.parents('[class*=\"has-\"]').length) {\n\n // get all CSS-classes from the element where we found \"has-*\" and collect them in an array\n var classNames = $(this).parents('[class*=\"has-\"]')[0].className.split(/\\s+/);\n\n // go through the class names, find \"has-\"\n for(var i = 0; i < classNames.length; ++i) {\n if(classNames[i].match('has-')) {\n $('#select2-drop').addClass(classNames[i]);\n }\n }\n }\n });\n\n\n var _$render = ngModel.$render;\n ngModel.$render = function() {\n _$render();\n\n if(avDropdown.multiple) {\n avDropdown.setValues();\n }else {\n avDropdown.setValue();\n }\n\n };\n\n var win = angular.element($window);\n\n win.bind('resize', function() {\n element.select2('close');\n });\n\n attrs.$observe('disabled', function (value) {\n element.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n element.select2('readonly', !!value);\n });\n\n scope.$on('destroy', function() {\n element.select2('destroy');\n });\n\n $timeout(function() {\n element.select2(avDropdown.options);\n });\n }\n };\n });\n\n})(window);\n","/**\n * Inspiration https://github.com/mgcrea/angular-strap/blob/v0.7.8/src/directives/datepicker.js\n */\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.provider('avDatepickerConfig', function() {\n\n var config = {\n autoclose: true,\n todayHighlight: true,\n format: 'mm/dd/yyyy',\n forceParse: false\n };\n\n this.set = function(options) {\n angular.extend(config, options);\n };\n\n this.$get = function() {\n return angular.copy(config);\n };\n\n });\n\n // Options: http://bootstrap-datepicker.readthedocs.org/en/latest/options.html\n availity.ui.constant('AV_DATEPICKER', {\n CONTROLLER: '$ngModelController',\n ADD_ON_SELECTOR: '[data-toggle=\"datepicker\"]',\n OPTIONS: [\n 'autoclose',\n 'beforeShowDay',\n 'beforeShowMonth',\n 'calendarWeeks',\n 'clearBtn',\n 'toggleActive',\n 'container',\n 'daysOfWeekDisabled',\n 'datesDisabled',\n 'defaultViewDate',\n 'endDate',\n 'forceParse',\n 'format',\n 'inputs',\n 'keyboardNavigation',\n 'language',\n 'minViewMode',\n 'multidate',\n 'multidateSeparator',\n 'orientation',\n 'startDate',\n 'startView',\n 'todayBtn',\n 'todayHighlight',\n 'weekStart',\n 'showOnFocus',\n 'disableTouchKeyboard',\n 'enableOnReadonly',\n 'modelFormat'\n ],\n DEFAULTS: {\n MODELFORMAT: 'YYYY-MM-DD'\n }\n });\n\n availity.ui.controller('AvDatepickerController', function($element, $attrs, AV_DATEPICKER, $scope, avDatepickerConfig) {\n\n var self = this;\n this.options = {};\n\n this.setValue = function() {\n\n var viewValue = self.ngModel.$viewValue;\n var plugin = this.plugin();\n\n if(!viewValue || !plugin) {\n return;\n }\n\n plugin.setDate(viewValue);\n };\n\n this.setNgModel = function(ngModel) {\n this.ngModel = ngModel;\n };\n\n this.findModel = function() {\n\n var ngModel = null;\n\n var $input = $element.find('input:first').andSelf();\n if($input.length) {\n ngModel = $input.data(AV_DATEPICKER.CONTROLLER);\n this.setNgModel(ngModel);\n }\n\n return ngModel;\n };\n\n this.modelToView = function(isoWrap) {\n var viewValue = $.fn.datepicker.DPGlobal.formatDate(isoWrap, self.options.format, 'en');\n return viewValue;\n };\n\n this.wrapIsoDate = function() {\n\n var date = self.ngModel.$modelValue;\n var isoWrap;\n\n if(date !== undefined && date !== null) {\n var m = moment(date);\n isoWrap = m.isValid() ? m.toDate() : null;\n }\n\n return isoWrap;\n };\n\n this.viewToModel = function() {\n var format = $.fn.datepicker.DPGlobal.parseFormat(self.options.format);\n var utcDate = $.fn.datepicker.DPGlobal.parseDate(self.ngModel.$viewValue, format, 'en');\n\n var plugin = self.plugin();\n\n if(!plugin) {\n return;\n }\n\n // jscs: disable\n var localDate = plugin._utc_to_local(utcDate);\n // jscs: enable\n\n if(self.options.modelFormat && localDate) {\n localDate = moment(localDate).format(self.options.modelFormat);\n }\n\n return localDate;\n };\n\n this.init = function() {\n\n self.options = angular.extend({}, avDatepickerConfig);\n\n _.forEach($attrs, function(value, key) {\n if(_.contains(AV_DATEPICKER.OPTIONS, key.replace('data-', ''))) {\n self.options[key] = $scope.$eval(value);\n }\n });\n\n if(self.options.modelFormat && self.options.modelFormat.toLowerCase() === 'default') {\n self.options.modelFormat = AV_DATEPICKER.DEFAULTS.MODELFORMAT;\n }\n };\n\n this.plugin = function() {\n return $element.data('datepicker');\n };\n\n this.destroy = function() {\n var plugin = this.plugin();\n if(plugin) {\n plugin.remove();\n $element.data('datepicker', null);\n }\n };\n\n this.hide = function() {\n var plugin = this.plugin();\n if(plugin) {\n plugin.hide();\n }\n };\n });\n\n availity.ui.directive('avDatepicker', function($window, $log, AV_DATEPICKER) {\n return {\n restrict: 'A',\n require: ['ngModel', 'avDatepicker'],\n controller: 'AvDatepickerController',\n link: function(scope, element, attrs, controllers) {\n\n var ngModel = controllers[0];\n var avDatepicker = controllers[1];\n\n if(!ngModel) {\n ngModel = avDatepicker.findModel();\n if(!ngModel) {\n $log.error('avDatepicker requires ngModel');\n return;\n }\n }\n\n avDatepicker.init();\n avDatepicker.setNgModel(ngModel);\n\n element.on('changeDate', function(e) {\n $log.info('avDatepicker changeDate {0}', [e]);\n });\n\n // (view to model)\n ngModel.$parsers.push(avDatepicker.viewToModel);\n\n // (model to view) - added to end of formatters array\n // because they are processed in reverse order.\n // if the model is in Date format and send to the validation framework\n // prior to getting converted to the expected $viewValue format,\n // the validation will fail.\n ngModel.$formatters.push(avDatepicker.modelToView);\n ngModel.$formatters.push(avDatepicker.wrapIsoDate);\n\n var _$render = ngModel.$render;\n ngModel.$render = function() {\n _$render();\n avDatepicker.setValue();\n };\n\n var win = angular.element($window);\n\n win.bind('scroll', function() {\n avDatepicker.hide();\n });\n\n var target = element.siblings(AV_DATEPICKER.ADD_ON_SELECTOR);\n if(target.length) {\n target.on('click.datepicker', function() {\n if(!element.prop('disabled')) { // Hack check for IE 8\n element.focus();\n }\n });\n }\n\n scope.$on('destroy', function() {\n avDatepicker.destroy();\n if(target.length) {\n target.off('click.datepicker');\n }\n });\n\n scope.$evalAsync(function() {\n element.datepicker(avDatepicker.options);\n });\n }\n };\n });\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_UI_IDLE', {\n EVENTS: {\n OK: 'mousedown.av.idle.notifier'\n },\n TEMPLATES: {\n BASE: 'ui/idle/idle-tpl.html',\n SESSION: 'ui/idle/idle-session-tpl.html',\n WARNING: 'ui/idle/idle-warning-tpl.html'\n }\n });\n\n availity.ui.provider('avIdleNotifier', function() {\n\n var sessionTemplate;\n var warningTemplate;\n var $scope;\n\n this.setSessionTemplate = function(template) {\n sessionTemplate = template;\n };\n\n this.setWarningTemplate = function(template) {\n warningTemplate = template;\n };\n\n this.$get = function(AV_IDLE, AV_UI_IDLE, $rootScope, AvModal, $document, $timeout) {\n\n var AvIdleNotifier = function() {\n this.listeners = [];\n this.modal = null;\n };\n\n var proto = AvIdleNotifier.prototype;\n\n proto.init = function() {\n\n $scope = $rootScope.$new(true);\n $scope.idle = {};\n\n this.initListeners();\n };\n\n proto.initListeners = function() {\n\n var self = this;\n var listener = null;\n\n // ACTIVE IDLING\n listener = $rootScope.$on(AV_IDLE.EVENTS.IDLE_ACTIVE, function() {\n self.showWarning();\n });\n this.listeners.push(listener);\n\n // INACTIVE IDLING\n listener = $rootScope.$on(AV_IDLE.EVENTS.IDLE_INACTIVE, function() {\n self.hideWarning();\n });\n this.listeners.push(listener);\n\n // SESSION TIMEOUT OUT\n listener = $rootScope.$on(AV_IDLE.EVENTS.SESSION_TIMEOUT_ACTIVE, function() {\n self.showSession();\n });\n this.listeners.push(listener);\n\n };\n\n proto.destroyListeners = function() {\n // turn off each listener @see http://stackoverflow.com/a/14898795\n _.each(this.listeners, function(listener) {\n listener();\n });\n };\n\n proto.showWarning = function() {\n\n var self = this;\n\n if(this.modal !== null) {\n return;\n }\n\n $scope = $rootScope.$new(true);\n $scope.idle = {};\n $scope.idle.template = AV_UI_IDLE.TEMPLATES.WARNING;\n\n this.modal = new AvModal({\n show: true,\n scope: $scope,\n backdrop: 'static',\n templateUrl: AV_UI_IDLE.TEMPLATES.BASE\n });\n\n $document.find('body').on(AV_UI_IDLE.EVENTS.OK, function() {\n self.hideWarning();\n });\n\n };\n\n proto.hideWarning = function() {\n if(this.modal) {\n this.disableBackDrop();\n this.modal.hide();\n }\n\n this.modal = null;\n };\n\n proto.disableBackDrop = function() {\n $document.find('body').off(AV_UI_IDLE.EVENTS.OK);\n };\n\n proto.showSession = function() {\n var self = this;\n this.disableBackDrop();\n\n $timeout(function() {\n $scope.idle.template = AV_UI_IDLE.TEMPLATES.SESSION;\n $scope.idle.onSessionTimeout = _.bind(self.onSessionTimeout, self);\n }, 0, true);\n\n };\n\n proto.onSessionTimeout = function() {\n $rootScope.$broadcast(AV_IDLE.EVENTS.SESSION_TIMEOUT_REDIRECT);\n };\n\n return new AvIdleNotifier();\n\n };\n\n });\n\n availity.ui.run(function(avIdleNotifier) {\n avIdleNotifier.init();\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_MASK', {\n NAME: 'inputmask',\n DEFAULTS: {\n date: '99/99/9999',\n phone: '(999) 999-9999',\n SSN:'999-99-9999'\n }\n });\n\n availity.ui.directive('avMask', function($window, $log, AV_MASK) {\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function(scope, element, attrs) {\n\n var maskType = AV_MASK.DEFAULTS[attrs['avMask']];\n if(!maskType) {\n maskType = attrs['avMask'];\n }\n\n scope.$evalAsync(function() {\n element.inputmask(maskType);\n });\n\n scope.$on('$destroy', function () {\n element.inputmask('remove');\n });\n }\n };\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.controller('AvHasPermissionController', function($element) {\n\n this.onSuccess = function(isAuthorized) {\n if(isAuthorized) {\n $element.removeClass('ng-hide');\n $element.show();\n } else {\n $element.remove();\n }\n };\n\n this.onError = function() {\n $element.remove();\n };\n\n });\n\n availity.ui.directive('avHasPermission', function(avUserAuthorizations) {\n return {\n restrict: 'EA',\n controller: 'AvHasPermissionController',\n require: ['avHasPermission'],\n link: function($scope, $element, $attr, controllers) {\n\n var avHasPermission = controllers[0];\n\n $element.hide();\n\n $scope.$watch($attr.avHasPermission, function(permissions) {\n\n if(!angular.isArray(permissions)) {\n permissions = _.words('' + permissions);\n }\n\n avUserAuthorizations.isAnyAuthorized(permissions).then(avHasPermission.onSuccess, avHasPermission.onError);\n });\n }\n };\n });\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.directive('avAnalytics', function() {\n return {\n scope: {\n options: '=avAnalytics'\n },\n controller: function($scope) {\n this.getOptions = function() {\n return $scope.options;\n };\n }\n };\n });\n\n availity.ui.controller('AvAnalyticsController', function(avAnalyticsUtils, avAnalytics) {\n\n this.onEvent = function(event, element, options) {\n\n // convert the directive attributes into object with properties with sane defaults\n var properties = angular.extend(\n {\n level: 'info'\n },\n options,\n {\n event: event.type\n }\n );\n\n // If an external link is detected\n if(avAnalyticsUtils.isExternalLink(properties)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n var promise = avAnalytics.trackEvent(properties);\n promise['finally'](function() {\n if(avAnalyticsUtils.isExternalLink(properties)) {\n document.location = element.attr('href');\n }\n });\n };\n });\n\n availity.ui.directive('avAnalyticsOn', function(AV_ANALYTICS, avAnalyticsUtils) {\n return {\n restrict: 'A',\n controller: 'AvAnalyticsController',\n require: ['avAnalyticsOn','?^avAnalytics'],\n link: function(scope, element, attrs, controllers) {\n var childCtrl = controllers[0];\n var parentCtrl = {};\n var parentOptions = {};\n\n if (controllers[1]) {\n parentCtrl = controllers[1];\n parentOptions = parentCtrl.getOptions();\n }\n\n var options = angular.extend(\n {},\n parentOptions,\n avAnalyticsUtils.getProperties(attrs)\n );\n\n var eventType = attrs.avAnalyticsOn || AV_ANALYTICS.EVENTS.DEFAULT;\n\n element.on(eventType, function(event) {\n childCtrl.onEvent(event, element, options);\n });\n }\n };\n });\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.requires.push('ng.shims.placeholder');\n\n availity.ui.config(function($provide) {\n\n $provide.decorator('placeholderDirective', ['$delegate', '$log', function($delegate, $log) {\n\n var directive = $delegate[0];\n var originalLink = directive.link;\n\n var newLink = function(scope, element, attrs) {\n\n if(originalLink && _.contains(_.keys(attrs), 'avMask')) {\n $log.info('placeholder shim not running on an element due to avMask on same element');\n return;\n }else if(originalLink) {\n originalLink.apply(this, arguments);\n }\n //else originalLink doesn't exist\n };\n\n directive.compile = function() {\n return newLink;\n };\n\n return $delegate;\n }]);\n\n });\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_BREADCRUMBS', {\n\n TEMPLATE: 'ui/breadcrumbs/breadcrumbs-tpl.html'\n });\n\n function AvBreadcrumbsController($state) {\n\n this.getBreadcrumb = function(breadcrumbs, state) {\n if(!state || !state.data) {\n return;\n }\n\n var breadcrumb = state.data.breadcrumb;\n if(!breadcrumb) {\n return;\n }\n\n if(breadcrumb.parent) {\n var parentState = $state.get(breadcrumb.parent);\n\n if(parentState) {\n this.getBreadcrumb(breadcrumbs, parentState);\n }\n }\n breadcrumb.state = state.name;\n breadcrumbs.push(breadcrumb);\n };\n\n this.getBreadcrumbs = function() {\n var breadcrumbs = [];\n this.getBreadcrumb(breadcrumbs, $state.current);\n return breadcrumbs;\n };\n\n }\n\n AvBreadcrumbsController.$inject = ['$state'];\n availity.ui.controller('AvBreadcrumbsController', AvBreadcrumbsController);\n\n function avBreadcrumbs(AV_BREADCRUMBS) {\n return {\n restrict: 'EA',\n replace: true,\n templateUrl: AV_BREADCRUMBS.TEMPLATE,\n controller: 'AvBreadcrumbsController',\n link: function(scope, element, attrs, avBreadcrumbs) {\n scope.breadcrumbs = avBreadcrumbs.getBreadcrumbs();\n\n scope.$on('$stateChangeSuccess', function() {\n scope.breadcrumbs = avBreadcrumbs.getBreadcrumbs();\n });\n }\n };\n }\n\n avBreadcrumbs.$inject = ['AV_BREADCRUMBS'];\n availity.ui.directive('avBreadcrumbs', avBreadcrumbs);\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.filter('avApproximate', function() {\n var pow = Math.pow;\n var floor = Math.floor;\n var abs = Math.abs;\n var log = Math.log;\n\n function round(number, precision) {\n var prec = pow(10, precision);\n return Math.round(number * prec) / prec;\n }\n\n return function (number, precision) {\n precision = precision || 0;\n var base = floor(log(abs(number)) / log(1000));\n var unit = 'kMGTPE'[base - 1];\n return unit ? round(number / pow(1000, base), precision) + unit : (number || 0);\n };\n });\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_BADGE', {\n COLOR: null,\n DEFAULT_CLASS: 'badge',\n SHOW_WHEN_ZERO: false,\n TEMPLATE: 'ui/badge/badge-tpl.html'\n });\n\n function badgeDirective(AV_BADGE) {\n\n return {\n scope: {\n color: '@',\n count: '=avBadge',\n showWhenZero: '@'\n },\n templateUrl: AV_BADGE.TEMPLATE,\n link: function(scope, element) {\n scope.color = scope.color || AV_BADGE.COLOR;\n scope.showWhenZero = scope.showWhenZero || AV_BADGE.SHOW_WHEN_ZERO;\n\n var classes = [];\n classes.push(AV_BADGE.DEFAULT_CLASS);\n if(scope.color) {\n classes.push(scope.color);\n }\n\n element.addClass(classes.join(' '));\n }\n };\n }\n\n badgeDirective.$inject = ['AV_BADGE'];\n availity.ui.directive('avBadge', badgeDirective);\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_REMOVABLE_LABEL', {\n TEMPLATE: 'ui/labels/removable-label-tpl.html'\n });\n\n availity.ui.directive('avRemovableLabel', function(AV_REMOVABLE_LABEL) {\n return {\n templateUrl: AV_REMOVABLE_LABEL.TEMPLATE,\n transclude: true,\n scope: {\n removeValue: '=',\n onRemove: '&'\n },\n link: function(scope, element, attrs) {\n element.addClass('label-remove');\n scope.removeLabel = function() {\n if(!attrs.disabled) {\n scope.onRemove()(scope.removeValue);\n }\n };\n }\n };\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_LOADER', {\n\n TEMPLATES: {\n LOADER: 'ui/animation/loader-tpl.html'\n }\n\n });\n\n availity.ui.controller('AvLoaderController', function($element) {\n\n var self = this;\n var active;\n\n this.start = function() {\n active = true;\n this.animate();\n };\n\n this.animate = function() {\n\n $element\n .find('.loading-bullet')\n .velocity('transition.slideRightIn', { stagger: 250 })\n .velocity({ opacity: 0 }, {\n delay: 750,\n duration: 500,\n complete: function() {\n if(active) {\n setTimeout(function() {self.animate();}, 500);\n } else {\n self.endAnimation();\n }\n }\n });\n\n };\n\n this.endAnimation = function() {\n $element.find('.loading-bullet').velocity('stop', true);\n $element.removeData();\n };\n\n this.stop = function() {\n active = false;\n };\n\n });\n\n availity.ui.directive('avLoader', function(AV_LOADER) {\n return {\n restrict: 'A',\n replace: true,\n controller: 'AvLoaderController',\n require: 'avLoader',\n templateUrl: AV_LOADER.TEMPLATES.LOADER,\n link: function(scope, element, attr, avLoader) {\n\n if(!attr.delay) {\n avLoader.start();\n }\n\n scope.$on('$destroy', function() {\n avLoader.stop();\n });\n\n }\n };\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_BLOCK', {\n TEMPLATES: {\n BLOCK: 'ui/block/block-tpl.html'\n }\n });\n\n var getLoaderController = function(blockId) {\n var el = $('[data-block-ui=\"' + blockId + '\"]') || $('[block-ui=\"' + blockId + '\"]');\n if(el) {\n return el.find('[data-av-loader]').controller('avLoader');\n }\n };\n\n var triggerLoaderController = function(id, instance, fn) {\n\n var controller = instance.loaderController;\n if(!controller) {\n controller = getLoaderController(id);\n instance.loaderController = controller;\n }\n if(controller && _.isFunction(controller[fn])) {\n controller[fn]();\n }\n\n };\n\n var triggerInstance = function(id, instance, origFn, loaderFn) {\n triggerLoaderController(id, instance, loaderFn);\n origFn.apply(instance);\n };\n\n var modifyBlockInstances = function(id, instance) {\n\n var origStartFn = instance.start;\n var origStopFn = instance.stop;\n\n instance.start = function() {\n triggerInstance(id, instance, origStartFn, 'start');\n };\n\n instance.stop = function() {\n triggerInstance(id, instance, origStopFn, 'stop');\n };\n\n instance.startLoader = function() {\n triggerLoaderController(id, instance, 'start');\n };\n\n instance.avModifications = true;\n };\n\n availity.ui.run(function($injector, $log, AV_BLOCK) {\n\n try {\n\n var blockUIConfig = $injector.get('blockUIConfig');\n var blockUI = $injector.get('blockUI');\n blockUIConfig.autoBlock = false;\n blockUIConfig.delay = 0;\n blockUIConfig.templateUrl = AV_BLOCK.TEMPLATES.BLOCK;\n\n var origGetFn = blockUI.instances.get;\n blockUI.instances.get = function(id) {\n var instance = origGetFn(id);\n if(!instance.avModifications) {\n modifyBlockInstances(id, instance);\n }\n return instance;\n };\n\n } catch(e) {\n $log.warn('blockUI is required to use av block.');\n }\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n // Helper directive that hooks into block-ui's start-up lifecycle and starts the loader\n availity.ui.directive('avBlockUi', function(blockUI) {\n\n return {\n restrict: 'A',\n link: function($scope, $element, $attrs) {\n\n var blockId = $attrs.avBlockUi;\n var blockCount = $attrs.blockCount;\n var instance = blockUI.instances.get(blockId);\n if(blockCount > 0) {\n instance.startLoader();\n }\n }\n };\n\n });\n\n})(window);\n","/*\n* Inspired by https://github.com/angular-ui/bootstrap/blob/master/src/tabs/tabs.js\n*/\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_TABS', {\n TEMPLATES: {\n TABS: 'ui/tabs/tabs-tpl.html',\n TAB: 'ui/tabs/tab-tpl.html'\n }\n });\n\n function TabsController($scope) {\n\n var self = this;\n\n $scope.tabs = [];\n self.tabs = $scope.tabs;\n\n this.addTab = function(tab) {\n self.tabs.push(tab);\n\n if(self.tabs.length === 1) {\n tab.active = true;\n } else if(tab.active) {\n self.selectTab(tab);\n } else {\n tab.active = false;\n }\n };\n\n this.removeTab = function(tab) {\n var index = self.tabs.indexOf(tab);\n\n if(tab.active && self.tabs.length > 1) {\n //If this is the last tab, select the previous tab. else, the next tab.\n var newActiveIndex = index === self.tabs.length - 1 ? index - 1 : index + 1;\n self.selectTab(self.tabs[newActiveIndex]);\n }\n\n self.tabs.splice(index, 1);\n };\n\n this.selectTab = function(selectedTab) {\n angular.forEach(self.tabs, function (tab) {\n if(tab.active && tab !== selectedTab) {\n tab.active = false;\n tab.onDeselect();\n }\n });\n\n selectedTab.active = true;\n selectedTab.onSelect();\n };\n }\n\n TabsController.$inject = ['$scope'];\n availity.ui.controller('AvTabsController', TabsController);\n\n function TabsDirective(AV_TABS) {\n return {\n restrict: 'AE',\n templateUrl: AV_TABS.TEMPLATES.TABS,\n transclude: true,\n replace: true,\n controller: 'AvTabsController',\n scope: true,\n link: function(scope, element, attrs) {\n scope.justified = !!attrs.justified;\n scope.tabType = attrs.tabType;\n scope.vertical = !!attrs.vertical;\n\n if(angular.isUndefined(attrs.padContent)) {\n scope.padContent = true;\n }\n }\n };\n }\n\n TabsDirective.$inject = ['AV_TABS'];\n availity.ui.directive('avTabs', TabsDirective);\n\n function TabDirective(AV_TABS) {\n return {\n restrict: 'AE',\n templateUrl: AV_TABS.TEMPLATES.TAB,\n replace: true,\n require: '^avTabs',\n transclude: true,\n scope: {\n heading: '@',\n template: '=',\n templateUrl: '=',\n onSelect: '&select',\n onDeselect: '&deselect'\n },\n controller: function() {\n // Allow avTabs to be required by other directives\n },\n link: function(scope, element, attrs, tabsController, transclude) {\n scope.transcludeFn = transclude;\n\n tabsController.addTab(scope);\n\n scope.$on('destroy', function() {\n tabsController.removeTab(scope);\n });\n\n scope.select = function() {\n if(!scope.disabled) {\n tabsController.selectTab(scope);\n }\n };\n\n scope.$watch('active', function(active) {\n if(active) {\n tabsController.selectTab(scope);\n }\n });\n\n if(angular.isDefined(attrs.active)) {\n scope.active = attrs.active;\n\n scope.$parent.$watch(attrs.active, function(active) {\n if(active) {\n tabsController.selectTab(scope);\n }\n });\n }\n\n if(angular.isDefined(attrs.disable)) {\n scope.$parent.$watch(attrs.disable, function(disabled) {\n scope.disabled = !!disabled;\n });\n }\n }\n };\n }\n\n TabDirective.$inject = ['AV_TABS'];\n availity.ui.directive('avTab', TabDirective);\n\n function TabPaneDirective(avTemplateCache, $compile) {\n return {\n restrict: 'AE',\n require: '^avTabs',\n link: function(scope, element, attrs) {\n\n var tab = scope.$eval(attrs.avTabPane);\n\n if(angular.isDefined(tab.template) || angular.isDefined(tab.templateUrl)) {\n avTemplateCache.get(tab)\n .then(function(template) {\n element.append($compile(template)(scope));\n });\n } else {\n tab.transcludeFn(tab.$parent, function(contents) {\n angular.forEach(contents, function(node) {\n element.append(node);\n });\n });\n }\n }\n };\n }\n\n TabPaneDirective.$inject = ['avTemplateCache', '$compile'];\n availity.ui.directive('avTabPane', TabPaneDirective);\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_SCROLL_PAGINATION', {\n TEMPLATE: 'ui/scroll-pagination/scroll-pagination-tpl.html',\n DEFAULT_OPTIONS: {\n limit: 50,\n offset: 0,\n maxCached: 100,\n loadMoreText: 'Load more items',\n entryIdAttribute: 'id',\n apiParams: {},\n beforePageLoad: undefined,\n afterPageLoad: undefined\n }\n });\n\n\n availity.ui.factory('avScrollPaginationService', function($log) {\n function AvScrollPaginationService() {\n this.instances = {};\n }\n\n var proto = AvScrollPaginationService.prototype;\n\n proto.registerInstance = function(instanceInterface, id) {\n if (this.instances[id]) {\n $log.warn('Found existing instance with id ' + id);\n }\n this.instances[id] = instanceInterface;\n };\n\n proto.unregisterInstance = function(id) {\n delete this.instances[id];\n };\n\n proto.resetInstance = function(id) {\n if (this.instances[id]) {\n this.instances[id].reset();\n return true;\n }\n return false;\n };\n\n return new AvScrollPaginationService();\n });\n\n availity.ui.controller('AvScrollPaginationController', function($scope, $element, $timeout, $log, AV_SCROLL_PAGINATION, blockUI, avScrollPaginationService) {\n\n var self = this;\n\n this.buildOptions = function() {\n $scope._options = {};\n _.extend($scope._options, AV_SCROLL_PAGINATION.DEFAULT_OPTIONS, $scope.options || {});\n $scope._options.lowOffset = $scope._options.offset;\n $scope._options.highOffset = $scope._options.offset;\n };\n\n var originalEntries = angular.copy($scope.entries);\n this.buildOptions();\n\n this.updateButtonVisibilityFlags = function(data) {\n $scope.showNext = $scope._options.highOffset + data.count < data.totalCount;\n $scope.showPrev = $scope._options.lowOffset > 0;\n };\n\n this.loadEntries = function(prepend) {\n var block = blockUI.instances.get('scroll-pagination-block-' + $scope.avScrollPagination);\n block.start();\n if (_.isFunction($scope._options.beforePageLoad)) {\n $scope._options.beforePageLoad($scope._options);\n }\n var params = {};\n _.extend(params, $scope._options.apiParams, {limit: $scope._options.limit, offset: $scope._options.offset});\n $scope.apiResource.query({params: params}).then(function(response) {\n var responseData = self.getResponseData(response);\n if ($scope._options.afterPageLoad) {\n $scope._options.afterPageLoad(responseData);\n }\n if (responseData && responseData[$scope._options.resourceId]) {\n self.addEntries(responseData[$scope._options.resourceId], prepend);\n }\n self.updateButtonVisibilityFlags(responseData);\n block.stop();\n }, function() {\n $log.error('API call failed');\n block.stop();\n });\n };\n\n this.getResponseData = function(data) {\n if (data) {\n if ($scope._options.responseKey) {\n var keys = $scope._options.responseKey.split('.');\n var nestedData = data;\n var noData = false;\n _.each(keys, function(key) {\n if (!noData) {\n nestedData = nestedData[key];\n if (!nestedData) {\n noData = true;\n }\n }\n });\n return noData ? [] : nestedData;\n } else {\n return data;\n }\n }\n return [];\n };\n\n this.addEntries = function(entries, prepend) {\n var oldEntries = angular.copy($scope.entries);\n if (prepend) {\n $scope.entries.unshift.apply($scope.entries, entries);\n } else {\n $scope.entries.push.apply($scope.entries, entries);\n }\n if ($scope.entries.length > $scope._options.maxCached) {\n var diff = $scope.entries.length - $scope._options.maxCached;\n var trackedElementId;\n if (prepend) {\n $scope.entries = $scope.entries.slice(0, $scope._options.maxCached);\n $scope._options.highOffset -= diff;\n trackedElementId = oldEntries[oldEntries.length-diff-1] ? oldEntries[oldEntries.length-diff-1][$scope._options.entryIdAttribute] : undefined;\n } else {\n $scope.entries = $scope.entries.slice(diff, $scope.entries.length);\n $scope._options.lowOffset += diff;\n trackedElementId = oldEntries[diff] ? oldEntries[diff][$scope._options.entryIdAttribute] : undefined;\n }\n self.autoscroll(trackedElementId, prepend);\n }\n };\n\n this.autoscroll = function(trackedElementId, prepend) {\n if (trackedElementId) {\n var trackedElement = $element.find('#'+trackedElementId);\n var trackedElementTop = trackedElement.offset().top;\n $timeout(function() {\n var newScrollTop = $element.scrollTop() + trackedElement.offset().top - trackedElementTop;\n $element.animate({scrollTop: newScrollTop}, 0);\n }, 0, false);\n } else {\n $timeout(function() {\n if (prepend) {\n $element.animate({scrollTop: $element.prop('scrollHeight')}, 0);\n } else {\n $element.animate({scrollTop: 0}, 0);\n }\n }, 0, false);\n }\n };\n\n this.loadPrev = function() {\n $scope._options.lowOffset -= $scope._options.limit;\n $scope._options.offset = $scope._options.lowOffset;\n self.loadEntries(true);\n };\n\n this.loadNext = function() {\n $scope._options.highOffset += $scope._options.limit;\n $scope._options.offset = $scope._options.highOffset;\n self.loadEntries();\n };\n\n avScrollPaginationService.registerInstance({\n reset: function() {\n $element.animate({scrollTop: 0}, 0);\n $scope.entries = angular.copy(originalEntries);\n self.buildOptions();\n self.loadEntries();\n }},\n $scope.avScrollPagination\n );\n\n $scope.$on('$destroy', function() {\n avScrollPaginationService.unregisterInstance($scope.avScrollPagination);\n });\n\n $scope.loadPrev = self.loadPrev;\n $scope.loadNext = self.loadNext;\n\n this.loadEntries();\n });\n\n\n\n availity.ui.directive('avScrollPagination', function($log, AV_SCROLL_PAGINATION) {\n return {\n restrict: 'A',\n controller: 'AvScrollPaginationController',\n transclude: true,\n templateUrl: AV_SCROLL_PAGINATION.TEMPLATE,\n scope: {\n apiResource: '=',\n entries: '=',\n options: '=',\n avScrollPagination: '@'\n },\n link: function($scope) {\n if (!$scope.avScrollPagination) {\n $log.error('Directive must include an id');\n }\n }\n };\n });\n\n})(window);\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["availity-angular-ui.js","index.js","template.js","modal.js","form.js","field.js","popover.js","container.js","adapter-bootstrap.js","adapter.js","dropdown.js","datepicker.js","idle-notifier.js","mask.js","has-permission.js","analytics.js","placeholder.js","breadcrumbs.js","approximate.js","badge.js","removable-label.js","loader.js","block.js","block-directive.js","tabs.js","scroll-pagination.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA,ACLA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvBA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5BA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnTA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClMA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClQA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3GA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3CA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChGA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChDA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpdA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvPA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChJA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtCA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/CA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9EA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnCA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjEA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzBA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxCA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7BA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5EA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClFA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzBA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7KA;AAAA,AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"availity-angular-ui.js","sourcesContent":[null,"/*global module*/\n\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity || {};\n\n availity.MODULE_UI = 'availity.ui';\n availity.ui = angular.module(availity.MODULE_UI, ['ng', 'ngSanitize']);\n\n availity.ui.constant('AV_UI', {\n // jscs: disable\n NG_OPTIONS: /^\\s*([\\s\\S]+?)(?:\\s+as\\s+([\\s\\S]+?))?(?:\\s+group\\s+by\\s+([\\s\\S]+?))?\\s+for\\s+(?:([\\$\\w][\\$\\w]*)|(?:\\(\\s*([\\$\\w][\\$\\w]*)\\s*,\\s*([\\$\\w][\\$\\w]*)\\s*\\)))\\s+in\\s+([\\s\\S]+?)(?:\\s+track\\s+by\\s+([\\s\\S]+?))?$/\n // jscs: enable\n });\n\n if(typeof module !== 'undefined' && module.exports) {\n module.exports = availity;\n }\n\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.factory('avTemplateCache', function($q, $templateCache, $http) {\n\n return {\n\n get: function(options) {\n\n var valid = !options.template || !options.templateUrl;\n\n if(!valid) {\n throw new Error('Either options.template or options.templateUrl must be defined for avTemplateCache');\n }\n\n return options.template ? $q.when(options.template) :\n $http.get(options.templateUrl, {cache: $templateCache})\n .then(function(result) {\n return result.data;\n });\n }\n };\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_MODAL', {\n\n OPTIONS: {\n scope: null,\n templateUrl: null,\n template: null,\n id: null,\n container: null,\n\n // Bootstrap defaults\n keyboard: true,\n backdrop: true,\n show: false,\n remote: false\n },\n\n EVENTS: {\n SHOW: 'show.av.modal',\n SHOWN: 'shown.av.modal',\n HIDE: 'hide.av.modal',\n HIDDEN: 'hidden.av.modal'\n },\n\n NAMESPACE: {\n MODAL: 'bs.modal'\n },\n\n BS_EVENTS: {\n SHOW: 'show.bs.modal',\n SHOWN: 'shown.bs.modal',\n HIDE: 'hide.bs.modal',\n HIDDEN: 'hidden.bs.modal'\n },\n\n TEMPLATES: {\n MODAL: 'ui/modal/modal-tpl.html'\n }\n });\n\n availity.ui.factory('avModalManager', function() {\n\n var AvModalManager = function() {\n this.instances = [];\n };\n\n var proto = AvModalManager.prototype;\n\n proto.add = function(id) {\n this.instances.push(id);\n };\n\n proto.remove = function(id) {\n this.instances = _.without(this.instances, id);\n };\n\n proto.closeAll = function() {\n\n _.forEach(this.instances, function(id) {\n\n var $el = $('#' + id);\n\n if(!$el) {\n return;\n }\n\n var bsModal = $el.data('bs.modal');\n if(bsModal) {\n bsModal.removeBackdrop();\n bsModal.$body.removeClass('modal-open');\n bsModal.resetAdjustments();\n bsModal.resetScrollbar();\n }\n\n var avModal = $el.data('AvModal');\n if(avModal) {\n avModal.destroy();\n }\n\n });\n };\n\n return new AvModalManager();\n\n });\n\n var ModalFactory = function($rootScope, $timeout, $compile, AV_MODAL, avTemplateCache, $q, avModalManager) {\n\n var Modal = function(options) {\n\n var self = this;\n\n this.templateDefer = $q.defer();\n this.templatePromise = this.templateDefer.promise;\n\n this.options = angular.extend({}, AV_MODAL.OPTIONS, {scope: $rootScope.$new()}, options);\n\n avTemplateCache.get(options).then(function(template) {\n self.options.template = template;\n self._build();\n });\n\n };\n\n Modal.create = function(options) {\n return new Modal(options);\n };\n\n var proto = Modal.prototype;\n\n proto._build = function() {\n\n var self = this;\n\n var scope = this.options.scope;\n this.$element = angular.element(this.options.template);\n\n this._createId();\n\n this._scope();\n\n $compile(this.$element)(scope);\n\n $timeout(function() {\n self._init();\n }, 0, true);\n\n // Append to container or \n this.options.container ? this.$element.appendTo(this.options.container) : this.$element.appendTo('body');\n\n };\n\n proto._init = function() {\n\n this.$element.data('AvModal', this);\n\n this.templateDefer.resolve(true);\n\n // Initialize Bootstrap jQuery plugin\n this.$element.modal({\n 'backdrop': this.options.backdrop,\n 'keyboard': this.options.keyboard,\n 'show': this.options.show,\n 'remote': this.options.remote\n });\n\n this._listeners();\n };\n\n // Add helpers to scope so clients can call internal methods\n proto._scope = function() {\n\n var self = this;\n var scope = this.options.scope;\n\n scope.modalShow = function() {\n return self.show();\n };\n\n scope.modalToggle = function() {\n return self.toggle();\n };\n\n scope.modalHide = function() {\n return self.hide();\n };\n\n };\n\n proto._listeners = function() {\n\n var self = this;\n var scope = this.options.scope;\n var $element = this.$element;\n\n this.animationShowDefer = $q.defer();\n this.animationHideDefer = $q.defer();\n\n $element.on(AV_MODAL.BS_EVENTS.SHOW, function(event) {\n scope.$emit(AV_MODAL.EVENTS.SHOW, event, self);\n });\n\n $element.on(AV_MODAL.BS_EVENTS.SHOWN, function(event) {\n\n if(angular.isFunction(self.options.onShown)) {\n self.options.onShown();\n }\n\n self.animationShowDefer.resolve(true);\n\n scope.$emit(AV_MODAL.EVENTS.SHOWN, event, self);\n });\n\n $element.on(AV_MODAL.BS_EVENTS.HIDE, function(event) {\n scope.$emit(AV_MODAL.EVENTS.HIDE, event, self);\n });\n\n $element.on(AV_MODAL.BS_EVENTS.HIDDEN, function(event) {\n\n if(angular.isFunction(self.options.onHidden)) {\n self.options.onHidden.call(this);\n }\n\n self.animationHideDefer.resolve(true);\n scope.$emit(AV_MODAL.EVENTS.HIDDEN, event, self);\n\n scope.$evalAsync(function() {\n self.destroy();\n });\n\n });\n\n // Garbage collection\n scope.$on('$destroy', function() {\n avModalManager.remove(self._id);\n self.destroy();\n });\n\n };\n\n proto.show = function() {\n\n var self = this;\n this.animationShowDefer = $q.defer();\n\n this.templatePromise.then(function() {\n self.isShown() ? self.animationShowDefer.resolve(true) : self.$element.modal('show');\n });\n\n return this.animationShowDefer.promise;\n\n };\n\n proto.hide = function() {\n\n var self = this;\n this.animationHideDefer = $q.defer();\n\n this.templatePromise.then(function() {\n !self.isShown() ? self.animationHideDefer.resolve(true) : self.$element.modal('hide');\n });\n\n return this.animationHideDefer.promise;\n };\n\n proto.isShown = function() {\n return this.$element.data(AV_MODAL.NAMESPACE.MODAL).isShown;\n },\n\n proto.toggle = function() {\n\n var self = this;\n\n return this.templatePromise.then(function() {\n return self.isShown() ? self.hide() : self.show();\n });\n\n };\n\n proto.destroy = function() {\n\n var self = this;\n\n return this.templatePromise.then(function() {\n self.$element.data('AvModal', null);\n self.$element.remove();\n });\n\n };\n\n proto._createId = function() {\n // Create a unique id for the modal if not present or passed in via options\n var id = this.$element.attr('id');\n if(!id) {\n // Get id from options or create a unique id\n id = this.options.id ? this.options.id : availity.uuid('av-modal-id');\n this.$element.attr('id', id);\n }\n\n this._id = id;\n\n avModalManager.add(id);\n };\n\n return Modal;\n };\n\n availity.ui.factory('AvModal', ModalFactory);\n\n availity.ui.directive('avModal', function(AV_MODAL) {\n return {\n restrict: 'A',\n replace: true,\n transclude: true,\n scope: {\n size: '@'\n },\n templateUrl: AV_MODAL.TEMPLATES.MODAL\n };\n });\n\n})(window);\n","/**\n * 1. All fields should be pristine on first load\n * 2. If field is modified an invalid the field should be marked with an error\n *\n */\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.controller('avValFormController', function() {\n\n this.ngForm = null;\n this.rulesKey = null;\n this.avValOn = null;\n this.avValDebounce = null;\n this.avValInvalid = false;\n\n // Object that stores the unique id (key) and violation count (value) of all the form fields\n //\n // EX:\n //\n // {\n // avVal001: 0\n // avVal002: 2\n // avVal003: 1\n // }\n this.violations = {};\n\n this.init = function(form) {\n this.ngForm = form;\n };\n\n /**\n * Records id of the form field and number of violations\n * @param {[type]} id [description]\n * @param {[type]} count [description]\n * @return {[type]} [description]\n */\n this.record = function(id, count) {\n this.violations[id] = count;\n\n var violocationCount = _.reduce(this.violations, function(sum, num) {\n return sum + num;\n }, 0);\n\n this.ngForm.$setValidity('av', violocationCount === 0);\n };\n\n this.unrecord = function(id) {\n if(id && this.violations[id]) {\n delete this.violations[id];\n }\n };\n\n this.reset = function() {\n this.ngForm.$setPristine();\n this.ngForm.$submitted = false;\n };\n\n this.$setSubmitted = function() {\n this.ngForm.$submitted = true;\n };\n\n this.setRulesKey = function(key) {\n this.rulesKey = key;\n };\n\n });\n\n // form.$error = {};\n // form.$$success = {};\n // form.$pending = undefined;\n // form.$name = $interpolate(attrs.name || attrs.ngForm || '')($scope);\n // form.$dirty = false;\n // form.$pristine = true;\n // form.$valid = true;\n // form.$invalid = false;\n // form.$submitted = false;\n\n availity.ui.directive('avValForm', function($log, $timeout, $parse, AV_VAL, avValAdapter, $rootScope) {\n return {\n restrict: 'A',\n priority: 10,\n require: ['form', 'avValForm'],\n controller: 'avValFormController',\n compile: function() {\n return {\n pre: function(scope, iEl, iAttrs, controllers) {\n\n var ruleFn = $parse(iAttrs.avValForm);\n var rulesKey = ruleFn(scope);\n rulesKey = rulesKey || iAttrs.avValForm; // interpolated rule from scope || fixed string\n\n if(!rulesKey) {\n $log.error('avValForm requires a rules key in order to run the proper validation rules.');\n return;\n }\n\n scope.$watch(ruleFn, function(_rulesKey, _oldRulesKey) {\n if(_rulesKey) {\n avForm.setRulesKey(_rulesKey);\n\n if(_rulesKey !== _oldRulesKey) {\n $timeout(function() {\n $log.info('avValForm revalidate');\n $rootScope.$broadcast(AV_VAL.EVENTS.REVALIDATE);\n });\n }\n\n }\n\n });\n\n var ngForm = controllers[0];\n var avForm = controllers[1];\n\n // Allow form attributes to define the validation behavior of the form fields\n // inside it. If `av-val-on` or `av-val-debounce` are on the form then all form\n // fields inside the form would inherit this behavior.\n avForm.avValOn = iAttrs.avValOn || null;\n avForm.avValDebounce = iAttrs.avValDebounce || null;\n // Allows fields to update with invalid data for dirty form saving\n avForm.avValInvalid = iAttrs.avValInvalid || false;\n\n avForm.init(ngForm);\n avForm.setRulesKey(rulesKey);\n\n },\n post: function(scope, iEl, iAttrs, controllers) {\n\n iEl.attr('novalidate', 'novalidate'); // prevent HTML5 validation from kicking in\n\n // Disable ng-submit or ng-click handlers and store the function to call for submitting\n var fn;\n if(iAttrs.ngSubmit) {\n // Disable ng-submit event\n iEl.off('submit');\n fn = $parse(iAttrs.ngSubmit, /* expensiveChecks */ true);\n }else if(iAttrs.ngClick) {\n // Disable ng-click event\n iEl.off('click');\n fn = $parse(iAttrs.ngClick, /* expensiveChecks */ true);\n }\n\n var ngForm = controllers[0];\n var avForm = controllers[1];\n\n scope.$on(AV_VAL.EVENTS.RESET, function () {\n avForm.reset();\n });\n\n iEl.bind('submit', function(event) {\n\n scope.$broadcast(AV_VAL.EVENTS.SUBMITTED);\n avForm.$setSubmitted();\n\n if(ngForm.$invalid) {\n\n scope.$broadcast(AV_VAL.EVENTS.FAILED);\n\n $log.info('avValForm invalid. preventing default submit action');\n\n event.preventDefault();\n event.stopImmediatePropagation();\n scope.$broadcast(event);\n\n avValAdapter.scroll(iEl);\n return;\n }\n\n ngForm.$setPristine();\n\n if(!fn) {\n return;\n }\n\n var callback = function() {\n fn(scope, {$event:event});\n };\n\n scope.$apply(callback);\n\n });\n\n }\n };\n }\n };\n });\n\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.controller('AvValFieldController', function($element, avValAdapter, $attrs, avVal, $log, $timeout, $scope, $sniffer) {\n\n this.ngModel = null;\n this.rule = null;\n this.avValForm = null;\n this.avValInvalid = false;\n\n var self = this;\n\n var placeholder = $element[0].placeholder;\n var noEvent = {};\n\n this.createId = function() {\n this.ngModel.avId = availity.uuid('avVal');\n };\n\n this.setNgModel = function(ngModel) {\n this.ngModel = ngModel;\n };\n\n this.setRule = function(rule) {\n this.rule = rule;\n };\n\n this.avValForm = function(avValForm) {\n this.avValForm = avValForm;\n };\n\n this.updateModel = function(results) {\n\n var self = this;\n var validationKeys = [];\n\n this.ngModel.avResults = results;\n\n // set state for each violation\n angular.forEach(results.violations, function (result) {\n var key = 'av-' + result.contraintName;\n validationKeys.push(key);\n self.ngModel.$setValidity(key, result.valid);\n });\n\n // set overall state for validation state\n this.ngModel.$setValidity('av', this.ngModel.avResults.isValid);\n\n // store violations\n this.ngModel.avViolations = this.ngModel.avResults.violations;\n\n // record the id and violation count in the av-form controller. this determines if the form is\n // valid if sum of violations for all form inputs === zero\n this.avValForm.record(this.ngModel.avId, this.ngModel.avResults.violations.length);\n\n // remove violation keys that are no longer falsy\n angular.forEach(this.ngModel.$error, function(value, key) {\n\n if(_.indexOf(validationKeys, key) === -1 && key.lastIndexOf('av-', 0) === 0) {\n self.ngModel.$setValidity(key, true);\n }\n });\n };\n\n this.updateView = function() {\n if(this.ngModel.$dirty || $scope.avValShow) {\n avValAdapter.element($element, this.ngModel, this.ngModel.avResults.isValid);\n avValAdapter.message($element, this.ngModel);\n }\n };\n\n this.validate = function(value) {\n\n $log.info('validating value [' + value + ']');\n\n var rulesKey = self.avValForm.rulesKey;\n var results = avVal.validate(rulesKey, $element, value, self.rule);\n\n // validate function is called within the context of angular so fn.call and set the context\n // to \"this\"\n self.updateModel.call(self, results);\n self.updateView.call(self);\n\n return results;\n };\n\n this.validateModel = function(value) {\n\n self.validate(value, true);\n return value;\n\n };\n\n this.validateView = function(value) {\n\n var results = self.validate(value);\n\n if(self.avValForm.avValInvalid || self.avValInvalid) {\n // allows invalid data from view to update model for dirty saving\n return value;\n }\n\n // prevent invalid data from view to update model\n return results.isValid ? value : undefined;\n\n };\n\n this.onDebounce = function() {\n\n var value = $element.val().trim();\n\n if(this.isCheckbox()) {\n this.ngModel.$setViewValue($element[0].checked);\n } else if(this.isRadio()) {\n this.ngModel.$setViewValue($attrs.value);\n }else {\n this.ngModel.$setViewValue(value);\n }\n\n };\n\n this.isRadio = function() {\n return $element.is('input') && $attrs.type === 'radio';\n };\n\n this.isCheckbox = function() {\n return $element.is('input') && $attrs.type === 'checkbox';\n };\n\n this.reset = function() {\n\n var violations = this.ngModel.avResults.violations;\n violations.splice(0, violations.length);\n\n avValAdapter.message($element, this.ngModel);\n avValAdapter.reset($element);\n\n };\n\n this.event = function(event, avValDebounce) {\n\n var self = this;\n\n $element.unbind('input');\n\n var debounce;\n\n $element.on(event, function() {\n\n // https://github.com/angular/angular.js/blob/v1.2.27/src/ng/directive/input.js#L508\n if($sniffer.msie <= 11 && (event || noEvent).type === 'input' && $element[0].placeholder !== placeholder) {\n placeholder = $element[0].placeholder;\n return;\n }\n\n $timeout.cancel(debounce);\n debounce = $timeout(function() {\n $scope.$apply(function() {\n self.onDebounce();\n });\n }, avValDebounce);\n\n });\n\n };\n\n });\n\n // Events:\n //\n // click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown\n // keyup keypress submit focus blur copy cut paste\n availity.ui.directive('avValField', function($log, $timeout, avVal, avValAdapter, AV_VAL) {\n return {\n restrict: 'A',\n controller: 'AvValFieldController',\n require: ['^avValForm', 'ngModel', 'avValField'],\n scope: {\n avValDebounce: '@?',\n avValOn: '@?',\n avValShow: '=?'\n },\n link: function(scope, element, attrs, controllers) {\n\n var rule = attrs.avValField;\n var avValForm = controllers[0];\n var ngModel = controllers[1];\n var avValField = controllers[2];\n\n var avValOn = scope.avValOn || avValForm.avValOn || 'input';\n\n if(!ngModel && !rule) {\n $log.error('avValField requires ngModel and a validation rule to run.');\n return;\n }\n\n // Allows fields to update with invalid data for dirty form saving\n avValField.avValInvalid = attrs.avValInvalid || false;\n\n // CACHE THE MODEL\n avValField.setNgModel(ngModel);\n\n avValField.avValForm(avValForm);\n\n avValField.setRule(rule);\n\n avValField.createId();\n\n // DEBOUNCE\n var avValDebounce = parseInt(scope.avValDebounce || (avValForm.avValDebounce || AV_VAL.DEBOUNCE), 10);\n avValDebounce = _.isNumber(avValDebounce) ? avValDebounce : AV_VAL.DEBOUNCE;\n\n var debounceAllowed = !avValField.isRadio() && !avValField.isCheckbox() && avValOn !== 'blur';\n\n if(!debounceAllowed) {\n avValDebounce = 0;\n }\n\n // EVENT LISTENER\n avValField.event(avValOn, avValDebounce);\n\n // (view to model)\n ngModel.$parsers.push(avValField.validateView);\n\n // (model to view) - added to beginning of array because formatters\n // are processed in reverse order thus allowing the model to be transformed\n // before the validation framework check for validity.\n ngModel.$formatters.unshift(avValField.validateModel);\n\n scope.$on(AV_VAL.EVENTS.REVALIDATE, function() {\n avValField.validate(ngModel.$viewValue);\n });\n\n // SUBMITTED EVENT\n scope.$on(AV_VAL.EVENTS.SUBMITTED, function() {\n ngModel.$dirty = true;\n avValField.validate(ngModel.$viewValue);\n });\n\n // - Removes all errors on page,\n // - does not reset view or model values. This is to be handled by the app.\n scope.$on(AV_VAL.EVENTS.RESET, function () {\n avValField.reset();\n });\n\n scope.$on('$destroy', function () {\n avValForm.unrecord(ngModel.avId);\n });\n\n }\n };\n });\n\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.provider('avPopoverConfig', function() {\n\n var config = {\n showOnLoadHideDelay: 10000\n };\n\n this.set = function(options) {\n angular.extend(config, options);\n };\n\n this.$get = function() {\n return angular.copy(config);\n };\n });\n\n availity.ui.constant('AV_POPOVER', {\n NAME: 'bs.popover'\n });\n\n availity.ui.controller('AvPopoverController', function($element, $scope, AV_POPOVER, $timeout, avPopoverConfig) {\n this.options = angular.extend({}, avPopoverConfig);\n\n this.listeners = function() {\n\n var self = this;\n\n angular.forEach(['show', 'shown', 'hide', 'hidden'], function(name) {\n $element.on(name + '.bs.popover', function(ev) {\n $scope.$emit('av:popover:' + name, ev);\n });\n });\n\n $scope.$on('destroy', function() {\n self.destroy();\n });\n };\n\n this.plugin = function() {\n return $element.data(AV_POPOVER.NAME);\n };\n\n this.show = function() {\n $element.popover('show');\n };\n\n this.hide = function() {\n $element.popover('hide');\n };\n\n this.toggle = function() {\n $element.popover('toggle');\n };\n\n this.destroy = function() {\n $element.popover('destroy');\n };\n\n\n this.init = function() {\n\n this.listeners();\n\n if($scope.showOnLoad) {\n\n this.show();\n\n if($scope.delay && $scope.delay.hide) {\n $timeout(this.hide, $scope.delay.hide, false);\n return;\n }\n // If no delay is found or cannot be parsed, set a default timeout so that the popover doesn't stick around forever\n $timeout(this.hide, this.options.showOnLoadHideDelay, false);\n }\n };\n\n\n });\n\n availity.ui.directive('avPopover', function() {\n return {\n restrict: 'A',\n controller: 'AvPopoverController',\n scope: {\n showOnLoad: '=',\n delay: '='\n },\n link: function(scope, element, attrs, avPopover) {\n\n var options = {};\n\n scope.$evalAsync(function() {\n element.popover(angular.extend({}, options, {\n html: true\n }));\n avPopover.init();\n });\n }\n };\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.controller('avValContainerController', function($scope, $timeout) {\n\n this.message = function(ngModel) {\n\n var message = null;\n if(ngModel.avResults.violations.length && ngModel.avResults.violations[0].message) {\n message = ngModel.avResults.violations[0].message;\n }else {\n message = null;\n }\n\n // $timeout is needed to update the UI from $broadcast events\n $timeout(function() {\n $scope.messages.message = message;\n });\n\n };\n\n });\n\n availity.ui.directive('avValContainer', function() {\n return {\n restrict: 'A',\n controller: 'avValContainerController',\n template: '

            ',\n replace: true,\n scope: {\n\n },\n link: function(scope) {\n scope.messages = _.extend({}, scope.messages, { message: null, id: null });\n }\n };\n });\n\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_BOOTSTRAP_ADAPTER', {\n CLASSES: {\n SUCCESS: 'has-success',\n WARNING: 'has-warning',\n ERROR: 'has-error',\n FEEDBACK: 'has-feedback',\n HELP: 'help-block',\n FORM_GROUP: '.form-group:first',\n NAVBAR: 'navbar-fixed-top'\n },\n SELECTORS: {\n CONTAINER: 'container-id',\n DATA_CONTAINER: 'data-container-id'\n },\n CONTROLLER: '$avValContainerController'\n });\n\n availity.ui.factory('avValBootstrapAdapter', function(AV_BOOTSTRAP_ADAPTER, $timeout, $log) {\n\n return {\n\n element: function(element, ngModel) {\n if(ngModel.$valid) {\n element.parents(AV_BOOTSTRAP_ADAPTER.CLASSES.FORM_GROUP).removeClass(AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR);\n }else {\n element.parents(AV_BOOTSTRAP_ADAPTER.CLASSES.FORM_GROUP).addClass(AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR);\n }\n },\n\n reset: function(element) {\n element.parents(AV_BOOTSTRAP_ADAPTER.CLASSES.FORM_GROUP).removeClass(AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR);\n },\n\n message: function(element, ngModel) {\n\n var selector = [\n '.',\n AV_BOOTSTRAP_ADAPTER.CLASSES.HELP\n ].join('');\n\n var $el = $(element);\n\n var target = $el.attr(AV_BOOTSTRAP_ADAPTER.SELECTORS.CONTAINER);\n target = target || $el.attr(AV_BOOTSTRAP_ADAPTER.SELECTORS.DATA_CONTAINER);\n // default to siblings\n target = target ? $('#' + target) : $el.siblings(selector);\n\n if(target.length === 0) {\n $log.warn('avValBootstrapAdapter could not find validation container for {0}', [element]);\n return;\n }\n\n var el = target[0];\n $el = angular.element(el);\n var avValModel = $el.data(AV_BOOTSTRAP_ADAPTER.CONTROLLER); // get the av val message controller\n if(avValModel) {\n avValModel.message(ngModel);\n }\n },\n\n scroll: function(form) {\n\n // Bootstrap fixed navbars causes bad scroll-to offsets so find them all\n var navbarSelector = [\n '.',\n AV_BOOTSTRAP_ADAPTER.CLASSES.NAVBAR\n ].join('');\n\n // Add up all the heights to find the true offset\n var offset = 0;\n $(navbarSelector).each(function() {\n offset += $(this).outerHeight();\n });\n\n var selector = [\n '.',\n AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR,\n ':first'\n ].join('');\n\n var $target = $(form).find(selector);\n $timeout(function() {\n // scroll to offset top of first error minus the offset of the navbars\n $('body, html').animate({scrollTop: $target.offset().top - offset}, 'fast');\n }, 0, false);\n }\n };\n });\n\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_VAL_ADAPTER', {\n DEFAULT: 'avValBootstrapAdapter'\n });\n\n availity.ui.provider('avValAdapter', function() {\n\n var that = this;\n\n this.setAdapter = function(adapter) {\n this.adapter = adapter;\n };\n\n this.$get = function(AV_VAL_ADAPTER, $injector) {\n\n var Adapter = function() {\n var adapterName = that.adapter || AV_VAL_ADAPTER.DEFAULT;\n this.adapter = $injector.get(adapterName);\n };\n\n var proto = Adapter.prototype;\n\n proto.element = function(element, ngModel) {\n this.adapter.element(element, ngModel);\n };\n\n proto.reset = function(element) {\n this.adapter.reset(element);\n };\n\n proto.message = function(element, ngModel) {\n this.adapter.message(element, ngModel);\n },\n\n proto.scroll = function(form) {\n this.adapter.scroll(form);\n };\n\n return new Adapter();\n };\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.provider('avDropdownConfig', function() {\n var config = {\n closeOnResize: true,\n dropdownAutoWidth: true,\n minimumResultsForSearch: 5\n };\n\n this.set = function(options) {\n angular.extend(config, options);\n };\n\n this.$get = function() {\n return angular.copy(config);\n };\n });\n\n availity.ui.constant('AV_DROPDOWN', {\n OPTIONS: [\n 'width',\n 'minimumInputLength',\n 'maximumInputLength',\n 'minimumResultsForSearch',\n 'maximumSelectionSize',\n 'placeholderOption',\n 'separator',\n 'allowClear',\n 'multiple',\n 'closeOnSelect',\n 'openOnEnter',\n 'id',\n 'matcher',\n 'sortResults',\n 'formatSelection',\n 'formatResult',\n 'formatResultCssClass',\n 'formatNoMatches',\n 'formatSearching',\n 'formatAjaxError',\n 'formatInputTooShort',\n 'formatInputTooLong',\n 'formatSelectionTooBig',\n 'formatLoadMore',\n 'createSearchChoice',\n 'createSearchChoicePosition',\n 'initSelection',\n 'tokenizer',\n 'tokenSeparators',\n 'query',\n 'ajax',\n 'data',\n 'tags',\n 'containerCss',\n 'containerCssClass',\n 'dropdownCss',\n 'dropdownCssClass',\n 'dropdownAutoWidth',\n 'adaptContainerCssClass',\n 'adaptDropdownCssClass',\n 'escapeMarkup',\n 'selectOnBlur',\n 'loadMorePadding',\n 'nextSearchTerm',\n 'correlationId'\n ]\n });\n\n\n availity.ui.controller('AvDropdownController', function($element, $attrs, AV_UI, AV_DROPDOWN, avDropdownConfig, $log, $scope, $timeout, $parse) {\n\n var self = this;\n this.options = {};\n this.match = null;\n this.ngModel = null;\n\n this.init = function() {\n\n self.options = angular.extend({}, avDropdownConfig);\n\n _.forEach($attrs, function(value, key) {\n if(_.contains(AV_DROPDOWN.OPTIONS, key.replace('data-', ''))) {\n self.options[key] = $scope.$eval(value);\n }\n });\n\n if(this.isRemoteMultiple()) {\n self.options.multiple = angular.isDefined($attrs.multiple);\n }\n\n self.multiple = angular.isDefined($attrs.multiple);\n\n if(self.options.query) {\n\n self.queryFn = self.options.query;\n // Function used to query results for the search term.\n self.options.query = self.query;\n // Function used to get the id from the choice object or a string representing the key under which the id is stored.\n self.options.id = self.getId;\n }\n\n };\n\n this.isRemoteMultiple = function() {\n if(angular.isDefined($attrs.multiple) && $element.get(0).tagName.toLowerCase() === 'input') {\n return true;\n }\n return false;\n };\n\n this.setRemoteViewValue = function(e) {\n\n var values = this.ngModel.$viewValue;\n\n if(!angular.isArray(values) || !angular.isObject(values)) {\n values = [];\n }\n\n if(e.added) {\n // Adding to collection\n values.push(e.added);\n } else {\n // Removing from collection\n var index = _.findIndex(values, function(value) {\n return _.matches(e.removed)(value);\n });\n values.splice(index, 1);\n }\n\n this.ngModel.$setViewValue(values);\n\n };\n\n this.setViewValue = function(e) {\n this.ngModel.$setViewValue(e.added);\n };\n\n this.setNgModel = function(ngModel) {\n this.ngModel = ngModel;\n };\n\n this.getSelected = function(model) {\n\n if(self.options.query) {\n return 0;\n }\n\n var items = this.collection($scope);\n\n var index = _.findIndex(items, function(item) {\n if (!self.valueFn) {\n return angular.equals(item, model);\n } else {\n var locals = {};\n locals[self.valueName] = item;\n var value = self.valueFn($scope, locals);\n return angular.equals(value, model);\n }\n });\n\n return index;\n\n };\n\n // Result:\n //\n // {\n // \"code\": \"252Y00000X\",\n // \"value\": \"AGENCIES,EARLY INTERVENTION PROVIDER AGENCY,NOT APPLICABLE|Agency\",\n // \"id\": \"252Y00000X\"\n // }\n this.getId = function(result) {\n return result.id;\n };\n\n // Wrapper around the query function for Select2. When the promise resolves\n // the callback\n this.query = function(options) {\n\n self.queryFn(options).then(function(response) {\n\n // Callback function that should be called with the result object. The result object:\n //\n // result.results (object) - Array of result objects. The default renderers\n // expect objects with id and text keys. The id property is required,\n // even if custom renderers are used. The object may also contain a children\n // key if hierarchical data is displayed. The object may also contain a disabled\n // boolean property indicating whether this result can be selected.\n //\n // result.more (boolean) - true if more results are available for the current\n // search term.\n //\n // results.context (object) - A user-defined object that should be made available\n // as the context parameter to the query function on subsequent queries to load\n // more result pages for the same search term. See the description of\n // options.context parameter.\n options.callback({more: response.more, results: response.results});\n });\n };\n\n this.setValue = function() {\n\n var viewValue = self.ngModel.$viewValue;\n var selected = null;\n if(viewValue) {\n selected = this.getSelected(viewValue);\n }\n\n // var apply = scope.$evalAsync || $timeout;\n $timeout(function() {\n $element\n .select2('val', (selected === null || selected === 'undefined') ? '' : selected); // null === '' for Select2\n });\n };\n\n this.getMultiSelected = function(viewValue) {\n\n var indices = [];\n\n if($element.get(0).tagName.toLowerCase() !== 'input') {\n var options = this.collection($scope);\n\n _.each(viewValue, function(savedObject) {\n var index = _.findIndex(options, function(value) {\n var temp = angular.copy(savedObject); // remove hashkeys for comparison\n return _.matches(temp)(value);\n });\n indices.push(index);\n });\n\n } else {\n\n var inputViewValues = this.ngModel.$modelValue;\n\n _.each(inputViewValues, function(savedObject) {\n\n if(_.isUndefined(savedObject.id) ) {\n\n if(savedObject.id || savedObject[self.options.correlationId]) {\n\n savedObject.id = savedObject[self.options.correlationId];\n\n } else {\n\n throw new Error('dropdown list must have a id or a alternative value to use as a id');\n }\n\n }\n\n });\n }\n\n if(indices.length > 0) {\n viewValue = indices;\n }\n\n return viewValue;\n\n };\n\n this.setValues = function() {\n\n var viewValue = self.ngModel.$viewValue;\n\n if(!angular.isArray(viewValue)) {\n viewValue = [];\n }\n\n if(!_.isEmpty(viewValue) && _.isObject(viewValue[0])) {\n viewValue = this.getMultiSelected(viewValue);\n }\n\n $timeout(function() {\n $element\n .select2('val', viewValue);\n });\n };\n\n this.ngOptions = function() {\n\n this.match = $attrs.ngOptions.match(AV_UI.NG_OPTIONS);\n if(!this.match) {\n throw new Error('Invalid ngOptions for avDropdown');\n }\n // AV_UI.NG_OPTIONS regex will parse into arrays like below:\n //\n // 0: \"state.name for state in states\"\n // 1: \"state.name\"\n // 2: undefined\n // 3: undefined\n // 4: \"state\"\n // 5: undefined\n // 6: undefined\n // 7: \"states\"\n // 8: undefined\n //\n // 0: \"state.id as state.name for state in states\"\n // 1: \"state.id\"\n // 2: \"state.name\"\n // 3: undefined\n // 4: \"state\"\n // 5: undefined\n // 6: undefined\n // 7: \"states\"\n // 8: undefined\n //\n // 0: \"state.name for state in states track by state.id\"\n // 1: \"state.name\"\n // 2: undefined\n // 3: undefined\n // 4: \"state\"\n // 5: undefined\n // 6: undefined\n // 7: \"states\"\n // 8: \"state.id\"\n //\n // 0: \"person.fullName as (person.lastName + ', ' + person.firstName) for person in feeScheduleModel.persons\"\n // 1: \"person.fullName\"\n // 2: \"(person.lastName + ', ' + person.firstName)\"\n // 3: undefined\n // 4: \"person\"\n // 5: undefined\n // 6: undefined\n // 7: \"feeScheduleModel.persons\"\n // 8: undefined\n //\n this.displayFn = $parse(this.match[2] || this.match[1]); // this is the function to retrieve the text to show as\n this.collection = $parse(this.match[7]);\n this.valueName = this.match[4] || this.match[6];\n this.valueFn = $parse(this.match[2] ? this.match[1] : this.valueName);\n this.keyName = this.match[5];\n\n $scope.$watchCollection(this.collection, function(newVal, oldVal) {\n if(angular.equals(newVal, oldVal)) {\n return;\n }\n\n self.setValue();\n\n }, true);\n\n };\n });\n\n availity.ui.directive('avDropdown', function($timeout, $log, $window) {\n\n return {\n restrict: 'A',\n require: ['ngModel', 'avDropdown'],\n controller: 'AvDropdownController',\n link: function(scope, element, attrs, controllers) {\n var ngModel = controllers[0];\n var avDropdown = controllers[1];\n\n avDropdown.setNgModel(ngModel);\n avDropdown.init();\n\n if(attrs.ngOptions ) {\n avDropdown.ngOptions();\n }\n\n ngModel.$parsers.push(function(value) {\n var parent = element.prev();\n parent\n .toggleClass('ng-invalid', !ngModel.$valid)\n .toggleClass('ng-valid', ngModel.$valid)\n .toggleClass('ng-invalid-required', !ngModel.$valid)\n .toggleClass('ng-valid-required', ngModel.$valid)\n .toggleClass('ng-dirty', ngModel.$dirty)\n .toggleClass('ng-pristine', ngModel.$pristine);\n return value;\n });\n\n element.on('change', function(e) {\n\n // special case since the ajax handling doesn't bind to the model correctly\n // this has to do with select2 (v3.5.2) using a hidden field instead of a select for ajax\n if(avDropdown.options.query) {\n $timeout(function() {\n // look at moving this to the controller\n if(avDropdown.isRemoteMultiple()) {\n avDropdown.setRemoteViewValue(e);\n } else {\n avDropdown.setViewValue(e);\n }\n\n }, false, 0);\n }\n\n $log.info(e);\n\n });\n\n // fires ng-focus when select2-focus fires.\n element.on('select2-focus', function() {\n if(attrs.ngFocus) {\n scope.$eval(scope.$eval(attrs.ngFocus));\n }\n });\n\n // fires ng-blur when select2-blur occurs.\n element.on('select2-blur', function() {\n if(attrs.ngBlur) {\n scope.$eval(scope.$eval(attrs.ngBlur));\n }\n });\n\n // https://github.com/t0m/select2-bootstrap-css/issues/37#issuecomment-42714589\n element.on('select2-open', function () {\n // look for .has-success, .has-warning, .has-error\n // (really look for .has-* … which is good enough for the demo page, but obviously might interfere with other CSS-classes starting with \"has-\")\n if(element.parents('[class*=\"has-\"]').length) {\n\n // get all CSS-classes from the element where we found \"has-*\" and collect them in an array\n var classNames = $(this).parents('[class*=\"has-\"]')[0].className.split(/\\s+/);\n\n // go through the class names, find \"has-\"\n for(var i = 0; i < classNames.length; ++i) {\n if(classNames[i].match('has-')) {\n $('#select2-drop').addClass(classNames[i]);\n }\n }\n }\n });\n\n\n var _$render = ngModel.$render;\n ngModel.$render = function() {\n _$render();\n\n if(avDropdown.multiple) {\n avDropdown.setValues();\n }else {\n avDropdown.setValue();\n }\n\n };\n\n var win = angular.element($window);\n\n win.bind('resize', function() {\n element.select2('close');\n });\n\n attrs.$observe('disabled', function (value) {\n element.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n element.select2('readonly', !!value);\n });\n\n scope.$on('destroy', function() {\n element.select2('destroy');\n });\n\n $timeout(function() {\n element.select2(avDropdown.options);\n });\n }\n };\n });\n\n})(window);\n","/**\n * Inspiration https://github.com/mgcrea/angular-strap/blob/v0.7.8/src/directives/datepicker.js\n */\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.provider('avDatepickerConfig', function() {\n\n var config = {\n autoclose: true,\n todayHighlight: true,\n format: 'mm/dd/yyyy',\n forceParse: false\n };\n\n this.set = function(options) {\n angular.extend(config, options);\n };\n\n this.$get = function() {\n return angular.copy(config);\n };\n\n });\n\n // Options: http://bootstrap-datepicker.readthedocs.org/en/latest/options.html\n availity.ui.constant('AV_DATEPICKER', {\n CONTROLLER: '$ngModelController',\n ADD_ON_SELECTOR: '[data-toggle=\"datepicker\"]',\n OPTIONS: [\n 'autoclose',\n 'beforeShowDay',\n 'beforeShowMonth',\n 'calendarWeeks',\n 'clearBtn',\n 'toggleActive',\n 'container',\n 'daysOfWeekDisabled',\n 'datesDisabled',\n 'defaultViewDate',\n 'endDate',\n 'forceParse',\n 'format',\n 'inputs',\n 'keyboardNavigation',\n 'language',\n 'minViewMode',\n 'multidate',\n 'multidateSeparator',\n 'orientation',\n 'startDate',\n 'startView',\n 'todayBtn',\n 'todayHighlight',\n 'weekStart',\n 'showOnFocus',\n 'disableTouchKeyboard',\n 'enableOnReadonly',\n 'modelFormat'\n ],\n DEFAULTS: {\n MODELFORMAT: 'YYYY-MM-DD'\n }\n });\n\n availity.ui.controller('AvDatepickerController', function($element, $attrs, AV_DATEPICKER, $scope, avDatepickerConfig) {\n\n var self = this;\n this.options = {};\n\n this.setValue = function() {\n\n var viewValue = self.ngModel.$viewValue;\n var plugin = this.plugin();\n\n if(!viewValue || !plugin) {\n return;\n }\n\n plugin.setDate(viewValue);\n };\n\n this.setNgModel = function(ngModel) {\n this.ngModel = ngModel;\n };\n\n this.findModel = function() {\n\n var ngModel = null;\n\n var $input = $element.find('input:first').andSelf();\n if($input.length) {\n ngModel = $input.data(AV_DATEPICKER.CONTROLLER);\n this.setNgModel(ngModel);\n }\n\n return ngModel;\n };\n\n this.modelToView = function(isoWrap) {\n var viewValue = $.fn.datepicker.DPGlobal.formatDate(isoWrap, self.options.format, 'en');\n return viewValue;\n };\n\n this.wrapIsoDate = function() {\n\n var date = self.ngModel.$modelValue;\n var isoWrap;\n\n if(date !== undefined && date !== null) {\n var m = moment(date);\n isoWrap = m.isValid() ? m.toDate() : null;\n }\n\n return isoWrap;\n };\n\n this.viewToModel = function() {\n var format = $.fn.datepicker.DPGlobal.parseFormat(self.options.format);\n var utcDate = $.fn.datepicker.DPGlobal.parseDate(self.ngModel.$viewValue, format, 'en');\n\n var plugin = self.plugin();\n\n if(!plugin) {\n return;\n }\n\n // jscs: disable\n var localDate = plugin._utc_to_local(utcDate);\n // jscs: enable\n\n if(self.options.modelFormat && localDate) {\n localDate = moment(localDate).format(self.options.modelFormat);\n }\n\n return localDate;\n };\n\n this.init = function() {\n\n self.options = angular.extend({}, avDatepickerConfig);\n\n _.forEach($attrs, function(value, key) {\n if(_.contains(AV_DATEPICKER.OPTIONS, key.replace('data-', ''))) {\n self.options[key] = $scope.$eval(value);\n }\n });\n\n if(self.options.modelFormat && self.options.modelFormat.toLowerCase() === 'default') {\n self.options.modelFormat = AV_DATEPICKER.DEFAULTS.MODELFORMAT;\n }\n };\n\n this.plugin = function() {\n return $element.data('datepicker');\n };\n\n this.destroy = function() {\n var plugin = this.plugin();\n if(plugin) {\n plugin.remove();\n $element.data('datepicker', null);\n }\n };\n\n this.hide = function() {\n var plugin = this.plugin();\n if(plugin) {\n plugin.hide();\n }\n };\n });\n\n availity.ui.directive('avDatepicker', function($window, $log, AV_DATEPICKER) {\n return {\n restrict: 'A',\n require: ['ngModel', 'avDatepicker'],\n controller: 'AvDatepickerController',\n link: function(scope, element, attrs, controllers) {\n\n var ngModel = controllers[0];\n var avDatepicker = controllers[1];\n\n if(!ngModel) {\n ngModel = avDatepicker.findModel();\n if(!ngModel) {\n $log.error('avDatepicker requires ngModel');\n return;\n }\n }\n\n avDatepicker.init();\n avDatepicker.setNgModel(ngModel);\n\n element.on('changeDate', function(e) {\n $log.info('avDatepicker changeDate {0}', [e]);\n });\n\n // (view to model)\n ngModel.$parsers.push(avDatepicker.viewToModel);\n\n // (model to view) - added to end of formatters array\n // because they are processed in reverse order.\n // if the model is in Date format and send to the validation framework\n // prior to getting converted to the expected $viewValue format,\n // the validation will fail.\n ngModel.$formatters.push(avDatepicker.modelToView);\n ngModel.$formatters.push(avDatepicker.wrapIsoDate);\n\n var _$render = ngModel.$render;\n ngModel.$render = function() {\n _$render();\n avDatepicker.setValue();\n };\n\n var win = angular.element($window);\n\n win.bind('scroll', function() {\n avDatepicker.hide();\n });\n\n var target = element.siblings(AV_DATEPICKER.ADD_ON_SELECTOR);\n if(target.length) {\n target.on('click.datepicker', function() {\n if(!element.prop('disabled')) { // Hack check for IE 8\n element.focus();\n }\n });\n }\n\n scope.$on('destroy', function() {\n avDatepicker.destroy();\n if(target.length) {\n target.off('click.datepicker');\n }\n });\n\n scope.$evalAsync(function() {\n element.datepicker(avDatepicker.options);\n });\n }\n };\n });\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_UI_IDLE', {\n EVENTS: {\n OK: 'mousedown.av.idle.notifier'\n },\n TEMPLATES: {\n BASE: 'ui/idle/idle-tpl.html',\n SESSION: 'ui/idle/idle-session-tpl.html',\n WARNING: 'ui/idle/idle-warning-tpl.html'\n }\n });\n\n availity.ui.provider('avIdleNotifier', function() {\n\n var sessionTemplate;\n var warningTemplate;\n var $scope;\n\n this.setSessionTemplate = function(template) {\n sessionTemplate = template;\n };\n\n this.setWarningTemplate = function(template) {\n warningTemplate = template;\n };\n\n this.$get = function(AV_IDLE, AV_UI_IDLE, $rootScope, AvModal, $document, $timeout) {\n\n var AvIdleNotifier = function() {\n this.listeners = [];\n this.modal = null;\n };\n\n var proto = AvIdleNotifier.prototype;\n\n proto.init = function() {\n\n $scope = $rootScope.$new(true);\n $scope.idle = {};\n\n this.initListeners();\n };\n\n proto.initListeners = function() {\n\n var self = this;\n var listener = null;\n\n // ACTIVE IDLING\n listener = $rootScope.$on(AV_IDLE.EVENTS.IDLE_ACTIVE, function() {\n self.showWarning();\n });\n this.listeners.push(listener);\n\n // INACTIVE IDLING\n listener = $rootScope.$on(AV_IDLE.EVENTS.IDLE_INACTIVE, function() {\n self.hideWarning();\n });\n this.listeners.push(listener);\n\n // SESSION TIMEOUT OUT\n listener = $rootScope.$on(AV_IDLE.EVENTS.SESSION_TIMEOUT_ACTIVE, function() {\n self.showSession();\n });\n this.listeners.push(listener);\n\n };\n\n proto.destroyListeners = function() {\n // turn off each listener @see http://stackoverflow.com/a/14898795\n _.each(this.listeners, function(listener) {\n listener();\n });\n };\n\n proto.showWarning = function() {\n\n var self = this;\n\n if(this.modal !== null) {\n return;\n }\n\n $scope = $rootScope.$new(true);\n $scope.idle = {};\n $scope.idle.template = AV_UI_IDLE.TEMPLATES.WARNING;\n\n this.modal = new AvModal({\n show: true,\n scope: $scope,\n backdrop: 'static',\n templateUrl: AV_UI_IDLE.TEMPLATES.BASE\n });\n\n $document.find('body').on(AV_UI_IDLE.EVENTS.OK, function() {\n self.hideWarning();\n });\n\n };\n\n proto.hideWarning = function() {\n if(this.modal) {\n this.disableBackDrop();\n this.modal.hide();\n }\n\n this.modal = null;\n };\n\n proto.disableBackDrop = function() {\n $document.find('body').off(AV_UI_IDLE.EVENTS.OK);\n };\n\n proto.showSession = function() {\n var self = this;\n this.disableBackDrop();\n\n $timeout(function() {\n $scope.idle.template = AV_UI_IDLE.TEMPLATES.SESSION;\n $scope.idle.onSessionTimeout = _.bind(self.onSessionTimeout, self);\n }, 0, true);\n\n };\n\n proto.onSessionTimeout = function() {\n $rootScope.$broadcast(AV_IDLE.EVENTS.SESSION_TIMEOUT_REDIRECT);\n };\n\n return new AvIdleNotifier();\n\n };\n\n });\n\n availity.ui.run(function(avIdleNotifier) {\n avIdleNotifier.init();\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_MASK', {\n NAME: 'inputmask',\n DEFAULTS: {\n date: '99/99/9999',\n phone: '(999) 999-9999',\n SSN:'999-99-9999'\n }\n });\n\n availity.ui.directive('avMask', function($window, $log, AV_MASK) {\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function(scope, element, attrs) {\n\n var maskType = AV_MASK.DEFAULTS[attrs['avMask']];\n if(!maskType) {\n maskType = attrs['avMask'];\n }\n\n scope.$evalAsync(function() {\n element.inputmask(maskType);\n });\n\n scope.$on('$destroy', function () {\n element.inputmask('remove');\n });\n }\n };\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.controller('AvHasPermissionController', function($element) {\n\n this.onSuccess = function(isAuthorized) {\n if(isAuthorized) {\n $element.removeClass('ng-hide');\n $element.show();\n } else {\n $element.remove();\n }\n };\n\n this.onError = function() {\n $element.remove();\n };\n\n });\n\n availity.ui.directive('avHasPermission', function(avUserAuthorizations) {\n return {\n restrict: 'EA',\n controller: 'AvHasPermissionController',\n require: ['avHasPermission'],\n link: function($scope, $element, $attr, controllers) {\n\n var avHasPermission = controllers[0];\n\n $element.hide();\n\n $scope.$watch($attr.avHasPermission, function(permissions) {\n\n if(!angular.isArray(permissions)) {\n permissions = _.words('' + permissions);\n }\n\n avUserAuthorizations.isAnyAuthorized(permissions).then(avHasPermission.onSuccess, avHasPermission.onError);\n });\n }\n };\n });\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.directive('avAnalytics', function() {\n return {\n scope: {\n options: '=avAnalytics'\n },\n controller: function($scope) {\n this.getOptions = function() {\n return $scope.options;\n };\n }\n };\n });\n\n availity.ui.controller('AvAnalyticsController', function(avAnalyticsUtils, avAnalytics) {\n\n this.onEvent = function(event, element, options) {\n\n // convert the directive attributes into object with properties with sane defaults\n var properties = angular.extend(\n {\n level: 'info'\n },\n options,\n {\n event: event.type\n }\n );\n\n // If an external link is detected\n if(avAnalyticsUtils.isExternalLink(properties)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n var promise = avAnalytics.trackEvent(properties);\n promise['finally'](function() {\n if(avAnalyticsUtils.isExternalLink(properties)) {\n document.location = element.attr('href');\n }\n });\n };\n });\n\n availity.ui.directive('avAnalyticsOn', function(AV_ANALYTICS, avAnalyticsUtils) {\n return {\n restrict: 'A',\n controller: 'AvAnalyticsController',\n require: ['avAnalyticsOn','?^avAnalytics'],\n link: function(scope, element, attrs, controllers) {\n var childCtrl = controllers[0];\n var parentCtrl = {};\n var parentOptions = {};\n\n if (controllers[1]) {\n parentCtrl = controllers[1];\n parentOptions = parentCtrl.getOptions();\n }\n\n var options = angular.extend(\n {},\n parentOptions,\n avAnalyticsUtils.getProperties(attrs)\n );\n\n var eventType = attrs.avAnalyticsOn || AV_ANALYTICS.EVENTS.DEFAULT;\n\n element.on(eventType, function(event) {\n childCtrl.onEvent(event, element, options);\n });\n }\n };\n });\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.requires.push('ng.shims.placeholder');\n\n availity.ui.config(function($provide) {\n\n $provide.decorator('placeholderDirective', ['$delegate', '$log', function($delegate, $log) {\n\n var directive = $delegate[0];\n var originalLink = directive.link;\n\n var newLink = function(scope, element, attrs) {\n\n if(originalLink && _.contains(_.keys(attrs), 'avMask')) {\n $log.info('placeholder shim not running on an element due to avMask on same element');\n return;\n }else if(originalLink) {\n originalLink.apply(this, arguments);\n }\n //else originalLink doesn't exist\n };\n\n directive.compile = function() {\n return newLink;\n };\n\n return $delegate;\n }]);\n\n });\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_BREADCRUMBS', {\n\n TEMPLATE: 'ui/breadcrumbs/breadcrumbs-tpl.html'\n });\n\n function AvBreadcrumbsController($state) {\n\n this.getBreadcrumb = function(breadcrumbs, state) {\n if(!state || !state.data) {\n return;\n }\n\n var breadcrumb = state.data.breadcrumb;\n if(!breadcrumb) {\n return;\n }\n\n if(breadcrumb.parent) {\n var parentState = $state.get(breadcrumb.parent);\n\n if(parentState) {\n this.getBreadcrumb(breadcrumbs, parentState);\n }\n }\n breadcrumb.state = state.name;\n breadcrumbs.push(breadcrumb);\n };\n\n this.getBreadcrumbs = function() {\n var breadcrumbs = [];\n this.getBreadcrumb(breadcrumbs, $state.current);\n return breadcrumbs;\n };\n\n }\n\n AvBreadcrumbsController.$inject = ['$state'];\n availity.ui.controller('AvBreadcrumbsController', AvBreadcrumbsController);\n\n function avBreadcrumbs(AV_BREADCRUMBS) {\n return {\n restrict: 'EA',\n replace: true,\n templateUrl: AV_BREADCRUMBS.TEMPLATE,\n controller: 'AvBreadcrumbsController',\n link: function(scope, element, attrs, avBreadcrumbs) {\n scope.breadcrumbs = avBreadcrumbs.getBreadcrumbs();\n\n scope.$on('$stateChangeSuccess', function() {\n scope.breadcrumbs = avBreadcrumbs.getBreadcrumbs();\n });\n }\n };\n }\n\n avBreadcrumbs.$inject = ['AV_BREADCRUMBS'];\n availity.ui.directive('avBreadcrumbs', avBreadcrumbs);\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.filter('avApproximate', function() {\n var pow = Math.pow;\n var floor = Math.floor;\n var abs = Math.abs;\n var log = Math.log;\n\n function round(number, precision) {\n var prec = pow(10, precision);\n return Math.round(number * prec) / prec;\n }\n\n return function (number, precision) {\n precision = precision || 0;\n var base = floor(log(abs(number)) / log(1000));\n var unit = 'kMGTPE'[base - 1];\n return unit ? round(number / pow(1000, base), precision) + unit : (number || 0);\n };\n });\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_BADGE', {\n COLOR: null,\n DEFAULT_CLASS: 'badge',\n SHOW_WHEN_ZERO: false,\n TEMPLATE: 'ui/badge/badge-tpl.html'\n });\n\n function badgeDirective(AV_BADGE) {\n\n return {\n scope: {\n color: '@',\n count: '=avBadge',\n showWhenZero: '@'\n },\n templateUrl: AV_BADGE.TEMPLATE,\n link: function(scope, element) {\n scope.color = scope.color || AV_BADGE.COLOR;\n scope.showWhenZero = scope.showWhenZero || AV_BADGE.SHOW_WHEN_ZERO;\n\n var classes = [];\n classes.push(AV_BADGE.DEFAULT_CLASS);\n if(scope.color) {\n classes.push(scope.color);\n }\n\n element.addClass(classes.join(' '));\n }\n };\n }\n\n badgeDirective.$inject = ['AV_BADGE'];\n availity.ui.directive('avBadge', badgeDirective);\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_REMOVABLE_LABEL', {\n TEMPLATE: 'ui/labels/removable-label-tpl.html'\n });\n\n availity.ui.directive('avRemovableLabel', function(AV_REMOVABLE_LABEL) {\n return {\n templateUrl: AV_REMOVABLE_LABEL.TEMPLATE,\n transclude: true,\n scope: {\n removeValue: '=',\n onRemove: '&'\n },\n link: function(scope, element, attrs) {\n element.addClass('label-remove');\n scope.removeLabel = function() {\n if(!attrs.disabled) {\n scope.onRemove()(scope.removeValue);\n }\n };\n }\n };\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_LOADER', {\n\n TEMPLATES: {\n LOADER: 'ui/animation/loader-tpl.html'\n }\n\n });\n\n availity.ui.controller('AvLoaderController', function($element) {\n\n var self = this;\n var active;\n\n this.start = function() {\n active = true;\n this.animate();\n };\n\n this.animate = function() {\n\n $element\n .find('.loading-bullet')\n .velocity('transition.slideRightIn', { stagger: 250 })\n .velocity({ opacity: 0 }, {\n delay: 750,\n duration: 500,\n complete: function() {\n if(active) {\n setTimeout(function() {self.animate();}, 500);\n } else {\n self.endAnimation();\n }\n }\n });\n\n };\n\n this.endAnimation = function() {\n $element.find('.loading-bullet').velocity('stop', true);\n $element.removeData();\n };\n\n this.stop = function() {\n active = false;\n };\n\n });\n\n availity.ui.directive('avLoader', function(AV_LOADER) {\n return {\n restrict: 'A',\n replace: true,\n controller: 'AvLoaderController',\n require: 'avLoader',\n templateUrl: AV_LOADER.TEMPLATES.LOADER,\n link: function(scope, element, attr, avLoader) {\n\n if(!attr.delay) {\n avLoader.start();\n }\n\n scope.$on('$destroy', function() {\n avLoader.stop();\n });\n\n }\n };\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_BLOCK', {\n TEMPLATES: {\n BLOCK: 'ui/block/block-tpl.html'\n }\n });\n\n var getLoaderController = function(blockId) {\n var el = $('[data-block-ui=\"' + blockId + '\"]') || $('[block-ui=\"' + blockId + '\"]');\n if(el) {\n return el.find('[data-av-loader]').controller('avLoader');\n }\n };\n\n var triggerLoaderController = function(id, instance, fn) {\n\n var controller = instance.loaderController;\n if(!controller) {\n controller = getLoaderController(id);\n instance.loaderController = controller;\n }\n if(controller && _.isFunction(controller[fn])) {\n controller[fn]();\n }\n\n };\n\n var triggerInstance = function(id, instance, origFn, loaderFn) {\n triggerLoaderController(id, instance, loaderFn);\n origFn.apply(instance);\n };\n\n var modifyBlockInstances = function(id, instance) {\n\n var origStartFn = instance.start;\n var origStopFn = instance.stop;\n\n instance.start = function() {\n triggerInstance(id, instance, origStartFn, 'start');\n };\n\n instance.stop = function() {\n triggerInstance(id, instance, origStopFn, 'stop');\n };\n\n instance.startLoader = function() {\n triggerLoaderController(id, instance, 'start');\n };\n\n instance.avModifications = true;\n };\n\n availity.ui.run(function($injector, $log, AV_BLOCK) {\n\n try {\n\n var blockUIConfig = $injector.get('blockUIConfig');\n var blockUI = $injector.get('blockUI');\n blockUIConfig.autoBlock = false;\n blockUIConfig.delay = 0;\n blockUIConfig.templateUrl = AV_BLOCK.TEMPLATES.BLOCK;\n\n var origGetFn = blockUI.instances.get;\n blockUI.instances.get = function(id) {\n var instance = origGetFn(id);\n if(!instance.avModifications) {\n modifyBlockInstances(id, instance);\n }\n return instance;\n };\n\n } catch(e) {\n $log.warn('blockUI is required to use av block.');\n }\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n // Helper directive that hooks into block-ui's start-up lifecycle and starts the loader\n availity.ui.directive('avBlockUi', function(blockUI) {\n\n return {\n restrict: 'A',\n link: function($scope, $element, $attrs) {\n\n var blockId = $attrs.avBlockUi;\n var blockCount = $attrs.blockCount;\n var instance = blockUI.instances.get(blockId);\n if(blockCount > 0) {\n instance.startLoader();\n }\n }\n };\n\n });\n\n})(window);\n","/*\n* Inspired by https://github.com/angular-ui/bootstrap/blob/master/src/tabs/tabs.js\n*/\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_TABS', {\n TEMPLATES: {\n TABS: 'ui/tabs/tabs-tpl.html',\n TAB: 'ui/tabs/tab-tpl.html'\n }\n });\n\n function TabsController($scope) {\n\n var self = this;\n\n $scope.tabs = [];\n self.tabs = $scope.tabs;\n\n this.addTab = function(tab) {\n self.tabs.push(tab);\n\n if(self.tabs.length === 1) {\n tab.active = true;\n } else if(tab.active) {\n self.selectTab(tab);\n } else {\n tab.active = false;\n }\n };\n\n this.removeTab = function(tab) {\n var index = self.tabs.indexOf(tab);\n\n if(tab.active && self.tabs.length > 1) {\n //If this is the last tab, select the previous tab. else, the next tab.\n var newActiveIndex = index === self.tabs.length - 1 ? index - 1 : index + 1;\n self.selectTab(self.tabs[newActiveIndex]);\n }\n\n self.tabs.splice(index, 1);\n };\n\n this.selectTab = function(selectedTab) {\n angular.forEach(self.tabs, function (tab) {\n if(tab.active && tab !== selectedTab) {\n tab.active = false;\n tab.onDeselect();\n }\n });\n\n selectedTab.active = true;\n selectedTab.onSelect();\n };\n }\n\n TabsController.$inject = ['$scope'];\n availity.ui.controller('AvTabsController', TabsController);\n\n function TabsDirective(AV_TABS) {\n return {\n restrict: 'AE',\n templateUrl: AV_TABS.TEMPLATES.TABS,\n transclude: true,\n replace: true,\n controller: 'AvTabsController',\n scope: true,\n link: function(scope, element, attrs) {\n scope.justified = !!attrs.justified;\n scope.tabType = attrs.tabType;\n scope.vertical = !!attrs.vertical;\n\n if(angular.isUndefined(attrs.padContent)) {\n scope.padContent = true;\n }\n }\n };\n }\n\n TabsDirective.$inject = ['AV_TABS'];\n availity.ui.directive('avTabs', TabsDirective);\n\n function TabDirective(AV_TABS) {\n return {\n restrict: 'AE',\n templateUrl: AV_TABS.TEMPLATES.TAB,\n replace: true,\n require: '^avTabs',\n transclude: true,\n scope: {\n heading: '@',\n template: '=',\n templateUrl: '=',\n onSelect: '&select',\n onDeselect: '&deselect'\n },\n controller: function() {\n // Allow avTabs to be required by other directives\n },\n link: function(scope, element, attrs, tabsController, transclude) {\n scope.transcludeFn = transclude;\n\n tabsController.addTab(scope);\n\n scope.$on('destroy', function() {\n tabsController.removeTab(scope);\n });\n\n scope.select = function() {\n if(!scope.disabled) {\n tabsController.selectTab(scope);\n }\n };\n\n scope.$watch('active', function(active) {\n if(active) {\n tabsController.selectTab(scope);\n }\n });\n\n if(angular.isDefined(attrs.active)) {\n scope.active = attrs.active;\n\n scope.$parent.$watch(attrs.active, function(active) {\n if(active) {\n tabsController.selectTab(scope);\n }\n });\n }\n\n if(angular.isDefined(attrs.disable)) {\n scope.$parent.$watch(attrs.disable, function(disabled) {\n scope.disabled = !!disabled;\n });\n }\n }\n };\n }\n\n TabDirective.$inject = ['AV_TABS'];\n availity.ui.directive('avTab', TabDirective);\n\n function TabPaneDirective(avTemplateCache, $compile) {\n return {\n restrict: 'AE',\n require: '^avTabs',\n link: function(scope, element, attrs) {\n\n var tab = scope.$eval(attrs.avTabPane);\n\n if(angular.isDefined(tab.template) || angular.isDefined(tab.templateUrl)) {\n avTemplateCache.get(tab)\n .then(function(template) {\n element.append($compile(template)(scope));\n });\n } else {\n tab.transcludeFn(tab.$parent, function(contents) {\n angular.forEach(contents, function(node) {\n element.append(node);\n });\n });\n }\n }\n };\n }\n\n TabPaneDirective.$inject = ['avTemplateCache', '$compile'];\n availity.ui.directive('avTabPane', TabPaneDirective);\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_SCROLL_PAGINATION', {\n TEMPLATE: 'ui/scroll-pagination/scroll-pagination-tpl.html',\n DEFAULT_OPTIONS: {\n limit: 50,\n offset: 0,\n maxCached: 100,\n loadMoreText: 'Load more items',\n entryIdAttribute: 'id',\n apiParams: {},\n beforePageLoad: undefined,\n afterPageLoad: undefined\n }\n });\n\n\n availity.ui.factory('avScrollPaginationService', function($log) {\n function AvScrollPaginationService() {\n this.instances = {};\n }\n\n var proto = AvScrollPaginationService.prototype;\n\n proto.registerInstance = function(instanceInterface, id) {\n if (this.instances[id]) {\n $log.warn('Found existing instance with id ' + id);\n }\n this.instances[id] = instanceInterface;\n };\n\n proto.unregisterInstance = function(id) {\n delete this.instances[id];\n };\n\n proto.resetInstance = function(id) {\n if (this.instances[id]) {\n this.instances[id].reset();\n return true;\n }\n return false;\n };\n\n return new AvScrollPaginationService();\n });\n\n availity.ui.controller('AvScrollPaginationController', function($scope, $element, $timeout, $log, AV_SCROLL_PAGINATION, blockUI, avScrollPaginationService) {\n\n var self = this;\n\n this.buildOptions = function() {\n $scope._options = {};\n _.extend($scope._options, AV_SCROLL_PAGINATION.DEFAULT_OPTIONS, $scope.options || {});\n $scope._options.lowOffset = $scope._options.offset;\n $scope._options.highOffset = $scope._options.offset;\n };\n\n var originalEntries = angular.copy($scope.entries);\n this.buildOptions();\n\n this.updateButtonVisibilityFlags = function(data) {\n $scope.showNext = $scope._options.highOffset + data.count < data.totalCount;\n $scope.showPrev = $scope._options.lowOffset > 0;\n };\n\n this.loadEntries = function(prepend) {\n var block = blockUI.instances.get('scroll-pagination-block-' + $scope.avScrollPagination);\n block.start();\n if (_.isFunction($scope._options.beforePageLoad)) {\n $scope._options.beforePageLoad($scope._options);\n }\n var params = {};\n _.extend(params, $scope._options.apiParams, {limit: $scope._options.limit, offset: $scope._options.offset});\n $scope.apiResource.query({params: params}).then(function(response) {\n var responseData = self.getResponseData(response);\n if ($scope._options.afterPageLoad) {\n $scope._options.afterPageLoad(responseData);\n }\n if (responseData && responseData[$scope._options.resourceId]) {\n self.addEntries(responseData[$scope._options.resourceId], prepend);\n }\n self.updateButtonVisibilityFlags(responseData);\n block.stop();\n }, function() {\n $log.error('API call failed');\n block.stop();\n });\n };\n\n this.getResponseData = function(data) {\n if (data) {\n if ($scope._options.responseKey) {\n var keys = $scope._options.responseKey.split('.');\n var nestedData = data;\n var noData = false;\n _.each(keys, function(key) {\n if (!noData) {\n nestedData = nestedData[key];\n if (!nestedData) {\n noData = true;\n }\n }\n });\n return noData ? [] : nestedData;\n } else {\n return data;\n }\n }\n return [];\n };\n\n this.addEntries = function(entries, prepend) {\n var oldEntries = angular.copy($scope.entries);\n if (prepend) {\n $scope.entries.unshift.apply($scope.entries, entries);\n } else {\n $scope.entries.push.apply($scope.entries, entries);\n }\n if ($scope.entries.length > $scope._options.maxCached) {\n var diff = $scope.entries.length - $scope._options.maxCached;\n var trackedElementId;\n if (prepend) {\n $scope.entries = $scope.entries.slice(0, $scope._options.maxCached);\n $scope._options.highOffset -= diff;\n trackedElementId = oldEntries[oldEntries.length-diff-1] ? oldEntries[oldEntries.length-diff-1][$scope._options.entryIdAttribute] : undefined;\n } else {\n $scope.entries = $scope.entries.slice(diff, $scope.entries.length);\n $scope._options.lowOffset += diff;\n trackedElementId = oldEntries[diff] ? oldEntries[diff][$scope._options.entryIdAttribute] : undefined;\n }\n self.autoscroll(trackedElementId, prepend);\n }\n };\n\n this.autoscroll = function(trackedElementId, prepend) {\n if (trackedElementId) {\n var trackedElement = $element.find('#'+trackedElementId);\n var trackedElementTop = trackedElement.offset().top;\n $timeout(function() {\n var newScrollTop = $element.scrollTop() + trackedElement.offset().top - trackedElementTop;\n $element.animate({scrollTop: newScrollTop}, 0);\n }, 0, false);\n } else {\n $timeout(function() {\n if (prepend) {\n $element.animate({scrollTop: $element.prop('scrollHeight')}, 0);\n } else {\n $element.animate({scrollTop: 0}, 0);\n }\n }, 0, false);\n }\n };\n\n this.loadPrev = function() {\n $scope._options.lowOffset -= $scope._options.limit;\n $scope._options.offset = $scope._options.lowOffset;\n self.loadEntries(true);\n };\n\n this.loadNext = function() {\n $scope._options.highOffset += $scope._options.limit;\n $scope._options.offset = $scope._options.highOffset;\n self.loadEntries();\n };\n\n avScrollPaginationService.registerInstance({\n reset: function() {\n $element.animate({scrollTop: 0}, 0);\n $scope.entries = angular.copy(originalEntries);\n self.buildOptions();\n self.loadEntries();\n }},\n $scope.avScrollPagination\n );\n\n $scope.$on('$destroy', function() {\n avScrollPaginationService.unregisterInstance($scope.avScrollPagination);\n });\n\n $scope.loadPrev = self.loadPrev;\n $scope.loadNext = self.loadNext;\n\n this.loadEntries();\n });\n\n\n\n availity.ui.directive('avScrollPagination', function($log, AV_SCROLL_PAGINATION) {\n return {\n restrict: 'A',\n controller: 'AvScrollPaginationController',\n transclude: true,\n templateUrl: AV_SCROLL_PAGINATION.TEMPLATE,\n scope: {\n apiResource: '=',\n entries: '=',\n options: '=',\n avScrollPagination: '@'\n },\n link: function($scope) {\n if (!$scope.avScrollPagination) {\n $log.error('Directive must include an id');\n }\n }\n };\n });\n\n})(window);\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/maps/availity-angular-ui.min.js.map b/dist/maps/availity-angular-ui.min.js.map index 0c3a7fa9..52a3319d 100644 --- a/dist/maps/availity-angular-ui.min.js.map +++ b/dist/maps/availity-angular-ui.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["availity-angular-ui.js","/source/index.js","/source/template.js","/source/modal.js","/source/form.js","/source/field.js","/source/popover.js","/source/container.js","/source/adapter-bootstrap.js","/source/adapter.js","/source/dropdown.js","/source/datepicker.js","/source/idle-notifier.js","/source/mask.js","/source/has-permission.js","/source/analytics.js","/source/placeholder.js","/source/breadcrumbs.js","/source/approximate.js","/source/badge.js","/source/removable-label.js","/source/loader.js","/source/block.js","/source/block-directive.js","/source/tabs.js","/source/scroll-pagination.js"],"names":["root","availity","MODULE_UI","ui","angular","module","constant","NG_OPTIONS","exports","window","factory","$q","$templateCache","$http","get","options","valid","template","templateUrl","Error","when","cache","then","result","data","OPTIONS","scope","id","container","keyboard","backdrop","show","remote","EVENTS","SHOW","SHOWN","HIDE","HIDDEN","NAMESPACE","MODAL","BS_EVENTS","TEMPLATES","AvModalManager","this","instances","proto","prototype","add","push","remove","_","without","closeAll","forEach","$el","$","bsModal","removeBackdrop","$body","removeClass","resetAdjustments","resetScrollbar","avModal","destroy","ModalFactory","$rootScope","$timeout","$compile","AV_MODAL","avTemplateCache","avModalManager","Modal","self","templateDefer","defer","templatePromise","promise","extend","$new","_build","create","$element","element","_createId","_scope","_init","appendTo","resolve","modal","_listeners","modalShow","modalToggle","toggle","modalHide","hide","animationShowDefer","animationHideDefer","on","event","$emit","isFunction","onShown","onHidden","call","$evalAsync","$on","_id","isShown","attr","uuid","directive","restrict","replace","transclude","size","controller","ngForm","rulesKey","avValOn","avValDebounce","avValInvalid","violations","init","form","record","count","violocationCount","reduce","sum","num","$setValidity","unrecord","reset","$setPristine","$submitted","$setSubmitted","setRulesKey","key","$log","$parse","AV_VAL","avValAdapter","priority","require","compile","pre","iEl","iAttrs","controllers","ruleFn","avValForm","error","$watch","_rulesKey","_oldRulesKey","avForm","info","$broadcast","REVALIDATE","post","fn","ngSubmit","off","ngClick","RESET","bind","SUBMITTED","$invalid","FAILED","preventDefault","stopImmediatePropagation","scroll","callback","$event","$apply","$attrs","avVal","$scope","$sniffer","ngModel","rule","placeholder","noEvent","createId","avId","setNgModel","setRule","updateModel","results","validationKeys","avResults","contraintName","isValid","avViolations","length","$error","value","indexOf","lastIndexOf","updateView","$dirty","avValShow","message","validate","validateModel","validateView","undefined","onDebounce","val","trim","isCheckbox","$setViewValue","checked","isRadio","is","type","splice","unbind","debounce","msie","cancel","link","attrs","avValField","parseInt","DEBOUNCE","isNumber","debounceAllowed","$parsers","$formatters","unshift","$viewValue","provider","config","showOnLoadHideDelay","set","$get","copy","NAME","AV_POPOVER","avPopoverConfig","listeners","name","ev","plugin","popover","showOnLoad","delay","avPopover","html","messages","CLASSES","SUCCESS","WARNING","ERROR","FEEDBACK","HELP","FORM_GROUP","NAVBAR","SELECTORS","CONTAINER","DATA_CONTAINER","CONTROLLER","AV_BOOTSTRAP_ADAPTER","$valid","parents","addClass","selector","join","target","siblings","warn","el","avValModel","navbarSelector","offset","each","outerHeight","$target","find","animate","scrollTop","top","DEFAULT","that","setAdapter","adapter","AV_VAL_ADAPTER","$injector","Adapter","adapterName","closeOnResize","dropdownAutoWidth","minimumResultsForSearch","AV_UI","AV_DROPDOWN","avDropdownConfig","match","contains","$eval","isRemoteMultiple","multiple","isDefined","query","queryFn","getId","tagName","toLowerCase","setRemoteViewValue","e","values","isArray","isObject","added","index","findIndex","matches","removed","setViewValue","getSelected","model","items","collection","item","equals","response","more","setValue","viewValue","selected","select2","getMultiSelected","indices","savedObject","temp","inputViewValues","$modelValue","isUndefined","correlationId","setValues","isEmpty","ngOptions","displayFn","valueName","valueFn","keyName","$watchCollection","newVal","oldVal","$window","avDropdown","parent","prev","toggleClass","$pristine","ngFocus","ngBlur","classNames","className","split","i","_$render","$render","win","$observe","autoclose","todayHighlight","format","forceParse","ADD_ON_SELECTOR","DEFAULTS","MODELFORMAT","AV_DATEPICKER","avDatepickerConfig","setDate","findModel","$input","andSelf","modelToView","isoWrap","datepicker","DPGlobal","formatDate","wrapIsoDate","date","m","moment","toDate","viewToModel","parseFormat","utcDate","parseDate","localDate","_utc_to_local","modelFormat","avDatepicker","prop","focus","OK","BASE","SESSION","sessionTemplate","warningTemplate","setSessionTemplate","setWarningTemplate","AV_IDLE","AV_UI_IDLE","AvModal","$document","AvIdleNotifier","idle","initListeners","listener","IDLE_ACTIVE","showWarning","IDLE_INACTIVE","hideWarning","SESSION_TIMEOUT_ACTIVE","showSession","destroyListeners","disableBackDrop","onSessionTimeout","SESSION_TIMEOUT_REDIRECT","run","avIdleNotifier","phone","SSN","AV_MASK","maskType","inputmask","onSuccess","isAuthorized","onError","avUserAuthorizations","$attr","avHasPermission","permissions","words","isAnyAuthorized","getOptions","avAnalyticsUtils","avAnalytics","onEvent","properties","level","isExternalLink","stopPropagation","trackEvent","document","location","AV_ANALYTICS","childCtrl","parentCtrl","parentOptions","getProperties","eventType","avAnalyticsOn","requires","$provide","decorator","$delegate","originalLink","newLink","keys","apply","arguments","TEMPLATE","AvBreadcrumbsController","$state","getBreadcrumb","breadcrumbs","state","breadcrumb","parentState","getBreadcrumbs","current","$inject","avBreadcrumbs","AV_BREADCRUMBS","filter","pow","Math","floor","abs","log","round","number","precision","prec","base","unit","COLOR","DEFAULT_CLASS","SHOW_WHEN_ZERO","badgeDirective","AV_BADGE","color","showWhenZero","classes","AV_REMOVABLE_LABEL","removeValue","onRemove","removeLabel","disabled","LOADER","active","start","velocity","stagger","opacity","duration","complete","setTimeout","endAnimation","removeData","stop","AV_LOADER","avLoader","BLOCK","getLoaderController","blockId","triggerLoaderController","instance","loaderController","triggerInstance","origFn","loaderFn","modifyBlockInstances","origStartFn","origStopFn","startLoader","avModifications","AV_BLOCK","blockUIConfig","blockUI","autoBlock","origGetFn","avBlockUi","blockCount","TABS","TAB","TabsController","tabs","addTab","tab","selectTab","removeTab","newActiveIndex","selectedTab","onDeselect","onSelect","TabsDirective","AV_TABS","justified","tabType","vertical","padContent","TabDirective","heading","tabsController","transcludeFn","select","$parent","disable","TabPaneDirective","avTabPane","append","contents","node","DEFAULT_OPTIONS","limit","maxCached","loadMoreText","entryIdAttribute","apiParams","beforePageLoad","afterPageLoad","AvScrollPaginationService","registerInstance","instanceInterface","unregisterInstance","resetInstance","AV_SCROLL_PAGINATION","avScrollPaginationService","buildOptions","_options","lowOffset","highOffset","originalEntries","entries","updateButtonVisibilityFlags","showNext","totalCount","showPrev","loadEntries","prepend","block","avScrollPagination","params","apiResource","responseData","getResponseData","resourceId","addEntries","responseKey","nestedData","noData","oldEntries","diff","trackedElementId","slice","autoscroll","trackedElement","trackedElementTop","newScrollTop","loadPrev","loadNext"],"mappings":"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","file":"availity-angular-ui.min.js","sourcesContent":["/**\n * availity-angular v1.8.0 -- January-15\n * Copyright 2016 Availity, LLC \n */\n\n// Source: /lib/ui/index.js\n\n\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity || {};\n\n availity.MODULE_UI = 'availity.ui';\n availity.ui = angular.module(availity.MODULE_UI, ['ng', 'ngSanitize']);\n\n availity.ui.constant('AV_UI', {\n // jscs: disable\n NG_OPTIONS: /^\\s*([\\s\\S]+?)(?:\\s+as\\s+([\\s\\S]+?))?(?:\\s+group\\s+by\\s+([\\s\\S]+?))?\\s+for\\s+(?:([\\$\\w][\\$\\w]*)|(?:\\(\\s*([\\$\\w][\\$\\w]*)\\s*,\\s*([\\$\\w][\\$\\w]*)\\s*\\)))\\s+in\\s+([\\s\\S]+?)(?:\\s+track\\s+by\\s+([\\s\\S]+?))?$/\n // jscs: enable\n });\n\n if(typeof module !== 'undefined' && module.exports) {\n module.exports = availity;\n }\n\n\n})(window);\n\n// Source: /lib/ui/templates/template.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.factory('avTemplateCache', function($q, $templateCache, $http) {\n\n return {\n\n get: function(options) {\n\n var valid = !options.template || !options.templateUrl;\n\n if(!valid) {\n throw new Error('Either options.template or options.templateUrl must be defined for avTemplateCache');\n }\n\n return options.template ? $q.when(options.template) :\n $http.get(options.templateUrl, {cache: $templateCache})\n .then(function(result) {\n return result.data;\n });\n }\n };\n });\n\n})(window);\n\n// Source: /lib/ui/modal/modal.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_MODAL', {\n\n OPTIONS: {\n scope: null,\n templateUrl: null,\n template: null,\n id: null,\n container: null,\n\n // Bootstrap defaults\n keyboard: true,\n backdrop: true,\n show: false,\n remote: false\n },\n\n EVENTS: {\n SHOW: 'show.av.modal',\n SHOWN: 'shown.av.modal',\n HIDE: 'hide.av.modal',\n HIDDEN: 'hidden.av.modal'\n },\n\n NAMESPACE: {\n MODAL: 'bs.modal'\n },\n\n BS_EVENTS: {\n SHOW: 'show.bs.modal',\n SHOWN: 'shown.bs.modal',\n HIDE: 'hide.bs.modal',\n HIDDEN: 'hidden.bs.modal'\n },\n\n TEMPLATES: {\n MODAL: 'ui/modal/modal-tpl.html'\n }\n });\n\n availity.ui.factory('avModalManager', function() {\n\n var AvModalManager = function() {\n this.instances = [];\n };\n\n var proto = AvModalManager.prototype;\n\n proto.add = function(id) {\n this.instances.push(id);\n };\n\n proto.remove = function(id) {\n this.instances = _.without(this.instances, id);\n };\n\n proto.closeAll = function() {\n\n _.forEach(this.instances, function(id) {\n\n var $el = $('#' + id);\n\n if(!$el) {\n return;\n }\n\n var bsModal = $el.data('bs.modal');\n if(bsModal) {\n bsModal.removeBackdrop();\n bsModal.$body.removeClass('modal-open');\n bsModal.resetAdjustments();\n bsModal.resetScrollbar();\n }\n\n var avModal = $el.data('AvModal');\n if(avModal) {\n avModal.destroy();\n }\n\n });\n };\n\n return new AvModalManager();\n\n });\n\n var ModalFactory = function($rootScope, $timeout, $compile, AV_MODAL, avTemplateCache, $q, avModalManager) {\n\n var Modal = function(options) {\n\n var self = this;\n\n this.templateDefer = $q.defer();\n this.templatePromise = this.templateDefer.promise;\n\n this.options = angular.extend({}, AV_MODAL.OPTIONS, {scope: $rootScope.$new()}, options);\n\n avTemplateCache.get(options).then(function(template) {\n self.options.template = template;\n self._build();\n });\n\n };\n\n Modal.create = function(options) {\n return new Modal(options);\n };\n\n var proto = Modal.prototype;\n\n proto._build = function() {\n\n var self = this;\n\n var scope = this.options.scope;\n this.$element = angular.element(this.options.template);\n\n this._createId();\n\n this._scope();\n\n $compile(this.$element)(scope);\n\n $timeout(function() {\n self._init();\n }, 0, true);\n\n // Append to container or \n this.options.container ? this.$element.appendTo(this.options.container) : this.$element.appendTo('body');\n\n };\n\n proto._init = function() {\n\n this.$element.data('AvModal', this);\n\n this.templateDefer.resolve(true);\n\n // Initialize Bootstrap jQuery plugin\n this.$element.modal({\n 'backdrop': this.options.backdrop,\n 'keyboard': this.options.keyboard,\n 'show': this.options.show,\n 'remote': this.options.remote\n });\n\n this._listeners();\n };\n\n // Add helpers to scope so clients can call internal methods\n proto._scope = function() {\n\n var self = this;\n var scope = this.options.scope;\n\n scope.modalShow = function() {\n return self.show();\n };\n\n scope.modalToggle = function() {\n return self.toggle();\n };\n\n scope.modalHide = function() {\n return self.hide();\n };\n\n };\n\n proto._listeners = function() {\n\n var self = this;\n var scope = this.options.scope;\n var $element = this.$element;\n\n this.animationShowDefer = $q.defer();\n this.animationHideDefer = $q.defer();\n\n $element.on(AV_MODAL.BS_EVENTS.SHOW, function(event) {\n scope.$emit(AV_MODAL.EVENTS.SHOW, event, self);\n });\n\n $element.on(AV_MODAL.BS_EVENTS.SHOWN, function(event) {\n\n if(angular.isFunction(self.options.onShown)) {\n self.options.onShown();\n }\n\n self.animationShowDefer.resolve(true);\n\n scope.$emit(AV_MODAL.EVENTS.SHOWN, event, self);\n });\n\n $element.on(AV_MODAL.BS_EVENTS.HIDE, function(event) {\n scope.$emit(AV_MODAL.EVENTS.HIDE, event, self);\n });\n\n $element.on(AV_MODAL.BS_EVENTS.HIDDEN, function(event) {\n\n if(angular.isFunction(self.options.onHidden)) {\n self.options.onHidden.call(this);\n }\n\n self.animationHideDefer.resolve(true);\n scope.$emit(AV_MODAL.EVENTS.HIDDEN, event, self);\n\n scope.$evalAsync(function() {\n self.destroy();\n });\n\n });\n\n // Garbage collection\n scope.$on('$destroy', function() {\n avModalManager.remove(self._id);\n self.destroy();\n });\n\n };\n\n proto.show = function() {\n\n var self = this;\n this.animationShowDefer = $q.defer();\n\n this.templatePromise.then(function() {\n self.isShown() ? self.animationShowDefer.resolve(true) : self.$element.modal('show');\n });\n\n return this.animationShowDefer.promise;\n\n };\n\n proto.hide = function() {\n\n var self = this;\n this.animationHideDefer = $q.defer();\n\n this.templatePromise.then(function() {\n !self.isShown() ? self.animationHideDefer.resolve(true) : self.$element.modal('hide');\n });\n\n return this.animationHideDefer.promise;\n };\n\n proto.isShown = function() {\n return this.$element.data(AV_MODAL.NAMESPACE.MODAL).isShown;\n },\n\n proto.toggle = function() {\n\n var self = this;\n\n return this.templatePromise.then(function() {\n return self.isShown() ? self.hide() : self.show();\n });\n\n };\n\n proto.destroy = function() {\n\n var self = this;\n\n return this.templatePromise.then(function() {\n self.$element.data('AvModal', null);\n self.$element.remove();\n });\n\n };\n\n proto._createId = function() {\n // Create a unique id for the modal if not present or passed in via options\n var id = this.$element.attr('id');\n if(!id) {\n // Get id from options or create a unique id\n id = this.options.id ? this.options.id : availity.uuid('av-modal-id');\n this.$element.attr('id', id);\n }\n\n this._id = id;\n\n avModalManager.add(id);\n };\n\n return Modal;\n };\n\n availity.ui.factory('AvModal', ModalFactory);\n\n availity.ui.directive('avModal', function(AV_MODAL) {\n return {\n restrict: 'A',\n replace: true,\n transclude: true,\n scope: {\n size: '@'\n },\n templateUrl: AV_MODAL.TEMPLATES.MODAL\n };\n });\n\n})(window);\n\n// Source: /lib/ui/validation/form.js\n/**\n * 1. All fields should be pristine on first load\n * 2. If field is modified an invalid the field should be marked with an error\n *\n */\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.controller('avValFormController', function() {\n\n this.ngForm = null;\n this.rulesKey = null;\n this.avValOn = null;\n this.avValDebounce = null;\n this.avValInvalid = false;\n\n // Object that stores the unique id (key) and violation count (value) of all the form fields\n //\n // EX:\n //\n // {\n // avVal001: 0\n // avVal002: 2\n // avVal003: 1\n // }\n this.violations = {};\n\n this.init = function(form) {\n this.ngForm = form;\n };\n\n /**\n * Records id of the form field and number of violations\n * @param {[type]} id [description]\n * @param {[type]} count [description]\n * @return {[type]} [description]\n */\n this.record = function(id, count) {\n this.violations[id] = count;\n\n var violocationCount = _.reduce(this.violations, function(sum, num) {\n return sum + num;\n }, 0);\n\n this.ngForm.$setValidity('av', violocationCount === 0);\n };\n\n this.unrecord = function(id) {\n if(id && this.violations[id]) {\n delete this.violations[id];\n }\n };\n\n this.reset = function() {\n this.ngForm.$setPristine();\n this.ngForm.$submitted = false;\n };\n\n this.$setSubmitted = function() {\n this.ngForm.$submitted = true;\n };\n\n this.setRulesKey = function(key) {\n this.rulesKey = key;\n };\n\n });\n\n // form.$error = {};\n // form.$$success = {};\n // form.$pending = undefined;\n // form.$name = $interpolate(attrs.name || attrs.ngForm || '')($scope);\n // form.$dirty = false;\n // form.$pristine = true;\n // form.$valid = true;\n // form.$invalid = false;\n // form.$submitted = false;\n\n availity.ui.directive('avValForm', function($log, $timeout, $parse, AV_VAL, avValAdapter, $rootScope) {\n return {\n restrict: 'A',\n priority: 10,\n require: ['form', 'avValForm'],\n controller: 'avValFormController',\n compile: function() {\n return {\n pre: function(scope, iEl, iAttrs, controllers) {\n\n var ruleFn = $parse(iAttrs.avValForm);\n var rulesKey = ruleFn(scope);\n rulesKey = rulesKey || iAttrs.avValForm; // interpolated rule from scope || fixed string\n\n if(!rulesKey) {\n $log.error('avValForm requires a rules key in order to run the proper validation rules.');\n return;\n }\n\n scope.$watch(ruleFn, function(_rulesKey, _oldRulesKey) {\n if(_rulesKey) {\n avForm.setRulesKey(_rulesKey);\n\n if(_rulesKey !== _oldRulesKey) {\n $timeout(function() {\n $log.info('avValForm revalidate');\n $rootScope.$broadcast(AV_VAL.EVENTS.REVALIDATE);\n });\n }\n\n }\n\n });\n\n var ngForm = controllers[0];\n var avForm = controllers[1];\n\n // Allow form attributes to define the validation behavior of the form fields\n // inside it. If `av-val-on` or `av-val-debounce` are on the form then all form\n // fields inside the form would inherit this behavior.\n avForm.avValOn = iAttrs.avValOn || null;\n avForm.avValDebounce = iAttrs.avValDebounce || null;\n // Allows fields to update with invalid data for dirty form saving\n avForm.avValInvalid = iAttrs.avValInvalid || false;\n\n avForm.init(ngForm);\n avForm.setRulesKey(rulesKey);\n\n },\n post: function(scope, iEl, iAttrs, controllers) {\n\n iEl.attr('novalidate', 'novalidate'); // prevent HTML5 validation from kicking in\n\n // Disable ng-submit or ng-click handlers and store the function to call for submitting\n var fn;\n if(iAttrs.ngSubmit) {\n // Disable ng-submit event\n iEl.off('submit');\n fn = $parse(iAttrs.ngSubmit, /* expensiveChecks */ true);\n }else if(iAttrs.ngClick) {\n // Disable ng-click event\n iEl.off('click');\n fn = $parse(iAttrs.ngClick, /* expensiveChecks */ true);\n }\n\n var ngForm = controllers[0];\n var avForm = controllers[1];\n\n scope.$on(AV_VAL.EVENTS.RESET, function () {\n avForm.reset();\n });\n\n iEl.bind('submit', function(event) {\n\n scope.$broadcast(AV_VAL.EVENTS.SUBMITTED);\n avForm.$setSubmitted();\n\n if(ngForm.$invalid) {\n\n scope.$broadcast(AV_VAL.EVENTS.FAILED);\n\n $log.info('avValForm invalid. preventing default submit action');\n\n event.preventDefault();\n event.stopImmediatePropagation();\n scope.$broadcast(event);\n\n avValAdapter.scroll(iEl);\n return;\n }\n\n ngForm.$setPristine();\n\n if(!fn) {\n return;\n }\n\n var callback = function() {\n fn(scope, {$event:event});\n };\n\n scope.$apply(callback);\n\n });\n\n }\n };\n }\n };\n });\n\n\n})(window);\n\n// Source: /lib/ui/validation/field.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.controller('AvValFieldController', function($element, avValAdapter, $attrs, avVal, $log, $timeout, $scope, $sniffer) {\n\n this.ngModel = null;\n this.rule = null;\n this.avValForm = null;\n this.avValInvalid = false;\n\n var self = this;\n\n var placeholder = $element[0].placeholder;\n var noEvent = {};\n\n this.createId = function() {\n this.ngModel.avId = availity.uuid('avVal');\n };\n\n this.setNgModel = function(ngModel) {\n this.ngModel = ngModel;\n };\n\n this.setRule = function(rule) {\n this.rule = rule;\n };\n\n this.avValForm = function(avValForm) {\n this.avValForm = avValForm;\n };\n\n this.updateModel = function(results) {\n\n var self = this;\n var validationKeys = [];\n\n this.ngModel.avResults = results;\n\n // set state for each violation\n angular.forEach(results.violations, function (result) {\n var key = 'av-' + result.contraintName;\n validationKeys.push(key);\n self.ngModel.$setValidity(key, result.valid);\n });\n\n // set overall state for validation state\n this.ngModel.$setValidity('av', this.ngModel.avResults.isValid);\n\n // store violations\n this.ngModel.avViolations = this.ngModel.avResults.violations;\n\n // record the id and violation count in the av-form controller. this determines if the form is\n // valid if sum of violations for all form inputs === zero\n this.avValForm.record(this.ngModel.avId, this.ngModel.avResults.violations.length);\n\n // remove violation keys that are no longer falsy\n angular.forEach(this.ngModel.$error, function(value, key) {\n\n if(_.indexOf(validationKeys, key) === -1 && key.lastIndexOf('av-', 0) === 0) {\n self.ngModel.$setValidity(key, true);\n }\n });\n };\n\n this.updateView = function() {\n if(this.ngModel.$dirty || $scope.avValShow) {\n avValAdapter.element($element, this.ngModel, this.ngModel.avResults.isValid);\n avValAdapter.message($element, this.ngModel);\n }\n };\n\n this.validate = function(value) {\n\n $log.info('validating value [' + value + ']');\n\n var rulesKey = self.avValForm.rulesKey;\n var results = avVal.validate(rulesKey, $element, value, self.rule);\n\n // validate function is called within the context of angular so fn.call and set the context\n // to \"this\"\n self.updateModel.call(self, results);\n self.updateView.call(self);\n\n return results;\n };\n\n this.validateModel = function(value) {\n\n self.validate(value, true);\n return value;\n\n };\n\n this.validateView = function(value) {\n\n var results = self.validate(value);\n\n if(self.avValForm.avValInvalid || self.avValInvalid) {\n // allows invalid data from view to update model for dirty saving\n return value;\n }\n\n // prevent invalid data from view to update model\n return results.isValid ? value : undefined;\n\n };\n\n this.onDebounce = function() {\n\n var value = $element.val().trim();\n\n if(this.isCheckbox()) {\n this.ngModel.$setViewValue($element[0].checked);\n } else if(this.isRadio()) {\n this.ngModel.$setViewValue($attrs.value);\n }else {\n this.ngModel.$setViewValue(value);\n }\n\n };\n\n this.isRadio = function() {\n return $element.is('input') && $attrs.type === 'radio';\n };\n\n this.isCheckbox = function() {\n return $element.is('input') && $attrs.type === 'checkbox';\n };\n\n this.reset = function() {\n\n var violations = this.ngModel.avResults.violations;\n violations.splice(0, violations.length);\n\n avValAdapter.message($element, this.ngModel);\n avValAdapter.reset($element);\n\n };\n\n this.event = function(event, avValDebounce) {\n\n var self = this;\n\n $element.unbind('input');\n\n var debounce;\n\n $element.on(event, function() {\n\n // https://github.com/angular/angular.js/blob/v1.2.27/src/ng/directive/input.js#L508\n if($sniffer.msie <= 11 && (event || noEvent).type === 'input' && $element[0].placeholder !== placeholder) {\n placeholder = $element[0].placeholder;\n return;\n }\n\n $timeout.cancel(debounce);\n debounce = $timeout(function() {\n $scope.$apply(function() {\n self.onDebounce();\n });\n }, avValDebounce);\n\n });\n\n };\n\n });\n\n // Events:\n //\n // click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown\n // keyup keypress submit focus blur copy cut paste\n availity.ui.directive('avValField', function($log, $timeout, avVal, avValAdapter, AV_VAL) {\n return {\n restrict: 'A',\n controller: 'AvValFieldController',\n require: ['^avValForm', 'ngModel', 'avValField'],\n scope: {\n avValDebounce: '@?',\n avValOn: '@?',\n avValShow: '=?'\n },\n link: function(scope, element, attrs, controllers) {\n\n var rule = attrs.avValField;\n var avValForm = controllers[0];\n var ngModel = controllers[1];\n var avValField = controllers[2];\n\n var avValOn = scope.avValOn || avValForm.avValOn || 'input';\n\n if(!ngModel && !rule) {\n $log.error('avValField requires ngModel and a validation rule to run.');\n return;\n }\n\n // Allows fields to update with invalid data for dirty form saving\n avValField.avValInvalid = attrs.avValInvalid || false;\n\n // CACHE THE MODEL\n avValField.setNgModel(ngModel);\n\n avValField.avValForm(avValForm);\n\n avValField.setRule(rule);\n\n avValField.createId();\n\n // DEBOUNCE\n var avValDebounce = parseInt(scope.avValDebounce || (avValForm.avValDebounce || AV_VAL.DEBOUNCE), 10);\n avValDebounce = _.isNumber(avValDebounce) ? avValDebounce : AV_VAL.DEBOUNCE;\n\n var debounceAllowed = !avValField.isRadio() && !avValField.isCheckbox() && avValOn !== 'blur';\n\n if(!debounceAllowed) {\n avValDebounce = 0;\n }\n\n // EVENT LISTENER\n avValField.event(avValOn, avValDebounce);\n\n // (view to model)\n ngModel.$parsers.push(avValField.validateView);\n\n // (model to view) - added to beginning of array because formatters\n // are processed in reverse order thus allowing the model to be transformed\n // before the validation framework check for validity.\n ngModel.$formatters.unshift(avValField.validateModel);\n\n scope.$on(AV_VAL.EVENTS.REVALIDATE, function() {\n avValField.validate(ngModel.$viewValue);\n });\n\n // SUBMITTED EVENT\n scope.$on(AV_VAL.EVENTS.SUBMITTED, function() {\n ngModel.$dirty = true;\n avValField.validate(ngModel.$viewValue);\n });\n\n // - Removes all errors on page,\n // - does not reset view or model values. This is to be handled by the app.\n scope.$on(AV_VAL.EVENTS.RESET, function () {\n avValField.reset();\n });\n\n scope.$on('$destroy', function () {\n avValForm.unrecord(ngModel.avId);\n });\n\n }\n };\n });\n\n\n})(window);\n\n// Source: /lib/ui/popover/popover.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.provider('avPopoverConfig', function() {\n\n var config = {\n showOnLoadHideDelay: 10000\n };\n\n this.set = function(options) {\n angular.extend(config, options);\n };\n\n this.$get = function() {\n return angular.copy(config);\n };\n });\n\n availity.ui.constant('AV_POPOVER', {\n NAME: 'bs.popover'\n });\n\n availity.ui.controller('AvPopoverController', function($element, $scope, AV_POPOVER, $timeout, avPopoverConfig) {\n this.options = angular.extend({}, avPopoverConfig);\n\n this.listeners = function() {\n\n var self = this;\n\n angular.forEach(['show', 'shown', 'hide', 'hidden'], function(name) {\n $element.on(name + '.bs.popover', function(ev) {\n $scope.$emit('av:popover:' + name, ev);\n });\n });\n\n $scope.$on('destroy', function() {\n self.destroy();\n });\n };\n\n this.plugin = function() {\n return $element.data(AV_POPOVER.NAME);\n };\n\n this.show = function() {\n $element.popover('show');\n };\n\n this.hide = function() {\n $element.popover('hide');\n };\n\n this.toggle = function() {\n $element.popover('toggle');\n };\n\n this.destroy = function() {\n $element.popover('destroy');\n };\n\n\n this.init = function() {\n\n this.listeners();\n\n if($scope.showOnLoad) {\n\n this.show();\n\n if($scope.delay && $scope.delay.hide) {\n $timeout(this.hide, $scope.delay.hide, false);\n return;\n }\n // If no delay is found or cannot be parsed, set a default timeout so that the popover doesn't stick around forever\n $timeout(this.hide, this.options.showOnLoadHideDelay, false);\n }\n };\n\n\n });\n\n availity.ui.directive('avPopover', function() {\n return {\n restrict: 'A',\n controller: 'AvPopoverController',\n scope: {\n showOnLoad: '=',\n delay: '='\n },\n link: function(scope, element, attrs, avPopover) {\n\n var options = {};\n\n scope.$evalAsync(function() {\n element.popover(angular.extend({}, options, {\n html: true\n }));\n avPopover.init();\n });\n }\n };\n });\n\n})(window);\n\n// Source: /lib/ui/validation/container.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.controller('avValContainerController', function($scope, $timeout) {\n\n this.message = function(ngModel) {\n\n var message = null;\n if(ngModel.avResults.violations.length && ngModel.avResults.violations[0].message) {\n message = ngModel.avResults.violations[0].message;\n }else {\n message = null;\n }\n\n // $timeout is needed to update the UI from $broadcast events\n $timeout(function() {\n $scope.messages.message = message;\n });\n\n };\n\n });\n\n availity.ui.directive('avValContainer', function() {\n return {\n restrict: 'A',\n controller: 'avValContainerController',\n template: '

            ',\n replace: true,\n scope: {\n\n },\n link: function(scope) {\n scope.messages = _.extend({}, scope.messages, { message: null, id: null });\n }\n };\n });\n\n\n})(window);\n\n// Source: /lib/ui/validation/adapter-bootstrap.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_BOOTSTRAP_ADAPTER', {\n CLASSES: {\n SUCCESS: 'has-success',\n WARNING: 'has-warning',\n ERROR: 'has-error',\n FEEDBACK: 'has-feedback',\n HELP: 'help-block',\n FORM_GROUP: '.form-group:first',\n NAVBAR: 'navbar-fixed-top'\n },\n SELECTORS: {\n CONTAINER: 'container-id',\n DATA_CONTAINER: 'data-container-id'\n },\n CONTROLLER: '$avValContainerController'\n });\n\n availity.ui.factory('avValBootstrapAdapter', function(AV_BOOTSTRAP_ADAPTER, $timeout, $log) {\n\n return {\n\n element: function(element, ngModel) {\n if(ngModel.$valid) {\n element.parents(AV_BOOTSTRAP_ADAPTER.CLASSES.FORM_GROUP).removeClass(AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR);\n }else {\n element.parents(AV_BOOTSTRAP_ADAPTER.CLASSES.FORM_GROUP).addClass(AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR);\n }\n },\n\n reset: function(element) {\n element.parents(AV_BOOTSTRAP_ADAPTER.CLASSES.FORM_GROUP).removeClass(AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR);\n },\n\n message: function(element, ngModel) {\n\n var selector = [\n '.',\n AV_BOOTSTRAP_ADAPTER.CLASSES.HELP\n ].join('');\n\n var $el = $(element);\n\n var target = $el.attr(AV_BOOTSTRAP_ADAPTER.SELECTORS.CONTAINER);\n target = target || $el.attr(AV_BOOTSTRAP_ADAPTER.SELECTORS.DATA_CONTAINER);\n // default to siblings\n target = target ? $('#' + target) : $el.siblings(selector);\n\n if(target.length === 0) {\n $log.warn('avValBootstrapAdapter could not find validation container for {0}', [element]);\n return;\n }\n\n var el = target[0];\n $el = angular.element(el);\n var avValModel = $el.data(AV_BOOTSTRAP_ADAPTER.CONTROLLER); // get the av val message controller\n if(avValModel) {\n avValModel.message(ngModel);\n }\n },\n\n scroll: function(form) {\n\n // Bootstrap fixed navbars causes bad scroll-to offsets so find them all\n var navbarSelector = [\n '.',\n AV_BOOTSTRAP_ADAPTER.CLASSES.NAVBAR\n ].join('');\n\n // Add up all the heights to find the true offset\n var offset = 0;\n $(navbarSelector).each(function() {\n offset += $(this).outerHeight();\n });\n\n var selector = [\n '.',\n AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR,\n ':first'\n ].join('');\n\n var $target = $(form).find(selector);\n $timeout(function() {\n // scroll to offset top of first error minus the offset of the navbars\n $('body, html').animate({scrollTop: $target.offset().top - offset}, 'fast');\n }, 0, false);\n }\n };\n });\n\n\n})(window);\n\n// Source: /lib/ui/validation/adapter.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_VAL_ADAPTER', {\n DEFAULT: 'avValBootstrapAdapter'\n });\n\n availity.ui.provider('avValAdapter', function() {\n\n var that = this;\n\n this.setAdapter = function(adapter) {\n this.adapter = adapter;\n };\n\n this.$get = function(AV_VAL_ADAPTER, $injector) {\n\n var Adapter = function() {\n var adapterName = that.adapter || AV_VAL_ADAPTER.DEFAULT;\n this.adapter = $injector.get(adapterName);\n };\n\n var proto = Adapter.prototype;\n\n proto.element = function(element, ngModel) {\n this.adapter.element(element, ngModel);\n };\n\n proto.reset = function(element) {\n this.adapter.reset(element);\n };\n\n proto.message = function(element, ngModel) {\n this.adapter.message(element, ngModel);\n },\n\n proto.scroll = function(form) {\n this.adapter.scroll(form);\n };\n\n return new Adapter();\n };\n });\n\n})(window);\n\n// Source: /lib/ui/dropdown/dropdown.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.provider('avDropdownConfig', function() {\n var config = {\n closeOnResize: true,\n dropdownAutoWidth: true,\n minimumResultsForSearch: 5\n };\n\n this.set = function(options) {\n angular.extend(config, options);\n };\n\n this.$get = function() {\n return angular.copy(config);\n };\n });\n\n availity.ui.constant('AV_DROPDOWN', {\n OPTIONS: [\n 'width',\n 'minimumInputLength',\n 'maximumInputLength',\n 'minimumResultsForSearch',\n 'maximumSelectionSize',\n 'placeholderOption',\n 'separator',\n 'allowClear',\n 'multiple',\n 'closeOnSelect',\n 'openOnEnter',\n 'id',\n 'matcher',\n 'sortResults',\n 'formatSelection',\n 'formatResult',\n 'formatResultCssClass',\n 'formatNoMatches',\n 'formatSearching',\n 'formatAjaxError',\n 'formatInputTooShort',\n 'formatInputTooLong',\n 'formatSelectionTooBig',\n 'formatLoadMore',\n 'createSearchChoice',\n 'createSearchChoicePosition',\n 'initSelection',\n 'tokenizer',\n 'tokenSeparators',\n 'query',\n 'ajax',\n 'data',\n 'tags',\n 'containerCss',\n 'containerCssClass',\n 'dropdownCss',\n 'dropdownCssClass',\n 'dropdownAutoWidth',\n 'adaptContainerCssClass',\n 'adaptDropdownCssClass',\n 'escapeMarkup',\n 'selectOnBlur',\n 'loadMorePadding',\n 'nextSearchTerm',\n 'correlationId'\n ]\n });\n\n\n availity.ui.controller('AvDropdownController', function($element, $attrs, AV_UI, AV_DROPDOWN, avDropdownConfig, $log, $scope, $timeout, $parse) {\n\n var self = this;\n this.options = {};\n this.match = null;\n this.ngModel = null;\n\n this.init = function() {\n\n self.options = angular.extend({}, avDropdownConfig);\n\n _.forEach($attrs, function(value, key) {\n if(_.contains(AV_DROPDOWN.OPTIONS, key.replace('data-', ''))) {\n self.options[key] = $scope.$eval(value);\n }\n });\n\n if(this.isRemoteMultiple()) {\n self.options.multiple = angular.isDefined($attrs.multiple);\n }\n\n self.multiple = angular.isDefined($attrs.multiple);\n\n if(self.options.query) {\n\n self.queryFn = self.options.query;\n // Function used to query results for the search term.\n self.options.query = self.query;\n // Function used to get the id from the choice object or a string representing the key under which the id is stored.\n self.options.id = self.getId;\n }\n\n };\n\n this.isRemoteMultiple = function() {\n if(angular.isDefined($attrs.multiple) && $element.get(0).tagName.toLowerCase() === 'input') {\n return true;\n }\n return false;\n };\n\n this.setRemoteViewValue = function(e) {\n\n var values = this.ngModel.$viewValue;\n\n if(!angular.isArray(values) || !angular.isObject(values)) {\n values = [];\n }\n\n if(e.added) {\n // Adding to collection\n values.push(e.added);\n } else {\n // Removing from collection\n var index = _.findIndex(values, function(value) {\n return _.matches(e.removed)(value);\n });\n values.splice(index, 1);\n }\n\n this.ngModel.$setViewValue(values);\n\n };\n\n this.setViewValue = function(e) {\n this.ngModel.$setViewValue(e.added);\n };\n\n this.setNgModel = function(ngModel) {\n this.ngModel = ngModel;\n };\n\n this.getSelected = function(model) {\n\n if(self.options.query) {\n return 0;\n }\n\n var items = this.collection($scope);\n\n var index = _.findIndex(items, function(item) {\n return angular.equals(item, model);\n });\n\n return index;\n\n };\n\n // Result:\n //\n // {\n // \"code\": \"252Y00000X\",\n // \"value\": \"AGENCIES,EARLY INTERVENTION PROVIDER AGENCY,NOT APPLICABLE|Agency\",\n // \"id\": \"252Y00000X\"\n // }\n this.getId = function(result) {\n return result.id;\n };\n\n // Wrapper around the query function for Select2. When the promise resolves\n // the callback\n this.query = function(options) {\n\n self.queryFn(options).then(function(response) {\n\n // Callback function that should be called with the result object. The result object:\n //\n // result.results (object) - Array of result objects. The default renderers\n // expect objects with id and text keys. The id property is required,\n // even if custom renderers are used. The object may also contain a children\n // key if hierarchical data is displayed. The object may also contain a disabled\n // boolean property indicating whether this result can be selected.\n //\n // result.more (boolean) - true if more results are available for the current\n // search term.\n //\n // results.context (object) - A user-defined object that should be made available\n // as the context parameter to the query function on subsequent queries to load\n // more result pages for the same search term. See the description of\n // options.context parameter.\n options.callback({more: response.more, results: response.results});\n });\n };\n\n this.setValue = function() {\n\n var viewValue = self.ngModel.$viewValue;\n var selected = null;\n if(viewValue) {\n selected = this.getSelected(viewValue);\n }\n\n // var apply = scope.$evalAsync || $timeout;\n $timeout(function() {\n $element\n .select2('val', (selected === null || selected === 'undefined') ? '' : selected); // null === '' for Select2\n });\n };\n\n this.getMultiSelected = function(viewValue) {\n\n var indices = [];\n\n if($element.get(0).tagName.toLowerCase() !== 'input') {\n var options = this.collection($scope);\n\n _.each(viewValue, function(savedObject) {\n var index = _.findIndex(options, function(value) {\n var temp = angular.copy(savedObject); // remove hashkeys for comparison\n return _.matches(temp)(value);\n });\n indices.push(index);\n });\n\n } else {\n\n var inputViewValues = this.ngModel.$modelValue;\n\n _.each(inputViewValues, function(savedObject) {\n\n if(_.isUndefined(savedObject.id) ) {\n\n if(savedObject.id || savedObject[self.options.correlationId]) {\n\n savedObject.id = savedObject[self.options.correlationId];\n\n } else {\n\n throw new Error('dropdown list must have a id or a alternative value to use as a id');\n }\n\n }\n\n });\n }\n\n if(indices.length > 0) {\n viewValue = indices;\n }\n\n return viewValue;\n\n };\n\n this.setValues = function() {\n\n var viewValue = self.ngModel.$viewValue;\n\n if(!angular.isArray(viewValue)) {\n viewValue = [];\n }\n\n if(!_.isEmpty(viewValue) && _.isObject(viewValue[0])) {\n viewValue = this.getMultiSelected(viewValue);\n }\n\n $timeout(function() {\n $element\n .select2('val', viewValue);\n });\n };\n\n this.ngOptions = function() {\n\n this.match = $attrs.ngOptions.match(AV_UI.NG_OPTIONS);\n if(!this.match) {\n throw new Error('Invalid ngOptions for avDropdown');\n }\n // AV_UI.NG_OPTIONS regex will parse into arrays like below:\n //\n // 0: \"state.name for state in states\"\n // 1: \"state.name\"\n // 2: undefined\n // 3: undefined\n // 4: \"state\"\n // 5: undefined\n // 6: undefined\n // 7: \"states\"\n // 8: undefined\n //\n // 0: \"state.id as state.name for state in states\"\n // 1: \"state.id\"\n // 2: \"state.name\"\n // 3: undefined\n // 4: \"state\"\n // 5: undefined\n // 6: undefined\n // 7: \"states\"\n // 8: undefined\n //\n // 0: \"state.name for state in states track by state.id\"\n // 1: \"state.name\"\n // 2: undefined\n // 3: undefined\n // 4: \"state\"\n // 5: undefined\n // 6: undefined\n // 7: \"states\"\n // 8: \"state.id\"\n //\n // 0: \"person.fullName as (person.lastName + ', ' + person.firstName) for person in feeScheduleModel.persons\"\n // 1: \"person.fullName\"\n // 2: \"(person.lastName + ', ' + person.firstName)\"\n // 3: undefined\n // 4: \"person\"\n // 5: undefined\n // 6: undefined\n // 7: \"feeScheduleModel.persons\"\n // 8: undefined\n //\n this.displayFn = $parse(this.match[2] || this.match[1]); // this is the function to retrieve the text to show as\n this.collection = $parse(this.match[7]);\n this.valueName = this.match[4] || this.match[6];\n this.valueFn = $parse(this.match[2] ? this.match[1] : this.valueName);\n this.keyName = this.match[5];\n\n $scope.$watchCollection(this.collection, function(newVal, oldVal) {\n if(angular.equals(newVal, oldVal)) {\n return;\n }\n\n self.setValue();\n\n }, true);\n\n };\n });\n\n availity.ui.directive('avDropdown', function($timeout, $log, $window) {\n\n return {\n restrict: 'A',\n require: ['ngModel', 'avDropdown'],\n controller: 'AvDropdownController',\n link: function(scope, element, attrs, controllers) {\n var ngModel = controllers[0];\n var avDropdown = controllers[1];\n\n avDropdown.setNgModel(ngModel);\n avDropdown.init();\n\n if(attrs.ngOptions ) {\n avDropdown.ngOptions();\n }\n\n ngModel.$parsers.push(function(value) {\n var parent = element.prev();\n parent\n .toggleClass('ng-invalid', !ngModel.$valid)\n .toggleClass('ng-valid', ngModel.$valid)\n .toggleClass('ng-invalid-required', !ngModel.$valid)\n .toggleClass('ng-valid-required', ngModel.$valid)\n .toggleClass('ng-dirty', ngModel.$dirty)\n .toggleClass('ng-pristine', ngModel.$pristine);\n return value;\n });\n\n element.on('change', function(e) {\n\n // special case since the ajax handling doesn't bind to the model correctly\n // this has to do with select2 (v3.5.2) using a hidden field instead of a select for ajax\n if(avDropdown.options.query) {\n $timeout(function() {\n // look at moving this to the controller\n if(avDropdown.isRemoteMultiple()) {\n avDropdown.setRemoteViewValue(e);\n } else {\n avDropdown.setViewValue(e);\n }\n\n }, false, 0);\n }\n\n $log.info(e);\n\n });\n\n // fires ng-focus when select2-focus fires.\n element.on('select2-focus', function() {\n if(attrs.ngFocus) {\n scope.$eval(scope.$eval(attrs.ngFocus));\n }\n });\n\n // fires ng-blur when select2-blur occurs.\n element.on('select2-blur', function() {\n if(attrs.ngBlur) {\n scope.$eval(scope.$eval(attrs.ngBlur));\n }\n });\n\n // https://github.com/t0m/select2-bootstrap-css/issues/37#issuecomment-42714589\n element.on('select2-open', function () {\n // look for .has-success, .has-warning, .has-error\n // (really look for .has-* … which is good enough for the demo page, but obviously might interfere with other CSS-classes starting with \"has-\")\n if(element.parents('[class*=\"has-\"]').length) {\n\n // get all CSS-classes from the element where we found \"has-*\" and collect them in an array\n var classNames = $(this).parents('[class*=\"has-\"]')[0].className.split(/\\s+/);\n\n // go through the class names, find \"has-\"\n for(var i = 0; i < classNames.length; ++i) {\n if(classNames[i].match('has-')) {\n $('#select2-drop').addClass(classNames[i]);\n }\n }\n }\n });\n\n\n var _$render = ngModel.$render;\n ngModel.$render = function() {\n _$render();\n\n if(avDropdown.multiple) {\n avDropdown.setValues();\n }else {\n avDropdown.setValue();\n }\n\n };\n\n var win = angular.element($window);\n\n win.bind('resize', function() {\n element.select2('close');\n });\n\n attrs.$observe('disabled', function (value) {\n element.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n element.select2('readonly', !!value);\n });\n\n scope.$on('destroy', function() {\n element.select2('destroy');\n });\n\n $timeout(function() {\n element.select2(avDropdown.options);\n });\n }\n };\n });\n\n})(window);\n\n// Source: /lib/ui/datepicker/datepicker.js\n/**\n * Inspiration https://github.com/mgcrea/angular-strap/blob/v0.7.8/src/directives/datepicker.js\n */\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.provider('avDatepickerConfig', function() {\n\n var config = {\n autoclose: true,\n todayHighlight: true,\n format: 'mm/dd/yyyy',\n forceParse: false\n };\n\n this.set = function(options) {\n angular.extend(config, options);\n };\n\n this.$get = function() {\n return angular.copy(config);\n };\n\n });\n\n // Options: http://bootstrap-datepicker.readthedocs.org/en/latest/options.html\n availity.ui.constant('AV_DATEPICKER', {\n CONTROLLER: '$ngModelController',\n ADD_ON_SELECTOR: '[data-toggle=\"datepicker\"]',\n OPTIONS: [\n 'autoclose',\n 'beforeShowDay',\n 'beforeShowMonth',\n 'calendarWeeks',\n 'clearBtn',\n 'toggleActive',\n 'container',\n 'daysOfWeekDisabled',\n 'datesDisabled',\n 'defaultViewDate',\n 'endDate',\n 'forceParse',\n 'format',\n 'inputs',\n 'keyboardNavigation',\n 'language',\n 'minViewMode',\n 'multidate',\n 'multidateSeparator',\n 'orientation',\n 'startDate',\n 'startView',\n 'todayBtn',\n 'todayHighlight',\n 'weekStart',\n 'showOnFocus',\n 'disableTouchKeyboard',\n 'enableOnReadonly',\n 'modelFormat'\n ],\n DEFAULTS: {\n MODELFORMAT: 'YYYY-MM-DD'\n }\n });\n\n availity.ui.controller('AvDatepickerController', function($element, $attrs, AV_DATEPICKER, $scope, avDatepickerConfig) {\n\n var self = this;\n this.options = {};\n\n this.setValue = function() {\n\n var viewValue = self.ngModel.$viewValue;\n var plugin = this.plugin();\n\n if(!viewValue || !plugin) {\n return;\n }\n\n plugin.setDate(viewValue);\n };\n\n this.setNgModel = function(ngModel) {\n this.ngModel = ngModel;\n };\n\n this.findModel = function() {\n\n var ngModel = null;\n\n var $input = $element.find('input:first').andSelf();\n if($input.length) {\n ngModel = $input.data(AV_DATEPICKER.CONTROLLER);\n this.setNgModel(ngModel);\n }\n\n return ngModel;\n };\n\n this.modelToView = function(isoWrap) {\n var viewValue = $.fn.datepicker.DPGlobal.formatDate(isoWrap, self.options.format, 'en');\n return viewValue;\n };\n\n this.wrapIsoDate = function() {\n\n var date = self.ngModel.$modelValue;\n var isoWrap;\n\n if(date !== undefined && date !== null) {\n var m = moment(date);\n isoWrap = m.isValid() ? m.toDate() : null;\n }\n\n return isoWrap;\n };\n\n this.viewToModel = function() {\n var format = $.fn.datepicker.DPGlobal.parseFormat(self.options.format);\n var utcDate = $.fn.datepicker.DPGlobal.parseDate(self.ngModel.$viewValue, format, 'en');\n\n var plugin = self.plugin();\n\n if(!plugin) {\n return;\n }\n\n // jscs: disable\n var localDate = plugin._utc_to_local(utcDate);\n // jscs: enable\n\n if(self.options.modelFormat && localDate) {\n localDate = moment(localDate).format(self.options.modelFormat);\n }\n\n return localDate;\n };\n\n this.init = function() {\n\n self.options = angular.extend({}, avDatepickerConfig);\n\n _.forEach($attrs, function(value, key) {\n if(_.contains(AV_DATEPICKER.OPTIONS, key.replace('data-', ''))) {\n self.options[key] = $scope.$eval(value);\n }\n });\n\n if(self.options.modelFormat && self.options.modelFormat.toLowerCase() === 'default') {\n self.options.modelFormat = AV_DATEPICKER.DEFAULTS.MODELFORMAT;\n }\n };\n\n this.plugin = function() {\n return $element.data('datepicker');\n };\n\n this.destroy = function() {\n var plugin = this.plugin();\n if(plugin) {\n plugin.remove();\n $element.data('datepicker', null);\n }\n };\n\n this.hide = function() {\n var plugin = this.plugin();\n if(plugin) {\n plugin.hide();\n }\n };\n });\n\n availity.ui.directive('avDatepicker', function($window, $log, AV_DATEPICKER) {\n return {\n restrict: 'A',\n require: ['ngModel', 'avDatepicker'],\n controller: 'AvDatepickerController',\n link: function(scope, element, attrs, controllers) {\n\n var ngModel = controllers[0];\n var avDatepicker = controllers[1];\n\n if(!ngModel) {\n ngModel = avDatepicker.findModel();\n if(!ngModel) {\n $log.error('avDatepicker requires ngModel');\n return;\n }\n }\n\n avDatepicker.init();\n avDatepicker.setNgModel(ngModel);\n\n element.on('changeDate', function(e) {\n $log.info('avDatepicker changeDate {0}', [e]);\n });\n\n // (view to model)\n ngModel.$parsers.push(avDatepicker.viewToModel);\n\n // (model to view) - added to end of formatters array\n // because they are processed in reverse order.\n // if the model is in Date format and send to the validation framework\n // prior to getting converted to the expected $viewValue format,\n // the validation will fail.\n ngModel.$formatters.push(avDatepicker.modelToView);\n ngModel.$formatters.push(avDatepicker.wrapIsoDate);\n\n var _$render = ngModel.$render;\n ngModel.$render = function() {\n _$render();\n avDatepicker.setValue();\n };\n\n var win = angular.element($window);\n\n win.bind('scroll', function() {\n avDatepicker.hide();\n });\n\n var target = element.siblings(AV_DATEPICKER.ADD_ON_SELECTOR);\n if(target.length) {\n target.on('click.datepicker', function() {\n if(!element.prop('disabled')) { // Hack check for IE 8\n element.focus();\n }\n });\n }\n\n scope.$on('destroy', function() {\n avDatepicker.destroy();\n if(target.length) {\n target.off('click.datepicker');\n }\n });\n\n scope.$evalAsync(function() {\n element.datepicker(avDatepicker.options);\n });\n }\n };\n });\n})(window);\n\n// Source: /lib/ui/idle/idle-notifier.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_UI_IDLE', {\n EVENTS: {\n OK: 'mousedown.av.idle.notifier'\n },\n TEMPLATES: {\n BASE: 'ui/idle/idle-tpl.html',\n SESSION: 'ui/idle/idle-session-tpl.html',\n WARNING: 'ui/idle/idle-warning-tpl.html'\n }\n });\n\n availity.ui.provider('avIdleNotifier', function() {\n\n var sessionTemplate;\n var warningTemplate;\n var $scope;\n\n this.setSessionTemplate = function(template) {\n sessionTemplate = template;\n };\n\n this.setWarningTemplate = function(template) {\n warningTemplate = template;\n };\n\n this.$get = function(AV_IDLE, AV_UI_IDLE, $rootScope, AvModal, $document, $timeout) {\n\n var AvIdleNotifier = function() {\n this.listeners = [];\n this.modal = null;\n };\n\n var proto = AvIdleNotifier.prototype;\n\n proto.init = function() {\n\n $scope = $rootScope.$new(true);\n $scope.idle = {};\n\n this.initListeners();\n };\n\n proto.initListeners = function() {\n\n var self = this;\n var listener = null;\n\n // ACTIVE IDLING\n listener = $rootScope.$on(AV_IDLE.EVENTS.IDLE_ACTIVE, function() {\n self.showWarning();\n });\n this.listeners.push(listener);\n\n // INACTIVE IDLING\n listener = $rootScope.$on(AV_IDLE.EVENTS.IDLE_INACTIVE, function() {\n self.hideWarning();\n });\n this.listeners.push(listener);\n\n // SESSION TIMEOUT OUT\n listener = $rootScope.$on(AV_IDLE.EVENTS.SESSION_TIMEOUT_ACTIVE, function() {\n self.showSession();\n });\n this.listeners.push(listener);\n\n };\n\n proto.destroyListeners = function() {\n // turn off each listener @see http://stackoverflow.com/a/14898795\n _.each(this.listeners, function(listener) {\n listener();\n });\n };\n\n proto.showWarning = function() {\n\n var self = this;\n\n if(this.modal !== null) {\n return;\n }\n\n $scope = $rootScope.$new(true);\n $scope.idle = {};\n $scope.idle.template = AV_UI_IDLE.TEMPLATES.WARNING;\n\n this.modal = new AvModal({\n show: true,\n scope: $scope,\n backdrop: 'static',\n templateUrl: AV_UI_IDLE.TEMPLATES.BASE\n });\n\n $document.find('body').on(AV_UI_IDLE.EVENTS.OK, function() {\n self.hideWarning();\n });\n\n };\n\n proto.hideWarning = function() {\n if(this.modal) {\n this.disableBackDrop();\n this.modal.hide();\n }\n\n this.modal = null;\n };\n\n proto.disableBackDrop = function() {\n $document.find('body').off(AV_UI_IDLE.EVENTS.OK);\n };\n\n proto.showSession = function() {\n var self = this;\n this.disableBackDrop();\n\n $timeout(function() {\n $scope.idle.template = AV_UI_IDLE.TEMPLATES.SESSION;\n $scope.idle.onSessionTimeout = _.bind(self.onSessionTimeout, self);\n }, 0, true);\n\n };\n\n proto.onSessionTimeout = function() {\n $rootScope.$broadcast(AV_IDLE.EVENTS.SESSION_TIMEOUT_REDIRECT);\n };\n\n return new AvIdleNotifier();\n\n };\n\n });\n\n availity.ui.run(function(avIdleNotifier) {\n avIdleNotifier.init();\n });\n\n})(window);\n\n// Source: /lib/ui/mask/mask.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_MASK', {\n NAME: 'inputmask',\n DEFAULTS: {\n date: '99/99/9999',\n phone: '(999) 999-9999',\n SSN:'999-99-9999'\n }\n });\n\n availity.ui.directive('avMask', function($window, $log, AV_MASK) {\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function(scope, element, attrs) {\n\n var maskType = AV_MASK.DEFAULTS[attrs['avMask']];\n if(!maskType) {\n maskType = attrs['avMask'];\n }\n\n scope.$evalAsync(function() {\n element.inputmask(maskType);\n });\n\n scope.$on('$destroy', function () {\n element.inputmask('remove');\n });\n }\n };\n });\n\n})(window);\n\n// Source: /lib/ui/permissions/has-permission.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.controller('AvHasPermissionController', function($element) {\n\n this.onSuccess = function(isAuthorized) {\n if(isAuthorized) {\n $element.removeClass('ng-hide');\n $element.show();\n } else {\n $element.remove();\n }\n };\n\n this.onError = function() {\n $element.remove();\n };\n\n });\n\n availity.ui.directive('avHasPermission', function(avUserAuthorizations) {\n return {\n restrict: 'EA',\n controller: 'AvHasPermissionController',\n require: ['avHasPermission'],\n link: function($scope, $element, $attr, controllers) {\n\n var avHasPermission = controllers[0];\n\n $element.hide();\n\n $scope.$watch($attr.avHasPermission, function(permissions) {\n\n if(!angular.isArray(permissions)) {\n permissions = _.words('' + permissions);\n }\n\n avUserAuthorizations.isAnyAuthorized(permissions).then(avHasPermission.onSuccess, avHasPermission.onError);\n });\n }\n };\n });\n\n})(window);\n\n// Source: /lib/ui/analytics/analytics.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.directive('avAnalytics', function() {\n return {\n scope: {\n options: '=avAnalytics'\n },\n controller: function($scope) {\n this.getOptions = function() {\n return $scope.options;\n };\n }\n };\n });\n\n availity.ui.controller('AvAnalyticsController', function(avAnalyticsUtils, avAnalytics) {\n\n this.onEvent = function(event, element, options) {\n\n // convert the directive attributes into object with properties with sane defaults\n var properties = angular.extend(\n {\n level: 'info'\n },\n options,\n {\n event: event.type\n }\n );\n\n // If an external link is detected\n if(avAnalyticsUtils.isExternalLink(properties)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n var promise = avAnalytics.trackEvent(properties);\n promise['finally'](function() {\n if(avAnalyticsUtils.isExternalLink(properties)) {\n document.location = element.attr('href');\n }\n });\n };\n });\n\n availity.ui.directive('avAnalyticsOn', function(AV_ANALYTICS, avAnalyticsUtils) {\n return {\n restrict: 'A',\n controller: 'AvAnalyticsController',\n require: ['avAnalyticsOn','?^avAnalytics'],\n link: function(scope, element, attrs, controllers) {\n var childCtrl = controllers[0];\n var parentCtrl = {};\n var parentOptions = {};\n\n if (controllers[1]) {\n parentCtrl = controllers[1];\n parentOptions = parentCtrl.getOptions();\n }\n\n var options = angular.extend(\n {},\n parentOptions,\n avAnalyticsUtils.getProperties(attrs)\n );\n\n var eventType = attrs.avAnalyticsOn || AV_ANALYTICS.EVENTS.DEFAULT;\n\n element.on(eventType, function(event) {\n childCtrl.onEvent(event, element, options);\n });\n }\n };\n });\n})(window);\n\n// Source: /lib/ui/placeholder/placeholder.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.requires.push('ng.shims.placeholder');\n\n availity.ui.config(function($provide) {\n\n $provide.decorator('placeholderDirective', ['$delegate', '$log', function($delegate, $log) {\n\n var directive = $delegate[0];\n var originalLink = directive.link;\n\n var newLink = function(scope, element, attrs) {\n\n if(originalLink && _.contains(_.keys(attrs), 'avMask')) {\n $log.info('placeholder shim not running on an element due to avMask on same element');\n return;\n }else if(originalLink) {\n originalLink.apply(this, arguments);\n }\n //else originalLink doesn't exist\n };\n\n directive.compile = function() {\n return newLink;\n };\n\n return $delegate;\n }]);\n\n });\n})(window);\n\n// Source: /lib/ui/breadcrumbs/breadcrumbs.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_BREADCRUMBS', {\n\n TEMPLATE: 'ui/breadcrumbs/breadcrumbs-tpl.html'\n });\n\n function AvBreadcrumbsController($state) {\n\n this.getBreadcrumb = function(breadcrumbs, state) {\n if(!state || !state.data) {\n return;\n }\n\n var breadcrumb = state.data.breadcrumb;\n if(!breadcrumb) {\n return;\n }\n\n if(breadcrumb.parent) {\n var parentState = $state.get(breadcrumb.parent);\n\n if(parentState) {\n this.getBreadcrumb(breadcrumbs, parentState);\n }\n }\n breadcrumb.state = state.name;\n breadcrumbs.push(breadcrumb);\n };\n\n this.getBreadcrumbs = function() {\n var breadcrumbs = [];\n this.getBreadcrumb(breadcrumbs, $state.current);\n return breadcrumbs;\n };\n\n }\n\n AvBreadcrumbsController.$inject = ['$state'];\n availity.ui.controller('AvBreadcrumbsController', AvBreadcrumbsController);\n\n function avBreadcrumbs(AV_BREADCRUMBS) {\n return {\n restrict: 'EA',\n replace: true,\n templateUrl: AV_BREADCRUMBS.TEMPLATE,\n controller: 'AvBreadcrumbsController',\n link: function(scope, element, attrs, avBreadcrumbs) {\n scope.breadcrumbs = avBreadcrumbs.getBreadcrumbs();\n\n scope.$on('$stateChangeSuccess', function() {\n scope.breadcrumbs = avBreadcrumbs.getBreadcrumbs();\n });\n }\n };\n }\n\n avBreadcrumbs.$inject = ['AV_BREADCRUMBS'];\n availity.ui.directive('avBreadcrumbs', avBreadcrumbs);\n\n})(window);\n\n// Source: /lib/ui/filters/approximate.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.filter('avApproximate', function() {\n var pow = Math.pow;\n var floor = Math.floor;\n var abs = Math.abs;\n var log = Math.log;\n\n function round(number, precision) {\n var prec = pow(10, precision);\n return Math.round(number * prec) / prec;\n }\n\n return function (number, precision) {\n precision = precision || 0;\n var base = floor(log(abs(number)) / log(1000));\n var unit = 'kMGTPE'[base - 1];\n return unit ? round(number / pow(1000, base), precision) + unit : (number || 0);\n };\n });\n\n})(window);\n\n// Source: /lib/ui/badge/badge.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_BADGE', {\n COLOR: null,\n DEFAULT_CLASS: 'badge',\n SHOW_WHEN_ZERO: false,\n TEMPLATE: 'ui/badge/badge-tpl.html'\n });\n\n function badgeDirective(AV_BADGE) {\n\n return {\n scope: {\n color: '@',\n count: '=avBadge',\n showWhenZero: '@'\n },\n templateUrl: AV_BADGE.TEMPLATE,\n link: function(scope, element) {\n scope.color = scope.color || AV_BADGE.COLOR;\n scope.showWhenZero = scope.showWhenZero || AV_BADGE.SHOW_WHEN_ZERO;\n\n var classes = [];\n classes.push(AV_BADGE.DEFAULT_CLASS);\n if(scope.color) {\n classes.push(scope.color);\n }\n\n element.addClass(classes.join(' '));\n }\n };\n }\n\n badgeDirective.$inject = ['AV_BADGE'];\n availity.ui.directive('avBadge', badgeDirective);\n\n})(window);\n\n// Source: /lib/ui/labels/removable-label.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_REMOVABLE_LABEL', {\n TEMPLATE: 'ui/labels/removable-label-tpl.html'\n });\n\n availity.ui.directive('avRemovableLabel', function(AV_REMOVABLE_LABEL) {\n return {\n templateUrl: AV_REMOVABLE_LABEL.TEMPLATE,\n transclude: true,\n scope: {\n removeValue: '=',\n onRemove: '&'\n },\n link: function(scope, element, attrs) {\n element.addClass('label-remove');\n scope.removeLabel = function() {\n if(!attrs.disabled) {\n scope.onRemove()(scope.removeValue);\n }\n };\n }\n };\n });\n\n})(window);\n\n// Source: /lib/ui/animation/loader.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_LOADER', {\n\n TEMPLATES: {\n LOADER: 'ui/animation/loader-tpl.html'\n }\n\n });\n\n availity.ui.controller('AvLoaderController', function($element) {\n\n var self = this;\n var active;\n\n this.start = function() {\n active = true;\n this.animate();\n };\n\n this.animate = function() {\n\n $element\n .find('.loading-bullet')\n .velocity('transition.slideRightIn', { stagger: 250 })\n .velocity({ opacity: 0 }, {\n delay: 750,\n duration: 500,\n complete: function() {\n if(active) {\n setTimeout(function() {self.animate();}, 500);\n } else {\n self.endAnimation();\n }\n }\n });\n\n };\n\n this.endAnimation = function() {\n $element.find('.loading-bullet').velocity('stop', true);\n $element.removeData();\n };\n\n this.stop = function() {\n active = false;\n };\n\n });\n\n availity.ui.directive('avLoader', function(AV_LOADER) {\n return {\n restrict: 'A',\n replace: true,\n controller: 'AvLoaderController',\n require: 'avLoader',\n templateUrl: AV_LOADER.TEMPLATES.LOADER,\n link: function(scope, element, attr, avLoader) {\n\n if(!attr.delay) {\n avLoader.start();\n }\n\n scope.$on('$destroy', function() {\n avLoader.stop();\n });\n\n }\n };\n });\n\n})(window);\n\n// Source: /lib/ui/block/block.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_BLOCK', {\n TEMPLATES: {\n BLOCK: 'ui/block/block-tpl.html'\n }\n });\n\n var getLoaderController = function(blockId) {\n var el = $('[data-block-ui=\"' + blockId + '\"]') || $('[block-ui=\"' + blockId + '\"]');\n if(el) {\n return el.find('[data-av-loader]').controller('avLoader');\n }\n };\n\n var triggerLoaderController = function(id, instance, fn) {\n\n var controller = instance.loaderController;\n if(!controller) {\n controller = getLoaderController(id);\n instance.loaderController = controller;\n }\n if(controller && _.isFunction(controller[fn])) {\n controller[fn]();\n }\n\n };\n\n var triggerInstance = function(id, instance, origFn, loaderFn) {\n triggerLoaderController(id, instance, loaderFn);\n origFn.apply(instance);\n };\n\n var modifyBlockInstances = function(id, instance) {\n\n var origStartFn = instance.start;\n var origStopFn = instance.stop;\n\n instance.start = function() {\n triggerInstance(id, instance, origStartFn, 'start');\n };\n\n instance.stop = function() {\n triggerInstance(id, instance, origStopFn, 'stop');\n };\n\n instance.startLoader = function() {\n triggerLoaderController(id, instance, 'start');\n };\n\n instance.avModifications = true;\n };\n\n availity.ui.run(function($injector, $log, AV_BLOCK) {\n\n try {\n\n var blockUIConfig = $injector.get('blockUIConfig');\n var blockUI = $injector.get('blockUI');\n blockUIConfig.autoBlock = false;\n blockUIConfig.delay = 0;\n blockUIConfig.templateUrl = AV_BLOCK.TEMPLATES.BLOCK;\n\n var origGetFn = blockUI.instances.get;\n blockUI.instances.get = function(id) {\n var instance = origGetFn(id);\n if(!instance.avModifications) {\n modifyBlockInstances(id, instance);\n }\n return instance;\n };\n\n } catch(e) {\n $log.warn('blockUI is required to use av block.');\n }\n });\n\n})(window);\n\n// Source: /lib/ui/block/block-directive.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n // Helper directive that hooks into block-ui's start-up lifecycle and starts the loader\n availity.ui.directive('avBlockUi', function(blockUI) {\n\n return {\n restrict: 'A',\n link: function($scope, $element, $attrs) {\n\n var blockId = $attrs.avBlockUi;\n var blockCount = $attrs.blockCount;\n var instance = blockUI.instances.get(blockId);\n if(blockCount > 0) {\n instance.startLoader();\n }\n }\n };\n\n });\n\n})(window);\n\n// Source: /lib/ui/tabs/tabs.js\n/*\n* Inspired by https://github.com/angular-ui/bootstrap/blob/master/src/tabs/tabs.js\n*/\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_TABS', {\n TEMPLATES: {\n TABS: 'ui/tabs/tabs-tpl.html',\n TAB: 'ui/tabs/tab-tpl.html'\n }\n });\n\n function TabsController($scope) {\n\n var self = this;\n\n $scope.tabs = [];\n self.tabs = $scope.tabs;\n\n this.addTab = function(tab) {\n self.tabs.push(tab);\n\n if(self.tabs.length === 1) {\n tab.active = true;\n } else if(tab.active) {\n self.selectTab(tab);\n } else {\n tab.active = false;\n }\n };\n\n this.removeTab = function(tab) {\n var index = self.tabs.indexOf(tab);\n\n if(tab.active && self.tabs.length > 1) {\n //If this is the last tab, select the previous tab. else, the next tab.\n var newActiveIndex = index === self.tabs.length - 1 ? index - 1 : index + 1;\n self.selectTab(self.tabs[newActiveIndex]);\n }\n\n self.tabs.splice(index, 1);\n };\n\n this.selectTab = function(selectedTab) {\n angular.forEach(self.tabs, function (tab) {\n if(tab.active && tab !== selectedTab) {\n tab.active = false;\n tab.onDeselect();\n }\n });\n\n selectedTab.active = true;\n selectedTab.onSelect();\n };\n }\n\n TabsController.$inject = ['$scope'];\n availity.ui.controller('AvTabsController', TabsController);\n\n function TabsDirective(AV_TABS) {\n return {\n restrict: 'AE',\n templateUrl: AV_TABS.TEMPLATES.TABS,\n transclude: true,\n replace: true,\n controller: 'AvTabsController',\n scope: true,\n link: function(scope, element, attrs) {\n scope.justified = !!attrs.justified;\n scope.tabType = attrs.tabType;\n scope.vertical = !!attrs.vertical;\n\n if(angular.isUndefined(attrs.padContent)) {\n scope.padContent = true;\n }\n }\n };\n }\n\n TabsDirective.$inject = ['AV_TABS'];\n availity.ui.directive('avTabs', TabsDirective);\n\n function TabDirective(AV_TABS) {\n return {\n restrict: 'AE',\n templateUrl: AV_TABS.TEMPLATES.TAB,\n replace: true,\n require: '^avTabs',\n transclude: true,\n scope: {\n heading: '@',\n template: '=',\n templateUrl: '=',\n onSelect: '&select',\n onDeselect: '&deselect'\n },\n controller: function() {\n // Allow avTabs to be required by other directives\n },\n link: function(scope, element, attrs, tabsController, transclude) {\n scope.transcludeFn = transclude;\n\n tabsController.addTab(scope);\n\n scope.$on('destroy', function() {\n tabsController.removeTab(scope);\n });\n\n scope.select = function() {\n if(!scope.disabled) {\n tabsController.selectTab(scope);\n }\n };\n\n scope.$watch('active', function(active) {\n if(active) {\n tabsController.selectTab(scope);\n }\n });\n\n if(angular.isDefined(attrs.active)) {\n scope.active = attrs.active;\n\n scope.$parent.$watch(attrs.active, function(active) {\n if(active) {\n tabsController.selectTab(scope);\n }\n });\n }\n\n if(angular.isDefined(attrs.disable)) {\n scope.$parent.$watch(attrs.disable, function(disabled) {\n scope.disabled = !!disabled;\n });\n }\n }\n };\n }\n\n TabDirective.$inject = ['AV_TABS'];\n availity.ui.directive('avTab', TabDirective);\n\n function TabPaneDirective(avTemplateCache, $compile) {\n return {\n restrict: 'AE',\n require: '^avTabs',\n link: function(scope, element, attrs) {\n\n var tab = scope.$eval(attrs.avTabPane);\n\n if(angular.isDefined(tab.template) || angular.isDefined(tab.templateUrl)) {\n avTemplateCache.get(tab)\n .then(function(template) {\n element.append($compile(template)(scope));\n });\n } else {\n tab.transcludeFn(tab.$parent, function(contents) {\n angular.forEach(contents, function(node) {\n element.append(node);\n });\n });\n }\n }\n };\n }\n\n TabPaneDirective.$inject = ['avTemplateCache', '$compile'];\n availity.ui.directive('avTabPane', TabPaneDirective);\n\n})(window);\n\n// Source: /lib/ui/scroll-pagination/scroll-pagination.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_SCROLL_PAGINATION', {\n TEMPLATE: 'ui/scroll-pagination/scroll-pagination-tpl.html',\n DEFAULT_OPTIONS: {\n limit: 50,\n offset: 0,\n maxCached: 100,\n loadMoreText: 'Load more items',\n entryIdAttribute: 'id',\n apiParams: {},\n beforePageLoad: undefined,\n afterPageLoad: undefined\n }\n });\n\n\n availity.ui.factory('avScrollPaginationService', function($log) {\n function AvScrollPaginationService() {\n this.instances = {};\n }\n\n var proto = AvScrollPaginationService.prototype;\n\n proto.registerInstance = function(instanceInterface, id) {\n if (this.instances[id]) {\n $log.warn('Found existing instance with id ' + id);\n }\n this.instances[id] = instanceInterface;\n };\n\n proto.unregisterInstance = function(id) {\n delete this.instances[id];\n };\n\n proto.resetInstance = function(id) {\n if (this.instances[id]) {\n this.instances[id].reset();\n return true;\n }\n return false;\n };\n\n return new AvScrollPaginationService();\n });\n\n availity.ui.controller('AvScrollPaginationController', function($scope, $element, $timeout, $log, AV_SCROLL_PAGINATION, blockUI, avScrollPaginationService) {\n\n var self = this;\n\n this.buildOptions = function() {\n $scope._options = {};\n _.extend($scope._options, AV_SCROLL_PAGINATION.DEFAULT_OPTIONS, $scope.options || {});\n $scope._options.lowOffset = $scope._options.offset;\n $scope._options.highOffset = $scope._options.offset;\n };\n\n var originalEntries = angular.copy($scope.entries);\n this.buildOptions();\n\n this.updateButtonVisibilityFlags = function(data) {\n $scope.showNext = $scope._options.highOffset + data.count < data.totalCount;\n $scope.showPrev = $scope._options.lowOffset > 0;\n };\n\n this.loadEntries = function(prepend) {\n var block = blockUI.instances.get('scroll-pagination-block-' + $scope.avScrollPagination);\n block.start();\n if (_.isFunction($scope._options.beforePageLoad)) {\n $scope._options.beforePageLoad($scope._options);\n }\n var params = {};\n _.extend(params, $scope._options.apiParams, {limit: $scope._options.limit, offset: $scope._options.offset});\n $scope.apiResource.query({params: params}).then(function(response) {\n var responseData = self.getResponseData(response);\n if ($scope._options.afterPageLoad) {\n $scope._options.afterPageLoad(responseData);\n }\n if (responseData && responseData[$scope._options.resourceId]) {\n self.addEntries(responseData[$scope._options.resourceId], prepend);\n }\n self.updateButtonVisibilityFlags(responseData);\n block.stop();\n }, function() {\n $log.error('API call failed');\n block.stop();\n });\n };\n\n this.getResponseData = function(data) {\n if (data) {\n if ($scope._options.responseKey) {\n var keys = $scope._options.responseKey.split('.');\n var nestedData = data;\n var noData = false;\n _.each(keys, function(key) {\n if (!noData) {\n nestedData = nestedData[key];\n if (!nestedData) {\n noData = true;\n }\n }\n });\n return noData ? [] : nestedData;\n } else {\n return data;\n }\n }\n return [];\n };\n\n this.addEntries = function(entries, prepend) {\n var oldEntries = angular.copy($scope.entries);\n if (prepend) {\n $scope.entries.unshift.apply($scope.entries, entries);\n } else {\n $scope.entries.push.apply($scope.entries, entries);\n }\n if ($scope.entries.length > $scope._options.maxCached) {\n var diff = $scope.entries.length - $scope._options.maxCached;\n var trackedElementId;\n if (prepend) {\n $scope.entries = $scope.entries.slice(0, $scope._options.maxCached);\n $scope._options.highOffset -= diff;\n trackedElementId = oldEntries[oldEntries.length-diff-1] ? oldEntries[oldEntries.length-diff-1][$scope._options.entryIdAttribute] : undefined;\n } else {\n $scope.entries = $scope.entries.slice(diff, $scope.entries.length);\n $scope._options.lowOffset += diff;\n trackedElementId = oldEntries[diff] ? oldEntries[diff][$scope._options.entryIdAttribute] : undefined;\n }\n self.autoscroll(trackedElementId, prepend);\n }\n };\n\n this.autoscroll = function(trackedElementId, prepend) {\n if (trackedElementId) {\n var trackedElement = $element.find('#'+trackedElementId);\n var trackedElementTop = trackedElement.offset().top;\n $timeout(function() {\n var newScrollTop = $element.scrollTop() + trackedElement.offset().top - trackedElementTop;\n $element.animate({scrollTop: newScrollTop}, 0);\n }, 0, false);\n } else {\n $timeout(function() {\n if (prepend) {\n $element.animate({scrollTop: $element.prop('scrollHeight')}, 0);\n } else {\n $element.animate({scrollTop: 0}, 0);\n }\n }, 0, false);\n }\n };\n\n this.loadPrev = function() {\n $scope._options.lowOffset -= $scope._options.limit;\n $scope._options.offset = $scope._options.lowOffset;\n self.loadEntries(true);\n };\n\n this.loadNext = function() {\n $scope._options.highOffset += $scope._options.limit;\n $scope._options.offset = $scope._options.highOffset;\n self.loadEntries();\n };\n\n avScrollPaginationService.registerInstance({\n reset: function() {\n $element.animate({scrollTop: 0}, 0);\n $scope.entries = angular.copy(originalEntries);\n self.buildOptions();\n self.loadEntries();\n }},\n $scope.avScrollPagination\n );\n\n $scope.$on('$destroy', function() {\n avScrollPaginationService.unregisterInstance($scope.avScrollPagination);\n });\n\n $scope.loadPrev = self.loadPrev;\n $scope.loadNext = self.loadNext;\n\n this.loadEntries();\n });\n\n\n\n availity.ui.directive('avScrollPagination', function($log, AV_SCROLL_PAGINATION) {\n return {\n restrict: 'A',\n controller: 'AvScrollPaginationController',\n transclude: true,\n templateUrl: AV_SCROLL_PAGINATION.TEMPLATE,\n scope: {\n apiResource: '=',\n entries: '=',\n options: '=',\n avScrollPagination: '@'\n },\n link: function($scope) {\n if (!$scope.avScrollPagination) {\n $log.error('Directive must include an id');\n }\n }\n };\n });\n\n})(window);\n\n//# sourceMappingURL=maps/availity-angular-ui.js.map\n","/*global module*/\n\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity || {};\n\n availity.MODULE_UI = 'availity.ui';\n availity.ui = angular.module(availity.MODULE_UI, ['ng', 'ngSanitize']);\n\n availity.ui.constant('AV_UI', {\n // jscs: disable\n NG_OPTIONS: /^\\s*([\\s\\S]+?)(?:\\s+as\\s+([\\s\\S]+?))?(?:\\s+group\\s+by\\s+([\\s\\S]+?))?\\s+for\\s+(?:([\\$\\w][\\$\\w]*)|(?:\\(\\s*([\\$\\w][\\$\\w]*)\\s*,\\s*([\\$\\w][\\$\\w]*)\\s*\\)))\\s+in\\s+([\\s\\S]+?)(?:\\s+track\\s+by\\s+([\\s\\S]+?))?$/\n // jscs: enable\n });\n\n if(typeof module !== 'undefined' && module.exports) {\n module.exports = availity;\n }\n\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.factory('avTemplateCache', function($q, $templateCache, $http) {\n\n return {\n\n get: function(options) {\n\n var valid = !options.template || !options.templateUrl;\n\n if(!valid) {\n throw new Error('Either options.template or options.templateUrl must be defined for avTemplateCache');\n }\n\n return options.template ? $q.when(options.template) :\n $http.get(options.templateUrl, {cache: $templateCache})\n .then(function(result) {\n return result.data;\n });\n }\n };\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_MODAL', {\n\n OPTIONS: {\n scope: null,\n templateUrl: null,\n template: null,\n id: null,\n container: null,\n\n // Bootstrap defaults\n keyboard: true,\n backdrop: true,\n show: false,\n remote: false\n },\n\n EVENTS: {\n SHOW: 'show.av.modal',\n SHOWN: 'shown.av.modal',\n HIDE: 'hide.av.modal',\n HIDDEN: 'hidden.av.modal'\n },\n\n NAMESPACE: {\n MODAL: 'bs.modal'\n },\n\n BS_EVENTS: {\n SHOW: 'show.bs.modal',\n SHOWN: 'shown.bs.modal',\n HIDE: 'hide.bs.modal',\n HIDDEN: 'hidden.bs.modal'\n },\n\n TEMPLATES: {\n MODAL: 'ui/modal/modal-tpl.html'\n }\n });\n\n availity.ui.factory('avModalManager', function() {\n\n var AvModalManager = function() {\n this.instances = [];\n };\n\n var proto = AvModalManager.prototype;\n\n proto.add = function(id) {\n this.instances.push(id);\n };\n\n proto.remove = function(id) {\n this.instances = _.without(this.instances, id);\n };\n\n proto.closeAll = function() {\n\n _.forEach(this.instances, function(id) {\n\n var $el = $('#' + id);\n\n if(!$el) {\n return;\n }\n\n var bsModal = $el.data('bs.modal');\n if(bsModal) {\n bsModal.removeBackdrop();\n bsModal.$body.removeClass('modal-open');\n bsModal.resetAdjustments();\n bsModal.resetScrollbar();\n }\n\n var avModal = $el.data('AvModal');\n if(avModal) {\n avModal.destroy();\n }\n\n });\n };\n\n return new AvModalManager();\n\n });\n\n var ModalFactory = function($rootScope, $timeout, $compile, AV_MODAL, avTemplateCache, $q, avModalManager) {\n\n var Modal = function(options) {\n\n var self = this;\n\n this.templateDefer = $q.defer();\n this.templatePromise = this.templateDefer.promise;\n\n this.options = angular.extend({}, AV_MODAL.OPTIONS, {scope: $rootScope.$new()}, options);\n\n avTemplateCache.get(options).then(function(template) {\n self.options.template = template;\n self._build();\n });\n\n };\n\n Modal.create = function(options) {\n return new Modal(options);\n };\n\n var proto = Modal.prototype;\n\n proto._build = function() {\n\n var self = this;\n\n var scope = this.options.scope;\n this.$element = angular.element(this.options.template);\n\n this._createId();\n\n this._scope();\n\n $compile(this.$element)(scope);\n\n $timeout(function() {\n self._init();\n }, 0, true);\n\n // Append to container or \n this.options.container ? this.$element.appendTo(this.options.container) : this.$element.appendTo('body');\n\n };\n\n proto._init = function() {\n\n this.$element.data('AvModal', this);\n\n this.templateDefer.resolve(true);\n\n // Initialize Bootstrap jQuery plugin\n this.$element.modal({\n 'backdrop': this.options.backdrop,\n 'keyboard': this.options.keyboard,\n 'show': this.options.show,\n 'remote': this.options.remote\n });\n\n this._listeners();\n };\n\n // Add helpers to scope so clients can call internal methods\n proto._scope = function() {\n\n var self = this;\n var scope = this.options.scope;\n\n scope.modalShow = function() {\n return self.show();\n };\n\n scope.modalToggle = function() {\n return self.toggle();\n };\n\n scope.modalHide = function() {\n return self.hide();\n };\n\n };\n\n proto._listeners = function() {\n\n var self = this;\n var scope = this.options.scope;\n var $element = this.$element;\n\n this.animationShowDefer = $q.defer();\n this.animationHideDefer = $q.defer();\n\n $element.on(AV_MODAL.BS_EVENTS.SHOW, function(event) {\n scope.$emit(AV_MODAL.EVENTS.SHOW, event, self);\n });\n\n $element.on(AV_MODAL.BS_EVENTS.SHOWN, function(event) {\n\n if(angular.isFunction(self.options.onShown)) {\n self.options.onShown();\n }\n\n self.animationShowDefer.resolve(true);\n\n scope.$emit(AV_MODAL.EVENTS.SHOWN, event, self);\n });\n\n $element.on(AV_MODAL.BS_EVENTS.HIDE, function(event) {\n scope.$emit(AV_MODAL.EVENTS.HIDE, event, self);\n });\n\n $element.on(AV_MODAL.BS_EVENTS.HIDDEN, function(event) {\n\n if(angular.isFunction(self.options.onHidden)) {\n self.options.onHidden.call(this);\n }\n\n self.animationHideDefer.resolve(true);\n scope.$emit(AV_MODAL.EVENTS.HIDDEN, event, self);\n\n scope.$evalAsync(function() {\n self.destroy();\n });\n\n });\n\n // Garbage collection\n scope.$on('$destroy', function() {\n avModalManager.remove(self._id);\n self.destroy();\n });\n\n };\n\n proto.show = function() {\n\n var self = this;\n this.animationShowDefer = $q.defer();\n\n this.templatePromise.then(function() {\n self.isShown() ? self.animationShowDefer.resolve(true) : self.$element.modal('show');\n });\n\n return this.animationShowDefer.promise;\n\n };\n\n proto.hide = function() {\n\n var self = this;\n this.animationHideDefer = $q.defer();\n\n this.templatePromise.then(function() {\n !self.isShown() ? self.animationHideDefer.resolve(true) : self.$element.modal('hide');\n });\n\n return this.animationHideDefer.promise;\n };\n\n proto.isShown = function() {\n return this.$element.data(AV_MODAL.NAMESPACE.MODAL).isShown;\n },\n\n proto.toggle = function() {\n\n var self = this;\n\n return this.templatePromise.then(function() {\n return self.isShown() ? self.hide() : self.show();\n });\n\n };\n\n proto.destroy = function() {\n\n var self = this;\n\n return this.templatePromise.then(function() {\n self.$element.data('AvModal', null);\n self.$element.remove();\n });\n\n };\n\n proto._createId = function() {\n // Create a unique id for the modal if not present or passed in via options\n var id = this.$element.attr('id');\n if(!id) {\n // Get id from options or create a unique id\n id = this.options.id ? this.options.id : availity.uuid('av-modal-id');\n this.$element.attr('id', id);\n }\n\n this._id = id;\n\n avModalManager.add(id);\n };\n\n return Modal;\n };\n\n availity.ui.factory('AvModal', ModalFactory);\n\n availity.ui.directive('avModal', function(AV_MODAL) {\n return {\n restrict: 'A',\n replace: true,\n transclude: true,\n scope: {\n size: '@'\n },\n templateUrl: AV_MODAL.TEMPLATES.MODAL\n };\n });\n\n})(window);\n","/**\n * 1. All fields should be pristine on first load\n * 2. If field is modified an invalid the field should be marked with an error\n *\n */\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.controller('avValFormController', function() {\n\n this.ngForm = null;\n this.rulesKey = null;\n this.avValOn = null;\n this.avValDebounce = null;\n this.avValInvalid = false;\n\n // Object that stores the unique id (key) and violation count (value) of all the form fields\n //\n // EX:\n //\n // {\n // avVal001: 0\n // avVal002: 2\n // avVal003: 1\n // }\n this.violations = {};\n\n this.init = function(form) {\n this.ngForm = form;\n };\n\n /**\n * Records id of the form field and number of violations\n * @param {[type]} id [description]\n * @param {[type]} count [description]\n * @return {[type]} [description]\n */\n this.record = function(id, count) {\n this.violations[id] = count;\n\n var violocationCount = _.reduce(this.violations, function(sum, num) {\n return sum + num;\n }, 0);\n\n this.ngForm.$setValidity('av', violocationCount === 0);\n };\n\n this.unrecord = function(id) {\n if(id && this.violations[id]) {\n delete this.violations[id];\n }\n };\n\n this.reset = function() {\n this.ngForm.$setPristine();\n this.ngForm.$submitted = false;\n };\n\n this.$setSubmitted = function() {\n this.ngForm.$submitted = true;\n };\n\n this.setRulesKey = function(key) {\n this.rulesKey = key;\n };\n\n });\n\n // form.$error = {};\n // form.$$success = {};\n // form.$pending = undefined;\n // form.$name = $interpolate(attrs.name || attrs.ngForm || '')($scope);\n // form.$dirty = false;\n // form.$pristine = true;\n // form.$valid = true;\n // form.$invalid = false;\n // form.$submitted = false;\n\n availity.ui.directive('avValForm', function($log, $timeout, $parse, AV_VAL, avValAdapter, $rootScope) {\n return {\n restrict: 'A',\n priority: 10,\n require: ['form', 'avValForm'],\n controller: 'avValFormController',\n compile: function() {\n return {\n pre: function(scope, iEl, iAttrs, controllers) {\n\n var ruleFn = $parse(iAttrs.avValForm);\n var rulesKey = ruleFn(scope);\n rulesKey = rulesKey || iAttrs.avValForm; // interpolated rule from scope || fixed string\n\n if(!rulesKey) {\n $log.error('avValForm requires a rules key in order to run the proper validation rules.');\n return;\n }\n\n scope.$watch(ruleFn, function(_rulesKey, _oldRulesKey) {\n if(_rulesKey) {\n avForm.setRulesKey(_rulesKey);\n\n if(_rulesKey !== _oldRulesKey) {\n $timeout(function() {\n $log.info('avValForm revalidate');\n $rootScope.$broadcast(AV_VAL.EVENTS.REVALIDATE);\n });\n }\n\n }\n\n });\n\n var ngForm = controllers[0];\n var avForm = controllers[1];\n\n // Allow form attributes to define the validation behavior of the form fields\n // inside it. If `av-val-on` or `av-val-debounce` are on the form then all form\n // fields inside the form would inherit this behavior.\n avForm.avValOn = iAttrs.avValOn || null;\n avForm.avValDebounce = iAttrs.avValDebounce || null;\n // Allows fields to update with invalid data for dirty form saving\n avForm.avValInvalid = iAttrs.avValInvalid || false;\n\n avForm.init(ngForm);\n avForm.setRulesKey(rulesKey);\n\n },\n post: function(scope, iEl, iAttrs, controllers) {\n\n iEl.attr('novalidate', 'novalidate'); // prevent HTML5 validation from kicking in\n\n // Disable ng-submit or ng-click handlers and store the function to call for submitting\n var fn;\n if(iAttrs.ngSubmit) {\n // Disable ng-submit event\n iEl.off('submit');\n fn = $parse(iAttrs.ngSubmit, /* expensiveChecks */ true);\n }else if(iAttrs.ngClick) {\n // Disable ng-click event\n iEl.off('click');\n fn = $parse(iAttrs.ngClick, /* expensiveChecks */ true);\n }\n\n var ngForm = controllers[0];\n var avForm = controllers[1];\n\n scope.$on(AV_VAL.EVENTS.RESET, function () {\n avForm.reset();\n });\n\n iEl.bind('submit', function(event) {\n\n scope.$broadcast(AV_VAL.EVENTS.SUBMITTED);\n avForm.$setSubmitted();\n\n if(ngForm.$invalid) {\n\n scope.$broadcast(AV_VAL.EVENTS.FAILED);\n\n $log.info('avValForm invalid. preventing default submit action');\n\n event.preventDefault();\n event.stopImmediatePropagation();\n scope.$broadcast(event);\n\n avValAdapter.scroll(iEl);\n return;\n }\n\n ngForm.$setPristine();\n\n if(!fn) {\n return;\n }\n\n var callback = function() {\n fn(scope, {$event:event});\n };\n\n scope.$apply(callback);\n\n });\n\n }\n };\n }\n };\n });\n\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.controller('AvValFieldController', function($element, avValAdapter, $attrs, avVal, $log, $timeout, $scope, $sniffer) {\n\n this.ngModel = null;\n this.rule = null;\n this.avValForm = null;\n this.avValInvalid = false;\n\n var self = this;\n\n var placeholder = $element[0].placeholder;\n var noEvent = {};\n\n this.createId = function() {\n this.ngModel.avId = availity.uuid('avVal');\n };\n\n this.setNgModel = function(ngModel) {\n this.ngModel = ngModel;\n };\n\n this.setRule = function(rule) {\n this.rule = rule;\n };\n\n this.avValForm = function(avValForm) {\n this.avValForm = avValForm;\n };\n\n this.updateModel = function(results) {\n\n var self = this;\n var validationKeys = [];\n\n this.ngModel.avResults = results;\n\n // set state for each violation\n angular.forEach(results.violations, function (result) {\n var key = 'av-' + result.contraintName;\n validationKeys.push(key);\n self.ngModel.$setValidity(key, result.valid);\n });\n\n // set overall state for validation state\n this.ngModel.$setValidity('av', this.ngModel.avResults.isValid);\n\n // store violations\n this.ngModel.avViolations = this.ngModel.avResults.violations;\n\n // record the id and violation count in the av-form controller. this determines if the form is\n // valid if sum of violations for all form inputs === zero\n this.avValForm.record(this.ngModel.avId, this.ngModel.avResults.violations.length);\n\n // remove violation keys that are no longer falsy\n angular.forEach(this.ngModel.$error, function(value, key) {\n\n if(_.indexOf(validationKeys, key) === -1 && key.lastIndexOf('av-', 0) === 0) {\n self.ngModel.$setValidity(key, true);\n }\n });\n };\n\n this.updateView = function() {\n if(this.ngModel.$dirty || $scope.avValShow) {\n avValAdapter.element($element, this.ngModel, this.ngModel.avResults.isValid);\n avValAdapter.message($element, this.ngModel);\n }\n };\n\n this.validate = function(value) {\n\n $log.info('validating value [' + value + ']');\n\n var rulesKey = self.avValForm.rulesKey;\n var results = avVal.validate(rulesKey, $element, value, self.rule);\n\n // validate function is called within the context of angular so fn.call and set the context\n // to \"this\"\n self.updateModel.call(self, results);\n self.updateView.call(self);\n\n return results;\n };\n\n this.validateModel = function(value) {\n\n self.validate(value, true);\n return value;\n\n };\n\n this.validateView = function(value) {\n\n var results = self.validate(value);\n\n if(self.avValForm.avValInvalid || self.avValInvalid) {\n // allows invalid data from view to update model for dirty saving\n return value;\n }\n\n // prevent invalid data from view to update model\n return results.isValid ? value : undefined;\n\n };\n\n this.onDebounce = function() {\n\n var value = $element.val().trim();\n\n if(this.isCheckbox()) {\n this.ngModel.$setViewValue($element[0].checked);\n } else if(this.isRadio()) {\n this.ngModel.$setViewValue($attrs.value);\n }else {\n this.ngModel.$setViewValue(value);\n }\n\n };\n\n this.isRadio = function() {\n return $element.is('input') && $attrs.type === 'radio';\n };\n\n this.isCheckbox = function() {\n return $element.is('input') && $attrs.type === 'checkbox';\n };\n\n this.reset = function() {\n\n var violations = this.ngModel.avResults.violations;\n violations.splice(0, violations.length);\n\n avValAdapter.message($element, this.ngModel);\n avValAdapter.reset($element);\n\n };\n\n this.event = function(event, avValDebounce) {\n\n var self = this;\n\n $element.unbind('input');\n\n var debounce;\n\n $element.on(event, function() {\n\n // https://github.com/angular/angular.js/blob/v1.2.27/src/ng/directive/input.js#L508\n if($sniffer.msie <= 11 && (event || noEvent).type === 'input' && $element[0].placeholder !== placeholder) {\n placeholder = $element[0].placeholder;\n return;\n }\n\n $timeout.cancel(debounce);\n debounce = $timeout(function() {\n $scope.$apply(function() {\n self.onDebounce();\n });\n }, avValDebounce);\n\n });\n\n };\n\n });\n\n // Events:\n //\n // click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown\n // keyup keypress submit focus blur copy cut paste\n availity.ui.directive('avValField', function($log, $timeout, avVal, avValAdapter, AV_VAL) {\n return {\n restrict: 'A',\n controller: 'AvValFieldController',\n require: ['^avValForm', 'ngModel', 'avValField'],\n scope: {\n avValDebounce: '@?',\n avValOn: '@?',\n avValShow: '=?'\n },\n link: function(scope, element, attrs, controllers) {\n\n var rule = attrs.avValField;\n var avValForm = controllers[0];\n var ngModel = controllers[1];\n var avValField = controllers[2];\n\n var avValOn = scope.avValOn || avValForm.avValOn || 'input';\n\n if(!ngModel && !rule) {\n $log.error('avValField requires ngModel and a validation rule to run.');\n return;\n }\n\n // Allows fields to update with invalid data for dirty form saving\n avValField.avValInvalid = attrs.avValInvalid || false;\n\n // CACHE THE MODEL\n avValField.setNgModel(ngModel);\n\n avValField.avValForm(avValForm);\n\n avValField.setRule(rule);\n\n avValField.createId();\n\n // DEBOUNCE\n var avValDebounce = parseInt(scope.avValDebounce || (avValForm.avValDebounce || AV_VAL.DEBOUNCE), 10);\n avValDebounce = _.isNumber(avValDebounce) ? avValDebounce : AV_VAL.DEBOUNCE;\n\n var debounceAllowed = !avValField.isRadio() && !avValField.isCheckbox() && avValOn !== 'blur';\n\n if(!debounceAllowed) {\n avValDebounce = 0;\n }\n\n // EVENT LISTENER\n avValField.event(avValOn, avValDebounce);\n\n // (view to model)\n ngModel.$parsers.push(avValField.validateView);\n\n // (model to view) - added to beginning of array because formatters\n // are processed in reverse order thus allowing the model to be transformed\n // before the validation framework check for validity.\n ngModel.$formatters.unshift(avValField.validateModel);\n\n scope.$on(AV_VAL.EVENTS.REVALIDATE, function() {\n avValField.validate(ngModel.$viewValue);\n });\n\n // SUBMITTED EVENT\n scope.$on(AV_VAL.EVENTS.SUBMITTED, function() {\n ngModel.$dirty = true;\n avValField.validate(ngModel.$viewValue);\n });\n\n // - Removes all errors on page,\n // - does not reset view or model values. This is to be handled by the app.\n scope.$on(AV_VAL.EVENTS.RESET, function () {\n avValField.reset();\n });\n\n scope.$on('$destroy', function () {\n avValForm.unrecord(ngModel.avId);\n });\n\n }\n };\n });\n\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.provider('avPopoverConfig', function() {\n\n var config = {\n showOnLoadHideDelay: 10000\n };\n\n this.set = function(options) {\n angular.extend(config, options);\n };\n\n this.$get = function() {\n return angular.copy(config);\n };\n });\n\n availity.ui.constant('AV_POPOVER', {\n NAME: 'bs.popover'\n });\n\n availity.ui.controller('AvPopoverController', function($element, $scope, AV_POPOVER, $timeout, avPopoverConfig) {\n this.options = angular.extend({}, avPopoverConfig);\n\n this.listeners = function() {\n\n var self = this;\n\n angular.forEach(['show', 'shown', 'hide', 'hidden'], function(name) {\n $element.on(name + '.bs.popover', function(ev) {\n $scope.$emit('av:popover:' + name, ev);\n });\n });\n\n $scope.$on('destroy', function() {\n self.destroy();\n });\n };\n\n this.plugin = function() {\n return $element.data(AV_POPOVER.NAME);\n };\n\n this.show = function() {\n $element.popover('show');\n };\n\n this.hide = function() {\n $element.popover('hide');\n };\n\n this.toggle = function() {\n $element.popover('toggle');\n };\n\n this.destroy = function() {\n $element.popover('destroy');\n };\n\n\n this.init = function() {\n\n this.listeners();\n\n if($scope.showOnLoad) {\n\n this.show();\n\n if($scope.delay && $scope.delay.hide) {\n $timeout(this.hide, $scope.delay.hide, false);\n return;\n }\n // If no delay is found or cannot be parsed, set a default timeout so that the popover doesn't stick around forever\n $timeout(this.hide, this.options.showOnLoadHideDelay, false);\n }\n };\n\n\n });\n\n availity.ui.directive('avPopover', function() {\n return {\n restrict: 'A',\n controller: 'AvPopoverController',\n scope: {\n showOnLoad: '=',\n delay: '='\n },\n link: function(scope, element, attrs, avPopover) {\n\n var options = {};\n\n scope.$evalAsync(function() {\n element.popover(angular.extend({}, options, {\n html: true\n }));\n avPopover.init();\n });\n }\n };\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.controller('avValContainerController', function($scope, $timeout) {\n\n this.message = function(ngModel) {\n\n var message = null;\n if(ngModel.avResults.violations.length && ngModel.avResults.violations[0].message) {\n message = ngModel.avResults.violations[0].message;\n }else {\n message = null;\n }\n\n // $timeout is needed to update the UI from $broadcast events\n $timeout(function() {\n $scope.messages.message = message;\n });\n\n };\n\n });\n\n availity.ui.directive('avValContainer', function() {\n return {\n restrict: 'A',\n controller: 'avValContainerController',\n template: '

            ',\n replace: true,\n scope: {\n\n },\n link: function(scope) {\n scope.messages = _.extend({}, scope.messages, { message: null, id: null });\n }\n };\n });\n\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_BOOTSTRAP_ADAPTER', {\n CLASSES: {\n SUCCESS: 'has-success',\n WARNING: 'has-warning',\n ERROR: 'has-error',\n FEEDBACK: 'has-feedback',\n HELP: 'help-block',\n FORM_GROUP: '.form-group:first',\n NAVBAR: 'navbar-fixed-top'\n },\n SELECTORS: {\n CONTAINER: 'container-id',\n DATA_CONTAINER: 'data-container-id'\n },\n CONTROLLER: '$avValContainerController'\n });\n\n availity.ui.factory('avValBootstrapAdapter', function(AV_BOOTSTRAP_ADAPTER, $timeout, $log) {\n\n return {\n\n element: function(element, ngModel) {\n if(ngModel.$valid) {\n element.parents(AV_BOOTSTRAP_ADAPTER.CLASSES.FORM_GROUP).removeClass(AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR);\n }else {\n element.parents(AV_BOOTSTRAP_ADAPTER.CLASSES.FORM_GROUP).addClass(AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR);\n }\n },\n\n reset: function(element) {\n element.parents(AV_BOOTSTRAP_ADAPTER.CLASSES.FORM_GROUP).removeClass(AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR);\n },\n\n message: function(element, ngModel) {\n\n var selector = [\n '.',\n AV_BOOTSTRAP_ADAPTER.CLASSES.HELP\n ].join('');\n\n var $el = $(element);\n\n var target = $el.attr(AV_BOOTSTRAP_ADAPTER.SELECTORS.CONTAINER);\n target = target || $el.attr(AV_BOOTSTRAP_ADAPTER.SELECTORS.DATA_CONTAINER);\n // default to siblings\n target = target ? $('#' + target) : $el.siblings(selector);\n\n if(target.length === 0) {\n $log.warn('avValBootstrapAdapter could not find validation container for {0}', [element]);\n return;\n }\n\n var el = target[0];\n $el = angular.element(el);\n var avValModel = $el.data(AV_BOOTSTRAP_ADAPTER.CONTROLLER); // get the av val message controller\n if(avValModel) {\n avValModel.message(ngModel);\n }\n },\n\n scroll: function(form) {\n\n // Bootstrap fixed navbars causes bad scroll-to offsets so find them all\n var navbarSelector = [\n '.',\n AV_BOOTSTRAP_ADAPTER.CLASSES.NAVBAR\n ].join('');\n\n // Add up all the heights to find the true offset\n var offset = 0;\n $(navbarSelector).each(function() {\n offset += $(this).outerHeight();\n });\n\n var selector = [\n '.',\n AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR,\n ':first'\n ].join('');\n\n var $target = $(form).find(selector);\n $timeout(function() {\n // scroll to offset top of first error minus the offset of the navbars\n $('body, html').animate({scrollTop: $target.offset().top - offset}, 'fast');\n }, 0, false);\n }\n };\n });\n\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_VAL_ADAPTER', {\n DEFAULT: 'avValBootstrapAdapter'\n });\n\n availity.ui.provider('avValAdapter', function() {\n\n var that = this;\n\n this.setAdapter = function(adapter) {\n this.adapter = adapter;\n };\n\n this.$get = function(AV_VAL_ADAPTER, $injector) {\n\n var Adapter = function() {\n var adapterName = that.adapter || AV_VAL_ADAPTER.DEFAULT;\n this.adapter = $injector.get(adapterName);\n };\n\n var proto = Adapter.prototype;\n\n proto.element = function(element, ngModel) {\n this.adapter.element(element, ngModel);\n };\n\n proto.reset = function(element) {\n this.adapter.reset(element);\n };\n\n proto.message = function(element, ngModel) {\n this.adapter.message(element, ngModel);\n },\n\n proto.scroll = function(form) {\n this.adapter.scroll(form);\n };\n\n return new Adapter();\n };\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.provider('avDropdownConfig', function() {\n var config = {\n closeOnResize: true,\n dropdownAutoWidth: true,\n minimumResultsForSearch: 5\n };\n\n this.set = function(options) {\n angular.extend(config, options);\n };\n\n this.$get = function() {\n return angular.copy(config);\n };\n });\n\n availity.ui.constant('AV_DROPDOWN', {\n OPTIONS: [\n 'width',\n 'minimumInputLength',\n 'maximumInputLength',\n 'minimumResultsForSearch',\n 'maximumSelectionSize',\n 'placeholderOption',\n 'separator',\n 'allowClear',\n 'multiple',\n 'closeOnSelect',\n 'openOnEnter',\n 'id',\n 'matcher',\n 'sortResults',\n 'formatSelection',\n 'formatResult',\n 'formatResultCssClass',\n 'formatNoMatches',\n 'formatSearching',\n 'formatAjaxError',\n 'formatInputTooShort',\n 'formatInputTooLong',\n 'formatSelectionTooBig',\n 'formatLoadMore',\n 'createSearchChoice',\n 'createSearchChoicePosition',\n 'initSelection',\n 'tokenizer',\n 'tokenSeparators',\n 'query',\n 'ajax',\n 'data',\n 'tags',\n 'containerCss',\n 'containerCssClass',\n 'dropdownCss',\n 'dropdownCssClass',\n 'dropdownAutoWidth',\n 'adaptContainerCssClass',\n 'adaptDropdownCssClass',\n 'escapeMarkup',\n 'selectOnBlur',\n 'loadMorePadding',\n 'nextSearchTerm',\n 'correlationId'\n ]\n });\n\n\n availity.ui.controller('AvDropdownController', function($element, $attrs, AV_UI, AV_DROPDOWN, avDropdownConfig, $log, $scope, $timeout, $parse) {\n\n var self = this;\n this.options = {};\n this.match = null;\n this.ngModel = null;\n\n this.init = function() {\n\n self.options = angular.extend({}, avDropdownConfig);\n\n _.forEach($attrs, function(value, key) {\n if(_.contains(AV_DROPDOWN.OPTIONS, key.replace('data-', ''))) {\n self.options[key] = $scope.$eval(value);\n }\n });\n\n if(this.isRemoteMultiple()) {\n self.options.multiple = angular.isDefined($attrs.multiple);\n }\n\n self.multiple = angular.isDefined($attrs.multiple);\n\n if(self.options.query) {\n\n self.queryFn = self.options.query;\n // Function used to query results for the search term.\n self.options.query = self.query;\n // Function used to get the id from the choice object or a string representing the key under which the id is stored.\n self.options.id = self.getId;\n }\n\n };\n\n this.isRemoteMultiple = function() {\n if(angular.isDefined($attrs.multiple) && $element.get(0).tagName.toLowerCase() === 'input') {\n return true;\n }\n return false;\n };\n\n this.setRemoteViewValue = function(e) {\n\n var values = this.ngModel.$viewValue;\n\n if(!angular.isArray(values) || !angular.isObject(values)) {\n values = [];\n }\n\n if(e.added) {\n // Adding to collection\n values.push(e.added);\n } else {\n // Removing from collection\n var index = _.findIndex(values, function(value) {\n return _.matches(e.removed)(value);\n });\n values.splice(index, 1);\n }\n\n this.ngModel.$setViewValue(values);\n\n };\n\n this.setViewValue = function(e) {\n this.ngModel.$setViewValue(e.added);\n };\n\n this.setNgModel = function(ngModel) {\n this.ngModel = ngModel;\n };\n\n this.getSelected = function(model) {\n\n if(self.options.query) {\n return 0;\n }\n\n var items = this.collection($scope);\n\n var index = _.findIndex(items, function(item) {\n return angular.equals(item, model);\n });\n\n return index;\n\n };\n\n // Result:\n //\n // {\n // \"code\": \"252Y00000X\",\n // \"value\": \"AGENCIES,EARLY INTERVENTION PROVIDER AGENCY,NOT APPLICABLE|Agency\",\n // \"id\": \"252Y00000X\"\n // }\n this.getId = function(result) {\n return result.id;\n };\n\n // Wrapper around the query function for Select2. When the promise resolves\n // the callback\n this.query = function(options) {\n\n self.queryFn(options).then(function(response) {\n\n // Callback function that should be called with the result object. The result object:\n //\n // result.results (object) - Array of result objects. The default renderers\n // expect objects with id and text keys. The id property is required,\n // even if custom renderers are used. The object may also contain a children\n // key if hierarchical data is displayed. The object may also contain a disabled\n // boolean property indicating whether this result can be selected.\n //\n // result.more (boolean) - true if more results are available for the current\n // search term.\n //\n // results.context (object) - A user-defined object that should be made available\n // as the context parameter to the query function on subsequent queries to load\n // more result pages for the same search term. See the description of\n // options.context parameter.\n options.callback({more: response.more, results: response.results});\n });\n };\n\n this.setValue = function() {\n\n var viewValue = self.ngModel.$viewValue;\n var selected = null;\n if(viewValue) {\n selected = this.getSelected(viewValue);\n }\n\n // var apply = scope.$evalAsync || $timeout;\n $timeout(function() {\n $element\n .select2('val', (selected === null || selected === 'undefined') ? '' : selected); // null === '' for Select2\n });\n };\n\n this.getMultiSelected = function(viewValue) {\n\n var indices = [];\n\n if($element.get(0).tagName.toLowerCase() !== 'input') {\n var options = this.collection($scope);\n\n _.each(viewValue, function(savedObject) {\n var index = _.findIndex(options, function(value) {\n var temp = angular.copy(savedObject); // remove hashkeys for comparison\n return _.matches(temp)(value);\n });\n indices.push(index);\n });\n\n } else {\n\n var inputViewValues = this.ngModel.$modelValue;\n\n _.each(inputViewValues, function(savedObject) {\n\n if(_.isUndefined(savedObject.id) ) {\n\n if(savedObject.id || savedObject[self.options.correlationId]) {\n\n savedObject.id = savedObject[self.options.correlationId];\n\n } else {\n\n throw new Error('dropdown list must have a id or a alternative value to use as a id');\n }\n\n }\n\n });\n }\n\n if(indices.length > 0) {\n viewValue = indices;\n }\n\n return viewValue;\n\n };\n\n this.setValues = function() {\n\n var viewValue = self.ngModel.$viewValue;\n\n if(!angular.isArray(viewValue)) {\n viewValue = [];\n }\n\n if(!_.isEmpty(viewValue) && _.isObject(viewValue[0])) {\n viewValue = this.getMultiSelected(viewValue);\n }\n\n $timeout(function() {\n $element\n .select2('val', viewValue);\n });\n };\n\n this.ngOptions = function() {\n\n this.match = $attrs.ngOptions.match(AV_UI.NG_OPTIONS);\n if(!this.match) {\n throw new Error('Invalid ngOptions for avDropdown');\n }\n // AV_UI.NG_OPTIONS regex will parse into arrays like below:\n //\n // 0: \"state.name for state in states\"\n // 1: \"state.name\"\n // 2: undefined\n // 3: undefined\n // 4: \"state\"\n // 5: undefined\n // 6: undefined\n // 7: \"states\"\n // 8: undefined\n //\n // 0: \"state.id as state.name for state in states\"\n // 1: \"state.id\"\n // 2: \"state.name\"\n // 3: undefined\n // 4: \"state\"\n // 5: undefined\n // 6: undefined\n // 7: \"states\"\n // 8: undefined\n //\n // 0: \"state.name for state in states track by state.id\"\n // 1: \"state.name\"\n // 2: undefined\n // 3: undefined\n // 4: \"state\"\n // 5: undefined\n // 6: undefined\n // 7: \"states\"\n // 8: \"state.id\"\n //\n // 0: \"person.fullName as (person.lastName + ', ' + person.firstName) for person in feeScheduleModel.persons\"\n // 1: \"person.fullName\"\n // 2: \"(person.lastName + ', ' + person.firstName)\"\n // 3: undefined\n // 4: \"person\"\n // 5: undefined\n // 6: undefined\n // 7: \"feeScheduleModel.persons\"\n // 8: undefined\n //\n this.displayFn = $parse(this.match[2] || this.match[1]); // this is the function to retrieve the text to show as\n this.collection = $parse(this.match[7]);\n this.valueName = this.match[4] || this.match[6];\n this.valueFn = $parse(this.match[2] ? this.match[1] : this.valueName);\n this.keyName = this.match[5];\n\n $scope.$watchCollection(this.collection, function(newVal, oldVal) {\n if(angular.equals(newVal, oldVal)) {\n return;\n }\n\n self.setValue();\n\n }, true);\n\n };\n });\n\n availity.ui.directive('avDropdown', function($timeout, $log, $window) {\n\n return {\n restrict: 'A',\n require: ['ngModel', 'avDropdown'],\n controller: 'AvDropdownController',\n link: function(scope, element, attrs, controllers) {\n var ngModel = controllers[0];\n var avDropdown = controllers[1];\n\n avDropdown.setNgModel(ngModel);\n avDropdown.init();\n\n if(attrs.ngOptions ) {\n avDropdown.ngOptions();\n }\n\n ngModel.$parsers.push(function(value) {\n var parent = element.prev();\n parent\n .toggleClass('ng-invalid', !ngModel.$valid)\n .toggleClass('ng-valid', ngModel.$valid)\n .toggleClass('ng-invalid-required', !ngModel.$valid)\n .toggleClass('ng-valid-required', ngModel.$valid)\n .toggleClass('ng-dirty', ngModel.$dirty)\n .toggleClass('ng-pristine', ngModel.$pristine);\n return value;\n });\n\n element.on('change', function(e) {\n\n // special case since the ajax handling doesn't bind to the model correctly\n // this has to do with select2 (v3.5.2) using a hidden field instead of a select for ajax\n if(avDropdown.options.query) {\n $timeout(function() {\n // look at moving this to the controller\n if(avDropdown.isRemoteMultiple()) {\n avDropdown.setRemoteViewValue(e);\n } else {\n avDropdown.setViewValue(e);\n }\n\n }, false, 0);\n }\n\n $log.info(e);\n\n });\n\n // fires ng-focus when select2-focus fires.\n element.on('select2-focus', function() {\n if(attrs.ngFocus) {\n scope.$eval(scope.$eval(attrs.ngFocus));\n }\n });\n\n // fires ng-blur when select2-blur occurs.\n element.on('select2-blur', function() {\n if(attrs.ngBlur) {\n scope.$eval(scope.$eval(attrs.ngBlur));\n }\n });\n\n // https://github.com/t0m/select2-bootstrap-css/issues/37#issuecomment-42714589\n element.on('select2-open', function () {\n // look for .has-success, .has-warning, .has-error\n // (really look for .has-* … which is good enough for the demo page, but obviously might interfere with other CSS-classes starting with \"has-\")\n if(element.parents('[class*=\"has-\"]').length) {\n\n // get all CSS-classes from the element where we found \"has-*\" and collect them in an array\n var classNames = $(this).parents('[class*=\"has-\"]')[0].className.split(/\\s+/);\n\n // go through the class names, find \"has-\"\n for(var i = 0; i < classNames.length; ++i) {\n if(classNames[i].match('has-')) {\n $('#select2-drop').addClass(classNames[i]);\n }\n }\n }\n });\n\n\n var _$render = ngModel.$render;\n ngModel.$render = function() {\n _$render();\n\n if(avDropdown.multiple) {\n avDropdown.setValues();\n }else {\n avDropdown.setValue();\n }\n\n };\n\n var win = angular.element($window);\n\n win.bind('resize', function() {\n element.select2('close');\n });\n\n attrs.$observe('disabled', function (value) {\n element.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n element.select2('readonly', !!value);\n });\n\n scope.$on('destroy', function() {\n element.select2('destroy');\n });\n\n $timeout(function() {\n element.select2(avDropdown.options);\n });\n }\n };\n });\n\n})(window);\n","/**\n * Inspiration https://github.com/mgcrea/angular-strap/blob/v0.7.8/src/directives/datepicker.js\n */\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.provider('avDatepickerConfig', function() {\n\n var config = {\n autoclose: true,\n todayHighlight: true,\n format: 'mm/dd/yyyy',\n forceParse: false\n };\n\n this.set = function(options) {\n angular.extend(config, options);\n };\n\n this.$get = function() {\n return angular.copy(config);\n };\n\n });\n\n // Options: http://bootstrap-datepicker.readthedocs.org/en/latest/options.html\n availity.ui.constant('AV_DATEPICKER', {\n CONTROLLER: '$ngModelController',\n ADD_ON_SELECTOR: '[data-toggle=\"datepicker\"]',\n OPTIONS: [\n 'autoclose',\n 'beforeShowDay',\n 'beforeShowMonth',\n 'calendarWeeks',\n 'clearBtn',\n 'toggleActive',\n 'container',\n 'daysOfWeekDisabled',\n 'datesDisabled',\n 'defaultViewDate',\n 'endDate',\n 'forceParse',\n 'format',\n 'inputs',\n 'keyboardNavigation',\n 'language',\n 'minViewMode',\n 'multidate',\n 'multidateSeparator',\n 'orientation',\n 'startDate',\n 'startView',\n 'todayBtn',\n 'todayHighlight',\n 'weekStart',\n 'showOnFocus',\n 'disableTouchKeyboard',\n 'enableOnReadonly',\n 'modelFormat'\n ],\n DEFAULTS: {\n MODELFORMAT: 'YYYY-MM-DD'\n }\n });\n\n availity.ui.controller('AvDatepickerController', function($element, $attrs, AV_DATEPICKER, $scope, avDatepickerConfig) {\n\n var self = this;\n this.options = {};\n\n this.setValue = function() {\n\n var viewValue = self.ngModel.$viewValue;\n var plugin = this.plugin();\n\n if(!viewValue || !plugin) {\n return;\n }\n\n plugin.setDate(viewValue);\n };\n\n this.setNgModel = function(ngModel) {\n this.ngModel = ngModel;\n };\n\n this.findModel = function() {\n\n var ngModel = null;\n\n var $input = $element.find('input:first').andSelf();\n if($input.length) {\n ngModel = $input.data(AV_DATEPICKER.CONTROLLER);\n this.setNgModel(ngModel);\n }\n\n return ngModel;\n };\n\n this.modelToView = function(isoWrap) {\n var viewValue = $.fn.datepicker.DPGlobal.formatDate(isoWrap, self.options.format, 'en');\n return viewValue;\n };\n\n this.wrapIsoDate = function() {\n\n var date = self.ngModel.$modelValue;\n var isoWrap;\n\n if(date !== undefined && date !== null) {\n var m = moment(date);\n isoWrap = m.isValid() ? m.toDate() : null;\n }\n\n return isoWrap;\n };\n\n this.viewToModel = function() {\n var format = $.fn.datepicker.DPGlobal.parseFormat(self.options.format);\n var utcDate = $.fn.datepicker.DPGlobal.parseDate(self.ngModel.$viewValue, format, 'en');\n\n var plugin = self.plugin();\n\n if(!plugin) {\n return;\n }\n\n // jscs: disable\n var localDate = plugin._utc_to_local(utcDate);\n // jscs: enable\n\n if(self.options.modelFormat && localDate) {\n localDate = moment(localDate).format(self.options.modelFormat);\n }\n\n return localDate;\n };\n\n this.init = function() {\n\n self.options = angular.extend({}, avDatepickerConfig);\n\n _.forEach($attrs, function(value, key) {\n if(_.contains(AV_DATEPICKER.OPTIONS, key.replace('data-', ''))) {\n self.options[key] = $scope.$eval(value);\n }\n });\n\n if(self.options.modelFormat && self.options.modelFormat.toLowerCase() === 'default') {\n self.options.modelFormat = AV_DATEPICKER.DEFAULTS.MODELFORMAT;\n }\n };\n\n this.plugin = function() {\n return $element.data('datepicker');\n };\n\n this.destroy = function() {\n var plugin = this.plugin();\n if(plugin) {\n plugin.remove();\n $element.data('datepicker', null);\n }\n };\n\n this.hide = function() {\n var plugin = this.plugin();\n if(plugin) {\n plugin.hide();\n }\n };\n });\n\n availity.ui.directive('avDatepicker', function($window, $log, AV_DATEPICKER) {\n return {\n restrict: 'A',\n require: ['ngModel', 'avDatepicker'],\n controller: 'AvDatepickerController',\n link: function(scope, element, attrs, controllers) {\n\n var ngModel = controllers[0];\n var avDatepicker = controllers[1];\n\n if(!ngModel) {\n ngModel = avDatepicker.findModel();\n if(!ngModel) {\n $log.error('avDatepicker requires ngModel');\n return;\n }\n }\n\n avDatepicker.init();\n avDatepicker.setNgModel(ngModel);\n\n element.on('changeDate', function(e) {\n $log.info('avDatepicker changeDate {0}', [e]);\n });\n\n // (view to model)\n ngModel.$parsers.push(avDatepicker.viewToModel);\n\n // (model to view) - added to end of formatters array\n // because they are processed in reverse order.\n // if the model is in Date format and send to the validation framework\n // prior to getting converted to the expected $viewValue format,\n // the validation will fail.\n ngModel.$formatters.push(avDatepicker.modelToView);\n ngModel.$formatters.push(avDatepicker.wrapIsoDate);\n\n var _$render = ngModel.$render;\n ngModel.$render = function() {\n _$render();\n avDatepicker.setValue();\n };\n\n var win = angular.element($window);\n\n win.bind('scroll', function() {\n avDatepicker.hide();\n });\n\n var target = element.siblings(AV_DATEPICKER.ADD_ON_SELECTOR);\n if(target.length) {\n target.on('click.datepicker', function() {\n if(!element.prop('disabled')) { // Hack check for IE 8\n element.focus();\n }\n });\n }\n\n scope.$on('destroy', function() {\n avDatepicker.destroy();\n if(target.length) {\n target.off('click.datepicker');\n }\n });\n\n scope.$evalAsync(function() {\n element.datepicker(avDatepicker.options);\n });\n }\n };\n });\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_UI_IDLE', {\n EVENTS: {\n OK: 'mousedown.av.idle.notifier'\n },\n TEMPLATES: {\n BASE: 'ui/idle/idle-tpl.html',\n SESSION: 'ui/idle/idle-session-tpl.html',\n WARNING: 'ui/idle/idle-warning-tpl.html'\n }\n });\n\n availity.ui.provider('avIdleNotifier', function() {\n\n var sessionTemplate;\n var warningTemplate;\n var $scope;\n\n this.setSessionTemplate = function(template) {\n sessionTemplate = template;\n };\n\n this.setWarningTemplate = function(template) {\n warningTemplate = template;\n };\n\n this.$get = function(AV_IDLE, AV_UI_IDLE, $rootScope, AvModal, $document, $timeout) {\n\n var AvIdleNotifier = function() {\n this.listeners = [];\n this.modal = null;\n };\n\n var proto = AvIdleNotifier.prototype;\n\n proto.init = function() {\n\n $scope = $rootScope.$new(true);\n $scope.idle = {};\n\n this.initListeners();\n };\n\n proto.initListeners = function() {\n\n var self = this;\n var listener = null;\n\n // ACTIVE IDLING\n listener = $rootScope.$on(AV_IDLE.EVENTS.IDLE_ACTIVE, function() {\n self.showWarning();\n });\n this.listeners.push(listener);\n\n // INACTIVE IDLING\n listener = $rootScope.$on(AV_IDLE.EVENTS.IDLE_INACTIVE, function() {\n self.hideWarning();\n });\n this.listeners.push(listener);\n\n // SESSION TIMEOUT OUT\n listener = $rootScope.$on(AV_IDLE.EVENTS.SESSION_TIMEOUT_ACTIVE, function() {\n self.showSession();\n });\n this.listeners.push(listener);\n\n };\n\n proto.destroyListeners = function() {\n // turn off each listener @see http://stackoverflow.com/a/14898795\n _.each(this.listeners, function(listener) {\n listener();\n });\n };\n\n proto.showWarning = function() {\n\n var self = this;\n\n if(this.modal !== null) {\n return;\n }\n\n $scope = $rootScope.$new(true);\n $scope.idle = {};\n $scope.idle.template = AV_UI_IDLE.TEMPLATES.WARNING;\n\n this.modal = new AvModal({\n show: true,\n scope: $scope,\n backdrop: 'static',\n templateUrl: AV_UI_IDLE.TEMPLATES.BASE\n });\n\n $document.find('body').on(AV_UI_IDLE.EVENTS.OK, function() {\n self.hideWarning();\n });\n\n };\n\n proto.hideWarning = function() {\n if(this.modal) {\n this.disableBackDrop();\n this.modal.hide();\n }\n\n this.modal = null;\n };\n\n proto.disableBackDrop = function() {\n $document.find('body').off(AV_UI_IDLE.EVENTS.OK);\n };\n\n proto.showSession = function() {\n var self = this;\n this.disableBackDrop();\n\n $timeout(function() {\n $scope.idle.template = AV_UI_IDLE.TEMPLATES.SESSION;\n $scope.idle.onSessionTimeout = _.bind(self.onSessionTimeout, self);\n }, 0, true);\n\n };\n\n proto.onSessionTimeout = function() {\n $rootScope.$broadcast(AV_IDLE.EVENTS.SESSION_TIMEOUT_REDIRECT);\n };\n\n return new AvIdleNotifier();\n\n };\n\n });\n\n availity.ui.run(function(avIdleNotifier) {\n avIdleNotifier.init();\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_MASK', {\n NAME: 'inputmask',\n DEFAULTS: {\n date: '99/99/9999',\n phone: '(999) 999-9999',\n SSN:'999-99-9999'\n }\n });\n\n availity.ui.directive('avMask', function($window, $log, AV_MASK) {\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function(scope, element, attrs) {\n\n var maskType = AV_MASK.DEFAULTS[attrs['avMask']];\n if(!maskType) {\n maskType = attrs['avMask'];\n }\n\n scope.$evalAsync(function() {\n element.inputmask(maskType);\n });\n\n scope.$on('$destroy', function () {\n element.inputmask('remove');\n });\n }\n };\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.controller('AvHasPermissionController', function($element) {\n\n this.onSuccess = function(isAuthorized) {\n if(isAuthorized) {\n $element.removeClass('ng-hide');\n $element.show();\n } else {\n $element.remove();\n }\n };\n\n this.onError = function() {\n $element.remove();\n };\n\n });\n\n availity.ui.directive('avHasPermission', function(avUserAuthorizations) {\n return {\n restrict: 'EA',\n controller: 'AvHasPermissionController',\n require: ['avHasPermission'],\n link: function($scope, $element, $attr, controllers) {\n\n var avHasPermission = controllers[0];\n\n $element.hide();\n\n $scope.$watch($attr.avHasPermission, function(permissions) {\n\n if(!angular.isArray(permissions)) {\n permissions = _.words('' + permissions);\n }\n\n avUserAuthorizations.isAnyAuthorized(permissions).then(avHasPermission.onSuccess, avHasPermission.onError);\n });\n }\n };\n });\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.directive('avAnalytics', function() {\n return {\n scope: {\n options: '=avAnalytics'\n },\n controller: function($scope) {\n this.getOptions = function() {\n return $scope.options;\n };\n }\n };\n });\n\n availity.ui.controller('AvAnalyticsController', function(avAnalyticsUtils, avAnalytics) {\n\n this.onEvent = function(event, element, options) {\n\n // convert the directive attributes into object with properties with sane defaults\n var properties = angular.extend(\n {\n level: 'info'\n },\n options,\n {\n event: event.type\n }\n );\n\n // If an external link is detected\n if(avAnalyticsUtils.isExternalLink(properties)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n var promise = avAnalytics.trackEvent(properties);\n promise['finally'](function() {\n if(avAnalyticsUtils.isExternalLink(properties)) {\n document.location = element.attr('href');\n }\n });\n };\n });\n\n availity.ui.directive('avAnalyticsOn', function(AV_ANALYTICS, avAnalyticsUtils) {\n return {\n restrict: 'A',\n controller: 'AvAnalyticsController',\n require: ['avAnalyticsOn','?^avAnalytics'],\n link: function(scope, element, attrs, controllers) {\n var childCtrl = controllers[0];\n var parentCtrl = {};\n var parentOptions = {};\n\n if (controllers[1]) {\n parentCtrl = controllers[1];\n parentOptions = parentCtrl.getOptions();\n }\n\n var options = angular.extend(\n {},\n parentOptions,\n avAnalyticsUtils.getProperties(attrs)\n );\n\n var eventType = attrs.avAnalyticsOn || AV_ANALYTICS.EVENTS.DEFAULT;\n\n element.on(eventType, function(event) {\n childCtrl.onEvent(event, element, options);\n });\n }\n };\n });\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.requires.push('ng.shims.placeholder');\n\n availity.ui.config(function($provide) {\n\n $provide.decorator('placeholderDirective', ['$delegate', '$log', function($delegate, $log) {\n\n var directive = $delegate[0];\n var originalLink = directive.link;\n\n var newLink = function(scope, element, attrs) {\n\n if(originalLink && _.contains(_.keys(attrs), 'avMask')) {\n $log.info('placeholder shim not running on an element due to avMask on same element');\n return;\n }else if(originalLink) {\n originalLink.apply(this, arguments);\n }\n //else originalLink doesn't exist\n };\n\n directive.compile = function() {\n return newLink;\n };\n\n return $delegate;\n }]);\n\n });\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_BREADCRUMBS', {\n\n TEMPLATE: 'ui/breadcrumbs/breadcrumbs-tpl.html'\n });\n\n function AvBreadcrumbsController($state) {\n\n this.getBreadcrumb = function(breadcrumbs, state) {\n if(!state || !state.data) {\n return;\n }\n\n var breadcrumb = state.data.breadcrumb;\n if(!breadcrumb) {\n return;\n }\n\n if(breadcrumb.parent) {\n var parentState = $state.get(breadcrumb.parent);\n\n if(parentState) {\n this.getBreadcrumb(breadcrumbs, parentState);\n }\n }\n breadcrumb.state = state.name;\n breadcrumbs.push(breadcrumb);\n };\n\n this.getBreadcrumbs = function() {\n var breadcrumbs = [];\n this.getBreadcrumb(breadcrumbs, $state.current);\n return breadcrumbs;\n };\n\n }\n\n AvBreadcrumbsController.$inject = ['$state'];\n availity.ui.controller('AvBreadcrumbsController', AvBreadcrumbsController);\n\n function avBreadcrumbs(AV_BREADCRUMBS) {\n return {\n restrict: 'EA',\n replace: true,\n templateUrl: AV_BREADCRUMBS.TEMPLATE,\n controller: 'AvBreadcrumbsController',\n link: function(scope, element, attrs, avBreadcrumbs) {\n scope.breadcrumbs = avBreadcrumbs.getBreadcrumbs();\n\n scope.$on('$stateChangeSuccess', function() {\n scope.breadcrumbs = avBreadcrumbs.getBreadcrumbs();\n });\n }\n };\n }\n\n avBreadcrumbs.$inject = ['AV_BREADCRUMBS'];\n availity.ui.directive('avBreadcrumbs', avBreadcrumbs);\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.filter('avApproximate', function() {\n var pow = Math.pow;\n var floor = Math.floor;\n var abs = Math.abs;\n var log = Math.log;\n\n function round(number, precision) {\n var prec = pow(10, precision);\n return Math.round(number * prec) / prec;\n }\n\n return function (number, precision) {\n precision = precision || 0;\n var base = floor(log(abs(number)) / log(1000));\n var unit = 'kMGTPE'[base - 1];\n return unit ? round(number / pow(1000, base), precision) + unit : (number || 0);\n };\n });\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_BADGE', {\n COLOR: null,\n DEFAULT_CLASS: 'badge',\n SHOW_WHEN_ZERO: false,\n TEMPLATE: 'ui/badge/badge-tpl.html'\n });\n\n function badgeDirective(AV_BADGE) {\n\n return {\n scope: {\n color: '@',\n count: '=avBadge',\n showWhenZero: '@'\n },\n templateUrl: AV_BADGE.TEMPLATE,\n link: function(scope, element) {\n scope.color = scope.color || AV_BADGE.COLOR;\n scope.showWhenZero = scope.showWhenZero || AV_BADGE.SHOW_WHEN_ZERO;\n\n var classes = [];\n classes.push(AV_BADGE.DEFAULT_CLASS);\n if(scope.color) {\n classes.push(scope.color);\n }\n\n element.addClass(classes.join(' '));\n }\n };\n }\n\n badgeDirective.$inject = ['AV_BADGE'];\n availity.ui.directive('avBadge', badgeDirective);\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_REMOVABLE_LABEL', {\n TEMPLATE: 'ui/labels/removable-label-tpl.html'\n });\n\n availity.ui.directive('avRemovableLabel', function(AV_REMOVABLE_LABEL) {\n return {\n templateUrl: AV_REMOVABLE_LABEL.TEMPLATE,\n transclude: true,\n scope: {\n removeValue: '=',\n onRemove: '&'\n },\n link: function(scope, element, attrs) {\n element.addClass('label-remove');\n scope.removeLabel = function() {\n if(!attrs.disabled) {\n scope.onRemove()(scope.removeValue);\n }\n };\n }\n };\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_LOADER', {\n\n TEMPLATES: {\n LOADER: 'ui/animation/loader-tpl.html'\n }\n\n });\n\n availity.ui.controller('AvLoaderController', function($element) {\n\n var self = this;\n var active;\n\n this.start = function() {\n active = true;\n this.animate();\n };\n\n this.animate = function() {\n\n $element\n .find('.loading-bullet')\n .velocity('transition.slideRightIn', { stagger: 250 })\n .velocity({ opacity: 0 }, {\n delay: 750,\n duration: 500,\n complete: function() {\n if(active) {\n setTimeout(function() {self.animate();}, 500);\n } else {\n self.endAnimation();\n }\n }\n });\n\n };\n\n this.endAnimation = function() {\n $element.find('.loading-bullet').velocity('stop', true);\n $element.removeData();\n };\n\n this.stop = function() {\n active = false;\n };\n\n });\n\n availity.ui.directive('avLoader', function(AV_LOADER) {\n return {\n restrict: 'A',\n replace: true,\n controller: 'AvLoaderController',\n require: 'avLoader',\n templateUrl: AV_LOADER.TEMPLATES.LOADER,\n link: function(scope, element, attr, avLoader) {\n\n if(!attr.delay) {\n avLoader.start();\n }\n\n scope.$on('$destroy', function() {\n avLoader.stop();\n });\n\n }\n };\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_BLOCK', {\n TEMPLATES: {\n BLOCK: 'ui/block/block-tpl.html'\n }\n });\n\n var getLoaderController = function(blockId) {\n var el = $('[data-block-ui=\"' + blockId + '\"]') || $('[block-ui=\"' + blockId + '\"]');\n if(el) {\n return el.find('[data-av-loader]').controller('avLoader');\n }\n };\n\n var triggerLoaderController = function(id, instance, fn) {\n\n var controller = instance.loaderController;\n if(!controller) {\n controller = getLoaderController(id);\n instance.loaderController = controller;\n }\n if(controller && _.isFunction(controller[fn])) {\n controller[fn]();\n }\n\n };\n\n var triggerInstance = function(id, instance, origFn, loaderFn) {\n triggerLoaderController(id, instance, loaderFn);\n origFn.apply(instance);\n };\n\n var modifyBlockInstances = function(id, instance) {\n\n var origStartFn = instance.start;\n var origStopFn = instance.stop;\n\n instance.start = function() {\n triggerInstance(id, instance, origStartFn, 'start');\n };\n\n instance.stop = function() {\n triggerInstance(id, instance, origStopFn, 'stop');\n };\n\n instance.startLoader = function() {\n triggerLoaderController(id, instance, 'start');\n };\n\n instance.avModifications = true;\n };\n\n availity.ui.run(function($injector, $log, AV_BLOCK) {\n\n try {\n\n var blockUIConfig = $injector.get('blockUIConfig');\n var blockUI = $injector.get('blockUI');\n blockUIConfig.autoBlock = false;\n blockUIConfig.delay = 0;\n blockUIConfig.templateUrl = AV_BLOCK.TEMPLATES.BLOCK;\n\n var origGetFn = blockUI.instances.get;\n blockUI.instances.get = function(id) {\n var instance = origGetFn(id);\n if(!instance.avModifications) {\n modifyBlockInstances(id, instance);\n }\n return instance;\n };\n\n } catch(e) {\n $log.warn('blockUI is required to use av block.');\n }\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n // Helper directive that hooks into block-ui's start-up lifecycle and starts the loader\n availity.ui.directive('avBlockUi', function(blockUI) {\n\n return {\n restrict: 'A',\n link: function($scope, $element, $attrs) {\n\n var blockId = $attrs.avBlockUi;\n var blockCount = $attrs.blockCount;\n var instance = blockUI.instances.get(blockId);\n if(blockCount > 0) {\n instance.startLoader();\n }\n }\n };\n\n });\n\n})(window);\n","/*\n* Inspired by https://github.com/angular-ui/bootstrap/blob/master/src/tabs/tabs.js\n*/\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_TABS', {\n TEMPLATES: {\n TABS: 'ui/tabs/tabs-tpl.html',\n TAB: 'ui/tabs/tab-tpl.html'\n }\n });\n\n function TabsController($scope) {\n\n var self = this;\n\n $scope.tabs = [];\n self.tabs = $scope.tabs;\n\n this.addTab = function(tab) {\n self.tabs.push(tab);\n\n if(self.tabs.length === 1) {\n tab.active = true;\n } else if(tab.active) {\n self.selectTab(tab);\n } else {\n tab.active = false;\n }\n };\n\n this.removeTab = function(tab) {\n var index = self.tabs.indexOf(tab);\n\n if(tab.active && self.tabs.length > 1) {\n //If this is the last tab, select the previous tab. else, the next tab.\n var newActiveIndex = index === self.tabs.length - 1 ? index - 1 : index + 1;\n self.selectTab(self.tabs[newActiveIndex]);\n }\n\n self.tabs.splice(index, 1);\n };\n\n this.selectTab = function(selectedTab) {\n angular.forEach(self.tabs, function (tab) {\n if(tab.active && tab !== selectedTab) {\n tab.active = false;\n tab.onDeselect();\n }\n });\n\n selectedTab.active = true;\n selectedTab.onSelect();\n };\n }\n\n TabsController.$inject = ['$scope'];\n availity.ui.controller('AvTabsController', TabsController);\n\n function TabsDirective(AV_TABS) {\n return {\n restrict: 'AE',\n templateUrl: AV_TABS.TEMPLATES.TABS,\n transclude: true,\n replace: true,\n controller: 'AvTabsController',\n scope: true,\n link: function(scope, element, attrs) {\n scope.justified = !!attrs.justified;\n scope.tabType = attrs.tabType;\n scope.vertical = !!attrs.vertical;\n\n if(angular.isUndefined(attrs.padContent)) {\n scope.padContent = true;\n }\n }\n };\n }\n\n TabsDirective.$inject = ['AV_TABS'];\n availity.ui.directive('avTabs', TabsDirective);\n\n function TabDirective(AV_TABS) {\n return {\n restrict: 'AE',\n templateUrl: AV_TABS.TEMPLATES.TAB,\n replace: true,\n require: '^avTabs',\n transclude: true,\n scope: {\n heading: '@',\n template: '=',\n templateUrl: '=',\n onSelect: '&select',\n onDeselect: '&deselect'\n },\n controller: function() {\n // Allow avTabs to be required by other directives\n },\n link: function(scope, element, attrs, tabsController, transclude) {\n scope.transcludeFn = transclude;\n\n tabsController.addTab(scope);\n\n scope.$on('destroy', function() {\n tabsController.removeTab(scope);\n });\n\n scope.select = function() {\n if(!scope.disabled) {\n tabsController.selectTab(scope);\n }\n };\n\n scope.$watch('active', function(active) {\n if(active) {\n tabsController.selectTab(scope);\n }\n });\n\n if(angular.isDefined(attrs.active)) {\n scope.active = attrs.active;\n\n scope.$parent.$watch(attrs.active, function(active) {\n if(active) {\n tabsController.selectTab(scope);\n }\n });\n }\n\n if(angular.isDefined(attrs.disable)) {\n scope.$parent.$watch(attrs.disable, function(disabled) {\n scope.disabled = !!disabled;\n });\n }\n }\n };\n }\n\n TabDirective.$inject = ['AV_TABS'];\n availity.ui.directive('avTab', TabDirective);\n\n function TabPaneDirective(avTemplateCache, $compile) {\n return {\n restrict: 'AE',\n require: '^avTabs',\n link: function(scope, element, attrs) {\n\n var tab = scope.$eval(attrs.avTabPane);\n\n if(angular.isDefined(tab.template) || angular.isDefined(tab.templateUrl)) {\n avTemplateCache.get(tab)\n .then(function(template) {\n element.append($compile(template)(scope));\n });\n } else {\n tab.transcludeFn(tab.$parent, function(contents) {\n angular.forEach(contents, function(node) {\n element.append(node);\n });\n });\n }\n }\n };\n }\n\n TabPaneDirective.$inject = ['avTemplateCache', '$compile'];\n availity.ui.directive('avTabPane', TabPaneDirective);\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_SCROLL_PAGINATION', {\n TEMPLATE: 'ui/scroll-pagination/scroll-pagination-tpl.html',\n DEFAULT_OPTIONS: {\n limit: 50,\n offset: 0,\n maxCached: 100,\n loadMoreText: 'Load more items',\n entryIdAttribute: 'id',\n apiParams: {},\n beforePageLoad: undefined,\n afterPageLoad: undefined\n }\n });\n\n\n availity.ui.factory('avScrollPaginationService', function($log) {\n function AvScrollPaginationService() {\n this.instances = {};\n }\n\n var proto = AvScrollPaginationService.prototype;\n\n proto.registerInstance = function(instanceInterface, id) {\n if (this.instances[id]) {\n $log.warn('Found existing instance with id ' + id);\n }\n this.instances[id] = instanceInterface;\n };\n\n proto.unregisterInstance = function(id) {\n delete this.instances[id];\n };\n\n proto.resetInstance = function(id) {\n if (this.instances[id]) {\n this.instances[id].reset();\n return true;\n }\n return false;\n };\n\n return new AvScrollPaginationService();\n });\n\n availity.ui.controller('AvScrollPaginationController', function($scope, $element, $timeout, $log, AV_SCROLL_PAGINATION, blockUI, avScrollPaginationService) {\n\n var self = this;\n\n this.buildOptions = function() {\n $scope._options = {};\n _.extend($scope._options, AV_SCROLL_PAGINATION.DEFAULT_OPTIONS, $scope.options || {});\n $scope._options.lowOffset = $scope._options.offset;\n $scope._options.highOffset = $scope._options.offset;\n };\n\n var originalEntries = angular.copy($scope.entries);\n this.buildOptions();\n\n this.updateButtonVisibilityFlags = function(data) {\n $scope.showNext = $scope._options.highOffset + data.count < data.totalCount;\n $scope.showPrev = $scope._options.lowOffset > 0;\n };\n\n this.loadEntries = function(prepend) {\n var block = blockUI.instances.get('scroll-pagination-block-' + $scope.avScrollPagination);\n block.start();\n if (_.isFunction($scope._options.beforePageLoad)) {\n $scope._options.beforePageLoad($scope._options);\n }\n var params = {};\n _.extend(params, $scope._options.apiParams, {limit: $scope._options.limit, offset: $scope._options.offset});\n $scope.apiResource.query({params: params}).then(function(response) {\n var responseData = self.getResponseData(response);\n if ($scope._options.afterPageLoad) {\n $scope._options.afterPageLoad(responseData);\n }\n if (responseData && responseData[$scope._options.resourceId]) {\n self.addEntries(responseData[$scope._options.resourceId], prepend);\n }\n self.updateButtonVisibilityFlags(responseData);\n block.stop();\n }, function() {\n $log.error('API call failed');\n block.stop();\n });\n };\n\n this.getResponseData = function(data) {\n if (data) {\n if ($scope._options.responseKey) {\n var keys = $scope._options.responseKey.split('.');\n var nestedData = data;\n var noData = false;\n _.each(keys, function(key) {\n if (!noData) {\n nestedData = nestedData[key];\n if (!nestedData) {\n noData = true;\n }\n }\n });\n return noData ? [] : nestedData;\n } else {\n return data;\n }\n }\n return [];\n };\n\n this.addEntries = function(entries, prepend) {\n var oldEntries = angular.copy($scope.entries);\n if (prepend) {\n $scope.entries.unshift.apply($scope.entries, entries);\n } else {\n $scope.entries.push.apply($scope.entries, entries);\n }\n if ($scope.entries.length > $scope._options.maxCached) {\n var diff = $scope.entries.length - $scope._options.maxCached;\n var trackedElementId;\n if (prepend) {\n $scope.entries = $scope.entries.slice(0, $scope._options.maxCached);\n $scope._options.highOffset -= diff;\n trackedElementId = oldEntries[oldEntries.length-diff-1] ? oldEntries[oldEntries.length-diff-1][$scope._options.entryIdAttribute] : undefined;\n } else {\n $scope.entries = $scope.entries.slice(diff, $scope.entries.length);\n $scope._options.lowOffset += diff;\n trackedElementId = oldEntries[diff] ? oldEntries[diff][$scope._options.entryIdAttribute] : undefined;\n }\n self.autoscroll(trackedElementId, prepend);\n }\n };\n\n this.autoscroll = function(trackedElementId, prepend) {\n if (trackedElementId) {\n var trackedElement = $element.find('#'+trackedElementId);\n var trackedElementTop = trackedElement.offset().top;\n $timeout(function() {\n var newScrollTop = $element.scrollTop() + trackedElement.offset().top - trackedElementTop;\n $element.animate({scrollTop: newScrollTop}, 0);\n }, 0, false);\n } else {\n $timeout(function() {\n if (prepend) {\n $element.animate({scrollTop: $element.prop('scrollHeight')}, 0);\n } else {\n $element.animate({scrollTop: 0}, 0);\n }\n }, 0, false);\n }\n };\n\n this.loadPrev = function() {\n $scope._options.lowOffset -= $scope._options.limit;\n $scope._options.offset = $scope._options.lowOffset;\n self.loadEntries(true);\n };\n\n this.loadNext = function() {\n $scope._options.highOffset += $scope._options.limit;\n $scope._options.offset = $scope._options.highOffset;\n self.loadEntries();\n };\n\n avScrollPaginationService.registerInstance({\n reset: function() {\n $element.animate({scrollTop: 0}, 0);\n $scope.entries = angular.copy(originalEntries);\n self.buildOptions();\n self.loadEntries();\n }},\n $scope.avScrollPagination\n );\n\n $scope.$on('$destroy', function() {\n avScrollPaginationService.unregisterInstance($scope.avScrollPagination);\n });\n\n $scope.loadPrev = self.loadPrev;\n $scope.loadNext = self.loadNext;\n\n this.loadEntries();\n });\n\n\n\n availity.ui.directive('avScrollPagination', function($log, AV_SCROLL_PAGINATION) {\n return {\n restrict: 'A',\n controller: 'AvScrollPaginationController',\n transclude: true,\n templateUrl: AV_SCROLL_PAGINATION.TEMPLATE,\n scope: {\n apiResource: '=',\n entries: '=',\n options: '=',\n avScrollPagination: '@'\n },\n link: function($scope) {\n if (!$scope.avScrollPagination) {\n $log.error('Directive must include an id');\n }\n }\n };\n });\n\n})(window);\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["availity-angular-ui.js","/source/index.js","/source/template.js","/source/modal.js","/source/form.js","/source/field.js","/source/popover.js","/source/container.js","/source/adapter-bootstrap.js","/source/adapter.js","/source/dropdown.js","/source/datepicker.js","/source/idle-notifier.js","/source/mask.js","/source/has-permission.js","/source/analytics.js","/source/placeholder.js","/source/breadcrumbs.js","/source/approximate.js","/source/badge.js","/source/removable-label.js","/source/loader.js","/source/block.js","/source/block-directive.js","/source/tabs.js","/source/scroll-pagination.js"],"names":["root","availity","MODULE_UI","ui","angular","module","constant","NG_OPTIONS","exports","window","factory","$q","$templateCache","$http","get","options","valid","template","templateUrl","Error","when","cache","then","result","data","OPTIONS","scope","id","container","keyboard","backdrop","show","remote","EVENTS","SHOW","SHOWN","HIDE","HIDDEN","NAMESPACE","MODAL","BS_EVENTS","TEMPLATES","AvModalManager","this","instances","proto","prototype","add","push","remove","_","without","closeAll","forEach","$el","$","bsModal","removeBackdrop","$body","removeClass","resetAdjustments","resetScrollbar","avModal","destroy","ModalFactory","$rootScope","$timeout","$compile","AV_MODAL","avTemplateCache","avModalManager","Modal","self","templateDefer","defer","templatePromise","promise","extend","$new","_build","create","$element","element","_createId","_scope","_init","appendTo","resolve","modal","_listeners","modalShow","modalToggle","toggle","modalHide","hide","animationShowDefer","animationHideDefer","on","event","$emit","isFunction","onShown","onHidden","call","$evalAsync","$on","_id","isShown","attr","uuid","directive","restrict","replace","transclude","size","controller","ngForm","rulesKey","avValOn","avValDebounce","avValInvalid","violations","init","form","record","count","violocationCount","reduce","sum","num","$setValidity","unrecord","reset","$setPristine","$submitted","$setSubmitted","setRulesKey","key","$log","$parse","AV_VAL","avValAdapter","priority","require","compile","pre","iEl","iAttrs","controllers","ruleFn","avValForm","error","$watch","_rulesKey","_oldRulesKey","avForm","info","$broadcast","REVALIDATE","post","fn","ngSubmit","off","ngClick","RESET","bind","SUBMITTED","$invalid","FAILED","preventDefault","stopImmediatePropagation","scroll","callback","$event","$apply","$attrs","avVal","$scope","$sniffer","ngModel","rule","placeholder","noEvent","createId","avId","setNgModel","setRule","updateModel","results","validationKeys","avResults","contraintName","isValid","avViolations","length","$error","value","indexOf","lastIndexOf","updateView","$dirty","avValShow","message","validate","validateModel","validateView","undefined","onDebounce","val","trim","isCheckbox","$setViewValue","checked","isRadio","is","type","splice","unbind","debounce","msie","cancel","link","attrs","avValField","parseInt","DEBOUNCE","isNumber","debounceAllowed","$parsers","$formatters","unshift","$viewValue","provider","config","showOnLoadHideDelay","set","$get","copy","NAME","AV_POPOVER","avPopoverConfig","listeners","name","ev","plugin","popover","showOnLoad","delay","avPopover","html","messages","CLASSES","SUCCESS","WARNING","ERROR","FEEDBACK","HELP","FORM_GROUP","NAVBAR","SELECTORS","CONTAINER","DATA_CONTAINER","CONTROLLER","AV_BOOTSTRAP_ADAPTER","$valid","parents","addClass","selector","join","target","siblings","warn","el","avValModel","navbarSelector","offset","each","outerHeight","$target","find","animate","scrollTop","top","DEFAULT","that","setAdapter","adapter","AV_VAL_ADAPTER","$injector","Adapter","adapterName","closeOnResize","dropdownAutoWidth","minimumResultsForSearch","AV_UI","AV_DROPDOWN","avDropdownConfig","match","contains","$eval","isRemoteMultiple","multiple","isDefined","query","queryFn","getId","tagName","toLowerCase","setRemoteViewValue","e","values","isArray","isObject","added","index","findIndex","matches","removed","setViewValue","getSelected","model","items","collection","item","valueFn","equals","locals","valueName","response","more","setValue","viewValue","selected","select2","getMultiSelected","indices","savedObject","temp","inputViewValues","$modelValue","isUndefined","correlationId","setValues","isEmpty","ngOptions","displayFn","keyName","$watchCollection","newVal","oldVal","$window","avDropdown","parent","prev","toggleClass","$pristine","ngFocus","ngBlur","classNames","className","split","i","_$render","$render","win","$observe","autoclose","todayHighlight","format","forceParse","ADD_ON_SELECTOR","DEFAULTS","MODELFORMAT","AV_DATEPICKER","avDatepickerConfig","setDate","findModel","$input","andSelf","modelToView","isoWrap","datepicker","DPGlobal","formatDate","wrapIsoDate","date","m","moment","toDate","viewToModel","parseFormat","utcDate","parseDate","localDate","_utc_to_local","modelFormat","avDatepicker","prop","focus","OK","BASE","SESSION","sessionTemplate","warningTemplate","setSessionTemplate","setWarningTemplate","AV_IDLE","AV_UI_IDLE","AvModal","$document","AvIdleNotifier","idle","initListeners","listener","IDLE_ACTIVE","showWarning","IDLE_INACTIVE","hideWarning","SESSION_TIMEOUT_ACTIVE","showSession","destroyListeners","disableBackDrop","onSessionTimeout","SESSION_TIMEOUT_REDIRECT","run","avIdleNotifier","phone","SSN","AV_MASK","maskType","inputmask","onSuccess","isAuthorized","onError","avUserAuthorizations","$attr","avHasPermission","permissions","words","isAnyAuthorized","getOptions","avAnalyticsUtils","avAnalytics","onEvent","properties","level","isExternalLink","stopPropagation","trackEvent","document","location","AV_ANALYTICS","childCtrl","parentCtrl","parentOptions","getProperties","eventType","avAnalyticsOn","requires","$provide","decorator","$delegate","originalLink","newLink","keys","apply","arguments","TEMPLATE","AvBreadcrumbsController","$state","getBreadcrumb","breadcrumbs","state","breadcrumb","parentState","getBreadcrumbs","current","$inject","avBreadcrumbs","AV_BREADCRUMBS","filter","pow","Math","floor","abs","log","round","number","precision","prec","base","unit","COLOR","DEFAULT_CLASS","SHOW_WHEN_ZERO","badgeDirective","AV_BADGE","color","showWhenZero","classes","AV_REMOVABLE_LABEL","removeValue","onRemove","removeLabel","disabled","LOADER","active","start","velocity","stagger","opacity","duration","complete","setTimeout","endAnimation","removeData","stop","AV_LOADER","avLoader","BLOCK","getLoaderController","blockId","triggerLoaderController","instance","loaderController","triggerInstance","origFn","loaderFn","modifyBlockInstances","origStartFn","origStopFn","startLoader","avModifications","AV_BLOCK","blockUIConfig","blockUI","autoBlock","origGetFn","avBlockUi","blockCount","TABS","TAB","TabsController","tabs","addTab","tab","selectTab","removeTab","newActiveIndex","selectedTab","onDeselect","onSelect","TabsDirective","AV_TABS","justified","tabType","vertical","padContent","TabDirective","heading","tabsController","transcludeFn","select","$parent","disable","TabPaneDirective","avTabPane","append","contents","node","DEFAULT_OPTIONS","limit","maxCached","loadMoreText","entryIdAttribute","apiParams","beforePageLoad","afterPageLoad","AvScrollPaginationService","registerInstance","instanceInterface","unregisterInstance","resetInstance","AV_SCROLL_PAGINATION","avScrollPaginationService","buildOptions","_options","lowOffset","highOffset","originalEntries","entries","updateButtonVisibilityFlags","showNext","totalCount","showPrev","loadEntries","prepend","block","avScrollPagination","params","apiResource","responseData","getResponseData","resourceId","addEntries","responseKey","nestedData","noData","oldEntries","diff","trackedElementId","slice","autoscroll","trackedElement","trackedElementTop","newScrollTop","loadPrev","loadNext"],"mappings":"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","file":"availity-angular-ui.min.js","sourcesContent":["/**\n * availity-angular v1.8.1 -- January-20\n * Copyright 2016 Availity, LLC \n */\n\n// Source: /lib/ui/index.js\n\n\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity || {};\n\n availity.MODULE_UI = 'availity.ui';\n availity.ui = angular.module(availity.MODULE_UI, ['ng', 'ngSanitize']);\n\n availity.ui.constant('AV_UI', {\n // jscs: disable\n NG_OPTIONS: /^\\s*([\\s\\S]+?)(?:\\s+as\\s+([\\s\\S]+?))?(?:\\s+group\\s+by\\s+([\\s\\S]+?))?\\s+for\\s+(?:([\\$\\w][\\$\\w]*)|(?:\\(\\s*([\\$\\w][\\$\\w]*)\\s*,\\s*([\\$\\w][\\$\\w]*)\\s*\\)))\\s+in\\s+([\\s\\S]+?)(?:\\s+track\\s+by\\s+([\\s\\S]+?))?$/\n // jscs: enable\n });\n\n if(typeof module !== 'undefined' && module.exports) {\n module.exports = availity;\n }\n\n\n})(window);\n\n// Source: /lib/ui/templates/template.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.factory('avTemplateCache', function($q, $templateCache, $http) {\n\n return {\n\n get: function(options) {\n\n var valid = !options.template || !options.templateUrl;\n\n if(!valid) {\n throw new Error('Either options.template or options.templateUrl must be defined for avTemplateCache');\n }\n\n return options.template ? $q.when(options.template) :\n $http.get(options.templateUrl, {cache: $templateCache})\n .then(function(result) {\n return result.data;\n });\n }\n };\n });\n\n})(window);\n\n// Source: /lib/ui/modal/modal.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_MODAL', {\n\n OPTIONS: {\n scope: null,\n templateUrl: null,\n template: null,\n id: null,\n container: null,\n\n // Bootstrap defaults\n keyboard: true,\n backdrop: true,\n show: false,\n remote: false\n },\n\n EVENTS: {\n SHOW: 'show.av.modal',\n SHOWN: 'shown.av.modal',\n HIDE: 'hide.av.modal',\n HIDDEN: 'hidden.av.modal'\n },\n\n NAMESPACE: {\n MODAL: 'bs.modal'\n },\n\n BS_EVENTS: {\n SHOW: 'show.bs.modal',\n SHOWN: 'shown.bs.modal',\n HIDE: 'hide.bs.modal',\n HIDDEN: 'hidden.bs.modal'\n },\n\n TEMPLATES: {\n MODAL: 'ui/modal/modal-tpl.html'\n }\n });\n\n availity.ui.factory('avModalManager', function() {\n\n var AvModalManager = function() {\n this.instances = [];\n };\n\n var proto = AvModalManager.prototype;\n\n proto.add = function(id) {\n this.instances.push(id);\n };\n\n proto.remove = function(id) {\n this.instances = _.without(this.instances, id);\n };\n\n proto.closeAll = function() {\n\n _.forEach(this.instances, function(id) {\n\n var $el = $('#' + id);\n\n if(!$el) {\n return;\n }\n\n var bsModal = $el.data('bs.modal');\n if(bsModal) {\n bsModal.removeBackdrop();\n bsModal.$body.removeClass('modal-open');\n bsModal.resetAdjustments();\n bsModal.resetScrollbar();\n }\n\n var avModal = $el.data('AvModal');\n if(avModal) {\n avModal.destroy();\n }\n\n });\n };\n\n return new AvModalManager();\n\n });\n\n var ModalFactory = function($rootScope, $timeout, $compile, AV_MODAL, avTemplateCache, $q, avModalManager) {\n\n var Modal = function(options) {\n\n var self = this;\n\n this.templateDefer = $q.defer();\n this.templatePromise = this.templateDefer.promise;\n\n this.options = angular.extend({}, AV_MODAL.OPTIONS, {scope: $rootScope.$new()}, options);\n\n avTemplateCache.get(options).then(function(template) {\n self.options.template = template;\n self._build();\n });\n\n };\n\n Modal.create = function(options) {\n return new Modal(options);\n };\n\n var proto = Modal.prototype;\n\n proto._build = function() {\n\n var self = this;\n\n var scope = this.options.scope;\n this.$element = angular.element(this.options.template);\n\n this._createId();\n\n this._scope();\n\n $compile(this.$element)(scope);\n\n $timeout(function() {\n self._init();\n }, 0, true);\n\n // Append to container or \n this.options.container ? this.$element.appendTo(this.options.container) : this.$element.appendTo('body');\n\n };\n\n proto._init = function() {\n\n this.$element.data('AvModal', this);\n\n this.templateDefer.resolve(true);\n\n // Initialize Bootstrap jQuery plugin\n this.$element.modal({\n 'backdrop': this.options.backdrop,\n 'keyboard': this.options.keyboard,\n 'show': this.options.show,\n 'remote': this.options.remote\n });\n\n this._listeners();\n };\n\n // Add helpers to scope so clients can call internal methods\n proto._scope = function() {\n\n var self = this;\n var scope = this.options.scope;\n\n scope.modalShow = function() {\n return self.show();\n };\n\n scope.modalToggle = function() {\n return self.toggle();\n };\n\n scope.modalHide = function() {\n return self.hide();\n };\n\n };\n\n proto._listeners = function() {\n\n var self = this;\n var scope = this.options.scope;\n var $element = this.$element;\n\n this.animationShowDefer = $q.defer();\n this.animationHideDefer = $q.defer();\n\n $element.on(AV_MODAL.BS_EVENTS.SHOW, function(event) {\n scope.$emit(AV_MODAL.EVENTS.SHOW, event, self);\n });\n\n $element.on(AV_MODAL.BS_EVENTS.SHOWN, function(event) {\n\n if(angular.isFunction(self.options.onShown)) {\n self.options.onShown();\n }\n\n self.animationShowDefer.resolve(true);\n\n scope.$emit(AV_MODAL.EVENTS.SHOWN, event, self);\n });\n\n $element.on(AV_MODAL.BS_EVENTS.HIDE, function(event) {\n scope.$emit(AV_MODAL.EVENTS.HIDE, event, self);\n });\n\n $element.on(AV_MODAL.BS_EVENTS.HIDDEN, function(event) {\n\n if(angular.isFunction(self.options.onHidden)) {\n self.options.onHidden.call(this);\n }\n\n self.animationHideDefer.resolve(true);\n scope.$emit(AV_MODAL.EVENTS.HIDDEN, event, self);\n\n scope.$evalAsync(function() {\n self.destroy();\n });\n\n });\n\n // Garbage collection\n scope.$on('$destroy', function() {\n avModalManager.remove(self._id);\n self.destroy();\n });\n\n };\n\n proto.show = function() {\n\n var self = this;\n this.animationShowDefer = $q.defer();\n\n this.templatePromise.then(function() {\n self.isShown() ? self.animationShowDefer.resolve(true) : self.$element.modal('show');\n });\n\n return this.animationShowDefer.promise;\n\n };\n\n proto.hide = function() {\n\n var self = this;\n this.animationHideDefer = $q.defer();\n\n this.templatePromise.then(function() {\n !self.isShown() ? self.animationHideDefer.resolve(true) : self.$element.modal('hide');\n });\n\n return this.animationHideDefer.promise;\n };\n\n proto.isShown = function() {\n return this.$element.data(AV_MODAL.NAMESPACE.MODAL).isShown;\n },\n\n proto.toggle = function() {\n\n var self = this;\n\n return this.templatePromise.then(function() {\n return self.isShown() ? self.hide() : self.show();\n });\n\n };\n\n proto.destroy = function() {\n\n var self = this;\n\n return this.templatePromise.then(function() {\n self.$element.data('AvModal', null);\n self.$element.remove();\n });\n\n };\n\n proto._createId = function() {\n // Create a unique id for the modal if not present or passed in via options\n var id = this.$element.attr('id');\n if(!id) {\n // Get id from options or create a unique id\n id = this.options.id ? this.options.id : availity.uuid('av-modal-id');\n this.$element.attr('id', id);\n }\n\n this._id = id;\n\n avModalManager.add(id);\n };\n\n return Modal;\n };\n\n availity.ui.factory('AvModal', ModalFactory);\n\n availity.ui.directive('avModal', function(AV_MODAL) {\n return {\n restrict: 'A',\n replace: true,\n transclude: true,\n scope: {\n size: '@'\n },\n templateUrl: AV_MODAL.TEMPLATES.MODAL\n };\n });\n\n})(window);\n\n// Source: /lib/ui/validation/form.js\n/**\n * 1. All fields should be pristine on first load\n * 2. If field is modified an invalid the field should be marked with an error\n *\n */\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.controller('avValFormController', function() {\n\n this.ngForm = null;\n this.rulesKey = null;\n this.avValOn = null;\n this.avValDebounce = null;\n this.avValInvalid = false;\n\n // Object that stores the unique id (key) and violation count (value) of all the form fields\n //\n // EX:\n //\n // {\n // avVal001: 0\n // avVal002: 2\n // avVal003: 1\n // }\n this.violations = {};\n\n this.init = function(form) {\n this.ngForm = form;\n };\n\n /**\n * Records id of the form field and number of violations\n * @param {[type]} id [description]\n * @param {[type]} count [description]\n * @return {[type]} [description]\n */\n this.record = function(id, count) {\n this.violations[id] = count;\n\n var violocationCount = _.reduce(this.violations, function(sum, num) {\n return sum + num;\n }, 0);\n\n this.ngForm.$setValidity('av', violocationCount === 0);\n };\n\n this.unrecord = function(id) {\n if(id && this.violations[id]) {\n delete this.violations[id];\n }\n };\n\n this.reset = function() {\n this.ngForm.$setPristine();\n this.ngForm.$submitted = false;\n };\n\n this.$setSubmitted = function() {\n this.ngForm.$submitted = true;\n };\n\n this.setRulesKey = function(key) {\n this.rulesKey = key;\n };\n\n });\n\n // form.$error = {};\n // form.$$success = {};\n // form.$pending = undefined;\n // form.$name = $interpolate(attrs.name || attrs.ngForm || '')($scope);\n // form.$dirty = false;\n // form.$pristine = true;\n // form.$valid = true;\n // form.$invalid = false;\n // form.$submitted = false;\n\n availity.ui.directive('avValForm', function($log, $timeout, $parse, AV_VAL, avValAdapter, $rootScope) {\n return {\n restrict: 'A',\n priority: 10,\n require: ['form', 'avValForm'],\n controller: 'avValFormController',\n compile: function() {\n return {\n pre: function(scope, iEl, iAttrs, controllers) {\n\n var ruleFn = $parse(iAttrs.avValForm);\n var rulesKey = ruleFn(scope);\n rulesKey = rulesKey || iAttrs.avValForm; // interpolated rule from scope || fixed string\n\n if(!rulesKey) {\n $log.error('avValForm requires a rules key in order to run the proper validation rules.');\n return;\n }\n\n scope.$watch(ruleFn, function(_rulesKey, _oldRulesKey) {\n if(_rulesKey) {\n avForm.setRulesKey(_rulesKey);\n\n if(_rulesKey !== _oldRulesKey) {\n $timeout(function() {\n $log.info('avValForm revalidate');\n $rootScope.$broadcast(AV_VAL.EVENTS.REVALIDATE);\n });\n }\n\n }\n\n });\n\n var ngForm = controllers[0];\n var avForm = controllers[1];\n\n // Allow form attributes to define the validation behavior of the form fields\n // inside it. If `av-val-on` or `av-val-debounce` are on the form then all form\n // fields inside the form would inherit this behavior.\n avForm.avValOn = iAttrs.avValOn || null;\n avForm.avValDebounce = iAttrs.avValDebounce || null;\n // Allows fields to update with invalid data for dirty form saving\n avForm.avValInvalid = iAttrs.avValInvalid || false;\n\n avForm.init(ngForm);\n avForm.setRulesKey(rulesKey);\n\n },\n post: function(scope, iEl, iAttrs, controllers) {\n\n iEl.attr('novalidate', 'novalidate'); // prevent HTML5 validation from kicking in\n\n // Disable ng-submit or ng-click handlers and store the function to call for submitting\n var fn;\n if(iAttrs.ngSubmit) {\n // Disable ng-submit event\n iEl.off('submit');\n fn = $parse(iAttrs.ngSubmit, /* expensiveChecks */ true);\n }else if(iAttrs.ngClick) {\n // Disable ng-click event\n iEl.off('click');\n fn = $parse(iAttrs.ngClick, /* expensiveChecks */ true);\n }\n\n var ngForm = controllers[0];\n var avForm = controllers[1];\n\n scope.$on(AV_VAL.EVENTS.RESET, function () {\n avForm.reset();\n });\n\n iEl.bind('submit', function(event) {\n\n scope.$broadcast(AV_VAL.EVENTS.SUBMITTED);\n avForm.$setSubmitted();\n\n if(ngForm.$invalid) {\n\n scope.$broadcast(AV_VAL.EVENTS.FAILED);\n\n $log.info('avValForm invalid. preventing default submit action');\n\n event.preventDefault();\n event.stopImmediatePropagation();\n scope.$broadcast(event);\n\n avValAdapter.scroll(iEl);\n return;\n }\n\n ngForm.$setPristine();\n\n if(!fn) {\n return;\n }\n\n var callback = function() {\n fn(scope, {$event:event});\n };\n\n scope.$apply(callback);\n\n });\n\n }\n };\n }\n };\n });\n\n\n})(window);\n\n// Source: /lib/ui/validation/field.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.controller('AvValFieldController', function($element, avValAdapter, $attrs, avVal, $log, $timeout, $scope, $sniffer) {\n\n this.ngModel = null;\n this.rule = null;\n this.avValForm = null;\n this.avValInvalid = false;\n\n var self = this;\n\n var placeholder = $element[0].placeholder;\n var noEvent = {};\n\n this.createId = function() {\n this.ngModel.avId = availity.uuid('avVal');\n };\n\n this.setNgModel = function(ngModel) {\n this.ngModel = ngModel;\n };\n\n this.setRule = function(rule) {\n this.rule = rule;\n };\n\n this.avValForm = function(avValForm) {\n this.avValForm = avValForm;\n };\n\n this.updateModel = function(results) {\n\n var self = this;\n var validationKeys = [];\n\n this.ngModel.avResults = results;\n\n // set state for each violation\n angular.forEach(results.violations, function (result) {\n var key = 'av-' + result.contraintName;\n validationKeys.push(key);\n self.ngModel.$setValidity(key, result.valid);\n });\n\n // set overall state for validation state\n this.ngModel.$setValidity('av', this.ngModel.avResults.isValid);\n\n // store violations\n this.ngModel.avViolations = this.ngModel.avResults.violations;\n\n // record the id and violation count in the av-form controller. this determines if the form is\n // valid if sum of violations for all form inputs === zero\n this.avValForm.record(this.ngModel.avId, this.ngModel.avResults.violations.length);\n\n // remove violation keys that are no longer falsy\n angular.forEach(this.ngModel.$error, function(value, key) {\n\n if(_.indexOf(validationKeys, key) === -1 && key.lastIndexOf('av-', 0) === 0) {\n self.ngModel.$setValidity(key, true);\n }\n });\n };\n\n this.updateView = function() {\n if(this.ngModel.$dirty || $scope.avValShow) {\n avValAdapter.element($element, this.ngModel, this.ngModel.avResults.isValid);\n avValAdapter.message($element, this.ngModel);\n }\n };\n\n this.validate = function(value) {\n\n $log.info('validating value [' + value + ']');\n\n var rulesKey = self.avValForm.rulesKey;\n var results = avVal.validate(rulesKey, $element, value, self.rule);\n\n // validate function is called within the context of angular so fn.call and set the context\n // to \"this\"\n self.updateModel.call(self, results);\n self.updateView.call(self);\n\n return results;\n };\n\n this.validateModel = function(value) {\n\n self.validate(value, true);\n return value;\n\n };\n\n this.validateView = function(value) {\n\n var results = self.validate(value);\n\n if(self.avValForm.avValInvalid || self.avValInvalid) {\n // allows invalid data from view to update model for dirty saving\n return value;\n }\n\n // prevent invalid data from view to update model\n return results.isValid ? value : undefined;\n\n };\n\n this.onDebounce = function() {\n\n var value = $element.val().trim();\n\n if(this.isCheckbox()) {\n this.ngModel.$setViewValue($element[0].checked);\n } else if(this.isRadio()) {\n this.ngModel.$setViewValue($attrs.value);\n }else {\n this.ngModel.$setViewValue(value);\n }\n\n };\n\n this.isRadio = function() {\n return $element.is('input') && $attrs.type === 'radio';\n };\n\n this.isCheckbox = function() {\n return $element.is('input') && $attrs.type === 'checkbox';\n };\n\n this.reset = function() {\n\n var violations = this.ngModel.avResults.violations;\n violations.splice(0, violations.length);\n\n avValAdapter.message($element, this.ngModel);\n avValAdapter.reset($element);\n\n };\n\n this.event = function(event, avValDebounce) {\n\n var self = this;\n\n $element.unbind('input');\n\n var debounce;\n\n $element.on(event, function() {\n\n // https://github.com/angular/angular.js/blob/v1.2.27/src/ng/directive/input.js#L508\n if($sniffer.msie <= 11 && (event || noEvent).type === 'input' && $element[0].placeholder !== placeholder) {\n placeholder = $element[0].placeholder;\n return;\n }\n\n $timeout.cancel(debounce);\n debounce = $timeout(function() {\n $scope.$apply(function() {\n self.onDebounce();\n });\n }, avValDebounce);\n\n });\n\n };\n\n });\n\n // Events:\n //\n // click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown\n // keyup keypress submit focus blur copy cut paste\n availity.ui.directive('avValField', function($log, $timeout, avVal, avValAdapter, AV_VAL) {\n return {\n restrict: 'A',\n controller: 'AvValFieldController',\n require: ['^avValForm', 'ngModel', 'avValField'],\n scope: {\n avValDebounce: '@?',\n avValOn: '@?',\n avValShow: '=?'\n },\n link: function(scope, element, attrs, controllers) {\n\n var rule = attrs.avValField;\n var avValForm = controllers[0];\n var ngModel = controllers[1];\n var avValField = controllers[2];\n\n var avValOn = scope.avValOn || avValForm.avValOn || 'input';\n\n if(!ngModel && !rule) {\n $log.error('avValField requires ngModel and a validation rule to run.');\n return;\n }\n\n // Allows fields to update with invalid data for dirty form saving\n avValField.avValInvalid = attrs.avValInvalid || false;\n\n // CACHE THE MODEL\n avValField.setNgModel(ngModel);\n\n avValField.avValForm(avValForm);\n\n avValField.setRule(rule);\n\n avValField.createId();\n\n // DEBOUNCE\n var avValDebounce = parseInt(scope.avValDebounce || (avValForm.avValDebounce || AV_VAL.DEBOUNCE), 10);\n avValDebounce = _.isNumber(avValDebounce) ? avValDebounce : AV_VAL.DEBOUNCE;\n\n var debounceAllowed = !avValField.isRadio() && !avValField.isCheckbox() && avValOn !== 'blur';\n\n if(!debounceAllowed) {\n avValDebounce = 0;\n }\n\n // EVENT LISTENER\n avValField.event(avValOn, avValDebounce);\n\n // (view to model)\n ngModel.$parsers.push(avValField.validateView);\n\n // (model to view) - added to beginning of array because formatters\n // are processed in reverse order thus allowing the model to be transformed\n // before the validation framework check for validity.\n ngModel.$formatters.unshift(avValField.validateModel);\n\n scope.$on(AV_VAL.EVENTS.REVALIDATE, function() {\n avValField.validate(ngModel.$viewValue);\n });\n\n // SUBMITTED EVENT\n scope.$on(AV_VAL.EVENTS.SUBMITTED, function() {\n ngModel.$dirty = true;\n avValField.validate(ngModel.$viewValue);\n });\n\n // - Removes all errors on page,\n // - does not reset view or model values. This is to be handled by the app.\n scope.$on(AV_VAL.EVENTS.RESET, function () {\n avValField.reset();\n });\n\n scope.$on('$destroy', function () {\n avValForm.unrecord(ngModel.avId);\n });\n\n }\n };\n });\n\n\n})(window);\n\n// Source: /lib/ui/popover/popover.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.provider('avPopoverConfig', function() {\n\n var config = {\n showOnLoadHideDelay: 10000\n };\n\n this.set = function(options) {\n angular.extend(config, options);\n };\n\n this.$get = function() {\n return angular.copy(config);\n };\n });\n\n availity.ui.constant('AV_POPOVER', {\n NAME: 'bs.popover'\n });\n\n availity.ui.controller('AvPopoverController', function($element, $scope, AV_POPOVER, $timeout, avPopoverConfig) {\n this.options = angular.extend({}, avPopoverConfig);\n\n this.listeners = function() {\n\n var self = this;\n\n angular.forEach(['show', 'shown', 'hide', 'hidden'], function(name) {\n $element.on(name + '.bs.popover', function(ev) {\n $scope.$emit('av:popover:' + name, ev);\n });\n });\n\n $scope.$on('destroy', function() {\n self.destroy();\n });\n };\n\n this.plugin = function() {\n return $element.data(AV_POPOVER.NAME);\n };\n\n this.show = function() {\n $element.popover('show');\n };\n\n this.hide = function() {\n $element.popover('hide');\n };\n\n this.toggle = function() {\n $element.popover('toggle');\n };\n\n this.destroy = function() {\n $element.popover('destroy');\n };\n\n\n this.init = function() {\n\n this.listeners();\n\n if($scope.showOnLoad) {\n\n this.show();\n\n if($scope.delay && $scope.delay.hide) {\n $timeout(this.hide, $scope.delay.hide, false);\n return;\n }\n // If no delay is found or cannot be parsed, set a default timeout so that the popover doesn't stick around forever\n $timeout(this.hide, this.options.showOnLoadHideDelay, false);\n }\n };\n\n\n });\n\n availity.ui.directive('avPopover', function() {\n return {\n restrict: 'A',\n controller: 'AvPopoverController',\n scope: {\n showOnLoad: '=',\n delay: '='\n },\n link: function(scope, element, attrs, avPopover) {\n\n var options = {};\n\n scope.$evalAsync(function() {\n element.popover(angular.extend({}, options, {\n html: true\n }));\n avPopover.init();\n });\n }\n };\n });\n\n})(window);\n\n// Source: /lib/ui/validation/container.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.controller('avValContainerController', function($scope, $timeout) {\n\n this.message = function(ngModel) {\n\n var message = null;\n if(ngModel.avResults.violations.length && ngModel.avResults.violations[0].message) {\n message = ngModel.avResults.violations[0].message;\n }else {\n message = null;\n }\n\n // $timeout is needed to update the UI from $broadcast events\n $timeout(function() {\n $scope.messages.message = message;\n });\n\n };\n\n });\n\n availity.ui.directive('avValContainer', function() {\n return {\n restrict: 'A',\n controller: 'avValContainerController',\n template: '

            ',\n replace: true,\n scope: {\n\n },\n link: function(scope) {\n scope.messages = _.extend({}, scope.messages, { message: null, id: null });\n }\n };\n });\n\n\n})(window);\n\n// Source: /lib/ui/validation/adapter-bootstrap.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_BOOTSTRAP_ADAPTER', {\n CLASSES: {\n SUCCESS: 'has-success',\n WARNING: 'has-warning',\n ERROR: 'has-error',\n FEEDBACK: 'has-feedback',\n HELP: 'help-block',\n FORM_GROUP: '.form-group:first',\n NAVBAR: 'navbar-fixed-top'\n },\n SELECTORS: {\n CONTAINER: 'container-id',\n DATA_CONTAINER: 'data-container-id'\n },\n CONTROLLER: '$avValContainerController'\n });\n\n availity.ui.factory('avValBootstrapAdapter', function(AV_BOOTSTRAP_ADAPTER, $timeout, $log) {\n\n return {\n\n element: function(element, ngModel) {\n if(ngModel.$valid) {\n element.parents(AV_BOOTSTRAP_ADAPTER.CLASSES.FORM_GROUP).removeClass(AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR);\n }else {\n element.parents(AV_BOOTSTRAP_ADAPTER.CLASSES.FORM_GROUP).addClass(AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR);\n }\n },\n\n reset: function(element) {\n element.parents(AV_BOOTSTRAP_ADAPTER.CLASSES.FORM_GROUP).removeClass(AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR);\n },\n\n message: function(element, ngModel) {\n\n var selector = [\n '.',\n AV_BOOTSTRAP_ADAPTER.CLASSES.HELP\n ].join('');\n\n var $el = $(element);\n\n var target = $el.attr(AV_BOOTSTRAP_ADAPTER.SELECTORS.CONTAINER);\n target = target || $el.attr(AV_BOOTSTRAP_ADAPTER.SELECTORS.DATA_CONTAINER);\n // default to siblings\n target = target ? $('#' + target) : $el.siblings(selector);\n\n if(target.length === 0) {\n $log.warn('avValBootstrapAdapter could not find validation container for {0}', [element]);\n return;\n }\n\n var el = target[0];\n $el = angular.element(el);\n var avValModel = $el.data(AV_BOOTSTRAP_ADAPTER.CONTROLLER); // get the av val message controller\n if(avValModel) {\n avValModel.message(ngModel);\n }\n },\n\n scroll: function(form) {\n\n // Bootstrap fixed navbars causes bad scroll-to offsets so find them all\n var navbarSelector = [\n '.',\n AV_BOOTSTRAP_ADAPTER.CLASSES.NAVBAR\n ].join('');\n\n // Add up all the heights to find the true offset\n var offset = 0;\n $(navbarSelector).each(function() {\n offset += $(this).outerHeight();\n });\n\n var selector = [\n '.',\n AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR,\n ':first'\n ].join('');\n\n var $target = $(form).find(selector);\n $timeout(function() {\n // scroll to offset top of first error minus the offset of the navbars\n $('body, html').animate({scrollTop: $target.offset().top - offset}, 'fast');\n }, 0, false);\n }\n };\n });\n\n\n})(window);\n\n// Source: /lib/ui/validation/adapter.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_VAL_ADAPTER', {\n DEFAULT: 'avValBootstrapAdapter'\n });\n\n availity.ui.provider('avValAdapter', function() {\n\n var that = this;\n\n this.setAdapter = function(adapter) {\n this.adapter = adapter;\n };\n\n this.$get = function(AV_VAL_ADAPTER, $injector) {\n\n var Adapter = function() {\n var adapterName = that.adapter || AV_VAL_ADAPTER.DEFAULT;\n this.adapter = $injector.get(adapterName);\n };\n\n var proto = Adapter.prototype;\n\n proto.element = function(element, ngModel) {\n this.adapter.element(element, ngModel);\n };\n\n proto.reset = function(element) {\n this.adapter.reset(element);\n };\n\n proto.message = function(element, ngModel) {\n this.adapter.message(element, ngModel);\n },\n\n proto.scroll = function(form) {\n this.adapter.scroll(form);\n };\n\n return new Adapter();\n };\n });\n\n})(window);\n\n// Source: /lib/ui/dropdown/dropdown.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.provider('avDropdownConfig', function() {\n var config = {\n closeOnResize: true,\n dropdownAutoWidth: true,\n minimumResultsForSearch: 5\n };\n\n this.set = function(options) {\n angular.extend(config, options);\n };\n\n this.$get = function() {\n return angular.copy(config);\n };\n });\n\n availity.ui.constant('AV_DROPDOWN', {\n OPTIONS: [\n 'width',\n 'minimumInputLength',\n 'maximumInputLength',\n 'minimumResultsForSearch',\n 'maximumSelectionSize',\n 'placeholderOption',\n 'separator',\n 'allowClear',\n 'multiple',\n 'closeOnSelect',\n 'openOnEnter',\n 'id',\n 'matcher',\n 'sortResults',\n 'formatSelection',\n 'formatResult',\n 'formatResultCssClass',\n 'formatNoMatches',\n 'formatSearching',\n 'formatAjaxError',\n 'formatInputTooShort',\n 'formatInputTooLong',\n 'formatSelectionTooBig',\n 'formatLoadMore',\n 'createSearchChoice',\n 'createSearchChoicePosition',\n 'initSelection',\n 'tokenizer',\n 'tokenSeparators',\n 'query',\n 'ajax',\n 'data',\n 'tags',\n 'containerCss',\n 'containerCssClass',\n 'dropdownCss',\n 'dropdownCssClass',\n 'dropdownAutoWidth',\n 'adaptContainerCssClass',\n 'adaptDropdownCssClass',\n 'escapeMarkup',\n 'selectOnBlur',\n 'loadMorePadding',\n 'nextSearchTerm',\n 'correlationId'\n ]\n });\n\n\n availity.ui.controller('AvDropdownController', function($element, $attrs, AV_UI, AV_DROPDOWN, avDropdownConfig, $log, $scope, $timeout, $parse) {\n\n var self = this;\n this.options = {};\n this.match = null;\n this.ngModel = null;\n\n this.init = function() {\n\n self.options = angular.extend({}, avDropdownConfig);\n\n _.forEach($attrs, function(value, key) {\n if(_.contains(AV_DROPDOWN.OPTIONS, key.replace('data-', ''))) {\n self.options[key] = $scope.$eval(value);\n }\n });\n\n if(this.isRemoteMultiple()) {\n self.options.multiple = angular.isDefined($attrs.multiple);\n }\n\n self.multiple = angular.isDefined($attrs.multiple);\n\n if(self.options.query) {\n\n self.queryFn = self.options.query;\n // Function used to query results for the search term.\n self.options.query = self.query;\n // Function used to get the id from the choice object or a string representing the key under which the id is stored.\n self.options.id = self.getId;\n }\n\n };\n\n this.isRemoteMultiple = function() {\n if(angular.isDefined($attrs.multiple) && $element.get(0).tagName.toLowerCase() === 'input') {\n return true;\n }\n return false;\n };\n\n this.setRemoteViewValue = function(e) {\n\n var values = this.ngModel.$viewValue;\n\n if(!angular.isArray(values) || !angular.isObject(values)) {\n values = [];\n }\n\n if(e.added) {\n // Adding to collection\n values.push(e.added);\n } else {\n // Removing from collection\n var index = _.findIndex(values, function(value) {\n return _.matches(e.removed)(value);\n });\n values.splice(index, 1);\n }\n\n this.ngModel.$setViewValue(values);\n\n };\n\n this.setViewValue = function(e) {\n this.ngModel.$setViewValue(e.added);\n };\n\n this.setNgModel = function(ngModel) {\n this.ngModel = ngModel;\n };\n\n this.getSelected = function(model) {\n\n if(self.options.query) {\n return 0;\n }\n\n var items = this.collection($scope);\n\n var index = _.findIndex(items, function(item) {\n if (!self.valueFn) {\n return angular.equals(item, model);\n } else {\n var locals = {};\n locals[self.valueName] = item;\n var value = self.valueFn($scope, locals);\n return angular.equals(value, model);\n }\n });\n\n return index;\n\n };\n\n // Result:\n //\n // {\n // \"code\": \"252Y00000X\",\n // \"value\": \"AGENCIES,EARLY INTERVENTION PROVIDER AGENCY,NOT APPLICABLE|Agency\",\n // \"id\": \"252Y00000X\"\n // }\n this.getId = function(result) {\n return result.id;\n };\n\n // Wrapper around the query function for Select2. When the promise resolves\n // the callback\n this.query = function(options) {\n\n self.queryFn(options).then(function(response) {\n\n // Callback function that should be called with the result object. The result object:\n //\n // result.results (object) - Array of result objects. The default renderers\n // expect objects with id and text keys. The id property is required,\n // even if custom renderers are used. The object may also contain a children\n // key if hierarchical data is displayed. The object may also contain a disabled\n // boolean property indicating whether this result can be selected.\n //\n // result.more (boolean) - true if more results are available for the current\n // search term.\n //\n // results.context (object) - A user-defined object that should be made available\n // as the context parameter to the query function on subsequent queries to load\n // more result pages for the same search term. See the description of\n // options.context parameter.\n options.callback({more: response.more, results: response.results});\n });\n };\n\n this.setValue = function() {\n\n var viewValue = self.ngModel.$viewValue;\n var selected = null;\n if(viewValue) {\n selected = this.getSelected(viewValue);\n }\n\n // var apply = scope.$evalAsync || $timeout;\n $timeout(function() {\n $element\n .select2('val', (selected === null || selected === 'undefined') ? '' : selected); // null === '' for Select2\n });\n };\n\n this.getMultiSelected = function(viewValue) {\n\n var indices = [];\n\n if($element.get(0).tagName.toLowerCase() !== 'input') {\n var options = this.collection($scope);\n\n _.each(viewValue, function(savedObject) {\n var index = _.findIndex(options, function(value) {\n var temp = angular.copy(savedObject); // remove hashkeys for comparison\n return _.matches(temp)(value);\n });\n indices.push(index);\n });\n\n } else {\n\n var inputViewValues = this.ngModel.$modelValue;\n\n _.each(inputViewValues, function(savedObject) {\n\n if(_.isUndefined(savedObject.id) ) {\n\n if(savedObject.id || savedObject[self.options.correlationId]) {\n\n savedObject.id = savedObject[self.options.correlationId];\n\n } else {\n\n throw new Error('dropdown list must have a id or a alternative value to use as a id');\n }\n\n }\n\n });\n }\n\n if(indices.length > 0) {\n viewValue = indices;\n }\n\n return viewValue;\n\n };\n\n this.setValues = function() {\n\n var viewValue = self.ngModel.$viewValue;\n\n if(!angular.isArray(viewValue)) {\n viewValue = [];\n }\n\n if(!_.isEmpty(viewValue) && _.isObject(viewValue[0])) {\n viewValue = this.getMultiSelected(viewValue);\n }\n\n $timeout(function() {\n $element\n .select2('val', viewValue);\n });\n };\n\n this.ngOptions = function() {\n\n this.match = $attrs.ngOptions.match(AV_UI.NG_OPTIONS);\n if(!this.match) {\n throw new Error('Invalid ngOptions for avDropdown');\n }\n // AV_UI.NG_OPTIONS regex will parse into arrays like below:\n //\n // 0: \"state.name for state in states\"\n // 1: \"state.name\"\n // 2: undefined\n // 3: undefined\n // 4: \"state\"\n // 5: undefined\n // 6: undefined\n // 7: \"states\"\n // 8: undefined\n //\n // 0: \"state.id as state.name for state in states\"\n // 1: \"state.id\"\n // 2: \"state.name\"\n // 3: undefined\n // 4: \"state\"\n // 5: undefined\n // 6: undefined\n // 7: \"states\"\n // 8: undefined\n //\n // 0: \"state.name for state in states track by state.id\"\n // 1: \"state.name\"\n // 2: undefined\n // 3: undefined\n // 4: \"state\"\n // 5: undefined\n // 6: undefined\n // 7: \"states\"\n // 8: \"state.id\"\n //\n // 0: \"person.fullName as (person.lastName + ', ' + person.firstName) for person in feeScheduleModel.persons\"\n // 1: \"person.fullName\"\n // 2: \"(person.lastName + ', ' + person.firstName)\"\n // 3: undefined\n // 4: \"person\"\n // 5: undefined\n // 6: undefined\n // 7: \"feeScheduleModel.persons\"\n // 8: undefined\n //\n this.displayFn = $parse(this.match[2] || this.match[1]); // this is the function to retrieve the text to show as\n this.collection = $parse(this.match[7]);\n this.valueName = this.match[4] || this.match[6];\n this.valueFn = $parse(this.match[2] ? this.match[1] : this.valueName);\n this.keyName = this.match[5];\n\n $scope.$watchCollection(this.collection, function(newVal, oldVal) {\n if(angular.equals(newVal, oldVal)) {\n return;\n }\n\n self.setValue();\n\n }, true);\n\n };\n });\n\n availity.ui.directive('avDropdown', function($timeout, $log, $window) {\n\n return {\n restrict: 'A',\n require: ['ngModel', 'avDropdown'],\n controller: 'AvDropdownController',\n link: function(scope, element, attrs, controllers) {\n var ngModel = controllers[0];\n var avDropdown = controllers[1];\n\n avDropdown.setNgModel(ngModel);\n avDropdown.init();\n\n if(attrs.ngOptions ) {\n avDropdown.ngOptions();\n }\n\n ngModel.$parsers.push(function(value) {\n var parent = element.prev();\n parent\n .toggleClass('ng-invalid', !ngModel.$valid)\n .toggleClass('ng-valid', ngModel.$valid)\n .toggleClass('ng-invalid-required', !ngModel.$valid)\n .toggleClass('ng-valid-required', ngModel.$valid)\n .toggleClass('ng-dirty', ngModel.$dirty)\n .toggleClass('ng-pristine', ngModel.$pristine);\n return value;\n });\n\n element.on('change', function(e) {\n\n // special case since the ajax handling doesn't bind to the model correctly\n // this has to do with select2 (v3.5.2) using a hidden field instead of a select for ajax\n if(avDropdown.options.query) {\n $timeout(function() {\n // look at moving this to the controller\n if(avDropdown.isRemoteMultiple()) {\n avDropdown.setRemoteViewValue(e);\n } else {\n avDropdown.setViewValue(e);\n }\n\n }, false, 0);\n }\n\n $log.info(e);\n\n });\n\n // fires ng-focus when select2-focus fires.\n element.on('select2-focus', function() {\n if(attrs.ngFocus) {\n scope.$eval(scope.$eval(attrs.ngFocus));\n }\n });\n\n // fires ng-blur when select2-blur occurs.\n element.on('select2-blur', function() {\n if(attrs.ngBlur) {\n scope.$eval(scope.$eval(attrs.ngBlur));\n }\n });\n\n // https://github.com/t0m/select2-bootstrap-css/issues/37#issuecomment-42714589\n element.on('select2-open', function () {\n // look for .has-success, .has-warning, .has-error\n // (really look for .has-* … which is good enough for the demo page, but obviously might interfere with other CSS-classes starting with \"has-\")\n if(element.parents('[class*=\"has-\"]').length) {\n\n // get all CSS-classes from the element where we found \"has-*\" and collect them in an array\n var classNames = $(this).parents('[class*=\"has-\"]')[0].className.split(/\\s+/);\n\n // go through the class names, find \"has-\"\n for(var i = 0; i < classNames.length; ++i) {\n if(classNames[i].match('has-')) {\n $('#select2-drop').addClass(classNames[i]);\n }\n }\n }\n });\n\n\n var _$render = ngModel.$render;\n ngModel.$render = function() {\n _$render();\n\n if(avDropdown.multiple) {\n avDropdown.setValues();\n }else {\n avDropdown.setValue();\n }\n\n };\n\n var win = angular.element($window);\n\n win.bind('resize', function() {\n element.select2('close');\n });\n\n attrs.$observe('disabled', function (value) {\n element.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n element.select2('readonly', !!value);\n });\n\n scope.$on('destroy', function() {\n element.select2('destroy');\n });\n\n $timeout(function() {\n element.select2(avDropdown.options);\n });\n }\n };\n });\n\n})(window);\n\n// Source: /lib/ui/datepicker/datepicker.js\n/**\n * Inspiration https://github.com/mgcrea/angular-strap/blob/v0.7.8/src/directives/datepicker.js\n */\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.provider('avDatepickerConfig', function() {\n\n var config = {\n autoclose: true,\n todayHighlight: true,\n format: 'mm/dd/yyyy',\n forceParse: false\n };\n\n this.set = function(options) {\n angular.extend(config, options);\n };\n\n this.$get = function() {\n return angular.copy(config);\n };\n\n });\n\n // Options: http://bootstrap-datepicker.readthedocs.org/en/latest/options.html\n availity.ui.constant('AV_DATEPICKER', {\n CONTROLLER: '$ngModelController',\n ADD_ON_SELECTOR: '[data-toggle=\"datepicker\"]',\n OPTIONS: [\n 'autoclose',\n 'beforeShowDay',\n 'beforeShowMonth',\n 'calendarWeeks',\n 'clearBtn',\n 'toggleActive',\n 'container',\n 'daysOfWeekDisabled',\n 'datesDisabled',\n 'defaultViewDate',\n 'endDate',\n 'forceParse',\n 'format',\n 'inputs',\n 'keyboardNavigation',\n 'language',\n 'minViewMode',\n 'multidate',\n 'multidateSeparator',\n 'orientation',\n 'startDate',\n 'startView',\n 'todayBtn',\n 'todayHighlight',\n 'weekStart',\n 'showOnFocus',\n 'disableTouchKeyboard',\n 'enableOnReadonly',\n 'modelFormat'\n ],\n DEFAULTS: {\n MODELFORMAT: 'YYYY-MM-DD'\n }\n });\n\n availity.ui.controller('AvDatepickerController', function($element, $attrs, AV_DATEPICKER, $scope, avDatepickerConfig) {\n\n var self = this;\n this.options = {};\n\n this.setValue = function() {\n\n var viewValue = self.ngModel.$viewValue;\n var plugin = this.plugin();\n\n if(!viewValue || !plugin) {\n return;\n }\n\n plugin.setDate(viewValue);\n };\n\n this.setNgModel = function(ngModel) {\n this.ngModel = ngModel;\n };\n\n this.findModel = function() {\n\n var ngModel = null;\n\n var $input = $element.find('input:first').andSelf();\n if($input.length) {\n ngModel = $input.data(AV_DATEPICKER.CONTROLLER);\n this.setNgModel(ngModel);\n }\n\n return ngModel;\n };\n\n this.modelToView = function(isoWrap) {\n var viewValue = $.fn.datepicker.DPGlobal.formatDate(isoWrap, self.options.format, 'en');\n return viewValue;\n };\n\n this.wrapIsoDate = function() {\n\n var date = self.ngModel.$modelValue;\n var isoWrap;\n\n if(date !== undefined && date !== null) {\n var m = moment(date);\n isoWrap = m.isValid() ? m.toDate() : null;\n }\n\n return isoWrap;\n };\n\n this.viewToModel = function() {\n var format = $.fn.datepicker.DPGlobal.parseFormat(self.options.format);\n var utcDate = $.fn.datepicker.DPGlobal.parseDate(self.ngModel.$viewValue, format, 'en');\n\n var plugin = self.plugin();\n\n if(!plugin) {\n return;\n }\n\n // jscs: disable\n var localDate = plugin._utc_to_local(utcDate);\n // jscs: enable\n\n if(self.options.modelFormat && localDate) {\n localDate = moment(localDate).format(self.options.modelFormat);\n }\n\n return localDate;\n };\n\n this.init = function() {\n\n self.options = angular.extend({}, avDatepickerConfig);\n\n _.forEach($attrs, function(value, key) {\n if(_.contains(AV_DATEPICKER.OPTIONS, key.replace('data-', ''))) {\n self.options[key] = $scope.$eval(value);\n }\n });\n\n if(self.options.modelFormat && self.options.modelFormat.toLowerCase() === 'default') {\n self.options.modelFormat = AV_DATEPICKER.DEFAULTS.MODELFORMAT;\n }\n };\n\n this.plugin = function() {\n return $element.data('datepicker');\n };\n\n this.destroy = function() {\n var plugin = this.plugin();\n if(plugin) {\n plugin.remove();\n $element.data('datepicker', null);\n }\n };\n\n this.hide = function() {\n var plugin = this.plugin();\n if(plugin) {\n plugin.hide();\n }\n };\n });\n\n availity.ui.directive('avDatepicker', function($window, $log, AV_DATEPICKER) {\n return {\n restrict: 'A',\n require: ['ngModel', 'avDatepicker'],\n controller: 'AvDatepickerController',\n link: function(scope, element, attrs, controllers) {\n\n var ngModel = controllers[0];\n var avDatepicker = controllers[1];\n\n if(!ngModel) {\n ngModel = avDatepicker.findModel();\n if(!ngModel) {\n $log.error('avDatepicker requires ngModel');\n return;\n }\n }\n\n avDatepicker.init();\n avDatepicker.setNgModel(ngModel);\n\n element.on('changeDate', function(e) {\n $log.info('avDatepicker changeDate {0}', [e]);\n });\n\n // (view to model)\n ngModel.$parsers.push(avDatepicker.viewToModel);\n\n // (model to view) - added to end of formatters array\n // because they are processed in reverse order.\n // if the model is in Date format and send to the validation framework\n // prior to getting converted to the expected $viewValue format,\n // the validation will fail.\n ngModel.$formatters.push(avDatepicker.modelToView);\n ngModel.$formatters.push(avDatepicker.wrapIsoDate);\n\n var _$render = ngModel.$render;\n ngModel.$render = function() {\n _$render();\n avDatepicker.setValue();\n };\n\n var win = angular.element($window);\n\n win.bind('scroll', function() {\n avDatepicker.hide();\n });\n\n var target = element.siblings(AV_DATEPICKER.ADD_ON_SELECTOR);\n if(target.length) {\n target.on('click.datepicker', function() {\n if(!element.prop('disabled')) { // Hack check for IE 8\n element.focus();\n }\n });\n }\n\n scope.$on('destroy', function() {\n avDatepicker.destroy();\n if(target.length) {\n target.off('click.datepicker');\n }\n });\n\n scope.$evalAsync(function() {\n element.datepicker(avDatepicker.options);\n });\n }\n };\n });\n})(window);\n\n// Source: /lib/ui/idle/idle-notifier.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_UI_IDLE', {\n EVENTS: {\n OK: 'mousedown.av.idle.notifier'\n },\n TEMPLATES: {\n BASE: 'ui/idle/idle-tpl.html',\n SESSION: 'ui/idle/idle-session-tpl.html',\n WARNING: 'ui/idle/idle-warning-tpl.html'\n }\n });\n\n availity.ui.provider('avIdleNotifier', function() {\n\n var sessionTemplate;\n var warningTemplate;\n var $scope;\n\n this.setSessionTemplate = function(template) {\n sessionTemplate = template;\n };\n\n this.setWarningTemplate = function(template) {\n warningTemplate = template;\n };\n\n this.$get = function(AV_IDLE, AV_UI_IDLE, $rootScope, AvModal, $document, $timeout) {\n\n var AvIdleNotifier = function() {\n this.listeners = [];\n this.modal = null;\n };\n\n var proto = AvIdleNotifier.prototype;\n\n proto.init = function() {\n\n $scope = $rootScope.$new(true);\n $scope.idle = {};\n\n this.initListeners();\n };\n\n proto.initListeners = function() {\n\n var self = this;\n var listener = null;\n\n // ACTIVE IDLING\n listener = $rootScope.$on(AV_IDLE.EVENTS.IDLE_ACTIVE, function() {\n self.showWarning();\n });\n this.listeners.push(listener);\n\n // INACTIVE IDLING\n listener = $rootScope.$on(AV_IDLE.EVENTS.IDLE_INACTIVE, function() {\n self.hideWarning();\n });\n this.listeners.push(listener);\n\n // SESSION TIMEOUT OUT\n listener = $rootScope.$on(AV_IDLE.EVENTS.SESSION_TIMEOUT_ACTIVE, function() {\n self.showSession();\n });\n this.listeners.push(listener);\n\n };\n\n proto.destroyListeners = function() {\n // turn off each listener @see http://stackoverflow.com/a/14898795\n _.each(this.listeners, function(listener) {\n listener();\n });\n };\n\n proto.showWarning = function() {\n\n var self = this;\n\n if(this.modal !== null) {\n return;\n }\n\n $scope = $rootScope.$new(true);\n $scope.idle = {};\n $scope.idle.template = AV_UI_IDLE.TEMPLATES.WARNING;\n\n this.modal = new AvModal({\n show: true,\n scope: $scope,\n backdrop: 'static',\n templateUrl: AV_UI_IDLE.TEMPLATES.BASE\n });\n\n $document.find('body').on(AV_UI_IDLE.EVENTS.OK, function() {\n self.hideWarning();\n });\n\n };\n\n proto.hideWarning = function() {\n if(this.modal) {\n this.disableBackDrop();\n this.modal.hide();\n }\n\n this.modal = null;\n };\n\n proto.disableBackDrop = function() {\n $document.find('body').off(AV_UI_IDLE.EVENTS.OK);\n };\n\n proto.showSession = function() {\n var self = this;\n this.disableBackDrop();\n\n $timeout(function() {\n $scope.idle.template = AV_UI_IDLE.TEMPLATES.SESSION;\n $scope.idle.onSessionTimeout = _.bind(self.onSessionTimeout, self);\n }, 0, true);\n\n };\n\n proto.onSessionTimeout = function() {\n $rootScope.$broadcast(AV_IDLE.EVENTS.SESSION_TIMEOUT_REDIRECT);\n };\n\n return new AvIdleNotifier();\n\n };\n\n });\n\n availity.ui.run(function(avIdleNotifier) {\n avIdleNotifier.init();\n });\n\n})(window);\n\n// Source: /lib/ui/mask/mask.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_MASK', {\n NAME: 'inputmask',\n DEFAULTS: {\n date: '99/99/9999',\n phone: '(999) 999-9999',\n SSN:'999-99-9999'\n }\n });\n\n availity.ui.directive('avMask', function($window, $log, AV_MASK) {\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function(scope, element, attrs) {\n\n var maskType = AV_MASK.DEFAULTS[attrs['avMask']];\n if(!maskType) {\n maskType = attrs['avMask'];\n }\n\n scope.$evalAsync(function() {\n element.inputmask(maskType);\n });\n\n scope.$on('$destroy', function () {\n element.inputmask('remove');\n });\n }\n };\n });\n\n})(window);\n\n// Source: /lib/ui/permissions/has-permission.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.controller('AvHasPermissionController', function($element) {\n\n this.onSuccess = function(isAuthorized) {\n if(isAuthorized) {\n $element.removeClass('ng-hide');\n $element.show();\n } else {\n $element.remove();\n }\n };\n\n this.onError = function() {\n $element.remove();\n };\n\n });\n\n availity.ui.directive('avHasPermission', function(avUserAuthorizations) {\n return {\n restrict: 'EA',\n controller: 'AvHasPermissionController',\n require: ['avHasPermission'],\n link: function($scope, $element, $attr, controllers) {\n\n var avHasPermission = controllers[0];\n\n $element.hide();\n\n $scope.$watch($attr.avHasPermission, function(permissions) {\n\n if(!angular.isArray(permissions)) {\n permissions = _.words('' + permissions);\n }\n\n avUserAuthorizations.isAnyAuthorized(permissions).then(avHasPermission.onSuccess, avHasPermission.onError);\n });\n }\n };\n });\n\n})(window);\n\n// Source: /lib/ui/analytics/analytics.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.directive('avAnalytics', function() {\n return {\n scope: {\n options: '=avAnalytics'\n },\n controller: function($scope) {\n this.getOptions = function() {\n return $scope.options;\n };\n }\n };\n });\n\n availity.ui.controller('AvAnalyticsController', function(avAnalyticsUtils, avAnalytics) {\n\n this.onEvent = function(event, element, options) {\n\n // convert the directive attributes into object with properties with sane defaults\n var properties = angular.extend(\n {\n level: 'info'\n },\n options,\n {\n event: event.type\n }\n );\n\n // If an external link is detected\n if(avAnalyticsUtils.isExternalLink(properties)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n var promise = avAnalytics.trackEvent(properties);\n promise['finally'](function() {\n if(avAnalyticsUtils.isExternalLink(properties)) {\n document.location = element.attr('href');\n }\n });\n };\n });\n\n availity.ui.directive('avAnalyticsOn', function(AV_ANALYTICS, avAnalyticsUtils) {\n return {\n restrict: 'A',\n controller: 'AvAnalyticsController',\n require: ['avAnalyticsOn','?^avAnalytics'],\n link: function(scope, element, attrs, controllers) {\n var childCtrl = controllers[0];\n var parentCtrl = {};\n var parentOptions = {};\n\n if (controllers[1]) {\n parentCtrl = controllers[1];\n parentOptions = parentCtrl.getOptions();\n }\n\n var options = angular.extend(\n {},\n parentOptions,\n avAnalyticsUtils.getProperties(attrs)\n );\n\n var eventType = attrs.avAnalyticsOn || AV_ANALYTICS.EVENTS.DEFAULT;\n\n element.on(eventType, function(event) {\n childCtrl.onEvent(event, element, options);\n });\n }\n };\n });\n})(window);\n\n// Source: /lib/ui/placeholder/placeholder.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.requires.push('ng.shims.placeholder');\n\n availity.ui.config(function($provide) {\n\n $provide.decorator('placeholderDirective', ['$delegate', '$log', function($delegate, $log) {\n\n var directive = $delegate[0];\n var originalLink = directive.link;\n\n var newLink = function(scope, element, attrs) {\n\n if(originalLink && _.contains(_.keys(attrs), 'avMask')) {\n $log.info('placeholder shim not running on an element due to avMask on same element');\n return;\n }else if(originalLink) {\n originalLink.apply(this, arguments);\n }\n //else originalLink doesn't exist\n };\n\n directive.compile = function() {\n return newLink;\n };\n\n return $delegate;\n }]);\n\n });\n})(window);\n\n// Source: /lib/ui/breadcrumbs/breadcrumbs.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_BREADCRUMBS', {\n\n TEMPLATE: 'ui/breadcrumbs/breadcrumbs-tpl.html'\n });\n\n function AvBreadcrumbsController($state) {\n\n this.getBreadcrumb = function(breadcrumbs, state) {\n if(!state || !state.data) {\n return;\n }\n\n var breadcrumb = state.data.breadcrumb;\n if(!breadcrumb) {\n return;\n }\n\n if(breadcrumb.parent) {\n var parentState = $state.get(breadcrumb.parent);\n\n if(parentState) {\n this.getBreadcrumb(breadcrumbs, parentState);\n }\n }\n breadcrumb.state = state.name;\n breadcrumbs.push(breadcrumb);\n };\n\n this.getBreadcrumbs = function() {\n var breadcrumbs = [];\n this.getBreadcrumb(breadcrumbs, $state.current);\n return breadcrumbs;\n };\n\n }\n\n AvBreadcrumbsController.$inject = ['$state'];\n availity.ui.controller('AvBreadcrumbsController', AvBreadcrumbsController);\n\n function avBreadcrumbs(AV_BREADCRUMBS) {\n return {\n restrict: 'EA',\n replace: true,\n templateUrl: AV_BREADCRUMBS.TEMPLATE,\n controller: 'AvBreadcrumbsController',\n link: function(scope, element, attrs, avBreadcrumbs) {\n scope.breadcrumbs = avBreadcrumbs.getBreadcrumbs();\n\n scope.$on('$stateChangeSuccess', function() {\n scope.breadcrumbs = avBreadcrumbs.getBreadcrumbs();\n });\n }\n };\n }\n\n avBreadcrumbs.$inject = ['AV_BREADCRUMBS'];\n availity.ui.directive('avBreadcrumbs', avBreadcrumbs);\n\n})(window);\n\n// Source: /lib/ui/filters/approximate.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.filter('avApproximate', function() {\n var pow = Math.pow;\n var floor = Math.floor;\n var abs = Math.abs;\n var log = Math.log;\n\n function round(number, precision) {\n var prec = pow(10, precision);\n return Math.round(number * prec) / prec;\n }\n\n return function (number, precision) {\n precision = precision || 0;\n var base = floor(log(abs(number)) / log(1000));\n var unit = 'kMGTPE'[base - 1];\n return unit ? round(number / pow(1000, base), precision) + unit : (number || 0);\n };\n });\n\n})(window);\n\n// Source: /lib/ui/badge/badge.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_BADGE', {\n COLOR: null,\n DEFAULT_CLASS: 'badge',\n SHOW_WHEN_ZERO: false,\n TEMPLATE: 'ui/badge/badge-tpl.html'\n });\n\n function badgeDirective(AV_BADGE) {\n\n return {\n scope: {\n color: '@',\n count: '=avBadge',\n showWhenZero: '@'\n },\n templateUrl: AV_BADGE.TEMPLATE,\n link: function(scope, element) {\n scope.color = scope.color || AV_BADGE.COLOR;\n scope.showWhenZero = scope.showWhenZero || AV_BADGE.SHOW_WHEN_ZERO;\n\n var classes = [];\n classes.push(AV_BADGE.DEFAULT_CLASS);\n if(scope.color) {\n classes.push(scope.color);\n }\n\n element.addClass(classes.join(' '));\n }\n };\n }\n\n badgeDirective.$inject = ['AV_BADGE'];\n availity.ui.directive('avBadge', badgeDirective);\n\n})(window);\n\n// Source: /lib/ui/labels/removable-label.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_REMOVABLE_LABEL', {\n TEMPLATE: 'ui/labels/removable-label-tpl.html'\n });\n\n availity.ui.directive('avRemovableLabel', function(AV_REMOVABLE_LABEL) {\n return {\n templateUrl: AV_REMOVABLE_LABEL.TEMPLATE,\n transclude: true,\n scope: {\n removeValue: '=',\n onRemove: '&'\n },\n link: function(scope, element, attrs) {\n element.addClass('label-remove');\n scope.removeLabel = function() {\n if(!attrs.disabled) {\n scope.onRemove()(scope.removeValue);\n }\n };\n }\n };\n });\n\n})(window);\n\n// Source: /lib/ui/animation/loader.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_LOADER', {\n\n TEMPLATES: {\n LOADER: 'ui/animation/loader-tpl.html'\n }\n\n });\n\n availity.ui.controller('AvLoaderController', function($element) {\n\n var self = this;\n var active;\n\n this.start = function() {\n active = true;\n this.animate();\n };\n\n this.animate = function() {\n\n $element\n .find('.loading-bullet')\n .velocity('transition.slideRightIn', { stagger: 250 })\n .velocity({ opacity: 0 }, {\n delay: 750,\n duration: 500,\n complete: function() {\n if(active) {\n setTimeout(function() {self.animate();}, 500);\n } else {\n self.endAnimation();\n }\n }\n });\n\n };\n\n this.endAnimation = function() {\n $element.find('.loading-bullet').velocity('stop', true);\n $element.removeData();\n };\n\n this.stop = function() {\n active = false;\n };\n\n });\n\n availity.ui.directive('avLoader', function(AV_LOADER) {\n return {\n restrict: 'A',\n replace: true,\n controller: 'AvLoaderController',\n require: 'avLoader',\n templateUrl: AV_LOADER.TEMPLATES.LOADER,\n link: function(scope, element, attr, avLoader) {\n\n if(!attr.delay) {\n avLoader.start();\n }\n\n scope.$on('$destroy', function() {\n avLoader.stop();\n });\n\n }\n };\n });\n\n})(window);\n\n// Source: /lib/ui/block/block.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_BLOCK', {\n TEMPLATES: {\n BLOCK: 'ui/block/block-tpl.html'\n }\n });\n\n var getLoaderController = function(blockId) {\n var el = $('[data-block-ui=\"' + blockId + '\"]') || $('[block-ui=\"' + blockId + '\"]');\n if(el) {\n return el.find('[data-av-loader]').controller('avLoader');\n }\n };\n\n var triggerLoaderController = function(id, instance, fn) {\n\n var controller = instance.loaderController;\n if(!controller) {\n controller = getLoaderController(id);\n instance.loaderController = controller;\n }\n if(controller && _.isFunction(controller[fn])) {\n controller[fn]();\n }\n\n };\n\n var triggerInstance = function(id, instance, origFn, loaderFn) {\n triggerLoaderController(id, instance, loaderFn);\n origFn.apply(instance);\n };\n\n var modifyBlockInstances = function(id, instance) {\n\n var origStartFn = instance.start;\n var origStopFn = instance.stop;\n\n instance.start = function() {\n triggerInstance(id, instance, origStartFn, 'start');\n };\n\n instance.stop = function() {\n triggerInstance(id, instance, origStopFn, 'stop');\n };\n\n instance.startLoader = function() {\n triggerLoaderController(id, instance, 'start');\n };\n\n instance.avModifications = true;\n };\n\n availity.ui.run(function($injector, $log, AV_BLOCK) {\n\n try {\n\n var blockUIConfig = $injector.get('blockUIConfig');\n var blockUI = $injector.get('blockUI');\n blockUIConfig.autoBlock = false;\n blockUIConfig.delay = 0;\n blockUIConfig.templateUrl = AV_BLOCK.TEMPLATES.BLOCK;\n\n var origGetFn = blockUI.instances.get;\n blockUI.instances.get = function(id) {\n var instance = origGetFn(id);\n if(!instance.avModifications) {\n modifyBlockInstances(id, instance);\n }\n return instance;\n };\n\n } catch(e) {\n $log.warn('blockUI is required to use av block.');\n }\n });\n\n})(window);\n\n// Source: /lib/ui/block/block-directive.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n // Helper directive that hooks into block-ui's start-up lifecycle and starts the loader\n availity.ui.directive('avBlockUi', function(blockUI) {\n\n return {\n restrict: 'A',\n link: function($scope, $element, $attrs) {\n\n var blockId = $attrs.avBlockUi;\n var blockCount = $attrs.blockCount;\n var instance = blockUI.instances.get(blockId);\n if(blockCount > 0) {\n instance.startLoader();\n }\n }\n };\n\n });\n\n})(window);\n\n// Source: /lib/ui/tabs/tabs.js\n/*\n* Inspired by https://github.com/angular-ui/bootstrap/blob/master/src/tabs/tabs.js\n*/\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_TABS', {\n TEMPLATES: {\n TABS: 'ui/tabs/tabs-tpl.html',\n TAB: 'ui/tabs/tab-tpl.html'\n }\n });\n\n function TabsController($scope) {\n\n var self = this;\n\n $scope.tabs = [];\n self.tabs = $scope.tabs;\n\n this.addTab = function(tab) {\n self.tabs.push(tab);\n\n if(self.tabs.length === 1) {\n tab.active = true;\n } else if(tab.active) {\n self.selectTab(tab);\n } else {\n tab.active = false;\n }\n };\n\n this.removeTab = function(tab) {\n var index = self.tabs.indexOf(tab);\n\n if(tab.active && self.tabs.length > 1) {\n //If this is the last tab, select the previous tab. else, the next tab.\n var newActiveIndex = index === self.tabs.length - 1 ? index - 1 : index + 1;\n self.selectTab(self.tabs[newActiveIndex]);\n }\n\n self.tabs.splice(index, 1);\n };\n\n this.selectTab = function(selectedTab) {\n angular.forEach(self.tabs, function (tab) {\n if(tab.active && tab !== selectedTab) {\n tab.active = false;\n tab.onDeselect();\n }\n });\n\n selectedTab.active = true;\n selectedTab.onSelect();\n };\n }\n\n TabsController.$inject = ['$scope'];\n availity.ui.controller('AvTabsController', TabsController);\n\n function TabsDirective(AV_TABS) {\n return {\n restrict: 'AE',\n templateUrl: AV_TABS.TEMPLATES.TABS,\n transclude: true,\n replace: true,\n controller: 'AvTabsController',\n scope: true,\n link: function(scope, element, attrs) {\n scope.justified = !!attrs.justified;\n scope.tabType = attrs.tabType;\n scope.vertical = !!attrs.vertical;\n\n if(angular.isUndefined(attrs.padContent)) {\n scope.padContent = true;\n }\n }\n };\n }\n\n TabsDirective.$inject = ['AV_TABS'];\n availity.ui.directive('avTabs', TabsDirective);\n\n function TabDirective(AV_TABS) {\n return {\n restrict: 'AE',\n templateUrl: AV_TABS.TEMPLATES.TAB,\n replace: true,\n require: '^avTabs',\n transclude: true,\n scope: {\n heading: '@',\n template: '=',\n templateUrl: '=',\n onSelect: '&select',\n onDeselect: '&deselect'\n },\n controller: function() {\n // Allow avTabs to be required by other directives\n },\n link: function(scope, element, attrs, tabsController, transclude) {\n scope.transcludeFn = transclude;\n\n tabsController.addTab(scope);\n\n scope.$on('destroy', function() {\n tabsController.removeTab(scope);\n });\n\n scope.select = function() {\n if(!scope.disabled) {\n tabsController.selectTab(scope);\n }\n };\n\n scope.$watch('active', function(active) {\n if(active) {\n tabsController.selectTab(scope);\n }\n });\n\n if(angular.isDefined(attrs.active)) {\n scope.active = attrs.active;\n\n scope.$parent.$watch(attrs.active, function(active) {\n if(active) {\n tabsController.selectTab(scope);\n }\n });\n }\n\n if(angular.isDefined(attrs.disable)) {\n scope.$parent.$watch(attrs.disable, function(disabled) {\n scope.disabled = !!disabled;\n });\n }\n }\n };\n }\n\n TabDirective.$inject = ['AV_TABS'];\n availity.ui.directive('avTab', TabDirective);\n\n function TabPaneDirective(avTemplateCache, $compile) {\n return {\n restrict: 'AE',\n require: '^avTabs',\n link: function(scope, element, attrs) {\n\n var tab = scope.$eval(attrs.avTabPane);\n\n if(angular.isDefined(tab.template) || angular.isDefined(tab.templateUrl)) {\n avTemplateCache.get(tab)\n .then(function(template) {\n element.append($compile(template)(scope));\n });\n } else {\n tab.transcludeFn(tab.$parent, function(contents) {\n angular.forEach(contents, function(node) {\n element.append(node);\n });\n });\n }\n }\n };\n }\n\n TabPaneDirective.$inject = ['avTemplateCache', '$compile'];\n availity.ui.directive('avTabPane', TabPaneDirective);\n\n})(window);\n\n// Source: /lib/ui/scroll-pagination/scroll-pagination.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_SCROLL_PAGINATION', {\n TEMPLATE: 'ui/scroll-pagination/scroll-pagination-tpl.html',\n DEFAULT_OPTIONS: {\n limit: 50,\n offset: 0,\n maxCached: 100,\n loadMoreText: 'Load more items',\n entryIdAttribute: 'id',\n apiParams: {},\n beforePageLoad: undefined,\n afterPageLoad: undefined\n }\n });\n\n\n availity.ui.factory('avScrollPaginationService', function($log) {\n function AvScrollPaginationService() {\n this.instances = {};\n }\n\n var proto = AvScrollPaginationService.prototype;\n\n proto.registerInstance = function(instanceInterface, id) {\n if (this.instances[id]) {\n $log.warn('Found existing instance with id ' + id);\n }\n this.instances[id] = instanceInterface;\n };\n\n proto.unregisterInstance = function(id) {\n delete this.instances[id];\n };\n\n proto.resetInstance = function(id) {\n if (this.instances[id]) {\n this.instances[id].reset();\n return true;\n }\n return false;\n };\n\n return new AvScrollPaginationService();\n });\n\n availity.ui.controller('AvScrollPaginationController', function($scope, $element, $timeout, $log, AV_SCROLL_PAGINATION, blockUI, avScrollPaginationService) {\n\n var self = this;\n\n this.buildOptions = function() {\n $scope._options = {};\n _.extend($scope._options, AV_SCROLL_PAGINATION.DEFAULT_OPTIONS, $scope.options || {});\n $scope._options.lowOffset = $scope._options.offset;\n $scope._options.highOffset = $scope._options.offset;\n };\n\n var originalEntries = angular.copy($scope.entries);\n this.buildOptions();\n\n this.updateButtonVisibilityFlags = function(data) {\n $scope.showNext = $scope._options.highOffset + data.count < data.totalCount;\n $scope.showPrev = $scope._options.lowOffset > 0;\n };\n\n this.loadEntries = function(prepend) {\n var block = blockUI.instances.get('scroll-pagination-block-' + $scope.avScrollPagination);\n block.start();\n if (_.isFunction($scope._options.beforePageLoad)) {\n $scope._options.beforePageLoad($scope._options);\n }\n var params = {};\n _.extend(params, $scope._options.apiParams, {limit: $scope._options.limit, offset: $scope._options.offset});\n $scope.apiResource.query({params: params}).then(function(response) {\n var responseData = self.getResponseData(response);\n if ($scope._options.afterPageLoad) {\n $scope._options.afterPageLoad(responseData);\n }\n if (responseData && responseData[$scope._options.resourceId]) {\n self.addEntries(responseData[$scope._options.resourceId], prepend);\n }\n self.updateButtonVisibilityFlags(responseData);\n block.stop();\n }, function() {\n $log.error('API call failed');\n block.stop();\n });\n };\n\n this.getResponseData = function(data) {\n if (data) {\n if ($scope._options.responseKey) {\n var keys = $scope._options.responseKey.split('.');\n var nestedData = data;\n var noData = false;\n _.each(keys, function(key) {\n if (!noData) {\n nestedData = nestedData[key];\n if (!nestedData) {\n noData = true;\n }\n }\n });\n return noData ? [] : nestedData;\n } else {\n return data;\n }\n }\n return [];\n };\n\n this.addEntries = function(entries, prepend) {\n var oldEntries = angular.copy($scope.entries);\n if (prepend) {\n $scope.entries.unshift.apply($scope.entries, entries);\n } else {\n $scope.entries.push.apply($scope.entries, entries);\n }\n if ($scope.entries.length > $scope._options.maxCached) {\n var diff = $scope.entries.length - $scope._options.maxCached;\n var trackedElementId;\n if (prepend) {\n $scope.entries = $scope.entries.slice(0, $scope._options.maxCached);\n $scope._options.highOffset -= diff;\n trackedElementId = oldEntries[oldEntries.length-diff-1] ? oldEntries[oldEntries.length-diff-1][$scope._options.entryIdAttribute] : undefined;\n } else {\n $scope.entries = $scope.entries.slice(diff, $scope.entries.length);\n $scope._options.lowOffset += diff;\n trackedElementId = oldEntries[diff] ? oldEntries[diff][$scope._options.entryIdAttribute] : undefined;\n }\n self.autoscroll(trackedElementId, prepend);\n }\n };\n\n this.autoscroll = function(trackedElementId, prepend) {\n if (trackedElementId) {\n var trackedElement = $element.find('#'+trackedElementId);\n var trackedElementTop = trackedElement.offset().top;\n $timeout(function() {\n var newScrollTop = $element.scrollTop() + trackedElement.offset().top - trackedElementTop;\n $element.animate({scrollTop: newScrollTop}, 0);\n }, 0, false);\n } else {\n $timeout(function() {\n if (prepend) {\n $element.animate({scrollTop: $element.prop('scrollHeight')}, 0);\n } else {\n $element.animate({scrollTop: 0}, 0);\n }\n }, 0, false);\n }\n };\n\n this.loadPrev = function() {\n $scope._options.lowOffset -= $scope._options.limit;\n $scope._options.offset = $scope._options.lowOffset;\n self.loadEntries(true);\n };\n\n this.loadNext = function() {\n $scope._options.highOffset += $scope._options.limit;\n $scope._options.offset = $scope._options.highOffset;\n self.loadEntries();\n };\n\n avScrollPaginationService.registerInstance({\n reset: function() {\n $element.animate({scrollTop: 0}, 0);\n $scope.entries = angular.copy(originalEntries);\n self.buildOptions();\n self.loadEntries();\n }},\n $scope.avScrollPagination\n );\n\n $scope.$on('$destroy', function() {\n avScrollPaginationService.unregisterInstance($scope.avScrollPagination);\n });\n\n $scope.loadPrev = self.loadPrev;\n $scope.loadNext = self.loadNext;\n\n this.loadEntries();\n });\n\n\n\n availity.ui.directive('avScrollPagination', function($log, AV_SCROLL_PAGINATION) {\n return {\n restrict: 'A',\n controller: 'AvScrollPaginationController',\n transclude: true,\n templateUrl: AV_SCROLL_PAGINATION.TEMPLATE,\n scope: {\n apiResource: '=',\n entries: '=',\n options: '=',\n avScrollPagination: '@'\n },\n link: function($scope) {\n if (!$scope.avScrollPagination) {\n $log.error('Directive must include an id');\n }\n }\n };\n });\n\n})(window);\n\n//# sourceMappingURL=maps/availity-angular-ui.js.map\n","/*global module*/\n\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity || {};\n\n availity.MODULE_UI = 'availity.ui';\n availity.ui = angular.module(availity.MODULE_UI, ['ng', 'ngSanitize']);\n\n availity.ui.constant('AV_UI', {\n // jscs: disable\n NG_OPTIONS: /^\\s*([\\s\\S]+?)(?:\\s+as\\s+([\\s\\S]+?))?(?:\\s+group\\s+by\\s+([\\s\\S]+?))?\\s+for\\s+(?:([\\$\\w][\\$\\w]*)|(?:\\(\\s*([\\$\\w][\\$\\w]*)\\s*,\\s*([\\$\\w][\\$\\w]*)\\s*\\)))\\s+in\\s+([\\s\\S]+?)(?:\\s+track\\s+by\\s+([\\s\\S]+?))?$/\n // jscs: enable\n });\n\n if(typeof module !== 'undefined' && module.exports) {\n module.exports = availity;\n }\n\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.factory('avTemplateCache', function($q, $templateCache, $http) {\n\n return {\n\n get: function(options) {\n\n var valid = !options.template || !options.templateUrl;\n\n if(!valid) {\n throw new Error('Either options.template or options.templateUrl must be defined for avTemplateCache');\n }\n\n return options.template ? $q.when(options.template) :\n $http.get(options.templateUrl, {cache: $templateCache})\n .then(function(result) {\n return result.data;\n });\n }\n };\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_MODAL', {\n\n OPTIONS: {\n scope: null,\n templateUrl: null,\n template: null,\n id: null,\n container: null,\n\n // Bootstrap defaults\n keyboard: true,\n backdrop: true,\n show: false,\n remote: false\n },\n\n EVENTS: {\n SHOW: 'show.av.modal',\n SHOWN: 'shown.av.modal',\n HIDE: 'hide.av.modal',\n HIDDEN: 'hidden.av.modal'\n },\n\n NAMESPACE: {\n MODAL: 'bs.modal'\n },\n\n BS_EVENTS: {\n SHOW: 'show.bs.modal',\n SHOWN: 'shown.bs.modal',\n HIDE: 'hide.bs.modal',\n HIDDEN: 'hidden.bs.modal'\n },\n\n TEMPLATES: {\n MODAL: 'ui/modal/modal-tpl.html'\n }\n });\n\n availity.ui.factory('avModalManager', function() {\n\n var AvModalManager = function() {\n this.instances = [];\n };\n\n var proto = AvModalManager.prototype;\n\n proto.add = function(id) {\n this.instances.push(id);\n };\n\n proto.remove = function(id) {\n this.instances = _.without(this.instances, id);\n };\n\n proto.closeAll = function() {\n\n _.forEach(this.instances, function(id) {\n\n var $el = $('#' + id);\n\n if(!$el) {\n return;\n }\n\n var bsModal = $el.data('bs.modal');\n if(bsModal) {\n bsModal.removeBackdrop();\n bsModal.$body.removeClass('modal-open');\n bsModal.resetAdjustments();\n bsModal.resetScrollbar();\n }\n\n var avModal = $el.data('AvModal');\n if(avModal) {\n avModal.destroy();\n }\n\n });\n };\n\n return new AvModalManager();\n\n });\n\n var ModalFactory = function($rootScope, $timeout, $compile, AV_MODAL, avTemplateCache, $q, avModalManager) {\n\n var Modal = function(options) {\n\n var self = this;\n\n this.templateDefer = $q.defer();\n this.templatePromise = this.templateDefer.promise;\n\n this.options = angular.extend({}, AV_MODAL.OPTIONS, {scope: $rootScope.$new()}, options);\n\n avTemplateCache.get(options).then(function(template) {\n self.options.template = template;\n self._build();\n });\n\n };\n\n Modal.create = function(options) {\n return new Modal(options);\n };\n\n var proto = Modal.prototype;\n\n proto._build = function() {\n\n var self = this;\n\n var scope = this.options.scope;\n this.$element = angular.element(this.options.template);\n\n this._createId();\n\n this._scope();\n\n $compile(this.$element)(scope);\n\n $timeout(function() {\n self._init();\n }, 0, true);\n\n // Append to container or \n this.options.container ? this.$element.appendTo(this.options.container) : this.$element.appendTo('body');\n\n };\n\n proto._init = function() {\n\n this.$element.data('AvModal', this);\n\n this.templateDefer.resolve(true);\n\n // Initialize Bootstrap jQuery plugin\n this.$element.modal({\n 'backdrop': this.options.backdrop,\n 'keyboard': this.options.keyboard,\n 'show': this.options.show,\n 'remote': this.options.remote\n });\n\n this._listeners();\n };\n\n // Add helpers to scope so clients can call internal methods\n proto._scope = function() {\n\n var self = this;\n var scope = this.options.scope;\n\n scope.modalShow = function() {\n return self.show();\n };\n\n scope.modalToggle = function() {\n return self.toggle();\n };\n\n scope.modalHide = function() {\n return self.hide();\n };\n\n };\n\n proto._listeners = function() {\n\n var self = this;\n var scope = this.options.scope;\n var $element = this.$element;\n\n this.animationShowDefer = $q.defer();\n this.animationHideDefer = $q.defer();\n\n $element.on(AV_MODAL.BS_EVENTS.SHOW, function(event) {\n scope.$emit(AV_MODAL.EVENTS.SHOW, event, self);\n });\n\n $element.on(AV_MODAL.BS_EVENTS.SHOWN, function(event) {\n\n if(angular.isFunction(self.options.onShown)) {\n self.options.onShown();\n }\n\n self.animationShowDefer.resolve(true);\n\n scope.$emit(AV_MODAL.EVENTS.SHOWN, event, self);\n });\n\n $element.on(AV_MODAL.BS_EVENTS.HIDE, function(event) {\n scope.$emit(AV_MODAL.EVENTS.HIDE, event, self);\n });\n\n $element.on(AV_MODAL.BS_EVENTS.HIDDEN, function(event) {\n\n if(angular.isFunction(self.options.onHidden)) {\n self.options.onHidden.call(this);\n }\n\n self.animationHideDefer.resolve(true);\n scope.$emit(AV_MODAL.EVENTS.HIDDEN, event, self);\n\n scope.$evalAsync(function() {\n self.destroy();\n });\n\n });\n\n // Garbage collection\n scope.$on('$destroy', function() {\n avModalManager.remove(self._id);\n self.destroy();\n });\n\n };\n\n proto.show = function() {\n\n var self = this;\n this.animationShowDefer = $q.defer();\n\n this.templatePromise.then(function() {\n self.isShown() ? self.animationShowDefer.resolve(true) : self.$element.modal('show');\n });\n\n return this.animationShowDefer.promise;\n\n };\n\n proto.hide = function() {\n\n var self = this;\n this.animationHideDefer = $q.defer();\n\n this.templatePromise.then(function() {\n !self.isShown() ? self.animationHideDefer.resolve(true) : self.$element.modal('hide');\n });\n\n return this.animationHideDefer.promise;\n };\n\n proto.isShown = function() {\n return this.$element.data(AV_MODAL.NAMESPACE.MODAL).isShown;\n },\n\n proto.toggle = function() {\n\n var self = this;\n\n return this.templatePromise.then(function() {\n return self.isShown() ? self.hide() : self.show();\n });\n\n };\n\n proto.destroy = function() {\n\n var self = this;\n\n return this.templatePromise.then(function() {\n self.$element.data('AvModal', null);\n self.$element.remove();\n });\n\n };\n\n proto._createId = function() {\n // Create a unique id for the modal if not present or passed in via options\n var id = this.$element.attr('id');\n if(!id) {\n // Get id from options or create a unique id\n id = this.options.id ? this.options.id : availity.uuid('av-modal-id');\n this.$element.attr('id', id);\n }\n\n this._id = id;\n\n avModalManager.add(id);\n };\n\n return Modal;\n };\n\n availity.ui.factory('AvModal', ModalFactory);\n\n availity.ui.directive('avModal', function(AV_MODAL) {\n return {\n restrict: 'A',\n replace: true,\n transclude: true,\n scope: {\n size: '@'\n },\n templateUrl: AV_MODAL.TEMPLATES.MODAL\n };\n });\n\n})(window);\n","/**\n * 1. All fields should be pristine on first load\n * 2. If field is modified an invalid the field should be marked with an error\n *\n */\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.controller('avValFormController', function() {\n\n this.ngForm = null;\n this.rulesKey = null;\n this.avValOn = null;\n this.avValDebounce = null;\n this.avValInvalid = false;\n\n // Object that stores the unique id (key) and violation count (value) of all the form fields\n //\n // EX:\n //\n // {\n // avVal001: 0\n // avVal002: 2\n // avVal003: 1\n // }\n this.violations = {};\n\n this.init = function(form) {\n this.ngForm = form;\n };\n\n /**\n * Records id of the form field and number of violations\n * @param {[type]} id [description]\n * @param {[type]} count [description]\n * @return {[type]} [description]\n */\n this.record = function(id, count) {\n this.violations[id] = count;\n\n var violocationCount = _.reduce(this.violations, function(sum, num) {\n return sum + num;\n }, 0);\n\n this.ngForm.$setValidity('av', violocationCount === 0);\n };\n\n this.unrecord = function(id) {\n if(id && this.violations[id]) {\n delete this.violations[id];\n }\n };\n\n this.reset = function() {\n this.ngForm.$setPristine();\n this.ngForm.$submitted = false;\n };\n\n this.$setSubmitted = function() {\n this.ngForm.$submitted = true;\n };\n\n this.setRulesKey = function(key) {\n this.rulesKey = key;\n };\n\n });\n\n // form.$error = {};\n // form.$$success = {};\n // form.$pending = undefined;\n // form.$name = $interpolate(attrs.name || attrs.ngForm || '')($scope);\n // form.$dirty = false;\n // form.$pristine = true;\n // form.$valid = true;\n // form.$invalid = false;\n // form.$submitted = false;\n\n availity.ui.directive('avValForm', function($log, $timeout, $parse, AV_VAL, avValAdapter, $rootScope) {\n return {\n restrict: 'A',\n priority: 10,\n require: ['form', 'avValForm'],\n controller: 'avValFormController',\n compile: function() {\n return {\n pre: function(scope, iEl, iAttrs, controllers) {\n\n var ruleFn = $parse(iAttrs.avValForm);\n var rulesKey = ruleFn(scope);\n rulesKey = rulesKey || iAttrs.avValForm; // interpolated rule from scope || fixed string\n\n if(!rulesKey) {\n $log.error('avValForm requires a rules key in order to run the proper validation rules.');\n return;\n }\n\n scope.$watch(ruleFn, function(_rulesKey, _oldRulesKey) {\n if(_rulesKey) {\n avForm.setRulesKey(_rulesKey);\n\n if(_rulesKey !== _oldRulesKey) {\n $timeout(function() {\n $log.info('avValForm revalidate');\n $rootScope.$broadcast(AV_VAL.EVENTS.REVALIDATE);\n });\n }\n\n }\n\n });\n\n var ngForm = controllers[0];\n var avForm = controllers[1];\n\n // Allow form attributes to define the validation behavior of the form fields\n // inside it. If `av-val-on` or `av-val-debounce` are on the form then all form\n // fields inside the form would inherit this behavior.\n avForm.avValOn = iAttrs.avValOn || null;\n avForm.avValDebounce = iAttrs.avValDebounce || null;\n // Allows fields to update with invalid data for dirty form saving\n avForm.avValInvalid = iAttrs.avValInvalid || false;\n\n avForm.init(ngForm);\n avForm.setRulesKey(rulesKey);\n\n },\n post: function(scope, iEl, iAttrs, controllers) {\n\n iEl.attr('novalidate', 'novalidate'); // prevent HTML5 validation from kicking in\n\n // Disable ng-submit or ng-click handlers and store the function to call for submitting\n var fn;\n if(iAttrs.ngSubmit) {\n // Disable ng-submit event\n iEl.off('submit');\n fn = $parse(iAttrs.ngSubmit, /* expensiveChecks */ true);\n }else if(iAttrs.ngClick) {\n // Disable ng-click event\n iEl.off('click');\n fn = $parse(iAttrs.ngClick, /* expensiveChecks */ true);\n }\n\n var ngForm = controllers[0];\n var avForm = controllers[1];\n\n scope.$on(AV_VAL.EVENTS.RESET, function () {\n avForm.reset();\n });\n\n iEl.bind('submit', function(event) {\n\n scope.$broadcast(AV_VAL.EVENTS.SUBMITTED);\n avForm.$setSubmitted();\n\n if(ngForm.$invalid) {\n\n scope.$broadcast(AV_VAL.EVENTS.FAILED);\n\n $log.info('avValForm invalid. preventing default submit action');\n\n event.preventDefault();\n event.stopImmediatePropagation();\n scope.$broadcast(event);\n\n avValAdapter.scroll(iEl);\n return;\n }\n\n ngForm.$setPristine();\n\n if(!fn) {\n return;\n }\n\n var callback = function() {\n fn(scope, {$event:event});\n };\n\n scope.$apply(callback);\n\n });\n\n }\n };\n }\n };\n });\n\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.controller('AvValFieldController', function($element, avValAdapter, $attrs, avVal, $log, $timeout, $scope, $sniffer) {\n\n this.ngModel = null;\n this.rule = null;\n this.avValForm = null;\n this.avValInvalid = false;\n\n var self = this;\n\n var placeholder = $element[0].placeholder;\n var noEvent = {};\n\n this.createId = function() {\n this.ngModel.avId = availity.uuid('avVal');\n };\n\n this.setNgModel = function(ngModel) {\n this.ngModel = ngModel;\n };\n\n this.setRule = function(rule) {\n this.rule = rule;\n };\n\n this.avValForm = function(avValForm) {\n this.avValForm = avValForm;\n };\n\n this.updateModel = function(results) {\n\n var self = this;\n var validationKeys = [];\n\n this.ngModel.avResults = results;\n\n // set state for each violation\n angular.forEach(results.violations, function (result) {\n var key = 'av-' + result.contraintName;\n validationKeys.push(key);\n self.ngModel.$setValidity(key, result.valid);\n });\n\n // set overall state for validation state\n this.ngModel.$setValidity('av', this.ngModel.avResults.isValid);\n\n // store violations\n this.ngModel.avViolations = this.ngModel.avResults.violations;\n\n // record the id and violation count in the av-form controller. this determines if the form is\n // valid if sum of violations for all form inputs === zero\n this.avValForm.record(this.ngModel.avId, this.ngModel.avResults.violations.length);\n\n // remove violation keys that are no longer falsy\n angular.forEach(this.ngModel.$error, function(value, key) {\n\n if(_.indexOf(validationKeys, key) === -1 && key.lastIndexOf('av-', 0) === 0) {\n self.ngModel.$setValidity(key, true);\n }\n });\n };\n\n this.updateView = function() {\n if(this.ngModel.$dirty || $scope.avValShow) {\n avValAdapter.element($element, this.ngModel, this.ngModel.avResults.isValid);\n avValAdapter.message($element, this.ngModel);\n }\n };\n\n this.validate = function(value) {\n\n $log.info('validating value [' + value + ']');\n\n var rulesKey = self.avValForm.rulesKey;\n var results = avVal.validate(rulesKey, $element, value, self.rule);\n\n // validate function is called within the context of angular so fn.call and set the context\n // to \"this\"\n self.updateModel.call(self, results);\n self.updateView.call(self);\n\n return results;\n };\n\n this.validateModel = function(value) {\n\n self.validate(value, true);\n return value;\n\n };\n\n this.validateView = function(value) {\n\n var results = self.validate(value);\n\n if(self.avValForm.avValInvalid || self.avValInvalid) {\n // allows invalid data from view to update model for dirty saving\n return value;\n }\n\n // prevent invalid data from view to update model\n return results.isValid ? value : undefined;\n\n };\n\n this.onDebounce = function() {\n\n var value = $element.val().trim();\n\n if(this.isCheckbox()) {\n this.ngModel.$setViewValue($element[0].checked);\n } else if(this.isRadio()) {\n this.ngModel.$setViewValue($attrs.value);\n }else {\n this.ngModel.$setViewValue(value);\n }\n\n };\n\n this.isRadio = function() {\n return $element.is('input') && $attrs.type === 'radio';\n };\n\n this.isCheckbox = function() {\n return $element.is('input') && $attrs.type === 'checkbox';\n };\n\n this.reset = function() {\n\n var violations = this.ngModel.avResults.violations;\n violations.splice(0, violations.length);\n\n avValAdapter.message($element, this.ngModel);\n avValAdapter.reset($element);\n\n };\n\n this.event = function(event, avValDebounce) {\n\n var self = this;\n\n $element.unbind('input');\n\n var debounce;\n\n $element.on(event, function() {\n\n // https://github.com/angular/angular.js/blob/v1.2.27/src/ng/directive/input.js#L508\n if($sniffer.msie <= 11 && (event || noEvent).type === 'input' && $element[0].placeholder !== placeholder) {\n placeholder = $element[0].placeholder;\n return;\n }\n\n $timeout.cancel(debounce);\n debounce = $timeout(function() {\n $scope.$apply(function() {\n self.onDebounce();\n });\n }, avValDebounce);\n\n });\n\n };\n\n });\n\n // Events:\n //\n // click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown\n // keyup keypress submit focus blur copy cut paste\n availity.ui.directive('avValField', function($log, $timeout, avVal, avValAdapter, AV_VAL) {\n return {\n restrict: 'A',\n controller: 'AvValFieldController',\n require: ['^avValForm', 'ngModel', 'avValField'],\n scope: {\n avValDebounce: '@?',\n avValOn: '@?',\n avValShow: '=?'\n },\n link: function(scope, element, attrs, controllers) {\n\n var rule = attrs.avValField;\n var avValForm = controllers[0];\n var ngModel = controllers[1];\n var avValField = controllers[2];\n\n var avValOn = scope.avValOn || avValForm.avValOn || 'input';\n\n if(!ngModel && !rule) {\n $log.error('avValField requires ngModel and a validation rule to run.');\n return;\n }\n\n // Allows fields to update with invalid data for dirty form saving\n avValField.avValInvalid = attrs.avValInvalid || false;\n\n // CACHE THE MODEL\n avValField.setNgModel(ngModel);\n\n avValField.avValForm(avValForm);\n\n avValField.setRule(rule);\n\n avValField.createId();\n\n // DEBOUNCE\n var avValDebounce = parseInt(scope.avValDebounce || (avValForm.avValDebounce || AV_VAL.DEBOUNCE), 10);\n avValDebounce = _.isNumber(avValDebounce) ? avValDebounce : AV_VAL.DEBOUNCE;\n\n var debounceAllowed = !avValField.isRadio() && !avValField.isCheckbox() && avValOn !== 'blur';\n\n if(!debounceAllowed) {\n avValDebounce = 0;\n }\n\n // EVENT LISTENER\n avValField.event(avValOn, avValDebounce);\n\n // (view to model)\n ngModel.$parsers.push(avValField.validateView);\n\n // (model to view) - added to beginning of array because formatters\n // are processed in reverse order thus allowing the model to be transformed\n // before the validation framework check for validity.\n ngModel.$formatters.unshift(avValField.validateModel);\n\n scope.$on(AV_VAL.EVENTS.REVALIDATE, function() {\n avValField.validate(ngModel.$viewValue);\n });\n\n // SUBMITTED EVENT\n scope.$on(AV_VAL.EVENTS.SUBMITTED, function() {\n ngModel.$dirty = true;\n avValField.validate(ngModel.$viewValue);\n });\n\n // - Removes all errors on page,\n // - does not reset view or model values. This is to be handled by the app.\n scope.$on(AV_VAL.EVENTS.RESET, function () {\n avValField.reset();\n });\n\n scope.$on('$destroy', function () {\n avValForm.unrecord(ngModel.avId);\n });\n\n }\n };\n });\n\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.provider('avPopoverConfig', function() {\n\n var config = {\n showOnLoadHideDelay: 10000\n };\n\n this.set = function(options) {\n angular.extend(config, options);\n };\n\n this.$get = function() {\n return angular.copy(config);\n };\n });\n\n availity.ui.constant('AV_POPOVER', {\n NAME: 'bs.popover'\n });\n\n availity.ui.controller('AvPopoverController', function($element, $scope, AV_POPOVER, $timeout, avPopoverConfig) {\n this.options = angular.extend({}, avPopoverConfig);\n\n this.listeners = function() {\n\n var self = this;\n\n angular.forEach(['show', 'shown', 'hide', 'hidden'], function(name) {\n $element.on(name + '.bs.popover', function(ev) {\n $scope.$emit('av:popover:' + name, ev);\n });\n });\n\n $scope.$on('destroy', function() {\n self.destroy();\n });\n };\n\n this.plugin = function() {\n return $element.data(AV_POPOVER.NAME);\n };\n\n this.show = function() {\n $element.popover('show');\n };\n\n this.hide = function() {\n $element.popover('hide');\n };\n\n this.toggle = function() {\n $element.popover('toggle');\n };\n\n this.destroy = function() {\n $element.popover('destroy');\n };\n\n\n this.init = function() {\n\n this.listeners();\n\n if($scope.showOnLoad) {\n\n this.show();\n\n if($scope.delay && $scope.delay.hide) {\n $timeout(this.hide, $scope.delay.hide, false);\n return;\n }\n // If no delay is found or cannot be parsed, set a default timeout so that the popover doesn't stick around forever\n $timeout(this.hide, this.options.showOnLoadHideDelay, false);\n }\n };\n\n\n });\n\n availity.ui.directive('avPopover', function() {\n return {\n restrict: 'A',\n controller: 'AvPopoverController',\n scope: {\n showOnLoad: '=',\n delay: '='\n },\n link: function(scope, element, attrs, avPopover) {\n\n var options = {};\n\n scope.$evalAsync(function() {\n element.popover(angular.extend({}, options, {\n html: true\n }));\n avPopover.init();\n });\n }\n };\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.controller('avValContainerController', function($scope, $timeout) {\n\n this.message = function(ngModel) {\n\n var message = null;\n if(ngModel.avResults.violations.length && ngModel.avResults.violations[0].message) {\n message = ngModel.avResults.violations[0].message;\n }else {\n message = null;\n }\n\n // $timeout is needed to update the UI from $broadcast events\n $timeout(function() {\n $scope.messages.message = message;\n });\n\n };\n\n });\n\n availity.ui.directive('avValContainer', function() {\n return {\n restrict: 'A',\n controller: 'avValContainerController',\n template: '

            ',\n replace: true,\n scope: {\n\n },\n link: function(scope) {\n scope.messages = _.extend({}, scope.messages, { message: null, id: null });\n }\n };\n });\n\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_BOOTSTRAP_ADAPTER', {\n CLASSES: {\n SUCCESS: 'has-success',\n WARNING: 'has-warning',\n ERROR: 'has-error',\n FEEDBACK: 'has-feedback',\n HELP: 'help-block',\n FORM_GROUP: '.form-group:first',\n NAVBAR: 'navbar-fixed-top'\n },\n SELECTORS: {\n CONTAINER: 'container-id',\n DATA_CONTAINER: 'data-container-id'\n },\n CONTROLLER: '$avValContainerController'\n });\n\n availity.ui.factory('avValBootstrapAdapter', function(AV_BOOTSTRAP_ADAPTER, $timeout, $log) {\n\n return {\n\n element: function(element, ngModel) {\n if(ngModel.$valid) {\n element.parents(AV_BOOTSTRAP_ADAPTER.CLASSES.FORM_GROUP).removeClass(AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR);\n }else {\n element.parents(AV_BOOTSTRAP_ADAPTER.CLASSES.FORM_GROUP).addClass(AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR);\n }\n },\n\n reset: function(element) {\n element.parents(AV_BOOTSTRAP_ADAPTER.CLASSES.FORM_GROUP).removeClass(AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR);\n },\n\n message: function(element, ngModel) {\n\n var selector = [\n '.',\n AV_BOOTSTRAP_ADAPTER.CLASSES.HELP\n ].join('');\n\n var $el = $(element);\n\n var target = $el.attr(AV_BOOTSTRAP_ADAPTER.SELECTORS.CONTAINER);\n target = target || $el.attr(AV_BOOTSTRAP_ADAPTER.SELECTORS.DATA_CONTAINER);\n // default to siblings\n target = target ? $('#' + target) : $el.siblings(selector);\n\n if(target.length === 0) {\n $log.warn('avValBootstrapAdapter could not find validation container for {0}', [element]);\n return;\n }\n\n var el = target[0];\n $el = angular.element(el);\n var avValModel = $el.data(AV_BOOTSTRAP_ADAPTER.CONTROLLER); // get the av val message controller\n if(avValModel) {\n avValModel.message(ngModel);\n }\n },\n\n scroll: function(form) {\n\n // Bootstrap fixed navbars causes bad scroll-to offsets so find them all\n var navbarSelector = [\n '.',\n AV_BOOTSTRAP_ADAPTER.CLASSES.NAVBAR\n ].join('');\n\n // Add up all the heights to find the true offset\n var offset = 0;\n $(navbarSelector).each(function() {\n offset += $(this).outerHeight();\n });\n\n var selector = [\n '.',\n AV_BOOTSTRAP_ADAPTER.CLASSES.ERROR,\n ':first'\n ].join('');\n\n var $target = $(form).find(selector);\n $timeout(function() {\n // scroll to offset top of first error minus the offset of the navbars\n $('body, html').animate({scrollTop: $target.offset().top - offset}, 'fast');\n }, 0, false);\n }\n };\n });\n\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_VAL_ADAPTER', {\n DEFAULT: 'avValBootstrapAdapter'\n });\n\n availity.ui.provider('avValAdapter', function() {\n\n var that = this;\n\n this.setAdapter = function(adapter) {\n this.adapter = adapter;\n };\n\n this.$get = function(AV_VAL_ADAPTER, $injector) {\n\n var Adapter = function() {\n var adapterName = that.adapter || AV_VAL_ADAPTER.DEFAULT;\n this.adapter = $injector.get(adapterName);\n };\n\n var proto = Adapter.prototype;\n\n proto.element = function(element, ngModel) {\n this.adapter.element(element, ngModel);\n };\n\n proto.reset = function(element) {\n this.adapter.reset(element);\n };\n\n proto.message = function(element, ngModel) {\n this.adapter.message(element, ngModel);\n },\n\n proto.scroll = function(form) {\n this.adapter.scroll(form);\n };\n\n return new Adapter();\n };\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.provider('avDropdownConfig', function() {\n var config = {\n closeOnResize: true,\n dropdownAutoWidth: true,\n minimumResultsForSearch: 5\n };\n\n this.set = function(options) {\n angular.extend(config, options);\n };\n\n this.$get = function() {\n return angular.copy(config);\n };\n });\n\n availity.ui.constant('AV_DROPDOWN', {\n OPTIONS: [\n 'width',\n 'minimumInputLength',\n 'maximumInputLength',\n 'minimumResultsForSearch',\n 'maximumSelectionSize',\n 'placeholderOption',\n 'separator',\n 'allowClear',\n 'multiple',\n 'closeOnSelect',\n 'openOnEnter',\n 'id',\n 'matcher',\n 'sortResults',\n 'formatSelection',\n 'formatResult',\n 'formatResultCssClass',\n 'formatNoMatches',\n 'formatSearching',\n 'formatAjaxError',\n 'formatInputTooShort',\n 'formatInputTooLong',\n 'formatSelectionTooBig',\n 'formatLoadMore',\n 'createSearchChoice',\n 'createSearchChoicePosition',\n 'initSelection',\n 'tokenizer',\n 'tokenSeparators',\n 'query',\n 'ajax',\n 'data',\n 'tags',\n 'containerCss',\n 'containerCssClass',\n 'dropdownCss',\n 'dropdownCssClass',\n 'dropdownAutoWidth',\n 'adaptContainerCssClass',\n 'adaptDropdownCssClass',\n 'escapeMarkup',\n 'selectOnBlur',\n 'loadMorePadding',\n 'nextSearchTerm',\n 'correlationId'\n ]\n });\n\n\n availity.ui.controller('AvDropdownController', function($element, $attrs, AV_UI, AV_DROPDOWN, avDropdownConfig, $log, $scope, $timeout, $parse) {\n\n var self = this;\n this.options = {};\n this.match = null;\n this.ngModel = null;\n\n this.init = function() {\n\n self.options = angular.extend({}, avDropdownConfig);\n\n _.forEach($attrs, function(value, key) {\n if(_.contains(AV_DROPDOWN.OPTIONS, key.replace('data-', ''))) {\n self.options[key] = $scope.$eval(value);\n }\n });\n\n if(this.isRemoteMultiple()) {\n self.options.multiple = angular.isDefined($attrs.multiple);\n }\n\n self.multiple = angular.isDefined($attrs.multiple);\n\n if(self.options.query) {\n\n self.queryFn = self.options.query;\n // Function used to query results for the search term.\n self.options.query = self.query;\n // Function used to get the id from the choice object or a string representing the key under which the id is stored.\n self.options.id = self.getId;\n }\n\n };\n\n this.isRemoteMultiple = function() {\n if(angular.isDefined($attrs.multiple) && $element.get(0).tagName.toLowerCase() === 'input') {\n return true;\n }\n return false;\n };\n\n this.setRemoteViewValue = function(e) {\n\n var values = this.ngModel.$viewValue;\n\n if(!angular.isArray(values) || !angular.isObject(values)) {\n values = [];\n }\n\n if(e.added) {\n // Adding to collection\n values.push(e.added);\n } else {\n // Removing from collection\n var index = _.findIndex(values, function(value) {\n return _.matches(e.removed)(value);\n });\n values.splice(index, 1);\n }\n\n this.ngModel.$setViewValue(values);\n\n };\n\n this.setViewValue = function(e) {\n this.ngModel.$setViewValue(e.added);\n };\n\n this.setNgModel = function(ngModel) {\n this.ngModel = ngModel;\n };\n\n this.getSelected = function(model) {\n\n if(self.options.query) {\n return 0;\n }\n\n var items = this.collection($scope);\n\n var index = _.findIndex(items, function(item) {\n if (!self.valueFn) {\n return angular.equals(item, model);\n } else {\n var locals = {};\n locals[self.valueName] = item;\n var value = self.valueFn($scope, locals);\n return angular.equals(value, model);\n }\n });\n\n return index;\n\n };\n\n // Result:\n //\n // {\n // \"code\": \"252Y00000X\",\n // \"value\": \"AGENCIES,EARLY INTERVENTION PROVIDER AGENCY,NOT APPLICABLE|Agency\",\n // \"id\": \"252Y00000X\"\n // }\n this.getId = function(result) {\n return result.id;\n };\n\n // Wrapper around the query function for Select2. When the promise resolves\n // the callback\n this.query = function(options) {\n\n self.queryFn(options).then(function(response) {\n\n // Callback function that should be called with the result object. The result object:\n //\n // result.results (object) - Array of result objects. The default renderers\n // expect objects with id and text keys. The id property is required,\n // even if custom renderers are used. The object may also contain a children\n // key if hierarchical data is displayed. The object may also contain a disabled\n // boolean property indicating whether this result can be selected.\n //\n // result.more (boolean) - true if more results are available for the current\n // search term.\n //\n // results.context (object) - A user-defined object that should be made available\n // as the context parameter to the query function on subsequent queries to load\n // more result pages for the same search term. See the description of\n // options.context parameter.\n options.callback({more: response.more, results: response.results});\n });\n };\n\n this.setValue = function() {\n\n var viewValue = self.ngModel.$viewValue;\n var selected = null;\n if(viewValue) {\n selected = this.getSelected(viewValue);\n }\n\n // var apply = scope.$evalAsync || $timeout;\n $timeout(function() {\n $element\n .select2('val', (selected === null || selected === 'undefined') ? '' : selected); // null === '' for Select2\n });\n };\n\n this.getMultiSelected = function(viewValue) {\n\n var indices = [];\n\n if($element.get(0).tagName.toLowerCase() !== 'input') {\n var options = this.collection($scope);\n\n _.each(viewValue, function(savedObject) {\n var index = _.findIndex(options, function(value) {\n var temp = angular.copy(savedObject); // remove hashkeys for comparison\n return _.matches(temp)(value);\n });\n indices.push(index);\n });\n\n } else {\n\n var inputViewValues = this.ngModel.$modelValue;\n\n _.each(inputViewValues, function(savedObject) {\n\n if(_.isUndefined(savedObject.id) ) {\n\n if(savedObject.id || savedObject[self.options.correlationId]) {\n\n savedObject.id = savedObject[self.options.correlationId];\n\n } else {\n\n throw new Error('dropdown list must have a id or a alternative value to use as a id');\n }\n\n }\n\n });\n }\n\n if(indices.length > 0) {\n viewValue = indices;\n }\n\n return viewValue;\n\n };\n\n this.setValues = function() {\n\n var viewValue = self.ngModel.$viewValue;\n\n if(!angular.isArray(viewValue)) {\n viewValue = [];\n }\n\n if(!_.isEmpty(viewValue) && _.isObject(viewValue[0])) {\n viewValue = this.getMultiSelected(viewValue);\n }\n\n $timeout(function() {\n $element\n .select2('val', viewValue);\n });\n };\n\n this.ngOptions = function() {\n\n this.match = $attrs.ngOptions.match(AV_UI.NG_OPTIONS);\n if(!this.match) {\n throw new Error('Invalid ngOptions for avDropdown');\n }\n // AV_UI.NG_OPTIONS regex will parse into arrays like below:\n //\n // 0: \"state.name for state in states\"\n // 1: \"state.name\"\n // 2: undefined\n // 3: undefined\n // 4: \"state\"\n // 5: undefined\n // 6: undefined\n // 7: \"states\"\n // 8: undefined\n //\n // 0: \"state.id as state.name for state in states\"\n // 1: \"state.id\"\n // 2: \"state.name\"\n // 3: undefined\n // 4: \"state\"\n // 5: undefined\n // 6: undefined\n // 7: \"states\"\n // 8: undefined\n //\n // 0: \"state.name for state in states track by state.id\"\n // 1: \"state.name\"\n // 2: undefined\n // 3: undefined\n // 4: \"state\"\n // 5: undefined\n // 6: undefined\n // 7: \"states\"\n // 8: \"state.id\"\n //\n // 0: \"person.fullName as (person.lastName + ', ' + person.firstName) for person in feeScheduleModel.persons\"\n // 1: \"person.fullName\"\n // 2: \"(person.lastName + ', ' + person.firstName)\"\n // 3: undefined\n // 4: \"person\"\n // 5: undefined\n // 6: undefined\n // 7: \"feeScheduleModel.persons\"\n // 8: undefined\n //\n this.displayFn = $parse(this.match[2] || this.match[1]); // this is the function to retrieve the text to show as\n this.collection = $parse(this.match[7]);\n this.valueName = this.match[4] || this.match[6];\n this.valueFn = $parse(this.match[2] ? this.match[1] : this.valueName);\n this.keyName = this.match[5];\n\n $scope.$watchCollection(this.collection, function(newVal, oldVal) {\n if(angular.equals(newVal, oldVal)) {\n return;\n }\n\n self.setValue();\n\n }, true);\n\n };\n });\n\n availity.ui.directive('avDropdown', function($timeout, $log, $window) {\n\n return {\n restrict: 'A',\n require: ['ngModel', 'avDropdown'],\n controller: 'AvDropdownController',\n link: function(scope, element, attrs, controllers) {\n var ngModel = controllers[0];\n var avDropdown = controllers[1];\n\n avDropdown.setNgModel(ngModel);\n avDropdown.init();\n\n if(attrs.ngOptions ) {\n avDropdown.ngOptions();\n }\n\n ngModel.$parsers.push(function(value) {\n var parent = element.prev();\n parent\n .toggleClass('ng-invalid', !ngModel.$valid)\n .toggleClass('ng-valid', ngModel.$valid)\n .toggleClass('ng-invalid-required', !ngModel.$valid)\n .toggleClass('ng-valid-required', ngModel.$valid)\n .toggleClass('ng-dirty', ngModel.$dirty)\n .toggleClass('ng-pristine', ngModel.$pristine);\n return value;\n });\n\n element.on('change', function(e) {\n\n // special case since the ajax handling doesn't bind to the model correctly\n // this has to do with select2 (v3.5.2) using a hidden field instead of a select for ajax\n if(avDropdown.options.query) {\n $timeout(function() {\n // look at moving this to the controller\n if(avDropdown.isRemoteMultiple()) {\n avDropdown.setRemoteViewValue(e);\n } else {\n avDropdown.setViewValue(e);\n }\n\n }, false, 0);\n }\n\n $log.info(e);\n\n });\n\n // fires ng-focus when select2-focus fires.\n element.on('select2-focus', function() {\n if(attrs.ngFocus) {\n scope.$eval(scope.$eval(attrs.ngFocus));\n }\n });\n\n // fires ng-blur when select2-blur occurs.\n element.on('select2-blur', function() {\n if(attrs.ngBlur) {\n scope.$eval(scope.$eval(attrs.ngBlur));\n }\n });\n\n // https://github.com/t0m/select2-bootstrap-css/issues/37#issuecomment-42714589\n element.on('select2-open', function () {\n // look for .has-success, .has-warning, .has-error\n // (really look for .has-* … which is good enough for the demo page, but obviously might interfere with other CSS-classes starting with \"has-\")\n if(element.parents('[class*=\"has-\"]').length) {\n\n // get all CSS-classes from the element where we found \"has-*\" and collect them in an array\n var classNames = $(this).parents('[class*=\"has-\"]')[0].className.split(/\\s+/);\n\n // go through the class names, find \"has-\"\n for(var i = 0; i < classNames.length; ++i) {\n if(classNames[i].match('has-')) {\n $('#select2-drop').addClass(classNames[i]);\n }\n }\n }\n });\n\n\n var _$render = ngModel.$render;\n ngModel.$render = function() {\n _$render();\n\n if(avDropdown.multiple) {\n avDropdown.setValues();\n }else {\n avDropdown.setValue();\n }\n\n };\n\n var win = angular.element($window);\n\n win.bind('resize', function() {\n element.select2('close');\n });\n\n attrs.$observe('disabled', function (value) {\n element.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n element.select2('readonly', !!value);\n });\n\n scope.$on('destroy', function() {\n element.select2('destroy');\n });\n\n $timeout(function() {\n element.select2(avDropdown.options);\n });\n }\n };\n });\n\n})(window);\n","/**\n * Inspiration https://github.com/mgcrea/angular-strap/blob/v0.7.8/src/directives/datepicker.js\n */\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.provider('avDatepickerConfig', function() {\n\n var config = {\n autoclose: true,\n todayHighlight: true,\n format: 'mm/dd/yyyy',\n forceParse: false\n };\n\n this.set = function(options) {\n angular.extend(config, options);\n };\n\n this.$get = function() {\n return angular.copy(config);\n };\n\n });\n\n // Options: http://bootstrap-datepicker.readthedocs.org/en/latest/options.html\n availity.ui.constant('AV_DATEPICKER', {\n CONTROLLER: '$ngModelController',\n ADD_ON_SELECTOR: '[data-toggle=\"datepicker\"]',\n OPTIONS: [\n 'autoclose',\n 'beforeShowDay',\n 'beforeShowMonth',\n 'calendarWeeks',\n 'clearBtn',\n 'toggleActive',\n 'container',\n 'daysOfWeekDisabled',\n 'datesDisabled',\n 'defaultViewDate',\n 'endDate',\n 'forceParse',\n 'format',\n 'inputs',\n 'keyboardNavigation',\n 'language',\n 'minViewMode',\n 'multidate',\n 'multidateSeparator',\n 'orientation',\n 'startDate',\n 'startView',\n 'todayBtn',\n 'todayHighlight',\n 'weekStart',\n 'showOnFocus',\n 'disableTouchKeyboard',\n 'enableOnReadonly',\n 'modelFormat'\n ],\n DEFAULTS: {\n MODELFORMAT: 'YYYY-MM-DD'\n }\n });\n\n availity.ui.controller('AvDatepickerController', function($element, $attrs, AV_DATEPICKER, $scope, avDatepickerConfig) {\n\n var self = this;\n this.options = {};\n\n this.setValue = function() {\n\n var viewValue = self.ngModel.$viewValue;\n var plugin = this.plugin();\n\n if(!viewValue || !plugin) {\n return;\n }\n\n plugin.setDate(viewValue);\n };\n\n this.setNgModel = function(ngModel) {\n this.ngModel = ngModel;\n };\n\n this.findModel = function() {\n\n var ngModel = null;\n\n var $input = $element.find('input:first').andSelf();\n if($input.length) {\n ngModel = $input.data(AV_DATEPICKER.CONTROLLER);\n this.setNgModel(ngModel);\n }\n\n return ngModel;\n };\n\n this.modelToView = function(isoWrap) {\n var viewValue = $.fn.datepicker.DPGlobal.formatDate(isoWrap, self.options.format, 'en');\n return viewValue;\n };\n\n this.wrapIsoDate = function() {\n\n var date = self.ngModel.$modelValue;\n var isoWrap;\n\n if(date !== undefined && date !== null) {\n var m = moment(date);\n isoWrap = m.isValid() ? m.toDate() : null;\n }\n\n return isoWrap;\n };\n\n this.viewToModel = function() {\n var format = $.fn.datepicker.DPGlobal.parseFormat(self.options.format);\n var utcDate = $.fn.datepicker.DPGlobal.parseDate(self.ngModel.$viewValue, format, 'en');\n\n var plugin = self.plugin();\n\n if(!plugin) {\n return;\n }\n\n // jscs: disable\n var localDate = plugin._utc_to_local(utcDate);\n // jscs: enable\n\n if(self.options.modelFormat && localDate) {\n localDate = moment(localDate).format(self.options.modelFormat);\n }\n\n return localDate;\n };\n\n this.init = function() {\n\n self.options = angular.extend({}, avDatepickerConfig);\n\n _.forEach($attrs, function(value, key) {\n if(_.contains(AV_DATEPICKER.OPTIONS, key.replace('data-', ''))) {\n self.options[key] = $scope.$eval(value);\n }\n });\n\n if(self.options.modelFormat && self.options.modelFormat.toLowerCase() === 'default') {\n self.options.modelFormat = AV_DATEPICKER.DEFAULTS.MODELFORMAT;\n }\n };\n\n this.plugin = function() {\n return $element.data('datepicker');\n };\n\n this.destroy = function() {\n var plugin = this.plugin();\n if(plugin) {\n plugin.remove();\n $element.data('datepicker', null);\n }\n };\n\n this.hide = function() {\n var plugin = this.plugin();\n if(plugin) {\n plugin.hide();\n }\n };\n });\n\n availity.ui.directive('avDatepicker', function($window, $log, AV_DATEPICKER) {\n return {\n restrict: 'A',\n require: ['ngModel', 'avDatepicker'],\n controller: 'AvDatepickerController',\n link: function(scope, element, attrs, controllers) {\n\n var ngModel = controllers[0];\n var avDatepicker = controllers[1];\n\n if(!ngModel) {\n ngModel = avDatepicker.findModel();\n if(!ngModel) {\n $log.error('avDatepicker requires ngModel');\n return;\n }\n }\n\n avDatepicker.init();\n avDatepicker.setNgModel(ngModel);\n\n element.on('changeDate', function(e) {\n $log.info('avDatepicker changeDate {0}', [e]);\n });\n\n // (view to model)\n ngModel.$parsers.push(avDatepicker.viewToModel);\n\n // (model to view) - added to end of formatters array\n // because they are processed in reverse order.\n // if the model is in Date format and send to the validation framework\n // prior to getting converted to the expected $viewValue format,\n // the validation will fail.\n ngModel.$formatters.push(avDatepicker.modelToView);\n ngModel.$formatters.push(avDatepicker.wrapIsoDate);\n\n var _$render = ngModel.$render;\n ngModel.$render = function() {\n _$render();\n avDatepicker.setValue();\n };\n\n var win = angular.element($window);\n\n win.bind('scroll', function() {\n avDatepicker.hide();\n });\n\n var target = element.siblings(AV_DATEPICKER.ADD_ON_SELECTOR);\n if(target.length) {\n target.on('click.datepicker', function() {\n if(!element.prop('disabled')) { // Hack check for IE 8\n element.focus();\n }\n });\n }\n\n scope.$on('destroy', function() {\n avDatepicker.destroy();\n if(target.length) {\n target.off('click.datepicker');\n }\n });\n\n scope.$evalAsync(function() {\n element.datepicker(avDatepicker.options);\n });\n }\n };\n });\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_UI_IDLE', {\n EVENTS: {\n OK: 'mousedown.av.idle.notifier'\n },\n TEMPLATES: {\n BASE: 'ui/idle/idle-tpl.html',\n SESSION: 'ui/idle/idle-session-tpl.html',\n WARNING: 'ui/idle/idle-warning-tpl.html'\n }\n });\n\n availity.ui.provider('avIdleNotifier', function() {\n\n var sessionTemplate;\n var warningTemplate;\n var $scope;\n\n this.setSessionTemplate = function(template) {\n sessionTemplate = template;\n };\n\n this.setWarningTemplate = function(template) {\n warningTemplate = template;\n };\n\n this.$get = function(AV_IDLE, AV_UI_IDLE, $rootScope, AvModal, $document, $timeout) {\n\n var AvIdleNotifier = function() {\n this.listeners = [];\n this.modal = null;\n };\n\n var proto = AvIdleNotifier.prototype;\n\n proto.init = function() {\n\n $scope = $rootScope.$new(true);\n $scope.idle = {};\n\n this.initListeners();\n };\n\n proto.initListeners = function() {\n\n var self = this;\n var listener = null;\n\n // ACTIVE IDLING\n listener = $rootScope.$on(AV_IDLE.EVENTS.IDLE_ACTIVE, function() {\n self.showWarning();\n });\n this.listeners.push(listener);\n\n // INACTIVE IDLING\n listener = $rootScope.$on(AV_IDLE.EVENTS.IDLE_INACTIVE, function() {\n self.hideWarning();\n });\n this.listeners.push(listener);\n\n // SESSION TIMEOUT OUT\n listener = $rootScope.$on(AV_IDLE.EVENTS.SESSION_TIMEOUT_ACTIVE, function() {\n self.showSession();\n });\n this.listeners.push(listener);\n\n };\n\n proto.destroyListeners = function() {\n // turn off each listener @see http://stackoverflow.com/a/14898795\n _.each(this.listeners, function(listener) {\n listener();\n });\n };\n\n proto.showWarning = function() {\n\n var self = this;\n\n if(this.modal !== null) {\n return;\n }\n\n $scope = $rootScope.$new(true);\n $scope.idle = {};\n $scope.idle.template = AV_UI_IDLE.TEMPLATES.WARNING;\n\n this.modal = new AvModal({\n show: true,\n scope: $scope,\n backdrop: 'static',\n templateUrl: AV_UI_IDLE.TEMPLATES.BASE\n });\n\n $document.find('body').on(AV_UI_IDLE.EVENTS.OK, function() {\n self.hideWarning();\n });\n\n };\n\n proto.hideWarning = function() {\n if(this.modal) {\n this.disableBackDrop();\n this.modal.hide();\n }\n\n this.modal = null;\n };\n\n proto.disableBackDrop = function() {\n $document.find('body').off(AV_UI_IDLE.EVENTS.OK);\n };\n\n proto.showSession = function() {\n var self = this;\n this.disableBackDrop();\n\n $timeout(function() {\n $scope.idle.template = AV_UI_IDLE.TEMPLATES.SESSION;\n $scope.idle.onSessionTimeout = _.bind(self.onSessionTimeout, self);\n }, 0, true);\n\n };\n\n proto.onSessionTimeout = function() {\n $rootScope.$broadcast(AV_IDLE.EVENTS.SESSION_TIMEOUT_REDIRECT);\n };\n\n return new AvIdleNotifier();\n\n };\n\n });\n\n availity.ui.run(function(avIdleNotifier) {\n avIdleNotifier.init();\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_MASK', {\n NAME: 'inputmask',\n DEFAULTS: {\n date: '99/99/9999',\n phone: '(999) 999-9999',\n SSN:'999-99-9999'\n }\n });\n\n availity.ui.directive('avMask', function($window, $log, AV_MASK) {\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function(scope, element, attrs) {\n\n var maskType = AV_MASK.DEFAULTS[attrs['avMask']];\n if(!maskType) {\n maskType = attrs['avMask'];\n }\n\n scope.$evalAsync(function() {\n element.inputmask(maskType);\n });\n\n scope.$on('$destroy', function () {\n element.inputmask('remove');\n });\n }\n };\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.controller('AvHasPermissionController', function($element) {\n\n this.onSuccess = function(isAuthorized) {\n if(isAuthorized) {\n $element.removeClass('ng-hide');\n $element.show();\n } else {\n $element.remove();\n }\n };\n\n this.onError = function() {\n $element.remove();\n };\n\n });\n\n availity.ui.directive('avHasPermission', function(avUserAuthorizations) {\n return {\n restrict: 'EA',\n controller: 'AvHasPermissionController',\n require: ['avHasPermission'],\n link: function($scope, $element, $attr, controllers) {\n\n var avHasPermission = controllers[0];\n\n $element.hide();\n\n $scope.$watch($attr.avHasPermission, function(permissions) {\n\n if(!angular.isArray(permissions)) {\n permissions = _.words('' + permissions);\n }\n\n avUserAuthorizations.isAnyAuthorized(permissions).then(avHasPermission.onSuccess, avHasPermission.onError);\n });\n }\n };\n });\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.directive('avAnalytics', function() {\n return {\n scope: {\n options: '=avAnalytics'\n },\n controller: function($scope) {\n this.getOptions = function() {\n return $scope.options;\n };\n }\n };\n });\n\n availity.ui.controller('AvAnalyticsController', function(avAnalyticsUtils, avAnalytics) {\n\n this.onEvent = function(event, element, options) {\n\n // convert the directive attributes into object with properties with sane defaults\n var properties = angular.extend(\n {\n level: 'info'\n },\n options,\n {\n event: event.type\n }\n );\n\n // If an external link is detected\n if(avAnalyticsUtils.isExternalLink(properties)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n var promise = avAnalytics.trackEvent(properties);\n promise['finally'](function() {\n if(avAnalyticsUtils.isExternalLink(properties)) {\n document.location = element.attr('href');\n }\n });\n };\n });\n\n availity.ui.directive('avAnalyticsOn', function(AV_ANALYTICS, avAnalyticsUtils) {\n return {\n restrict: 'A',\n controller: 'AvAnalyticsController',\n require: ['avAnalyticsOn','?^avAnalytics'],\n link: function(scope, element, attrs, controllers) {\n var childCtrl = controllers[0];\n var parentCtrl = {};\n var parentOptions = {};\n\n if (controllers[1]) {\n parentCtrl = controllers[1];\n parentOptions = parentCtrl.getOptions();\n }\n\n var options = angular.extend(\n {},\n parentOptions,\n avAnalyticsUtils.getProperties(attrs)\n );\n\n var eventType = attrs.avAnalyticsOn || AV_ANALYTICS.EVENTS.DEFAULT;\n\n element.on(eventType, function(event) {\n childCtrl.onEvent(event, element, options);\n });\n }\n };\n });\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.requires.push('ng.shims.placeholder');\n\n availity.ui.config(function($provide) {\n\n $provide.decorator('placeholderDirective', ['$delegate', '$log', function($delegate, $log) {\n\n var directive = $delegate[0];\n var originalLink = directive.link;\n\n var newLink = function(scope, element, attrs) {\n\n if(originalLink && _.contains(_.keys(attrs), 'avMask')) {\n $log.info('placeholder shim not running on an element due to avMask on same element');\n return;\n }else if(originalLink) {\n originalLink.apply(this, arguments);\n }\n //else originalLink doesn't exist\n };\n\n directive.compile = function() {\n return newLink;\n };\n\n return $delegate;\n }]);\n\n });\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_BREADCRUMBS', {\n\n TEMPLATE: 'ui/breadcrumbs/breadcrumbs-tpl.html'\n });\n\n function AvBreadcrumbsController($state) {\n\n this.getBreadcrumb = function(breadcrumbs, state) {\n if(!state || !state.data) {\n return;\n }\n\n var breadcrumb = state.data.breadcrumb;\n if(!breadcrumb) {\n return;\n }\n\n if(breadcrumb.parent) {\n var parentState = $state.get(breadcrumb.parent);\n\n if(parentState) {\n this.getBreadcrumb(breadcrumbs, parentState);\n }\n }\n breadcrumb.state = state.name;\n breadcrumbs.push(breadcrumb);\n };\n\n this.getBreadcrumbs = function() {\n var breadcrumbs = [];\n this.getBreadcrumb(breadcrumbs, $state.current);\n return breadcrumbs;\n };\n\n }\n\n AvBreadcrumbsController.$inject = ['$state'];\n availity.ui.controller('AvBreadcrumbsController', AvBreadcrumbsController);\n\n function avBreadcrumbs(AV_BREADCRUMBS) {\n return {\n restrict: 'EA',\n replace: true,\n templateUrl: AV_BREADCRUMBS.TEMPLATE,\n controller: 'AvBreadcrumbsController',\n link: function(scope, element, attrs, avBreadcrumbs) {\n scope.breadcrumbs = avBreadcrumbs.getBreadcrumbs();\n\n scope.$on('$stateChangeSuccess', function() {\n scope.breadcrumbs = avBreadcrumbs.getBreadcrumbs();\n });\n }\n };\n }\n\n avBreadcrumbs.$inject = ['AV_BREADCRUMBS'];\n availity.ui.directive('avBreadcrumbs', avBreadcrumbs);\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.filter('avApproximate', function() {\n var pow = Math.pow;\n var floor = Math.floor;\n var abs = Math.abs;\n var log = Math.log;\n\n function round(number, precision) {\n var prec = pow(10, precision);\n return Math.round(number * prec) / prec;\n }\n\n return function (number, precision) {\n precision = precision || 0;\n var base = floor(log(abs(number)) / log(1000));\n var unit = 'kMGTPE'[base - 1];\n return unit ? round(number / pow(1000, base), precision) + unit : (number || 0);\n };\n });\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_BADGE', {\n COLOR: null,\n DEFAULT_CLASS: 'badge',\n SHOW_WHEN_ZERO: false,\n TEMPLATE: 'ui/badge/badge-tpl.html'\n });\n\n function badgeDirective(AV_BADGE) {\n\n return {\n scope: {\n color: '@',\n count: '=avBadge',\n showWhenZero: '@'\n },\n templateUrl: AV_BADGE.TEMPLATE,\n link: function(scope, element) {\n scope.color = scope.color || AV_BADGE.COLOR;\n scope.showWhenZero = scope.showWhenZero || AV_BADGE.SHOW_WHEN_ZERO;\n\n var classes = [];\n classes.push(AV_BADGE.DEFAULT_CLASS);\n if(scope.color) {\n classes.push(scope.color);\n }\n\n element.addClass(classes.join(' '));\n }\n };\n }\n\n badgeDirective.$inject = ['AV_BADGE'];\n availity.ui.directive('avBadge', badgeDirective);\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_REMOVABLE_LABEL', {\n TEMPLATE: 'ui/labels/removable-label-tpl.html'\n });\n\n availity.ui.directive('avRemovableLabel', function(AV_REMOVABLE_LABEL) {\n return {\n templateUrl: AV_REMOVABLE_LABEL.TEMPLATE,\n transclude: true,\n scope: {\n removeValue: '=',\n onRemove: '&'\n },\n link: function(scope, element, attrs) {\n element.addClass('label-remove');\n scope.removeLabel = function() {\n if(!attrs.disabled) {\n scope.onRemove()(scope.removeValue);\n }\n };\n }\n };\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_LOADER', {\n\n TEMPLATES: {\n LOADER: 'ui/animation/loader-tpl.html'\n }\n\n });\n\n availity.ui.controller('AvLoaderController', function($element) {\n\n var self = this;\n var active;\n\n this.start = function() {\n active = true;\n this.animate();\n };\n\n this.animate = function() {\n\n $element\n .find('.loading-bullet')\n .velocity('transition.slideRightIn', { stagger: 250 })\n .velocity({ opacity: 0 }, {\n delay: 750,\n duration: 500,\n complete: function() {\n if(active) {\n setTimeout(function() {self.animate();}, 500);\n } else {\n self.endAnimation();\n }\n }\n });\n\n };\n\n this.endAnimation = function() {\n $element.find('.loading-bullet').velocity('stop', true);\n $element.removeData();\n };\n\n this.stop = function() {\n active = false;\n };\n\n });\n\n availity.ui.directive('avLoader', function(AV_LOADER) {\n return {\n restrict: 'A',\n replace: true,\n controller: 'AvLoaderController',\n require: 'avLoader',\n templateUrl: AV_LOADER.TEMPLATES.LOADER,\n link: function(scope, element, attr, avLoader) {\n\n if(!attr.delay) {\n avLoader.start();\n }\n\n scope.$on('$destroy', function() {\n avLoader.stop();\n });\n\n }\n };\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_BLOCK', {\n TEMPLATES: {\n BLOCK: 'ui/block/block-tpl.html'\n }\n });\n\n var getLoaderController = function(blockId) {\n var el = $('[data-block-ui=\"' + blockId + '\"]') || $('[block-ui=\"' + blockId + '\"]');\n if(el) {\n return el.find('[data-av-loader]').controller('avLoader');\n }\n };\n\n var triggerLoaderController = function(id, instance, fn) {\n\n var controller = instance.loaderController;\n if(!controller) {\n controller = getLoaderController(id);\n instance.loaderController = controller;\n }\n if(controller && _.isFunction(controller[fn])) {\n controller[fn]();\n }\n\n };\n\n var triggerInstance = function(id, instance, origFn, loaderFn) {\n triggerLoaderController(id, instance, loaderFn);\n origFn.apply(instance);\n };\n\n var modifyBlockInstances = function(id, instance) {\n\n var origStartFn = instance.start;\n var origStopFn = instance.stop;\n\n instance.start = function() {\n triggerInstance(id, instance, origStartFn, 'start');\n };\n\n instance.stop = function() {\n triggerInstance(id, instance, origStopFn, 'stop');\n };\n\n instance.startLoader = function() {\n triggerLoaderController(id, instance, 'start');\n };\n\n instance.avModifications = true;\n };\n\n availity.ui.run(function($injector, $log, AV_BLOCK) {\n\n try {\n\n var blockUIConfig = $injector.get('blockUIConfig');\n var blockUI = $injector.get('blockUI');\n blockUIConfig.autoBlock = false;\n blockUIConfig.delay = 0;\n blockUIConfig.templateUrl = AV_BLOCK.TEMPLATES.BLOCK;\n\n var origGetFn = blockUI.instances.get;\n blockUI.instances.get = function(id) {\n var instance = origGetFn(id);\n if(!instance.avModifications) {\n modifyBlockInstances(id, instance);\n }\n return instance;\n };\n\n } catch(e) {\n $log.warn('blockUI is required to use av block.');\n }\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n // Helper directive that hooks into block-ui's start-up lifecycle and starts the loader\n availity.ui.directive('avBlockUi', function(blockUI) {\n\n return {\n restrict: 'A',\n link: function($scope, $element, $attrs) {\n\n var blockId = $attrs.avBlockUi;\n var blockCount = $attrs.blockCount;\n var instance = blockUI.instances.get(blockId);\n if(blockCount > 0) {\n instance.startLoader();\n }\n }\n };\n\n });\n\n})(window);\n","/*\n* Inspired by https://github.com/angular-ui/bootstrap/blob/master/src/tabs/tabs.js\n*/\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_TABS', {\n TEMPLATES: {\n TABS: 'ui/tabs/tabs-tpl.html',\n TAB: 'ui/tabs/tab-tpl.html'\n }\n });\n\n function TabsController($scope) {\n\n var self = this;\n\n $scope.tabs = [];\n self.tabs = $scope.tabs;\n\n this.addTab = function(tab) {\n self.tabs.push(tab);\n\n if(self.tabs.length === 1) {\n tab.active = true;\n } else if(tab.active) {\n self.selectTab(tab);\n } else {\n tab.active = false;\n }\n };\n\n this.removeTab = function(tab) {\n var index = self.tabs.indexOf(tab);\n\n if(tab.active && self.tabs.length > 1) {\n //If this is the last tab, select the previous tab. else, the next tab.\n var newActiveIndex = index === self.tabs.length - 1 ? index - 1 : index + 1;\n self.selectTab(self.tabs[newActiveIndex]);\n }\n\n self.tabs.splice(index, 1);\n };\n\n this.selectTab = function(selectedTab) {\n angular.forEach(self.tabs, function (tab) {\n if(tab.active && tab !== selectedTab) {\n tab.active = false;\n tab.onDeselect();\n }\n });\n\n selectedTab.active = true;\n selectedTab.onSelect();\n };\n }\n\n TabsController.$inject = ['$scope'];\n availity.ui.controller('AvTabsController', TabsController);\n\n function TabsDirective(AV_TABS) {\n return {\n restrict: 'AE',\n templateUrl: AV_TABS.TEMPLATES.TABS,\n transclude: true,\n replace: true,\n controller: 'AvTabsController',\n scope: true,\n link: function(scope, element, attrs) {\n scope.justified = !!attrs.justified;\n scope.tabType = attrs.tabType;\n scope.vertical = !!attrs.vertical;\n\n if(angular.isUndefined(attrs.padContent)) {\n scope.padContent = true;\n }\n }\n };\n }\n\n TabsDirective.$inject = ['AV_TABS'];\n availity.ui.directive('avTabs', TabsDirective);\n\n function TabDirective(AV_TABS) {\n return {\n restrict: 'AE',\n templateUrl: AV_TABS.TEMPLATES.TAB,\n replace: true,\n require: '^avTabs',\n transclude: true,\n scope: {\n heading: '@',\n template: '=',\n templateUrl: '=',\n onSelect: '&select',\n onDeselect: '&deselect'\n },\n controller: function() {\n // Allow avTabs to be required by other directives\n },\n link: function(scope, element, attrs, tabsController, transclude) {\n scope.transcludeFn = transclude;\n\n tabsController.addTab(scope);\n\n scope.$on('destroy', function() {\n tabsController.removeTab(scope);\n });\n\n scope.select = function() {\n if(!scope.disabled) {\n tabsController.selectTab(scope);\n }\n };\n\n scope.$watch('active', function(active) {\n if(active) {\n tabsController.selectTab(scope);\n }\n });\n\n if(angular.isDefined(attrs.active)) {\n scope.active = attrs.active;\n\n scope.$parent.$watch(attrs.active, function(active) {\n if(active) {\n tabsController.selectTab(scope);\n }\n });\n }\n\n if(angular.isDefined(attrs.disable)) {\n scope.$parent.$watch(attrs.disable, function(disabled) {\n scope.disabled = !!disabled;\n });\n }\n }\n };\n }\n\n TabDirective.$inject = ['AV_TABS'];\n availity.ui.directive('avTab', TabDirective);\n\n function TabPaneDirective(avTemplateCache, $compile) {\n return {\n restrict: 'AE',\n require: '^avTabs',\n link: function(scope, element, attrs) {\n\n var tab = scope.$eval(attrs.avTabPane);\n\n if(angular.isDefined(tab.template) || angular.isDefined(tab.templateUrl)) {\n avTemplateCache.get(tab)\n .then(function(template) {\n element.append($compile(template)(scope));\n });\n } else {\n tab.transcludeFn(tab.$parent, function(contents) {\n angular.forEach(contents, function(node) {\n element.append(node);\n });\n });\n }\n }\n };\n }\n\n TabPaneDirective.$inject = ['avTemplateCache', '$compile'];\n availity.ui.directive('avTabPane', TabPaneDirective);\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.ui.constant('AV_SCROLL_PAGINATION', {\n TEMPLATE: 'ui/scroll-pagination/scroll-pagination-tpl.html',\n DEFAULT_OPTIONS: {\n limit: 50,\n offset: 0,\n maxCached: 100,\n loadMoreText: 'Load more items',\n entryIdAttribute: 'id',\n apiParams: {},\n beforePageLoad: undefined,\n afterPageLoad: undefined\n }\n });\n\n\n availity.ui.factory('avScrollPaginationService', function($log) {\n function AvScrollPaginationService() {\n this.instances = {};\n }\n\n var proto = AvScrollPaginationService.prototype;\n\n proto.registerInstance = function(instanceInterface, id) {\n if (this.instances[id]) {\n $log.warn('Found existing instance with id ' + id);\n }\n this.instances[id] = instanceInterface;\n };\n\n proto.unregisterInstance = function(id) {\n delete this.instances[id];\n };\n\n proto.resetInstance = function(id) {\n if (this.instances[id]) {\n this.instances[id].reset();\n return true;\n }\n return false;\n };\n\n return new AvScrollPaginationService();\n });\n\n availity.ui.controller('AvScrollPaginationController', function($scope, $element, $timeout, $log, AV_SCROLL_PAGINATION, blockUI, avScrollPaginationService) {\n\n var self = this;\n\n this.buildOptions = function() {\n $scope._options = {};\n _.extend($scope._options, AV_SCROLL_PAGINATION.DEFAULT_OPTIONS, $scope.options || {});\n $scope._options.lowOffset = $scope._options.offset;\n $scope._options.highOffset = $scope._options.offset;\n };\n\n var originalEntries = angular.copy($scope.entries);\n this.buildOptions();\n\n this.updateButtonVisibilityFlags = function(data) {\n $scope.showNext = $scope._options.highOffset + data.count < data.totalCount;\n $scope.showPrev = $scope._options.lowOffset > 0;\n };\n\n this.loadEntries = function(prepend) {\n var block = blockUI.instances.get('scroll-pagination-block-' + $scope.avScrollPagination);\n block.start();\n if (_.isFunction($scope._options.beforePageLoad)) {\n $scope._options.beforePageLoad($scope._options);\n }\n var params = {};\n _.extend(params, $scope._options.apiParams, {limit: $scope._options.limit, offset: $scope._options.offset});\n $scope.apiResource.query({params: params}).then(function(response) {\n var responseData = self.getResponseData(response);\n if ($scope._options.afterPageLoad) {\n $scope._options.afterPageLoad(responseData);\n }\n if (responseData && responseData[$scope._options.resourceId]) {\n self.addEntries(responseData[$scope._options.resourceId], prepend);\n }\n self.updateButtonVisibilityFlags(responseData);\n block.stop();\n }, function() {\n $log.error('API call failed');\n block.stop();\n });\n };\n\n this.getResponseData = function(data) {\n if (data) {\n if ($scope._options.responseKey) {\n var keys = $scope._options.responseKey.split('.');\n var nestedData = data;\n var noData = false;\n _.each(keys, function(key) {\n if (!noData) {\n nestedData = nestedData[key];\n if (!nestedData) {\n noData = true;\n }\n }\n });\n return noData ? [] : nestedData;\n } else {\n return data;\n }\n }\n return [];\n };\n\n this.addEntries = function(entries, prepend) {\n var oldEntries = angular.copy($scope.entries);\n if (prepend) {\n $scope.entries.unshift.apply($scope.entries, entries);\n } else {\n $scope.entries.push.apply($scope.entries, entries);\n }\n if ($scope.entries.length > $scope._options.maxCached) {\n var diff = $scope.entries.length - $scope._options.maxCached;\n var trackedElementId;\n if (prepend) {\n $scope.entries = $scope.entries.slice(0, $scope._options.maxCached);\n $scope._options.highOffset -= diff;\n trackedElementId = oldEntries[oldEntries.length-diff-1] ? oldEntries[oldEntries.length-diff-1][$scope._options.entryIdAttribute] : undefined;\n } else {\n $scope.entries = $scope.entries.slice(diff, $scope.entries.length);\n $scope._options.lowOffset += diff;\n trackedElementId = oldEntries[diff] ? oldEntries[diff][$scope._options.entryIdAttribute] : undefined;\n }\n self.autoscroll(trackedElementId, prepend);\n }\n };\n\n this.autoscroll = function(trackedElementId, prepend) {\n if (trackedElementId) {\n var trackedElement = $element.find('#'+trackedElementId);\n var trackedElementTop = trackedElement.offset().top;\n $timeout(function() {\n var newScrollTop = $element.scrollTop() + trackedElement.offset().top - trackedElementTop;\n $element.animate({scrollTop: newScrollTop}, 0);\n }, 0, false);\n } else {\n $timeout(function() {\n if (prepend) {\n $element.animate({scrollTop: $element.prop('scrollHeight')}, 0);\n } else {\n $element.animate({scrollTop: 0}, 0);\n }\n }, 0, false);\n }\n };\n\n this.loadPrev = function() {\n $scope._options.lowOffset -= $scope._options.limit;\n $scope._options.offset = $scope._options.lowOffset;\n self.loadEntries(true);\n };\n\n this.loadNext = function() {\n $scope._options.highOffset += $scope._options.limit;\n $scope._options.offset = $scope._options.highOffset;\n self.loadEntries();\n };\n\n avScrollPaginationService.registerInstance({\n reset: function() {\n $element.animate({scrollTop: 0}, 0);\n $scope.entries = angular.copy(originalEntries);\n self.buildOptions();\n self.loadEntries();\n }},\n $scope.avScrollPagination\n );\n\n $scope.$on('$destroy', function() {\n avScrollPaginationService.unregisterInstance($scope.avScrollPagination);\n });\n\n $scope.loadPrev = self.loadPrev;\n $scope.loadNext = self.loadNext;\n\n this.loadEntries();\n });\n\n\n\n availity.ui.directive('avScrollPagination', function($log, AV_SCROLL_PAGINATION) {\n return {\n restrict: 'A',\n controller: 'AvScrollPaginationController',\n transclude: true,\n templateUrl: AV_SCROLL_PAGINATION.TEMPLATE,\n scope: {\n apiResource: '=',\n entries: '=',\n options: '=',\n avScrollPagination: '@'\n },\n link: function($scope) {\n if (!$scope.avScrollPagination) {\n $log.error('Directive must include an id');\n }\n }\n };\n });\n\n})(window);\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/maps/availity-angular.min.js.map b/dist/maps/availity-angular.min.js.map index ea0d6b0a..3a9f93e0 100644 --- a/dist/maps/availity-angular.min.js.map +++ b/dist/maps/availity-angular.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["availity-angular.js","/source/index.js","/source/strings.js","/source/uuid.js","/source/urls.js","/source/print.js","/source/throttle.js","/source/logger.js","/source/logger-config.js","/source/polling.js","/source/api-factory.js","/source/api-users.js","/source/api-coverages.js","/source/api-configurations.js","/source/api-log-messages.js","/source/api-documents.js","/source/api-organizations.js","/source/api-codes.js","/source/api-user-permissions.js","/source/user-authorizations.js","/source/session.js","/source/idle.js","/source/idle-interceptor.js","/source/validator.js","/source/validator-utils.js","/source/validator-size.js","/source/validator-pattern.js","/source/validator-required.js","/source/validator-date-range.js","/source/validator-date-format.js","/source/validator-npi.js","/source/validator-phone.js","/source/validator-email.js","/source/globals.js","/source/analytics.js","/source/analytics-util.js","/source/analytics-splunk.js","/source/analytics-piwik.js","/source/analytics-exceptions.js","/source/analytics-config.js","/source/date-polyfill.js","/source/messages-constants.js","/source/messages.js"],"names":["root","availity","VERSION","MODULE","core","angular","module","originalModule","modules","name","deps","_","indexOf","window","__karma__","Error","push","exports","_stringify","object","isBlank","str","test","uid","uuid","prefix","index","length","digit","charCodeAt","join","String","fromCharCode","unshift","REGEX_API_URL","getRelativeUrl","url","result","match","print","document","queryCommandSupported","execCommand","focus","constant","OPTIONS","wait","update","trailing","leading","factory","AV_THROTTLE","$timeout","fn","options","merge","THRESHOLD","isDefined","UPDATE","timer","context","this","args","arguments","apply","later","provider","_enabled","enabled","$get","$injector","AvLogger","$delegate","$log","proto","prototype","supplant","o","_supplant","a","b","r","replace","isObject","element","elemStr","isUndefined","constructor","toString","getFormattedTimestamp","date","getHours","getMinutes","getSeconds","getMilliseconds","_log","originalFn","hash","location","now","Date","message","supplantData","stack","errorMessage","formatError","get","params","log","info","warn","debug","arg","sourceURL","line","error","config","$provide","decorator","INTERVAL","MAX_ELAPSED_TIME","MAX_RETRY","DECAY","EVENTS","REGEX_URL","PollingServiceFactory","$rootScope","$q","AV_POLLING","AV_API","AvPollingService","pendingRequests","response","isAsyncResponse","onAsyncReponse","when","setDefaults","defaultOptions","pollingInterval","pollingDecay","pollingMaxInterval","pollingRetryCount","pollingStartTime","getTime","extend","responseError","reject","api","status","isFunction","headers","HEADERS","SERVER","LOCATION","deferred","defer","queueRequest","notify","promise","getUrl","self","_url","_config","method","pollingMaxRetry","_pollingDecay","cache","request","id","timeout","getPollingTimeout","retryRequest","pushRequest","popRequest","i","splice","isPollingMaxTimeout","elaspedTime","isElapsed","isMaxRetried","isPollable","_isTimeout","_isMax","cancel","increment","successCallback","resolve","errorCallback","$http","then","incrementCounter","incrementDecay","clearRequests","forEach","ID","STATUS","GLOBAL_ID","CLIENT","SESSION_ID","AUTH","OVERRIDE","CALLBACK_URL","CUSTOMER_ID","path","resourceGroup","version","level","suffix","ApiResourcesFactory","avPollingService","AvApiResource","isString","charAt","_cacheBust","cacheBust","_getUrl","_getApiUrl","_createResponse","data","_request","afterCallback","success","_response","_promise","successResponse","call","errorResponse","notifyResponse","always","normalize","joined","slice","create","beforeCreate","afterCreate","afterGet","query","afterQuery","isNumber","beforeUpdate","afterUpdate","remove","afterRemove","UserServiceFactory","AvUsersResource","user","me","LogMessagesFactory","AvLogMessagesResource","buildRequest","entries","requestPayload","AvDocumentsResourceFactory","AvDocumentsResource","getContents","getContentsUrl","OrganizationResourceFactory","OrganizationResource","getOrganizations","organizations","AvCodesResourceFactory","AvCodesResource","getCodes","page","offset","list","q","results","codes","has","each","code","moreVal","totalCount","limit","more","AvUserPermissionsResourceFactory","AvUserPermissionsResource","sessionDate","moment","toISOString","axiUserPermissions","getPermissions","permissionIds","region","permissionId","AvUserAuthorizationsFactory","avUserPermissionsResource","AvUserAuthorizations","setRegion","setPermissionIds","isArray","isAuthorized","getPermission","permission","isAnyAuthorized","permissions","findWhere","undefined","_permissions","union","toPermissionMap","getPayers","organizationId","organization","resources","map","key","toPermission","description","geographies","SESSION_TIMEOUT","NOT_AUTHORIZED","avUsersResource","AvSession","getUser","destroy","permisions","IDLE_INACTIVE","IDLE_ACTIVE","SESSION_TIMEOUT_ACTIVE","SESSION_TIMEOUT_REDIRECT","HUMAN","MACHINE","INTERVALS","PING","IDLE","SESSION","URLS","HOME","AV_IDLE","pingUrl","redirectUrl","sessionTimeout","idleTimeout","pingTimeout","enable","value","setSessionTimeout","setIdleTimeout","setPingTimeout","setPingUrl","$document","avThrottle","AvIdle","_idleTimer","_sessionTimer","_pingTimer","_keepAlive","idleActive","sessionActive","listeners","init","stop","start","listener","setRedirectUrl","$on","find","on","event","onEvent","oldUrl","newUrl","href","startIdleTimer","startSessionTimer","off","stopPing","stopSessionTimer","stopIdleTimer","isEnabled","isApiRequest","$broadcast","startPing","keepAlive","avIdle","$httpProvider","interceptors","classes","valid","invalid","dirty","pristine","touched","untouched","submitted","validators","REVALIDATE","SUBMITTED","FAILED","RESET","DEBOUNCE","DATE_FORMAT","SIMPLE","PATTERNS","ALPHA_ONLY","NUMERIC_ONLY","rules","services","addRules","_rules","addValidators","_validators","concat","avValConfig","AV_VAL","AvValidation","initValidators","addValidator","validator","validate","ruleName","ruleConfig","contraints","el","violations","_valid","rule","contraintName","validationResult","field","isValid","all","isEmpty","$","trim","avValUtils","min","max","type","toLowerCase","isNull","parseInt","REGEX","asRegExp","pattern","RegExp","values","expresion","ctrl","$isEmpty","getStartDate","setMin","add","units","getEndDate","end","setMax","set","validation","startDate","endDate","format","isBetween","isSame","INTEGER_REGEX","npi","firstDigit","substring","alternate","total","next","roundUp","Math","ceil","calculatedCheck","avValPattern","PHONE_PATTERN","EMAIL_PATTERN","REGIONS","VIRTUAL_PAGE_TRACKING","SERVICES","PIWIK","SPLUNK","PAGE","DEFAULT","PRE_FIX","IGNORE","ENV","PROD","DOMAIN","URL","QA","AV_ANALYTICS","plugins","virtualPageTracking","appId","registerPlugins","_plugins","setVirtualPageTracking","isVirtualPageTracking","setAppID","$location","AvAnalytics","plugin","err","trackPageView","absUrl","handler","trackEvent","properties","promises","getAppId","AnalyticsUtils","getProperties","attributes","props","isValidAttribute","isNotIgnored","getAttribute","isExternalLink","attrs","ngClick","ignored","includes","lowercase","substr","simpleKey","toNum","parsed","isNaN","trackingValues","toUpperCase","avLogMessagesResource","SplunkAnalyticsService","$$absUrl","siteId","customVariables","_setCustomVariable","valueName","scope","setSiteID","_siteID","setVisitVariables","items","item","setPageVariables","avAnalyticsUtils","AvPiwikAnalytics","_paq","category","action","label","isFinite","$$host","variable","getScript","MESSAGES","NOT_APPLICABLE","TYPES","EXCEPTION","setAppId","_id","AV_EXCEPTIONS","AvExceptionAnalytics","TraceKit","remoteFetching","surroundingLinesToCollect","report","subscribe","stacktrace","onError","prettyPrint","padLeft","func","column","userAgent","navigator","errorDate","errorName","errorStack","userLanguage","referrer","host","domain","screenWidth","width","screenHeight","height","sdkVersion","exception","computeStackTrace","cause","errorTacking","run","avExceptionAnalytics","analytics","avAnalytics","pad","number","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","toFixed","MESSAGE","RESIZE","UNLOAD","AV_RESIZE","AV_RECEIVED","AV_MAXIMIZE","AV_MINIMIZE","AV_LOGIN","AV_LOGOUT","AV_SESSION_TIMEOUT","RESIZE_DEBOUNCE","LOCAL","AV_MESSAGES","AvMessages","$window","onMessage","onResize","send","resize","debounce","isDomain","_event","originalEvent","source","origin","fromJson","$root","isIframe","parent","hostname","protocol","port","payload","JSON","stringify","postMessage","avMessages"],"mappings":"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","file":"availity-angular.min.js","sourcesContent":["/**\n * availity-angular v1.8.0 -- January-15\n * Copyright 2016 Availity, LLC \n */\n\n// Source: /lib/core/index.js\n\n\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity || {};\n availity.VERSION = 'v1.8.0';\n availity.MODULE = 'availity';\n availity.core = angular.module(availity.MODULE, ['ng']);\n\n var originalModule = angular.module;\n var modules = [];\n\n angular.module = function(name, deps) {\n\n if(deps && _.indexOf(modules, name) !== -1 && !window.__karma__) {\n throw new Error('redefining module: ' + name);\n }\n\n modules.push(name);\n\n return originalModule(name, deps);\n };\n\n root.availity = availity;\n\n if(typeof module !== 'undefined' && module.exports) {\n module.exports = availity;\n }\n\n})(window);\n\n\n// Source: /lib/core/utils/strings.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n // https://github.com/epeli/underscore.string/blob/cebddf40cf2e10f0e9b596d9654edd0a1cfefc15/helper/makeString.js\n availity._stringify = function(object) {\n if(object === null) {\n return '';\n }\n return '' + object;\n };\n\n // https://github.com/epeli/underscore.string/blob/cebddf40cf2e10f0e9b596d9654edd0a1cfefc15/isBlank.js\n availity.isBlank = function(str) {\n return (/^\\s*$/).test(availity._stringify(str));\n };\n\n})(window);\n\n// Source: /lib/core/utils/uuid.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n var uid = ['0', '0', '0'];\n\n availity.uuid = function(prefix) {\n var index = uid.length;\n var digit;\n\n while(index) {\n index--;\n digit = uid[index].charCodeAt(0);\n if(digit === 57 /*'9'*/) {\n uid[index] = 'A';\n return prefix ? prefix + uid.join('') : uid.join('');\n }\n if(digit === 90 /*'Z'*/) {\n uid[index] = '0';\n } else {\n uid[index] = String.fromCharCode(digit + 1);\n return prefix ? prefix + uid.join('') : uid.join('');\n }\n }\n uid.unshift('0');\n return prefix ? prefix + uid.join('') : uid.join('');\n };\n\n})(window);\n\n// Source: /lib/core/utils/urls.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.REGEX_API_URL = /^.*?api.availity.com(.*)$/;\n\n availity.getRelativeUrl = function(url) {\n var result = url.match(availity.REGEX_API_URL);\n if(result && result[1]) {\n return '/api' + result[1];\n }\n\n return url;\n };\n\n})(window);\n\n// Source: /lib/core/utils/print.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n // https://github.com/jasonday/printThis/commit/66f9cbd0e3760767342eed4ef32cf8294417b227\n availity.print = function() {\n\n if(document.queryCommandSupported('print')) {\n document.execCommand('print', false, null);\n } else {\n window.focus();\n window.print();\n }\n };\n\n})(window);\n\n// Source: /lib/core/utils/throttle.js\n// Original => https://github.com/mgcrea/angular-strap/blob/master/src/helpers/debounce.js\n\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_THROTTLE', {\n OPTIONS: {\n wait: 1000,\n update: false,\n trailing: true,\n leading: false\n }\n });\n\n availity.core.factory('avThrottle', function(AV_THROTTLE, $timeout) {\n\n return function(fn, wait, options) {\n\n options = _.merge({}, AV_THROTTLE.OPTIONS, options);\n\n wait = wait ? wait : AV_THROTTLE.THRESHOLD;\n var update = angular.isDefined(options.update) ? options.update : AV_THROTTLE.UPDATE;\n var timer = null;\n\n return function() {\n var context = options.context || this;\n var args = arguments;\n\n if(!timer) {\n if(options.leading !== false) {\n fn.apply(context, args);\n }\n\n var later = function() {\n timer = null;\n if(options.trailing !== false) {\n fn.apply(context, args);\n }\n };\n\n timer = $timeout(later, wait, update);\n }\n\n return timer;\n\n };\n };\n });\n\n})(window);\n\n// Source: /lib/core/logger/logger.js\n// Orginal => https://github.com/ericzon/angular-ny-logger/blob/0c594e864c93e7f33d36141200096bc6139ddde1/angular-ny-logger.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.provider('AvLogger', function() {\n\n var _enabled = false;\n\n this.enabled = function(enabled) {\n _enabled = !!enabled;\n };\n\n this.$get = function($injector) {\n\n var AvLogger = function(context, $delegate) {\n\n this.context = context || '';\n this.$log = $delegate;\n\n };\n\n var proto = AvLogger.prototype;\n\n AvLogger.supplant = function(str, o) {\n\n var _supplant = function (a, b) {\n var r = o[b];\n return r;\n };\n\n return str.replace(/\\{([^{}]*)\\}/g, _supplant);\n };\n\n AvLogger.isObject = function(element) {\n var elemStr = ( !angular.isUndefined(element) && !angular.isUndefined(element.constructor) ) ? element.constructor.toString() : '';\n return (elemStr.indexOf('Object') > -1);\n };\n\n AvLogger.getFormattedTimestamp = function(date) {\n\n return AvLogger.supplant('{0}:{1}:{2}:{3}', [\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds()\n ]);\n\n };\n\n proto._log = function(originalFn, args) {\n\n // Allow enabling logger through query params\n // Ex:\n //\n // http://localhost:3000/ui.html#avLogger\n\n var hash = window.location.hash;\n hash = hash || '';\n\n if(!_enabled && hash.indexOf('avLogger') < 0 && originalFn !== 'error') {\n return;\n }\n\n var now = AvLogger.getFormattedTimestamp(new Date());\n var message = '';\n var supplantData = [];\n\n var context = this.context ? ' [' + this.context + '] ' : '';\n\n switch(args.length) {\n case 1:\n // (1) If the user supplied one argument, then the argument must be\n // the message itself and _log()\n // will print: - : \n supplantData = args[0];\n message = AvLogger.supplant('{0}{1} - {2}', [now, context, args[0]]);\n break;\n case 3:\n // (3) If the user supplied three arguments, then the first argument\n // is a method name, the second is the message and the third is an\n // object of variables to interpolate with the message. For this, _log()\n // will print: - - ('')\n supplantData = args[2];\n message = AvLogger.supplant(\"{0}{1} - {2}(\\'{3}\\')\", [now, context, args[0], args[1]]);\n break;\n case 2:\n // (2) If the user provided two arguments, we need to find out whether\n // they supplied a method name or an interpolation object.\n // In order to figure that out, we’ll check the type of the last argument.\n // If it is a string, then it has to be the message itself while the\n // first argument is the method name. Otherwise consider the first argument\n // as the message and the second as array of interpolation variables.\n // The output print will be according to this check.\n if(typeof args[1] === 'string') {\n\n message = AvLogger.supplant(\"{0}{1} - {2}(\\'{3}\\')\", [now, context, args[0], args[1]]);\n\n } else {\n\n // If the message is an error, there may be a stack included. If so, we\n // should include the stack in the message to make it more meaningful.\n if(args[0].stack) {\n var errorMessage = this.formatError(args[0]);\n message = AvLogger.supplant('{0}{1} - {2}', [now, context, errorMessage]);\n supplantData = args[1];\n\n }else {\n supplantData = args[1];\n\n }\n\n }\n break;\n }\n\n var $log = this.$log || $injector.get('$log');\n\n var params = (AvLogger.isObject(supplantData)) ? [message, supplantData] : [AvLogger.supplant(message, supplantData)];\n $log[originalFn].apply(null, params);\n\n };\n\n proto.log = function() {\n this._log('log', arguments);\n };\n\n proto.info = function() {\n this._log('info', arguments);\n };\n\n proto.warn = function() {\n this._log('warn', arguments);\n };\n\n proto.debug = function() {\n this._log('debug', arguments);\n };\n\n // https://github.com/angular/angular.js/blob/v1.2.27/src/ng/log.js#L122\n proto.formatError = function(arg) {\n if(arg instanceof Error) {\n if(arg.stack) {\n\n arg = (arg.message && arg.stack.indexOf(arg.message) === -1) ?\n 'Error: ' + arg.message + '\\n' + arg.stack : arg.stack;\n\n } else if(arg.sourceURL) {\n arg = arg.message + '\\n' + arg.sourceURL + ':' + arg.line;\n }\n }\n return arg;\n };\n\n proto.error = function() {\n this._log('error', arguments);\n };\n\n return AvLogger;\n\n };\n\n });\n\n\n})(window);\n\n// Source: /lib/core/logger/logger-config.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.config(function($provide) {\n\n $provide.decorator('$log', function($delegate, AvLogger) {\n return new AvLogger(null, $delegate);\n });\n\n });\n\n})(window);\n\n// Source: /lib/core/polling/polling.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_POLLING', {\n INTERVAL: 1000, // delay in ms before retrying an async request\n MAX_ELAPSED_TIME: 5000, // max time in ms before polling stops and rejects original request\n MAX_RETRY: 30, // # of times the request will be tried\n DECAY: 1.2, // % the polling interval decays after every retry\n // maximum time polling is allowed before rejecting the request\n EVENTS: {\n MAX_RETRY: 'av:polling:max:retry'\n },\n REGEX_URL: /^.*?api.availity.com(.*)$/ // capture the relative url from API\n });\n\n var PollingServiceFactory = function($rootScope, $q, $injector, $timeout, $log, AV_POLLING, AV_API) {\n\n var AvPollingService = function() {\n this.pendingRequests = []; // stores all request for polling\n };\n\n var proto = AvPollingService.prototype;\n\n proto.response = function(response) {\n\n if(this.isAsyncResponse(response)) {\n return this.onAsyncReponse(response);\n }\n\n return response || $q.when(response);\n };\n\n proto.setDefaults = function(config) {\n\n var defaultOptions = {\n pollingInterval: AV_POLLING.INTERVAL,\n pollingDecay: AV_POLLING.DECAY,\n pollingMaxInterval: AV_POLLING.MAX_ELAPSED_TIME,\n pollingRetryCount: 0,\n pollingStartTime: new Date().getTime()\n };\n\n return _.extend(defaultOptions, config);\n };\n\n proto.responseError = function(response) {\n // Return the promise rejection\n return $q.reject(response);\n };\n\n /**\n * API layer return a link with a polling url for\n * async responses.\n *\n * @param {Object} response ajax response\n * @return {Boolean} true if response has status of 202 (accepted) and location param in header with uri+session link\n */\n proto.isAsyncResponse = function(response) {\n\n return response &&\n response.config &&\n response.config.api &&\n response.status &&\n response.status === 202 &&\n angular.isFunction(response.headers) && !availity.isBlank(response.headers(AV_API.HEADERS.SERVER.LOCATION));\n };\n\n proto.onAsyncReponse = function(response) {\n\n response.config = this.setDefaults(response.config);\n\n var deferred = $q.defer();\n\n this.queueRequest(deferred, response);\n\n // [rm3]: Can't call notify before you return promise object?\n $timeout(function() {\n // Notify deferred listeners with the original server response\n deferred.notify(response);\n }, 0, false);\n\n return deferred.promise;\n };\n\n proto.getUrl = function(url) {\n\n var result = url.match(AV_POLLING.REGEX_URL);\n if(result && result[1]) {\n return '/api' + result[1];\n }\n\n return url;\n };\n\n proto.queueRequest = function(deferred, response) {\n\n var self = this;\n // server replies with location header so set the url into config\n var _url = availity.getRelativeUrl(response.headers(AV_API.HEADERS.SERVER.LOCATION));\n var _config = response.config;\n\n\n // headers – {Object} – Map of strings or functions which return strings representing HTTP headers\n // to send to the server. If the return value of a function is null, the header\n // will not be sent. Functions accept a config object as an argument.\n var config = {\n method: 'GET',\n api: true,\n headers: _config.headers,\n pollingInterval: _config.pollingInterval,\n pollingMaxRetry: _config.pollingMaxRetry,\n pollingMaxInterval: _config.pollingMaxInterval,\n pollingStartTime: _config.pollingStartTime,\n _pollingDecay: _config._pollingDecay,\n pollingRetryCount: _config.pollingRetryCount,\n pollingDecay: _config.pollingDecay,\n url: _url, /* set the url from the server response */\n cache: false\n };\n\n var request = {\n id: availity.uuid('request-'),\n config: config,\n deferred: deferred\n };\n\n var timeout = this.getPollingTimeout(config);\n\n // each async request should run on its own timer\n var timer = $timeout(function() {\n self.retryRequest(request.id);\n }, timeout, false);\n\n request.timer = timer;\n\n // add the async request to the queue\n this.pushRequest(request);\n\n };\n\n proto.popRequest = function(id) {\n\n var index = null;\n var request = null;\n\n for(var i = 0; i < this.pendingRequests.length; i++) {\n if(this.pendingRequests[i].id === id) {\n index = i;\n break;\n }\n }\n\n request = this.pendingRequests[index];\n this.pendingRequests.splice(index, 1);\n\n return request;\n };\n\n proto.pushRequest = function(request) {\n this.pendingRequests.push(request);\n };\n\n proto.getPollingTimeout = function(config) {\n return config.pollingDecay * config.pollingInterval;\n };\n\n proto.isPollingMaxTimeout = function(config) {\n var now = new Date().getTime();\n var elaspedTime = now - config.pollingStartTime;\n var isElapsed = elaspedTime > config.pollingMaxInterval;\n return isElapsed;\n },\n\n proto.isMaxRetried = function(config) {\n return config.pollingRetryCount >= AV_POLLING.MAX_RETRY;\n };\n\n proto.isPollable = function(config) {\n var _isTimeout = this.isPollingMaxTimeout(config);\n var _isMax = this.isMaxRetried(config);\n\n return _isTimeout || _isMax ? false : true;\n\n };\n\n proto.retryRequest = function(id) {\n\n var self = this;\n var request = this.popRequest(id);\n $timeout.cancel(request.timer);\n\n var config = request.config;\n\n var deferred = request.deferred;\n\n if(!this.isPollable(config)) {\n $log.info('Rejecting pollable response due to timeout');\n return deferred.reject(request);\n }\n\n // increment counters and polling timeouts\n this.increment(config);\n\n function successCallback(response) {\n if(self.isAsyncResponse(response)) {\n deferred.notify(response);\n self.queueRequest(request.deferred, response);\n } else {\n deferred.resolve(response);\n }\n }\n\n function errorCallback(response) {\n deferred.reject(response);\n }\n\n // Silly circular dependency trick\n var $http = $injector.get('$http');\n\n $http(config).then(successCallback, errorCallback);\n\n };\n\n proto.increment = function(config) {\n this.incrementCounter(config);\n this.incrementDecay(config);\n };\n\n proto.incrementDecay = function(config) {\n if(!config._pollingDecay) {\n // store the original decay param\n config._pollingDecay = config.pollingDecay;\n }\n config.pollingDecay *= config._pollingDecay;\n };\n\n proto.incrementCounter = function(config) {\n config.pollingRetryCount++;\n };\n\n proto.clearRequests = function() {\n angular.forEach(this.pendingRequests, function(request) {\n $timeout.cancel(request.timer);\n });\n this.pendingRequests = [];\n };\n\n return new AvPollingService();\n\n };\n\n availity.core.factory('avPollingService', PollingServiceFactory);\n\n})(window);\n\n// Source: /lib/core/api/api-factory.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_API', {\n HEADERS: {\n SERVER: {\n ID: 'X-API-ID',\n LOCATION: 'Location',\n STATUS: 'X-Status-Message',\n GLOBAL_ID: 'X-Global-Transaction-ID'\n },\n CLIENT: {\n SESSION_ID: 'X-Session-ID',\n AUTH: 'Authorization',\n OVERRIDE: 'X-HTTP-Method-Override',\n CALLBACK_URL: 'X-Callback-URL',\n CUSTOMER_ID: 'X-Availity-Customer-ID'\n }\n }\n });\n\n var defaultOptions = {\n // pre-prend the url with a value like `/public` so we can build urls like `public/api/v1/*`\n prefix: '',\n // default base url for endpoints\n path: '/api',\n // url resource group, such as `/foo`, for urls like `public/api/foo/v1/*`\n resourceGroup: '',\n // url to resource endpoint like `coverages` or `payers`\n url: null,\n // defaults to version 1\n version: '/v1',\n // governance level `/internal`\n level: '',\n // post-pend the url with `.json`, `.txt` or `.xml`\n suffix: '',\n // cache all request by default\n cache: true,\n // flag used to enable behaviors around the Availity Rest API\n api: true,\n // # of times the polling service has tried to get a response\n pollingRetryCount: 0,\n // in ms\n pollingInterval: 1000,\n // % the polling interval decays after every retry\n pollingDecay: 1.2,\n // maximum time polling is allowed before rejecting the request\n pollingMaxInterval: 30000\n\n };\n\n // Factory that creates ApiResourcess\n var ApiResourcesFactory = function($http, $q, avPollingService) {\n\n var AvApiResource = function(options) {\n\n if(!options) {\n throw new Error('[options] cannot be null or undefined');\n }\n\n // if string the assume url is being passed in\n if(angular.isString(options)) {\n options = options.charAt(0) === '/' ? options : '/' + options;\n options = angular.extend({}, {url: options});\n }\n\n if(!options.url) {\n throw new Error('[url] cannot be null');\n }\n\n // get the default options and merge into this instance\n this.options = angular.extend({}, defaultOptions, (options || {}));\n };\n\n // Alias the prototype\n var proto = AvApiResource.prototype;\n\n proto._config = function(config) {\n return angular.extend({}, this.options, (config || {}));\n },\n\n proto._cacheBust = function(config) {\n config.cacheBust = null;\n config.params = config.params || {};\n config.params.cacheBust = new Date().getTime();\n return config;\n },\n\n proto._getUrl = function(id) {\n if(this.options.api) {\n return this._getApiUrl(id);\n }\n\n return this.options.url;\n };\n\n proto._createResponse = function(data, status, headers, config) {\n return {\n data: data,\n status: status,\n headers: headers,\n config: config\n };\n };\n\n proto._request = function(config, afterCallback) {\n\n var self = this;\n var defer = $q.defer();\n\n $http(config)\n .success(function(data, status, headers, _config) {\n\n var _response = {\n data: data,\n status: status,\n headers: headers,\n config: _config\n };\n\n // handle the async response if applicable\n var _promise = $q.when(avPollingService.response(_response));\n // notify the promise listener of the original response\n defer.notify(_response);\n\n // handle the polling service promise\n _promise.then(function(successResponse) {\n\n // if service has a callback then call it\n // var response = self._createResponse(data, status, headers, _config);\n if(afterCallback) {\n successResponse = afterCallback.call(self, successResponse, config.data);\n }\n defer.resolve(successResponse);\n }, function(errorResponse) {\n defer.reject(errorResponse);\n }, function(notifyResponse) {\n defer.notify(notifyResponse);\n });\n\n }).error(function(data, status, headers, _config) {\n var response = self._createResponse(data, status, headers, _config);\n defer.reject(response);\n });\n\n var promise = defer.promise;\n\n // recreate the success callback ala $http\n promise.success = function(fn) {\n promise.then(function(response) {\n fn(response.data, response.status, response.headers, response.config);\n });\n return promise;\n };\n\n // recreate the error callback ala $http\n promise.error = function(fn) {\n promise.then(null, function(response) {\n fn(response.data, response.status, response.headers, config);\n });\n return promise;\n };\n\n promise.always = promise['finally'];\n\n return promise;\n };\n\n proto.normalize = function(url) {\n return url\n .replace(/[\\/]+/g, '/')\n .replace(/\\/$/, '');\n };\n\n proto.join = function () {\n var joined = [].slice.call(arguments, 0).join('/');\n return this.normalize(joined);\n };\n\n proto._getApiUrl = function(id) {\n\n id = id ? '/' + id : '';\n\n var url = this.join(\n this.options.prefix,\n this.options.path,\n this.options.level,\n this.options.resourceGroup,\n this.options.version,\n this.options.url,\n id);\n\n return url + this.options.suffix;\n };\n\n proto.create = function(data, config) {\n\n if(!data) {\n throw new Error('called method without [data]');\n }\n\n if(this.beforeCreate) {\n data = this.beforeCreate(data);\n }\n\n config = this._config(config);\n config.method = 'POST';\n config.url = this._getUrl();\n config.data = data;\n\n return this._request(config, this.afterCreate);\n\n };\n\n proto.get = function(id, config) {\n\n if(!id) {\n throw new Error('called method without [id]');\n }\n\n config = this._config(config);\n if(config.cacheBust) {\n config = this._cacheBust(config);\n }\n config.method = 'GET';\n config.url = this._getUrl(id);\n\n\n return this._request(config, this.afterGet);\n\n };\n\n proto.query = function(config) {\n\n config = this._config(config);\n if(config.cacheBust) {\n config = this._cacheBust(config);\n }\n config.method = 'GET';\n config.url = this._getUrl();\n\n return this._request(config, this.afterQuery);\n\n };\n\n proto.update = function(id, data, config) {\n\n var url;\n\n if(_.isString(id) || _.isNumber(id)) {\n url = this._getUrl(id);\n }else {\n url = this._getUrl();\n // At this point the function signature becomes:\n //\n // proto.update = function(data, config) {} a.k.a function(id, data)\n //\n config = data; // config is really the 2nd param\n data = id; // data is really the first param\n }\n\n if(this.beforeUpdate) {\n data = this.beforeUpdate(data);\n }\n\n config = this._config(config);\n config.method = 'PUT';\n config.url = url;\n config.data = data;\n\n return this._request(config, this.afterUpdate);\n\n };\n\n proto.remove = function(id, config) {\n\n var url;\n var data;\n\n if(_.isString(id) || _.isNumber(id)) {\n url = this._getUrl(id);\n }else {\n // At this point the function signature becomes:\n //\n // proto.remove = function(data, config)\n //\n url = this._getUrl();\n data = id;\n }\n\n config = this._config(config);\n config.method = 'DELETE';\n config.url = url;\n config.data = data;\n\n return this._request(config, this.afterRemove);\n };\n\n proto.beforeCreate = null;\n proto.afterCreate = null;\n proto.afterQuery = null;\n proto.afterGet = null;\n proto.beforeUpdate = null;\n proto.afterUpdate = null;\n proto.afterRemove = null;\n\n return AvApiResource;\n\n };\n\n availity.core.factory('AvApiResource', ApiResourcesFactory);\n\n})(window);\n\n// Source: /lib/core/api/api-users.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n var UserServiceFactory = function(AvApiResource) {\n\n var AvUsersResource = function() {\n AvApiResource.call(this, 'users');\n };\n\n angular.extend(AvUsersResource.prototype, AvApiResource.prototype, {\n\n afterGet: function(response) {\n var user = response.data.user ? response.data.user : response.data;\n return user;\n },\n\n me: function(config) {\n return this.get('me', config);\n }\n\n });\n\n return new AvUsersResource();\n\n };\n\n availity.core.factory('avUsersResource', UserServiceFactory);\n\n})(window);\n\n// Source: /lib/core/api/api-coverages.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avCoveragesResource', function(AvApiResource) {\n return new AvApiResource({version: '/v1', url: '/configurations', cache: false});\n });\n\n})(window);\n\n// Source: /lib/core/api/api-configurations.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avConfigurationsResource', function(AvApiResource) {\n return new AvApiResource({version: '/v1', url: '/configurations'});\n });\n\n})(window);\n\n// Source: /lib/core/api/api-log-messages.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n var LogMessagesFactory = function(AvApiResource) {\n\n var AvLogMessagesResource = function() {\n\n AvApiResource.call(this, {\n version: '/v1',\n url: '/log-messages'\n });\n };\n\n angular.extend(AvLogMessagesResource.prototype, AvApiResource.prototype, {\n\n buildRequest: function(level, entries) {\n\n var requestPayload = {};\n\n if(entries.level) {\n delete entries.level;\n }\n\n requestPayload.level = level;\n requestPayload.entries = entries;\n\n return requestPayload;\n },\n\n debug: function(entries) {\n return this.create(this.buildRequest('debug', entries));\n },\n\n info: function(entries) {\n return this.create(this.buildRequest('info', entries));\n },\n\n warn: function(entries) {\n return this.create(this.buildRequest('warn', entries));\n },\n\n error: function(entries) {\n return this.create(this.buildRequest('error', entries));\n }\n\n });\n\n return new AvLogMessagesResource();\n\n };\n\n availity.core.factory('avLogMessagesResource', LogMessagesFactory);\n\n})(window);\n\n// Source: /lib/core/api/api-documents.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n var AvDocumentsResourceFactory = function(AvApiResource) {\n\n var AvDocumentsResource = function() {\n AvApiResource.call(this, 'documents');\n };\n\n angular.extend(AvDocumentsResource.prototype, AvApiResource.prototype, {\n\n getContents: function(id) {\n var config = this._config();\n config.url = this.getContentsUrl(id);\n return this._request(config);\n },\n\n getContentsUrl: function(id) {\n return this._getUrl(id) + '/contents';\n }\n\n });\n\n return new AvDocumentsResource();\n\n };\n\n availity.core.factory('avDocumentsResource', AvDocumentsResourceFactory);\n\n})(window);\n\n// Source: /lib/core/api/api-organizations.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n var OrganizationResourceFactory = function(AvApiResource) {\n\n var OrganizationResource = function() {\n AvApiResource.call(this, 'organizations');\n };\n\n angular.extend(OrganizationResource.prototype, AvApiResource.prototype, {\n\n getOrganizations: function(config) {\n return this.query(config).then(function(response) {\n return response.data.organizations ? response.data.organizations : response.data;\n });\n }\n\n });\n\n return new OrganizationResource();\n };\n\n availity.core.factory('avOrganizationsResource', OrganizationResourceFactory);\n\n})(window);\n\n// Source: /lib/core/api/api-codes.js\n(function(root) {\n\n 'use strict';\n\n\n var availity = root.availity;\n\n availity.core.factory('avCodesResource', function(AvApiResource) {\n return new AvApiResource({version: '/v1', url: '/codes'});\n });\n\n var AvCodesResourceFactory = function(AvApiResource) {\n\n var AvCodesResource = function () {\n AvApiResource.call(this, 'codes');\n };\n\n angular.extend(AvCodesResource.prototype, AvApiResource.prototype, {\n\n getCodes: function (data) {\n\n // config for the api resource query\n var config = {};\n config.params = {};\n\n if(data.page) {\n config.params.offset = 50 * (data.page - 1);\n }\n if(data.offset) {\n config.params.offset = data.offset;\n }\n if(data.list) {\n config.params.list = data.list;\n }\n if(data.q) {\n config.params.q = data.q;\n }\n\n return this.query(config).then(function (response) {\n // Format the response into something select2 can read\n var results = response.data.codes;\n if(results && !_.has(results[0], 'id')) {\n _.each(results, function (code) {\n code.id = code.code;\n });\n }\n\n // calculate if we want to continue searching\n var moreVal = response.data.offset < response.data.totalCount - response.data.limit;\n return {\n more: moreVal,\n results: results\n };\n\n });\n }\n\n });\n\n return new AvCodesResource();\n\n };\n\n availity.core.factory('avCodesResource', AvCodesResourceFactory);\n\n})(window);\n\n// Source: /lib/core/api/api-user-permissions.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n var AvUserPermissionsResourceFactory = function(AvApiResource) {\n\n var AvUserPermissionsResource = function() {\n AvApiResource.call(this, {\n level: '/internal',\n version: '/v1',\n url: '/axi-user-permissions'\n });\n this.sessionDate = moment().toISOString();\n };\n\n angular.extend(AvUserPermissionsResource.prototype, AvApiResource.prototype, {\n\n afterQuery: function(response) {\n return response.data.axiUserPermissions ? response.data.axiUserPermissions : [];\n },\n\n getPermissions: function(permissionIds, region) {\n var self = this;\n return this.query({\n params: {\n permissionId: permissionIds,\n region: region,\n sessionDate: self.sessionDate\n }\n });\n }\n\n });\n\n return new AvUserPermissionsResource();\n\n };\n\n availity.core.factory('avUserPermissionsResource', AvUserPermissionsResourceFactory);\n\n})(window);\n\n// Source: /lib/core/authorizations/user-authorizations.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n var AvUserAuthorizationsFactory = function($q, $log, avUserPermissionsResource) {\n\n /**\n *\n * @constructor\n */\n var AvUserAuthorizations = function() {\n /**\n * Region is used to return permission/resources relative to region. If null service will\n * return all permission relative to current. If value 'ALL' used it will return value relative\n * to all regions the user has access to.\n * @type {string}\n */\n this.region = null;\n /**\n * PermissionIds contains the set of permissionIds to request from service. If user of service calls\n * setPermissionIds() or call getPermissions() with complete set of permissionIds needed by application,\n * then service should only make that one hit to retrieve permission information.\n * @type {Array}\n */\n this.permissionIds = [];\n };\n\n var proto = AvUserAuthorizations.prototype;\n\n proto.setRegion = function(region) {\n this.region = region;\n return this;\n };\n\n proto.setPermissionIds = function(permissionIds) {\n if(!angular.isArray(permissionIds)) {\n throw new Error('permissionsIds must be an array of string IDs for avUserAuthorizations#addPermissionIds');\n }\n this.permissionIds = permissionIds;\n return this;\n };\n\n proto.isAuthorized = function(permissionId) {\n return this.getPermission(permissionId).then(function(permission) {\n return permission.isAuthorized;\n });\n };\n\n proto.isAnyAuthorized = function(permissionIds) {\n return this.getPermissions(permissionIds).then(function(permissions) {\n var permission = _.findWhere(permissions, {isAuthorized: true});\n return permission !== undefined;\n });\n };\n\n proto.getPermission = function(permissionId) {\n if(!angular.isString(permissionId)) {\n throw new Error('permissionsId must be a string ID for avUserAuthorizations#getPermission');\n }\n\n return this.getPermissions([permissionId])\n .then(function(_permissions) {\n return _permissions[permissionId];\n });\n };\n\n proto.getPermissions = function(permissionIds) {\n var self = this;\n\n if(!angular.isArray(permissionIds)) {\n throw new Error('permissionsIds must be an array of string IDs for avUserAuthorizations#getPermissions');\n }\n // merge permission ids to reduce calls to backend\n self.permissionIds = _.union(self.permissionIds, permissionIds);\n\n return avUserPermissionsResource\n .getPermissions(self.permissionIds, self.region)\n .then(function(_permissions) {\n return self.toPermissionMap(permissionIds, _permissions);\n });\n };\n\n proto.getOrganizations = function(permissionId) {\n return this.getPermission(permissionId).then(function(permission) {\n return permission.organizations;\n });\n };\n\n proto.getPayers = function(permissionId, organizationId) {\n return this.getPermission(permissionId).then(function(permission) {\n var organization = _.findWhere(permission.organizations, {id: organizationId});\n\n if(organization && organization.resources) {\n return organization.resources;\n }\n return [];\n });\n\n };\n\n /**\n * Converts array permissions to map with value for each permissionId, creating empty permission\n * if can't find permission in array\n * @private\n */\n proto.toPermissionMap = function(permissionIds, permissions) {\n var self = this;\n var map = {};\n permissions = _.slice(permissions);\n _.forEach(permissionIds, function(permissionId) {\n var key = {id: permissionId};\n var permission = _.findWhere(permissions, key);\n permission = permission ? self.toPermission(permission) : self.toPermission(key);\n map[permission.id] = permission;\n });\n return map;\n };\n\n /**\n * Convert a permission resource into a structure that is easier to work with.\n * @private\n */\n proto.toPermission = function(permission) {\n return {\n id: permission.id,\n description: permission.description ? permission.description : '',\n geographies: permission.geographies ? permission.geographies : [],\n organizations: permission.organizations ? permission.organizations : [],\n isAuthorized: permission.organizations ? permission.organizations.length > 0 : false\n };\n };\n\n return new AvUserAuthorizations();\n\n };\n\n availity.core.factory('avUserAuthorizations', AvUserAuthorizationsFactory);\n\n})(window);\n\n// Source: /lib/core/session/session.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_SESSION', {\n SESSION_TIMEOUT: 'av:auth:session:timeout',\n NOT_AUTHORIZED: 'av:auth:not:authorized'\n });\n\n availity.core.factory('avSession', function($q, avUsersResource) {\n\n var AvSession = function() {\n this.user = null;\n this.permissions = null;\n };\n\n var proto = AvSession.prototype;\n\n proto.getUser = function() {\n var self = this;\n\n if(this.user) {\n return $q.when(this.user);\n }\n\n return avUsersResource.me().then(function(user) {\n self.user = user;\n return self.user;\n });\n };\n\n\n proto.destroy = function() {\n this.user = null;\n this.permisions = null;\n };\n\n return new AvSession();\n });\n\n})(window);\n\n// Source: /lib/core/idle/idle.js\n// Inspiration => https://github.com/HackedByChinese/ng-idle\n//\n// Rules:\n//\n// * ping after 3 minutes from last human activity\n// * reset session after api success except 401\n// * idle show after 25 of inactivity\n//\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_IDLE', {\n EVENTS: {\n IDLE_INACTIVE: 'av:idle:inactive',\n IDLE_ACTIVE: 'av:idle:active',\n SESSION_TIMEOUT_ACTIVE: 'av:idle:session:active',\n SESSION_TIMEOUT_REDIRECT: 'av:idle:session:redirect',\n HUMAN: 'keydown.av.idle mousedown.av.idle keydown.av.idle',\n MACHINE: '$locationChangeSuccess'\n },\n INTERVALS: {\n PING: 3 * 60 * 1000, // 3 minutes\n IDLE: 25 * 60 * 1000, // 25 minutes\n SESSION: 30 * 60 * 1000 // 30 minutes\n },\n URLS: {\n HOME: '/availity/web/public.elegant.login',\n PING: '/api/v1/users/me'\n }\n });\n\n availity.core.provider('avIdle', function(AV_IDLE) {\n\n var enabled = false;\n var pingUrl;\n var redirectUrl;\n var sessionTimeout;\n var idleTimeout;\n var pingTimeout;\n\n this.enable = function(value) {\n if(arguments.length) {\n enabled = !!value;\n }\n return enabled;\n };\n\n this.setSessionTimeout = function(timeout) {\n sessionTimeout = timeout || AV_IDLE.INTERVALS.SESSION;\n };\n\n this.setIdleTimeout = function(timeout) {\n idleTimeout = timeout || AV_IDLE.INTERVALS.IDLE;\n };\n\n this.setPingTimeout = function(timeout) {\n pingTimeout = timeout || AV_IDLE.INTERVALS.PING;\n };\n\n this.setPingUrl = function(url) {\n pingUrl = url || AV_IDLE.URLS.PING;\n };\n\n this.$get = function(AV_IDLE, $log, $document, $rootScope, $timeout, avThrottle, $q, $injector) {\n\n var AvIdle = function() {\n\n // $timeout references\n this._idleTimer = null;\n this._sessionTimer = null;\n this._pingTimer = null;\n this._keepAlive = null;\n\n // flag used to track if the if user is idle or session expired\n this.idleActive = false;\n this.sessionActive = false;\n\n this.listeners = [];\n\n this.init();\n\n };\n\n var proto = AvIdle.prototype;\n\n proto.init = function() {\n\n if(!enabled) {\n this.stop();\n return;\n }\n\n this.start();\n };\n\n proto.start = function() {\n\n $log.info('avIdle start');\n\n var self = this;\n var listener;\n\n !sessionTimeout && this.setSessionTimeout();\n !idleTimeout && this.setIdleTimeout();\n !pingTimeout && this.setPingTimeout();\n !pingUrl && this.setPingUrl();\n !redirectUrl && this.setRedirectUrl();\n\n $rootScope.$on('$destroy', function() {\n self.stop();\n });\n\n $document.find('body').on(AV_IDLE.EVENTS.HUMAN, function(event) {\n self.onEvent(event);\n });\n\n listener = $rootScope.$on(AV_IDLE.EVENTS.MACHINE, function(event, oldUrl, newUrl) {\n if(oldUrl !== newUrl) {\n self.onEvent(event);\n }\n });\n this.listeners.push(listener);\n\n $rootScope.$on(AV_IDLE.EVENTS.SESSION_TIMEOUT_REDIRECT, function() {\n document.location.href = redirectUrl;\n });\n\n this.startIdleTimer();\n this.startSessionTimer();\n };\n\n proto.stop = function() {\n\n $document.find('body').off(AV_IDLE.EVENTS.HUMAN);\n\n // turns off Angular event listeners @see http://stackoverflow.com/a/14898795\n _.each(this.listeners, function(listener) {\n listener();\n });\n\n this.stopPing();\n this.stopSessionTimer();\n this.stopIdleTimer();\n };\n\n proto.isEnabled = function() {\n return enabled;\n };\n\n proto.enable = function(value) {\n if(arguments.length) {\n enabled = !!value;\n }\n\n return this;\n };\n\n proto.setSessionTimeout = function(timeout) {\n sessionTimeout = timeout || AV_IDLE.INTERVALS.SESSION;\n return this;\n };\n\n proto.setIdleTimeout = function(timeout) {\n idleTimeout = timeout || AV_IDLE.INTERVALS.IDLE;\n return this;\n };\n\n proto.setPingTimeout = function(timeout) {\n pingTimeout = timeout || AV_IDLE.INTERVALS.PING;\n return this;\n };\n\n proto.setPingUrl = function(url) {\n pingUrl = url || AV_IDLE.URLS.PING;\n return this;\n };\n\n proto.setRedirectUrl = function(url) {\n redirectUrl = url || AV_IDLE.URLS.HOME;\n return this;\n };\n\n proto.response = function(response) {\n\n if(this.isApiRequest(response)) {\n this.startSessionTimer();\n }\n\n return response;\n };\n\n proto.isApiRequest = function(response) {\n return response && response.config && response.config.api;\n };\n\n proto.responseError = function(response) {\n\n if(this.isApiRequest(response) && response.status !== 401) {\n this.startSessionTimer();\n }\n\n if(this.isApiRequest() && response.status === 401) {\n this.stopPing();\n }\n\n return $q.reject(response);\n };\n\n proto.startSessionTimer = function() {\n\n var self = this;\n\n this.stopSessionTimer();\n\n var later = function() {\n $log.info('avIdle session has TIMED OUT');\n self.stop();\n $rootScope.$broadcast(AV_IDLE.EVENTS.SESSION_TIMEOUT_ACTIVE);\n };\n\n $log.info('avIdle session timer has STARTED');\n this._sessionTimer = $timeout(later, sessionTimeout, false);\n\n };\n\n proto.stopSessionTimer = function() {\n $log.info('avIdle session timer has STOPPED');\n $timeout.cancel(this._sessionTimer);\n };\n\n proto.startIdleTimer = function() {\n\n var self = this;\n\n this.stopIdleTimer();\n\n var later = function() {\n self.stopIdleTimer();\n $log.info('avIdle is IDLING');\n $rootScope.$broadcast(AV_IDLE.EVENTS.IDLE_ACTIVE);\n };\n\n $log.info('avIdle idle timer has STARTED');\n this._idleTimer = $timeout(later, idleTimeout, false);\n };\n\n proto.stopIdleTimer = function() {\n $log.info('avIdle idle timer has STOPPED');\n $timeout.cancel(this._idleTimer);\n };\n\n proto.startPing = function() {\n\n if(!this._keepAlive) {\n $log.info('avIdle ping timer has STARTED');\n this._keepAlive = avThrottle(this.keepAlive, pingTimeout, {context: this});\n }\n\n this._pingTimer = this._keepAlive();\n };\n\n proto.stopPing = function() {\n $log.info('avIdle ping timer has STOPPED');\n if(this._pingTimer) {\n $timeout.cancel(this._pingTimer);\n }\n };\n\n proto.keepAlive = function() {\n\n // destroy the reference to that a new throttle gets created upon\n // next user or system event\n this._keepAlive = null;\n var $http = $injector.get('$http');\n\n $http.get(pingUrl, {\n cache: false,\n api: true\n }).success(function() {\n $log.info('avIdle keep-alive SUCCESS');\n }).error(function() {\n $log.error('avIdle keep-alive FAILURE');\n });\n };\n\n proto.onEvent = function() {\n this.startIdleTimer();\n this.startPing();\n };\n\n return new AvIdle();\n\n };\n\n });\n\n})(window);\n\n// Source: /lib/core/idle/idle-interceptor.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avIdleInterceptor', function(avIdle) {\n return {\n response: function(response) {\n return avIdle.response(response);\n },\n responseError: function(response) {\n return avIdle.responseError(response);\n }\n };\n\n });\n\n availity.core.config(function($httpProvider) {\n $httpProvider.interceptors.push('avIdleInterceptor');\n });\n\n})(window);\n\n// Source: /lib/core/validation/validator.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.value('avValConfig', {\n classes: {\n valid: 'ng-valid',\n invalid: 'ng-invalid',\n dirty: 'ng-dirty',\n pristine: 'ng-pristine',\n touched: 'ng-touched',\n untouched: 'ng-untouched',\n submitted: 'ng-submitted'\n },\n validators: [\n 'avValPattern',\n 'avValSize',\n 'avValRequired',\n 'avValDateRange',\n 'avValDate',\n 'avValPhone',\n 'avValEmail',\n 'avValNpi'\n ]\n });\n\n availity.core.constant('AV_VAL', {\n EVENTS: {\n REVALIDATE: 'av:val:revalidate',\n SUBMITTED: 'av:val:submitted',\n FAILED: 'av:val:failed',\n RESET: 'av:val:reset'\n },\n DEBOUNCE: 800,\n DATE_FORMAT: {\n SIMPLE: 'MM/DD/YYYY'\n },\n PATTERNS: {\n ALPHA_ONLY: /[^A-Za-z]+/g,\n NUMERIC_ONLY: /[^0-9]+/g\n }\n });\n\n availity.core.provider('avVal', function() {\n\n var validators = [];\n var rules = {};\n var services = {};\n\n this.addRules = function(_rules) {\n rules = angular.extend({}, rules, _rules);\n return rules;\n };\n\n this.addValidators = function(_validators) {\n validators = validators.concat(_validators);\n return validators;\n };\n\n this.$get = function($injector, $rootScope, $http, $log, avValConfig, AV_VAL) {\n\n var AvValidation = function() {\n this.initValidators();\n };\n\n var proto = AvValidation.prototype;\n\n proto.initValidators = function() {\n var self = this;\n\n validators = avValConfig.validators.concat(validators);\n\n angular.forEach(validators, function(name) {\n self.addValidator(name);\n });\n\n };\n\n proto.addValidator = function(name) {\n var validator = $injector.get(name);\n services[validator.name] = validator;\n };\n\n proto.addRules = function(_rules) {\n rules = angular.extend({}, rules, _rules);\n $rootScope.$broadcast(AV_VAL.EVENTS.REVALIDATE);\n };\n\n proto.validate = function(key, element, value, ruleName) {\n\n var ruleConfig = rules[key];\n if(!ruleConfig) {\n $log.error('Failed to get rules key [' + key + ']. Forms must be tagged with a rules set name for validation to work.');\n return;\n }\n\n var contraints = ruleConfig[ruleName];\n if(!contraints) {\n $log.info('Rule named [' + ruleName + '] could not be found in the current schema.');\n contraints = [];\n }\n\n var el = element[0];\n var results = [];\n var violations = [];\n var _valid = true;\n\n angular.forEach(contraints, function(rule, contraintName) {\n\n if(!rule) {\n // when extended rule sets, a user can pass nulls to cancel out a rule so if\n // one doesn't exist just continue\n return;\n }\n\n var validator = services[contraintName];\n\n if(angular.isUndefined(validator)) {\n $log.warn('No validator defined for `' + name + '`');\n return;\n }\n\n var valid = validator.validate(value, rule, element);\n\n var validationResult = {\n valid: valid,\n ruleName: ruleName,\n contraintName: contraintName,\n value: value,\n message: rule.message,\n field: el.name || el.id\n };\n\n var result = angular.extend({}, rule, validationResult);\n\n results.push(result);\n if(!valid) {\n violations.push(validationResult);\n }\n _valid = _valid && valid;\n\n });\n\n return {\n isValid: _valid,\n all: results, // all the constraint results\n violations: violations\n };\n\n };\n\n return new AvValidation();\n\n };\n\n });\n})(window);\n\n// Source: /lib/core/validation/validators/validator-utils.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValUtils', function() {\n\n return {\n\n isDefined: function(value) {\n return angular.isDefined(value) && value !== '' && value !== null;\n },\n\n isEmpty: function(value) {\n return !this.isDefined(value) || $.trim(value) === '';\n }\n };\n\n });\n})(window);\n\n\n// Source: /lib/core/validation/validators/validator-size.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValSize', function(avValUtils) {\n\n var validator = {\n\n name: 'size',\n\n validate: function(value, rule) {\n\n var min = rule.min || 0;\n var max = rule.max;\n var type = rule.type ? rule.type.toLowerCase() : 'text';\n\n if(_.isNull(value) || _.isUndefined(value)) {\n value = '';\n }\n\n if(type === 'text') {\n value = value + '';\n return avValUtils.isEmpty(value) || value.length >= min && (max === undefined || value.length <= max);\n }\n\n // ... must be a Number\n if(!_.isNumber(value) && /^\\d+$/.test(value)) {\n value = parseInt(value, 10);\n }\n\n return avValUtils.isEmpty(value) || value >= min && (max === undefined || value <= max);\n\n }\n };\n\n return validator;\n\n });\n})(window);\n\n// Source: /lib/core/validation/validators/validator-pattern.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValPattern', function(avValUtils) {\n\n var validator = {\n name: 'pattern',\n REGEX: /^\\/(.*)\\/([gim]*)$/, //regular expression to test a regular expression\n asRegExp: function(pattern) {\n var match;\n\n if(pattern.test) {\n return pattern;\n } else {\n match = pattern.match(validator.REGEX);\n if(match) {\n return new RegExp(match[1], match[2]);\n } else {\n throw ('Expected ' + pattern + ' to be a RegExp');\n }\n }\n },\n validate: function(value, rule) {\n var values = _.isArray(rule.value) ? rule.value : [rule.value];\n\n var valid = false;\n\n _.each(values, function(expresion) {\n var pattern = validator.asRegExp(expresion);\n if(avValUtils.isEmpty(value) || pattern.test(value)) {\n valid = true;\n }\n });\n\n return valid;\n }\n };\n\n return validator;\n\n });\n})(window);\n\n// Source: /lib/core/validation/validators/validator-required.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValRequired', function(avValUtils) {\n\n var validator = {\n name: 'required',\n validate: function(value, rule, element) {\n\n // Using ngModelController.$isEmpty for required checks. A form component being empty is dependent on the\n // type of field:\n //\n // - radio\n // - checkbox\n // - text\n // - lists\n //\n // You can override $isEmpty for input directives whose concept of being empty is different to the\n // default. Radio and checkboxes directive do this because in its case a value of `false`\n // implies empty.\n //\n var ctrl = element && element.data('$ngModelController');\n if(ctrl) {\n return !ctrl.$isEmpty(value);\n }\n\n return !avValUtils.isEmpty(value);\n\n }\n };\n\n return validator;\n\n });\n})(window);\n\n// Source: /lib/core/validation/validators/validator-date-range.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValDateRange', function(AV_VAL, avValUtils) {\n\n var validator = {\n\n name: 'dateRange',\n\n getStartDate: function(start) {\n return validator.setMin(moment().add(start.value, start.units));\n },\n\n getEndDate: function(end) {\n return validator.setMax(moment().add(end.value, end.units) );\n },\n\n setMin: function(value) {\n\n // [fix]: if time is provided this may cause issues.\n value.set('hours', 0);\n value.set('minutes', 0);\n value.set('seconds', 0);\n\n return value;\n },\n\n setMax: function(value) {\n\n // [fix]: if time is provided this may cause issues.\n value.set('hours', 23);\n value.set('minutes', 59);\n value.set('seconds', 59);\n\n return value;\n },\n\n validation: function(value, rules) {\n\n var date;\n var startDate;\n var endDate;\n\n date = moment(value, rules.format || AV_VAL.DATE_FORMAT.SIMPLE);\n date.set('hours', 0);\n date.set('minutes', 0);\n date.set('seconds', 0);\n\n if(!avValUtils.isEmpty(rules.start.units) && !avValUtils.isEmpty(rules.end.units)) {\n startDate = validator.getStartDate(rules.start);\n endDate = validator.getEndDate(rules.end);\n } else {\n startDate = moment(rules.start.value, rules.format);\n endDate = validator.setMax(moment(rules.end.value, rules.format));\n }\n return date.isValid() && date.isBetween(startDate, endDate, 'day') || date.isSame(startDate, 'day') || date.isSame(endDate, 'day');\n },\n\n validate: function(value, rule) {\n return avValUtils.isEmpty(value) || validator.validation(value, rule);\n }\n\n };\n\n return validator;\n });\n})(window);\n\n// Source: /lib/core/validation/validators/validator-date-format.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValDate', function(AV_VAL, avValUtils) {\n\n var validator = {\n name: 'dateFormat',\n validate: function(value, rules) {\n var format = rules && rules.format ? rules.format : AV_VAL.DATE_FORMAT.SIMPLE;\n return avValUtils.isEmpty(value) || moment(value, format, true).isValid();\n }\n };\n return validator;\n });\n})(window);\n\n// Source: /lib/core/validation/validators/validator-npi.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValNpi', function() {\n\n\n var validator = {\n\n name: 'npi',\n\n INTEGER_REGEX: /^\\d*$/,\n\n validate: function(value) {\n\n var npi = value || '';\n\n if (!validator.INTEGER_REGEX.test(npi) || npi.length !== 10) {\n return false;\n }\n\n var firstDigit = npi.charAt(0);\n if(!('1' === firstDigit || '2' === firstDigit || '3' === firstDigit || '4' === firstDigit)) {\n return false;\n }\n\n var digit = parseInt(npi.charAt(9), 10);\n npi = npi.substring(0, 9);\n npi = \"80840\" + npi;\n\n var alternate = true;\n var total = 0;\n\n for (var i = npi.length; i > 0; i--) {\n var next = parseInt(npi.charAt(i-1), 10);\n if (alternate) {\n next = next*2;\n if (next > 9) {\n next = (next % 10) + 1;\n }\n }\n total += next;\n alternate = !alternate;\n }\n\n var roundUp = Math.ceil(total / 10) * 10;\n var calculatedCheck = roundUp - total;\n\n if (calculatedCheck !== digit) {\n return false;\n }\n\n return true;\n }\n\n };\n\n return validator;\n\n });\n\n})(window);\n\n// Source: /lib/core/validation/validators/validator-phone.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValPhone', function(avValPattern) {\n\n var PHONE_PATTERN = /^([0-9][\\.\\-]?)?[(]{0,1}[0-9]{3}[)\\.\\- ]{0,1}[0-9]{3}[\\.\\- ]{0,1}[0-9]{4}$/;\n\n var validator = {\n name: 'phone',\n validate: function(value, rule) {\n return avValPattern.validate(value, angular.extend({}, rule, { value: PHONE_PATTERN }));\n }\n };\n\n return validator;\n\n });\n})(window);\n\n// Source: /lib/core/validation/validators/validator-email.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValEmail', function(avValPattern) {\n\n var EMAIL_PATTERN = /[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;\n\n var validator = {\n name: 'email',\n validate: function(value, rule) {\n return avValPattern.validate(value, angular.extend({}, rule, { value: EMAIL_PATTERN }));\n }\n };\n\n return validator;\n\n });\n})(window);\n\n// Source: /lib/core/utils/globals.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_GLOBALS', {\n REGIONS: [\n {\n 'name': 'Alabama',\n 'code': 'AL'\n },\n {\n 'name': 'Alaska',\n 'code': 'AK'\n },\n {\n 'name': 'Arizona',\n 'code': 'AZ'\n },\n {\n 'name': 'Arkansas',\n 'code': 'AR'\n },\n {\n 'name': 'California',\n 'code': 'CA'\n },\n {\n 'name': 'Colorado',\n 'code': 'CO'\n },\n {\n 'name': 'Connecticut',\n 'code': 'CT'\n },\n {\n 'name': 'Delaware',\n 'code': 'DE'\n },\n {\n 'name': 'District Of Columbia',\n 'code': 'DC'\n },\n {\n 'name': 'Florida',\n 'code': 'FL'\n },\n {\n 'name': 'Georgia',\n 'code': 'GA'\n },\n {\n 'name': 'Hawaii',\n 'code': 'HI'\n },\n {\n 'name': 'Idaho',\n 'code': 'ID'\n },\n {\n 'name': 'Illinois',\n 'code': 'IL'\n },\n {\n 'name': 'Indiana',\n 'code': 'IN'\n },\n {\n 'name': 'Iowa',\n 'code': 'IA'\n },\n {\n 'name': 'Kansas',\n 'code': 'KS'\n },\n {\n 'name': 'Kentucky',\n 'code': 'KY'\n },\n {\n 'name': 'Louisiana',\n 'code': 'LA'\n },\n {\n 'name': 'Maine',\n 'code': 'ME'\n },\n {\n 'name': 'Maryland',\n 'code': 'MD'\n },\n {\n 'name': 'Massachusetts',\n 'code': 'MA'\n },\n {\n 'name': 'Michigan',\n 'code': 'MI'\n },\n {\n 'name': 'Minnesota',\n 'code': 'MN'\n },\n {\n 'name': 'Mississippi',\n 'code': 'MS'\n },\n {\n 'name': 'Missouri',\n 'code': 'MO'\n },\n {\n 'name': 'Montana',\n 'code': 'MT'\n },\n {\n 'name': 'Nebraska',\n 'code': 'NE'\n },\n {\n 'name': 'Nevada',\n 'code': 'NV'\n },\n {\n 'name': 'New Hampshire',\n 'code': 'NH'\n },\n {\n 'name': 'New Jersey',\n 'code': 'NJ'\n },\n {\n 'name': 'New Mexico',\n 'code': 'NM'\n },\n {\n 'name': 'New York',\n 'code': 'NY'\n },\n {\n 'name': 'North Carolina',\n 'code': 'NC'\n },\n {\n 'name': 'North Dakota',\n 'code': 'ND'\n },\n {\n 'name': 'Ohio',\n 'code': 'OH'\n },\n {\n 'name': 'Oklahoma',\n 'code': 'OK'\n },\n {\n 'name': 'Oregon',\n 'code': 'OR'\n },\n {\n 'name': 'Pennsylvania',\n 'code': 'PA'\n },\n {\n 'name': 'Rhode Island',\n 'code': 'RI'\n },\n {\n 'name': 'South Carolina',\n 'code': 'SC'\n },\n {\n 'name': 'South Dakota',\n 'code': 'SD'\n },\n {\n 'name': 'Tennessee',\n 'code': 'TN'\n },\n {\n 'name': 'Texas',\n 'code': 'TX'\n },\n {\n 'name': 'Utah',\n 'code': 'UT'\n },\n {\n 'name': 'Vermont',\n 'code': 'VT'\n },\n {\n 'name': 'Virginia',\n 'code': 'VA'\n },\n {\n 'name': 'Washington',\n 'code': 'WA'\n },\n {\n 'name': 'West Virginia',\n 'code': 'WV'\n },\n {\n 'name': 'Wisconsin',\n 'code': 'WI'\n },\n {\n 'name': 'Wyoming',\n 'code': 'WY'\n }\n ]\n });\n\n})(window);\n\n// Source: /lib/core/analytics/analytics.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_ANALYTICS', {\n VIRTUAL_PAGE_TRACKING: true,\n SERVICES: {\n PIWIK: 'avPiwikAnalytics',\n SPLUNK: 'avSplunkAnalytics'\n },\n EVENTS: {\n PAGE: '$locationChangeSuccess',\n DEFAULT: 'click'\n },\n PRE_FIX: /^avAnalytics(.*)$/,\n // should ignore these since they are part of the directives API\n IGNORE: ['avAnalyticsOn', 'avAnalyticsIf'],\n ENV: { // not sure if this should live here\n PROD: {\n DOMAIN: 'apps.availity.com',\n URL: 'https://piwik.availity.com/piwik/'\n },\n QA: {\n URL: 'https://qa-piwik.availity.com/piwik/'\n }\n }\n });\n\n availity.core.provider('avAnalytics', function(AV_ANALYTICS) {\n\n var plugins = [];\n var virtualPageTracking = AV_ANALYTICS.VIRTUAL_PAGE_TRACKING;\n var appId;\n\n this.registerPlugins = function(_plugins) {\n\n if(angular.isString(_plugins)) {\n _plugins = [_plugins];\n }\n\n if(_.isArray(_plugins)) {\n plugins = _plugins;\n } else {\n throw new Error('AvAnalytics.registerPlugins() expects a string or an array.');\n }\n\n return plugins;\n };\n\n this.setVirtualPageTracking = function(value) {\n if(arguments.length) {\n virtualPageTracking = !!value;\n }\n };\n\n this.isVirtualPageTracking = function() {\n return virtualPageTracking;\n };\n\n this.setAppID = function(id) {\n appId = id;\n return appId;\n };\n\n this.$get = function($injector, $q, $log, $rootScope, $location) {\n\n var AvAnalytics = function() {\n\n var self = this;\n this.services = {};\n\n if(!plugins || plugins.length === 0) {\n plugins = [AV_ANALYTICS.SERVICES.PIWIK, AV_ANALYTICS.SERVICES.SPLUNK];\n }\n\n angular.forEach(plugins, function(plugin) {\n\n try {\n self.services[plugin] = $injector.get(plugin);\n } catch(err) {\n $log.error('Could not load `{0}` plugin', [plugin]);\n }\n });\n\n };\n\n var proto = AvAnalytics.prototype;\n\n proto.init = function() {\n\n var self = this;\n\n if(this.isVirtualPageTracking()) {\n\n $rootScope.$on(AV_ANALYTICS.EVENTS.PAGE, function() {\n self.trackPageView($location.absUrl());\n });\n\n\n }\n\n angular.forEach(this.services, function(handler) {\n\n if(handler.isEnabled() && handler.init) {\n handler.init();\n }\n\n });\n\n };\n\n proto.trackEvent = function(properties) {\n\n var promises = [];\n\n angular.forEach(this.services, function(handler) {\n var promise = handler.trackEvent(properties);\n promises.push(promise);\n });\n\n return $q.all(promises);\n };\n\n proto.getAppId = function() {\n return appId;\n };\n\n proto.isVirtualPageTracking = function() {\n return virtualPageTracking;\n };\n\n proto.trackPageView = function(url) {\n\n var promises = [];\n\n angular.forEach(this.services, function(handler) {\n var promise = handler.trackPageView(url);\n promises.push(promise);\n });\n\n return $q.all(promises);\n };\n\n return new AvAnalytics();\n };\n\n });\n\n})(window);\n\n// Source: /lib/core/analytics/analytics-util.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avAnalyticsUtils', function(AV_ANALYTICS, $log) {\n\n var AnalyticsUtils = function() {};\n\n var proto = AnalyticsUtils.prototype;\n\n proto.getProperties = function(attributes) {\n\n var self = this;\n var props = {};\n\n _.forEach(attributes, function(value, key) {\n if(self.isValidAttribute(key) && self.isNotIgnored(key)) {\n var result = self.getAttribute(key, value);\n props[result.key] = result.value;\n }\n });\n\n return props;\n };\n\n // Function detects external links in order to allow the analytics framework to run\n // before the browser follows a link.\n //\n // - target=\"_self\" - This opens an anchor in the same frame\n // - target=\"_parent\" - Opens the in the next level up of a frame if they were nested to inside one another\n // - target=\"_top\" - Opens the link as top document in the browser window\n // - target=\"_blank\" - Opens link in new tab new tab\n //\n proto.isExternalLink = function(attrs) {\n return attrs.href && !attrs.ngClick;\n };\n\n proto.isNotIgnored = function(key) {\n var ignored = _.includes(AV_ANALYTICS.IGNORE, key);\n return !ignored;\n };\n\n proto.isValidAttribute = function(key) {\n return AV_ANALYTICS.PRE_FIX.test(key);\n };\n\n proto.lowercase = function(str) {\n return str.substr(0, 1).toLowerCase() + str.substr(1);\n };\n\n proto.getAttribute = function(key, value) {\n var simpleKey = key.match(AV_ANALYTICS.PRE_FIX);\n\n if(simpleKey && simpleKey[1]) {\n return {\n key: this.lowercase(simpleKey[1]),\n value: value\n };\n }\n };\n\n proto.toNum = function(value) {\n var parsed = parseInt(value, 10);\n value = isNaN(parsed) ? 0 : parsed;\n return value;\n };\n\n proto.isValid = function(trackingValues) {\n var valid = true;\n\n if(trackingValues.value || trackingValues.value === 0) {\n delete trackingValues.value;\n }\n\n _.forEach(trackingValues, function(key, value) {\n if(availity.isBlank(value) || _.isUndefined(value)) {\n $log.warn('The analytic tracking value for ' + key.toUpperCase() +' is not defined.');\n valid = false;\n }\n });\n\n return valid;\n };\n\n return new AnalyticsUtils();\n });\n})(window);\n\n// Source: /lib/core/analytics/analytics-splunk.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avSplunkAnalytics', function($log, avLogMessagesResource, $location) {\n\n var SplunkAnalyticsService = function() {};\n\n var proto = SplunkAnalyticsService.prototype;\n\n proto.trackEvent = function(properties) {\n properties.url = $location.$$absUrl || 'N/A';\n properties.level = properties.level || 'info';\n\n return avLogMessagesResource[properties.level](properties);\n };\n\n proto.trackPageView = function(url) {\n\n var properties = {\n event: 'page',\n level: 'info',\n url: url || $location.$$absUrl()\n };\n\n return avLogMessagesResource[properties.level](properties);\n };\n\n proto.isEnabled = function() {\n return true;\n };\n\n return new SplunkAnalyticsService();\n });\n\n})(window);\n\n// Source: /lib/core/analytics/analytics-piwik.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.provider('avPiwikAnalytics', function() {\n\n var self;\n var siteId;\n var enabled = false;\n var customVariables = [];\n\n this.enabled = function(_enabled) {\n enabled = !!_enabled;\n };\n\n // can not push these items to `_paq` because it is defined\n // after page has loaded\n this._setCustomVariable = function(index, valueName, value, scope) {\n\n if(!index || isNaN(index)) {\n throw new Error('index must be a number');\n } else if(!valueName) {\n throw new Error('valueName must be declared');\n } else {\n customVariables.push(['setCustomVariable', index, valueName, value, scope]);\n }\n };\n\n this.setSiteID = function(_siteID) {\n this.enabled(true);\n siteId = _siteID;\n };\n\n // allow the user to pass a array of visit variables\n this.setVisitVariables = function(items) {\n _.forEach(items, function(item) {\n self._setCustomVariable(item[0], item[1], item[2], 'visit');\n });\n };\n\n this.setPageVariables = function(index, name, value) {\n this._setCustomVariable(index, name, value, 'page');\n };\n\n this.$get = function(avAnalyticsUtils, avUsersResource, AV_ANALYTICS, $injector, $log, $q, $document, $location) {\n\n var AvPiwikAnalytics = function() {\n window._paq = window._paq || [];\n };\n\n var proto = AvPiwikAnalytics.prototype;\n\n proto.trackEvent = function(properties) {\n\n if(!window._paq) {\n $log.warn('Piwik object `_paq` not found in global scope');\n return $q.when(false);\n }\n\n // http://piwik.org/docs/event-tracking/\n //\n // PAQ requires that eventValue be an integer.\n // Check to make sure value is a number if not convert it to 0.\n //\n if(properties.value) {\n properties.value = avAnalyticsUtils.toNum(properties.event);\n }\n\n // check to make sure that data being sent to piwik is a string and not null, empty or undefined\n if(!avAnalyticsUtils.isValid(properties)) {\n $log.warn('Invalid properties being passed. Tracking info will not be sent.');\n return $q.when(false);\n }\n\n return $q.when(window._paq.push(['trackEvent', properties.category, properties.action || properties.event, properties.label, properties.value]));\n };\n\n proto.trackPageView = function(url) {\n\n if(!window._paq) {\n $log.warn('Piwik object `_paq` not found in global scope');\n return $q.when(false);\n }\n\n return $q.when([\n window._paq.push(['setCustomUrl', url]),\n window._paq.push(['trackPageView', url])]\n );\n\n };\n\n proto.init = function() {\n\n avUsersResource.me().then(function(user) {\n window._paq.push(['setUserId', user.id]);\n // self.trackPageView(); //send another page track when the user data loads\n });\n\n if(!_.isFinite(siteId)) {\n $log.warn('Invalid Piwik Site Id. Piwik analytics has been disabled.');\n return;\n }\n\n var url;\n\n if($location.$$host === AV_ANALYTICS.ENV.PROD.DOMAIN) {\n url = AV_ANALYTICS.ENV.PROD.URL;\n } else {\n url = AV_ANALYTICS.ENV.QA.URL;\n }\n\n window._paq.push(['enableLinkTracking']);\n window._paq.push(['setTrackerUrl', url + 'piwik.php']);\n window._paq.push(['setSiteId', siteId]);\n\n _.forEach(customVariables, function(variable) {\n window._paq.push(variable);\n });\n\n $.getScript(url + 'piwik.js', function() {\n\n });\n\n };\n\n\n proto.isEnabled = function() {\n return enabled && siteId;\n };\n\n return new AvPiwikAnalytics();\n };\n\n });\n\n})(window);\n\n// Source: /lib/core/analytics/analytics-exceptions.js\n\n\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_EXCEPTIONS', {\n MESSAGES: {\n NOT_APPLICABLE: 'N/A'\n },\n TYPES: {\n EXCEPTION: 'exception'\n }\n });\n\n availity.core.provider('avExceptionAnalytics', function() {\n\n var _enabled = true;\n var appId;\n\n this.enabled = function(enabled) {\n _enabled = !!enabled;\n };\n\n this.setAppId = function(_id) {\n appId = _id;\n };\n\n this.$get = function(avLogMessagesResource, $location, AV_EXCEPTIONS) {\n\n var AvExceptionAnalytics = function() {\n\n };\n\n var proto = AvExceptionAnalytics.prototype;\n\n proto.init = function() {\n\n var self = this;\n\n if(!_enabled) {\n return;\n }\n\n TraceKit.remoteFetching = false;\n TraceKit.surroundingLinesToCollect = 11;\n\n // subscribe() hooks into window.error\n TraceKit.report.subscribe(function(stacktrace) {\n self.onError(stacktrace);\n });\n\n };\n\n proto.prettyPrint = function(stacktrace) {\n\n var message = '';\n\n var length = stacktrace.stack.length;\n\n for(var i = 0; i < length; i++) {\n message += [\n '[' + _.padLeft(i + '', 2, '0') + '] ',\n stacktrace.stack[i].func,\n ' ',\n stacktrace.stack[i].url,\n ':',\n stacktrace.stack[i].line,\n ':',\n stacktrace.stack[i].column,\n i + 1 < length ? '\\n' : ''\n ].join('');\n\n }\n\n return message;\n };\n\n proto.onError = function(stacktrace) {\n\n var userAgent = root.navigator && root.navigator.userAgent ? root.navigator.userAgent : AV_EXCEPTIONS.MESSAGES.NOT_APPLICABLE;\n\n var message = {\n errorDate: moment(new Date()).format('YYYY-MM-DDTHH:mm:ssZZ'),\n errorName: stacktrace.name,\n errorMessage: stacktrace.message,\n errorStack: this.prettyPrint(stacktrace),\n url: $location.$$absUrl,\n appId: appId || AV_EXCEPTIONS.MESSAGES.NOT_APPLICABLE,\n // appVersion: AV_EXCEPTIONS.MESSAGES.NOT_APPLICABLE,\n userAgent: userAgent,\n userLanguage: navigator.userLanguage,\n referrer: document.referrer,\n host: document.domain,\n screenWidth: $(window).width(),\n screenHeight: $(window).height(),\n sdkVersion: availity.VERSION\n };\n\n return this.log(message);\n\n };\n\n proto.log = function(message) {\n return avLogMessagesResource['error'](message);\n };\n\n proto.trackEvent = function(exception) {\n\n if(!_enabled) {\n return;\n }\n\n var stacktrace = TraceKit.computeStackTrace(exception);\n\n return this.onError(stacktrace);\n\n };\n\n return new AvExceptionAnalytics();\n\n };\n });\n\n availity.core.config(function($provide) {\n\n $provide.decorator('$exceptionHandler', function($delegate, $injector) {\n return function(exception, cause) {\n $delegate(exception, cause);\n var errorTacking = $injector.get('avExceptionAnalytics');\n errorTacking.trackEvent(exception);\n };\n });\n\n });\n\n availity.core.run(function(avExceptionAnalytics) {\n avExceptionAnalytics.init();\n });\n\n})(window);\n\n// Source: /lib/core/analytics/analytics-config.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity || {};\n\n availity.analytics = angular.module('availity.config', ['ng', 'availity']);\n\n availity.analytics.run(function(avAnalytics) {\n\n avAnalytics.init();\n\n });\n\n})(window);\n\n\n// Source: /lib/core/utils/date-polyfill.js\n// Issue: https://github.com/angular/angular.js/issues/11165\n// Polyfill: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString\n//\n// This polyfill is needed because Angular calls toISOString()\n// when an request parameter is of type Date. If this polyfill isn't present\n// the ajax call fails.\n//\n(function() {\n\n 'use strict';\n\n var pad = function(number) {\n if(number < 10) {\n return '0' + number;\n }\n return number;\n };\n\n if(!Date.prototype.toISOString) {\n\n Date.prototype.toISOString = function() {\n\n return this.getUTCFullYear() +\n '-' + pad(this.getUTCMonth() + 1) +\n '-' + pad(this.getUTCDate()) +\n 'T' + pad(this.getUTCHours()) +\n ':' + pad(this.getUTCMinutes()) +\n ':' + pad(this.getUTCSeconds()) +\n '.' + (this.getUTCMilliseconds() / 1000).toFixed(3).slice(2, 5) +\n 'Z';\n };\n }\n\n})(window);\n\n// Source: /lib/core/messages/messages-constants.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_MESSAGES', {\n\n EVENTS: {\n\n MESSAGE: 'message', // post message window event\n RESIZE: 'resize', // window resize event\n UNLOAD: 'beforeunload',\n\n AV_RESIZE: 'av:window:resize',\n AV_RECEIVED: 'av:message:received',\n AV_MAXIMIZE: 'nav:left:hide', // @deprecated,\n AV_MINIMIZE: 'nav:left:hide', // @deprecated\n // MAXIMIZE: 'av:window:maximize',\n // MINIMIZE: 'av:window:minimize',\n AV_LOGIN: 'av:login',\n AV_LOGOUT: 'av:logout',\n AV_SESSION_TIMEOUT: 'av:session:timeout'\n\n },\n\n RESIZE_DEBOUNCE: 400,\n\n DOMAIN: /https?:\\/\\/([\\w\\d\\-]+\\.)?availity\\.(com|net)/,\n LOCAL: /http:\\/\\/(localhost|127\\.0\\.0\\.1|0\\.0\\.0\\.0):(\\d+)/\n\n });\n\n})(window);\n\n// Source: /lib/core/messages/messages.js\n\n\n// https://github.com/kylewelsby/angular-post-message/blob/master/src/angular-post-message.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.provider('avMessages', function() {\n\n var enabled = true;\n\n this.enable = function(value) {\n\n if(arguments.length) {\n enabled = !!value;\n }\n\n return enabled;\n\n };\n\n this.$get = function($rootScope, $log, AV_MESSAGES) {\n\n var AvMessages = function() {\n\n };\n\n var proto = AvMessages.prototype;\n\n proto.init = function() {\n\n var self = this;\n var $window = $(window);\n\n $window.on(AV_MESSAGES.EVENTS.MESSAGE, function(event) {\n self.onMessage(event);\n });\n\n $window.on(AV_MESSAGES.EVENTS.RESIZE, function() {\n self.onResize();\n });\n\n this.send(AV_MESSAGES.EVENTS.AV_MAXIMIZE);\n\n $rootScope.$on('$destroy', function() {\n self.destroy();\n });\n\n $window.on(AV_MESSAGES.EVENTS.UNLOAD, function() {\n self.send(AV_MESSAGES.EVENTS.AV_MINIMIZE);\n });\n\n };\n\n proto.destroy = function() {\n\n $(window).off(AV_MESSAGES.EVENTS.MESSAGE);\n $(window).off(AV_MESSAGES.EVENTS.RESIZE);\n $(window).off(AV_MESSAGES.EVENTS.UNLOAD);\n\n };\n\n proto.onResize = function() {\n\n var self = this;\n\n var resize = _.debounce(function() {\n\n var height = $('html').height();\n self.send({\n event: AV_MESSAGES.EVENTS.AV_RESIZE,\n height: height\n });\n\n }, AV_MESSAGES.RESIZE_DEBOUNCE);\n\n resize();\n\n };\n\n proto.isDomain = function(url) {\n\n if(AV_MESSAGES.DOMAIN.test(this.domain())) {\n return AV_MESSAGES.DOMAIN.test(url);\n }\n\n return AV_MESSAGES.LOCAL.test(url);\n };\n\n proto.isEnabled = function() {\n return enabled;\n };\n\n proto.onMessage = function(_event) {\n\n var event = _event;\n\n event = event.originalEvent || event; // jQuery wraps in `originalEvent`\n\n if(!event && !event.data) {\n // no op\n return;\n }\n\n // don't process messages emitted from same window\n if(event.source === window) {\n return;\n }\n\n if(!this.isDomain(event.origin)) {\n $log.warn('avMessages rejected a cross domain message since it does not match an *.availity.com or localhost');\n return;\n }\n\n\n var data = event.data;\n\n try {\n data = angular.fromJson(data);\n } catch(err) {\n $log.warn('avMessages.onMessage() failed to convert event to json payload');\n }\n\n if(_.isString(data)) {\n event = data;\n data = null;\n }else {\n event = data.event ? data.event : AV_MESSAGES.AV_RECEIVED;\n }\n\n $rootScope.$root.$broadcast(event, data);\n\n };\n\n proto.isIframe = function() {\n return window.self !== window.parent;\n };\n\n proto.domain = function() {\n\n var window = root;\n\n if(window.location.origin) {\n return window.location.origin;\n }\n\n if(window.location.hostname) {\n return window.location.protocol + '//' + window.location.hostname + (window.location.port ? ':' + window.location.port : '');\n }\n\n return '*';\n\n };\n\n proto.send = function(payload) {\n\n try {\n\n var message = _.isString(payload) ? payload : JSON.stringify(payload);\n this.postMessage(message, this.domain());\n\n } catch(err) {\n $log.error('avMessages.send() ', err);\n }\n };\n\n proto.postMessage = function(message, domain) {\n window.parent.postMessage(message, domain);\n };\n\n return new AvMessages();\n\n };\n\n });\n\n availity.core.run(function(avMessages) {\n\n if(avMessages.isEnabled()) {\n avMessages.init();\n }\n\n });\n\n})(window);\n\n\n//# sourceMappingURL=maps/availity-angular.js.map\n","/*global module*/\n\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity || {};\n availity.VERSION = 'v0.0.0';\n availity.MODULE = 'availity';\n availity.core = angular.module(availity.MODULE, ['ng']);\n\n var originalModule = angular.module;\n var modules = [];\n\n angular.module = function(name, deps) {\n\n if(deps && _.indexOf(modules, name) !== -1 && !window.__karma__) {\n throw new Error('redefining module: ' + name);\n }\n\n modules.push(name);\n\n return originalModule(name, deps);\n };\n\n root.availity = availity;\n\n if(typeof module !== 'undefined' && module.exports) {\n module.exports = availity;\n }\n\n})(window);\n\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n // https://github.com/epeli/underscore.string/blob/cebddf40cf2e10f0e9b596d9654edd0a1cfefc15/helper/makeString.js\n availity._stringify = function(object) {\n if(object === null) {\n return '';\n }\n return '' + object;\n };\n\n // https://github.com/epeli/underscore.string/blob/cebddf40cf2e10f0e9b596d9654edd0a1cfefc15/isBlank.js\n availity.isBlank = function(str) {\n return (/^\\s*$/).test(availity._stringify(str));\n };\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n var uid = ['0', '0', '0'];\n\n availity.uuid = function(prefix) {\n var index = uid.length;\n var digit;\n\n while(index) {\n index--;\n digit = uid[index].charCodeAt(0);\n if(digit === 57 /*'9'*/) {\n uid[index] = 'A';\n return prefix ? prefix + uid.join('') : uid.join('');\n }\n if(digit === 90 /*'Z'*/) {\n uid[index] = '0';\n } else {\n uid[index] = String.fromCharCode(digit + 1);\n return prefix ? prefix + uid.join('') : uid.join('');\n }\n }\n uid.unshift('0');\n return prefix ? prefix + uid.join('') : uid.join('');\n };\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.REGEX_API_URL = /^.*?api.availity.com(.*)$/;\n\n availity.getRelativeUrl = function(url) {\n var result = url.match(availity.REGEX_API_URL);\n if(result && result[1]) {\n return '/api' + result[1];\n }\n\n return url;\n };\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n // https://github.com/jasonday/printThis/commit/66f9cbd0e3760767342eed4ef32cf8294417b227\n availity.print = function() {\n\n if(document.queryCommandSupported('print')) {\n document.execCommand('print', false, null);\n } else {\n window.focus();\n window.print();\n }\n };\n\n})(window);\n","// Original => https://github.com/mgcrea/angular-strap/blob/master/src/helpers/debounce.js\n\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_THROTTLE', {\n OPTIONS: {\n wait: 1000,\n update: false,\n trailing: true,\n leading: false\n }\n });\n\n availity.core.factory('avThrottle', function(AV_THROTTLE, $timeout) {\n\n return function(fn, wait, options) {\n\n options = _.merge({}, AV_THROTTLE.OPTIONS, options);\n\n wait = wait ? wait : AV_THROTTLE.THRESHOLD;\n var update = angular.isDefined(options.update) ? options.update : AV_THROTTLE.UPDATE;\n var timer = null;\n\n return function() {\n var context = options.context || this;\n var args = arguments;\n\n if(!timer) {\n if(options.leading !== false) {\n fn.apply(context, args);\n }\n\n var later = function() {\n timer = null;\n if(options.trailing !== false) {\n fn.apply(context, args);\n }\n };\n\n timer = $timeout(later, wait, update);\n }\n\n return timer;\n\n };\n };\n });\n\n})(window);\n","// Orginal => https://github.com/ericzon/angular-ny-logger/blob/0c594e864c93e7f33d36141200096bc6139ddde1/angular-ny-logger.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.provider('AvLogger', function() {\n\n var _enabled = false;\n\n this.enabled = function(enabled) {\n _enabled = !!enabled;\n };\n\n this.$get = function($injector) {\n\n var AvLogger = function(context, $delegate) {\n\n this.context = context || '';\n this.$log = $delegate;\n\n };\n\n var proto = AvLogger.prototype;\n\n AvLogger.supplant = function(str, o) {\n\n var _supplant = function (a, b) {\n var r = o[b];\n return r;\n };\n\n return str.replace(/\\{([^{}]*)\\}/g, _supplant);\n };\n\n AvLogger.isObject = function(element) {\n var elemStr = ( !angular.isUndefined(element) && !angular.isUndefined(element.constructor) ) ? element.constructor.toString() : '';\n return (elemStr.indexOf('Object') > -1);\n };\n\n AvLogger.getFormattedTimestamp = function(date) {\n\n return AvLogger.supplant('{0}:{1}:{2}:{3}', [\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds()\n ]);\n\n };\n\n proto._log = function(originalFn, args) {\n\n // Allow enabling logger through query params\n // Ex:\n //\n // http://localhost:3000/ui.html#avLogger\n\n var hash = window.location.hash;\n hash = hash || '';\n\n if(!_enabled && hash.indexOf('avLogger') < 0 && originalFn !== 'error') {\n return;\n }\n\n var now = AvLogger.getFormattedTimestamp(new Date());\n var message = '';\n var supplantData = [];\n\n var context = this.context ? ' [' + this.context + '] ' : '';\n\n switch(args.length) {\n case 1:\n // (1) If the user supplied one argument, then the argument must be\n // the message itself and _log()\n // will print: - : \n supplantData = args[0];\n message = AvLogger.supplant('{0}{1} - {2}', [now, context, args[0]]);\n break;\n case 3:\n // (3) If the user supplied three arguments, then the first argument\n // is a method name, the second is the message and the third is an\n // object of variables to interpolate with the message. For this, _log()\n // will print: - - ('')\n supplantData = args[2];\n message = AvLogger.supplant(\"{0}{1} - {2}(\\'{3}\\')\", [now, context, args[0], args[1]]);\n break;\n case 2:\n // (2) If the user provided two arguments, we need to find out whether\n // they supplied a method name or an interpolation object.\n // In order to figure that out, we’ll check the type of the last argument.\n // If it is a string, then it has to be the message itself while the\n // first argument is the method name. Otherwise consider the first argument\n // as the message and the second as array of interpolation variables.\n // The output print will be according to this check.\n if(typeof args[1] === 'string') {\n\n message = AvLogger.supplant(\"{0}{1} - {2}(\\'{3}\\')\", [now, context, args[0], args[1]]);\n\n } else {\n\n // If the message is an error, there may be a stack included. If so, we\n // should include the stack in the message to make it more meaningful.\n if(args[0].stack) {\n var errorMessage = this.formatError(args[0]);\n message = AvLogger.supplant('{0}{1} - {2}', [now, context, errorMessage]);\n supplantData = args[1];\n\n }else {\n supplantData = args[1];\n\n }\n\n }\n break;\n }\n\n var $log = this.$log || $injector.get('$log');\n\n var params = (AvLogger.isObject(supplantData)) ? [message, supplantData] : [AvLogger.supplant(message, supplantData)];\n $log[originalFn].apply(null, params);\n\n };\n\n proto.log = function() {\n this._log('log', arguments);\n };\n\n proto.info = function() {\n this._log('info', arguments);\n };\n\n proto.warn = function() {\n this._log('warn', arguments);\n };\n\n proto.debug = function() {\n this._log('debug', arguments);\n };\n\n // https://github.com/angular/angular.js/blob/v1.2.27/src/ng/log.js#L122\n proto.formatError = function(arg) {\n if(arg instanceof Error) {\n if(arg.stack) {\n\n arg = (arg.message && arg.stack.indexOf(arg.message) === -1) ?\n 'Error: ' + arg.message + '\\n' + arg.stack : arg.stack;\n\n } else if(arg.sourceURL) {\n arg = arg.message + '\\n' + arg.sourceURL + ':' + arg.line;\n }\n }\n return arg;\n };\n\n proto.error = function() {\n this._log('error', arguments);\n };\n\n return AvLogger;\n\n };\n\n });\n\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.config(function($provide) {\n\n $provide.decorator('$log', function($delegate, AvLogger) {\n return new AvLogger(null, $delegate);\n });\n\n });\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_POLLING', {\n INTERVAL: 1000, // delay in ms before retrying an async request\n MAX_ELAPSED_TIME: 5000, // max time in ms before polling stops and rejects original request\n MAX_RETRY: 30, // # of times the request will be tried\n DECAY: 1.2, // % the polling interval decays after every retry\n // maximum time polling is allowed before rejecting the request\n EVENTS: {\n MAX_RETRY: 'av:polling:max:retry'\n },\n REGEX_URL: /^.*?api.availity.com(.*)$/ // capture the relative url from API\n });\n\n var PollingServiceFactory = function($rootScope, $q, $injector, $timeout, $log, AV_POLLING, AV_API) {\n\n var AvPollingService = function() {\n this.pendingRequests = []; // stores all request for polling\n };\n\n var proto = AvPollingService.prototype;\n\n proto.response = function(response) {\n\n if(this.isAsyncResponse(response)) {\n return this.onAsyncReponse(response);\n }\n\n return response || $q.when(response);\n };\n\n proto.setDefaults = function(config) {\n\n var defaultOptions = {\n pollingInterval: AV_POLLING.INTERVAL,\n pollingDecay: AV_POLLING.DECAY,\n pollingMaxInterval: AV_POLLING.MAX_ELAPSED_TIME,\n pollingRetryCount: 0,\n pollingStartTime: new Date().getTime()\n };\n\n return _.extend(defaultOptions, config);\n };\n\n proto.responseError = function(response) {\n // Return the promise rejection\n return $q.reject(response);\n };\n\n /**\n * API layer return a link with a polling url for\n * async responses.\n *\n * @param {Object} response ajax response\n * @return {Boolean} true if response has status of 202 (accepted) and location param in header with uri+session link\n */\n proto.isAsyncResponse = function(response) {\n\n return response &&\n response.config &&\n response.config.api &&\n response.status &&\n response.status === 202 &&\n angular.isFunction(response.headers) && !availity.isBlank(response.headers(AV_API.HEADERS.SERVER.LOCATION));\n };\n\n proto.onAsyncReponse = function(response) {\n\n response.config = this.setDefaults(response.config);\n\n var deferred = $q.defer();\n\n this.queueRequest(deferred, response);\n\n // [rm3]: Can't call notify before you return promise object?\n $timeout(function() {\n // Notify deferred listeners with the original server response\n deferred.notify(response);\n }, 0, false);\n\n return deferred.promise;\n };\n\n proto.getUrl = function(url) {\n\n var result = url.match(AV_POLLING.REGEX_URL);\n if(result && result[1]) {\n return '/api' + result[1];\n }\n\n return url;\n };\n\n proto.queueRequest = function(deferred, response) {\n\n var self = this;\n // server replies with location header so set the url into config\n var _url = availity.getRelativeUrl(response.headers(AV_API.HEADERS.SERVER.LOCATION));\n var _config = response.config;\n\n\n // headers – {Object} – Map of strings or functions which return strings representing HTTP headers\n // to send to the server. If the return value of a function is null, the header\n // will not be sent. Functions accept a config object as an argument.\n var config = {\n method: 'GET',\n api: true,\n headers: _config.headers,\n pollingInterval: _config.pollingInterval,\n pollingMaxRetry: _config.pollingMaxRetry,\n pollingMaxInterval: _config.pollingMaxInterval,\n pollingStartTime: _config.pollingStartTime,\n _pollingDecay: _config._pollingDecay,\n pollingRetryCount: _config.pollingRetryCount,\n pollingDecay: _config.pollingDecay,\n url: _url, /* set the url from the server response */\n cache: false\n };\n\n var request = {\n id: availity.uuid('request-'),\n config: config,\n deferred: deferred\n };\n\n var timeout = this.getPollingTimeout(config);\n\n // each async request should run on its own timer\n var timer = $timeout(function() {\n self.retryRequest(request.id);\n }, timeout, false);\n\n request.timer = timer;\n\n // add the async request to the queue\n this.pushRequest(request);\n\n };\n\n proto.popRequest = function(id) {\n\n var index = null;\n var request = null;\n\n for(var i = 0; i < this.pendingRequests.length; i++) {\n if(this.pendingRequests[i].id === id) {\n index = i;\n break;\n }\n }\n\n request = this.pendingRequests[index];\n this.pendingRequests.splice(index, 1);\n\n return request;\n };\n\n proto.pushRequest = function(request) {\n this.pendingRequests.push(request);\n };\n\n proto.getPollingTimeout = function(config) {\n return config.pollingDecay * config.pollingInterval;\n };\n\n proto.isPollingMaxTimeout = function(config) {\n var now = new Date().getTime();\n var elaspedTime = now - config.pollingStartTime;\n var isElapsed = elaspedTime > config.pollingMaxInterval;\n return isElapsed;\n },\n\n proto.isMaxRetried = function(config) {\n return config.pollingRetryCount >= AV_POLLING.MAX_RETRY;\n };\n\n proto.isPollable = function(config) {\n var _isTimeout = this.isPollingMaxTimeout(config);\n var _isMax = this.isMaxRetried(config);\n\n return _isTimeout || _isMax ? false : true;\n\n };\n\n proto.retryRequest = function(id) {\n\n var self = this;\n var request = this.popRequest(id);\n $timeout.cancel(request.timer);\n\n var config = request.config;\n\n var deferred = request.deferred;\n\n if(!this.isPollable(config)) {\n $log.info('Rejecting pollable response due to timeout');\n return deferred.reject(request);\n }\n\n // increment counters and polling timeouts\n this.increment(config);\n\n function successCallback(response) {\n if(self.isAsyncResponse(response)) {\n deferred.notify(response);\n self.queueRequest(request.deferred, response);\n } else {\n deferred.resolve(response);\n }\n }\n\n function errorCallback(response) {\n deferred.reject(response);\n }\n\n // Silly circular dependency trick\n var $http = $injector.get('$http');\n\n $http(config).then(successCallback, errorCallback);\n\n };\n\n proto.increment = function(config) {\n this.incrementCounter(config);\n this.incrementDecay(config);\n };\n\n proto.incrementDecay = function(config) {\n if(!config._pollingDecay) {\n // store the original decay param\n config._pollingDecay = config.pollingDecay;\n }\n config.pollingDecay *= config._pollingDecay;\n };\n\n proto.incrementCounter = function(config) {\n config.pollingRetryCount++;\n };\n\n proto.clearRequests = function() {\n angular.forEach(this.pendingRequests, function(request) {\n $timeout.cancel(request.timer);\n });\n this.pendingRequests = [];\n };\n\n return new AvPollingService();\n\n };\n\n availity.core.factory('avPollingService', PollingServiceFactory);\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_API', {\n HEADERS: {\n SERVER: {\n ID: 'X-API-ID',\n LOCATION: 'Location',\n STATUS: 'X-Status-Message',\n GLOBAL_ID: 'X-Global-Transaction-ID'\n },\n CLIENT: {\n SESSION_ID: 'X-Session-ID',\n AUTH: 'Authorization',\n OVERRIDE: 'X-HTTP-Method-Override',\n CALLBACK_URL: 'X-Callback-URL',\n CUSTOMER_ID: 'X-Availity-Customer-ID'\n }\n }\n });\n\n var defaultOptions = {\n // pre-prend the url with a value like `/public` so we can build urls like `public/api/v1/*`\n prefix: '',\n // default base url for endpoints\n path: '/api',\n // url resource group, such as `/foo`, for urls like `public/api/foo/v1/*`\n resourceGroup: '',\n // url to resource endpoint like `coverages` or `payers`\n url: null,\n // defaults to version 1\n version: '/v1',\n // governance level `/internal`\n level: '',\n // post-pend the url with `.json`, `.txt` or `.xml`\n suffix: '',\n // cache all request by default\n cache: true,\n // flag used to enable behaviors around the Availity Rest API\n api: true,\n // # of times the polling service has tried to get a response\n pollingRetryCount: 0,\n // in ms\n pollingInterval: 1000,\n // % the polling interval decays after every retry\n pollingDecay: 1.2,\n // maximum time polling is allowed before rejecting the request\n pollingMaxInterval: 30000\n\n };\n\n // Factory that creates ApiResourcess\n var ApiResourcesFactory = function($http, $q, avPollingService) {\n\n var AvApiResource = function(options) {\n\n if(!options) {\n throw new Error('[options] cannot be null or undefined');\n }\n\n // if string the assume url is being passed in\n if(angular.isString(options)) {\n options = options.charAt(0) === '/' ? options : '/' + options;\n options = angular.extend({}, {url: options});\n }\n\n if(!options.url) {\n throw new Error('[url] cannot be null');\n }\n\n // get the default options and merge into this instance\n this.options = angular.extend({}, defaultOptions, (options || {}));\n };\n\n // Alias the prototype\n var proto = AvApiResource.prototype;\n\n proto._config = function(config) {\n return angular.extend({}, this.options, (config || {}));\n },\n\n proto._cacheBust = function(config) {\n config.cacheBust = null;\n config.params = config.params || {};\n config.params.cacheBust = new Date().getTime();\n return config;\n },\n\n proto._getUrl = function(id) {\n if(this.options.api) {\n return this._getApiUrl(id);\n }\n\n return this.options.url;\n };\n\n proto._createResponse = function(data, status, headers, config) {\n return {\n data: data,\n status: status,\n headers: headers,\n config: config\n };\n };\n\n proto._request = function(config, afterCallback) {\n\n var self = this;\n var defer = $q.defer();\n\n $http(config)\n .success(function(data, status, headers, _config) {\n\n var _response = {\n data: data,\n status: status,\n headers: headers,\n config: _config\n };\n\n // handle the async response if applicable\n var _promise = $q.when(avPollingService.response(_response));\n // notify the promise listener of the original response\n defer.notify(_response);\n\n // handle the polling service promise\n _promise.then(function(successResponse) {\n\n // if service has a callback then call it\n // var response = self._createResponse(data, status, headers, _config);\n if(afterCallback) {\n successResponse = afterCallback.call(self, successResponse, config.data);\n }\n defer.resolve(successResponse);\n }, function(errorResponse) {\n defer.reject(errorResponse);\n }, function(notifyResponse) {\n defer.notify(notifyResponse);\n });\n\n }).error(function(data, status, headers, _config) {\n var response = self._createResponse(data, status, headers, _config);\n defer.reject(response);\n });\n\n var promise = defer.promise;\n\n // recreate the success callback ala $http\n promise.success = function(fn) {\n promise.then(function(response) {\n fn(response.data, response.status, response.headers, response.config);\n });\n return promise;\n };\n\n // recreate the error callback ala $http\n promise.error = function(fn) {\n promise.then(null, function(response) {\n fn(response.data, response.status, response.headers, config);\n });\n return promise;\n };\n\n promise.always = promise['finally'];\n\n return promise;\n };\n\n proto.normalize = function(url) {\n return url\n .replace(/[\\/]+/g, '/')\n .replace(/\\/$/, '');\n };\n\n proto.join = function () {\n var joined = [].slice.call(arguments, 0).join('/');\n return this.normalize(joined);\n };\n\n proto._getApiUrl = function(id) {\n\n id = id ? '/' + id : '';\n\n var url = this.join(\n this.options.prefix,\n this.options.path,\n this.options.level,\n this.options.resourceGroup,\n this.options.version,\n this.options.url,\n id);\n\n return url + this.options.suffix;\n };\n\n proto.create = function(data, config) {\n\n if(!data) {\n throw new Error('called method without [data]');\n }\n\n if(this.beforeCreate) {\n data = this.beforeCreate(data);\n }\n\n config = this._config(config);\n config.method = 'POST';\n config.url = this._getUrl();\n config.data = data;\n\n return this._request(config, this.afterCreate);\n\n };\n\n proto.get = function(id, config) {\n\n if(!id) {\n throw new Error('called method without [id]');\n }\n\n config = this._config(config);\n if(config.cacheBust) {\n config = this._cacheBust(config);\n }\n config.method = 'GET';\n config.url = this._getUrl(id);\n\n\n return this._request(config, this.afterGet);\n\n };\n\n proto.query = function(config) {\n\n config = this._config(config);\n if(config.cacheBust) {\n config = this._cacheBust(config);\n }\n config.method = 'GET';\n config.url = this._getUrl();\n\n return this._request(config, this.afterQuery);\n\n };\n\n proto.update = function(id, data, config) {\n\n var url;\n\n if(_.isString(id) || _.isNumber(id)) {\n url = this._getUrl(id);\n }else {\n url = this._getUrl();\n // At this point the function signature becomes:\n //\n // proto.update = function(data, config) {} a.k.a function(id, data)\n //\n config = data; // config is really the 2nd param\n data = id; // data is really the first param\n }\n\n if(this.beforeUpdate) {\n data = this.beforeUpdate(data);\n }\n\n config = this._config(config);\n config.method = 'PUT';\n config.url = url;\n config.data = data;\n\n return this._request(config, this.afterUpdate);\n\n };\n\n proto.remove = function(id, config) {\n\n var url;\n var data;\n\n if(_.isString(id) || _.isNumber(id)) {\n url = this._getUrl(id);\n }else {\n // At this point the function signature becomes:\n //\n // proto.remove = function(data, config)\n //\n url = this._getUrl();\n data = id;\n }\n\n config = this._config(config);\n config.method = 'DELETE';\n config.url = url;\n config.data = data;\n\n return this._request(config, this.afterRemove);\n };\n\n proto.beforeCreate = null;\n proto.afterCreate = null;\n proto.afterQuery = null;\n proto.afterGet = null;\n proto.beforeUpdate = null;\n proto.afterUpdate = null;\n proto.afterRemove = null;\n\n return AvApiResource;\n\n };\n\n availity.core.factory('AvApiResource', ApiResourcesFactory);\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n var UserServiceFactory = function(AvApiResource) {\n\n var AvUsersResource = function() {\n AvApiResource.call(this, 'users');\n };\n\n angular.extend(AvUsersResource.prototype, AvApiResource.prototype, {\n\n afterGet: function(response) {\n var user = response.data.user ? response.data.user : response.data;\n return user;\n },\n\n me: function(config) {\n return this.get('me', config);\n }\n\n });\n\n return new AvUsersResource();\n\n };\n\n availity.core.factory('avUsersResource', UserServiceFactory);\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avCoveragesResource', function(AvApiResource) {\n return new AvApiResource({version: '/v1', url: '/configurations', cache: false});\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avConfigurationsResource', function(AvApiResource) {\n return new AvApiResource({version: '/v1', url: '/configurations'});\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n var LogMessagesFactory = function(AvApiResource) {\n\n var AvLogMessagesResource = function() {\n\n AvApiResource.call(this, {\n version: '/v1',\n url: '/log-messages'\n });\n };\n\n angular.extend(AvLogMessagesResource.prototype, AvApiResource.prototype, {\n\n buildRequest: function(level, entries) {\n\n var requestPayload = {};\n\n if(entries.level) {\n delete entries.level;\n }\n\n requestPayload.level = level;\n requestPayload.entries = entries;\n\n return requestPayload;\n },\n\n debug: function(entries) {\n return this.create(this.buildRequest('debug', entries));\n },\n\n info: function(entries) {\n return this.create(this.buildRequest('info', entries));\n },\n\n warn: function(entries) {\n return this.create(this.buildRequest('warn', entries));\n },\n\n error: function(entries) {\n return this.create(this.buildRequest('error', entries));\n }\n\n });\n\n return new AvLogMessagesResource();\n\n };\n\n availity.core.factory('avLogMessagesResource', LogMessagesFactory);\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n var AvDocumentsResourceFactory = function(AvApiResource) {\n\n var AvDocumentsResource = function() {\n AvApiResource.call(this, 'documents');\n };\n\n angular.extend(AvDocumentsResource.prototype, AvApiResource.prototype, {\n\n getContents: function(id) {\n var config = this._config();\n config.url = this.getContentsUrl(id);\n return this._request(config);\n },\n\n getContentsUrl: function(id) {\n return this._getUrl(id) + '/contents';\n }\n\n });\n\n return new AvDocumentsResource();\n\n };\n\n availity.core.factory('avDocumentsResource', AvDocumentsResourceFactory);\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n var OrganizationResourceFactory = function(AvApiResource) {\n\n var OrganizationResource = function() {\n AvApiResource.call(this, 'organizations');\n };\n\n angular.extend(OrganizationResource.prototype, AvApiResource.prototype, {\n\n getOrganizations: function(config) {\n return this.query(config).then(function(response) {\n return response.data.organizations ? response.data.organizations : response.data;\n });\n }\n\n });\n\n return new OrganizationResource();\n };\n\n availity.core.factory('avOrganizationsResource', OrganizationResourceFactory);\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n\n var availity = root.availity;\n\n availity.core.factory('avCodesResource', function(AvApiResource) {\n return new AvApiResource({version: '/v1', url: '/codes'});\n });\n\n var AvCodesResourceFactory = function(AvApiResource) {\n\n var AvCodesResource = function () {\n AvApiResource.call(this, 'codes');\n };\n\n angular.extend(AvCodesResource.prototype, AvApiResource.prototype, {\n\n getCodes: function (data) {\n\n // config for the api resource query\n var config = {};\n config.params = {};\n\n if(data.page) {\n config.params.offset = 50 * (data.page - 1);\n }\n if(data.offset) {\n config.params.offset = data.offset;\n }\n if(data.list) {\n config.params.list = data.list;\n }\n if(data.q) {\n config.params.q = data.q;\n }\n\n return this.query(config).then(function (response) {\n // Format the response into something select2 can read\n var results = response.data.codes;\n if(results && !_.has(results[0], 'id')) {\n _.each(results, function (code) {\n code.id = code.code;\n });\n }\n\n // calculate if we want to continue searching\n var moreVal = response.data.offset < response.data.totalCount - response.data.limit;\n return {\n more: moreVal,\n results: results\n };\n\n });\n }\n\n });\n\n return new AvCodesResource();\n\n };\n\n availity.core.factory('avCodesResource', AvCodesResourceFactory);\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n var AvUserPermissionsResourceFactory = function(AvApiResource) {\n\n var AvUserPermissionsResource = function() {\n AvApiResource.call(this, {\n level: '/internal',\n version: '/v1',\n url: '/axi-user-permissions'\n });\n this.sessionDate = moment().toISOString();\n };\n\n angular.extend(AvUserPermissionsResource.prototype, AvApiResource.prototype, {\n\n afterQuery: function(response) {\n return response.data.axiUserPermissions ? response.data.axiUserPermissions : [];\n },\n\n getPermissions: function(permissionIds, region) {\n var self = this;\n return this.query({\n params: {\n permissionId: permissionIds,\n region: region,\n sessionDate: self.sessionDate\n }\n });\n }\n\n });\n\n return new AvUserPermissionsResource();\n\n };\n\n availity.core.factory('avUserPermissionsResource', AvUserPermissionsResourceFactory);\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n var AvUserAuthorizationsFactory = function($q, $log, avUserPermissionsResource) {\n\n /**\n *\n * @constructor\n */\n var AvUserAuthorizations = function() {\n /**\n * Region is used to return permission/resources relative to region. If null service will\n * return all permission relative to current. If value 'ALL' used it will return value relative\n * to all regions the user has access to.\n * @type {string}\n */\n this.region = null;\n /**\n * PermissionIds contains the set of permissionIds to request from service. If user of service calls\n * setPermissionIds() or call getPermissions() with complete set of permissionIds needed by application,\n * then service should only make that one hit to retrieve permission information.\n * @type {Array}\n */\n this.permissionIds = [];\n };\n\n var proto = AvUserAuthorizations.prototype;\n\n proto.setRegion = function(region) {\n this.region = region;\n return this;\n };\n\n proto.setPermissionIds = function(permissionIds) {\n if(!angular.isArray(permissionIds)) {\n throw new Error('permissionsIds must be an array of string IDs for avUserAuthorizations#addPermissionIds');\n }\n this.permissionIds = permissionIds;\n return this;\n };\n\n proto.isAuthorized = function(permissionId) {\n return this.getPermission(permissionId).then(function(permission) {\n return permission.isAuthorized;\n });\n };\n\n proto.isAnyAuthorized = function(permissionIds) {\n return this.getPermissions(permissionIds).then(function(permissions) {\n var permission = _.findWhere(permissions, {isAuthorized: true});\n return permission !== undefined;\n });\n };\n\n proto.getPermission = function(permissionId) {\n if(!angular.isString(permissionId)) {\n throw new Error('permissionsId must be a string ID for avUserAuthorizations#getPermission');\n }\n\n return this.getPermissions([permissionId])\n .then(function(_permissions) {\n return _permissions[permissionId];\n });\n };\n\n proto.getPermissions = function(permissionIds) {\n var self = this;\n\n if(!angular.isArray(permissionIds)) {\n throw new Error('permissionsIds must be an array of string IDs for avUserAuthorizations#getPermissions');\n }\n // merge permission ids to reduce calls to backend\n self.permissionIds = _.union(self.permissionIds, permissionIds);\n\n return avUserPermissionsResource\n .getPermissions(self.permissionIds, self.region)\n .then(function(_permissions) {\n return self.toPermissionMap(permissionIds, _permissions);\n });\n };\n\n proto.getOrganizations = function(permissionId) {\n return this.getPermission(permissionId).then(function(permission) {\n return permission.organizations;\n });\n };\n\n proto.getPayers = function(permissionId, organizationId) {\n return this.getPermission(permissionId).then(function(permission) {\n var organization = _.findWhere(permission.organizations, {id: organizationId});\n\n if(organization && organization.resources) {\n return organization.resources;\n }\n return [];\n });\n\n };\n\n /**\n * Converts array permissions to map with value for each permissionId, creating empty permission\n * if can't find permission in array\n * @private\n */\n proto.toPermissionMap = function(permissionIds, permissions) {\n var self = this;\n var map = {};\n permissions = _.slice(permissions);\n _.forEach(permissionIds, function(permissionId) {\n var key = {id: permissionId};\n var permission = _.findWhere(permissions, key);\n permission = permission ? self.toPermission(permission) : self.toPermission(key);\n map[permission.id] = permission;\n });\n return map;\n };\n\n /**\n * Convert a permission resource into a structure that is easier to work with.\n * @private\n */\n proto.toPermission = function(permission) {\n return {\n id: permission.id,\n description: permission.description ? permission.description : '',\n geographies: permission.geographies ? permission.geographies : [],\n organizations: permission.organizations ? permission.organizations : [],\n isAuthorized: permission.organizations ? permission.organizations.length > 0 : false\n };\n };\n\n return new AvUserAuthorizations();\n\n };\n\n availity.core.factory('avUserAuthorizations', AvUserAuthorizationsFactory);\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_SESSION', {\n SESSION_TIMEOUT: 'av:auth:session:timeout',\n NOT_AUTHORIZED: 'av:auth:not:authorized'\n });\n\n availity.core.factory('avSession', function($q, avUsersResource) {\n\n var AvSession = function() {\n this.user = null;\n this.permissions = null;\n };\n\n var proto = AvSession.prototype;\n\n proto.getUser = function() {\n var self = this;\n\n if(this.user) {\n return $q.when(this.user);\n }\n\n return avUsersResource.me().then(function(user) {\n self.user = user;\n return self.user;\n });\n };\n\n\n proto.destroy = function() {\n this.user = null;\n this.permisions = null;\n };\n\n return new AvSession();\n });\n\n})(window);\n","// Inspiration => https://github.com/HackedByChinese/ng-idle\n//\n// Rules:\n//\n// * ping after 3 minutes from last human activity\n// * reset session after api success except 401\n// * idle show after 25 of inactivity\n//\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_IDLE', {\n EVENTS: {\n IDLE_INACTIVE: 'av:idle:inactive',\n IDLE_ACTIVE: 'av:idle:active',\n SESSION_TIMEOUT_ACTIVE: 'av:idle:session:active',\n SESSION_TIMEOUT_REDIRECT: 'av:idle:session:redirect',\n HUMAN: 'keydown.av.idle mousedown.av.idle keydown.av.idle',\n MACHINE: '$locationChangeSuccess'\n },\n INTERVALS: {\n PING: 3 * 60 * 1000, // 3 minutes\n IDLE: 25 * 60 * 1000, // 25 minutes\n SESSION: 30 * 60 * 1000 // 30 minutes\n },\n URLS: {\n HOME: '/availity/web/public.elegant.login',\n PING: '/api/v1/users/me'\n }\n });\n\n availity.core.provider('avIdle', function(AV_IDLE) {\n\n var enabled = false;\n var pingUrl;\n var redirectUrl;\n var sessionTimeout;\n var idleTimeout;\n var pingTimeout;\n\n this.enable = function(value) {\n if(arguments.length) {\n enabled = !!value;\n }\n return enabled;\n };\n\n this.setSessionTimeout = function(timeout) {\n sessionTimeout = timeout || AV_IDLE.INTERVALS.SESSION;\n };\n\n this.setIdleTimeout = function(timeout) {\n idleTimeout = timeout || AV_IDLE.INTERVALS.IDLE;\n };\n\n this.setPingTimeout = function(timeout) {\n pingTimeout = timeout || AV_IDLE.INTERVALS.PING;\n };\n\n this.setPingUrl = function(url) {\n pingUrl = url || AV_IDLE.URLS.PING;\n };\n\n this.$get = function(AV_IDLE, $log, $document, $rootScope, $timeout, avThrottle, $q, $injector) {\n\n var AvIdle = function() {\n\n // $timeout references\n this._idleTimer = null;\n this._sessionTimer = null;\n this._pingTimer = null;\n this._keepAlive = null;\n\n // flag used to track if the if user is idle or session expired\n this.idleActive = false;\n this.sessionActive = false;\n\n this.listeners = [];\n\n this.init();\n\n };\n\n var proto = AvIdle.prototype;\n\n proto.init = function() {\n\n if(!enabled) {\n this.stop();\n return;\n }\n\n this.start();\n };\n\n proto.start = function() {\n\n $log.info('avIdle start');\n\n var self = this;\n var listener;\n\n !sessionTimeout && this.setSessionTimeout();\n !idleTimeout && this.setIdleTimeout();\n !pingTimeout && this.setPingTimeout();\n !pingUrl && this.setPingUrl();\n !redirectUrl && this.setRedirectUrl();\n\n $rootScope.$on('$destroy', function() {\n self.stop();\n });\n\n $document.find('body').on(AV_IDLE.EVENTS.HUMAN, function(event) {\n self.onEvent(event);\n });\n\n listener = $rootScope.$on(AV_IDLE.EVENTS.MACHINE, function(event, oldUrl, newUrl) {\n if(oldUrl !== newUrl) {\n self.onEvent(event);\n }\n });\n this.listeners.push(listener);\n\n $rootScope.$on(AV_IDLE.EVENTS.SESSION_TIMEOUT_REDIRECT, function() {\n document.location.href = redirectUrl;\n });\n\n this.startIdleTimer();\n this.startSessionTimer();\n };\n\n proto.stop = function() {\n\n $document.find('body').off(AV_IDLE.EVENTS.HUMAN);\n\n // turns off Angular event listeners @see http://stackoverflow.com/a/14898795\n _.each(this.listeners, function(listener) {\n listener();\n });\n\n this.stopPing();\n this.stopSessionTimer();\n this.stopIdleTimer();\n };\n\n proto.isEnabled = function() {\n return enabled;\n };\n\n proto.enable = function(value) {\n if(arguments.length) {\n enabled = !!value;\n }\n\n return this;\n };\n\n proto.setSessionTimeout = function(timeout) {\n sessionTimeout = timeout || AV_IDLE.INTERVALS.SESSION;\n return this;\n };\n\n proto.setIdleTimeout = function(timeout) {\n idleTimeout = timeout || AV_IDLE.INTERVALS.IDLE;\n return this;\n };\n\n proto.setPingTimeout = function(timeout) {\n pingTimeout = timeout || AV_IDLE.INTERVALS.PING;\n return this;\n };\n\n proto.setPingUrl = function(url) {\n pingUrl = url || AV_IDLE.URLS.PING;\n return this;\n };\n\n proto.setRedirectUrl = function(url) {\n redirectUrl = url || AV_IDLE.URLS.HOME;\n return this;\n };\n\n proto.response = function(response) {\n\n if(this.isApiRequest(response)) {\n this.startSessionTimer();\n }\n\n return response;\n };\n\n proto.isApiRequest = function(response) {\n return response && response.config && response.config.api;\n };\n\n proto.responseError = function(response) {\n\n if(this.isApiRequest(response) && response.status !== 401) {\n this.startSessionTimer();\n }\n\n if(this.isApiRequest() && response.status === 401) {\n this.stopPing();\n }\n\n return $q.reject(response);\n };\n\n proto.startSessionTimer = function() {\n\n var self = this;\n\n this.stopSessionTimer();\n\n var later = function() {\n $log.info('avIdle session has TIMED OUT');\n self.stop();\n $rootScope.$broadcast(AV_IDLE.EVENTS.SESSION_TIMEOUT_ACTIVE);\n };\n\n $log.info('avIdle session timer has STARTED');\n this._sessionTimer = $timeout(later, sessionTimeout, false);\n\n };\n\n proto.stopSessionTimer = function() {\n $log.info('avIdle session timer has STOPPED');\n $timeout.cancel(this._sessionTimer);\n };\n\n proto.startIdleTimer = function() {\n\n var self = this;\n\n this.stopIdleTimer();\n\n var later = function() {\n self.stopIdleTimer();\n $log.info('avIdle is IDLING');\n $rootScope.$broadcast(AV_IDLE.EVENTS.IDLE_ACTIVE);\n };\n\n $log.info('avIdle idle timer has STARTED');\n this._idleTimer = $timeout(later, idleTimeout, false);\n };\n\n proto.stopIdleTimer = function() {\n $log.info('avIdle idle timer has STOPPED');\n $timeout.cancel(this._idleTimer);\n };\n\n proto.startPing = function() {\n\n if(!this._keepAlive) {\n $log.info('avIdle ping timer has STARTED');\n this._keepAlive = avThrottle(this.keepAlive, pingTimeout, {context: this});\n }\n\n this._pingTimer = this._keepAlive();\n };\n\n proto.stopPing = function() {\n $log.info('avIdle ping timer has STOPPED');\n if(this._pingTimer) {\n $timeout.cancel(this._pingTimer);\n }\n };\n\n proto.keepAlive = function() {\n\n // destroy the reference to that a new throttle gets created upon\n // next user or system event\n this._keepAlive = null;\n var $http = $injector.get('$http');\n\n $http.get(pingUrl, {\n cache: false,\n api: true\n }).success(function() {\n $log.info('avIdle keep-alive SUCCESS');\n }).error(function() {\n $log.error('avIdle keep-alive FAILURE');\n });\n };\n\n proto.onEvent = function() {\n this.startIdleTimer();\n this.startPing();\n };\n\n return new AvIdle();\n\n };\n\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avIdleInterceptor', function(avIdle) {\n return {\n response: function(response) {\n return avIdle.response(response);\n },\n responseError: function(response) {\n return avIdle.responseError(response);\n }\n };\n\n });\n\n availity.core.config(function($httpProvider) {\n $httpProvider.interceptors.push('avIdleInterceptor');\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.value('avValConfig', {\n classes: {\n valid: 'ng-valid',\n invalid: 'ng-invalid',\n dirty: 'ng-dirty',\n pristine: 'ng-pristine',\n touched: 'ng-touched',\n untouched: 'ng-untouched',\n submitted: 'ng-submitted'\n },\n validators: [\n 'avValPattern',\n 'avValSize',\n 'avValRequired',\n 'avValDateRange',\n 'avValDate',\n 'avValPhone',\n 'avValEmail',\n 'avValNpi'\n ]\n });\n\n availity.core.constant('AV_VAL', {\n EVENTS: {\n REVALIDATE: 'av:val:revalidate',\n SUBMITTED: 'av:val:submitted',\n FAILED: 'av:val:failed',\n RESET: 'av:val:reset'\n },\n DEBOUNCE: 800,\n DATE_FORMAT: {\n SIMPLE: 'MM/DD/YYYY'\n },\n PATTERNS: {\n ALPHA_ONLY: /[^A-Za-z]+/g,\n NUMERIC_ONLY: /[^0-9]+/g\n }\n });\n\n availity.core.provider('avVal', function() {\n\n var validators = [];\n var rules = {};\n var services = {};\n\n this.addRules = function(_rules) {\n rules = angular.extend({}, rules, _rules);\n return rules;\n };\n\n this.addValidators = function(_validators) {\n validators = validators.concat(_validators);\n return validators;\n };\n\n this.$get = function($injector, $rootScope, $http, $log, avValConfig, AV_VAL) {\n\n var AvValidation = function() {\n this.initValidators();\n };\n\n var proto = AvValidation.prototype;\n\n proto.initValidators = function() {\n var self = this;\n\n validators = avValConfig.validators.concat(validators);\n\n angular.forEach(validators, function(name) {\n self.addValidator(name);\n });\n\n };\n\n proto.addValidator = function(name) {\n var validator = $injector.get(name);\n services[validator.name] = validator;\n };\n\n proto.addRules = function(_rules) {\n rules = angular.extend({}, rules, _rules);\n $rootScope.$broadcast(AV_VAL.EVENTS.REVALIDATE);\n };\n\n proto.validate = function(key, element, value, ruleName) {\n\n var ruleConfig = rules[key];\n if(!ruleConfig) {\n $log.error('Failed to get rules key [' + key + ']. Forms must be tagged with a rules set name for validation to work.');\n return;\n }\n\n var contraints = ruleConfig[ruleName];\n if(!contraints) {\n $log.info('Rule named [' + ruleName + '] could not be found in the current schema.');\n contraints = [];\n }\n\n var el = element[0];\n var results = [];\n var violations = [];\n var _valid = true;\n\n angular.forEach(contraints, function(rule, contraintName) {\n\n if(!rule) {\n // when extended rule sets, a user can pass nulls to cancel out a rule so if\n // one doesn't exist just continue\n return;\n }\n\n var validator = services[contraintName];\n\n if(angular.isUndefined(validator)) {\n $log.warn('No validator defined for `' + name + '`');\n return;\n }\n\n var valid = validator.validate(value, rule, element);\n\n var validationResult = {\n valid: valid,\n ruleName: ruleName,\n contraintName: contraintName,\n value: value,\n message: rule.message,\n field: el.name || el.id\n };\n\n var result = angular.extend({}, rule, validationResult);\n\n results.push(result);\n if(!valid) {\n violations.push(validationResult);\n }\n _valid = _valid && valid;\n\n });\n\n return {\n isValid: _valid,\n all: results, // all the constraint results\n violations: violations\n };\n\n };\n\n return new AvValidation();\n\n };\n\n });\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValUtils', function() {\n\n return {\n\n isDefined: function(value) {\n return angular.isDefined(value) && value !== '' && value !== null;\n },\n\n isEmpty: function(value) {\n return !this.isDefined(value) || $.trim(value) === '';\n }\n };\n\n });\n})(window);\n\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValSize', function(avValUtils) {\n\n var validator = {\n\n name: 'size',\n\n validate: function(value, rule) {\n\n var min = rule.min || 0;\n var max = rule.max;\n var type = rule.type ? rule.type.toLowerCase() : 'text';\n\n if(_.isNull(value) || _.isUndefined(value)) {\n value = '';\n }\n\n if(type === 'text') {\n value = value + '';\n return avValUtils.isEmpty(value) || value.length >= min && (max === undefined || value.length <= max);\n }\n\n // ... must be a Number\n if(!_.isNumber(value) && /^\\d+$/.test(value)) {\n value = parseInt(value, 10);\n }\n\n return avValUtils.isEmpty(value) || value >= min && (max === undefined || value <= max);\n\n }\n };\n\n return validator;\n\n });\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValPattern', function(avValUtils) {\n\n var validator = {\n name: 'pattern',\n REGEX: /^\\/(.*)\\/([gim]*)$/, //regular expression to test a regular expression\n asRegExp: function(pattern) {\n var match;\n\n if(pattern.test) {\n return pattern;\n } else {\n match = pattern.match(validator.REGEX);\n if(match) {\n return new RegExp(match[1], match[2]);\n } else {\n throw ('Expected ' + pattern + ' to be a RegExp');\n }\n }\n },\n validate: function(value, rule) {\n var values = _.isArray(rule.value) ? rule.value : [rule.value];\n\n var valid = false;\n\n _.each(values, function(expresion) {\n var pattern = validator.asRegExp(expresion);\n if(avValUtils.isEmpty(value) || pattern.test(value)) {\n valid = true;\n }\n });\n\n return valid;\n }\n };\n\n return validator;\n\n });\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValRequired', function(avValUtils) {\n\n var validator = {\n name: 'required',\n validate: function(value, rule, element) {\n\n // Using ngModelController.$isEmpty for required checks. A form component being empty is dependent on the\n // type of field:\n //\n // - radio\n // - checkbox\n // - text\n // - lists\n //\n // You can override $isEmpty for input directives whose concept of being empty is different to the\n // default. Radio and checkboxes directive do this because in its case a value of `false`\n // implies empty.\n //\n var ctrl = element && element.data('$ngModelController');\n if(ctrl) {\n return !ctrl.$isEmpty(value);\n }\n\n return !avValUtils.isEmpty(value);\n\n }\n };\n\n return validator;\n\n });\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValDateRange', function(AV_VAL, avValUtils) {\n\n var validator = {\n\n name: 'dateRange',\n\n getStartDate: function(start) {\n return validator.setMin(moment().add(start.value, start.units));\n },\n\n getEndDate: function(end) {\n return validator.setMax(moment().add(end.value, end.units) );\n },\n\n setMin: function(value) {\n\n // [fix]: if time is provided this may cause issues.\n value.set('hours', 0);\n value.set('minutes', 0);\n value.set('seconds', 0);\n\n return value;\n },\n\n setMax: function(value) {\n\n // [fix]: if time is provided this may cause issues.\n value.set('hours', 23);\n value.set('minutes', 59);\n value.set('seconds', 59);\n\n return value;\n },\n\n validation: function(value, rules) {\n\n var date;\n var startDate;\n var endDate;\n\n date = moment(value, rules.format || AV_VAL.DATE_FORMAT.SIMPLE);\n date.set('hours', 0);\n date.set('minutes', 0);\n date.set('seconds', 0);\n\n if(!avValUtils.isEmpty(rules.start.units) && !avValUtils.isEmpty(rules.end.units)) {\n startDate = validator.getStartDate(rules.start);\n endDate = validator.getEndDate(rules.end);\n } else {\n startDate = moment(rules.start.value, rules.format);\n endDate = validator.setMax(moment(rules.end.value, rules.format));\n }\n return date.isValid() && date.isBetween(startDate, endDate, 'day') || date.isSame(startDate, 'day') || date.isSame(endDate, 'day');\n },\n\n validate: function(value, rule) {\n return avValUtils.isEmpty(value) || validator.validation(value, rule);\n }\n\n };\n\n return validator;\n });\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValDate', function(AV_VAL, avValUtils) {\n\n var validator = {\n name: 'dateFormat',\n validate: function(value, rules) {\n var format = rules && rules.format ? rules.format : AV_VAL.DATE_FORMAT.SIMPLE;\n return avValUtils.isEmpty(value) || moment(value, format, true).isValid();\n }\n };\n return validator;\n });\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValNpi', function() {\n\n\n var validator = {\n\n name: 'npi',\n\n INTEGER_REGEX: /^\\d*$/,\n\n validate: function(value) {\n\n var npi = value || '';\n\n if (!validator.INTEGER_REGEX.test(npi) || npi.length !== 10) {\n return false;\n }\n\n var firstDigit = npi.charAt(0);\n if(!('1' === firstDigit || '2' === firstDigit || '3' === firstDigit || '4' === firstDigit)) {\n return false;\n }\n\n var digit = parseInt(npi.charAt(9), 10);\n npi = npi.substring(0, 9);\n npi = \"80840\" + npi;\n\n var alternate = true;\n var total = 0;\n\n for (var i = npi.length; i > 0; i--) {\n var next = parseInt(npi.charAt(i-1), 10);\n if (alternate) {\n next = next*2;\n if (next > 9) {\n next = (next % 10) + 1;\n }\n }\n total += next;\n alternate = !alternate;\n }\n\n var roundUp = Math.ceil(total / 10) * 10;\n var calculatedCheck = roundUp - total;\n\n if (calculatedCheck !== digit) {\n return false;\n }\n\n return true;\n }\n\n };\n\n return validator;\n\n });\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValPhone', function(avValPattern) {\n\n var PHONE_PATTERN = /^([0-9][\\.\\-]?)?[(]{0,1}[0-9]{3}[)\\.\\- ]{0,1}[0-9]{3}[\\.\\- ]{0,1}[0-9]{4}$/;\n\n var validator = {\n name: 'phone',\n validate: function(value, rule) {\n return avValPattern.validate(value, angular.extend({}, rule, { value: PHONE_PATTERN }));\n }\n };\n\n return validator;\n\n });\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValEmail', function(avValPattern) {\n\n var EMAIL_PATTERN = /[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;\n\n var validator = {\n name: 'email',\n validate: function(value, rule) {\n return avValPattern.validate(value, angular.extend({}, rule, { value: EMAIL_PATTERN }));\n }\n };\n\n return validator;\n\n });\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_GLOBALS', {\n REGIONS: [\n {\n 'name': 'Alabama',\n 'code': 'AL'\n },\n {\n 'name': 'Alaska',\n 'code': 'AK'\n },\n {\n 'name': 'Arizona',\n 'code': 'AZ'\n },\n {\n 'name': 'Arkansas',\n 'code': 'AR'\n },\n {\n 'name': 'California',\n 'code': 'CA'\n },\n {\n 'name': 'Colorado',\n 'code': 'CO'\n },\n {\n 'name': 'Connecticut',\n 'code': 'CT'\n },\n {\n 'name': 'Delaware',\n 'code': 'DE'\n },\n {\n 'name': 'District Of Columbia',\n 'code': 'DC'\n },\n {\n 'name': 'Florida',\n 'code': 'FL'\n },\n {\n 'name': 'Georgia',\n 'code': 'GA'\n },\n {\n 'name': 'Hawaii',\n 'code': 'HI'\n },\n {\n 'name': 'Idaho',\n 'code': 'ID'\n },\n {\n 'name': 'Illinois',\n 'code': 'IL'\n },\n {\n 'name': 'Indiana',\n 'code': 'IN'\n },\n {\n 'name': 'Iowa',\n 'code': 'IA'\n },\n {\n 'name': 'Kansas',\n 'code': 'KS'\n },\n {\n 'name': 'Kentucky',\n 'code': 'KY'\n },\n {\n 'name': 'Louisiana',\n 'code': 'LA'\n },\n {\n 'name': 'Maine',\n 'code': 'ME'\n },\n {\n 'name': 'Maryland',\n 'code': 'MD'\n },\n {\n 'name': 'Massachusetts',\n 'code': 'MA'\n },\n {\n 'name': 'Michigan',\n 'code': 'MI'\n },\n {\n 'name': 'Minnesota',\n 'code': 'MN'\n },\n {\n 'name': 'Mississippi',\n 'code': 'MS'\n },\n {\n 'name': 'Missouri',\n 'code': 'MO'\n },\n {\n 'name': 'Montana',\n 'code': 'MT'\n },\n {\n 'name': 'Nebraska',\n 'code': 'NE'\n },\n {\n 'name': 'Nevada',\n 'code': 'NV'\n },\n {\n 'name': 'New Hampshire',\n 'code': 'NH'\n },\n {\n 'name': 'New Jersey',\n 'code': 'NJ'\n },\n {\n 'name': 'New Mexico',\n 'code': 'NM'\n },\n {\n 'name': 'New York',\n 'code': 'NY'\n },\n {\n 'name': 'North Carolina',\n 'code': 'NC'\n },\n {\n 'name': 'North Dakota',\n 'code': 'ND'\n },\n {\n 'name': 'Ohio',\n 'code': 'OH'\n },\n {\n 'name': 'Oklahoma',\n 'code': 'OK'\n },\n {\n 'name': 'Oregon',\n 'code': 'OR'\n },\n {\n 'name': 'Pennsylvania',\n 'code': 'PA'\n },\n {\n 'name': 'Rhode Island',\n 'code': 'RI'\n },\n {\n 'name': 'South Carolina',\n 'code': 'SC'\n },\n {\n 'name': 'South Dakota',\n 'code': 'SD'\n },\n {\n 'name': 'Tennessee',\n 'code': 'TN'\n },\n {\n 'name': 'Texas',\n 'code': 'TX'\n },\n {\n 'name': 'Utah',\n 'code': 'UT'\n },\n {\n 'name': 'Vermont',\n 'code': 'VT'\n },\n {\n 'name': 'Virginia',\n 'code': 'VA'\n },\n {\n 'name': 'Washington',\n 'code': 'WA'\n },\n {\n 'name': 'West Virginia',\n 'code': 'WV'\n },\n {\n 'name': 'Wisconsin',\n 'code': 'WI'\n },\n {\n 'name': 'Wyoming',\n 'code': 'WY'\n }\n ]\n });\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_ANALYTICS', {\n VIRTUAL_PAGE_TRACKING: true,\n SERVICES: {\n PIWIK: 'avPiwikAnalytics',\n SPLUNK: 'avSplunkAnalytics'\n },\n EVENTS: {\n PAGE: '$locationChangeSuccess',\n DEFAULT: 'click'\n },\n PRE_FIX: /^avAnalytics(.*)$/,\n // should ignore these since they are part of the directives API\n IGNORE: ['avAnalyticsOn', 'avAnalyticsIf'],\n ENV: { // not sure if this should live here\n PROD: {\n DOMAIN: 'apps.availity.com',\n URL: 'https://piwik.availity.com/piwik/'\n },\n QA: {\n URL: 'https://qa-piwik.availity.com/piwik/'\n }\n }\n });\n\n availity.core.provider('avAnalytics', function(AV_ANALYTICS) {\n\n var plugins = [];\n var virtualPageTracking = AV_ANALYTICS.VIRTUAL_PAGE_TRACKING;\n var appId;\n\n this.registerPlugins = function(_plugins) {\n\n if(angular.isString(_plugins)) {\n _plugins = [_plugins];\n }\n\n if(_.isArray(_plugins)) {\n plugins = _plugins;\n } else {\n throw new Error('AvAnalytics.registerPlugins() expects a string or an array.');\n }\n\n return plugins;\n };\n\n this.setVirtualPageTracking = function(value) {\n if(arguments.length) {\n virtualPageTracking = !!value;\n }\n };\n\n this.isVirtualPageTracking = function() {\n return virtualPageTracking;\n };\n\n this.setAppID = function(id) {\n appId = id;\n return appId;\n };\n\n this.$get = function($injector, $q, $log, $rootScope, $location) {\n\n var AvAnalytics = function() {\n\n var self = this;\n this.services = {};\n\n if(!plugins || plugins.length === 0) {\n plugins = [AV_ANALYTICS.SERVICES.PIWIK, AV_ANALYTICS.SERVICES.SPLUNK];\n }\n\n angular.forEach(plugins, function(plugin) {\n\n try {\n self.services[plugin] = $injector.get(plugin);\n } catch(err) {\n $log.error('Could not load `{0}` plugin', [plugin]);\n }\n });\n\n };\n\n var proto = AvAnalytics.prototype;\n\n proto.init = function() {\n\n var self = this;\n\n if(this.isVirtualPageTracking()) {\n\n $rootScope.$on(AV_ANALYTICS.EVENTS.PAGE, function() {\n self.trackPageView($location.absUrl());\n });\n\n\n }\n\n angular.forEach(this.services, function(handler) {\n\n if(handler.isEnabled() && handler.init) {\n handler.init();\n }\n\n });\n\n };\n\n proto.trackEvent = function(properties) {\n\n var promises = [];\n\n angular.forEach(this.services, function(handler) {\n var promise = handler.trackEvent(properties);\n promises.push(promise);\n });\n\n return $q.all(promises);\n };\n\n proto.getAppId = function() {\n return appId;\n };\n\n proto.isVirtualPageTracking = function() {\n return virtualPageTracking;\n };\n\n proto.trackPageView = function(url) {\n\n var promises = [];\n\n angular.forEach(this.services, function(handler) {\n var promise = handler.trackPageView(url);\n promises.push(promise);\n });\n\n return $q.all(promises);\n };\n\n return new AvAnalytics();\n };\n\n });\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avAnalyticsUtils', function(AV_ANALYTICS, $log) {\n\n var AnalyticsUtils = function() {};\n\n var proto = AnalyticsUtils.prototype;\n\n proto.getProperties = function(attributes) {\n\n var self = this;\n var props = {};\n\n _.forEach(attributes, function(value, key) {\n if(self.isValidAttribute(key) && self.isNotIgnored(key)) {\n var result = self.getAttribute(key, value);\n props[result.key] = result.value;\n }\n });\n\n return props;\n };\n\n // Function detects external links in order to allow the analytics framework to run\n // before the browser follows a link.\n //\n // - target=\"_self\" - This opens an anchor in the same frame\n // - target=\"_parent\" - Opens the in the next level up of a frame if they were nested to inside one another\n // - target=\"_top\" - Opens the link as top document in the browser window\n // - target=\"_blank\" - Opens link in new tab new tab\n //\n proto.isExternalLink = function(attrs) {\n return attrs.href && !attrs.ngClick;\n };\n\n proto.isNotIgnored = function(key) {\n var ignored = _.includes(AV_ANALYTICS.IGNORE, key);\n return !ignored;\n };\n\n proto.isValidAttribute = function(key) {\n return AV_ANALYTICS.PRE_FIX.test(key);\n };\n\n proto.lowercase = function(str) {\n return str.substr(0, 1).toLowerCase() + str.substr(1);\n };\n\n proto.getAttribute = function(key, value) {\n var simpleKey = key.match(AV_ANALYTICS.PRE_FIX);\n\n if(simpleKey && simpleKey[1]) {\n return {\n key: this.lowercase(simpleKey[1]),\n value: value\n };\n }\n };\n\n proto.toNum = function(value) {\n var parsed = parseInt(value, 10);\n value = isNaN(parsed) ? 0 : parsed;\n return value;\n };\n\n proto.isValid = function(trackingValues) {\n var valid = true;\n\n if(trackingValues.value || trackingValues.value === 0) {\n delete trackingValues.value;\n }\n\n _.forEach(trackingValues, function(key, value) {\n if(availity.isBlank(value) || _.isUndefined(value)) {\n $log.warn('The analytic tracking value for ' + key.toUpperCase() +' is not defined.');\n valid = false;\n }\n });\n\n return valid;\n };\n\n return new AnalyticsUtils();\n });\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avSplunkAnalytics', function($log, avLogMessagesResource, $location) {\n\n var SplunkAnalyticsService = function() {};\n\n var proto = SplunkAnalyticsService.prototype;\n\n proto.trackEvent = function(properties) {\n properties.url = $location.$$absUrl || 'N/A';\n properties.level = properties.level || 'info';\n\n return avLogMessagesResource[properties.level](properties);\n };\n\n proto.trackPageView = function(url) {\n\n var properties = {\n event: 'page',\n level: 'info',\n url: url || $location.$$absUrl()\n };\n\n return avLogMessagesResource[properties.level](properties);\n };\n\n proto.isEnabled = function() {\n return true;\n };\n\n return new SplunkAnalyticsService();\n });\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.provider('avPiwikAnalytics', function() {\n\n var self;\n var siteId;\n var enabled = false;\n var customVariables = [];\n\n this.enabled = function(_enabled) {\n enabled = !!_enabled;\n };\n\n // can not push these items to `_paq` because it is defined\n // after page has loaded\n this._setCustomVariable = function(index, valueName, value, scope) {\n\n if(!index || isNaN(index)) {\n throw new Error('index must be a number');\n } else if(!valueName) {\n throw new Error('valueName must be declared');\n } else {\n customVariables.push(['setCustomVariable', index, valueName, value, scope]);\n }\n };\n\n this.setSiteID = function(_siteID) {\n this.enabled(true);\n siteId = _siteID;\n };\n\n // allow the user to pass a array of visit variables\n this.setVisitVariables = function(items) {\n _.forEach(items, function(item) {\n self._setCustomVariable(item[0], item[1], item[2], 'visit');\n });\n };\n\n this.setPageVariables = function(index, name, value) {\n this._setCustomVariable(index, name, value, 'page');\n };\n\n this.$get = function(avAnalyticsUtils, avUsersResource, AV_ANALYTICS, $injector, $log, $q, $document, $location) {\n\n var AvPiwikAnalytics = function() {\n window._paq = window._paq || [];\n };\n\n var proto = AvPiwikAnalytics.prototype;\n\n proto.trackEvent = function(properties) {\n\n if(!window._paq) {\n $log.warn('Piwik object `_paq` not found in global scope');\n return $q.when(false);\n }\n\n // http://piwik.org/docs/event-tracking/\n //\n // PAQ requires that eventValue be an integer.\n // Check to make sure value is a number if not convert it to 0.\n //\n if(properties.value) {\n properties.value = avAnalyticsUtils.toNum(properties.event);\n }\n\n // check to make sure that data being sent to piwik is a string and not null, empty or undefined\n if(!avAnalyticsUtils.isValid(properties)) {\n $log.warn('Invalid properties being passed. Tracking info will not be sent.');\n return $q.when(false);\n }\n\n return $q.when(window._paq.push(['trackEvent', properties.category, properties.action || properties.event, properties.label, properties.value]));\n };\n\n proto.trackPageView = function(url) {\n\n if(!window._paq) {\n $log.warn('Piwik object `_paq` not found in global scope');\n return $q.when(false);\n }\n\n return $q.when([\n window._paq.push(['setCustomUrl', url]),\n window._paq.push(['trackPageView', url])]\n );\n\n };\n\n proto.init = function() {\n\n avUsersResource.me().then(function(user) {\n window._paq.push(['setUserId', user.id]);\n // self.trackPageView(); //send another page track when the user data loads\n });\n\n if(!_.isFinite(siteId)) {\n $log.warn('Invalid Piwik Site Id. Piwik analytics has been disabled.');\n return;\n }\n\n var url;\n\n if($location.$$host === AV_ANALYTICS.ENV.PROD.DOMAIN) {\n url = AV_ANALYTICS.ENV.PROD.URL;\n } else {\n url = AV_ANALYTICS.ENV.QA.URL;\n }\n\n window._paq.push(['enableLinkTracking']);\n window._paq.push(['setTrackerUrl', url + 'piwik.php']);\n window._paq.push(['setSiteId', siteId]);\n\n _.forEach(customVariables, function(variable) {\n window._paq.push(variable);\n });\n\n $.getScript(url + 'piwik.js', function() {\n\n });\n\n };\n\n\n proto.isEnabled = function() {\n return enabled && siteId;\n };\n\n return new AvPiwikAnalytics();\n };\n\n });\n\n})(window);\n","/* global TraceKit */\n\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_EXCEPTIONS', {\n MESSAGES: {\n NOT_APPLICABLE: 'N/A'\n },\n TYPES: {\n EXCEPTION: 'exception'\n }\n });\n\n availity.core.provider('avExceptionAnalytics', function() {\n\n var _enabled = true;\n var appId;\n\n this.enabled = function(enabled) {\n _enabled = !!enabled;\n };\n\n this.setAppId = function(_id) {\n appId = _id;\n };\n\n this.$get = function(avLogMessagesResource, $location, AV_EXCEPTIONS) {\n\n var AvExceptionAnalytics = function() {\n\n };\n\n var proto = AvExceptionAnalytics.prototype;\n\n proto.init = function() {\n\n var self = this;\n\n if(!_enabled) {\n return;\n }\n\n TraceKit.remoteFetching = false;\n TraceKit.surroundingLinesToCollect = 11;\n\n // subscribe() hooks into window.error\n TraceKit.report.subscribe(function(stacktrace) {\n self.onError(stacktrace);\n });\n\n };\n\n proto.prettyPrint = function(stacktrace) {\n\n var message = '';\n\n var length = stacktrace.stack.length;\n\n for(var i = 0; i < length; i++) {\n message += [\n '[' + _.padLeft(i + '', 2, '0') + '] ',\n stacktrace.stack[i].func,\n ' ',\n stacktrace.stack[i].url,\n ':',\n stacktrace.stack[i].line,\n ':',\n stacktrace.stack[i].column,\n i + 1 < length ? '\\n' : ''\n ].join('');\n\n }\n\n return message;\n };\n\n proto.onError = function(stacktrace) {\n\n var userAgent = root.navigator && root.navigator.userAgent ? root.navigator.userAgent : AV_EXCEPTIONS.MESSAGES.NOT_APPLICABLE;\n\n var message = {\n errorDate: moment(new Date()).format('YYYY-MM-DDTHH:mm:ssZZ'),\n errorName: stacktrace.name,\n errorMessage: stacktrace.message,\n errorStack: this.prettyPrint(stacktrace),\n url: $location.$$absUrl,\n appId: appId || AV_EXCEPTIONS.MESSAGES.NOT_APPLICABLE,\n // appVersion: AV_EXCEPTIONS.MESSAGES.NOT_APPLICABLE,\n userAgent: userAgent,\n userLanguage: navigator.userLanguage,\n referrer: document.referrer,\n host: document.domain,\n screenWidth: $(window).width(),\n screenHeight: $(window).height(),\n sdkVersion: availity.VERSION\n };\n\n return this.log(message);\n\n };\n\n proto.log = function(message) {\n return avLogMessagesResource['error'](message);\n };\n\n proto.trackEvent = function(exception) {\n\n if(!_enabled) {\n return;\n }\n\n var stacktrace = TraceKit.computeStackTrace(exception);\n\n return this.onError(stacktrace);\n\n };\n\n return new AvExceptionAnalytics();\n\n };\n });\n\n availity.core.config(function($provide) {\n\n $provide.decorator('$exceptionHandler', function($delegate, $injector) {\n return function(exception, cause) {\n $delegate(exception, cause);\n var errorTacking = $injector.get('avExceptionAnalytics');\n errorTacking.trackEvent(exception);\n };\n });\n\n });\n\n availity.core.run(function(avExceptionAnalytics) {\n avExceptionAnalytics.init();\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity || {};\n\n availity.analytics = angular.module('availity.config', ['ng', 'availity']);\n\n availity.analytics.run(function(avAnalytics) {\n\n avAnalytics.init();\n\n });\n\n})(window);\n\n","// Issue: https://github.com/angular/angular.js/issues/11165\n// Polyfill: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString\n//\n// This polyfill is needed because Angular calls toISOString()\n// when an request parameter is of type Date. If this polyfill isn't present\n// the ajax call fails.\n//\n(function() {\n\n 'use strict';\n\n var pad = function(number) {\n if(number < 10) {\n return '0' + number;\n }\n return number;\n };\n\n if(!Date.prototype.toISOString) {\n\n Date.prototype.toISOString = function() {\n\n return this.getUTCFullYear() +\n '-' + pad(this.getUTCMonth() + 1) +\n '-' + pad(this.getUTCDate()) +\n 'T' + pad(this.getUTCHours()) +\n ':' + pad(this.getUTCMinutes()) +\n ':' + pad(this.getUTCSeconds()) +\n '.' + (this.getUTCMilliseconds() / 1000).toFixed(3).slice(2, 5) +\n 'Z';\n };\n }\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_MESSAGES', {\n\n EVENTS: {\n\n MESSAGE: 'message', // post message window event\n RESIZE: 'resize', // window resize event\n UNLOAD: 'beforeunload',\n\n AV_RESIZE: 'av:window:resize',\n AV_RECEIVED: 'av:message:received',\n AV_MAXIMIZE: 'nav:left:hide', // @deprecated,\n AV_MINIMIZE: 'nav:left:hide', // @deprecated\n // MAXIMIZE: 'av:window:maximize',\n // MINIMIZE: 'av:window:minimize',\n AV_LOGIN: 'av:login',\n AV_LOGOUT: 'av:logout',\n AV_SESSION_TIMEOUT: 'av:session:timeout'\n\n },\n\n RESIZE_DEBOUNCE: 400,\n\n DOMAIN: /https?:\\/\\/([\\w\\d\\-]+\\.)?availity\\.(com|net)/,\n LOCAL: /http:\\/\\/(localhost|127\\.0\\.0\\.1|0\\.0\\.0\\.0):(\\d+)/\n\n });\n\n})(window);\n","/* global JSON:false */\n\n// https://github.com/kylewelsby/angular-post-message/blob/master/src/angular-post-message.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.provider('avMessages', function() {\n\n var enabled = true;\n\n this.enable = function(value) {\n\n if(arguments.length) {\n enabled = !!value;\n }\n\n return enabled;\n\n };\n\n this.$get = function($rootScope, $log, AV_MESSAGES) {\n\n var AvMessages = function() {\n\n };\n\n var proto = AvMessages.prototype;\n\n proto.init = function() {\n\n var self = this;\n var $window = $(window);\n\n $window.on(AV_MESSAGES.EVENTS.MESSAGE, function(event) {\n self.onMessage(event);\n });\n\n $window.on(AV_MESSAGES.EVENTS.RESIZE, function() {\n self.onResize();\n });\n\n this.send(AV_MESSAGES.EVENTS.AV_MAXIMIZE);\n\n $rootScope.$on('$destroy', function() {\n self.destroy();\n });\n\n $window.on(AV_MESSAGES.EVENTS.UNLOAD, function() {\n self.send(AV_MESSAGES.EVENTS.AV_MINIMIZE);\n });\n\n };\n\n proto.destroy = function() {\n\n $(window).off(AV_MESSAGES.EVENTS.MESSAGE);\n $(window).off(AV_MESSAGES.EVENTS.RESIZE);\n $(window).off(AV_MESSAGES.EVENTS.UNLOAD);\n\n };\n\n proto.onResize = function() {\n\n var self = this;\n\n var resize = _.debounce(function() {\n\n var height = $('html').height();\n self.send({\n event: AV_MESSAGES.EVENTS.AV_RESIZE,\n height: height\n });\n\n }, AV_MESSAGES.RESIZE_DEBOUNCE);\n\n resize();\n\n };\n\n proto.isDomain = function(url) {\n\n if(AV_MESSAGES.DOMAIN.test(this.domain())) {\n return AV_MESSAGES.DOMAIN.test(url);\n }\n\n return AV_MESSAGES.LOCAL.test(url);\n };\n\n proto.isEnabled = function() {\n return enabled;\n };\n\n proto.onMessage = function(_event) {\n\n var event = _event;\n\n event = event.originalEvent || event; // jQuery wraps in `originalEvent`\n\n if(!event && !event.data) {\n // no op\n return;\n }\n\n // don't process messages emitted from same window\n if(event.source === window) {\n return;\n }\n\n if(!this.isDomain(event.origin)) {\n $log.warn('avMessages rejected a cross domain message since it does not match an *.availity.com or localhost');\n return;\n }\n\n\n var data = event.data;\n\n try {\n data = angular.fromJson(data);\n } catch(err) {\n $log.warn('avMessages.onMessage() failed to convert event to json payload');\n }\n\n if(_.isString(data)) {\n event = data;\n data = null;\n }else {\n event = data.event ? data.event : AV_MESSAGES.AV_RECEIVED;\n }\n\n $rootScope.$root.$broadcast(event, data);\n\n };\n\n proto.isIframe = function() {\n return window.self !== window.parent;\n };\n\n proto.domain = function() {\n\n var window = root;\n\n if(window.location.origin) {\n return window.location.origin;\n }\n\n if(window.location.hostname) {\n return window.location.protocol + '//' + window.location.hostname + (window.location.port ? ':' + window.location.port : '');\n }\n\n return '*';\n\n };\n\n proto.send = function(payload) {\n\n try {\n\n var message = _.isString(payload) ? payload : JSON.stringify(payload);\n this.postMessage(message, this.domain());\n\n } catch(err) {\n $log.error('avMessages.send() ', err);\n }\n };\n\n proto.postMessage = function(message, domain) {\n window.parent.postMessage(message, domain);\n };\n\n return new AvMessages();\n\n };\n\n });\n\n availity.core.run(function(avMessages) {\n\n if(avMessages.isEnabled()) {\n avMessages.init();\n }\n\n });\n\n})(window);\n\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["availity-angular.js","/source/index.js","/source/strings.js","/source/uuid.js","/source/urls.js","/source/print.js","/source/throttle.js","/source/logger.js","/source/logger-config.js","/source/polling.js","/source/api-factory.js","/source/api-users.js","/source/api-coverages.js","/source/api-configurations.js","/source/api-log-messages.js","/source/api-documents.js","/source/api-organizations.js","/source/api-codes.js","/source/api-user-permissions.js","/source/user-authorizations.js","/source/session.js","/source/idle.js","/source/idle-interceptor.js","/source/validator.js","/source/validator-utils.js","/source/validator-size.js","/source/validator-pattern.js","/source/validator-required.js","/source/validator-date-range.js","/source/validator-date-format.js","/source/validator-npi.js","/source/validator-phone.js","/source/validator-email.js","/source/globals.js","/source/analytics.js","/source/analytics-util.js","/source/analytics-splunk.js","/source/analytics-piwik.js","/source/analytics-exceptions.js","/source/analytics-config.js","/source/date-polyfill.js","/source/messages-constants.js","/source/messages.js"],"names":["root","availity","VERSION","MODULE","core","angular","module","originalModule","modules","name","deps","_","indexOf","window","__karma__","Error","push","exports","_stringify","object","isBlank","str","test","uid","uuid","prefix","index","length","digit","charCodeAt","join","String","fromCharCode","unshift","REGEX_API_URL","getRelativeUrl","url","result","match","print","document","queryCommandSupported","execCommand","focus","constant","OPTIONS","wait","update","trailing","leading","factory","AV_THROTTLE","$timeout","fn","options","merge","THRESHOLD","isDefined","UPDATE","timer","context","this","args","arguments","apply","later","provider","_enabled","enabled","$get","$injector","AvLogger","$delegate","$log","proto","prototype","supplant","o","_supplant","a","b","r","replace","isObject","element","elemStr","isUndefined","constructor","toString","getFormattedTimestamp","date","getHours","getMinutes","getSeconds","getMilliseconds","_log","originalFn","hash","location","now","Date","message","supplantData","stack","errorMessage","formatError","get","params","log","info","warn","debug","arg","sourceURL","line","error","config","$provide","decorator","INTERVAL","MAX_ELAPSED_TIME","MAX_RETRY","DECAY","EVENTS","REGEX_URL","PollingServiceFactory","$rootScope","$q","AV_POLLING","AV_API","AvPollingService","pendingRequests","response","isAsyncResponse","onAsyncReponse","when","setDefaults","defaultOptions","pollingInterval","pollingDecay","pollingMaxInterval","pollingRetryCount","pollingStartTime","getTime","extend","responseError","reject","api","status","isFunction","headers","HEADERS","SERVER","LOCATION","deferred","defer","queueRequest","notify","promise","getUrl","self","_url","_config","method","pollingMaxRetry","_pollingDecay","cache","request","id","timeout","getPollingTimeout","retryRequest","pushRequest","popRequest","i","splice","isPollingMaxTimeout","elaspedTime","isElapsed","isMaxRetried","isPollable","_isTimeout","_isMax","cancel","increment","successCallback","resolve","errorCallback","$http","then","incrementCounter","incrementDecay","clearRequests","forEach","ID","STATUS","GLOBAL_ID","CLIENT","SESSION_ID","AUTH","OVERRIDE","CALLBACK_URL","CUSTOMER_ID","path","resourceGroup","version","level","suffix","ApiResourcesFactory","avPollingService","AvApiResource","isString","charAt","_cacheBust","cacheBust","_getUrl","_getApiUrl","_createResponse","data","_request","afterCallback","success","_response","_promise","successResponse","call","errorResponse","notifyResponse","always","normalize","joined","slice","create","beforeCreate","afterCreate","afterGet","query","afterQuery","isNumber","beforeUpdate","afterUpdate","remove","afterRemove","UserServiceFactory","AvUsersResource","user","me","LogMessagesFactory","AvLogMessagesResource","buildRequest","entries","requestPayload","AvDocumentsResourceFactory","AvDocumentsResource","getContents","getContentsUrl","OrganizationResourceFactory","OrganizationResource","getOrganizations","organizations","AvCodesResourceFactory","AvCodesResource","getCodes","page","offset","list","q","results","codes","has","each","code","moreVal","totalCount","limit","more","AvUserPermissionsResourceFactory","AvUserPermissionsResource","sessionDate","moment","toISOString","axiUserPermissions","getPermissions","permissionIds","region","permissionId","AvUserAuthorizationsFactory","avUserPermissionsResource","AvUserAuthorizations","setRegion","setPermissionIds","isArray","isAuthorized","getPermission","permission","isAnyAuthorized","permissions","findWhere","undefined","_permissions","union","toPermissionMap","getPayers","organizationId","organization","resources","map","key","toPermission","description","geographies","SESSION_TIMEOUT","NOT_AUTHORIZED","avUsersResource","AvSession","getUser","destroy","permisions","IDLE_INACTIVE","IDLE_ACTIVE","SESSION_TIMEOUT_ACTIVE","SESSION_TIMEOUT_REDIRECT","HUMAN","MACHINE","INTERVALS","PING","IDLE","SESSION","URLS","HOME","AV_IDLE","pingUrl","redirectUrl","sessionTimeout","idleTimeout","pingTimeout","enable","value","setSessionTimeout","setIdleTimeout","setPingTimeout","setPingUrl","$document","avThrottle","AvIdle","_idleTimer","_sessionTimer","_pingTimer","_keepAlive","idleActive","sessionActive","listeners","init","stop","start","listener","setRedirectUrl","$on","find","on","event","onEvent","oldUrl","newUrl","href","startIdleTimer","startSessionTimer","off","stopPing","stopSessionTimer","stopIdleTimer","isEnabled","isApiRequest","$broadcast","startPing","keepAlive","avIdle","$httpProvider","interceptors","classes","valid","invalid","dirty","pristine","touched","untouched","submitted","validators","REVALIDATE","SUBMITTED","FAILED","RESET","DEBOUNCE","DATE_FORMAT","SIMPLE","PATTERNS","ALPHA_ONLY","NUMERIC_ONLY","rules","services","addRules","_rules","addValidators","_validators","concat","avValConfig","AV_VAL","AvValidation","initValidators","addValidator","validator","validate","ruleName","ruleConfig","contraints","el","violations","_valid","rule","contraintName","validationResult","field","isValid","all","isEmpty","$","trim","avValUtils","min","max","type","toLowerCase","isNull","parseInt","REGEX","asRegExp","pattern","RegExp","values","expresion","ctrl","$isEmpty","getStartDate","setMin","add","units","getEndDate","end","setMax","set","validation","startDate","endDate","format","isBetween","isSame","INTEGER_REGEX","npi","firstDigit","substring","alternate","total","next","roundUp","Math","ceil","calculatedCheck","avValPattern","PHONE_PATTERN","EMAIL_PATTERN","REGIONS","VIRTUAL_PAGE_TRACKING","SERVICES","PIWIK","SPLUNK","PAGE","DEFAULT","PRE_FIX","IGNORE","ENV","PROD","DOMAIN","URL","QA","AV_ANALYTICS","plugins","virtualPageTracking","appId","registerPlugins","_plugins","setVirtualPageTracking","isVirtualPageTracking","setAppID","$location","AvAnalytics","plugin","err","trackPageView","absUrl","handler","trackEvent","properties","promises","getAppId","AnalyticsUtils","getProperties","attributes","props","isValidAttribute","isNotIgnored","getAttribute","isExternalLink","attrs","ngClick","ignored","includes","lowercase","substr","simpleKey","toNum","parsed","isNaN","trackingValues","toUpperCase","avLogMessagesResource","SplunkAnalyticsService","$$absUrl","siteId","customVariables","_setCustomVariable","valueName","scope","setSiteID","_siteID","setVisitVariables","items","item","setPageVariables","avAnalyticsUtils","AvPiwikAnalytics","_paq","category","action","label","isFinite","$$host","variable","getScript","MESSAGES","NOT_APPLICABLE","TYPES","EXCEPTION","setAppId","_id","AV_EXCEPTIONS","AvExceptionAnalytics","TraceKit","remoteFetching","surroundingLinesToCollect","report","subscribe","stacktrace","onError","prettyPrint","padLeft","func","column","userAgent","navigator","errorDate","errorName","errorStack","userLanguage","referrer","host","domain","screenWidth","width","screenHeight","height","sdkVersion","exception","computeStackTrace","cause","errorTacking","run","avExceptionAnalytics","analytics","avAnalytics","pad","number","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","toFixed","MESSAGE","RESIZE","UNLOAD","AV_RESIZE","AV_RECEIVED","AV_MAXIMIZE","AV_MINIMIZE","AV_LOGIN","AV_LOGOUT","AV_SESSION_TIMEOUT","RESIZE_DEBOUNCE","LOCAL","AV_MESSAGES","AvMessages","$window","onMessage","onResize","send","resize","debounce","isDomain","_event","originalEvent","source","origin","fromJson","$root","isIframe","parent","hostname","protocol","port","payload","JSON","stringify","postMessage","avMessages"],"mappings":"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","file":"availity-angular.min.js","sourcesContent":["/**\n * availity-angular v1.8.1 -- January-20\n * Copyright 2016 Availity, LLC \n */\n\n// Source: /lib/core/index.js\n\n\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity || {};\n availity.VERSION = 'v1.8.1';\n availity.MODULE = 'availity';\n availity.core = angular.module(availity.MODULE, ['ng']);\n\n var originalModule = angular.module;\n var modules = [];\n\n angular.module = function(name, deps) {\n\n if(deps && _.indexOf(modules, name) !== -1 && !window.__karma__) {\n throw new Error('redefining module: ' + name);\n }\n\n modules.push(name);\n\n return originalModule(name, deps);\n };\n\n root.availity = availity;\n\n if(typeof module !== 'undefined' && module.exports) {\n module.exports = availity;\n }\n\n})(window);\n\n\n// Source: /lib/core/utils/strings.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n // https://github.com/epeli/underscore.string/blob/cebddf40cf2e10f0e9b596d9654edd0a1cfefc15/helper/makeString.js\n availity._stringify = function(object) {\n if(object === null) {\n return '';\n }\n return '' + object;\n };\n\n // https://github.com/epeli/underscore.string/blob/cebddf40cf2e10f0e9b596d9654edd0a1cfefc15/isBlank.js\n availity.isBlank = function(str) {\n return (/^\\s*$/).test(availity._stringify(str));\n };\n\n})(window);\n\n// Source: /lib/core/utils/uuid.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n var uid = ['0', '0', '0'];\n\n availity.uuid = function(prefix) {\n var index = uid.length;\n var digit;\n\n while(index) {\n index--;\n digit = uid[index].charCodeAt(0);\n if(digit === 57 /*'9'*/) {\n uid[index] = 'A';\n return prefix ? prefix + uid.join('') : uid.join('');\n }\n if(digit === 90 /*'Z'*/) {\n uid[index] = '0';\n } else {\n uid[index] = String.fromCharCode(digit + 1);\n return prefix ? prefix + uid.join('') : uid.join('');\n }\n }\n uid.unshift('0');\n return prefix ? prefix + uid.join('') : uid.join('');\n };\n\n})(window);\n\n// Source: /lib/core/utils/urls.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.REGEX_API_URL = /^.*?api.availity.com(.*)$/;\n\n availity.getRelativeUrl = function(url) {\n var result = url.match(availity.REGEX_API_URL);\n if(result && result[1]) {\n return '/api' + result[1];\n }\n\n return url;\n };\n\n})(window);\n\n// Source: /lib/core/utils/print.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n // https://github.com/jasonday/printThis/commit/66f9cbd0e3760767342eed4ef32cf8294417b227\n availity.print = function() {\n\n if(document.queryCommandSupported('print')) {\n document.execCommand('print', false, null);\n } else {\n window.focus();\n window.print();\n }\n };\n\n})(window);\n\n// Source: /lib/core/utils/throttle.js\n// Original => https://github.com/mgcrea/angular-strap/blob/master/src/helpers/debounce.js\n\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_THROTTLE', {\n OPTIONS: {\n wait: 1000,\n update: false,\n trailing: true,\n leading: false\n }\n });\n\n availity.core.factory('avThrottle', function(AV_THROTTLE, $timeout) {\n\n return function(fn, wait, options) {\n\n options = _.merge({}, AV_THROTTLE.OPTIONS, options);\n\n wait = wait ? wait : AV_THROTTLE.THRESHOLD;\n var update = angular.isDefined(options.update) ? options.update : AV_THROTTLE.UPDATE;\n var timer = null;\n\n return function() {\n var context = options.context || this;\n var args = arguments;\n\n if(!timer) {\n if(options.leading !== false) {\n fn.apply(context, args);\n }\n\n var later = function() {\n timer = null;\n if(options.trailing !== false) {\n fn.apply(context, args);\n }\n };\n\n timer = $timeout(later, wait, update);\n }\n\n return timer;\n\n };\n };\n });\n\n})(window);\n\n// Source: /lib/core/logger/logger.js\n// Orginal => https://github.com/ericzon/angular-ny-logger/blob/0c594e864c93e7f33d36141200096bc6139ddde1/angular-ny-logger.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.provider('AvLogger', function() {\n\n var _enabled = false;\n\n this.enabled = function(enabled) {\n _enabled = !!enabled;\n };\n\n this.$get = function($injector) {\n\n var AvLogger = function(context, $delegate) {\n\n this.context = context || '';\n this.$log = $delegate;\n\n };\n\n var proto = AvLogger.prototype;\n\n AvLogger.supplant = function(str, o) {\n\n var _supplant = function (a, b) {\n var r = o[b];\n return r;\n };\n\n return str.replace(/\\{([^{}]*)\\}/g, _supplant);\n };\n\n AvLogger.isObject = function(element) {\n var elemStr = ( !angular.isUndefined(element) && !angular.isUndefined(element.constructor) ) ? element.constructor.toString() : '';\n return (elemStr.indexOf('Object') > -1);\n };\n\n AvLogger.getFormattedTimestamp = function(date) {\n\n return AvLogger.supplant('{0}:{1}:{2}:{3}', [\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds()\n ]);\n\n };\n\n proto._log = function(originalFn, args) {\n\n // Allow enabling logger through query params\n // Ex:\n //\n // http://localhost:3000/ui.html#avLogger\n\n var hash = window.location.hash;\n hash = hash || '';\n\n if(!_enabled && hash.indexOf('avLogger') < 0 && originalFn !== 'error') {\n return;\n }\n\n var now = AvLogger.getFormattedTimestamp(new Date());\n var message = '';\n var supplantData = [];\n\n var context = this.context ? ' [' + this.context + '] ' : '';\n\n switch(args.length) {\n case 1:\n // (1) If the user supplied one argument, then the argument must be\n // the message itself and _log()\n // will print: - : \n supplantData = args[0];\n message = AvLogger.supplant('{0}{1} - {2}', [now, context, args[0]]);\n break;\n case 3:\n // (3) If the user supplied three arguments, then the first argument\n // is a method name, the second is the message and the third is an\n // object of variables to interpolate with the message. For this, _log()\n // will print: - - ('')\n supplantData = args[2];\n message = AvLogger.supplant(\"{0}{1} - {2}(\\'{3}\\')\", [now, context, args[0], args[1]]);\n break;\n case 2:\n // (2) If the user provided two arguments, we need to find out whether\n // they supplied a method name or an interpolation object.\n // In order to figure that out, we’ll check the type of the last argument.\n // If it is a string, then it has to be the message itself while the\n // first argument is the method name. Otherwise consider the first argument\n // as the message and the second as array of interpolation variables.\n // The output print will be according to this check.\n if(typeof args[1] === 'string') {\n\n message = AvLogger.supplant(\"{0}{1} - {2}(\\'{3}\\')\", [now, context, args[0], args[1]]);\n\n } else {\n\n // If the message is an error, there may be a stack included. If so, we\n // should include the stack in the message to make it more meaningful.\n if(args[0].stack) {\n var errorMessage = this.formatError(args[0]);\n message = AvLogger.supplant('{0}{1} - {2}', [now, context, errorMessage]);\n supplantData = args[1];\n\n }else {\n supplantData = args[1];\n\n }\n\n }\n break;\n }\n\n var $log = this.$log || $injector.get('$log');\n\n var params = (AvLogger.isObject(supplantData)) ? [message, supplantData] : [AvLogger.supplant(message, supplantData)];\n $log[originalFn].apply(null, params);\n\n };\n\n proto.log = function() {\n this._log('log', arguments);\n };\n\n proto.info = function() {\n this._log('info', arguments);\n };\n\n proto.warn = function() {\n this._log('warn', arguments);\n };\n\n proto.debug = function() {\n this._log('debug', arguments);\n };\n\n // https://github.com/angular/angular.js/blob/v1.2.27/src/ng/log.js#L122\n proto.formatError = function(arg) {\n if(arg instanceof Error) {\n if(arg.stack) {\n\n arg = (arg.message && arg.stack.indexOf(arg.message) === -1) ?\n 'Error: ' + arg.message + '\\n' + arg.stack : arg.stack;\n\n } else if(arg.sourceURL) {\n arg = arg.message + '\\n' + arg.sourceURL + ':' + arg.line;\n }\n }\n return arg;\n };\n\n proto.error = function() {\n this._log('error', arguments);\n };\n\n return AvLogger;\n\n };\n\n });\n\n\n})(window);\n\n// Source: /lib/core/logger/logger-config.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.config(function($provide) {\n\n $provide.decorator('$log', function($delegate, AvLogger) {\n return new AvLogger(null, $delegate);\n });\n\n });\n\n})(window);\n\n// Source: /lib/core/polling/polling.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_POLLING', {\n INTERVAL: 1000, // delay in ms before retrying an async request\n MAX_ELAPSED_TIME: 5000, // max time in ms before polling stops and rejects original request\n MAX_RETRY: 30, // # of times the request will be tried\n DECAY: 1.2, // % the polling interval decays after every retry\n // maximum time polling is allowed before rejecting the request\n EVENTS: {\n MAX_RETRY: 'av:polling:max:retry'\n },\n REGEX_URL: /^.*?api.availity.com(.*)$/ // capture the relative url from API\n });\n\n var PollingServiceFactory = function($rootScope, $q, $injector, $timeout, $log, AV_POLLING, AV_API) {\n\n var AvPollingService = function() {\n this.pendingRequests = []; // stores all request for polling\n };\n\n var proto = AvPollingService.prototype;\n\n proto.response = function(response) {\n\n if(this.isAsyncResponse(response)) {\n return this.onAsyncReponse(response);\n }\n\n return response || $q.when(response);\n };\n\n proto.setDefaults = function(config) {\n\n var defaultOptions = {\n pollingInterval: AV_POLLING.INTERVAL,\n pollingDecay: AV_POLLING.DECAY,\n pollingMaxInterval: AV_POLLING.MAX_ELAPSED_TIME,\n pollingRetryCount: 0,\n pollingStartTime: new Date().getTime()\n };\n\n return _.extend(defaultOptions, config);\n };\n\n proto.responseError = function(response) {\n // Return the promise rejection\n return $q.reject(response);\n };\n\n /**\n * API layer return a link with a polling url for\n * async responses.\n *\n * @param {Object} response ajax response\n * @return {Boolean} true if response has status of 202 (accepted) and location param in header with uri+session link\n */\n proto.isAsyncResponse = function(response) {\n\n return response &&\n response.config &&\n response.config.api &&\n response.status &&\n response.status === 202 &&\n angular.isFunction(response.headers) && !availity.isBlank(response.headers(AV_API.HEADERS.SERVER.LOCATION));\n };\n\n proto.onAsyncReponse = function(response) {\n\n response.config = this.setDefaults(response.config);\n\n var deferred = $q.defer();\n\n this.queueRequest(deferred, response);\n\n // [rm3]: Can't call notify before you return promise object?\n $timeout(function() {\n // Notify deferred listeners with the original server response\n deferred.notify(response);\n }, 0, false);\n\n return deferred.promise;\n };\n\n proto.getUrl = function(url) {\n\n var result = url.match(AV_POLLING.REGEX_URL);\n if(result && result[1]) {\n return '/api' + result[1];\n }\n\n return url;\n };\n\n proto.queueRequest = function(deferred, response) {\n\n var self = this;\n // server replies with location header so set the url into config\n var _url = availity.getRelativeUrl(response.headers(AV_API.HEADERS.SERVER.LOCATION));\n var _config = response.config;\n\n\n // headers – {Object} – Map of strings or functions which return strings representing HTTP headers\n // to send to the server. If the return value of a function is null, the header\n // will not be sent. Functions accept a config object as an argument.\n var config = {\n method: 'GET',\n api: true,\n headers: _config.headers,\n pollingInterval: _config.pollingInterval,\n pollingMaxRetry: _config.pollingMaxRetry,\n pollingMaxInterval: _config.pollingMaxInterval,\n pollingStartTime: _config.pollingStartTime,\n _pollingDecay: _config._pollingDecay,\n pollingRetryCount: _config.pollingRetryCount,\n pollingDecay: _config.pollingDecay,\n url: _url, /* set the url from the server response */\n cache: false\n };\n\n var request = {\n id: availity.uuid('request-'),\n config: config,\n deferred: deferred\n };\n\n var timeout = this.getPollingTimeout(config);\n\n // each async request should run on its own timer\n var timer = $timeout(function() {\n self.retryRequest(request.id);\n }, timeout, false);\n\n request.timer = timer;\n\n // add the async request to the queue\n this.pushRequest(request);\n\n };\n\n proto.popRequest = function(id) {\n\n var index = null;\n var request = null;\n\n for(var i = 0; i < this.pendingRequests.length; i++) {\n if(this.pendingRequests[i].id === id) {\n index = i;\n break;\n }\n }\n\n request = this.pendingRequests[index];\n this.pendingRequests.splice(index, 1);\n\n return request;\n };\n\n proto.pushRequest = function(request) {\n this.pendingRequests.push(request);\n };\n\n proto.getPollingTimeout = function(config) {\n return config.pollingDecay * config.pollingInterval;\n };\n\n proto.isPollingMaxTimeout = function(config) {\n var now = new Date().getTime();\n var elaspedTime = now - config.pollingStartTime;\n var isElapsed = elaspedTime > config.pollingMaxInterval;\n return isElapsed;\n },\n\n proto.isMaxRetried = function(config) {\n return config.pollingRetryCount >= AV_POLLING.MAX_RETRY;\n };\n\n proto.isPollable = function(config) {\n var _isTimeout = this.isPollingMaxTimeout(config);\n var _isMax = this.isMaxRetried(config);\n\n return _isTimeout || _isMax ? false : true;\n\n };\n\n proto.retryRequest = function(id) {\n\n var self = this;\n var request = this.popRequest(id);\n $timeout.cancel(request.timer);\n\n var config = request.config;\n\n var deferred = request.deferred;\n\n if(!this.isPollable(config)) {\n $log.info('Rejecting pollable response due to timeout');\n return deferred.reject(request);\n }\n\n // increment counters and polling timeouts\n this.increment(config);\n\n function successCallback(response) {\n if(self.isAsyncResponse(response)) {\n deferred.notify(response);\n self.queueRequest(request.deferred, response);\n } else {\n deferred.resolve(response);\n }\n }\n\n function errorCallback(response) {\n deferred.reject(response);\n }\n\n // Silly circular dependency trick\n var $http = $injector.get('$http');\n\n $http(config).then(successCallback, errorCallback);\n\n };\n\n proto.increment = function(config) {\n this.incrementCounter(config);\n this.incrementDecay(config);\n };\n\n proto.incrementDecay = function(config) {\n if(!config._pollingDecay) {\n // store the original decay param\n config._pollingDecay = config.pollingDecay;\n }\n config.pollingDecay *= config._pollingDecay;\n };\n\n proto.incrementCounter = function(config) {\n config.pollingRetryCount++;\n };\n\n proto.clearRequests = function() {\n angular.forEach(this.pendingRequests, function(request) {\n $timeout.cancel(request.timer);\n });\n this.pendingRequests = [];\n };\n\n return new AvPollingService();\n\n };\n\n availity.core.factory('avPollingService', PollingServiceFactory);\n\n})(window);\n\n// Source: /lib/core/api/api-factory.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_API', {\n HEADERS: {\n SERVER: {\n ID: 'X-API-ID',\n LOCATION: 'Location',\n STATUS: 'X-Status-Message',\n GLOBAL_ID: 'X-Global-Transaction-ID'\n },\n CLIENT: {\n SESSION_ID: 'X-Session-ID',\n AUTH: 'Authorization',\n OVERRIDE: 'X-HTTP-Method-Override',\n CALLBACK_URL: 'X-Callback-URL',\n CUSTOMER_ID: 'X-Availity-Customer-ID'\n }\n }\n });\n\n var defaultOptions = {\n // pre-prend the url with a value like `/public` so we can build urls like `public/api/v1/*`\n prefix: '',\n // default base url for endpoints\n path: '/api',\n // url resource group, such as `/foo`, for urls like `public/api/foo/v1/*`\n resourceGroup: '',\n // url to resource endpoint like `coverages` or `payers`\n url: null,\n // defaults to version 1\n version: '/v1',\n // governance level `/internal`\n level: '',\n // post-pend the url with `.json`, `.txt` or `.xml`\n suffix: '',\n // cache all request by default\n cache: true,\n // flag used to enable behaviors around the Availity Rest API\n api: true,\n // # of times the polling service has tried to get a response\n pollingRetryCount: 0,\n // in ms\n pollingInterval: 1000,\n // % the polling interval decays after every retry\n pollingDecay: 1.2,\n // maximum time polling is allowed before rejecting the request\n pollingMaxInterval: 30000\n\n };\n\n // Factory that creates ApiResourcess\n var ApiResourcesFactory = function($http, $q, avPollingService) {\n\n var AvApiResource = function(options) {\n\n if(!options) {\n throw new Error('[options] cannot be null or undefined');\n }\n\n // if string the assume url is being passed in\n if(angular.isString(options)) {\n options = options.charAt(0) === '/' ? options : '/' + options;\n options = angular.extend({}, {url: options});\n }\n\n if(!options.url) {\n throw new Error('[url] cannot be null');\n }\n\n // get the default options and merge into this instance\n this.options = angular.extend({}, defaultOptions, (options || {}));\n };\n\n // Alias the prototype\n var proto = AvApiResource.prototype;\n\n proto._config = function(config) {\n return angular.extend({}, this.options, (config || {}));\n },\n\n proto._cacheBust = function(config) {\n config.cacheBust = null;\n config.params = config.params || {};\n config.params.cacheBust = new Date().getTime();\n return config;\n },\n\n proto._getUrl = function(id) {\n if(this.options.api) {\n return this._getApiUrl(id);\n }\n\n return this.options.url;\n };\n\n proto._createResponse = function(data, status, headers, config) {\n return {\n data: data,\n status: status,\n headers: headers,\n config: config\n };\n };\n\n proto._request = function(config, afterCallback) {\n\n var self = this;\n var defer = $q.defer();\n\n $http(config)\n .success(function(data, status, headers, _config) {\n\n var _response = {\n data: data,\n status: status,\n headers: headers,\n config: _config\n };\n\n // handle the async response if applicable\n var _promise = $q.when(avPollingService.response(_response));\n // notify the promise listener of the original response\n defer.notify(_response);\n\n // handle the polling service promise\n _promise.then(function(successResponse) {\n\n // if service has a callback then call it\n // var response = self._createResponse(data, status, headers, _config);\n if(afterCallback) {\n successResponse = afterCallback.call(self, successResponse, config.data);\n }\n defer.resolve(successResponse);\n }, function(errorResponse) {\n defer.reject(errorResponse);\n }, function(notifyResponse) {\n defer.notify(notifyResponse);\n });\n\n }).error(function(data, status, headers, _config) {\n var response = self._createResponse(data, status, headers, _config);\n defer.reject(response);\n });\n\n var promise = defer.promise;\n\n // recreate the success callback ala $http\n promise.success = function(fn) {\n promise.then(function(response) {\n fn(response.data, response.status, response.headers, response.config);\n });\n return promise;\n };\n\n // recreate the error callback ala $http\n promise.error = function(fn) {\n promise.then(null, function(response) {\n fn(response.data, response.status, response.headers, config);\n });\n return promise;\n };\n\n promise.always = promise['finally'];\n\n return promise;\n };\n\n proto.normalize = function(url) {\n return url\n .replace(/[\\/]+/g, '/')\n .replace(/\\/$/, '');\n };\n\n proto.join = function () {\n var joined = [].slice.call(arguments, 0).join('/');\n return this.normalize(joined);\n };\n\n proto._getApiUrl = function(id) {\n\n id = id ? '/' + id : '';\n\n var url = this.join(\n this.options.prefix,\n this.options.path,\n this.options.level,\n this.options.resourceGroup,\n this.options.version,\n this.options.url,\n id);\n\n return url + this.options.suffix;\n };\n\n proto.create = function(data, config) {\n\n if(!data) {\n throw new Error('called method without [data]');\n }\n\n if(this.beforeCreate) {\n data = this.beforeCreate(data);\n }\n\n config = this._config(config);\n config.method = 'POST';\n config.url = this._getUrl();\n config.data = data;\n\n return this._request(config, this.afterCreate);\n\n };\n\n proto.get = function(id, config) {\n\n if(!id) {\n throw new Error('called method without [id]');\n }\n\n config = this._config(config);\n if(config.cacheBust) {\n config = this._cacheBust(config);\n }\n config.method = 'GET';\n config.url = this._getUrl(id);\n\n\n return this._request(config, this.afterGet);\n\n };\n\n proto.query = function(config) {\n\n config = this._config(config);\n if(config.cacheBust) {\n config = this._cacheBust(config);\n }\n config.method = 'GET';\n config.url = this._getUrl();\n\n return this._request(config, this.afterQuery);\n\n };\n\n proto.update = function(id, data, config) {\n\n var url;\n\n if(_.isString(id) || _.isNumber(id)) {\n url = this._getUrl(id);\n }else {\n url = this._getUrl();\n // At this point the function signature becomes:\n //\n // proto.update = function(data, config) {} a.k.a function(id, data)\n //\n config = data; // config is really the 2nd param\n data = id; // data is really the first param\n }\n\n if(this.beforeUpdate) {\n data = this.beforeUpdate(data);\n }\n\n config = this._config(config);\n config.method = 'PUT';\n config.url = url;\n config.data = data;\n\n return this._request(config, this.afterUpdate);\n\n };\n\n proto.remove = function(id, config) {\n\n var url;\n var data;\n\n if(_.isString(id) || _.isNumber(id)) {\n url = this._getUrl(id);\n }else {\n // At this point the function signature becomes:\n //\n // proto.remove = function(data, config)\n //\n url = this._getUrl();\n data = id;\n }\n\n config = this._config(config);\n config.method = 'DELETE';\n config.url = url;\n config.data = data;\n\n return this._request(config, this.afterRemove);\n };\n\n proto.beforeCreate = null;\n proto.afterCreate = null;\n proto.afterQuery = null;\n proto.afterGet = null;\n proto.beforeUpdate = null;\n proto.afterUpdate = null;\n proto.afterRemove = null;\n\n return AvApiResource;\n\n };\n\n availity.core.factory('AvApiResource', ApiResourcesFactory);\n\n})(window);\n\n// Source: /lib/core/api/api-users.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n var UserServiceFactory = function(AvApiResource) {\n\n var AvUsersResource = function() {\n AvApiResource.call(this, 'users');\n };\n\n angular.extend(AvUsersResource.prototype, AvApiResource.prototype, {\n\n afterGet: function(response) {\n var user = response.data.user ? response.data.user : response.data;\n return user;\n },\n\n me: function(config) {\n return this.get('me', config);\n }\n\n });\n\n return new AvUsersResource();\n\n };\n\n availity.core.factory('avUsersResource', UserServiceFactory);\n\n})(window);\n\n// Source: /lib/core/api/api-coverages.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avCoveragesResource', function(AvApiResource) {\n return new AvApiResource({version: '/v1', url: '/configurations', cache: false});\n });\n\n})(window);\n\n// Source: /lib/core/api/api-configurations.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avConfigurationsResource', function(AvApiResource) {\n return new AvApiResource({version: '/v1', url: '/configurations'});\n });\n\n})(window);\n\n// Source: /lib/core/api/api-log-messages.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n var LogMessagesFactory = function(AvApiResource) {\n\n var AvLogMessagesResource = function() {\n\n AvApiResource.call(this, {\n version: '/v1',\n url: '/log-messages'\n });\n };\n\n angular.extend(AvLogMessagesResource.prototype, AvApiResource.prototype, {\n\n buildRequest: function(level, entries) {\n\n var requestPayload = {};\n\n if(entries.level) {\n delete entries.level;\n }\n\n requestPayload.level = level;\n requestPayload.entries = entries;\n\n return requestPayload;\n },\n\n debug: function(entries) {\n return this.create(this.buildRequest('debug', entries));\n },\n\n info: function(entries) {\n return this.create(this.buildRequest('info', entries));\n },\n\n warn: function(entries) {\n return this.create(this.buildRequest('warn', entries));\n },\n\n error: function(entries) {\n return this.create(this.buildRequest('error', entries));\n }\n\n });\n\n return new AvLogMessagesResource();\n\n };\n\n availity.core.factory('avLogMessagesResource', LogMessagesFactory);\n\n})(window);\n\n// Source: /lib/core/api/api-documents.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n var AvDocumentsResourceFactory = function(AvApiResource) {\n\n var AvDocumentsResource = function() {\n AvApiResource.call(this, 'documents');\n };\n\n angular.extend(AvDocumentsResource.prototype, AvApiResource.prototype, {\n\n getContents: function(id) {\n var config = this._config();\n config.url = this.getContentsUrl(id);\n return this._request(config);\n },\n\n getContentsUrl: function(id) {\n return this._getUrl(id) + '/contents';\n }\n\n });\n\n return new AvDocumentsResource();\n\n };\n\n availity.core.factory('avDocumentsResource', AvDocumentsResourceFactory);\n\n})(window);\n\n// Source: /lib/core/api/api-organizations.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n var OrganizationResourceFactory = function(AvApiResource) {\n\n var OrganizationResource = function() {\n AvApiResource.call(this, 'organizations');\n };\n\n angular.extend(OrganizationResource.prototype, AvApiResource.prototype, {\n\n getOrganizations: function(config) {\n return this.query(config).then(function(response) {\n return response.data.organizations ? response.data.organizations : response.data;\n });\n }\n\n });\n\n return new OrganizationResource();\n };\n\n availity.core.factory('avOrganizationsResource', OrganizationResourceFactory);\n\n})(window);\n\n// Source: /lib/core/api/api-codes.js\n(function(root) {\n\n 'use strict';\n\n\n var availity = root.availity;\n\n availity.core.factory('avCodesResource', function(AvApiResource) {\n return new AvApiResource({version: '/v1', url: '/codes'});\n });\n\n var AvCodesResourceFactory = function(AvApiResource) {\n\n var AvCodesResource = function () {\n AvApiResource.call(this, 'codes');\n };\n\n angular.extend(AvCodesResource.prototype, AvApiResource.prototype, {\n\n getCodes: function (data) {\n\n // config for the api resource query\n var config = {};\n config.params = {};\n\n if(data.page) {\n config.params.offset = 50 * (data.page - 1);\n }\n if(data.offset) {\n config.params.offset = data.offset;\n }\n if(data.list) {\n config.params.list = data.list;\n }\n if(data.q) {\n config.params.q = data.q;\n }\n\n return this.query(config).then(function (response) {\n // Format the response into something select2 can read\n var results = response.data.codes;\n if(results && !_.has(results[0], 'id')) {\n _.each(results, function (code) {\n code.id = code.code;\n });\n }\n\n // calculate if we want to continue searching\n var moreVal = response.data.offset < response.data.totalCount - response.data.limit;\n return {\n more: moreVal,\n results: results\n };\n\n });\n }\n\n });\n\n return new AvCodesResource();\n\n };\n\n availity.core.factory('avCodesResource', AvCodesResourceFactory);\n\n})(window);\n\n// Source: /lib/core/api/api-user-permissions.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n var AvUserPermissionsResourceFactory = function(AvApiResource) {\n\n var AvUserPermissionsResource = function() {\n AvApiResource.call(this, {\n level: '/internal',\n version: '/v1',\n url: '/axi-user-permissions'\n });\n this.sessionDate = moment().toISOString();\n };\n\n angular.extend(AvUserPermissionsResource.prototype, AvApiResource.prototype, {\n\n afterQuery: function(response) {\n return response.data.axiUserPermissions ? response.data.axiUserPermissions : [];\n },\n\n getPermissions: function(permissionIds, region) {\n var self = this;\n return this.query({\n params: {\n permissionId: permissionIds,\n region: region,\n sessionDate: self.sessionDate\n }\n });\n }\n\n });\n\n return new AvUserPermissionsResource();\n\n };\n\n availity.core.factory('avUserPermissionsResource', AvUserPermissionsResourceFactory);\n\n})(window);\n\n// Source: /lib/core/authorizations/user-authorizations.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n var AvUserAuthorizationsFactory = function($q, $log, avUserPermissionsResource) {\n\n /**\n *\n * @constructor\n */\n var AvUserAuthorizations = function() {\n /**\n * Region is used to return permission/resources relative to region. If null service will\n * return all permission relative to current. If value 'ALL' used it will return value relative\n * to all regions the user has access to.\n * @type {string}\n */\n this.region = null;\n /**\n * PermissionIds contains the set of permissionIds to request from service. If user of service calls\n * setPermissionIds() or call getPermissions() with complete set of permissionIds needed by application,\n * then service should only make that one hit to retrieve permission information.\n * @type {Array}\n */\n this.permissionIds = [];\n };\n\n var proto = AvUserAuthorizations.prototype;\n\n proto.setRegion = function(region) {\n this.region = region;\n return this;\n };\n\n proto.setPermissionIds = function(permissionIds) {\n if(!angular.isArray(permissionIds)) {\n throw new Error('permissionsIds must be an array of string IDs for avUserAuthorizations#addPermissionIds');\n }\n this.permissionIds = permissionIds;\n return this;\n };\n\n proto.isAuthorized = function(permissionId) {\n return this.getPermission(permissionId).then(function(permission) {\n return permission.isAuthorized;\n });\n };\n\n proto.isAnyAuthorized = function(permissionIds) {\n return this.getPermissions(permissionIds).then(function(permissions) {\n var permission = _.findWhere(permissions, {isAuthorized: true});\n return permission !== undefined;\n });\n };\n\n proto.getPermission = function(permissionId) {\n if(!angular.isString(permissionId)) {\n throw new Error('permissionsId must be a string ID for avUserAuthorizations#getPermission');\n }\n\n return this.getPermissions([permissionId])\n .then(function(_permissions) {\n return _permissions[permissionId];\n });\n };\n\n proto.getPermissions = function(permissionIds) {\n var self = this;\n\n if(!angular.isArray(permissionIds)) {\n throw new Error('permissionsIds must be an array of string IDs for avUserAuthorizations#getPermissions');\n }\n // merge permission ids to reduce calls to backend\n self.permissionIds = _.union(self.permissionIds, permissionIds);\n\n return avUserPermissionsResource\n .getPermissions(self.permissionIds, self.region)\n .then(function(_permissions) {\n return self.toPermissionMap(permissionIds, _permissions);\n });\n };\n\n proto.getOrganizations = function(permissionId) {\n return this.getPermission(permissionId).then(function(permission) {\n return permission.organizations;\n });\n };\n\n proto.getPayers = function(permissionId, organizationId) {\n return this.getPermission(permissionId).then(function(permission) {\n var organization = _.findWhere(permission.organizations, {id: organizationId});\n\n if(organization && organization.resources) {\n return organization.resources;\n }\n return [];\n });\n\n };\n\n /**\n * Converts array permissions to map with value for each permissionId, creating empty permission\n * if can't find permission in array\n * @private\n */\n proto.toPermissionMap = function(permissionIds, permissions) {\n var self = this;\n var map = {};\n permissions = _.slice(permissions);\n _.forEach(permissionIds, function(permissionId) {\n var key = {id: permissionId};\n var permission = _.findWhere(permissions, key);\n permission = permission ? self.toPermission(permission) : self.toPermission(key);\n map[permission.id] = permission;\n });\n return map;\n };\n\n /**\n * Convert a permission resource into a structure that is easier to work with.\n * @private\n */\n proto.toPermission = function(permission) {\n return {\n id: permission.id,\n description: permission.description ? permission.description : '',\n geographies: permission.geographies ? permission.geographies : [],\n organizations: permission.organizations ? permission.organizations : [],\n isAuthorized: permission.organizations ? permission.organizations.length > 0 : false\n };\n };\n\n return new AvUserAuthorizations();\n\n };\n\n availity.core.factory('avUserAuthorizations', AvUserAuthorizationsFactory);\n\n})(window);\n\n// Source: /lib/core/session/session.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_SESSION', {\n SESSION_TIMEOUT: 'av:auth:session:timeout',\n NOT_AUTHORIZED: 'av:auth:not:authorized'\n });\n\n availity.core.factory('avSession', function($q, avUsersResource) {\n\n var AvSession = function() {\n this.user = null;\n this.permissions = null;\n };\n\n var proto = AvSession.prototype;\n\n proto.getUser = function() {\n var self = this;\n\n if(this.user) {\n return $q.when(this.user);\n }\n\n return avUsersResource.me().then(function(user) {\n self.user = user;\n return self.user;\n });\n };\n\n\n proto.destroy = function() {\n this.user = null;\n this.permisions = null;\n };\n\n return new AvSession();\n });\n\n})(window);\n\n// Source: /lib/core/idle/idle.js\n// Inspiration => https://github.com/HackedByChinese/ng-idle\n//\n// Rules:\n//\n// * ping after 3 minutes from last human activity\n// * reset session after api success except 401\n// * idle show after 25 of inactivity\n//\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_IDLE', {\n EVENTS: {\n IDLE_INACTIVE: 'av:idle:inactive',\n IDLE_ACTIVE: 'av:idle:active',\n SESSION_TIMEOUT_ACTIVE: 'av:idle:session:active',\n SESSION_TIMEOUT_REDIRECT: 'av:idle:session:redirect',\n HUMAN: 'keydown.av.idle mousedown.av.idle keydown.av.idle',\n MACHINE: '$locationChangeSuccess'\n },\n INTERVALS: {\n PING: 3 * 60 * 1000, // 3 minutes\n IDLE: 25 * 60 * 1000, // 25 minutes\n SESSION: 30 * 60 * 1000 // 30 minutes\n },\n URLS: {\n HOME: '/availity/web/public.elegant.login',\n PING: '/api/v1/users/me'\n }\n });\n\n availity.core.provider('avIdle', function(AV_IDLE) {\n\n var enabled = false;\n var pingUrl;\n var redirectUrl;\n var sessionTimeout;\n var idleTimeout;\n var pingTimeout;\n\n this.enable = function(value) {\n if(arguments.length) {\n enabled = !!value;\n }\n return enabled;\n };\n\n this.setSessionTimeout = function(timeout) {\n sessionTimeout = timeout || AV_IDLE.INTERVALS.SESSION;\n };\n\n this.setIdleTimeout = function(timeout) {\n idleTimeout = timeout || AV_IDLE.INTERVALS.IDLE;\n };\n\n this.setPingTimeout = function(timeout) {\n pingTimeout = timeout || AV_IDLE.INTERVALS.PING;\n };\n\n this.setPingUrl = function(url) {\n pingUrl = url || AV_IDLE.URLS.PING;\n };\n\n this.$get = function(AV_IDLE, $log, $document, $rootScope, $timeout, avThrottle, $q, $injector) {\n\n var AvIdle = function() {\n\n // $timeout references\n this._idleTimer = null;\n this._sessionTimer = null;\n this._pingTimer = null;\n this._keepAlive = null;\n\n // flag used to track if the if user is idle or session expired\n this.idleActive = false;\n this.sessionActive = false;\n\n this.listeners = [];\n\n this.init();\n\n };\n\n var proto = AvIdle.prototype;\n\n proto.init = function() {\n\n if(!enabled) {\n this.stop();\n return;\n }\n\n this.start();\n };\n\n proto.start = function() {\n\n $log.info('avIdle start');\n\n var self = this;\n var listener;\n\n !sessionTimeout && this.setSessionTimeout();\n !idleTimeout && this.setIdleTimeout();\n !pingTimeout && this.setPingTimeout();\n !pingUrl && this.setPingUrl();\n !redirectUrl && this.setRedirectUrl();\n\n $rootScope.$on('$destroy', function() {\n self.stop();\n });\n\n $document.find('body').on(AV_IDLE.EVENTS.HUMAN, function(event) {\n self.onEvent(event);\n });\n\n listener = $rootScope.$on(AV_IDLE.EVENTS.MACHINE, function(event, oldUrl, newUrl) {\n if(oldUrl !== newUrl) {\n self.onEvent(event);\n }\n });\n this.listeners.push(listener);\n\n $rootScope.$on(AV_IDLE.EVENTS.SESSION_TIMEOUT_REDIRECT, function() {\n document.location.href = redirectUrl;\n });\n\n this.startIdleTimer();\n this.startSessionTimer();\n };\n\n proto.stop = function() {\n\n $document.find('body').off(AV_IDLE.EVENTS.HUMAN);\n\n // turns off Angular event listeners @see http://stackoverflow.com/a/14898795\n _.each(this.listeners, function(listener) {\n listener();\n });\n\n this.stopPing();\n this.stopSessionTimer();\n this.stopIdleTimer();\n };\n\n proto.isEnabled = function() {\n return enabled;\n };\n\n proto.enable = function(value) {\n if(arguments.length) {\n enabled = !!value;\n }\n\n return this;\n };\n\n proto.setSessionTimeout = function(timeout) {\n sessionTimeout = timeout || AV_IDLE.INTERVALS.SESSION;\n return this;\n };\n\n proto.setIdleTimeout = function(timeout) {\n idleTimeout = timeout || AV_IDLE.INTERVALS.IDLE;\n return this;\n };\n\n proto.setPingTimeout = function(timeout) {\n pingTimeout = timeout || AV_IDLE.INTERVALS.PING;\n return this;\n };\n\n proto.setPingUrl = function(url) {\n pingUrl = url || AV_IDLE.URLS.PING;\n return this;\n };\n\n proto.setRedirectUrl = function(url) {\n redirectUrl = url || AV_IDLE.URLS.HOME;\n return this;\n };\n\n proto.response = function(response) {\n\n if(this.isApiRequest(response)) {\n this.startSessionTimer();\n }\n\n return response;\n };\n\n proto.isApiRequest = function(response) {\n return response && response.config && response.config.api;\n };\n\n proto.responseError = function(response) {\n\n if(this.isApiRequest(response) && response.status !== 401) {\n this.startSessionTimer();\n }\n\n if(this.isApiRequest() && response.status === 401) {\n this.stopPing();\n }\n\n return $q.reject(response);\n };\n\n proto.startSessionTimer = function() {\n\n var self = this;\n\n this.stopSessionTimer();\n\n var later = function() {\n $log.info('avIdle session has TIMED OUT');\n self.stop();\n $rootScope.$broadcast(AV_IDLE.EVENTS.SESSION_TIMEOUT_ACTIVE);\n };\n\n $log.info('avIdle session timer has STARTED');\n this._sessionTimer = $timeout(later, sessionTimeout, false);\n\n };\n\n proto.stopSessionTimer = function() {\n $log.info('avIdle session timer has STOPPED');\n $timeout.cancel(this._sessionTimer);\n };\n\n proto.startIdleTimer = function() {\n\n var self = this;\n\n this.stopIdleTimer();\n\n var later = function() {\n self.stopIdleTimer();\n $log.info('avIdle is IDLING');\n $rootScope.$broadcast(AV_IDLE.EVENTS.IDLE_ACTIVE);\n };\n\n $log.info('avIdle idle timer has STARTED');\n this._idleTimer = $timeout(later, idleTimeout, false);\n };\n\n proto.stopIdleTimer = function() {\n $log.info('avIdle idle timer has STOPPED');\n $timeout.cancel(this._idleTimer);\n };\n\n proto.startPing = function() {\n\n if(!this._keepAlive) {\n $log.info('avIdle ping timer has STARTED');\n this._keepAlive = avThrottle(this.keepAlive, pingTimeout, {context: this});\n }\n\n this._pingTimer = this._keepAlive();\n };\n\n proto.stopPing = function() {\n $log.info('avIdle ping timer has STOPPED');\n if(this._pingTimer) {\n $timeout.cancel(this._pingTimer);\n }\n };\n\n proto.keepAlive = function() {\n\n // destroy the reference to that a new throttle gets created upon\n // next user or system event\n this._keepAlive = null;\n var $http = $injector.get('$http');\n\n $http.get(pingUrl, {\n cache: false,\n api: true\n }).success(function() {\n $log.info('avIdle keep-alive SUCCESS');\n }).error(function() {\n $log.error('avIdle keep-alive FAILURE');\n });\n };\n\n proto.onEvent = function() {\n this.startIdleTimer();\n this.startPing();\n };\n\n return new AvIdle();\n\n };\n\n });\n\n})(window);\n\n// Source: /lib/core/idle/idle-interceptor.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avIdleInterceptor', function(avIdle) {\n return {\n response: function(response) {\n return avIdle.response(response);\n },\n responseError: function(response) {\n return avIdle.responseError(response);\n }\n };\n\n });\n\n availity.core.config(function($httpProvider) {\n $httpProvider.interceptors.push('avIdleInterceptor');\n });\n\n})(window);\n\n// Source: /lib/core/validation/validator.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.value('avValConfig', {\n classes: {\n valid: 'ng-valid',\n invalid: 'ng-invalid',\n dirty: 'ng-dirty',\n pristine: 'ng-pristine',\n touched: 'ng-touched',\n untouched: 'ng-untouched',\n submitted: 'ng-submitted'\n },\n validators: [\n 'avValPattern',\n 'avValSize',\n 'avValRequired',\n 'avValDateRange',\n 'avValDate',\n 'avValPhone',\n 'avValEmail',\n 'avValNpi'\n ]\n });\n\n availity.core.constant('AV_VAL', {\n EVENTS: {\n REVALIDATE: 'av:val:revalidate',\n SUBMITTED: 'av:val:submitted',\n FAILED: 'av:val:failed',\n RESET: 'av:val:reset'\n },\n DEBOUNCE: 800,\n DATE_FORMAT: {\n SIMPLE: 'MM/DD/YYYY'\n },\n PATTERNS: {\n ALPHA_ONLY: /[^A-Za-z]+/g,\n NUMERIC_ONLY: /[^0-9]+/g\n }\n });\n\n availity.core.provider('avVal', function() {\n\n var validators = [];\n var rules = {};\n var services = {};\n\n this.addRules = function(_rules) {\n rules = angular.extend({}, rules, _rules);\n return rules;\n };\n\n this.addValidators = function(_validators) {\n validators = validators.concat(_validators);\n return validators;\n };\n\n this.$get = function($injector, $rootScope, $http, $log, avValConfig, AV_VAL) {\n\n var AvValidation = function() {\n this.initValidators();\n };\n\n var proto = AvValidation.prototype;\n\n proto.initValidators = function() {\n var self = this;\n\n validators = avValConfig.validators.concat(validators);\n\n angular.forEach(validators, function(name) {\n self.addValidator(name);\n });\n\n };\n\n proto.addValidator = function(name) {\n var validator = $injector.get(name);\n services[validator.name] = validator;\n };\n\n proto.addRules = function(_rules) {\n rules = angular.extend({}, rules, _rules);\n $rootScope.$broadcast(AV_VAL.EVENTS.REVALIDATE);\n };\n\n proto.validate = function(key, element, value, ruleName) {\n\n var ruleConfig = rules[key];\n if(!ruleConfig) {\n $log.error('Failed to get rules key [' + key + ']. Forms must be tagged with a rules set name for validation to work.');\n return;\n }\n\n var contraints = ruleConfig[ruleName];\n if(!contraints) {\n $log.info('Rule named [' + ruleName + '] could not be found in the current schema.');\n contraints = [];\n }\n\n var el = element[0];\n var results = [];\n var violations = [];\n var _valid = true;\n\n angular.forEach(contraints, function(rule, contraintName) {\n\n if(!rule) {\n // when extended rule sets, a user can pass nulls to cancel out a rule so if\n // one doesn't exist just continue\n return;\n }\n\n var validator = services[contraintName];\n\n if(angular.isUndefined(validator)) {\n $log.warn('No validator defined for `' + name + '`');\n return;\n }\n\n var valid = validator.validate(value, rule, element);\n\n var validationResult = {\n valid: valid,\n ruleName: ruleName,\n contraintName: contraintName,\n value: value,\n message: rule.message,\n field: el.name || el.id\n };\n\n var result = angular.extend({}, rule, validationResult);\n\n results.push(result);\n if(!valid) {\n violations.push(validationResult);\n }\n _valid = _valid && valid;\n\n });\n\n return {\n isValid: _valid,\n all: results, // all the constraint results\n violations: violations\n };\n\n };\n\n return new AvValidation();\n\n };\n\n });\n})(window);\n\n// Source: /lib/core/validation/validators/validator-utils.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValUtils', function() {\n\n return {\n\n isDefined: function(value) {\n return angular.isDefined(value) && value !== '' && value !== null;\n },\n\n isEmpty: function(value) {\n return !this.isDefined(value) || $.trim(value) === '';\n }\n };\n\n });\n})(window);\n\n\n// Source: /lib/core/validation/validators/validator-size.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValSize', function(avValUtils) {\n\n var validator = {\n\n name: 'size',\n\n validate: function(value, rule) {\n\n var min = rule.min || 0;\n var max = rule.max;\n var type = rule.type ? rule.type.toLowerCase() : 'text';\n\n if(_.isNull(value) || _.isUndefined(value)) {\n value = '';\n }\n\n if(type === 'text') {\n value = value + '';\n return avValUtils.isEmpty(value) || value.length >= min && (max === undefined || value.length <= max);\n }\n\n // ... must be a Number\n if(!_.isNumber(value) && /^\\d+$/.test(value)) {\n value = parseInt(value, 10);\n }\n\n return avValUtils.isEmpty(value) || value >= min && (max === undefined || value <= max);\n\n }\n };\n\n return validator;\n\n });\n})(window);\n\n// Source: /lib/core/validation/validators/validator-pattern.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValPattern', function(avValUtils) {\n\n var validator = {\n name: 'pattern',\n REGEX: /^\\/(.*)\\/([gim]*)$/, //regular expression to test a regular expression\n asRegExp: function(pattern) {\n var match;\n\n if(pattern.test) {\n return pattern;\n } else {\n match = pattern.match(validator.REGEX);\n if(match) {\n return new RegExp(match[1], match[2]);\n } else {\n throw ('Expected ' + pattern + ' to be a RegExp');\n }\n }\n },\n validate: function(value, rule) {\n var values = _.isArray(rule.value) ? rule.value : [rule.value];\n\n var valid = false;\n\n _.each(values, function(expresion) {\n var pattern = validator.asRegExp(expresion);\n if(avValUtils.isEmpty(value) || pattern.test(value)) {\n valid = true;\n }\n });\n\n return valid;\n }\n };\n\n return validator;\n\n });\n})(window);\n\n// Source: /lib/core/validation/validators/validator-required.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValRequired', function(avValUtils) {\n\n var validator = {\n name: 'required',\n validate: function(value, rule, element) {\n\n // Using ngModelController.$isEmpty for required checks. A form component being empty is dependent on the\n // type of field:\n //\n // - radio\n // - checkbox\n // - text\n // - lists\n //\n // You can override $isEmpty for input directives whose concept of being empty is different to the\n // default. Radio and checkboxes directive do this because in its case a value of `false`\n // implies empty.\n //\n var ctrl = element && element.data('$ngModelController');\n if(ctrl) {\n return !ctrl.$isEmpty(value);\n }\n\n return !avValUtils.isEmpty(value);\n\n }\n };\n\n return validator;\n\n });\n})(window);\n\n// Source: /lib/core/validation/validators/validator-date-range.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValDateRange', function(AV_VAL, avValUtils) {\n\n var validator = {\n\n name: 'dateRange',\n\n getStartDate: function(start) {\n return validator.setMin(moment().add(start.value, start.units));\n },\n\n getEndDate: function(end) {\n return validator.setMax(moment().add(end.value, end.units) );\n },\n\n setMin: function(value) {\n\n // [fix]: if time is provided this may cause issues.\n value.set('hours', 0);\n value.set('minutes', 0);\n value.set('seconds', 0);\n\n return value;\n },\n\n setMax: function(value) {\n\n // [fix]: if time is provided this may cause issues.\n value.set('hours', 23);\n value.set('minutes', 59);\n value.set('seconds', 59);\n\n return value;\n },\n\n validation: function(value, rules) {\n\n var date;\n var startDate;\n var endDate;\n\n date = moment(value, rules.format || AV_VAL.DATE_FORMAT.SIMPLE);\n date.set('hours', 0);\n date.set('minutes', 0);\n date.set('seconds', 0);\n\n if(!avValUtils.isEmpty(rules.start.units) && !avValUtils.isEmpty(rules.end.units)) {\n startDate = validator.getStartDate(rules.start);\n endDate = validator.getEndDate(rules.end);\n } else {\n startDate = moment(rules.start.value, rules.format);\n endDate = validator.setMax(moment(rules.end.value, rules.format));\n }\n return date.isValid() && date.isBetween(startDate, endDate, 'day') || date.isSame(startDate, 'day') || date.isSame(endDate, 'day');\n },\n\n validate: function(value, rule) {\n return avValUtils.isEmpty(value) || validator.validation(value, rule);\n }\n\n };\n\n return validator;\n });\n})(window);\n\n// Source: /lib/core/validation/validators/validator-date-format.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValDate', function(AV_VAL, avValUtils) {\n\n var validator = {\n name: 'dateFormat',\n validate: function(value, rules) {\n var format = rules && rules.format ? rules.format : AV_VAL.DATE_FORMAT.SIMPLE;\n return avValUtils.isEmpty(value) || moment(value, format, true).isValid();\n }\n };\n return validator;\n });\n})(window);\n\n// Source: /lib/core/validation/validators/validator-npi.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValNpi', function() {\n\n\n var validator = {\n\n name: 'npi',\n\n INTEGER_REGEX: /^\\d*$/,\n\n validate: function(value) {\n\n var npi = value || '';\n\n if (!validator.INTEGER_REGEX.test(npi) || npi.length !== 10) {\n return false;\n }\n\n var firstDigit = npi.charAt(0);\n if(!('1' === firstDigit || '2' === firstDigit || '3' === firstDigit || '4' === firstDigit)) {\n return false;\n }\n\n var digit = parseInt(npi.charAt(9), 10);\n npi = npi.substring(0, 9);\n npi = \"80840\" + npi;\n\n var alternate = true;\n var total = 0;\n\n for (var i = npi.length; i > 0; i--) {\n var next = parseInt(npi.charAt(i-1), 10);\n if (alternate) {\n next = next*2;\n if (next > 9) {\n next = (next % 10) + 1;\n }\n }\n total += next;\n alternate = !alternate;\n }\n\n var roundUp = Math.ceil(total / 10) * 10;\n var calculatedCheck = roundUp - total;\n\n if (calculatedCheck !== digit) {\n return false;\n }\n\n return true;\n }\n\n };\n\n return validator;\n\n });\n\n})(window);\n\n// Source: /lib/core/validation/validators/validator-phone.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValPhone', function(avValPattern) {\n\n var PHONE_PATTERN = /^([0-9][\\.\\-]?)?[(]{0,1}[0-9]{3}[)\\.\\- ]{0,1}[0-9]{3}[\\.\\- ]{0,1}[0-9]{4}$/;\n\n var validator = {\n name: 'phone',\n validate: function(value, rule) {\n return avValPattern.validate(value, angular.extend({}, rule, { value: PHONE_PATTERN }));\n }\n };\n\n return validator;\n\n });\n})(window);\n\n// Source: /lib/core/validation/validators/validator-email.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValEmail', function(avValPattern) {\n\n var EMAIL_PATTERN = /[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;\n\n var validator = {\n name: 'email',\n validate: function(value, rule) {\n return avValPattern.validate(value, angular.extend({}, rule, { value: EMAIL_PATTERN }));\n }\n };\n\n return validator;\n\n });\n})(window);\n\n// Source: /lib/core/utils/globals.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_GLOBALS', {\n REGIONS: [\n {\n 'name': 'Alabama',\n 'code': 'AL'\n },\n {\n 'name': 'Alaska',\n 'code': 'AK'\n },\n {\n 'name': 'Arizona',\n 'code': 'AZ'\n },\n {\n 'name': 'Arkansas',\n 'code': 'AR'\n },\n {\n 'name': 'California',\n 'code': 'CA'\n },\n {\n 'name': 'Colorado',\n 'code': 'CO'\n },\n {\n 'name': 'Connecticut',\n 'code': 'CT'\n },\n {\n 'name': 'Delaware',\n 'code': 'DE'\n },\n {\n 'name': 'District Of Columbia',\n 'code': 'DC'\n },\n {\n 'name': 'Florida',\n 'code': 'FL'\n },\n {\n 'name': 'Georgia',\n 'code': 'GA'\n },\n {\n 'name': 'Hawaii',\n 'code': 'HI'\n },\n {\n 'name': 'Idaho',\n 'code': 'ID'\n },\n {\n 'name': 'Illinois',\n 'code': 'IL'\n },\n {\n 'name': 'Indiana',\n 'code': 'IN'\n },\n {\n 'name': 'Iowa',\n 'code': 'IA'\n },\n {\n 'name': 'Kansas',\n 'code': 'KS'\n },\n {\n 'name': 'Kentucky',\n 'code': 'KY'\n },\n {\n 'name': 'Louisiana',\n 'code': 'LA'\n },\n {\n 'name': 'Maine',\n 'code': 'ME'\n },\n {\n 'name': 'Maryland',\n 'code': 'MD'\n },\n {\n 'name': 'Massachusetts',\n 'code': 'MA'\n },\n {\n 'name': 'Michigan',\n 'code': 'MI'\n },\n {\n 'name': 'Minnesota',\n 'code': 'MN'\n },\n {\n 'name': 'Mississippi',\n 'code': 'MS'\n },\n {\n 'name': 'Missouri',\n 'code': 'MO'\n },\n {\n 'name': 'Montana',\n 'code': 'MT'\n },\n {\n 'name': 'Nebraska',\n 'code': 'NE'\n },\n {\n 'name': 'Nevada',\n 'code': 'NV'\n },\n {\n 'name': 'New Hampshire',\n 'code': 'NH'\n },\n {\n 'name': 'New Jersey',\n 'code': 'NJ'\n },\n {\n 'name': 'New Mexico',\n 'code': 'NM'\n },\n {\n 'name': 'New York',\n 'code': 'NY'\n },\n {\n 'name': 'North Carolina',\n 'code': 'NC'\n },\n {\n 'name': 'North Dakota',\n 'code': 'ND'\n },\n {\n 'name': 'Ohio',\n 'code': 'OH'\n },\n {\n 'name': 'Oklahoma',\n 'code': 'OK'\n },\n {\n 'name': 'Oregon',\n 'code': 'OR'\n },\n {\n 'name': 'Pennsylvania',\n 'code': 'PA'\n },\n {\n 'name': 'Rhode Island',\n 'code': 'RI'\n },\n {\n 'name': 'South Carolina',\n 'code': 'SC'\n },\n {\n 'name': 'South Dakota',\n 'code': 'SD'\n },\n {\n 'name': 'Tennessee',\n 'code': 'TN'\n },\n {\n 'name': 'Texas',\n 'code': 'TX'\n },\n {\n 'name': 'Utah',\n 'code': 'UT'\n },\n {\n 'name': 'Vermont',\n 'code': 'VT'\n },\n {\n 'name': 'Virginia',\n 'code': 'VA'\n },\n {\n 'name': 'Washington',\n 'code': 'WA'\n },\n {\n 'name': 'West Virginia',\n 'code': 'WV'\n },\n {\n 'name': 'Wisconsin',\n 'code': 'WI'\n },\n {\n 'name': 'Wyoming',\n 'code': 'WY'\n }\n ]\n });\n\n})(window);\n\n// Source: /lib/core/analytics/analytics.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_ANALYTICS', {\n VIRTUAL_PAGE_TRACKING: true,\n SERVICES: {\n PIWIK: 'avPiwikAnalytics',\n SPLUNK: 'avSplunkAnalytics'\n },\n EVENTS: {\n PAGE: '$locationChangeSuccess',\n DEFAULT: 'click'\n },\n PRE_FIX: /^avAnalytics(.*)$/,\n // should ignore these since they are part of the directives API\n IGNORE: ['avAnalyticsOn', 'avAnalyticsIf'],\n ENV: { // not sure if this should live here\n PROD: {\n DOMAIN: 'apps.availity.com',\n URL: 'https://piwik.availity.com/piwik/'\n },\n QA: {\n URL: 'https://qa-piwik.availity.com/piwik/'\n }\n }\n });\n\n availity.core.provider('avAnalytics', function(AV_ANALYTICS) {\n\n var plugins = [];\n var virtualPageTracking = AV_ANALYTICS.VIRTUAL_PAGE_TRACKING;\n var appId;\n\n this.registerPlugins = function(_plugins) {\n\n if(angular.isString(_plugins)) {\n _plugins = [_plugins];\n }\n\n if(_.isArray(_plugins)) {\n plugins = _plugins;\n } else {\n throw new Error('AvAnalytics.registerPlugins() expects a string or an array.');\n }\n\n return plugins;\n };\n\n this.setVirtualPageTracking = function(value) {\n if(arguments.length) {\n virtualPageTracking = !!value;\n }\n };\n\n this.isVirtualPageTracking = function() {\n return virtualPageTracking;\n };\n\n this.setAppID = function(id) {\n appId = id;\n return appId;\n };\n\n this.$get = function($injector, $q, $log, $rootScope, $location) {\n\n var AvAnalytics = function() {\n\n var self = this;\n this.services = {};\n\n if(!plugins || plugins.length === 0) {\n plugins = [AV_ANALYTICS.SERVICES.PIWIK, AV_ANALYTICS.SERVICES.SPLUNK];\n }\n\n angular.forEach(plugins, function(plugin) {\n\n try {\n self.services[plugin] = $injector.get(plugin);\n } catch(err) {\n $log.error('Could not load `{0}` plugin', [plugin]);\n }\n });\n\n };\n\n var proto = AvAnalytics.prototype;\n\n proto.init = function() {\n\n var self = this;\n\n if(this.isVirtualPageTracking()) {\n\n $rootScope.$on(AV_ANALYTICS.EVENTS.PAGE, function() {\n self.trackPageView($location.absUrl());\n });\n\n\n }\n\n angular.forEach(this.services, function(handler) {\n\n if(handler.isEnabled() && handler.init) {\n handler.init();\n }\n\n });\n\n };\n\n proto.trackEvent = function(properties) {\n\n var promises = [];\n\n angular.forEach(this.services, function(handler) {\n var promise = handler.trackEvent(properties);\n promises.push(promise);\n });\n\n return $q.all(promises);\n };\n\n proto.getAppId = function() {\n return appId;\n };\n\n proto.isVirtualPageTracking = function() {\n return virtualPageTracking;\n };\n\n proto.trackPageView = function(url) {\n\n var promises = [];\n\n angular.forEach(this.services, function(handler) {\n var promise = handler.trackPageView(url);\n promises.push(promise);\n });\n\n return $q.all(promises);\n };\n\n return new AvAnalytics();\n };\n\n });\n\n})(window);\n\n// Source: /lib/core/analytics/analytics-util.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avAnalyticsUtils', function(AV_ANALYTICS, $log) {\n\n var AnalyticsUtils = function() {};\n\n var proto = AnalyticsUtils.prototype;\n\n proto.getProperties = function(attributes) {\n\n var self = this;\n var props = {};\n\n _.forEach(attributes, function(value, key) {\n if(self.isValidAttribute(key) && self.isNotIgnored(key)) {\n var result = self.getAttribute(key, value);\n props[result.key] = result.value;\n }\n });\n\n return props;\n };\n\n // Function detects external links in order to allow the analytics framework to run\n // before the browser follows a link.\n //\n // - target=\"_self\" - This opens an anchor in the same frame\n // - target=\"_parent\" - Opens the in the next level up of a frame if they were nested to inside one another\n // - target=\"_top\" - Opens the link as top document in the browser window\n // - target=\"_blank\" - Opens link in new tab new tab\n //\n proto.isExternalLink = function(attrs) {\n return attrs.href && !attrs.ngClick;\n };\n\n proto.isNotIgnored = function(key) {\n var ignored = _.includes(AV_ANALYTICS.IGNORE, key);\n return !ignored;\n };\n\n proto.isValidAttribute = function(key) {\n return AV_ANALYTICS.PRE_FIX.test(key);\n };\n\n proto.lowercase = function(str) {\n return str.substr(0, 1).toLowerCase() + str.substr(1);\n };\n\n proto.getAttribute = function(key, value) {\n var simpleKey = key.match(AV_ANALYTICS.PRE_FIX);\n\n if(simpleKey && simpleKey[1]) {\n return {\n key: this.lowercase(simpleKey[1]),\n value: value\n };\n }\n };\n\n proto.toNum = function(value) {\n var parsed = parseInt(value, 10);\n value = isNaN(parsed) ? 0 : parsed;\n return value;\n };\n\n proto.isValid = function(trackingValues) {\n var valid = true;\n\n if(trackingValues.value || trackingValues.value === 0) {\n delete trackingValues.value;\n }\n\n _.forEach(trackingValues, function(key, value) {\n if(availity.isBlank(value) || _.isUndefined(value)) {\n $log.warn('The analytic tracking value for ' + key.toUpperCase() +' is not defined.');\n valid = false;\n }\n });\n\n return valid;\n };\n\n return new AnalyticsUtils();\n });\n})(window);\n\n// Source: /lib/core/analytics/analytics-splunk.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avSplunkAnalytics', function($log, avLogMessagesResource, $location) {\n\n var SplunkAnalyticsService = function() {};\n\n var proto = SplunkAnalyticsService.prototype;\n\n proto.trackEvent = function(properties) {\n properties.url = $location.$$absUrl || 'N/A';\n properties.level = properties.level || 'info';\n\n return avLogMessagesResource[properties.level](properties);\n };\n\n proto.trackPageView = function(url) {\n\n var properties = {\n event: 'page',\n level: 'info',\n url: url || $location.$$absUrl()\n };\n\n return avLogMessagesResource[properties.level](properties);\n };\n\n proto.isEnabled = function() {\n return true;\n };\n\n return new SplunkAnalyticsService();\n });\n\n})(window);\n\n// Source: /lib/core/analytics/analytics-piwik.js\n(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.provider('avPiwikAnalytics', function() {\n\n var self;\n var siteId;\n var enabled = false;\n var customVariables = [];\n\n this.enabled = function(_enabled) {\n enabled = !!_enabled;\n };\n\n // can not push these items to `_paq` because it is defined\n // after page has loaded\n this._setCustomVariable = function(index, valueName, value, scope) {\n\n if(!index || isNaN(index)) {\n throw new Error('index must be a number');\n } else if(!valueName) {\n throw new Error('valueName must be declared');\n } else {\n customVariables.push(['setCustomVariable', index, valueName, value, scope]);\n }\n };\n\n this.setSiteID = function(_siteID) {\n this.enabled(true);\n siteId = _siteID;\n };\n\n // allow the user to pass a array of visit variables\n this.setVisitVariables = function(items) {\n _.forEach(items, function(item) {\n self._setCustomVariable(item[0], item[1], item[2], 'visit');\n });\n };\n\n this.setPageVariables = function(index, name, value) {\n this._setCustomVariable(index, name, value, 'page');\n };\n\n this.$get = function(avAnalyticsUtils, avUsersResource, AV_ANALYTICS, $injector, $log, $q, $document, $location) {\n\n var AvPiwikAnalytics = function() {\n window._paq = window._paq || [];\n };\n\n var proto = AvPiwikAnalytics.prototype;\n\n proto.trackEvent = function(properties) {\n\n if(!window._paq) {\n $log.warn('Piwik object `_paq` not found in global scope');\n return $q.when(false);\n }\n\n // http://piwik.org/docs/event-tracking/\n //\n // PAQ requires that eventValue be an integer.\n // Check to make sure value is a number if not convert it to 0.\n //\n if(properties.value) {\n properties.value = avAnalyticsUtils.toNum(properties.event);\n }\n\n // check to make sure that data being sent to piwik is a string and not null, empty or undefined\n if(!avAnalyticsUtils.isValid(properties)) {\n $log.warn('Invalid properties being passed. Tracking info will not be sent.');\n return $q.when(false);\n }\n\n return $q.when(window._paq.push(['trackEvent', properties.category, properties.action || properties.event, properties.label, properties.value]));\n };\n\n proto.trackPageView = function(url) {\n\n if(!window._paq) {\n $log.warn('Piwik object `_paq` not found in global scope');\n return $q.when(false);\n }\n\n return $q.when([\n window._paq.push(['setCustomUrl', url]),\n window._paq.push(['trackPageView', url])]\n );\n\n };\n\n proto.init = function() {\n\n avUsersResource.me().then(function(user) {\n window._paq.push(['setUserId', user.id]);\n // self.trackPageView(); //send another page track when the user data loads\n });\n\n if(!_.isFinite(siteId)) {\n $log.warn('Invalid Piwik Site Id. Piwik analytics has been disabled.');\n return;\n }\n\n var url;\n\n if($location.$$host === AV_ANALYTICS.ENV.PROD.DOMAIN) {\n url = AV_ANALYTICS.ENV.PROD.URL;\n } else {\n url = AV_ANALYTICS.ENV.QA.URL;\n }\n\n window._paq.push(['enableLinkTracking']);\n window._paq.push(['setTrackerUrl', url + 'piwik.php']);\n window._paq.push(['setSiteId', siteId]);\n\n _.forEach(customVariables, function(variable) {\n window._paq.push(variable);\n });\n\n $.getScript(url + 'piwik.js', function() {\n\n });\n\n };\n\n\n proto.isEnabled = function() {\n return enabled && siteId;\n };\n\n return new AvPiwikAnalytics();\n };\n\n });\n\n})(window);\n\n// Source: /lib/core/analytics/analytics-exceptions.js\n\n\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_EXCEPTIONS', {\n MESSAGES: {\n NOT_APPLICABLE: 'N/A'\n },\n TYPES: {\n EXCEPTION: 'exception'\n }\n });\n\n availity.core.provider('avExceptionAnalytics', function() {\n\n var _enabled = true;\n var appId;\n\n this.enabled = function(enabled) {\n _enabled = !!enabled;\n };\n\n this.setAppId = function(_id) {\n appId = _id;\n };\n\n this.$get = function(avLogMessagesResource, $location, AV_EXCEPTIONS) {\n\n var AvExceptionAnalytics = function() {\n\n };\n\n var proto = AvExceptionAnalytics.prototype;\n\n proto.init = function() {\n\n var self = this;\n\n if(!_enabled) {\n return;\n }\n\n TraceKit.remoteFetching = false;\n TraceKit.surroundingLinesToCollect = 11;\n\n // subscribe() hooks into window.error\n TraceKit.report.subscribe(function(stacktrace) {\n self.onError(stacktrace);\n });\n\n };\n\n proto.prettyPrint = function(stacktrace) {\n\n var message = '';\n\n var length = stacktrace.stack.length;\n\n for(var i = 0; i < length; i++) {\n message += [\n '[' + _.padLeft(i + '', 2, '0') + '] ',\n stacktrace.stack[i].func,\n ' ',\n stacktrace.stack[i].url,\n ':',\n stacktrace.stack[i].line,\n ':',\n stacktrace.stack[i].column,\n i + 1 < length ? '\\n' : ''\n ].join('');\n\n }\n\n return message;\n };\n\n proto.onError = function(stacktrace) {\n\n var userAgent = root.navigator && root.navigator.userAgent ? root.navigator.userAgent : AV_EXCEPTIONS.MESSAGES.NOT_APPLICABLE;\n\n var message = {\n errorDate: moment(new Date()).format('YYYY-MM-DDTHH:mm:ssZZ'),\n errorName: stacktrace.name,\n errorMessage: stacktrace.message,\n errorStack: this.prettyPrint(stacktrace),\n url: $location.$$absUrl,\n appId: appId || AV_EXCEPTIONS.MESSAGES.NOT_APPLICABLE,\n // appVersion: AV_EXCEPTIONS.MESSAGES.NOT_APPLICABLE,\n userAgent: userAgent,\n userLanguage: navigator.userLanguage,\n referrer: document.referrer,\n host: document.domain,\n screenWidth: $(window).width(),\n screenHeight: $(window).height(),\n sdkVersion: availity.VERSION\n };\n\n return this.log(message);\n\n };\n\n proto.log = function(message) {\n return avLogMessagesResource['error'](message);\n };\n\n proto.trackEvent = function(exception) {\n\n if(!_enabled) {\n return;\n }\n\n var stacktrace = TraceKit.computeStackTrace(exception);\n\n return this.onError(stacktrace);\n\n };\n\n return new AvExceptionAnalytics();\n\n };\n });\n\n availity.core.config(function($provide) {\n\n $provide.decorator('$exceptionHandler', function($delegate, $injector) {\n return function(exception, cause) {\n $delegate(exception, cause);\n var errorTacking = $injector.get('avExceptionAnalytics');\n errorTacking.trackEvent(exception);\n };\n });\n\n });\n\n availity.core.run(function(avExceptionAnalytics) {\n avExceptionAnalytics.init();\n });\n\n})(window);\n\n// Source: /lib/core/analytics/analytics-config.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity || {};\n\n availity.analytics = angular.module('availity.config', ['ng', 'availity']);\n\n availity.analytics.run(function(avAnalytics) {\n\n avAnalytics.init();\n\n });\n\n})(window);\n\n\n// Source: /lib/core/utils/date-polyfill.js\n// Issue: https://github.com/angular/angular.js/issues/11165\n// Polyfill: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString\n//\n// This polyfill is needed because Angular calls toISOString()\n// when an request parameter is of type Date. If this polyfill isn't present\n// the ajax call fails.\n//\n(function() {\n\n 'use strict';\n\n var pad = function(number) {\n if(number < 10) {\n return '0' + number;\n }\n return number;\n };\n\n if(!Date.prototype.toISOString) {\n\n Date.prototype.toISOString = function() {\n\n return this.getUTCFullYear() +\n '-' + pad(this.getUTCMonth() + 1) +\n '-' + pad(this.getUTCDate()) +\n 'T' + pad(this.getUTCHours()) +\n ':' + pad(this.getUTCMinutes()) +\n ':' + pad(this.getUTCSeconds()) +\n '.' + (this.getUTCMilliseconds() / 1000).toFixed(3).slice(2, 5) +\n 'Z';\n };\n }\n\n})(window);\n\n// Source: /lib/core/messages/messages-constants.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_MESSAGES', {\n\n EVENTS: {\n\n MESSAGE: 'message', // post message window event\n RESIZE: 'resize', // window resize event\n UNLOAD: 'beforeunload',\n\n AV_RESIZE: 'av:window:resize',\n AV_RECEIVED: 'av:message:received',\n AV_MAXIMIZE: 'nav:left:hide', // @deprecated,\n AV_MINIMIZE: 'nav:left:hide', // @deprecated\n // MAXIMIZE: 'av:window:maximize',\n // MINIMIZE: 'av:window:minimize',\n AV_LOGIN: 'av:login',\n AV_LOGOUT: 'av:logout',\n AV_SESSION_TIMEOUT: 'av:session:timeout'\n\n },\n\n RESIZE_DEBOUNCE: 400,\n\n DOMAIN: /https?:\\/\\/([\\w\\d\\-]+\\.)?availity\\.(com|net)/,\n LOCAL: /http:\\/\\/(localhost|127\\.0\\.0\\.1|0\\.0\\.0\\.0):(\\d+)/\n\n });\n\n})(window);\n\n// Source: /lib/core/messages/messages.js\n\n\n// https://github.com/kylewelsby/angular-post-message/blob/master/src/angular-post-message.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.provider('avMessages', function() {\n\n var enabled = true;\n\n this.enable = function(value) {\n\n if(arguments.length) {\n enabled = !!value;\n }\n\n return enabled;\n\n };\n\n this.$get = function($rootScope, $log, AV_MESSAGES) {\n\n var AvMessages = function() {\n\n };\n\n var proto = AvMessages.prototype;\n\n proto.init = function() {\n\n var self = this;\n var $window = $(window);\n\n $window.on(AV_MESSAGES.EVENTS.MESSAGE, function(event) {\n self.onMessage(event);\n });\n\n $window.on(AV_MESSAGES.EVENTS.RESIZE, function() {\n self.onResize();\n });\n\n this.send(AV_MESSAGES.EVENTS.AV_MAXIMIZE);\n\n $rootScope.$on('$destroy', function() {\n self.destroy();\n });\n\n $window.on(AV_MESSAGES.EVENTS.UNLOAD, function() {\n self.send(AV_MESSAGES.EVENTS.AV_MINIMIZE);\n });\n\n };\n\n proto.destroy = function() {\n\n $(window).off(AV_MESSAGES.EVENTS.MESSAGE);\n $(window).off(AV_MESSAGES.EVENTS.RESIZE);\n $(window).off(AV_MESSAGES.EVENTS.UNLOAD);\n\n };\n\n proto.onResize = function() {\n\n var self = this;\n\n var resize = _.debounce(function() {\n\n var height = $('html').height();\n self.send({\n event: AV_MESSAGES.EVENTS.AV_RESIZE,\n height: height\n });\n\n }, AV_MESSAGES.RESIZE_DEBOUNCE);\n\n resize();\n\n };\n\n proto.isDomain = function(url) {\n\n if(AV_MESSAGES.DOMAIN.test(this.domain())) {\n return AV_MESSAGES.DOMAIN.test(url);\n }\n\n return AV_MESSAGES.LOCAL.test(url);\n };\n\n proto.isEnabled = function() {\n return enabled;\n };\n\n proto.onMessage = function(_event) {\n\n var event = _event;\n\n event = event.originalEvent || event; // jQuery wraps in `originalEvent`\n\n if(!event && !event.data) {\n // no op\n return;\n }\n\n // don't process messages emitted from same window\n if(event.source === window) {\n return;\n }\n\n if(!this.isDomain(event.origin)) {\n $log.warn('avMessages rejected a cross domain message since it does not match an *.availity.com or localhost');\n return;\n }\n\n\n var data = event.data;\n\n try {\n data = angular.fromJson(data);\n } catch(err) {\n $log.warn('avMessages.onMessage() failed to convert event to json payload');\n }\n\n if(_.isString(data)) {\n event = data;\n data = null;\n }else {\n event = data.event ? data.event : AV_MESSAGES.AV_RECEIVED;\n }\n\n $rootScope.$root.$broadcast(event, data);\n\n };\n\n proto.isIframe = function() {\n return window.self !== window.parent;\n };\n\n proto.domain = function() {\n\n var window = root;\n\n if(window.location.origin) {\n return window.location.origin;\n }\n\n if(window.location.hostname) {\n return window.location.protocol + '//' + window.location.hostname + (window.location.port ? ':' + window.location.port : '');\n }\n\n return '*';\n\n };\n\n proto.send = function(payload) {\n\n try {\n\n var message = _.isString(payload) ? payload : JSON.stringify(payload);\n this.postMessage(message, this.domain());\n\n } catch(err) {\n $log.error('avMessages.send() ', err);\n }\n };\n\n proto.postMessage = function(message, domain) {\n window.parent.postMessage(message, domain);\n };\n\n return new AvMessages();\n\n };\n\n });\n\n availity.core.run(function(avMessages) {\n\n if(avMessages.isEnabled()) {\n avMessages.init();\n }\n\n });\n\n})(window);\n\n\n//# sourceMappingURL=maps/availity-angular.js.map\n","/*global module*/\n\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity || {};\n availity.VERSION = 'v0.0.0';\n availity.MODULE = 'availity';\n availity.core = angular.module(availity.MODULE, ['ng']);\n\n var originalModule = angular.module;\n var modules = [];\n\n angular.module = function(name, deps) {\n\n if(deps && _.indexOf(modules, name) !== -1 && !window.__karma__) {\n throw new Error('redefining module: ' + name);\n }\n\n modules.push(name);\n\n return originalModule(name, deps);\n };\n\n root.availity = availity;\n\n if(typeof module !== 'undefined' && module.exports) {\n module.exports = availity;\n }\n\n})(window);\n\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n // https://github.com/epeli/underscore.string/blob/cebddf40cf2e10f0e9b596d9654edd0a1cfefc15/helper/makeString.js\n availity._stringify = function(object) {\n if(object === null) {\n return '';\n }\n return '' + object;\n };\n\n // https://github.com/epeli/underscore.string/blob/cebddf40cf2e10f0e9b596d9654edd0a1cfefc15/isBlank.js\n availity.isBlank = function(str) {\n return (/^\\s*$/).test(availity._stringify(str));\n };\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n var uid = ['0', '0', '0'];\n\n availity.uuid = function(prefix) {\n var index = uid.length;\n var digit;\n\n while(index) {\n index--;\n digit = uid[index].charCodeAt(0);\n if(digit === 57 /*'9'*/) {\n uid[index] = 'A';\n return prefix ? prefix + uid.join('') : uid.join('');\n }\n if(digit === 90 /*'Z'*/) {\n uid[index] = '0';\n } else {\n uid[index] = String.fromCharCode(digit + 1);\n return prefix ? prefix + uid.join('') : uid.join('');\n }\n }\n uid.unshift('0');\n return prefix ? prefix + uid.join('') : uid.join('');\n };\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.REGEX_API_URL = /^.*?api.availity.com(.*)$/;\n\n availity.getRelativeUrl = function(url) {\n var result = url.match(availity.REGEX_API_URL);\n if(result && result[1]) {\n return '/api' + result[1];\n }\n\n return url;\n };\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n // https://github.com/jasonday/printThis/commit/66f9cbd0e3760767342eed4ef32cf8294417b227\n availity.print = function() {\n\n if(document.queryCommandSupported('print')) {\n document.execCommand('print', false, null);\n } else {\n window.focus();\n window.print();\n }\n };\n\n})(window);\n","// Original => https://github.com/mgcrea/angular-strap/blob/master/src/helpers/debounce.js\n\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_THROTTLE', {\n OPTIONS: {\n wait: 1000,\n update: false,\n trailing: true,\n leading: false\n }\n });\n\n availity.core.factory('avThrottle', function(AV_THROTTLE, $timeout) {\n\n return function(fn, wait, options) {\n\n options = _.merge({}, AV_THROTTLE.OPTIONS, options);\n\n wait = wait ? wait : AV_THROTTLE.THRESHOLD;\n var update = angular.isDefined(options.update) ? options.update : AV_THROTTLE.UPDATE;\n var timer = null;\n\n return function() {\n var context = options.context || this;\n var args = arguments;\n\n if(!timer) {\n if(options.leading !== false) {\n fn.apply(context, args);\n }\n\n var later = function() {\n timer = null;\n if(options.trailing !== false) {\n fn.apply(context, args);\n }\n };\n\n timer = $timeout(later, wait, update);\n }\n\n return timer;\n\n };\n };\n });\n\n})(window);\n","// Orginal => https://github.com/ericzon/angular-ny-logger/blob/0c594e864c93e7f33d36141200096bc6139ddde1/angular-ny-logger.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.provider('AvLogger', function() {\n\n var _enabled = false;\n\n this.enabled = function(enabled) {\n _enabled = !!enabled;\n };\n\n this.$get = function($injector) {\n\n var AvLogger = function(context, $delegate) {\n\n this.context = context || '';\n this.$log = $delegate;\n\n };\n\n var proto = AvLogger.prototype;\n\n AvLogger.supplant = function(str, o) {\n\n var _supplant = function (a, b) {\n var r = o[b];\n return r;\n };\n\n return str.replace(/\\{([^{}]*)\\}/g, _supplant);\n };\n\n AvLogger.isObject = function(element) {\n var elemStr = ( !angular.isUndefined(element) && !angular.isUndefined(element.constructor) ) ? element.constructor.toString() : '';\n return (elemStr.indexOf('Object') > -1);\n };\n\n AvLogger.getFormattedTimestamp = function(date) {\n\n return AvLogger.supplant('{0}:{1}:{2}:{3}', [\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds()\n ]);\n\n };\n\n proto._log = function(originalFn, args) {\n\n // Allow enabling logger through query params\n // Ex:\n //\n // http://localhost:3000/ui.html#avLogger\n\n var hash = window.location.hash;\n hash = hash || '';\n\n if(!_enabled && hash.indexOf('avLogger') < 0 && originalFn !== 'error') {\n return;\n }\n\n var now = AvLogger.getFormattedTimestamp(new Date());\n var message = '';\n var supplantData = [];\n\n var context = this.context ? ' [' + this.context + '] ' : '';\n\n switch(args.length) {\n case 1:\n // (1) If the user supplied one argument, then the argument must be\n // the message itself and _log()\n // will print: - : \n supplantData = args[0];\n message = AvLogger.supplant('{0}{1} - {2}', [now, context, args[0]]);\n break;\n case 3:\n // (3) If the user supplied three arguments, then the first argument\n // is a method name, the second is the message and the third is an\n // object of variables to interpolate with the message. For this, _log()\n // will print: - - ('')\n supplantData = args[2];\n message = AvLogger.supplant(\"{0}{1} - {2}(\\'{3}\\')\", [now, context, args[0], args[1]]);\n break;\n case 2:\n // (2) If the user provided two arguments, we need to find out whether\n // they supplied a method name or an interpolation object.\n // In order to figure that out, we’ll check the type of the last argument.\n // If it is a string, then it has to be the message itself while the\n // first argument is the method name. Otherwise consider the first argument\n // as the message and the second as array of interpolation variables.\n // The output print will be according to this check.\n if(typeof args[1] === 'string') {\n\n message = AvLogger.supplant(\"{0}{1} - {2}(\\'{3}\\')\", [now, context, args[0], args[1]]);\n\n } else {\n\n // If the message is an error, there may be a stack included. If so, we\n // should include the stack in the message to make it more meaningful.\n if(args[0].stack) {\n var errorMessage = this.formatError(args[0]);\n message = AvLogger.supplant('{0}{1} - {2}', [now, context, errorMessage]);\n supplantData = args[1];\n\n }else {\n supplantData = args[1];\n\n }\n\n }\n break;\n }\n\n var $log = this.$log || $injector.get('$log');\n\n var params = (AvLogger.isObject(supplantData)) ? [message, supplantData] : [AvLogger.supplant(message, supplantData)];\n $log[originalFn].apply(null, params);\n\n };\n\n proto.log = function() {\n this._log('log', arguments);\n };\n\n proto.info = function() {\n this._log('info', arguments);\n };\n\n proto.warn = function() {\n this._log('warn', arguments);\n };\n\n proto.debug = function() {\n this._log('debug', arguments);\n };\n\n // https://github.com/angular/angular.js/blob/v1.2.27/src/ng/log.js#L122\n proto.formatError = function(arg) {\n if(arg instanceof Error) {\n if(arg.stack) {\n\n arg = (arg.message && arg.stack.indexOf(arg.message) === -1) ?\n 'Error: ' + arg.message + '\\n' + arg.stack : arg.stack;\n\n } else if(arg.sourceURL) {\n arg = arg.message + '\\n' + arg.sourceURL + ':' + arg.line;\n }\n }\n return arg;\n };\n\n proto.error = function() {\n this._log('error', arguments);\n };\n\n return AvLogger;\n\n };\n\n });\n\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.config(function($provide) {\n\n $provide.decorator('$log', function($delegate, AvLogger) {\n return new AvLogger(null, $delegate);\n });\n\n });\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_POLLING', {\n INTERVAL: 1000, // delay in ms before retrying an async request\n MAX_ELAPSED_TIME: 5000, // max time in ms before polling stops and rejects original request\n MAX_RETRY: 30, // # of times the request will be tried\n DECAY: 1.2, // % the polling interval decays after every retry\n // maximum time polling is allowed before rejecting the request\n EVENTS: {\n MAX_RETRY: 'av:polling:max:retry'\n },\n REGEX_URL: /^.*?api.availity.com(.*)$/ // capture the relative url from API\n });\n\n var PollingServiceFactory = function($rootScope, $q, $injector, $timeout, $log, AV_POLLING, AV_API) {\n\n var AvPollingService = function() {\n this.pendingRequests = []; // stores all request for polling\n };\n\n var proto = AvPollingService.prototype;\n\n proto.response = function(response) {\n\n if(this.isAsyncResponse(response)) {\n return this.onAsyncReponse(response);\n }\n\n return response || $q.when(response);\n };\n\n proto.setDefaults = function(config) {\n\n var defaultOptions = {\n pollingInterval: AV_POLLING.INTERVAL,\n pollingDecay: AV_POLLING.DECAY,\n pollingMaxInterval: AV_POLLING.MAX_ELAPSED_TIME,\n pollingRetryCount: 0,\n pollingStartTime: new Date().getTime()\n };\n\n return _.extend(defaultOptions, config);\n };\n\n proto.responseError = function(response) {\n // Return the promise rejection\n return $q.reject(response);\n };\n\n /**\n * API layer return a link with a polling url for\n * async responses.\n *\n * @param {Object} response ajax response\n * @return {Boolean} true if response has status of 202 (accepted) and location param in header with uri+session link\n */\n proto.isAsyncResponse = function(response) {\n\n return response &&\n response.config &&\n response.config.api &&\n response.status &&\n response.status === 202 &&\n angular.isFunction(response.headers) && !availity.isBlank(response.headers(AV_API.HEADERS.SERVER.LOCATION));\n };\n\n proto.onAsyncReponse = function(response) {\n\n response.config = this.setDefaults(response.config);\n\n var deferred = $q.defer();\n\n this.queueRequest(deferred, response);\n\n // [rm3]: Can't call notify before you return promise object?\n $timeout(function() {\n // Notify deferred listeners with the original server response\n deferred.notify(response);\n }, 0, false);\n\n return deferred.promise;\n };\n\n proto.getUrl = function(url) {\n\n var result = url.match(AV_POLLING.REGEX_URL);\n if(result && result[1]) {\n return '/api' + result[1];\n }\n\n return url;\n };\n\n proto.queueRequest = function(deferred, response) {\n\n var self = this;\n // server replies with location header so set the url into config\n var _url = availity.getRelativeUrl(response.headers(AV_API.HEADERS.SERVER.LOCATION));\n var _config = response.config;\n\n\n // headers – {Object} – Map of strings or functions which return strings representing HTTP headers\n // to send to the server. If the return value of a function is null, the header\n // will not be sent. Functions accept a config object as an argument.\n var config = {\n method: 'GET',\n api: true,\n headers: _config.headers,\n pollingInterval: _config.pollingInterval,\n pollingMaxRetry: _config.pollingMaxRetry,\n pollingMaxInterval: _config.pollingMaxInterval,\n pollingStartTime: _config.pollingStartTime,\n _pollingDecay: _config._pollingDecay,\n pollingRetryCount: _config.pollingRetryCount,\n pollingDecay: _config.pollingDecay,\n url: _url, /* set the url from the server response */\n cache: false\n };\n\n var request = {\n id: availity.uuid('request-'),\n config: config,\n deferred: deferred\n };\n\n var timeout = this.getPollingTimeout(config);\n\n // each async request should run on its own timer\n var timer = $timeout(function() {\n self.retryRequest(request.id);\n }, timeout, false);\n\n request.timer = timer;\n\n // add the async request to the queue\n this.pushRequest(request);\n\n };\n\n proto.popRequest = function(id) {\n\n var index = null;\n var request = null;\n\n for(var i = 0; i < this.pendingRequests.length; i++) {\n if(this.pendingRequests[i].id === id) {\n index = i;\n break;\n }\n }\n\n request = this.pendingRequests[index];\n this.pendingRequests.splice(index, 1);\n\n return request;\n };\n\n proto.pushRequest = function(request) {\n this.pendingRequests.push(request);\n };\n\n proto.getPollingTimeout = function(config) {\n return config.pollingDecay * config.pollingInterval;\n };\n\n proto.isPollingMaxTimeout = function(config) {\n var now = new Date().getTime();\n var elaspedTime = now - config.pollingStartTime;\n var isElapsed = elaspedTime > config.pollingMaxInterval;\n return isElapsed;\n },\n\n proto.isMaxRetried = function(config) {\n return config.pollingRetryCount >= AV_POLLING.MAX_RETRY;\n };\n\n proto.isPollable = function(config) {\n var _isTimeout = this.isPollingMaxTimeout(config);\n var _isMax = this.isMaxRetried(config);\n\n return _isTimeout || _isMax ? false : true;\n\n };\n\n proto.retryRequest = function(id) {\n\n var self = this;\n var request = this.popRequest(id);\n $timeout.cancel(request.timer);\n\n var config = request.config;\n\n var deferred = request.deferred;\n\n if(!this.isPollable(config)) {\n $log.info('Rejecting pollable response due to timeout');\n return deferred.reject(request);\n }\n\n // increment counters and polling timeouts\n this.increment(config);\n\n function successCallback(response) {\n if(self.isAsyncResponse(response)) {\n deferred.notify(response);\n self.queueRequest(request.deferred, response);\n } else {\n deferred.resolve(response);\n }\n }\n\n function errorCallback(response) {\n deferred.reject(response);\n }\n\n // Silly circular dependency trick\n var $http = $injector.get('$http');\n\n $http(config).then(successCallback, errorCallback);\n\n };\n\n proto.increment = function(config) {\n this.incrementCounter(config);\n this.incrementDecay(config);\n };\n\n proto.incrementDecay = function(config) {\n if(!config._pollingDecay) {\n // store the original decay param\n config._pollingDecay = config.pollingDecay;\n }\n config.pollingDecay *= config._pollingDecay;\n };\n\n proto.incrementCounter = function(config) {\n config.pollingRetryCount++;\n };\n\n proto.clearRequests = function() {\n angular.forEach(this.pendingRequests, function(request) {\n $timeout.cancel(request.timer);\n });\n this.pendingRequests = [];\n };\n\n return new AvPollingService();\n\n };\n\n availity.core.factory('avPollingService', PollingServiceFactory);\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_API', {\n HEADERS: {\n SERVER: {\n ID: 'X-API-ID',\n LOCATION: 'Location',\n STATUS: 'X-Status-Message',\n GLOBAL_ID: 'X-Global-Transaction-ID'\n },\n CLIENT: {\n SESSION_ID: 'X-Session-ID',\n AUTH: 'Authorization',\n OVERRIDE: 'X-HTTP-Method-Override',\n CALLBACK_URL: 'X-Callback-URL',\n CUSTOMER_ID: 'X-Availity-Customer-ID'\n }\n }\n });\n\n var defaultOptions = {\n // pre-prend the url with a value like `/public` so we can build urls like `public/api/v1/*`\n prefix: '',\n // default base url for endpoints\n path: '/api',\n // url resource group, such as `/foo`, for urls like `public/api/foo/v1/*`\n resourceGroup: '',\n // url to resource endpoint like `coverages` or `payers`\n url: null,\n // defaults to version 1\n version: '/v1',\n // governance level `/internal`\n level: '',\n // post-pend the url with `.json`, `.txt` or `.xml`\n suffix: '',\n // cache all request by default\n cache: true,\n // flag used to enable behaviors around the Availity Rest API\n api: true,\n // # of times the polling service has tried to get a response\n pollingRetryCount: 0,\n // in ms\n pollingInterval: 1000,\n // % the polling interval decays after every retry\n pollingDecay: 1.2,\n // maximum time polling is allowed before rejecting the request\n pollingMaxInterval: 30000\n\n };\n\n // Factory that creates ApiResourcess\n var ApiResourcesFactory = function($http, $q, avPollingService) {\n\n var AvApiResource = function(options) {\n\n if(!options) {\n throw new Error('[options] cannot be null or undefined');\n }\n\n // if string the assume url is being passed in\n if(angular.isString(options)) {\n options = options.charAt(0) === '/' ? options : '/' + options;\n options = angular.extend({}, {url: options});\n }\n\n if(!options.url) {\n throw new Error('[url] cannot be null');\n }\n\n // get the default options and merge into this instance\n this.options = angular.extend({}, defaultOptions, (options || {}));\n };\n\n // Alias the prototype\n var proto = AvApiResource.prototype;\n\n proto._config = function(config) {\n return angular.extend({}, this.options, (config || {}));\n },\n\n proto._cacheBust = function(config) {\n config.cacheBust = null;\n config.params = config.params || {};\n config.params.cacheBust = new Date().getTime();\n return config;\n },\n\n proto._getUrl = function(id) {\n if(this.options.api) {\n return this._getApiUrl(id);\n }\n\n return this.options.url;\n };\n\n proto._createResponse = function(data, status, headers, config) {\n return {\n data: data,\n status: status,\n headers: headers,\n config: config\n };\n };\n\n proto._request = function(config, afterCallback) {\n\n var self = this;\n var defer = $q.defer();\n\n $http(config)\n .success(function(data, status, headers, _config) {\n\n var _response = {\n data: data,\n status: status,\n headers: headers,\n config: _config\n };\n\n // handle the async response if applicable\n var _promise = $q.when(avPollingService.response(_response));\n // notify the promise listener of the original response\n defer.notify(_response);\n\n // handle the polling service promise\n _promise.then(function(successResponse) {\n\n // if service has a callback then call it\n // var response = self._createResponse(data, status, headers, _config);\n if(afterCallback) {\n successResponse = afterCallback.call(self, successResponse, config.data);\n }\n defer.resolve(successResponse);\n }, function(errorResponse) {\n defer.reject(errorResponse);\n }, function(notifyResponse) {\n defer.notify(notifyResponse);\n });\n\n }).error(function(data, status, headers, _config) {\n var response = self._createResponse(data, status, headers, _config);\n defer.reject(response);\n });\n\n var promise = defer.promise;\n\n // recreate the success callback ala $http\n promise.success = function(fn) {\n promise.then(function(response) {\n fn(response.data, response.status, response.headers, response.config);\n });\n return promise;\n };\n\n // recreate the error callback ala $http\n promise.error = function(fn) {\n promise.then(null, function(response) {\n fn(response.data, response.status, response.headers, config);\n });\n return promise;\n };\n\n promise.always = promise['finally'];\n\n return promise;\n };\n\n proto.normalize = function(url) {\n return url\n .replace(/[\\/]+/g, '/')\n .replace(/\\/$/, '');\n };\n\n proto.join = function () {\n var joined = [].slice.call(arguments, 0).join('/');\n return this.normalize(joined);\n };\n\n proto._getApiUrl = function(id) {\n\n id = id ? '/' + id : '';\n\n var url = this.join(\n this.options.prefix,\n this.options.path,\n this.options.level,\n this.options.resourceGroup,\n this.options.version,\n this.options.url,\n id);\n\n return url + this.options.suffix;\n };\n\n proto.create = function(data, config) {\n\n if(!data) {\n throw new Error('called method without [data]');\n }\n\n if(this.beforeCreate) {\n data = this.beforeCreate(data);\n }\n\n config = this._config(config);\n config.method = 'POST';\n config.url = this._getUrl();\n config.data = data;\n\n return this._request(config, this.afterCreate);\n\n };\n\n proto.get = function(id, config) {\n\n if(!id) {\n throw new Error('called method without [id]');\n }\n\n config = this._config(config);\n if(config.cacheBust) {\n config = this._cacheBust(config);\n }\n config.method = 'GET';\n config.url = this._getUrl(id);\n\n\n return this._request(config, this.afterGet);\n\n };\n\n proto.query = function(config) {\n\n config = this._config(config);\n if(config.cacheBust) {\n config = this._cacheBust(config);\n }\n config.method = 'GET';\n config.url = this._getUrl();\n\n return this._request(config, this.afterQuery);\n\n };\n\n proto.update = function(id, data, config) {\n\n var url;\n\n if(_.isString(id) || _.isNumber(id)) {\n url = this._getUrl(id);\n }else {\n url = this._getUrl();\n // At this point the function signature becomes:\n //\n // proto.update = function(data, config) {} a.k.a function(id, data)\n //\n config = data; // config is really the 2nd param\n data = id; // data is really the first param\n }\n\n if(this.beforeUpdate) {\n data = this.beforeUpdate(data);\n }\n\n config = this._config(config);\n config.method = 'PUT';\n config.url = url;\n config.data = data;\n\n return this._request(config, this.afterUpdate);\n\n };\n\n proto.remove = function(id, config) {\n\n var url;\n var data;\n\n if(_.isString(id) || _.isNumber(id)) {\n url = this._getUrl(id);\n }else {\n // At this point the function signature becomes:\n //\n // proto.remove = function(data, config)\n //\n url = this._getUrl();\n data = id;\n }\n\n config = this._config(config);\n config.method = 'DELETE';\n config.url = url;\n config.data = data;\n\n return this._request(config, this.afterRemove);\n };\n\n proto.beforeCreate = null;\n proto.afterCreate = null;\n proto.afterQuery = null;\n proto.afterGet = null;\n proto.beforeUpdate = null;\n proto.afterUpdate = null;\n proto.afterRemove = null;\n\n return AvApiResource;\n\n };\n\n availity.core.factory('AvApiResource', ApiResourcesFactory);\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n var UserServiceFactory = function(AvApiResource) {\n\n var AvUsersResource = function() {\n AvApiResource.call(this, 'users');\n };\n\n angular.extend(AvUsersResource.prototype, AvApiResource.prototype, {\n\n afterGet: function(response) {\n var user = response.data.user ? response.data.user : response.data;\n return user;\n },\n\n me: function(config) {\n return this.get('me', config);\n }\n\n });\n\n return new AvUsersResource();\n\n };\n\n availity.core.factory('avUsersResource', UserServiceFactory);\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avCoveragesResource', function(AvApiResource) {\n return new AvApiResource({version: '/v1', url: '/configurations', cache: false});\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avConfigurationsResource', function(AvApiResource) {\n return new AvApiResource({version: '/v1', url: '/configurations'});\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n var LogMessagesFactory = function(AvApiResource) {\n\n var AvLogMessagesResource = function() {\n\n AvApiResource.call(this, {\n version: '/v1',\n url: '/log-messages'\n });\n };\n\n angular.extend(AvLogMessagesResource.prototype, AvApiResource.prototype, {\n\n buildRequest: function(level, entries) {\n\n var requestPayload = {};\n\n if(entries.level) {\n delete entries.level;\n }\n\n requestPayload.level = level;\n requestPayload.entries = entries;\n\n return requestPayload;\n },\n\n debug: function(entries) {\n return this.create(this.buildRequest('debug', entries));\n },\n\n info: function(entries) {\n return this.create(this.buildRequest('info', entries));\n },\n\n warn: function(entries) {\n return this.create(this.buildRequest('warn', entries));\n },\n\n error: function(entries) {\n return this.create(this.buildRequest('error', entries));\n }\n\n });\n\n return new AvLogMessagesResource();\n\n };\n\n availity.core.factory('avLogMessagesResource', LogMessagesFactory);\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n var AvDocumentsResourceFactory = function(AvApiResource) {\n\n var AvDocumentsResource = function() {\n AvApiResource.call(this, 'documents');\n };\n\n angular.extend(AvDocumentsResource.prototype, AvApiResource.prototype, {\n\n getContents: function(id) {\n var config = this._config();\n config.url = this.getContentsUrl(id);\n return this._request(config);\n },\n\n getContentsUrl: function(id) {\n return this._getUrl(id) + '/contents';\n }\n\n });\n\n return new AvDocumentsResource();\n\n };\n\n availity.core.factory('avDocumentsResource', AvDocumentsResourceFactory);\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n var OrganizationResourceFactory = function(AvApiResource) {\n\n var OrganizationResource = function() {\n AvApiResource.call(this, 'organizations');\n };\n\n angular.extend(OrganizationResource.prototype, AvApiResource.prototype, {\n\n getOrganizations: function(config) {\n return this.query(config).then(function(response) {\n return response.data.organizations ? response.data.organizations : response.data;\n });\n }\n\n });\n\n return new OrganizationResource();\n };\n\n availity.core.factory('avOrganizationsResource', OrganizationResourceFactory);\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n\n var availity = root.availity;\n\n availity.core.factory('avCodesResource', function(AvApiResource) {\n return new AvApiResource({version: '/v1', url: '/codes'});\n });\n\n var AvCodesResourceFactory = function(AvApiResource) {\n\n var AvCodesResource = function () {\n AvApiResource.call(this, 'codes');\n };\n\n angular.extend(AvCodesResource.prototype, AvApiResource.prototype, {\n\n getCodes: function (data) {\n\n // config for the api resource query\n var config = {};\n config.params = {};\n\n if(data.page) {\n config.params.offset = 50 * (data.page - 1);\n }\n if(data.offset) {\n config.params.offset = data.offset;\n }\n if(data.list) {\n config.params.list = data.list;\n }\n if(data.q) {\n config.params.q = data.q;\n }\n\n return this.query(config).then(function (response) {\n // Format the response into something select2 can read\n var results = response.data.codes;\n if(results && !_.has(results[0], 'id')) {\n _.each(results, function (code) {\n code.id = code.code;\n });\n }\n\n // calculate if we want to continue searching\n var moreVal = response.data.offset < response.data.totalCount - response.data.limit;\n return {\n more: moreVal,\n results: results\n };\n\n });\n }\n\n });\n\n return new AvCodesResource();\n\n };\n\n availity.core.factory('avCodesResource', AvCodesResourceFactory);\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n var AvUserPermissionsResourceFactory = function(AvApiResource) {\n\n var AvUserPermissionsResource = function() {\n AvApiResource.call(this, {\n level: '/internal',\n version: '/v1',\n url: '/axi-user-permissions'\n });\n this.sessionDate = moment().toISOString();\n };\n\n angular.extend(AvUserPermissionsResource.prototype, AvApiResource.prototype, {\n\n afterQuery: function(response) {\n return response.data.axiUserPermissions ? response.data.axiUserPermissions : [];\n },\n\n getPermissions: function(permissionIds, region) {\n var self = this;\n return this.query({\n params: {\n permissionId: permissionIds,\n region: region,\n sessionDate: self.sessionDate\n }\n });\n }\n\n });\n\n return new AvUserPermissionsResource();\n\n };\n\n availity.core.factory('avUserPermissionsResource', AvUserPermissionsResourceFactory);\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n var AvUserAuthorizationsFactory = function($q, $log, avUserPermissionsResource) {\n\n /**\n *\n * @constructor\n */\n var AvUserAuthorizations = function() {\n /**\n * Region is used to return permission/resources relative to region. If null service will\n * return all permission relative to current. If value 'ALL' used it will return value relative\n * to all regions the user has access to.\n * @type {string}\n */\n this.region = null;\n /**\n * PermissionIds contains the set of permissionIds to request from service. If user of service calls\n * setPermissionIds() or call getPermissions() with complete set of permissionIds needed by application,\n * then service should only make that one hit to retrieve permission information.\n * @type {Array}\n */\n this.permissionIds = [];\n };\n\n var proto = AvUserAuthorizations.prototype;\n\n proto.setRegion = function(region) {\n this.region = region;\n return this;\n };\n\n proto.setPermissionIds = function(permissionIds) {\n if(!angular.isArray(permissionIds)) {\n throw new Error('permissionsIds must be an array of string IDs for avUserAuthorizations#addPermissionIds');\n }\n this.permissionIds = permissionIds;\n return this;\n };\n\n proto.isAuthorized = function(permissionId) {\n return this.getPermission(permissionId).then(function(permission) {\n return permission.isAuthorized;\n });\n };\n\n proto.isAnyAuthorized = function(permissionIds) {\n return this.getPermissions(permissionIds).then(function(permissions) {\n var permission = _.findWhere(permissions, {isAuthorized: true});\n return permission !== undefined;\n });\n };\n\n proto.getPermission = function(permissionId) {\n if(!angular.isString(permissionId)) {\n throw new Error('permissionsId must be a string ID for avUserAuthorizations#getPermission');\n }\n\n return this.getPermissions([permissionId])\n .then(function(_permissions) {\n return _permissions[permissionId];\n });\n };\n\n proto.getPermissions = function(permissionIds) {\n var self = this;\n\n if(!angular.isArray(permissionIds)) {\n throw new Error('permissionsIds must be an array of string IDs for avUserAuthorizations#getPermissions');\n }\n // merge permission ids to reduce calls to backend\n self.permissionIds = _.union(self.permissionIds, permissionIds);\n\n return avUserPermissionsResource\n .getPermissions(self.permissionIds, self.region)\n .then(function(_permissions) {\n return self.toPermissionMap(permissionIds, _permissions);\n });\n };\n\n proto.getOrganizations = function(permissionId) {\n return this.getPermission(permissionId).then(function(permission) {\n return permission.organizations;\n });\n };\n\n proto.getPayers = function(permissionId, organizationId) {\n return this.getPermission(permissionId).then(function(permission) {\n var organization = _.findWhere(permission.organizations, {id: organizationId});\n\n if(organization && organization.resources) {\n return organization.resources;\n }\n return [];\n });\n\n };\n\n /**\n * Converts array permissions to map with value for each permissionId, creating empty permission\n * if can't find permission in array\n * @private\n */\n proto.toPermissionMap = function(permissionIds, permissions) {\n var self = this;\n var map = {};\n permissions = _.slice(permissions);\n _.forEach(permissionIds, function(permissionId) {\n var key = {id: permissionId};\n var permission = _.findWhere(permissions, key);\n permission = permission ? self.toPermission(permission) : self.toPermission(key);\n map[permission.id] = permission;\n });\n return map;\n };\n\n /**\n * Convert a permission resource into a structure that is easier to work with.\n * @private\n */\n proto.toPermission = function(permission) {\n return {\n id: permission.id,\n description: permission.description ? permission.description : '',\n geographies: permission.geographies ? permission.geographies : [],\n organizations: permission.organizations ? permission.organizations : [],\n isAuthorized: permission.organizations ? permission.organizations.length > 0 : false\n };\n };\n\n return new AvUserAuthorizations();\n\n };\n\n availity.core.factory('avUserAuthorizations', AvUserAuthorizationsFactory);\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_SESSION', {\n SESSION_TIMEOUT: 'av:auth:session:timeout',\n NOT_AUTHORIZED: 'av:auth:not:authorized'\n });\n\n availity.core.factory('avSession', function($q, avUsersResource) {\n\n var AvSession = function() {\n this.user = null;\n this.permissions = null;\n };\n\n var proto = AvSession.prototype;\n\n proto.getUser = function() {\n var self = this;\n\n if(this.user) {\n return $q.when(this.user);\n }\n\n return avUsersResource.me().then(function(user) {\n self.user = user;\n return self.user;\n });\n };\n\n\n proto.destroy = function() {\n this.user = null;\n this.permisions = null;\n };\n\n return new AvSession();\n });\n\n})(window);\n","// Inspiration => https://github.com/HackedByChinese/ng-idle\n//\n// Rules:\n//\n// * ping after 3 minutes from last human activity\n// * reset session after api success except 401\n// * idle show after 25 of inactivity\n//\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_IDLE', {\n EVENTS: {\n IDLE_INACTIVE: 'av:idle:inactive',\n IDLE_ACTIVE: 'av:idle:active',\n SESSION_TIMEOUT_ACTIVE: 'av:idle:session:active',\n SESSION_TIMEOUT_REDIRECT: 'av:idle:session:redirect',\n HUMAN: 'keydown.av.idle mousedown.av.idle keydown.av.idle',\n MACHINE: '$locationChangeSuccess'\n },\n INTERVALS: {\n PING: 3 * 60 * 1000, // 3 minutes\n IDLE: 25 * 60 * 1000, // 25 minutes\n SESSION: 30 * 60 * 1000 // 30 minutes\n },\n URLS: {\n HOME: '/availity/web/public.elegant.login',\n PING: '/api/v1/users/me'\n }\n });\n\n availity.core.provider('avIdle', function(AV_IDLE) {\n\n var enabled = false;\n var pingUrl;\n var redirectUrl;\n var sessionTimeout;\n var idleTimeout;\n var pingTimeout;\n\n this.enable = function(value) {\n if(arguments.length) {\n enabled = !!value;\n }\n return enabled;\n };\n\n this.setSessionTimeout = function(timeout) {\n sessionTimeout = timeout || AV_IDLE.INTERVALS.SESSION;\n };\n\n this.setIdleTimeout = function(timeout) {\n idleTimeout = timeout || AV_IDLE.INTERVALS.IDLE;\n };\n\n this.setPingTimeout = function(timeout) {\n pingTimeout = timeout || AV_IDLE.INTERVALS.PING;\n };\n\n this.setPingUrl = function(url) {\n pingUrl = url || AV_IDLE.URLS.PING;\n };\n\n this.$get = function(AV_IDLE, $log, $document, $rootScope, $timeout, avThrottle, $q, $injector) {\n\n var AvIdle = function() {\n\n // $timeout references\n this._idleTimer = null;\n this._sessionTimer = null;\n this._pingTimer = null;\n this._keepAlive = null;\n\n // flag used to track if the if user is idle or session expired\n this.idleActive = false;\n this.sessionActive = false;\n\n this.listeners = [];\n\n this.init();\n\n };\n\n var proto = AvIdle.prototype;\n\n proto.init = function() {\n\n if(!enabled) {\n this.stop();\n return;\n }\n\n this.start();\n };\n\n proto.start = function() {\n\n $log.info('avIdle start');\n\n var self = this;\n var listener;\n\n !sessionTimeout && this.setSessionTimeout();\n !idleTimeout && this.setIdleTimeout();\n !pingTimeout && this.setPingTimeout();\n !pingUrl && this.setPingUrl();\n !redirectUrl && this.setRedirectUrl();\n\n $rootScope.$on('$destroy', function() {\n self.stop();\n });\n\n $document.find('body').on(AV_IDLE.EVENTS.HUMAN, function(event) {\n self.onEvent(event);\n });\n\n listener = $rootScope.$on(AV_IDLE.EVENTS.MACHINE, function(event, oldUrl, newUrl) {\n if(oldUrl !== newUrl) {\n self.onEvent(event);\n }\n });\n this.listeners.push(listener);\n\n $rootScope.$on(AV_IDLE.EVENTS.SESSION_TIMEOUT_REDIRECT, function() {\n document.location.href = redirectUrl;\n });\n\n this.startIdleTimer();\n this.startSessionTimer();\n };\n\n proto.stop = function() {\n\n $document.find('body').off(AV_IDLE.EVENTS.HUMAN);\n\n // turns off Angular event listeners @see http://stackoverflow.com/a/14898795\n _.each(this.listeners, function(listener) {\n listener();\n });\n\n this.stopPing();\n this.stopSessionTimer();\n this.stopIdleTimer();\n };\n\n proto.isEnabled = function() {\n return enabled;\n };\n\n proto.enable = function(value) {\n if(arguments.length) {\n enabled = !!value;\n }\n\n return this;\n };\n\n proto.setSessionTimeout = function(timeout) {\n sessionTimeout = timeout || AV_IDLE.INTERVALS.SESSION;\n return this;\n };\n\n proto.setIdleTimeout = function(timeout) {\n idleTimeout = timeout || AV_IDLE.INTERVALS.IDLE;\n return this;\n };\n\n proto.setPingTimeout = function(timeout) {\n pingTimeout = timeout || AV_IDLE.INTERVALS.PING;\n return this;\n };\n\n proto.setPingUrl = function(url) {\n pingUrl = url || AV_IDLE.URLS.PING;\n return this;\n };\n\n proto.setRedirectUrl = function(url) {\n redirectUrl = url || AV_IDLE.URLS.HOME;\n return this;\n };\n\n proto.response = function(response) {\n\n if(this.isApiRequest(response)) {\n this.startSessionTimer();\n }\n\n return response;\n };\n\n proto.isApiRequest = function(response) {\n return response && response.config && response.config.api;\n };\n\n proto.responseError = function(response) {\n\n if(this.isApiRequest(response) && response.status !== 401) {\n this.startSessionTimer();\n }\n\n if(this.isApiRequest() && response.status === 401) {\n this.stopPing();\n }\n\n return $q.reject(response);\n };\n\n proto.startSessionTimer = function() {\n\n var self = this;\n\n this.stopSessionTimer();\n\n var later = function() {\n $log.info('avIdle session has TIMED OUT');\n self.stop();\n $rootScope.$broadcast(AV_IDLE.EVENTS.SESSION_TIMEOUT_ACTIVE);\n };\n\n $log.info('avIdle session timer has STARTED');\n this._sessionTimer = $timeout(later, sessionTimeout, false);\n\n };\n\n proto.stopSessionTimer = function() {\n $log.info('avIdle session timer has STOPPED');\n $timeout.cancel(this._sessionTimer);\n };\n\n proto.startIdleTimer = function() {\n\n var self = this;\n\n this.stopIdleTimer();\n\n var later = function() {\n self.stopIdleTimer();\n $log.info('avIdle is IDLING');\n $rootScope.$broadcast(AV_IDLE.EVENTS.IDLE_ACTIVE);\n };\n\n $log.info('avIdle idle timer has STARTED');\n this._idleTimer = $timeout(later, idleTimeout, false);\n };\n\n proto.stopIdleTimer = function() {\n $log.info('avIdle idle timer has STOPPED');\n $timeout.cancel(this._idleTimer);\n };\n\n proto.startPing = function() {\n\n if(!this._keepAlive) {\n $log.info('avIdle ping timer has STARTED');\n this._keepAlive = avThrottle(this.keepAlive, pingTimeout, {context: this});\n }\n\n this._pingTimer = this._keepAlive();\n };\n\n proto.stopPing = function() {\n $log.info('avIdle ping timer has STOPPED');\n if(this._pingTimer) {\n $timeout.cancel(this._pingTimer);\n }\n };\n\n proto.keepAlive = function() {\n\n // destroy the reference to that a new throttle gets created upon\n // next user or system event\n this._keepAlive = null;\n var $http = $injector.get('$http');\n\n $http.get(pingUrl, {\n cache: false,\n api: true\n }).success(function() {\n $log.info('avIdle keep-alive SUCCESS');\n }).error(function() {\n $log.error('avIdle keep-alive FAILURE');\n });\n };\n\n proto.onEvent = function() {\n this.startIdleTimer();\n this.startPing();\n };\n\n return new AvIdle();\n\n };\n\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avIdleInterceptor', function(avIdle) {\n return {\n response: function(response) {\n return avIdle.response(response);\n },\n responseError: function(response) {\n return avIdle.responseError(response);\n }\n };\n\n });\n\n availity.core.config(function($httpProvider) {\n $httpProvider.interceptors.push('avIdleInterceptor');\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.value('avValConfig', {\n classes: {\n valid: 'ng-valid',\n invalid: 'ng-invalid',\n dirty: 'ng-dirty',\n pristine: 'ng-pristine',\n touched: 'ng-touched',\n untouched: 'ng-untouched',\n submitted: 'ng-submitted'\n },\n validators: [\n 'avValPattern',\n 'avValSize',\n 'avValRequired',\n 'avValDateRange',\n 'avValDate',\n 'avValPhone',\n 'avValEmail',\n 'avValNpi'\n ]\n });\n\n availity.core.constant('AV_VAL', {\n EVENTS: {\n REVALIDATE: 'av:val:revalidate',\n SUBMITTED: 'av:val:submitted',\n FAILED: 'av:val:failed',\n RESET: 'av:val:reset'\n },\n DEBOUNCE: 800,\n DATE_FORMAT: {\n SIMPLE: 'MM/DD/YYYY'\n },\n PATTERNS: {\n ALPHA_ONLY: /[^A-Za-z]+/g,\n NUMERIC_ONLY: /[^0-9]+/g\n }\n });\n\n availity.core.provider('avVal', function() {\n\n var validators = [];\n var rules = {};\n var services = {};\n\n this.addRules = function(_rules) {\n rules = angular.extend({}, rules, _rules);\n return rules;\n };\n\n this.addValidators = function(_validators) {\n validators = validators.concat(_validators);\n return validators;\n };\n\n this.$get = function($injector, $rootScope, $http, $log, avValConfig, AV_VAL) {\n\n var AvValidation = function() {\n this.initValidators();\n };\n\n var proto = AvValidation.prototype;\n\n proto.initValidators = function() {\n var self = this;\n\n validators = avValConfig.validators.concat(validators);\n\n angular.forEach(validators, function(name) {\n self.addValidator(name);\n });\n\n };\n\n proto.addValidator = function(name) {\n var validator = $injector.get(name);\n services[validator.name] = validator;\n };\n\n proto.addRules = function(_rules) {\n rules = angular.extend({}, rules, _rules);\n $rootScope.$broadcast(AV_VAL.EVENTS.REVALIDATE);\n };\n\n proto.validate = function(key, element, value, ruleName) {\n\n var ruleConfig = rules[key];\n if(!ruleConfig) {\n $log.error('Failed to get rules key [' + key + ']. Forms must be tagged with a rules set name for validation to work.');\n return;\n }\n\n var contraints = ruleConfig[ruleName];\n if(!contraints) {\n $log.info('Rule named [' + ruleName + '] could not be found in the current schema.');\n contraints = [];\n }\n\n var el = element[0];\n var results = [];\n var violations = [];\n var _valid = true;\n\n angular.forEach(contraints, function(rule, contraintName) {\n\n if(!rule) {\n // when extended rule sets, a user can pass nulls to cancel out a rule so if\n // one doesn't exist just continue\n return;\n }\n\n var validator = services[contraintName];\n\n if(angular.isUndefined(validator)) {\n $log.warn('No validator defined for `' + name + '`');\n return;\n }\n\n var valid = validator.validate(value, rule, element);\n\n var validationResult = {\n valid: valid,\n ruleName: ruleName,\n contraintName: contraintName,\n value: value,\n message: rule.message,\n field: el.name || el.id\n };\n\n var result = angular.extend({}, rule, validationResult);\n\n results.push(result);\n if(!valid) {\n violations.push(validationResult);\n }\n _valid = _valid && valid;\n\n });\n\n return {\n isValid: _valid,\n all: results, // all the constraint results\n violations: violations\n };\n\n };\n\n return new AvValidation();\n\n };\n\n });\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValUtils', function() {\n\n return {\n\n isDefined: function(value) {\n return angular.isDefined(value) && value !== '' && value !== null;\n },\n\n isEmpty: function(value) {\n return !this.isDefined(value) || $.trim(value) === '';\n }\n };\n\n });\n})(window);\n\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValSize', function(avValUtils) {\n\n var validator = {\n\n name: 'size',\n\n validate: function(value, rule) {\n\n var min = rule.min || 0;\n var max = rule.max;\n var type = rule.type ? rule.type.toLowerCase() : 'text';\n\n if(_.isNull(value) || _.isUndefined(value)) {\n value = '';\n }\n\n if(type === 'text') {\n value = value + '';\n return avValUtils.isEmpty(value) || value.length >= min && (max === undefined || value.length <= max);\n }\n\n // ... must be a Number\n if(!_.isNumber(value) && /^\\d+$/.test(value)) {\n value = parseInt(value, 10);\n }\n\n return avValUtils.isEmpty(value) || value >= min && (max === undefined || value <= max);\n\n }\n };\n\n return validator;\n\n });\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValPattern', function(avValUtils) {\n\n var validator = {\n name: 'pattern',\n REGEX: /^\\/(.*)\\/([gim]*)$/, //regular expression to test a regular expression\n asRegExp: function(pattern) {\n var match;\n\n if(pattern.test) {\n return pattern;\n } else {\n match = pattern.match(validator.REGEX);\n if(match) {\n return new RegExp(match[1], match[2]);\n } else {\n throw ('Expected ' + pattern + ' to be a RegExp');\n }\n }\n },\n validate: function(value, rule) {\n var values = _.isArray(rule.value) ? rule.value : [rule.value];\n\n var valid = false;\n\n _.each(values, function(expresion) {\n var pattern = validator.asRegExp(expresion);\n if(avValUtils.isEmpty(value) || pattern.test(value)) {\n valid = true;\n }\n });\n\n return valid;\n }\n };\n\n return validator;\n\n });\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValRequired', function(avValUtils) {\n\n var validator = {\n name: 'required',\n validate: function(value, rule, element) {\n\n // Using ngModelController.$isEmpty for required checks. A form component being empty is dependent on the\n // type of field:\n //\n // - radio\n // - checkbox\n // - text\n // - lists\n //\n // You can override $isEmpty for input directives whose concept of being empty is different to the\n // default. Radio and checkboxes directive do this because in its case a value of `false`\n // implies empty.\n //\n var ctrl = element && element.data('$ngModelController');\n if(ctrl) {\n return !ctrl.$isEmpty(value);\n }\n\n return !avValUtils.isEmpty(value);\n\n }\n };\n\n return validator;\n\n });\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValDateRange', function(AV_VAL, avValUtils) {\n\n var validator = {\n\n name: 'dateRange',\n\n getStartDate: function(start) {\n return validator.setMin(moment().add(start.value, start.units));\n },\n\n getEndDate: function(end) {\n return validator.setMax(moment().add(end.value, end.units) );\n },\n\n setMin: function(value) {\n\n // [fix]: if time is provided this may cause issues.\n value.set('hours', 0);\n value.set('minutes', 0);\n value.set('seconds', 0);\n\n return value;\n },\n\n setMax: function(value) {\n\n // [fix]: if time is provided this may cause issues.\n value.set('hours', 23);\n value.set('minutes', 59);\n value.set('seconds', 59);\n\n return value;\n },\n\n validation: function(value, rules) {\n\n var date;\n var startDate;\n var endDate;\n\n date = moment(value, rules.format || AV_VAL.DATE_FORMAT.SIMPLE);\n date.set('hours', 0);\n date.set('minutes', 0);\n date.set('seconds', 0);\n\n if(!avValUtils.isEmpty(rules.start.units) && !avValUtils.isEmpty(rules.end.units)) {\n startDate = validator.getStartDate(rules.start);\n endDate = validator.getEndDate(rules.end);\n } else {\n startDate = moment(rules.start.value, rules.format);\n endDate = validator.setMax(moment(rules.end.value, rules.format));\n }\n return date.isValid() && date.isBetween(startDate, endDate, 'day') || date.isSame(startDate, 'day') || date.isSame(endDate, 'day');\n },\n\n validate: function(value, rule) {\n return avValUtils.isEmpty(value) || validator.validation(value, rule);\n }\n\n };\n\n return validator;\n });\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValDate', function(AV_VAL, avValUtils) {\n\n var validator = {\n name: 'dateFormat',\n validate: function(value, rules) {\n var format = rules && rules.format ? rules.format : AV_VAL.DATE_FORMAT.SIMPLE;\n return avValUtils.isEmpty(value) || moment(value, format, true).isValid();\n }\n };\n return validator;\n });\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValNpi', function() {\n\n\n var validator = {\n\n name: 'npi',\n\n INTEGER_REGEX: /^\\d*$/,\n\n validate: function(value) {\n\n var npi = value || '';\n\n if (!validator.INTEGER_REGEX.test(npi) || npi.length !== 10) {\n return false;\n }\n\n var firstDigit = npi.charAt(0);\n if(!('1' === firstDigit || '2' === firstDigit || '3' === firstDigit || '4' === firstDigit)) {\n return false;\n }\n\n var digit = parseInt(npi.charAt(9), 10);\n npi = npi.substring(0, 9);\n npi = \"80840\" + npi;\n\n var alternate = true;\n var total = 0;\n\n for (var i = npi.length; i > 0; i--) {\n var next = parseInt(npi.charAt(i-1), 10);\n if (alternate) {\n next = next*2;\n if (next > 9) {\n next = (next % 10) + 1;\n }\n }\n total += next;\n alternate = !alternate;\n }\n\n var roundUp = Math.ceil(total / 10) * 10;\n var calculatedCheck = roundUp - total;\n\n if (calculatedCheck !== digit) {\n return false;\n }\n\n return true;\n }\n\n };\n\n return validator;\n\n });\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValPhone', function(avValPattern) {\n\n var PHONE_PATTERN = /^([0-9][\\.\\-]?)?[(]{0,1}[0-9]{3}[)\\.\\- ]{0,1}[0-9]{3}[\\.\\- ]{0,1}[0-9]{4}$/;\n\n var validator = {\n name: 'phone',\n validate: function(value, rule) {\n return avValPattern.validate(value, angular.extend({}, rule, { value: PHONE_PATTERN }));\n }\n };\n\n return validator;\n\n });\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avValEmail', function(avValPattern) {\n\n var EMAIL_PATTERN = /[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;\n\n var validator = {\n name: 'email',\n validate: function(value, rule) {\n return avValPattern.validate(value, angular.extend({}, rule, { value: EMAIL_PATTERN }));\n }\n };\n\n return validator;\n\n });\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_GLOBALS', {\n REGIONS: [\n {\n 'name': 'Alabama',\n 'code': 'AL'\n },\n {\n 'name': 'Alaska',\n 'code': 'AK'\n },\n {\n 'name': 'Arizona',\n 'code': 'AZ'\n },\n {\n 'name': 'Arkansas',\n 'code': 'AR'\n },\n {\n 'name': 'California',\n 'code': 'CA'\n },\n {\n 'name': 'Colorado',\n 'code': 'CO'\n },\n {\n 'name': 'Connecticut',\n 'code': 'CT'\n },\n {\n 'name': 'Delaware',\n 'code': 'DE'\n },\n {\n 'name': 'District Of Columbia',\n 'code': 'DC'\n },\n {\n 'name': 'Florida',\n 'code': 'FL'\n },\n {\n 'name': 'Georgia',\n 'code': 'GA'\n },\n {\n 'name': 'Hawaii',\n 'code': 'HI'\n },\n {\n 'name': 'Idaho',\n 'code': 'ID'\n },\n {\n 'name': 'Illinois',\n 'code': 'IL'\n },\n {\n 'name': 'Indiana',\n 'code': 'IN'\n },\n {\n 'name': 'Iowa',\n 'code': 'IA'\n },\n {\n 'name': 'Kansas',\n 'code': 'KS'\n },\n {\n 'name': 'Kentucky',\n 'code': 'KY'\n },\n {\n 'name': 'Louisiana',\n 'code': 'LA'\n },\n {\n 'name': 'Maine',\n 'code': 'ME'\n },\n {\n 'name': 'Maryland',\n 'code': 'MD'\n },\n {\n 'name': 'Massachusetts',\n 'code': 'MA'\n },\n {\n 'name': 'Michigan',\n 'code': 'MI'\n },\n {\n 'name': 'Minnesota',\n 'code': 'MN'\n },\n {\n 'name': 'Mississippi',\n 'code': 'MS'\n },\n {\n 'name': 'Missouri',\n 'code': 'MO'\n },\n {\n 'name': 'Montana',\n 'code': 'MT'\n },\n {\n 'name': 'Nebraska',\n 'code': 'NE'\n },\n {\n 'name': 'Nevada',\n 'code': 'NV'\n },\n {\n 'name': 'New Hampshire',\n 'code': 'NH'\n },\n {\n 'name': 'New Jersey',\n 'code': 'NJ'\n },\n {\n 'name': 'New Mexico',\n 'code': 'NM'\n },\n {\n 'name': 'New York',\n 'code': 'NY'\n },\n {\n 'name': 'North Carolina',\n 'code': 'NC'\n },\n {\n 'name': 'North Dakota',\n 'code': 'ND'\n },\n {\n 'name': 'Ohio',\n 'code': 'OH'\n },\n {\n 'name': 'Oklahoma',\n 'code': 'OK'\n },\n {\n 'name': 'Oregon',\n 'code': 'OR'\n },\n {\n 'name': 'Pennsylvania',\n 'code': 'PA'\n },\n {\n 'name': 'Rhode Island',\n 'code': 'RI'\n },\n {\n 'name': 'South Carolina',\n 'code': 'SC'\n },\n {\n 'name': 'South Dakota',\n 'code': 'SD'\n },\n {\n 'name': 'Tennessee',\n 'code': 'TN'\n },\n {\n 'name': 'Texas',\n 'code': 'TX'\n },\n {\n 'name': 'Utah',\n 'code': 'UT'\n },\n {\n 'name': 'Vermont',\n 'code': 'VT'\n },\n {\n 'name': 'Virginia',\n 'code': 'VA'\n },\n {\n 'name': 'Washington',\n 'code': 'WA'\n },\n {\n 'name': 'West Virginia',\n 'code': 'WV'\n },\n {\n 'name': 'Wisconsin',\n 'code': 'WI'\n },\n {\n 'name': 'Wyoming',\n 'code': 'WY'\n }\n ]\n });\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_ANALYTICS', {\n VIRTUAL_PAGE_TRACKING: true,\n SERVICES: {\n PIWIK: 'avPiwikAnalytics',\n SPLUNK: 'avSplunkAnalytics'\n },\n EVENTS: {\n PAGE: '$locationChangeSuccess',\n DEFAULT: 'click'\n },\n PRE_FIX: /^avAnalytics(.*)$/,\n // should ignore these since they are part of the directives API\n IGNORE: ['avAnalyticsOn', 'avAnalyticsIf'],\n ENV: { // not sure if this should live here\n PROD: {\n DOMAIN: 'apps.availity.com',\n URL: 'https://piwik.availity.com/piwik/'\n },\n QA: {\n URL: 'https://qa-piwik.availity.com/piwik/'\n }\n }\n });\n\n availity.core.provider('avAnalytics', function(AV_ANALYTICS) {\n\n var plugins = [];\n var virtualPageTracking = AV_ANALYTICS.VIRTUAL_PAGE_TRACKING;\n var appId;\n\n this.registerPlugins = function(_plugins) {\n\n if(angular.isString(_plugins)) {\n _plugins = [_plugins];\n }\n\n if(_.isArray(_plugins)) {\n plugins = _plugins;\n } else {\n throw new Error('AvAnalytics.registerPlugins() expects a string or an array.');\n }\n\n return plugins;\n };\n\n this.setVirtualPageTracking = function(value) {\n if(arguments.length) {\n virtualPageTracking = !!value;\n }\n };\n\n this.isVirtualPageTracking = function() {\n return virtualPageTracking;\n };\n\n this.setAppID = function(id) {\n appId = id;\n return appId;\n };\n\n this.$get = function($injector, $q, $log, $rootScope, $location) {\n\n var AvAnalytics = function() {\n\n var self = this;\n this.services = {};\n\n if(!plugins || plugins.length === 0) {\n plugins = [AV_ANALYTICS.SERVICES.PIWIK, AV_ANALYTICS.SERVICES.SPLUNK];\n }\n\n angular.forEach(plugins, function(plugin) {\n\n try {\n self.services[plugin] = $injector.get(plugin);\n } catch(err) {\n $log.error('Could not load `{0}` plugin', [plugin]);\n }\n });\n\n };\n\n var proto = AvAnalytics.prototype;\n\n proto.init = function() {\n\n var self = this;\n\n if(this.isVirtualPageTracking()) {\n\n $rootScope.$on(AV_ANALYTICS.EVENTS.PAGE, function() {\n self.trackPageView($location.absUrl());\n });\n\n\n }\n\n angular.forEach(this.services, function(handler) {\n\n if(handler.isEnabled() && handler.init) {\n handler.init();\n }\n\n });\n\n };\n\n proto.trackEvent = function(properties) {\n\n var promises = [];\n\n angular.forEach(this.services, function(handler) {\n var promise = handler.trackEvent(properties);\n promises.push(promise);\n });\n\n return $q.all(promises);\n };\n\n proto.getAppId = function() {\n return appId;\n };\n\n proto.isVirtualPageTracking = function() {\n return virtualPageTracking;\n };\n\n proto.trackPageView = function(url) {\n\n var promises = [];\n\n angular.forEach(this.services, function(handler) {\n var promise = handler.trackPageView(url);\n promises.push(promise);\n });\n\n return $q.all(promises);\n };\n\n return new AvAnalytics();\n };\n\n });\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avAnalyticsUtils', function(AV_ANALYTICS, $log) {\n\n var AnalyticsUtils = function() {};\n\n var proto = AnalyticsUtils.prototype;\n\n proto.getProperties = function(attributes) {\n\n var self = this;\n var props = {};\n\n _.forEach(attributes, function(value, key) {\n if(self.isValidAttribute(key) && self.isNotIgnored(key)) {\n var result = self.getAttribute(key, value);\n props[result.key] = result.value;\n }\n });\n\n return props;\n };\n\n // Function detects external links in order to allow the analytics framework to run\n // before the browser follows a link.\n //\n // - target=\"_self\" - This opens an anchor in the same frame\n // - target=\"_parent\" - Opens the in the next level up of a frame if they were nested to inside one another\n // - target=\"_top\" - Opens the link as top document in the browser window\n // - target=\"_blank\" - Opens link in new tab new tab\n //\n proto.isExternalLink = function(attrs) {\n return attrs.href && !attrs.ngClick;\n };\n\n proto.isNotIgnored = function(key) {\n var ignored = _.includes(AV_ANALYTICS.IGNORE, key);\n return !ignored;\n };\n\n proto.isValidAttribute = function(key) {\n return AV_ANALYTICS.PRE_FIX.test(key);\n };\n\n proto.lowercase = function(str) {\n return str.substr(0, 1).toLowerCase() + str.substr(1);\n };\n\n proto.getAttribute = function(key, value) {\n var simpleKey = key.match(AV_ANALYTICS.PRE_FIX);\n\n if(simpleKey && simpleKey[1]) {\n return {\n key: this.lowercase(simpleKey[1]),\n value: value\n };\n }\n };\n\n proto.toNum = function(value) {\n var parsed = parseInt(value, 10);\n value = isNaN(parsed) ? 0 : parsed;\n return value;\n };\n\n proto.isValid = function(trackingValues) {\n var valid = true;\n\n if(trackingValues.value || trackingValues.value === 0) {\n delete trackingValues.value;\n }\n\n _.forEach(trackingValues, function(key, value) {\n if(availity.isBlank(value) || _.isUndefined(value)) {\n $log.warn('The analytic tracking value for ' + key.toUpperCase() +' is not defined.');\n valid = false;\n }\n });\n\n return valid;\n };\n\n return new AnalyticsUtils();\n });\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.factory('avSplunkAnalytics', function($log, avLogMessagesResource, $location) {\n\n var SplunkAnalyticsService = function() {};\n\n var proto = SplunkAnalyticsService.prototype;\n\n proto.trackEvent = function(properties) {\n properties.url = $location.$$absUrl || 'N/A';\n properties.level = properties.level || 'info';\n\n return avLogMessagesResource[properties.level](properties);\n };\n\n proto.trackPageView = function(url) {\n\n var properties = {\n event: 'page',\n level: 'info',\n url: url || $location.$$absUrl()\n };\n\n return avLogMessagesResource[properties.level](properties);\n };\n\n proto.isEnabled = function() {\n return true;\n };\n\n return new SplunkAnalyticsService();\n });\n\n})(window);\n","(function(root) {\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.provider('avPiwikAnalytics', function() {\n\n var self;\n var siteId;\n var enabled = false;\n var customVariables = [];\n\n this.enabled = function(_enabled) {\n enabled = !!_enabled;\n };\n\n // can not push these items to `_paq` because it is defined\n // after page has loaded\n this._setCustomVariable = function(index, valueName, value, scope) {\n\n if(!index || isNaN(index)) {\n throw new Error('index must be a number');\n } else if(!valueName) {\n throw new Error('valueName must be declared');\n } else {\n customVariables.push(['setCustomVariable', index, valueName, value, scope]);\n }\n };\n\n this.setSiteID = function(_siteID) {\n this.enabled(true);\n siteId = _siteID;\n };\n\n // allow the user to pass a array of visit variables\n this.setVisitVariables = function(items) {\n _.forEach(items, function(item) {\n self._setCustomVariable(item[0], item[1], item[2], 'visit');\n });\n };\n\n this.setPageVariables = function(index, name, value) {\n this._setCustomVariable(index, name, value, 'page');\n };\n\n this.$get = function(avAnalyticsUtils, avUsersResource, AV_ANALYTICS, $injector, $log, $q, $document, $location) {\n\n var AvPiwikAnalytics = function() {\n window._paq = window._paq || [];\n };\n\n var proto = AvPiwikAnalytics.prototype;\n\n proto.trackEvent = function(properties) {\n\n if(!window._paq) {\n $log.warn('Piwik object `_paq` not found in global scope');\n return $q.when(false);\n }\n\n // http://piwik.org/docs/event-tracking/\n //\n // PAQ requires that eventValue be an integer.\n // Check to make sure value is a number if not convert it to 0.\n //\n if(properties.value) {\n properties.value = avAnalyticsUtils.toNum(properties.event);\n }\n\n // check to make sure that data being sent to piwik is a string and not null, empty or undefined\n if(!avAnalyticsUtils.isValid(properties)) {\n $log.warn('Invalid properties being passed. Tracking info will not be sent.');\n return $q.when(false);\n }\n\n return $q.when(window._paq.push(['trackEvent', properties.category, properties.action || properties.event, properties.label, properties.value]));\n };\n\n proto.trackPageView = function(url) {\n\n if(!window._paq) {\n $log.warn('Piwik object `_paq` not found in global scope');\n return $q.when(false);\n }\n\n return $q.when([\n window._paq.push(['setCustomUrl', url]),\n window._paq.push(['trackPageView', url])]\n );\n\n };\n\n proto.init = function() {\n\n avUsersResource.me().then(function(user) {\n window._paq.push(['setUserId', user.id]);\n // self.trackPageView(); //send another page track when the user data loads\n });\n\n if(!_.isFinite(siteId)) {\n $log.warn('Invalid Piwik Site Id. Piwik analytics has been disabled.');\n return;\n }\n\n var url;\n\n if($location.$$host === AV_ANALYTICS.ENV.PROD.DOMAIN) {\n url = AV_ANALYTICS.ENV.PROD.URL;\n } else {\n url = AV_ANALYTICS.ENV.QA.URL;\n }\n\n window._paq.push(['enableLinkTracking']);\n window._paq.push(['setTrackerUrl', url + 'piwik.php']);\n window._paq.push(['setSiteId', siteId]);\n\n _.forEach(customVariables, function(variable) {\n window._paq.push(variable);\n });\n\n $.getScript(url + 'piwik.js', function() {\n\n });\n\n };\n\n\n proto.isEnabled = function() {\n return enabled && siteId;\n };\n\n return new AvPiwikAnalytics();\n };\n\n });\n\n})(window);\n","/* global TraceKit */\n\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_EXCEPTIONS', {\n MESSAGES: {\n NOT_APPLICABLE: 'N/A'\n },\n TYPES: {\n EXCEPTION: 'exception'\n }\n });\n\n availity.core.provider('avExceptionAnalytics', function() {\n\n var _enabled = true;\n var appId;\n\n this.enabled = function(enabled) {\n _enabled = !!enabled;\n };\n\n this.setAppId = function(_id) {\n appId = _id;\n };\n\n this.$get = function(avLogMessagesResource, $location, AV_EXCEPTIONS) {\n\n var AvExceptionAnalytics = function() {\n\n };\n\n var proto = AvExceptionAnalytics.prototype;\n\n proto.init = function() {\n\n var self = this;\n\n if(!_enabled) {\n return;\n }\n\n TraceKit.remoteFetching = false;\n TraceKit.surroundingLinesToCollect = 11;\n\n // subscribe() hooks into window.error\n TraceKit.report.subscribe(function(stacktrace) {\n self.onError(stacktrace);\n });\n\n };\n\n proto.prettyPrint = function(stacktrace) {\n\n var message = '';\n\n var length = stacktrace.stack.length;\n\n for(var i = 0; i < length; i++) {\n message += [\n '[' + _.padLeft(i + '', 2, '0') + '] ',\n stacktrace.stack[i].func,\n ' ',\n stacktrace.stack[i].url,\n ':',\n stacktrace.stack[i].line,\n ':',\n stacktrace.stack[i].column,\n i + 1 < length ? '\\n' : ''\n ].join('');\n\n }\n\n return message;\n };\n\n proto.onError = function(stacktrace) {\n\n var userAgent = root.navigator && root.navigator.userAgent ? root.navigator.userAgent : AV_EXCEPTIONS.MESSAGES.NOT_APPLICABLE;\n\n var message = {\n errorDate: moment(new Date()).format('YYYY-MM-DDTHH:mm:ssZZ'),\n errorName: stacktrace.name,\n errorMessage: stacktrace.message,\n errorStack: this.prettyPrint(stacktrace),\n url: $location.$$absUrl,\n appId: appId || AV_EXCEPTIONS.MESSAGES.NOT_APPLICABLE,\n // appVersion: AV_EXCEPTIONS.MESSAGES.NOT_APPLICABLE,\n userAgent: userAgent,\n userLanguage: navigator.userLanguage,\n referrer: document.referrer,\n host: document.domain,\n screenWidth: $(window).width(),\n screenHeight: $(window).height(),\n sdkVersion: availity.VERSION\n };\n\n return this.log(message);\n\n };\n\n proto.log = function(message) {\n return avLogMessagesResource['error'](message);\n };\n\n proto.trackEvent = function(exception) {\n\n if(!_enabled) {\n return;\n }\n\n var stacktrace = TraceKit.computeStackTrace(exception);\n\n return this.onError(stacktrace);\n\n };\n\n return new AvExceptionAnalytics();\n\n };\n });\n\n availity.core.config(function($provide) {\n\n $provide.decorator('$exceptionHandler', function($delegate, $injector) {\n return function(exception, cause) {\n $delegate(exception, cause);\n var errorTacking = $injector.get('avExceptionAnalytics');\n errorTacking.trackEvent(exception);\n };\n });\n\n });\n\n availity.core.run(function(avExceptionAnalytics) {\n avExceptionAnalytics.init();\n });\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity || {};\n\n availity.analytics = angular.module('availity.config', ['ng', 'availity']);\n\n availity.analytics.run(function(avAnalytics) {\n\n avAnalytics.init();\n\n });\n\n})(window);\n\n","// Issue: https://github.com/angular/angular.js/issues/11165\n// Polyfill: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString\n//\n// This polyfill is needed because Angular calls toISOString()\n// when an request parameter is of type Date. If this polyfill isn't present\n// the ajax call fails.\n//\n(function() {\n\n 'use strict';\n\n var pad = function(number) {\n if(number < 10) {\n return '0' + number;\n }\n return number;\n };\n\n if(!Date.prototype.toISOString) {\n\n Date.prototype.toISOString = function() {\n\n return this.getUTCFullYear() +\n '-' + pad(this.getUTCMonth() + 1) +\n '-' + pad(this.getUTCDate()) +\n 'T' + pad(this.getUTCHours()) +\n ':' + pad(this.getUTCMinutes()) +\n ':' + pad(this.getUTCSeconds()) +\n '.' + (this.getUTCMilliseconds() / 1000).toFixed(3).slice(2, 5) +\n 'Z';\n };\n }\n\n})(window);\n","(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.constant('AV_MESSAGES', {\n\n EVENTS: {\n\n MESSAGE: 'message', // post message window event\n RESIZE: 'resize', // window resize event\n UNLOAD: 'beforeunload',\n\n AV_RESIZE: 'av:window:resize',\n AV_RECEIVED: 'av:message:received',\n AV_MAXIMIZE: 'nav:left:hide', // @deprecated,\n AV_MINIMIZE: 'nav:left:hide', // @deprecated\n // MAXIMIZE: 'av:window:maximize',\n // MINIMIZE: 'av:window:minimize',\n AV_LOGIN: 'av:login',\n AV_LOGOUT: 'av:logout',\n AV_SESSION_TIMEOUT: 'av:session:timeout'\n\n },\n\n RESIZE_DEBOUNCE: 400,\n\n DOMAIN: /https?:\\/\\/([\\w\\d\\-]+\\.)?availity\\.(com|net)/,\n LOCAL: /http:\\/\\/(localhost|127\\.0\\.0\\.1|0\\.0\\.0\\.0):(\\d+)/\n\n });\n\n})(window);\n","/* global JSON:false */\n\n// https://github.com/kylewelsby/angular-post-message/blob/master/src/angular-post-message.js\n(function(root) {\n\n 'use strict';\n\n var availity = root.availity;\n\n availity.core.provider('avMessages', function() {\n\n var enabled = true;\n\n this.enable = function(value) {\n\n if(arguments.length) {\n enabled = !!value;\n }\n\n return enabled;\n\n };\n\n this.$get = function($rootScope, $log, AV_MESSAGES) {\n\n var AvMessages = function() {\n\n };\n\n var proto = AvMessages.prototype;\n\n proto.init = function() {\n\n var self = this;\n var $window = $(window);\n\n $window.on(AV_MESSAGES.EVENTS.MESSAGE, function(event) {\n self.onMessage(event);\n });\n\n $window.on(AV_MESSAGES.EVENTS.RESIZE, function() {\n self.onResize();\n });\n\n this.send(AV_MESSAGES.EVENTS.AV_MAXIMIZE);\n\n $rootScope.$on('$destroy', function() {\n self.destroy();\n });\n\n $window.on(AV_MESSAGES.EVENTS.UNLOAD, function() {\n self.send(AV_MESSAGES.EVENTS.AV_MINIMIZE);\n });\n\n };\n\n proto.destroy = function() {\n\n $(window).off(AV_MESSAGES.EVENTS.MESSAGE);\n $(window).off(AV_MESSAGES.EVENTS.RESIZE);\n $(window).off(AV_MESSAGES.EVENTS.UNLOAD);\n\n };\n\n proto.onResize = function() {\n\n var self = this;\n\n var resize = _.debounce(function() {\n\n var height = $('html').height();\n self.send({\n event: AV_MESSAGES.EVENTS.AV_RESIZE,\n height: height\n });\n\n }, AV_MESSAGES.RESIZE_DEBOUNCE);\n\n resize();\n\n };\n\n proto.isDomain = function(url) {\n\n if(AV_MESSAGES.DOMAIN.test(this.domain())) {\n return AV_MESSAGES.DOMAIN.test(url);\n }\n\n return AV_MESSAGES.LOCAL.test(url);\n };\n\n proto.isEnabled = function() {\n return enabled;\n };\n\n proto.onMessage = function(_event) {\n\n var event = _event;\n\n event = event.originalEvent || event; // jQuery wraps in `originalEvent`\n\n if(!event && !event.data) {\n // no op\n return;\n }\n\n // don't process messages emitted from same window\n if(event.source === window) {\n return;\n }\n\n if(!this.isDomain(event.origin)) {\n $log.warn('avMessages rejected a cross domain message since it does not match an *.availity.com or localhost');\n return;\n }\n\n\n var data = event.data;\n\n try {\n data = angular.fromJson(data);\n } catch(err) {\n $log.warn('avMessages.onMessage() failed to convert event to json payload');\n }\n\n if(_.isString(data)) {\n event = data;\n data = null;\n }else {\n event = data.event ? data.event : AV_MESSAGES.AV_RECEIVED;\n }\n\n $rootScope.$root.$broadcast(event, data);\n\n };\n\n proto.isIframe = function() {\n return window.self !== window.parent;\n };\n\n proto.domain = function() {\n\n var window = root;\n\n if(window.location.origin) {\n return window.location.origin;\n }\n\n if(window.location.hostname) {\n return window.location.protocol + '//' + window.location.hostname + (window.location.port ? ':' + window.location.port : '');\n }\n\n return '*';\n\n };\n\n proto.send = function(payload) {\n\n try {\n\n var message = _.isString(payload) ? payload : JSON.stringify(payload);\n this.postMessage(message, this.domain());\n\n } catch(err) {\n $log.error('avMessages.send() ', err);\n }\n };\n\n proto.postMessage = function(message, domain) {\n window.parent.postMessage(message, domain);\n };\n\n return new AvMessages();\n\n };\n\n });\n\n availity.core.run(function(avMessages) {\n\n if(avMessages.isEnabled()) {\n avMessages.init();\n }\n\n });\n\n})(window);\n\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/package.json b/package.json index 83a51723..90fd474d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "availity-angular", "description": "Availity Angular SDK", - "version": "1.8.0", + "version": "1.8.1", "main": "index.js", "scripts": { "test": "gulp test:ci",