{"version":3,"sources":["app/lib.min.js"],"names":["_readOnlyError","name","Error","_typeof","obj","Symbol","iterator","constructor","prototype","window","document","bodyElement","$q","isObject","angular","module","$httpProvider","interceptors","responseInterceptors","isString","forEach","loadingClass","errorClass","TrackerResponseInterceptor","removeLoadingClass","removeClass","createInjector","injectorModules","b","modules","push","XMLHttpRequest","val","Function","element","self","unbind","unshift","$provide","value","provideRootElement","injector","deferredBootstrapper","bootstrap","configParam","ngRepeat","config","promises","restrict","constants","oldIndex","bootstrapConfig","newIndex","callResolveFn","resolveFunction","constantName","moduleName","setTimeout","jqCheckAndTriggerAutoFillEvent","isFunction","month","prefix","_formatCardNumber","$target","error","success","then","isPromise","cvc","length","getStartOfQuarter","body","addClass","setMinDuration","active","resolve","_delayPromise","cancel","fireEvent","moduleResolves","trackedPromises","_minPromise","moduleResolve","promise","isDefined","onError","checkConfig","get","index","all","results","Object","extend","oas","generateGuid","data","uuidv4","Highcharts","options","markerOptions","constant","result","deferred","defer","match","ready","test","ngFileUpload","navigator","URL","factory","doBootstrap","promiseTracker","$injector","$http","pendingRequests","tracker","isArray","trackerName","addPromise","TrackerHttpInterceptor","request","$promiseTrackerDeferred","createPromise","when","response","responseError","reject","$inject","provider","uid","trackers","this","$get","$timeout","Tracker","callbacks","start","done","event","cb","call","id","startArg","promiseId","digit","charCodeAt","join","String","fromCharCode","nextUid","startMinMaxDuration","_minDuration","noop","_maxDuration","_maxPromise","onDone","isError","indexOf","splice","_activationDelay","minimum","minDuration","setMaxDuration","maximum","maxDuration","setActivationDelay","newDelay","activationDelay","$promise","on","bind","off","arr","find","i","undefined","n","prependMethod","method","func","original","args","Array","slice","arguments","apply","deepExtend","destination","source","property","directive","highchartsNGUtils","chartOptionsWithoutEasyOptions","visible","seriesId","axisNames","replace","template","scope","disableDataWatch","link","processSeries","series","ids","changed","s","ensureIds","chartSeries","chart","equals","prevSeriesOptions","setVisible","setData","copy","update","addSeries","noData","chartContainsData","hideLoading","showLoading","remove","initChart","destroy","axis","axisName","mergedOptions","defaultOptions","events","title","subtitle","credits","plotOptions","enabled","renderTo","currentMin","currentMax","e","thisChart","$apply","min","max","dataMin","dataMax","size","width","height","getMergedOptions","useHighStocks","StockChart","Chart","setExtremes","loading","getHighcharts","$watchCollection","newSeries","oldSeries","redraw","$watch","newTitle","setTitle","newSubtitle","show","hide","oldUseHighStocks","newAxes","oldAxes","modelAxis","extremes","getExtremes","updateZoom","newOptions","oldOptions","newSize","oldSize","setSize","$on","reflow","a","c","addEventListener","attachEvent","$","ab","Z","console","log","d","warn","X","substr","_","split","M","Number","P","Y","bb","J","N","V","L","O","fb","f","g","h","createElement","style","clear","display","appendChild","o","m","documentElement","parentIFrame","close","D","getId","reset","G","scrollTo","H","sendMessage","setHeightCalculationMethod","setTargetOrigin","db","E","MutationObserver","WebKitMutationObserver","q","querySelector","target","type","src","attributeName","querySelectorAll","r","observe","attributes","attributeOldValue","characterData","characterDataOldValue","childList","subtree","U","jb","setInterval","Math","abs","t","defaultView","getComputedStyle","parseInt","K","left","runtimeStyle","currentStyle","pixelLeft","offsetHeight","u","scrollHeight","v","w","y","z","C","scrollWidth","resetPage","init","gb","Q","S","ib","interval","clearTimeout","hb","R","F","eb","postMessage","resize","click","T","W","scroll","bodyScroll","documentElementScroll","parent","offset","bodyOffset","documentElementOffset","grow","lowestElement","Date","getTime","getBoundingClientRect","bottom","x","true","false","FileAPI","shouldLoad","setRequestHeader","orig","header","version","service","sendHttp","headers","__setXHR_","xhr","__XHR","xhrFn","upload","notify","progressFunc","lengthComputable","fn","status","progress","abort","origXhrFn","addFieldToFormData","formData","key","isDate","toISOString","append","sendFieldsAs","k","hasOwnProperty","JSON","stringify","Blob","transformRequest","FormData","allFields","fields","formDataAppender","file","fileFormName","fileFormDataName","isFileFormNameString","fileName","http","ArrayBuffer","defaults","$parse","$compile","require","elem","attr","ngModel","$$ngfRefElem","disabled","ngfSelect","search","isInputTypeFile","tagName","toLowerCase","isUpdating","changeFn","evt","fileList","__files_","files","rejFiles","item","validate","updateModel","ngfChange","bindAttrToFileInput","fileElem","ngfMultiple","ngfCapture","accept","attribute","createFileInput","resetOnClick","replaceWith","css","ngfFixIE","clickHandler","preventDefault","stopPropagation","ngfResetOnClick","clickAndAssign","ngfResetModelOnClick","resetModel","ua","shouldClickLater","userAgent","linkFileSelect","ngfAccept","$file","$event","fileSizeMax","ngfMaxSize","fileSizeMin","ngfMinSize","regexp","RegExp","globStringToRegex","str","substring","fileChange","noDelay","ngfKeep","prevFiles","$modelValue","ngfKeepDistinct","len","j","concat","assign","$setViewValue","ngModelRejected","$files","$rejectedFiles","dropAvailable","div","$location","available","ngfHideOnDropNotAvailable","ngfDrop","actualDragOverClass","leaveTimeout","ngfStopPropagation","dragOverDelay","dataTransfer","effectAllowed","dropEffect","accepted","items","kind","clazz","ngfDragOverClass","delay","calculateDragOverClass","callback","allowDir","multiple","processing","addFile","traverseFileTree","entry","path","isDirectory","filePath","dirReader","createReader","entries","readEntries","protocol","webkitGetAsEntry","getAsFile","delays","waitForProcess","extractFiles","ngfAllowDir","linkDrop","ngfDropAvailable","FileReader","ngfSrc","webkitURL","createObjectURL","fileReader","readAsDataURL","onload","ngfDefaultSrc","Sortable","define","amd","removed","nextSibling","getSource","el","filter","childNodes","node","nodeType","nodeValue","itemExpr","itemsExpr","$el","attrs","sortable","ngSortable","$eval","_emitEvent","charAt","toUpperCase","model","models","_sync","from","prevSource","prevItems","clone","removeChild","insertBefore","create","keys","reduce","opts","onStart","onEnd","onAdd","onUpdate","onRemove","onSort","option","listener","jqProto","_val","jQuery","rootElement","$rootElement","addGlobalEventListener","markValue","newValue","res","checkAndTriggerAutoFillEvent","valueMarked","triggerChangeEvent","nodeName","parentNode","findParentForm","$$currentValue","eventName","createEvent","initEvent","dispatchEvent","ret","year","_ref","getFullYear","toString","defaultFormat","defaultInputFormat","cards","pattern","format","inputFormat","cvcLength","luhn","fromNumber","num","card","_fromNumber","fromType","_fromType","Cards","Common","$filter","_hasTextSelected","ref","prop","selection","createRange","text","re","upperLength","which","currentTarget","meta","keyCode","_restrictCardNumber","_formatBackCardNumber","_getFormattedCardNumber","groups","global","exec","shift","_reFormatCardNumber","_parseCardNumber","_formats","ctrl","$parsers","$formatters","_formatCVC","_restrictExpiry","_formatExpiry","_formatForwardExpiry","_formatForwardSlash","_formatBackExpiry","_parseExpiry","parseExpiry","expiry","_getFormattedExpiry","types","errstr","$window","_Format","paymentsFormat","__indexOf","l","_validators","ref1","paymentsTypeModel","typeModel","clearCard","$card","digits","odd","sum","reverse","_luhnCheck","currentTime","setMonth","getMonth","_Validate","_validatorWatches","newVal","oldVal","valid","$setValidity","_ValidateWatch","paymentsValidate","validateFn","floor","formatted","includeTime","groupOn","groupingField","sortGroups","existingGroup","sortBy","almostEquals","diff","getFromDotNotationStr","utils","random","seriesTypes","areaspline","drawLegendSymbol","legend","marker","legendOptions","symbolWidth","renderer","top","baseline","round","fontMetrics","itemStyle","fontSize","symbolHeight","lineWidth","legendArea","fill","add","legendGroup","Series","wrap","Legend","proceed","pick","fillColor","Color","color","setOpacity","fillOpacity","itemHiddenStyle","mock","placeholder","priority","orig_type","setValue","hasClass","orig_val","$render","$viewValue"],"mappings":"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","file":"lib.min.js","sourcesContent":["/**\n * angular-deferred-bootstrap - v0.1.5 - 2014-10-08\n * https://github.com/philippd/angular-deferred-bootstrap\n * Copyright (c) 2014 Philipp Denzler\n * License: MIT\n */\n(function (window, document) {\n'use strict';\n\nvar isObject = angular.isObject,\n isFunction = angular.isFunction,\n isArray = angular.isArray,\n isString = angular.isString,\n forEach = angular.forEach,\n loadingClass = 'deferred-bootstrap-loading',\n errorClass = 'deferred-bootstrap-error',\n bodyElement,\n $q;\n\nfunction addLoadingClass () {\n bodyElement.addClass(loadingClass);\n}\n\nfunction removeLoadingClass () {\n bodyElement.removeClass(loadingClass);\n}\n\nfunction addErrorClass () {\n removeLoadingClass();\n bodyElement.addClass(errorClass);\n}\n\nfunction isPromise (value) {\n return isObject(value) && isFunction(value.then);\n}\n\nfunction checkConfig (config) {\n if (!isObject(config)) {\n throw new Error('Bootstrap configuration must be an object.');\n }\n if (!isString(config.module)) {\n throw new Error('\\'config.module\\' must be a string.');\n }\n if (config.resolve && config.moduleResolves) {\n throw new Error('Bootstrap configuration can contain either \\'resolve\\' or \\'moduleResolves\\' but not both');\n }\n if (config.resolve) {\n if (!isObject(config.resolve)) {\n throw new Error('\\'config.resolve\\' must be an object.');\n }\n }\n if (config.bootstrapConfig) {\n if (!isObject(config.bootstrapConfig)) {\n throw new Error('\\'config.bootstrapConfig\\' must be an object.');\n }\n }\n if (config.moduleResolves) {\n if (!isArray(config.moduleResolves)) {\n throw new Error('\\'config.moduleResolves\\' must be an array.');\n }\n }\n\n forEach(config.moduleResolves, function (moduleResolve) {\n if (!moduleResolve.module) {\n throw new Error('A \\'moduleResolve\\' configuration item must contain a \\'module\\' name.');\n }\n\n if (!isObject(moduleResolve.resolve)) {\n throw new Error('\\'moduleResolve.resolve\\' must be an object.');\n }\n });\n\n if (angular.isDefined(config.onError) && !isFunction(config.onError)) {\n throw new Error('\\'config.onError\\' must be a function.');\n }\n}\nfunction provideRootElement (modules, element) {\n element = angular.element(element);\n modules.unshift(['$provide', function($provide) {\n $provide.value('$rootElement', element);\n }]);\n}\n\nfunction createInjector (injectorModules, element) {\n var modules = ['ng'];\n if (isString(injectorModules)) {\n modules.push(injectorModules);\n } else if (isArray(injectorModules)) {\n modules = modules.concat(injectorModules);\n }\n provideRootElement(modules, element);\n return angular.injector(modules, element);\n}\n\nfunction doBootstrap (element, module, bootstrapConfig) {\n var deferred = $q.defer();\n\n angular.element(document).ready(function () {\n angular.bootstrap(element, [module], bootstrapConfig);\n removeLoadingClass();\n\n deferred.resolve(true);\n });\n\n return deferred.promise;\n}\n\nfunction bootstrap (configParam) {\n var config = configParam || {},\n element = config.element,\n module = config.module,\n injectorModules = config.injectorModules || [],\n injector,\n promises = [],\n constants = [],\n bootstrapConfig = config.bootstrapConfig;\n\n bodyElement = angular.element(document.body);\n\n addLoadingClass();\n checkConfig(config);\n injector = createInjector(injectorModules, element);\n $q = injector.get('$q');\n\n function callResolveFn (resolveFunction, constantName, moduleName) {\n var result;\n\n constants.push({\n name: constantName,\n moduleName: moduleName || module\n });\n\n if (!isFunction(resolveFunction) && !isArray(resolveFunction)) {\n throw new Error('Resolve for \\'' + constantName + '\\' is not a valid dependency injection format.');\n }\n\n result = injector.instantiate(resolveFunction);\n\n if (isPromise(result)) {\n promises.push(result);\n } else {\n throw new Error('Resolve function for \\'' + constantName + '\\' must return a promise.');\n }\n }\n\n function handleResults (results) {\n forEach(results, function (value, index) {\n var result = value && value.data ? value.data : value,\n moduleName = constants[index].moduleName,\n constantName = constants[index].name;\n\n angular.module(moduleName).constant(constantName, result);\n });\n\n return doBootstrap(element, module, bootstrapConfig);\n }\n\n function handleError (error) {\n addErrorClass();\n if (isFunction(config.onError)) {\n config.onError(error);\n }\n }\n\n if (config.moduleResolves) {\n forEach(config.moduleResolves, function (moduleResolve, index) {\n forEach(moduleResolve.resolve, function (resolveFunction, constantName) {\n callResolveFn(resolveFunction, constantName, config.moduleResolves[index].module);\n });\n });\n } else {\n forEach(config.resolve, function (resolveFunction, constantName) {\n callResolveFn(resolveFunction, constantName);\n });\n }\n\n return $q.all(promises).then(handleResults, handleError);\n}\n\nwindow.deferredBootstrapper = {\n bootstrap: bootstrap\n};\n})(window, document);\n/* added fix to self.addPromise for Angular 1.3.x - JBT */\n\n/*\n * promise-tracker - v1.5.0 - 2014-01-02\n * http://github.com/ajoslin/angular-promise-tracker\n * Created by Andy Joslin; Licensed under Public Domain\n */\n\n(function() {\nangular.module('ajoslin.promise-tracker', []);\n\n\nangular.module('ajoslin.promise-tracker')\n.config(['$httpProvider', function($httpProvider) {\n if ($httpProvider.interceptors) {\n //Support angularJS 1.1+: interceptors\n $httpProvider.interceptors.push(TrackerHttpInterceptor);\n } else {\n //Support angularJS pre 1.0.x: responseInterceptors\n $httpProvider.responseInterceptors.push(TrackerResponseInterceptor);\n }\n}]);\n\n/*\n * Intercept all http requests that have a `tracker` option in their config,\n * and add that http promise to the specified `tracker`\n */\n\n//angular-1.1.4+ format\nfunction TrackerResponseInterceptor($q, promiseTracker, $injector) {\n //We use $injector get around circular dependency problem for $http\n var $http;\n return function trackerResponse(promise) {\n if (!$http) {\n $http = $injector.get('$http'); //lazy-load http\n }\n\n //We know the latest request is always going to be last in the list\n var config = $http.pendingRequests[$http.pendingRequests.length-1];\n\n if (config.tracker) {\n if (!angular.isArray(config.tracker)) {\n config.tracker = [config.tracker];\n }\n angular.forEach(config.tracker, function(trackerName) {\n promiseTracker(trackerName).addPromise(promise, config);\n });\n }\n\n return promise;\n };\n}\nTrackerResponseInterceptor.$inject = ['$q', 'promiseTracker', '$injector'];\n\n//angular-1.0.x format\nfunction TrackerHttpInterceptor($q, promiseTracker) {\n return {\n request: function(config) {\n if (config.tracker) {\n if (!angular.isArray(config.tracker)) {\n config.tracker = [config.tracker];\n }\n config.$promiseTrackerDeferred = config.$promiseTrackerDeferred || [];\n\n angular.forEach(config.tracker, function(trackerName) {\n var deferred = promiseTracker(trackerName).createPromise(config);\n config.$promiseTrackerDeferred.push(deferred);\n });\n }\n return $q.when(config);\n },\n response: function(response) {\n if (response.config && response.config.$promiseTrackerDeferred) {\n angular.forEach(response.config.$promiseTrackerDeferred, function(deferred) {\n deferred.resolve(response);\n });\n }\n return $q.when(response);\n },\n responseError: function(response) {\n if (response.config && response.config.$promiseTrackerDeferred) {\n angular.forEach(response.config.$promiseTrackerDeferred, function(deferred) {\n deferred.reject(response);\n });\n }\n return $q.reject(response);\n }\n };\n}\nTrackerHttpInterceptor.$inject = ['$q', 'promiseTracker'];\n\n\n\nangular.module('ajoslin.promise-tracker')\n\n.provider('promiseTracker', function() {\n\n /**\n * nextUid(), from angularjs source\n *\n * A consistent way of creating unique IDs in angular. The ID is a sequence of alpha numeric\n * characters such as '012ABC'. The reason why we are not using simply a number counter is that\n * the number string gets longer over time, and it can also overflow, where as the nextId\n * will grow much slower, it is a string, and it will never overflow.\n *\n * @returns string unique alpha-numeric string\n */\n var uid = ['0','0','0'];\n function nextUid() {\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 uid.join('');\n }\n if (digit === 90 /*'Z'*/) {\n uid[index] = '0';\n } else {\n uid[index] = String.fromCharCode(digit + 1);\n return uid.join('');\n }\n }\n uid.unshift('0');\n return uid.join('');\n }\n var trackers = {};\n\n this.$get = ['$q', '$timeout', function($q, $timeout) {\n var self = this;\n\n function Tracker(options) {\n var self = this;\n //Define our callback types. The user can catch when a promise starts,\n //has an error, is successful, or just is done with error or success.\n var callbacks = {\n start: [], //Start is called when a new promise is added\n done: [], //Called when a promise is finished (error or success)\n error: [], //Called on error.\n success: [] //Called on success.\n };\n var trackedPromises = [];\n options = options || {};\n\n //Allow an optional \"minimum duration\" that the tracker has to stay\n //active for. For example, if minimum duration is 1000ms and the user\n //adds three promises that all resolve after 650ms, the tracker will\n //still count itself as active until 1000ms have passed.\n self.setMinDuration = function(minimum) {\n self._minDuration = minimum;\n };\n self.setMinDuration(options.minDuration);\n\n //Allow an option \"maximum duration\" that the tracker can stay active.\n //Ideally, the user would resolve his promises after a certain time to\n //achieve this 'maximum duration' option, but there are a few cases\n //where it is necessary anyway.\n self.setMaxDuration = function(maximum) {\n self._maxDuration = maximum;\n };\n self.setMaxDuration(options.maxDuration);\n\n self.setActivationDelay = function(newDelay) {\n self._activationDelay = newDelay;\n };\n self.setActivationDelay(options.activationDelay);\n\n //## active()\n self.active = function() {\n if (self._delayPromise) {\n return false;\n }\n return trackedPromises.length > 0;\n };\n\n //## cancel()\n self.cancel = function() {\n angular.forEach(trackedPromises, function(deferred) {\n deferred.resolve();\n });\n };\n\n //Fire an event bound with #on().\n //@param options: {id: uniqueId, event: string, value: someValue}\n function fireEvent(options) {\n angular.forEach(callbacks[options.event], function(cb) {\n cb.call(self, options.value, options.id);\n });\n }\n\n //Create a promise that will make our tracker active until it is resolved.\n //@param startArg: params to pass to 'start' event\n //@return deferred - our deferred object that is being tracked\n function createPromise(startArg) {\n //We create our own promise to track. This usually piggybacks on a given\n //promise, or we give it back and someone else can resolve it (like\n //with the httpResponseInterceptor).\n //Using our own promise also lets us do things like cancel early or add\n //a minimum duration.\n var deferred = $q.defer();\n var promiseId = nextUid();\n\n trackedPromises.push(deferred);\n\n //If the tracker was just inactive and this the first in the list of\n //promises, we reset our 'minimum duration' and 'maximum duration'\n //again.\n if (trackedPromises.length === 1) {\n if (self._activationDelay) {\n self._delayPromise = $timeout(function() {\n self._delayPromise = null;\n startMinMaxDuration();\n }, self._activationDelay);\n } else {\n startMinMaxDuration();\n }\n }\n\n function startMinMaxDuration() {\n if (self._minDuration) {\n self._minPromise = $timeout(angular.noop, self._minDuration);\n }\n if (self._maxDuration) {\n self._maxPromise = $timeout(deferred.resolve, self._maxDuration);\n }\n }\n\n fireEvent({\n event: 'start',\n id: promiseId,\n value: startArg\n });\n\n deferred.promise.then(onDone(false), onDone(true));\n\n //Create a callback for when this promise is done. It will remove our\n //tracked promise from the array and call the appropriate event\n //callbacks depending on whether there was an error or not.\n function onDone(isError) {\n return function(value) {\n //Before resolving our promise, make sure the minDuration timeout\n //has finished.\n (self._minPromise || $q.when()).then(function() {\n var index = trackedPromises.indexOf(deferred);\n trackedPromises.splice(index, 1);\n\n //If this is the last promise, cleanup the timeouts\n //for maxDuration and activationDelay\n if (trackedPromises.length === 0) {\n if (self._maxPromise) {\n $timeout.cancel(self._maxPromise);\n self._maxPromise = null;\n }\n if (self._delayPromise) {\n $timeout.cancel(self._delayPromise);\n self._delayPromise = null;\n }\n }\n\n fireEvent({\n event: isError ? 'error' : 'success',\n id: promiseId,\n value: value\n });\n fireEvent({\n event: 'done',\n id: promiseId,\n value: value\n });\n });\n };\n }\n\n return deferred;\n }\n\n //## addPromise()\n //Adds a given promise to our tracking\n self.addPromise = function(promise, startArg) {\n promise = promise && (promise.$promise || promise) || {};\n if (!promise.then) {\n throw new Error(\"promiseTracker#addPromise expects a promise object!\");\n }\n\n var deferred = createPromise(startArg);\n\n //When given promise is done, resolve our created promise\n //Allow $then for angular-resource objects\n promise.then(function success(value) {\n deferred.resolve(value);\n return value;\n }, function error(value) {\n deferred.reject(value);\n return $q.reject(value);\n });\n\n return deferred;\n };\n\n //## createPromise()\n //Create a new promise and return it, and let the user resolve it how\n //they see fit.\n self.createPromise = createPromise;\n\n //## on(), bind()\n //ALlow user to bind to start, done, error, or success events for tracked\n //promises.\n self.on = self.bind = function(event, cb) {\n if (!callbacks[event]) {\n throw new Error(\"Cannot bind callback for event '\" + event +\n \"'. Allowed types: 'start', 'done', 'error', 'success'\");\n }\n callbacks[event].push(cb);\n return self;\n };\n //Allow user to unbind any event. If a callback is given, it will unbind\n //that callback. Else, it will unbind all the callbacks for that event.\n //Similar to jQuery.\n self.off = self.unbind = function(event, cb) {\n if (!callbacks[event]) {\n throw new Error(\"Cannot unbind callback for event '\" + event +\n \"'. Allowed types: 'start', 'done', 'error', 'success'\");\n }\n if (cb) {\n var index = callbacks[event].indexOf(cb);\n callbacks[event].splice(index, 1);\n } else {\n callbacks[event].length = 0;\n }\n return self;\n };\n }\n return function promiseTracker(trackerName, options) {\n if (!trackers[trackerName]) {\n trackers[trackerName] = new Tracker(options);\n }\n return trackers[trackerName];\n };\n }];\n})\n;\n\n}());\n\n(function () {\n 'use strict';\n angular.module('highcharts-ng', []).factory('highchartsNGUtils', highchartsNGUtils).directive('highchart', [\n 'highchartsNGUtils',\n highchart\n ]);\n function highchartsNGUtils() {\n return {\n indexOf: function (arr, find, i) {\n if (i === undefined)\n i = 0;\n if (i < 0)\n i += arr.length;\n if (i < 0)\n i = 0;\n for (var n = arr.length; i < n; i++)\n if (i in arr && arr[i] === find)\n return i;\n return -1;\n },\n prependMethod: function (obj, method, func) {\n var original = obj[method];\n obj[method] = function () {\n var args = Array.prototype.slice.call(arguments);\n func.apply(this, args);\n if (original) {\n return original.apply(this, args);\n } else {\n return;\n }\n };\n },\n deepExtend: function deepExtend(destination, source) {\n if (angular.isArray(source)) {\n destination = angular.isArray(destination) ? destination : [];\n for (var i = 0; i < source.length; i++) {\n destination[i] = deepExtend(destination[i] || {}, source[i]);\n }\n } else if (angular.isObject(source)) {\n for (var property in source) {\n destination[property] = deepExtend(destination[property] || {}, source[property]);\n }\n } else {\n destination = source;\n }\n return destination;\n }\n };\n }\n function highchart(highchartsNGUtils) {\n var seriesId = 0;\n var ensureIds = function (series) {\n var changed = false;\n angular.forEach(series, function (s) {\n if (!angular.isDefined(s.id)) {\n s.id = 'series-' + seriesId++;\n changed = true;\n }\n });\n return changed;\n };\n var axisNames = [\n 'xAxis',\n 'yAxis'\n ];\n var getMergedOptions = function (scope, element, config) {\n var mergedOptions = {};\n var defaultOptions = {\n chart: { events: {} },\n title: {},\n subtitle: {},\n series: [],\n credits: {},\n plotOptions: {},\n navigator: { enabled: false }\n };\n if (config.options) {\n mergedOptions = highchartsNGUtils.deepExtend(defaultOptions, config.options);\n } else {\n mergedOptions = defaultOptions;\n }\n mergedOptions.chart.renderTo = element[0];\n angular.forEach(axisNames, function (axisName) {\n if (angular.isDefined(config[axisName])) {\n mergedOptions[axisName] = angular.copy(config[axisName]);\n if (angular.isDefined(config[axisName].currentMin) || angular.isDefined(config[axisName].currentMax)) {\n highchartsNGUtils.prependMethod(mergedOptions.chart.events, 'selection', function (e) {\n var thisChart = this;\n if (e[axisName]) {\n scope.$apply(function () {\n scope.config[axisName].currentMin = e[axisName][0].min;\n scope.config[axisName].currentMax = e[axisName][0].max;\n });\n } else {\n scope.$apply(function () {\n scope.config[axisName].currentMin = thisChart[axisName][0].dataMin;\n scope.config[axisName].currentMax = thisChart[axisName][0].dataMax;\n });\n }\n });\n highchartsNGUtils.prependMethod(mergedOptions.chart.events, 'addSeries', function (e) {\n scope.config[axisName].currentMin = this[axisName][0].min || scope.config[axisName].currentMin;\n scope.config[axisName].currentMax = this[axisName][0].max || scope.config[axisName].currentMax;\n });\n }\n }\n });\n if (config.title) {\n mergedOptions.title = config.title;\n }\n if (config.subtitle) {\n mergedOptions.subtitle = config.subtitle;\n }\n if (config.credits) {\n mergedOptions.credits = config.credits;\n }\n if (config.size) {\n if (config.size.width) {\n mergedOptions.chart.width = config.size.width;\n }\n if (config.size.height) {\n mergedOptions.chart.height = config.size.height;\n }\n }\n return mergedOptions;\n };\n var updateZoom = function (axis, modelAxis) {\n var extremes = axis.getExtremes();\n if (modelAxis.currentMin !== extremes.dataMin || modelAxis.currentMax !== extremes.dataMax) {\n axis.setExtremes(modelAxis.currentMin, modelAxis.currentMax, false);\n }\n };\n var processExtremes = function (chart, axis, axisName) {\n if (axis.currentMin || axis.currentMax) {\n chart[axisName][0].setExtremes(axis.currentMin, axis.currentMax, true);\n }\n };\n var chartOptionsWithoutEasyOptions = function (options) {\n return angular.extend({}, options, {\n data: null,\n visible: null\n });\n };\n return {\n restrict: 'EAC',\n replace: true,\n template: '
',\n scope: {\n config: '=',\n disableDataWatch: '='\n },\n link: function (scope, element, attrs) {\n var prevSeriesOptions = {};\n var processSeries = function (series) {\n var i;\n var ids = [];\n if (series) {\n var setIds = ensureIds(series);\n if (setIds) {\n return false;\n }\n angular.forEach(series, function (s) {\n ids.push(s.id);\n var chartSeries = chart.get(s.id);\n if (chartSeries) {\n if (!angular.equals(prevSeriesOptions[s.id], chartOptionsWithoutEasyOptions(s))) {\n chartSeries.update(angular.copy(s), false);\n } else {\n if (s.visible !== undefined && chartSeries.visible !== s.visible) {\n chartSeries.setVisible(s.visible, false);\n }\n chartSeries.setData(angular.copy(s.data), false);\n }\n } else {\n chart.addSeries(angular.copy(s), false);\n }\n prevSeriesOptions[s.id] = chartOptionsWithoutEasyOptions(s);\n });\n if (scope.config.noData) {\n var chartContainsData = false;\n for (i = 0; i < series.length; i++) {\n if (series[i].data && series[i].data.length > 0) {\n chartContainsData = true;\n break;\n }\n }\n if (!chartContainsData) {\n chart.showLoading(scope.config.noData);\n } else {\n chart.hideLoading();\n }\n }\n }\n for (i = chart.series.length - 1; i >= 0; i--) {\n var s = chart.series[i];\n if (s.options.id !== 'highcharts-navigator-series' && highchartsNGUtils.indexOf(ids, s.options.id) < 0) {\n s.remove(false);\n }\n }\n return true;\n };\n var chart = false;\n var initChart = function () {\n if (chart)\n chart.destroy();\n prevSeriesOptions = {};\n var config = scope.config || {};\n var mergedOptions = getMergedOptions(scope, element, config);\n var func = config.func || undefined;\n chart = config.useHighStocks ? new Highcharts.StockChart(mergedOptions, func) : new Highcharts.Chart(mergedOptions, func);\n for (var i = 0; i < axisNames.length; i++) {\n if (config[axisNames[i]]) {\n processExtremes(chart, config[axisNames[i]], axisNames[i]);\n }\n }\n if (config.loading) {\n chart.showLoading();\n }\n config.getHighcharts = function() {\n return chart;\n };\n };\n initChart();\n if (scope.disableDataWatch) {\n scope.$watchCollection('config.series', function (newSeries, oldSeries) {\n processSeries(newSeries);\n chart.redraw();\n });\n } else {\n scope.$watch('config.series', function (newSeries, oldSeries) {\n var needsRedraw = processSeries(newSeries);\n if (needsRedraw) {\n chart.redraw();\n }\n }, true);\n }\n scope.$watch('config.title', function (newTitle) {\n chart.setTitle(newTitle, true);\n }, true);\n scope.$watch('config.subtitle', function (newSubtitle) {\n chart.setTitle(true, newSubtitle);\n }, true);\n scope.$watch('config.loading', function (loading) {\n if (loading) {\n chart.showLoading();\n } else {\n chart.hideLoading();\n }\n });\n scope.$watch('config.credits.enabled', function (enabled) {\n if (enabled) {\n chart.credits.show();\n } else if (chart.credits) {\n chart.credits.hide();\n }\n });\n scope.$watch('config.useHighStocks', function (useHighStocks, oldUseHighStocks) {\n if (useHighStocks === oldUseHighStocks)\n return;\n initChart();\n });\n angular.forEach(axisNames, function (axisName) {\n scope.$watch('config.' + axisName, function (newAxes, oldAxes) {\n if (newAxes === oldAxes)\n return;\n if (newAxes) {\n chart[axisName][0].update(newAxes, false);\n updateZoom(chart[axisName][0], angular.copy(newAxes));\n chart.redraw();\n }\n }, true);\n });\n scope.$watch('config.options', function (newOptions, oldOptions, scope) {\n if (newOptions === oldOptions)\n return;\n initChart();\n processSeries(scope.config.series);\n chart.redraw();\n }, true);\n scope.$watch('config.size', function (newSize, oldSize) {\n if (newSize === oldSize)\n return;\n if (newSize) {\n chart.setSize(newSize.width || undefined, newSize.height || undefined);\n }\n }, true);\n scope.$on('highchartsng.reflow', function () {\n chart.reflow();\n });\n scope.$on('$destroy', function () {\n if (chart) {\n chart.destroy();\n setTimeout(function () {\n element.remove();\n }, 0);\n }\n });\n }\n };\n }\n}());\n\n/*! iFrame Resizer (iframeSizer.contentWindow.min.js) - v2.6.1 - 2014-09-03\n * Desc: Include this file in any page being loaded into an iframe\n * to force the iframe to resize to the content size.\n * Requires: iframeResizer.min.js on host page.\n * Copyright: (c) 2014 David J. Bradshaw - dave@bradshaw.net\n * License: MIT\n */\n\n!function(){\"use strict\";function a(a,b,c){\"addEventListener\"in window?a.addEventListener(b,c,!1):\"attachEvent\"in window&&a.attachEvent(\"on\"+b,c)}function b(a){return $+\"[\"+ab+\"] \"+a}function c(a){Z&&\"object\"==typeof window.console&&console.log(b(a))}function d(a){\"object\"==typeof window.console&&console.warn(b(a))}function e(){c(\"Initialising iFrame\"),f(),i(),h(\"background\",L),h(\"padding\",O),o(),m(),j(),p(),n(),D(\"init\",\"Init message from host page\")}function f(){function a(a){return\"true\"===a?!0:!1}var b=X.substr(_).split(\":\");ab=b[0],M=void 0!==b[1]?Number(b[1]):M,P=void 0!==b[2]?a(b[2]):P,Z=void 0!==b[3]?a(b[3]):Z,Y=void 0!==b[4]?Number(b[4]):Y,bb=void 0!==b[5]?a(b[5]):bb,J=void 0!==b[6]?a(b[6]):J,N=b[7],V=void 0!==b[8]?b[8]:V,L=b[9],O=b[10],fb=void 0!==b[11]?Number(b[11]):fb}function g(a,b){return-1!==b.indexOf(\"-\")&&(d(\"Negative CSS value ignored for \"+a),b=\"\"),b}function h(a,b){void 0!==b&&\"\"!==b&&\"null\"!==b&&(document.body.style[a]=b,c(\"Body \"+a+' set to \"'+b+'\"'))}function i(){void 0===N&&(N=M+\"px\"),g(\"margin\",N),h(\"margin\",N)}function j(){document.documentElement.style.height=\"\",document.body.style.height=\"\",c('HTML & body height set to \"auto\"')}function k(){a(window,\"resize\",function(){D(\"resize\",\"Window resized\")})}function l(){a(window,\"click\",function(){D(\"click\",\"Window clicked\")})}function m(){U!==V&&(V in jb||(d(V+\" is not a valid option for heightCalculationMethod.\"),V=\"bodyScroll\"),c('Height calculation method set to \"'+V+'\"'))}function n(){!0===J?(k(),l(),s()):c(\"Auto Resize disabled\")}function o(){var a=document.createElement(\"div\");a.style.clear=\"both\",a.style.display=\"block\",document.body.appendChild(a)}function p(){bb&&(c(\"Enable public methods\"),window.parentIFrame={close:function(){D(\"close\",\"parentIFrame.close()\",0,0)},getId:function(){return ab},reset:function(){G(\"parentIFrame.size\")},scrollTo:function(a,b){H(b,a,\"scrollTo\")},sendMessage:function(a,b){H(0,0,\"message\",a,b)},setHeightCalculationMethod:function(a){V=a,m()},setTargetOrigin:function(a){c(\"Set targetOrigin: \"+a),db=a},size:function(a,b){var c=\"\"+(a?a:\"\")+(b?\",\"+b:\"\");E(),D(\"size\",\"parentIFrame.size(\"+c+\")\",a,b)}})}function q(){0!==Y&&(c(\"setInterval: \"+Y+\"ms\"),setInterval(function(){D(\"interval\",\"setInterval: \"+Y)},Math.abs(Y)))}function r(b){function d(b){(void 0===b.height||void 0===b.width||0===b.height||0===b.width)&&(c(\"Attach listerner to \"+b.src),a(b,\"load\",function(){D(\"imageLoad\",\"Image loaded\")}))}b.forEach(function(a){if(\"attributes\"===a.type&&\"src\"===a.attributeName)d(a.target);else if(\"childList\"===a.type){var b=a.target.querySelectorAll(\"img\");Array.prototype.forEach.call(b,function(a){d(a)})}})}function s(){function a(){var a=document.querySelector(\"body\"),d={attributes:!0,attributeOldValue:!1,characterData:!0,characterDataOldValue:!1,childList:!0,subtree:!0},e=new b(function(a){D(\"mutationObserver\",\"mutationObserver: \"+a[0].target+\" \"+a[0].type),r(a)});c(\"Enable MutationObserver\"),e.observe(a,d)}var b=window.MutationObserver||window.WebKitMutationObserver;b?0>Y?q():a():(d(\"MutationObserver not supported in this browser!\"),q())}function t(){function a(a){function b(a){var b=/^\\d+(px)?$/i;if(b.test(a))return parseInt(a,K);var d=c.style.left,e=c.runtimeStyle.left;return c.runtimeStyle.left=c.currentStyle.left,c.style.left=a||0,a=c.style.pixelLeft,c.style.left=d,c.runtimeStyle.left=e,a}var c=document.body,d=0;return\"defaultView\"in document&&\"getComputedStyle\"in document.defaultView?(d=document.defaultView.getComputedStyle(c,null),d=null!==d?d[a]:0):d=b(c.currentStyle[a]),parseInt(d,K)}return document.body.offsetHeight+a(\"marginTop\")+a(\"marginBottom\")}function u(){return document.body.scrollHeight}function v(){return document.documentElement.offsetHeight}function w(){return document.documentElement.scrollHeight}function x(){for(var a=document.querySelectorAll(\"body *\"),b=a.length,d=0,e=(new Date).getTime(),f=0;b>f;f++)a[f].getBoundingClientRect().bottom>d&&(d=a[f].getBoundingClientRect().bottom);return e=(new Date).getTime()-e,c(\"Parsed \"+b+\" HTML elements\"),c(\"LowestElement bottom position calculated in \"+e+\"ms\"),d}function y(){return[t(),u(),v(),w()]}function z(){return Math.max.apply(null,y())}function A(){return Math.min.apply(null,y())}function B(){return Math.max(t(),x())}function C(){return Math.max(document.documentElement.scrollWidth,document.body.scrollWidth)}function D(a,b,d,e){function f(){a in{reset:1,resetPage:1,init:1}||c(\"Trigger event: \"+b)}function g(){S=n,ib=o,H(S,ib,a)}function h(){return gb&&a in Q}function i(){function a(a,b){var c=Math.abs(a-b)<=fb;return!c}return n=void 0!==d?d:jb[V](),o=void 0!==e?e:C(),a(S,n)||P&&a(ib,o)}function j(){return!(a in{init:1,interval:1,size:1})}function k(){return V in cb}function l(){c(\"No change in size detected\")}function m(){j()&&k()?G(b):a in{interval:1}||(f(),l())}var n,o;h()?c(\"Trigger event cancelled: \"+a):i()?(f(),E(),g()):m()}function E(){gb||(gb=!0,c(\"Trigger event lock on\")),clearTimeout(hb),hb=setTimeout(function(){gb=!1,c(\"Trigger event lock off\"),c(\"--\")},R)}function F(a){S=jb[V](),ib=C(),H(S,ib,a)}function G(a){var b=V;V=U,c(\"Reset trigger event: \"+a),E(),F(\"reset\"),V=b}function H(a,b,d,e,f){function g(){void 0===f?f=db:c(\"Message targetOrigin: \"+f)}function h(){var g=a+\":\"+b,h=ab+\":\"+g+\":\"+d+(void 0!==e?\":\"+e:\"\");c(\"Sending message to host page (\"+h+\")\"),eb.postMessage($+h,f)}g(),h()}function I(a){function b(){return $===(\"\"+a.data).substr(0,_)}function f(){X=a.data,eb=a.source,e(),T=!1,setTimeout(function(){W=!1},R)}function g(){W?c(\"Page reset ignored by init\"):(c(\"Page size reset by host page\"),F(\"resetPage\"))}function h(){return a.data.split(\"]\")[1]}function i(){return\"iFrameResize\"in window}function j(){return a.data.split(\":\")[2]in{\"true\":1,\"false\":1}}b()&&(T&&j()?f():\"reset\"===h()?g():a.data===X||i()||d(\"Unexpected message (\"+a.data+\")\"))}var J=!0,K=10,L=\"\",M=0,N=\"\",O=\"\",P=!1,Q={resize:1,click:1},R=128,S=1,T=!0,U=\"offset\",V=U,W=!0,X=\"\",Y=32,Z=!1,$=\"[iFrameSizer]\",_=$.length,ab=\"\",bb=!1,cb={max:1,scroll:1,bodyScroll:1,documentElementScroll:1},db=\"*\",eb=window.parent,fb=0,gb=!1,hb=null,ib=1,jb={offset:t,bodyOffset:t,bodyScroll:u,documentElementOffset:v,scroll:w,documentElementScroll:w,max:z,min:A,grow:z,lowestElement:B};a(window,\"message\",I)}();\n//# sourceMappingURL=../src/iframeResizer.contentWindow.map\n/**!\n * AngularJS file upload/drop directive and service with progress and abort\n * @author Danial \n * @version 5.0.9\n */\n\nif (window.XMLHttpRequest && !(window.FileAPI && FileAPI.shouldLoad)) {\n window.XMLHttpRequest.prototype.setRequestHeader = (function (orig) {\n return function (header, value) {\n if (header === '__setXHR_') {\n var val = value(this);\n // fix for angular < 1.2.0\n if (val instanceof Function) {\n val(this);\n }\n } else {\n orig.apply(this, arguments);\n }\n };\n })(window.XMLHttpRequest.prototype.setRequestHeader);\n}\n\nvar ngFileUpload = angular.module('ngFileUpload', []);\n\nngFileUpload.version = '5.0.9';\nngFileUpload.service('Upload', ['$http', '$q', '$timeout', function ($http, $q, $timeout) {\n function sendHttp(config) {\n config.method = config.method || 'POST';\n config.headers = config.headers || {};\n\n var deferred = $q.defer();\n var promise = deferred.promise;\n\n config.headers.__setXHR_ = function () {\n return function (xhr) {\n if (!xhr) return;\n config.__XHR = xhr;\n if (config.xhrFn) config.xhrFn(xhr);\n xhr.upload.addEventListener('progress', function (e) {\n e.config = config;\n if (deferred.notify) {\n deferred.notify(e);\n } else if (promise.progressFunc) {\n $timeout(function () {\n promise.progressFunc(e);\n });\n }\n }, false);\n //fix for firefox not firing upload progress end, also IE8-9\n xhr.upload.addEventListener('load', function (e) {\n if (e.lengthComputable) {\n e.config = config;\n if (deferred.notify) {\n deferred.notify(e);\n } else if (promise.progressFunc) {\n $timeout(function () {\n promise.progressFunc(e);\n });\n }\n }\n }, false);\n };\n };\n\n $http(config).then(function (r) {\n deferred.resolve(r);\n }, function (e) {\n deferred.reject(e);\n }, function (n) {\n deferred.notify(n);\n });\n\n promise.success = function (fn) {\n promise.then(function (response) {\n fn(response.data, response.status, response.headers, config);\n });\n return promise;\n };\n\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.progress = function (fn) {\n promise.progressFunc = fn;\n promise.then(null, null, function (update) {\n fn(update);\n });\n return promise;\n };\n promise.abort = function () {\n if (config.__XHR) {\n $timeout(function () {\n config.__XHR.abort();\n });\n }\n return promise;\n };\n promise.xhr = function (fn) {\n config.xhrFn = (function (origXhrFn) {\n return function () {\n if (origXhrFn) origXhrFn.apply(promise, arguments);\n fn.apply(promise, arguments);\n };\n })(config.xhrFn);\n return promise;\n };\n\n return promise;\n }\n\n this.upload = function (config) {\n function addFieldToFormData(formData, val, key) {\n if (val !== undefined) {\n if (angular.isDate(val)) {\n val = val.toISOString();\n }\n if (angular.isString(val)) {\n formData.append(key, val);\n } else if (config.sendFieldsAs === 'form') {\n if (angular.isObject(val)) {\n for (var k in val) {\n if (val.hasOwnProperty(k)) {\n addFieldToFormData(formData, val[k], key + '[' + k + ']');\n }\n }\n } else {\n formData.append(key, val);\n }\n } else {\n val = angular.isString(val) ? val : JSON.stringify(val);\n if (config.sendFieldsAs === 'json-blob') {\n formData.append(key, new Blob([val], {type: 'application/json'}));\n } else {\n formData.append(key, val);\n }\n }\n }\n }\n\n config.headers = config.headers || {};\n config.headers['Content-Type'] = undefined;\n config.transformRequest = config.transformRequest ?\n (angular.isArray(config.transformRequest) ?\n config.transformRequest : [config.transformRequest]) : [];\n config.transformRequest.push(function (data) {\n var formData = new FormData();\n var allFields = {};\n var key;\n for (key in config.fields) {\n if (config.fields.hasOwnProperty(key)) {\n allFields[key] = config.fields[key];\n }\n }\n if (data) allFields.data = data;\n for (key in allFields) {\n if (allFields.hasOwnProperty(key)) {\n var val = allFields[key];\n if (config.formDataAppender) {\n config.formDataAppender(formData, key, val);\n } else {\n addFieldToFormData(formData, val, key);\n }\n }\n }\n\n if (config.file != null) {\n var fileFormName = config.fileFormDataName || 'file';\n\n if (angular.isArray(config.file)) {\n var isFileFormNameString = angular.isString(fileFormName);\n for (var i = 0; i < config.file.length; i++) {\n formData.append(isFileFormNameString ? fileFormName : fileFormName[i], config.file[i],\n (config.fileName && config.fileName[i]) || config.file[i].name);\n }\n } else {\n formData.append(fileFormName, config.file, config.fileName || config.file.name);\n }\n }\n return formData;\n });\n\n return sendHttp(config);\n };\n\n this.http = function (config) {\n config.transformRequest = config.transformRequest || function (data) {\n if ((window.ArrayBuffer && data instanceof window.ArrayBuffer) || data instanceof Blob) {\n return data;\n }\n return $http.defaults.transformRequest[0](arguments);\n };\n return sendHttp(config);\n };\n}\n\n]);\n\n(function () {\n ngFileUpload.directive('ngfSelect', ['$parse', '$timeout', '$compile',\n function ($parse, $timeout, $compile) {\n return {\n restrict: 'AEC',\n require: '?ngModel',\n link: function (scope, elem, attr, ngModel) {\n linkFileSelect(scope, elem, attr, ngModel, $parse, $timeout, $compile);\n }\n };\n }]);\n\n function linkFileSelect(scope, elem, attr, ngModel, $parse, $timeout, $compile) {\n /** @namespace attr.ngfSelect */\n /** @namespace attr.ngfChange */\n /** @namespace attr.ngModel */\n /** @namespace attr.ngModelRejected */\n /** @namespace attr.ngfMultiple */\n /** @namespace attr.ngfCapture */\n /** @namespace attr.ngfAccept */\n /** @namespace attr.ngfMaxSize */\n /** @namespace attr.ngfMinSize */\n /** @namespace attr.ngfResetOnClick */\n /** @namespace attr.ngfResetModelOnClick */\n /** @namespace attr.ngfKeep */\n /** @namespace attr.ngfKeepDistinct */\n\n if (elem.attr('__ngf_gen__')) {\n return;\n }\n\n scope.$on('$destroy', function () {\n if (elem.$$ngfRefElem) elem.$$ngfRefElem.remove();\n });\n\n var disabled = false;\n if (attr.ngfSelect.search(/\\W+$files\\W+/) === -1) {\n scope.$watch(attr.ngfSelect, function (val) {\n disabled = val === false;\n });\n }\n function isInputTypeFile() {\n return elem[0].tagName.toLowerCase() === 'input' && attr.type && attr.type.toLowerCase() === 'file';\n }\n\n var isUpdating = false;\n\n function changeFn(evt) {\n if (!isUpdating) {\n isUpdating = true;\n try {\n var fileList = evt.__files_ || (evt.target && evt.target.files);\n var files = [], rejFiles = [];\n\n for (var i = 0; i < fileList.length; i++) {\n var file = fileList.item(i);\n if (validate(scope, $parse, attr, file, evt)) {\n files.push(file);\n } else {\n rejFiles.push(file);\n }\n }\n updateModel($parse, $timeout, scope, ngModel, attr, attr.ngfChange || attr.ngfSelect, files, rejFiles, evt);\n if (files.length === 0) evt.target.value = files;\n// if (evt.target && evt.target.getAttribute('__ngf_gen__')) {\n// angular.element(evt.target).remove();\n// }\n } finally {\n isUpdating = false;\n }\n }\n }\n\n function bindAttrToFileInput(fileElem) {\n if (attr.ngfMultiple) fileElem.attr('multiple', $parse(attr.ngfMultiple)(scope));\n if (attr.ngfCapture) fileElem.attr('capture', $parse(attr.ngfCapture)(scope));\n if (attr.accept) fileElem.attr('accept', attr.accept);\n for (var i = 0; i < elem[0].attributes.length; i++) {\n var attribute = elem[0].attributes[i];\n if ((isInputTypeFile() && attribute.name !== 'type') ||\n (attribute.name !== 'type' && attribute.name !== 'class' &&\n attribute.name !== 'id' && attribute.name !== 'style')) {\n fileElem.attr(attribute.name, attribute.value);\n }\n }\n }\n\n function createFileInput(evt, resetOnClick) {\n if (!resetOnClick && (evt || isInputTypeFile())) return elem.$$ngfRefElem || elem;\n\n var fileElem = angular.element('');\n bindAttrToFileInput(fileElem);\n\n if (isInputTypeFile()) {\n elem.replaceWith(fileElem);\n elem = fileElem;\n fileElem.attr('__ngf_gen__', true);\n $compile(elem)(scope);\n } else {\n fileElem.css('visibility', 'hidden').css('position', 'absolute').css('overflow', 'hidden')\n .css('width', '0px').css('height', '0px').css('z-index', '-100000').css('border', 'none')\n .css('margin', '0px').css('padding', '0px').attr('tabindex', '-1');\n if (elem.$$ngfRefElem) {\n elem.$$ngfRefElem.remove();\n }\n elem.$$ngfRefElem = fileElem;\n document.body.appendChild(fileElem[0]);\n }\n\n return fileElem;\n }\n\n function resetModel(evt) {\n updateModel($parse, $timeout, scope, ngModel, attr, attr.ngfChange || attr.ngfSelect, [], [], evt, true);\n }\n\n function clickHandler(evt) {\n if (elem.attr('disabled') || disabled) return false;\n if (evt != null) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n var resetOnClick = $parse(attr.ngfResetOnClick)(scope) !== false;\n var fileElem = createFileInput(evt, resetOnClick);\n\n function clickAndAssign(evt) {\n if (evt) {\n fileElem[0].click();\n }\n if (isInputTypeFile() || !evt) {\n elem.bind('click touchend', clickHandler);\n }\n }\n\n if (fileElem) {\n if (!evt || resetOnClick) fileElem.bind('change', changeFn);\n if (evt && resetOnClick && $parse(attr.ngfResetModelOnClick)(scope) !== false) resetModel(evt);\n\n // fix for android native browser < 4.4\n if (shouldClickLater(navigator.userAgent)) {\n setTimeout(function () {\n clickAndAssign(evt);\n }, 0);\n } else {\n clickAndAssign(evt);\n }\n }\n return false;\n }\n\n if (window.FileAPI && window.FileAPI.ngfFixIE) {\n window.FileAPI.ngfFixIE(elem, createFileInput, bindAttrToFileInput, changeFn);\n } else {\n clickHandler();\n //if (!isInputTypeFile()) {\n // elem.bind('click touchend', clickHandler);\n //}\n }\n }\n\n function shouldClickLater(ua) {\n // android below 4.4\n var m = ua.match(/Android[^\\d]*(\\d+)\\.(\\d+)/);\n if (m && m.length > 2) {\n return parseInt(m[1]) < 4 || (parseInt(m[1]) === 4 && parseInt(m[2]) < 4);\n }\n\n // safari on windows\n return /.*Windows.*Safari.*/.test(ua);\n }\n\n ngFileUpload.validate = function (scope, $parse, attr, file, evt) {\n function globStringToRegex(str) {\n if (str.length > 2 && str[0] === '/' && str[str.length - 1] === '/') {\n return str.substring(1, str.length - 1);\n }\n var split = str.split(','), result = '';\n if (split.length > 1) {\n for (var i = 0; i < split.length; i++) {\n result += '(' + globStringToRegex(split[i]) + ')';\n if (i < split.length - 1) {\n result += '|';\n }\n }\n } else {\n if (str.indexOf('.') === 0) {\n str = '*' + str;\n }\n result = '^' + str.replace(new RegExp('[.\\\\\\\\+*?\\\\[\\\\^\\\\]$(){}=!<>|:\\\\' + '-]', 'g'), '\\\\$&') + '$';\n result = result.replace(/\\\\\\*/g, '.*').replace(/\\\\\\?/g, '.');\n }\n return result;\n }\n\n var accept = $parse(attr.ngfAccept)(scope, {$file: file, $event: evt});\n var fileSizeMax = $parse(attr.ngfMaxSize)(scope, {$file: file, $event: evt}) || 9007199254740991;\n var fileSizeMin = $parse(attr.ngfMinSize)(scope, {$file: file, $event: evt}) || -1;\n if (accept != null && angular.isString(accept)) {\n var regexp = new RegExp(globStringToRegex(accept), 'gi');\n accept = (file.type != null && regexp.test(file.type.toLowerCase())) ||\n (file.name != null && regexp.test(file.name.toLowerCase()));\n }\n return (accept == null || accept) && (file.size == null || (file.size < fileSizeMax && file.size > fileSizeMin));\n };\n\n ngFileUpload.updateModel = function ($parse, $timeout, scope, ngModel, attr, fileChange,\n files, rejFiles, evt, noDelay) {\n function update() {\n if ($parse(attr.ngfKeep)(scope) === true) {\n var prevFiles = (ngModel.$modelValue || []).slice(0);\n if (!files || !files.length) {\n files = prevFiles;\n } else if ($parse(attr.ngfKeepDistinct)(scope) === true) {\n var len = prevFiles.length;\n for (var i = 0; i < files.length; i++) {\n for (var j = 0; j < len; j++) {\n if (files[i].name === prevFiles[j].name) break;\n }\n if (j === len) {\n prevFiles.push(files[i]);\n }\n }\n files = prevFiles;\n } else {\n files = prevFiles.concat(files);\n }\n }\n if (ngModel) {\n $parse(attr.ngModel).assign(scope, files);\n $timeout(function () {\n if (ngModel) {\n ngModel.$setViewValue(files != null && files.length === 0 ? null : files);\n }\n });\n }\n if (attr.ngModelRejected) {\n $parse(attr.ngModelRejected).assign(scope, rejFiles);\n }\n if (fileChange) {\n $parse(fileChange)(scope, {\n $files: files,\n $rejectedFiles: rejFiles,\n $event: evt\n });\n }\n }\n\n if (noDelay) {\n update();\n } else {\n $timeout(function () {\n update();\n });\n }\n };\n\n var validate = ngFileUpload.validate;\n var updateModel = ngFileUpload.updateModel;\n\n})();\n\n(function () {\n var validate = ngFileUpload.validate;\n var updateModel = ngFileUpload.updateModel;\n\n ngFileUpload.directive('ngfDrop', ['$parse', '$timeout', '$location', function ($parse, $timeout, $location) {\n return {\n restrict: 'AEC',\n require: '?ngModel',\n link: function (scope, elem, attr, ngModel) {\n linkDrop(scope, elem, attr, ngModel, $parse, $timeout, $location);\n }\n };\n }]);\n\n ngFileUpload.directive('ngfNoFileDrop', function () {\n return function (scope, elem) {\n if (dropAvailable()) elem.css('display', 'none');\n };\n });\n\n ngFileUpload.directive('ngfDropAvailable', ['$parse', '$timeout', function ($parse, $timeout) {\n return function (scope, elem, attr) {\n if (dropAvailable()) {\n var fn = $parse(attr.ngfDropAvailable);\n $timeout(function () {\n fn(scope);\n if (fn.assign) {\n fn.assign(scope, true);\n }\n });\n }\n };\n }]);\n\n function linkDrop(scope, elem, attr, ngModel, $parse, $timeout, $location) {\n var available = dropAvailable();\n if (attr.dropAvailable) {\n $timeout(function () {\n if (scope[attr.dropAvailable]) {\n scope[attr.dropAvailable].value = available;\n } else {\n scope[attr.dropAvailable] = available;\n }\n });\n }\n if (!available) {\n if ($parse(attr.ngfHideOnDropNotAvailable)(scope) === true) {\n elem.css('display', 'none');\n }\n return;\n }\n\n var disabled = false;\n if (attr.ngfDrop.search(/\\W+$files\\W+/) === -1) {\n scope.$watch(attr.ngfDrop, function(val) {\n disabled = val === false;\n });\n }\n\n var leaveTimeout = null;\n var stopPropagation = $parse(attr.ngfStopPropagation);\n var dragOverDelay = 1;\n var actualDragOverClass;\n\n elem[0].addEventListener('dragover', function (evt) {\n if (elem.attr('disabled') || disabled) return;\n evt.preventDefault();\n if (stopPropagation(scope)) evt.stopPropagation();\n // handling dragover events from the Chrome download bar\n if (navigator.userAgent.indexOf('Chrome') > -1) {\n var b = evt.dataTransfer.effectAllowed;\n evt.dataTransfer.dropEffect = ('move' === b || 'linkMove' === b) ? 'move' : 'copy';\n }\n $timeout.cancel(leaveTimeout);\n if (!scope.actualDragOverClass) {\n actualDragOverClass = calculateDragOverClass(scope, attr, evt);\n }\n elem.addClass(actualDragOverClass);\n }, false);\n elem[0].addEventListener('dragenter', function (evt) {\n if (elem.attr('disabled') || disabled) return;\n evt.preventDefault();\n if (stopPropagation(scope)) evt.stopPropagation();\n }, false);\n elem[0].addEventListener('dragleave', function () {\n if (elem.attr('disabled') || disabled) return;\n leaveTimeout = $timeout(function () {\n elem.removeClass(actualDragOverClass);\n actualDragOverClass = null;\n }, dragOverDelay || 1);\n }, false);\n elem[0].addEventListener('drop', function (evt) {\n if (elem.attr('disabled') || disabled) return;\n evt.preventDefault();\n if (stopPropagation(scope)) evt.stopPropagation();\n elem.removeClass(actualDragOverClass);\n actualDragOverClass = null;\n extractFiles(evt, function (files, rejFiles) {\n updateModel($parse, $timeout, scope, ngModel, attr,\n attr.ngfChange || attr.ngfDrop, files, rejFiles, evt);\n }, $parse(attr.ngfAllowDir)(scope) !== false, attr.multiple || $parse(attr.ngfMultiple)(scope));\n }, false);\n\n function calculateDragOverClass(scope, attr, evt) {\n var accepted = true;\n var items = evt.dataTransfer.items;\n if (items != null) {\n for (var i = 0; i < items.length && accepted; i++) {\n accepted = accepted &&\n (items[i].kind === 'file' || items[i].kind === '') &&\n validate(scope, $parse, attr, items[i], evt);\n }\n }\n var clazz = $parse(attr.ngfDragOverClass)(scope, {$event: evt});\n if (clazz) {\n if (clazz.delay) dragOverDelay = clazz.delay;\n if (clazz.accept) clazz = accepted ? clazz.accept : clazz.reject;\n }\n return clazz || attr.ngfDragOverClass || 'dragover';\n }\n\n function extractFiles(evt, callback, allowDir, multiple) {\n var files = [], rejFiles = [], items = evt.dataTransfer.items, processing = 0;\n\n function addFile(file) {\n if (validate(scope, $parse, attr, file, evt)) {\n files.push(file);\n } else {\n rejFiles.push(file);\n }\n }\n\n function traverseFileTree(files, entry, path) {\n if (entry != null) {\n if (entry.isDirectory) {\n var filePath = (path || '') + entry.name;\n addFile({name: entry.name, type: 'directory', path: filePath});\n var dirReader = entry.createReader();\n var entries = [];\n processing++;\n var readEntries = function () {\n dirReader.readEntries(function (results) {\n try {\n if (!results.length) {\n for (var i = 0; i < entries.length; i++) {\n traverseFileTree(files, entries[i], (path ? path : '') + entry.name + '/');\n }\n processing--;\n } else {\n entries = entries.concat(Array.prototype.slice.call(results || [], 0));\n readEntries();\n }\n } catch (e) {\n processing--;\n console.error(e);\n }\n }, function () {\n processing--;\n });\n };\n readEntries();\n } else {\n processing++;\n entry.file(function (file) {\n try {\n processing--;\n file.path = (path ? path : '') + file.name;\n addFile(file);\n } catch (e) {\n processing--;\n console.error(e);\n }\n }, function () {\n processing--;\n });\n }\n }\n }\n\n if (items && items.length > 0 && $location.protocol() !== 'file') {\n for (var i = 0; i < items.length; i++) {\n if (items[i].webkitGetAsEntry && items[i].webkitGetAsEntry() && items[i].webkitGetAsEntry().isDirectory) {\n var entry = items[i].webkitGetAsEntry();\n if (entry.isDirectory && !allowDir) {\n continue;\n }\n if (entry != null) {\n traverseFileTree(files, entry);\n }\n } else {\n var f = items[i].getAsFile();\n if (f != null) addFile(f);\n }\n if (!multiple && files.length > 0) break;\n }\n } else {\n var fileList = evt.dataTransfer.files;\n if (fileList != null) {\n for (var j = 0; j < fileList.length; j++) {\n addFile(fileList.item(j));\n if (!multiple && files.length > 0) {\n break;\n }\n }\n }\n }\n var delays = 0;\n (function waitForProcess(delay) {\n $timeout(function () {\n if (!processing) {\n if (!multiple && files.length > 1) {\n i = 0;\n while (files[i].type === 'directory') i++;\n files = [files[i]];\n }\n callback(files, rejFiles);\n } else {\n if (delays++ * 10 < 20 * 1000) {\n waitForProcess(10);\n }\n }\n }, delay || 0);\n })();\n }\n }\n\n ngFileUpload.directive('ngfSrc', ['$parse', '$timeout', function ($parse, $timeout) {\n return {\n restrict: 'AE',\n link: function (scope, elem, attr) {\n if (window.FileReader) {\n scope.$watch(attr.ngfSrc, function (file) {\n if (file &&\n validate(scope, $parse, attr, file, null) &&\n (!window.FileAPI || navigator.userAgent.indexOf('MSIE 8') === -1 || file.size < 20000) &&\n (!window.FileAPI || navigator.userAgent.indexOf('MSIE 9') === -1 || file.size < 4000000)) {\n $timeout(function () {\n //prefer URL.createObjectURL for handling refrences to files of all sizes\n //since it doesn´t build a large string in memory\n var URL = window.URL || window.webkitURL;\n if (URL && URL.createObjectURL) {\n elem.attr('src', URL.createObjectURL(file));\n } else {\n var fileReader = new FileReader();\n fileReader.readAsDataURL(file);\n fileReader.onload = function (e) {\n $timeout(function () {\n elem.attr('src', e.target.result);\n });\n };\n }\n });\n } else {\n elem.attr('src', attr.ngfDefaultSrc || '');\n }\n });\n }\n }\n };\n }]);\n\n function dropAvailable() {\n var div = document.createElement('div');\n return ('draggable' in div) && ('ondrop' in div);\n }\n\n})();\n\n/**\n * @author RubaXa \n * @licence MIT\n */\n(function (factory) {\n\t'use strict';\n\n\tif (window.angular && window.Sortable) {\n\t\tfactory(angular, Sortable);\n\t}\n\telse if (typeof define === 'function' && define.amd) {\n\t\tdefine(['angular', './Sortable'], factory);\n\t}\n})(function (angular, Sortable) {\n\t'use strict';\n\n\n\t/**\n\t * @typedef {Object} ngSortEvent\n\t * @property {*} model List item\n\t * @property {Object|Array} models List of items\n\t * @property {number} oldIndex before sort\n\t * @property {number} newIndex after sort\n\t */\n\n\n\tangular.module('ng-sortable', [])\n\t\t.constant('version', '0.3.7')\n\t\t.directive('ngSortable', ['$parse', function ($parse) {\n\t\t\tvar removed,\n\t\t\t\tnextSibling;\n\n\t\t\tfunction getSource(el) {\n\t\t\t\tvar scope = angular.element(el).scope();\n\t\t\t\tvar ngRepeat = [].filter.call(el.childNodes, function (node) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\t(node.nodeType === 8) &&\n\t\t\t\t\t\t\t(node.nodeValue.indexOf('ngRepeat:') !== -1)\n\t\t\t\t\t\t);\n\t\t\t\t})[0];\n\n\t\t\t\tif (!ngRepeat) {\n\t\t\t\t\t// Without ng-repeat\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\t// tests: http://jsbin.com/kosubutilo/1/edit?js,output\n\t\t\t\tngRepeat = ngRepeat.nodeValue.match(/ngRepeat:\\s*(?:\\(.*?,\\s*)?([^\\s)]+)[\\s)]+in\\s+([^\\s|]+)/);\n\n\t\t\t\tvar itemExpr = $parse(ngRepeat[1]);\n\t\t\t\tvar itemsExpr = $parse(ngRepeat[2]);\n\n\t\t\t\treturn {\n\t\t\t\t\titem: function (el) {\n\t\t\t\t\t\treturn itemExpr(angular.element(el).scope());\n\t\t\t\t\t},\n\t\t\t\t\titems: function () {\n\t\t\t\t\t\treturn itemsExpr(scope);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\n\t\t\t// Export\n\t\t\treturn {\n\t\t\t\trestrict: 'AC',\n\t\t\t\tlink: function (scope, $el, attrs) {\n\t\t\t\t\tvar el = $el[0],\n\t\t\t\t\t\tngSortable = attrs.ngSortable,\n\t\t\t\t\t\toptions = scope.$eval(ngSortable) || {},\n\t\t\t\t\t\tsource = getSource(el),\n\t\t\t\t\t\tsortable\n\t\t\t\t\t;\n\n\n\t\t\t\t\tfunction _emitEvent(/**Event*/evt, /*Mixed*/item) {\n\t\t\t\t\t\tvar name = 'on' + evt.type.charAt(0).toUpperCase() + evt.type.substr(1);\n\n\t\t\t\t\t\t/* jshint expr:true */\n\t\t\t\t\t\toptions[name] && options[name]({\n\t\t\t\t\t\t\tmodel: item || source && source.item(evt.item),\n\t\t\t\t\t\t\tmodels: source && source.items(),\n\t\t\t\t\t\t\toldIndex: evt.oldIndex,\n\t\t\t\t\t\t\tnewIndex: evt.newIndex\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\n\t\t\t\t\tfunction _sync(/**Event*/evt) {\n\t\t\t\t\t\tif (!source) {\n\t\t\t\t\t\t\t// Without ng-repeat\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar oldIndex = evt.oldIndex,\n\t\t\t\t\t\t\tnewIndex = evt.newIndex,\n\t\t\t\t\t\t\titems = source.items();\n\n\t\t\t\t\t\tif (el !== evt.from) {\n\t\t\t\t\t\t\tvar prevSource = getSource(evt.from),\n\t\t\t\t\t\t\t\tprevItems = prevSource.items();\n\n\t\t\t\t\t\t\toldIndex = prevItems.indexOf(prevSource.item(evt.item));\n\t\t\t\t\t\t\tremoved = prevItems[oldIndex];\n\n\t\t\t\t\t\t\tif (evt.clone) {\n\t\t\t\t\t\t\t\tevt.from.removeChild(evt.clone);\n\t\t\t\t\t\t\t\tremoved = angular.copy(removed);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tprevItems.splice(oldIndex, 1);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\titems.splice(newIndex, 0, removed);\n\n\t\t\t\t\t\t\tevt.from.insertBefore(evt.item, nextSibling); // revert element\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\titems.splice(newIndex, 0, items.splice(oldIndex, 1)[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tscope.$apply();\n\t\t\t\t\t}\n\n\n\t\t\t\t\tsortable = Sortable.create(el, Object.keys(options).reduce(function (opts, name) {\n\t\t\t\t\t\topts[name] = opts[name] || options[name];\n\t\t\t\t\t\treturn opts;\n\t\t\t\t\t}, {\n\t\t\t\t\t\tonStart: function (/**Event*/evt) {\n\t\t\t\t\t\t\tnextSibling = evt.item.nextSibling;\n\t\t\t\t\t\t\t_emitEvent(evt);\n\t\t\t\t\t\t\tscope.$apply();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonEnd: function (/**Event*/evt) {\n\t\t\t\t\t\t\t_emitEvent(evt, removed);\n\t\t\t\t\t\t\tscope.$apply();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonAdd: function (/**Event*/evt) {\n\t\t\t\t\t\t\t_sync(evt);\n\t\t\t\t\t\t\t_emitEvent(evt, removed);\n\t\t\t\t\t\t\tscope.$apply();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonUpdate: function (/**Event*/evt) {\n\t\t\t\t\t\t\t_sync(evt);\n\t\t\t\t\t\t\t_emitEvent(evt);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonRemove: function (/**Event*/evt) {\n\t\t\t\t\t\t\t_emitEvent(evt, removed);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonSort: function (/**Event*/evt) {\n\t\t\t\t\t\t\t_emitEvent(evt);\n\t\t\t\t\t\t}\n\t\t\t\t\t}));\n\n\t\t\t\t\t$el.on('$destroy', function () {\n\t\t\t\t\t\tsortable.destroy();\n\t\t\t\t\t\tsortable = null;\n\t\t\t\t\t\tnextSibling = null;\n\t\t\t\t\t});\n\n\t\t\t\t\tif (ngSortable && !/{|}/.test(ngSortable)) { // todo: ugly\n\t\t\t\t\t\tangular.forEach([\n\t\t\t\t\t\t\t'sort', 'disabled', 'draggable', 'handle', 'animation',\n\t\t\t\t\t\t\t'onStart', 'onEnd', 'onAdd', 'onUpdate', 'onRemove', 'onSort'\n\t\t\t\t\t\t], function (name) {\n\t\t\t\t\t\t\tscope.$watch(ngSortable + '.' + name, function (value) {\n\t\t\t\t\t\t\t\tif (value !== void 0) {\n\t\t\t\t\t\t\t\t\toptions[name] = value;\n\n\t\t\t\t\t\t\t\t\tif (!/^on[A-Z]/.test(name)) {\n\t\t\t\t\t\t\t\t\t\tsortable.option(name, value);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}]);\n});\n\n/**\n * Autofill event polyfill ##version:1.0.0##\n * (c) 2014 Google, Inc.\n * License: MIT\n */\n(function(window) {\n var $ = window.jQuery || window.angular.element;\n var rootElement = window.document.documentElement,\n $rootElement = $(rootElement);\n\n addGlobalEventListener('change', markValue);\n addValueChangeByJsListener(markValue);\n\n $.prototype.checkAndTriggerAutoFillEvent = jqCheckAndTriggerAutoFillEvent;\n\n // Need to use blur and not change event\n // as Chrome does not fire change events in all cases an input is changed\n // (e.g. when starting to type and then finish the input by auto filling a username)\n addGlobalEventListener('blur', function(target) {\n // setTimeout needed for Chrome as it fills other\n // form fields a little later...\n window.setTimeout(function() {\n findParentForm(target).find('input').checkAndTriggerAutoFillEvent();\n }, 20);\n });\n\n window.document.addEventListener('DOMContentLoaded', function() {\n // The timeout is needed for Chrome as it auto fills\n // login forms some time after DOMContentLoaded!\n window.setTimeout(function() {\n $rootElement.find('input').checkAndTriggerAutoFillEvent();\n }, 200);\n }, false);\n\n return;\n\n // ----------\n\n function jqCheckAndTriggerAutoFillEvent() {\n var i, el;\n for (i=0; i 0) {\n forEach(this, function(el) {\n listener(el, newValue);\n });\n }\n return res;\n }\n }\n\n function addGlobalEventListener(eventName, listener) {\n // Use a capturing event listener so that\n // we also get the event when it's stopped!\n // Also, the blur event does not bubble.\n rootElement.addEventListener(eventName, onEvent, true);\n\n function onEvent(event) {\n var target = event.target;\n listener(target);\n }\n }\n\n function findParentForm(el) {\n while (el) {\n if (el.nodeName === 'FORM') {\n return $(el);\n }\n el = el.parentNode;\n }\n return $();\n }\n\n function forEach(arr, listener) {\n if (arr.forEach) {\n return arr.forEach(listener);\n }\n var i;\n for (i=0; i= upperLength) {\n return;\n }\n\n if (!/^\\d+$/.test(digit) && !e.meta && e.keyCode >= 46) {\n e.preventDefault();\n return;\n }\n\n if (($target.prop('selectionStart') != null) && $target.prop('selectionStart') !== value.length) {\n return;\n }\n\n re = Cards.defaultInputFormat();\n if (card) {\n re = card.inputFormat;\n }\n\n if (re.test(value)) {\n e.preventDefault();\n return $target.val(value + ' ' + digit);\n\n } else if (re.test(value + digit)) {\n e.preventDefault();\n return $target.val(value + digit + ' ');\n\n }\n };\n\n var _restrictCardNumber = function(e) {\n var $target, card, digit, value;\n\n $target = angular.element(e.currentTarget);\n digit = String.fromCharCode(e.which);\n\n if(!/^\\d+$/.test(digit)) {\n return;\n }\n\n if(_hasTextSelected($target)) {\n return;\n }\n\n value = ($target.val() + digit).replace(/\\D/g, '');\n card = Cards.fromNumber(value);\n\n if(card) {\n if(!(value.length <= card.length[card.length.length - 1])){\n e.preventDefault();\n }\n } else {\n if(!(value.length <= 16)){\n e.preventDefault();\n }\n }\n };\n\n var _formatBackCardNumber = function(e) {\n var $target, value;\n\n $target = angular.element(e.currentTarget);\n value = $target.val();\n\n if(e.meta) {\n return;\n }\n\n if(e.which !== 8) {\n return;\n }\n\n if(($target.prop('selectionStart') != null) && $target.prop('selectionStart') !== value.length) {\n return;\n }\n\n if(/\\d\\s$/.test(value) && !e.meta && e.keyCode >= 46) {\n e.preventDefault();\n return $target.val(value.replace(/\\d\\s$/, ''));\n } else if (/\\s\\d?$/.test(value)) {\n e.preventDefault();\n return $target.val(value.replace(/\\s\\d?$/, ''));\n }\n };\n\n var _getFormattedCardNumber = function(num) {\n var card, groups, upperLength, ref;\n\n card = Cards.fromNumber(num);\n\n if (!card) {\n return num;\n }\n\n upperLength = card.length[card.length.length - 1];\n num = num.replace(/\\D/g, '');\n num = num.slice(0, +upperLength + 1 || 9e9);\n\n if(card.format.global) {\n return (ref = num.match(card.format)) != null ? ref.join(' ') : void 0;\n } else {\n groups = card.format.exec(num);\n\n if (groups != null) {\n groups.shift();\n }\n\n return groups != null ? groups.join(' ') : void 0;\n }\n };\n\n var _reFormatCardNumber = function(e) {\n return setTimeout(function() {\n var $target, value;\n $target = angular.element(e.target);\n\n value = $target.val();\n value = _getFormattedCardNumber(value);\n return $target.val(value);\n });\n };\n\n var _parseCardNumber = function(value) {\n return value != null ? value.replace(/\\s/g, '') : value;\n };\n\n _formats['card'] = function(elem, ctrl){\n elem.bind('keypress', _restrictCardNumber);\n elem.bind('keypress', _formatCardNumber);\n elem.bind('keydown', _formatBackCardNumber);\n elem.bind('paste', _reFormatCardNumber);\n\n ctrl.$parsers.push(_parseCardNumber);\n ctrl.$formatters.push(_getFormattedCardNumber);\n }\n\n\n // cvc\n\n _formatCVC = function(e){\n $target = angular.element(e.currentTarget);\n digit = String.fromCharCode(e.which);\n\n if (!/^\\d+$/.test(digit) && !e.meta && e.keyCode >= 46) {\n e.preventDefault();\n return;\n }\n\n val = $target.val() + digit;\n\n if(val.length <= 4){\n return;\n } else {\n e.preventDefault();\n return;\n }\n }\n\n _formats['cvc'] = function(elem){\n elem.bind('keypress', _formatCVC)\n }\n\n // expiry\n\n _restrictExpiry = function(e) {\n var $target, digit, value;\n\n $target = angular.element(e.currentTarget);\n digit = String.fromCharCode(e.which);\n\n if (!/^\\d+$/.test(digit) && !e.meta && e.keyCode >= 46) {\n e.preventDefault();\n return;\n }\n\n if(_hasTextSelected($target)) {\n return;\n }\n\n value = $target.val() + digit;\n value = value.replace(/\\D/g, '');\n\n if (value.length > 6) {\n e.preventDefault();\n return;\n }\n };\n\n _formatExpiry = function(e) {\n var $target, digit, val;\n\n digit = String.fromCharCode(e.which);\n\n if (!/^\\d+$/.test(digit) && !e.meta && e.keyCode >= 46) {\n e.preventDefault();\n return;\n }\n\n $target = angular.element(e.currentTarget);\n val = $target.val() + digit;\n\n if (/^\\d$/.test(val) && (val !== '0' && val !== '1')) {\n e.preventDefault();\n return $target.val(\"0\" + val + \" / \");\n\n } else if (/^\\d\\d$/.test(val)) {\n e.preventDefault();\n return $target.val(\"\" + val + \" / \");\n\n }\n };\n\n _formatForwardExpiry = function(e) {\n var $target, digit, val;\n\n digit = String.fromCharCode(e.which);\n\n if (!/^\\d+$/.test(digit) && !e.meta && e.keyCode >= 46) {\n return;\n }\n\n $target = angular.element(e.currentTarget);\n val = $target.val();\n\n if (/^\\d\\d$/.test(val)) {\n return $target.val(\"\" + val + \" / \");\n }\n };\n\n _formatForwardSlash = function(e) {\n var $target, slash, val;\n\n slash = String.fromCharCode(e.which);\n\n if (slash !== '/') {\n return;\n }\n\n $target = angular.element(e.currentTarget);\n val = $target.val();\n\n if (/^\\d$/.test(val) && val !== '0') {\n return $target.val(\"0\" + val + \" / \");\n }\n };\n\n _formatBackExpiry = function(e) {\n var $target, value;\n\n if (e.meta) {\n return;\n }\n\n $target = angular.element(e.currentTarget);\n value = $target.val();\n\n if (e.which !== 8) {\n return;\n }\n\n if (($target.prop('selectionStart') != null) && $target.prop('selectionStart') !== value.length) {\n return;\n }\n\n if (/\\d(\\s|\\/)+$/.test(value)) {\n e.preventDefault();\n return $target.val(value.replace(/\\d(\\s|\\/)*$/, ''));\n\n } else if (/\\s\\/\\s?\\d?$/.test(value)) {\n e.preventDefault();\n return $target.val(value.replace(/\\s\\/\\s?\\d?$/, ''));\n\n }\n };\n\n var _parseExpiry = function(value) {\n if(value != null) {\n var obj = Common.parseExpiry(value);\n var expiry = new Date(obj.year, obj.month-1);\n return $filter('date')(expiry, 'MM/yyyy');\n }\n return null;\n };\n\n var _getFormattedExpiry = function(value) {\n if(value != null) {\n var obj = Common.parseExpiry(value);\n var expiry = new Date(obj.year, obj.month-1);\n return $filter('date')(expiry, 'MM / yyyy');\n }\n return null;\n };\n\n\n _formats['expiry'] = function(elem, ctrl){\n elem.bind('keypress', _restrictExpiry);\n elem.bind('keypress', _formatExpiry);\n elem.bind('keypress', _formatForwardSlash);\n elem.bind('keypress', _formatForwardExpiry);\n elem.bind('keydown', _formatBackExpiry);\n\n ctrl.$parsers.push(_parseExpiry);\n ctrl.$formatters.push(_getFormattedExpiry);\n }\n\n return function(type, elem, ctrl){\n if(!_formats[type]){\n\n types = Object.keys(_formats);\n\n errstr = 'Unknown type for formatting: \"'+type+'\". ';\n errstr += 'Should be one of: \"'+types.join('\", \"')+'\"';\n\n throw errstr;\n }\n return _formats[type](elem, ctrl);\n }\n\n }])\n\n .directive('paymentsFormat', ['$window', '_Format', function($window, _Format){\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function(scope, elem, attr, ctrl){\n _Format(attr.paymentsFormat, elem, ctrl);\n }\n }\n }]);angular.module('angularPayments')\n\n\n\n .factory('_Validate', ['Cards', 'Common', '$parse', function(Cards, Common, $parse){\n\n var __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }\n\n var _luhnCheck = function(num) {\n var digit, digits, odd, sum, i, len;\n\n odd = true;\n sum = 0;\n digits = (num + '').split('').reverse();\n\n for (i = 0, len = digits.length; i < len; i++) {\n\n digit = digits[i];\n digit = parseInt(digit, 10);\n\n if ((odd = !odd)) {\n digit *= 2;\n }\n\n if (digit > 9) {\n digit -= 9;\n }\n\n sum += digit;\n\n }\n\n return sum % 10 === 0;\n };\n\n var _validators = {};\n\n _validators['cvc'] = function(cvc, ctrl, scope, attr){\n var ref, ref1;\n\n // valid if empty - let ng-required handle empty\n if(cvc == null || cvc.length == 0) return true;\n\n if (!/^\\d+$/.test(cvc)) {\n return false;\n }\n\n var type;\n if(attr.paymentsTypeModel) {\n var typeModel = $parse(attr.paymentsTypeModel);\n type = typeModel(scope);\n }\n\n if (type) {\n return ref = cvc.length, __indexOf.call((ref1 = Cards.fromType(type)) != null ? ref1.cvcLength : void 0, ref) >= 0;\n } else {\n return cvc.length >= 3 && cvc.length <= 4;\n }\n };\n\n _validators['card'] = function(num, ctrl, scope, attr){\n var card, ref, typeModel;\n\n if(attr.paymentsTypeModel) {\n typeModel = $parse(attr.paymentsTypeModel);\n }\n\n var clearCard = function(){\n if(typeModel) {\n typeModel.assign(scope, null);\n }\n ctrl.$card = null;\n };\n\n // valid if empty - let ng-required handle empty\n if(num == null || num.length == 0){\n clearCard();\n return true;\n }\n\n num = (num + '').replace(/\\s+|-/g, '');\n\n if (!/^\\d+$/.test(num)) {\n clearCard();\n return false;\n }\n\n card = Cards.fromNumber(num);\n\n if(!card) {\n clearCard();\n return false;\n }\n\n ctrl.$card = angular.copy(card);\n\n if(typeModel) {\n typeModel.assign(scope, card.type);\n }\n\n const ret = (ref = num.length, __indexOf.call(card.length, ref) >= 0) && (card.luhn === false || _luhnCheck(num));\n\n return ret;\n };\n\n _validators['expiry'] = function(val){\n // valid if empty - let ng-required handle empty\n if(val == null || val.length == 0) return true;\n\n const obj = Common.parseExpiry(val);\n\n const month = obj.month;\n const year = obj.year;\n\n var currentTime, expiry, prefix;\n\n if (!(month && year)) {\n return false;\n }\n\n if (!/^\\d+$/.test(month)) {\n return false;\n }\n\n if (!/^\\d+$/.test(year)) {\n return false;\n }\n\n if (!(parseInt(month, 10) <= 12)) {\n return false;\n }\n\n if (year.length === 2) {\n prefix = (new Date).getFullYear();\n prefix = prefix.toString().slice(0, 2);\n year = prefix + year;\n }\n\n expiry = new Date(year, month);\n currentTime = new Date;\n expiry.setMonth(expiry.getMonth() - 1);\n expiry.setMonth(expiry.getMonth() + 1, 1);\n\n return expiry > currentTime;\n };\n\n return function(type, val, ctrl, scope, attr){\n if(!_validators[type]){\n\n types = Object.keys(_validators);\n\n errstr = 'Unknown type for validation: \"'+type+'\". ';\n errstr += 'Should be one of: \"'+types.join('\", \"')+'\"';\n\n throw errstr;\n }\n return _validators[type](val, ctrl, scope, attr);\n }\n }])\n\n\n .factory('_ValidateWatch', ['_Validate', function(_Validate){\n\n var _validatorWatches = {}\n\n _validatorWatches['cvc'] = function(type, ctrl, scope, attr){\n if(attr.paymentsTypeModel) {\n scope.$watch(attr.paymentsTypeModel, function(newVal, oldVal) {\n if(newVal != oldVal) {\n var valid = _Validate(type, ctrl.$modelValue, ctrl, scope, attr);\n ctrl.$setValidity(type, valid);\n }\n });\n }\n };\n\n return function(type, ctrl, scope, attr){\n if(_validatorWatches[type]){\n return _validatorWatches[type](type, ctrl, scope, attr);\n }\n }\n }])\n\n .directive('paymentsValidate', ['$window', '_Validate', '_ValidateWatch', function($window, _Validate, _ValidateWatch){\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function(scope, elem, attr, ctrl){\n\n var type = attr.paymentsValidate;\n\n _ValidateWatch(type, ctrl, scope, attr);\n\n var validateFn = function(val) {\n var valid = _Validate(type, val, ctrl, scope, attr);\n ctrl.$setValidity(type, valid);\n return valid ? val : undefined;\n };\n\n ctrl.$formatters.push(validateFn);\n ctrl.$parsers.push(validateFn);\n }\n }\n }]);\n\n'use strict';\n\n//DATE OBJECT\nDate.prototype.getStartOfQuarter = function () {\n return new Date((Math.floor(this.getMonth() / 3) * 3) + 1 + \"/1/\" + this.getFullYear());\n};\n\nDate.prototype.formatted = function (includeTime) {\n return includeTime ? this.format('{MM}/{dd}/{yyyy} {12hr}:{mm}:{ss} {TT}') : this.format('{MM}/{dd}/{yyyy}'); //requires SugarJS\n};\n\n\n//ARRAY OBJECT\n//TODO: will be Sugar.extend(array, methods) in future release\nArray.extend({\n 'groupOn': function (groupingField, sortGroups) {\n var groups = [];\n\n this.forEach(function (item) {\n var existingGroup = groups.find({name: item[groupingField]});\n if (existingGroup) {\n existingGroup.items.push(item);\n } else {\n groups.push({name: item[groupingField], items: [item]});\n }\n });\n\n return sortGroups ? groups.sortBy(\"name\") : groups;\n }\n});\n\n\n//NUMBER OBJECT\n//TODO: will be Sugar.extend(number, methods) in future release\nNumber.extend({\n 'almostEquals': function (val) {\n if (this == val) return true;\n var diff = Math.abs(this - val);\n if (diff < 4.94065645841247E-320) return true;\n var a = Math.abs(this);\n var b = Math.abs(val);\n var smallest = (b < a) ? b : a;\n return diff < smallest * 1e-12;\n }\n});\n\n\n//OBJECT OBJECT\n//TODO: will be Sugar.extend(object, methods) in future release\nObject.extend({\n 'getFromDotNotationStr': function (val) {\n function index(obj, i) {return obj[i]}\n\n return val.split('.').reduce(index, this);\n }\n});\n\n\n//WINDOW OBJECT\nwindow.oas = {\n utils: {\n generateGuid: function uuidv4() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n })\n }\n }\n};\n//This is so the legend color on the aumOverTime chart matches the fillOpacity of the series\n'use strict';\n\n(function (Highcharts) {\n Highcharts.seriesTypes.areaspline.prototype.drawLegendSymbol = function (legend) {\n // Draw the actual area\n var options = this.options,\n markerOptions = options.marker,\n legendOptions = legend.options,\n symbolWidth = legend.symbolWidth,\n renderer = this.chart.renderer,\n top = legend.baseline - Math.round(renderer.fontMetrics(legendOptions.itemStyle.fontSize).b * 0.3),\n symbolHeight = legend.options.symbolHeight || 16;\n\n if (!options.lineWidth && (!markerOptions || markerOptions.enabled === false)) {\n top = 5;\n }\n\n this.legendArea = renderer.path([\n 'M',\n 0,\n top,\n 'L',\n symbolWidth,\n top,\n 'L',\n symbolWidth,\n symbolHeight,\n 'L',\n 0,\n symbolHeight,\n 'z'\n ])\n .attr({\n fill: 'black'\n })\n .add(this.legendGroup);\n\n // Draw the line and marker\n Highcharts.Series.prototype.drawLegendSymbol.call(this, legend);\n };\n\n Highcharts.wrap(Highcharts.Legend.prototype, 'colorizeItem', function (proceed, item, visible) {\n var options = item.options,\n pick = Highcharts.pick;\n proceed.call(this, item, visible);\n\n if (item.legendArea) {\n var fill = visible ? pick(\n options.fillColor,\n Highcharts.Color(item.color).setOpacity(pick(options.fillOpacity, 0.75)).get()\n ) : legend.itemHiddenStyle.color;\n\n item.legendArea.attr({fill: fill});\n }\n });\n}(Highcharts));\n\n/*! angular-shims-placeholder - v0.1.0 - 2014-03-21\n * https://github.com/jrief/angular-shims-placeholder\n * Copyright (c) 2014 Jacob Rief; Licensed MIT */\n(function (angular, undefined) {\n 'use strict';\n angular.module('ng.shims.placeholder', []).directive('placeholder', function () {\n if (!angular.mock) {\n var test = document.createElement('input');\n if (test.placeholder !== void 0)\n return {};\n }\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n link: function (scope, elem, attrs, ngModel) {\n var orig_type = attrs.type;\n if (!elem.val()) {\n elem.addClass('empty');\n elem.val(attrs.placeholder);\n if (orig_type === 'password') {\n elem.attr('type', 'text');\n }\n ngModel.$setViewValue('');\n } else {\n ngModel.$setViewValue(elem.val());\n }\n elem.bind('focus', function () {\n if (elem.hasClass('empty')) {\n elem.val('');\n elem.removeClass('empty error');\n elem.attr('type', orig_type);\n }\n });\n elem.bind('blur', function () {\n var orig_val = elem.val();\n setValue(orig_val);\n scope.$apply(function () {\n ngModel.$setViewValue(orig_val);\n });\n });\n ngModel.$render = function () {\n setValue(ngModel.$viewValue);\n };\n function setValue(val) {\n if (!val) {\n elem.addClass('empty');\n elem.val(attrs.placeholder);\n if (orig_type === 'password') {\n elem.attr('type', 'text');\n }\n } else {\n elem.removeClass('empty');\n elem.val(val);\n }\n }\n }\n };\n });\n}(window.angular));"]}