{"version":3,"sources":["js/app/app.module.js","js/app/app.config.js","js/app/app.routes.js","js/app/app.run.js","js/app/framework/api/web.service.js","js/app/framework/forms/validate.directive.js","js/app/framework/forms/control.directive.js","js/app/framework/forms/switcher.directive.js","js/app/framework/events/events.factory.js","js/app/framework/modals/modal.directive.js","js/app/framework/modals/modal.provider.js","js/app/framework/ranges/range.model.js","js/app/framework/state/state.model.js","js/app/framework/storage/storage.service.js","js/app/framework/utils/utils.service.js","js/app/api/service.js","js/app/services.js","js/app/directives.js","js/app/directives/appear.directive.js","js/app/directives/ctas.directive.js","js/app/directives/scrollbar.directive.js","js/app/directives/slick.directive.js","js/app/directives/tags.directive.js","js/app/directives/water.directive.js","js/app/filters/filters.js","js/app/controllers/auth.controller.js","js/app/controllers/glossary.controller.js","js/app/controllers/coach.controller.js","js/app/controllers/comment.controller.js","js/app/controllers/contact.controller.js","js/app/controllers/ctas.controller.js","js/app/controllers/form.controller.js","js/app/controllers/newsletter.controller.js","js/app/controllers/root.controller.js","js/app/controllers/user.controller.js","js/app/controllers/swimlist.controller.js","js/app/controllers/training.controller.js"],"names":["angular","module","constant","app","appData","api","prefix","mobileMenuMaxWidth","config","$locationProvider","$modalProvider","html5Mode","when","title","templateUrl","controller","customClass","run","$rootScope","$modal","modals","addModal","service","$http","$q","$timeout","CONFIG","_http","this","http","url","data","method","deferred","defer","split","lang","code","then","response","resolve","e","status","error","message","messageDetail","reject","promise","get","post","put","patch","delete","static","fake","directive","$filter","$parse","require","link","scope","element","attributes","model","type","validate","format","precision","$formatters","push","value","$parsers","unshift","valid","undefined","String","indexOf","Number","toString","$setValidity","min","max","maxsize","_max","POSITIVE_INFINITY","size","accept","name","pop","equal","onFocus","$modelValue","$setViewValue","onBlur","$invalid","doBlur","$on","off","on","restrict","transclude","$templateCache","$compile","uniqueId","template","control","navigator","userAgent","ngModel","source","form","placeholder","key","label","compile","pre","multiple","filter","optionLabel","string","prepend","expression","splitted","length","formatted","shift","forEach","index","join","formatLabel","getOptions","number","onBusy","$parent","onComplete","field","replace","class","validation","minLength","maxLength","rows","options","focus","visible","isRequired","isDisabled","onChange","setValue","pow","NaN","NEGATIVE_INFINITY","Math","$render","getType","getClasses","control-focus","control-success","$valid","control-error","$submitted","$touched","control-empty","$viewValue","getMessages","$error","attrs","modelSetter","fileModel","assign","bind","files","read","file","content","reader","FileReader","onload","result","readAsDataURL","node","nodeRemove","querySelectorAll","nodeAdd","onRemove","getter","numberPicker","setter","onAdd","$scope","$sce","uid","valueTrue","valueFalse","labelTrue","labelFalse","change","required","input","querySelector","isDefined","trust","trustAsHtml","SetSwitch","checked","isActive","console","log","oldvalue","isFunction","$watch","newValue","factory","Event","documentNode","document","documentElement","body","parentNode","scroll","window","pageXOffset","scrollLeft","pageYOffset","scrollTop","view","w","getWidth","h","getHeight","getNode","offset","x","offsetLeft","y","offsetTop","rect","getBoundingClientRect","page","getPage","relative","left","top","absolute","originalEvent","Events","listeners","standardEvents","click","callback","event","apply","down","removeTouchEvents","move","up","resize","touchEvents","removeStandardEvents","prototype","t","touches","changedTouches","pageX","pageY","self","innerWidth","clientWidth","innerHeight","clientHeight","add","standard","touch","getElement","windowElement","listener","remove","$templateRequest","$controller","Utils","compileController","html","contents","$new","extend","controllerAs","children","priority","modal","modalView","provider","routes","path","$get","closeModal","m","i","active","splice","params","current","back","popModal","ONEDAY","Range","today","getToday","first","getFirstDayOfWeek","last","getLastDayOfWeek","setCurrentDay","minDate","showWeeks","showButtonBar","getKey","diff","getDay","date","Date","setDate","getDate","trimDate","set","from","to","setNextDays","days","getTime","setCurrentWeek","isCurrentDay","isCurrentWeek","setLastMonth","getFullYear","getMonth","isLastMonth","setLastQuarter","isLastQuarter","setLastSemester","isLastSemester","setLastYear","isLastYear","open","flags","setHours","setMinutes","setSeconds","ceil","DELAY","State","errors","isReady","idle","isBusy","isError","isErroring","isSuccess","isSuccessing","button","busy","enabled","ready","success","errorMessage","submitClass","successing","errorring","labels","addons","showCompletionState","defaults","erroring","classes","pulse","flash","$window","Cookie","TIMEOUT","_set","expires","setTime","toGMTString","cookie","exists","cookieName","ca","c","charAt","substring","JSON","parse","decodeURIComponent","atob","cache","json","stringify","btoa","encodeURIComponent","interval","elapsed","timeout","checkCookie","setTimeout","LocalStorage","isSupported","supported","localStorage","setItem","removeItem","isLocalStorageSupported","clearTimeout","SessionStorage","sessionStorage","isSessionStorageSupported","getQuerystring","str","location","search","map","n","getClosest","el","selector","matchesFn","parent","some","fn","parentElement","getClosestElement","target","closest","removeFromQuerystring","args","Array","slice","call","arguments","query","history","replaceState","pathname","throttle","wait","context","previous","later","leading","getNow","now","remaining","trailing","WebApi","_service","user","login","loginFb","accessToken","logout","me","detail","register","forgot","verifyEmail","edit","editPassword","wishlist","addToWishlist","id","removeFromWishlist","training","all","latest","exercise","tool","coach","suggested","swimlist","save","publish","chart","comment","contact","action","newsletter","glossary","Account","dataLayer","obj","allenamento","user_type","profile","scrollbar","native","speed","damping","overscrollDamping","thumbMinSize","continuousScrolling","alwaysShowTracks","Scrollbar","init","scrollContent","offsetHeight","height","update","onClick","$","scrollTo","animate","$log","currentOffset","throttled","screen","width","classList","isOpen","toggle","toggler","dropdown","addEventListener","stop","slideToggle","toggleClass","Swiper","direction","effect","loop","autoplay","coverflow","rotate","stretch","depth","modifier","slideShadows","slidesPerView","nextButton","prevButton","offsetWidth","item","addthis","layers","refresh","isAndroid","toLowerCase","isMac","platform","iOS","test","MSStream","isIE","use","OverscrollPlugin","plugins","overscroll","addListener","$root","$broadcast","limit","container","innerHTML","watch","slickHero","onSlick","items","hasClass","slick","find","autoplaySpeed","fade","arrows","dots","infinite","swipeToSlide","$watchCollection","slickTrainings","slidesToShow","slidesToScroll","responsive","breakpoint","settings","nodes","doSlick","slickFade","slickHowto","vertical","verticalSwiping","onAfterChange","currentSlide","nextSlide","_onWheelSlick","deltaY","onWheel","flag","stopImmediatePropagation","preventDefault","tags","poi","pois","category","getPoiDirections","href","mapUrl","fill","Object","defineProperty","TypeError","O","len","relativeStart","k","end","relativeEnd","final","mouse","Float32Array","trails","publics","uniforms","glsl","func","u","gl","getUniformLocation","program","concat","clientX","clientY","tx","v","friction","requestAnimationFrame","canvas","createElement","WebGLRenderingContext","getContext","failIfMajorPerformanceCaveat","debugInfo","getExtension","vendor","getParameter","UNMASKED_VENDOR_WEBGL","renderer","UNMASKED_RENDERER_WEBGL","has","WebGLCapabilities","TrailService","ua","msie","parseInt","rv","edge","detectIE","o","fragment","getElementById","vertex","onResize","GlslCanvas","warnings","l","li","encodeURI","command","trim","load","setUniform","mix","forceRender","paused","timePause","timePrev","timeLoad","play","pause","style","array","filters","prop","pool","results","_key","elem","area","ids","duration","hours","getHours","minutes","getMinutes","price","color","colors","Upload","FB","gtm","Wishlist","state","stateLogin","stateSignUp","stateForgot","stateFacebook","loc","locale","setPsw","_targets","birthDate","year","month","_","day","months","years","UTC","getRegisterData","addTarget","keys","_tmp","_keys","targets","onPostLogin","setUser","pages","home","onPreSignUp","getUser","getEditData","isCoach","onUploadFileSelected","newFiles","isArray","avatarBase64","resized","dataUrl","signin","authResponse","emailNotFound","email","tokenEncoded","password","deleteAccount","Booking","getCart","viewbag","forgotting","storage","getShortName","firstName","substr","lastName","isLogged","FacebookService","getFacebookMe","facebook","fields","getPictureMe","onFacebookStatus","d","s","js","fjs","fbAsyncInit","appId","FACEBOOK_APP_ID","xfbml","version","getElementsByTagName","src","insertBefore","sources","toggleInitial","initial","sort","a","b","toUpperCase","letters","description","charts","activeChart","sorting","paging","coaches","_searchTerm","setCharts","total","mychart","setMe","onChartTypeChange","setFilter","same","removeFilter","currentMonthChart","ranking","rating","rankingByMonths","getMonthKey","range","setMonth","toISOString","list","currentMonth","previousMonth","setQuery","Comments","comments","formOpen","parentId","formId","doLogin","commentNew","currentPage","text","pageId","submit","birthdate","HTML","ctas","getMedia","media","photos","mode","tag","tops","$$element","getAttribute","sub","$$parentForm","$setSubmitted","$name","local","session","messages","debug","localMessages","cookies","sessionMessages","opening","openUser","onDismissLocalMessage","p","onGetLocalMessage","onDismissSessionMessage","onGetSessionMessage","openCart","doLogout","toggleWishlist","printTraining","account","keepAlive","Types","DOCUMENT","EVENT","stateUser","purchases","billing","countries","provinces","paymentTypes","offers","openItem","topservicedetail","hasBillingInfo","customerCode","customerPsw","clear","clearWishlist","$location","Trainings","Enums","levels","durations","tools","enablePublish","trainings","lookup","timeRange","initFilterData","listAllLanguages","language","newUrl","oldUrl","newLocation","oldLocation","hash","fromJson","escape","ex","Set","types","dryland","warmUp","WARM_UP","mainSet","MAIN","after","coolDown","COOL_DOWN","sets","updateData","toggleSet","onToggle","hasParentClass","getSetTypeName","setTypes","DRYLAND","PRE","AFTER","statePublish","removeTool","hasMinimumInfo","isComplete","addSetType","updateSets","removeSet","icon","picture","alreadyUploaded","pictures","uploadPicture","create","gtmPush","base64","abstract","seconds","distances","show","repetitions","r","TrainingDrill","TrainingSet","mandatory","drills","statics","SAVED","PUBLISHINGREQUEST","APPROVED","addDrill","removeDrill","onSelectDrill"],"mappings":"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","file":"js\\app.min.js","sourcesContent":["/* global angular */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n var app = angular.module('app', ['ngSanitize', 'ngMessages', 'ui.bootstrap', 'ngFileUpload', 'jsonFormatter']);\r\n \r\n}());","/* global angular */\r\n\r\n(function () {\r\n \"use strict\";\r\n\r\n var app = angular\r\n .module('app')\r\n\r\n .constant('CONFIG', {\r\n app: appData,\r\n api: { prefix: '/api' },\r\n 'mobileMenuMaxWidth': 991\r\n })\r\n\r\n /*\r\n .config(['$httpProvider', function ($httpProvider) {\r\n $httpProvider.defaults.withCredentials = true;\r\n }]);\r\n */\r\n\r\n}());","/* global angular */\r\n\r\n(function () {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.config(['$locationProvider', '$modalProvider', function ($locationProvider, $modalProvider) {\r\n\r\n // HTML5 MODE url writing method (false: #/anchor/use, true: /html5/url/use)\r\n $locationProvider.html5Mode(false);\r\n //$locationProvider.hashPrefix(''); /* Back to default: fix ancore sulla stessa pagina */\r\n\r\n $modalProvider\r\n .when('loginModal', {\r\n title: 'Login modal',\r\n templateUrl: 'partials/login/modal',\r\n controller: 'AuthCtrl',\r\n customClass: 'modal-sm',\r\n }).when('userModal', {\r\n title: 'User modal',\r\n templateUrl: 'partials/user/modal',\r\n controller: 'UserCtrl',\r\n });\r\n\r\n }]);\r\n\r\n}());","/* global angular */\r\n\r\n(function () {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.run(['$rootScope', '$modal', function ($rootScope, $modal) {\r\n \r\n $rootScope.modals = $modal.modals;\r\n $rootScope.addModal = $modal.addModal;\r\n \r\n }]);\r\n\r\n}());","/* global angular */\r\n\r\n(function () {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.service('WebApi', ['$http', '$q', '$timeout', 'CONFIG', function ($http, $q, $timeout, CONFIG) {\r\n\r\n /* http methods */\r\n var _http = this.http = function(url, data, method) {\r\n var deferred = $q.defer();\r\n url = url;\r\n url += (url.split('?')[1] ? '&' : '?') + 'lang=' + CONFIG.app.lang.code;\r\n data = data || null;\r\n method = method || 'get'; \r\n $http[method](url, data).then(function (response) {\r\n deferred.resolve(response);\r\n }, function (e, status) {\r\n var error = e && e.data ? {\r\n message: e.data.message,\r\n messageDetail: e.data.messageDetail,\r\n status: e.status,\r\n } : e;\r\n deferred.reject(error);\r\n });\r\n return deferred.promise;\r\n }\r\n\r\n var _get = this.get = function (url) {\r\n return _http(CONFIG.api.prefix + url, null, 'get');\r\n };\r\n\r\n var _post = this.post = function (url, data) {\r\n return _http(CONFIG.api.prefix + url, data, 'post');\r\n };\r\n\r\n var _put = this.put = function (url, data) {\r\n return _http(CONFIG.api.prefix + url, data, 'put');\r\n };\r\n\r\n var _patch = this.patch = function (url, data) {\r\n return _http(CONFIG.api.prefix + url, data, 'patch');\r\n };\r\n\r\n var _delete = this.delete = function (url) {\r\n return _http(CONFIG.api.prefix + url, null, 'delete');\r\n };\r\n\r\n var _static = this.static = function (url) {\r\n return _http(url, null, 'get');\r\n };\r\n\r\n var _fake = this.fake = function (data) {\r\n var deferred = $q.defer();\r\n $timeout(function () {\r\n deferred.resolve({ data: data });\r\n }, 1000);\r\n return deferred.promise;\r\n };\r\n\r\n }]);\r\n\r\n}());","/* global angular */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.directive('validate', ['$filter', '$parse', function($filter,$parse) {\r\n return {\r\n require: 'ngModel',\r\n link: function(scope, element, attributes, model) {\r\n var type = attributes.validate;\r\n var format = attributes.format || '';\r\n var precision = attributes.precision || 2;\r\n var focus = false;\r\n // console.log('validate', type);\r\n switch (type) {\r\n case 'date':\r\n case 'datetime':\r\n case 'datetime-local':\r\n model.$formatters.push(function(value) {\r\n if (value) {\r\n return $filter('date')(value, format);\r\n } else {\r\n return null;\r\n }\r\n });\r\n break; \r\n case 'number':\r\n model.$parsers.unshift(function(value) {\r\n var valid = false;\r\n if (value !== undefined && value !== \"\") {\r\n valid = String(value).indexOf(Number(value).toString()) !== -1; // isFinite(value); // \r\n value = Number(value);\r\n model.$setValidity('number', valid);\r\n if (valid) {\r\n model.$setValidity('positive', value >= 0.01);\r\n if (attributes.min !== undefined) {\r\n model.$setValidity('range', value >= Number(attributes.min));\r\n }\r\n if (attributes.max !== undefined) {\r\n model.$setValidity('range', value <= Number(attributes.max));\r\n }\r\n }\r\n } else {\r\n valid = true;\r\n value = Number(value);\r\n model.$setValidity('number', true);\r\n model.$setValidity('positive', true);\r\n if (attributes.min !== undefined) {\r\n model.$setValidity('range', true);\r\n }\r\n if (attributes.max !== undefined) {\r\n model.$setValidity('range', true);\r\n }\r\n }\r\n return value;\r\n });\r\n model.$formatters.push(function(value) {\r\n if (value || value === 0) {\r\n return $filter('number')(value, precision) + ' ' + format;\r\n } else {\r\n return null;\r\n }\r\n });\r\n break;\r\n case 'anynumber':\r\n model.$parsers.unshift(function(value) {\r\n var valid = false;\r\n if (value !== undefined && value !== \"\") {\r\n valid = String(value).indexOf(Number(value).toString()) !== -1; // isFinite(value); // \r\n value = Number(value);\r\n model.$setValidity('number', valid);\r\n if (valid) {\r\n if (attributes.min !== undefined) {\r\n model.$setValidity('range', value >= Number(attributes.min));\r\n }\r\n if (attributes.max !== undefined) {\r\n model.$setValidity('range', value <= Number(attributes.max));\r\n }\r\n }\r\n } else {\r\n valid = true;\r\n value = Number(value);\r\n model.$setValidity('number', true);\r\n if (attributes.min !== undefined) {\r\n model.$setValidity('range', true);\r\n }\r\n if (attributes.max !== undefined) {\r\n model.$setValidity('range', true);\r\n }\r\n }\r\n return value;\r\n });\r\n model.$formatters.push(function(value) {\r\n if (value || value === 0) {\r\n return $filter('number')(value, precision) + ' ' + format;\r\n } else {\r\n return null;\r\n }\r\n });\r\n break;\r\n case 'file': \r\n model.$formatters.unshift(function (value) { \r\n if (value !== undefined) {\r\n if (attributes.maxsize !== undefined) { \r\n var _max = Number.POSITIVE_INFINITY;\r\n try {\r\n _max = Number(attributes.maxsize)\r\n } catch (e) {}\r\n model.$setValidity('maxsize', value.size/1024 < _max);\r\n }\r\n if (attributes.accept !== undefined && attributes.accept !== \"\") { \r\n model.$setValidity('accept', attributes.accept.split(',').indexOf(value.name.split('.').pop()) > -1);\r\n } \r\n } else { \r\n model.$setValidity('maxsize', true);\r\n model.$setValidity('accept', true);\r\n } \r\n return value; \r\n });\r\n break;\r\n case 'password':\r\n model.$formatters.unshift(function (value) {\r\n if (value != undefined) {\r\n //equal to\r\n if (attributes.equal != undefined && attributes.equal !== \"\") { \r\n model.$setValidity('match', value == $parse(attributes.equal)(scope));\r\n } else\r\n model.$setValidity('match', true);\r\n }\r\n return value;\r\n });\r\n break;\r\n }\r\n\r\n function onFocus() {\r\n focus = true;\r\n if (format) {\r\n element[0].value = model.$modelValue || null;\r\n if (!model.$modelValue) {\r\n model.$setViewValue(null);\r\n }\r\n }\r\n }\r\n\r\n function doBlur() {\r\n if (format && !model.$invalid) {\r\n switch (type) {\r\n case 'date':\r\n case 'datetime':\r\n case 'datetime-local':\r\n element[0].value = model.$modelValue ? $filter('date')(model.$modelValue, format) : ' ';\r\n break;\r\n default:\r\n element[0].value = (model.$modelValue || model.$modelValue === 0) ? $filter('number')(model.$modelValue, precision) + ' ' + format : ' ';\r\n break;\r\n }\r\n }\r\n }\r\n\r\n function onBlur() {\r\n focus = false;\r\n doBlur();\r\n }\r\n\r\n function addListeners() {\r\n element.on('focus', onFocus);\r\n element.on('blur', onBlur);\r\n }\r\n\r\n function removeListeners() {\r\n element.off('focus', onFocus);\r\n element.off('blur', onBlur);\r\n }\r\n scope.$on('$destroy', function() {\r\n removeListeners();\r\n });\r\n addListeners();\r\n }\r\n };\r\n }]);\r\n\r\n}());","/* global angular */\r\n\r\n(function () {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.directive('controlMessages', [function () {\r\n return {\r\n restrict: 'E',\r\n templateUrl: 'partials/forms/control-messages',\r\n transclude: {\r\n 'message': '?messageItems',\r\n },\r\n link: function (scope, element, attributes, model) {}\r\n };\r\n }]);\r\n\r\n app.directive('control', ['$http', '$templateCache', '$compile', '$parse', function ($http, $templateCache, $compile, $parse) {\r\n function formatLabel(string, prepend, expression) {\r\n string = string || '';\r\n prepend = prepend || '';\r\n var splitted = string.split(',');\r\n if (splitted.length > 1) {\r\n var formatted = splitted.shift();\r\n angular.forEach(splitted, function (value, index) {\r\n if (expression) {\r\n formatted = formatted.split('{' + index + '}').join('\\' + ' + prepend + value + ' + \\'');\r\n } else {\r\n formatted = formatted.split('{' + index + '}').join(prepend + value);\r\n }\r\n });\r\n if (expression) {\r\n return '\\'' + formatted + '\\'';\r\n } else {\r\n return formatted;\r\n }\r\n } else {\r\n return prepend + string;\r\n }\r\n }\r\n var uniqueId = 0;\r\n return {\r\n restrict: 'A',\r\n templateUrl: function (element, attributes) {\r\n var template = 'partials/forms/control';\r\n switch (attributes.control) {\r\n case 'textarea':\r\n template = 'partials/forms/control-textarea';\r\n break;\r\n case 'select':\r\n template = 'partials/forms/control-select';\r\n break;\r\n case 'checkbox':\r\n template = 'partials/forms/control-checkbox';\r\n break;\r\n case 'radio':\r\n template = 'partials/forms/control-radio';\r\n break;\r\n case 'switcher':\r\n template = 'partials/forms/control-switcher';\r\n break;\r\n case 'date':\r\n if (navigator.userAgent.indexOf('Firefox') !== -1) {\r\n template = 'partials/forms/control-date-ff';\r\n } else {\r\n template = 'partials/forms/control-date';\r\n }\r\n break;\r\n case 'file':\r\n template = 'partials/forms/control-file';\r\n break;\r\n case 'numberpicker':\r\n template = 'partials/forms/control-numberpicker';\r\n break;\r\n }\r\n return template;\r\n },\r\n scope: {\r\n ngModel: '=',\r\n source: '=?',\r\n form: '@',\r\n title: '@',\r\n placeholder: '@',\r\n key: '@?',\r\n label: '@?',\r\n },\r\n require: 'ngModel',\r\n transclude: true,\r\n /*\r\n link: function(scope, element, attributes, model) {\r\n },\r\n */\r\n compile: function (element, attributes) {\r\n return {\r\n pre: function (scope, element, attributes, model) {\r\n var label = scope.label = (scope.label ? scope.label : 'name');\r\n var key = scope.key = (scope.key ? scope.key : 'id');\r\n if (attributes.control === 'select') {\r\n scope.multiple = (attributes.multiple != null ? true : false);\r\n var filter = (attributes.filter ? ' | ' + attributes.filter : '');\r\n var optionLabel = formatLabel(label, 'item.', true);\r\n scope.getOptions = function () {\r\n return attributes.number ?\r\n 'item.' + key + ' as ' + optionLabel + ' disable when item.disabled for item in source ' + filter :\r\n optionLabel + ' disable when item.disabled for item in source ' + filter + ' track by item.' + key;\r\n }\r\n }\r\n if (attributes.control === 'file') {\r\n scope.accept = attributes.accept || null;\r\n scope.maxsize = attributes.maxsize || null;\r\n scope.onBusy = function (model) {\r\n $parse(attributes.onBusy)(scope.$parent);\r\n };\r\n scope.onComplete = function (model) {\r\n $parse(attributes.onComplete)(scope.$parent);\r\n };\r\n }\r\n var type = scope.type = attributes.control;\r\n var form = scope.form = scope.form || 'form';\r\n var title = scope.title = scope.title || 'untitled';\r\n var placeholder = scope.placeholder = scope.placeholder || title;\r\n var field = scope.field = title.replace(/[^0-9a-zA-Z]/g, \"\").split(' ').join('') + (++uniqueId);\r\n scope.uniqueId = uniqueId;\r\n scope.class = attributes.class || null;\r\n scope.validation = attributes.validation || attributes.control;\r\n scope.format = attributes.format || null;\r\n scope.precision = attributes.precision || null;\r\n scope.minLength = attributes.minLength || 0;\r\n scope.maxLength = attributes.maxLength || Number.POSITIVE_INFINITY;\r\n scope.min = attributes.min || null;\r\n scope.max = attributes.max || null;\r\n scope.rows = attributes.rows || null;\r\n scope.options = $parse(attributes.options)(scope) || {};\r\n scope.focus = false;\r\n scope.visible = false;\r\n scope.isRequired = function () {\r\n return (attributes.isRequired && $parse(attributes.isRequired)(scope.$parent));\r\n };\r\n scope.isDisabled = function () {\r\n return (attributes.isDisabled && $parse(attributes.isDisabled)(scope.$parent));\r\n };\r\n scope.onChange = function () {\r\n // console.log('control.onChange', attributes.onChange);\r\n $parse(attributes.onChange)(scope.$parent);\r\n };\r\n // model setter eg. numberpicker\r\n scope.setValue = function (pow) {\r\n var value = model.$modelValue;\r\n var min = attributes.min ? ((Number($parse(attributes.min)(scope.$parent)) !== NaN) ? Number($parse(attributes.min)(scope.$parent)) : Number.NEGATIVE_INFINITY) : Number.NEGATIVE_INFINITY;\r\n var max = attributes.max ? ((Number($parse(attributes.max)(scope.$parent)) !== NaN) ? Number($parse(attributes.max)(scope.$parent)) : Number.POSITIVE_INFINITY) : Number.POSITIVE_INFINITY;\r\n value += pow;\r\n value = Math.max(min, Math.min(max, value));\r\n if (value !== model.$modelValue) {\r\n model.$setViewValue(value);\r\n model.$render();\r\n scope.onChange();\r\n }\r\n };\r\n scope.getType = function () {\r\n var type = 'text';\r\n switch (attributes.control) {\r\n case 'password':\r\n // var form = $parse(scope.form)(scope.$parent);\r\n // var field = $parse(scope.form + '.' + scope.field)(scope.$parent);\r\n type = scope.visible ? 'text' : 'password';\r\n break;\r\n default:\r\n type = attributes.control;\r\n }\r\n // console.log('control.getType', type);\r\n return type;\r\n };\r\n scope.getClasses = function () {\r\n var form = $parse(scope.form)(scope.$parent);\r\n var field = $parse(scope.form + '.' + scope.field)(scope.$parent);\r\n return {\r\n 'control-focus': scope.focus,\r\n 'control-success': field.$valid,\r\n 'control-error': field.$invalid && (form.$submitted || field.$touched),\r\n 'control-empty': !field.$viewValue\r\n };\r\n };\r\n scope.getMessages = function () {\r\n var form = $parse(scope.form)(scope.$parent);\r\n var field = $parse(scope.form + '.' + scope.field)(scope.$parent);\r\n return (form.$submitted || field.$touched) && field.$error;\r\n };\r\n },\r\n // post: function (scope, element, attributes) { }\r\n };\r\n }\r\n /*\r\n compile: function(element, attributes) {\r\n element.removeAttr('my-dir'); \r\n element.attr('ng-hide', 'true');\r\n return function(scope) {\r\n $compile(element)(scope);\r\n };\r\n },\r\n */\r\n };\r\n }]);\r\n\r\n app.directive('fileModel', [\r\n '$parse', '$timeout',\r\n function ($parse, $timeout) {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attrs) {\r\n var model = $parse(attrs.fileModel);\r\n var modelSetter = model.assign;\r\n element.bind('change', function () {\r\n if (element[0].files[0] != null) {\r\n $timeout(function () {\r\n $parse(attrs.onBusy)(scope);\r\n modelSetter(scope, element[0].files[0]);\r\n read(element[0].files[0]);\r\n });\r\n }\r\n });\r\n\r\n var read = function (file) {\r\n var content = $parse(attrs.fileModel + '.content');\r\n var reader = new FileReader();\r\n reader.onload = function () {\r\n $timeout(function () {\r\n content.assign(scope, reader.result);\r\n $parse(attrs.onComplete)(scope);\r\n })\r\n }\r\n reader.readAsDataURL(file);\r\n //reader.readAsText(file);\r\n }\r\n }\r\n };\r\n }\r\n ]);\r\n\r\n app.directive('numberPicker', ['$parse', '$timeout', function ($parse, $timeout) {\r\n return {\r\n restrict: 'A',\r\n template: '
' +\r\n ' ' +\r\n '
' +\r\n ' ' +\r\n '
',\r\n replace: true,\r\n transclude: true,\r\n link: function (scope, element, attributes, model) {\r\n var node = element[0];\r\n var nodeRemove = node.querySelectorAll('.input-group-btn > .btn')[0];\r\n var nodeAdd = node.querySelectorAll('.input-group-btn > .btn')[1];\r\n\r\n function onRemove(e) {\r\n var min = $parse(attributes.min)(scope);\r\n var getter = $parse(attributes.numberPicker);\r\n var setter = getter.assign;\r\n $timeout(function () {\r\n setter(scope, Math.max(min, getter(scope) - 1));\r\n });\r\n // console.log('numberPicker.onRemove', min);\r\n }\r\n\r\n function onAdd(e) {\r\n var max = $parse(attributes.max)(scope);\r\n var getter = $parse(attributes.numberPicker);\r\n var setter = getter.assign;\r\n $timeout(function () {\r\n setter(scope, Math.min(max, getter(scope) + 1));\r\n });\r\n // console.log('numberPicker.onAdd', max);\r\n }\r\n\r\n function addListeners() {\r\n angular.element(nodeRemove).on('touchstart mousedown', onRemove);\r\n angular.element(nodeAdd).on('touchstart mousedown', onAdd);\r\n }\r\n\r\n function removeListeners() {\r\n angular.element(nodeRemove).off('touchstart mousedown', onRemove);\r\n angular.element(nodeAdd).off('touchstart mousedown', onAdd);\r\n }\r\n scope.$on('$destroy', function () {\r\n removeListeners();\r\n });\r\n addListeners();\r\n }\r\n };\r\n }]);\r\n\r\n app.controller('ValueCtrl', ['$scope', function ($scope) {\r\n /*\r\n $scope.init = function (data) {\r\n $scope.value = data;\r\n };\r\n */\r\n }]);\r\n\r\n}());","/* global angular */\r\n\r\n(function () {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.directive('switcher', ['$timeout', '$sce', function ($timeout, $sce) {\r\n var uid = 0;\r\n return {\r\n restrict: 'EA',\r\n require: 'ngModel',\r\n scope: {\r\n ngModel: '=',\r\n valueTrue: '=?',\r\n valueFalse: '=?',\r\n labelTrue: '@?',\r\n labelFalse: '@?',\r\n change: '=?ngChange',\r\n isDisabled: '=?ngDisabled',\r\n },\r\n template: function (element, attributes) {\r\n var name = attributes.name || 'switcher' + (++uid);\r\n return '
' +\r\n ' ' +\r\n ' ' +\r\n ' ' +\r\n '
';\r\n },\r\n link: function (scope, element, attributes, model) {\r\n var input = element[0].querySelector('input');\r\n var properties = {\r\n valueTrue: true,\r\n valueFalse: false,\r\n isDisabled: false,\r\n };\r\n var attrs = {\r\n labelTrue: 'On',\r\n labelFalse: 'Off',\r\n };\r\n angular.forEach(properties, function (value, key) {\r\n if (!angular.isDefined(scope[key])) {\r\n scope[key] = value;\r\n }\r\n });\r\n angular.forEach(attrs, function (value, key) {\r\n if (!angular.isDefined(scope[key])) {\r\n attributes[key] = value;\r\n }\r\n });\r\n scope.trust = function (value) {\r\n return $sce.trustAsHtml(value);\r\n };\r\n scope.SetSwitch = function (value) {\r\n // console.log('switcher.set', value);\r\n if (scope.isDisabled || input.checked === value) {\r\n return;\r\n }\r\n scope.isActive = input.checked = value;\r\n scope.onChange();\r\n };\r\n scope.onChange = function () {\r\n console.log('switcher.onChange', input.checked);\r\n var oldvalue = model.$modelValue;\r\n var value = input.checked ? scope.valueTrue : scope.valueFalse; // scope.isActive\r\n\r\n console.log(scope);\r\n\r\n model.$setViewValue(value);\r\n model.$render();\r\n console.log('model', model, model.$modelValue, value);\r\n if (angular.isFunction(scope.change)) {\r\n $timeout(function () {\r\n scope.change(value, oldvalue);\r\n });\r\n }\r\n };\r\n scope.$watch('ngModel', function (newValue) {\r\n scope.isActive = (newValue === scope.valueTrue);\r\n if (input.checked !== scope.isActive) {\r\n input.checked = scope.isActive;\r\n }\r\n });\r\n },\r\n };\r\n }]);\r\n}());","/* global angular */\n\n(function() {\n \"use strict\";\n\n var app = angular.module('app');\n\n app.factory('Events', [function() {\n\n function Event(e, element) {\n var documentNode = (document.documentElement || document.body.parentNode || document.body);\n var scroll = {\n x: window.pageXOffset || documentNode.scrollLeft,\n y: window.pageYOffset || documentNode.scrollTop\n };\n if (e.type === 'resize') {\n var view = {\n w: this.getWidth(),\n h: this.getHeight(),\n };\n this.view = view;\n }\n var node = getNode(element);\n var offset = {\n x: node.offsetLeft,\n y: node.offsetTop,\n };\n var rect = node.getBoundingClientRect();\n var page = this.getPage(e);\n if (page) {\n var relative = {\n x: page.x - scroll.x - rect.left,\n y: page.y - scroll.y - rect.top,\n };\n var absolute = {\n x: page.x - scroll.x,\n y: page.y - scroll.y,\n };\n this.relative = relative;\n this.absolute = absolute;\n }\n if (this.type === 'resize') {\n console.log(this.type);\n }\n this.originalEvent = e;\n this.element = element;\n this.node = node;\n this.offset = offset;\n this.rect = rect;\n // console.log('Event', 'page', page, 'scroll', scroll, 'offset', offset, 'rect', rect, 'relative', relative, 'absolute', absolute);\n // console.log('scroll.y', scroll.y, 'page.y', page.y, 'offset.y', offset.y, 'rect.top', rect.top);\n }\n Event.prototype = {\n getPage: getPage,\n getWidth: getWidth,\n getHeight: getHeight,\n };\n\n function getWidth() {\n if (self.innerWidth) {\n return self.innerWidth;\n }\n if (document.documentElement && document.documentElement.clientWidth) {\n return document.documentElement.clientWidth;\n }\n if (document.body) {\n return document.body.clientWidth;\n }\n }\n\n function getHeight() {\n if (self.innerHeight) {\n return self.innerHeight;\n }\n if (document.documentElement && document.documentElement.clientHeight) {\n return document.documentElement.clientHeight;\n }\n if (document.body) {\n return document.body.clientHeight;\n }\n }\n\n function getPage(e) {\n var standardEvents = ['click', 'mousedown', 'mouseup', 'mousemove', 'mouseover', 'mouseout', 'mouseenter', 'mouseleave', 'contextmenu'];\n var touchEvents = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n var page = null;\n if (touchEvents.indexOf(e.type) !== -1) {\n var t = null;\n var event = e.originalEvent ? e.originalEvent : e;\n var touches = event.touches.length ? event.touches : event.changedTouches;\n if (touches && touches.length) {\n t = touches[0];\n }\n if (t) {\n page = {\n x: t.pageX,\n y: t.pageY,\n };\n }\n } else if (standardEvents.indexOf(e.type) !== -1) {\n page = {\n x: e.pageX,\n y: e.pageY,\n };\n }\n this.type = e.type;\n return page;\n }\n\n function Events(element) {\n this.element = element;\n this.listeners = {};\n this.standardEvents = {\n click: {\n key: 'click',\n callback: onClick\n },\n down: {\n key: 'mousedown',\n callback: onMouseDown\n },\n move: {\n key: 'mousemove',\n callback: onMouseMove\n },\n up: {\n key: 'mouseup',\n callback: onMouseUp\n },\n resize: {\n key: 'resize',\n callback: onResize\n },\n };\n this.touchEvents = {\n down: {\n key: 'touchstart',\n callback: onTouchStart\n },\n move: {\n key: 'touchmove',\n callback: onTouchMove\n },\n up: {\n key: 'touchend',\n callback: onTouchEnd\n },\n };\n\n var scope = this;\n\n function onClick(e) {\n // console.log('onClick', e, scope);\n var event = new Event(e, scope.element);\n scope.listeners.click.apply(this, [event]);\n }\n\n function onMouseDown(e) {\n // console.log('onMouseDown', e);\n var event = new Event(e, scope.element);\n scope.listeners.down.apply(this, [event]);\n scope.removeTouchEvents();\n }\n\n function onMouseMove(e) {\n // console.log('onMouseMove', e);\n var event = new Event(e, scope.element);\n scope.listeners.move.apply(this, [event]);\n }\n\n function onMouseUp(e) {\n // console.log('onMouseUp', e);\n var event = new Event(e, scope.element);\n scope.listeners.up.apply(this, [event]);\n }\n\n function onResize(e) {\n console.log('onResize', e);\n var event = new Event(e, scope.element);\n scope.listeners.resize.apply(this, [event]);\n }\n\n function onTouchStart(e) {\n // console.log('onTouchStart', e);\n var event = new Event(e, scope.element);\n scope.listeners.down.apply(this, [event]);\n scope.removeStandardEvents();\n }\n\n function onTouchMove(e) {\n // console.log('onTouchMove', e);\n var event = new Event(e, scope.element);\n scope.listeners.move.apply(this, [event]);\n }\n\n function onTouchEnd(e) {\n // console.log('onTouchEnd', e);\n var event = new Event(e, scope.element);\n scope.listeners.up.apply(this, [event]);\n }\n }\n Events.prototype = {\n add: onAdd,\n remove: onRemove,\n removeStandardEvents: removeStandardEvents,\n removeTouchEvents: removeTouchEvents,\n };\n return Events;\n\n function getNode(element) {\n return element.length ? element[0] : element; // (element.length && (element[0] instanceOf Node || element[0] instanceOf HTMLElement)) ? element[0] : element;\n }\n\n function getElement(element) {\n return element.length ? element : angular.element(element); // (element.length && (element[0] instanceOf Node || element[0] instanceOf HTMLElement)) ? element : angular.element(element);\n }\n\n function onAdd(listeners) {\n var scope = this,\n standard = this.standardEvents,\n touch = this.touchEvents;\n var element = getElement(this.element),\n windowElement = angular.element(window);\n\n angular.forEach(listeners, function(callback, key) {\n if (scope.listeners[key]) {\n var listener = {};\n listener[key] = scope.listeners[key];\n onRemove(listener);\n }\n scope.listeners[key] = callback;\n if (standard[key]) {\n if (key === 'resize') {\n windowElement.on(standard[key].key, standard[key].callback);\n } else {\n element.on(standard[key].key, standard[key].callback);\n }\n }\n if (touch[key]) {\n element.on(touch[key].key, touch[key].callback);\n }\n });\n return scope;\n }\n\n function onRemove(listeners) {\n var scope = this,\n standard = this.standardEvents,\n touch = this.touchEvents;\n var element = getElement(this.element),\n windowElement = angular.element(window);\n angular.forEach(listeners, function(callback, key) {\n if (standard[key]) {\n if (key === 'resize') {\n windowElement.off(standard[key].key, standard[key].callback);\n } else {\n element.off(standard[key].key, standard[key].callback);\n }\n }\n if (touch[key]) {\n element.off(touch[key].key, touch[key].callback);\n }\n scope.listeners[key] = null;\n });\n return scope;\n }\n\n function removeStandardEvents() {\n var scope = this,\n standard = scope.standardEvents,\n touch = scope.touchEvents;\n var element = getElement(scope.element);\n element.off('mousedown', standard.down.callback);\n element.off('mousemove', standard.move.callback);\n element.off('mouseup', standard.up.callback);\n }\n\n function removeTouchEvents() {\n var scope = this,\n standard = scope.standardEvents,\n touch = scope.touchEvents;\n var element = getElement(scope.element);\n element.off('touchstart', touch.down.callback);\n element.off('touchmove', touch.move.callback);\n element.off('touchend', touch.up.callback);\n }\n\n }]);\n\n}());","/* global angular */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.directive('modalView', ['$parse', '$templateRequest', '$compile', '$controller', 'Utils', function ($parse, $templateRequest, $compile, $controller, Utils) {\r\n var defaultModal = '
' +\r\n ' ' +\r\n '

' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n ' ';\r\n '
';\r\n\r\n function compileController(scope, element, html, data) {\r\n // console.log('modalView.compileController', element);\r\n element.html(html);\r\n var link = $compile(element.contents());\r\n if (data.controller) {\r\n var $scope = scope.$new();\r\n angular.extend($scope, data);\r\n var controller = $controller(data.controller, { $scope: $scope });\r\n if (data.controllerAs) {\r\n scope[data.controllerAs] = controller;\r\n }\r\n element.data('$ngControllerController', controller);\r\n element.children().data('$ngControllerController', controller);\r\n scope = $scope;\r\n }\r\n link(scope);\r\n }\r\n\r\n return {\r\n restrict: 'A',\r\n priority: -400,\r\n link: function (scope, element, attributes, model) {\r\n var modal = $parse(attributes.modalView);\r\n modal = modal(scope);\r\n if (modal.templateUrl) {\r\n $templateRequest(modal.templateUrl).then(function (html) {\r\n compileController(scope, element, html, modal);\r\n });\r\n } else {\r\n compileController(scope, element, defaultModal, modal);\r\n }\r\n /*\r\n // window.scrollTo(0, element[0].offsetTop - 100);\r\n function onClick(e) {\r\n var closest = Utils.getClosestElement(e.target, element[0]);\r\n if (closest === null) {\r\n modal.reject(null);\r\n }\r\n // console.log('onClick', closest);\r\n }\r\n function addListeners() {\r\n angular.element(window).on('click', onClick);\r\n }\r\n function removeListeners() {\r\n angular.element(window).off('click', onClick);\r\n }\r\n scope.$on('destroy', function () {\r\n removeListeners();\r\n });\r\n setTimeout(function () {\r\n addListeners();\r\n }, 500);\r\n */\r\n }\r\n };\r\n }]);\r\n \r\n}());","/* global angular */\r\n\r\n(function () {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.provider('$modal', [function $modalProvider() {\r\n var modals = [];\r\n\r\n var routes = {};\r\n \r\n function when(path, modal) {\r\n routes[path] = modal;\r\n return this;\r\n /*\r\n //copy original modal object to preserve params inherited from proto chain\r\n var modalCopy = shallowCopy(modal);\r\n if (angular.isUndefined(modalCopy.reloadOnSearch)) {\r\n modalCopy.reloadOnSearch = true;\r\n }\r\n if (angular.isUndefined(modalCopy.caseInsensitiveMatch)) {\r\n modalCopy.caseInsensitiveMatch = this.caseInsensitiveMatch;\r\n }\r\n routes[path] = angular.extend(\r\n modalCopy,\r\n path && pathRegExp(path, modalCopy)\r\n );\r\n // create redirection for trailing slashes\r\n if (path) {\r\n var redirectPath = (path[path.length - 1] === '/')\r\n ? path.substr(0, path.length - 1)\r\n : path + '/';\r\n\r\n routes[redirectPath] = angular.extend(\r\n { redirectTo: path },\r\n pathRegExp(redirectPath, modalCopy)\r\n );\r\n }\r\n return this;\r\n */\r\n }\r\n \r\n this.modals = modals;\r\n this.routes = routes;\r\n this.when = when;\r\n // this.addModal = addModal;\r\n // this.closeModal = closeModal;\r\n\r\n this.$get = ['$q', '$timeout', function modalFactory($q, $timeout) {\r\n\r\n function popModal(modal) {\r\n // console.log('modalProvider.popModal', modal); \r\n var index = -1;\r\n angular.forEach(modals, function (m, i) {\r\n if (m === modal) {\r\n index = i;\r\n }\r\n });\r\n if (index !== -1) {\r\n $timeout(function () {\r\n modal.active = false;\r\n modals.splice(index, 1);\r\n if (modals.length) {\r\n modals[modals.length - 1].active = true;\r\n }\r\n });\r\n }\r\n }\r\n\r\n function closeModal(modal) {\r\n // console.log('modalProvider.closeModal', modal); \r\n var index = -1;\r\n angular.forEach(modals, function (m, i) {\r\n if (m === modal) {\r\n index = i;\r\n }\r\n });\r\n if (index !== -1) {\r\n modal.active = false;\r\n $timeout(function () {\r\n while (modals.length) {\r\n modals.splice(modals.length - 1, 1);\r\n }\r\n }, 500);\r\n }\r\n }\r\n\r\n function addModal(path, params) {\r\n // console.log('modalProvider.addModal', path, params);\r\n var deferred = $q.defer();\r\n params = params || null;\r\n var modal = {\r\n title: 'Untitled',\r\n controller: null,\r\n templateUrl: null,\r\n params: params,\r\n };\r\n var current = routes[path];\r\n if (current) {\r\n angular.extend(modal, current);\r\n }\r\n modal.deferred = deferred;\r\n modal.back = function (data) {\r\n popModal(this);\r\n modal.deferred.resolve(data, modal);\r\n }\r\n modal.resolve = function (data) {\r\n closeModal(this);\r\n modal.deferred.resolve(data, modal);\r\n }\r\n modal.reject = function () {\r\n closeModal(this);\r\n modal.deferred.reject(modal);\r\n }\r\n modals.push(modal);\r\n angular.forEach(modals, function (m, i) {\r\n m.active = false;\r\n });\r\n if (modals.length) {\r\n modal.active = true;\r\n } else {\r\n $timeout(function () {\r\n modal.active = true;\r\n // window.scrollTo(0, 0);\r\n }, 500);\r\n }\r\n return deferred.promise;\r\n }\r\n\r\n return {\r\n modals: modals,\r\n addModal: addModal,\r\n };\r\n }];\r\n \r\n }]);\r\n\r\n}());\r\n","/* global angular */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.factory('Range', ['$timeout', function($timeout) {\r\n var ONEDAY = 24 * 60 * 60 * 1000;\r\n\r\n function Range() {\r\n this.today = getToday();\r\n this.first = this.getFirstDayOfWeek();\r\n this.last = this.getLastDayOfWeek();\r\n this.setCurrentDay();\r\n this.options = {\r\n minDate: getToday(),\r\n showWeeks: false,\r\n showButtonBar: false,\r\n };\r\n }\r\n\r\n Range.prototype = {\r\n getToday: getToday,\r\n getKey: getKey,\r\n getFirstDayOfWeek: getFirstDayOfWeek,\r\n getLastDayOfWeek: getLastDayOfWeek,\r\n trimDate: trimDate,\r\n set: set,\r\n setNextDays: setNextDays,\r\n setCurrentDay: setCurrentDay,\r\n setCurrentWeek: setCurrentWeek,\r\n isCurrentDay: isCurrentDay,\r\n isCurrentWeek: isCurrentWeek,\r\n setLastMonth: setLastMonth,\r\n isLastMonth: isLastMonth,\r\n setLastQuarter: setLastQuarter,\r\n isLastQuarter: isLastQuarter,\r\n setLastSemester: setLastSemester,\r\n isLastSemester: isLastSemester,\r\n setLastYear: setLastYear,\r\n isLastYear: isLastYear,\r\n open: open,\r\n };\r\n\r\n return Range;\r\n\r\n function set(from,to) {\r\n this.from = from;\r\n this.to = to;\r\n }\r\n\r\n function setNextDays(days) {\r\n this.set(this.today, new Date(this.today.getTime() + days * ONEDAY));\r\n } \r\n\r\n function setCurrentDay() {\r\n this.from = this.to = this.today;\r\n }\r\n\r\n function setCurrentWeek() {\r\n this.from = this.first;\r\n this.to = this.last;\r\n }\r\n\r\n function isCurrentDay() {\r\n return getKey(this.from) === getKey(this.today) &&\r\n getKey(this.to) === getKey(this.today);\r\n }\r\n\r\n function isCurrentWeek() {\r\n return getKey(this.from) === getKey(this.first) &&\r\n getKey(this.to) === getKey(this.last);\r\n }\r\n\r\n function setLastMonth() {\r\n this.from = new Date(this.today.getFullYear(), this.today.getMonth(), 1);\r\n this.to = this.today; // new Date(this.today.getFullYear(), this.today.getMonth() + 1, 0);\r\n }\r\n\r\n function setLastQuarter() {\r\n this.from = new Date(this.today.getFullYear(), this.today.getMonth() - 3, 1);\r\n this.to = this.today;\r\n }\r\n\r\n function setLastSemester() {\r\n this.from = new Date(this.today.getFullYear(), this.today.getMonth() - 6, 1);\r\n this.to = this.today;\r\n }\r\n\r\n function setLastYear() {\r\n this.from = new Date(this.today.getFullYear(), this.today.getMonth() - 12, 1);\r\n this.to = this.today; // new Date(this.today.getFullYear(), this.today.getMonth() + 1, 0);\r\n }\r\n\r\n function isLastMonth() {\r\n var first = new Date(this.today.getFullYear(), this.today.getMonth(), 1);\r\n return getKey(this.from) === getKey(first) &&\r\n getKey(this.to) === getKey(this.today);\r\n }\r\n\r\n function isLastQuarter() {\r\n var first = new Date(this.today.getFullYear(), this.today.getMonth() - 3, 1);\r\n return getKey(this.from) === getKey(first) &&\r\n getKey(this.to) === getKey(this.today);\r\n }\r\n\r\n function isLastSemester() {\r\n var first = new Date(this.today.getFullYear(), this.today.getMonth() - 6, 1);\r\n return getKey(this.from) === getKey(first) &&\r\n getKey(this.to) === getKey(this.today);\r\n }\r\n\r\n function isLastYear() {\r\n var first = new Date(this.today.getFullYear(), this.today.getMonth() - 12, 1);\r\n return getKey(this.from) === getKey(first) &&\r\n getKey(this.to) === getKey(this.today);\r\n }\r\n\r\n function getToday() {\r\n return trimDate(new Date() < new Date(2017, 10, 16) ? new Date(2017, 10, 16) : new Date());\r\n }\r\n\r\n function getFirstDayOfWeek() {\r\n var diff = this.today.getDay();\r\n diff = (diff === 0 ? 6 : diff - 1);\r\n var date = new Date(this.today);\r\n date.setDate(date.getDate() - diff);\r\n return trimDate(date);\r\n }\r\n\r\n function getLastDayOfWeek() {\r\n var diff = this.today.getDay();\r\n diff = (diff === 0 ? 6 : diff - 1);\r\n var date = new Date(this.today);\r\n date.setDate(date.getDate() - diff + 7);\r\n return trimDate(date);\r\n }\r\n\r\n function trimDate(date) {\r\n date.setHours(0);\r\n date.setMinutes(0);\r\n date.setSeconds(0);\r\n return date;\r\n }\r\n\r\n function getKey(date) {\r\n date = new Date(date);\r\n date.setHours(0);\r\n date.setMinutes(0);\r\n date.setSeconds(0);\r\n return Math.ceil(date.getTime() / ONEDAY);\r\n }\r\n\r\n function open(key) {\r\n this.flags = {};\r\n this.flags[key] = true;\r\n }\r\n\r\n }]);\r\n\r\n}());","/* global angular */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.factory('State', ['$timeout', function($timeout) {\r\n var DELAY = 2000;\r\n\r\n function State() {\r\n this.errors = [];\r\n this.isReady = false;\r\n this.idle();\r\n }\r\n State.prototype = {\r\n idle: idle,\r\n busy: busy,\r\n enabled: enabled,\r\n error: error,\r\n ready: ready,\r\n success: success,\r\n errorMessage: errorMessage,\r\n submitClass: submitClass,\r\n labels: labels,\r\n classes: classes\r\n };\r\n return State;\r\n\r\n function idle() {\r\n this.isBusy = false;\r\n this.isError = false;\r\n this.isErroring = false;\r\n this.isSuccess = false;\r\n this.isSuccessing = false;\r\n this.button = null;\r\n }\r\n\r\n function enabled() {\r\n return !this.isBusy && !this.isErroring && !this.isSuccessing;\r\n }\r\n\r\n function busy() {\r\n if (!this.isBusy) {\r\n this.isBusy = true;\r\n this.isError = false;\r\n this.isErroring = false;\r\n this.isSuccess = false;\r\n this.isSuccessing = false;\r\n this.errors = [];\r\n // console.log('State.busy', this);\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n function success() {\r\n this.isBusy = false;\r\n this.isError = false;\r\n this.isErroring = false;\r\n this.isSuccess = true;\r\n this.isSuccessing = true;\r\n this.errors = []; \r\n $timeout(function () {\r\n \tthis.isSuccessing = false;\r\n }.bind(this), DELAY); \r\n }\r\n\r\n function error(error) {\r\n this.isBusy = false;\r\n this.isError = true;\r\n this.isErroring = true;\r\n this.isSuccess = false;\r\n this.isSuccessing = false;\r\n this.errors.push(error);\r\n $timeout(function () {\r\n this.isErroring = false; \r\n }.bind(this), DELAY);\r\n }\r\n\r\n function ready() {\r\n \tthis.idle();\r\n this.isReady = true;\r\n }\r\n\r\n function errorMessage() {\r\n //return this.isError ? this.errors[this.errors.length - 1] : null;\r\n return this.errors.length > 0 ? this.errors[this.errors.length - 1] : null;\r\n }\r\n\r\n function submitClass() {\r\n return {\r\n busy: this.isBusy,\r\n ready: this.isReady,\r\n successing: this.isSuccessing,\r\n success: this.isSuccess,\r\n errorring: this.isErroring,\r\n error: this.isError,\r\n };\r\n }\r\n\r\n function labels(addons, showCompletionState) {\r\n var scope = this;\r\n var defaults = {\r\n ready: 'submit',\r\n busy: 'sending',\r\n error: 'error',\r\n erroring: 'erroring',\r\n success: 'success',\r\n successing: 'successing',\r\n };\r\n if (addons) {\r\n angular.extend(defaults, addons);\r\n }\r\n var label = defaults.ready;\r\n if (this.isBusy) {\r\n label = defaults.busy;\r\n } else if (this.isSuccessing) {\r\n label = defaults.successing;\r\n } else if (this.isErroring) {\r\n label = defaults.erroring;\r\n }\r\n if (showCompletionState) {\r\n if (this.isSuccess) {\r\n label = defaults.success;\r\n } else if (this.isError) {\r\n label = defaults.error;\r\n }\r\n }\r\n return label;\r\n }\r\n\r\n function classes(addons) {\r\n var scope = this,\r\n classes = null;\r\n classes = {\r\n ready: scope.isReady,\r\n busy: scope.isBusy,\r\n successing: scope.isSuccessing,\r\n success: scope.isSuccess,\r\n errorring: scope.isErroring,\r\n error: scope.isError,\r\n pulse: scope.isBusy,\r\n flash: scope.isErroring || scope.isSuccessing,\r\n };\r\n if (addons) {\r\n angular.forEach(addons, function (value, key) {\r\n classes[value] = classes[key];\r\n });\r\n }\r\n // console.log('stateClass', classes);\r\n return classes;\r\n }\r\n\r\n }]);\r\n\r\n}());","/* global angular */\r\n\r\n(function () {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.factory('Cookie', ['$q', '$window', function ($q, $window) {\r\n function Cookie() { }\r\n Cookie.TIMEOUT = 5 * 60 * 1000; // five minutes\r\n Cookie._set = function (name, value, days) {\r\n var expires;\r\n if (days) {\r\n var date = new Date();\r\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\r\n expires = '; expires=' + date.toGMTString();\r\n } else {\r\n expires = '';\r\n }\r\n $window.document.cookie = name + '=' + value + expires + '; path=/';\r\n };\r\n Cookie.exists = function (name) {\r\n return $window.document.cookie.indexOf(';' + name + '=') !== -1 || $window.document.cookie.indexOf(name + '=') === 0;\r\n };\r\n Cookie.get = function (name) {\r\n var cookieName = name + \"=\";\r\n var ca = $window.document.cookie.split(';');\r\n for (var i = 0; i < ca.length; i++) {\r\n var c = ca[i];\r\n while (c.charAt(0) == ' ') {\r\n c = c.substring(1, c.length);\r\n }\r\n if (c.indexOf(cookieName) === 0) {\r\n var value = c.substring(cookieName.length, c.length);\r\n var model = null;\r\n try {\r\n model = JSON.parse(decodeURIComponent(atob(value)));\r\n } catch (e) {\r\n console.log('Cookie.get.error parsing', key, e);\r\n }\r\n return model;\r\n }\r\n }\r\n return null;\r\n };\r\n Cookie.set = function (name, value, days) {\r\n try {\r\n var cache = [];\r\n var json = JSON.stringify(value, function (key, value) {\r\n if (key === 'pool') {\r\n return;\r\n }\r\n if (typeof value === 'object' && value !== null) {\r\n if (cache.indexOf(value) !== -1) {\r\n // Circular reference found, discard key\r\n return;\r\n }\r\n cache.push(value);\r\n }\r\n return value;\r\n });\r\n cache = null;\r\n Cookie._set(name, btoa(encodeURIComponent(json)), days);\r\n } catch (e) {\r\n console.log('Cookie.set.error serializing', name, value, e);\r\n }\r\n };\r\n Cookie.delete = function (name) {\r\n Cookie._set(name, \"\", -1);\r\n };\r\n Cookie.on = function (name) {\r\n var deferred = $q.defer();\r\n var i, interval = 1000,\r\n elapsed = 0,\r\n timeout = Cookie.TIMEOUT;\r\n\r\n function checkCookie() {\r\n if (elapsed > timeout) {\r\n deferred.reject('timeout');\r\n } else {\r\n var c = Cookie.get(name);\r\n if (c) {\r\n deferred.resolve(c);\r\n } else {\r\n elapsed += interval;\r\n i = setTimeout(checkCookie, interval);\r\n }\r\n }\r\n }\r\n checkCookie();\r\n return deferred.promise;\r\n };\r\n return Cookie;\r\n }]);\r\n\r\n app.factory('LocalStorage', ['$q', '$window', 'Cookie', function ($q, $window, Cookie) {\r\n function LocalStorage() { }\r\n function isLocalStorageSupported() {\r\n var supported = false;\r\n try {\r\n supported = 'localStorage' in $window && $window.localStorage !== null;\r\n if (supported) {\r\n $window.localStorage.setItem('test', '1');\r\n $window.localStorage.removeItem('test');\r\n } else {\r\n supported = false;\r\n }\r\n } catch (e) {\r\n supported = false;\r\n }\r\n return supported;\r\n }\r\n LocalStorage.isSupported = isLocalStorageSupported();\r\n if (LocalStorage.isSupported) {\r\n LocalStorage.exists = function (name) {\r\n return $window.localStorage[name] !== undefined;\r\n };\r\n LocalStorage.get = function (name) {\r\n var value = null;\r\n if ($window.localStorage[name] !== undefined) {\r\n try {\r\n value = JSON.parse($window.localStorage[name]);\r\n } catch (e) {\r\n console.log('LocalStorage.get.error parsing', name, e);\r\n }\r\n }\r\n return value;\r\n };\r\n LocalStorage.set = function (name, value) {\r\n try {\r\n var cache = [];\r\n var json = JSON.stringify(value, function (key, value) {\r\n if (key === 'pool') {\r\n return;\r\n }\r\n if (typeof value === 'object' && value !== null) {\r\n if (cache.indexOf(value) !== -1) {\r\n // Circular reference found, discard key\r\n return;\r\n }\r\n cache.push(value);\r\n }\r\n return value;\r\n });\r\n cache = null;\r\n $window.localStorage.setItem(name, json);\r\n } catch (e) {\r\n console.log('LocalStorage.set.error serializing', name, value, e);\r\n }\r\n };\r\n LocalStorage.delete = function (name) {\r\n $window.localStorage.removeItem(name);\r\n };\r\n LocalStorage.on = function (name) {\r\n var deferred = $q.defer();\r\n var i, timeout = Cookie.TIMEOUT;\r\n\r\n function storageEvent(e) {\r\n // console.log('LocalStorage.on', name, e);\r\n clearTimeout(i);\r\n if (e.originalEvent.key == name) {\r\n try {\r\n var value = JSON.parse(e.originalEvent.newValue); // , e.originalEvent.oldValue\r\n deferred.resolve(value);\r\n } catch (error) {\r\n console.log('LocalStorage.on.error parsing', name, error);\r\n deferred.reject('error parsing ' + name);\r\n }\r\n }\r\n }\r\n angular.element($window).on('storage', storageEvent);\r\n i = setTimeout(function () {\r\n deferred.reject('timeout');\r\n }, timeout);\r\n return deferred.promise;\r\n };\r\n } else {\r\n console.log('LocalStorage.unsupported switching to cookies');\r\n LocalStorage.exists = Cookie.exists;\r\n LocalStorage.set = Cookie.set;\r\n LocalStorage.get = Cookie.get;\r\n LocalStorage.delete = Cookie.delete;\r\n LocalStorage.on = Cookie.on;\r\n }\r\n return LocalStorage;\r\n }]);\r\n\r\n app.factory('SessionStorage', ['$q', '$window', 'Cookie', function ($q, $window, Cookie) {\r\n function SessionStorage() { }\r\n function isSessionStorageSupported() {\r\n var supported = false;\r\n try {\r\n supported = 'sessionStorage' in $window && $window.sessionStorage !== undefined;\r\n if (supported) {\r\n $window.sessionStorage.setItem('test', '1');\r\n $window.sessionStorage.removeItem('test');\r\n } else {\r\n supported = false;\r\n }\r\n } catch (e) {\r\n supported = false;\r\n }\r\n return supported;\r\n }\r\n SessionStorage.isSupported = isSessionStorageSupported();\r\n if (SessionStorage.isSupported) {\r\n SessionStorage.exists = function (name) {\r\n return $window.sessionStorage[name] !== undefined;\r\n };\r\n SessionStorage.get = function (name) {\r\n var value = null;\r\n if ($window.sessionStorage[name] !== undefined) {\r\n try {\r\n value = JSON.parse($window.sessionStorage[name]);\r\n } catch (e) {\r\n console.log('SessionStorage.get.error parsing', name, e);\r\n }\r\n }\r\n return value;\r\n };\r\n SessionStorage.set = function (name, value) {\r\n try {\r\n var cache = [];\r\n var json = JSON.stringify(value, function (key, value) {\r\n if (key === 'pool') {\r\n return;\r\n }\r\n if (typeof value === 'object' && value !== null) {\r\n if (cache.indexOf(value) !== -1) {\r\n // Circular reference found, discard key\r\n return;\r\n }\r\n cache.push(value);\r\n }\r\n return value;\r\n });\r\n cache = null;\r\n $window.sessionStorage.setItem(name, json);\r\n } catch (e) {\r\n console.log('SessionStorage.set.error serializing', name, value, e);\r\n }\r\n };\r\n SessionStorage.delete = function (name) {\r\n $window.sessionStorage.removeItem(name);\r\n };\r\n SessionStorage.on = function (name) {\r\n var deferred = $q.defer();\r\n var i, timeout = Cookie.TIMEOUT;\r\n\r\n function storageEvent(e) {\r\n // console.log('SessionStorage.on', name, e);\r\n clearTimeout(i);\r\n if (e.originalEvent.key === name) {\r\n try {\r\n var value = JSON.parse(e.originalEvent.newValue); // , e.originalEvent.oldValue\r\n deferred.resolve(value);\r\n } catch (error) {\r\n console.log('SessionStorage.on.error parsing', name, error);\r\n deferred.reject('error parsing ' + name);\r\n }\r\n }\r\n }\r\n angular.element($window).on('storage', storageEvent);\r\n i = setTimeout(function () {\r\n deferred.reject('timeout');\r\n }, timeout);\r\n return deferred.promise;\r\n };\r\n } else {\r\n console.log('SessionStorage.unsupported switching to cookies');\r\n SessionStorage.exists = Cookie.exists;\r\n SessionStorage.set = Cookie.set;\r\n SessionStorage.get = Cookie.get;\r\n SessionStorage.delete = Cookie.delete;\r\n SessionStorage.on = Cookie.on;\r\n }\r\n return SessionStorage;\r\n }]);\r\n\r\n}());","/* global angular */\r\n\r\n(function () {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.service('Utils', [function () {\r\n\r\n this.getClosest = getClosest;\r\n this.getClosestElement = getClosestElement;\r\n this.getQuerystring = getQuerystring;\r\n this.removeFromQuerystring = removeFromQuerystring;\r\n this.throttle = throttle;\r\n\r\n function getClosest(el, selector) {\r\n var matchesFn, parent;\r\n ['matches', 'webkitMatchesSelector', 'mozMatchesSelector', 'msMatchesSelector', 'oMatchesSelector'].some(function (fn) {\r\n if (typeof document.body[fn] == 'function') {\r\n matchesFn = fn;\r\n return true;\r\n }\r\n return false;\r\n });\r\n if (el[matchesFn](selector)) {\r\n return el;\r\n }\r\n while (el !== null) {\r\n parent = el.parentElement;\r\n if (parent !== null && parent[matchesFn](selector)) {\r\n return parent;\r\n }\r\n el = parent;\r\n }\r\n return null;\r\n }\r\n\r\n function getClosestElement(el, target) {\r\n var closest = null;\r\n if (el === target) {\r\n closest = el;\r\n } else if (el.parentElement !== null) {\r\n closest = getClosestElement(el.parentElement, target);\r\n }\r\n return closest;\r\n }\r\n \r\n function getQuerystring(str) {\r\n return (str || document.location.search).replace(/(^\\?)/,'').split(\"&\").map(function(n){return n = n.split(\"=\"),this[n[0]] = n[1],this}.bind({}))[0];\r\n }\r\n\r\n function removeFromQuerystring() {\r\n var args = Array.prototype.slice.call(arguments);\r\n var query = getQuerystring();\r\n var search = [];\r\n angular.forEach(query, function (value, key) {\r\n if (args.indexOf(key) === -1) {\r\n search.push(key + '=' + value);\r\n }\r\n });\r\n if (search.length) {\r\n search = '?' + search.join('&');\r\n } else {\r\n search = '';\r\n }\r\n if (search !== window.location.search && window.history.replaceState) { \r\n window.history.replaceState(null, null, window.location.pathname + search);\r\n console.log('replaceState', window.location.pathname + search); \r\n }\r\n return search;\r\n }\r\n\r\n var getNow = Date.now || function () {\r\n return new Date().getTime();\r\n };\r\n\r\n function throttle(callback, wait, options) {\r\n // Returns a function, that, when invoked, will only be triggered at most once\r\n // during a given window of time. Normally, the throttled function will run\r\n // as much as it can, without ever going more than once per `wait` duration;\r\n // but if you'd like to disable the execution on the leading edge, pass\r\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\r\n var context, args, result;\r\n var timeout = null;\r\n var previous = 0;\r\n if (!options) options = {};\r\n var later = function () {\r\n previous = options.leading === false ? 0 : getNow();\r\n timeout = null;\r\n result = callback.apply(context, args);\r\n if (!timeout) context = args = null;\r\n };\r\n return function () {\r\n var now = getNow();\r\n if (!previous && options.leading === false) previous = now;\r\n var remaining = wait - (now - previous);\r\n context = this;\r\n args = arguments;\r\n if (remaining <= 0 || remaining > wait) {\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n timeout = null;\r\n }\r\n previous = now;\r\n result = callback.apply(context, args);\r\n if (!timeout) context = args = null;\r\n } else if (!timeout && options.trailing !== false) {\r\n timeout = setTimeout(later, remaining);\r\n }\r\n return result;\r\n };\r\n }\r\n\r\n }]);\r\n\r\n}());","/* global angular */\r\n\r\n(function () {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.service('api', ['WebApi', '$filter', function (WebApi, $filter) {\r\n\r\n var _service = WebApi;\r\n \r\n /* auth */\r\n this.user = { \r\n login: function (model) {\r\n return _service.post('/User/login?state=true', model);\r\n },\r\n loginFb: function (accessToken) {\r\n return _service.post('/User/loginFb?state=true', '\"' + accessToken + '\"');\r\n },\r\n logout: function () {\r\n return _service.get('/User/logout?state=true');\r\n },\r\n me: function () {\r\n return _service.get('/User/me?state=true');\r\n },\r\n detail: function () {\r\n return _service.get('/User/detail?state=true');\r\n },\r\n register: function (model) {\r\n return _service.post('/User/register?state=true', model);\r\n },\r\n forgot: function (model) {\r\n return _service.post('/User/NotifyCredential?state=true', model);\r\n },\r\n verifyEmail: function (model) {\r\n return _service.post('/User/VerifyEmail', model);\r\n },\r\n edit: function (model) {\r\n return _service.post('/User/edit?state=true', model);\r\n },\r\n editPassword: function (model) {\r\n return _service.post('/User/editPassword', model);\r\n },\r\n delete: function (model) {\r\n return _service.post('/User/delete', model);\r\n },\r\n wishlist: function () { \r\n return _service.get('/User/wishlist?state=true');\r\n },\r\n addToWishlist: function (id) { \r\n return _service.post('/User/wishlist?state=true', { id: id });\r\n },\r\n removeFromWishlist: function (id) { \r\n return _service.delete('/User/wishlist/' + id + '?state=true');\r\n }\r\n };\r\n \r\n this.training = {\r\n all: function () { return _service.get('/training'); }, \r\n latest: function () { return _service.get('/training/latest'); },\r\n top: function () { return _service.get('/training/top'); },\r\n target: function (id) { return _service.get('/training/target/' + id); },\r\n exercise: function (id) { return _service.get('/training/exercise/' + id); },\r\n tool: function (id) { return _service.get('/training/tool/' + id); },\r\n coach: function (id) { return _service.get('/training/coach/' + id); },\r\n me: function () { return _service.get('/training/coach/me?state=true'); },\r\n suggested: function () { return _service.get('/training/suggested?state=true'); },\r\n swimlist: function () { return _service.get('/training/swimlist?state=true'); },\r\n detail: function (id) { return _service.get('/training/' + id + '?state=true'); },\r\n save: function (model) { return _service.post('/training?state=true', model); }, \r\n edit: function (model) { return _service.put('/training/' + model.id + '?state=true', model); },\r\n publish: function (id) { return _service.get('/training/publish/' + id + '?state=true'); }\r\n };\r\n\r\n this.coach = {\r\n top: function () {return _service.get('/coach/top')}, \r\n chart: {\r\n all: function () { return _service.get('/coach/chart'); },\r\n page: function (page) { return _service.get('/coach/chart/' + page); },\r\n me: function () { return _service.get('/coach/chart/me?state=true'); }\r\n }\r\n }\r\n\r\n this.comment = {\r\n page: function (id) { return _service.get('/comment/page/' + id); },\r\n save: function (model) { return _service.post('/comment?state=true', model); }\r\n }\r\n \r\n this.data = {\r\n register: function () {\r\n return _service.get('/data/register');\r\n },\r\n contact: function () {\r\n return _service.get('/data/contact');\r\n },\r\n training: function () {\r\n return _service.get('/data/training');\r\n }\r\n };\r\n\r\n this.action = {\r\n contact: function (model) {\r\n return _service.post('/action/contact?state=true', model);\r\n },\r\n newsletter: function (model) {\r\n return _service.post('/action/newsletter', model);\r\n } \r\n };\r\n\r\n this.glossary = function () { return _service.get('/glossary?state=true'); };\r\n\r\n }]);\r\n\r\n}());","/* global angular */\r\n\r\n(function () {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.service('gtm', ['$filter', 'Account', function ($filter, Account) {\r\n\r\n var dataLayer = window.dataLayer = window.dataLayer || [];\r\n\r\n /*\r\n \r\n function getCategory(detail) { \r\n if (detail.tags && detail.tags.length) {\r\n return detail.tags[0].names[1].name; //en category name\r\n } \r\n }\r\n\r\n function getProduct(detail) {\r\n if (detail)\r\n return {\r\n name: detail.code,\r\n id: detail.id, \r\n //'price': item.price,\r\n category: getCategory(detail)\r\n }\r\n }\r\n\r\n function getCartProduct(item) {\r\n if (item) {\r\n var product = getProduct(item.detail);\r\n if (product) {\r\n product.quantity = item.paxCount;\r\n return product;\r\n }\r\n }\r\n }\r\n\r\n function getCartProducts(items) {\r\n if (items) {\r\n var products = [];\r\n for (var i = 0; i < items.length; i++) { \r\n products.push(getCartProduct(items[i]));\r\n }\r\n \r\n return products;\r\n }\r\n }\r\n\r\nthis.productDetails = function (item) {\r\n if (item) {\r\n var obj = {\r\n event: 'productDetails',\r\n ecommerce: {\r\n detail: {\r\n products: [getProduct(item)]\r\n }\r\n }\r\n }\r\n this.push(obj);\r\n }\r\n }\r\n\r\n */\r\n\r\n this.push = function (obj) {\r\n dataLayer.push(obj); \r\n }\r\n\r\n this.addToWishlist = function (id) {\r\n if (id && Account.user) {\r\n var obj = {\r\n event: 'addToWishlist',\r\n allenamento: id,\r\n user: Account.user.id,\r\n user_type: Account.user.profile\r\n }\r\n this.push(obj);\r\n }\r\n }\r\n\r\n this.removeFromWishlist = function (id) {\r\n if (id && Account.user) { \r\n var obj = {\r\n event: 'removeFromWishlist',\r\n allenamento: id, \r\n user: Account.user.id,\r\n user_type: Account.user.profile\r\n }\r\n this.push(obj);\r\n }\r\n }\r\n\r\n /*\r\n \r\n this.addToCart = function (cart) {\r\n if (cart && cart.items && cart.items.length) {\r\n var obj = {\r\n event: 'addToCart',\r\n ecommerce: {\r\n currencyCode: 'EUR',\r\n add: {\r\n products: [getCartProduct(cart.items[cart.items.length - 1])]\r\n }\r\n }\r\n }\r\n this.push(obj);\r\n }\r\n }\r\n\r\n this.removeFromCart = function (item) {\r\n if (item) {\r\n var obj = {\r\n event: 'removeFromCart',\r\n ecommerce: {\r\n currencyCode: 'EUR',\r\n remove: {\r\n products: [getCartProduct(item)]\r\n }\r\n }\r\n }\r\n this.push(obj);\r\n }\r\n }\r\n\r\n this.checkout = function (cart) { \r\n if (cart && cart.items && cart.items.length) {\r\n var obj = {\r\n event: 'checkout',\r\n ecommerce: {\r\n checkout: {\r\n actionField: { step: 1 },\r\n products: getCartProducts(cart.items)\r\n }\r\n }\r\n }\r\n this.push(obj);\r\n }\r\n }\r\n\r\n this.buy = function (cart) {\r\n if (cart && cart.items && cart.items.length) {\r\n var paymentSelected = (cart.payment || { paymentType: 0 }).paymentType || 0;\r\n var paymentType = $filter('filter')(cart.payment.paymentTypes, { id: paymentSelected });\r\n var paymentCode = ''\r\n if (paymentType && paymentType.length>0 && paymentType[0].code)\r\n paymentCode = paymentType[0].code; \r\n\r\n var obj = {\r\n event: 'checkout',\r\n ecommerce: {\r\n checkout: {\r\n actionField: { step: 2, option: paymentCode },\r\n products: getCartProducts(cart.items)\r\n }\r\n }\r\n } \r\n this.push(obj);\r\n }\r\n }\r\n\r\n this.transaction = function (purchase,cart) {\r\n var obj = {\r\n event: 'transaction',\r\n ecommerce: {\r\n purchase: {\r\n actionField: {\r\n id: purchase.bookingFileCode, \r\n revenue: purchase.totalAmountDetail.totalAmountAfterDiscount, \r\n tax: purchase.totalAmountDetail.dueAmount - purchase.totalAmountDetail.totalAmountWithoutVat,\r\n //'shipping': '5.99',\r\n coupon: cart.markupCode || ''\r\n },\r\n products: getCartProducts(cart.items)\r\n }\r\n }\r\n } \r\n this.push(obj);\r\n }\r\n\r\n */\r\n }]);\r\n\r\n\r\n}());","/* global angular */\r\n\r\n(function () {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n \r\n app.directive('slider', ['$window', 'Utils', function ($window, Utils) {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attributes, model) {\r\n var native = element[0];\r\n var options = {\r\n speed: 1,\r\n damping: 0.1,\r\n overscrollDamping: 1.0,\r\n thumbMinSize: 20,\r\n continuousScrolling: true,\r\n alwaysShowTracks: false\r\n };\r\n var scrollbar; \r\n function Init() {\r\n scrollbar = Scrollbar.init(native, options);\r\n // var throttled = Utils.throttle(scrollbar.update, 250);\r\n var scrollContent = native.querySelector('.scroll-content');\r\n scope.$watch(scrollContent.offsetHeight, function (height) {\r\n scrollbar.update();\r\n // throttled();\r\n });\r\n }\r\n setTimeout(Init, 100);\r\n }\r\n };\r\n }]);\r\n\r\n /* -------------------------------------------------- \r\n Scrollto component\r\n -------------------------------------------------- */\r\n app.directive('scrollTo', ['$parse', function ($parse) {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attributes) {\r\n function onClick() {\r\n if ($(attributes.scrollTo).offset()) {\r\n var top = $(attributes.scrollTo).offset().top;\r\n $('body').animate({ scrollTop: top + 'px' });\r\n }\r\n }\r\n element.on('click', onClick);\r\n scope.$on('destroy', function () {\r\n element.off('click', onClick);\r\n });\r\n }\r\n }\r\n }]);\r\n\r\n /* -------------------------------------------------- \r\n Menu fixed top\r\n -------------------------------------------------- */\r\n app.directive('fixedNav', ['$log', 'Utils', 'CONFIG', function ($log, Utils, CONFIG) {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attributes) {\r\n var native = element[0];\r\n var currentOffset = window.pageYOffset;\r\n function checkScroll() {\r\n if (screen.width < CONFIG.mobileMenuMaxWidth) {\r\n // mobile\r\n if (window.pageYOffset > currentOffset && window.pageYOffset > 150) {\r\n native.classList.add('active');\r\n } else {\r\n native.classList.remove('active');\r\n }\r\n } else {\r\n // desktop\r\n if (window.pageYOffset > currentOffset && window.pageYOffset > 150) {\r\n native.classList.add('active');\r\n } else {\r\n native.classList.remove('active');\r\n }\r\n /*\r\n var focusedTop = $(document.activeElement).offset().top;\r\n focusedTop = focusedTop > 0 ? focusedTop : Infinity;\r\n if (window.pageYOffset > 150 && (window.pageYOffset < (focusedTop - $(native).height()) || window.pageYOffset > (focusedTop + $(native).height()))) {\r\n native.classList.add('active');\r\n } else {\r\n native.classList.remove('active');\r\n }\r\n */\r\n }\r\n currentOffset = window.pageYOffset;\r\n }\r\n var throttled = Utils.throttle(checkScroll, 200); \r\n function addListeners() {\r\n angular.element(window).on('scroll', throttled);\r\n }\r\n function removeListeners() {\r\n angular.element(window).off('scroll', throttled);\r\n }\r\n addListeners();\r\n scope.$on('destroy', function () {\r\n removeListeners();\r\n });\r\n }\r\n }\r\n }]);\r\n\r\n /* -------------------------------------------------- \r\n Open mobile menu\r\n -------------------------------------------------- */\r\n app.directive('mobileMenuToggler', ['$log', function ($log) {\r\n return {\r\n restrict: 'C',\r\n link: function (scope, element, attributes) {\r\n scope.isOpen = false;\r\n element.on('click', function () {\r\n document.querySelector('.main-nav-first').classList.toggle('show');\r\n });\r\n }\r\n }\r\n }]);\r\n\r\n /* -------------------------------------------------- \r\n Scrollto component\r\n -------------------------------------------------- */\r\n app.directive('backToTop', [function () {\r\n return {\r\n restrict: 'C',\r\n link: function (scope, element, attributes) {\r\n function onClick() {\r\n $('body').animate({ scrollTop: 0 + 'px' }, 500);\r\n }\r\n element.on('click', onClick);\r\n }\r\n }\r\n }]);\r\n\r\n /* -------------------------------------------------- \r\n Menu Dropdown\r\n -------------------------------------------------- */\r\n app.directive('mainNav', ['$log', 'Utils', function ($log, Utils) {\r\n return {\r\n restrict: 'C',\r\n link: function (scope, element, attributes) {\r\n var native = element[0];\r\n var currentOffset = window.pageYOffset;\r\n function checkScrollDirection() {\r\n if (window.pageYOffset > currentOffset && window.pageYOffset > 150) {\r\n // Scrolling down\r\n currentOffset = window.pageYOffset;\r\n native.classList.add('mobile-hidden');\r\n } else {\r\n // Scrolling up\r\n currentOffset = window.pageYOffset;\r\n native.classList.remove('mobile-hidden');\r\n }\r\n }\r\n var throttled = Utils.throttle(checkScrollDirection, 400);\r\n $(window).scroll(throttled);\r\n }\r\n }\r\n }]);\r\n\r\n /* -------------------------------------------------- \r\n Menu Dropdown\r\n -------------------------------------------------- */\r\n app.directive('hasDropdown', ['$log', 'CONFIG', function ($log, CONFIG) {\r\n return {\r\n restrict: 'C',\r\n link: function (scope, element, attributes) {\r\n var native = element[0];\r\n var toggler = native.querySelector('a');\r\n var dropdown = native.querySelector('.dropdown');\r\n native.addEventListener('click', function () { \r\n if (screen.width < CONFIG.mobileMenuMaxWidth) {\r\n // Mobile\r\n $(dropdown).stop().slideToggle();\r\n } else {\r\n // Desktop \r\n element.toggleClass('open');\r\n }\r\n });\r\n toggler.addEventListener('blur', function () {\r\n // Permette il click sulla voce interna\r\n setTimeout(function () {\r\n if (screen.width >= 768) {\r\n native.classList.remove('open');\r\n }\r\n }, 500);\r\n });\r\n }\r\n }\r\n }]);\r\n\r\n /* -------------------------------------------------- \r\n Hero slider HOME\r\n -------------------------------------------------- */\r\n app.directive('heroHomeWrapper', ['$log', 'Utils', function ($log, Utils) {\r\n return {\r\n restrict: 'C',\r\n link: function (scope, element, attributes) {\r\n var native = element[0];\r\n var currentOffset = native.scrollTop;\r\n var height = native.clientHeight;\r\n function checkHeroScroll(e) {\r\n if (native.scrollTop > currentOffset) {\r\n // Scrolling down\r\n if (currentOffset === 0) {\r\n $(native).animate({ scrollTop: height + 'px' }, 300);\r\n }\r\n currentOffset = native.scrollTop;\r\n } else {\r\n // Scrolling up\r\n currentOffset = native.scrollTop;\r\n $(native).animate({ scrollTop: 0 + 'px' }, 300);\r\n }\r\n }\r\n var throttled = Utils.throttle(checkHeroScroll, 400);\r\n native.addEventListener('scroll', throttled);\r\n }\r\n }\r\n }]);\r\n\r\n /* -------------------------------------------------- \r\n Menu Dropdown\r\n -------------------------------------------------- */\r\n /*\r\n app.directive('scrollbar', ['$log', function ($log) {\r\n var isAndroid = navigator.userAgent.toLowerCase().indexOf(\"android\") > -1;\r\n var isMac = navigator.platform.toLowerCase().indexOf('mac') !== -1;\r\n var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;\r\n console.log('scrollbar', isAndroid, isMac, iOS);\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attributes) {\r\n if (isAndroid || isMac || iOS) {\r\n return;\r\n } \r\n angular.element(document).ready(function () {\r\n Scrollbar.initAll(); \r\n });\r\n }\r\n }\r\n }]);\r\n */\r\n\r\n /* -------------------------------------------------- \r\n Swiper\r\n -------------------------------------------------- */\r\n app.directive('swiper', [function () {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attributes) {\r\n var swiper = new Swiper(element, {\r\n direction: 'horizontal',\r\n effect: 'coverflow',\r\n loop: true,\r\n autoplay: 3000,\r\n coverflow: {\r\n rotate: 20,\r\n stretch: 0,\r\n depth: 400,\r\n modifier: 1,\r\n slideShadows: false\r\n },\r\n slidesPerView: 3,\r\n // pagination: '.swiper-pagination',\r\n nextButton: '.swiper-button-next',\r\n prevButton: '.swiper-button-prev',\r\n // scrollbar: '.swiper-scrollbar',\r\n });\r\n },\r\n };\r\n }]);\r\n\r\n}());","/* global angular, emergence */\r\n\r\n(function () {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.directive('appear', [function () {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attributes) {\r\n scope.$on('onScrollbarDidChange', function ($scope, e) {\r\n var rect = {\r\n x: element[0].offsetLeft,\r\n y: element[0].offsetTop,\r\n width: element[0].offsetWidth,\r\n height: element[0].offsetHeight,\r\n }\r\n // console.log('appear.onScrollbarDidChange', e, rect);\r\n });\r\n }\r\n };\r\n }]);\r\n\r\n}());","/* global angular */\r\n\r\n(function () {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n \r\n app.directive('addthis', ['$parse', function ($parse) {\r\n return {\r\n restrict: 'A',\r\n scope: {\r\n item: '=addthis',\r\n }, \r\n link: function (scope, element, attributes) {\r\n if (!window.addthis) {\r\n return;\r\n }\r\n console.log('addthis', addthis, scope.item);\r\n addthis.layers.refresh();\r\n /*\r\n var config = {\r\n 'pubid': 'ra-5978b0f22e26faef',\r\n };\r\n var share = {\r\n url: \"THE URL\",\r\n title: \"THE TITLE\",\r\n description: \"THE DESCRIPTION\",\r\n media: \"THE IMAGE\",\r\n };\r\n addthis.share(element[0], config, share);\r\n */\r\n }\r\n };\r\n }]);\r\n\r\n /*\r\n app.directive('ctasFavourite', ['$log', '$timeout', function ($log, $timeout) {\r\n return {\r\n restrict: 'E',\r\n templateUrl: 'partials/ctas/favourite',\r\n scope: {},\r\n replace: true,\r\n link: function (scope, element, attrs) {\r\n scope.checked = false;\r\n function toggleFav() {\r\n $timeout(function () {\r\n scope.checked = !scope.checked;\r\n }, 0);\r\n };\r\n element[0].addEventListener('click', toggleFav);\r\n }\r\n }\r\n }]);\r\n */\r\n\r\n}());","/* global angular */\r\n\r\n(function () {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.directive('scrollbar', [function () {\r\n var isAndroid = navigator.userAgent.toLowerCase().indexOf(\"android\") > -1;\r\n var isMac = navigator.platform.toLowerCase().indexOf('mac') !== -1;\r\n var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;\r\n var isIE = navigator.userAgent.toLowerCase().indexOf('trident/') !== -1;\r\n\r\n // console.log('scrollbar', isAndroid, isMac, iOS);\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attributes) {\r\n if (isAndroid || isMac || iOS || isIE) {\r\n return;\r\n }\r\n var native = element[0];\r\n Scrollbar.use(window.OverscrollPlugin);\r\n var scrollbar = Scrollbar.init(native, {\r\n plugins: {\r\n overscroll: {},\r\n },\r\n });\r\n\r\n function onChange(e) {\r\n // console.log('scrollbar.onChange', e.offset.y, e.limit.y, native.offsetHeight);\r\n scope.$root.$broadcast('onScrollbarDidChange', {\r\n offset: e.offset,\r\n limit: e.limit,\r\n container: {\r\n width: native.offsetWidth,\r\n height: native.offsetHeight,\r\n }\r\n });\r\n }\r\n scrollbar.addListener(onChange);\r\n scope.$root.$broadcast('onScrollbarInit');\r\n scope.$on('onScrollbarShouldScrollTo', function ($scope, options) {\r\n // console.log('onScrollbarShouldScrollTo', options);\r\n if (document.querySelector(options.selector) === element[0]) {\r\n options.x += scrollbar.offset.x;\r\n options.y += scrollbar.offset.y;\r\n scrollbar.scrollTo(options.x || 0, options.y || 0, 0);\r\n }\r\n });\r\n }\r\n };\r\n }]);\r\n\r\n}());","/* global angular */\r\n\r\n(function () {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.directive('slickHero', ['$timeout', function ($timeout) {\r\n return {\r\n restrict: 'A',\r\n compile: function compile(element, attributes, transclude) {\r\n var html = element[0].innerHTML;\r\n return {\r\n pre: function (scope, element, attributes, controller) {\r\n var watch = attributes.slickHero;\r\n\r\n function doSlick(items) {\r\n if (element.find('> div').length > 0 && !element.hasClass('slick-initialized')) {\r\n element.slick({\r\n autoplay: true,\r\n autoplaySpeed: 4000,\r\n fade: false,\r\n arrows: false,\r\n dots: true,\r\n infinite: true,\r\n swipeToSlide: true\r\n });\r\n }\r\n }\r\n function onSlick(items) {\r\n if (element.hasClass('slick-initialized')) {\r\n element.slick('unslick');\r\n element.html(html);\r\n $compile(element.contents())(scope);\r\n }\r\n $timeout(function () {\r\n doSlick(items);\r\n });\r\n }\r\n scope.$watchCollection(watch, function (items) {\r\n $timeout(function () {\r\n onSlick(items);\r\n });\r\n });\r\n }\r\n }\r\n },\r\n };\r\n }]);\r\n\r\n app.directive('slickTrainings', ['$compile', '$timeout', function ($compile, $timeout) {\r\n return {\r\n restrict: 'A',\r\n compile: function compile(element, attributes, transclude) {\r\n var html = element[0].innerHTML;\r\n return {\r\n pre: function (scope, element, attributes, controller) {\r\n var watch = attributes.slickTrainings;\r\n function doSlick(items) {\r\n if (element.find('> div').length > 0 && !element.hasClass('slick-initialized')) {\r\n element.slick({\r\n autoplay: true,\r\n arrows: true,\r\n dots: false,\r\n fade: false,\r\n infinite: false,\r\n swipeToSlide: true,\r\n autoplaySpeed: 4000,\r\n slidesToShow: 3,\r\n slidesToScroll: 3,\r\n responsive: [{\r\n breakpoint: 1200,\r\n settings: {\r\n slidesToShow: 2,\r\n slidesToScroll: 2\r\n }\r\n }, {\r\n breakpoint: 960,\r\n settings: {\r\n slidesToShow: 1,\r\n slidesToScroll: 1\r\n }\r\n }],\r\n });\r\n var nodes = [].slice.call(element[0].querySelectorAll('.training-card'));\r\n if (items && items.length === nodes.length) {\r\n nodes.filter(function (node, i) {\r\n node = angular.element(node).contents();\r\n var $scope = scope.$new(false);\r\n $scope.item = items[i];\r\n $compile(node)($scope);\r\n });\r\n }\r\n }\r\n }\r\n function onSlick(items) {\r\n if (element.hasClass('slick-initialized')) {\r\n element.slick('unslick');\r\n element.html(html);\r\n $compile(element.contents())(scope);\r\n }\r\n $timeout(function () {\r\n doSlick(items);\r\n });\r\n }\r\n scope.$watchCollection(watch, function (items) {\r\n if (items) {\r\n $timeout(function () {\r\n onSlick(items);\r\n });\r\n }\r\n });\r\n }\r\n }\r\n },\r\n };\r\n }]);\r\n\r\n app.directive('slickFade', ['$timeout', function ($timeout) {\r\n return {\r\n restrict: 'A',\r\n compile: function compile(element, attributes, transclude) {\r\n var html = element[0].innerHTML;\r\n return {\r\n pre: function (scope, element, attributes, controller) {\r\n var watch = attributes.slickFade;\r\n\r\n function doSlick(items) {\r\n if (element.find('> div').length > 0 && !element.hasClass('slick-initialized')) {\r\n element.slick({\r\n autoplay: true,\r\n autoplaySpeed: 4000,\r\n fade: true,\r\n arrows: false,\r\n dots: false,\r\n infinite: true,\r\n swipeToSlide: true\r\n });\r\n }\r\n }\r\n function onSlick(items) {\r\n if (element.hasClass('slick-initialized')) {\r\n element.slick('unslick');\r\n element.html(html);\r\n $compile(element.contents())(scope);\r\n }\r\n $timeout(function () {\r\n doSlick(items);\r\n });\r\n }\r\n scope.$watchCollection(watch, function (items) {\r\n $timeout(function () {\r\n onSlick(items);\r\n });\r\n });\r\n }\r\n }\r\n },\r\n };\r\n }]);\r\n\r\n app.directive('slickHowto', ['$timeout', 'Utils', function ($timeout, Utils) {\r\n return {\r\n restrict: 'A',\r\n compile: function compile(element, attributes, transclude) {\r\n var html = element[0].innerHTML;\r\n return {\r\n pre: function (scope, element, attributes, controller) {\r\n var watch = attributes.slickHowto;\r\n\r\n var busy = false;\r\n\r\n function doSlick(items) {\r\n if (element.find('> section').length > 0 && !element.hasClass('slick-initialized')) {\r\n element.slick({\r\n autoplay: false,\r\n fade: false,\r\n arrows: false,\r\n dots: true,\r\n infinite: false,\r\n vertical: true,\r\n verticalSwiping: true,\r\n responsive: [{\r\n breakpoint: 719,\r\n settings: 'unslick'\r\n }],\r\n onAfterChange: function (e) {\r\n console.log('onAfterChange', e);\r\n busy = false;\r\n }\r\n });\r\n element.on('afterChange', function (e, slick, currentSlide, nextSlide) {\r\n // console.log('onAfterChange', e, slick, currentSlide, nextSlide);\r\n busy = false;\r\n });\r\n }\r\n }\r\n function onSlick(items) {\r\n if (element.hasClass('slick-initialized')) {\r\n element.slick('unslick');\r\n element.html(html);\r\n $compile(element.contents())(scope);\r\n }\r\n $timeout(function () {\r\n doSlick(items, 100);\r\n });\r\n }\r\n scope.$watchCollection(watch, function (items) {\r\n $timeout(function () {\r\n onSlick(items);\r\n });\r\n });\r\n\r\n function _onWheelSlick(e) {\r\n if (!busy) {\r\n busy = true;\r\n if (e.originalEvent.deltaY > 0) {\r\n element.slick('slickNext');\r\n } else {\r\n element.slick('slickPrev');\r\n }\r\n }\r\n }\r\n var onWheelSlick = Utils.throttle(_onWheelSlick, 2000);\r\n function onWheel(e) {\r\n var flag = false;\r\n if (window.innerWidth < 760) {\r\n return;\r\n }\r\n if (element.hasClass('slick-initialized')) {\r\n if (e.originalEvent.deltaY > 0) {\r\n flag = element.slick('slickCurrentSlide') < element[0].querySelectorAll('.slick-item').length - 1;\r\n } else {\r\n // flag = element.slick('slickCurrentSlide') > 0;\r\n }\r\n _onWheelSlick(e);\r\n if (flag) {\r\n e.stopImmediatePropagation;\r\n e.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n element.on('wheel', onWheel);\r\n\r\n scope.$on('destroy', function () {\r\n element.off('wheel', onWheel);\r\n });\r\n }\r\n }\r\n },\r\n };\r\n }]);\r\n\r\n}());","/* global angular */\r\n\r\n(function () {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.directive('tags', ['$parse', 'CONFIG', function ($parse, CONFIG) {\r\n return {\r\n restrict: 'A',\r\n templateUrl: 'partials/card/tags',\r\n scope: {\r\n tags: '=tags',\r\n },\r\n link: function (scope, element, attributes) {\r\n var tags = scope.tags, poi = null;\r\n if (tags) {\r\n var pois = tags.filter(function (item) {\r\n return item.category === 3;\r\n });\r\n if (pois.length) {\r\n poi = pois[0];\r\n }\r\n }\r\n scope.poi = poi;\r\n scope.getPoiDirections = getPoiDirections;\r\n function getPoiDirections(item) {\r\n window.location.href = CONFIG.app.mapUrl + '?poiId=' + item.id;\r\n return true;\r\n }\r\n }\r\n };\r\n }]);\r\n\r\n}());","/* global angular, window, document, console, GlslCanvas */\r\n\r\n(function () {\r\n \"use strict\";\r\n\r\n if (!Array.prototype.fill) {\r\n Object.defineProperty(Array.prototype, 'fill', {\r\n value: function (value) {\r\n\r\n // Steps 1-2.\r\n if (this == null) {\r\n throw new TypeError('this is null or not defined');\r\n }\r\n\r\n var O = Object(this);\r\n\r\n // Steps 3-5.\r\n var len = O.length >>> 0;\r\n\r\n // Steps 6-7.\r\n var start = arguments[1];\r\n var relativeStart = start >> 0;\r\n\r\n // Step 8.\r\n var k = relativeStart < 0 ?\r\n Math.max(len + relativeStart, 0) :\r\n Math.min(relativeStart, len);\r\n\r\n // Steps 9-10.\r\n var end = arguments[2];\r\n var relativeEnd = end === undefined ?\r\n len : end >> 0;\r\n\r\n // Step 11.\r\n var final = relativeEnd < 0 ?\r\n Math.max(len + relativeEnd, 0) :\r\n Math.min(relativeEnd, len);\r\n\r\n // Step 12.\r\n while (k < final) {\r\n O[k] = value;\r\n k++;\r\n }\r\n\r\n // Step 13.\r\n return O;\r\n }\r\n });\r\n }\r\n\r\n var app = angular.module('app');\r\n\r\n app.service('TrailService', [function () {\r\n var service = this;\r\n service.mouse = new Float32Array([0.0, 0.0]);\r\n service.history = [];\r\n service.trails = new Array(10).fill(null).map(function () {\r\n return new Float32Array([0.0, 0.0]);\r\n });\r\n\r\n var publics = {\r\n uniforms: uniforms,\r\n move: move,\r\n push: throttle(_push, 1000 / 60),\r\n update: update,\r\n };\r\n\r\n angular.extend(service, publics);\r\n\r\n // statics\r\n\r\n var getNow = Date.now || function () {\r\n return new Date().getTime();\r\n };\r\n\r\n function throttle(func, wait, options) {\r\n // Returns a function, that, when invoked, will only be triggered at most once\r\n // during a given window of time. Normally, the throttled function will run\r\n // as much as it can, without ever going more than once per `wait` duration;\r\n // but if you'd like to disable the execution on the leading edge, pass\r\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\r\n var context, args, result;\r\n var timeout = null;\r\n var previous = 0;\r\n if (!options) options = {};\r\n var later = function () {\r\n previous = options.leading === false ? 0 : getNow();\r\n timeout = null;\r\n result = func.apply(context, args);\r\n if (!timeout) context = args = null;\r\n };\r\n return function () {\r\n var now = getNow();\r\n if (!previous && options.leading === false) previous = now;\r\n var remaining = wait - (now - previous);\r\n context = this;\r\n args = arguments;\r\n if (remaining <= 0 || remaining > wait) {\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n timeout = null;\r\n }\r\n previous = now;\r\n result = func.apply(context, args);\r\n if (!timeout) context = args = null;\r\n } else if (!timeout && options.trailing !== false) {\r\n timeout = setTimeout(later, remaining);\r\n }\r\n return result;\r\n };\r\n }\r\n\r\n // publics\r\n\r\n var ti = 0;\r\n\r\n function loop() {\r\n var trails = service.trails,\r\n history = service.history,\r\n mouse = service.mouse;\r\n var i = 0,\r\n t = trails.length;\r\n var tx = history.length ? history[0] : mouse;\r\n while (i < t) {\r\n var e = (i > 0 ? trails[i - 1] : tx);\r\n var v = trails[i];\r\n var friction = 1.0 / (5.0 + i);\r\n v[0] += (e[0] - v[0]) * friction;\r\n v[1] += (e[1] - v[1]) * friction;\r\n i++;\r\n }\r\n if (history.length) {\r\n history.shift();\r\n }\r\n window.requestAnimationFrame(loop);\r\n }\r\n\r\n function uniforms(glsl, node) {\r\n var trails = service.trails;\r\n var i = 0,\r\n t = trails.length;\r\n while (i < t) {\r\n var x = trails[i][0];\r\n var y = trails[i][1];\r\n if (node) {\r\n var rect = node.getBoundingClientRect();\r\n x = x - rect.left;\r\n y = rect.top + rect.height - y;\r\n }\r\n service.update(glsl, '2fv', 'vec2', 'u_trails[' + i + ']', new Float32Array([x, y]));\r\n i++;\r\n }\r\n }\r\n\r\n function update(glsl, method, type, name, value) {\r\n try {\r\n var u = glsl.uniforms[name] = glsl.uniforms[name] || {};\r\n u.name = name;\r\n u.value = value;\r\n u.type = type;\r\n u.method = 'uniform' + method;\r\n u.location = glsl.gl.getUniformLocation(glsl.program, name);\r\n glsl.gl[u.method].apply(glsl.gl, [u.location].concat(u.value));\r\n } catch (e) {\r\n console.log('fastUpdate', e);\r\n }\r\n }\r\n\r\n function move(x, y) {\r\n var service = this,\r\n mouse = service.mouse;\r\n mouse[0] = x;\r\n mouse[1] = y;\r\n service.push();\r\n }\r\n\r\n function _push() {\r\n service.history.push(new Float32Array(service.mouse));\r\n }\r\n\r\n angular.element(window).on('mousemove', function (e) {\r\n service.move(e.clientX, e.clientY);\r\n // console.log(e.clientY, document.querySelector('[water]').getBoundingClientRect().y);\r\n });\r\n\r\n loop();\r\n\r\n }]);\r\n\r\n app.service('WebGLCapabilities', [function () {\r\n var service = this;\r\n var gl;\r\n try {\r\n var canvas = document.createElement('canvas');\r\n if (!!window.WebGLRenderingContext) {\r\n gl = canvas.getContext('webgl', {\r\n failIfMajorPerformanceCaveat: true\r\n }) ||\r\n canvas.getContext('experimental-webgl', {\r\n failIfMajorPerformanceCaveat: true\r\n });\r\n }\r\n } catch (e) {\r\n console.log('no webgl');\r\n }\r\n if (gl) {\r\n var debugInfo = gl.getExtension('WEBGL_debug_renderer_info');\r\n service.debugInfo = debugInfo;\r\n service.vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);\r\n service.renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);\r\n service.has = true;\r\n }\r\n console.log('WebGLCapabilities.debugInfo', service.debugInfo);\r\n console.log('WebGLCapabilities.vendor', service.vendor);\r\n console.log('WebGLCapabilities.renderer', service.renderer);\r\n }]);\r\n\r\n app.directive('water', ['$parse', 'WebGLCapabilities', 'TrailService', 'CONFIG', function ($parse, WebGLCapabilities, TrailService, CONFIG) {\r\n\r\n function detectIE() {\r\n var ua = window.navigator.userAgent;\r\n var msie = ua.indexOf('MSIE ');\r\n if (msie > 0) {\r\n // IE 10 or older => return version number\r\n return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\r\n }\r\n var trident = ua.indexOf('Trident/');\r\n if (trident > 0) {\r\n // IE 11 => return version number\r\n var rv = ua.indexOf('rv:');\r\n return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\r\n }\r\n var edge = ua.indexOf('Edge/');\r\n if (edge > 0) {\r\n // Edge (IE 12+) => return version number\r\n return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\r\n }\r\n // other browser\r\n return false;\r\n }\r\n\r\n var isIE = detectIE();\r\n\r\n return {\r\n restrict: 'A',\r\n template: '',\r\n link: function (scope, element, attributes) {\r\n\r\n if (CONFIG.app.url.indexOf('localhost') !== -1) {\r\n return;\r\n }\r\n\r\n if (isIE) {\r\n return;\r\n }\r\n\r\n if (!WebGLCapabilities.has) {\r\n return;\r\n }\r\n\r\n var o = 1; // important\r\n var fragment = document.getElementById('fragment').innerHTML;\r\n var vertex = ''; // document.getElementById('vertex').innerHTML;\r\n var content = element[0];\r\n var canvas = element[0].querySelector('.shader');\r\n var trails = TrailService;\r\n\r\n onResize();\r\n\r\n var glsl = new GlslCanvas(canvas);\r\n glsl.on('error', onGlslError);\r\n\r\n load();\r\n\r\n function load() {\r\n if (vertex.trim().length > 0) {\r\n glsl.load(fragment, vertex);\r\n } else if (fragment) {\r\n glsl.load(fragment);\r\n }\r\n glsl.setUniform('u_mix', $parse(attributes.mix)(scope) || 0.5);\r\n /*\r\n for (var p in window.uniforms) {\r\n glsl.setUniform(p, window.uniforms[p]);\r\n }\r\n for (var p in window.textures) {\r\n glsl.setUniform('u_texture_' + p, window.textures[p]);\r\n }\r\n */\r\n glsl.on('render', function () {\r\n trails.uniforms(glsl, content);\r\n glsl.forceRender = true;\r\n });\r\n }\r\n\r\n function onResize() {\r\n var w = content.offsetWidth + o;\r\n var h = content.offsetHeight + o;\r\n canvas.style.width = w + 'px';\r\n canvas.style.height = h + 'px';\r\n canvas.width = w;\r\n canvas.height = h;\r\n o = 0;\r\n }\r\n\r\n function onDown() {\r\n if (glsl.paused) {\r\n if (glsl.timePause) {\r\n glsl.timePrev = new Date();\r\n glsl.timeLoad += (glsl.timePrev - glsl.timePause);\r\n }\r\n glsl.play();\r\n } else {\r\n glsl.pause();\r\n glsl.timePause = new Date();\r\n }\r\n }\r\n\r\n function onGlslError(message) {\r\n var errors = [],\r\n warnings = [];\r\n message.error.replace(/ERROR: \\d+:(\\d+): \\'(.+)\\' : (.+)/g, function (m, l, v, t) {\r\n var li = '
  • ERROR line ' + Number(l) + ' ' + v + ' ' + t + '
  • ';\r\n errors.push(li);\r\n return li;\r\n });\r\n message.error.replace(/WARNING: \\d+:(\\d+): \\'(.*\\n*|.*|\\n*)\\' : (.+)/g, function (m, l, v, t) {\r\n var li = '
  • WARN line ' + Number(l) + ' ' + t + '
  • ';\r\n warnings.push(li);\r\n return li;\r\n });\r\n console.log('onGlslError.error', errors, warnings);\r\n }\r\n\r\n canvas.addEventListener('mousedown', onDown);\r\n window.addEventListener('resize', onResize);\r\n onResize();\r\n }\r\n };\r\n }]);\r\n\r\n}());","/* global angular */\r\n\r\n(function () {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.filter('notInArray', ['$filter', function ($filter) {\r\n return function (array, filters, element) {\r\n if (filters) {\r\n return $filter(\"filter\")(array, function (item) {\r\n for (var i = 0; i < filters.length; i++) {\r\n if (filters[i][element] === item[element])\r\n return false;\r\n }\r\n return true;\r\n });\r\n }\r\n };\r\n }]);\r\n\r\n app.filter('name', ['$filter', function ($filter) {\r\n return function (value) {\r\n return value.replace(/\\-/g, ' ');\r\n };\r\n }]);\r\n\r\n app.filter('minutes', ['$filter', function ($filter) {\r\n return function (value) {\r\n //return value + ' min';\r\n return (value / 60 >= 1 ? (parseInt(value / 60) + \"h\") : \"\") + (value % 60 > 0 ? value % 60 + \"'\" : \"\")\r\n };\r\n }]);\r\n\r\n app.filter('seconds', ['$filter', function ($filter) {\r\n return function (value) {\r\n var seconds = (value / 60 >= 1 ? (parseInt(value / 60) + \"'\") : \"\") + (value % 60 > 0 ? value % 60 + \"\\\"\" : \"\");\r\n return seconds || \" - \";\r\n };\r\n }]); \r\n\r\n app.filter('groupBy', ['$parse', function ($parse) {\r\n return function (array, prop) {\r\n var key, pool = {}, results = [];\r\n angular.forEach(array, function (item) {\r\n key = item[prop];\r\n pool[key] = pool[key] || [];\r\n pool[key].push(item);\r\n });\r\n angular.forEach(pool, function (items, key) {\r\n results.push({\r\n key: key,\r\n items: items,\r\n });\r\n });\r\n return results;\r\n }\r\n }]);\r\n\r\n app.filter('groupPropsByKeyValue', ['$parse', function ($parse) {\r\n return function (array, prop, key,value) {\r\n var _key, pool = {}, results = [];\r\n angular.forEach(array, function (item, i) { \r\n if (item[prop] instanceof Array) {\r\n angular.forEach(item[prop], function (elem) {\r\n if (elem[key]) {\r\n _key = elem[key];\r\n if (pool[_key] == null) {\r\n results.push({ key: _key, value: elem[value] });\r\n pool[_key] = true;\r\n }\r\n }\r\n })\r\n } else {\r\n if (item[prop] && item[prop][key]) {\r\n _key = item[prop][key];\r\n if (pool[_key] == null) {\r\n results.push({ key: _key, value: item[prop][value] });\r\n pool[_key] = true;\r\n }\r\n }\r\n } \r\n });\r\n return results;\r\n }\r\n }]);\r\n\r\n app.filter('byCategory', ['$filter', function ($filter) {\r\n return function (array, category) {\r\n return array.filter(function (item) {\r\n if (category) {\r\n return item.tags && item.tags.length && item.tags[0].id === category.id;\r\n /*\r\n if (category.ids) {\r\n for (var i = 0; i < category.ids.length; i++) {\r\n var id = category.ids[i];\r\n if (item.tags) {\r\n if (item.tags[0].id === id) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n */\r\n } else {\r\n return true;\r\n }\r\n });\r\n };\r\n }]);\r\n\r\n app.filter('byFilters', ['$filter', function ($filter) {\r\n return function (array, filters) {\r\n return array.filter(function (item) {\r\n if (filters.area && filters.area.id) {\r\n var has = false;\r\n if (item.tags) {\r\n var i = 0, t = item.tags.length;\r\n while (i < t) {\r\n if (item.tags[i].id === filters.area.id && item.tags[i].category === 1) {\r\n has = true;\r\n i = t;\r\n }\r\n i++;\r\n }\r\n }\r\n return has;\r\n /*} else\r\n if (filters.category && filters.category.id) {\r\n var has = false;\r\n if (item.tags) {\r\n var i = 0, t = item.tags.length;\r\n while (i < t) {\r\n if (item.tags[i].id === filters.category.id && item.tags[i].category == 0) {\r\n has = true;\r\n i = t;\r\n }\r\n i++;\r\n }\r\n }\r\n return has;\r\n */\r\n } else {\r\n return true;\r\n }\r\n });\r\n };\r\n }]);\r\n\r\n app.filter('resultByCategoryList', ['$filter', function ($filter) {\r\n return function (array, category) {\r\n return array.filter(function (item) {\r\n if (category) {\r\n if (category.ids) {\r\n for (var i = 0; i < category.ids.length; i++) {\r\n var id = category.ids[i];\r\n if (item.tags) {\r\n if (item.tags[0].id === id) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n });\r\n };\r\n }]);\r\n\r\n app.filter('duration', ['$filter', 'CONFIG', function ($filter, CONFIG) {\r\n return function (duration) {\r\n if (duration) {\r\n var date = new Date();\r\n date.setHours(0);\r\n date.setMinutes(duration);\r\n date.setSeconds(0);\r\n var hours = date.getHours();\r\n var minutes = date.getMinutes();\r\n return (hours ? hours + 'h' : '') + ' ' + (minutes ? minutes + 'm' : '');\r\n // return $filter('date')(date, 'hh mm');\r\n } else {\r\n return '-';\r\n }\r\n };\r\n }]);\r\n\r\n app.filter('price', ['$filter', 'CONFIG', function ($filter, CONFIG) {\r\n return function (price) {\r\n return price === 0 ? 'Free' : $filter('currency')(price, '€');\r\n };\r\n }]);\r\n\r\n app.filter('tagColors', ['$filter', function ($filter) {\r\n return function (tags) {\r\n var color = 'default';\r\n var colors = ['learn', 'improve', 'speed', 'endurance', 'fatburning', 'feelgood'];\r\n if (tags) {\r\n tags.filter(function (item) {\r\n if (item.category === 2 && colors.indexOf(item.code) !== -1) {\r\n color = item.code;\r\n }\r\n });\r\n }\r\n return color;\r\n };\r\n }]);\r\n\r\n app.filter('tagNames', ['$filter', function ($filter) {\r\n return function (tags, category) {\r\n if (tags) {\r\n tags = tags.filter(function (item) {\r\n if (category) {\r\n return item.category === category;\r\n } else {\r\n return item.category === 0 || item.category === 1 || item.category === 2;\r\n }\r\n }).map(function (item) {\r\n return item.name;\r\n });\r\n return tags.join(', ');\r\n } else {\r\n return null;\r\n }\r\n };\r\n }]);\r\n \r\n app.filter('tagPois', ['$filter', function ($filter) {\r\n return function (tags, category) {\r\n if (tags) {\r\n var pois = tags.filter(function (item) {\r\n return item.category === 3;\r\n });\r\n if (pois.length) {\r\n var poi = pois[0];\r\n return poi.name + ', ' + poi.code;\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return null;\r\n }\r\n };\r\n }]);\r\n\r\n}());","/* global angular */\r\n\r\n(function () {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.controller('AuthCtrl', ['$rootScope', '$scope', '$controller', 'State', 'api', 'Upload', 'Account', 'FacebookService', 'gtm', 'Wishlist', 'CONFIG', function ($rootScope, $scope, $controller, State, api, Upload, Account, FB, gtm, Wishlist, CONFIG) {\r\n\r\n $controller('FormCtrl', {\r\n $scope: $scope\r\n });\r\n\r\n var state = new State(),\r\n stateLogin = new State(),\r\n stateSignUp = new State(),\r\n stateForgot = new State(),\r\n stateFacebook = new State();\r\n\r\n var loc = CONFIG.app.locale;\r\n var model = {\r\n setPsw: true,\r\n _targets: null //temp private property\r\n };\r\n var viewbag = {\r\n forgotting: false\r\n };\r\n var data = {\r\n birthDate: {\r\n value: null,\r\n days: function () { return Array.apply(null, Array(new Date(this.year || new Date().getFullYear(), this.month || 0, 0).getDate())).map(function (_, i) { return i + 1 }) },\r\n day: null,\r\n months: Array.apply(null, Array(12)).map(function (_, i) { return i + 1; }),\r\n month: null,\r\n years: Array.apply(null, Array(90)).map(function (_, i) { return new Date().getFullYear() - 10 - i; }),\r\n year: null,\r\n onChange: function () { this.value = !this.day || !this.month || !this.year ? null : new Date(Date.UTC(this.year, this.month - 1, this.day, 12)) }\r\n }\r\n };\r\n\r\n Account.getUser().then(function (user) {\r\n model.user = user;\r\n state.ready();\r\n });\r\n\r\n function getRegisterData() {\r\n api.data.register().then(function (response) {\r\n angular.extend(data, response.data);\r\n });\r\n }\r\n\r\n function getEditData() {\r\n api.user.detail().then(function (response) {\r\n angular.extend(model.user, response.data);\r\n\r\n model.setPsw = false;\r\n\r\n if (model.user.birthDate) {\r\n model.user.birthDate = new Date(model.user.birthDate);\r\n data.birthDate.day = model.user.birthDate.getDate();\r\n data.birthDate.month = model.user.birthDate.getMonth() + 1;\r\n data.birthDate.year = model.user.birthDate.getFullYear();\r\n }\r\n\r\n var t = model.user.targets.split(\",\");\r\n for (var i in t)\r\n if (t[i] != \"\")\r\n addTarget(parseInt(t[i]));\r\n\r\n model.isCoach = model.user.profile == 2;\r\n\r\n });\r\n getRegisterData();\r\n }\r\n\r\n function addTarget(id) {\r\n if (!model._targets) model._targets = {};\r\n if (model._targets[id]) {\r\n delete model._targets[id];\r\n if (Object.keys(model._targets).length == 0) model._targets = null;\r\n }\r\n else\r\n model._targets[id] = true;\r\n\r\n // fill model\r\n var _tmp = \"\", _keys = Object.keys(model._targets);\r\n for (var i = 0; i < _keys.length; i++) {\r\n _tmp += ',' + _keys[i];\r\n }\r\n if (_tmp != \"\")\r\n _tmp += ',';\r\n model.user.targets = _tmp;\r\n }\r\n\r\n function onUploadFileSelected(file, newFiles) {\r\n if (!file) {\r\n return;\r\n }\r\n Array.isArray(file) ? file = file[0] : null;\r\n model.avatarBase64 = null;\r\n Upload.resize(file, 512, 512, .9, 'image/jpeg', null, true).then(function (resized) {\r\n Upload.dataUrl(resized, true).then(function (url) {\r\n model.avatarBase64 = url;\r\n });\r\n });\r\n }\r\n\r\n\r\n function signin() {\r\n if (stateLogin.busy()) {\r\n api.user.login(model.user).then(function (response) {\r\n stateLogin.success(); \r\n gtm.push({\r\n event: 'Login',\r\n user: response.data.id, \r\n user_type: response.data.profile\r\n });\r\n onPostLogin(response.data);\r\n }, function (error) {\r\n stateLogin.error(error);\r\n });\r\n }\r\n }\r\n\r\n function onPostLogin(user) {\r\n Account.setUser(user);\r\n Wishlist.get();\r\n $rootScope.$broadcast('onAuthUserChange');\r\n //$rootScope.$broadcast('loadUserModal');\r\n location.href = CONFIG.app.pages.home;\r\n }\r\n \r\n function loginFb() {\r\n if (stateFacebook.busy()) {\r\n FB.login().then(function (response) {\r\n stateFacebook.success();\r\n if (response.status === 'connected')\r\n api.user.loginFb(response.authResponse.accessToken).then(function (response) {\r\n gtm.push({\r\n event: 'FacebookLogin',\r\n user: response.data.id,\r\n user_type: response.data.profile\r\n });\r\n onPostLogin(response.data);\r\n }, function (error) {\r\n stateFacebook.error(error);\r\n });\r\n }, function (error) {\r\n stateFacebook.error(error);\r\n });\r\n }\r\n }\r\n\r\n function forgot() {\r\n if (stateForgot.busy()) { \r\n api.user.forgot(model).then(function (response) {\r\n stateForgot.success();\r\n gtm.push({\r\n event: 'ForgotPsw'\r\n });\r\n }, function (error) {\r\n model.emailNotFound = model.email;\r\n stateForgot.error(error);\r\n });\r\n }\r\n }\r\n\r\n function register() {\r\n if (stateSignUp.busy()) {\r\n onPreSignUp(model);\r\n api.user.register(model).then(function (response) {\r\n stateSignUp.success(); \r\n var user = response.data;\r\n gtm.push({\r\n event: 'Register',\r\n user: user.id,\r\n user_type: user.profile\r\n });\r\n // autologin \r\n //signin();\r\n //location.href = \"/\";\r\n }, function (error) {\r\n stateSignUp.error(error);\r\n });\r\n }\r\n }\r\n\r\n function edit() {\r\n if (stateSignUp.busy()) {\r\n onPreSignUp(model);\r\n api.user.edit(model).then(function (response) {\r\n stateSignUp.success();\r\n }, function (error) {\r\n stateSignUp.error(error);\r\n });\r\n }\r\n }\r\n\r\n function editPassword() {\r\n if (stateSignUp.busy()) { \r\n api.user.editPassword({ tokenEncoded: model.tokenEncoded, email: model.user.email, password: model.user.password }).then(function (response) {\r\n stateSignUp.success();\r\n }, function (error) { \r\n stateSignUp.error(error);\r\n });\r\n } \r\n }\r\n\r\n function deleteAccount() {\r\n if (stateSignUp.busy()) { \r\n api.user.delete({ tokenEncoded: model.tokenEncoded, email: model.user.email }).then(function (response) {\r\n stateSignUp.success();\r\n }, function (error) {\r\n stateSignUp.error(error);\r\n }); \r\n }\r\n }\r\n\r\n function onPreSignUp(model) {\r\n if (model.user.birthDate) {\r\n model.user.birthDate = new Date(Date.UTC(model.user.birthDate.getFullYear(), model.user.birthDate.getMonth(), model.user.birthDate.getDate(), model.user.birthDate.getHours()));\r\n }\r\n if (data.birthDate && data.birthDate.value) {\r\n model.user.birthDate = data.birthDate.value;\r\n }\r\n } \r\n \r\n function logout() {\r\n if (stateLogin.busy()) {\r\n api.user.logout().then(function () { \r\n gtm.push({\r\n event: 'Logout',\r\n user: Account.user.id,\r\n user_type: Account.user.profile\r\n });\r\n stateLogin.success();\r\n Account.setUser(null);\r\n Booking.getCart();\r\n $rootScope.$broadcast('onAuthUserChange');\r\n // Wishlist.empty();\r\n // FB.logout(); \r\n location.href = CONFIG.app.pages.home;\r\n\r\n if ($scope.modal) {\r\n $scope.modal.reject(null);\r\n }\r\n });\r\n }\r\n }\r\n\r\n $scope.state = state;\r\n $scope.stateLogin = stateLogin;\r\n $scope.stateSignUp = stateSignUp;\r\n $scope.stateForgot = stateForgot;\r\n $scope.stateFacebook = stateFacebook;\r\n $scope.loc = loc;\r\n $scope.model = model;\r\n $scope.data = data;\r\n $scope.getRegisterData = getRegisterData;\r\n $scope.getEditData = getEditData;\r\n $scope.addTarget = addTarget; \r\n $scope.onUploadFileSelected = onUploadFileSelected;\r\n\r\n $scope.signin = signin;\r\n $scope.loginFb = loginFb;\r\n $scope.forgot = forgot;\r\n $scope.register = register;\r\n $scope.edit = edit;\r\n $scope.editPassword = editPassword;\r\n $scope.deleteAccount = deleteAccount;\r\n $scope.logout = logout;\r\n $scope.viewbag = viewbag; \r\n\r\n }]);\r\n\r\n app.service('Account', ['$q', 'api', 'SessionStorage', 'CONFIG', function ($q, api, storage, CONFIG) {\r\n var service = this;\r\n var key = 'user';\r\n var user = null;\r\n\r\n function getUser(refresh) {\r\n var deferred = $q.defer();\r\n if (!refresh && !storage.exists(key)) {\r\n refresh = true;\r\n }\r\n if (refresh) {\r\n api.user.me().then(function (response) {\r\n setUser(response.data || null);\r\n deferred.resolve(user);\r\n }, function (error) {\r\n setUser(null);\r\n deferred.resolve(user);\r\n });\r\n } else {\r\n setUser(storage.get(key));\r\n deferred.resolve(user);\r\n }\r\n return deferred.promise;\r\n }\r\n\r\n function setUser(data) {\r\n user = data;\r\n storage.set(key, data);\r\n service.user = user;\r\n }\r\n\r\n function getShortName() {\r\n return user.firstName.substr(0, 1) + '. ' + user.lastName;\r\n }\r\n\r\n function isLogged() {\r\n return user !== null;\r\n }\r\n\r\n this.user = user;\r\n this.getUser = getUser;\r\n this.setUser = setUser;\r\n this.getShortName = getShortName;\r\n this.isLogged = isLogged;\r\n }]);\r\n\r\n app.factory('FacebookService', ['$q', 'CONFIG', function ($q, CONFIG) {\r\n\r\n function FacebookService() { }\r\n\r\n function onFacebookStatus(response, deferred, init) {\r\n FacebookService.authResponse = null;\r\n if (response.status === 'connected') {\r\n FacebookService.authResponse = response.authResponse;\r\n deferred.resolve(response);\r\n } else if (response.status === 'not_authorized') {\r\n if (init) {\r\n deferred.resolve(response);\r\n } else {\r\n deferred.reject(response);\r\n }\r\n } else {\r\n deferred.reject(response);\r\n }\r\n }\r\n\r\n FacebookService.FB = function () {\r\n var deferred = $q.defer();\r\n if (window.FB !== undefined) {\r\n deferred.resolve(window.FB);\r\n } else {\r\n FacebookService.init().then(function (success) {\r\n deferred.resolve(window.FB);\r\n }, function (error) {\r\n deferred.reject(error);\r\n });\r\n }\r\n return deferred.promise;\r\n };\r\n\r\n FacebookService.getFacebookMe = function () {\r\n var deferred = $q.defer();\r\n FacebookService.FB().then(function (facebook) {\r\n facebook.api('/me', { fields: 'id,name,first_name,last_name,email,gender,picture,cover,link' }, function (response) {\r\n if (!response || response.error) {\r\n deferred.reject('Error occured');\r\n } else {\r\n deferred.resolve(response);\r\n }\r\n });\r\n });\r\n return deferred.promise;\r\n };\r\n\r\n FacebookService.getPictureMe = function () {\r\n var deferred = $q.defer();\r\n FacebookService.FB().then(function (facebook) {\r\n facebook.api('/me/picture', { width: 300, height: 300, type: 'square' }, function (response) {\r\n if (!response || response.error) {\r\n deferred.reject('Error occured');\r\n } else {\r\n deferred.resolve(response);\r\n }\r\n });\r\n });\r\n return deferred.promise;\r\n };\r\n\r\n FacebookService.login = function () {\r\n var deferred = $q.defer();\r\n FacebookService.FB().then(function (facebook) {\r\n facebook.login(function (response) {\r\n onFacebookStatus(response, deferred);\r\n }, {\r\n scope: 'public_profile, email' // publish_stream,\r\n });\r\n });\r\n return deferred.promise;\r\n };\r\n\r\n FacebookService.logout = function () {\r\n var deferred = $q.defer();\r\n FacebookService.FB().then(function (facebook) {\r\n facebook.logout(function (response) {\r\n deferred.resolve(response);\r\n });\r\n });\r\n return deferred.promise;\r\n };\r\n\r\n FacebookService.init = function () {\r\n var deferred = $q.defer();\r\n window.fbAsyncInit = function () {\r\n FB.init({\r\n appId: CONFIG.app.FACEBOOK_APP_ID,\r\n status: true,\r\n cookie: true,\r\n xfbml: true,\r\n version: 'v2.12'\r\n });\r\n deferred.resolve(FB);\r\n };\r\n try {\r\n (function (d, s, id) {\r\n var js, fjs = d.getElementsByTagName(s)[0];\r\n if (d.getElementById(id)) { return; }\r\n js = d.createElement(s);\r\n js.id = id;\r\n js.src = \"//connect.facebook.net/en_US/sdk.js\";\r\n fjs.parentNode.insertBefore(js, fjs);\r\n }(document, 'script', 'facebook-jssdk'));\r\n } catch (e) {\r\n deferred.reject(e);\r\n }\r\n return deferred.promise;\r\n };\r\n\r\n FacebookService.init();\r\n\r\n return FacebookService;\r\n }]);\r\n\r\n}());","/* global angular */\r\n\r\n(function () {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.controller('GlossaryCtrl', ['$scope', '$filter', 'gtm', 'State', 'api', function ($scope, $filter, gtm, State, api) {\r\n\r\n var state = new State();\r\n var model = {};\r\n var sources = {};\r\n var letters = [];\r\n\r\n var publics = {\r\n state: state,\r\n model: model,\r\n sources: sources,\r\n search: search,\r\n toggleInitial: toggleInitial,\r\n };\r\n\r\n angular.extend($scope, publics);\r\n\r\n function setGlossary(data) {\r\n var index = {}, glossary = [], letters = [];\r\n angular.forEach(data, function (description, name) {\r\n var initial = name.substr(0, 1).toUpperCase();\r\n var name = initial + name.substr(1, name.length - 1).toLowerCase();\r\n index[initial] = true;\r\n if (letters.indexOf(initial) === -1) {\r\n letters.push(initial);\r\n }\r\n if (glossary.length < 100) {\r\n glossary.push({\r\n initial: initial,\r\n name: name,\r\n description: description,\r\n });\r\n }\r\n // console.log('GlossaryCtrl.getGlossary', term);\r\n });\r\n // console.log('GlossaryCtrl.getGlossary', glossary[0]);\r\n sources.letters = letters.sort();\r\n sources.glossary = glossary.sort(function (a, b) {\r\n var a = a.name.toUpperCase();\r\n var b = b.name.toUpperCase();\r\n return (a < b) ? -1 : (a > b) ? 1 : 0;\r\n });\r\n }\r\n\r\n function search() {\r\n var glossary = sources.glossary;\r\n if (model.search) {\r\n var s = model.search.toLowerCase();\r\n glossary = glossary.filter(function (item) {\r\n return (item.name.toLowerCase().indexOf(s) !== -1);\r\n });\r\n sources.initial = null;\r\n // gtm\r\n gtm.push({\r\n event: 'Search',\r\n type: 'Glossary',\r\n query: model.search\r\n });\r\n }\r\n if (sources.initial) {\r\n glossary = glossary.filter(function (item) {\r\n return item.initial === sources.initial;\r\n });\r\n }\r\n var results = $filter('groupBy')(glossary, 'initial').sort(function (a, b) {\r\n var a = a.key.toUpperCase();\r\n var b = b.key.toUpperCase();\r\n return (a < b) ? -1 : (a > b) ? 1 : 0;\r\n });\r\n sources.results = results;\r\n // console.log('GlossaryCtrl.search', model.search, results.length);\r\n }\r\n\r\n function Init() {\r\n if (state.busy()) {\r\n api.glossary().then(function (response) {\r\n setGlossary(response.data);\r\n search();\r\n // console.log(sources.glossary.length);\r\n state.ready();\r\n }, function (error) {\r\n state.error(error);\r\n });\r\n }\r\n }\r\n\r\n function toggleInitial(initial) {\r\n if (sources.initial === initial) {\r\n sources.initial = null;\r\n } else {\r\n sources.initial = initial;\r\n }\r\n search();\r\n }\r\n\r\n Init();\r\n\r\n }]);\r\n\r\n}());","(function () {\r\n 'use strict';\r\n\r\n var app = angular.module('app');\r\n\r\n app.controller('CoachCtrl', ['$scope', '$filter', 'gtm', 'Account', 'api', 'CONFIG', '$timeout', function ($scope, $filter, gtm, Account, api, CONFIG, $timeout) {\r\n\r\n var model = {\r\n me: {},\r\n all: [],\r\n chart: [],\r\n charts: [],\r\n activeChart: {},\r\n top: [], //top coach highlights\r\n sorting: '-id',\r\n filters: [],\r\n query: {}\r\n };\r\n\r\n var data = {\r\n sorting: [{\r\n id: '-id',\r\n name: CONFIG.app.locale[\"sortby_createdDate\"]\r\n },\r\n {\r\n id: '-rating',\r\n name: CONFIG.app.locale[\"sortby_rating\"]\r\n },\r\n {\r\n id: 'lastName',\r\n name: CONFIG.app.locale[\"sortby_name\"]\r\n },\r\n ],\r\n paging: {\r\n all: {\r\n items: 40, // x page\r\n page: 1\r\n },\r\n chart: {\r\n items: 10, // x page\r\n page: 1\r\n }\r\n },\r\n coaches: [{\r\n id: 0,\r\n name: CONFIG.app.locale[\"coach_community\"]\r\n }, {\r\n id: 1,\r\n name: CONFIG.app.locale[\"coach_arena\"]\r\n }, {\r\n id: 2,\r\n name: CONFIG.app.locale[\"coach_top\"]\r\n }],\r\n _searchTerm: \"\"\r\n };\r\n\r\n var scope = {\r\n model: model,\r\n data: data,\r\n all: all,\r\n chart: chart,\r\n mychart: mychart,\r\n onChartTypeChange: onChartTypeChange,\r\n setFilter: setFilter,\r\n removeFilter: removeFilter\r\n };\r\n\r\n angular.extend($scope, scope);\r\n\r\n function all() {\r\n api.coach.chart.all().then(function (response) {\r\n setCharts(response);\r\n model.all = model.chart.total;\r\n });\r\n api.coach.top().then(function (response) {\r\n model.top = response.data || [];\r\n });\r\n }\r\n\r\n function chart() {\r\n api.coach.chart.all().then(function (response) {\r\n setCharts(response);\r\n });\r\n }\r\n\r\n function mychart() {\r\n api.coach.chart.me().then(function (response) {\r\n setCharts(response);\r\n if (Account.user) {\r\n setMe(Account.user);\r\n } else {\r\n Account.getUser().then(function (user) {\r\n setMe(user);\r\n });\r\n }\r\n });\r\n }\r\n\r\n function setMe(user) {\r\n var data = $filter('filter')(model.chart.total, {\r\n id: user.id\r\n });\r\n if (data && data.length > 0) {\r\n model.me = data[0];\r\n var currentMonthChart = {\r\n ranking: '-',\r\n rating: 0\r\n };\r\n if (model.me.rankingByMonths && model.me.rankingByMonths.length) {\r\n var current = $filter('filter')(model.me.rankingByMonths, {\r\n date: getMonthKey('current')\r\n });\r\n if (current.length) {\r\n currentMonthChart.ranking = current[0].ranking;\r\n currentMonthChart.rating = current[0].rating;\r\n }\r\n };\r\n model.me.currentMonthChart = currentMonthChart;\r\n }\r\n }\r\n\r\n function getMonthKey(range) {\r\n var date = new Date();\r\n switch (range) {\r\n case 'previous':\r\n date.setMonth(date.getMonth() - 1);\r\n break;\r\n }\r\n return date.toISOString().substring(0, 7).replace('-', '');\r\n }\r\n\r\n function setCharts(response) {\r\n model.chart = response.data || [];\r\n model.charts = [{\r\n type: 'total',\r\n list: $filter('filter')(model.chart.total, {\r\n type: 0 /*community coach*/\r\n })\r\n }, {\r\n type: 'currentMonth',\r\n list: model.chart.currentMonth\r\n }, {\r\n type: 'previousMonth',\r\n list: model.chart.previousMonth\r\n }];\r\n onChartTypeChange('total');\r\n }\r\n\r\n function onChartTypeChange(type) {\r\n model.activeChart = $filter('filter')(model.charts, {\r\n type: type\r\n })[0];\r\n data.paging.chart.page = 1;\r\n }\r\n\r\n //#region Search Index\r\n function setFilter(type) {\r\n $timeout(function () {\r\n var filter = model[type];\r\n if (filter) {\r\n filter.type = type;\r\n var same = $filter('filter')(model.filters, function (item) {\r\n return item.type == type;\r\n });\r\n if (same.length)\r\n model.filters.splice(model.filters.indexOf(same[0]), 1);\r\n model.filters.push(filter);\r\n }\r\n });\r\n }\r\n\r\n function removeFilter(item) {\r\n model[item.type] = null;\r\n model.filters.splice(model.filters.indexOf(item), 1);\r\n }\r\n\r\n function setQuery() {\r\n $timeout(function () {\r\n var query = {};\r\n angular.forEach(model.filters, function (filter) {\r\n switch (filter.type) {\r\n case 'type':\r\n query[filter.type] = filter.id;\r\n break;\r\n case 'search':\r\n if (filter.name != \"\" && filter.name != data._searchTerm) {\r\n data._searchTerm = filter.name;\r\n gtm.push({\r\n event: 'Search',\r\n type: 'Coach',\r\n query: filter.name\r\n });\r\n }\r\n query[\"$\"] = filter.name; //all\r\n break;\r\n default:\r\n query[filter.type] = {\r\n id: filter.id\r\n };\r\n }\r\n\r\n });\r\n model.query = query;\r\n data.paging.all.page = 1;\r\n });\r\n }\r\n\r\n $scope.$watchCollection('model.filters', function () {\r\n setQuery();\r\n })\r\n $scope.$watch('model.search.name', function () {\r\n setQuery();\r\n })\r\n //#endregion Search\r\n\r\n }]);\r\n\r\n})();","/* global angular */\r\n\r\n(function () {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.controller('CommentsCtrl', ['$scope', 'Comments', 'Account', function ($scope, Comments, Account) {\r\n \r\n var comments = { list: [] };\r\n var currentPage;\r\n\r\n function page(id) {\r\n currentPage = id;\r\n return Comments.page(id).then(function (data) { comments.list = data });\r\n }\r\n\r\n function formOpen(parentId) {\r\n if (Account.user != null) {\r\n $scope.formId = parentId;\r\n } else {\r\n $scope.$parent.doLogin();\r\n }\r\n }\r\n\r\n //properties\r\n $scope.comments = comments;\r\n\r\n //methods\r\n $scope.page = page;\r\n $scope.formOpen = formOpen;\r\n\r\n }]);\r\n\r\n app.controller('CommentCtrl', ['$scope', 'State', 'Comments', 'Account', function ($scope, State, Comments, Account) {\r\n\r\n var state = new State();\r\n var commentNew = {}; commentNew.user = {};\r\n\r\n function save(form, parentId, currentPage) {\r\n if (Account.user != null) {\r\n if (commentNew.text != null) {\r\n commentNew.pageId = currentPage;\r\n commentNew.user.id = Account.user.id;\r\n commentNew.parentId = parentId;\r\n if (state.busy()) {\r\n Comments.save(commentNew).then(function (response) {\r\n $scope.commentNew = {};\r\n $scope.formId = undefined;\r\n $scope.$parent.comments.list = response;\r\n state.success();\r\n }, function (error) {\r\n state.error(error);\r\n });\r\n }\r\n }\r\n }\r\n else {\r\n $scope.$parent.doLogin();\r\n }\r\n }\r\n\r\n //properties\r\n $scope.state = state;\r\n $scope.commentNew = commentNew;\r\n\r\n //methods\r\n $scope.save = save;\r\n\r\n }]);\r\n\r\n app.service('Comments', ['$q', 'api', function ($q, api) {\r\n\r\n var service = {\r\n page: function (id) {\r\n var deferred = $q.defer();\r\n api.comment.page(id).then(function (response) {\r\n deferred.resolve(response.data || []);\r\n }, function (error) {\r\n deferred.reject(error);\r\n });\r\n return deferred.promise;\r\n },\r\n save: function (model) {\r\n var deferred = $q.defer();\r\n api.comment.save(model).then(function (response) {\r\n deferred.resolve(response.data || []);\r\n }, function (error) {\r\n deferred.reject(error);\r\n });\r\n return deferred.promise;\r\n }\r\n }\r\n return service;\r\n\r\n }]);\r\n\r\n}());","/* global angular */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.controller('ContactUsCtrl', ['$scope', '$controller', 'State', 'api', 'gtm', function ($scope, $controller, State, api, gtm) {\r\n\r\n $controller('FormCtrl', {\r\n $scope: $scope\r\n });\r\n\r\n var state = new State();\r\n var model = {};\r\n var data = {};\r\n \r\n api.data.contact().then(function (response) {\r\n $scope.data = data = response.data; \r\n state.ready();\r\n\r\n }, function (error) {\r\n state.error(error);\r\n\r\n });\r\n\r\n function submit() {\r\n if (state.busy()) {\r\n if (model.birthdate) {\r\n model.birthdate = new Date(Date.UTC(model.birthdate.getFullYear(), model.birthdate.getMonth(), model.birthdate.getDate(), model.birthdate.getHours()));\r\n }\r\n api.action.contact(model).then(function (response) { \r\n if (response.data.status) {\r\n state.success();\r\n gtm.push({\r\n event: 'Contattaci'\r\n });\r\n\r\n } else {\r\n state.error({\r\n message: response.data.HTML\r\n });\r\n }\r\n }, function (error) {\r\n state.error(error);\r\n\r\n });\r\n }\r\n }\r\n\r\n $scope.state = state;\r\n $scope.model = model;\r\n $scope.data = data;\r\n $scope.submit = submit;\r\n \r\n }]);\r\n\r\n}());","/* global angular */\r\n\r\n(function () {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.controller('CtasCtrl', ['$scope', 'State', 'CONFIG', function ($scope, State, CONFIG) {\r\n\r\n var app = CONFIG.app;\r\n var loc = CONFIG.app.locale;\r\n var ctas = {};\r\n\r\n function init(mode, item) {\r\n ctas.mode = mode;\r\n ctas.item = item || app.item;\r\n if (ctas.item) {\r\n if (ctas.item.tags) {\r\n angular.forEach(ctas.item.tags, function (tag) {\r\n if (tag.category === 3) {\r\n ctas.poi = tag;\r\n }\r\n })\r\n } else {\r\n ctas.poi = ctas.item.poi;\r\n }\r\n } else {\r\n ctas.item = {\r\n id: app.id,\r\n url: app.url,\r\n media: app.media,\r\n };\r\n }\r\n }\r\n\r\n function getMedia() {\r\n var media = null;\r\n if (ctas.item) {\r\n if (ctas.item.media) {\r\n media = ctas.item.media;\r\n } else if (ctas.item.photos && ctas.item.photos.length) {\r\n media = ctas.item.photos[0] + '?width=1200&height=630&mode=crop';\r\n }\r\n }\r\n return media;\r\n }\r\n\r\n ctas.getMedia = getMedia;\r\n\r\n $scope.loc = loc;\r\n $scope.ctas = ctas;\r\n $scope.init = init;\r\n \r\n }]);\r\n\r\n}());","/* global angular */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.controller('FormCtrl', ['$scope', function ($scope) {\r\n function save(form) {\r\n if (form.$error && form.$error.required) {\r\n var tops = form.$error.required.map(function (error) {\r\n var element = error.$$element;\r\n if (element) {\r\n var node = element[0];\r\n if (node.getAttribute('type') === 'hidden') {\r\n node = node.parentNode;\r\n }\r\n // console.log(error, node);\r\n return node.getBoundingClientRect().top;\r\n }\r\n });\r\n var top = Math.min.apply(this, tops);\r\n $scope.$root.$broadcast('onScrollbarShouldScrollTo', {\r\n x: 0,\r\n y: (top - 25),\r\n selector: 'page',\r\n });\r\n return false;\r\n }\r\n return true;\r\n }\r\n $scope.save = save;\r\n }]);\r\n\r\n app.directive('subForms', [function() {\r\n return {\r\n require: 'form',\r\n link: function (scope, element, attributes, form) {\r\n // console.log('subForms.link', form);\r\n scope.$watch(function () {\r\n return form.$submitted;\r\n }, function (value) {\r\n // console.log('form.$submitted', value);\r\n if (value) {\r\n angular.forEach(form, function (sub, key) {\r\n if (sub && sub.$$parentForm === form) {\r\n // console.log(typeof (sub.$setSubmitted), sub.$name);\r\n if (typeof (sub.$setSubmitted) === 'function') {\r\n try {\r\n sub.$setSubmitted(value);\r\n // console.log(sub);\r\n } catch (e) {\r\n console.log('sub.$setSubmitted', sub.$name, sub, value, e);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n };\r\n }]);\r\n\r\n}());","/* global angular */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.controller('NewsletterCtrl', ['$scope', 'State', 'api', 'gtm', function ($scope, State, api, gtm) {\r\n\r\n var state = new State();\r\n var model = {}; \r\n\r\n function submit() { \r\n if (state.busy()) { \r\n api.action.newsletter(model).then(function (response) { \r\n if (response.data.status) {\r\n state.success();\r\n gtm.push({ event: 'Newsletter' });\r\n } else {\r\n state.error({ message: response.data.HTML });\r\n }\r\n }, function (error) {\r\n state.error(error);\r\n });\r\n }\r\n }\r\n\r\n state.ready();\r\n\r\n $scope.state = state;\r\n $scope.model = model;\r\n $scope.submit = submit;\r\n\r\n }]);\r\n \r\n}());","/* global angular */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.controller('RootCtrl', ['$scope', '$timeout', '$q', 'Utils', 'LocalStorage', 'SessionStorage', 'Account', 'Wishlist', 'api', 'CONFIG', 'gtm', function ($scope, $timeout, $q, Utils, local, session, Account, Wishlist, api, CONFIG, gtm) {\r\n\r\n var debug = false;\r\n\r\n var localMessages = {\r\n cookies: true,\r\n };\r\n\r\n var sessionMessages = {\r\n opening: true,\r\n };\r\n\r\n var messages;\r\n messages = session.get('messages');\r\n if (messages) {\r\n angular.extend(sessionMessages, messages);\r\n } else {\r\n sessionMessages = { opening: true };\r\n session.set('messages', sessionMessages);\r\n }\r\n\r\n messages = local.get('messages');\r\n if (messages) {\r\n angular.extend(localMessages, messages);\r\n } else {\r\n localMessages = { cookies: true };\r\n local.set('messages', localMessages);\r\n }\r\n\r\n function onGetLocalMessage() {\r\n var message = null;\r\n for (var p in localMessages) {\r\n if (!message && localMessages[p]) {\r\n message = p;\r\n }\r\n }\r\n return message;\r\n }\r\n\r\n function onGetSessionMessage() {\r\n var message = null;\r\n for (var p in sessionMessages) {\r\n if (!message && sessionMessages[p]) {\r\n message = p;\r\n }\r\n }\r\n return message;\r\n }\r\n\r\n function onDismissLocalMessage() {\r\n var message = onGetLocalMessage();\r\n if (message) {\r\n localMessages[message] = false;\r\n }\r\n if (!debug) {\r\n switch (message) {\r\n case 'cookies':\r\n localMessages.cookies = false;\r\n local.set('messages', localMessages);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n function onDismissSessionMessage() {\r\n var message = onGetSessionMessage();\r\n if (message) {\r\n sessionMessages[message] = false;\r\n }\r\n if (!debug) {\r\n switch (message) {\r\n case 'opening':\r\n sessionMessages.opening = false;\r\n session.set('messages', sessionMessages);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n function openCart() {\r\n $scope.$root.addModal('cartModal', null).then(function (data) {\r\n }, function (error) {\r\n });\r\n }\r\n\r\n function openUser() {\r\n $scope.$root.addModal('userModal', null).then(function (data) {\r\n }, function (error) {\r\n });\r\n }\r\n\r\n function doLogin() {\r\n $scope.$root.addModal('loginModal', null).then(function (data) {\r\n }, function (error) {\r\n });\r\n }\r\n \r\n function doLogout() {\r\n api.user.logout().then(function () {\r\n gtm.push({\r\n event: 'Logout',\r\n user: Account.user.id,\r\n user_type: Account.user.profile\r\n });\r\n Account.setUser(null); \r\n // FB.logout();\r\n location.href = CONFIG.app.pages.home;\r\n });\r\n } \r\n\r\n function toggleWishlist(id) { \r\n if (Account.isLogged()) {\r\n Wishlist.toggle(id);\r\n } else {\r\n doLogin();\r\n }\r\n }\r\n\r\n function printTraining(id,url) { \r\n if (Account.isLogged()) {\r\n gtm.push({\r\n event: 'Download allenamento',\r\n user: Account.user.id,\r\n user_type: Account.user.profile,\r\n allenamento: id\r\n });\r\n // location.href = url;\r\n window.open(url, '_blank');\r\n } else {\r\n doLogin();\r\n }\r\n }\r\n\r\n function scrollTop() {\r\n var body = $(\"html, body\");\r\n body.stop().animate({ scrollTop: 0 }, 500, 'swing', function () {\r\n // on end\r\n });\r\n }\r\n\r\n $scope.$on('loadUserModal', function () { openUser();}) \r\n $scope.$on('onAuthUserChange', function () {\r\n $scope.$root.modals[$scope.$root.modals.length - 1].reject();\r\n }) \r\n\r\n $scope.onDismissLocalMessage = onDismissLocalMessage;\r\n $scope.onDismissSessionMessage = onDismissSessionMessage;\r\n $scope.openCart = openCart;\r\n $scope.openUser = openUser;\r\n $scope.doLogin = doLogin;\r\n $scope.doLogout = doLogout; \r\n $scope.toggleWishlist = toggleWishlist;\r\n $scope.printTraining = printTraining;\r\n $scope.config = CONFIG;\r\n $scope.account = Account;\r\n $scope.wishlist = Wishlist; \r\n $scope.scrollTop = scrollTop;\r\n\r\n $timeout(function () {\r\n $scope.localMessages = localMessages;\r\n $scope.sessionMessages = sessionMessages;\r\n }, 2000);\r\n\r\n function keepAlive() {\r\n var minutes = 5;\r\n setTimeout(function () {\r\n Account.getUser(true).then(function (user) {\r\n console.log('RootCtrl.keepAlive', user);\r\n keepAlive();\r\n });\r\n }, 1000 * 60 * minutes);\r\n }\r\n\r\n $q.all([\r\n Account.getUser(true).then(function (user) {\r\n console.log('RootCtrl.user', user);\r\n if (Account.isLogged()) {\r\n Wishlist.current();\r\n }\r\n }) \r\n ]).then(function (response) {\r\n keepAlive();\r\n\r\n }, function (error) {\r\n console.log('RootCtrl.error', error);\r\n });\r\n\r\n }]);\r\n\r\n}());","/* global angular */\r\n\r\n(function () {\r\n \"use strict\";\r\n\r\n var Types = {\r\n DOCUMENT: 5,\r\n EVENT: 9\r\n };\r\n\r\n var app = angular.module('app');\r\n\r\n app.controller('UserCtrl', ['$rootScope', '$scope', '$q', '$sce', 'State', 'api', 'Account', 'Booking', 'Wishlist', 'gtm', 'CONFIG', function ($rootScope,$scope, $q, $sce, State, api, Account, Booking, Wishlist, gtm, CONFIG) {\r\n \r\n var state = new State(),\r\n stateUser = new State();\r\n var loc = CONFIG.app.locale;\r\n var model = {};\r\n\r\n var sources = {\r\n area: 1,\r\n purchases: { items: [] }\r\n };\r\n state.busy();\r\n $q.all([\r\n api.data.billing().then(function (response) {\r\n sources.countries = response.data.countries;\r\n sources.provinces = response.data.provinces;\r\n sources.paymentTypes = response.data.paymentTypes;\r\n }),\r\n Wishlist.current().then(function (response) {\r\n //\r\n }),\r\n /*Account.getUser(true).then(function (response) {\r\n sources.user = response;\r\n }),\r\n */\r\n api.user.me().then(function (response) {\r\n setUser(response.data);\r\n }),\r\n api.user.offers().then(function (response) {\r\n sources.offers = response.data; \r\n if (sources.offers && sources.offers.length > 0) {\r\n sources.area = 4;\r\n }\r\n })\r\n ]).then(function success(response) { \r\n state.ready();\r\n }, function error(response) {\r\n state.error(response);\r\n });\r\n\r\n function logout() {\r\n if (state.busy()) {\r\n api.user.logout().then(function () { \r\n gtm.push({\r\n event: 'Logout',\r\n user: Account.user.id,\r\n user_type: Account.user.profile\r\n });\r\n state.success();\r\n Account.setUser(null);\r\n Booking.getCart();\r\n $rootScope.$broadcast('onAuthUserChange'); \r\n if ($scope.modal) {\r\n $scope.modal.reject(null);\r\n }\r\n });\r\n }\r\n }\r\n\r\n function openItem(item) {\r\n if (item.type === Types.EVENT) {\r\n api.data.topservicedetail(item.id).then(function (response) {\r\n var item = response.data;\r\n $scope.$root.addModal('bookModal', item).then(function (data) {\r\n }, function () {\r\n });\r\n }, function (error) {\r\n });\r\n } else {\r\n window.location.href = item.url;\r\n }\r\n return true;\r\n }\r\n\r\n function save() {\r\n if (Account.hasBillingInfo()) {\r\n updateBillinginfo();\r\n } else {\r\n registerBillinginfo();\r\n }\r\n }\r\n\r\n function updateBillinginfo() {\r\n if (stateUser.busy()) {\r\n api.user.edit(model).then(function (response) {\r\n stateUser.success();\r\n Account.setUser(response.data);\r\n setUser(response.data);\r\n\r\n },function error(response) {\r\n stateUser.error(response);\r\n\r\n });\r\n }\r\n }\r\n\r\n function registerBillinginfo() {\r\n if (stateUser.busy()) {\r\n model.name = model.lastName + \" \" + model.firstName;\r\n api.user.register(model).then(function (response) {\r\n stateUser.success();\r\n // autologin\r\n model.customerCode = response.data;\r\n model.customerPsw = model.password;\r\n api.user.login(model).then(function (response) { \r\n gtm.push({\r\n event: 'Register', user: response.data.id\r\n });\r\n gtm.push({\r\n event: 'Login',user: response.data.id\r\n });\r\n Account.setUser(response.data);\r\n setUser(response.data);\r\n\r\n }, function (error) {\r\n stateUser.error(error);\r\n\r\n });\r\n }, function (error) {\r\n stateUser.error(error);\r\n\r\n });\r\n }\r\n }\r\n \r\n function setUser(data) {\r\n sources.user = data;\r\n angular.extend(model, sources.user);\r\n //console.log('user', sources.user);\r\n }\r\n\r\n $scope.state = state;\r\n $scope.stateUser = stateUser;\r\n $scope.loc = loc;\r\n $scope.sources = sources;\r\n $scope.model = model;\r\n $scope.logout = logout;\r\n $scope.openItem = openItem;\r\n $scope.save = save; \r\n \r\n }]);\r\n \r\n app.service('Wishlist', ['$q', '$sce','$rootScope', 'api', 'gtm', 'LocalStorage', function ($q, $sce, $rootScope, api, gtm, storage) {\r\n var service = this,\r\n items = [],\r\n key = 'wishlist';\r\n\r\n function current() {\r\n var deferred = $q.defer();\r\n if (storage.exists(key)) {\r\n var data = storage.get(key);\r\n items = this.items = data;\r\n deferred.resolve(items);\r\n get();\r\n } else {\r\n return get();\r\n }\r\n return deferred.promise;\r\n }\r\n\r\n function get() {\r\n var deferred = $q.defer();\r\n api.user.wishlist().then(function (response) {\r\n var data = response.data || [];\r\n set(data);\r\n deferred.resolve(data);\r\n }, function (error) {\r\n deferred.reject(error);\r\n });\r\n return deferred.promise;\r\n }\r\n\r\n function set(data) {\r\n items = service.items = data;\r\n storage.set(key, items);\r\n $rootScope.$broadcast('onWishListChange');\r\n return items;\r\n }\r\n\r\n function has(id) {\r\n var index = -1;\r\n angular.forEach(items, function (value, i) {\r\n if (value === id) {\r\n index = i;\r\n }\r\n });\r\n if (index !== -1) {\r\n return items[index];\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n function add(id) {\r\n var deferred = $q.defer(); \r\n api.user.addToWishlist(id).then(function (response) { \r\n gtm.addToWishlist(id);\r\n get();\r\n }, function (error) {\r\n deferred.reject(error);\r\n });\r\n return deferred.promise;\r\n }\r\n\r\n function remove(id) {\r\n var deferred = $q.defer();\r\n api.user.removeFromWishlist(id).then(function (response) {\r\n gtm.removeFromWishlist(id);\r\n get();\r\n deferred.resolve(items);\r\n }, function (error) {\r\n deferred.reject(error);\r\n });\r\n return deferred.promise;\r\n }\r\n\r\n function toggle(id) { \r\n console.log('toggle', id);\r\n if (has(id)) {\r\n return remove(id);\r\n } else {\r\n return add(id);\r\n } \r\n }\r\n\r\n function clear() {\r\n var deferred = $q.defer();\r\n api.user.clearWishlist(id).then(function (response) {\r\n items = set([]);\r\n deferred.resolve(items);\r\n }, function (error) {\r\n deferred.reject(error);\r\n });\r\n return deferred.promise;\r\n }\r\n\r\n this.items = items;\r\n this.current = current;\r\n this.get = get;\r\n this.set = set;\r\n this.has = has;\r\n this.add = add;\r\n this.remove = remove;\r\n this.toggle = toggle;\r\n this.clear = clear;\r\n \r\n }]);\r\n \r\n}());","/* global angular */\r\n\r\n(function () {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.controller('SwimlistCtrl', ['$scope', 'State', 'api', function ($scope, State, api) {\r\n\r\n var state = new State();\r\n var data = {\r\n limit: 5,\r\n };\r\n var model = {};\r\n\r\n var scope = {\r\n state: state,\r\n data: data,\r\n model: model \r\n };\r\n\r\n angular.extend($scope, scope);\r\n\r\n function dataTraining() {\r\n api.data.training().then(function (response) {\r\n angular.extend(data, response.data);\r\n });\r\n }\r\n\r\n function swimlist() {\r\n api.training.swimlist().then(function (response) {\r\n data.swimlist = response.data;\r\n data.results = data.swimlist ? data.swimlist.slice(0) : [];\r\n });\r\n }\r\n function Init() {\r\n dataTraining();\r\n swimlist();\r\n }\r\n\r\n Init();\r\n\r\n $scope.$watch('model.target', function () {\r\n if (data.swimlist) {\r\n if (!model.target) {\r\n data.results = data.swimlist ? data.swimlist.slice(0) : [];\r\n return;\r\n }\r\n data.results = data.swimlist.filter(function (item) {\r\n if (item.target.id === model.target.id) {\r\n return true;\r\n }\r\n });\r\n }\r\n });\r\n\r\n $scope.$on('onWishListChange', function () { swimlist(); });\r\n\r\n function select(array, callback) {\r\n var r = array.filter(callback);\r\n return r.length ? r[0] : {};\r\n }\r\n \r\n }]);\r\n\r\n}());","/* global angular */\r\n\r\n(function () {\r\n \"use strict\";\r\n\r\n var app = angular.module('app');\r\n\r\n app.controller('TrainingsCtrl', ['$scope', '$q', '$sce', '$filter', '$location', '$timeout', 'gtm', 'State', 'Trainings', 'TrainingEnums', 'CONFIG', function ($scope, $q, $sce, $filter, $location, $timeout, gtm, State, Trainings, Enums, CONFIG) {\r\n\r\n var state = new State();\r\n var data = {\r\n sorting: [\r\n { id: '-createdDate', name: CONFIG.app.locale[\"sortby_createdDate\"] },\r\n { id: '-rating', name: CONFIG.app.locale[\"sortby_rating\"] },\r\n { id: 'name', name: CONFIG.app.locale[\"sortby_name\"] },\r\n ],\r\n paging: {\r\n items: 9, // x page\r\n page: 1\r\n }, \r\n targets: [],\r\n levels: [],\r\n durations: [],\r\n coaches: [{ id: 0, name: CONFIG.app.locale[\"coach_community\"] }, { id: 1, name: CONFIG.app.locale[\"coach_arena\"] }, { id: 2, name: CONFIG.app.locale[\"coach_top\"]}],\r\n tools: [],\r\n enablePublish: false,\r\n _searchTerm: \"\"\r\n };\r\n var model = {\r\n sorting: '-createdDate',\r\n filters: [],\r\n query: {},\r\n location: $location.path()\r\n };\r\n var trainings = { };\r\n\r\n var scope = {\r\n state: state,\r\n data: data,\r\n model: model,\r\n trainings: trainings,\r\n status: Enums.status,\r\n // methods\r\n setFilter: setFilter,\r\n removeFilter: removeFilter,\r\n all: all,\r\n latest: latest,\r\n top: top,\r\n target: target,\r\n exercise: exercise,\r\n tool: tool,\r\n coach: coach,\r\n publish: publish,\r\n me: me,\r\n suggested: suggested,\r\n swimlist: swimlist, \r\n };\r\n \r\n angular.extend($scope, scope);\r\n\r\n //#region Search\r\n function initFilterData(items) {\r\n var targets = $filter('groupPropsByKeyValue')(items, 'target', 'id', 'name')\r\n .map(function (item) { return { id: item.key, name: item.value }; })\r\n .sort(function (a, b) { var a = a.name; var b = b.name; return (a < b) ? -1 : (a > b) ? 1 : 0; }); \r\n angular.extend(data.targets, targets);\r\n\r\n var levels = $filter('groupPropsByKeyValue')(items, 'level', 'id', 'name')\r\n .map(function (item) { return { id: item.key, name: item.value }; })\r\n .sort(function (a, b) {var a = a.id; var b = b.id; return (a < b) ? -1 : (a > b) ? 1 : 0;}); \r\n angular.extend(data.levels, levels);\r\n\r\n var durations = $filter('groupPropsByKeyValue')(items, 'time', 'range', 'range')\r\n .map(function (item) { \r\n var lookup = CONFIG.app.timeRange.filter(function (range) {return range.id === item.key;})[0]; \r\n return { id: item.key, name: lookup.name, min: lookup.min };\r\n })\r\n .sort(function (a, b) { var a = a.min; var b = b.min; return (a < b) ? -1 : (a > b) ? 1 : 0; });\r\n angular.extend(data.durations, durations);\r\n\r\n /*\r\n var coaches = $filter('groupPropsByKeyValue')(items, 'coach', 'id', 'name')\r\n .map(function (item) { return { id: item.key, name: item.value }; })\r\n .sort(function (a, b) { var a = a.name; var b = b.name; return (a < b) ? -1 : (a > b) ? 1 : 0; });\r\n angular.extend(data.coaches, coaches);\r\n */\r\n\r\n var tools = $filter('groupPropsByKeyValue')(items, 'tools', 'id', 'name')\r\n .map(function (item) { return { id: item.key, name: item.value }; })\r\n .sort(function (a, b) { var a = a.name; var b = b.name; return (a < b) ? -1 : (a > b) ? 1 : 0; });\r\n angular.extend(data.tools, tools);\r\n }\r\n\r\n function setFilter(type) { \r\n $timeout(function () {\r\n var filter = model[type];\r\n if (filter) {\r\n filter.type = type;\r\n var same = $filter('filter')(model.filters, function (item) { return item.type == type; });\r\n if (same.length)\r\n model.filters.splice(model.filters.indexOf(same[0]), 1); \r\n model.filters.push(filter);\r\n } \r\n }); \r\n }\r\n\r\n function removeFilter(item) { \r\n model[item.type] = null;\r\n model.filters.splice(model.filters.indexOf(item), 1); \r\n }\r\n\r\n function setQuery() {\r\n $timeout(function () {\r\n var query = {};\r\n angular.forEach(model.filters, function (filter) {\r\n switch (filter.type) {\r\n case 'time':\r\n query[filter.type] = { range: filter.id };\r\n break;\r\n case 'coach':\r\n query[filter.type] = { type: filter.id };\r\n break;\r\n case 'search':\r\n //query[\"name\"] = filter.name; //training title\r\n if (filter.name != \"\" && filter.name != data._searchTerm) {\r\n data._searchTerm = filter.name;\r\n gtm.push({\r\n event: 'Search',\r\n type: 'Training',\r\n query: filter.name\r\n });\r\n }\r\n query[\"$\"] = filter.name; //all\r\n break;\r\n default:\r\n query[filter.type] = { id: filter.id };\r\n }\r\n \r\n });\r\n model.query = query;\r\n data.paging.page = 1;\r\n //changeLocation();\r\n //console.log(query,model.filters)\r\n });\r\n }\r\n\r\n function changeLocation() {\r\n if (!window.btoa) return;\r\n\r\n if (model.filters && model.filters.length>0) {\r\n var _path = btoa(unescape(encodeURIComponent(angular.toJson(model.filters))));\r\n if ('/' + _path != $location.path())\r\n $location.path(_path); //.replace(); \r\n } else {\r\n if ($location.path() != '' && $location.path() != '/')\r\n $location.path(null);\r\n } \r\n }\r\n\r\n //#region Watch\r\n $scope.$watchCollection('model.filters', function () {\r\n setQuery();\r\n })\r\n\r\n $scope.$watch('model.search.name', function () {\r\n setQuery();\r\n })\r\n\r\n $scope.$on('$locationChangeSuccess', function (event, newUrl, oldUrl) {\r\n model.location = $location.path();\r\n });\r\n\r\n if (window.atob) {\r\n $scope.$watch(function () { return $location.path() }, function (newLocation, oldLocation) {\r\n if (model.location === newLocation) {\r\n if (newLocation != '') { \r\n var hash = newLocation.substr(1);\r\n try {\r\n var filters = angular.fromJson(decodeURIComponent(escape(atob(hash))));\r\n angular.forEach(filters, function (filter) {\r\n model[filter.type] = filter;\r\n setFilter(filter.type);\r\n }) \r\n } catch (ex) {\r\n }\r\n } \r\n }\r\n });\r\n }\r\n //#endregion Watch\r\n\r\n //#endregion Search\r\n\r\n //#region Coach\r\n function publish(item) { \r\n if (data.enablePublish && state.busy()) { \r\n Trainings.publish(item.id).then(function (response) { \r\n state.success(); \r\n item.status = 1;\r\n }, function (error) {\r\n state.error(error);\r\n }); \r\n }\r\n }\r\n //#endregion Coach\r\n \r\n //#region Api\r\n function all() {\r\n return Trainings.all().then(function (list) {\r\n trainings.list = list;\r\n initFilterData(trainings.list);\r\n });\r\n }\r\n\r\n function latest() {\r\n return Trainings.latest().then(function (list) { trainings.list = list; });\r\n }\r\n\r\n function top() {\r\n return Trainings.top().then(function (list) { trainings.list = list; });\r\n }\r\n\r\n function target(id) {\r\n return Trainings.target(id).then(function (list) { trainings.list = list; });\r\n }\r\n\r\n function exercise(id) {\r\n return Trainings.exercise(id).then(function (list) { trainings.list = list; });\r\n }\r\n\r\n function tool(id) {\r\n return Trainings.tool(id).then(function (list) { trainings.list = list; });\r\n }\r\n\r\n function coach(id) {\r\n return Trainings.coach(id).then(function (list) {\r\n trainings.listAllLanguages = list;\r\n trainings.list = $filter('filter')(list, function (item) { return item.language == CONFIG.app.lang.id; });; \r\n });\r\n }\r\n\r\n function me() {\r\n return Trainings.me().then(function (list) { trainings.list = list; data.enablePublish = true;});\r\n }\r\n\r\n function suggested() {\r\n return Trainings.top().then(function (list) { trainings.list = list; });\r\n }\r\n\r\n function swimlist() {\r\n return Trainings.top().then(function (list) { trainings.list = list; });\r\n }\r\n //#endregion Api\r\n\r\n }]);\r\n\r\n app.controller('TrainingsDetailCtrl', ['$scope', '$filter', '$timeout', 'State', 'Upload', 'api', 'TrainingSet', 'TrainingEnums', 'CONFIG', function ($scope, $filter, $timeout, State, Upload, api, Set, Enums, CONFIG) {\r\n\r\n var state = new State();\r\n var data = {\r\n types: Enums.types,\r\n dryland: [],\r\n warmUp: new Set(Enums.types.WARM_UP),\r\n pre: [],\r\n mainSet: new Set(Enums.types.MAIN),\r\n after: [],\r\n coolDown: new Set(Enums.types.COOL_DOWN),\r\n };\r\n var model = {\r\n sets: [],\r\n tools: []\r\n };\r\n\r\n var scope = {\r\n state: state,\r\n data: data,\r\n model: model,\r\n load: load,\r\n toggleSet: toggleSet,\r\n onToggle: onToggle,\r\n getSetTypeName: getSetTypeName,\r\n };\r\n\r\n angular.extend($scope, scope);\r\n\r\n function Init() {\r\n\r\n api.data.training().then(function (response) {\r\n angular.extend(data, response.data); \r\n });\r\n\r\n if (CONFIG.app.training) {\r\n angular.extend(model, CONFIG.app.training);\r\n updateData();\r\n }\r\n }\r\n\r\n Init();\r\n\r\n function load(id) {\r\n api.training.detail(id).then(function (response) {\r\n angular.extend(model, response.data);\r\n updateData();\r\n }); \r\n }\r\n\r\n function updateData() {\r\n model.sets.filter(function (set) {\r\n switch (set.type) {\r\n case Enums.types.DRYLAND:\r\n data.dryland.push(set);\r\n break;\r\n case Enums.types.WARM_UP:\r\n data.warmUp = set;\r\n break;\r\n case Enums.types.PRE:\r\n data.pre.push(set);\r\n break;\r\n case Enums.types.MAIN:\r\n //set.active = true;\r\n data.mainSet = set;\r\n break;\r\n case Enums.types.AFTER:\r\n data.after.push(set);\r\n break;\r\n case Enums.types.COOL_DOWN:\r\n data.coolDown = set; \r\n break;\r\n }\r\n });\r\n }\r\n\r\n function getSetTypeName(type) { \r\n return data.setTypes != null ? data.setTypes.filter(function (set) { return set.id == type })[0].name : '';\r\n }\r\n\r\n function addSetType(type) {\r\n switch (type) {\r\n case Enums.types.DRYLAND:\r\n data.dryland.push(new Set(type));\r\n break;\r\n case Enums.types.PRE:\r\n data.pre.push(new Set(type));\r\n break;\r\n case Enums.types.AFTER:\r\n data.after.push(new Set(type));\r\n break;\r\n }\r\n updateSets();\r\n }\r\n\r\n function toggleSet(item) {\r\n if (item.active) {\r\n item.active = false;\r\n } else { \r\n angular.forEach(model.sets, function (set) {\r\n set.active = false;\r\n });\r\n item.active = true; \r\n }\r\n // console.log('setActive', item);\r\n }\r\n\r\n function onToggle(e, item) {\r\n function hasParentClass(node, string) {\r\n var has = false;\r\n var classes = node.getAttribute('class');\r\n if (classes && classes.indexOf(string) !== -1) {\r\n has = true;\r\n } else if (node.parentNode !== document) {\r\n has = hasParentClass(node.parentNode, string);\r\n }\r\n return has;\r\n }\r\n if (!hasParentClass(e.target, 'training-drills')) {\r\n toggleSet(item);\r\n if (item.active) {\r\n $timeout(function () {\r\n var top = e.target.getBoundingClientRect().top;\r\n // console.log('onScrollbarShouldScrollTo', top);\r\n $scope.$root.$broadcast('onScrollbarShouldScrollTo', {\r\n x: 0,\r\n y: (top - 25),\r\n selector: 'page',\r\n });\r\n }, 0);\r\n }\r\n }\r\n }\r\n\r\n function select(array, callback) {\r\n var r = array.filter(callback);\r\n return r.length ? r[0] : {};\r\n } \r\n\r\n }]);\r\n\r\n app.controller('TrainingsCreateCtrl', ['$scope', '$filter', '$controller', '$timeout', 'State', 'Upload', 'api', 'gtm', 'Account', 'Trainings', 'TrainingSet', 'TrainingEnums', function ($scope, $filter, $controller, $timeout, State, Upload, api, gtm, Account, service, Set, Enums) {\r\n\r\n $controller('FormCtrl', {\r\n $scope: $scope\r\n });\r\n\r\n var state = new State();\r\n var statePublish = new State();\r\n var model = {\r\n tools: [], // contiene output tools allenamento \r\n sets: [], // contiene output sets allenamento\r\n };\r\n\r\n var data = {\r\n types: Enums.types,\r\n dryland: [],\r\n warmUp: new Set(Enums.types.WARM_UP, true),\r\n pre: [],\r\n mainSet: new Set(Enums.types.MAIN, true),\r\n after: [],\r\n coolDown: new Set(Enums.types.COOL_DOWN, true),\r\n };\r\n\r\n var scope = {\r\n state: state,\r\n statePublish: statePublish,\r\n model: model,\r\n data: data,\r\n removeTool: removeTool,\r\n hasMinimumInfo: hasMinimumInfo,\r\n isComplete: isComplete,\r\n getSetTypeName: getSetTypeName,\r\n addSetType: addSetType,\r\n removeSet: removeSet,\r\n toggleSet: toggleSet,\r\n onToggle: onToggle,\r\n load: load,\r\n create: create,\r\n edit: edit,\r\n publish: publish,\r\n onUploadFileSelected: onUploadFileSelected,\r\n };\r\n\r\n angular.extend($scope, scope);\r\n\r\n function Init() {\r\n\r\n api.data.training().then(function (response) {\r\n angular.extend(data, response.data); \r\n });\r\n\r\n data.minutes = new Array(24).fill().map(function (v, i) {\r\n var m = (i + 1) * 5; \r\n return {\r\n id: m, name: m = (m / 60 >= 1 ? (parseInt(m / 60) + \"h\") : \"\") + (m % 60 > 0 ? m % 60 + \"'\" : \"\")\r\n };\r\n });\r\n\r\n data.seconds = new Array(24).fill().map(function (v, i) {\r\n var m = i * 5;\r\n return {\r\n id: m, name: m = (m / 60 >= 1 ? (parseInt(m / 60) + \"'\") : \"\") + (m % 60 > 0 ? m % 60 + \"\\\"\" : \"\") };\r\n\r\n });\r\n\r\n data.distances = new Array(60).fill().map(function (v, i) {\r\n var d = (i + 1) * 25; \r\n return { id: d, name: d + \"m\", show: (d <= 400 || (d <= 800 && d % 50 === 0) || (d <= 1500 && d % 100 === 0)) };\r\n });\r\n\r\n data.repetitions = new Array(16).fill().map(function (v, i) {\r\n var r = i + 1;\r\n return { id: r, name: r };\r\n });\r\n\r\n updateSets();\r\n }\r\n\r\n Init();\r\n\r\n function load(id) {\r\n service.detail(id).then(function (training) {\r\n angular.extend(model, training); \r\n updateData(); \r\n $timeout(function () {\r\n if (model.icon) {\r\n var picture = { url: '/media/immagini/' + model.icon, alreadyUploaded: true };\r\n data.pictures.push(picture);\r\n model.uploadPicture = picture;\r\n } \r\n }, 500); \r\n }, function (error) { \r\n });\r\n }\r\n\r\n function removeTool(item) {\r\n model.tools.splice(model.tools.indexOf(item),1);\r\n }\r\n\r\n function hasMinimumInfo() {\r\n return model.name && model.abstract;\r\n }\r\n\r\n function isComplete(form) {\r\n return hasMinimumInfo() && form.$valid; // && model.sets.length > 0;\r\n }\r\n\r\n function updateData() {\r\n model.sets.filter(function (set) {\r\n switch (set.type) {\r\n case Enums.types.DRYLAND:\r\n data.dryland.push(set);\r\n break;\r\n case Enums.types.WARM_UP:\r\n data.warmUp = set;\r\n break;\r\n case Enums.types.PRE:\r\n data.pre.push(set);\r\n break;\r\n case Enums.types.MAIN:\r\n set.active = true;\r\n data.mainSet = set;\r\n break;\r\n case Enums.types.AFTER:\r\n data.after.push(set);\r\n break;\r\n case Enums.types.COOL_DOWN:\r\n data.coolDown = set;\r\n break;\r\n }\r\n });\r\n }\r\n\r\n function getSetTypeName(type) {\r\n return data.setTypes != null ? data.setTypes.filter(function (set) { return set.id == type })[0].name : '';\r\n }\r\n\r\n function addSetType(type) {\r\n switch (type) {\r\n case Enums.types.DRYLAND:\r\n data.dryland.push(new Set(type));\r\n break;\r\n case Enums.types.PRE:\r\n data.pre.push(new Set(type));\r\n break;\r\n case Enums.types.AFTER:\r\n data.after.push(new Set(type));\r\n break;\r\n }\r\n updateSets();\r\n }\r\n\r\n function removeSet(item) {\r\n switch (item.type) {\r\n case Enums.types.DRYLAND:\r\n data.dryland.splice(data.dryland.indexOf(item), 1);\r\n break;\r\n case Enums.types.PRE:\r\n data.pre.splice(data.pre.indexOf(item), 1);\r\n break;\r\n case Enums.types.AFTER:\r\n data.after.splice(data.after.indexOf(item), 1);\r\n break;\r\n }\r\n updateSets();\r\n }\r\n\r\n function updateSets() {\r\n var sets = [];\r\n Array.prototype.push.apply(sets, data.dryland);\r\n Array.prototype.push.apply(sets, [data.warmUp]);\r\n Array.prototype.push.apply(sets, data.pre);\r\n Array.prototype.push.apply(sets, [data.mainSet]);\r\n Array.prototype.push.apply(sets, data.after);\r\n Array.prototype.push.apply(sets, [data.coolDown]);\r\n model.sets = sets;\r\n }\r\n\r\n function toggleSet(item) {\r\n if (item.active) {\r\n item.active = false;\r\n } else {\r\n angular.forEach(model.sets, function (set) {\r\n set.active = false;\r\n });\r\n item.active = true;\r\n } \r\n //console.log('setActive', item);\r\n }\r\n\r\n function onToggle(e, item) {\r\n function hasParentClass(node, string) {\r\n var has = false;\r\n var classes = node.getAttribute('class');\r\n if (classes && classes.indexOf(string) !== -1) {\r\n has = true;\r\n } else if (node.parentNode !== document) {\r\n has = hasParentClass(node.parentNode, string);\r\n }\r\n return has;\r\n }\r\n if (!hasParentClass(e.target, 'training-drills')) {\r\n toggleSet(item);\r\n if (item.active) {\r\n $timeout(function () {\r\n var top = e.target.getBoundingClientRect().top;\r\n $scope.$root.$broadcast('onScrollbarShouldScrollTo', {\r\n x: 0,\r\n y: (top - 25),\r\n selector: 'page',\r\n });\r\n }, 0);\r\n }\r\n }\r\n }\r\n\r\n function create() {\r\n if (state.busy()) { \r\n service.save(model).then(function (item) { \r\n gtmPush('Crea allenamento', item);\r\n state.success(); \r\n }, function (error) {\r\n state.error(error);\r\n });\r\n } \r\n }\r\n\r\n function edit() {\r\n if (state.busy()) {\r\n service.edit(model).then(function (item) {\r\n gtmPush('Modifica allenamento', item);\r\n state.success();\r\n }, function (error) {\r\n state.error(error);\r\n });\r\n }\r\n }\r\n\r\n function publish() {\r\n if (statePublish.busy()) {\r\n service.publish(model.id).then(function (item) {\r\n gtmPush('Pubblica allenamento', item);\r\n statePublish.success();\r\n }, function (error) {\r\n statePublish.error(error);\r\n });\r\n }\r\n }\r\n\r\n function gtmPush(event, item) { \r\n gtm.push({\r\n event: event,\r\n user: item.coach.id,\r\n user_type: 2,\r\n allenamento: item.id\r\n })\r\n }\r\n\r\n function onUploadFileSelected(file, newFiles) {\r\n if (!file) {\r\n return;\r\n }\r\n Array.isArray(file) ? file = file[0] : null;\r\n data.base64 = null;\r\n Upload.resize(file, 1260, 540, .9, 'image/jpeg', null, true).then(function (resized) {\r\n Upload.dataUrl(resized, true).then(function (url) {\r\n data.base64 = url;\r\n model.uploadPicture = {\r\n base64: data.base64,\r\n };\r\n });\r\n });\r\n }\r\n\r\n function select(array, callback) {\r\n var r = array.filter(callback);\r\n return r.length ? r[0] : {};\r\n }\r\n\r\n }]);\r\n\r\n app.service('Trainings', ['$q', 'api', function ($q, api) {\r\n\r\n var service = {\r\n\r\n all: function () {\r\n var deferred = $q.defer();\r\n api.training.all().then(function (response) {\r\n deferred.resolve(response.data || []);\r\n }, function (error) {\r\n deferred.reject(error);\r\n });\r\n return deferred.promise;\r\n },\r\n latest: function () {\r\n var deferred = $q.defer();\r\n api.training.latest().then(function (response) {\r\n deferred.resolve(response.data || []);\r\n }, function (error) {\r\n deferred.reject(error);\r\n });\r\n return deferred.promise;\r\n },\r\n top: function () {\r\n var deferred = $q.defer();\r\n api.training.top().then(function (response) {\r\n deferred.resolve(response.data || []);\r\n }, function (error) {\r\n deferred.reject(error);\r\n });\r\n return deferred.promise;\r\n },\r\n target: function (id) {\r\n var deferred = $q.defer();\r\n api.training.target(id).then(function (response) {\r\n deferred.resolve(response.data || []);\r\n }, function (error) {\r\n deferred.reject(error);\r\n });\r\n return deferred.promise;\r\n },\r\n exercise: function (id) {\r\n var deferred = $q.defer();\r\n api.training.exercise(id).then(function (response) {\r\n deferred.resolve(response.data || []);\r\n }, function (error) {\r\n deferred.reject(error);\r\n });\r\n return deferred.promise;\r\n },\r\n tool: function (id) {\r\n var deferred = $q.defer();\r\n api.training.tool(id).then(function (response) {\r\n deferred.resolve(response.data || []);\r\n }, function (error) {\r\n deferred.reject(error);\r\n });\r\n return deferred.promise;\r\n },\r\n coach: function (id) {\r\n var deferred = $q.defer();\r\n api.training.coach(id).then(function (response) {\r\n deferred.resolve(response.data || []);\r\n }, function (error) {\r\n deferred.reject(error);\r\n });\r\n return deferred.promise;\r\n },\r\n me: function () {\r\n var deferred = $q.defer();\r\n api.training.me().then(function (response) {\r\n deferred.resolve(response.data || []);\r\n }, function (error) {\r\n deferred.reject(error);\r\n });\r\n return deferred.promise;\r\n },\r\n suggested: function () {\r\n var deferred = $q.defer();\r\n api.training.suggested().then(function (response) {\r\n deferred.resolve(response.data || []);\r\n }, function (error) {\r\n deferred.reject(error);\r\n });\r\n return deferred.promise;\r\n },\r\n swimlist: function () {\r\n var deferred = $q.defer();\r\n api.training.swimlist().then(function (response) {\r\n deferred.resolve(response.data || []);\r\n }, function (error) {\r\n deferred.reject(error);\r\n });\r\n return deferred.promise;\r\n },\r\n detail: function (id) {\r\n var deferred = $q.defer();\r\n api.training.detail(id).then(function (response) {\r\n deferred.resolve(response.data || []);\r\n }, function (error) {\r\n deferred.reject(error);\r\n });\r\n return deferred.promise;\r\n },\r\n save: function (model) {\r\n var deferred = $q.defer();\r\n api.training.save(model).then(function (response) {\r\n deferred.resolve(response.data || []);\r\n }, function (error) {\r\n deferred.reject(error);\r\n });\r\n return deferred.promise;\r\n },\r\n edit: function (model) {\r\n var deferred = $q.defer();\r\n api.training.edit(model).then(function (response) {\r\n deferred.resolve(response.data || []);\r\n }, function (error) {\r\n deferred.reject(error);\r\n });\r\n return deferred.promise;\r\n },\r\n publish: function (id) {\r\n var deferred = $q.defer();\r\n api.training.publish(id).then(function (response) {\r\n deferred.resolve(response.data || []);\r\n }, function (error) {\r\n deferred.reject(error);\r\n });\r\n return deferred.promise;\r\n }\r\n };\r\n return service;\r\n\r\n\r\n }]);\r\n\r\n app.factory('TrainingSet', ['TrainingDrill', 'TrainingEnums', function (TrainingDrill, Enums) {\r\n\r\n function TrainingSet(type,mandatory) {\r\n this.type = type;\r\n this.mandatory = mandatory || false;\r\n this.drills = [new TrainingDrill()]; \r\n }\r\n\r\n var statics = {\r\n types: Enums.types,\r\n };\r\n\r\n var publics = {\r\n\r\n };\r\n\r\n angular.extend(TrainingSet, statics);\r\n angular.extend(TrainingSet.prototype, publics);\r\n\r\n return TrainingSet;\r\n }]);\r\n\r\n app.factory('TrainingDrill', [function () {\r\n function TrainingDrill() { \r\n }\r\n\r\n var statics = {};\r\n\r\n var publics = {};\r\n\r\n angular.extend(TrainingDrill, statics);\r\n angular.extend(TrainingDrill.prototype, publics);\r\n\r\n return TrainingDrill;\r\n }]);\r\n\r\n app.constant('TrainingEnums', {\r\n types: {\r\n DRYLAND: 1,\r\n WARM_UP: 2,\r\n PRE: 3,\r\n MAIN: 4,\r\n AFTER: 5,\r\n COOL_DOWN: 6,\r\n },\r\n status: { \r\n SAVED: 0,\r\n PUBLISHINGREQUEST: 1,\r\n APPROVED: 2, \r\n } \r\n });\r\n\r\n app.directive('trainingDrills', ['TrainingDrill', '$timeout', function (TrainingDrill, $timeout) {\r\n return {\r\n priority: 1001,\r\n restrict: 'A',\r\n scope: {\r\n set: '=trainingDrills',\r\n data: '=',\r\n },\r\n templateUrl: function (element, attributes) {\r\n return attributes.template || 'partials/training/drills';\r\n },\r\n /*\r\n transclude: 'element',\r\n replace: true,\r\n */\r\n link: function (scope, element, attributes, controller) { \r\n var set = scope.set;\r\n // console.log('trainingDrills', set);\r\n\r\n var publics = {\r\n addDrill: addDrill,\r\n removeDrill: removeDrill,\r\n onSelectDrill: onSelectDrill,\r\n };\r\n\r\n angular.extend(scope, publics);\r\n\r\n function addDrill() { \r\n set.drills.push(new TrainingDrill()); \r\n }\r\n\r\n function removeDrill(item, e) { \r\n set.drills.splice(set.drills.indexOf(item), 1);\r\n e.preventDefault();\r\n e.stopImmediatePropagation();\r\n }\r\n\r\n function onSelectDrill(item) {\r\n $timeout(function () {\r\n item.name = item.exercise.name || item.name;\r\n });\r\n }\r\n }\r\n };\r\n }]);\r\n\r\n}());"]}