-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbookingbug-angular-core.min.js
More file actions
19 lines (19 loc) · 593 KB
/
bookingbug-angular-core.min.js
File metadata and controls
19 lines (19 loc) · 593 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function getURIparam(name){name=name.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var regexS="[\\?&]"+name+"=([^&#]*)",regex=new RegExp(regexS),results=regex.exec(window.location.href);return null==results?"":results[1]}angular.module("BB.Services").provider("ie8HttpBackend",function(){function ieCreateHttpBackend($browser,XHR,$browserDefer,callbacks,rawDocument,locationProtocol,sniffer,xhr){function completeRequest(callback,status,response,headersString){var url=url||$browser.url(),URL_MATCH=/^([^:]+):\/\/(\w+:{0,1}\w*@)?(\{?[\w\.-]*\}?)(:([0-9]+))?(\/[^\?#]*)?(\?([^#]*))?(#(.*))?$/,protocol=(url.match(URL_MATCH)||["",locationProtocol])[1];status="file"==protocol?response?200:404:status,status=1223==status?204:status,callback(status,response,headersString),$browser.$$completeOutstandingRequest(angular.noop)}if(!(sniffer.msie&&sniffer.msie<=9||sniffer.webkit&&sniffer.webkit<537))return null;var getHostName=function(path){var a=document.createElement("a");return a.href=path,a.hostname},isLocalCall=function(reqUrl){var reqHost=getHostName(reqUrl),localHost=getHostName($browser.url());return""==reqHost?!0:(patt=new RegExp(localHost+"$","i"),patt.test(reqHost))},pmHandler=function(method,url,post,callback,headers,timeout,withCredentials){var win=$('[name="'+getHostName(url)+'"]')[0].id;pm({target:window.frames[win],type:"xhrRequest",data:{headers:headers,method:method,data:post,url:url},success:function(respObj){headers="Content-Type: "+respObj.contentType,respObj.authToken&&(headers+="\r\nAuth-Token: "+respObj.authToken),completeRequest(callback,respObj.statusCode.status,respObj.responseText,headers)},error:function(data){completeRequest(callback,500,"Error","Content-Type: text/plain")}})};return function(method,url,post,callback,headers,timeout,withCredentials){$browser.$$incOutstandingRequestCount(),url=url||$browser.url(),isLocalCall(url)?xhr(method,url,post,callback,headers,timeout,withCredentials):pmHandler(method,url,post,callback,headers,timeout,withCredentials),timeout>0&&$browserDefer(function(){status=-1,xdr.abort()},timeout)}}function int(str){return parseInt(str,10)}function createXhr(method){if(8>=msie&&(!method.match(/^(get|post|head|put|delete|options)$/i)||!window.XMLHttpRequest))return new window.ActiveXObject("Microsoft.XMLHTTP");if(window.XMLHttpRequest)return new window.XMLHttpRequest;throw minErr("$httpBackend")("noxhr","This browser does not support XMLHttpRequest.")}function isPromiseLike(obj){return obj&&isFunction(obj.then)}function createHttpBackend($browser,createXhr,$browserDefer,callbacks,rawDocument,locationProtocol,msie){function jsonpReq(url,callbackId,done){var script=rawDocument.createElement("script"),callback=null;return script.type="text/javascript",script.src=url,script.async=!0,callback=function(event){removeEventListenerFn(script,"load",callback),removeEventListenerFn(script,"error",callback),rawDocument.body.removeChild(script),script=null;var status=-1,text="unknown";event&&("load"!==event.type||callbacks[callbackId].called||(event={type:"error"}),text=event.type,status="error"===event.type?404:200),done&&done(status,text)},addEventListenerFn(script,"load",callback),addEventListenerFn(script,"error",callback),8>=msie&&(script.onreadystatechange=function(){isString(script.readyState)&&/loaded|complete/.test(script.readyState)&&(script.onreadystatechange=null,callback({type:"load"}))}),rawDocument.body.appendChild(script),callback}var ABORTED=-1;return function(method,url,post,callback,headers,timeout,withCredentials,responseType){function timeoutRequest(){status=ABORTED,jsonpDone&&jsonpDone(),xhr&&xhr.abort()}function completeRequest(callback,status,response,headersString,statusText){timeoutId&&$browserDefer.cancel(timeoutId),jsonpDone=xhr=null,0===status&&(status=response?200:"file"==urlResolve(url).protocol?404:0),status=1223===status?204:status,statusText=statusText||"",callback(status,response,headersString,statusText),$browser.$$completeOutstandingRequest(angular.noop)}var status;if($browser.$$incOutstandingRequestCount(),url=url||$browser.url(),"jsonp"==lowercase(method)){var callbackId="_"+(callbacks.counter++).toString(36);callbacks[callbackId]=function(data){callbacks[callbackId].data=data,callbacks[callbackId].called=!0};var jsonpDone=jsonpReq(url.replace("JSON_CALLBACK","angular.callbacks."+callbackId),callbackId,function(status,text){completeRequest(callback,status,callbacks[callbackId].data,"",text),callbacks[callbackId]=angular.noop})}else{var xhr=createXhr(method);if(xhr.open(method,url,!0),angular.forEach(headers,function(value,key){angular.isDefined(value)&&xhr.setRequestHeader(key,value)}),xhr.onreadystatechange=function(){if(xhr&&4==xhr.readyState){var responseHeaders=null,response=null,statusText="";status!==ABORTED&&(responseHeaders=xhr.getAllResponseHeaders(),response="response"in xhr?xhr.response:xhr.responseText),status===ABORTED&&10>msie||(statusText=xhr.statusText),completeRequest(callback,status||xhr.status,response,responseHeaders,statusText)}},withCredentials&&(xhr.withCredentials=!0),responseType)try{xhr.responseType=responseType}catch(e){if("json"!==responseType)throw e}xhr.send(post||null)}if(timeout>0)var timeoutId=$browserDefer(timeoutRequest,timeout);else isPromiseLike(timeout)&&timeout.then(timeoutRequest)}}this.$get=["$browser","$window","$document","$sniffer",function($browser,$window,$document,$sniffer){var params=[$browser,createXhr,$browser.defer,$window.angular.callbacks,$document[0],$window.location.protocol.replace(":",""),$sniffer],param4ie=params.concat([createHttpBackend.apply(this,params)]);return ieCreateHttpBackend&&ieCreateHttpBackend.apply(this,param4ie)||createHttpBackend.apply(this,params)}];var lowercase=function(string){return angular.isString(string)?string.toLowerCase():string},msie=int((/msie (\d+)/.exec(lowercase(navigator.userAgent))||[])[1]);isNaN(msie)&&(msie=int((/trident\/.*; rv:(\d+)/.exec(lowercase(navigator.userAgent))||[])[1]));var lowercase=function(string){return angular.isString(string)?string.toLowerCase():string}}),function(){"use strict";angular.module("BB").value("AppConfig",{appId:"f6b16c23",appKey:"f0bc4f65f4fbfe7b4b3b7264b655f5eb"}),angular.module("BB").value("AirbrakeConfig",{projectId:"122836",projectKey:"e6d6710b2cf00be965e8452d6a384d37",environment:"localhost"===window.location.hostname?"development":"production"}),window.use_no_conflict?(window.bbjq=$.noConflict(),angular.module("BB").value("$bbug",jQuery.noConflict(!0))):angular.module("BB").value("$bbug",jQuery),angular.module("BB").constant("UriTemplate",window.UriTemplate),angular.module("BB").config(["$locationProvider","$httpProvider","$provide","ie8HttpBackendProvider","uiGmapGoogleMapApiProvider",function($locationProvider,$httpProvider,$provide,ie8HttpBackendProvider,uiGmapGoogleMapApiProvider){"ngInject";var int,lowercase,msie,regexp,result,webkit;uiGmapGoogleMapApiProvider.configure({v:"3.20",libraries:"weather,geometry,visualization"}),$httpProvider.defaults.headers.common={"App-Id":"f6b16c23","App-Key":"f0bc4f65f4fbfe7b4b3b7264b655f5eb"},int=function(str){return parseInt(str,10)},lowercase=function(string){return angular.isString(string)?string.toLowerCase():string},msie=int((/msie (\d+)/.exec(lowercase(navigator.userAgent))||[])[1]),isNaN(msie)&&(msie=int((/trident\/.*; rv:(\d+)/.exec(lowercase(navigator.userAgent))||[])[1])),regexp=/Safari\/([\d.]+)/,result=regexp.exec(navigator.userAgent),result&&(webkit=parseFloat(result[1])),(msie&&9>=msie||webkit&&537>webkit)&&$provide.provider({$httpBackend:ie8HttpBackendProvider})}]),window.bookingbug={logout:function(options){var logout_opts;return options||(options={}),options.reload!==!1&&(options.reload=!0),logout_opts={app_id:"f6b16c23",app_key:"f0bc4f65f4fbfe7b4b3b7264b655f5eb"},options.root&&(logout_opts.root=options.root),angular.injector(["BB.Services","BB.Models","ng"]).get("LoginService").logout(logout_opts),options.reload?window.location.reload():void 0}}}.call(this),function(){"use strict";angular.module("BB",["ngStorage","ngMessages","ngSanitize","ngFileUpload","ngCookies","ngAnimate","angular-carousel","angular-hal","angular-data.DSCacheFactory","angular.filter","pascalprecht.translate","schemaForm","ui.bootstrap","ui.map","ui.router.util","ui.select","ui-rangeSlider","uiGmapgoogle-maps","vcRecaptcha","BB.Controllers","BB.Filters","BB.Models","BB.Services","BB.Directives","BB.i18n","BB.uib"]),angular.module("BB.Services",["ngResource","ngSanitize","pascalprecht.translate"]),angular.module("BB.Controllers",["ngSanitize"]),angular.module("BB.Directives",[]),angular.module("BB.Filters",[]),angular.module("BB.Models",[])}.call(this),function(){"use strict";angular.module("BB").run(["$bbug","DebugUtilsService","FormDataStoreService","$log","$rootScope","$sessionStorage","GeneralOptions",function($bbug,DebugUtilsService,FormDataStoreService,$log,$rootScope,$sessionStorage,GeneralOptions){"ngInject";$rootScope.$log=$log,$rootScope.$setIfUndefined=FormDataStoreService.setIfUndefined,$rootScope.bb||($rootScope.bb={}),$rootScope.bb.api_url=$sessionStorage.getItem("host"),$bbug.support.opacity===!1&&(document.createElement("header"),document.createElement("nav"),document.createElement("section"),document.createElement("footer")),GeneralOptions.use_local_time_zone&&(GeneralOptions.display_time_zone=moment.tz.guess())}])}.call(this);var NO_JQUERY={};!function(window,$,undefined){if(!("console"in window)){var c=window.console={};c.log=c.warn=c.error=c.debug=function(){}}$===NO_JQUERY&&($={fn:{},extend:function(){for(var a=arguments[0],i=1,len=arguments.length;len>i;i++){var b=arguments[i];for(var prop in b)a[prop]=b[prop]}return a}}),$.fn.pm=function(){return console.log("usage: \nto send: $.pm(options)\nto receive: $.pm.bind(type, fn, [origin])"),this},$.pm=window.pm=function(options){pm.send(options)},$.pm.bind=window.pm.bind=function(type,fn,origin,hash,async_reply){pm.bind(type,fn,origin,hash,async_reply===!0)},$.pm.unbind=window.pm.unbind=function(type,fn){pm.unbind(type,fn)},$.pm.origin=window.pm.origin=null,$.pm.poll=window.pm.poll=200;var pm={send:function(options){var o=$.extend({},pm.defaults,options),target=o.target;if(!o.target)return void console.warn("postmessage target window required");if(!o.type)return void console.warn("postmessage type required");var msg={data:o.data,type:o.type};o.success&&(msg.callback=pm._callback(o.success)),o.error&&(msg.errback=pm._callback(o.error)),"postMessage"in target&&!o.hash?(pm._bind(),target.postMessage(JSON.stringify(msg),o.origin||"*")):"postMessage"in target.contentWindow&&!o.hash?(pm._bind(),target.contentWindow.postMessage(JSON.stringify(msg),o.origin||"*")):(pm.hash._bind(),pm.hash.send(o,msg))},bind:function(type,fn,origin,hash,async_reply){pm._replyBind(type,fn,origin,hash,async_reply)},_replyBind:function(type,fn,origin,hash,isCallback){"postMessage"in window&&!hash?pm._bind():pm.hash._bind();var l=pm.data("listeners.postmessage");l||(l={},pm.data("listeners.postmessage",l));var fns=l[type];fns||(fns=[],l[type]=fns),fns.push({fn:fn,callback:isCallback,origin:origin||$.pm.origin})},unbind:function(type,fn){var l=pm.data("listeners.postmessage");if(l)if(type)if(fn){var fns=l[type];if(fns){for(var m=[],i=0,len=fns.length;len>i;i++){var o=fns[i];o.fn!==fn&&m.push(o)}l[type]=m}}else delete l[type];else for(var i in l)delete l[i]},data:function(k,v){return v===undefined?pm._data[k]:(pm._data[k]=v,v)},_data:{},_CHARS:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),_random:function(){for(var r=[],i=0;32>i;i++)r[i]=pm._CHARS[0|32*Math.random()];return r.join("")},_callback:function(fn){var cbs=pm.data("callbacks.postmessage");cbs||(cbs={},pm.data("callbacks.postmessage",cbs));var r=pm._random();return cbs[r]=fn,r},_bind:function(){pm.data("listening.postmessage")||(window.addEventListener?window.addEventListener("message",pm._dispatch,!1):window.attachEvent&&window.attachEvent("onmessage",pm._dispatch),pm.data("listening.postmessage",1))},_dispatch:function(e){function sendReply(data){msg.callback&&pm.send({target:e.source,data:data,type:msg.callback})}try{var msg=JSON.parse(e.data)}catch(ex){return void console.warn("postmessage data invalid json: ",ex)}if(!msg.type)return void console.warn("postmessage message type required");var cbs=pm.data("callbacks.postmessage")||{},cb=cbs[msg.type];if(cb)cb(msg.data);else for(var l=pm.data("listeners.postmessage")||{},fns=l[msg.type]||[],i=0,len=fns.length;len>i;i++){var o=fns[i];if(o.origin&&"*"!==o.origin&&e.origin!==o.origin){if(console.warn("postmessage message origin mismatch",e.origin,o.origin),msg.errback){var error={message:"postmessage origin mismatch",origin:[e.origin,o.origin]};pm.send({target:e.source,data:error,type:msg.errback})}}else try{o.callback?o.fn(msg.data,sendReply,e):sendReply(o.fn(msg.data,e))}catch(ex){if(!msg.errback)throw ex;pm.send({target:e.source,data:ex,type:msg.errback})}}}};pm.hash={send:function(options,msg){var target_window=options.target,target_url=options.url;if(!target_url)return void console.warn("postmessage target window url is required");target_url=pm.hash._url(target_url);var source_window,source_url=pm.hash._url(window.location.href);if(window==target_window.parent)source_window="parent";else try{for(var i=0,len=parent.frames.length;len>i;i++){var f=parent.frames[i];if(f==window){source_window=i;break}}}catch(ex){source_window=window.name}if(null==source_window)return void console.warn("postmessage windows must be direct parent/child windows and the child must be available through the parent window.frames list");var hashmessage={"x-requested-with":"postmessage",source:{name:source_window,url:source_url},postmessage:msg},hash_id="#x-postmessage-id="+pm._random();target_window.location=target_url+hash_id+encodeURIComponent(JSON.stringify(hashmessage))},_regex:/^\#x\-postmessage\-id\=(\w{32})/,_regex_len:"#x-postmessage-id=".length+32,_bind:function(){pm.data("polling.postmessage")||(setInterval(function(){var hash=""+window.location.hash,m=pm.hash._regex.exec(hash);if(m){var id=m[1];pm.hash._last!==id&&(pm.hash._last=id,pm.hash._dispatch(hash.substring(pm.hash._regex_len)))}},$.pm.poll||200),pm.data("polling.postmessage",1))},_dispatch:function(hash){function sendReply(data){msg.callback&&pm.send({target:source_window,data:data,type:msg.callback,hash:!0,url:hash.source.url})}if(hash){try{if(hash=JSON.parse(decodeURIComponent(hash)),!("postmessage"===hash["x-requested-with"]&&hash.source&&null!=hash.source.name&&hash.source.url&&hash.postmessage))return}catch(ex){return}var msg=hash.postmessage,cbs=pm.data("callbacks.postmessage")||{},cb=cbs[msg.type];if(cb)cb(msg.data);else{var source_window;source_window="parent"===hash.source.name?window.parent:window.frames[hash.source.name];for(var l=pm.data("listeners.postmessage")||{},fns=l[msg.type]||[],i=0,len=fns.length;len>i;i++){var o=fns[i];if(o.origin){var origin=/https?\:\/\/[^\/]*/.exec(hash.source.url)[0];if("*"!==o.origin&&origin!==o.origin){if(console.warn("postmessage message origin mismatch",origin,o.origin),msg.errback){var error={message:"postmessage origin mismatch",origin:[origin,o.origin]};pm.send({target:source_window,data:error,type:msg.errback,hash:!0,url:hash.source.url})}continue}}try{o.callback?o.fn(msg.data,sendReply):sendReply(o.fn(msg.data))}catch(ex){if(!msg.errback)throw ex;pm.send({target:source_window,data:ex,type:msg.errback,hash:!0,url:hash.source.url})}}}}},_url:function(url){return(""+url).replace(/#.*$/,"")}},$.extend(pm,{defaults:{target:null,url:null,type:null,data:null,success:null,error:null,origin:"*",hash:!1}})}(this,"undefined"==typeof jQuery?NO_JQUERY:jQuery),"JSON"in window&&window.JSON||(JSON={}),function(){function f(n){return 10>n?"0"+n:n}function quote(string){return escapable.lastIndex=0,escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return"string"==typeof c?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,partial,mind=gap,value=holder[key];switch(value&&"object"==typeof value&&"function"==typeof value.toJSON&&(value=value.toJSON(key)),"function"==typeof rep&&(value=rep.call(holder,key,value)),typeof value){case"string":return quote(value);case"number":return isFinite(value)?String(value):"null";case"boolean":case"null":return String(value);case"object":if(!value)return"null";if(gap+=indent,partial=[],"[object Array]"===Object.prototype.toString.apply(value)){for(length=value.length,i=0;length>i;i+=1)partial[i]=str(i,value)||"null";return v=0===partial.length?"[]":gap?"[\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"]":"["+partial.join(",")+"]",gap=mind,v}if(rep&&"object"==typeof rep)for(length=rep.length,i=0;length>i;i+=1)k=rep[i],"string"==typeof k&&(v=str(k,value),v&&partial.push(quote(k)+(gap?": ":":")+v));else for(k in value)Object.hasOwnProperty.call(value,k)&&(v=str(k,value),v&&partial.push(quote(k)+(gap?": ":":")+v));return v=0===partial.length?"{}":gap?"{\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"}":"{"+partial.join(",")+"}",gap=mind,v}}"function"!=typeof Date.prototype.toJSON&&(Date.prototype.toJSON=function(key){return this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z"},String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf()});var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;"function"!=typeof JSON.stringify&&(JSON.stringify=function(value,replacer,space){var i;if(gap="",indent="","number"==typeof space)for(i=0;space>i;i+=1)indent+=" ";else"string"==typeof space&&(indent=space);if(rep=replacer,replacer&&"function"!=typeof replacer&&("object"!=typeof replacer||"number"!=typeof replacer.length))throw new Error("JSON.stringify");return str("",{"":value})}),"function"!=typeof JSON.parse&&(JSON.parse=function(text,reviver){function walk(holder,key){var k,v,value=holder[key];if(value&&"object"==typeof value)for(k in value)Object.hasOwnProperty.call(value,k)&&(v=walk(value,k),void 0!==v?value[k]=v:delete value[k]);return reviver.call(holder,key,value)}var j;if(cx.lastIndex=0,cx.test(text)&&(text=text.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})),/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return j=eval("("+text+")"),"function"==typeof reviver?walk({"":j},""):j;throw new SyntaxError("JSON.parse")})}(),function(){"use strict";angular.module("schemaForm").config(["schemaFormProvider","schemaFormDecoratorsProvider","sfPathProvider",function(schemaFormProvider,schemaFormDecoratorsProvider,sfPathProvider){var datetimepicker,timepicker;return timepicker=function(name,schema,options){var f;return"string"===schema.type&&"time"===schema.format?(f=schemaFormProvider.stdFormObj(name,schema,options),f.key=options.path,f.type="timepicker",options.lookup[sfPathProvider.stringify(options.path)]=f,f):void 0},schemaFormProvider.defaults.string.unshift(timepicker),datetimepicker=function(name,schema,options){var f;return"string"===schema.type&&"datetime"===schema.format?(f=schemaFormProvider.stdFormObj(name,schema,options),f.key=options.path,f.type="datetime",options.lookup[sfPathProvider.stringify(options.path)]=f,f):void 0},schemaFormProvider.defaults.string.unshift(datetimepicker),schemaFormDecoratorsProvider.addMapping("bootstrapDecorator","time","bootstrap_ui_time_form.html"),schemaFormDecoratorsProvider.createDirective("time","bootstrap_ui_time_form.html"),schemaFormDecoratorsProvider.addMapping("bootstrapDecorator","datetime","bootstrap_ui_datetime_form.html"),schemaFormDecoratorsProvider.createDirective("datetime","bootstrap_ui_datetime_form.html"),schemaFormDecoratorsProvider.addMapping("bootstrapDecorator","price","price_form.html"),schemaFormDecoratorsProvider.createDirective("price","price_form.html"),schemaFormDecoratorsProvider.addMapping("bootstrapDecorator","date","date_form.html"),schemaFormDecoratorsProvider.createDirective("date","date_form.html"),schemaFormDecoratorsProvider.addMapping("bootstrapDecorator","radios","radios.html"),schemaFormDecoratorsProvider.createDirective("radios","radios.html"),schemaFormDecoratorsProvider.addMapping("bootstrapDecorator","radios-inline","radios-inline.html"),schemaFormDecoratorsProvider.createDirective("radios-inline","radios-inline.html"),schemaFormDecoratorsProvider.addMapping("bootstrapDecorator","radiobuttons","radio-buttons.html"),schemaFormDecoratorsProvider.createDirective("radiobuttons","radio-buttons.html")}])}.call(this),angular.module("angular-hal",[]).provider("data_cache",function(){this.$get=function(){return data=[],{set:function(key,val){return data[key]=val,val},get:function(key){return data[key]},del:function(key){delete data[key]},has:function(key){return key in data},delMatching:function(str){for(var k in data)-1!=k.indexOf(str)&&delete data[k]}}}}).provider("shared_header",function(){this.$get=function(){return data={},{set:function(key,val,store){return store.setItem(key,val),data[key]=val,val},get:function(key){return data[key]},del:function(key){delete data[key]},has:function(key){return key in data}}}}).factory("halClient",["$http","$q","data_cache","shared_header","UriTemplate","$cookies","$sessionStorage","$localStorage",function($http,$q,data_cache,shared_header,UriTemplate,$cookies,$sessionStorage,$localStorage){function BaseResource(href,options,data,extra){function defineHiddenProperty(target,name,value){target[name]=value}function embedResource(resource){if(angular.isArray(resource))return resource.map(function(resource){return embedResource(resource)});var href=resource.$href("self");embedded.set(href,$q.when(resource))}function hrefLink(link,params){var href=link.templated?new UriTemplate(link.href).fillFromObject(params||{}):link.href;return href}function callLink(method,link,params,data){if(null==params&&(params={}),angular.isArray(link))return $q.all(link.map(function(link){if("GET"!==method)throw"method is not supported for arrays";return callLink(method,link,params,data)}));var linkHref=hrefLink(link,params);return"GET"===method?embedded.has(linkHref)&&!params.no_cache?embedded.get(linkHref):embedded.set(linkHref,callService(method,linkHref,options,data)):callService(method,linkHref,options,data)}function flushLink(link,params){if(angular.isArray(link))return link.map(function(link){return flushLink(link,params)});var linkHref=hrefLink(link,params);embedded.has(linkHref)&&embedded.del(linkHref)}options||(options={}),extra||(extra={});var links={},embedded=data_cache;data.hasOwnProperty("auth_token")&&(options.auth_token=data.auth_token),href=getSelfLink(href,data).href,defineHiddenProperty(this,"$href",function(rel,params){return rel in links?hrefLink(links[rel],params):null}),defineHiddenProperty(this,"$has",function(rel){return rel in links}),defineHiddenProperty(this,"$flush",function(rel,params){var link=links[rel];return flushLink(link,params)}),defineHiddenProperty(this,"$get",function(rel,params){var link=links[rel];return callLink("GET",link,params)}),defineHiddenProperty(this,"$post",function(rel,params,data){var link=links[rel];return callLink("POST",link,params,data)}),defineHiddenProperty(this,"$put",function(rel,params,data){var link=links[rel];return callLink("PUT",link,params,data)}),defineHiddenProperty(this,"$patch",function(rel,params,data){var link=links[rel];return callLink("PATCH",link,params,data)}),defineHiddenProperty(this,"$del",function(rel,params,data){var link=links[rel];return callLink("DELETE",link,params,data)}),defineHiddenProperty(this,"$links",function(){return links}),defineHiddenProperty(this,"$toStore",function(){return JSON.stringify({data:this,links:links,options:options})}),defineHiddenProperty(this,"setOption",function(key,value){options[key]=value}),defineHiddenProperty(this,"getOption",function(key){return options[key]}),defineHiddenProperty(this,"$link",function(rel){return links[rel]}),Object.keys(data).filter(function(key){return!~["_","$"].indexOf(key[0])}).forEach(function(key){this[key]=data[key]},this),data._links&&Object.keys(data._links).forEach(function(rel){var link=data._links[rel];link=normalizeLink(href,link),links[rel]=link},this),data._embedded&&Object.keys(data._embedded).forEach(function(rel){var embedded=data._embedded[rel],link=getSelfLink(href,embedded);links[rel]=link;var resource=createResource(href,options,embedded);embedResource(resource)},this),extra.is_new&&(this.is_new=!0)}function createResource(href,options,data,extra){if(angular.isArray(data))return data.map(function(data){return createResource(href,options,data,extra)});var resource=new BaseResource(href,options,data,extra);return resource}function normalizeLink(baseHref,link){return angular.isArray(link)?link.map(function(link){return normalizeLink(baseHref,link)}):(link?("string"==typeof link&&(link={href:link}),link.href=resolveUrl(baseHref,link.href)):link={href:baseHref},link)}function getSelfLink(baseHref,resource){return angular.isArray(resource)?resource.map(function(resource){return getSelfLink(baseHref,resource)}):normalizeLink(baseHref,resource&&resource._links&&resource._links.self)}function callService(method,href,options,data){options||(options={});var headers={"Content-Type":"application/json",Accept:"application/hal+json,application/json"};options.authorization&&(headers.Authorization=options.authorization),options.app_id&&shared_header.set("app_id",options.app_id,$sessionStorage),options.app_key&&shared_header.set("app_key",options.app_key,$sessionStorage),options.auth_token&&($sessionStorage.setItem("auth_token",options.auth_token),shared_header.set("auth_token",options.auth_token,$sessionStorage)),shared_header.has("app_id")&&(headers["App-Id"]=shared_header.get("app_id")),shared_header.has("app_key")&&(headers["App-Key"]=shared_header.get("app_key")),shared_header.has("auth_token")&&(headers["Auth-Token"]=shared_header.get("auth_token")),options.bypass_auth&&(headers["Bypass-Auth"]=options.bypass_auth);var resource=$http({method:method,url:options.transformUrl?options.transformUrl(href):href,headers:headers,data:data}).then(function(res){switch(res.headers("auth-token")&&201==res.status&&(options.auth_token=res.headers("Auth-Token"),shared_header.set("auth_token",res.headers("Auth-Token"),$sessionStorage),$localStorage.getItem("auth_token")&&$localStorage.setItem("auth_token",res.headers("Auth-Token"))),res.status){case 200:return res.data&&'"null"'!==res.data?createResource(href,options,res.data):null;case 201:return extra={is_new:!0},res.data?createResource(href,options,res.data,extra):res.headers("Content-Location")?res.headers("Content-Location"):null;case 204:return null;default:return $q.reject(res)}},function(res){return $q.reject(res)});return resource}function parseHal(data){var resource=createResource(data._links.self.href,null,data);return resource}function resolveUrl(baseHref,href){for(var resultHref="",reFullUrl=/^((?:\w+\:)?)((?:\/\/)?)([^\/]*)((?:\/.*)?)$/,baseHrefMatch=reFullUrl.exec(baseHref),hrefMatch=reFullUrl.exec(href),partIndex=1;5>partIndex;partIndex++)resultHref+=hrefMatch[partIndex]?hrefMatch[partIndex]:baseHrefMatch[partIndex];return resultHref}return $sessionStorage.getItem("auth_token")?shared_header.set("auth_token",$sessionStorage.getItem("auth_token"),$sessionStorage):$cookies.get("Auth-Token")&&!shared_header.has("auth_token")&&shared_header.set("auth_token",$cookies.get("Auth-Token"),$sessionStorage),{setCache:function(cache){data_cache=cache},clearCache:function(str){data_cache.delMatching(str)},createResource:function(store){return"string"==typeof store&&(store=JSON.parse(store)),resource=store.data,resource._links=store.links,key=store.links.self.href,options=store.options,new BaseResource(key,options,resource)},$get:function(href,options){return!data_cache.has(href)||options&&options.no_cache?data_cache.set(href,callService("GET",href,options)):data_cache.get(href)},$post:function(href,options,data){return callService("POST",href,options,data)},$put:function(href,options,data){return callService("PUT",href,options,data)},$patch:function(href,options,data){return callService("PATCH",href,options,data)},$del:function(href,options,data){return callService("DELETE",href,options,data)},$parse:function(data){return parseHal(data)}}}]),angular.module("ngStorage",[]).factory("$fakeStorage",["$cookies",function($cookies){function FakeStorage(){}return FakeStorage.prototype.setItem=function(key,value){$cookies.put(key,value)},FakeStorage.prototype.getItem=function(key){return"undefined"==typeof $cookies.get(key)?null:$cookies.get(key)},FakeStorage.prototype.removeItem=function(key){$cookies.get(key)&&$cookies.remove(key)},FakeStorage.prototype.clear=function(){for(var key in $cookies.getAll())$cookies.remove(key)},FakeStorage.prototype.key=function(index){return Object.keys($cookies.getAll())[index]},new FakeStorage}]).factory("$localStorage",["$window","$fakeStorage",function($window,$fakeStorage){function isStorageSupported(storageName){var testKey="test",storage=$window[storageName];try{return storage.setItem(testKey,"1"),storage.removeItem(testKey),!0}catch(error){return!1}}var storage=isStorageSupported("localStorage")?$window.localStorage:$fakeStorage;return{setItem:function(key,value){storage.setItem(key,value)},getItem:function(key,defaultValue){return storage.getItem(key)||defaultValue},setObject:function(key,value){storage.setItem(key,JSON.stringify(value))},getObject:function(key){return JSON.parse(storage.getItem(key)||"{}")},removeItem:function(key){storage.removeItem(key)},clear:function(){storage.clear()},key:function(index){storage.key(index)}}}]).factory("$sessionStorage",["$window","$fakeStorage",function($window,$fakeStorage){function isStorageSupported(storageName){var testKey="test",storage=$window[storageName];try{return storage.setItem(testKey,"1"),storage.removeItem(testKey),!0}catch(error){return!1}}var storage=isStorageSupported("sessionStorage")?$window.sessionStorage:$fakeStorage;return{setItem:function(key,value){storage.setItem(key,value)},getItem:function(key,defaultValue){return storage.getItem(key)||defaultValue},setObject:function(key,value){storage.setItem(key,JSON.stringify(value))},getObject:function(key){return JSON.parse(storage.getItem(key)||"{}")},removeItem:function(key){storage.removeItem(key)},clear:function(){storage.clear()},key:function(index){storage.key(index)}}}]),angular.module("ngLocalData",["angular-hal"]).factory("$localCache",["halClient","$q","$sessionStorage",function(halClient,$q,$sessionStorage){return data={},jsonData=function(data){return data&&JSON.parse(data)},storage=function(){return $sessionStorage},localSave=function(key,item){storage().setItem(key,item.$toStore())},localLoad=function(key){return res=jsonData(storage().getItem(key)),res?(r=halClient.createResource(res),def=$q.defer(),def.resolve(r),def.promise):null},localDelete=function(key){storage().removeItem(key)},{set:function(key,val){return data[key]=val,val.then(function(item){localSave(key,item)}),val},get:function(key){return localLoad(key),data[key]||(data[key]=localLoad(key)),data[key]},del:function(key){localDelete(key),delete data[key]},has:function(key){return data[key]||(res=localLoad(key),res&&(data[key]=res)),key in data}}}]).factory("$localData",["$http","$rootScope","$sessionStorage",function($http,$rootScope,$sessionStorage){function LocalDataFactory(name){function LocalData(value){this.setStore(value)}return LocalData.prototype.jsonData=function(data){return data&&JSON.parse(data)},LocalData.prototype.storage=function(){
return $sessionStorage},LocalData.prototype.localSave=function(item){this.storage().setItem(this.store_name+item.id,JSON.stringify(item))},LocalData.prototype.localSaveIndex=function(ids){this.storage().setItem(this.store_name,ids.join(",")),this.ids=ids},LocalData.prototype.localLoadIndex=function(){return store=this.storage().getItem(this.store_name),records=store&&store.split(",")||[],records},LocalData.prototype.localLoad=function(id){return this.jsonData(this.storage().getItem(this.store_name+id))},LocalData.prototype.count=function(){return this.ids.length},LocalData.prototype.setStore=function(name){for(this.store_name=name,this.data_store=[],this.ids=this.localLoadIndex(),a=0;a<this.ids.length;a++)this.data_store.push(this.localLoad(this.ids[a]))},LocalData.prototype.update=function(data){ids=[];for(x in data)data[x].id&&(ids.push(data[x].id),this.localSave(data[x]));this.localSaveIndex(ids)},new LocalData(name)}return LocalDataFactory}]),function(){var base;(base=moment.fn).toISODate||(base.toISODate=function(){return this.locale("en").format("YYYY-MM-DD")})}.call(this),getControllerScope=function(controller,fn){$(document).ready(function(){var $element=$('div[data-ng-controller="'+controller+'"]'),scope=angular.element($element).scope();fn(scope)})},function(){String.prototype.includes||(String.prototype.includes=function(search,start){return"number"!=typeof start&&(start=0),start+search.length>this.length?!1:-1!==this.indexOf(search,start)}),String.prototype.parameterise=function(seperator){return null==seperator&&(seperator="-"),this.trim().replace(/\s/g,seperator).toLowerCase()}}.call(this),function(){"use strict";window.Collection=function(){function Collection(){}return Collection}(),window.Collection.Base=function(){function Base(res,items,params){var clean_params,key,m,n,val;this.res=res,this.items=items,this.params=params,this.callbacks=[],clean_params={};for(key in params)val=params[key],null!=val&&(null!=val.id?clean_params[key+"_id"]=val.id:clean_params[key]=val);if(this.jparams=JSON.stringify(clean_params),res)for(n in res)m=res[n],this[n]=m}return Base.prototype.checkItem=function(item){var call,existingItem,i,index,j,k,len1,len2,len3,ref,ref1,ref2,results;if(!this.matchesParams(item))return this.deleteItem(item),!0;for(ref=this.items,index=i=0,len1=ref.length;len1>i;index=++i)if(existingItem=ref[index],item.self===existingItem.self){for(this.items[index]=item,ref1=this.callbacks,j=0,len2=ref1.length;len2>j;j++)call=ref1[j],call[1](item,"update");return!0}for(this.items.push(item),ref2=this.callbacks,results=[],k=0,len3=ref2.length;len3>k;k++)call=ref2[k],results.push(call[1](item,"add"));return results},Base.prototype.deleteItem=function(item){var call,i,len,len1,ref,results;if(len=this.items.length,this.items=this.items.filter(function(x){return x.self!==item.self}),this.items.length!==len){for(ref=this.callbacks,results=[],i=0,len1=ref.length;len1>i;i++)call=ref[i],results.push(call[1](item,"delete"));return results}},Base.prototype.getItems=function(){return this.items},Base.prototype.addCallback=function(obj,fn){var call,i,len1,ref;for(ref=this.callbacks,i=0,len1=ref.length;len1>i;i++)if(call=ref[i],call[0]===obj)return;return this.callbacks.push([obj,fn])},Base.prototype.matchesParams=function(item){return!0},Base}(),window.BaseCollections=function(){function BaseCollections(){this.collections=[]}return BaseCollections.prototype.count=function(){return this.collections.length},BaseCollections.prototype.add=function(col){return this.collections.push(col)},BaseCollections.prototype.checkItems=function(item){var col,i,len1,ref,results;for(ref=this.collections,results=[],i=0,len1=ref.length;len1>i;i++)col=ref[i],results.push(col.checkItem(item));return results},BaseCollections.prototype.deleteItems=function(item){var col,i,len1,ref,results;for(ref=this.collections,results=[],i=0,len1=ref.length;len1>i;i++)col=ref[i],results.push(col.deleteItem(item));return results},BaseCollections.prototype.find=function(prms){var clean_params,col,i,jprms,key,len1,ref,val;clean_params={};for(key in prms)val=prms[key],null!=val&&(null!=val.id?clean_params[key+"_id"]=val.id:clean_params[key]=val);for(jprms=JSON.stringify(clean_params),ref=this.collections,i=0,len1=ref.length;len1>i;i++)if(col=ref[i],jprms===col.jparams)return col},BaseCollections.prototype["delete"]=function(col){return this.collections=_.without(this.collections,col)},BaseCollections}()}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;window.Collection.Day=function(superClass){function Day(){return Day.__super__.constructor.apply(this,arguments)}return extend(Day,superClass),Day.prototype.checkItem=function(item){return Day.__super__.checkItem.apply(this,arguments)},Day}(window.Collection.Base),angular.module("BB.Services").provider("DayCollections",function(){return{$get:function(){return new window.BaseCollections}}})}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;window.Collection.Space=function(superClass){function Space(){return Space.__super__.constructor.apply(this,arguments)}return extend(Space,superClass),Space.prototype.checkItem=function(item){return Space.__super__.checkItem.apply(this,arguments)},Space}(window.Collection.Base),angular.module("BB.Services").provider("SpaceCollections",function(){return{$get:function(){return new window.BaseCollections}}})}.call(this),function(){"use strict";angular.module("BB.Filters").filter("stripPostcode",function(){return function(address){var match;return match=address.toLowerCase().match(/[a-z]+\d/),match&&(address=address.substr(0,match.index)),address=$.trim(address),/,$/.test(address)&&(address=address.slice(0,-1)),address}}),angular.module("BB.Filters").filter("labelNumber",function(){return function(input,labels){var response;return response=input,labels[input]&&(response=labels[input]),response}}),angular.module("BB.Filters").filter("interpolate",["version",function(version){return function(text){return String(text).replace(/\%VERSION\%/gm,version)}}]),angular.module("BB.Filters").filter("rag",function(){return function(value,v1,v2){return v1>=value?"red":v2>=value?"amber":"green"}}),angular.module("BB.Filters").filter("time",["$window",function($window){return function(v){return $window.sprintf("%02d:%02d",Math.floor(v/60),v%60)}}]),angular.module("BB.Filters").filter("address_single_line",function(){return function(_this){return function(address){var addr;if(address&&address.address1)return addr="",addr+=address.address1,address.address2&&address.address2.length>0&&(addr+=", ",addr+=address.address2),address.address3&&address.address3.length>0&&(addr+=", ",addr+=address.address3),address.address4&&address.address4.length>0&&(addr+=", ",addr+=address.address4),address.address5&&address.address5.length>0&&(addr+=", ",addr+=address.address5),address.postcode&&address.postcode.length>0&&(addr+=", ",addr+=address.postcode),addr}}(this)}),angular.module("BB.Filters").filter("address_multi_line",function(){return function(_this){return function(address){var str;if(address&&address.address1)return str="",address.address1&&(str+=address.address1),address.address2&&str.length>0&&(str+="<br/>"),address.address2&&(str+=address.address2),address.address3&&str.length>0&&(str+="<br/>"),address.address3&&(str+=address.address3),address.address4&&str.length>0&&(str+="<br/>"),address.address4&&(str+=address.address4),address.address5&&str.length>0&&(str+="<br/>"),address.address5&&(str+=address.address5),address.postcode&&str.length>0&&(str+="<br/>"),address.postcode&&(str+=address.postcode),str}}(this)}),angular.module("BB.Filters").filter("map_lat_long",function(){return function(_this){return function(address){var cord;if(address&&address.map_url)return cord=/([-+]*\d{1,3}[\.]\d*)[, ]([-+]*\d{1,3}[\.]\d*)/.exec(address.map_url),cord[0]}}(this)}),angular.module("BB.Filters").filter("distance",["$translate","bbLocale",function($translate,bbLocale){return function(distance_in_km,round_by){var distance,unit,use_miles;return distance_in_km?(distance=distance_in_km,use_miles=bbLocale.getLocale().match(/^(en|en-gb|en-us)$/gi),use_miles&&(distance*=.621371192),round_by&&(distance=Math.round(distance*Math.pow(10,round_by))/Math.pow(10,round_by)),unit=use_miles?$translate.instant("CORE.FILTERS.DISTANCE.MILES"):$translate.instant("CORE.FILTERS.DISTANCE.KILOMETRES"),distance=distance+" "+unit):""}}]),angular.module("BB.Filters").filter("currency",["$window","$rootScope","CompanyStoreService","$translate",function($window,$rootScope,CompanyStoreService,$translate){return function(amount,currency_code,pretty_price){var currency_codes,decimal_places,format,hide_decimal;return null==pretty_price&&(pretty_price=!1),angular.isNumber(amount)?(currency_codes={USD:"$",GBP:"£",AUD:"$",EUR:"€",CAD:"$",MIXED:"~",RUB:"₽"},currency_code||(currency_code=CompanyStoreService.currency_code),format=$translate.instant(["CORE.FILTERS.CURRENCY.THOUSANDS_SEPARATOR","CORE.FILTERS.CURRENCY.DECIMAL_SEPARATOR","CORE.FILTERS.CURRENCY.CURRENCY_FORMAT"]),hide_decimal=pretty_price&&amount%100===0,decimal_places=hide_decimal?0:2,$window.accounting.formatMoney(amount/100,currency_codes[currency_code],decimal_places,format.THOUSANDS_SEPARATOR,format.DECIMAL_SEPARATORS,format.CURRENCY_FORMAT)):void 0}}]),angular.module("BB.Filters").filter("icurrency",["$filter",function($filter){return function(number,currency_code){return $filter("currency")(number,currency_code)}}]),angular.module("BB.Filters").filter("raw_currency",function(){return function(number){return number/100}}),angular.module("BB.Filters").filter("pretty_price",["$translate","$filter",function($translate,$filter){return function(price,currency_code){return 0===parseFloat(price)?$translate.instant("CORE.FILTERS.PRETTY_PRICE.FREE"):$filter("currency")(price,currency_code,!0)}}]),angular.module("BB.Filters").filter("ipretty_price",["$filter",function($filter){return function(number,currencyCode){return $filter("pretty_price")(number,currencyCode)}}]),angular.module("BB.Filters").filter("time_period",["$translate",function($translate){return function(v){var hours,minutes,show_seperator,time_period;if(angular.isNumber(v))return minutes=parseInt(v),hours=Math.floor(minutes/60),minutes%=60,show_seperator=hours>0&&minutes>0,time_period=$translate.instant("CORE.FILTERS.TIME_PERIOD.TIME_PERIOD",{hours:hours,minutes:minutes,show_seperator:+show_seperator},"messageformat")}}]),angular.module("BB.Filters").filter("time_period_from_seconds",["$translate","$filter",function($translate,$filter){return function(v){var seconds,time_period;if(angular.isNumber(v))return seconds=parseInt(v),time_period="",seconds>=60&&(time_period+=$filter("time_period")(seconds/60),seconds%60>0&&(time_period+=$translate.instant("CORE.FILTERS.TIME_PERIOD.TIME_SEPARATOR"))),seconds%60>0&&(time_period+=moment.duration(seconds%60,"seconds").humanize()),time_period}}]),angular.module("BB.Filters").filter("twelve_hour_time",["$window",function($window){return function(time,options){var h,m,omit_mins_on_hour,separator,suffix,t;if(angular.isNumber(time))return omit_mins_on_hour=options&&options.omit_mins_on_hour||!1,separator=options&&options.separator?options.separator:":",t=time,h=Math.floor(t/60),m=t%60,suffix="am",h>=12&&(suffix="pm"),h>12&&(h-=12),time=0===m&&omit_mins_on_hour?""+h:""+h+separator+$window.sprintf("%02d",m),time+=suffix}}]),angular.module("BB.Filters").filter("round_up",function(){return function(number,interval){var result;return result=number/interval,result=parseInt(result),result*=interval,number%interval>0&&(result+=interval),result}}),angular.module("BB.Filters").filter("exclude_days",function(){return function(days,excluded){return _.filter(days,function(day){return-1===excluded.indexOf(day.date.format("dddd"))})}}),angular.module("BB.Filters").filter("local_phone_number",["CompanyStoreService","ValidatorService",function(CompanyStoreService,ValidatorService){return function(phone_number,country_code){if(phone_number)switch(country_code||(country_code=CompanyStoreService.country_code),country_code){case"gb":return phone_number.replace(/^(\+44 \(0\)|\S{0})/,"0");case"us":return phone_number.replace(ValidatorService.us_phone_number,"($1) $2 $3");default:return phone_number}}}]),angular.module("BB.Filters").filter("datetime",["GeneralOptions",function(GeneralOptions){return function(date,format,show_time_zone){var new_date;return null==format&&(format="LLL"),null==show_time_zone&&(show_time_zone=!1),!date||date&&!moment(date).isValid()?void 0:(new_date=moment(date),new_date.tz(GeneralOptions.display_time_zone),show_time_zone&&(format+=" zz"),new_date.format(format))}}]),angular.module("BB.Filters").filter("range",function(){return function(input,min,max){var i,j,ref,ref1;for(i=j=ref=parseInt(min),ref1=parseInt(max);ref1>=ref?ref1>=j:j>=ref1;i=ref1>=ref?++j:--j)input.push(i);return input}}),angular.module("BB.Filters").filter("international_number",function(){return function(_this){return function(number,prefix){return number&&prefix?prefix+" "+number:number?""+number:""}}(this)}),angular.module("BB.Filters").filter("startFrom",function(){return function(input,start){return void 0===input?input:input.slice(+start)}}),angular.module("BB.Filters").filter("add",function(){return function(_this){return function(item,value){return item&&value?(item=parseInt(item),item+value):void 0}}(this)}),angular.module("BB.Filters").filter("spaces_remaining",function(){return function(spaces){return 1>spaces?0:spaces}}),angular.module("BB.Filters").filter("key_translate",function(){return function(input){var add_underscore,remove_punctuations,upper_case;return upper_case=angular.uppercase(input),remove_punctuations=upper_case.replace(/[\.,-\/#!$%\^&\*;:{}=\-_`~()]/g,""),add_underscore=remove_punctuations.replace(/\ /g,"_")}}),angular.module("BB.Filters").filter("nl2br",function(){return function(str){return str?str.replace(/\n/g,"<br/>"):void 0}}),angular.module("BB.Filters").filter("clearTimezone",function(){return function(val,offset){return null!==val&&val.length>19?val.substring(0,19):val}}),angular.module("BB.Filters").filter("format_answer",function(){return function(answer){return"boolean"==typeof answer?answer=answer===!0?"Yes":"No":moment(answer,"YYYY-MM-DD",!0).isValid()&&(answer=moment(answer).format("D MMMM YYYY")),answer}}),angular.module("BB.Filters").filter("snakeCase",function(){return function(string){return string.trim().replace(/\s/g,"_").toLowerCase()}}),angular.module("BB.Filters").filter("wordCharactersAndSpaces",function(){return function(string){return string.replace(/[^a-zA-Z0-9\_\s]+/,"")}})}.call(this),function(){"use strict";angular.module("BB.Filters").filter("props",["$translate",function($translate){"ngInject";return function(items,props){var keys,out;return out=[],angular.isArray(items)?(keys=Object.keys(props),items.forEach(function(item){var i,itemMatches,prop,text;for(itemMatches=!1,i=0;i<keys.length;){if(prop=keys[i],text=props[prop].toLowerCase(),null!=item[prop]&&-1!==$translate.instant(item[prop]).toString().toLowerCase().indexOf(text)){itemMatches=!0;break}i++}itemMatches&&out.push(item)})):out=items,out}}])}.call(this),function(){angular.module("BB").constant("routeStates",{Company:0,Category:1,Service:2,Person:3,Resource:4,Duration:5,Date:6,Time:7,Client:8,Summary:9,Basket:10,Checkout:11,Slot:12,Event:13,Login:14,Questions:15,Confirmation:16})}.call(this),function(){"use strict";angular.module("BB.i18n").config(["bbi18nOptionsProvider","tmhDynamicLocaleProvider","$translateProvider",function(bbi18nOptionsProvider,tmhDynamicLocaleProvider,$translateProvider){"ngInject";$translateProvider.useSanitizeValueStrategy("sanitizeParameters"),$translateProvider.useLocalStorage(),$translateProvider.addInterpolation("$translateMessageFormatInterpolation"),$translateProvider.fallbackLanguage(bbi18nOptionsProvider.getOption("available_languages")),tmhDynamicLocaleProvider.localeLocationPattern("angular-i18n/angular-locale_{{locale}}.js"),tmhDynamicLocaleProvider.useCookieStorage()}])}.call(this),function(){"use strict";angular.module("BB.i18n",["tmh.dynamicLocale"])}.call(this),function(){"use strict";angular.module("BB.i18n").run(["bbi18nOptions","bbLocale","RuntimeTranslate",function(bbi18nOptions,bbLocale,RuntimeTranslate){"ngInject";RuntimeTranslate.registerAvailableLanguageKeys(bbi18nOptions.available_languages,bbi18nOptions.available_language_associations),bbLocale.determineLocale()}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbWalletRemainder",function(){return{restrict:"A",scope:{totalPrice:"=",walletAmount:"="},controllerAs:"vm",bindToController:!0,template:'<span translate="PUBLIC_BOOKING.BASKET.WALLET.REMAINDER" translate-values="{remainder: vm.amountRemaining}"></span>',controller:function(){return this.amountRemaining=this.walletAmount-this.totalPrice}}})}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("AddressModel",["$q","BBModel","BaseModel","AddressListService",function($q,BBModel,BaseModel,AddressListService){var Address;return Address=function(superClass){function Address(data){Address.__super__.constructor.call(this,data),this.map_url&&""!==this.map_url||this.lat&&this["long"]&&(this.map_url="https://www.google.com/maps/@"+this.lat+","+this["long"]+",17z")}return extend(Address,superClass),Address.prototype.addressSingleLine=function(){var str;return str="",this.address1&&(str+=this.address1),this.address2&&str.length>0&&(str+=", "),this.address2&&(str+=this.address2),this.address3&&str.length>0&&(str+=", "),this.address3&&(str+=this.address3),this.address4&&str.length>0&&(str+=", "),this.address4&&(str+=this.address4),this.address5&&str.length>0&&(str+=", "),this.address5&&(str+=this.address5),this.postcode&&str.length>0&&(str+=", "),this.postcode&&(str+=this.postcode),str},Address.prototype.hasAddress=function(){return this.address1||this.address2||this.postcode},Address.prototype.addressCsvLine=function(){var str;return str="",this.address1&&(str+=this.address1),str+=", ",this.address2&&(str+=this.address2),str+=", ",this.address3&&(str+=this.address3),str+=", ",this.address4&&(str+=this.address4),str+=", ",this.address5&&(str+=this.address5),str+=", ",this.postcode&&(str+=this.postcode),str+=", ",this.country&&(str+=this.country),str},Address.prototype.addressMultiLine=function(){var str;return str="",this.address1&&(str+=this.address1),this.address2&&str.length>0&&(str+="<br/>"),this.address2&&(str+=this.address2),this.address3&&str.length>0&&(str+="<br/>"),this.address3&&(str+=this.address3),this.address4&&str.length>0&&(str+="<br/>"),this.address4&&(str+=this.address4),this.address5&&str.length>0&&(str+="<br/>"),this.address5&&(str+=this.address5),this.postcode&&str.length>0&&(str+="<br/>"),this.postcode&&(str+=this.postcode),str},Address.$query=function(prms){return AddressListService.query(prms)},Address.$getAddress=function(prms){return AddressListService.getAddress(prms)},Address}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("AffiliateModel",["$q","BBModel","BaseModel","halClient","$rootScope",function($q,BBModel,BaseModel,halClient,$rootScope){var Affiliate;return Affiliate=function(superClass){function Affiliate(data){Affiliate.__super__.constructor.call(this,data),this.test=1}return extend(Affiliate,superClass),Affiliate.prototype.getCompanyByRef=function(ref){var defer,href,prms,uri;return prms={id:this.cookie,reference:ref},href=$rootScope.bb.api_url+"/api/v1/affiliates/{id}/companies/{reference}",uri=new UriTemplate(href).fillFromObject(prms||{}),defer=$q.defer(),halClient.$get(uri,{}).then(function(company){return company?defer.resolve(new BBModel.Company(company)):defer.reject("No company for ref "+ref)},function(err){return console.log("err ",err),defer.reject(err)}),defer.promise},Affiliate}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("AnswerModel",["$q","BBModel","BaseModel","$bbug",function($q,BBModel,BaseModel,$bbug){var Answer;return Answer=function(superClass){function Answer(data){Answer.__super__.constructor.call(this,data)}return extend(Answer,superClass),Answer.prototype.getQuestion=function(){var defer;return defer=$q.defer(),this.question&&defer.resolve(this.question),this._data.$has("question")?this._data.$get("question").then(function(_this){return function(question){return _this.question=question,defer.resolve(_this.question)}}(this)):defer.resolve([]),defer.promise},Answer}(BaseModel)}])}.call(this),function(){"use strict";angular.module("BB.Models").service("BBModel",["$q","$injector",function($q,$injector){}]),angular.module("BB.Models").run(["$q","$injector","BBModel",function($q,$injector,BBModel){var i,j,len,len1,model,models,pfuncs,purchase_models;for(models=["Address","Answer","Affiliate","Basket","BasketItem","BookableItem","Category","Client","ClientDetails","Company","CompanySettings","Day","Event","EventChain","EventGroup","EventTicket","EventSequence","ItemDetails","PaymentCallbacks","Person","PurchaseItem","PurchaseTotal","Question","Resource","Service","Slot","Space","Clinic","SurveyQuestion","TimeSlot","BusinessQuestion","Image","Deal","PrePaidBooking","MembershipLevel","Product","BBCollection","ExternalPurchase","PackageItem","BulkPurchase","Pagination","Reason","Login"],i=0,len=models.length;len>i;i++)model=models[i],BBModel[model]=$injector.get(model+"Model");for(purchase_models=["Booking","Total","CourseBooking"],pfuncs={},j=0,len1=purchase_models.length;len1>j;j++)model=purchase_models[j],pfuncs[model]=$injector.get("Purchase."+model+"Model");return BBModel.Purchase=pfuncs}]),angular.module("BB.Models").service("BaseModel",["$q","$injector","$rootScope","$timeout",function($q,$injector,$rootScope,$timeout){var Base;return Base=function(){function Base(data){this.deleted=!1,this.updateModel(data)}return Base.prototype.updateModel=function(data){var link,links,m,n,name,obj,results;if(data&&(this._data=data),data)for(n in data)m=data[n],"function"!=typeof m&&(this[n]=m);if(this._data&&this._data.$href){this.self=this._data.$href("self"),links=this.$links(),this.__linkedData={},this.__linkedPromises={},results=[];for(link in links)obj=links[link],name=this._snakeToCamel("get_"+link),results.push(function(_this){return function(link,obj,name){return _this[name]||(_this[name]=function(options){return this.$buildOject(link,options)}),_this["$"+name]?void 0:_this["$"+name]=function(options){return this.$buildOjectPromise(link,options)}}}(this)(link,obj,name));return results}},Base.prototype._snakeToCamel=function(s){return s.replace(/(\_\w)/g,function(m){return m[1].toUpperCase()})},Base.prototype.$buildOject=function(link,options){var linkId;return linkId=link+(JSON.stringify(options)||""),this.__linkedData[linkId]?this.__linkedData[linkId]:(this.$buildOjectPromise(link,options).then(function(_this){return function(ans){return _this.__linkedData[linkId]=ans,$timeout(function(){return _this.__linkedData[linkId]=ans})}}(this)),null)},Base.prototype.$buildOjectPromise=function(link,options){var linkId,prom;return linkId=link+(JSON.stringify(options)||""),this.__linkedPromises[linkId]?this.__linkedPromises[linkId]:(prom=$q.defer(),this.__linkedPromises[linkId]=prom.promise,this.$get(link,options).then(function(_this){return function(res){var inj;return inj=$injector.get("BB.Service."+link),inj?inj.promise?inj.unwrap(res).then(function(ans){return prom.resolve(ans)},function(err){return prom.reject(err)}):prom.resolve(inj.unwrap(res)):prom.resolve(res)}}(this),function(err){return prom.reject(err)}),this.__linkedPromises[linkId])},Base.prototype.get=function(ikey){return this._data?this._data[ikey]:null},Base.prototype.set=function(ikey,value){return this._data?this._data[ikey]=value:null},Base.prototype.getOption=function(ikey){return this._data?this._data.getOption(ikey):null},Base.prototype.setOption=function(ikey,value){return this._data?this._data.setOption(ikey,value):null},Base.prototype.$href=function(rel,params){return this._data?this._data.$href(rel,params):void 0},Base.prototype.$has=function(rel){return this._data?this._data.$has(rel):void 0},Base.prototype.$flush=function(rel,params){return this._data?this._data.$flush(rel,params):void 0},Base.prototype.$get=function(rel,params){return this._data?this._data.$get(rel,params):void 0},Base.prototype.$post=function(rel,params,dat){return this._data?this._data.$post(rel,params,dat):void 0},Base.prototype.$put=function(rel,params,dat){return this._data?this._data.$put(rel,params,dat):void 0},Base.prototype.$patch=function(rel,params,dat){return this._data?this._data.$patch(rel,params,dat):void 0},Base.prototype.$del=function(rel,params,dat){return this._data?this._data.$del(rel,params,dat):void 0},Base.prototype.$links=function(){return this._data?this._data.$links():void 0},Base.prototype.$link=function(rel){return this._data?this._data.$link(rel):void 0},Base.prototype.$toStore=function(){return this._data?this._data.$toStore():void 0},Base}()}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("BasketModel",["$q","BBModel","BaseModel","BasketService",function($q,BBModel,BaseModel,BasketService){var Basket;return Basket=function(superClass){function Basket(data,scope){scope&&scope.isAdmin?this.is_admin=scope.isAdmin:this.is_admin=!1,null!=scope&&scope.parent_client&&(this.parent_client_id=scope.parent_client.id),this.items=[],Basket.__super__.constructor.call(this,data),this.reviewed=!1}return extend(Basket,superClass),Basket.prototype.addItem=function(item){var i,j,len,ref;for(ref=this.items,j=0,len=ref.length;len>j;j++){if(i=ref[j],i===item)return;if(i.id&&item.id&&i.id===item.id)return}return this.items.push(item)},Basket.prototype.clear=function(){return this.items=[]},Basket.prototype.clearItem=function(item){return this.items=this.items.filter(function(i){return i!==item})},Basket.prototype.itemsReady=function(){var i,j,len,ready,ref;if(this.items.length>0){for(ready=!0,ref=this.items,j=0,len=ref.length;len>j;j++)i=ref[j],i.checkReady()||(ready=!1);return ready}return!1},Basket.prototype.readyToCheckout=function(){var i,j,len,ready,ref;if(this.items.length>0&&this.reviewed){for(ready=!0,ref=this.items,j=0,len=ref.length;len>j;j++)i=ref[j],i.checkReady()||(ready=!1);return ready}return!1},Basket.prototype.timeItems=function(){var i,j,len,ref,titems;for(titems=[],ref=this.items,j=0,len=ref.length;len>j;j++)i=ref[j],i.isTimeItem()&&titems.push(i);return titems},Basket.prototype.hasTimeItems=function(){var i,j,len,ref;for(ref=this.items,j=0,len=ref.length;len>j;j++)if(i=ref[j],i.isTimeItem())return!0;return!1},Basket.prototype.basketItems=function(){var bitems,i,j,len,ref;for(bitems=[],ref=this.items,j=0,len=ref.length;len>j;j++)i=ref[j],i.is_coupon||bitems.push(i);return bitems},Basket.prototype.externalPurchaseItems=function(){var eitems,i,j,len,ref;for(eitems=[],ref=this.items,j=0,len=ref.length;len>j;j++)i=ref[j],i.isExternalPurchase()&&eitems.push(i);return eitems},Basket.prototype.couponItems=function(){var citems,i,j,len,ref;for(citems=[],ref=this.items,j=0,len=ref.length;len>j;j++)i=ref[j],i.is_coupon&&citems.push(i);return citems},Basket.prototype.removeCoupons=function(){return this.items=_.reject(this.items,function(x){return x.is_coupon})},Basket.prototype.setSettings=function(set){return set?(this.settings||(this.settings={}),$.extend(this.settings,set)):void 0},Basket.prototype.setClient=function(client){return this.client=client},Basket.prototype.setClientDetails=function(client_details){return this.client_details=new BBModel.PurchaseItem(client_details)},Basket.prototype.getPostData=function(){var item,j,len,post,ref;for(post={client:this.client.getPostData(),settings:this.settings,reference:this.reference},post.is_admin=this.is_admin,post.parent_client_id=this.parent_client_id,post.take_from_wallet=this.take_from_wallet,post.items=[],ref=this.items,j=0,len=ref.length;len>j;j++)item=ref[j],post.items.push(item.getPostData());return post},Basket.prototype.dueTotal=function(){var item,j,len,ref,total;for(total=this.totalPrice(),ref=this.items,j=0,len=ref.length;len>j;j++)item=ref[j],item.isWaitlist()&&(total-=item.price);return 0>total&&(total=0),total},Basket.prototype.length=function(){return this.items.length},Basket.prototype.questionPrice=function(options){var item,j,len,price,ref,unready;for(unready=options&&options.unready,price=0,ref=this.items,j=0,len=ref.length;len>j;j++)item=ref[j],(!item.ready&&unready||!unready)&&(price+=item.questionPrice());return price},Basket.prototype.totalPrice=function(options){var item,j,len,price,ref,unready;for(unready=options&&options.unready,price=0,ref=this.items,j=0,len=ref.length;len>j;j++)item=ref[j],(!item.ready&&unready||!unready)&&(price+=item.totalPrice());return price},Basket.prototype.updateTotalPrice=function(options){return this.total_price=this.totalPrice(options)},Basket.prototype.fullPrice=function(){var item,j,len,price,ref;for(price=0,ref=this.items,j=0,len=ref.length;len>j;j++)item=ref[j],price+=item.fullPrice();return price},Basket.prototype.hasCoupon=function(){var item,j,len,ref;for(ref=this.items,j=0,len=ref.length;len>j;j++)if(item=ref[j],item.is_coupon)return!0;return!1},Basket.prototype.totalCoupons=function(){return this.fullPrice()-this.totalPrice()-this.totalDealPaid()},Basket.prototype.totalDuration=function(){var duration,item,j,len,ref;for(duration=0,ref=this.items,j=0,len=ref.length;len>j;j++)item=ref[j],item.service&&item.service.listed_duration&&(duration+=item.service.listed_duration);return duration},Basket.prototype.containsDeal=function(){var item,j,len,ref;for(ref=this.items,j=0,len=ref.length;len>j;j++)if(item=ref[j],item.deal_id)return!0;return!1},Basket.prototype.hasDeal=function(){var item,j,len,ref;for(ref=this.items,j=0,len=ref.length;len>j;j++)if(item=ref[j],item.deal_codes&&item.deal_codes.length>0)return!0;return!1},Basket.prototype.getDealCodes=function(){return this.deals=this.items[0]&&this.items[0].deal_codes?this.items[0].deal_codes:[],this.deals},Basket.prototype.totalDeals=function(){var deal,j,len,ref,value;for(value=0,ref=this.getDealCodes(),j=0,len=ref.length;len>j;j++)deal=ref[j],value+=deal.value;return value},Basket.prototype.totalDealPaid=function(){var item,j,len,ref,total_cert_paid;for(total_cert_paid=0,ref=this.items,j=0,len=ref.length;len>j;j++)item=ref[j],
item.certificate_paid&&(total_cert_paid+=item.certificate_paid);return total_cert_paid},Basket.prototype.remainingDealBalance=function(){return this.totalDeals()-this.totalDealPaid()},Basket.prototype.hasWaitlistItem=function(){var item,j,len,ref;for(ref=this.items,j=0,len=ref.length;len>j;j++)if(item=ref[j],item.isWaitlist())return!0;return!1},Basket.prototype.hasExternalPurchase=function(){var item,j,len,ref;for(ref=this.items,j=0,len=ref.length;len>j;j++)if(item=ref[j],item.isExternalPurchase())return!0;return!1},Basket.prototype.useWallet=function(value,client){return client&&client.$has("wallet")&&value?(this.take_from_wallet=!0,!0):(this.take_from_wallet=!1,!1)},Basket.$applyCoupon=function(company,params){return BasketService.applyCoupon(company,params)},Basket.$updateBasket=function(company,params){return BasketService.updateBasket(company,params)},Basket.$deleteItem=function(item,company,params){return BasketService.deleteItem(item,company,params)},Basket.$checkout=function(company,basket,params){return BasketService.checkout(company,basket,params)},Basket.$empty=function(bb){return BasketService.empty(bb)},Basket.$applyDeal=function(company,params){return BasketService.applyDeal(company,params)},Basket.$removeDeal=function(company,params){return BasketService.removeDeal(company,params)},Basket.prototype.voucherRemainder=function(){var amount,item,j,len,ref;for(amount=0,ref=this.items,j=0,len=ref.length;len>j;j++)item=ref[j],item.voucher_remainder&&(amount+=item.voucher_remainder);return amount},Basket}(BaseModel)}])}.call(this),function(){"use strict";var bind=function(fn,me){return function(){return fn.apply(me,arguments)}},extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("BasketItemModel",["$q","$window","BBModel","BookableItemModel","BaseModel","$bbug","DateTimeUtilitiesService","$translate",function($q,$window,BBModel,BookableItemModel,BaseModel,$bbug,DateTimeUtilitiesService,$translate){var BasketItem;return BasketItem=function(superClass){function BasketItem(data,bb){this.fullPrice=bind(this.fullPrice,this),this.totalPrice=bind(this.totalPrice,this),this.getQty=bind(this.getQty,this),this.questionPrice=bind(this.questionPrice,this);var chain,comp,per,res,serv,t;BasketItem.__super__.constructor.call(this,data),this.ready=!1,this.days_link=null,this.book_link=null,this.parts_links={},this.settings||(this.settings={}),this.has_questions=!1,this.ref||(this.ref=Math.ceil(moment().unix()*Math.random())),_.isNumber(this.time)&&(this.time=new BBModel.TimeSlot({time:this.time,event_id:this.event_id,selected:!0,avail:1,price:this.price})),this.date&&(this.date=new BBModel.Day({date:this.date,spaces:1})),this.datetime&&(this.date=new BBModel.Day({date:this.datetime.toISODate(),spaces:1}),t=60*this.datetime.hour()+this.datetime.minute(),this.time=new BBModel.TimeSlot({time:t,event_id:this.event_id,selected:!0,avail:1,price:this.price})),this.id&&(this.reserve_ready=!0,this.held={time:this.time,date:this.date,event_id:this.event_id,id:this.id}),this.promises=[],data&&(data.$has("answers")&&data.$get("answers").then(function(_this){return function(answers){var a,i,len,results;for(data.questions=[],results=[],i=0,len=answers.length;len>i;i++)a=answers[i],results.push(data.questions.push({id:a.question_id,answer:a.value}));return results}}(this)),data.$has("company")&&(comp=data.$get("company"),this.promises.push(comp),comp.then(function(_this){return function(comp){var c;return c=new BBModel.Company(comp),_this.promises.push(c.getSettings()),_this.setCompany(c)}}(this))),data.$has("service")&&(serv=data.$get("service"),this.promises.push(serv),serv.then(function(_this){return function(serv){var prom;return serv.$has("category")&&(prom=serv.$get("category"),_this.promises.push(prom),prom.then(function(cat){return _this.setCategory(new BBModel.Category(cat))})),_this.setService(new BBModel.Service(serv),data.questions),_this.duration&&_this.setDuration(_this.duration),_this.checkReady(),_this.time?_this.time.service=_this.service:void 0}}(this))),data.$has("event_group")&&(serv=data.$get("event_group"),this.promises.push(serv),serv.then(function(_this){return function(serv){var prom;return serv.$has("category")&&(prom=serv.$get("category"),_this.promises.push(prom),prom.then(function(cat){return _this.setCategory(new BBModel.Category(cat))})),_this.setEventGroup(new BBModel.EventGroup(serv)),_this.time?_this.time.service=_this.event_group:void 0}}(this))),data.$has("event_chain")&&(chain=data.$get("event_chain"),this.promises.push(chain),data.$has("event")||chain.then(function(_this){return function(serv){return _this.setEventChain(new BBModel.EventChain(serv),data.questions)}}(this))),data.$has("resource")&&(res=data.$get("resource"),this.promises.push(res),res.then(function(_this){return function(res){return _this.setResource(new BBModel.Resource(res),!1)}}(this))),data.$has("person")&&(per=data.$get("person"),this.promises.push(per),per.then(function(_this){return function(per){return _this.setPerson(new BBModel.Person(per),!1)}}(this))),data.$has("event")&&data.$get("event").then(function(_this){return function(event){return _this.setEvent(new BBModel.Event(event))}}(this)),data.settings&&(this.settings=$bbug.extend(!0,{},data.settings)),data.attachment_id&&(this.attachment_id=data.attachment_id),data.person_group_id&&this.setPersonGroupId(data.person_group_id),data.$has("product")&&data.$get("product").then(function(_this){return function(product){return _this.setProduct(new BBModel.Product(product))}}(this)),data.$has("package_item")&&data.$get("package_item").then(function(_this){return function(package_item){return _this.setPackageItem(new BBModel.PackageItem(package_item))}}(this)),data.$has("bulk_purchase")&&data.$get("bulk_purchase").then(function(_this){return function(bulk_purchase){return _this.setBulkPurchase(new BBModel.BulkPurchase(bulk_purchase))}}(this)),data.$has("deal")&&data.$get("deal").then(function(_this){return function(deal){return _this.setDeal(new BBModel.Deal(deal))}}(this)),data.$has("pre_paid_booking")&&data.$get("pre_paid_booking").then(function(_this){return function(pre_paid_booking){return _this.setPrepaidBooking(new BBModel.PrePaidBooking(pre_paid_booking))}}(this)),data.clinic_id&&(this.clinic_id=data.clinic_id))}return extend(BasketItem,superClass),BasketItem.prototype.setDefaults=function(defaults){var date,time;return defaults.settings&&(this.settings=defaults.settings),defaults.company&&this.setCompany(defaults.company),defaults.merge_resources&&this.setResource(null),defaults.merge_people&&this.setPerson(null),defaults.resource&&this.setResource(defaults.resource),defaults.person&&this.setPerson(defaults.person),defaults.service&&this.setService(defaults.service),defaults.category&&this.setCategory(defaults.category),defaults.date&&(defaults.date=moment(defaults.date)),defaults.time&&(date=defaults.date?defaults.date:moment(),time=defaults.time?parseInt(defaults.time):0,defaults.datetime=DateTimeUtilitiesService.convertTimeToMoment(defaults.date,time)),defaults.service_ref&&(this.service_ref=defaults.service_ref),defaults.group&&(this.group=defaults.group),defaults.clinic&&(this.clinic=defaults.clinic,this.clinic_id=defaults.clinic.id),defaults.private_note&&(this.private_note=defaults.private_note),defaults.event_group&&this.setEventGroup(defaults.event_group),defaults.event&&this.setEvent(defaults.event),this.defaults=defaults},BasketItem.prototype.storeDefaults=function(defaults){return this.defaults=defaults},BasketItem.prototype.canLoadItem=function(item){return this.service&&"service"!==this.item?!0:this.resource&&!this.anyResource()&&"resource"!==item?!0:!(!this.person||this.anyPerson()||"person"===item)},BasketItem.prototype.defaultService=function(){return this.defaults&&this.defaults.service?this.defaults.service:this.defaults&&this.defaults.event_group?this.defaults.event_group:null},BasketItem.prototype.setSlot=function(slot){var t;return this.date=new BBModel.Day({date:slot.datetime.toISODate(),spaces:1}),t=60*slot.datetime.hour()+slot.datetime.minute(),this.time=new BBModel.TimeSlot({time:t,avail:1,price:this.price}),this.available_slot=slot.id},BasketItem.prototype.setCompany=function(company){return this.company=company,this.parts_links.company=this.company.$href("self"),this.item_details?this.item_details.currency_code=this.company.currency_code:void 0},BasketItem.prototype.clearExistingItem=function(){var prom;return this.$has("self")&&this.event_id&&(prom=this.$del("self"),this.promises.push(prom),prom.then(function(){})),delete this.earliest_time,delete this.event_id},BasketItem.prototype.setItem=function(item){return item?"person"===item.type?this.setPerson(item):"service"===item.type?this.setService(item):"resource"===item.type?this.setResource(item):void 0:void 0},BasketItem.prototype.setService=function(serv,default_questions){var prom;if(null==default_questions&&(default_questions=null),this.service){if(this.service.self&&serv.self&&this.service.self===serv.self)return this.service.$has("book")&&(this.book_link=this.service),serv.$has("days")&&(this.days_link=serv),void(serv.$has("book")&&(this.book_link=serv));this.item_details=null,this.clearExistingItem()}return this.service&&serv&&this.service.self&&serv.self&&this.service.self!==serv.self&&serv.durations&&serv.durations.length>1&&(this.duration=null,this.listed_duration=null),this.service=serv,serv&&serv instanceof BookableItemModel&&(this.service=serv.item),this.parts_links.service=this.service.$href("self"),this.service.$has("book")&&(this.book_link=this.service),serv.$has("days")&&(this.days_link=serv),serv.$has("book")&&(this.book_link=serv),this.service.$has("questions")?(this.has_questions=!0,prom=this.service.$get("questions"),this.promises.push(prom),prom.then(function(_this){return function(details){return _this.company&&(details.currency_code=_this.company.currency_code),_this.item_details=new BBModel.ItemDetails(details),_this.has_questions=_this.item_details.hasQuestions,default_questions?(_this.item_details.setAnswers(default_questions),_this.setAskedQuestions()):void 0}}(this),function(_this){return function(err){return _this.has_questions=!1}}(this))):this.has_questions=!1,this.service&&this.service.durations&&1===this.service.durations.length&&(this.setDuration(this.service.durations[0]),this.listed_duration=this.service.durations[0]),this.service&&this.service.listed_durations&&1===this.service.listed_durations.length&&(this.listed_duration=this.service.listed_durations[0]),this.service.$has("category")&&(prom=this.service.$getCategory())?this.promises.push(prom):void 0},BasketItem.prototype.setEventGroup=function(event_group){var prom;if(!(this.event_group&&this.event_group.self&&event_group.self&&this.event_group.self===event_group.self))return this.event_group=event_group,this.parts_links.event_group=this.event_group.$href("self").replace("event_group","service"),this.event_group.$has("category")&&(prom=this.event_group.$getCategory())?this.promises.push(prom):void 0},BasketItem.prototype.setEventChain=function(event_chain,default_questions){var prom;return null==default_questions&&(default_questions=null),this.event_chain&&this.event_chain.self&&event_chain.self&&this.event_chain.self===event_chain.self?void 0:(this.event_chain=event_chain,this.base_price=parseFloat(event_chain.price),null!=this.price&&this.price!==this.base_price?this.setPrice(this.price):this.setPrice(this.base_price),this.event_chain.isSingleBooking()&&(this.tickets={name:$translate.instant("COMMON.TERMINOLOGY.ADMITTANCE"),max:1,type:"normal",price:this.base_price},this.tickets.pre_paid_booking_id=this.pre_paid_booking_id,this.num_book&&(this.tickets.qty=this.num_book)),this.event_chain.$has("questions")?(this.has_questions=!0,prom=this.event_chain.$get("questions"),this.promises.push(prom),prom.then(function(_this){return function(details){var a,i,len,q,ref;if(_this.item_details=new BBModel.ItemDetails(details),_this.has_questions=_this.item_details.hasQuestions,_this.questions){for(ref=_this.item_details.questions,i=0,len=ref.length;len>i;i++)q=ref[i],a=_.find(_this.questions,function(c){return c.id===q.id}),(a&&void 0===q.answer||a!==q.answer)&&(q.answer=a.answer);_this.setAskedQuestions()}return default_questions?(_this.item_details.setAnswers(default_questions),_this.setAskedQuestions()):void 0}}(this),function(_this){return function(err){return _this.has_questions=!1}}(this))):this.has_questions=!1)},BasketItem.prototype.setEvent=function(event,default_questions){var prom;if(null==default_questions&&(default_questions=null),this.event&&this.event.unselect(),this.event=event,this.event.select(),this.event_chain_id=event.event_chain_id,this.setDate({date:event.date}),this.setTime(event.time),this.setDuration(event.duration),event.$has("book")&&(this.book_link=event),event.qty&&(this.num_book=event.qty),prom=this.event.getChain(),this.promises.push(prom),prom.then(function(_this){return function(chain){return _this.setEventChain(chain,default_questions)}}(this)),prom=this.event.getGroup(),this.promises.push(prom),prom.then(function(_this){return function(group){return _this.setEventGroup(group)}}(this)),this.event.getSpacesLeft()<=0&&!this.company.settings){if(this.company.getSettings().has_waitlists)return this.status=8}else if(this.event.getSpacesLeft()<=0&&this.company.settings&&this.company.settings.has_waitlists)return this.status=8},BasketItem.prototype.setCategory=function(cat){return this.category=cat},BasketItem.prototype.setPerson=function(per,set_selected){if(null==set_selected&&(set_selected=!0),set_selected&&this.earliest_time&&delete this.earliest_time,per){if(this.person=per,set_selected&&(this.settings.person=this.person.id),this.parts_links.person=this.person.$href("self"),per.$has("days")&&(this.days_link=per),per.$has("book")&&(this.book_link=per),this.event_id&&this.$has("person")&&this.$href("person")!==this.person.self&&(delete this.event_id,this.resource&&this.defaults&&this.defaults.merge_resources))return this.setResource(null)}else if(this.person=!0,set_selected&&(this.settings.person=-1),this.parts_links.person=null,this.service&&this.setService(this.service),this.resource&&!this.anyResource()&&this.setResource(this.resource,!1),this.event_id&&(delete this.event_id,this.resource&&this.defaults&&this.defaults.merge_resources))return this.setResource(null)},BasketItem.prototype.setPersonGroupId=function(id){return this.person_group_id=id},BasketItem.prototype.setResource=function(res,set_selected){if(null==set_selected&&(set_selected=!0),set_selected&&this.earliest_time&&delete this.earliest_time,res){if(this.resource=res,set_selected&&(this.settings.resource=this.resource.id),this.parts_links.resource=this.resource.$href("self"),res.$has("days")&&(this.days_link=res),res.$has("book")&&(this.book_link=res),this.event_id&&this.$has("resource")&&this.$href("resource")!==this.resource.self&&(delete this.event_id,this.person&&this.defaults&&this.defaults.merge_people))return this.setPerson(null)}else if(this.resource=!0,set_selected&&(this.settings.resource=-1),this.parts_links.resource=null,this.service&&this.setService(this.service),this.person&&!this.anyPerson()&&this.setPerson(this.person,!1),this.event_id&&(delete this.event_id,this.person&&this.defaults&&this.defaults.merge_people))return this.setPerson(null)},BasketItem.prototype.setDuration=function(dur){return this.duration=dur,this.service?this.base_price=this.service.getPriceByDuration(dur):this.time&&this.time.price?this.base_price=this.time.price:this.price&&(this.base_price=this.price),this.setPrice(this.base_price)},BasketItem.prototype.print_time=function(){return this.time?this.time.print_time():void 0},BasketItem.prototype.print_end_time=function(){return this.time?this.time.print_end_time(this.duration):void 0},BasketItem.prototype.print_time12=function(show_suffix){return null==show_suffix&&(show_suffix=!0),this.time?this.time.print_time12(show_suffix):void 0},BasketItem.prototype.print_end_time12=function(show_suffix){return null==show_suffix&&(show_suffix=!0),this.time?this.time.print_end_time12(show_suffix,this.duration):void 0},BasketItem.prototype.setTime=function(time){return this.time&&this.time.unselect(),this.time=time,this.time&&(this.time.select(),this.datetime&&(this.datetime=DateTimeUtilitiesService.convertTimeToMoment(this.date.date,this.time.time)),this.price&&this.time.price&&this.price!==this.time.price?this.setPrice(this.time.price):this.price&&!this.time.price?this.setPrice(this.price):this.time.price&&!this.price?this.setPrice(this.time.price):this.price&&this.time.price?this.setPrice(this.price):this.setPrice(null)),this.checkReady()},BasketItem.prototype.setDate=function(date){return this.date=date,this.date&&(this.date.date=moment(this.date.date),this.datetime&&(this.datetime.date(this.date.date.date()),this.datetime.month(this.date.date.month()),this.datetime.year(this.date.date.year()))),this.checkReady()},BasketItem.prototype.clearDateTime=function(){return delete this.date,delete this.time,delete this.datetime,this.ready=!1,this.reserve_ready=!1},BasketItem.prototype.clearTime=function(){return delete this.time,this.ready=!1,this.reserve_ready=!1},BasketItem.prototype.setGroup=function(group){return this.group=group},BasketItem.prototype.setAskedQuestions=function(){return this.asked_questions=!0,this.checkReady()},BasketItem.prototype.checkReady=function(){return this.ready=!1,!this.checkReserveReady()||!this.asked_questions&&this.has_questions||(this.ready=!0),this.ready},BasketItem.prototype.checkReserveReady=function(){return this.reserve_ready=!1,(this.date&&this.time&&this.service||this.event||this.product||this.package_item||this.bulk_purchase||this.external_purchase||this.deal||this.is_coupon||this.date&&this.service&&"day"===this.service.duration_unit)&&(this.reserve_ready=!0),this.reserve_ready},BasketItem.prototype.getPostData=function(){var data,i,j,len,len1,m_question,o_question,ref,ref1;if(this.cloneAnswersItem)for(ref=this.cloneAnswersItem.item_details.questions,i=0,len=ref.length;len>i;i++)for(o_question=ref[i],ref1=this.item_details.questions,j=0,len1=ref1.length;len1>j;j++)m_question=ref1[j],m_question.id===o_question.id&&(m_question.answer=o_question.answer,this.setAskedQuestions());return data={},this.date&&(data.date=this.date.date.toISODate()),this.time?(data.time=this.time.time,this.time.event_id?data.event_id=this.time.event_id:this.time.event_ids&&(data.event_ids=this.time.event_ids)):this.date&&this.date.event_id&&(data.event_id=this.date.event_id),data.price=this.price,data.paid=this.paid,this.book_link&&(data.book=this.book_link.$href("book")),data.id=this.id,data.duration=this.duration,data.settings=this.settings,data.child_client_ids=this.child_client_ids,data.settings||(data.settings={}),this.earliest_time&&(data.settings.earliest_time=this.earliest_time),this.item_details&&this.asked_questions&&(data.questions=this.item_details.getPostData()),this.move_item_id&&(data.move_item_id=this.move_item_id),this.srcBooking&&(data.move_item_id=this.srcBooking.id),this.service&&(data.service_id=this.service.id),this.resource&&(data.resource_id=this.resource.id),this.person&&(data.person_id=this.person.id),this.person_group_id&&(data.person_group_id=this.person_group_id),data.length=this.length,this.event&&(data.event_id=this.event.id,null!=this.event.pre_paid_booking_id?data.pre_paid_booking_id=this.event.pre_paid_booking_id:this.tickets&&null!=this.tickets.pre_paid_booking_id&&(data.pre_paid_booking_id=this.tickets.pre_paid_booking_id),data.tickets=this.tickets),null!=this.pre_paid_booking_id&&(data.pre_paid_booking_id=this.pre_paid_booking_id),data.event_chain_id=this.event_chain_id,data.event_group_id=this.event_group_id,data.qty=this.qty,this.status&&(data.status=this.status),null!=this.num_resources&&(data.num_resources=parseInt(this.num_resources)),this.package_item&&(data.package_id=this.package_item.id),this.bulk_purchase&&(data.bulk_purchase_id=this.bulk_purchase.id),data.external_purchase=this.external_purchase,this.deal&&(data.deal=this.deal),this.deal&&this.recipient&&(data.recipient=this.recipient),this.deal&&this.recipient&&this.recipient_mail&&(data.recipient_mail=this.recipient_mail),data.coupon_id=this.coupon_id,data.is_coupon=this.is_coupon,this.attachment_id&&(data.attachment_id=this.attachment_id),this.deal_codes&&(data.vouchers=this.deal_codes),this.product&&(data.product_id=this.product.id),data.ref=this.ref,this.move_reason&&(data.move_reason=this.move_reason),this.email&&(data.email=this.email),this.first_name&&(data.first_name=this.first_name),this.last_name&&(data.last_name=this.last_name),null!=this.email&&(data.email=this.email),null!=this.email_admin&&(data.email_admin=this.email_admin),this.private_note&&(data.private_note=this.private_note),this.available_slot&&(data.available_slot=this.available_slot),this.clinic_id&&(data.clinic_id=this.clinic_id),data},BasketItem.prototype.setPrice=function(nprice){var printed_price;return null==nprice?(this.price=null,this.printed_price=null,this.printed_vat_cal=null,this.printed_vat=null,this.printed_vat_inc=null):(this.price=parseFloat(nprice),printed_price=this.price/100,this.printed_price=printed_price%1===0?"£"+parseInt(printed_price):$window.sprintf("£%.2f",printed_price),this.company&&this.company.settings&&(this.printed_vat_cal=this.company.settings.payment_tax),this.printed_vat_cal&&(this.printed_vat=this.printed_vat_cal/100*printed_price),this.printed_vat_cal?this.printed_vat_inc=this.printed_vat_cal/100*printed_price+printed_price:void 0)},BasketItem.prototype.getStep=function(){var temp;return temp={},temp.service=this.service,temp.category=this.category,temp.person=this.person,temp.resource=this.resource,temp.duration=this.duration,temp.event=this.event,temp.event_group=this.event_group,temp.event_chain=this.event_chain,temp.time=this.time,temp.date=this.date,temp.days_link=this.days_link,temp.book_link=this.book_link,temp.ready=this.ready,temp.num_book=this.num_book,temp.tickets=this.tickets,temp},BasketItem.prototype.loadStep=function(step){return this.service=step.service,this.category=step.category,this.person=step.person,this.resource=step.resource,this.duration=step.duration,this.event=step.event,this.event_chain=step.event_chain,this.event_group=step.event_group,this.time=step.time,this.date=step.date,this.days_link=step.days_link,this.book_link=step.book_link,this.ready=step.ready,this.num_book=step.num_book,this.tickets=step.tickets},BasketItem.prototype.describe=function(){var title;return title="-",this.service&&(title=this.service.name),this.event_group&&this.event&&"-"===title&&(title=this.event_group.name+" - "+this.event.description),this.product&&(title=this.product.name),this.external_purchase&&(title=this.external_purchase.name),this.deal&&(title=this.deal.name),this.package_item&&(title=this.package_item.name),this.bulk_purchase&&(title=this.bulk_purchase.name),title},BasketItem.prototype.booking_date=function(format){return this.date&&this.date.date?this.date.date.format(format):null},BasketItem.prototype.booking_time=function(seperator){var duration;return null==seperator&&(seperator="-"),this.time?(duration=this.listed_duration?this.listed_duration:this.duration,this.time.print_time()+" "+seperator+" "+this.time.print_end_time(duration)):null},BasketItem.prototype.duePrice=function(){return this.isWaitlist()?0:this.price},BasketItem.prototype.isWaitlist=function(){return this.status&&8===this.status},BasketItem.prototype.start_datetime=function(){return this.date&&this.time?DateTimeUtilitiesService.convertTimeToMoment(this.date.date,this.time.time):null},BasketItem.prototype.startDatetime=function(){return this.start_datetime()},BasketItem.prototype.end_datetime=function(){var duration,time;return this.date&&this.time&&(this.listed_duration||this.duration)?(duration=this.listed_duration?this.listed_duration:this.duration,time=this.time.time+duration,DateTimeUtilitiesService.convertTimeToMoment(this.date.date,time)):null},BasketItem.prototype.endDatetime=function(){return this.end_datetime()},BasketItem.prototype.setSrcBooking=function(booking){return this.srcBooking=booking,this.duration=booking.duration},BasketItem.prototype.anyPerson=function(){return this.person&&"boolean"==typeof this.person},BasketItem.prototype.anyResource=function(){return this.resource&&"boolean"==typeof this.resource},BasketItem.prototype.isMovingBooking=function(){return this.srcBooking||this.move_item_id},BasketItem.prototype.setCloneAnswers=function(otherItem){return this.cloneAnswersItem=otherItem},BasketItem.prototype.questionPrice=function(){return this.item_details?this.item_details.questionPrice(this.getQty()):0},BasketItem.prototype.getQty=function(){return this.qty?this.qty:this.tickets?this.tickets.qty:1},BasketItem.prototype.totalPrice=function(){var pr;return this.tickets&&this.tickets.pre_paid_booking_id?0:this.pre_paid_booking_id?0:null!=this.discount_price?this.discount_price+this.questionPrice():(pr=this.total_price,angular.isNumber(pr)||(pr=this.price),angular.isNumber(pr)||(pr=0),pr+this.questionPrice())},BasketItem.prototype.fullPrice=function(){var pr;return pr=this.base_price,pr||(pr=this.total_price),pr||(pr=this.price),pr||(pr=0),pr+this.questionPrice()},BasketItem.prototype.setProduct=function(product){return this.product=product,this.product.$has("book")&&(this.book_link=this.product),product.price?this.setPrice(product.price):void 0},BasketItem.prototype.setPackageItem=function(package_item){return this.package_item=package_item,this.package_item.$has("book")&&(this.book_link=this.package_item),package_item.price?this.setPrice(package_item.price):void 0},BasketItem.prototype.setBulkPurchase=function(bulk_purchase){return this.bulk_purchase=bulk_purchase,this.bulk_purchase.$has("book")&&(this.book_link=this.bulk_purchase),bulk_purchase.price?this.setPrice(bulk_purchase.price):void 0},BasketItem.prototype.setExternalPurchase=function(external_purchase){return this.external_purchase=external_purchase,this.book_link=this.company,external_purchase.price?this.setPrice(external_purchase.price):void 0},BasketItem.prototype.setDeal=function(deal){return this.deal=deal,this.deal.$has("book")&&(this.book_link=this.deal),deal.price?this.setPrice(deal.price):void 0},BasketItem.prototype.hasPrice=function(){return null!=this.price},BasketItem.prototype.getAttachment=function(){return this.attachment?this.attachment:this.$has("attachment")&&this.attachment_id?this._data.$get("attachment").then(function(_this){return function(att){return _this.attachment=att,_this.attachment}}(this)):void 0},BasketItem.prototype.deleteAttachment=function(){return this.attachment_id?(this._data.$del("del_attachment",{}),this.attachment_id=null):void 0},BasketItem.prototype.setPrepaidBooking=function(pre_paid_booking){return this.pre_paid_booking=pre_paid_booking,this.pre_paid_booking_id=pre_paid_booking.id},BasketItem.prototype.hasPrepaidBooking=function(){return null!=this.pre_paid_booking_id},BasketItem.prototype.getEventId=function(){return this.time&&this.time.event_id?this.time.event_id:this.date&&this.date.event_id?this.date.event_id:this.event?this.event.id:void 0},BasketItem.prototype.isExternalPurchase=function(){return null!=this.external_purchase},BasketItem.prototype.getName=function(){return this.session_name?this.session_name:this.service_name},BasketItem.prototype.getAttendeeName=function(client){return this.first_name?this.first_name+" "+this.last_name:client?client.getName():void 0},BasketItem.prototype.isTimeItem=function(){return this.service||this.event},BasketItem}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("BookableItemModel",["$q","BBModel","BaseModel","ItemService",function($q,BBModel,BaseModel,ItemService){var BookableItem;return BookableItem=function(superClass){function BookableItem(data){BookableItem.__super__.constructor.apply(this,arguments),this.name="-Waiting-",this.ready=$q.defer(),this.promise=this._data.$get("item"),this.promise.then(function(_this){return function(val){var m,n,ref,ref1,ref2;if("person"===val.type){if(_this.item=new BBModel.Person(val),_this.item){ref=_this.item._data;for(n in ref)m=ref[n],_this.item._data.hasOwnProperty(n)&&"function"!=typeof m&&(_this[n]=m);return _this.ready.resolve()}return _this.ready.resolve()}if("resource"===val.type){if(_this.item=new BBModel.Resource(val),_this.item){ref1=_this.item._data;for(n in ref1)m=ref1[n],_this.item._data.hasOwnProperty(n)&&"function"!=typeof m&&(_this[n]=m);return _this.ready.resolve()}return _this.ready.resolve()}if("service"===val.type){if(_this.item=new BBModel.Service(val),_this.item){ref2=_this.item._data;for(n in ref2)m=ref2[n],_this.item._data.hasOwnProperty(n)&&"function"!=typeof m&&(_this[n]=m);return _this.ready.resolve()}return _this.ready.resolve()}}}(this))}return extend(BookableItem,superClass),BookableItem.prototype.item=null,BookableItem.prototype.promise=null,BookableItem.$query=function(params){return ItemService.query(params)},BookableItem}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("BulkPurchaseModel",["$q","BBModel","BaseModel","BulkPurchaseService",function($q,BBModel,BaseModel,BulkPurchaseService){var BulkPurchase;return BulkPurchase=function(superClass){function BulkPurchase(){return BulkPurchase.__super__.constructor.apply(this,arguments)}return extend(BulkPurchase,superClass),BulkPurchase.$query=function(company){return BulkPurchaseService.query(company)},BulkPurchase}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("BusinessQuestionModel",["$q","$filter","BBModel","BaseModel",function($q,$filter,BBModel,BaseModel){var BusinessQuestion;return BusinessQuestion=function(superClass){function BusinessQuestion(data){BusinessQuestion.__super__.constructor.call(this,data)}return extend(BusinessQuestion,superClass),BusinessQuestion}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("CategoryModel",["$q","BBModel","BaseModel","CategoryService",function($q,BBModel,BaseModel,CategoryService){var Category;return Category=function(superClass){function Category(){return Category.__super__.constructor.apply(this,arguments)}return extend(Category,superClass),Category.$query=function(company){return CategoryService.query(company)},Category}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,
child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("ClientModel",["$q","BBModel","BaseModel","ClientService",function($q,BBModel,BaseModel,ClientService){var Client;return Client=function(superClass){function Client(data){Client.__super__.constructor.apply(this,arguments),this.name=this.getName(),data&&data.answers&&data.$has("questions")&&(this.waitingQuestions=$q.defer(),this.gotQuestions=this.waitingQuestions.promise,data.$get("questions").then(function(_this){return function(details){return _this.client_details=new BBModel.ClientDetails(details),_this.client_details.setAnswers(data.answers),_this.questions=_this.client_details.questions,_this.setAskedQuestions(),_this.waitingQuestions.resolve()}}(this)))}return extend(Client,superClass),Client.prototype.setClientDetails=function(details){return this.client_details=details,this.questions=this.client_details.questions},Client.prototype.setTimeZone=function(time_zone){null!=time_zone&&(this.time_zone=time_zone)},Client.prototype.setDefaults=function(values){return values.name&&(this.name=values.name),values.first_name&&(this.first_name=values.first_name),values.last_name&&(this.last_name=values.last_name),values.phone&&(this.phone=values.phone),values.mobile&&(this.mobile=values.mobile),values.email&&(this.email=values.email),values.id&&(this.id=values.id),values.ref&&(this.comp_ref=values.ref),values.comp_ref&&(this.comp_ref=values.comp_ref),values.address1&&(this.address1=values.address1),values.address2&&(this.address2=values.address2),values.address3&&(this.address3=values.address3),values.address4&&(this.address4=values.address4),values.address5&&(this.address5=values.address5),values.postcode&&(this.postcode=values.postcode),values.country&&(this.country=values.country),values.answers&&(this.default_answers=values.answers),values.time_zone?this.time_zone=values.time_zone:void 0},Client.prototype.pre_fill_answers=function(details){var i,len,q,ref,results;if(this.default_answers){for(ref=details.questions,results=[],i=0,len=ref.length;len>i;i++)q=ref[i],this.default_answers[q.name]?results.push(q.answer=this.default_answers[q.name]):results.push(void 0);return results}},Client.prototype.getName=function(){var str;return str="",this.first_name&&(str+=this.first_name),str.length>0&&this.last_name&&(str+=" "),this.last_name&&(str+=this.last_name),str},Client.prototype.addressSingleLine=function(){var str;return str="",this.address1&&(str+=this.address1),this.address2&&str.length>0&&(str+=", "),this.address2&&(str+=this.address2),this.address3&&str.length>0&&(str+=", "),this.address3&&(str+=this.address3),this.address4&&str.length>0&&(str+=", "),this.address4&&(str+=this.address4),this.address5&&str.length>0&&(str+=", "),this.address5&&(str+=this.address5),this.postcode&&str.length>0&&(str+=", "),this.postcode&&(str+=this.postcode),str},Client.prototype.hasAddress=function(){return this.address1||this.address2||this.postcode},Client.prototype.addressCsvLine=function(){var str;return str="",this.address1&&(str+=this.address1),str+=", ",this.address2&&(str+=this.address2),str+=", ",this.address3&&(str+=this.address3),str+=", ",this.address4&&(str+=this.address4),str+=", ",this.address5&&(str+=this.address5),str+=", ",this.postcode&&(str+=this.postcode),str+=", ",this.country&&(str+=this.country),str},Client.prototype.addressMultiLine=function(){var str;return str="",this.address1&&(str+=this.address1),this.address2&&str.length>0&&(str+="<br/>"),this.address2&&(str+=this.address2),this.address3&&str.length>0&&(str+="<br/>"),this.address3&&(str+=this.address3),this.address4&&str.length>0&&(str+="<br/>"),this.address4&&(str+=this.address4),this.address5&&str.length>0&&(str+="<br/>"),this.address5&&(str+=this.address5),this.postcode&&str.length>0&&(str+="<br/>"),this.postcode&&(str+=this.postcode),str},Client.prototype.getPostData=function(){var i,len,q,ref,x;if(x={},x.first_name=this.first_name,x.last_name=this.last_name,this.house_number?x.address1=this.house_number+" "+this.address1:x.address1=this.address1,x.address2=this.address2,x.address3=this.address3,x.address4=this.address4,x.address5=this.address5,x.postcode=this.postcode,x.country=this.country,x.email=this.email,x.id=this.id,x.comp_ref=this.comp_ref,x.parent_client_id=this.parent_client_id,x.password=this.password,x.notifications=this.notifications,this.member_level_id&&(x.member_level_id=this.member_level_id),this.send_welcome_email&&(x.send_welcome_email=this.send_welcome_email),this.default_company_id&&(x.default_company_id=this.default_company_id),this.time_zone&&(x.time_zone=this.time_zone),this.phone&&(x.phone=this.phone,this.phone_prefix&&(x.phone_prefix=this.phone_prefix)),this.mobile&&(this.remove_prefix(),x.mobile=this.mobile,x.mobile_prefix=this.mobile_prefix),this.questions)for(x.questions=[],ref=this.questions,i=0,len=ref.length;len>i;i++)q=ref[i],x.questions.push(q.getPostData());return x},Client.prototype.valid=function(){return this.isValid?this.isValid:!(!this.email&&!this.hasServerId())},Client.prototype.setValid=function(val){return this.isValid=val},Client.prototype.hasServerId=function(){return this.id},Client.prototype.setAskedQuestions=function(){return this.asked_questions=!0},Client.prototype.fullMobile=function(){return this.mobile?this.mobile_prefix?"+"+this.mobile_prefix+("0"===this.mobile.substr(0,1)?this.mobile.substr(1):this.mobile):this.mobile:void 0},Client.prototype.remove_prefix=function(){var pref_arr;return pref_arr=this.mobile.match(/^(\+|00)(999|998|997|996|995|994|993|992|991|990|979|978|977|976|975|974|973|972|971|970|969|968|967|966|965|964|963|962|961|960|899|898|897|896|895|894|893|892|891|890|889|888|887|886|885|884|883|882|881|880|879|878|877|876|875|874|873|872|871|870|859|858|857|856|855|854|853|852|851|850|839|838|837|836|835|834|833|832|831|830|809|808|807|806|805|804|803|802|801|800|699|698|697|696|695|694|693|692|691|690|689|688|687|686|685|684|683|682|681|680|679|678|677|676|675|674|673|672|671|670|599|598|597|596|595|594|593|592|591|590|509|508|507|506|505|504|503|502|501|500|429|428|427|426|425|424|423|422|421|420|389|388|387|386|385|384|383|382|381|380|379|378|377|376|375|374|373|372|371|370|359|358|357|356|355|354|353|352|351|350|299|298|297|296|295|294|293|292|291|290|289|288|287|286|285|284|283|282|281|280|269|268|267|266|265|264|263|262|261|260|259|258|257|256|255|254|253|252|251|250|249|248|247|246|245|244|243|242|241|240|239|238|237|236|235|234|233|232|231|230|229|228|227|226|225|224|223|222|221|220|219|218|217|216|215|214|213|212|211|210|98|95|94|93|92|91|90|86|84|82|81|66|65|64|63|62|61|60|58|57|56|55|54|53|52|51|49|48|47|46|45|44|43|41|40|39|36|34|33|32|31|30|27|20|7|1)/),pref_arr?(this.mobile.replace(pref_arr[0],""),this.mobile_prefix=pref_arr[0]):void 0},Client.prototype.$getPrePaidBookings=function(params){var defer;return defer=$q.defer(),this.$has("pre_paid_bookings")?this.$get("pre_paid_bookings",params).then(function(collection){return collection.$get("pre_paid_bookings").then(function(prepaids){var prepaid;return defer.resolve(function(){var i,len,results;for(results=[],i=0,len=prepaids.length;len>i;i++)prepaid=prepaids[i],results.push(new BBModel.PrePaidBooking(prepaid));return results}())},function(err){return defer.reject(err)})},function(err){return defer.resolve([])}):defer.resolve([]),defer.promise},Client.$create_or_update=function(company,client){return ClientService.create_or_update(company,client)},Client.$query_by_email=function(company,email){return ClientService.query_by_email(company,email)},Client}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("ClientDetailsModel",["$q","BBModel","BaseModel","ClientDetailsService",function($q,BBModel,BaseModel,ClientDetailsService){var ClientDetails;return ClientDetails=function(superClass){function ClientDetails(data){var i,len,q,ref;if(ClientDetails.__super__.constructor.apply(this,arguments),this.questions=[],this._data)for(ref=data.questions,i=0,len=ref.length;len>i;i++)q=ref[i],this.questions.push(new BBModel.Question(q));this.hasQuestions=this.questions.length>0}return extend(ClientDetails,superClass),ClientDetails.prototype.getPostData=function(questions){var data,i,len,q;for(data=[],i=0,len=questions.length;len>i;i++)q=questions[i],data.push({answer:q.answer,id:q.id,price:q.price});return data},ClientDetails.prototype.setAnswers=function(answers){var a,ahash,i,j,len,len1,q,ref,results;for(ahash={},i=0,len=answers.length;len>i;i++)a=answers[i],ahash[a.question_id]=a;for(ref=this.questions,results=[],j=0,len1=ref.length;len1>j;j++)q=ref[j],ahash[q.id]?results.push(q.answer=ahash[q.id].answer):results.push(void 0);return results},ClientDetails.$query=function(company){return ClientDetailsService.query(company)},ClientDetails}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("ClinicModel",["$q","BBModel","BaseModel",function($q,BBModel,BaseModel){var Clinic;return Clinic=function(superClass){function Clinic(data){Clinic.__super__.constructor.call(this,data),this.setTimes(),this.setResourcesAndPeople(),this.settings||(this.settings={})}return extend(Clinic,superClass),Clinic.prototype.setResourcesAndPeople=function(){return this.resources=_.reduce(this.resource_ids,function(h,id){return h[id]=!0,h},{}),this.people=_.reduce(this.person_ids,function(h,id){return h[id]=!0,h},{}),this.services=_.reduce(this.service_ids,function(h,id){return h[id]=!0,h},{}),this.uncovered=!this.person_ids||0===this.person_ids.length,this.uncovered?this.className="clinic_uncovered":this.className="clinic_covered"},Clinic.prototype.setTimes=function(){return this.start_time&&(this.start_time=moment(this.start_time),this.start=this.start_time),this.end_time&&(this.end_time=moment(this.end_time),this.end=this.end_time),this.title=this.name},Clinic}(BaseModel)}])}.call(this),function(){"use strict";var bind=function(fn,me){return function(){return fn.apply(me,arguments)}},extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("BBCollectionModel",["$q","BBModel","BaseModel",function($q,BBModel,BaseModel){var BBCollection;return BBCollection=function(superClass){function BBCollection(){return this.getNextPage=bind(this.getNextPage,this),BBCollection.__super__.constructor.apply(this,arguments)}return extend(BBCollection,superClass),BBCollection.prototype.getNextPage=function(params){var deferred;return deferred=$q.defer(),this.$get("next",params).then(function(collection){return deferred.resolve(new BBModel.BBCollection(collection))},function(){return deferred.reject()}),deferred.promise},BBCollection}(BaseModel)}])}.call(this),function(){"use strict";var bind=function(fn,me){return function(){return fn.apply(me,arguments)}},extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("CompanyModel",["$q","BBModel","BaseModel","halClient","AppConfig","$sessionStorage","CompanyService",function($q,BBModel,BaseModel,halClient,AppConfig,$sessionStorage,CompanyService){var Company;return Company=function(superClass){function Company(data){this.getPusherChannel=bind(this.getPusherChannel,this),this.pusherSubscribe=bind(this.pusherSubscribe,this);var all_companies,c,child,comp,i,j,len,len1,ref1,ref2;if(Company.__super__.constructor.call(this,data),this.companies){for(all_companies=[],this.child_companies=[],ref1=this.companies,i=0,len=ref1.length;len>i;i++)if(comp=ref1[i],c=new BBModel.Company(halClient.$parse(comp)),this.child_companies.push(c),c.companies)for(ref2=c.companies,j=0,len1=ref2.length;len1>j;j++)child=ref2[j],all_companies.push(child);else all_companies.push(c);this.companies=all_companies}}return extend(Company,superClass),Company.prototype.getCompanyByRef=function(ref){var defer;return defer=$q.defer(),this.$get("companies").then(function(companies){var company;return company=_.find(companies,function(c){return c.reference===ref}),company?defer.resolve(company):defer.reject("No company for ref "+ref)},function(err){return console.log("err ",err),defer.reject(err)}),defer.promise},Company.prototype.findChildCompany=function(id){var c,cname,i,j,len,len1,name,ref1,ref2;if(!this.companies)return null;for(ref1=this.companies,i=0,len=ref1.length;len>i;i++){if(c=ref1[i],c.id===parseInt(id))return c;if(c.ref&&c.ref===String(id))return c}if("string"==typeof id)for(name=id.replace(/[\s\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|'’!<>;:,.~`=+-@£&%"]/g,"").toLowerCase(),ref2=this.companies,j=0,len1=ref2.length;len1>j;j++)if(c=ref2[j],cname=c.name.replace(/[\s\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|'’!<>;:,.~`=+-@£&%"]/g,"").toLowerCase(),name===cname)return c;return null},Company.prototype.getSettings=function(){var def;return def=$q.defer(),this.settings?def.resolve(this.settings):this.$has("settings")?this.$get("settings").then(function(_this){return function(set){return _this.settings=new BBModel.CompanySettings(set),def.resolve(_this.settings)}}(this)):def.reject("Company has no settings"),def.promise},Company.prototype.pusherSubscribe=function(callback,options){var channelName;if(null==options&&(options={}),"undefined"!=typeof Pusher&&null!==Pusher&&null==this.pusher){if(!this.$has("pusher"))return;this.pusher=new Pusher("c8d8cea659cc46060608",{encrypted:options.hasOwnProperty("encrypted")?options.encrypted:!0,authEndpoint:this.$link("pusher").href,auth:{headers:{"App-Id":AppConfig.appId,"App-Key":AppConfig.appKey,"Auth-Token":$sessionStorage.getItem("auth_token")}}})}return channelName="private-c"+this.id+"-w"+this.numeric_widget_id,null!=this.pusher.channel(channelName)&&this.pusher.unsubscribe(channelName),this.pusher_channel=this.pusher.subscribe(channelName),this.pusher_channel.bind("booking",callback),this.pusher_channel.bind("cancellation",callback),this.pusher_channel.bind("updating",callback)},Company.prototype.getPusherChannel=function(model,options){var channelName;if(null==options&&(options={}),!this.pusher){if(!this.$has("pusher"))return;this.pusher=new Pusher("c8d8cea659cc46060608",{encrypted:options.hasOwnProperty("encrypted")?options.encrypted:!0,authEndpoint:this.$link("pusher").href,auth:{headers:{"App-Id":AppConfig.appId,"App-Key":AppConfig.appKey,"Auth-Token":$sessionStorage.getItem("auth_token")}}})}return this.$has(model)?(channelName=this.$href(model),channelName=channelName.replace(/https?:\/\//,"").replace(/\//g,"-").replace(/:/g,"_"),this.pusher.channel(channelName)?this.pusher.channel(channelName):(this.pusher.subscribe(channelName),this.pusher.channel(channelName))):void 0},Company.$query=function(company_id,options){return CompanyService.query(company_id,options)},Company}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("CompanySettingsModel",["$q","BBModel","BaseModel",function($q,BBModel,BaseModel){var CompanySettings;return CompanySettings=function(superClass){function CompanySettings(){return CompanySettings.__super__.constructor.apply(this,arguments)}return extend(CompanySettings,superClass),CompanySettings}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("DayModel",["$q","BBModel","BaseModel","DayService",function($q,BBModel,BaseModel,DayService){var Day;return Day=function(superClass){function Day(data){Day.__super__.constructor.apply(this,arguments),this.string_date=this.date,this.date=moment(this.date)}return extend(Day,superClass),Day.prototype.day=function(){return this.date.date()},Day.prototype.off=function(month){return this.date.month()!==month},Day.prototype["class"]=function(month){var str;return str="",this.date.month()<month&&(str+="off off-prev"),this.date.month()>month&&(str+="off off-next"),0===this.spaces&&(str+=" not-avail"),str},Day.$query=function(prms){return DayService.query(prms)},Day}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("DealModel",["$q","BBModel","BaseModel","DealService",function($q,BBModel,BaseModel,DealService){var Deal;return Deal=function(superClass){function Deal(){return Deal.__super__.constructor.apply(this,arguments)}return extend(Deal,superClass),Deal.$query=function(company){return DealService.query(company)},Deal}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("EventModel",["$q","BBModel","BaseModel","DateTimeUtilitiesService","EventService","$translate",function($q,BBModel,BaseModel,DateTimeUtilitiesService,EventService,$translate){var Event;return Event=function(superClass){function Event(data){Event.__super__.constructor.call(this,data),this.date=moment.parseZone(this.datetime),this.time=new BBModel.TimeSlot({time:DateTimeUtilitiesService.convertMomentToTime(this.date)}),this.duration&&(this.end_datetime=this.date.clone().add(this.duration,"minutes")),this.date_unix=this.date.unix()}return extend(Event,superClass),Event.prototype.getGroup=function(){var defer,event_group;return defer=$q.defer(),this.group?defer.resolve(this.group):this.$has("event_groups")||this.$has("event_group")?(event_group="event_group",this.$has("event_groups")&&(event_group="event_groups"),this.$get(event_group).then(function(_this){return function(group){return _this.group=new BBModel.EventGroup(group),defer.resolve(_this.group)}}(this),function(err){return defer.reject(err)})):defer.reject("No event group"),defer.promise},Event.prototype.getChain=function(params){var defer,event_chain;return defer=$q.defer(),this.chain?defer.resolve(this.chain):this.$has("event_chains")||this.$has("event_chain")?(event_chain="event_chain",this.$has("event_chains")&&(event_chain="event_chains"),this.$get(event_chain,params).then(function(_this){return function(chain){return _this.chain=new BBModel.EventChain(chain),defer.resolve(_this.chain)}}(this))):defer.reject("No event chain"),defer.promise},Event.prototype.getDuration=function(){var defer;return defer=new $q.defer,this.duration?defer.resolve(this.duration):this.getChain().then(function(_this){return function(chain){return _this.duration=chain.duration,defer.resolve(_this.duration)}}(this)),defer.promise},Event.prototype.getDescription=function(){return this.getChain().description},Event.prototype.getColour=function(){return this.getGroup()?this.getGroup().colour:"#FFFFFF"},Event.prototype.getPounds=function(){return this.chain?Math.floor(this.getPrice()).toFixed(0):void 0},Event.prototype.getPrice=function(){return 0},Event.prototype.getPence=function(){return this.chain?(this.getPrice()%1).toFixed(2).slice(-2):void 0},Event.prototype.getNumBooked=function(){return this.spaces_blocked+this.spaces_booked+this.spaces_reserved+this.spaces_held},Event.prototype.getSpacesLeft=function(pool){var x;return null==pool&&(pool=null),pool&&this.ticket_spaces&&this.ticket_spaces[pool]?this.ticket_spaces[pool].left:(x=this.num_spaces-this.getNumBooked(),0>x?0:x)},Event.prototype.getWaitSpacesLeft=function(){var wait;return wait=this.chain.waitlength,wait||(wait=0),wait-=this.spaces_wait,0>=wait?0:wait},Event.prototype.hasSpace=function(){return this.getSpacesLeft()>0},Event.prototype.hasWaitlistSpace=function(){return this.getSpacesLeft()<=0&&this.getChain().waitlength>this.spaces_wait},Event.prototype.getRemainingDescription=function(){var left;return left=this.getSpacesLeft(),left>0&&3>left?$translate.instant("CORE.EVENT.SPACES_LEFT",{N:left},"messageformat"):this.hasWaitlistSpace()?$translate.instant("CORE.EVENT.JOIN_WAITLIST"):""},Event.prototype.select=function(){return this.selected=!0},Event.prototype.unselect=function(){return this.selected?delete this.selected:void 0},Event.prototype.prepEvent=function(params){var def;return def=$q.defer(),this.getChain(params).then(function(_this){return function(){return _this.chain.$has("address")&&_this.chain.$getAddress().then(function(address){return _this.chain.address=address}),_this.chain.getTickets().then(function(tickets){var i,len,ref,ticket;if(_this.tickets=tickets,_this.price_range={},tickets&&tickets.length>0)for(ref=_this.tickets,i=0,len=ref.length;len>i;i++)ticket=ref[i],(!_this.price_range.from||_this.price_range.from&&ticket.price<_this.price_range.from)&&(_this.price_range.from=ticket.price),(!_this.price_range.to||_this.price_range.to&&ticket.price>_this.price_range.to)&&(_this.price_range.to=ticket.price),ticket.old_price=ticket.price;else _this.price_range.from=_this.price,_this.price_range.to=_this.price;return _this.ticket_prices=_.indexBy(tickets,"name"),def.resolve(_this)})}}(this)),def.promise},Event.prototype.updatePrice=function(){var i,len,ref,results,ticket;for(ref=this.tickets,results=[],i=0,len=ref.length;len>i;i++)ticket=ref[i],ticket.pre_paid_booking_id?results.push(ticket.price=0):results.push(ticket.price=ticket.old_price);return results},Event.$query=function(company,params){return EventService.query(company,params)},Event.$summary=function(company,params){return EventService.summary(company,params)},Event.prototype.numTicketsSelected=function(){var i,len,num,ref,ticket;for(num=0,ref=this.tickets,i=0,len=ref.length;len>i;i++)ticket=ref[i],num+=ticket.qty;return num},Event}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("EventChainModel",["$q","BBModel","BaseModel","EventChainService","$translate",function($q,BBModel,BaseModel,EventChainService,$translate){var EventChain;return EventChain=function(superClass){function EventChain(data){EventChain.__super__.constructor.apply(this,arguments),this.capacity_view=setCapacityView(this.capacity_view),this.start_date&&(this.start_date=moment(this.start_date)),this.end_date&&(this.end_date=moment(this.end_date))}var setCapacityView;return extend(EventChain,superClass),EventChain.prototype.name=function(){return this._data.name},EventChain.prototype.isSingleBooking=function(){return 1===this.max_num_bookings&&!this.$has("ticket_sets")},EventChain.prototype.hasTickets=function(){return this.$has("ticket_sets")},EventChain.prototype.getTickets=function(){var def;return def=$q.defer(),this.tickets?def.resolve(this.tickets):this.$has("ticket_sets")?this.$get("ticket_sets").then(function(_this){return function(tickets){var i,len,ticket;for(_this.tickets=[],i=0,len=tickets.length;len>i;i++)ticket=tickets[i],ticket.ticket_set=!0,_this.tickets.push(new BBModel.EventTicket(ticket));return _this.adjustTicketsForRemaining(),def.resolve(_this.tickets)}}(this)):(this.tickets=[new BBModel.EventTicket({name:$translate.instant("COMMON.TERMINOLOGY.ADMITTANCE"),min_num_bookings:1,max_num_bookings:this.max_num_bookings,type:"normal",price:this.price})],this.adjustTicketsForRemaining(),def.resolve(this.tickets)),def.promise},EventChain.prototype.adjustTicketsForRemaining=function(){var i,len,ref,results;if(this.tickets){for(ref=this.tickets,results=[],i=0,len=ref.length;len>i;i++)this.ticket=ref[i],results.push(this.ticket.max_spaces=this.spaces);return results}},setCapacityView=function(capacity_view){var capacity_view_str;switch(capacity_view){case 0:capacity_view_str="DO_NOT_DISPLAY";break;case 1:capacity_view_str="NUM_SPACES";break;case 2:capacity_view_str="NUM_SPACES_LEFT";break;case 3:capacity_view_str="NUM_SPACES_AND_SPACES_LEFT";break;default:capacity_view_str="NUM_SPACES_AND_SPACES_LEFT"}return capacity_view_str},EventChain.$query=function(prms){return EventChainService.query(prms)},EventChain}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("EventGroupModel",["$q","BBModel","BaseModel",function($q,BBModel,BaseModel){var EventGroup;return EventGroup=function(superClass){function EventGroup(){return EventGroup.__super__.constructor.apply(this,arguments)}return extend(EventGroup,superClass),EventGroup.prototype.name=function(){return this._data.name},EventGroup.prototype.colour=function(){return this._data.colour},EventGroup}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("EventSequenceModel",["$q","BBModel","BaseModel",function($q,BBModel,BaseModel){var EventSequence;return EventSequence=function(superClass){function EventSequence(){return EventSequence.__super__.constructor.apply(this,arguments)}return extend(EventSequence,superClass),EventSequence.prototype.name=function(){return this._data.name},EventSequence}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("EventTicketModel",["$q","BBModel","BaseModel",function($q,BBModel,BaseModel){var EventTicket;return EventTicket=function(superClass){function EventTicket(data){var ms;EventTicket.__super__.constructor.call(this,data),this.max=this.max_num_bookings,this.max_spaces&&(ms=this.max_spaces,this.counts_as&&(ms=this.max_spaces/this.counts_as),ms<max&&(this.max=ms))}return extend(EventTicket,superClass),EventTicket.prototype.fullName=function(){return this.pool_name?this.pool_name+" - "+this.name:this.name},EventTicket.prototype.getRange=function(event,cap){var max,min,pool,results;if(event)return pool=null,this.ticket_set&&(pool=this.pool_id),max=this.getMax(event,pool,cap),min=max<=this.min_num_bookings?max:this.min_num_bookings,[].concat(function(){results=[];for(var i=min;max>=min?max>=i:i>=max;max>=min?i++:i--)results.push(i);return results}.apply(this))},EventTicket.prototype.getMax=function(ev,pool,cap){var c,i,isAvailable,left,len,live_max,ref,spaces_left,ticket,used,wait_spaces;if(null==pool&&(pool=null),null==cap&&(cap=null),isAvailable=function(event){return _.each(event.ticket_spaces,function(ts){return ts.left<=0?!1:void 0}),!0},!ev)return 0;for(!isAvailable(ev)||ev.getSpacesLeft()<=0?(spaces_left=ev.getWaitSpacesLeft(),wait_spaces=!0):spaces_left=ev.getSpacesLeft(pool),live_max=spaces_left<=this.max?spaces_left:this.max,used=0,ref=ev.tickets,i=0,len=ref.length;len>i;i++)ticket=ref[i],(ticket.pool_id===this.pool_id||wait_spaces)&&(used+=ticket.totalQty());return this.qty&&(used-=this.totalQty()),this.counts_as&&(used=Math.ceil(used/this.counts_as)),live_max-=used,0>live_max&&(live_max=0),left-=used,0>left&&(left=0),this.cap&&(cap=this.cap),(!cap||cap>left)&&(cap=left),cap&&(c=cap,this.counts_as&&(c=cap/this.counts_as),live_max>c)?c:live_max},EventTicket.prototype.totalQty=function(){return this.qty?this.counts_as?this.qty*this.counts_as:this.qty:0},EventTicket.prototype.add=function(value){return this.qty||(this.qty=0),this.qty=parseInt(this.qty),angular.isNumber(this.qty)&&this.qty>=this.max&&value>0||0===this.qty&&0>value?void 0:this.qty+=value},EventTicket.prototype.subtract=function(value){return this.add(-value)},EventTicket}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("ExternalPurchaseModel",["$q","BBModel","BaseModel",function($q,BBModel,BaseModel){var ExternalPurchase;return ExternalPurchase=function(superClass){function ExternalPurchase(){return ExternalPurchase.__super__.constructor.apply(this,arguments)}return extend(ExternalPurchase,superClass),ExternalPurchase}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("ImageModel",["$q","$filter","BBModel","BaseModel",function($q,$filter,BBModel,BaseModel){var Image;return Image=function(superClass){function Image(data){Image.__super__.constructor.call(this,data)}return extend(Image,superClass),Image}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("ItemDetailsModel",["$q","$bbug","ItemDetailsService","BBModel","BaseModel",function($q,$bbug,ItemDetailsService,BBModel,BaseModel){var ItemDetails;return ItemDetails=function(superClass){function ItemDetails(data){var i,len,q,ref;if(this._data=data,this._data&&(this.self=this._data.$href("self")),this.questions=[],this.survey_questions=[],data)for(ref=data.questions,i=0,len=ref.length;len>i;i++)q=ref[i],q.outcome===!1?(data.currency_code&&(q.currency_code=data.currency_code),this.questions.push(new BBModel.Question(q))):this.survey_questions.push(new BBModel.SurveyQuestion(q));this.hasQuestions=this.questions.length>0,this.hasSurveyQuestions=this.survey_questions.length>0;
}return extend(ItemDetails,superClass),ItemDetails.prototype.questionPrice=function(qty){var i,len,price,q,ref;for(qty||(qty=1),this.checkConditionalQuestions(),price=0,ref=this.questions,i=0,len=ref.length;len>i;i++)q=ref[i],price+=q.selectedPriceQty(qty);return price},ItemDetails.prototype.checkConditionalQuestions=function(){return BBModel.Question.$checkConditionalQuestions(this.questions)},ItemDetails.prototype.getPostData=function(){var data,i,len,q,ref;for(data=[],ref=this.questions,i=0,len=ref.length;len>i;i++)q=ref[i],q.currentlyShown&&data.push(q.getPostData());return data},ItemDetails.prototype.setAnswers=function(answers){var a,ahash,i,j,len,len1,q,ref;for(ahash={},i=0,len=answers.length;len>i;i++)a=answers[i],ahash[a.id]=a;for(ref=this.questions,j=0,len1=ref.length;len1>j;j++)q=ref[j],ahash[q.id]&&(q.answer=ahash[q.id].answer);return this.checkConditionalQuestions()},ItemDetails.prototype.getQuestion=function(id){return _.findWhere(this.questions,{id:id})},ItemDetails.$query=function(prms){return ItemDetailsService.query(prms)},ItemDetails}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("LoginModel",["$q","LoginService","BBModel","BaseModel",function($q,LoginService,BBModel,BaseModel){var Login;return Login=function(superClass){function Login(data){Login.__super__.constructor.call(this,data)}return extend(Login,superClass),Login.$companyLogin=function(company,params,form){return LoginService.companyLogin(company,params,form)},Login.$login=function(form,options){return LoginService.login(form,options)},Login.$FBLogin=function(company,params){return LoginService.FBLogin(company,params)},Login.$companyQuery=function(id){return LoginService.companyQuery(id)},Login.$memberQuery=function(params){return LoginService.memberQuery(params)},Login.$ssoLogin=function(options,data){return LoginService.ssoLogin(options,data)},Login.$isLoggedIn=function(){return LoginService.isLoggedIn()},Login.$setLogin=function(member,persist){return LoginService.setLogin(member,persist)},Login.$member=function(){return LoginService.member()},Login.$checkLogin=function(){return LoginService.checkLogin()},Login.$logout=function(){return LoginService.logout()},Login.$FBLogout=function(options){return LoginService.FBLogout(options)},Login.$sendPasswordReset=function(company,params){return LoginService.sendPasswordReset(company,params)},Login.$updatePassword=function(member,params){return LoginService.updatePassword(member,params)},Login}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("MembershipLevelModel",["$q","BBModel","BaseModel","MembershipLevelsService",function($q,BBModel,BaseModel,MembershipLevelsService){var MembershipLevel;return MembershipLevel=function(superClass){function MembershipLevel(){return MembershipLevel.__super__.constructor.apply(this,arguments)}return extend(MembershipLevel,superClass),MembershipLevel.prototype.$getMembershipLevels=function(company){return MembershipLevelsService.getMembershipLevels(company)},MembershipLevel}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("PackageItemModel",["$q","PackageItemService","BBModel","BaseModel",function($q,PackageItemService,BBModel,BaseModel){var PackageItem;return PackageItem=function(superClass){function PackageItem(){return PackageItem.__super__.constructor.apply(this,arguments)}return extend(PackageItem,superClass),PackageItem.$query=function(company){return PackageItemService.query(company)},PackageItem.$getPackageServices=function(package_item){return PackageItemService.getPackageServices(package_item)},PackageItem}(BaseModel)}])}.call(this),function(){"use strict";angular.module("BB.Models").factory("PaginationModel",function(){var Pagination;return Pagination=function(){function Pagination(options){this.current_page=1,this.page_size=options.page_size||10,this.request_page_size=options.request_page_size||this.page_size,this.max_size=options.max_size||5,this.num_pages=null,this.num_items=null,this.items=[]}return Pagination.prototype.initialise=function(items,total_items){return this.current_page=1,this.items=items||[],this.num_items=total_items||0,this.update()},Pagination.prototype.update=function(){var end,page_to_load,start,total;return start=(this.current_page-1)*this.page_size+1,end=this.current_page*this.page_size,end=this.num_items<end?this.num_items:end,total=end>=100?"100+":end,this.summary=$translate.instant("CORE.PAGINATION.SUMMARY",{start:start,end:end,total:total}),page_to_load=Math.ceil(this.current_page*this.page_size/this.request_page_size),[null!=this.items[start-1],page_to_load]},Pagination.prototype.add=function(request_page,new_items){var i,index,item,len,results,start;for(start=(request_page-1)*this.request_page_size,results=[],index=i=0,len=new_items.length;len>i;index=++i)item=new_items[index],results.push(this.items[start+index]=item);return results},Pagination}()})}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("PaymentCallbacksModel",["$q","$filter","BBModel","BaseModel",function($q,$filter,BBModel,BaseModel){var PaymentCallbacks;return PaymentCallbacks=function(superClass){function PaymentCallbacks(data){PaymentCallbacks.__super__.constructor.call(this,data)}return extend(PaymentCallbacks,superClass),PaymentCallbacks}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("PersonModel",["$q","BBModel","BaseModel","PersonService",function($q,BBModel,BaseModel,PersonService){var Person;return Person=function(superClass){function Person(){return Person.__super__.constructor.apply(this,arguments)}return extend(Person,superClass),Person.$query=function(company){return PersonService.query(company)},Person}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("PrePaidBookingModel",["$q","BBModel","BaseModel",function($q,BBModel,BaseModel){var PrePaidBooking;return PrePaidBooking=function(superClass){function PrePaidBooking(data){PrePaidBooking.__super__.constructor.call(this,data),this.book_by&&(this.book_by=moment(this.book_by)),this.use_by&&(this.use_by=moment(this.use_by)),this.use_from&&(this.use_from=moment(this.use_from)),this.expired=this.book_by&&moment().isAfter(this.book_by,"day")||this.use_by&&moment().isAfter(this.use_by,"day")||!1}return extend(PrePaidBooking,superClass),PrePaidBooking.prototype.checkValidity=function(item){return this.service_id&&item.service_id&&this.service_id!==item.service_id?!1:this.resource_id&&item.resource_id&&this.resource_id!==item.resource_id?!1:!this.person_id||!item.person_id||this.person_id===item.person_id},PrePaidBooking}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("ProductModel",["$q","BBModel","BaseModel",function($q,BBModel,BaseModel){var Product;return Product=function(superClass){function Product(){return Product.__super__.constructor.apply(this,arguments)}return extend(Product,superClass),Product}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("PurchaseItemModel",["$q","BBModel","BaseModel",function($q,BBModel,BaseModel){var PurchaseItem;return PurchaseItem=function(superClass){function PurchaseItem(data){PurchaseItem.__super__.constructor.call(this,data),this.parts_links={},data&&(data.$has("service")&&(this.parts_links.service=data.$href("service")),data.$has("resource")&&(this.parts_links.resource=data.$href("resource")),data.$has("person")&&(this.parts_links.person=data.$href("person")),data.$has("company")&&(this.parts_links.company=data.$href("company")))}return extend(PurchaseItem,superClass),PurchaseItem.prototype.describe=function(){return this.get("describe")},PurchaseItem.prototype.full_describe=function(){return this.get("full_describe")},PurchaseItem.prototype.hasPrice=function(){return this.price&&this.price>0},PurchaseItem}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("PurchaseTotalModel",["$q","BBModel","BaseModel","PurchaseTotalService",function($q,BBModel,BaseModel,PurchaseTotalService){var PurchaseTotal;return PurchaseTotal=function(superClass){function PurchaseTotal(data){var cprom;PurchaseTotal.__super__.constructor.call(this,data),this.promise=this._data.$get("purchase_items"),this.purchase_items=[],this.promise.then(function(_this){return function(items){var i,item,len,results;for(results=[],i=0,len=items.length;len>i;i++)item=items[i],results.push(_this.purchase_items.push(new BBModel.PurchaseItem(item)));return results}}(this)),this._data.$has("client")&&(cprom=data.$get("client"),cprom.then(function(_this){return function(client){return _this.client=new BBModel.Client(client)}}(this))),this.created_at=moment.parseZone(this.created_at),this.time_zone&&this.created_at.tz(this.time_zone)}return extend(PurchaseTotal,superClass),PurchaseTotal.prototype.icalLink=function(){return this._data.$href("ical")},PurchaseTotal.prototype.webcalLink=function(){return this._data.$href("ical")},PurchaseTotal.prototype.gcalLink=function(){return this._data.$href("gcal")},PurchaseTotal.prototype.id=function(){return this.get("id")},PurchaseTotal.$query=function(params){return PurchaseService.query(params)},PurchaseTotal.$bookingRefQuery=function(params){return PurchaseService.query(params)},PurchaseTotal}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("QuestionModel",["$q","$filter","BBModel","BaseModel","QuestionService",function($q,$filter,BBModel,BaseModel,QuestionService){var Question;return Question=function(superClass){function Question(data){var currency,i,len,option,ref;if(Question.__super__.constructor.call(this,data),this.price&&(this.price=parseFloat(this.price)),this._data["default"]&&(this.answer=this._data["default"]),this._data.options)for(ref=this._data.options,i=0,len=ref.length;len>i;i++)option=ref[i],option.is_default&&(this.answer=option.name),this.hasPrice()?(option.price=parseFloat(option.price),currency=data.currency_code?data.currency_code:"GBP",option.display_name=option.name+" ("+$filter("currency")(option.price,currency)+")"):option.display_name=option.name;"check"!==this._data.detail_type&&"check-price"!==this._data.detail_type||(this.answer=this._data["default"]&&"1"===this._data["default"]),this.currentlyShown=!0}return extend(Question,superClass),Question.prototype.hasPrice=function(){return"check-price"===this.detail_type||"select-price"===this.detail_type||"radio-price"===this.detail_type},Question.prototype.selectedPrice=function(){var i,len,option,ref;if(!this.hasPrice())return 0;if("check-price"===this.detail_type)return this.answer?this.price:0;for(ref=this._data.options,i=0,len=ref.length;len>i;i++)if(option=ref[i],this.answer===option.name)return option.price;return 0},Question.prototype.selectedPriceQty=function(qty){var p;return qty||(qty=1),p=this.selectedPrice(),this.price_per_booking&&(p*=qty),p},Question.prototype.getAnswerId=function(){var i,len,o,ref;if(!this.answer||!this.options||0===this.options.length)return null;for(ref=this.options,i=0,len=ref.length;len>i;i++)if(o=ref[i],this.answer===o.name)return o.id;return null},Question.prototype.showElement=function(){return this.currentlyShown=!0},Question.prototype.hideElement=function(){return this.currentlyShown=!1},Question.prototype.getPostData=function(){var p,x;return x={},x.id=this.id,x.answer=this.answer,"date"===this.detail_type&&this.answer&&(x.answer=moment(this.answer).toISODate()),p=this.selectedPrice(),p&&(x.price=p),x},Question.$addAnswersByName=function(obj,keys){return QuestionService.addAnswersByName(obj,keys)},Question.$addDynamicAnswersByName=function(questions){return QuestionService.addDynamicAnswersByName(questions)},Question.$addAnswersFromDefaults=function(questions,answers){return QuestionService.addAnswersFromDefaults(questions,answers)},Question.$checkConditionalQuestions=function(questions){return QuestionService.checkConditionalQuestions(questions)},Question}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("ReasonModel",["$q","BBModel","BaseModel",function($q,BBModel,BaseModel){var Reason;return Reason=function(superClass){function Reason(){return Reason.__super__.constructor.apply(this,arguments)}return extend(Reason,superClass),Reason}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("ResourceModel",["$q","BBModel","BaseModel","ResourceService",function($q,BBModel,BaseModel,ResourceService){var Resource;return Resource=function(superClass){function Resource(){return Resource.__super__.constructor.apply(this,arguments)}return extend(Resource,superClass),Resource.$query=function(company){return ResourceService.query(company)},Resource}(BaseModel)}])}.call(this),function(){"use strict";var bind=function(fn,me){return function(){return fn.apply(me,arguments)}},extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("ServiceModel",["$q","BBModel","BaseModel","ServiceService",function($q,BBModel,BaseModel,ServiceService){var Service;return Service=function(superClass){function Service(data){this.days_array=bind(this.days_array,this),this.$getCategory=bind(this.$getCategory,this),Service.__super__.constructor.apply(this,arguments),this.prices&&this.prices.length>0&&(this.price=this.prices[0]),this.durations&&this.durations.length>0&&(this.duration=this.durations[0]),this.listed_durations||(this.listed_durations=this.durations),this.listed_durations&&this.listed_durations.length>0&&(this.listed_duration=this.listed_durations[0]),this.min_advance_datetime=moment().add(this.min_advance_period,"seconds"),this.max_advance_datetime=moment().add(this.max_advance_period,"seconds")}return extend(Service,superClass),Service.prototype.getPriceByDuration=function(dur){var d,i,j,len,ref;for(ref=this.durations,i=j=0,len=ref.length;len>j;i=++j)if(d=ref[i],d===dur)return this.prices[i]},Service.prototype.$getCategory=function(){var prom;return this.$has("category")?(prom=this.$get("category"),prom.then(function(_this){return function(cat){return _this.category=new BBModel.Category(cat)}}(this)),prom):null},Service.prototype.days_array=function(){var arr,j,ref,ref1,str,x;for(arr=[],x=j=ref=this.min_bookings,ref1=this.max_bookings;ref1>=ref?ref1>=j:j>=ref1;x=ref1>=ref?++j:--j)str=""+x+" day",x>1&&(str+="s"),arr.push({name:str,val:x});return arr},Service.$query=function(company){return ServiceService.query(company)},Service}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("SlotModel",["$q","BBModel","BaseModel","SlotService",function($q,BBModel,BaseModel,SlotService){var Slot;return Slot=function(superClass){function Slot(data){Slot.__super__.constructor.call(this,data),this.datetime=moment(data.datetime)}return extend(Slot,superClass),Slot.$query=function(company,params){return SlotService.query(company,params)},Slot}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("SpaceModel",["$q","BBModel","BaseModel","SpaceService",function($q,BBModel,BaseModel,SpaceService){var Space;return Space=function(superClass){function Space(){return Space.__super__.constructor.apply(this,arguments)}return extend(Space,superClass),Space.prototype.$query=function(company){return SpaceService.query(company)},Space}(BaseModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("SurveyQuestionModel",["$q","$window","BBModel","BaseModel","QuestionModel",function($q,$window,BBModel,BaseModel,QuestionModel){var SurveyQuestion;return SurveyQuestion=function(superClass){function SurveyQuestion(){return SurveyQuestion.__super__.constructor.apply(this,arguments)}return extend(SurveyQuestion,superClass),SurveyQuestion}(QuestionModel)}])}.call(this),function(){"use strict";var extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("TimeSlotModel",["$q","$window","BBModel","BaseModel","TimeService",function($q,$window,BBModel,BaseModel,TimeService){var TimeSlot;return TimeSlot=function(superClass){function TimeSlot(data,service){TimeSlot.__super__.constructor.call(this,data),this.service=service,this.datetime=moment.parseZone(this.datetime)}return extend(TimeSlot,superClass),TimeSlot.prototype.endDateTime=function(dur){var duration;return dur||(duration=this.service.listed_durations[0]),this.datetime.clone().add(duration,"minutes")},TimeSlot.prototype.availability=function(){return this.avail},TimeSlot.prototype.select=function(){return this.selected=!0},TimeSlot.prototype.unselect=function(){return this.selected?delete this.selected:void 0},TimeSlot.prototype.disable=function(reason){return this.disabled=!0,this.disabled_reason=reason},TimeSlot.prototype.enable=function(){return this.disabled&&delete this.disabled,this.disabled_reason?delete this.disabled_reason:void 0},TimeSlot.prototype.status=function(){return this.selected?"selected":this.disabled?"disabled":this.availability()>0?"enabled":"disabled"},TimeSlot.$query=function(params){return TimeService.query(params)},TimeSlot}(BaseModel)}])}.call(this),function(){"use strict";angular.module("BB.uib",["ui.bootstrap"])}.call(this),function(){"use strict";angular.module("BB.uib").run(["$document","runtimeUibModal",function($document,runtimeUibModal){"ngInject";var init,setUibModalDefaults;init=function(){setUibModalDefaults()},setUibModalDefaults=function(){runtimeUibModal.options.appendTo=angular.element($document[0].getElementById("bb"))},init()}])}.call(this),function(){"use strict";angular.module("BB.Services").config(["$translateProvider",function($translateProvider){"ngInject";var translations;translations={CORE:{ALERTS:{ERROR_HEADING:"Error",ACCOUNT_DISABLED:"Your account appears to be disabled. Please contact the business you're booking with if the problem persists.",ALREADY_REGISTERED:"You have already registered with this email address. Please login or reset your password.",APPT_AT_SAME_TIME:"Your appointment is already booked for this time",ATTENDEES_CHANGED:"Your booking has been successfully updated",EMAIL_IN_USE:"There's already an account registered with this email. Use the search field to find the customer's account.",EMPTY_BASKET_FOR_CHECKOUT:"You need to add some items to the basket before you can checkout.",FB_LOGIN_NOT_A_MEMBER:"Sorry, we couldn't find a login associated with this Facebook account. You will need to sign up using Facebook first",FORM_INVALID:"Please complete all required fields",GENERIC:"Sorry, it appears that something went wrong. Please try again or call the business you're booking with if the problem persists.",GEOLOCATION_ERROR:"Sorry, we could not determine your location. Please try searching instead.",GIFT_CERTIFICATE_REQUIRED:"A valid Gift Certificate is required to proceed with this booking",POSTCODE_INVALID:"@:COMMON.TERMINOLOGY.POSTCODE_INVALID",ITEM_NO_LONGER_AVAILABLE:"Sorry. The item you were trying to book is no longer available. Please try again.",NO_WAITLIST_SPACES_LEFT:"Sorry, the space has now been taken, you are still in the waitlist and we will notify you if more spaces become available",LOCATION_NOT_FOUND:"Sorry, we don't recognise that location",LOGIN_FAILED:"Sorry, your email or password was not recognised. Please try again or reset your password.",SSO_LOGIN_FAILED:"Something went wrong when trying to log you in. Please try again.",MAXIMUM_TICKETS:"Sorry, the maximum number of tickets per person has been reached.",MISSING_LOCATION:"Please enter your location",MISSING_POSTCODE:"Please enter a postcode",PASSWORD_INVALID:"Sorry, your password is invalid",PASSWORD_MISMATCH:"Your passwords don't match",PASSWORD_RESET_FAILED:"Sorry, we couldn't update your password. Please try again.",PASSWORD_RESET_REQ_FAILED:"Sorry, we didn't find an account registered with that email.",PASSWORD_RESET_REQ_SUCCESS:"We have sent you an email with instructions on how to reset your password.",PASSWORD_RESET_SUCESS:"Your password has been updated.",PAYMENT_FAILED:"We were unable to take payment. Please contact your card issuer or try again using a different card",PHONE_NUMBER_IN_USE:"There's already an account registered with this phone number. Use the search field to find the customer's account.",REQ_TIME_NOT_AVAIL:"The requested time slot is not available. Please choose a different time.",TIME_SLOT_NOT_SELECTED:"You need to select a time slot",STORE_NOT_SELECTED:"You need to select a store",TOPUP_FAILED:"Sorry, your topup failed. Please try again.",TOPUP_SUCCESS:"Your wallet has been topped up",UPDATE_FAILED:"Update failed. Please try again",UPDATE_SUCCESS:"Updated",WAITLIST_ACCEPTED:"Your booking is now confirmed!",BOOKING_CANCELLED:"Your booking has been cancelled.",NOT_BOOKABLE_PERSON:"Sorry, this person does not offer this service, please select another",NOT_BOOKABLE_RESOURCE:"Sorry, resource does not offer this service, pelase select another",SPEND_AT_LEAST:"You need to spend at least {{min_spend | pretty_price}} to make a booking.",COUPON_APPLY_FAILED:"Sorry, your coupon could not be applied. Please try again.",DEAL_APPLY_FAILED:"Sorry, your deal code could not be applied. Please try again.",DEAL_REMOVE_FAILED:"Sorry, we were unable to remove that deal. Please try again."},PAGINATION:{SUMMARY:"{{start}} - {{end}} of {{total}}"},MODAL:{CANCEL_BOOKING:{HEADER:"Cancel",QUESTION:"Are you sure you want to cancel this {{type}}?"},SCHEMA_FORM:{OK_BTN:"@:COMMON.BTN.OK",CANCEL_BTN:"@:COMMON.BTN.CANCEL"}},TIMEZONE_INFO:"All times are shown in {{time_zone_name}}.",FILTERS:{DISTANCE:{MILES:"miles",KILOMETRES:"km"},CURRENCY:{THOUSANDS_SEPARATOR:",",DECIMAL_SEPARATOR:".",CURRENCY_FORMAT:"%s%v"},PRETTY_PRICE:{FREE:"@:COMMON.TERMINOLOGY.PRICE_FREE"},TIME_PERIOD:{TIME_PERIOD:"{hours, plural, =0{} one{1 hour} other{# hours}}{show_seperator, plural, =0{} =1{, } other{}}{minutes, plural, =0{} one{1 minute} other{# minutes}}"}},EVENT:{SPACES_LEFT:"Only {N, plural, one{one space}, other{# spaces}} left",JOIN_WAITLIST:"Join waitlist"}},COMMON:{TERMINOLOGY:{CATEGORY:"Category",DURATION:"Duration",RESOURCE:"Resource",PERSON:"Person",SERVICE:"Service",WALLET:"Wallet",SESSION:"Session",EVENT:"Event",EVENTS:"Events",COURSE:"Course",COURSES:"Courses",DATE:"Date",TIME:"Time",DATE_TIME:"Date/Time",WHEN:"When",GIFT_CERTIFICATE:"Gift Certificate",GIFT_CERTIFICATES:"Gift Certificates",ITEM:"Item",FILTER:"Filter",ANY:"Any",RESET:"Reset",TOTAL:"Total",TOTAL_DUE_NOW:"Total Due Now",BOOKING_FEE:"Booking Fee",PRICE:"Price",PRICE_FREE:"Free",PRINT:"Print",AND:"and",APPOINTMENT:"Appointment",TICKETS:"Tickets",TYPE:"Type",EXPORT:"Export",RECIPIENT:"Recipient",BOOKING_REF:"Booking Reference",MORNING:"Morning",AFTERNOON:"Afternoon",EVENING:"Evening",AVAILABLE:"Available",UNAVAILABLE:"Unavailable",CALENDAR:"Calendar",QUESTIONS:"Questions",BOOKING:"Booking",ADMITTANCE:"Admittance",EDIT:"Edit",CONFIRMATION:"Confirmation",NAME:"Name",FIRST_NAME:"First Name",LAST_NAME:"Last Name",ADDRESS1:"Address",ADDRESS3:"Town",ADDRESS4:"County",POSTCODE:"Postcode",PHONE:"Phone",MOBILE:"Mobile",EMAIL:"Email",SCHEDULE:"Schedule",SEARCH:"Search",STAFF:"Staff",RESOURCES:"Resources"},FORM:{FIRST_NAME_REQUIRED:"Please enter your first name",LAST_NAME_REQUIRED:"Please enter your last name",ADDRESS_REQUIRED:"Please enter your address",POSTCODE_INVALID:"Please enter a valid postcode",PHONE_INVALID:"Please enter a valid phone number",MOBILE_INVALID:"Please enter a valid mobile number",EMAIL_REQUIRED:"Please enter your email",EMAIL_INVALID:"Please enter a valid email address",FIELD_REQUIRED:"This field is required",PASSWORD:"Password",PASSWORD_REQUIRED:"Please enter your password",CONFIRM_PASSWORD:"Confirm password",PASSWORD_MISMATCH:"Please ensure your passwords match",PASSWORD_LENGTH:"Password must be at least 7 characters",REQUIRED:"*Required",TERMS_AND_CONDITIONS:"I agree to the terms and conditions",TERMS_AND_CONDITIONS_REQUIRED:"Please accept the terms and conditions"},BTN:{CANCEL:"Cancel",CLOSE:"Close",NO:"No",OK:"Ok",YES:"Yes",BACK:"Back",NEXT:"Continue",LOGIN:"Login",CONFIRM:"Confirm",SAVE:"Save",SELECT:"Select",BOOK:"Book",BOOK_EVENT:"Book Event",CANCEL_BOOKING:"Cancel Booking",DO_NOT_CANCEL_BOOKING:"Do not cancel",APPLY:"Apply",CLEAR:"Clear",PAY:"Pay",CHECKOUT:"Checkout",TOP_UP:"Top Up",ADD:"Add",SUBMIT:"Submit",DETAILS:"Details",MORE:"More",LESS:"Less",DELETE:"Delete",BUY:"Buy"},LANGUAGE:{EN:"English",DE:"Deutsch",ES:"Español",FR:"Français"}}},$translateProvider.translations("en",translations)}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("AddressListService",["$q","$window","halClient","UriTemplate",function($q,$window,halClient,UriTemplate){return{query:function(prms){var deferred,href,uri;return deferred=$q.defer(),href="/api/v1/company/{company_id}/addresses/{post_code}",uri=new UriTemplate(href).fillFromObject({company_id:prms.company.id,post_code:prms.post_code}),halClient.$get(uri,{}).then(function(addressList){return deferred.resolve(addressList)},function(_this){return function(err){return deferred.reject(err)}}(this)),deferred.promise},getAddress:function(prms){var deferred,href,uri;return deferred=$q.defer(),href="/api/v1/company/{company_id}/addresses/address/{id}",uri=new UriTemplate(href).fillFromObject({company_id:prms.company.id,id:prms.id}),halClient.$get(uri,{}).then(function(customerAddress){return deferred.resolve(customerAddress)},function(_this){return function(err){return deferred.reject(err)}}(this)),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("$exceptionHandler",["$log","AirbrakeConfig",function($log,AirbrakeConfig){var airbrake;return airbrake=new airbrakeJs.Client({projectId:AirbrakeConfig.projectId,projectKey:AirbrakeConfig.projectKey}),airbrake.addFilter(function(notice){return"development"!==AirbrakeConfig.environment&¬ice.params.from_sdk?(notice.context.environment="production",notice):!1}),function(exception,cause,sdkError){$log.error(exception),airbrake.notify({error:exception,params:{angular_cause:cause,from_sdk:sdkError}})}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("AlertService",["$rootScope","ErrorService","$timeout","$translate",function($rootScope,ErrorService,$timeout,$translate){var alertService,titleLookup;return $rootScope.alerts=[],titleLookup=function(type,title){if(title)return title;switch(type){case"error":case"danger":title=$translate.instant("CORE.ERROR_HEADING");break;default:title=null}return title},alertService={add:function(type,arg){var alert,msg,persist,title;return title=arg.title,msg=arg.msg,persist=arg.persist,null==persist&&(persist=!0),$rootScope.alerts=[],alert={type:type,title:titleLookup(type,title),msg:msg,close:function(){return alertService.closeAlert(this)}},$rootScope.alerts.push(alert),persist||$timeout(function(){return $rootScope.alerts.splice($rootScope.alerts.indexOf(alert),1)},3e3),$rootScope.$broadcast("alert:raised")},closeAlert:function(alert){return this.closeAlertIdx($rootScope.alerts.indexOf(alert))},closeAlertIdx:function(index){return $rootScope.alerts.splice(index,1)},clear:function(){return $rootScope.alerts=[]},error:function(alert){return alert?this.add("error",{title:alert.title,msg:alert.msg,persist:alert.persist}):void 0},danger:function(alert){return alert?this.add("danger",{title:alert.title,msg:alert.msg,persist:alert.persist}):void 0},info:function(alert){
return alert?this.add("info",{title:alert.title,msg:alert.msg,persist:alert.persist}):void 0},warning:function(alert){return alert?this.add("warning",{title:alert.title,msg:alert.msg,persist:alert.persist}):void 0},success:function(alert){return alert?this.add("success",{title:alert.title,msg:alert.msg,persist:alert.persist}):void 0},raise:function(key){var alert;if(key)return alert=ErrorService.getAlert(key),alert?this.add(alert.type,{title:alert.title,msg:alert.msg,persist:alert.persist}):void 0}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("AppService",["$uibModalStack",function($uibModalStack){return{isModalOpen:function(){return!!$uibModalStack.getTop()}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("BasketService",["$q","$rootScope","BBModel","MutexService",function($q,$rootScope,BBModel,MutexService){return{addItem:function(company,params){var data,deferred,lnk;return deferred=$q.defer(),lnk=params.item.book_link,data=params.item.getPostData(),lnk?MutexService.getLock().then(function(mutex){return lnk.$post("book",params,data).then(function(basket){var mbasket;return MutexService.unlock(mutex),company.$flush("basket"),mbasket=new BBModel.Basket(basket,params.bb),basket.$get("items").then(function(items){var i,item,j,len,promises;for(promises=[],j=0,len=items.length;len>j;j++)i=items[j],item=new BBModel.BasketItem(i,params.bb),mbasket.addItem(item),promises=promises.concat(item.promises);return promises.length>0?$q.all(promises).then(function(){return deferred.resolve(mbasket)}):deferred.resolve(mbasket)},function(err){return deferred.reject(err)})},function(err){return MutexService.unlock(mutex),deferred.reject(err)})}):deferred.reject("rel book not found for event"),deferred.promise},applyCoupon:function(company,params){var deferred;return deferred=$q.defer(),MutexService.getLock().then(function(mutex){return company.$post("coupon",{},{coupon:params.coupon}).then(function(basket){var mbasket;return MutexService.unlock(mutex),company.$flush("basket"),mbasket=new BBModel.Basket(basket,params.bb),basket.$get("items").then(function(items){var i,item,j,len,promises;for(promises=[],j=0,len=items.length;len>j;j++)i=items[j],item=new BBModel.BasketItem(i,params.bb),mbasket.addItem(item),promises=promises.concat(item.promises);return promises.length>0?$q.all(promises).then(function(){return deferred.resolve(mbasket)}):deferred.resolve(mbasket)},function(err){return deferred.reject(err)})},function(err){return MutexService.unlock(mutex),deferred.reject(err)})}),deferred.promise},updateBasket:function(company,params){var data,deferred,item,j,len,lnk,ref,xdata;for(deferred=$q.defer(),data={entire_basket:!0,items:[]},ref=params.items,j=0,len=ref.length;len>j;j++)item=ref[j],item.book_link&&(lnk=item.book_link),xdata=item.getPostData(),data.items.push(xdata);return lnk?(MutexService.getLock().then(function(mutex){return lnk.$post("book",params,data).then(function(basket){var mbasket;return MutexService.unlock(mutex),company.$flush("basket"),mbasket=new BBModel.Basket(basket,params.bb),basket.$get("items").then(function(items){var i,k,len1,promises;for(promises=[],k=0,len1=items.length;len1>k;k++)i=items[k],item=new BBModel.BasketItem(i,params.bb),mbasket.addItem(item),promises=promises.concat(item.promises);return promises.length>0?$q.all(promises).then(function(){return $rootScope.$broadcast("basket:updated",mbasket),deferred.resolve(mbasket)}):($rootScope.$broadcast("basket:updated",mbasket),deferred.resolve(mbasket))},function(err){return deferred.reject(err)})},function(err){return MutexService.unlock(mutex),deferred.reject(err)})}),deferred.promise):(deferred.reject("rel book not found for event"),deferred.promise)},checkPrePaid:function(item,pre_paid_bookings){var booking,j,len,valid_pre_paid;for(valid_pre_paid=null,j=0,len=pre_paid_bookings.length;len>j;j++)if(booking=pre_paid_bookings[j],booking.checkValidity(item)){valid_pre_paid=booking;break}return valid_pre_paid},query:function(company,params){var deferred;return deferred=$q.defer(),company.$has("basket")?company.$get("basket").then(function(basket){return basket=new BBModel.Basket(basket,params.bb),basket.$has("items")&&basket.$get("items").then(function(items){var item,j,len,results;for(results=[],j=0,len=items.length;len>j;j++)item=items[j],results.push(basket.addItem(new BBModel.BasketItem(item,params.bb)));return results}),deferred.resolve(basket)},function(err){return deferred.reject(err)}):deferred.reject("rel basket not found for company"),deferred.promise},deleteItem:function(item,company,params){var deferred;return params||(params={}),params.basket&¶ms.basket.clearItem(item),deferred=$q.defer(),item.$has("self")?MutexService.getLock().then(function(mutex){return item.$del("self",params).then(function(basket){return MutexService.unlock(mutex),company.$flush("basket"),basket=new BBModel.Basket(basket,params.bb),basket.$has("items")&&basket.$get("items").then(function(items){var j,len,results;for(results=[],j=0,len=items.length;len>j;j++)item=items[j],results.push(basket.addItem(new BBModel.BasketItem(item,params.bb)));return results}),deferred.resolve(basket)},function(err){return deferred.reject(err)})},function(err){return MutexService.unlock(mutex),deferred.reject(err)}):deferred.reject("rel self not found for item"),deferred.promise},checkout:function(company,basket,params){var data,deferred;return deferred=$q.defer(),basket.$has("checkout")?(data=basket.getPostData(),params.bb.qudini_booking_id&&(data.qudini_booking_id=params.bb.qudini_booking_id),params.bb.booking_settings&&(data.booking_settings=params.bb.booking_settings),params.bb.no_notifications&&(data.no_notifications=params.bb.no_notifications),data.affiliate_id=$rootScope.affiliate_id||params.affiliate_id,basket.waiting_for_checkout=!0,MutexService.getLock().then(function(mutex){return basket.$post("checkout",params,data).then(function(total){var tot;return MutexService.unlock(mutex),$rootScope.$broadcast("updateBookings"),tot=new BBModel.Purchase.Total(total),$rootScope.$broadcast("newCheckout",tot),basket.clear(),basket.waiting_for_checkout=!1,deferred.resolve(tot)},function(err){return basket.waiting_for_checkout=!1,deferred.reject(err)})},function(err){return basket.waiting_for_checkout=!1,MutexService.unlock(mutex),deferred.reject(err)})):deferred.reject("rel checkout not found for basket"),deferred.promise},empty:function(bb){var deferred;return deferred=$q.defer(),MutexService.getLock().then(function(mutex){return bb.company.$del("basket").then(function(basket){return MutexService.unlock(mutex),bb.company.$flush("basket"),deferred.resolve(new BBModel.Basket(basket,bb))},function(err){return deferred.reject(err)})},function(err){return MutexService.unlock(mutex),deferred.reject(err)}),deferred.promise},memberCheckout:function(basket,params){var data,deferred,item;return deferred=$q.defer(),basket.$has("checkout")?null===$rootScope.member?deferred.reject("member not set"):(basket._data.setOption("auth_token",$rootScope.member._data.getOption("auth_token")),data={items:function(){var j,len,ref,results;for(ref=basket.items,results=[],j=0,len=ref.length;len>j;j++)item=ref[j],results.push(item._data);return results}()},basket.$post("checkout",params,data).then(function(total){return total.$has("member")&&total.$get("member").then(function(member){return $rootScope.member.flushBookings(),$rootScope.member=new BBModel.Member.Member(member)}),deferred.resolve(total)},function(err){return deferred.reject(err)})):deferred.reject("rel checkout not found for basket"),deferred.promise},applyDeal:function(company,params){var deferred;return deferred=$q.defer(),MutexService.getLock().then(function(mutex){return params.bb.basket.$post("deal",{},{deal_code:params.deal_code}).then(function(basket){var mbasket;return MutexService.unlock(mutex),company.$flush("basket"),mbasket=new BBModel.Basket(basket,params.bb),basket.$get("items").then(function(items){var i,item,j,len,promises;for(promises=[],j=0,len=items.length;len>j;j++)i=items[j],item=new BBModel.BasketItem(i,params.bb),mbasket.addItem(item),promises=promises.concat(item.promises);return promises.length>0?$q.all(promises).then(function(){return deferred.resolve(mbasket)}):deferred.resolve(mbasket)},function(err){return deferred.reject(err)})},function(err){return MutexService.unlock(mutex),deferred.reject(err)})}),deferred.promise},removeDeal:function(company,params){var deferred;return params||(params={}),deferred=$q.defer(),params.bb.basket.$has("deal")?(MutexService.getLock().then(function(mutex){return params.bb.basket.$put("deal",{},{deal_code_id:params.deal_code_id.toString()}).then(function(basket){return MutexService.unlock(mutex),company.$flush("basket"),basket=new BBModel.Basket(basket,params.bb),basket.$has("items")?basket.$get("items").then(function(items){var item,j,len;for(j=0,len=items.length;len>j;j++)item=items[j],basket.addItem(new BBModel.BasketItem(item,params.bb));return deferred.resolve(basket)},function(err){return deferred.reject(err)}):void 0},function(err){return MutexService.unlock(mutex),deferred.reject(err)})}),deferred.promise):deferred.reject("No Remove Deal link found")}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("BreadcrumbService",function(){var current_step;return current_step=1,{setCurrentStep:function(step){return current_step=step},getCurrentStep:function(){return current_step}}})}.call(this),function(){"use strict";angular.module("BB.Services").factory("BulkPurchaseService",["$q","BBModel",function($q,BBModel){return{query:function(company){var deferred;return deferred=$q.defer(),company.$has("bulk_purchases")?company.$get("bulk_purchases").then(function(resource){return resource.$get("bulk_purchases").then(function(bulk_purchases){var i;return deferred.resolve(function(){var j,len,results;for(results=[],j=0,len=bulk_purchases.length;len>j;j++)i=bulk_purchases[j],results.push(new BBModel.BulkPurchase(i));return results}())})},function(_this){return function(err){return deferred.reject(err)}}(this)):deferred.reject("No bulk purchases found"),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("CategoryService",["$q","BBModel",function($q,BBModel){return{query:function(company){var deferred;return deferred=$q.defer(),company.$has("categories")?company.$get("named_categories").then(function(_this){return function(resource){return resource.$get("categories").then(function(items){var _i,cat,categories,i,j,len;for(categories=[],_i=j=0,len=items.length;len>j;_i=++j)i=items[_i],cat=new BBModel.Category(i),cat.order||(cat.order=_i),categories.push(cat);return deferred.resolve(categories)})}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)):deferred.reject("No categories found"),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("ClientService",["$q","BBModel","MutexService",function($q,BBModel,MutexService){return{create:function(company,client){var deferred;return deferred=$q.defer(),company.$has("client")?MutexService.getLock().then(function(mutex){return company.$post("client",{},client.getPostData()).then(function(_this){return function(cl){return deferred.resolve(new BBModel.Client(cl)),MutexService.unlock(mutex)}}(this),function(_this){return function(err){return deferred.reject(err),MutexService.unlock(mutex)}}(this))}):deferred.reject("Cannot create new people for this company"),deferred.promise},update:function(company,client){var deferred;return deferred=$q.defer(),MutexService.getLock().then(function(mutex){return client.$put("self",{},client.getPostData()).then(function(_this){return function(cl){return deferred.resolve(new BBModel.Client(cl)),MutexService.unlock(mutex)}}(this),function(_this){return function(err){return deferred.reject(err),MutexService.unlock(mutex)}}(this))}),deferred.promise},create_or_update:function(company,client){return client.$has("self")?this.update(company,client):this.create(company,client)},query_by_email:function(company,email){var deferred;return deferred=$q.defer(),null!=company&&null!=email?company.$get("client_by_email",{email:email}).then(function(_this){return function(client){return null!=client?deferred.resolve(new BBModel.Client(client)):deferred.resolve({})}}(this),function(err){return deferred.reject(err)}):deferred.reject("No company or email defined"),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("ClientDetailsService",["$q","BBModel",function($q,BBModel){return{query:function(company){var deferred;return deferred=$q.defer(),company.$has("client_details")?company.$get("client_details").then(function(_this){return function(details){return deferred.resolve(new BBModel.ClientDetails(details))}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)):deferred.reject("No client_details found"),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("ClinicService",["$q","BBModel","$window",function($q,BBModel,$window){return{query:function(params){var company,defer;return company=params.company,defer=$q.defer(),params.id?company.$get("clinics",params).then(function(clinic){return clinic=new BBModel.Clinic(clinic),defer.resolve(clinic)},function(err){return defer.reject(err)}):company.$get("clinics",params).then(function(collection){return collection.$get("clinics").then(function(clinics){var s;return clinics=function(){var i,len,results;for(results=[],i=0,len=clinics.length;len>i;i++)s=clinics[i],results.push(new BBModel.Clinic(s));return results}(),defer.resolve(clinics)},function(err){return defer.reject(err)})},function(err){return defer.reject(err)}),defer.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("CompanyService",["$q","halClient","BBModel",function($q,halClient,BBModel){return{query:function(company_id,options){var deferred,url;return options.root||(options.root=""),url=options.root+"/api/v1/company/"+company_id,deferred=$q.defer(),halClient.$get(url,options).then(function(_this){return function(company){return deferred.resolve(company)}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)),deferred.promise},queryChildren:function(company){var deferred;return deferred=$q.defer(),company.$has("companies")?company.$get("companies").then(function(_this){return function(resource){return resource.$get("companies").then(function(items){var companies,i,j,len;for(companies=[],j=0,len=items.length;len>j;j++)i=items[j],companies.push(new BBModel.Company(i));return deferred.resolve(companies)})}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)):deferred.reject("No child companies found"),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("CompanyStoreService",function(){return{country_code:null,currency_code:null,time_zone:null,settings:null}})}.call(this),function(){"use strict";angular.module("BB.Services").factory("CustomTextService",["$q","BBModel",function($q,BBModel){return{BookingText:function(company,basketItem){var deferred;return deferred=$q.defer(),company.$get("booking_text").then(function(_this){return function(emb){return emb.$get("booking_text").then(function(details){var detail,i,len,link,msgs,name,ref;for(msgs=[],i=0,len=details.length;len>i;i++)if(detail=details[i],"Booking"===detail.message_type){ref=basketItem.parts_links;for(name in ref)link=ref[name],detail.$href("item")===link&&-1===msgs.indexOf(detail.message)&&msgs.push(detail.message)}return deferred.resolve(msgs)})}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)),deferred.promise},confirmationText:function(company,total){var deferred;return deferred=$q.defer(),company.$get("booking_text").then(function(emb){return emb.$get("booking_text").then(function(details){return total.getMessages(details,"Confirm").then(function(msgs){return deferred.resolve(msgs)})})},function(err){return deferred.reject(err)}),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("DateTimeUtilitiesService",["GeneralOptions","CompanyStoreService",function(GeneralOptions,CompanyStoreService){var checkPerson,checkResource;return checkPerson=function(basket_item,item_defaults){return basket_item.defaults.person&&basket_item.defaults.person.self===basket_item.person.self||_.isBoolean(basket_item.person)||item_defaults.merge_people},checkResource=function(basket_item,item_defaults){return basket_item.defaults.resource&&basket_item.defaults.resource.self===basket_item.resource.self||_.isBoolean(basket_item.resource)||item_defaults.merge_resources},{convertTimeToMoment:function(date,time){var datetime,hours,mins,val;if(date&&moment.isMoment(date)&&angular.isNumber(time))return datetime=moment(),GeneralOptions.display_time_zone!==CompanyStoreService.time_zone&&(datetime=datetime.tz(CompanyStoreService.time_zone)),val=parseInt(time),hours=parseInt(val/60),mins=val%60,datetime.hour(hours),datetime.minutes(mins),datetime.seconds(0),datetime.date(date.date()),datetime.month(date.month()),datetime.year(date.year()),datetime},convertMomentToTime:function(datetime){return datetime.minutes()+60*datetime.hours()},checkDefaultTime:function(date,time_slots,basket_item,item_defaults){var found_time_slot,i,len,match,slot,time;if(match=basket_item.defaults.time?checkPerson(basket_item,item_defaults)&&checkResource(basket_item,item_defaults)?"full":"partial":null,found_time_slot=null,basket_item.defaults.time&&(basket_item.defaults.date&&date.isSame(basket_item.defaults.date,"day")||!basket_item.defaults.date))for(time=basket_item.time?basket_item.time.time:basket_item.defaults.time,i=0,len=time_slots.length;len>i;i++)if(slot=time_slots[i],time&&time===slot.time&&1===slot.avail){found_time_slot=slot;break}return{match:match,slot:found_time_slot}}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("DayService",["$q","BBModel",function($q,BBModel){return{query:function(prms){var deferred,extra;return deferred=$q.defer(),prms.cItem.days_link?(extra={},extra.month=prms.month,extra.date=prms.date,extra.edate=prms.edate,prms.people_ids&&(extra.people_ids=prms.people_ids),prms.resource_ids&&(extra.resource_ids=prms.resource_ids),prms.person_group_id&&(extra.person_group_id=prms.person_group_id),prms.cItem.days_link.$get("days",extra).then(function(_this){return function(found){var afound,days,i,j,len;for(afound=found.days,days=[],j=0,len=afound.length;len>j;j++)i=afound[j],i.type===prms.item&&days.push(new BBModel.Day(i));return deferred.resolve(days)}}(this),function(_this){return function(err){return deferred.reject(err)}}(this))):deferred.reject("No Days Link found"),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("DealService",["$q","BBModel",function($q,BBModel){return{query:function(company){var deferred;return deferred=$q.defer(),company.$has("deals")?company.$get("deals").then(function(_this){return function(resource){return resource.$get("deals").then(function(deals){var deal;return deals=function(){var i,len,results;for(results=[],i=0,len=deals.length;len>i;i++)deal=deals[i],results.push(new BBModel.Deal(deal));return results}(),deferred.resolve(deals)})}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)):deferred.reject("No Deals found"),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB").config(["$logProvider","$injector",function($logProvider,$injector){return $logProvider.debugEnabled(!0)}]),angular.module("BB.Services").factory("DebugUtilsService",["$rootScope","$location","$window","$log","BBModel","$bbug",function($rootScope,$location,$window,$log,BBModel,$bbug){var logObjectKeys,showScopeChain;return logObjectKeys=function(obj,showValue){var key,value;for(key in obj)value=obj[key],!obj.hasOwnProperty(key)||_.isFunction(value)||/^\$\$/.test(key)||(console.log(key),showValue&&console.log(" ",value,"\n"))},showScopeChain=function(){var $root,data,f;$root=$("[ng-app]"),data=$root.data(),data&&data.$scope&&(f=function(scope){return console.log(scope.$id),console.log(scope),scope.$$nextSibling?f(scope.$$nextSibling):scope.$$childHead?f(scope.$$childHead):void 0})(data.$scope)},function(){return"localhost"!==$location.host()&&"127.0.0.1"!==$location.host()||3e3!==$location.port()?void 0:window.setTimeout(function(){var scope;for(scope=$rootScope;scope&&"BBCtrl"!==scope.cid;)scope=scope.$$childHead;return $bbug($window).on("dblclick",function(e){var controller,controllerName,pscope;for(scope=angular.element(e.target).scope(),controller=scope.hasOwnProperty("controller"),pscope=scope,controller&&(controllerName=scope.controller);!controller;)pscope=pscope.$parent,controllerName=pscope.controller,controller=pscope.hasOwnProperty("controller");return $window.bbScope=scope,$log.log(e.target),$log.log($window.bbScope),$log.log("Controller ->",controllerName)}),$window.bbBBCtrlScopeKeyNames=function(prop){return logObjectKeys(scope,prop)},$window.bbBBCtrlScope=function(){return scope},$window.bbCurrentItem=function(){return scope.bb.current_item},$window.bbShowScopeChain=showScopeChain},10)}(),{logObjectKeys:logObjectKeys}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("Dialog",["$uibModal","$log","$document",function($uibModal,$log,$document){var controller;return controller=function($scope,$uibModalInstance,model,title,success,fail,body){return $scope.body=body,$scope.title=title,$scope.ok=function(){return $uibModalInstance.close(model)},$scope.cancel=function(){return event.preventDefault(),event.stopPropagation(),$uibModalInstance.dismiss("cancel")},$uibModalInstance.result.then(function(){return success?success(model):void 0},function(){return fail?fail():void 0})},{confirm:function(config){var templateUrl;return config.templateUrl&&(templateUrl=config.templateUrl),templateUrl||(templateUrl="dialog.html"),$uibModal.open({templateUrl:templateUrl,controller:controller,size:config.size||"sm",resolve:{model:function(){return config.model},title:function(){return config.title},success:function(){return config.success},fail:function(){return config.fail},body:function(){return config.body}}})}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("ErrorService",["$translate",function($translate){var alerts,createCustomError,getAlert,getError;return alerts=[{key:"GENERIC",type:"error",persist:!0},{key:"LOCATION_NOT_FOUND",type:"warning",persist:!0},{key:"MISSING_LOCATION",type:"warning",persist:!0},{key:"MISSING_POSTCODE",type:"warning",persist:!0},{key:"POSTCODE_INVALID",type:"warning",persist:!0},{key:"ITEM_NO_LONGER_AVAILABLE",type:"error",persist:!0},{key:"NO_WAITLIST_SPACES_LEFT",type:"error",persist:!0},{key:"FORM_INVALID",type:"warning",persist:!0},{key:"GEOLOCATION_ERROR",type:"error",persist:!0},{key:"EMPTY_BASKET_FOR_CHECKOUT",type:"warning",persist:!0},{key:"MAXIMUM_TICKETS",type:"warning",persist:!0},{key:"GIFT_CERTIFICATE_REQUIRED",type:"warning",persist:!0},{key:"TIME_SLOT_NOT_SELECTED",type:"warning",persist:!0},{key:"STORE_NOT_SELECTED",type:"warning",persist:!0},{key:"APPT_AT_SAME_TIME",type:"warning",persist:!0},{key:"REQ_TIME_NOT_AVAIL",type:"warning",persist:!0},{key:"TOPUP_SUCCESS",type:"success",persist:!0},{key:"TOPUP_FAILED",type:"warning",persist:!0},{key:"UPDATE_SUCCESS",type:"success",persist:!0},{key:"UPDATE_FAILED",type:"warning",persist:!0},{key:"ALREADY_REGISTERED",type:"warning",persist:!0},{key:"LOGIN_FAILED",type:"warning",persist:!0},{key:"SSO_LOGIN_FAILED",type:"warning",persist:!0},{key:"PASSWORD_INVALID",type:"warning",persist:!0},{key:"PASSWORD_RESET_REQ_SUCCESS",type:"success",persist:!0},{key:"PASSWORD_RESET_REQ_FAILED",type:"warning",persist:!0},{key:"PASSWORD_RESET_SUCESS",type:"success",persist:!0},{key:"PASSWORD_RESET_FAILED",type:"warning",persist:!0},{key:"PASSWORD_MISMATCH",type:"warning",persist:!0},{key:"ATTENDEES_CHANGED",type:"info",persist:!0},{key:"PAYMENT_FAILED",type:"danger",persist:!0},{key:"ACCOUNT_DISABLED",type:"warning",persist:!0},{key:"FB_LOGIN_NOT_A_MEMBER",type:"warning",persist:!0},{key:"PHONE_NUMBER_IN_USE",type:"warning",persist:!0},{key:"EMAIL_IN_USE",type:"warning",persist:!0},{key:"WAITLIST_ACCEPTED",type:"success",persist:!1},{key:"BOOKING_CANCELLED",type:"success",persist:!1},{key:"NOT_BOOKABLE_PERSON",type:"warning",persist:!1},{key:"NOT_BOOKABLE_RESOURCE",type:"warning",persist:!1},{key:"COUPON_APPLY_FAILED",type:"warning",title:"",persist:!0},{key:"DEAL_APPLY_FAILED",type:"warning",title:"",persist:!0},{key:"DEAL_REMOVE_FAILED",type:"warning",title:"",persist:!0}],createCustomError=function(msg){return{msg:msg}},getError=function(key){var error;return error=getAlert(key),error||(error=getAlert("GENERIC")),error.persist=!0,error},getAlert=function(key){var alert;return alert=_.findWhere(alerts,{key:key}),alert?(alert.msg=$translate.instant("CORE.ALERTS."+key),alert):null},{createCustomError:createCustomError,getAlert:getAlert,getError:getError}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("EventService",["$q","BBModel",function($q,BBModel){return{query:function(company,params){var deferred;return deferred=$q.defer(),company.$has("events")?(params.item&&(params.item.event_group&&(params.event_group_id=params.item.event_group.id),params.item.event_chain&&(params.event_chain_id=params.item.event_chain.id),params.item.resource&&(params.resource_id=params.item.resource.id),params.item.person&&(params.person_id=params.item.person.id)),params.no_cache=!0,company.$get("events",params).then(function(_this){return function(resource){return params.no_cache=!1,resource.$get("events",params).then(function(events){var event;return events=function(){var i,len,results;for(results=[],i=0,len=events.length;len>i;i++)event=events[i],results.push(new BBModel.Event(event));return results}(),deferred.resolve(events)})}}(this),function(_this){return function(err){return deferred.reject(err)}}(this))):deferred.resolve([]),deferred.promise},summary:function(company,params){var deferred;return deferred=$q.defer(),company.$has("events")?(params.item&&(params.item.event_group&&(params.event_group_id=params.item.event_group.id),params.item.event_chain&&(params.event_chain_id=params.item.event_chain.id),params.item.resource&&(params.resource_id=params.item.resource.id),params.item.person&&(params.person_id=params.item.person.id)),params.summary=!0,company.$get("events",params).then(function(_this){return function(resource){return deferred.resolve(resource.events)}}(this),function(_this){return function(err){return deferred.reject(err)}}(this))):deferred.resolve([]),deferred.promise},queryEventCollection:function(company,params){var deferred;return deferred=$q.defer(),company.$has("events")?(params.item&&(params.item.event_group&&(params.event_group_id=params.item.event_group.id),params.item.event_chain&&(params.event_chain_id=params.item.event_chain.id),params.item.resource&&(params.resource_id=params.item.resource.id),params.item.person&&(params.person_id=params.item.person.id)),company.$get("events",params).then(function(_this){return function(resource){var collection;return collection=new BBModel.BBCollection(resource),deferred.resolve(collection)}}(this),function(_this){return function(err){return deferred.reject(err)}}(this))):deferred.resolve([]),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("EventChainService",["$q","BBModel",function($q,BBModel){return{query:function(company,params){var deferred;return deferred=$q.defer(),company.$has("event_chains")?company.$get("event_chains",params).then(function(_this){return function(resource){return resource.$get("event_chains",params).then(function(event_chains){var event_chain;return event_chains=function(){var i,len,results;for(results=[],i=0,len=event_chains.length;len>i;i++)event_chain=event_chains[i],results.push(new BBModel.EventChain(event_chain));return results}(),deferred.resolve(event_chains)})}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)):deferred.reject("company does not have event_chains"),deferred.promise},queryEventChainCollection:function(company,params){var deferred;return deferred=$q.defer(),company.$has("event_chains")?company.$get("event_chains",params).then(function(_this){return function(resource){var collection;return collection=new BBModel.BBCollection(resource),deferred.resolve(collection)}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)):deferred.resolve([]),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("EventGroupService",["$q","BBModel",function($q,BBModel){return{query:function(company,params){var deferred;return deferred=$q.defer(),company.$has("event_groups")?company.$get("event_groups",params).then(function(_this){return function(resource){return resource.$get("event_groups",params).then(function(event_groups){var event_group;return event_groups=function(){var i,len,results;for(results=[],i=0,len=event_groups.length;len>i;i++)event_group=event_groups[i],results.push(new BBModel.EventGroup(event_group));return results}(),deferred.resolve(event_groups)})}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)):deferred.reject("company does not have event_groups"),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("EventSequenceService",["$q","BBModel",function($q,BBModel){return{query:function(company,params){var deferred;return deferred=$q.defer(),company.$has("event_sequences")?company.$get("event_sequences",params).then(function(_this){return function(resource){return resource.$get("event_sequences",params).then(function(event_sequences){var event_sequence;return event_sequences=function(){var i,len,results;for(results=[],i=0,len=event_sequences.length;len>i;i++)event_sequence=event_sequences[i],results.push(new BBModel.EventSequence(event_sequence));return results}(),deferred.resolve(event_sequences)})}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)):deferred.reject("company does not have event_sequences"),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("FormDataStoreService",["$rootScope","$window","$log","$parse",function($rootScope,$window,$log,$parse){var checkForListeners,checkRegisteredWidgets,clear,dataStore,div,getParentScope,init,log,register,registeredWidgetArr,removeWidget,resetValuesOnScope,setIfUndefined,setListeners,setValuesOnScope,showInfo,storeFormData,toId;return registeredWidgetArr=[],dataStore={},toId=0,div="___",log=function(){},showInfo=function(){return log(dataStore)},setIfUndefined=function(keyName,val){var getter,scope;return scope=this,getter=$parse(keyName),"undefined"==typeof getter(scope)?getter.assign(scope,val):void 0},resetValuesOnScope=function(scope,props){var i,len,prop,setter;for(i=0,len=props.length;len>i;i++)prop=props[i],prop=$parse(prop),(setter=prop.assign)(scope,null)},clear=function(scope,keepScopeValues){var data,key,widgetId;if(!scope)throw new Error("Missing scope object. Cannot clear form data without scope");if(_.isString(scope))return data=dataStore[scope],keepScopeValues||resetValuesOnScope(data[0],data[1]),void delete dataStore[scope];if(scope=getParentScope(scope),scope&&scope.bb){widgetId=scope.bb.uid,removeWidget(scope);for(key in dataStore)data=dataStore[key],-1!==key.indexOf(widgetId)&&(data[3]&&_.each(data[3],function(func){return _.isFunction(func)?func():void 0}),keepScopeValues||resetValuesOnScope(data[0],data[1]),delete dataStore[key])}},storeFormData=function(){var i,key,len,ndata,prop,props,scope,step,val;log("formDataStore ->",dataStore);for(key in dataStore){
for(step=dataStore[key],log(" ",key),scope=step[0],props=step[1],ndata=step[2],ndata||(ndata=step[2]={}),i=0,len=props.length;len>i;i++)prop=props[i],val=ndata[prop],"data:destroyed"===val?ndata[prop]=null:(val=angular.copy(scope.$eval(prop)),ndata[prop]=val),log(" ",prop,val);log("\n")}},setValuesOnScope=function(currentPage,scope){var cpage,storedValues;cpage=dataStore[currentPage],storedValues=cpage[2],log("Decorating scope ->",currentPage,storedValues),_.isObject(storedValues)&&_.each(_.keys(storedValues),function(keyName){var getter;return"undefined"!=typeof storedValues[keyName]&&"data:destroyed"!==storedValues[keyName]?(getter=$parse(keyName),getter.assign(scope,storedValues[keyName])):void 0}),cpage[0]=scope,log(scope),log("\n")},getParentScope=function(scope){for(;scope;){if(scope.hasOwnProperty("cid")&&"BBCtrl"===scope.cid)return scope;scope=scope.$parent}},checkRegisteredWidgets=function(scope){var i,isRegistered,len,rscope;for(isRegistered=!1,scope=getParentScope(scope),i=0,len=registeredWidgetArr.length;len>i;i++)rscope=registeredWidgetArr[i],rscope===scope&&(isRegistered=!0);return isRegistered},checkForListeners=function(propsArr){var watchArr;return watchArr=[],_.each(propsArr,function(propName,index){var split;return split=propName.split("->"),2===split.length?(watchArr.push(split),propsArr[index]=split[0]):void 0}),watchArr},setListeners=function(scope,listenerArr,currentPage){var cpage,listenersArr;return listenerArr.length?(cpage=dataStore[currentPage],listenersArr=cpage[3]||[],_.each(listenerArr,function(item,index){var func;return func=$rootScope.$on(item[1],function(){var e,error;try{return cpage[2][item[0]]="data:destroyed"}catch(error){return e=error,log(e)}}),listenersArr.push(func)}),cpage[3]=listenersArr):void 0},init=function(uid,scope,propsArr){var currentPage,watchArr;if(checkRegisteredWidgets(scope)){if(currentPage=scope.bb.uid+div+scope.bb.current_page+div+uid,currentPage=currentPage.toLowerCase(),watchArr=checkForListeners(propsArr),scope.clearStoredData=function(currentPage){return function(){clear(currentPage)}}(currentPage),!currentPage)throw new Error("Missing current step");if(dataStore[currentPage])return void setValuesOnScope(currentPage,scope);log("Controller registered ->",currentPage,scope,"\n\n"),dataStore[currentPage]=[scope,propsArr],setListeners(scope,watchArr,currentPage)}},removeWidget=function(scope){registeredWidgetArr=_.without(registeredWidgetArr,scope)},register=function(scope){var registered;for(registered=!1,scope&&scope.$$childHead&&(scope=scope.$$childHead);!_.has(scope,"cid");)scope=scope.$parent;if(scope){if("BBCtrl"!==scope.cid)throw new Error("This directive can only be used with the BBCtrl");return _.each(registeredWidgetArr,function(stored){return scope===stored?registered=!0:void 0}),registered?void 0:(log("Scope registered ->",scope),scope.$on("destroy",removeWidget),registeredWidgetArr.push(scope))}},$rootScope.$watch(function(){$window.clearTimeout(toId),toId=setTimeout(storeFormData,300)}),$rootScope.$on("save:formData",storeFormData),$rootScope.$on("clear:formData",clear),{init:init,destroy:function(scope){return clear(scope,!0)},showInfo:showInfo,register:register,setIfUndefined:setIfUndefined}}])}.call(this),function(){angular.module("BB.Services").provider("FormTransform",function(){var options;options={"new":{},edit:{}},this.getTransform=function(type,model){return options[type][model]},this.setTransform=function(type,model,fn){return options[type][model]=fn},this.$get=function(){return options}})}.call(this),function(){"use strict";angular.module("BB.Services").provider("GeneralOptions",function(){var options;options={twelve_hour_format:!1,calendar_minute_step:5,calendar_min_time:"09:00",calendar_max_time:"18:00",calendar_slot_duration:5,use_local_time_zone:!1,display_time_zone:null,update_document_title:!1,scroll_offset:0},this.setOption=function(option,value){options.hasOwnProperty(option)&&(options[option]=value)},this.$get=function(){return options}})}.call(this),function(){"use strict";angular.module("BB.Services").factory("GeolocationService",["$q",function($q){return{haversine:function(position1,position2){var R,a,c,chLat,chLon,d,dLat,dLon,distances,lat1,lat2,lon1,lon2,pi,rLat1,rLat2;return pi=Math.PI,R=6371,distances=[],lat1=position1.lat,lon1=position1["long"],lat2=position2.lat,lon2=position2["long"],chLat=lat2-lat1,chLon=lon2-lon1,dLat=chLat*(pi/180),dLon=chLon*(pi/180),rLat1=lat1*(pi/180),rLat2=lat2*(pi/180),a=Math.sin(dLat/2)*Math.sin(dLat/2)+Math.sin(dLon/2)*Math.sin(dLon/2)*Math.cos(rLat1)*Math.cos(rLat2),c=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a)),d=R*c},geocode:function(address,prms){var deferred,ne,request,sw;return null==prms&&(prms={}),deferred=$q.defer(),request={address:address},prms.region&&(request.region=prms.region),prms.componentRestrictions&&(request.componentRestrictions=prms.componentRestrictions),prms.bounds&&(sw=new google.maps.LatLng(prms.bounds.sw.x,prms.bounds.sw.y),ne=new google.maps.LatLng(prms.bounds.ne.x,prms.bounds.ne.y),request.bounds=new google.maps.LatLngBounds(sw,ne)),(new google.maps.Geocoder).geocode(request,function(results,status){return results&&"OK"===status?deferred.resolve({results:results,status:status}):deferred.reject(status)}),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("ItemService",["$q","BBModel",function($q,BBModel){return{query:function(prms){var deferred;return deferred=$q.defer(),prms.cItem.service&&"service"!==prms.item?prms.cItem.service.$has("items")?this.build_items(prms.cItem.service.$get("items"),prms,deferred):prms.cItem.service.$get("item").then(function(_this){return function(base_item){return _this.build_items(base_item.$get("items"),prms,deferred)}}(this)):prms.cItem.resource&&!prms.cItem.anyResource()&&"resource"!==prms.item?prms.cItem.resource.$has("items")?this.build_items(prms.cItem.resource.$get("items"),prms,deferred):prms.cItem.resource.$get("item").then(function(_this){return function(base_item){return _this.build_items(base_item.$get("items"),prms,deferred)}}(this)):prms.cItem.person&&!prms.cItem.anyPerson()&&"person"!==prms.item?prms.cItem.person.$has("items")?this.build_items(prms.cItem.person.$get("items"),prms,deferred):prms.cItem.person.$get("item").then(function(_this){return function(base_item){return _this.build_items(base_item.$get("items"),prms,deferred)}}(this)):deferred.reject("No service link found"),deferred.promise},build_items:function(base_items,prms,deferred){var wait_items;return wait_items=[base_items],prms.wait&&wait_items.push(prms.wait),$q.all(wait_items).then(function(_this){return function(resources){var resource;return resource=resources[0],resource.$get("items").then(function(found){var i,len,m,matching,v,wlist;for(matching=[],wlist=[],i=0,len=found.length;len>i;i++)v=found[i],v.type===prms.item&&matching.push(new BBModel.BookableItem(v));return $q.all(function(){var j,len1,results;for(results=[],j=0,len1=matching.length;len1>j;j++)m=matching[j],results.push(m.ready.promise);return results}()).then(function(){return deferred.resolve(matching)})})}}(this))}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("ItemDetailsService",["$q","BBModel",function($q,BBModel){return{query:function(prms){var deferred;return deferred=$q.defer(),prms.cItem.service?prms.cItem.service.$has("questions")?prms.cItem.service.$get("questions").then(function(_this){return function(details){return deferred.resolve(new BBModel.ItemDetails(details))}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)):deferred.resolve(new BBModel.ItemDetails):prms.cItem.event_chain?prms.cItem.event_chain.$has("questions")?prms.cItem.event_chain.$get("questions").then(function(_this){return function(details){return deferred.resolve(new BBModel.ItemDetails(details))}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)):deferred.resolve(new BBModel.ItemDetails):prms.cItem.deal?prms.cItem.deal.$has("questions")?prms.cItem.deal.$get("questions").then(function(_this){return function(details){return deferred.resolve(new BBModel.ItemDetails(details))}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)):deferred.resolve(new BBModel.ItemDetails):deferred.resolve(),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("LoadingService",["$q","$window","$log","$rootScope","AlertService","ErrorService",function($q,$window,$log,$rootScope,AlertService,ErrorService){return{$loader:function(scope){var item,lservice;return lservice=this,item={scope:scope,setLoaded:function(){return lservice.setLoaded(scope)},setLoadedAndShowError:function(err,error_string){return lservice.setLoadedAndShowError(scope,err,error_string)},notLoaded:function(){return lservice.notLoaded(scope),this}}},setLoaded:function(cscope){var loadingFinished;for(cscope.$emit("hide:loader",cscope),cscope.isLoaded=!0,loadingFinished=!0;cscope;)cscope.hasOwnProperty("scopeLoaded")&&(this.areScopesLoaded(cscope)?cscope.scopeLoaded=!0:loadingFinished=!1),cscope=cscope.$parent;loadingFinished&&$rootScope.$broadcast("loading:finished")},setLoadedAndShowError:function(scope,err,error_string){return $log.warn(err,error_string),scope.setLoaded(scope),err&&409===err.status?AlertService.danger(ErrorService.getError("ITEM_NO_LONGER_AVAILABLE")):err.data&&"Number of Bookings exceeds the maximum"===err.data.error?AlertService.danger(ErrorService.getError("MAXIMUM_TICKETS")):AlertService.danger(ErrorService.getError("GENERIC"))},areScopesLoaded:function(cscope){var child;if(cscope.hasOwnProperty("isLoaded")&&!cscope.isLoaded)return!1;for(child=cscope.$$childHead;child;){if(!this.areScopesLoaded(child))return!1;child=child.$$nextSibling}return!0},notLoaded:function(cscope){for(cscope.$emit("show:loader",cscope),cscope.isLoaded=!1;cscope;)cscope.hasOwnProperty("scopeLoaded")&&(cscope.scopeLoaded=!1),cscope=cscope.$parent}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("LoginService",["$q","halClient","$rootScope","BBModel","$sessionStorage","$localStorage",function($q,halClient,$rootScope,BBModel,$sessionStorage,$localStorage){return{companyLogin:function(company,params,form){var deferred;return deferred=$q.defer(),company.$post("login",params,form).then(function(_this){return function(login){return login.$get("member").then(function(member){return _this.setLogin(member),deferred.resolve(member)},function(err){return deferred.reject(err)})}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)),deferred.promise},login:function(form,options){var deferred,url;return deferred=$q.defer(),options.root||(options.root=""),url=options.root+"/api/v1/login",halClient.$post(url,options,form).then(function(_this){return function(login){var params;return params={auth_token:login.auth_token},login.$get("member").then(function(member){return _this.setLogin(member),deferred.resolve(member)})}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)),deferred.promise},FBLogin:function(company,prms){var deferred;return deferred=$q.defer(),company.$post("facebook_login",{},prms).then(function(_this){return function(login){return login.$get("member").then(function(member){return member=new BBModel.Member.Member(member),$sessionStorage.setItem("fb_user",!0),_this.setLogin(member),deferred.resolve(member)},function(err){return deferred.reject(err)})}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)),deferred.promise},companyQuery:function(_this){return function(id){var comp_promise;return id?(comp_promise=halClient.$get(location.protocol+"//"+location.host+"/api/v1/company/"+id),comp_promise.then(function(company){return company=new BBModel.Company(company)})):void 0}}(this),memberQuery:function(_this){return function(params){var member_promise;return params.member_id&¶ms.company_id?(member_promise=halClient.$get(location.protocol+"//"+location.host+("/api/v1/"+params.company_id+"/")+"members/"+params.member_id),member_promise.then(function(member){return member=new BBModel.Member.Member(member)})):void 0}}(this),ssoLogin:function(options,data){var deferred,url;return deferred=$q.defer(),options.root||(options.root=""),url=options.root+"/api/v1/login/sso/"+options.company_id,halClient.$post(url,{},data).then(function(_this){return function(login){var params;return params={auth_token:login.auth_token},login.$get("member").then(function(member){return member=new BBModel.Member.Member(member),_this.setLogin(member,!0),deferred.resolve(member)})}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)),deferred.promise},isLoggedIn:function(){return this.checkLogin(),$rootScope.member&&(!$rootScope.user||void 0===$rootScope.user)},setLogin:function(member,persist){var auth_token;return auth_token=member.getOption("auth_token"),member=new BBModel.Member.Member(member),$sessionStorage.setItem("login",member.$toStore()),$sessionStorage.setItem("auth_token",auth_token),$rootScope.member=member,persist&&$localStorage.setItem("auth_token",auth_token),member},member:function(){return this.checkLogin(),$rootScope.member},checkLogin:function(){var member;return $rootScope.member?!0:(member=$sessionStorage.getItem("login"),member?(member=halClient.createResource(member),$rootScope.member=new BBModel.Member.Member(member),!0):!1)},logout:function(options){var deferred,url;return $rootScope.member=null,deferred=$q.defer(),options||(options={}),options.root||(options.root=""),url=options.root+"/api/v1/logout",$sessionStorage.clear(),$localStorage.clear(),halClient.$del(url,options,{}).then(function(_this){return function(logout){return $sessionStorage.clear(),$localStorage.clear(),deferred.resolve(!0)}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)),deferred.promise},FBLogout:function(options){return $sessionStorage.removeItem("fb_user"),this.logout(options)},sendPasswordReset:function(company,params){var deferred;return deferred=$q.defer(),company.$post("email_password_reset",{},params).then(function(_this){return function(){return deferred.resolve(!0)}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)),deferred.promise},updatePassword:function(member,params){var deferred;return params.auth_token=member.getOption("auth_token"),member&¶ms.new_password&¶ms.confirm_new_password?(deferred=$q.defer(),member.$post("update_password",{},params).then(function(_this){return function(login){return login.$get("member").then(function(member){return _this.setLogin(member,params.persist_login),deferred.resolve(member)},function(err){return deferred.reject(err)})}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)),deferred.promise):void 0}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("MembershipLevelsService",["$q","BBModel",function($q,BBModel){return{getMembershipLevels:function(company){var deferred;return deferred=$q.defer(),company.$get("member_levels").then(function(resource){return resource.$get("membership_levels").then(function(_this){return function(membership_levels){var level,levels;return levels=function(){var i,len,results;for(results=[],i=0,len=membership_levels.length;len>i;i++)level=membership_levels[i],results.push(new BBModel.MembershipLevel(level));return results}(),deferred.resolve(levels)}}(this))},function(_this){return function(err){return deferred.reject(err)}}(this)),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("ModalForm",["$uibModal","$document","$log","Dialog","FormTransform","$translate",function($uibModal,$document,$log,Dialog,FormTransform,$translate){var bookForm,checkSchema,editForm,newForm;return newForm=function($scope,$uibModalInstance,company,title,new_rel,post_rel,success,fail){return $scope.loading=!0,$scope.title=title,$scope.company=company,$scope.company.$has(new_rel)?$scope.company.$get(new_rel).then(function(schema){return $scope.form=_.reject(schema.form,function(x){return"submit"===x.type}),$scope.schema=checkSchema(schema.schema),$scope.form_model={},$scope.loading=!1}):$log.warn("company does not have '"+new_rel+"' rel"),$scope.submit=function(form){return $scope.$broadcast("schemaFormValidate"),$scope.loading=!0,$scope.company.$post(post_rel,{},$scope.form_model).then(function(model){return $scope.loading=!1,$uibModalInstance.close(model),success?success(model):void 0},function(err){return $scope.loading=!1,$uibModalInstance.close(err),$log.error("Failed to create"),fail?fail(err):void 0})},$scope.cancel=function(event){return event.preventDefault(),event.stopPropagation(),$uibModalInstance.dismiss("cancel")}},checkSchema=function(schema){var base,base1,base2,base3,k,name,name1,ref,v,vals;ref=schema.properties;for(k in ref)v=ref[k],vals=k.split("."),"questions"===vals[0]&&vals.length>1&&((base=schema.properties).questions||(base.questions={type:"object",properties:{}}),(base1=schema.properties.questions.properties)[name=vals[1]]||(base1[name]={type:"object",properties:{answer:v}})),"client"===vals[0]&&vals.length>2&&((base2=schema.properties).client||(base2.client={type:"object",properties:{q:{type:"object",properties:{}}}}),schema.properties.client.properties&&((base3=schema.properties.client.properties.q.properties)[name1=vals[2]]||(base3[name1]={type:"object",properties:{answer:v}})));return schema},editForm=function($scope,$uibModalInstance,model,title,success,fail,params){var functionName;return $scope.loading=!0,$scope.title=title,$scope.model=model,params||(params={}),$scope.model.$has("edit")?$scope.model.$get("edit",params).then(function(_this){return function(schema){var model_type;return $scope.form=_.reject(schema.form,function(x){return"submit"===x.type}),model_type=functionName(model.constructor),FormTransform.edit[model_type]&&($scope.form=FormTransform.edit[model_type]($scope.form,schema.schema,$scope.model)),$scope.schema=checkSchema(schema.schema),$scope.form_model=$scope.model,$scope.loading=!1}}(this)):$log.warn("model does not have 'edit' rel"),functionName=function(func){var result;return result=/^function\s+([\w\$]+)\s*\(/.exec(func.toString()),result?result[1]:""},$scope.submit=function(form){return $scope.$broadcast("schemaFormValidate"),$scope.loading=!0,$scope.model.$update?$scope.model.$update($scope.form_model).then(function(){return $scope.loading=!1,$uibModalInstance.close($scope.model),success?success($scope.model):void 0},function(err){return $scope.loading=!1,$uibModalInstance.close(err),$log.error("Failed to create"),fail?fail():void 0}):$scope.model.$put("self",{},$scope.form_model).then(function(model){return $scope.loading=!1,$uibModalInstance.close(model),success?success(model):void 0},function(err){return $scope.loading=!1,$uibModalInstance.close(err),$log.error("Failed to create"),fail?fail():void 0})},$scope.cancel=function(event){return event.preventDefault(),event.stopPropagation(),$uibModalInstance.dismiss("cancel")},$scope.success=function(response){return event.preventDefault(),event.stopPropagation(),$uibModalInstance.close(),success?success(response):void 0},$scope.cancelEvent=function(event,type){var modal_instance,question;return null==type&&(type="booking"),event.preventDefault(),event.stopPropagation(),$uibModalInstance.close(),"booking"===type?(modal_instance=$uibModal.open({templateUrl:"cancel_booking_modal_form.html",controller:["$scope","booking",function($scope,booking){return $scope.booking=booking,$scope.model={notify:!1,cancel_reason:null}}],resolve:{booking:function(){return model}}}),modal_instance.result.then(function(params){return model.$post("cancel",params).then(function(booking){return success?success(booking):void 0})})):(question=null,question=$translate.instant("CORE.MODAL.CANCEL_BOOKING.QUESTION",{type:type}),Dialog.confirm({model:model,title:$translate.instant("CORE.MODAL.CANCEL_BOOKING.HEADER"),body:question,success:function(model){return model.$del("self").then(function(response){return success?success(response):void 0})}}))}},bookForm=function($scope,$uibModalInstance,model,company,title,success,fail){return $scope.loading=!0,$scope.title=title,$scope.model=model,$scope.company=company,$scope.model.$has("new_booking")?$scope.model.$get("new_booking").then(function(schema){return $scope.form=_.reject(schema.form,function(x){return"submit"===x.type}),$scope.schema=checkSchema(schema.schema),$scope.form_model={},$scope.loading=!1}):$log.warn("model does not have 'new_booking' rel"),$scope.submit=function(form){return $scope.$broadcast("schemaFormValidate"),form.$valid?($scope.loading=!0,$scope.company.$post("bookings",{},$scope.form_model).then(function(booking){return $scope.loading=!1,$uibModalInstance.close(booking),success?success(booking):void 0},function(err){return $scope.loading=!1,$uibModalInstance.close(err),$log.error("Failed to create"),fail?fail():void 0})):$log.warn("Invalid form")},$scope.cancel=function(event){return event.preventDefault(),event.stopPropagation(),$uibModalInstance.dismiss("cancel")}},{"new":function(config){var templateUrl;return config.templateUrl&&(templateUrl=config.templateUrl),templateUrl||(templateUrl="modal_form.html"),$uibModal.open({templateUrl:templateUrl,controller:newForm,size:config.size,resolve:{company:function(){return config.company},title:function(){return config.title},new_rel:function(){return config.new_rel},post_rel:function(){return config.post_rel},success:function(){return config.success},fail:function(){return config.fail}}})},edit:function(config){var templateUrl;return config.templateUrl&&(templateUrl=config.templateUrl),templateUrl||(templateUrl="modal_form.html"),$uibModal.open({templateUrl:templateUrl,controller:editForm,size:config.size,resolve:{model:function(){return config.model},title:function(){return config.title},success:function(){return config.success},fail:function(){return config.fail},params:function(){return config.params||{}}}})},book:function(config){var templateUrl;return config.templateUrl&&(templateUrl=config.templateUrl),templateUrl||(templateUrl="modal_form.html"),$uibModal.open({templateUrl:templateUrl,controller:bookForm,size:config.size,resolve:{model:function(){return config.model},company:function(){return config.company},title:function(){return config.title},success:function(){return config.success},fail:function(){return config.fail}}})}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("MutexService",["$q","$window","$rootScope",function($q,$window,$rootScope){return{getLock:function(prms){var iprom,mprom;return mprom=$q.defer(),iprom=$q.defer(),mprom.promise.then(function(){var next_mux;return $rootScope.mutexes.shift(),$rootScope.mutexes.length>0?(next_mux=$rootScope.mutexes[0],next_mux.iprom.resolve(next_mux.mprom)):void 0}),$rootScope.mutexes&&0!==$rootScope.mutexes.length?($rootScope.mutexes.push({mprom:mprom,iprom:iprom}),iprom.promise):($rootScope.mutexes=[{mprom:mprom,iprom:iprom}],iprom.resolve(mprom),iprom.promise)},unlock:function(mutex){return mutex.resolve()}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("PackageItemService",["$q","BBModel",function($q,BBModel){return{query:function(company){var deferred;return deferred=$q.defer(),company.$has("packages")?company.$get("packages").then(function(resource){return resource.$get("packages").then(function(package_items){var i;return deferred.resolve(function(){var j,len,results;for(results=[],j=0,len=package_items.length;len>j;j++)i=package_items[j],results.push(new BBModel.PackageItem(i));return results}())})},function(err){return deferred.reject(err)}):deferred.reject("No packages found"),deferred.promise},getPackageServices:function(package_item){var deferred;return deferred=$q.defer(),package_item.$has("services")?package_item.$get("services").then(function(services){var s;return deferred.resolve(function(){var j,len,results;for(results=[],j=0,len=services.length;len>j;j++)s=services[j],results.push(new BBModel.Service(s));return results}())},function(_this){return function(err){return deferred.reject(err)}}(this)):deferred.reject("No services found"),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("PaginationService",["$translate",function($translate){return{initialise:function(options){var paginator;if(options)return paginator={current_page:1,page_size:options.page_size,num_pages:null,max_size:options.max_size,num_items:null}},update:function(paginator,length){var end,start,total;if(paginator&&null!=length)return paginator.num_items=length,start=(paginator.page_size-1)*paginator.current_page-(paginator.page_size-1-paginator.current_page),end=paginator.current_page*paginator.page_size,total=end<paginator.page_size?end:length,end=end>total?total:end,paginator.summary=$translate.instant("CORE.PAGINATION.SUMMARY",{start:start,end:end,total:total})},checkItems:function(paginator,items_loaded){var items_traversed,remaining_items;return items_traversed=paginator.page_size*(paginator.current_page-1),remaining_items=paginator.num_items-items_loaded,items_loaded<items_traversed+paginator.page_size&&remaining_items>0}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("PathHelper",["$urlMatcherFactory","$location",function($urlMatcherFactory,$location){return{matchRouteToPath:function(route_format,param){var match,match_test,parts,pattern;if(!$location.path()||!route_format)return!1;for(parts=route_format.split("/"),match=null;parts.length>0&&!match;)match_test=parts.join("/"),pattern=$urlMatcherFactory.compile(match_test),match=pattern.exec($location.path()),parts.pop();return match[param]?match[param]:match}}}])}.call(this),function(){"use strict";var service;service=["$sce","AppConfig",function($sce,AppConfig){"ngInject";var directivePartial;return directivePartial=function(fileName){var partialUrl;return AppConfig.partial_url?(partialUrl=AppConfig.partial_url,$sce.trustAsResourceUrl(partialUrl+"/"+fileName+".html")):$sce.trustAsResourceUrl(fileName+".html")},{directivePartial:directivePartial}}],angular.module("BB.Services").service("PathSvc",service)}.call(this),function(){"use strict";angular.module("BB.Services").factory("PersonService",["$q","BBModel",function($q,BBModel){return{query:function(company){var deferred;return deferred=$q.defer(),company.$has("people")?company.$get("people").then(function(_this){return function(resource){return resource.$get("people").then(function(items){var i,j,len,people;for(people=[],j=0,len=items.length;len>j;j++)i=items[j],people.push(new BBModel.Person(i));return deferred.resolve(people)})}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)):deferred.reject("No people found"),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("ProductService",["$q","$window","halClient","UriTemplate","BBModel","$log","$rootScope",function($q,$window,halClient,UriTemplate,BBModel,$log,$rootScope){return{getProduct:function(prms){var deferred,href,uri;return deferred=$q.defer(),prms.id?(href=$rootScope.bb.api_url+"/api/v1/{company_id}/products/{id}",uri=new UriTemplate(href).fillFromObject({company_id:prms.company_id,id:prms.product_id})):prms.sku?(href=$rootScope.bb.api_url+"/api/v1/{company_id}/products/find_by_sku/{sku}",uri=new UriTemplate(href).fillFromObject({company_id:prms.company_id,sku:prms.sku})):($log.warn("id or sku is required"),deferred.reject()),halClient.$get(uri,{}).then(function(product){return deferred.resolve(new BBModel.Product(product))},function(_this){return function(err){return deferred.reject(err)}}(this)),deferred.promise},query:function(company){var deferred;return deferred=$q.defer(),company.$has("products")?company.$get("products").then(function(_this){return function(resource){return resource.$get("products").then(function(items){var i,j,len,resources;for(resources=[],j=0,len=items.length;len>j;j++)i=items[j],resources.push(new BBModel.Product(i));return deferred.resolve(resources)})}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)):deferred.reject("No products found"),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("PurchaseTotalService",["$q","BBModel",function($q,BBModel){return{query:function(prms){var deferred;return deferred=$q.defer(),prms.company.$has("total")?prms.company.$get("total",{total_id:prms.total_id}).then(function(_this){return function(total){return deferred.resolve(new BBModel.PurchaseTotal(total))}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)):deferred.reject("No Total link found"),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("QueryStringService",["$window",function($window){return function(keyName){var hash,hashes,href,i,isNum,len,val,varObj;if(varObj={},href=$window.location.href,!(href.indexOf("?")<0)){for(hashes=href.slice(href.indexOf("?")+1).split(/[#&]/),isNum=function(num){return null==num||"0"===num.substr(0,1)||/[a-zA-Z\-\_\+\.\#\%\*\,]/.test(num)||window.isNaN(window.parseInt(num,10))?void 0:!0},i=0,len=hashes.length;len>i;i++)hash=hashes[i],hash=hash.split("="),val=hash[1],val=isNum(val)?window.parseInt(val,10):"true"===val?!0:"false"===val?!1:window.decodeURIComponent(val),varObj[hash[0]]=val;return keyName?varObj[keyName]:varObj}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("QuestionService",["$window","QueryStringService","$bbug",function($window,QueryStringService,$bbug){var addAnswersById,addAnswersByName,addAnswersFromDefaults,addDynamicAnswersByName,checkConditionalQuestions,convertDates,convertToSnakeCase,defaults,findByQuestionId,storeDefaults;return defaults=QueryStringService()||{},convertDates=function(obj){return _.each(obj,function(val,key){var date;return date=$window.moment(obj[key]),_.isString(obj[key])&&date.isValid()?obj[key]=date:void 0})},$window.bb_setup&&(convertDates($window.bb_setup),angular.extend(defaults,$window.bb_setup)),addAnswersById=function(questions){return questions?angular.isArray(questions)?_.each(questions,function(question){var id;return id=question.id+"",!question.answer&&defaults[id]?question.answer=defaults[id]:void 0}):defaults[questions.id+""]?questions.answer=defaults[questions.id+""]:void 0:void 0},convertToSnakeCase=function(str){return str=str.toLowerCase(),str=$.trim(str),str=str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|'’!<>;:,.~`=+-@£&%"]/g,""),str=str.replace(/\s{2,}/g," "),str=str.replace(/\s/g,"_")},addDynamicAnswersByName=function(questions){var keys;return angular.isArray(questions)?(keys=_.keys(defaults),_.each(questions,function(question){var name;return name=convertToSnakeCase(question.name),_.each(keys,function(key){(name.indexOf("_"+key)>=0||name.indexOf("_"+key+"_")>=0||name.indexOf(key+"_")>=0)&&defaults[key]&&!question.answer&&(question.answer=defaults[key],delete defaults[key])})})):void 0},addAnswersByName=function(obj,keys){var i,key,len,type;if(type=Object.prototype.toString.call(obj).slice(8,-1),"Object"===type&&angular.isArray(keys))for(i=0,len=keys.length;len>i;i++)key=keys[i],defaults[key]&&!obj[key]&&(obj[key]=defaults[key],delete defaults[key])},addAnswersFromDefaults=function(questions,answers){var i,len,name,question,results;for(results=[],i=0,len=questions.length;len>i;i++)question=questions[i],name=question.help_text,answers[name]&&(question.answer=answers[name]),answers[question.id+""]?results.push(question.answer=answers[question.id+""]):results.push(void 0);return results},storeDefaults=function(obj){return angular.extend(defaults,obj.bb_setup||{})},checkConditionalQuestions=function(questions){var a,ans,cond,found,i,len,q,ref,results,v;for(results=[],i=0,len=questions.length;len>i;i++)if(q=questions[i],q.settings&&q.settings.conditional_question)if(cond=findByQuestionId(questions,parseInt(q.settings.conditional_question))){
ans=cond.getAnswerId(),found=!1,$bbug.isEmptyObject(q.settings.conditional_answers)&&"check"===cond.detail_type&&!cond.answer&&(found=!0),ref=q.settings.conditional_answers;for(a in ref)v=ref[a],"c"===a[0]&&1===parseInt(v)&&cond.answer?found=!0:parseInt(a)===ans&&1===parseInt(v)&&(found=!0);found?results.push(q.showElement()):results.push(q.hideElement())}else results.push(void 0);else results.push(void 0);return results},findByQuestionId=function(questions,qid){var i,len,q;for(i=0,len=questions.length;len>i;i++)if(q=questions[i],q.id===qid)return q;return null},{getStoredData:function(){return defaults},storeDefaults:storeDefaults,addAnswersById:addAnswersById,addAnswersByName:addAnswersByName,addDynamicAnswersByName:addDynamicAnswersByName,addAnswersFromDefaults:addAnswersFromDefaults,convertToSnakeCase:convertToSnakeCase,checkConditionalQuestions:checkConditionalQuestions}}])}.call(this),function(){angular.module("BB.Services").factory("ReasonService",["$q","BBModel",function($q,BBModel){return{query:function(company){var deferred;return deferred=$q.defer(),company.$has("reasons")?company.$get("reasons").then(function(_this){return function(resource){return resource.$get("reasons").then(function(items){var i,j,len,reason,reasons;for(reasons=[],j=0,len=items.length;len>j;j++)i=items[j],reason=new BBModel.Reason(i),reasons.push(reason);return deferred.resolve(reasons)})}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)):deferred.reject("Reasons not turned on for this Company."),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("RecaptchaService",["$q","halClient","UriTemplate",function($q,halClient,UriTemplate){return{validateResponse:function(params){var deferred,href,prms,uri;return deferred=$q.defer(),href=params.api_url+"/api/v1/recaptcha",uri=new UriTemplate(href),prms={},prms.response=params.response,halClient.$post(uri,{},prms).then(function(response){return deferred.resolve(response)},function(err){return deferred.reject(err)}),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("ResourceService",["$q","BBModel",function($q,BBModel){return{query:function(company){var deferred;return deferred=$q.defer(),company.$has("resources")?company.$get("resources").then(function(_this){return function(resource){return resource.$get("resources").then(function(items){var i,j,len,resources;for(resources=[],j=0,len=items.length;len>j;j++)i=items[j],resources.push(new BBModel.Resource(i));return deferred.resolve(resources)})}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)):deferred.reject("No resource found"),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("ServiceService",["$q","BBModel",function($q,BBModel){return{query:function(company){var deferred;return deferred=$q.defer(),company.$has("services")?company.$get("services").then(function(_this){return function(resource){return resource.$get("services").then(function(items){var i,j,len,services;for(services=[],j=0,len=items.length;len>j;j++)i=items[j],services.push(new BBModel.Service(i));return deferred.resolve(services)})}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)):deferred.reject("No services found"),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("SlotService",["$q","BBModel",function($q,BBModel){return{query:function(company,params){var deferred;return deferred=$q.defer(),company.$has("slots")?(params.item&&(params.item.resource&&(params.resource_id=params.item.resource.id),params.item.person&&(params.person_id=params.item.person.id)),company.$get("slots",params).then(function(_this){return function(resource){return resource.$get("slots",params).then(function(slots){var slot;return slots=function(){var i,len,results;for(results=[],i=0,len=slots.length;len>i;i++)slot=slots[i],results.push(new BBModel.Slot(slot));return results}(),deferred.resolve(slots)})}}(this),function(_this){return function(err){return deferred.reject(err)}}(this))):deferred.resolve([]),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("SlotDates",["$q","DayService",function($q,DayService){var cached,getFirstDayWithSlots;return cached={firstSlotDate:null,timesQueried:0},getFirstDayWithSlots=function(cItem,selected_day){var deferred,endDate;return deferred=$q.defer(),null!=cached.firstSlotDate?(deferred.resolve(cached.firstSlotDate),deferred.promise):(endDate=selected_day.clone().add(3,"month"),DayService.query({cItem:cItem,date:selected_day.format("YYYY-MM-DD"),edate:endDate.format("YYYY-MM-DD")}).then(function(days){var firstAvailableSlots;return cached.timesQueried++,firstAvailableSlots=_.find(days,function(day){return day.spaces>0}),firstAvailableSlots?(cached.firstSlotDate=firstAvailableSlots.date,deferred.resolve(cached.firstSlotDate)):cached.timesQueried<=4?getFirstDayWithSlots(cItem,endDate).then(function(day){return deferred.resolve(cached.firstSlotDate)},function(err){return deferred.reject(err)}):deferred.reject(new Error("ERROR.NO_SLOT_AVAILABLE"))},function(err){return deferred.reject(new Error("ERROR.COULDNT_GET_AVAILABLE_DATES"))}),deferred.promise)},{getFirstDayWithSlots:getFirstDayWithSlots}}])}.call(this),function(){"use strict";angular.module("BB.Services").config(["$provide",function($provide){return $provide.decorator("$sniffer",["$delegate",function($delegate){var regexp,result,webkit_version;return regexp=/Safari\/([\d.]+)/,result=regexp.exec(navigator.userAgent),webkit_version=result?parseFloat(result[1]):null,_.extend($delegate,{webkit:webkit_version}),$delegate}])}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("SpaceService",["$q","BBModel",function($q,BBModel){return{query:function(company){var deferred;return deferred=$q.defer(),company.$has("spaces")?company.$get("spaces").then(function(_this){return function(resource){return resource.$get("spaces").then(function(items){var i,j,len,spaces;for(spaces=[],j=0,len=items.length;len>j;j++)i=items[j],spaces.push(new BBModel.Space(i));return deferred.resolve(spaces)})}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)):deferred.reject("No spaces found"),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("SSOService",["$q","$rootScope","halClient","LoginService",function($q,$rootScope,halClient,LoginService){return{memberLogin:function(options){var data,deferred,url;return deferred=$q.defer(),options.root||(options.root=""),url=options.root+"/api/v1/login/sso/"+options.company_id,data={token:options.member_sso},halClient.$post(url,{},data).then(function(_this){return function(login){var params;return params={auth_token:login.auth_token},login.$get("member").then(function(member){return member=LoginService.setLogin(member),deferred.resolve(member)})}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)),deferred.promise},adminLogin:function(options){var data,deferred,url;return deferred=$q.defer(),options.root||(options.root=""),url=options.root+"/api/v1/login/admin_sso/"+options.company_id,data={token:options.admin_sso},halClient.$post(url,{},data).then(function(_this){return function(login){var params;return params={auth_token:login.auth_token},login.$get("administrator").then(function(admin){return deferred.resolve(admin)})}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("TemplateSvc",["$q","$http","$templateCache","BBModel",function($q,$http,$templateCache,BBModel){return{get:function(path){var cacheTmpl,deferred;return deferred=$q.defer(),cacheTmpl=$templateCache.get(path),cacheTmpl?deferred.resolve(angular.element(cacheTmpl)):$http({method:"GET",url:path}).success(function(tmpl,status){return $templateCache.put(path,tmpl),deferred.resolve(angular.element(tmpl))}).error(function(data,status){return deferred.reject(data)}),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("TimeService",["$q","BBModel","halClient","GeneralOptions","CompanyStoreService","DateTimeUtilitiesService",function($q,BBModel,halClient,GeneralOptions,CompanyStoreService,DateTimeUtilitiesService){return{query:function(prms){var company_time_zone,company_utc_offset,deferred,display_time_zone,display_utc_offset,end_date,extra,item_link,start_date;if(deferred=$q.defer(),start_date=null,end_date=null,prms.date)prms.start_date=prms.date;else{if(!prms.cItem.date)return deferred.reject("No date set"),deferred.promise;prms.start_date=prms.cItem.date.date}return start_date=prms.start_date,prms.end_date&&(end_date=prms.end_date),display_time_zone=GeneralOptions.display_time_zone,company_time_zone=CompanyStoreService.time_zone,null!=display_time_zone&&display_time_zone!==company_time_zone&&(display_utc_offset=moment().tz(display_time_zone).utcOffset(),company_utc_offset=moment().tz(company_time_zone).utcOffset(),display_utc_offset>company_utc_offset?start_date=prms.start_date.clone().subtract(1,"day"):company_utc_offset>display_utc_offset&&prms.end_date&&(end_date=prms.end_date.clone().add(1,"day")),prms.time_zone=display_time_zone),null==prms.duration&&prms.cItem&&prms.cItem.duration&&(prms.duration=prms.cItem.duration),item_link=prms.item_link,prms.cItem&&prms.cItem.days_link&&!item_link&&(item_link=prms.cItem.days_link),item_link?(extra={},extra.date=start_date.toISODate(),prms.location&&(extra.location=prms.location),prms.cItem.event_id&&(extra.event_id=prms.cItem.event_id),!prms.cItem.person||prms.cItem.anyPerson()||item_link.event_id||extra.event_id||(extra.person_id=prms.cItem.person.id),!prms.cItem.resource||prms.cItem.anyResource()||item_link.event_id||extra.event_id||(extra.resource_id=prms.cItem.resource.id),end_date&&(extra.end_date=end_date.toISODate()),extra.duration=prms.duration,extra.person_group_id=prms.cItem.person_group_id,extra.num_resources=prms.num_resources,prms.time_zone&&(extra.time_zone=prms.time_zone),prms.cItem.id&&(extra.ignore_booking=prms.cItem.id),prms.people_ids&&(extra.people_ids=prms.people_ids),prms.resource_ids&&(extra.resource_ids=prms.resource_ids),extra.event_id&&(item_link=prms.company),item_link.$get("times",extra).then(function(_this){return function(results){var times;return results.$has("date_links")?results.$get("date_links").then(function(all_days){var all_days_def,date_times,day,fn,j,len;for(date_times={},all_days_def=[],fn=function(day){var times;return day.elink=$q.defer(),all_days_def.push(day.elink.promise),day.$has("event_links")?day.$get("event_links").then(function(all_events){var times;return times=_this.merge_times(all_events,prms.cItem.service,prms.cItem,day.date),prms.available&&(times=_.filter(times,function(t){return t.avail>=prms.available})),day.elink.resolve(times)}):day.times?(times=_this.merge_times([day],prms.cItem.service,prms.cItem,day.date),prms.available&&(times=_.filter(times,function(t){return t.avail>=prms.available})),day.elink.resolve(times)):void 0},j=0,len=all_days.length;len>j;j++)day=all_days[j],fn(day);return $q.all(all_days_def).then(function(times){var d,key,new_date_times;for(date_times=_.chain(times).flatten().sortBy(function(slot){return slot.datetime.unix()}).groupBy(function(slot){return slot.datetime.toISODate()}).value(),new_date_times={},d=prms.start_date.clone();d<=prms.end_date;)key=d.toISODate(),new_date_times[key]=date_times[key]?date_times[key]:[],d=d.clone().add(1,"day");return deferred.resolve(new_date_times)})}):results.$has("event_links")?results.$get("event_links").then(function(all_events){var times;return times=_this.merge_times(all_events,prms.cItem.service,prms.cItem,prms.start_date),prms.available&&(times=_.filter(times,function(t){return t.avail>=prms.available})),deferred.resolve(times)}):results.times?(times=_this.merge_times([results],prms.cItem.service,prms.cItem,prms.start_date),prms.available&&(times=_.filter(times,function(t){return t.avail>=prms.available})),deferred.resolve(times)):void 0}}(this),function(err){return deferred.reject(err)})):deferred.reject("No day data"),deferred.promise},queryItems:function(prms){var defer,item,j,len,pslots,ref;for(defer=$q.defer(),pslots=[],ref=prms.items,j=0,len=ref.length;len>j;j++)item=ref[j],pslots.push(this.query({company:prms.company,cItem:item,date:prms.start_date,end_date:prms.end_date,client:prms.client,available:1}));return $q.all(pslots).then(function(res){return defer.resolve(res)},function(err){return defer.reject()}),defer.promise},merge_times:function(all_events,service,item,date){var date_times,ev,i,j,k,l,len,len1,len2,ref,sorted_times,times;if(!all_events||0===all_events.length)return[];for(all_events=_.shuffle(all_events),sorted_times=[],j=0,len=all_events.length;len>j;j++)if(ev=all_events[j],ev.times){for(ref=ev.times,k=0,len1=ref.length;len1>k;k++)i=ref[k],(!sorted_times[i.time]||0===sorted_times[i.time].avail||0===Math.floor(Math.random()*all_events.length)&&i.avail>0)&&(i.event_id=ev.event_id,sorted_times[i.time]=i);item.held&&this.checkCurrentItem(item.held,sorted_times,ev),this.checkCurrentItem(item,sorted_times,ev)}for(times=[],date_times={},l=0,len2=sorted_times.length;len2>l;l++)i=sorted_times[l],i&&(i.datetime||(i.datetime=DateTimeUtilitiesService.convertTimeToMoment(moment(date),i.time)),times.push(new BBModel.TimeSlot(i,service)));return times},checkCurrentItem:function(item,sorted_times,ev){return item&&item.id&&item.event_id===ev.event_id&&item.time&&!sorted_times[item.time.time]&&item.date&&item.date.date.toISODate()===ev.date?(item.time.datetime=DateTimeUtilitiesService.convertTimeToMoment(item.date.date,item.time.time),sorted_times[item.time.time]=item.time,halClient.clearCache(ev.$href("self"))):item&&item.id&&item.event_id===ev.event_id&&item.time&&sorted_times[item.time.time]&&item.date&&item.date.date.toISODate()===ev.date?sorted_times[item.time.time].avail=1:void 0}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("TimeSlotService",["$q","BBModel",function($q,BBModel){return{query:function(params){var company,defer;return defer=$q.defer(),company=params.company,company.$get("slots",params).then(function(collection){return collection.$get("slots").then(function(slots){var s;return slots=function(){var i,len,results;for(results=[],i=0,len=slots.length;len>i;i++)s=slots[i],results.push(new BBModel.TimeSlot(s));return results}(),defer.resolve(slots)},function(err){return defer.reject(err)})},function(err){return defer.reject(err)}),defer.promise}}}])}.call(this),function(){angular.module("BB.Services").factory("UnwrapService",["$q","BBModel",function($q,BBModel){return{unwrapCollection:function(model,key,resource){var deferred,models,service;return deferred=$q.defer(),angular.isArray(resource)?(models=function(){var j,len,results;for(results=[],j=0,len=resource.length;len>j;j++)service=resource[j],results.push(new model(service));return results}(),deferred.resolve(models)):resource.$has(key)?resource.$get(key).then(function(_this){return function(items){var i,j,len;for(models=[],j=0,len=items.length;len>j;j++)i=items[j],models.push(new model(i));return deferred.resolve(models)}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)):deferred.reject(),deferred.promise},unwrapResource:function(model,resource){return new model(resource)}}}]),angular.module("BB.Services").factory("BB.Service.address",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{unwrap:function(resource){return UnwrapService.unwrapResource(BBModel.Address,resource)}}}]),angular.module("BB.Services").factory("BB.Service.addresses",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{promise:!0,unwrap:function(resource){return UnwrapService.unwrapCollection(BBModel.Address,"addresses",resource)}}}]),angular.module("BB.Services").factory("BB.Service.person",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{unwrap:function(resource){return UnwrapService.unwrapResource(BBModel.Person,resource)}}}]),angular.module("BB.Services").factory("BB.Service.people",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{promise:!0,unwrap:function(resource){return UnwrapService.unwrapCollection(BBModel.Person,"people",resource)}}}]),angular.module("BB.Services").factory("BB.Service.resource",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{unwrap:function(resource){return UnwrapService.unwrapResource(BBModel.Resource,resource)}}}]),angular.module("BB.Services").factory("BB.Service.resources",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{promise:!0,unwrap:function(resource){return UnwrapService.unwrapCollection(BBModel.Resource,"resources",resource)}}}]),angular.module("BB.Services").factory("BB.Service.service",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{unwrap:function(resource){return UnwrapService.unwrapResource(BBModel.Service,resource)}}}]),angular.module("BB.Services").factory("BB.Service.services",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{promise:!0,unwrap:function(resource){return UnwrapService.unwrapCollection(BBModel.Service,"services",resource)}}}]),angular.module("BB.Services").factory("BB.Service.package_item",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{unwrap:function(resource){return UnwrapService.unwrapResource(BBModel.PackageItem,resource)}}}]),angular.module("BB.Services").factory("BB.Service.package_items",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{promise:!0,unwrap:function(resource){return UnwrapService.unwrapCollection(BBModel.PackageItem,"package_items",resource)}}}]),angular.module("BB.Services").factory("BB.Service.bulk_purchase",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{unwrap:function(resource){return UnwrapService.unwrapResource(BBModel.BulkPurchase,resource)}}}]),angular.module("BB.Services").factory("BB.Service.bulk_purchases",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{promise:!0,unwrap:function(resource){return UnwrapService.unwrapCollection(BBModel.BulkPurchase,"bulk_purchases",resource)}}}]),angular.module("BB.Services").factory("BB.Service.event_group",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{unwrap:function(resource){return UnwrapService.unwrapResource(BBModel.EventGroup,resource)}}}]),angular.module("BB.Services").factory("BB.Service.event_groups",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{promise:!0,unwrap:function(resource){return UnwrapService.unwrapCollection(BBModel.EventGroup,"event_groups",resource)}}}]),angular.module("BB.Services").factory("BB.Service.event_chain",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{unwrap:function(resource){return UnwrapService.unwrapResource(BBModel.EventChain,resource)}}}]),angular.module("BB.Services").factory("BB.Service.event_chains",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{unwrap:function(resource){return UnwrapService.unwrapResource(BBModel.EventChain,resource)}}}]),angular.module("BB.Services").factory("BB.Service.category",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{unwrap:function(resource){return UnwrapService.unwrapResource(BBModel.Category,resource)}}}]),angular.module("BB.Services").factory("BB.Service.categories",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{promise:!0,unwrap:function(resource){return UnwrapService.unwrapCollection(BBModel.Category,"categories",resource)}}}]),angular.module("BB.Services").factory("BB.Service.client",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{unwrap:function(resource){return UnwrapService.unwrapResource(BBModel.Client,resource)}}}]),angular.module("BB.Services").factory("BB.Service.child_clients",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{promise:!0,unwrap:function(resource){return UnwrapService.unwrapCollection(BBModel.Client,"clients",resource)}}}]),angular.module("BB.Services").factory("BB.Service.clients",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{promise:!0,unwrap:function(resource){return UnwrapService.unwrapCollection(BBModel.Client,"clients",resource)}}}]),angular.module("BB.Services").factory("BB.Service.questions",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{unwrap:function(resource){return UnwrapService.unwrapCollection(BBModel.Question,"questions",resource)}}}]),angular.module("BB.Services").factory("BB.Service.question",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{unwrap:function(resource){return UnwrapService.unwrapResource(BBModel.Question,resource)}}}]),angular.module("BB.Services").factory("BB.Service.answers",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{promise:!1,unwrap:function(items){var answers,i,j,len,models;for(models=[],j=0,len=items.length;len>j;j++)i=items[j],models.push(new BBModel.Answer(i));return answers={answers:models,getAnswer:function(question){var a,k,len1,ref;for(ref=this.answers,k=0,len1=ref.length;len1>k;k++)if(a=ref[k],a.question_text===question||a.question_id===question)return a.value}}}}}]),angular.module("BB.Services").factory("BB.Service.administrators",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{unwrap:function(items){var i,j,len,results;for(results=[],j=0,len=items.length;len>j;j++)i=items[j],results.push(new BBModel.Admin.User(i));return results}}}]),angular.module("BB.Services").factory("BB.Service.company",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{unwrap:function(resource){return UnwrapService.unwrapResource(BBModel.Company,resource)}}}]),angular.module("BB.Services").factory("BB.Service.parent",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{unwrap:function(resource){return UnwrapService.unwrapResource(BBModel.Company,resource)}}}]),angular.module("BB.Services").factory("BB.Service.company_questions",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{promise:!0,unwrap:function(resource){return UnwrapService.unwrapCollection(BBModel.BusinessQuestion,"company_questions",resource)}}}]),angular.module("BB.Services").factory("BB.Service.company_question",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{unwrap:function(resource){return UnwrapService.unwrapResource(BBModel.BusinessQuestion,resource)}}}]),angular.module("BB.Services").factory("BB.Service.images",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{promise:!0,unwrap:function(resource){return UnwrapService.unwrapCollection(BBModel.Image,"images",resource)}}}]),angular.module("BB.Services").factory("BB.Service.bookings",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{promise:!0,unwrap:function(resource){return UnwrapService.unwrapCollection(BBModel.Member.Booking,"bookings",resource)}}}]),angular.module("BB.Services").factory("BB.Service.wallet",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{unwrap:function(resource){return UnwrapService.unwrapResource(BBModel.Member.Wallet,resource)}}}]),angular.module("BB.Services").factory("BB.Service.product",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{unwrap:function(resource){return UnwrapService.unwrapResource(BBModel.Product,resource)}}}]),angular.module("BB.Services").factory("BB.Service.products",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{promise:!0,unwrap:function(resource){var deferred;return deferred=$q.defer(),resource.$get("products").then(function(_this){return function(items){var cat,i,index,j,len,models;for(models=[],index=j=0,len=items.length;len>j;index=++j)i=items[index],cat=new BBModel.Product(i),cat.order||(cat.order=index),models.push(cat);return deferred.resolve(models)}}(this),function(_this){return function(err){return deferred.reject(err)}}(this)),deferred.promise}}}]),angular.module("BB.Services").factory("BB.Service.pre_paid_booking",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{unwrap:function(resource){return UnwrapService.unwrapResource(BBModel.PrePaidBooking,resource)}}}]),angular.module("BB.Services").factory("BB.Service.pre_paid_bookings",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{promise:!0,unwrap:function(resource){return UnwrapService.unwrapCollection(BBModel.PrePaidBooking,"pre_paid_bookings",resource)}}}]),angular.module("BB.Services").factory("BB.Service.external_purchase",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{unwrap:function(resource){return UnwrapService.unwrapResource(BBModel.ExternalPurchase,resource)}}}]),angular.module("BB.Services").factory("BB.Service.external_purchases",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{promise:!0,unwrap:function(resource){return UnwrapService.unwrapCollection(BBModel.ExternalPurchase,"external_purchases",resource)}}}]),angular.module("BB.Services").factory("BB.Service.purchase_item",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{unwrap:function(resource){return UnwrapService.unwrapResource(BBModel.PurchaseItem,resource)}}}]),angular.module("BB.Services").factory("BB.Service.purchase_items",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{promise:!0,unwrap:function(resource){return UnwrapService.unwrapCollection(BBModel.PurchaseItem,"purchase_items",resource)}}}]),angular.module("BB.Services").factory("BB.Service.payment_callbacks",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{promise:!0,unwrap:function(resource){return UnwrapService.unwrapCollection(BBModel.PaymentCallbacks,"payment_callbacks",resource)}}}]),angular.module("BB.Services").factory("BB.Service.events",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{promise:!0,unwrap:function(resource){return UnwrapService.unwrapCollection(BBModel.Event,"events",resource)}}}]),angular.module("BB.Services").factory("BB.Service.all_children",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{promise:!0,unwrap:function(resource){return UnwrapService.unwrapCollection(BBModel.Service,"services",resource)}}}]),angular.module("BB.Services").factory("BB.Service.child_services",["$q","BBModel","UnwrapService",function($q,BBModel,UnwrapService){return{promise:!0,unwrap:function(resource){return UnwrapService.unwrapCollection(BBModel.Service,"child_services",resource)}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("ValidatorService",["$rootScope","AlertService","CompanyStoreService","BBModel","$q","$bbug",function($rootScope,AlertService,CompanyStoreService,BBModel,$q,$bbug){var alphanumeric,email_regex,geocode_result,international_number,mobile_regex_lenient,number_only_regex,standard_password,uk_landline_regex_lenient,uk_landline_regex_strict,uk_mobile_regex_strict,uk_postcode_regex,uk_postcode_regex_lenient,us_postcode_regex;return uk_postcode_regex=/^(((([A-PR-UWYZ][0-9][0-9A-HJKS-UW]?)|([A-PR-UWYZ][A-HK-Y][0-9][0-9ABEHMNPRV-Y]?))\s{0,1}[0-9]([ABD-HJLNP-UW-Z]{2}))|(GIR\s{0,2}0AA))$/i,us_postcode_regex=/^\d{5}(?:[-\s]\d{4})?$/,uk_postcode_regex_lenient=/^[A-Z]{1,2}[0-9][0-9A-Z]?\s*[0-9][A-Z]{2}$/i,number_only_regex=/^\d+$/,uk_mobile_regex_strict=/^((\+44|0)\s*7\s*([45789](\s*\d){2}|6\s*2\s*4)(\s*\d){6})$/,mobile_regex_lenient=/^(0|\+)([\d \(\)]{9,19})$/,uk_landline_regex_strict=/^(\+44|0)\s*[1-9]\s*\d{1,4}\s*\d{3,4}\s*\d{2,4}$/,uk_landline_regex_lenient=/^(0|\+)([\d \(\)]{9,19})$/,international_number=/^(\+)([\d \(\)]{9,19})$/,email_regex=/^$|^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i,standard_password=/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$/,alphanumeric=/^[a-zA-Z0-9]*$/,geocode_result=null,{alpha:/^[a-zA-Z\s-]*$/,us_phone_number:/^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/,getEmailPattern:function(){return email_regex},getStandardPassword:function(){return standard_password},getUKPostcodePattern:function(){return uk_postcode_regex_lenient},getMailingPattern:function(){var cc;switch(cc=CompanyStoreService.country_code){case"us":return us_postcode_regex;case"gb":return uk_postcode_regex_lenient;default:return null}},getNumberOnlyPattern:function(){return number_only_regex},getAlphaNumbericPattern:function(){return alphanumeric},getUKMobilePattern:function(strict){return null==strict&&(strict=!1),strict?uk_mobile_regex_strict:mobile_regex_lenient},getMobilePattern:function(){return mobile_regex_lenient},getUKLandlinePattern:function(strict){return null==strict&&(strict=!1),strict?uk_landline_regex_strict:uk_landline_regex_lenient},getIntPhonePattern:function(){return international_number},getGeocodeResult:function(){return geocode_result?geocode_result:void 0},validatePostcode:function(form,prms){var deferred,geocoder,ne,postcode,req,sw;return AlertService.clear(),form&&form.postcode?form.$error.required?(AlertService.raise("MISSING_POSTCODE"),!1):form.$error.pattern?(AlertService.raise("POSTCODE_INVALID"),!1):(deferred=$q.defer(),postcode=form.postcode.$viewValue,req={address:postcode},prms.region&&(req.region=prms.region),req.componentRestrictions={postalCode:req.address},prms.bounds&&(sw=new google.maps.LatLng(prms.bounds.sw.x,prms.bounds.sw.y),ne=new google.maps.LatLng(prms.bounds.ne.x,prms.bounds.ne.y),req.bounds=new google.maps.LatLngBounds(sw,ne)),geocoder=new google.maps.Geocoder,geocoder.geocode(req,function(results,status){return 1===results.length&&"OK"===status?(geocode_result=results[0],deferred.resolve(!0)):(AlertService.raise("POSTCODE_INVALID"),$rootScope.$apply(),deferred.reject(!1))}),deferred.promise):!1},validateForm:function(form){return form?(form.submitted=!0,$rootScope.$broadcast("form:validated",form),form.$invalid&&form.raise_alerts&&form.alert?(AlertService.danger(form.alert),!1):form.$invalid&&form.raise_alerts?(AlertService.danger(ErrorService.getError("FORM_INVALID")),!1):!form.$invalid):!1}}}])}.call(this),function(){"use strict";angular.module("BB.Services").service("viewportSize",["$window","$document","$rootScope",function($window,$document,$rootScope){var appendViewportElementsToBBElement,findVisibleElement,getElementId,getSizeFromElement,getSupportedSizes,getViewportElementsFromDocument,getViewportElementsToAppend,getViewportSize,init,isElementVisible,isInitialised,isLG,isMD,isSM,isXS,listenForResize,state,viewportElementIdPrefix,viewportSize;return viewportSize=null,viewportElementIdPrefix="viewport_size_",isInitialised=!1,state={isXS:!1,isSM:!1,isMD:!1,isLG:!1},getSupportedSizes=function(){return["xs","sm","md","lg"]},getElementId=function(size){return viewportElementIdPrefix+size},getViewportElementsToAppend=function(){var elementId,i,len,ref,size,viewportElementStrings;for(viewportElementStrings='<div id="viewport_size">',ref=getSupportedSizes(),i=0,len=ref.length;len>i;i++)size=ref[i],elementId=getElementId(size),viewportElementStrings+=' <span id="'+elementId+'" class="visible-'+size+'"> </span>';return viewportElementStrings+="</div>"},appendViewportElementsToBBElement=function(){var bb,viewportElements;viewportElements=getViewportElementsToAppend(),bb=$document.find("#bb"),bb.append(viewportElements)},getViewportElementsFromDocument=function(){var i,len,ref,size,viewportElement,viewportElementId,viewportElements;for(viewportElements=[],ref=getSupportedSizes(),i=0,len=ref.length;len>i;i++)size=ref[i],viewportElementId=getElementId(size),viewportElement=$document[0].querySelector("#"+viewportElementId),
viewportElements.push(viewportElement);return viewportElements},isElementVisible=function(element){return"none"!==angular.element(element).css("display")},getSizeFromElement=function(element){var className,size;return className=element.className.match("(visible-[a-zA-Z]*)\\b")[0],size=className.replace("visible-","").trim()},findVisibleElement=function(){var elementSize,i,len,viewportElement,viewportElements;for(viewportElements=getViewportElementsFromDocument(),i=0,len=viewportElements.length;len>i;i++)viewportElement=viewportElements[i],elementSize=getSizeFromElement(viewportElement),isElementVisible(viewportElement)?(viewportSize=elementSize,state["is"+elementSize.toUpperCase()]=!0):state["is"+elementSize.toUpperCase()]=!1},listenForResize=function(){angular.element($window).resize(function(){var viewportSizeOld;viewportSizeOld=viewportSize,findVisibleElement(),viewportSizeOld!==viewportSize&&$rootScope.$broadcast("viewportSize:changed")})},init=function(){isInitialised||(appendViewportElementsToBBElement(),findVisibleElement(),listenForResize(),isInitialised=!0)},getViewportSize=function(){return viewportSize},isXS=function(){return state.isXS},isSM=function(){return state.isSM},isMD=function(){return state.isMD},isLG=function(){return state.isLG},{init:init,getViewportSize:getViewportSize,isXS:isXS,isSM:isSM,isMD:isMD,isLG:isLG}}])}.call(this),function(){"use strict";var bind=function(fn,me){return function(){return fn.apply(me,arguments)}};angular.module("BB.Models").factory("BBWidget",["$q","BBModel","BasketService","$urlMatcherFactory","$location","BreadcrumbService","$window","$rootScope","PathHelper","GeneralOptions","$translate",function($q,BBModel,BasketService,$urlMatcherFactory,$location,BreadcrumbService,$window,$rootScope,PathHelper,GeneralOptions,$translate){var Widget;return Widget=function(){function Widget(){this.clearAddress=bind(this.clearAddress,this),this.emptyStackedItems=bind(this.emptyStackedItems,this),this.deleteStackedItemByService=bind(this.deleteStackedItemByService,this),this.removeItemFromStack=bind(this.removeItemFromStack,this),this.deleteStackedItem=bind(this.deleteStackedItem,this),this.sortStackedItems=bind(this.sortStackedItems,this),this.setStackedItems=bind(this.setStackedItems,this),this.stackItem=bind(this.stackItem,this),this.waitForRoutes=bind(this.waitForRoutes,this),this.setBasicRoute=bind(this.setBasicRoute,this),this.setRoute=bind(this.setRoute,this),this.calculatePercentageComplete=bind(this.calculatePercentageComplete,this),this.recordStep=bind(this.recordStep,this),this.recordCurrentPage=bind(this.recordCurrentPage,this),this.uid=_.uniqueId("bbwidget_"),this.page_suffix="",this.steps=[],this.allSteps=[],this.item_defaults={},this.usingBasket=!1,this.confirmCheckout=!1,this.isAdmin=!1,this.payment_status=null}return Widget.prototype.pageURL=function(route){return route+".html"},Widget.prototype.updateRoute=function(page){var company,date,event,event_group,pattern,prms,service_name,time,url;if(this.routeFormat)return page||(page=this.current_page),pattern=$urlMatcherFactory.compile(this.routeFormat),service_name="-",event_group="-",event="-",this.current_item&&(this.current_item.service&&(service_name=this.convertToDashSnakeCase(this.current_item.service.name)),this.current_item.event_group&&(event_group=this.convertToDashSnakeCase(this.current_item.event_group.name)),this.current_item.event&&(event=this.current_item.event.id),this.current_item.date&&(date=this.current_item.date.date),date&&moment.isMoment(date)&&(date=date.toISODate()),this.current_item.time&&(time=this.current_item.time.time),this.current_item.company?company=this.convertToDashSnakeCase(this.current_item.company.name):console.log("%c bb_warning: Make sure you are using a valid company_id","background: #c0392b; color: #fff")),this.route_values&&(prms=angular.copy(this.route_values)),prms||(prms={}),angular.extend(prms,{page:page,company:company,service:service_name,event_group:event_group,date:date,time:time,event:event}),url=pattern.format(prms),url=url.replace(/\/+$/,""),$location.path(url),this.routing=!0,url},Widget.prototype.setRouteFormat=function(route){var match;return this.routeFormat=route,this.routeFormat?(this.routing=!0,match=PathHelper.matchRouteToPath(this.routeFormat),match?(match.company&&(this.item_defaults.company=decodeURIComponent(match.company)),match.service&&"-"!==match.service&&(this.item_defaults.service=decodeURIComponent(match.service)),match.event_group&&"-"!==match.event_group&&(this.item_defaults.event_group=match.event_group),match.event&&"-"!==match.event&&(this.item_defaults.event=decodeURIComponent(match.event)),match.person&&(this.item_defaults.person=decodeURIComponent(match.person)),match.resource&&(this.item_defaults.resource=decodeURIComponent(match.resource)),match.resources&&(this.item_defaults.resources=decodeURIComponent(match.resoures)),match.date&&(this.item_defaults.date=match.date),match.time&&(this.item_defaults.time=parseInt(match.time)),this.route_matches=match):void 0):void 0},Widget.prototype.matchURLToStep=function(){var page,step;return page=PathHelper.matchRouteToPath(this.routeFormat,"page"),step=_.findWhere(this.allSteps,{page:page}),step?step.number:null},Widget.prototype.convertToDashSnakeCase=function(str){return str=str.toLowerCase(),str=$.trim(str),str=str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|'’!<>;:,.~`=+-@£&%"]/g,""),str=str.replace(/\s{2,}/g," "),str=str.replace(/\s/g,"-")},Widget.prototype.recordCurrentPage=function(){var j,k,l,len,len1,len2,match,ref,ref1,ref2,setDocumentTitle,step,title;if(setDocumentTitle=function(title){return GeneralOptions.update_document_title&&title?document.title=$translate.instant(title):void 0},this.current_step||(this.current_step=0),match=!1,this.allSteps)for(ref=this.allSteps,j=0,len=ref.length;len>j;j++)step=ref[j],step.page===this.current_page&&(this.current_step=step.number,setDocumentTitle(step.title),match=!0);if(!match)for(ref1=this.steps,k=0,len1=ref1.length;len1>k;k++)step=ref1[k],step&&step.page===this.current_page&&(this.current_step=step.number,setDocumentTitle(step.title),match=!0);if(match||(this.current_step+=1),title="",this.allSteps){for(ref2=this.allSteps,l=0,len2=ref2.length;len2>l;l++)step=ref2[l],step.active=!1,step.passed=step.number<this.current_step;this.allSteps[this.current_step-1]&&(this.allSteps[this.current_step-1].active=!0,title=this.allSteps[this.current_step-1].title)}return this.recordStep(this.current_step,title)},Widget.prototype.recordStep=function(step_number,title){var j,len,ref,step;for(this.steps[step_number-1]={url:this.updateRoute(this.current_page),current_item:this.current_item.getStep(),page:this.current_page,number:step_number,title:title,stacked_length:this.stacked_items.length},BreadcrumbService.setCurrentStep(step_number),ref=this.steps,j=0,len=ref.length;len>j;j++)step=ref[j],step&&(step.passed=step.number<this.current_step,step.active=step.number===this.current_step),step&&step.number===step_number&&this.calculatePercentageComplete(step.number);return this.allSteps&&this.allSteps.length===step_number||"checkout"===this.current_page?this.last_step_reached=!0:this.last_step_reached=!1},Widget.prototype.calculatePercentageComplete=function(step_number){return this.percentage_complete=step_number&&this.allSteps?step_number/this.allSteps.length*100:0},Widget.prototype.setRoute=function(rdata){var i,j,k,len,len1,ref,route,step;for(this.allSteps.length=0,this.nextSteps={},void 0!==rdata&&null!==rdata&&void 0!==rdata[0]&&(this.firstStep=rdata[0].page),i=j=0,len=rdata.length;len>j;i=++j)if(step=rdata[i],step.disable_breadcrumbs&&(this.disableGoingBackAtStep=i+1),rdata[i+1]&&(this.nextSteps[step.page]=rdata[i+1].page),this.allSteps.push({number:i+1,title:step.title,page:step.page}),step.when)for(this.routeSteps||(this.routeSteps={}),ref=step.when,k=0,len1=ref.length;len1>k;k++)route=ref[k],this.routeSteps[route]=step.page;return this.$wait_for_routing?this.$wait_for_routing.resolve():void 0},Widget.prototype.setBasicRoute=function(routes){var i,j,len,step;for(this.nextSteps={},this.firstStep=routes[0],i=j=0,len=routes.length;len>j;i=++j)step=routes[i],this.nextSteps[step]=routes[i+1];return this.$wait_for_routing?this.$wait_for_routing.resolve():void 0},Widget.prototype.waitForRoutes=function(){return this.$wait_for_routing?void 0:this.$wait_for_routing=$q.defer()},Widget.prototype.stackItem=function(item){return this.stacked_items.push(item),this.sortStackedItems(),1===this.stacked_items.length?this.current_item=item:void 0},Widget.prototype.setStackedItems=function(items){return this.stacked_items=items,this.sortStackedItems()},Widget.prototype.sortStackedItems=function(){var arr,item,j,len,ref;for(arr=[],ref=this.stacked_items,j=0,len=ref.length;len>j;j++)item=ref[j],arr=arr.concat(item.promises);return $q.all(arr)["finally"](function(_this){return function(){return _this.stacked_items=_this.stacked_items.sort(function(a,b){var ref1,ref2;return a.time&&b.time?null!=(ref1=a.time.time>b.time.time)?ref1:{1:-1}:a.service.category&&!b.service.category?1:b.service.category&&!a.service.category?-1:b.service.category||a.service.category?null!=(ref2=a.service.category.order>b.service.category.order)?ref2:{1:-1}:1})}}(this))},Widget.prototype.deleteStackedItem=function(item){return item&&item.id&&BBModel.Basket.$deleteItem(item,this.company,{bb:this}),this.stacked_items=this.stacked_items.filter(function(i){return i!==item})},Widget.prototype.removeItemFromStack=function(item){return this.stacked_items=this.stacked_items.filter(function(i){return i!==item})},Widget.prototype.deleteStackedItemByService=function(item){var i,j,len,ref;for(ref=this.stacked_items,j=0,len=ref.length;len>j;j++)i=ref[j],i&&i.service&&i.service.self===item.self&&i.id&&BBModel.Basket.$deleteItem(i,this.company,{bb:this});return this.stacked_items=this.stacked_items.filter(function(i){return i&&i.service&&i.service.self!==item.self})},Widget.prototype.emptyStackedItems=function(){return this.stacked_items=[]},Widget.prototype.pushStackToBasket=function(){var i,j,len,ref;for(this.basket||(this.basket=new BBModel.Basket(null,this)),ref=this.stacked_items,j=0,len=ref.length;len>j;j++)i=ref[j],this.basket.addItem(i);return this.emptyStackedItems()},Widget.prototype.totalStackedItemsDuration=function(){var duration,item,j,len,ref;for(duration=0,ref=this.stacked_items,j=0,len=ref.length;len>j;j++)item=ref[j],item.service&&item.service.listed_duration&&(duration+=item.service.listed_duration);return duration},Widget.prototype.clearStackedItemsDateTime=function(){var item,j,len,ref,results;for(ref=this.stacked_items,results=[],j=0,len=ref.length;len>j;j++)item=ref[j],results.push(item.clearDateTime());return results},Widget.prototype.clearAddress=function(){return delete this.address1,delete this.address2,delete this.address3,delete this.address4,delete this.address5},Widget}()}])}.call(this),function(){"use strict";var ModalDelete,ModalDeleteAll;angular.module("BB.Directives").directive("bbPurchase",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"Purchase",link:function(scope,element,attrs){scope.init(scope.$eval(attrs.bbPurchase))}}}),angular.module("BB.Controllers").controller("Purchase",["$scope","$rootScope","PurchaseService","$uibModal","$location","$timeout","BBModel","$q","QueryStringService","SSOService","AlertService","LoginService","$window","$sessionStorage","LoadingService","$translate","ReasonService","$document",function($scope,$rootScope,PurchaseService,$uibModal,$location,$timeout,BBModel,$q,QueryStringService,SSOService,AlertService,LoginService,$window,$sessionStorage,LoadingService,$translate,ReasonService,$document){var checkIfMoveBooking,checkIfWaitlistBookings,failMsg,getBookings,getCompanyID,getPurchase,getPurchaseID,getReasons,loader,loginRequired,setCancelReasons,setCancelReasonsToBB,setMoveReasons,setMoveReasonsToBB,setPurchaseCompany;return $scope.is_waitlist=!1,$scope.make_payment=!1,loader=LoadingService.$loader($scope),setPurchaseCompany=function(company){return $scope.bb.company_id=company.id,$scope.bb.company=new BBModel.Company(company),$scope.company=$scope.bb.company,$scope.bb.item_defaults.company=$scope.bb.company,company.settings&&(company.settings.merge_resources&&($scope.bb.item_defaults.merge_resources=!0),company.settings.merge_people)?$scope.bb.item_defaults.merge_people=!0:void 0},failMsg=function(){return $scope.fail_msg?AlertService.danger({msg:$scope.fail_msg}):AlertService.add("danger",{msg:$translate.instant("CORE.ALERTS.GENERIC")})},$scope.init=function(options){return options||(options={}),loader.notLoaded(),options.move_route&&($scope.move_route=options.move_route),options.move_all&&($scope.move_all=options.move_all),options.fail_msg&&($scope.fail_msg=options.fail_msg),$scope.bb.total?$scope.load($scope.bb.total.long_id):$scope.bb.purchase?($scope.purchase=$scope.bb.purchase,$scope.bookings=$scope.bb.purchase.bookings,$scope.purchase.confirm_messages&&($scope.messages=$scope.purchase.confirm_messages),$scope.cancel_reasons||($scope.cancel_reasons=$scope.bb.cancel_reasons),$scope.move_reasons||($scope.move_reasons=$scope.bb.move_reasons),loader.setLoaded()):options.member_sso?SSOService.memberLogin(options).then(function(login){return $scope.load()},function(err){return loader.setLoaded(),failMsg()}):$scope.load()},getPurchase=function(params){var deferred;return deferred=$q.defer(),PurchaseService.query(params).then(function(purchase){return deferred.resolve(purchase),purchase.$get("company").then(function(_this){return function(company){return setPurchaseCompany(company)}}(this)),$scope.purchase=purchase,$scope.bb.purchase=purchase,$scope.price=!(0===$scope.purchase.price)},function(err){return loader.setLoaded(),err&&401===err.status?LoginService.isLoggedIn()?failMsg():loginRequired():failMsg()}),deferred.promise},getBookings=function(purchase){return $scope.purchase.$getBookings().then(function(bookings){var booking,i,len,ref,results;for($scope.bookings=bookings,bookings[0]&&bookings[0].$getCompany().then(function(company){return $scope.purchase.bookings[0].company=company,company.$has("reasons")&&getReasons(company).then(function(reasons){return setCancelReasons(),setMoveReasons(),setMoveReasonsToBB(),setCancelReasonsToBB()}),company.$getAddress().then(function(address){return $scope.purchase.bookings[0].company.address=address})}),loader.setLoaded(),checkIfMoveBooking(bookings),checkIfWaitlistBookings(bookings),ref=$scope.bookings,results=[],i=0,len=ref.length;len>i;i++)booking=ref[i],results.push(booking.$getAnswers().then(function(answers){return booking.answers=answers}));return results},function(err){return loader.setLoaded(),failMsg()}),purchase.$has("client")&&purchase.$get("client").then(function(_this){return function(client){return $scope.setClient(new BBModel.Client(client))}}(this)),$scope.purchase.getConfirmMessages().then(function(messages){return $scope.purchase.confirm_messages=messages,$scope.messages=messages})},$scope.load=function(id){return loader.notLoaded(),id||(id=getPurchaseID()),!$scope.loaded&&id?$rootScope.widget_started.then(function(_this){return function(){return $scope.waiting_for_conn_started.then(function(){var auth_token,company_id,params;return company_id=getCompanyID(),company_id&&BBModel.Company.$query(company_id,{}).then(function(company){return setPurchaseCompany(company)}),params={purchase_id:id,url_root:$scope.bb.api_url},auth_token=$sessionStorage.getItem("auth_token"),auth_token&&(params.auth_token=auth_token),getPurchase(params).then(function(purchase){return getBookings(purchase)})},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")})}}(this),function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}):loader.setLoaded(),$scope.loaded=!0},checkIfMoveBooking=function(bookings){var b,id,matches,move_booking;return matches=/^.*(?:\?|&)move_booking=(.*?)(?:&|$)/.exec($location.absUrl()),matches&&(id=parseInt(matches[1])),id&&(move_booking=function(){var i,len,results;for(results=[],i=0,len=bookings.length;len>i;i++)b=bookings[i],b.id===id&&results.push(b);return results}(),move_booking.length>0&&$scope.isMovable(bookings[0]))?$scope.move(move_booking[0]):void 0},checkIfWaitlistBookings=function(bookings){var booking;return $scope.waitlist_bookings=function(){var i,len,results;for(results=[],i=0,len=bookings.length;len>i;i++)booking=bookings[i],booking.on_waitlist&&1===booking.settings.sent_waitlist&&results.push(booking);return results}()},loginRequired=function(_this){return function(){return $scope.bb.login_required?void 0:window.location=window.location.href+"&login=true"}}(this),getCompanyID=function(){var company_id,matches;return matches=/^.*(?:\?|&)company_id=(.*?)(?:&|$)/.exec($location.absUrl()),matches&&(company_id=matches[1]),company_id},getPurchaseID=function(){var id,matches;return matches=/^.*(?:\?|&)id=(.*?)(?:&|$)/.exec($location.absUrl()),matches||(matches=/^.*print_purchase\/(.*?)(?:\?|$)/.exec($location.absUrl())),matches||(matches=/^.*print_purchase_jl\/(.*?)(?:\?|$)/.exec($location.absUrl())),matches?id=matches[1]:QueryStringService("ref")&&(id=QueryStringService("ref")),QueryStringService("booking_id")&&(id=QueryStringService("booking_id")),id},$scope.move=function(booking,route,options){return null==options&&(options={}),route||(route=$scope.move_route),$scope.move_all?$scope.moveAll(route,options):(loader.notLoaded(),$scope.initWidget({company_id:booking.company_id,no_route:!0}),$timeout(function(_this){return function(){return $rootScope.connection_started.then(function(){var new_item,proms;return proms=[],$scope.bb.moving_booking=booking,$scope.quickEmptybasket(),new_item=new BBModel.BasketItem(booking,$scope.bb),new_item.setSrcBooking(booking,$scope.bb),new_item.ready=!1,Array.prototype.push.apply(proms,new_item.promises),$scope.bb.basket.addItem(new_item),$scope.setBasketItem(new_item),$q.all(proms).then(function(){return loader.setLoaded(),$rootScope.$broadcast("booking:move"),$scope.decideNextPage(route)},function(err){return loader.setLoaded(),failMsg()})},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")})}}(this)))},$scope.moveAll=function(route,options){return null==options&&(options={}),route||(route=$scope.move_route),loader.notLoaded(),$scope.initWidget({company_id:$scope.bookings[0].company_id,no_route:!0}),$timeout(function(_this){return function(){return $rootScope.connection_started.then(function(){var booking,i,len,new_item,proms,ref;for(proms=[],1===$scope.bookings.length?$scope.bb.moving_booking=$scope.bookings[0]:$scope.bb.moving_booking=$scope.purchase,_.every(_.map($scope.bookings,function(b){return b.event_id}),function(event_id){return event_id===$scope.bookings[0].event_id})&&($scope.bb.moving_purchase=$scope.purchase),$scope.quickEmptybasket(),ref=$scope.bookings,i=0,len=ref.length;len>i;i++)booking=ref[i],new_item=new BBModel.BasketItem(booking,$scope.bb),new_item.setSrcBooking(booking),new_item.ready=!1,new_item.move_done=!1,Array.prototype.push.apply(proms,new_item.promises),$scope.bb.basket.addItem(new_item);return $scope.bb.sortStackedItems(),$scope.setBasketItem($scope.bb.basket.items[0]),$q.all(proms).then(function(){return loader.setLoaded(),$scope.decideNextPage(route)},function(err){return loader.setLoaded(),failMsg()})},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")})}}(this))},$scope.bookWaitlistItem=function(booking){var params;return loader.notLoaded(),params={purchase:$scope.purchase,booking:booking},PurchaseService.bookWaitlistItem(params).then(function(purchase){return $scope.purchase=purchase,$scope.total=$scope.purchase,$scope.bb.purchase=purchase,$scope.purchase.$getBookings().then(function(bookings){return $scope.bookings=bookings,$scope.waitlist_bookings=function(){var i,len,ref,results;for(ref=$scope.bookings,results=[],i=0,len=ref.length;len>i;i++)booking=ref[i],booking.on_waitlist&&1===booking.settings.sent_waitlist&&results.push(booking);return results}(),$scope.purchase.$has("new_payment")&&$scope.purchase.due_now>0&&($scope.make_payment=!0),loader.setLoaded()},function(err){return loader.setLoaded(),failMsg()})},function(_this){return function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}}(this))},$scope["delete"]=function(booking){var modalInstance;return modalInstance=$uibModal.open({templateUrl:$scope.getPartial("_cancel_modal"),controller:ModalDelete,resolve:{booking:function(){return booking},cancel_reasons:function(){return $scope.cancel_reasons}}}),modalInstance.result.then(function(booking){var cancel_reason,data;return cancel_reason=null,booking.cancel_reason&&(cancel_reason=booking.cancel_reason),data={cancel_reason:cancel_reason},booking.$del("self",{},data).then(function(_this){return function(service){return $scope.bookings=_.without($scope.bookings,booking),$rootScope.$broadcast("booking:cancelled")}}(this))})},$scope.deleteAll=function(){var modalInstance;return modalInstance=$uibModal.open({templateUrl:$scope.getPartial("_cancel_modal"),controller:ModalDeleteAll,resolve:{purchase:function(){return $scope.purchase}}}),modalInstance.result.then(function(purchase){return PurchaseService.deleteAll(purchase).then(function(purchase){return $scope.purchase=purchase,$scope.bookings=[],$rootScope.$broadcast("booking:cancelled")})})},$scope.isMovable=function(booking){return booking.min_cancellation_time?moment().isBefore(booking.min_cancellation_time):booking.datetime.isAfter(moment())},$scope.createBasketItem=function(booking){var item;return item=new BBModel.BasketItem(booking,$scope.bb),item.setSrcBooking(booking),item},$scope.checkAnswer=function(answer){return"boolean"==typeof answer.value||"string"==typeof answer.value||"number"==typeof answer.value},$scope.changeAttendees=function(route){return $scope.moveAll(route)},getReasons=function(company){return ReasonService.query(company).then(function(reasons){return $scope.company_reasons=reasons,$scope.company_reasons},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong retrieving reasons")})},setCancelReasons=function(){return $scope.cancel_reasons=_.filter($scope.company_reasons,function(r){return 3===r.reason_type}),$scope.cancel_reasons},setMoveReasons=function(){return $scope.move_reasons=_.filter($scope.company_reasons,function(r){return 5===r.reason_type}),$scope.move_reasons},setMoveReasonsToBB=function(){return $scope.move_reasons?$scope.bb.move_reasons=$scope.move_reasons:void 0},setCancelReasonsToBB=function(){return $scope.cancel_reasons?$scope.bb.cancel_reasons=$scope.cancel_reasons:void 0}}]),ModalDelete=function($scope,$rootScope,$uibModalInstance,booking,AlertService,cancel_reasons){return $scope.booking=booking,$scope.cancel_reasons=cancel_reasons,$scope.confirmDelete=function(){return AlertService.clear(),$uibModalInstance.close(booking)},$scope.cancel=function(){return $uibModalInstance.dismiss("cancel")}},ModalDeleteAll=function($scope,$rootScope,$uibModalInstance,purchase){return $scope.purchase=purchase,$scope.confirmDelete=function(){return $uibModalInstance.close(purchase)},$scope.cancel=function(){return $uibModalInstance.dismiss("cancel")}}}.call(this),function(){"use strict";var bind=function(fn,me){return function(){return fn.apply(me,arguments)}},extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("Purchase.BookingModel",["$q","$window","BBModel","BaseModel","$bbug",function($q,$window,BBModel,BaseModel,$bbug){var Purchase_Booking;return Purchase_Booking=function(superClass){function Purchase_Booking(data){this.$getSurveyAnswers=bind(this.$getSurveyAnswers,this),this.$getAnswers=bind(this.$getAnswers,this),Purchase_Booking.__super__.constructor.call(this,data),this.ready=!1,this.datetime=moment.parseZone(this.datetime),this.time_zone&&this.datetime.tz(this.time_zone),this.original_datetime=moment(this.datetime),this.end_datetime=moment.parseZone(this.end_datetime),this.time_zone&&this.end_datetime.tz(this.time_zone),this.min_cancellation_time=moment(this.min_cancellation_time),this.min_cancellation_hours=this.datetime.diff(this.min_cancellation_time,"hours")}return extend(Purchase_Booking,superClass),Purchase_Booking.prototype.getGroup=function(){return this.group?this.group:this._data.$has("event_groups")?this._data.$get("event_groups").then(function(_this){return function(group){return _this.group=group,_this.group}}(this)):void 0},Purchase_Booking.prototype.getColour=function(){return this.getGroup()?this.getGroup().colour:"#FFFFFF"},Purchase_Booking.prototype.getCompany=function(){return this.company?this.company:this.$has("company")?this._data.$get("company").then(function(_this){return function(company){return _this.company=new BBModel.Company(company),_this.company}}(this)):void 0},Purchase_Booking.prototype.$getAnswers=function(){var defer;return defer=$q.defer(),null!=this.answers?defer.resolve(this.answers):(this.answers=[],this._data.$has("answers")?this._data.$get("answers").then(function(_this){return function(answers){var a;return _this.answers=function(){var i,len,results;for(results=[],i=0,len=answers.length;len>i;i++)a=answers[i],results.push(new BBModel.Answer(a));return results}(),defer.resolve(_this.answers)}}(this)):defer.resolve([])),defer.promise},Purchase_Booking.prototype.$getSurveyAnswers=function(){var defer;return defer=$q.defer(),this.survey_answers&&defer.resolve(this.survey_answers),this._data.$has("survey_answers")?this._data.$get("survey_answers").then(function(_this){return function(survey_answers){var a;return _this.survey_answers=function(){var i,len,results;for(results=[],i=0,len=survey_answers.length;len>i;i++)a=survey_answers[i],results.push(new BBModel.Answer(a));return results}(),defer.resolve(_this.survey_answers)}}(this)):defer.resolve([]),defer.promise},Purchase_Booking.prototype.answer=function(q){var a,i,len,ref;if(null!=this.answers)for(ref=this.answers,i=0,len=ref.length;len>i;i++){if(a=ref[i],a.name&&a.name===q)return a.answer;if(a.question_text&&a.question_text===q)return a.value}else this.$getAnswers();return null},Purchase_Booking.prototype.getPostData=function(){var data,formatted_survey_answers,i,len,q,ref;if(data={},data.attended=this.attended,data.client_id=this.client_id,data.company_id=this.company_id,data.time=60*this.datetime.hour()+this.datetime.minute(),data.date=this.datetime.toISODate(),data.deleted=this.deleted,data.describe=this.describe,data.duration=this.duration,data.end_datetime=this.end_datetime,this.time&&this.time.event_id&&!this.isEvent()?data.event_id=this.time.event_id:this.event?data.event_id=this.event.id:data.event_id=this.slot_id,data.full_describe=this.full_describe,data.id=this.id,data.min_cancellation_time=this.min_cancellation_time,data.on_waitlist=this.on_waitlist,data.paid=this.paid,data.person_name=this.person_name,data.price=this.price,data.purchase_id=this.purchase_id,data.purchase_ref=this.purchase_ref,data.quantity=this.quantity,data.self=this.self,this.move_item_id&&(data.move_item_id=this.move_item_id),this.srcBooking&&(data.move_item_id=this.srcBooking.id),this.person&&(data.person_id=this.person.id),this.service&&(data.service_id=this.service.id),this.resource&&(data.resource_id=this.resource.id),this.item_details&&(data.questions=this.item_details.getPostData()),this.move_reason&&(data.move_reason=this.move_reason),data.service_name=this.service_name,data.settings=this.settings,this.status&&(data.status=this.status),null!=this.email&&(data.email=this.email),null!=this.email_admin&&(data.email_admin=this.email_admin),this.first_name&&(data.first_name=this.first_name),this.last_name&&(data.last_name=this.last_name),formatted_survey_answers=[],this.survey_questions){for(data.survey_questions=this.survey_questions,ref=this.survey_questions,i=0,len=ref.length;len>i;i++)q=ref[i],formatted_survey_answers.push({value:q.answer,outcome:q.outcome,detail_type_id:q.id,price:q.price});data.survey_answers=formatted_survey_answers}return data},Purchase_Booking.prototype.checkReady=function(){return this.datetime&&this.id&&this.purchase_ref?this.ready=!0:void 0},Purchase_Booking.prototype.printed_price=function(){return parseFloat(this.price)%1===0?"£"+parseInt(this.price):$window.sprintf("£%.2f",parseFloat(this.price))},Purchase_Booking.prototype.getDateString=function(){return this.datetime.toISODate()},Purchase_Booking.prototype.getTimeInMins=function(){return 60*this.datetime.hour()+this.datetime.minute()},Purchase_Booking.prototype.getAttachments=function(){return this.attachments?this.attachments:this.$has("attachments")?this._data.$get("attachments").then(function(_this){return function(atts){return _this.attachments=atts.attachments,_this.attachments}}(this)):void 0},Purchase_Booking.prototype.canCancel=function(){return moment(this.min_cancellation_time).isAfter(moment())},Purchase_Booking.prototype.canMove=function(){return this.canCancel()},Purchase_Booking.prototype.getAttendeeName=function(){return this.first_name+" "+this.last_name},Purchase_Booking.prototype.isEvent=function(){return null!=this.event_chain},Purchase_Booking.$addSurveyAnswersToBooking=function(booking){return PurchaseBookingService.addSurveyAnswersToBooking(booking)},Purchase_Booking}(BaseModel)}])}.call(this),function(){"use strict";var bind=function(fn,me){return function(){return fn.apply(me,arguments)}},extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("Purchase.CourseBookingModel",["$q","BBModel","BaseModel",function($q,BBModel,BaseModel){var Purchase_Course_Booking;return Purchase_Course_Booking=function(superClass){function Purchase_Course_Booking(data){this.getBookings=bind(this.getBookings,this),Purchase_Course_Booking.__super__.constructor.call(this,data)}return extend(Purchase_Course_Booking,superClass),Purchase_Course_Booking.prototype.getBookings=function(){var defer;return defer=$q.defer(),this.bookings&&defer.resolve(this.bookings),this._data.$has("bookings")?this._data.$get("bookings").then(function(_this){return function(bookings){var b;return _this.bookings=function(){var i,len,results;for(results=[],i=0,len=bookings.length;len>i;i++)b=bookings[i],results.push(new BBModel.Purchase.Booking(b));return results}(),_this.bookings.sort(function(a,b){return a.datetime.unix()-b.datetime.unix()}),defer.resolve(_this.bookings)}}(this)):(this.bookings=[],defer.resolve(this.bookings)),defer.promise},Purchase_Course_Booking}(BaseModel)}])}.call(this),function(){"use strict";var bind=function(fn,me){return function(){return fn.apply(me,arguments)}},extend=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},hasProp={}.hasOwnProperty;angular.module("BB.Models").factory("Purchase.TotalModel",["$q","$window","BBModel","BaseModel","$sce",function($q,$window,BBModel,BaseModel,$sce){var Purchase_Total;return Purchase_Total=function(superClass){function Purchase_Total(data){this.getConfirmMessages=bind(this.getConfirmMessages,this),this.getMember=bind(this.getMember,this),this.getClient=bind(this.getClient,this),this.getMessages=bind(this.getMessages,this),this.getDeals=bind(this.getDeals,this),this.getProducts=bind(this.getProducts,this),this.getPackages=bind(this.getPackages,this),this.$getCourseBookings=bind(this.$getCourseBookings,this),this.$getBookings=bind(this.$getBookings,this),
this.getItems=bind(this.getItems,this),Purchase_Total.__super__.constructor.call(this,data),this.getItems().then(function(_this){return function(items){return _this.items=items}}(this)),this.getClient().then(function(_this){return function(client){return _this.client=client}}(this)),this.getMember().then(function(_this){return function(member){return _this.member=member}}(this))}return extend(Purchase_Total,superClass),Purchase_Total.prototype.id=function(){return this.get("id")},Purchase_Total.prototype.icalLink=function(){return this._data.$href("ical")},Purchase_Total.prototype.webcalLink=function(){return this._data.$href("ical")},Purchase_Total.prototype.gcalLink=function(){return this._data.$href("gcal")},Purchase_Total.prototype.getItems=function(){var defer;return defer=$q.defer(),this.items&&defer.resolve(this.items),$q.all([this.$getBookings(),this.$getCourseBookings(),this.getPackages(),this.getProducts(),this.getDeals()]).then(function(result){var items;return items=_.flatten(result),defer.resolve(items)}),defer.promise},Purchase_Total.prototype.$getBookings=function(){var defer;return defer=$q.defer(),this.bookings&&defer.resolve(this.bookings),this._data.$has("bookings")?this._data.$get("bookings").then(function(_this){return function(bookings){var b;return _this.bookings=function(){var i,len,results;for(results=[],i=0,len=bookings.length;len>i;i++)b=bookings[i],results.push(new BBModel.Purchase.Booking(b));return results}(),_this.bookings.sort(function(a,b){return a.datetime.unix()-b.datetime.unix()}),defer.resolve(_this.bookings)}}(this)):defer.resolve([]),defer.promise},Purchase_Total.prototype.$getCourseBookings=function(){var defer;return defer=$q.defer(),this.course_bookings&&defer.resolve(this.course_bookings),this._data.$has("course_bookings")?this._data.$get("course_bookings").then(function(_this){return function(bookings){var b;return _this.course_bookings=function(){var i,len,results;for(results=[],i=0,len=bookings.length;len>i;i++)b=bookings[i],results.push(new BBModel.Purchase.CourseBooking(b));return results}(),$q.all(_.map(_this.course_bookings,function(b){return b.getBookings()})).then(function(){return defer.resolve(_this.course_bookings)})}}(this)):defer.resolve([]),defer.promise},Purchase_Total.prototype.getPackages=function(){var defer;return defer=$q.defer(),this.packages&&defer.resolve(this.packages),this._data.$has("packages")?this._data.$get("packages").then(function(_this){return function(packages){return _this.packages=packages,defer.resolve(_this.packages)}}(this)):defer.resolve([]),defer.promise},Purchase_Total.prototype.getProducts=function(){var defer;return defer=$q.defer(),this.products&&defer.resolve(this.products),this._data.$has("products")?this._data.$get("products").then(function(_this){return function(products){return _this.products=products,defer.resolve(_this.products)}}(this)):defer.resolve([]),defer.promise},Purchase_Total.prototype.getDeals=function(){var defer;return defer=$q.defer(),this.deals&&defer.resolve(this.deals),this._data.$has("deals")?this._data.$get("deals").then(function(_this){return function(deals){return _this.deals=deals,defer.resolve(_this.deals)}}(this)):defer.resolve([]),defer.promise},Purchase_Total.prototype.getMessages=function(booking_texts,msg_type){var bt,defer;return defer=$q.defer(),booking_texts=function(){var i,len,results;for(results=[],i=0,len=booking_texts.length;len>i;i++)bt=booking_texts[i],bt.message_type===msg_type&&results.push(bt);return results}(),0===booking_texts.length?defer.resolve([]):this.getItems().then(function(items){var booking_text,i,item,j,k,len,len1,len2,msgs,ref,type;for(msgs=[],i=0,len=booking_texts.length;len>i;i++)for(booking_text=booking_texts[i],j=0,len1=items.length;len1>j;j++)for(item=items[j],ref=["company","person","resource","service"],k=0,len2=ref.length;len2>k;k++)type=ref[k],item.$has(type)&&item.$href(type)===booking_text.$href("item")&&-1===msgs.indexOf(booking_text.message)&&msgs.push(booking_text.message);return defer.resolve(msgs)}),defer.promise},Purchase_Total.prototype.getClient=function(){var defer;return defer=$q.defer(),this._data.$has("client")?this._data.$get("client").then(function(_this){return function(client){return _this.client=new BBModel.Client(client),defer.resolve(_this.client)}}(this)):defer.reject("No client"),defer.promise},Purchase_Total.prototype.getMember=function(){var defer;return defer=$q.defer(),this._data.$has("member")?this._data.$get("member").then(function(_this){return function(member){return _this.member=new BBModel.Client(member),defer.resolve(_this.member)}}(this)):defer.reject("No member"),defer.promise},Purchase_Total.prototype.getConfirmMessages=function(){var defer;return defer=$q.defer(),this._data.$has("confirm_messages")?this._data.$get("confirm_messages").then(function(_this){return function(msgs){return _this.getMessages(msgs,"Confirm").then(function(filtered_msgs){return defer.resolve(filtered_msgs)})}}(this)):defer.reject("no messages"),defer.promise},Purchase_Total.prototype.printed_total_price=function(){return parseFloat(this.total_price)%1===0?"£"+parseInt(this.total_price):$window.sprintf("£%.2f",parseFloat(this.total_price))},Purchase_Total.prototype.newPaymentUrl=function(){return this._data.$has("new_payment")?$sce.trustAsResourceUrl(this._data.$href("new_payment")):void 0},Purchase_Total.prototype.totalDuration=function(){var duration,i,item,len,ref;for(duration=0,ref=this.items,i=0,len=ref.length;len>i;i++)item=ref[i],item.duration&&(duration+=item.duration);return duration},Purchase_Total.prototype.containsWaitlistItems=function(){var i,item,len,ref,waitlist;for(waitlist=[],ref=this.items,i=0,len=ref.length;len>i;i++)item=ref[i],item.on_waitlist===!0&&waitlist.push(item);return waitlist.length>0},Purchase_Total}(BaseModel)}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("PurchaseBookingService",["$q","halClient","BBModel",function($q,halClient,BBModel){return{update:function(booking){var data,deferred;return deferred=$q.defer(),data=booking.getPostData(),booking.srcBooking.$put("self",{},data).then(function(_this){return function(booking){return deferred.resolve(new BBModel.Purchase.Booking(booking))}}(this),function(_this){return function(err){return deferred.reject(err,new BBModel.Purchase.Booking(booking))}}(this)),deferred.promise},addSurveyAnswersToBooking:function(booking){var data,deferred;return deferred=$q.defer(),data=booking.getPostData(),data.notify=!1,data.notify_admin=!1,booking.$put("self",{},data).then(function(_this){return function(booking){return deferred.resolve(new BBModel.Purchase.Booking(booking))}}(this),function(_this){return function(err){return deferred.reject(err,new BBModel.Purchase.Booking(booking))}}(this)),deferred.promise}}}])}.call(this),function(){"use strict";angular.module("BB.Services").factory("PurchaseService",["$q","halClient","BBModel","$window","UriTemplate",function($q,halClient,BBModel,$window,UriTemplate){return{query:function(params){var defer,uri;return defer=$q.defer(),uri=params.url_root+"/api/v1/purchases/"+params.purchase_id,halClient.$get(uri,params).then(function(purchase){return purchase=new BBModel.Purchase.Total(purchase),defer.resolve(purchase)},function(err){return defer.reject(err)}),defer.promise},bookingRefQuery:function(params){var defer,uri;return defer=$q.defer(),uri=new UriTemplate(params.url_root+"/api/v1/purchases/booking_ref/{booking_ref}{?raw}").fillFromObject(params),halClient.$get(uri,params).then(function(purchase){return purchase=new BBModel.Purchase.Total(purchase),defer.resolve(purchase)},function(err){return defer.reject(err)}),defer.promise},update:function(params){var bdata,booking,data,defer,i,j,len,len1,ref,ref1;if(defer=$q.defer(),!params.purchase)return defer.reject("No purchase present"),defer.promise;if(data={},params.bookings){for(bdata=[],ref=params.bookings,i=0,len=ref.length;len>i;i++)booking=ref[i],bdata.push(booking.getPostData());data.bookings=bdata}if(params.move_reason)for(ref1=data.bookings,j=0,len1=ref1.length;len1>j;j++)booking=ref1[j],booking.move_reason=params.move_reason;return params.purchase.$put("self",{},data).then(function(_this){return function(purchase){return purchase=new BBModel.Purchase.Total(purchase),defer.resolve(purchase)}}(this),function(_this){return function(err){return defer.reject(err)}}(this)),defer.promise},bookWaitlistItem:function(params){var data,defer,uri;return defer=$q.defer(),params.purchase||params.purchase_id||defer.reject("No purchase or purchase_id present"),data={},data.booking_id=params.booking.id,params.purchase?params.purchase.$put("book_waitlist_item",{},data).then(function(_this){return function(purchase){return purchase=new BBModel.Purchase.Total(purchase),defer.resolve(purchase)}}(this),function(err){return defer.reject(err)}):params.purchase_id&¶ms.url_root&&(uri=params.url_root+"/api/v1/purchases/"+params.purchase_id+"/book_waitlist_item",halClient.$put(uri,{},data).then(function(purchase){return purchase=new BBModel.Purchase.Total(purchase),defer.resolve(purchase)},function(err){return defer.reject(err)})),defer.promise},deleteAll:function(purchase){var defer;return defer=$q.defer(),purchase?(purchase.$del("self").then(function(purchase){return purchase=new BBModel.Purchase.Total(purchase),defer.resolve(purchase)},function(_this){return function(err){return defer.reject(err)}}(this)),defer.promise):(defer.reject("No purchase present"),defer.promise)},deleteItem:function(params){var defer,uri;return defer=$q.defer(),uri=params.api_url+"/api/v1/purchases/"+params.long_id+"/purchase_item/"+params.purchase_item_id,halClient.$del(uri,{}).then(function(purchase){return purchase=new BBModel.Purchase.Total(purchase),defer.resolve(purchase)},function(err){return defer.reject(err)}),defer.promise}}}])}.call(this),function(){"use strict";angular.module("BB.i18n").controller("bbLanguagePickerController",["bbLocale","$locale","$rootScope","tmhDynamicLocale","$translate","bbi18nOptions","$scope",function(bbLocale,$locale,$rootScope,tmhDynamicLocale,$translate,bbi18nOptions,$scope){"ngInject";var createLanguage,init,pickLanguage,setAvailableLanguages,setCurrentLanguage,vm;vm=this,vm.language=null,vm.availableLanguages=[],vm.enableSearch=!1,init=function(){setAvailableLanguages(),setCurrentLanguage(),$scope.$on("BBLanguagePicker:refresh",setCurrentLanguage),vm.pickLanguage=pickLanguage},setAvailableLanguages=function(){angular.forEach(bbi18nOptions.available_languages,function(languageKey){return vm.availableLanguages.push(createLanguage(languageKey))}),vm.enableSearch=vm.availableLanguages.length>=10},setCurrentLanguage=function(){tmhDynamicLocale.set(bbLocale.getLocale()).then(function(){vm.language={selected:createLanguage(bbLocale.getLocale())}})},createLanguage=function(languageKey){return{identifier:languageKey,label:"COMMON.LANGUAGE."+languageKey.toUpperCase()}},pickLanguage=function(languageKey){tmhDynamicLocale.set(languageKey).then(function(){bbLocale.setLocale(languageKey,"bbLanguagePicker.pickLanguage"),$rootScope.$broadcast("BBLanguagePicker:languageChanged")})},init()}])}.call(this),function(){"use strict";angular.module("BB.i18n").directive("bbLanguagePicker",function(){"ngInject";var link;return link=function(scope,element,attrs){scope.vm.availableLanguages.length<=1&&angular.element(element).addClass("hidden")},{controller:"bbLanguagePickerController",controllerAs:"vm",link:link,restrict:"A",scope:!0,templateUrl:"i18n/language_picker.html"}})}.call(this),function(){"use strict";angular.module("BB.i18n").provider("bbi18nOptions",function(){"ngInject";var options;options={default_language:"en",use_browser_language:!0,available_languages:["en","de","es","fr"],available_language_associations:{"en_*":"en","de_*":"de","es_*":"de","fr_*":"fr"}},this.setOption=function(option,value){options.hasOwnProperty(option)&&(options[option]=value)},this.getOption=function(option){return options.hasOwnProperty(option)?options[option]:void 0},this.$get=function(){return options}})}.call(this),function(){"use strict";angular.module("BB.i18n").service("bbLocale",["bbi18nOptions","$log","$translate","$window",function(bbi18nOptions,$log,$translate,$window){"ngInject";var _localeCompanyUsed,determineLocale,getLocale,isAvailable,setLocale,setLocaleUsingCountryCode;return _localeCompanyUsed=!1,determineLocale=function(){var URIParamLocale,browserLocale,defaultLocale;"undefined"!==$translate.use()&&angular.isDefined($translate.use())&&isAvailable($translate.use())?setLocale($translate.use(),"$translate.use() locale"):(browserLocale=$translate.negotiateLocale($translate.resolveClientLocale()),defaultLocale=bbi18nOptions.default_language,URIParamLocale=$window.getURIparam("locale"),URIParamLocale&&isAvailable(URIParamLocale)?setLocale(URIParamLocale,"URIParam locale"):bbi18nOptions.use_browser_language&&isAvailable(browserLocale)?setLocale(browserLocale,"browser locale"):setLocale(defaultLocale,"default locale")),$translate.preferredLanguage(getLocale())},setLocale=function(locale,setWith){null==setWith&&(setWith=""),isAvailable(locale)&&(moment.locale(locale),$translate.use(locale),locale===moment.locale()&&locale===$translate.use()||console.error("moment locale not available, preferred locale = "+locale+", moment.locale() = ",moment.locale(),"$translate.use() = ",$translate.use()))},isAvailable=function(locale){return-1!==bbi18nOptions.available_languages.indexOf(locale)},getLocale=function(){return $translate.use()},setLocaleUsingCountryCode=function(countryCode){var locale;_localeCompanyUsed||(_localeCompanyUsed=!0,countryCode&&countryCode.match(/^(gb|au)$/)&&(locale="en-"+countryCode,setLocale(locale,"countryCode")))},{determineLocale:determineLocale,getLocale:getLocale,setLocale:setLocale,setLocaleUsingCountryCode:setLocaleUsingCountryCode}}])}.call(this),function(){"use strict";angular.module("BB.i18n").provider("RuntimeTranslate",["$translateProvider",function($translateProvider){"ngInject";var translateProvider;translateProvider=$translateProvider,this.setProvider=function(provider){return translateProvider=provider},this.$get=function(){return translateProvider}}])}.call(this),function(){"use strict";angular.module("BB.i18n").config(["$translateProvider",function($translateProvider){"ngInject";var translations;translations={I18N:{LANGUAGE_PICKER:{SELECT_LANG_PLACEHOLDER:"Select..."}}},$translateProvider.translations("en",translations)}])}.call(this),function(angular){"use strict";var app=angular.module("BB.Directives");app.directive("appVersion",["version",function(version){return function(scope,elm,attrs){elm.text(version)}}])}(window.angular),function(){"use strict";angular.module("BB.Directives").directive("autofocus",["$timeout",function($timeout){return{restrict:"A",link:function(scope,element,attr){return $timeout(function(){return""===attr.autofocus||scope.$eval(attr.autofocus)?element[0].focus():void 0})}}}])}.call(this),angular.module("BB.Directives").directive("bbAccordionGroup",function(){return{require:"^accordion",restrict:"EA",transclude:!0,replace:!1,templateUrl:"accordion-group.html",scope:{heading:"@",isOpen:"=?",isDisabled:"=?"},controller:function(){this.setHeading=function(element){this.heading=element}},link:function(scope,element,attrs,accordionCtrl){accordionCtrl.addGroup(scope),scope.$watch("isOpen",function(value){value&&accordionCtrl.closeOthers(scope)}),scope.toggleOpen=function(){scope.isDisabled||(scope.isOpen=!scope.isOpen)}}}}).directive("bbAccordionHeading",function(){return{restrict:"EA",transclude:!0,template:"",replace:!0,require:"^bbAccordionGroup",link:function(scope,element,attr,accordionGroupCtrl,transclude){accordionGroupCtrl.setHeading(transclude(scope,function(){}))}}}).directive("bbAccordionTransclude",function(){return{require:"^bbAccordionGroup",link:function(scope,element,attr,controller){scope.$watch(function(){return controller[attr.bbAccordionTransclude]},function(heading){heading&&(element.html(""),element.append(heading))})}}}),function(){angular.module("BB.Controllers").controller("AccordionRangeGroup",["$scope","$attrs","$rootScope","$q","FormDataStoreService","GeneralOptions","DateTimeUtilitiesService","$translate","CompanyStoreService",function($scope,$attrs,$rootScope,$q,FormDataStoreService,GeneralOptions,DateTimeUtilitiesService,$translate,CompanyStoreService){var hasAvailability,setData,updateAvailability;return $scope.$watch("slots",function(){return setData()}),$rootScope.connection_started.then(function(){return $scope.init()}),$scope.setFormDataStoreId=function(id){return FormDataStoreService.init("AccordionRangeGroup"+id,$scope,[])},$scope.init=function(){return $scope.start_time=$scope.options.range[0],$scope.end_time=$scope.options.range[1],$scope.options.collapse_when_time_selected=_.isBoolean($scope.options.collapse_when_time_selected)?$scope.options.collapse_when_time_selected:!0,$scope.options.hide_availability_summary=_.isBoolean($scope.options.hide_availability_summary)?$scope.options.hide_availability_summary:!1,$scope.heading=$translate.instant($scope.options.heading),setData()},setData=function(){return $scope.accordion_slots=[],$scope.is_open=$scope.is_open||!1,$scope.has_availability=$scope.has_availability||!1,$scope.is_selected=$scope.is_selected||!1,$scope.slots?(angular.forEach($scope.slots,function(slot){var datetime,slot_time;return null!=GeneralOptions.display_time_zone&&GeneralOptions.display_time_zone!==CompanyStoreService.time_zone?(datetime=moment(slot.datetime).tz(GeneralOptions.display_time_zone),slot_time=DateTimeUtilitiesService.convertMomentToTime(datetime)):slot_time=slot.time,slot_time>=$scope.start_time&&slot_time<$scope.end_time&&1===slot.avail?$scope.accordion_slots.push(slot):void 0}),updateAvailability()):void 0},updateAvailability=function(day,slot){var datetime,i,j,len,len1,ref,ref1,relevent_slot,slot_time,times;if($scope.selected_slot=null,$scope.accordion_slots&&($scope.has_availability=hasAvailability()),$scope.disabled_slot&&$scope.disabled_slot.time&&$scope.disabled_slot.date===$scope.day.date.toISODate())if(Array.isArray($scope.disabled_slot.time))for(ref=$scope.disabled_slot.time,i=0,len=ref.length;len>i;i++)times=ref[i],relevent_slot=_.findWhere($scope.slots,{time:times}),relevent_slot&&(relevent_slot.disabled=!0);else relevent_slot=_.findWhere($scope.slots,{time:$scope.disabled_slot.time}),relevent_slot&&(relevent_slot.disabled=!0);if(day&&slot)null!=GeneralOptions.display_time_zone&&GeneralOptions.display_time_zone!==CompanyStoreService.time_zone?(datetime=moment(slot.datetime).tz(GeneralOptions.display_time_zone),slot_time=DateTimeUtilitiesService.convertMomentToTime(datetime)):slot_time=slot.time,day.date.isSame($scope.day.date)&&slot_time>=$scope.start_time&&slot_time<$scope.end_time&&($scope.selected_slot=slot);else for(ref1=$scope.accordion_slots,j=0,len1=ref1.length;len1>j;j++)if(slot=ref1[j],slot.selected){$scope.selected_slot=slot;break}if($scope.selected_slot){if($scope.hideHeading=!0,$scope.is_selected=!0,$scope.options.collapse_when_time_selected)return $scope.is_open=!1}else if($scope.is_selected=!1,$scope.options.collapse_when_time_selected)return $scope.is_open=!1},hasAvailability=function(){var i,len,ref,slot;if(!$scope.accordion_slots)return!1;for(ref=$scope.accordion_slots,i=0,len=ref.length;len>i;i++)if(slot=ref[i],slot.availability()>0)return!0;return!1},$scope.$on("slotChanged",function(event,day,slot){return day&&slot?updateAvailability(day,slot):updateAvailability()})}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbAccordionRangeGroup",["PathSvc",function(PathSvc){return{restrict:"AE",replace:!1,scope:{day:"=",slots:"=",selectSlot:"=",disabled_slot:"=disabledSlot"},controller:"AccordionRangeGroup",link:function(scope,element,attrs){return scope.options=scope.$eval(attrs.bbAccordionRangeGroup)||{}},templateUrl:function(element,attrs){return PathSvc.directivePartial("_accordion_range_group")}}}])}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("AddressList",["$scope","$rootScope","$filter","$sniffer","FormDataStoreService","LoadingService","BBModel",function($scope,$rootScope,$filter,$sniffer,FormDataStoreService,LoadingService,BBModel){var loader;return $scope.manual_postcode_entry=!1,loader=LoadingService.$loader($scope),FormDataStoreService.init("AddressList",$scope,["show_complete_address"]),$rootScope.connection_started.then(function(_this){return function(){return $scope.client.postcode&&!$scope.bb.postcode&&($scope.bb.postcode=$scope.client.postcode),$scope.client.postcode&&$scope.bb.postcode&&$scope.client.postcode===$scope.bb.postcode&&!$scope.bb.address1&&($scope.bb.address1=$scope.client.address1,$scope.bb.address2=$scope.client.address2,$scope.bb.address3=$scope.client.address3,$scope.bb.address4=$scope.client.address4,$scope.bb.address5=$scope.client.address5),$scope.manual_postcode_entry=!$scope.bb.postcode,$scope.show_complete_address=!!$scope.bb.address1,$scope.postcode_submitted?void 0:($scope.findByPostcode(),$scope.postcode_submitted=!1)}}(this),function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}),$scope.findByPostcode=function(){return $scope.postcode_submitted=!0,$scope.bb.postcode?(loader.notLoaded(),BBModel.Address.$query({company:$scope.bb.company,post_code:$scope.bb.postcode}).then(function(response){var addressArr,newaddr;addressArr=angular.isArray(response)?_.map(response,function(item,i){return{address:item.partialAddress,moniker:item.moniker}}):[{address:response.partialAddress,moniker:response.moniker}],1===addressArr.length&&$sniffer.msie&&(newaddr=[],newaddr.push(addressArr[0]),newaddr.push({address:""}),addressArr=newaddr),$scope.addresses=addressArr,$scope.bb.address=addressArr[0],$scope.client.address=addressArr[0],loader.setLoaded()},function(err){return $scope.show_complete_address=!0,$scope.postcode_submitted=!0,loader.setLoaded()})):void 0},$scope.showCompleteAddress=function(){return $scope.show_complete_address=!0,$scope.postcode_submitted=!1,$scope.bb.address&&$scope.bb.address.moniker?(loader.notLoaded(),BBModel.Address.$getAddress({company:$scope.bb.company,id:$scope.bb.address.moniker}).then(function(response){var address,address2,address3,addressLine2,building_number,house_number,streetName;address=response,house_number="","string"==typeof address.buildingNumber?house_number=address.buildingNumber:null==address.buildingNumber&&(house_number=address.buildingName),"string"==typeof address.streetName?(streetName=address.streetName?address.streetName:"",$scope.bb.address1=house_number+" "+streetName):(addressLine2=address.addressLine2?address.addressLine2:"",$scope.bb.address1=house_number+" "+addressLine2),address.buildingName&&null==address.buildingNumber&&($scope.bb.address1=house_number,$scope.bb.address2=address.streetName,null!=address.county&&($scope.bb.address4=address.county)),"string"==typeof address.buildingNumber&&"string"==typeof address.buildingName&&"string"==typeof address.streetName&&(streetName=address.streetName?address.streetName:"",$scope.bb.address1=address.buildingName,$scope.bb.address2=address.buildingNumber+" "+streetName),null!=address.buildingName&&address.buildingName.match(/(^[^0-9]+$)/)&&(building_number=address.buildingNumber?address.buildingNumber:"",$scope.bb.address1=address.buildingName+" "+building_number,$scope.bb.address2=address.streetName),null==address.buildingNumber&&null==address.streetName&&($scope.bb.address1=address.buildingName,$scope.bb.address2=address.addressLine3,$scope.bb.address4=address.town),null!=address.companyName&&($scope.bb.address1=address.companyName,null==address.buildingNumber&&null==address.streetName?$scope.bb.address2=address.addressLine3:null==address.buildingNumber?(address2=address.buildingName?address.buildingName+", "+address.streetName:address.streetName,$scope.bb.address2=address2):null==address.buildingName&&null==address.addressLine2?$scope.bb.address2=address.buildingNumber+", "+address.streetName:$scope.bb.address2=address.buildingName,$scope.bb.address3=address.buildingName,address3=address.addressLine3&&null!=address.buildingNumber?address.addressLine3:null==address.addressLine2&&null!=address.buildingNumber?address.buildingNumber+" "+address.streetName:null==address.addressLine2&&null==address.buildingNumber&&null!=address.buildingName?address.addressLine3:"",$scope.bb.address3=address3,$scope.bb.address4=address.town,$scope.bb.address5="",$scope.bb.postcode=address.postCode),null==address.buildingName&&null==address.companyName&&null==address.county?(address2=null==address.addressLine2&&null==address.companyName?address.addressLine3:address.addressLine2,$scope.bb.address2=address2):null==address.buildingName&&null==address.companyName&&($scope.bb.address2=address.addressLine3),null!=address.buildingName&&null!=address.streetName&&null==address.companyName&&null!=address.addressLine3?null==address.addressLine3?$scope.bb.address3=address.buildingName:$scope.bb.address3=address.addressLine3:null==address.buildingName&&null==address.companyName&&null!=address.addressLine2?$scope.bb.address3=address.addressLine3:null==address.buildingName&&null!=address.streetName&&null==address.addressLine3&&($scope.bb.address3=address.addressLine3),$scope.bb.address4=address.town,null!=address.county&&($scope.bb.address5=address.county),loader.setLoaded()},function(err){return $scope.show_complete_address=!0,$scope.postcode_submitted=!1,loader.setLoadedAndShowError(err,"Sorry, something went wrong")})):void 0},$scope.setManualPostcodeEntry=function(value){return $scope.manual_postcode_entry=value},$scope.$on("client_details:reset_search",function(event){return $scope.bb.address1=null,$scope.bb.address2=null,$scope.bb.address3=null,$scope.bb.address4=null,$scope.bb.address5=null,$scope.show_complete_address=!1,$scope.postcode_submitted=!1,$scope.bb.address=$scope.addresses[0]})}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbAddresses",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"AddressList"}})}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbAttendees",function(){return{restrict:"AE",replace:!0,scope:!0,controller:["$scope","$rootScope","$q","PurchaseService","AlertService","ValidatorService","LoadingService","BBModel",function($scope,$rootScope,$q,PurchaseService,AlertService,ValidatorService,LoadingService,BBModel){var initialise,loader,updateBooking;return $scope.validator=ValidatorService,loader=LoadingService.$loader($scope),$rootScope.connection_started.then(function(){return initialise()}),initialise=function(){return $scope.items=$scope.bb.basket.timeItems()},updateBooking=function(){var deferred,params;return deferred=$q.defer(),params={purchase:$scope.bb.moving_purchase,bookings:$scope.bb.basket.items,notify:!0},PurchaseService.update(params).then(function(purchase){return $scope.bb.purchase=purchase,loader.setLoaded(),$scope.bb.current_item.move_done=!0,$rootScope.$broadcast("booking:updated"),deferred.resolve()},function(err){return deferred.reject()}),deferred.promise},$scope.markItemAsChanged=function(item){return item.attendee_changed=!0},$scope.changeAttendees=function(){var client,client_promises,deferred,i,item,len,ref;if(!$scope.bb.current_item.ready||!$scope.bb.moving_purchase)return!1;for(deferred=$q.defer(),loader.notLoaded(),client_promises=[],ref=$scope.items,i=0,len=ref.length;len>i;i++)item=ref[i],item.attendee_changed?(client=new BBModel.Client,client.first_name=item.first_name,client.last_name=item.last_name,client_promises.push(BBModel.Client.$create_or_update($scope.bb.company,client))):client_promises.push($q.when([]));return $q.all(client_promises).then(function(result){var index,j,len1,ref1;for(ref1=$scope.items,index=j=0,len1=ref1.length;len1>j;index=++j)item=ref1[index],result[index]&&result[index].id&&(item.client_id=result[index].id);return updateBooking().then(function(){return $scope.$parent.$has_page_control?deferred.resolve():($scope.decideNextPage("purchase"),AlertService.raise("ATTENDEES_CHANGED"),deferred.resolve())},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")})}),deferred.promise},$scope.setReady=function(){return $scope.changeAttendees()}}]}})}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("Breadcrumbs",["$scope",function($scope){var atDisablePoint,currentStep,lastStep,loadStep;return loadStep=$scope.loadStep,$scope.steps=$scope.bb.steps,$scope.allSteps=$scope.bb.allSteps,$scope.loadStep=function(number){return lastStep()||currentStep(number)||atDisablePoint()?void 0:loadStep(number)},lastStep=function(){return $scope.bb.current_step===$scope.bb.allSteps.length},currentStep=function(step){return step===$scope.bb.current_step},atDisablePoint=function(){return angular.isDefined($scope.bb.disableGoingBackAtStep)?$scope.bb.current_step>=$scope.bb.disableGoingBackAtStep:!1},$scope.isDisabledStep=function(step){return!(!lastStep()&&!currentStep(step.number)&&step.passed&&!atDisablePoint())}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbBreadcrumb",["PathSvc",function(PathSvc){return{restrict:"A",replace:!0,scope:!0,controller:"Breadcrumbs",templateUrl:function(element,attrs){return _.has(attrs,"complex")?PathSvc.directivePartial("_breadcrumb_complex"):PathSvc.directivePartial("_breadcrumb")},link:function(scope){}}}])}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("BulkPurchase",["$scope","$rootScope","BBModel",function($scope,$rootScope,BBModel){return $rootScope.connection_started.then(function(){return $scope.bb.company?$scope.init($scope.bb.company):void 0}),$scope.init=function(company){return $scope.booking_item||($scope.booking_item=$scope.bb.current_item),BBModel.BulkPurchase.$query(company).then(function(bulk_purchases){return $scope.bulk_purchases=bulk_purchases})},$scope.selectItem=function(item,route){return $scope.$parent.$has_page_control?($scope.bulk_purchase=item,!1):($scope.booking_item.setBulkPurchase(item),$scope.decideNextPage(route),!0)},$scope.setReady=function(_this){return function(){return $scope.bulk_purchase?($scope.booking_item.setBulkPurchase($scope.bulk_purchase),!0):!1}}(this)}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbBulkPurchases",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"BulkPurchase"}})}.call(this),function(){"use strict";var app;app=angular.module("BB.Directives"),app.directive("bbContentNew",["PathSvc",function(PathSvc){return{restrict:"A",replace:!0,scope:!0,templateUrl:PathSvc.directivePartial("content_main"),controller:["$scope",function($scope){$scope.initPage=function(){return $scope.$eval("setPageLoaded()")}}]}}])}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("CustomBookingText",["$scope","$rootScope","$q","CustomTextService","LoadingService",function($scope,$rootScope,$q,CustomTextService,LoadingService){var loader;return loader=LoadingService.$loader($scope).notLoaded(),$rootScope.connection_started.then(function(_this){return function(){return CustomTextService.BookingText($scope.bb.company,$scope.bb.current_item).then(function(msgs){return $scope.messages=msgs,loader.setLoaded()},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")})}}(this),function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")})}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbCustomBookingText",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"CustomBookingText"}})}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("CustomConfirmationText",["$scope","$rootScope","CustomTextService","$q","PageControllerService","LoadingService",function($scope,$rootScope,CustomTextService,$q,PageControllerService,LoadingService){
var loader;return loader=LoadingService.$loader($scope).notLoaded(),$rootScope.connection_started.then(function(){return $scope.loadData()},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}),$scope.loadData=function(_this){return function(){return $scope.total?CustomTextService.confirmationText($scope.bb.company,$scope.total).then(function(msgs){return $scope.messages=msgs,loader.setLoaded()},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}):$scope.loadingTotal?$scope.loadingTotal.then(function(total){return CustomTextService.confirmationText($scope.bb.company,total).then(function(msgs){return $scope.messages=msgs,loader.setLoaded()},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")})},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}):loader.setLoaded()}}(this)}])}.call(this),function(){angular.module("BB.Directives").directive("bbCustomConfirmationText",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"CustomConfirmationText"}})}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbDateTimePicker",["PathSvc",function(PathSvc){return{scope:{date:"=",showMeridian:"=?",minuteStep:"=?",minDate:"=?",maxDate:"=?",format:"=?",dateOnly:"=?",bbDisabled:"=?"},restrict:"A",templateUrl:"bb_date_time_picker.html",controller:["$scope","$filter","$timeout","GeneralOptions",function($scope,$filter,$timeout,GeneralOptions){var clearTimezone;return null==$scope.format&&($scope.format="dd/MM/yyyy"),null==$scope.bbDisabled&&($scope.bbDisabled=!1),$scope.minuteStep&&"undefined"!=typeof $scope.minuteStep||($scope.minuteStep=GeneralOptions.calendar_minute_step),$scope.showMeridian&&"undefined"!=typeof $scope.showMeridian||($scope.showMeridian=GeneralOptions.twelve_hour_format),$scope.$watch("datetimeWithNoTz",function(newValue,oldValue){var assembledDate;return null!=newValue&&moment(newValue).isValid()&&newValue.getTime()!==oldValue.getTime()?(assembledDate=moment(),assembledDate.set({year:parseInt(newValue.getFullYear()),month:parseInt(newValue.getMonth()),date:parseInt(newValue.getDate()),hour:parseInt(newValue.getHours()),minute:parseInt(newValue.getMinutes()),second:0,milliseconds:0}),$scope.date=assembledDate):void 0}),clearTimezone=function(date){var newDate;return null!=date&&moment(date).isValid()?(date=moment(date),newDate=new Date,newDate.setFullYear(date.year()),newDate.setMonth(date.month()),newDate.setDate(date.date()),newDate.setHours(date.hours()),newDate.setMinutes(date.minutes()),newDate.setSeconds(0),newDate.setMilliseconds(0),newDate):void 0},$scope.datetimeWithNoTz=clearTimezone($scope.date),$scope.$watch("date",function(newValue,oldValue){return newValue!==oldValue&&clearTimezone(newValue)!==oldValue?$scope.datetimeWithNoTz=clearTimezone(newValue):void 0}),$scope.$watch("minDate",function(newValue,oldValue){return newValue!==oldValue?$scope.minDateClean=clearTimezone(newValue):void 0}),$scope.$watch("maxDate",function(newValue,oldValue){return newValue!==oldValue?$scope.maxDateClean=clearTimezone(newValue):void 0}),$scope.minDateClean=clearTimezone($scope.minDate),$scope.maxDateClean=clearTimezone($scope.maxDate)}]}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbDatepickerPopup",["$parse","$document","$timeout","$bbug","CompanyStoreService","viewportSize",function($parse,$document,$timeout,$bbug,CompanyStoreService,viewportSize){var e,error,ie8orLess;ie8orLess=!1;try{ie8orLess=window.parseInt(/MSIE\s*(\d)/.exec(window.navigator.userAgent)[1])}catch(error){e=error,ie8orLess=!1}return{restrict:"A",priority:-1,require:"ngModel",link:function(scope,element,attrs,ngModel){var callDateHandler,data,dateFormat,format,getTimeRangeScope,getter,origDateParser,replacementDateParser,timeRangeScope,yearNow;return origDateParser=null,data=element.controller("ngModel"),null!=attrs.uibDatepickerPopup&&(format={date_us:"MM/dd/yyyy",date_uk:"dd/MM/yyyy"},"us"===CompanyStoreService.country_code?attrs.uibDatepickerPopup=format.date_us:attrs.uibDatepickerPopup=format.date_uk),dateFormat=attrs.bbDatepickerPopup?attrs.bbDatepickerPopup:"DD/MM/YYYY",yearNow=moment(new Date).year(),getter=$parse(attrs.ngModel),timeRangeScope=scope,getTimeRangeScope=function(scope){return scope?scope.controller&&scope.controller.indexOf("TimeRangeList")>0?timeRangeScope=scope:getTimeRangeScope(scope.$parent):void 0},getTimeRangeScope(scope),ie8orLess&&$bbug(element).on("keydown keyup keypress",function(ev){return ev.preventDefault(),ev.stopPropagation()}),(ie8orLess||viewportSize.isXS())&&$bbug(element).attr("readonly","true"),$bbug(element).on("keydown",function(e){return 13===e.keyCode?(replacementDateParser($bbug(e.target).val(),!0),$document.trigger("click"),$bbug(element).blur()):void 0}),$bbug(element).on("click",function(e){return e.preventDefault(),e.stopPropagation(),$timeout(function(){return scope.opened=!0})}),$bbug(element).on("focus",function(){return $(this).attr("readonly")?this.blur():void 0}),callDateHandler=function(date){var isDate,watch;return watch=scope.$watch(getter,function(newVal,oldVal){return newVal?void 0:getter.assign(timeRangeScope,date)}),$timeout(watch,0),isDate=_.isDate(date),isDate&&(getter.assign(timeRangeScope,date),ngModel.$setValidity("date",!0),scope.$eval(attrs.onDateChange)),isDate},replacementDateParser=function(viewValue,returnKey){var mDate;return callDateHandler(viewValue)?viewValue:ie8orLess?viewValue:(mDate=moment(viewValue,dateFormat),mDate.isValid()||(mDate=moment(new Date)),/\/YY$/.test(dateFormat)&&(dateFormat+="YY"),0===mDate.year()&&mDate.year(yearNow),viewValue=mDate.format("MM/DD/YYYY"),viewValue=viewValue.replace(/\/00/,"/20"),/\/02\d{2}$/.test(viewValue)?void 0:returnKey?(2===mDate.year().toString().length&&mDate.year(mDate.year()+2e3),callDateHandler(mDate._d)):origDateParser.call(this,viewValue))}}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbFbLogin",["LoginService","$rootScope","AlertService","$window",function(LoginService,$rootScope,AlertService,$window){return{restrict:"A",scope:!0,link:function(scope,element,attrs){var checkLoginState,loginToBBWithFBUser,options,statusChangeCallback;return options=scope.$eval(attrs.bbFbLogin)||{},$rootScope.connection_started.then(function(){return checkLoginState()}),statusChangeCallback=function(response){var params;"connected"===response.status?(params={},params.access_token=response.authResponse.accessToken,options.login_only&&(params.login_only=options.login_only),loginToBBWithFBUser(params)):"not_authorized"===response.status?scope.loginFB():scope.loginFB()},checkLoginState=function(){FB.getLoginStatus(function(response){statusChangeCallback(response)})},loginToBBWithFBUser=function(params){return LoginService.FBLogin(scope.bb.company,params).then(function(member){return $rootScope.member=member,scope.setClient($rootScope.member),scope.bb.destination?scope.redirectTo(scope.bb.destination):(scope.setLoaded(scope),scope.decideNextPage())},function(err){return"FACEBOOK-LOGIN-MEMBER-NOT-FOUND"===err.data.error?AlertService.raise("FB_LOGIN_NOT_A_MEMBER"):AlertService.raise("LOGIN_FAILED")})},scope.loginFB=function(){return FB.login(function(response){var params;"connected"===response.status?(params={},params.access_token=response.authResponse.accessToken,options.login_only&&(params.login_only=options.login_only),loginToBBWithFBUser(params)):"not_authorized"===response.status?AlertService.raise("LOGIN_FAILED"):AlertService.raise("LOGIN_FAILED")},{scope:"public_profile,email"})}}}}])}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("DealList",["$scope","$rootScope","$uibModal","$document","AlertService","FormDataStoreService","ValidatorService","LoadingService","BBModel","$translate",function($scope,$rootScope,$uibModal,$document,AlertService,FormDataStoreService,ValidatorService,LoadingService,BBModel,$translate){var ModalInstanceCtrl,init,loader;return FormDataStoreService.init("DealList",$scope,["deals"]),loader=LoadingService.$loader($scope).notLoaded(),$rootScope.connection_started.then(function(){return init()},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}),init=function(){var deal_promise;return loader.notLoaded(),$scope.deals?void 0:(deal_promise=BBModel.Deal.$query($scope.bb.company),deal_promise.then(function(deals){return $scope.deals=deals,loader.setLoaded()}))},$scope.selectDeal=function(deal){var iitem,modalInstance;return iitem=new BBModel.BasketItem(null,$scope.bb),iitem.setDefaults($scope.bb.item_defaults),iitem.setDeal(deal),$scope.bb.company_settings.no_recipient?(loader.notLoaded(),$scope.setBasketItem(iitem),$scope.addItemToBasket().then(function(){return loader.setLoaded()},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")})):(modalInstance=$uibModal.open({templateUrl:$scope.getPartial("_add_recipient"),scope:$scope,controller:ModalInstanceCtrl,resolve:{item:function(){return iitem}}}),modalInstance.result.then(function(item){return loader.notLoaded(),$scope.setBasketItem(item),$scope.addItemToBasket().then(function(){return loader.setLoaded()},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")})}))},ModalInstanceCtrl=function($scope,$uibModalInstance,item,ValidatorService){return $scope.item=item,$scope.recipient=!1,$scope.addToBasket=function(form){return ValidatorService.validateForm(form)?$uibModalInstance.close($scope.item):void 0},$scope.cancel=function(){return $uibModalInstance.dismiss("cancel")}},$scope.purchaseDeals=function(){return $scope.bb.basket.items&&$scope.bb.basket.items.length>0?$scope.decideNextPage():AlertService.add("danger",{msg:$translate.instant("PUBLIC_BOOKING.DEAL_LIST.CERT_NOT_SELECTED_ALERT")})},$scope.setReady=function(){return $scope.bb.basket.items&&$scope.bb.basket.items.length>0?!0:AlertService.add("danger",{msg:$translate.instant("PUBLIC_BOOKING.DEAL_LIST.CERT_NOT_SELECTED_ALERT")})}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbDeals",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"DealList"}})}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("FileUpload",["$scope","Upload",function($scope,Upload){return $scope.uploadFile=function(item,file,err_files,existing){var accepted_files,att_id,file_is_valid,method,onError,onProgress,onSuccess,url;return $scope.err_file=err_files&&err_files[0],$scope.show_error=!1,$scope.file_type_error=!1,$scope.my_file=file,accepted_files=$scope.accept.replace(/\'/g,"").split(","),file_is_valid=file&&(0<=accepted_files.indexOf(file.type)||0<=file.type.indexOf("image")),file_is_valid?(att_id=existing?existing:null,method="POST",att_id&&(method="PUT"),url=item.$href("add_attachment"),onSuccess=function(response){return file.result=response.data,item.attachment=response.data,item.attachment_id=response.data.id,file.progress=100},onError=function(response){return $scope.show_error=!0,file.progress=100},onProgress=function(evt){return file.progress=Math.min(100,parseInt(99*evt.loaded/evt.total))},Upload.rename(file,file.name.replace(/[^\x00-\x7F]/g,"")),file.upload=Upload.upload({url:url,method:method,data:{attachment_id:att_id},file:file}),file.upload.then(onSuccess,onError,onProgress)):file_is_valid===!1?$scope.file_type_error=!0:void 0}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbFileUpload",function(){return{restrict:"A",replace:!1,scope:{accept:"@",prettyAccept:"@",maxSize:"@",item:"="},controller:"FileUpload",templateUrl:"file_upload.html"}})}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbIntTelNumber",["$parse",function($parse){return{restrict:"A",require:"ngModel",link:function(scope,element,attrs,ctrl){var format,isValid,options,parse;return options=scope.$eval(attrs.bbIntTelNumber),element.intlTelInput(options),isValid=function(value){return value?element.intlTelInput("isValidNumber"):!0},format=function(value){var str;return str="",null!=scope.$eval(attrs.ngModel+"_prefix")&&(str+="+"+scope.$eval(attrs.ngModel+"_prefix")+" "),null!=scope.$eval(attrs.ngModel)&&(str+=scope.$eval(attrs.ngModel)),"+"===str[0]&&(element.intlTelInput("setNumber","+"+scope.$eval(attrs.ngModel+"_prefix")+" "+scope.$eval(attrs.ngModel)),ctrl.$setValidity("phone",isValid(value))),str},parse=function(value){var getter,prefix;return prefix=element.intlTelInput("getSelectedCountryData").dialCode,getter=$parse(attrs.ngModel+"_prefix"),getter.assign(scope,prefix),ctrl.$setValidity("phone",isValid(value)),value},ctrl.$formatters.push(format),ctrl.$parsers.push(parse)}}}])}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("GetAvailability",["$scope","$element","$attrs","$rootScope","$q","TimeService","AlertService","BBModel","halClient",function($scope,$element,$attrs,$rootScope,$q,TimeService,AlertService,BBModel,halClient){return $scope.loadAvailability=function(_this){return function(prms){var service;return service=halClient.$get($scope.bb.api_url+"/api/v1/"+prms.company_id+"/services/"+prms.service),service.then(function(serv){var eday,sday;return $scope.earliest_day=null,sday=moment(),eday=moment().add(30,"days"),serv.$get("days",{date:sday.toISOString(),edate:eday.toISOString()}).then(function(res){var day,i,len,ref,results;for(ref=res.days,results=[],i=0,len=ref.length;len>i;i++)day=ref[i],day.spaces>0&&!$scope.earliest_day?($scope.earliest_day=moment(day.date),day.first?results.push($scope.earliest_day.add(day.first,"minutes")):results.push(void 0)):results.push(void 0);return results})})}}(this)}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbGetAvailability",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"GetAvailability",link:function(scope,element,attrs){attrs.bbGetAvailability&&scope.loadAvailability(scope.$eval(attrs.bbGetAvailability))}}})}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbFormDataStore",["FormDataStoreService",function(FormDataStoreService){return{require:"?bbWidget",link:function(scope){return FormDataStoreService.register(scope)}}}])}.call(this),function(){"use strict";var app;app=angular.module("BB.Directives"),app.directive("bbLoader",["$rootScope","$compile","PathSvc","TemplateSvc",function($rootScope,$compile,PathSvc,TemplateSvc){return{restrict:"A",replace:!1,scope:{},controllerAs:"LoaderCtrl",controller:["$scope",function($scope){var addScopeId,hideLoader,parentScopeId,removeScopeId,scopeIdArr,showLoader;parentScopeId=$scope.$parent.$id,scopeIdArr=[],addScopeId=function(id){scopeIdArr.push(id),scopeIdArr=_.uniq(scopeIdArr)},removeScopeId=function(id){return scopeIdArr=_.without(scopeIdArr,id),scopeIdArr.length},showLoader=function(e,cscope){var sid;for(sid=cscope.$id;cscope;){if(cscope.$id===parentScopeId){addScopeId(sid),$scope.scopeLoaded=!1;break}cscope=cscope.$parent}},hideLoader=function(e,cscope){removeScopeId(cscope.$id)||($scope.scopeLoaded=!0)},$rootScope.$on("show:loader",showLoader),$rootScope.$on("hide:loader",hideLoader),$scope.scopeLoaded=!1}],link:function(scope,element,attrs){TemplateSvc.get(PathSvc.directivePartial("loader")).then(function(html){var str;_.isString(attrs.bbLoader)&&(str=attrs.bbLoader.slice(1),/^#/.test(attrs.bbLoader)?html.attr("id",str):/^\./.test(attrs.bbLoader)&&html.addClass(str)),element.prepend(html),$compile(html)(scope)})}}}]),app.directive("bbLoadingSpinner",["$compile",function($compile){return{transclude:!0,link:function(scope,element,attrs,controller,transclude){var loadingScopes;return loadingScopes={},scope.isLoading=!1,scope.$on("isLoading",function(event,isLoading){return event.stopPropagation(),loadingScopes[event.targetScope.$id]=isLoading,scope.isLoading=_.every(_.values(loadingScopes))})},template:'<div ng-show="isLoading" class="loader-wrapper">\n <div class="loader"></div>\n</div>\n<div ng-transclude></div>'}}])}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("Login",["$scope","$rootScope","$q","$location","LoginService","ValidatorService","AlertService","LoadingService","BBModel",function($scope,$rootScope,$q,$location,LoginService,ValidatorService,AlertService,LoadingService,BBModel){var loader;return $scope.validator=ValidatorService,$scope.login_form={},loader=LoadingService.$loader($scope),$scope.login_sso=function(token,route){return $rootScope.connection_started.then(function(_this){return function(){return LoginService.ssoLogin({company_id:$scope.bb.company.id,root:$scope.bb.api_url},{token:token}).then(function(member){return route?$scope.showPage(route):void 0},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")})}}(this),function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")})},$scope.login_with_password=function(email,password){return LoginService.companyLogin($scope.bb.company,{},{email:email,password:password}).then(function(_this){return function(member){return $scope.member=new BBModel.Member.Member(member)}}(this),function(_this){return function(err){return AlertService.raise("LOGIN_FAILED")}}(this))},$scope.showEmailPasswordReset=function(_this){return function(){return $scope.showPage("email_reset_password")}}(this),$scope.isLoggedIn=function(){return LoginService.isLoggedIn()},$scope.sendPasswordReset=function(email){return LoginService.sendPasswordReset($scope.bb.company,{email:email,custom:!0}).then(function(){return AlertService.raise("PASSWORD_RESET_REQ_SUCCESS")},function(_this){return function(err){return AlertService.raise("PASSWORD_RESET_REQ_FAILED")}}(this))},$scope.updatePassword=function(new_password,confirm_new_password){return AlertService.clear(),$rootScope.member&&new_password&&confirm_new_password&&new_password===confirm_new_password?LoginService.updatePassword($rootScope.member,{new_password:new_password,confirm_new_password:confirm_new_password,persist_login:$scope.login_form.persist_login}).then(function(_this){return function(member){return member?($scope.setClient(member),$scope.password_updated=!0,AlertService.raise("PASSWORD_RESET_SUCESS")):void 0}}(this),function(_this){return function(err){return $scope.error=err,AlertService.raise("PASSWORD_RESET_FAILED")}}(this)):AlertService.raise("PASSWORD_MISMATCH")}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbLogin",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"Login"}})}.call(this),function(){}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbMembershipLevels",["$rootScope","BBModel",function($rootScope,BBModel){return{restrict:"AE",replace:!0,scope:!0,controller:["$scope","$element","$attrs","LoadingService",function($scope,$element,$attrs,LoadingService){var checkClientDefaults,loader;return loader=LoadingService.$loader($scope),$rootScope.connection_started.then(function(){return $scope.initialise()}),$scope.initialise=function(){return $scope.bb.company&&$scope.bb.company.$has("member_levels")?(loader.notLoaded(),BBModel.MembershipLevels.$getMembershipLevels($scope.bb.company).then(function(member_levels){return loader.setLoaded(),$scope.membership_levels=member_levels},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")})):void 0},$scope.selectMemberLevel=function(level){return level&&$scope.client&&($scope.client.member_level_id=level.id,!$scope.$parent.$has_page_control)?$scope.decideNextPage():void 0},checkClientDefaults=function(){var i,len,membership_level,ref,results;if($scope.bb.client_defaults.membership_ref){for(ref=$scope.membership_levels,results=[],i=0,len=ref.length;len>i;i++)membership_level=ref[i],membership_level.name===$scope.bb.client_defaults.membership_ref?results.push($scope.selectMemberLevel(membership_level)):results.push(void 0);return results}},$scope.setReady=function(){return!!$scope.client.member_level_id},$scope.getMembershipLevel=function(member_level_id){return _.find($scope.membership_levels,function(level){return level.id===member_level_id})}}]}}])}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("MonthCalendar",["$scope","$rootScope","$q","AlertService","LoadingService","BBModel","$translate",function($scope,$rootScope,$q,AlertService,LoadingService,BBModel,$translate){var loader;return loader=LoadingService.$loader($scope).notLoaded(),$scope.WeekHeaders=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],$scope.day_data={},$scope.type||($scope.type="month"),$scope.data_source||($scope.data_source=$scope.bb.current_item),$rootScope.connection_started.then(function(_this){return function(){return!$scope.current_date&&$scope.last_selected_date?$scope.current_date=$scope.last_selected_date.startOf($scope.type):$scope.current_date||($scope.current_date=moment().startOf($scope.type)),$scope.loadData()}}(this),function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}),$scope.$on("currentItemUpdate",function(event){return $scope.loadData()}),$scope.setCalType=function(_this){return function(type){return $scope.type=type}}(this),$scope.setDataSource=function(_this){return function(source){return $scope.data_source=source}}(this),$scope.format_date=function(_this){return function(fmt){return $scope.current_date?$scope.current_date.format(fmt):void 0}}(this),$scope.format_start_date=function(_this){return function(fmt){return $scope.format_date(fmt)}}(this),$scope.format_end_date=function(_this){return function(fmt){return $scope.end_date?$scope.end_date.format(fmt):void 0}}(this),$scope.selectDay=function(_this){return function(day,route,force){return 0!==day.spaces||force?($scope.setLastSelectedDate(day.date),$scope.bb.current_item.setDate(day),$scope.$parent.$has_page_control?void 0:$scope.decideNextPage(route)):!1}}(this),$scope.setMonth=function(_this){return function(month,year){return $scope.current_date=moment().startOf("month").year(year).month(month-1),$scope.current_date.year(),$scope.type="month"}}(this),$scope.setWeek=function(_this){return function(week,year){return $scope.current_date=moment().year(year).isoWeek(week).startOf("week"),$scope.current_date.year(),$scope.type="week"}}(this),$scope.add=function(_this){return function(type,amount){return $scope.current_date.add(amount,type),$scope.loadData()}}(this),$scope.subtract=function(_this){return function(type,amount){return $scope.add(type,-amount)}}(this),$scope.isPast=function(_this){return function(){return $scope.current_date?moment().isAfter($scope.current_date):!0}}(this),$scope.loadData=function(_this){return function(){return"week"===$scope.type?$scope.loadWeek():$scope.loadMonth()}}(this),$scope.loadMonth=function(_this){return function(){var date,edate;return date=$scope.current_date,$scope.month=date.month(),loader.notLoaded(),edate=moment(date).add(1,"months"),$scope.end_date=moment(edate).add(-1,"days"),$scope.data_source?BBModel.Day.$query({company:$scope.bb.company,cItem:$scope.data_source,month:date.format("MMYY"),client:$scope.client}).then(function(days){var d,day,i,j,k,len,w,week,weeks;for($scope.days=days,i=0,len=days.length;len>i;i++)day=days[i],$scope.day_data[day.string_date]=day;for(weeks=[],w=j=0;5>=j;w=++j){for(week=[],d=k=0;6>=k;d=++k)week.push(days[7*w+d]);weeks.push(week)}return $scope.weeks=weeks,loader.setLoaded()},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}):loader.setLoaded()}}(this),$scope.loadWeek=function(_this){return function(){var date,edate;return date=$scope.current_date,loader.notLoaded(),edate=moment(date).add(7,"days"),$scope.end_date=moment(edate).add(-1,"days"),$scope.data_source?BBModel.Day.$query({company:$scope.bb.company,cItem:$scope.data_source,date:date.toISODate(),edate:edate.toISODate(),client:$scope.client}).then(function(days){var day,i,len;for($scope.days=days,i=0,len=days.length;len>i;i++)day=days[i],$scope.day_data[day.string_date]=day;return loader.setLoaded()},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}):loader.setLoaded()}}(this),$scope.setReady=function(_this){return function(){return $scope.bb.current_item.date?!0:(AlertService.clear(),AlertService.add("danger",{msg:$translate.instant("PUBLIC_BOOKING.DAY.DATE_NOT_SELECTED")}),!1)}}(this)}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbMonthCalendar",function(){return{restrict:"A",replace:!0,scope:!0,controller:"MonthCalendar"}})}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbMonthPicker",["PathSvc","$timeout",function(PathSvc,$timeout){return{restrict:"AE",replace:!0,scope:!0,require:["^?bbEvents","^?bbMultiCompanyEvents"],templateUrl:function(element,attrs){return PathSvc.directivePartial("_month_picker")},link:function(scope,el,attrs){return scope.picker_settings=scope.$eval(attrs.bbMonthPicker)||{},scope.picker_settings.months_to_show=scope.picker_settings.months_to_show||3,$(window).resize(function(){return $timeout(function(){var width;return width=el.width(),scope.rebuildSlideToWidth(width)},500)}),scope.$watch(attrs.dayData,function(dayData){var width;return dayData?(dayData.length||(scope.months=null),dayData.length&&scope.processDates(dayData),width=el.width(),scope.rebuildSlideToWidth(width)):void 0})},controller:["$scope",function($scope){return $scope.processDates=function(dates){var date,datehash,diff,first_carousel_month,i,last_date,len;for(dates.length||(dates=null),datehash={},i=0,len=dates.length;len>i;i++)date=dates[i],datehash[date.date.format("DDMMYY")]=date,!$scope.first_available_day&&date.spaces>0&&($scope.first_available_day=date.date);return first_carousel_month=$scope.picker_settings.start_at_first_available_day?$scope.first_available_day.clone().startOf("month"):moment().startOf("month"),last_date=_.last(dates),diff=last_date.date.diff(first_carousel_month,"months"),diff=diff>0?diff+1:1,$scope.num_months=$scope.picker_settings&&$scope.picker_settings.months?$scope.picker_settings.months:diff,$scope.months=$scope.getMonths($scope.num_months,first_carousel_month,datehash)},$scope.$on("event_list_filter_date:changed",function(event,date){var newDay;if(newDay=$scope.getDay(date),$scope.selected_day){if($scope.selected_day.date.isSame(date))return $scope.selected_day.selected=!$scope.selected_day.selected;if($scope.selected_day.selected=!1,newDay)return $scope.selected_day=newDay,$scope.selected_day.selected=!0}else if(newDay)return $scope.selected_day=newDay,$scope.selected_day.selected=!0}),$scope.$on("event_list_filter_date:cleared",function(){return $scope.selected_day?$scope.selected_day.selected=!1:void 0}),$scope.toggleDay=function(day){return day&&(!day.data||0!==day.data.spaces&&!day.disabled&&day.available)&&(day.data||day._d)?($scope.selected_day&&$scope.selected_day.date.isSame(day.date)&&($scope.selected_day.selected=!$scope.selected_day.selected),$scope.selected_day&&!$scope.selected_day.date.isSame(day.date)&&($scope.selected_day.selected=!1,$scope.selected_day=day,$scope.selected_day.selected=!0),$scope.selected_day||($scope.selected_day=day,$scope.selected_day.selected=!0),$scope.showDay(day.date)):void 0},$scope.rebuildSlide=function(n){var fillerMonths,i,j,last_carousel_month,len,len1,month,monthCollection,months,num_empty_months_to_add,ref,ref1,slide,value;if(last_carousel_month=moment().startOf("month"),num_empty_months_to_add=0,$scope.months&&$scope.months.length){for(months=[],ref=$scope.months,i=0,len=ref.length;len>i;i++)month=ref[i],month&&!month.filler&&months.push(month);months.length&&($scope.months=months),last_carousel_month=angular.copy($scope.months[$scope.months.length-1].start_date),last_carousel_month.add(1,"month"),num_empty_months_to_add=n-$scope.months.length%n,num_empty_months_to_add===n&&(num_empty_months_to_add=0)}else num_empty_months_to_add=n,last_carousel_month=moment().startOf("month");for(monthCollection=[],slide=[],$scope.months||($scope.months=[]),fillerMonths=$scope.getMonths(num_empty_months_to_add,last_carousel_month),$scope.months=$scope.months.concat(fillerMonths),ref1=$scope.months,j=0,len1=ref1.length;len1>j;j++)value=ref1[j],slide.length===n&&(monthCollection.push(slide),slide=[]),slide.push(value);return monthCollection.push(slide),$scope.monthCollection=monthCollection},$scope.getMonths=function(months_to_display,start_month,datehash){var d,date,day,day_data,i,j,k,m,month,months,ref,w,week;for(months=[],m=i=0,ref=months_to_display;ref>=0?ref>i:i>ref;m=ref>=0?++i:--i){for(date=start_month.clone().startOf("week"),month={weeks:[]},month.index=m-1,w=j=1;6>=j;w=++j){for(week={days:[]},d=k=1;7>=k;d=++k)date.isSame(date.clone().startOf("month"),"day")&&!month.start_date&&(month.start_date=date.clone()),datehash&&(day_data=datehash[date.format("DDMMYY")]),day={date:date.clone(),data:datehash?day_data:null,available:datehash?day_data&&day_data.spaces&&day_data.spaces>0:!1,today:moment().isSame(date,"day"),past:date.isBefore(moment(),"day"),disabled:!month.start_date||!date.isSame(month.start_date,"month")},week.days.push(day),$scope.selected_date&&day.date.isSame($scope.selected_date,"day")&&(day.selected=!0,$scope.selected_day=day),date.add(1,"day");datehash||(month.filler=!0),month.weeks.push(week)}months.push(month),start_month.add(1,"month")}return months},$scope.rebuildSlideToWidth=function(width){var num_slides_to_display;return width>750?(num_slides_to_display=3,$scope.rebuildSlide(num_slides_to_display)):width>550?(num_slides_to_display=2,$scope.rebuildSlide(num_slides_to_display)):(num_slides_to_display=1,$scope.rebuildSlide(num_slides_to_display))},$scope.getDay=function(date){var day,i,j,k,len,len1,len2,month,ref,ref1,ref2,week;for(ref=$scope.months,i=0,len=ref.length;len>i;i++)for(month=ref[i],ref1=month.weeks,j=0,len1=ref1.length;len1>j;j++)for(week=ref1[j],ref2=week.days,k=0,len2=ref2.length;len2>k;k++)if(day=ref2[k],day.date.isSame(date)&&!day.disabled)return day}}]}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbMonthPickerListener",["PathSvc","$timeout",function(PathSvc,$timeout){return{restrict:"A",scope:!0,link:function(scope,el,attrs){return $(window).resize(function(){return $timeout(function(){return scope.carouselIndex=0})}),scope.$on("event_list_filter:changed",function(){return $timeout(function(){return scope.carouselIndex=0})})}}}])}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("PackageItem",["$scope","$rootScope","BBModel",function($scope,$rootScope,BBModel){return $rootScope.connection_started.then(function(){return $scope.bb.company?$scope.init($scope.bb.company):void 0}),$scope.init=function(company){return $scope.booking_item||($scope.booking_item=$scope.bb.current_item),BBModel.PackageItem.$query(company).then(function(package_items){return $scope.packages=package_items})},$scope.selectItem=function(item,route){return $scope.$parent.$has_page_control?($scope["package"]=item,!1):($scope.booking_item.setPackageItem(item),$scope.decideNextPage(route),!0)},$scope.setReady=function(){return $scope["package"]?($scope.booking_item.setPackageItem($scope["package"]),!0):!1},$scope.getPackageServices=function(item){var promise;return item&&!item.service_list?(item.service_list=[],promise=BBModel.PackageItem.$getPackageServices(item),promise.then(function(services){return item.service_list=services}),!0):!1}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbPackageItems",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"PackageItem"}})}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("PackagePicker",["$scope","$rootScope","$q","TimeService","LoadingService","BBModel",function($scope,$rootScope,$q,TimeService,LoadingService,BBModel){var loader;return $scope.sel_date=moment().add(1,"days"),
$scope.selected_date=$scope.sel_date.toDate(),$scope.picked_time=!1,loader=LoadingService.$loader($scope),$scope.$watch("selected_date",function(_this){return function(newv,oldv){return $scope.sel_date=moment(newv),$scope.loadDay()}}(this)),$scope.loadDay=function(_this){return function(){var i,item,len,pslots,ref;for($scope.timeSlots=[],loader.notLoaded(),pslots=[],ref=$scope.stackedItems,i=0,len=ref.length;len>i;i++)item=ref[i],pslots.push(TimeService.query({company:$scope.bb.company,cItem:item,date:$scope.sel_date,client:$scope.client}));return $q.all(pslots).then(function(res){var _i,earliest,j,k,l,latest,len1,len2,len3,len4,len5,m,n,next_earliest,next_latest,ref1,ref2,ref3,ref4,ref5,results,slot;for(loader.setLoaded(),$scope.data_valid=!0,$scope.timeSlots=[],ref1=$scope.stackedItems,_i=j=0,len1=ref1.length;len1>j;_i=++j)item=ref1[_i],item.slots=res[_i],item.slots&&0!==item.slots.length||($scope.data_valid=!1),item.order=_i;if($scope.data_valid){for($scope.timeSlots=res,earliest=null,ref2=$scope.stackedItems,k=0,len2=ref2.length;len2>k;k++){for(item=ref2[k],next_earliest=null,ref3=item.slots,l=0,len3=ref3.length;len3>l;l++)slot=ref3[l],earliest&&slot.time<earliest?slot.disable():next_earliest||(next_earliest=slot.time+item.service.duration);earliest=next_earliest}for(latest=null,ref4=$scope.bb.stacked_items.slice(0).reverse(),results=[],m=0,len4=ref4.length;len4>m;m++){for(item=ref4[m],next_latest=null,ref5=item.slots,n=0,len5=ref5.length;len5>n;n++)slot=ref5[n],latest&&slot.time>latest?slot.disable():next_latest=slot.time-item.service.duration;results.push(latest=next_latest)}return results}},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")})}}(this),$scope.selectSlot=function(_this){return function(sel_item,slot){var count,current,i,item,j,k,latest,len,len1,len2,next,ref,ref1,slots,time;for(ref=$scope.stackedItems,count=i=0,len=ref.length;len>i;count=++i)if(item=ref[count],count===sel_item.order){if(item.setDate(new BBModel.Day({date:$scope.sel_date.format(),spaces:1})),item.setTime(slot),next=slot.time+item.service.duration,time=slot.time,slot=null,count>0)for(current=count-1;current>=0;){if(item=$scope.bb.stacked_items[current],latest=time-item.service.duration,!item.time||item.time.time>latest)for(item.setDate(new BBModel.Day({date:$scope.sel_date.format(),spaces:1})),item.setTime(null),ref1=item.slots,j=0,len1=ref1.length;len1>j;j++)slot=ref1[j],slot.time<latest&&item.setTime(slot);time=item.time.time,current-=1}}else if(count>sel_item.order&&(slots=item.slots,item.setDate(new BBModel.Day({date:$scope.sel_date.format(),spaces:1})),slots))for(item.setTime(null),k=0,len2=slots.length;len2>k;k++)slot=slots[k],slot.time>=next&&!item.time&&(item.setTime(slot),next=slot.time+item.service.duration);return $scope.picked_time=!0}}(this),$scope.hasAvailability=function(_this){return function(slots,start_time,end_time){var i,j,k,l,len,len1,len2,len3,slot;if(!slots)return!1;if(start_time&&end_time){for(i=0,len=slots.length;len>i;i++)if(slot=slots[i],slot.time>=start_time&&slot.time<end_time&&slot.availability()>0)return!0}else if(end_time){for(j=0,len1=slots.length;len1>j;j++)if(slot=slots[j],slot.time<end_time&&slot.availability()>0)return!0}else if(start_time){for(k=0,len2=slots.length;len2>k;k++)if(slot=slots[k],slot.time>=start_time&&slot.availability()>0)return!0}else for(l=0,len3=slots.length;len3>l;l++)if(slot=slots[l],slot.availability()>0)return!0}}(this),$scope.confirm=function(_this){return function(){}}(this)}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbPackagePicker",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"PackagePicker"}})}.call(this),function(){"use strict";var BBPageCtrl;BBPageCtrl=["$scope","$q","ValidatorService","LoadingService",function($scope,$q,ValidatorService,LoadingService){"ngInject";var checkReady,init,isScopeReady,routeReady;this.$scope=$scope,$scope.$has_page_control=!0,$scope.validator=ValidatorService,init=function(){$scope.checkReady=checkReady,$scope.routeReady=routeReady},isScopeReady=function(_this){return function(cscope){var child,children,i,len,ready,ready_list;for(ready_list=[],children=[],child=cscope.$$childHead;child;)children.push(child),child=child.$$nextSibling;for(children.sort(function(a,b){return(a.ready_order||0)>=(b.ready_order||0)?1:-1}),i=0,len=children.length;len>i;i++)child=children[i],ready=isScopeReady(child),angular.isArray(ready)?Array.prototype.push.apply(ready_list,ready):ready_list.push(ready);return cscope.hasOwnProperty("setReady")&&ready_list.push(cscope.setReady()),ready_list}}(this),checkReady=function(){var checkread,i,len,loader,ready_list,v;if(ready_list=isScopeReady($scope),checkread=$q.defer(),$scope.$checkingReady=checkread.promise,ready_list=ready_list.filter(function(v){return!("boolean"==typeof v&&v)}),!ready_list||0===ready_list.length)return checkread.resolve(),!0;for(i=0,len=ready_list.length;len>i;i++)if(v=ready_list[i],"boolean"==typeof value||!v)return checkread.reject(),!1;return loader=LoadingService.$loader($scope).notLoaded(),$q.all(ready_list).then(function(){return loader.setLoaded(),checkread.resolve()},function(err){return loader.setLoaded()}),!0},routeReady=function(route){return $scope.$checkingReady?$scope.$checkingReady.then(function(_this){return function(){return $scope.decideNextPage(route)}}(this)):$scope.decideNextPage(route)},init()}],angular.module("BB.Directives").directive("bbPage",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"BBPageCtrl"}}),angular.module("BB.Controllers").controller("BBPageCtrl",BBPageCtrl),angular.module("BB.Services").value("PageControllerService",BBPageCtrl)}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("Payment",["$scope","$rootScope","$q","$location","$window","$sce","$log","$timeout","LoadingService",function($scope,$rootScope,$q,$location,$window,$sce,$log,$timeout,LoadingService){var loader;return loader=LoadingService.$loader($scope).notLoaded(),$scope.purchase&&($scope.bb.total=$scope.purchase),$rootScope.connection_started.then(function(){return $scope.total&&($scope.bb.total=$scope.total),$scope.bb&&$scope.bb.total&&$scope.bb.total.$href("new_payment")?$scope.url=$sce.trustAsResourceUrl($scope.bb.total.$href("new_payment")):void 0}),$scope.callNotLoaded=function(_this){return function(){return loader.notLoaded()}}(this),$scope.callSetLoaded=function(_this){return function(){return loader.setLoaded()}}(this),$scope.paymentDone=function(){return $scope.bb.payment_status="complete",$scope.$emit("payment:complete"),$scope.route_to_next_page?$scope.decideNextPage():void 0},$scope.error=function(message){return $log.warn("Payment Failure: "+message)}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbPayment",["$window","$location","$sce","GeneralOptions","AlertService",function($window,$location,$sce,GeneralOptions,AlertService){return{restrict:"AE",replace:!0,scope:!0,controller:"Payment",link:function(scope,element,attributes){var error,getHost,sendLoadEvent;return error=function(scope,message){return scope.error(message)},getHost=function(url){var a;return a=document.createElement("a"),a.href=url,a.protocol+"//"+a.host},sendLoadEvent=function(element,origin,scope){var custom_stylesheet,payload,referrer;return referrer=$location.protocol()+"://"+$location.host(),$location.port()&&(referrer+=":"+$location.port()),scope.payment_options.custom_stylesheet&&(custom_stylesheet=scope.payment_options.custom_stylesheet.match(/http/)?scope.payment_options.custom_stylesheet:$location.absUrl().match(/.+(?=#)/)+scope.payment_options.custom_stylesheet),payload=JSON.stringify({type:"load",message:referrer,custom_partial_url:scope.bb.custom_partial_url,custom_stylesheet:custom_stylesheet,scroll_offset:GeneralOptions.scroll_offset}),element.find("iframe")[0].contentWindow.postMessage(payload,origin)},scope.payment_options=scope.$eval(attributes.bbPayment)||{},scope.route_to_next_page=null!=scope.payment_options.route_to_next_page?scope.payment_options.route_to_next_page:!0,element.find("iframe").bind("load",function(_this){return function(event){var origin,url;return scope.bb&&scope.bb.total&&scope.bb.total.$href("new_payment")&&(url=scope.bb.total.$href("new_payment")),origin=getHost(url),sendLoadEvent(element,origin,scope),scope.$apply(function(){return scope.callSetLoaded()})}}(this)),$window.addEventListener("message",function(_this){return function(event){var data;return angular.isObject(event.data)?data=event.data:event.data.match(/iFrameSizer/)||(data=JSON.parse(event.data)),scope.$apply(function(){if(data)switch(data.type){case"submitting":return scope.callNotLoaded();case"error":return scope.$emit("payment:failed"),scope.callNotLoaded(),AlertService.raise("PAYMENT_FAILED"),document.getElementsByTagName("iframe")[0].src+="";case"payment_complete":return scope.callSetLoaded(),scope.paymentDone()}})}}(this),!1)}}}])}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("PayForm",["$scope","$location",function($scope,$location){var sendSubmittingEvent,submitPaymentForm;return $scope.setTotal=function(total){return $scope.total=total},$scope.setCard=function(card){return $scope.card=card},sendSubmittingEvent=function(_this){return function(){var payload,referrer,target_origin;return referrer=$location.protocol()+"://"+$location.host(),$location.port()&&(referrer+=":"+$location.port()),target_origin=$scope.referrer,payload=JSON.stringify({type:"submitting",message:referrer}),parent.postMessage(payload,target_origin)}}(this),submitPaymentForm=function(_this){return function(){var payment_form;return payment_form=angular.element.find("form"),payment_form[0].submit()}}(this),$scope.submitAndSendMessage=function(_this){return function(event){var payment_form;return event.preventDefault(),event.stopPropagation(),payment_form=$scope.$eval("payment_form"),payment_form.$invalid?(payment_form.submitted=!0,!1):(sendSubmittingEvent(),submitPaymentForm())}}(this)}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbPayForm",["$window","$timeout","$sce","$http","$compile","$document","$location","GeneralOptions",function($window,$timeout,$sce,$http,$compile,$document,$location,GeneralOptions){var applyCustomPartials,applyCustomStylesheet;return applyCustomPartials=function(custom_partial_url,scope,element){return null!=custom_partial_url?($document.domain="bookingbug.com",$http.get(custom_partial_url).then(function(custom_templates){return $compile(custom_templates.data)(scope,function(custom,scope){var custom_form,e,i,len;for(i=0,len=custom.length;len>i;i++)e=custom[i],"STYLE"===e.tagName&&element.after(e.outerHTML);return custom_form=function(){var j,len1,results;for(results=[],j=0,len1=custom.length;len1>j;j++)e=custom[j],"payment_form"===e.id&&results.push(e);return results}(),custom_form&&custom_form[0]?$compile(custom_form[0].innerHTML)(scope,function(compiled_form,scope){var action,form;return form=element.find("form")[0],action=form.action,compiled_form.attr("action",action),$(form).replaceWith(compiled_form)}):void 0})})):void 0},applyCustomStylesheet=function(href){var css_id,head,link;return css_id="custom_css",document.getElementById(css_id)?void 0:(head=document.getElementsByTagName("head")[0],link=document.createElement("link"),link.id=css_id,link.rel="stylesheet",link.type="text/css",link.href=href,link.media="all",head.appendChild(link),link.onload=function(){return"parentIFrame"in $window?parentIFrame.size():void 0})}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbPaymentButton",["$compile","$sce","$http","$templateCache","$q","$log","TemplateSvc","$translate",function($compile,$sce,$http,$templateCache,$q,$log,TemplateSvc,$translate){return{restrict:"EA",replace:!0,scope:{total:"=",bb:"=",decideNextPage:"=",notLoaded:"=",setLoaded:"="},link:function(scope,element,attributes){var getButtonFormTemplate,getTemplate,init,killWatch,setClassAndValue;getTemplate=function(type,scope){switch(type){case"button_form":return getButtonFormTemplate(scope);case"page":return TemplateSvc.get("payment.html");case"location":return"<a href='{{payment_link}}'>{{label}}</a>";default:return""}},getButtonFormTemplate=function(scope){var src;return src=$sce.parseAsResourceUrl("'"+scope.payment_link+"'")(),$http.get(src,{}).then(function(response){return response.data})},setClassAndValue=function(scope,element,attributes){var c,i,inputs,j,len,main_tag,ref,results;switch(scope.link_type){case"button_form":inputs=element.find("input"),main_tag=function(){var j,len,results;for(results=[],j=0,len=inputs.length;len>j;j++)i=inputs[j],"submit"===$(i).attr("type")&&results.push(i);return results}()[0],attributes.value&&$(main_tag).attr("value",$translate.instant(attributes.value));break;case"page":case"location":main_tag=element.find("a")[0]}if(attributes["class"]){for(ref=attributes["class"].split(" "),results=[],j=0,len=ref.length;len>j;j++)c=ref[j],$(main_tag).addClass(c),results.push($(element).removeClass(c));return results}},killWatch=scope.$watch("total",function(total){var url;return total&&total.$has("new_payment")?(killWatch(),scope.bb.payment_status="pending",scope.bb.total=scope.total,scope.link_type=scope.total.$link("new_payment").type,scope.label=attributes.value||"Make Payment",scope.payment_link=scope.total.$href("new_payment"),url=scope.total.$href("new_payment"),$q.when(getTemplate(scope.link_type,scope)).then(function(template){return element.html(template).show(),$compile(element.contents())(scope),setClassAndValue(scope,element,attributes)},function(err){return $log.warn(err.data),element.remove()})):(element.hide(),console.warn("new_payment link missing: payment configuration maybe incorrect"))}),init=function(){return scope.total?loadTotal(scope.total):void 0},killWatch=scope.$watch("total",function(total){return loadTotal(total)}),init()}}}]),angular.module("BB.Directives").directive("bbPaypalExpressButton",["$compile","$sce","$http","$templateCache","$q","$log","$window","UriTemplate",function($compile,$sce,$http,$templateCache,$q,$log,$window,UriTemplate){return{restrict:"EA",replace:!0,template:'<a ng-href="{{href}}" ng-click="showLoader()">Pay</a>',scope:{total:"=",bb:"=",decideNextPage:"=",paypalOptions:"=bbPaypalExpressButton",notLoaded:"="},link:function(scope,element,attributes){var paypalOptions,total;return total=scope.total,paypalOptions=scope.paypalOptions,scope.href=new UriTemplate(total.$link("paypal_express").href).fillFromObject(paypalOptions),scope.showLoader=function(){return scope.notLoaded?scope.notLoaded(scope):void 0}}}}])}.call(this),function(){angular.module("BB.Controllers").controller("PostcodeLookup",["$scope","$rootScope","$q","ValidatorService","AlertService","LoadingService","$attrs",function($scope,$rootScope,$q,ValidatorService,AlertService,LoadingService,$attrs){var loader;return angular.extend(this,new CompanyListBase($scope,$rootScope,$q,$attrs)),$scope.validator=ValidatorService,loader=LoadingService.$loader($scope),$scope.searchPostcode=function(_this){return function(form,prms){var promise;return loader.notLoaded(),promise=ValidatorService.validatePostcode(form,prms),promise?promise.then(function(){var loc;return $scope.bb.postcode=ValidatorService.getGeocodeResult().address_components[0].short_name,$scope.postcode=$scope.bb.postcode,loc=ValidatorService.getGeocodeResult().geometry.location,$scope.selectItem($scope.getNearestCompany({center:loc}))},function(err){return loader.setLoaded()}):loader.setLoaded()}}(this),$scope.getNearestCompany=function(_this){return function(arg){var centre,company,company_position,distances,i,len,map_centre,ref;for(centre=arg.centre,distances=[],ref=$scope.items,i=0,len=ref.length;len>i;i++)company=ref[i],company.address.lat&&company.address["long"]&&company.live&&(map_centre={lat:center.lat(),"long":centre.lng()},company_position={lat:company.address.lat,"long":company.address["long"]},company.distance=GeolocationService.haversine(map_centre,company_position),distances.push(company));return distances.sort(function(a,b){return a.distance-b.distance}),distances[0]}}(this)}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbPostcodeLookup",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"PostcodeLookup"}})}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("PurchaseTotal",["$scope","$rootScope","$window","BBModel","$q",function($scope,$rootScope,$window,BBModel,$q){return angular.extend(this,new $window.PageController($scope,$q)),$scope.load=function(_this){return function(total_id){return $rootScope.connection_started.then(function(){return $scope.loadingTotal=BBModel.PurchaseTotal.$query({company:$scope.bb.company,total_id:total_id}),$scope.loadingTotal.then(function(total){return $scope.total=total})})}}(this)}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbPurchaseTotal",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"PurchaseTotal"}})}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("ProductList",["$scope","$rootScope","$q","$attrs","ItemService","FormDataStoreService","ValidatorService","PageControllerService","LoadingService","halClient",function($scope,$rootScope,$q,$attrs,ItemService,FormDataStoreService,ValidatorService,PageControllerService,LoadingService,halClient){var loader;return loader=LoadingService.$loader($scope).notLoaded(),$scope.validator=ValidatorService,$rootScope.connection_started.then(function(){return $scope.bb.company?$scope.init($scope.bb.company):void 0},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}),$scope.init=function(company){return $scope.booking_item||($scope.booking_item=$scope.bb.current_item),company.$get("products").then(function(products){return products.$get("products").then(function(products){return $scope.products=products,loader.setLoaded()})})},$scope.selectItem=function(item,route){return $scope.$parent.$has_page_control?($scope.product=item,!1):($scope.booking_item.setProduct(item),$scope.decideNextPage(route),!0)}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbProductList",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"ProductList",link:function(scope,element,attrs){attrs.bbItem&&(scope.booking_item=scope.$eval(attrs.bbItem)),attrs.bbShowAll&&(scope.show_all=!0)}}})}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("SpaceList",["$scope","$rootScope","$q","ServiceService","LoadingService","BBModel",function($scope,$rootScope,$q,ServiceService,LoadingService,BBModel){var loader;return loader=LoadingService.$loader($scope),$rootScope.connection_started.then(function(_this){return function(){return $scope.bb.company?$scope.init($scope.bb.company):void 0}}(this),function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}),$scope.init=function(_this){return function(comp){return BBModel.Space.$query(comp).then(function(items){return $scope.currentItem.category&&(items=items.filter(function(x){return x.$has("category")&&x.$href("category")===$scope.currentItem.category.self})),$scope.items=items,1!==items.length||$scope.allowSinglePick?$scope.listLoaded=!0:($scope.skipThisStep(),$rootScope.services=items,$scope.selectItem(items[0],$scope.nextRoute))},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")})}}(this),$scope.selectItem=function(_this){return function(item,route){return $scope.currentItem.setService(item),$scope.decide_next_page(route)}}(this)}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbSpaces",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"SpaceList"}})}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("SurveyQuestions",["$scope","$rootScope","$location","BBModel","ValidatorService","$sessionStorage",function($scope,$rootScope,$location,BBModel,ValidatorService,$sessionStorage){var getBookingAndSurvey,getBookingRef,getMember,getPurchaseID,init,loader,setPurchaseCompany,showLoginError;return $scope.completed=!1,$scope.login={email:"",password:""},$scope.login_error=!1,$scope.booking_ref="",loader=LoadingService.$loader($scope).notLoaded(),$rootScope.connection_started.then(function(){return init()},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}),init=function(_this){return function(){if($scope.company){if(!$scope.company.settings.requires_login)return getBookingAndSurvey();if($scope.checkIfLoggedIn(),$rootScope.member)return getBookingAndSurvey()}}}(this),$scope.checkIfLoggedIn=function(_this){return function(){return BBModel.Login.$checkLogin()}}(this),$scope.loadSurvey=function(_this){return function(purchase){return $scope.company||$scope.purchase.$get("company").then(function(company){return setPurchaseCompany(company)}),$scope.purchase.$has("client")&&$scope.purchase.$get("client").then(function(client){return $scope.setClient(new BBModel.Client(client))}),$scope.purchase.$getBookings().then(function(bookings){var address,booking,i,len,params,pretty_address,ref,results;for(params={},$scope.bookings=bookings,ref=$scope.bookings,results=[],i=0,len=ref.length;len>i;i++)booking=ref[i],booking.datetime&&(booking.pretty_date=moment(booking.datetime).format("dddd, MMMM Do YYYY")),booking.address&&(address=new BBModel.Address(booking.address),pretty_address=address.addressSingleLine(),booking.pretty_address=pretty_address),$rootScope.user&&(params.admin_only=!0),results.push(booking.$get("survey_questions",params).then(function(details){var item_details;return item_details=new BBModel.ItemDetails(details),booking.survey_questions=item_details.survey_questions,booking.$getSurveyAnswers().then(function(answers){var answer,j,k,len1,len2,question,ref1,ref2;for(booking.survey_answers=answers,ref1=booking.survey_questions,j=0,len1=ref1.length;len1>j;j++)if(question=ref1[j],booking.survey_answers)for(ref2=booking.survey_answers,k=0,len2=ref2.length;len2>k;k++)answer=ref2[k],answer.question_text===question.name&&answer.value&&(question.answer=answer.value);return loader.setLoaded()})}));return results},function(err){return loader.setLoaded(),failMsg()})}}(this),$scope.submitSurveyLogin=function(_this){return function(form){var params;if(ValidatorService.validateForm(form))return params={email:$scope.login.email,password:$scope.login.password,id:$scope.company_id},BBModel.Login.$companyLogin($scope.company,{},params).then(function(member){return BBModel.Login.$setLogin(member),getBookingAndSurvey()},function(err){return showLoginError(),loader.setLoadedAndShowError(err,"Sorry, something went wrong")})}}(this),$scope.loadSurveyFromPurchaseID=function(_this){return function(id){var auth_token,params;return params={purchase_id:id,url_root:$scope.bb.api_url},auth_token=$sessionStorage.getItem("auth_token"),auth_token&&(params.auth_token=auth_token),BBModel.Purchase.Total.$query(params).then(function(purchase){return $scope.purchase=purchase,$scope.total=$scope.purchase,$scope.loadSurvey($scope.purchase)},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")})}}(this),$scope.loadSurveyFromBookingRef=function(_this){return function(id){var auth_token,params;return params={booking_ref:id,url_root:$scope.bb.api_url,raw:!0},auth_token=$sessionStorage.getItem("auth_token"),auth_token&&(params.auth_token=auth_token),BBModel.Purchase.Total.$bookingRefQuery(params).then(function(purchase){return $scope.purchase=purchase,$scope.total=$scope.purchase,$scope.loadSurvey($scope.purchase)},function(err){return showLoginError(),loader.setLoadedAndShowError(err,"Sorry, something went wrong")})}}(this),$scope.submitSurvey=function(_this){return function(form){var booking,i,len,params,ref,results;if(ValidatorService.validateForm(form)){for(ref=$scope.bookings,results=[],i=0,len=ref.length;len>i;i++)booking=ref[i],booking.checkReady(),booking.ready?(loader.notLoaded(),booking.client_id=$scope.client.id,params=booking,results.push(BBModel.Purchase.Booking.$addSurveyAnswersToBooking(params).then(function(booking){return loader.setLoaded(),$scope.completed=!0},function(err){return loader.setLoaded()}))):results.push($scope.decideNextPage(route));return results}}}(this),$scope.submitBookingRef=function(_this){return function(form){var auth_token,params;if(ValidatorService.validateForm(form))return loader.notLoaded(),params={booking_ref:$scope.booking_ref,url_root:$scope.bb.api_url,raw:!0},auth_token=$sessionStorage.getItem("auth_token"),auth_token&&(params.auth_token=auth_token),BBModel.Purchase.Total.$bookingRefQuery(params).then(function(purchase){return $scope.purchase=purchase,$scope.total=$scope.purchase,$scope.loadSurvey($scope.purchase)},function(err){return showLoginError(),loader.setLoadedAndShowError(err,"Sorry, something went wrong")})}}(this),$scope.storeBookingCookie=function(){return document.cookie="bookingrefsc="+$scope.booking_ref},showLoginError=function(_this){return function(){return $scope.login_error=!0}}(this),getMember=function(_this){return function(){var params;return params={member_id:$scope.member_id,company_id:$scope.company_id},BBModel.Login.$memberQuery(params).then(function(member){return $scope.member=member})}}(this),setPurchaseCompany=function(company){return $scope.bb.company_id=company.id,$scope.bb.company=new BBModel.Company(company),$scope.company=$scope.bb.company,$scope.bb.item_defaults.company=$scope.bb.company,company.settings&&(company.settings.merge_resources&&($scope.bb.item_defaults.merge_resources=!0),company.settings.merge_people)?$scope.bb.item_defaults.merge_people=!0:void 0},getBookingRef=function(){var booking_ref,matches;return matches=/^.*(?:\?|&)booking_ref=(.*?)(?:&|$)/.exec($location.absUrl()),matches&&(booking_ref=matches[1]),booking_ref},getPurchaseID=function(){var matches,purchase_id;return matches=/^.*(?:\?|&)id=(.*?)(?:&|$)/.exec($location.absUrl()),matches&&(purchase_id=matches[1]),purchase_id},getBookingAndSurvey=function(){var id;return id=getBookingRef(),id?$scope.loadSurveyFromBookingRef(id):(id=getPurchaseID())?$scope.loadSurveyFromPurchaseID(id):$scope.bb.total?$scope.loadSurveyFromPurchaseID($scope.bb.total.long_id):void 0}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbSurveyQuestions",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"SurveyQuestions"}})}.call(this),function(){"use strict";var hasProp={}.hasOwnProperty;angular.module("BB.Controllers").controller("TimeRangeListStackedController",["$scope","$element","$attrs","$rootScope","$q","TimeService","AlertService","BBModel","FormDataStoreService","PersonService","PurchaseService","DateTimeUtilitiesService","LoadingService",function($scope,$element,$attrs,$rootScope,$q,TimeService,AlertService,BBModel,FormDataStoreService,PersonService,PurchaseService,DateTimeUtilitiesService,LoadingService){var isSubtractValid,loader,setEnabledSlots,setTimeRange,spliceExistingDateTimes,updateHideStatus;return FormDataStoreService.init("TimeRangeListStacked",$scope,["selected_slot","original_start_date","start_at_week_start"]),loader=LoadingService.$loader($scope).notLoaded(),$scope.available_times=0,$rootScope.connection_started.then(function(){var diff,selected_day,start_date;return $scope.options=$scope.$eval($attrs.bbTimeRangeStacked)||{},$scope.time_range_length||(null!=$attrs.bbTimeRangeLength?$scope.time_range_length=$scope.$eval($attrs.bbTimeRangeLength):$scope.options&&$scope.options.time_range_length?$scope.time_range_length=$scope.options.time_range_length:$scope.time_range_length=7),(null!=$attrs.bbDayOfWeek||$scope.options&&$scope.options.day_of_week)&&($scope.day_of_week=null!=$attrs.bbDayOfWeek?$scope.$eval($attrs.bbDayOfWeek):$scope.options.day_of_week),(null!=$attrs.bbSelectedDay||$scope.options&&$scope.options.selected_day)&&(selected_day=null!=$attrs.bbSelectedDay?moment($scope.$eval($attrs.bbSelectedDay)):moment($scope.options.selected_day),moment.isMoment(selected_day)&&($scope.selected_day=selected_day)),!$scope.start_date&&$scope.last_selected_date?$scope.original_start_date?(diff=$scope.last_selected_date.diff($scope.original_start_date,"days"),diff%=$scope.time_range_length,diff=0===diff?diff:diff+1,start_date=$scope.last_selected_date.clone().subtract(diff,"days"),setTimeRange($scope.last_selected_date,start_date)):setTimeRange($scope.last_selected_date):$scope.bb.stacked_items[0].date?setTimeRange($scope.bb.stacked_items[0].date.date):$scope.selected_day?($scope.original_start_date=$scope.original_start_date||moment($scope.selected_day),setTimeRange($scope.selected_day)):($scope.start_at_week_start=!0,setTimeRange(moment())),$scope.loadData()}),setTimeRange=function(selected_date,start_date){return start_date?$scope.start_date=start_date:$scope.day_of_week?$scope.start_date=selected_date.clone().day($scope.day_of_week):$scope.start_at_week_start?$scope.start_date=selected_date.clone().startOf("week"):$scope.start_date=selected_date.clone(),$scope.selected_day=selected_date,$scope.selected_date=$scope.selected_day.toDate(),isSubtractValid()},$scope.add=function(amount,type){switch($scope.selected_day=moment($scope.selected_date),type){case"days":setTimeRange($scope.selected_day.add(amount,"days"));break;case"weeks":$scope.start_date.add(amount,"weeks"),setTimeRange($scope.start_date)}return $scope.loadData()},$scope.subtract=function(amount,type){return $scope.add(-amount,type)},isSubtractValid=function(){var diff;return $scope.is_subtract_valid=!0,diff=Math.ceil($scope.selected_day.diff(moment(),"day",!0)),$scope.subtract_length=diff<$scope.time_range_length?diff:$scope.time_range_length,0>=diff&&($scope.is_subtract_valid=!1),$scope.subtract_length>1?$scope.subtract_string="Prev "+$scope.subtract_length+" days":1===$scope.subtract_length?$scope.subtract_string="Prev day":$scope.subtract_string="Prev"},$scope.selectedDateChanged=function(){return setTimeRange(moment($scope.selected_date)),$scope.selected_slot=null,$scope.loadData()},updateHideStatus=function(){var day,key,ref,results;ref=$scope.days,results=[];for(key in ref)day=ref[key],results.push($scope.days[key].hide=!day.date.isSame($scope.selected_day,"day"));return results},$scope.isPast=function(){return $scope.start_date?moment().isAfter($scope.start_date):!0},$scope.status=function(day,slot){var status;if(slot)return status=slot.status()},$scope.highlightSlot=function(slot,day){var i,item,len,ref;if(day&&slot&&slot.availability()>0){for($scope.bb.clearStackedItemsDateTime(),$scope.selected_slot&&($scope.selected_slot.selected=!1),$scope.setLastSelectedDate(day.date),$scope.selected_slot=angular.copy(slot),$scope.selected_day=day.date,$scope.selected_date=day.date.toDate(),$scope.$broadcast("slotChanged",day,slot);slot;)for(ref=$scope.bb.stacked_items,i=0,len=ref.length;len>i;i++)if(item=ref[i],item.service.self===slot.service.self&&!item.date&&!item.time){item.setDate(day),item.setTime(slot),slot=slot.next;break}return updateHideStatus(),$rootScope.$broadcast("time:selected")}},$scope.loadData=function(){var edate,grouped_items,i,items,len,pslots;if(loader.notLoaded(),$scope.request&&$scope.request.start.twix($scope.request.end).contains($scope.selected_day))return updateHideStatus(),void loader.setLoaded();for($scope.start_date=moment($scope.start_date),edate=moment($scope.start_date).add($scope.time_range_length,"days"),$scope.end_date=moment(edate).add(-1,"days"),$scope.request={start:moment($scope.start_date),end:moment($scope.end_date)},pslots=[],grouped_items=_.groupBy($scope.bb.stacked_items,function(item){return item.service.id}),grouped_items=_.toArray(grouped_items),i=0,len=grouped_items.length;len>i;i++)items=grouped_items[i],pslots.push(TimeService.query({company:$scope.bb.company,
cItem:items[0],date:$scope.start_date,end_date:$scope.end_date,client:$scope.client,available:1}));return $q.all(pslots).then(function(res){var _i,day,item,j,k,l,len1,len2,ref,slots,times,v;for($scope.data_valid=!0,$scope.days={},_i=j=0,len1=grouped_items.length;len1>j;_i=++j)for(items=grouped_items[_i],slots=res[_i],slots&&0!==slots.length||($scope.data_valid=!1),l=0,len2=items.length;len2>l;l++){item=items[l],spliceExistingDateTimes(item,slots),item.slots={};for(day in slots)hasProp.call(slots,day)&&(times=slots[day],item.slots[day]=_.indexBy(times,"time"))}if($scope.data_valid){ref=res[0];for(k in ref)v=ref[k],$scope.days[k]={date:moment(k)};setEnabledSlots(),updateHideStatus(),$rootScope.$broadcast("TimeRangeListStacked:loadFinished")}return loader.setLoaded()},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")})},spliceExistingDateTimes=function(stacked_item,slots){var datetime,time,time_slot;if(stacked_item.datetime||stacked_item.date)return datetime=stacked_item.datetime||DateTimeUtilitiesService.convertTimeToMoment(stacked_item.date.date,stacked_item.time.time),$scope.start_date<=datetime&&$scope.end_date>=datetime?(time=DateTimeUtilitiesService.convertMomentToTime(datetime),time_slot=_.findWhere(slots[datetime.toISODate()],{time:time}),time_slot||(time_slot=stacked_item.time,slots[datetime.toISODate()].splice(0,0,time_slot)),time_slot.selected=stacked_item.self===$scope.bb.stacked_items[0].self):void 0},setEnabledSlots=function(){var day,day_data,isSlotValid,ref,results,slot,time;ref=$scope.days,results=[];for(day in ref)day_data=ref[day],day_data.slots={},$scope.bb.stacked_items.length>1?results.push(function(){var ref1,results1;ref1=$scope.bb.stacked_items[0].slots[day],results1=[];for(time in ref1)slot=ref1[time],slot=angular.copy(slot),isSlotValid=function(slot){var duration,i,index,next,ref2,valid;for(valid=!1,time=slot.time,duration=$scope.bb.stacked_items[0].service.duration,next=time+duration,index=i=1,ref2=$scope.bb.stacked_items.length-1;ref2>=1?ref2>=i:i>=ref2;index=ref2>=1?++i:--i){if(_.isEmpty($scope.bb.stacked_items[index].slots[day])||!$scope.bb.stacked_items[index].slots[day][next])return!1;slot.next=angular.copy($scope.bb.stacked_items[index].slots[day][next]),slot=slot.next,next+=$scope.bb.stacked_items[index].service.duration}return!0},isSlotValid(slot)?results1.push(day_data.slots[slot.time]=slot):results1.push(void 0);return results1}()):results.push(function(){var ref1,results1;ref1=$scope.bb.stacked_items[0].slots[day],results1=[];for(time in ref1)slot=ref1[time],results1.push(day_data.slots[slot.time]=slot);return results1}());return results},$scope.pretty_month_title=function(month_format,year_format,seperator){var month_year_format,start_date;return null==seperator&&(seperator="-"),$scope.start_date?(month_year_format=month_format+" "+year_format,$scope.start_date&&$scope.end_date&&$scope.end_date.isAfter($scope.start_date,"month")?(start_date=$scope.start_date.format(month_format),11===$scope.start_date.month()&&(start_date=$scope.start_date.format(month_year_format)),start_date+" "+seperator+" "+$scope.end_date.format(month_year_format)):$scope.start_date.format(month_year_format)):void 0},$scope.confirm=function(route,options){var booking,different,found,i,item,j,l,len,len1,len2,prom,ref,ref1,ref2;for(null==options&&(options={}),ref=$scope.bb.stacked_items,i=0,len=ref.length;len>i;i++)if(item=ref[i],!item.time)return AlertService.add("danger",{msg:"Select a time to continue your booking"}),!1;if(null!=$scope.bb.moving_booking&&null!=$scope.bb.moving_booking.bookings){for(different=!1,ref1=$scope.bb.moving_booking.bookings,j=0,len1=ref1.length;len1>j;j++){for(booking=ref1[j],found=!1,ref2=$scope.bb.stacked_items,l=0,len2=ref2.length;len2>l;l++)item=ref2[l],booking.getDateString()===item.date.string_date&&booking.getTimeInMins()===item.time.time&&booking.category_name===item.category_name&&(found=!0);if(!found){different=!0;break}}if(!different)return AlertService.add("danger",{msg:"Your treatments are already booked for this time."}),!1}return $scope.bb.basket.clear(),$scope.bb.pushStackToBasket(),$scope.bb.moving_booking?(loader.notLoaded(),prom=PurchaseService.update({purchase:$scope.bb.moving_booking,bookings:$scope.bb.basket.items}),void prom.then(function(purchase){return purchase.$getBookings().then(function(bookings){var _i,len3,m,oldb,results;for(results=[],m=0,len3=bookings.length;len3>m;m++)booking=bookings[m],$scope.bookings?results.push(function(){var len4,n,ref3,results1;for(ref3=$scope.bookings,results1=[],_i=n=0,len4=ref3.length;len4>n;_i=++n)oldb=ref3[_i],oldb.id===booking.id?results1.push($scope.bookings[_i]=booking):results1.push(void 0);return results1}()):results.push(void 0);return results}),loader.setLoaded(),$scope.bb.current_item.move_done=!0,$scope.decideNextPage()},function(err){return loader.setLoaded(),AlertService.add("danger",{msg:"Failed to move booking"})})):(loader.notLoaded(),options.do_not_route?$scope.updateBasket():$scope.updateBasket().then(function(){return loader.setLoaded(),$scope.decideNextPage(route)},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}))},$scope.setReady=function(){return $scope.confirm("",{do_not_route:!0})}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbTimeRangeStacked",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"TimeRangeListStackedController"}})}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("TimeSlots",["$scope","$rootScope","$q","$attrs","FormDataStoreService","ValidatorService","PageControllerService","LoadingService","halClient","BBModel",function($scope,$rootScope,$q,$attrs,FormDataStoreService,ValidatorService,PageControllerService,LoadingService,halClient,BBModel){var loader,setItem;return loader=LoadingService.$loader($scope).notLoaded(),$rootScope.connection_started.then(function(){return $scope.bb.company?$scope.init($scope.bb.company):void 0},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}),$scope.init=function(company){var params;return $scope.booking_item||($scope.booking_item=$scope.bb.current_item),$scope.start_date=moment(),$scope.end_date=moment().add(1,"month"),params={item:$scope.booking_item,start_date:$scope.start_date.toISODate(),end_date:$scope.end_date.toISODate()},BBModel.Slot.$query($scope.bb.company,params).then(function(slots){return $scope.slots=slots,loader.setLoaded()},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")})},setItem=function(slot){return $scope.booking_item.setSlot(slot)},$scope.selectItem=function(slot,route){return $scope.$parent.$has_page_control?(setItem(slot),!1):(setItem(slot),$scope.decideNextPage(route),!0)}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbTimeSlots",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"TimeSlots",link:function(scope,element,attrs){attrs.bbItem&&(scope.booking_item=scope.$eval(attrs.bbItem)),attrs.bbShowAll&&(scope.show_all=!0)}}})}.call(this),function(){"use strict";var BBCtrl;BBCtrl=["routeStates","$scope","$location","$rootScope","halClient","$window","$http","$q","$timeout","BasketService","LoginService","AlertService","$sce","$element","$compile","$sniffer","$uibModal","$log","BBModel","BBWidget","SSOService","ErrorService","AppConfig","QueryStringService","QuestionService","PurchaseService","$sessionStorage","$bbug","AppService","UriTemplate","LoadingService","$anchorScroll","$localStorage","$document","CompanyStoreService","viewportSize",function(routeStates,$scope,$location,$rootScope,halClient,$window,$http,$q,$timeout,BasketService,LoginService,AlertService,$sce,$element,$compile,$sniffer,$uibModal,$log,BBModel,BBWidget,SSOService,ErrorService,AppConfig,QueryStringService,QuestionService,PurchaseService,$sessionStorage,$bbug,AppService,UriTemplate,LoadingService,$anchorScroll,$localStorage,$document,CompanyStoreService,viewportSize){"ngInject";var $debounce,addItemToBasket,base64encode,broadcastItemUpdate,checkStepTitle,clearBasketItem,clearClient,clearPage,companySet,connectionStarted,decideNextPage,deleteBasketItem,deleteBasketItems,determineBBApiUrl,emptyBasket,getCurrentStepTitle,getPartial,getUrlParam,hideLoaderHandler,hidePage,initWidget,initWidget2,initializeBBWidget,isAdmin,isAdminIFrame,isFirstCall,isLoadingPage,isMemberLoggedIn,jumpToPage,loadPreviousStep,loadStep,loadStepByPageName,locationChangeStartHandler,logout,moveToBasket,quickEmptybasket,redirectTo,reloadDashboard,reset,restart,restoreBasket,scrollTo,setActiveCompany,setAffiliate,setBasicRoute,setBasket,setBasketItem,setClient,setCompany,setLastSelectedDate,setLoadingPage,setPageLoaded,setPageRoute,setReadyToCheckout,setRoute,setStepTitle,setUsingBasket,setupDefaults,showCheckout,showLoaderHandler,showPage,skipThisStep,supportsTouch,updateBasket,widgetStarted;this.$scope=$scope,$scope.cid="BBCtrl",$scope.qs=QueryStringService,$scope.company_api_path="/api/v1/company/{company_id}{?embed,category_id}",$scope.company_admin_api_path="/api/v1/admin/{company_id}/company{?embed,category_id}",isFirstCall=!0,connectionStarted=$q.defer(),$rootScope.connection_started=connectionStarted.promise,widgetStarted=$q.defer(),$rootScope.widget_started=widgetStarted.promise,$rootScope.Route=$scope.Route=routeStates,this.$onInit=function(){$scope.addItemToBasket=addItemToBasket,$scope.areScopesLoaded=LoadingService.areScopesLoaded,$scope.base64encode=base64encode,$scope.broadcastItemUpdate=broadcastItemUpdate,$scope.clearPage=clearPage,$scope.clearBasketItem=clearBasketItem,$scope.clearClient=clearClient,$scope.checkStepTitle=checkStepTitle,$scope.$debounce=$debounce,$scope.decideNextPage=decideNextPage,$scope.deleteBasketItem=deleteBasketItem,$scope.deleteBasketItems=deleteBasketItems,$scope.emptyBasket=emptyBasket,$scope.getCurrentStepTitle=getCurrentStepTitle,$scope.getPartial=getPartial,$scope.getUrlParam=getUrlParam,$scope.hidePage=hidePage,$scope.isAdmin=isAdmin,$scope.isAdminIFrame=isAdminIFrame,$scope.initWidget=initWidget,$scope.initWidget2=initWidget2,$scope.isLoadingPage=isLoadingPage,$scope.isMemberLoggedIn=isMemberLoggedIn,$scope.jumpToPage=jumpToPage,$scope.loadPreviousStep=loadPreviousStep,$scope.loadStep=loadStep,$scope.loadStepByPageName=loadStepByPageName,$scope.logout=logout,$scope.moveToBasket=moveToBasket,$scope.notLoaded=LoadingService.notLoaded,$scope.parseDate=moment,$scope.quickEmptybasket=quickEmptybasket,$scope.redirectTo=redirectTo,$scope.reloadDashboard=reloadDashboard,$scope.reset=reset,$scope.restart=restart,$scope.scrollTo=scrollTo,$scope.setAffiliate=setAffiliate,$scope.setBasicRoute=setBasicRoute,$scope.setBasket=setBasket,$scope.setBasketItem=setBasketItem,$scope.setClient=setClient,$scope.setCompany=setCompany,$scope.setLastSelectedDate=setLastSelectedDate,$scope.setLoaded=LoadingService.setLoaded,$scope.setLoadedAndShowError=LoadingService.setLoadedAndShowError,$scope.setLoadingPage=setLoadingPage,$scope.setPageLoaded=setPageLoaded,$scope.setPageRoute=setPageRoute,$scope.setReadyToCheckout=setReadyToCheckout,$scope.setRoute=setRoute,$scope.setStepTitle=setStepTitle,$scope.setUsingBasket=setUsingBasket,$scope.skipThisStep=skipThisStep,$scope.showCheckout=showCheckout,$scope.supportsTouch=supportsTouch,$scope.showPage=showPage,$scope.updateBasket=updateBasket,initializeBBWidget(),$rootScope.$on("show:loader",showLoaderHandler),$rootScope.$on("hide:loader",hideLoaderHandler),$scope.$on("$locationChangeStart",locationChangeStartHandler)},this.$postLink=function(){viewportSize.init()},initializeBBWidget=function(){$scope.bb=new BBWidget,AppConfig.uid=$scope.bb.uid,$scope.bb.stacked_items=[],$scope.bb.company_set=companySet,$scope.recordStep=$scope.bb.recordStep,determineBBApiUrl()},determineBBApiUrl=function(){var base,base1;$scope.apiUrl&&($scope.bb||($scope.bb={}),$scope.bb.api_url=$scope.apiUrl),$rootScope.bb&&$rootScope.bb.api_url&&($scope.bb.api_url=$rootScope.bb.api_url,$rootScope.bb.partial_url?$scope.bb.partial_url=$rootScope.bb.partial_url:$scope.bb.partial_url=""),80!==$location.port()&&443!==$location.port()?(base=$scope.bb).api_url||(base.api_url=$location.protocol()+"://"+$location.host()+":"+$location.port()):(base1=$scope.bb).api_url||(base1.api_url=$location.protocol()+"://"+$location.host())},showLoaderHandler=function(){$scope.loading=!0},hideLoaderHandler=function(){$scope.loading=!1},locationChangeStartHandler=function(angular_event,new_url,old_url){var step_number;$scope.bb.routeFormat&&($scope.bb.routing&&!AppService.isModalOpen()||(step_number=$scope.bb.matchURLToStep(),step_number>$scope.bb.current_step?loadStep(step_number):step_number<$scope.bb.current_step&&loadPreviousStep("locationChangeStart")),$scope.bb.routing=!1)},initWidget=function(_this){return function(prms){var url;if(null==prms&&(prms={}),_this.$init_prms=prms,connectionStarted=$q.defer(),$rootScope.connection_started=connectionStarted.promise,($sniffer.webkit&&$sniffer.webkit<537||$sniffer.msie&&$sniffer.msie<=9)&&isFirstCall){if($scope.bb.api_url&&(url=document.createElement("a"),url.href=$scope.bb.api_url,""===url.host||url.host===$location.host()||url.host===$location.host()+":"+$location.port()))return void initWidget2();$rootScope.iframe_proxy_ready?initWidget2():$scope.$on("iframe_proxy_ready",function(event,args){return args.iframe_proxy_ready?initWidget2():void 0})}else initWidget2()}}(this),initWidget2=function(_this){return function(){var aff_promise,comp_category_id,comp_def,comp_promise,comp_url,company_id,embed_params,get_total,k,match,options,params,prms,ref,setup_promises,setup_promises2,sso_admin_login,sso_member_login,total_id,v;if($scope.init_widget_started=!0,prms=_this.$init_prms,prms.query){ref=prms.query;for(k in ref)v=ref[k],prms[k]=QueryStringService(v)}return prms.custom_partial_url?($scope.bb.custom_partial_url=prms.custom_partial_url,$scope.bb.partial_id=prms.custom_partial_url.substring(prms.custom_partial_url.lastIndexOf("/")+1),prms.update_design&&($scope.bb.update_design=prms.update_design)):prms.design_mode&&($scope.bb.design_mode=prms.design_mode),company_id=$scope.bb.company_id,prms.company_id&&(company_id=prms.company_id),prms.affiliate_id&&($scope.bb.affiliate_id=prms.affiliate_id,$rootScope.affiliate_id=prms.affiliate_id),prms.api_url&&($scope.bb.api_url=prms.api_url),prms.partial_url&&($scope.bb.partial_url=prms.partial_url),prms.page_suffix&&($scope.bb.page_suffix=prms.page_suffix),prms.admin&&($scope.bb.isAdmin=prms.admin),prms.auth_token&&$sessionStorage.setItem("auth_token",prms.auth_token),$scope.bb.app_id=1,$scope.bb.app_key=1,$scope.bb.clear_basket=!0,prms.basket&&($scope.bb.clear_basket=!1),prms.clear_basket===!1&&($scope.bb.clear_basket=!1),($window.bb_setup||prms.client)&&(prms.clear_member||(prms.clear_member=!0)),$scope.bb.client_defaults=prms.client||{},prms.client_defaults&&prms.client_defaults.membership_ref&&($scope.bb.client_defaults.membership_ref=prms.client_defaults.membership_ref),$scope.bb.client_defaults&&$scope.bb.client_defaults.name&&(match=$scope.bb.client_defaults.name.match(/^(\S+)(?:\s(\S+))?/),match&&($scope.bb.client_defaults.first_name=match[1],null!=match[2]&&($scope.bb.client_defaults.last_name=match[2]))),prms.clear_member&&($scope.bb.clear_member=prms.clear_member,$sessionStorage.removeItem("login")),prms.app_id&&($scope.bb.app_id=prms.app_id),prms.app_key&&($scope.bb.app_key=prms.app_key),prms.on_conflict&&($scope.bb.on_conflict=prms.on_conflict),prms.item_defaults?($scope.bb.original_item_defaults=prms.item_defaults,$scope.bb.item_defaults=angular.copy($scope.bb.original_item_defaults)):$scope.bb.original_item_defaults&&($scope.bb.item_defaults=angular.copy($scope.bb.original_item_defaults)),$scope.bb.selected_service&&$scope.bb.selected_service.company_id===company_id&&($scope.bb.item_defaults.service=$scope.bb.selected_service.id),prms.route_format&&($scope.bb.setRouteFormat(prms.route_format),$scope.bb_route_init&&$scope.bb_route_init()),prms.hide===!0?$scope.hide_page=!0:$scope.hide_page=!1,prms.from_datetime&&($scope.bb.from_datetime=prms.from_datetime),prms.to_datetime&&($scope.bb.to_datetime=prms.to_datetime),prms.min_date&&($scope.bb.min_date=prms.min_date),prms.max_date&&($scope.bb.max_date=prms.max_date),prms.hide_block&&($scope.bb.hide_block=prms.hide_block),prms.custom_partial_url||($scope.bb.path_setup=!0),prms.extra_setup&&($scope.bb.extra_setup=prms.extra_setup,prms.extra_setup.step&&($scope.bb.starting_step_number=parseInt(prms.extra_setup.step)),prms.extra_setup.return_url&&($scope.bb.return_url=prms.extra_setup.return_url),prms.extra_setup.destination&&($scope.bb.destination=prms.extra_setup.destination)),prms.booking_settings&&($scope.bb.booking_settings=prms.booking_settings),prms.template&&($scope.bb.template=prms.template),prms.login_required&&($scope.bb.login_required=!0),prms.private_note&&($scope.bb.private_note=prms.private_note),prms.qudini_booking_id&&($scope.bb.qudini_booking_id=prms.qudini_booking_id),_this.waiting_for_conn_started_def=$q.defer(),$scope.waiting_for_conn_started=_this.waiting_for_conn_started_def.promise,company_id||$scope.bb.affiliate_id?$scope.waiting_for_conn_started=$rootScope.connection_started:_this.waiting_for_conn_started_def.resolve(),widgetStarted.resolve(),setup_promises2=[],setup_promises=[],$scope.bb.affiliate_id&&(aff_promise=halClient.$get($scope.bb.api_url+"/api/v1/affiliates/"+$scope.bb.affiliate_id),setup_promises.push(aff_promise),aff_promise.then(function(affiliate){var comp_p,comp_promise;return $scope.bb.$wait_for_routing&&setup_promises2.push($scope.bb.$wait_for_routing.promise),setAffiliate(new BBModel.Affiliate(affiliate)),$scope.bb.item_defaults.affiliate=$scope.affiliate,prms.company_ref?(comp_p=$q.defer(),comp_promise=$scope.affiliate.getCompanyByRef(prms.company_ref),setup_promises2.push(comp_p.promise),comp_promise.then(function(company){return setCompany(company,prms.keep_basket).then(function(val){return comp_p.resolve(val)},function(err){return comp_p.reject(err)})},function(err){return comp_p.reject(err)})):void 0})),company_id&&(prms.embed&&(embed_params=prms.embed),embed_params||(embed_params=null),comp_category_id=null,null!=$scope.bb.item_defaults.category&&(comp_category_id=null!=$scope.bb.item_defaults.category.id?$scope.bb.item_defaults.category.id:$scope.bb.item_defaults.category),comp_def=$q.defer(),comp_promise=comp_def.promise,options={},$sessionStorage.getItem("auth_token")&&(options.auth_token=$sessionStorage.getItem("auth_token")),$scope.bb.isAdmin?(comp_url=new UriTemplate($scope.bb.api_url+$scope.company_admin_api_path).fillFromObject({company_id:company_id,category_id:comp_category_id,embed:embed_params}),halClient.$get(comp_url,options).then(function(company){return comp_def.resolve(company)},function(err){return comp_url=new UriTemplate($scope.bb.api_url+$scope.company_api_path).fillFromObject({company_id:company_id,category_id:comp_category_id,embed:embed_params}),halClient.$get(comp_url,options).then(function(company){return comp_def.resolve(company)},function(err){return comp_def.reject(err)})})):(comp_url=new UriTemplate($scope.bb.api_url+$scope.company_api_path).fillFromObject({company_id:company_id,category_id:comp_category_id,embed:embed_params}),halClient.$get(comp_url,options).then(function(company){return company?comp_def.resolve(company):comp_def.reject("Invalid company ID "+company_id)},function(err){return comp_def.reject(err)})),setup_promises.push(comp_promise),comp_promise.then(function(company){var child,comp,cprom,parent_company;return $scope.bb.$wait_for_routing&&setup_promises2.push($scope.bb.$wait_for_routing.promise),comp=new BBModel.Company(company),cprom=$q.defer(),setup_promises2.push(cprom.promise),child=null,comp.companies&&$scope.bb.item_defaults.company&&(child=comp.findChildCompany($scope.bb.item_defaults.company)),child?(parent_company=comp,halClient.$get($scope.bb.api_url+"/api/v1/company/"+child.id).then(function(company){return comp=new BBModel.Company(company),setupDefaults(comp.id),$scope.bb.parent_company=parent_company,setCompany(comp,prms.keep_basket).then(function(){return cprom.resolve()},function(err){return cprom.reject()})},function(err){return cprom.reject()})):(setupDefaults(comp.id),setCompany(comp,prms.keep_basket).then(function(){return cprom.resolve()},function(err){return cprom.reject()}))}),prms.member_sso&&(params={company_id:company_id,root:$scope.bb.api_url,member_sso:prms.member_sso},sso_member_login=SSOService.memberLogin(params).then(function(client){return setClient(client)}),setup_promises.push(sso_member_login)),prms.admin_sso&&(params={company_id:prms.parent_company_id?prms.parent_company_id:company_id,root:$scope.bb.api_url,admin_sso:prms.admin_sso},sso_admin_login=SSOService.adminLogin(params).then(function(admin){return $scope.bb.admin=admin}),setup_promises.push(sso_admin_login)),total_id=$scope.bb.item_defaults&&$scope.bb.item_defaults.purchase_total_long_id?$scope.bb.item_defaults.purchase_total_long_id:QueryStringService("total_id"),total_id&&(params={purchase_id:total_id,url_root:$scope.bb.api_url},get_total=PurchaseService.query(params).then(function(total){return $scope.bb.total=total,total.paid>0?$scope.bb.payment_status="complete":void 0}),setup_promises.push(get_total))),$scope.isLoaded=!1,$q.all(setup_promises).then(function(){return $q.all(setup_promises2).then(function(){var base,clear_prom,def_clear;return $scope.bb.basket||(base=$scope.bb).basket||(base.basket=new BBModel.Basket(null,$scope.bb)),$scope.client||clearClient(),def_clear=$q.defer(),clear_prom=def_clear.promise,$scope.bb.current_item?def_clear.resolve():clear_prom=clearBasketItem(),clear_prom.then(function(){var page;return $scope.client_details||($scope.client_details=new BBModel.ClientDetails),$scope.bb.stacked_items||($scope.bb.stacked_items=[]),!$scope.bb.company&&!$scope.bb.affiliate||(connectionStarted.resolve(),$scope.done_starting=!0,prms.no_route)?void 0:(page=null,isFirstCall&&$bbug.isEmptyObject($scope.bb.routeSteps)&&(page=$scope.bb.firstStep),prms.first_page&&(page=prms.first_page),isFirstCall=!1,decideNextPage(page))})},function(err){return connectionStarted.reject("Failed to start widget"),LoadingService.setLoadedAndShowError($scope,err,"Sorry, something went wrong")})},function(err){return connectionStarted.reject("Failed to start widget"),LoadingService.setLoadedAndShowError($scope,err,"Sorry, something went wrong")})}}(this),setupDefaults=function(_this){return function(company_id){var category,clinic,def,event,event_chain,event_group,k,person,ref,resource,service,v;if(def=$q.defer(),isFirstCall||$scope.bb.orginal_company_id&&$scope.bb.orginal_company_id!==company_id){if($scope.bb.orginal_company_id=company_id,$scope.bb.default_setup_promises=[],$scope.bb.item_defaults.query){ref=$scope.bb.item_defaults.query;for(k in ref)v=ref[k],$scope.bb.item_defaults[k]=QueryStringService(v)}$scope.bb.item_defaults.resource&&(resource=$scope.bb.isAdmin?halClient.$get($scope.bb.api_url+"/api/v1/admin/"+company_id+"/resources/"+$scope.bb.item_defaults.resource):halClient.$get($scope.bb.api_url+"/api/v1/"+company_id+"/resources/"+$scope.bb.item_defaults.resource),$scope.bb.default_setup_promises.push(resource),resource.then(function(res){return $scope.bb.item_defaults.resource=new BBModel.Resource(res)})),$scope.bb.item_defaults.person&&(person=$scope.bb.isAdmin?halClient.$get($scope.bb.api_url+"/api/v1/admin/"+company_id+"/people/"+$scope.bb.item_defaults.person):halClient.$get($scope.bb.api_url+"/api/v1/"+company_id+"/people/"+$scope.bb.item_defaults.person),$scope.bb.default_setup_promises.push(person),person.then(function(res){return $scope.bb.item_defaults.person=new BBModel.Person(res)})),$scope.bb.item_defaults.person_ref&&(person=$scope.bb.isAdmin?halClient.$get($scope.bb.api_url+"/api/v1/admin/"+company_id+"/people/find_by_ref/"+$scope.bb.item_defaults.person_ref):halClient.$get($scope.bb.api_url+"/api/v1/"+company_id+"/people/find_by_ref/"+$scope.bb.item_defaults.person_ref),$scope.bb.default_setup_promises.push(person),person.then(function(res){return $scope.bb.item_defaults.person=new BBModel.Person(res)})),$scope.bb.item_defaults.service&&(service=$scope.bb.isAdmin?halClient.$get($scope.bb.api_url+"/api/v1/admin/"+company_id+"/services/"+$scope.bb.item_defaults.service):halClient.$get($scope.bb.api_url+"/api/v1/"+company_id+"/services/"+$scope.bb.item_defaults.service),$scope.bb.default_setup_promises.push(service),service.then(function(res){return $scope.bb.item_defaults.service=new BBModel.Service(res)})),$scope.bb.item_defaults.service_ref&&(service=$scope.bb.isAdmin?halClient.$get($scope.bb.api_url+"/api/v1/admin/"+company_id+"/services?api_ref="+$scope.bb.item_defaults.service_ref):halClient.$get($scope.bb.api_url+"/api/v1/"+company_id+"/services?api_ref="+$scope.bb.item_defaults.service_ref),$scope.bb.default_setup_promises.push(service),service.then(function(res){return $scope.bb.item_defaults.service=new BBModel.Service(res)})),$scope.bb.item_defaults.event_group&&(event_group=$scope.bb.isAdmin?halClient.$get($scope.bb.api_url+"/api/v1/admin/"+company_id+"/event_groups/"+$scope.bb.item_defaults.event_group):halClient.$get($scope.bb.api_url+"/api/v1/"+company_id+"/event_groups/"+$scope.bb.item_defaults.event_group),$scope.bb.default_setup_promises.push(event_group),event_group.then(function(res){return $scope.bb.item_defaults.event_group=new BBModel.EventGroup(res)})),$scope.bb.item_defaults.event&&(event=$scope.bb.isAdmin?halClient.$get($scope.bb.api_url+"/api/v1/admin/"+company_id+"/event_chains/"+$scope.bb.item_defaults.event_chain+"/events/"+$scope.bb.item_defaults.event):halClient.$get($scope.bb.api_url+"/api/v1/"+company_id+"/events/"+$scope.bb.item_defaults.event),$scope.bb.default_setup_promises.push(event),event.then(function(res){return $scope.bb.item_defaults.event=new BBModel.Event(res)})),$scope.bb.item_defaults.event_chain&&(event_chain=$scope.bb.isAdmin?halClient.$get($scope.bb.api_url+"/api/v1/admin/"+company_id+"/event_chains/"+$scope.bb.item_defaults.event_chain):halClient.$get($scope.bb.api_url+"/api/v1/"+company_id+"/event_chains/"+$scope.bb.item_defaults.event_chain),$scope.bb.default_setup_promises.push(event_chain),event_chain.then(function(res){return $scope.bb.item_defaults.event_chain=new BBModel.EventChain(res)})),$scope.bb.item_defaults.category&&(category=halClient.$get($scope.bb.api_url+"/api/v1/"+company_id+"/categories/"+$scope.bb.item_defaults.category),$scope.bb.default_setup_promises.push(category),category.then(function(res){return $scope.bb.item_defaults.category=new BBModel.Category(res)})),$scope.bb.item_defaults.clinic&&(clinic=halClient.$get($scope.bb.api_url+"/api/v1/"+company_id+"/clinics/"+$scope.bb.item_defaults.clinic),$scope.bb.default_setup_promises.push(clinic),clinic.then(function(res){return $scope.bb.item_defaults.clinic=new BBModel.Clinic(res)})),$scope.bb.item_defaults.duration&&($scope.bb.item_defaults.duration=parseInt($scope.bb.item_defaults.duration)),$q.all($scope.bb.default_setup_promises)["finally"](function(){return def.resolve()})}else def.resolve();return def.promise}}(this),setLoadingPage=function(_this){return function(val){return $scope.loading_page=val}}(this),isLoadingPage=function(_this){return function(){return $scope.loading_page}}(this),showPage=function(_this){return function(route,dont_record_page){return $scope.bb.updateRoute(route),$scope.jumped=!1,isLoadingPage()?void 0:(setLoadingPage(!0),$scope.bb.current_page===route?($scope.bb_main="",setTimeout(function(){return $scope.bb_main=$sce.trustAsResourceUrl($scope.bb.pageURL(route)),$scope.$apply()},0)):(AlertService.clear(),$scope.bb.current_page=route,dont_record_page||$scope.bb.recordCurrentPage(),LoadingService.notLoaded($scope),$scope.bb_main=$sce.trustAsResourceUrl($scope.bb.pageURL(route))),$rootScope.$broadcast("page:loaded"))}}(this),jumpToPage=function(_this){return function(route){return $scope.current_page=route,$scope.jumped=!0,$scope.bb_main=$sce.trustAsResourceUrl($scope.partial_url+route+$scope.page_suffix)}}(this),clearPage=function(){return $scope.bb_main=""},getPartial=function(file){return $scope.bb.pageURL(file)},setPageLoaded=function(){return LoadingService.setLoaded($scope)},setPageRoute=function(_this){return function(route){return $scope.bb.current_page_route=route,$scope.bb.routeSteps&&$scope.bb.routeSteps[route]?(showPage($scope.bb.routeSteps[route]),!0):!1}}(this),decideNextPage=function(route){if(route){if("none"===route)return;if($scope.bb.total&&"complete"===$scope.bb.payment_status){if(setPageRoute($rootScope.Route.Confirmation))return;return showPage("confirmation")}return showPage(route)}if($scope.bb.nextSteps&&$scope.bb.current_page&&$scope.bb.nextSteps[$scope.bb.current_page]&&!$scope.bb.routeSteps)return showPage($scope.bb.nextSteps[$scope.bb.current_page]);if(!$scope.client.valid()&&LoginService.isLoggedIn()&&($scope.client=new BBModel.Client(LoginService.member()._data)),$scope.bb.company&&$scope.bb.company.companies||!$scope.bb.company&&$scope.affiliate){if(setPageRoute($rootScope.Route.Company))return;return showPage("company_list")}if($scope.bb.total&&"complete"===$scope.bb.payment_status){if(setPageRoute($rootScope.Route.Confirmation))return;return showPage("confirmation")}if($scope.bb.total&&"pending"===$scope.bb.payment_status)return showPage("payment");if($scope.bb.company.$has("event_groups")&&!$scope.bb.current_item.event_group&&!$scope.bb.current_item.service&&!$scope.bb.current_item.product&&!$scope.bb.current_item.deal||$scope.bb.company.$has("events")&&$scope.bb.current_item.event_group&&null==$scope.bb.current_item.event&&!$scope.bb.current_item.product&&!$scope.bb.current_item.deal){if(setPageRoute($rootScope.Route.Event))return;return showPage("event_list")}if(!(!$scope.bb.company.$has("events")||!$scope.bb.current_item.event||$scope.bb.current_item.num_book||$scope.bb.current_item.tickets&&$scope.bb.current_item.tickets.qty||$scope.bb.current_item.product||$scope.bb.current_item.deal))return showPage("event");if($scope.bb.company.$has("services")&&!$scope.bb.current_item.service&&null==$scope.bb.current_item.event&&!$scope.bb.current_item.product&&!$scope.bb.current_item.deal){if(setPageRoute($rootScope.Route.Service))return;return showPage("service_list")}if($scope.bb.company.$has("resources")&&!$scope.bb.current_item.resource&&null==$scope.bb.current_item.event&&!$scope.bb.current_item.product&&!$scope.bb.current_item.deal){if(setPageRoute($rootScope.Route.Resource))return;return showPage("resource_list")}if($scope.bb.company.$has("people")&&!$scope.bb.current_item.person&&null==$scope.bb.current_item.event&&!$scope.bb.current_item.product&&!$scope.bb.current_item.deal){if(setPageRoute($rootScope.Route.Person))return;return showPage("person_list")}if(!($scope.bb.current_item.duration||null!=$scope.bb.current_item.event||$scope.bb.current_item.product||$scope.bb.current_item.deal)){if(setPageRoute($rootScope.Route.Duration))return;return showPage("duration_list")}if($scope.bb.current_item.days_link&&!$scope.bb.current_item.date&&null==$scope.bb.current_item.event&&!$scope.bb.current_item.deal){if($scope.bb.company.$has("availability_slots")){if(setPageRoute($rootScope.Route.Slot))return;return showPage("slot_list")}if(setPageRoute($rootScope.Route.Date))return;return showPage("calendar")}if(!(!$scope.bb.current_item.days_link||$scope.bb.current_item.time||null!=$scope.bb.current_item.event||$scope.bb.current_item.service&&"day"===$scope.bb.current_item.service.duration_unit||$scope.bb.current_item.deal)){if(setPageRoute($rootScope.Route.Time))return;return showPage("time")}if(!(!$scope.bb.moving_booking||$scope.bb.current_item.ready&&$scope.bb.current_item.move_done))return showPage("check_move");if(!$scope.client.valid()){if(setPageRoute($rootScope.Route.Client))return;return showPage("client")}if($scope.bb.current_item.item_details&&$scope.bb.current_item.item_details.hasQuestions&&!$scope.bb.current_item.asked_questions){
if(setPageRoute($rootScope.Route.Questions))return;return showPage("check_items")}if($scope.bb.moving_booking&&$scope.bb.basket.itemsReady())return showPage("purchase");if(!$scope.bb.basket.readyToCheckout()){if(setPageRoute($rootScope.Route.Summary))return;return showPage("basket_summary")}if($scope.bb.usingBasket&&(!$scope.bb.confirmCheckout||$scope.bb.company_settings.has_vouchers||$scope.bb.company.$has("coupon"))){if(setPageRoute($rootScope.Route.Basket))return;return showPage("basket")}if($scope.bb.basket.readyToCheckout()&&null===$scope.bb.payment_status&&!$scope.bb.basket.waiting_for_checkout){if(setPageRoute($rootScope.Route.Checkout))return;return showPage("checkout")}if("complete"===$scope.bb.payment_status){if(setPageRoute($rootScope.Route.Confirmation))return;return showPage("confirmation")}},showCheckout=function(){return $scope.bb.current_item.ready},addItemToBasket=function(){var add_defer;if(add_defer=$q.defer(),$scope.bb.current_item.submitted||$scope.bb.moving_booking){if($scope.bb.current_item.submitted)return $scope.bb.current_item.submitted;add_defer.resolve()}else moveToBasket(),$scope.bb.current_item.submitted=updateBasket(),$scope.bb.current_item.submitted.then(function(basket){return add_defer.resolve(basket)},function(err){return 409===err.status&&($scope.bb.current_item.person=null,$scope.bb.current_item.resource=null,$scope.bb.current_item.setTime(null),$scope.bb.current_item.service&&$scope.bb.current_item.setService($scope.bb.current_item.service)),$scope.bb.current_item.submitted=null,add_defer.reject(err)});return add_defer.promise},updateBasket=function(){var add_defer,current_item_ref,params;return current_item_ref=$scope.bb.current_item.ref,add_defer=$q.defer(),params={member_id:$scope.client.id,member:$scope.client,items:$scope.bb.basket.items,bb:$scope.bb},BBModel.Basket.$updateBasket($scope.bb.company,params).then(function(basket){var current_item,item,j,len,ref;for(ref=basket.items,j=0,len=ref.length;len>j;j++)item=ref[j],item.storeDefaults($scope.bb.item_defaults);return halClient.clearCache("time_data"),halClient.clearCache("events"),basket.setSettings($scope.bb.basket.settings),setBasket(basket),current_item=_.find(basket.items,function(item){return item.ref===current_item_ref}),current_item||(current_item=_.last(basket.items)),setBasketItem(current_item),$scope.bb.current_item?add_defer.resolve(basket):clearBasketItem().then(function(){return add_defer.resolve(basket)})},function(err){var error_modal;return add_defer.reject(err),409===err.status?(halClient.clearCache("time_data"),halClient.clearCache("events"),$scope.bb.current_item.person=null,error_modal=$uibModal.open({templateUrl:getPartial("_error_modal"),controller:["$scope","$uibModalInstance",function($scope,$uibModalInstance){return $scope.message=ErrorService.getError("ITEM_NO_LONGER_AVAILABLE").msg,$scope.ok=function(){return $uibModalInstance.close()}}]}),error_modal.result["finally"](function(){if($scope.bb.on_conflict)return $scope.$eval($scope.bb.on_conflict);if(!$scope.bb.nextSteps)return decideNextPage();if(setPageRoute($rootScope.Route.Date));else if(!setPageRoute($rootScope.Route.Event))return loadPreviousStep()})):void 0}),add_defer.promise},emptyBasket=function(){var defer;return defer=$q.defer(),!$scope.bb.basket.items||$scope.bb.basket.items&&0===$scope.bb.basket.items.length?defer.resolve():BBModel.Basket.$empty($scope.bb).then(function(basket){return $scope.bb.current_item.id&&delete $scope.bb.current_item.id,setBasket(basket),defer.resolve()},function(err){return defer.reject()}),defer.promise},deleteBasketItem=function(item){return BBModel.Basket.$deleteItem(item,$scope.bb.company,{bb:$scope.bb}).then(function(basket){return setBasket(basket)})},deleteBasketItems=function(items){var item,j,len,results;for(results=[],j=0,len=items.length;len>j;j++)item=items[j],results.push(BBModel.Basket.$deleteItem(item,$scope.bb.company,{bb:$scope.bb}).then(function(basket){return setBasket(basket)}));return results},clearBasketItem=function(){var def;return def=$q.defer(),setBasketItem(new BBModel.BasketItem(null,$scope.bb)),$scope.bb.default_setup_promises?$q.all($scope.bb.default_setup_promises)["finally"](function(){return $scope.bb.current_item.setDefaults($scope.bb.item_defaults),$q.all($scope.bb.current_item.promises)["finally"](function(){return def.resolve()})}):($scope.bb.current_item.setDefaults({}),def.resolve()),def.promise},setBasketItem=function(item){return $scope.bb.current_item=item},setReadyToCheckout=function(ready){return $scope.bb.confirmCheckout=ready},moveToBasket=function(){return $scope.bb.basket.addItem($scope.bb.current_item)},quickEmptybasket=function(options){var def,preserve_stacked_items;return preserve_stacked_items=!(!options||!options.preserve_stacked_items),preserve_stacked_items?($scope.bb.basket=new BBModel.Basket(null,$scope.bb),$scope.basket=$scope.bb.basket,$scope.bb.basket.company_id=$scope.bb.company_id,def=$q.defer(),def.resolve(),def.promise):($scope.bb.stacked_items=[],setBasket(new BBModel.Basket(null,$scope.bb)),clearBasketItem())},setBasket=function(basket){return $scope.bb.basket=basket,$scope.basket=basket,$scope.bb.basket.company_id=$scope.bb.company_id,$scope.bb.stacked_items?$scope.bb.setStackedItems(basket.timeItems()):void 0},logout=function(route){return $scope.client&&$scope.client.valid()?LoginService.logout({root:$scope.bb.api_url}).then(function(){return $scope.client=new BBModel.Client,decideNextPage(route)}):$scope.member?LoginService.logout({root:$scope.bb.api_url}).then(function(){return $scope.member=new BBModel.Member.Member,decideNextPage(route)}):void 0},setAffiliate=function(affiliate){return $scope.bb.affiliate_id=affiliate.id,$scope.bb.affiliate=affiliate,$scope.affiliate=affiliate,$scope.affiliate_id=affiliate.id},restoreBasket=function(){var restore_basket_defer;return restore_basket_defer=$q.defer(),quickEmptybasket().then(function(){var auth_token,href,params,status,uri;return auth_token=$localStorage.getItem("auth_token")||$sessionStorage.getItem("auth_token"),href=$scope.bb.api_url+"/api/v1/status{?company_id,affiliate_id,clear_baskets,clear_member}",params={company_id:$scope.bb.company_id,affiliate_id:$scope.bb.affiliate_id,clear_baskets:$scope.bb.clear_basket?"1":null,clear_member:$scope.bb.clear_member?"1":null},uri=new UriTemplate(href).fillFromObject(params),status=halClient.$get(uri,{auth_token:auth_token,no_cache:!0}),status.then(function(_this){return function(res){return res.$has("client")&&res.$get("client").then(function(client){return!$scope.client||$scope.client&&!$scope.client.valid()?$scope.client=new BBModel.Client(client):void 0}),res.$has("member")&&res.$get("member").then(function(member){return"Contact"!==member.client_type?(member=LoginService.setLogin(member),setClient(member)):void 0}),$scope.bb.clear_basket?restore_basket_defer.resolve():res.$has("baskets")?res.$get("baskets").then(function(baskets){var basket;return basket=_.find(baskets,function(b){return parseInt(b.company_id)===$scope.bb.company_id}),basket?(basket=new BBModel.Basket(basket,$scope.bb),basket.$get("items").then(function(items){var i,j,len,promises;for(items=function(){var j,len,results;for(results=[],j=0,len=items.length;len>j;j++)i=items[j],results.push(new BBModel.BasketItem(i));return results}(),j=0,len=items.length;len>j;j++)i=items[j],basket.addItem(i);return setBasket(basket),promises=[].concat.apply([],function(){var l,len1,results;for(results=[],l=0,len1=items.length;len1>l;l++)i=items[l],results.push(i.promises);return results}()),$q.all(promises).then(function(){return basket.items.length>0&&setBasketItem(basket.items[0]),restore_basket_defer.resolve()})})):restore_basket_defer.resolve()}):restore_basket_defer.resolve()}}(this),function(err){return restore_basket_defer.resolve()})}),restore_basket_defer.promise},setCompany=function(company,keep_basket){var defer;return defer=$q.defer(),$scope.bb.company_id=company.id,$scope.bb.company=company,$scope.bb.item_defaults.company=$scope.bb.company,company.$has("settings")?company.getSettings().then(function(_this){return function(settings){return $scope.bb.company_settings=settings,setActiveCompany(company,settings),$scope.bb.company_settings.merge_resources&&($scope.bb.item_defaults.merge_resources=!0),$scope.bb.company_settings.merge_people&&($scope.bb.item_defaults.merge_people=!0),$rootScope.bb_currency=$scope.bb.company_settings.currency,$scope.bb.currency=$scope.bb.company_settings.currency,$scope.bb.has_prices=$scope.bb.company_settings.has_prices,!$scope.bb.basket||$scope.bb.basket.company_id!==$scope.bb.company_id&&!keep_basket?restoreBasket().then(function(){return defer.resolve(),$scope.$emit("company:setup")}):(defer.resolve(),$scope.$emit("company:setup"))}}(this)):(!$scope.bb.basket||$scope.bb.basket.company_id!==$scope.bb.company_id&&!keep_basket?restoreBasket().then(function(){return defer.resolve(),$scope.$emit("company:setup")}):(defer.resolve(),$scope.$emit("company:setup")),setActiveCompany(company)),defer.promise},setActiveCompany=function(company,settings){return CompanyStoreService.currency_code=settings?settings.currency:company.currency_code,CompanyStoreService.time_zone=company.timezone,CompanyStoreService.country_code=company.country_code,CompanyStoreService.settings=settings},setStepTitle=function(title){return $scope.bb.steps[$scope.bb.current_step-1].title=title},getCurrentStepTitle=function(){var steps;return steps=$scope.bb.steps,(!_.compact(steps).length||1===steps.length&&steps[0].number!==$scope.bb.current_step)&&(steps=$scope.bb.allSteps),$scope.bb.current_step?steps[$scope.bb.current_step-1].title:void 0},checkStepTitle=function(title){return $scope.bb.steps[$scope.bb.current_step-1]&&!$scope.bb.steps[$scope.bb.current_step-1].title?setStepTitle(title):void 0},loadStep=function(step){var j,len,prev_step,ref,st;if(step!==$scope.bb.current_step&&($scope.bb.calculatePercentageComplete(step),st=$scope.bb.steps[step],prev_step=$scope.bb.steps[step-1],st&&!prev_step&&(prev_step=st),st||(st=prev_step),st&&!$scope.bb.last_step_reached&&(st.stacked_length&&0!==st.stacked_length||($scope.bb.stacked_items=[]),$scope.bb.current_item.loadStep(st.current_item),$scope.bb.steps.length>1&&$scope.bb.steps.splice(step,$scope.bb.steps.length-step),$scope.bb.current_step=step,showPage(prev_step.page,!0)),$scope.bb.allSteps)){for(ref=$scope.bb.allSteps,j=0,len=ref.length;len>j;j++)step=ref[j],step.active=!1,step.passed=step.number<$scope.bb.current_step;if($scope.bb.allSteps[$scope.bb.current_step-1])return $scope.bb.allSteps[$scope.bb.current_step-1].active=!0}},loadPreviousStep=function(caller){var last_step,pages_to_remove_from_history,past_steps,step_to_load;for(past_steps=_.reject($scope.bb.steps,function(s){return s.number>=$scope.bb.current_step}),step_to_load=0;past_steps[0]&&(last_step=past_steps.pop());)if(!last_step.skipped){step_to_load=last_step.number;break}return $scope.bb.routeFormat&&(pages_to_remove_from_history=0===step_to_load?$scope.bb.current_step+1:$scope.bb.current_step-step_to_load,"locationChangeStart"===caller&&pages_to_remove_from_history--,pages_to_remove_from_history>0&&window.history.go(-1*pages_to_remove_from_history)),step_to_load>0?loadStep(step_to_load):void 0},loadStepByPageName=function(page_name){var j,len,ref,step;for(ref=$scope.bb.allSteps,j=0,len=ref.length;len>j;j++)if(step=ref[j],step.page===page_name)return loadStep(step.number);return loadStep(1)},reset=function(){return $rootScope.$broadcast("clear:formData"),$rootScope.$broadcast("widget:restart"),setLastSelectedDate(null),LoginService.isLoggedIn()||($scope.client=new BBModel.Client),$scope.bb.last_step_reached=!1,$scope.bb.steps.splice(1)},restart=function(){return reset(),loadStep(1)},setRoute=function(rdata){return $scope.bb.setRoute(rdata)},setBasicRoute=function(routes){return $scope.bb.setBasicRoute(routes)},skipThisStep=function(){return $scope.bb.steps[$scope.bb.steps.length-1]?$scope.bb.steps[$scope.bb.steps.length-1].skipped=!0:void 0},setUsingBasket=function(_this){return function(usingBasket){return $scope.bb.usingBasket=usingBasket}}(this),setClient=function(_this){return function(client){return $scope.client=client,client.postcode&&!$scope.bb.postcode?$scope.bb.postcode=client.postcode:void 0}}(this),clearClient=function(_this){return function(){return $scope.client=new BBModel.Client,$window.bb_setup&&$scope.client.setDefaults($window.bb_setup),$scope.bb.client_defaults?$scope.client.setDefaults($scope.bb.client_defaults):void 0}}(this),getUrlParam=function(_this){return function(param){return $window.getURIparam(param)}}(this),base64encode=function(_this){return function(param){return $window.btoa(param)}}(this),setLastSelectedDate=function(_this){return function(date){return $scope.last_selected_date=date}}(this),broadcastItemUpdate=function(_this){return function(){return $scope.$broadcast("currentItemUpdate",$scope.bb.current_item)}}(this),hidePage=function(){return $scope.hide_page=!0},companySet=function(){return null!=$scope.bb.company_id},isAdmin=function(){return $scope.bb.isAdmin},isAdminIFrame=function(){var err,error,location;if(!$scope.bb.isAdmin)return!1;try{return location=$window.parent.location.href,!(!location||!$window.parent.reload_dashboard)}catch(error){return err=error,!1}},reloadDashboard=function(){return $window.parent.reload_dashboard()},$debounce=function(tim){return $scope._debouncing?!1:(tim||(tim=100),$scope._debouncing=!0,$timeout(function(){return $scope._debouncing=!1},tim))},supportsTouch=function(){return Modernizr.touch},isMemberLoggedIn=function(){return LoginService.isLoggedIn()},scrollTo=function(id){return $location.hash(id),$anchorScroll()},redirectTo=function(url){return $window.location.href=url}}],angular.module("BB.Controllers").controller("BBCtrl",BBCtrl)}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbWidget",["PathSvc","$http","$log","$templateCache","$compile","$q","AppConfig","$timeout","$bbug","$rootScope","AppService",function(PathSvc,$http,$log,$templateCache,$compile,$q,AppConfig,$timeout,$bbug,$rootScope,AppService){var appendCustomPartials,getTemplate,link,renderTemplate,setupPusher,updatePartials;return getTemplate=function(template){var fromTemplateCache,partial,src;return partial=template?template:"main",fromTemplateCache=$templateCache.get(partial),fromTemplateCache?fromTemplateCache:(src=PathSvc.directivePartial(partial).$$unwrapTrustedValue(),$http.get(src,{cache:$templateCache}).then(function(response){return response.data}))},updatePartials=function(scope,element,prms){var i,j,len,ref;for(ref=element.children(),j=0,len=ref.length;len>j;j++)i=ref[j],$bbug(i).hasClass("custom_partial")&&$bbug(i).remove();return appendCustomPartials(scope,element,prms).then(function(){return scope.$broadcast("refreshPage")})},setupPusher=function(scope,element,prms){return $timeout(function(){return scope.pusher=new Pusher("c8d8cea659cc46060608"),scope.pusher_channel=scope.pusher.subscribe("widget_"+prms.design_id),scope.pusher_channel.bind("update",function(data){return updatePartials(scope,element,prms)})})},appendCustomPartials=function(scope,element,prms){var defer;return defer=$q.defer(),$http.get(prms.custom_partial_url).then(function(custom_templates){return $compile(custom_templates.data)(scope,function(custom,scope){var non_style,style,tag;return custom.addClass("custom_partial"),style=function(){var j,len,results;for(results=[],j=0,len=custom.length;len>j;j++)tag=custom[j],"STYLE"===tag.tagName&&results.push(tag);return results}(),non_style=function(){var j,len,results;for(results=[],j=0,len=custom.length;len>j;j++)tag=custom[j],"STYLE"!==tag.tagName&&results.push(tag);return results}(),$bbug("#widget_"+prms.design_id).html(non_style),element.append(style),scope.bb.path_setup=!0,defer.resolve(style)})}),defer.promise},renderTemplate=function(scope,element,design_mode,template){return $q.when(getTemplate(template)).then(function(template){return element.html(template).show(),design_mode&&element.append("<style widget_css scoped></style>"),$compile(element.contents())(scope)})},link=function(scope,element,attrs,controller,transclude){var evaluator,init_params,notInModal;null!=attrs.member&&(scope.client=attrs.member),evaluator=scope,scope.useParent&&null!=scope.$parent&&(evaluator=scope.$parent),init_params=evaluator.$eval(attrs.bbWidget),scope.initWidget(init_params),$rootScope.widget_started.then(function(_this){return function(){var prms;return prms=scope.bb,prms.custom_partial_url&&(prms.design_id=prms.custom_partial_url.match(/^.*\/(.*?)$/)[1],$bbug("[ng-app='BB']").append("<div id='widget_"+prms.design_id+"'></div>")),scope.bb.partial_url&&(init_params.partial_url?AppConfig.partial_url=init_params.partial_url:AppConfig.partial_url=scope.bb.partial_url),transclude(scope,function(clone){return scope.has_content=clone.length>1||1===clone.length&&(!clone[0].wholeText||/\S/.test(clone[0].wholeText)),scope.has_content?prms.custom_partial_url?(appendCustomPartials(scope,element,prms),prms.update_design&&setupPusher(scope,element,prms),scope.$on("refreshPage",function(){return scope.showPage(scope.bb.current_page)})):(element.html(clone).show(),prms.design_mode?element.append("<style widget_css scoped></style>"):void 0):(prms.custom_partial_url?appendCustomPartials(scope,element,prms).then(function(style){return $q.when(getTemplate()).then(function(template){return element.html(template).show(),$compile(element.contents())(scope),element.append(style),prms.update_design?setupPusher(scope,element,prms):void 0})}):prms.template?renderTemplate(scope,element,prms.design_mode,prms.template):renderTemplate(scope,element,prms.design_mode),scope.$on("refreshPage",function(){return renderTemplate(scope,element,prms.design_mode,prms.template)}))})}}(this)),notInModal=function(p){return 0===p.length||void 0===p[0].attributes?!0:void 0!==p[0].attributes["uib-modal-window"]?!1:0===p.parent().length?!0:notInModal(p.parent())},scope.$watch(function(){return AppService.isModalOpen()},function(modalOpen){return scope.coveredByModal=modalOpen&¬InModal(element.parent())})},{restrict:"A",scope:{client:"=?",apiUrl:"@?",useParent:"="},transclude:!0,controller:"BBCtrl",controllerAs:"$bbCtrl",link:link}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbToggleEdit",["$compile","$window","$document",function($compile,$window,$document){return{restrict:"AE",link:function(scope,element,attr){return scope.editing=!1,element.on("dblclick",function(_this){return function(event){return scope.$apply(function(){return scope.editing=!0})}}(this)),$document.on("click",function(_this){return function(){return element.is(":hover")?void 0:scope.$apply(function(){return scope.editing=!1})}}(this)),!0}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbApiUrl",["$rootScope","$compile","$sniffer","$timeout","$window","$location",function($rootScope,$compile,$sniffer,$timeout,$window,$location){return{restrict:"A",scope:{apiUrl:"@bbApiUrl"},compile:function(tElem,tAttrs){return{pre:function(scope,element,attrs){var src,url;return $rootScope.bb||($rootScope.bb={}),$rootScope.bb.api_url=scope.apiUrl,url=document.createElement("a"),url.href=scope.apiUrl,($sniffer.msie&&$sniffer.msie<=9||$sniffer.webkit&&$sniffer.webkit<537)&&""!==url.host&&url.host!==$location.host()&&url.host!==$location.host()+":"+$location.port()?(src=":"===url.protocol[url.protocol.length-1]?url.protocol+"//"+url.host+"/ClientProxy.html":url.protocol+"://"+url.host+"/ClientProxy.html",$rootScope.iframe_proxy_ready=!1,$compile("<iframe id='ieapiframefix' name='"+url.hostname+("' src='"+src+"' style='visibility:false;display:none;'></iframe>"))(scope,function(_this){return function(cloned,scope){return cloned.bind("load",function(){return $rootScope.iframe_proxy_ready=!0,$rootScope.$broadcast("iframe_proxy_ready",{iframe_proxy_ready:!0})}),element.append(cloned)}}(this))):void 0}}}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbBlurOnReturn",["$timeout",function($timeout){return{restrict:"A",require:"ngModel",link:function(scope,el,attrs){return el.keydown(function(e){var key;return key=e.which||e.keyCode,13===key||"13"===key?$timeout(function(){return e.target?e.target.blur():void 0},10):void 0})}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbBookingExport",function(){return{restrict:"AE",scope:{booking:"=bbBookingExport"},templateUrl:"_popout_export_booking.html",link:function(scope,el,attrs){var setHTML;return scope.$watch("booking",function(new_val,old_val){return new_val?setHTML():void 0}),setHTML=function(){return scope.content="<div class='text-center'><a href='"+scope.booking.webcalLink()+"'><img src='images/outlook.png' alt='outlook calendar icon' height='30' width='30' /><div class='clearfix'></div><span>Outlook</span></a></div><p></p>"+("<div class='text-center'><a href='"+scope.booking.gcalLink()+"'><img src='images/google.png' alt='google calendar icon' height='30' width='30' /><div class='clearfix'></div><span>Google</span></a></div><p></p>")+("<div class='text-center'><a href='"+scope.booking.icalLink()+"'><img src='images/ical.png' alt='ical calendar icon' height='30' width='30' /><div class='clearfix'></div><span>iCal</span></a></div>")}}}})}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbCapitaliseFirstLetter",function(){return{restrict:"A",require:["ngModel"],link:function(scope,element,attrs,ctrls){var ngModel;return ngModel=ctrls[0],scope.$watch(attrs.ngModel,function(newval,oldval){var string;newval&&(string=scope.$eval(attrs.ngModel),string=string.charAt(0).toUpperCase()+string.slice(1),ngModel.$setViewValue(string),ngModel.$render())})}}})}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbCommPref",function(){return{restrict:"A",require:["ngModel"],link:function(scope,element,attrs,ctrls){var comm_pref,ng_model_ctrl,parser;return ng_model_ctrl=ctrls[0],comm_pref=scope.$eval(attrs.bbCommPref)||!1,null!=scope.bb.current_item.settings.send_email_followup&&null!=scope.bb.current_item.settings.send_sms_followup?comm_pref=scope.bb.current_item.settings.send_email_followup:(scope.bb.current_item.settings.send_email_followup=comm_pref,scope.bb.current_item.settings.send_sms_followup=comm_pref),ng_model_ctrl.$setViewValue(comm_pref),parser=function(value){return scope.bb.current_item.settings.send_email_followup=value,scope.bb.current_item.settings.send_sms_followup=value,value},ng_model_ctrl.$parsers.push(parser)}}})}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbCountTicketTypes",["$rootScope",function($rootScope){return{restrict:"A",scope:!1,link:function(scope,element,attrs){var countTicketTypes;return $rootScope.connection_started.then(function(){return countTicketTypes()}),scope.$on("basket:updated",function(event,basket){return countTicketTypes()}),countTicketTypes=function(items){var counts,i,item,len;for(items=scope.bb.basket.timeItems(),counts=[],i=0,len=items.length;len>i;i++)item=items[i],item.tickets&&(counts[item.tickets.name]?counts[item.tickets.name]+=item.tickets.qty:counts[item.tickets.name]=item.tickets.qty,item.number=counts[item.tickets.name]);return scope.counts=counts}}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbDate",function(){return{restrict:"AE",scope:!0,link:function(scope,element,attrs){var date,track_service;return track_service=null!=attrs.bbTrackService,date=attrs.bbDate?moment(scope.$eval(attrs.bbDate)):scope.bb&&scope.bb.current_item&&scope.bb.current_item.date?scope.bb.current_item.date.date:moment(),track_service&&scope.bb.current_item&&scope.bb.current_item.service&&(scope.min_date=scope.bb.current_item.service.min_advance_datetime,scope.max_date=scope.bb.current_item.service.max_advance_datetime),scope.$broadcast("dateChanged",moment(date)),scope.bb_date={date:date,js_date:date.toDate(),addDays:function(type,amount){return this.date=moment(this.date).add(amount,type),this.js_date=this.date.toDate(),scope.$broadcast("dateChanged",moment(this.date))},subtractDays:function(type,amount){return this.addDays(type,-amount)},setDate:function(date){return this.date=date,this.js_date=date.toDate(),scope.$broadcast("dateChanged",moment(this.date))}},scope.$on("currentItemUpdate",function(event){return scope.bb.current_item.service&&track_service&&(scope.min_date=scope.bb.current_item.service.min_advance_datetime,scope.max_date=scope.bb.current_item.service.max_advance_datetime,scope.bb_date.date.isBefore(scope.min_date,"day")&&scope.bb_date.setDate(scope.min_date.clone()),scope.bb_date.date.isAfter(scope.max_date,"day"))?scope.bb_date.setDate(scope.max_date.clone()):void 0}),scope.$watch("bb_date.js_date",function(newval,oldval){var ndate;return ndate=moment(newval),!scope.bb_date.date.isSame(ndate)&&(scope.bb_date.date=ndate,moment(ndate).isValid())?scope.$broadcast("dateChanged",moment(ndate)):void 0})}}})}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbDateSplit",["$parse",function($parse){return{restrict:"A",require:["ngModel"],link:function(scope,element,attrs,ctrls){var ngModel,question;return ngModel=ctrls[0],question=scope.$eval(attrs.bbDateSplit),question.date={day:null,month:null,year:null,date:null,joinDate:function(){var date_string;return this.day&&this.month&&this.year?(date_string=this.day+"/"+this.month+"/"+this.year,this.date=moment(date_string,"DD/MM/YYYY"),date_string=this.date.toISODate(),ngModel.$setViewValue(date_string),ngModel.$render()):void 0},splitDate:function(date){return date&&date.isValid()?(this.day=date.date(),this.month=date.month()+1,this.year=date.year(),this.date=date):void 0}},question.answer&&question.date.splitDate(moment(question.answer)),ngModel.$viewValue?question.date.splitDate(moment(ngModel.$viewValue)):void 0}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbDebounce",["$timeout",function($timeout){return{restrict:"A",link:function(scope,element,attrs){var delay;return delay=400,attrs.bbDebounce&&(delay=attrs.bbDebounce),element.bind("click",function(_this){return function(){return $timeout(function(){return element.attr("disabled",!0)},0),$timeout(function(){return element.attr("disabled",!1)},delay)}}(this))}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbDynamicFooter",["$timeout","$bbug",function($timeout,$bbug){return function(scope,el,attrs){return scope.$on("page:loaded",function(){return $bbug(".content").css("height","auto")}),scope.$watch(function(){return $bbug(".content")[0].scrollHeight},function(new_val,old_val){return new_val!==old_val?scope.setContentHeight():void 0}),scope.setContentHeight=function(){var content_height,min_content_height;return $bbug(".content").css("height","auto"),content_height=$bbug(".content")[0].scrollHeight,min_content_height=$bbug(window).innerHeight()-$bbug(".content").offset().top-$bbug(".footer").height(),min_content_height>content_height?$bbug(".content").css("height",min_content_height+"px"):void 0},$bbug(window).on("resize",function(){return scope.setContentHeight()})}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbFormResettable",["$parse",function($parse){return{restrict:"A",controller:["$scope","$element","$attrs",function($scope,$element,$attrs){return $scope.inputs=[],$scope.resetForm=function(options){var i,input,len,ref,results;for(options&&options.clear_submitted&&($scope[$attrs.name].submitted=!1),ref=$scope.inputs,results=[],i=0,len=ref.length;len>i;i++)input=ref[i],input.getter.assign($scope,null),results.push(input.controller.$setPristine());return results},{registerInput:function(input,ctrl){var getter;return getter=$parse(input),$scope.inputs.push({getter:getter,controller:ctrl})}}}]}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbHeader",["$compile",function($compile){return{link:function(scope,element,attr){return scope.bb.waitForRoutes(),scope.$watch("bb.path_setup",function(_this){return function(newval,oldval){return newval?(element.attr("ng-include","'"+scope.getPartial(attr.bbHeader)+"'"),element.attr("bb-header",null),$compile(element)(scope)):void 0}}(this))}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbInclude",["$compile","$rootScope",function($compile,$rootScope){return{link:function(scope,element,attr){var track_page;return track_page=null!=attr.bbTrackPage,scope.$watch("bb.path_setup",function(_this){return function(newval,oldval){return newval&&(element.attr("ng-include","'"+scope.getPartial(attr.bbInclude)+"'"),element.attr("bb-include",null),$compile(element)(scope),track_page)?$rootScope.$broadcast("page:loaded",attr.bbInclude):void 0}}(this))}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbLocalNumber",["$filter",function($filter){return{restrict:"A",scope:{},require:"ngModel",link:function(scope,element,attrs,ctrl){var prettyifyNumber,storeNumber;return scope.userinput_mobile=null,storeNumber=function(value){return value&&(scope.userinput_mobile=value),value},prettyifyNumber=function(value){return scope.userinput_mobile?value=scope.userinput_mobile:$filter("local_phone_number")(value)},ctrl.$parsers.push(storeNumber),ctrl.$formatters.push(prettyifyNumber)}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbPadWithZeros",function(){return{restrict:"A",require:"ngModel",link:function(scope,element,attrs,ctrl){var how_many,options,padNumber;return options=scope.$eval(attrs.bbPadWithZeros)||{},how_many=options.how_many||2,padNumber=function(value){var i,index,padding,ref;if(value=String(value),value&&value.length<how_many){for(padding="",index=i=1,ref=how_many-value.length;ref>=1?ref>=i:i>=ref;index=ref>=1?++i:--i)padding+="0";value=padding.concat(value)}return value},ctrl.$formatters.push(padNumber)}}})}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbPriceFilter",["PathSvc",function(PathSvc){return{restrict:"AE",replace:!0,scope:!1,require:"^?bbServices",templateUrl:function(element,attrs){return PathSvc.directivePartial("_price_filter")},controller:["$scope","$attrs",function($scope,$attrs){var setPricefilter,suitable_max;return $scope.$watch("items",function(new_val,old_val){return new_val?setPricefilter(new_val):void 0}),setPricefilter=function(items){return $scope.price_array=_.uniq(_.map(items,function(item){return item.price/100||0})),$scope.price_array.sort(function(a,b){return a-b}),suitable_max()},suitable_max=function(){var max_number,min_number,top_number;return top_number=_.last($scope.price_array),max_number=function(){switch(!1){case!(1>top_number):return 0;case!(11>top_number):return 10;case!(51>top_number):return 50;case!(101>top_number):return 100;case!(1e3>top_number):return 100*Math.ceil(top_number/100)}}(),min_number=0,$scope.price_options={min:min_number,max:max_number},$scope.filters.price={min:min_number,max:max_number}},$scope.$watch("filters.price.min",function(new_val,old_val){return new_val!==old_val?$scope.filterChanged():void 0}),$scope.$watch("filters.price.max",function(new_val,old_val){return new_val!==old_val?$scope.filterChanged():void 0})}]}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbPrintPage",["$window","$timeout",function($window,$timeout){return{restrict:"A",link:function(scope,element,attr){return attr.bbPrintPage?scope.$watch(attr.bbPrintPage,function(_this){return function(newVal,oldVal){return $timeout(function(){return $window.print()},3e3)}}(this)):void 0}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbRaiseAlertWhenInvalid",["$compile",function($compile){return{require:"^form",link:function(scope,element,attr,ctrl){var options;return ctrl.raise_alerts=!0,
options=scope.$eval(attr.bbRaiseAlertWhenInvalid),options&&options.alert?ctrl.alert=options.alert:void 0}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbResettable",function(){return{restrict:"A",require:["ngModel","^bbFormResettable"],link:function(scope,element,attrs,ctrls){var formResettableCtrl,ngModelCtrl;return ngModelCtrl=ctrls[0],formResettableCtrl=ctrls[1],formResettableCtrl.registerInput(attrs.ngModel,ngModelCtrl)}}})}.call(this),function(){"use strict";angular.module("BB.Directives").directive("ngConfirmClick",function(){return{link:function(scope,element,attr){var clickAction,msg;return msg=attr.ngConfirmClick||"Are you sure?",clickAction=attr.ngConfirmedClick,element.bind("click",function(_this){return function(event){return window.confirm(msg)?scope.$eval(clickAction):void 0}}(this))}}})}.call(this),function(){"use strict";angular.module("BB.Directives").directive("ngDelayed",["$compile",function($compile){return{link:function(scope,element,attr){return scope[attr.ngDelayedWatch].then(function(_this){return function(logged){return element.attr(attr.ngDelayed,attr.ngDelayedValue),element.attr("ng-delayed-value",null),element.attr("ng-delayed-watch",null),element.attr("ng-delayed",null),$compile(element)(scope),attr.ngDelayedReady?scope[attr.ngDelayedReady].resolve(!0):void 0}}(this))}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("ngInitial",function(){return{restrict:"A",controller:["$scope","$element","$attrs","$parse",function($scope,$element,$attrs,$parse){var getter,setter,val;return val=$attrs.ngInitial||$attrs.value,getter=$parse($attrs.ngModel),setter=getter.assign,"true"===val?val=!0:"false"===val&&(val=!1),setter($scope,val)}]}})}.call(this),function(){"use strict";angular.module("BB.Directives").directive("ngValidInclude",["$compile",function($compile){return{link:function(scope,element,attr){return scope[attr.watchValue].then(function(_this){return function(logged){return element.attr("ng-include",attr.ngValidInclude),element.attr("ng-valid-include",null),$compile(element)(scope)}}(this))}}}])}.call(this),function(){"use strict";var app;app=angular.module("BB.Directives"),app.directive("bbPaypal",["PathSvc",function(PathSvc){return{restrict:"A",replace:!0,scope:{ppDetails:"=bbPaypal"},templateUrl:PathSvc.directivePartial("paypal_button"),link:function(scope,element,attrs){var keys;return scope.inputs=[],scope.ppDetails?(keys=_.keys(scope.ppDetails),_.each(keys,function(keyName){var obj;return obj={name:keyName,value:scope.ppDetails[keyName]},scope.inputs.push(obj)})):void 0}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbPaypalExpressButton",["$compile","$sce","$http","$templateCache","$q","$log","$window","UriTemplate",function($compile,$sce,$http,$templateCache,$q,$log,$window,UriTemplate){return{restrict:"EA",replace:!0,template:'<a ng-href="{{href}}" ng-click="showLoader()">Pay</a>',scope:{total:"=",bb:"=",decideNextPage:"=",paypalOptions:"=bbPaypalExpressButton",notLoaded:"="},link:function(scope,element,attributes){var paypalOptions,total;return total=scope.total,paypalOptions=scope.paypalOptions,scope.href=new UriTemplate(total.$link("paypal_express").href).fillFromObject(paypalOptions),scope.showLoader=function(){return scope.notLoaded?scope.notLoaded(scope):void 0}}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("ngOptions",["$sniffer","$rootScope",function($sniffer,$rootScope){return{restrict:"A",link:function(scope,el,attrs){var size;return size=parseInt(attrs.size,10),!isNaN(size)&&size>1&&$sniffer.msie?$rootScope.$on("loading:finished",function(){return el.focus(),$("body").focus()}):void 0}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbAddressMap",["$document",function($document){return{restrict:"A",scope:!0,replace:!0,controller:["$scope","$element","$attrs","uiGmapGoogleMapApi",function($scope,$element,$attrs,uiGmapGoogleMapApi){return $scope.isDraggable=$document.width()>480,uiGmapGoogleMapApi.then(function(maps){return maps.visualRefresh=!0,$scope.$watch($attrs.bbAddressMap,function(new_val,old_val){var map_item;if(new_val)return map_item=new_val,$scope.map={center:{latitude:map_item.lat,longitude:map_item["long"]},zoom:15},$scope.options={scrollwheel:!1,draggable:$scope.isDraggable},$scope.marker={id:0,coords:{latitude:map_item.lat,longitude:map_item["long"]}}})})}]}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbBackgroundImage",function(){return{restrict:"A",scope:!0,link:function(scope,el,attrs){var killWatch;if(attrs.bbBackgroundImage&&""!==attrs.bbBackgroundImage)return killWatch=scope.$watch(attrs.bbBackgroundImage,function(new_val,old_val){return new_val?(killWatch(),el.css("background-image",'url("'+new_val+'")')):void 0})}}})}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbCapacityView",function(){return{restrict:"A",template:"{{capacity_view_description}}",link:function(scope,el,attrs){var killWatch,ticket_type;return ticket_type=attrs.ticketTypeSingular||"ticket",killWatch=scope.$watch(attrs.bbCapacityView,function(item){var num_spaces_plural,spaces_left_plural;if(item)switch(killWatch(),num_spaces_plural=item.num_spaces>1?"s":"",spaces_left_plural=item.spaces_left>1?"s":"",item.chain.capacity_view){case"NUM_SPACES":return scope.capacity_view_description=scope.ticket_spaces=item.num_spaces+" "+ticket_type+num_spaces_plural;case"NUM_SPACES_LEFT":return scope.capacity_view_description=scope.ticket_spaces=item.spaces_left+" "+ticket_type+spaces_left_plural+" available";case"NUM_SPACES_AND_SPACES_LEFT":return scope.capacity_view_description=scope.ticket_spaces=item.spaces_left+" of "+item.num_spaces+" "+ticket_type+num_spaces_plural+" available"}})}}})}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbContent",["$compile",function($compile){return{transclude:!1,restrict:"A",link:function(scope,element,attrs){return element.attr("ng-include","bb_main"),element.attr("onLoad","initPage()"),element.attr("bb-content",null),element.attr("ng-hide","hide_page"),scope.initPage=function(_this){return function(){return scope.setPageLoaded(),scope.setLoadingPage(!1)}}(this),$compile(element)(scope)}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbLoading",["$compile","$timeout","$bbug","LoadingService",function($compile,$timeout,$bbug,LoadingService){return{link:function(scope,element,attrs){var positionLoadingIcon;scope.scopeLoaded=LoadingService.areScopesLoaded(scope),element.attr("ng-hide","scopeLoaded"),element.attr("bb-loading",null),positionLoadingIcon=function(){var center,loading_icon,modal_open,wait_graphic;return loading_icon=$bbug(".bb-loader").find("#loading_icon"),wait_graphic=$bbug(".bb-loader").find("#wait_graphic"),modal_open=$bbug("[ng-app]").find("#bb").hasClass("modal-open"),modal_open?$timeout(function(){var center;return center=$bbug("[ng-app]").find(".modal-dialog").height()||$bbug("[ng-app]").find(".modal-content").height()||$bbug("[ng-app]").find(".modal").height(),center=center/2-wait_graphic.height()/2,loading_icon.css("padding-top",center+"px")},50):(center=$(window).innerHeight()/2-wait_graphic.height()/2,loading_icon.css("padding-top",center+"px"))},positionLoadingIcon(),$bbug(window).on("resize",function(){return positionLoadingIcon()}),scope.$on("page:loaded",function(){return positionLoadingIcon()}),$compile(element)(scope)}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbMergeDuplicateQuestions",function(){return{restrict:"A",scope:!0,controller:["$scope","$rootScope",function($scope,$rootScope){return $scope.questions={},$rootScope.$on("item_details:loaded",function(){var i,item,j,len,len1,question,ref,ref1;for(ref=$scope.bb.stacked_items,i=0,len=ref.length;len>i;i++)if(item=ref[i],item.item_details&&item.item_details.questions)for(item.item_details.hide_questions=!1,ref1=item.item_details.questions,j=0,len1=ref1.length;len1>j;j++){if(question=ref1[j],$scope.questions[question.id]){item.setCloneAnswers($scope.questions[question.id].item),item.item_details.hide_questions=!0;break}$scope.questions[question.id]={question:question,item:item}}return $scope.has_questions=_.pluck($scope.questions,"question").length>0})}]}})}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbModal",["$window","$bbug","$timeout",function($window,$bbug,$timeout){return{restrict:"A",scope:!0,link:function(scope,elem,attrs){var deregisterWatcher;return $timeout(function(){return elem.parent().parent().parent().css("z-index",999999)},deregisterWatcher=scope.$watch(function(){var height,modal_padding,new_height;return height=elem.height(),modal_padding=$bbug(window).width()>=769?200:20,height>$bbug(window).height()?(new_height=$bbug(window).height()-modal_padding,elem.css({height:new_height+"px","overflow-y":"scroll"}),deregisterWatcher()):void 0}))}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbScrollTo",["$rootScope","AppConfig","BreadcrumbService","$bbug","$window","GeneralOptions","viewportSize",function($rootScope,AppConfig,BreadcrumbService,$bbug,$window,GeneralOptions,viewportSize){return{transclude:!1,restrict:"A",link:function(scope,element,attrs){var always_scroll,bb_transition_time,evnts,isElementInView,scrollToCallback;return evnts=attrs.bbScrollTo.split(","),always_scroll=null!=attrs.bbAlwaysScroll||!1,bb_transition_time=null!=attrs.bbTransitionTime?parseInt(attrs.bbTransitionTime,10):500,angular.isArray(evnts)?angular.forEach(evnts,function(evnt){return scope.$on(evnt,function(e){return scrollToCallback(evnt)})}):scope.$on(evnts,function(e){return scrollToCallback(evnts)}),isElementInView=function(el){return el.offset().top>$bbug("body").scrollTop()&&el.offset().top<$bbug("body").scrollTop()+$bbug(window).height()},scrollToCallback=function(evnt){var current_step,scroll_to_element;return scroll_to_element=$bbug("page:loaded"===evnt&&viewportSize.isXS()&&$bbug('[data-scroll-id="'+AppConfig.uid+'"]').length?'[data-scroll-id="'+AppConfig.uid+'"]':element),current_step=BreadcrumbService.getCurrentStep(),scroll_to_element&&("page:loaded"===evnt&¤t_step>1||always_scroll||"widget:restart"===evnt||!isElementInView(scroll_to_element)&&0!==scroll_to_element.offset().top)?"parentIFrame"in $window?parentIFrame.scrollToOffset(0,scroll_to_element.offset().top-GeneralOptions.scroll_offset):$bbug("html, body").animate({scrollTop:scroll_to_element.offset().top-GeneralOptions.scroll_offset},bb_transition_time):void 0}}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbSlotGrouper",function(){return{restrict:"A",scope:!0,link:function(scope,element,attrs){var i,len,slot,slots;if(slots=scope.$eval(attrs.slots)){for(scope.grouped_slots=[],i=0,len=slots.length;len>i;i++)slot=slots[i],slot.time>=scope.$eval(attrs.startTime)&&slot.time<scope.$eval(attrs.endTime)&&scope.grouped_slots.push(slot);return scope.has_slots=scope.grouped_slots.length>0}}}})}.call(this),function(){angular.module("BB.Directives").directive("bbTimeZone",["GeneralOptions","CompanyStoreService",function(GeneralOptions,CompanyStoreService){return{restrict:"A",controllerAs:"$tzCtrl",templateUrl:"_time_zone_info.html",controller:function(){var company_time_zone;return company_time_zone=CompanyStoreService.time_zone,this.time_zone_name=moment().tz(company_time_zone).format("zz"),GeneralOptions.use_local_time_zone||GeneralOptions.display_time_zone===company_time_zone?void 0:this.is_time_zone_diff=!0}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbWaitFor",["$compile",function($compile){return{transclude:!1,restrict:"A",priority:800,link:function(scope,element,attrs){var name,prom;name=attrs.bbWaitVar,name||(name="allDone"),scope[name]=!1,prom=scope.$eval(attrs.bbWaitFor),prom?prom.then(function(){return scope[name]=!0}):scope[name]=!0}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbCurrencyField",["$filter",function($filter){return{restrict:"A",require:"ngModel",link:function(scope,element,attrs,ctrl){var convertToCurrency,convertToInteger;return convertToCurrency=function(value){return value/100},convertToInteger=function(value){return 100*value},ctrl.$formatters.push(convertToCurrency),ctrl.$parsers.push(convertToInteger)}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbFocus",function(){var FOCUS_CLASS;return FOCUS_CLASS="bb-focused",{restrict:"A",require:"ngModel",link:function(scope,element,attrs,ctrl){return ctrl.$focused=!1,element.bind("focus",function(evt){return element.addClass(FOCUS_CLASS),scope.$apply(function(){return ctrl.$focused=!0})}).bind("blur",function(evt){return element.removeClass(FOCUS_CLASS),scope.$apply(function(){return ctrl.$focused=!1})})}}})}.call(this),function(){"use strict";var bbFormDirective;bbFormDirective=["$bbug","$window","ValidatorService","$timeout","GeneralOptions",function($bbug,$window,ValidatorService,$timeout,GeneralOptions){"ngInject";var link;return link=function(scope,elem,attrs,ctrls){var $bbPageCtrl,$formCtrl,init,scrollAndFocusOnInvalid,serveBBPage,submitForm;$bbPageCtrl=null,$formCtrl=null,init=function(){$formCtrl=ctrls[0],$bbPageCtrl=ctrls[1],scope.submitForm=submitForm,elem.on("submit",submitForm)},submitForm=function(){var isValid;return $formCtrl.$setSubmitted(),$timeout(scrollAndFocusOnInvalid,100),isValid=ValidatorService.validateForm($formCtrl),isValid&&serveBBPage(),isValid},serveBBPage=function(){var route;null!=$bbPageCtrl&&null!=attrs.bbFormRoute&&(route=attrs.bbFormRoute,$bbPageCtrl.$scope.checkReady(),route.length>0?$bbPageCtrl.$scope.routeReady(route):$bbPageCtrl.$scope.routeReady())},scrollAndFocusOnInvalid=function(){var invalidFormGroup,invalidInput;invalidFormGroup=elem.find(".has-error:first"),invalidFormGroup&&invalidFormGroup.length>0&&!$formCtrl.raise_alerts&&("parentIFrame"in $window?parentIFrame.scrollToOffset(0,invalidFormGroup.offset().top-GeneralOptions.scroll_offset):$bbug("html, body").animate({scrollTop:invalidFormGroup.offset().top-GeneralOptions.scroll_offset},1e3),invalidInput=invalidFormGroup.find(".ng-invalid"),invalidInput.focus())},init()},{restrict:"A",require:["^form","?^^bbPage"],scope:"true",link:link}}],angular.module("BB.Directives").directive("bbForm",bbFormDirective)}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbInputGroup",function(){return{restrict:"A",require:"ngModel",link:function(scope,elem,attrs,ngModel){return scope.input_manger.inputs.indexOf(ngModel.$name)>=0?void 0:(scope.input_manger.registerInput(ngModel,attrs.bbInputGroup),scope.$watch(attrs.ngModel,function(newval,oldval){return newval===!oldval?scope.input_manger.validateInputGroup(attrs.bbInputGroup):void 0}))}}})}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbInputGroupManager",["ValidatorService",function(ValidatorService){return{restrict:"A",controller:["$scope","$element","$attrs",function($scope,$element,$attrs){return $scope.input_manger={input_groups:{},inputs:[],registerInput:function(input,name){return this.inputs.indexOf(input.$name)>=0?void 0:(this.inputs.push(input.$name),this.input_groups[name]||(this.input_groups[name]={inputs:[],valid:!1}),this.input_groups[name].inputs.push(input))},validateInputGroup:function(name){var i,input,is_valid,j,len,len1,ref,ref1;for(is_valid=!1,ref=this.input_groups[name].inputs,i=0,len=ref.length;len>i&&(input=ref[i],!(is_valid=input.$modelValue));i++);if(is_valid===!this.input_groups[name].valid){for(ref1=this.input_groups[name].inputs,j=0,len1=ref1.length;len1>j;j++)input=ref1[j],input.$setValidity(input.$name,is_valid);return this.input_groups[name].valid=is_valid}}},$element.on("submit",function(){var input_group,results;results=[];for(input_group in $scope.input_manger.input_groups)results.push($scope.input_manger.validateInputGroup(input_group));return results})}]}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbMatchInput",function(){return{restrict:"A",require:"ngModel",link:function(scope,element,attrs,ctrl,ngModel){var compare;return scope.$watch(attrs.bbMatchInput,function(){return scope.val_1=scope.$eval(attrs.bbMatchInput),compare(ctrl.$viewValue)}),compare=function(value){return ctrl.$setValidity("match",scope.val_1===value),value},ctrl.$parsers.push(compare)}}})}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbQuestion",["$compile","$timeout",function($compile,$timeout){return{priority:0,replace:!0,transclude:!1,restrict:"A",compile:function(el,attr,trans){return{pre:function(scope,element,attrs){var adminRequired,date_format,date_format_2;return adminRequired=null!=attrs.bbAdminRequired,date_format="DD/MM/YYYY",date_format_2="dd/MM/yyyy",null!=attrs.bbDateFormat&&"US"===attrs.bbDateFormat&&(date_format="MM/DD/YYYY",date_format_2="MM/dd/yyyy"),scope.$watch(attrs.bbQuestion,function(question){var e,html,i,index,itemx,j,k,lastName,len,len1,len2,name,placeholder,ref,ref1,ref2;if(question){if(html="",lastName="",placeholder="",null!=attrs.defaultPlaceholder&&"text_area"===question.detail_type|"text_field"===question.detail_type&&(question["default"]&&(placeholder=question["default"]),question.answer===question["default"]&&(question.answer="")),scope.recalc=function(_this){return function(){return angular.isDefined(scope.recalc_price)&&(question.outcome||scope.recalc_price()),angular.isDefined(scope.recalc_question)?scope.recalc_question():void 0}}(this),scope.idmaps&&(scope.idmaps[question.detail_type]||scope.idmaps[question.id]))index=scope.idmaps[scope.question.id]?scope.question.id:scope.question.detail_type,html=scope.idmaps[index].html;else if("select"===question.detail_type||"select-price"===question.detail_type){for(html="<select ng-model='question.answer' name='q"+question.id+"' id='"+question.id+"' ng-change='recalc()' ng-required='question.currentlyShown && (("+adminRequired+" && question.required) || (question.required && !bb.isAdmin))' class='form-question form-control'>",ref=question.options,i=0,len=ref.length;len>i;i++)itemx=ref[i],html+="<option data_id='"+itemx.id+"' value='"+itemx.name.replace(/'/g,"'")+"'>"+itemx.display_name+"</option>";html+="</select>"}else if("text_area"===question.detail_type)html="<textarea placeholder='"+placeholder+"' ng-model='question.answer' name='q"+question.id+"' id='"+question.id+"' ng-required='question.currentlyShown && (("+adminRequired+" && question.required) || (question.required && !bb.isAdmin))' rows=3 class='form-question form-control'>"+question.answer+"</textarea>";else if("radio"===question.detail_type){for(html='<div class="radio-group">',ref1=question.options,j=0,len1=ref1.length;len1>j;j++)itemx=ref1[j],html+="<div class='radio'><label class='radio-label'><input ng-model='question.answer' name='q"+question.id+"' id='"+question.id+"' ng-change='recalc()' ng-required='question.currentlyShown && (("+adminRequired+" && question.required) || (question.required && !bb.isAdmin))' type='radio' value=\""+itemx.name+'"/>'+itemx.name+"<span class='input-icon'></span></label></div>";html+="</div>"}else if("check"===question.detail_type)name=question.name,name===lastName&&(name=""),lastName=question.name,html="<div class='checkbox' ng-class='{\"selected\": question.answer}'><label><input name='q"+question.id+"' id='"+question.id+"' ng-model='question.answer' ng-checked='question.answer == \"1\"' ng-change='recalc()' ng-required='question.currentlyShown && (("+adminRequired+" && question.required) || (question.required && !bb.isAdmin))' type='checkbox' value=1>"+name+"</label></div>";else if("check-price"===question.detail_type)html="<div class='checkbox'><label><input name='q"+question.id+"' id='"+question.id+"' ng-model='question.answer' ng-checked='question.answer == \"1\"' ng-change='recalc()' ng-required='question.currentlyShown && (("+adminRequired+" && question.required) || (question.required && !bb.isAdmin))' type='checkbox' value=1> ({{question.price | currency:'GBP'}})</label></div>";else if("radio-price"===question.detail_type){for(html='<div class="radio-group">',ref2=question.options,k=0,len2=ref2.length;len2>k;k++)itemx=ref2[k],html+="<div class='radio'><label class='radio-label'><input ng-model='question.answer' name='q"+question.id+"' id='"+question.id+"' ng-change='recalc()' ng-required='question.currentlyShown && (("+adminRequired+" && question.required) || (question.required && !bb.isAdmin))' type='radio' value=\""+itemx.name+'"/>'+itemx.display_name+"<span class='input-icon'></span></label></div>";html+="</div>"}else html="date"===question.detail_type?"<div class='input-group date-picker'> <input type='text' class='form-question form-control' name='q"+question.id+"' id='"+question.id+"' bb-datepicker-popup='"+date_format+"' uib-datepicker-popup='"+date_format_2+"' ng-change='recalc()' ng-model='question.answer' ng-required='question.currentlyShown && (("+adminRequired+" && question.required) || (question.required && !bb.isAdmin))' datepicker-options='{\"starting-day\": 1, \"showButtonBar\": false, \"showWeeks\": false}' show-button-bar='false' is-open='opened' ng-focus='opened=true' /> <span class='input-group-btn' ng-click='$event.preventDefault();$event.stopPropagation();opened=true'> <button class='btn btn-default' type='submit'><span class='glyphicon glyphicon-calendar'></span></button> </span> </div>":"<input type='text' placeholder='"+placeholder+"' ng-model='question.answer' name='q"+question.id+"' id='"+question.id+"' ng-required='question.currentlyShown && (("+adminRequired+" && question.required) || (question.required && !bb.isAdmin))' class='form-question form-control'/>";if(html)return e=$compile(html)(scope,function(_this){return function(cloned,scope){return element.replaceWith(cloned)}}(this))}})},post:function(scope,$e,$a,parentControl){}}}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbQuestionLabel",["$compile",function($compile){return{transclude:!1,restrict:"A",scope:!1,link:function(scope,element,attrs){return scope.$watch(attrs.bbQuestionLabel,function(question){return!question||"check"!==question.detail_type&&"check-price"!==question.detail_type?void 0:element.html("")})}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbQuestionLine",["$compile",function($compile){return{transclude:!1,restrict:"A",link:function(scope,element,attrs){var e,elm,html,index;return"heading"===scope.question.detail_type&&(elm="",scope.question.name.length>0&&(elm+="<div class='bb-question-heading'>"+scope.question.name+"</div>"),scope.question.help_text&&scope.question.help_text.length>0&&(elm+="<div class='bb-question-help-text'>"+scope.question.help_text+"</div>"),element.html(elm)),scope.idmaps&&(scope.idmaps[scope.question.detail_type]&&scope.idmaps[scope.question.detail_type].block||scope.idmaps[scope.question.id]&&scope.idmaps[scope.question.id].block)?(index=scope.idmaps[scope.question.id]?scope.question.id:scope.question.detail_type,html=scope.$parent.idmaps[index].html,e=$compile(html)(scope,function(_this){return function(cloned,scope){return element.replaceWith(cloned)}}(this))):void 0}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbQuestionLink",["$compile",function($compile){return{transclude:!1,restrict:"A",scope:!0,link:function(scope,element,attrs){var id;return id=parseInt(attrs.bbQuestionLink),scope.$watch("question_set",function(newval,oldval){var i,len,q,ref,results;if(newval){for(ref=scope.question_set,results=[],i=0,len=ref.length;len>i;i++)q=ref[i],q.id===id?(scope.question=q,element.attr("ng-model","question.answer"),element.attr("bb-question-link",null),results.push($compile(element)(scope))):results.push(void 0);return results}})}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbQuestionSet",["$compile",function($compile){return{transclude:!1,restrict:"A",scope:!0,link:function(scope,element,attrs){var set;return set=attrs.bbQuestionSet,element.addClass("ng-hide"),scope.$watch(set,function(newval,oldval){return newval?(scope.question_set=newval,element.removeClass("ng-hide")):void 0})}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbQuestionSetup",function(){return{restrict:"A",terminal:!0,priority:1e3,link:function(scope,element,attrs){var block,child,def,i,id,idmaps,index,len,ref;for(idmaps={},def=null,ref=element.children(),index=i=0,len=ref.length;len>i;index=++i)child=ref[index],id=$(child).attr("bb-question-id"),block=!1,$(child).attr("bb-replace-block")&&(block=!0),child.innerHTML=child.innerHTML.replace(/question_form/g,"question_form_"+index),idmaps[id]={id:id,html:child.innerHTML,block:block};return scope.idmaps=idmaps,element.replaceWith("")}}})}.call(this),function(){"use strict";angular.module("BB.Directives").directive("cardSecurityCode",function(){var linker;return linker=function(scope,element,attributes){return scope.$watch("cardType",function(newValue){return"american_express"===newValue?(element.attr("maxlength",4),element.attr("placeholder","••••")):(element.attr("maxlength",3),element.attr("placeholder","•••"))})},{restrict:"AC",link:linker,scope:{cardType:"="}}})}.call(this),function(){"use strict";angular.module("BB.Directives").directive("creditCardNumber",function(){var getCardType,isValid,linker;return getCardType=function(ccnumber){return ccnumber?(ccnumber=ccnumber.toString().replace(/\s+/g,""),/^(34)|^(37)/.test(ccnumber)?"american_express":/^(62)|^(88)/.test(ccnumber)?"china_unionpay":/^30[0-5]/.test(ccnumber)?"diners_club_carte_blanche":/^(2014)|^(2149)/.test(ccnumber)?"diners_club_enroute":/^36/.test(ccnumber)?"diners_club_international":/^(6011)|^(622(1(2[6-9]|[3-9][0-9])|[2-8][0-9]{2}|9([01][0-9]|2[0-5])))|^(64[4-9])|^65/.test(ccnumber)?"discover":/^35(2[89]|[3-8][0-9])/.test(ccnumber)?"jcb":/^(6304)|^(6706)|^(6771)|^(6709)/.test(ccnumber)?"laser":/^(5018)|^(5020)|^(5038)|^(5893)|^(6304)|^(6759)|^(6761)|^(6762)|^(6763)|^(0604)/.test(ccnumber)?"maestro":/^5[1-5]/.test(ccnumber)?"master":/^4/.test(ccnumber)?"visa":/^(4026)|^(417500)|^(4405)|^(4508)|^(4844)|^(4913)|^(4917)/.test(ccnumber)?"visa_electron":void 0):""},isValid=function(ccnumber){var len,mul,prodArr,sum;if(!ccnumber)return!1;for(ccnumber=ccnumber.toString().replace(/\s+/g,""),len=ccnumber.length,mul=0,prodArr=[[0,1,2,3,4,5,6,7,8,9],[0,2,4,6,8,1,3,5,7,9]],sum=0;len--;)sum+=prodArr[mul][parseInt(ccnumber.charAt(len),10)],mul^=1;return sum%10===0&&sum>0},linker=function(scope,element,attributes,ngModel){return scope.$watch(function(){return ngModel.$modelValue},function(newValue){return ngModel.$setValidity("card_number",isValid(newValue)),scope.cardType=getCardType(newValue),null!=newValue&&16===newValue.length?ngModel.$invalid?(element.parent().addClass("has-error"),element.parent().removeClass("has-success")):(element.parent().removeClass("has-error"),element.parent().addClass("has-success")):element.parent().removeClass("has-success")})},{restrict:"C",require:"ngModel",link:linker,scope:{cardType:"="}}})}.call(this),function(){"use strict";angular.module("BB.Directives").directive("ngMax",function(){return{restrict:"A",require:"ngModel",link:function(scope,elem,attr,ctrl){var maxValidator;maxValidator=function(value){var max;return max=scope.$eval(attr.ngMax),ctrl.$setValidity("ngMax",angular.isUndefined(value)||""===value||null===value||value!==value||max>=value),value},ctrl.$parsers.push(maxValidator),ctrl.$formatters.push(maxValidator)}}})}.call(this),function(){"use strict";angular.module("BB.Directives").directive("ngMin",function(){return{restrict:"A",require:"ngModel",link:function(scope,elem,attr,ctrl){var minValidator;minValidator=function(value){var min;return min=scope.$eval(attr.ngMin)||0,ctrl.$setValidity("ngMin",angular.isUndefined(value)||""===value||null===value||value!==value||value>=min),value},ctrl.$parsers.push(minValidator),ctrl.$formatters.push(minValidator)}}})}.call(this),function(){"use strict";angular.module("BB.Directives").directive("pricepicker",function(){var controller,link;return controller=function($scope){return $scope.$watch("price",function(price){return null!=price?$scope.updateModel(price):void 0})},link=function(scope,element,attrs,ngModel){return ngModel.$render=function(){return ngModel.$viewValue?scope.price=ngModel.$viewValue:void 0},scope.updateModel=function(value){return ngModel.$setViewValue(value)}},{require:"ngModel",link:link,controller:controller,scope:{currency:"@"},template:'<span>{{0 | currency: currency | limitTo: 1}}</span>\n<input type="number" ng-model="price" class="form-control" step="0.01">'}})}.call(this),function(){"use strict";angular.module("BB.Directives").directive("popover",function(){var openElement,openScope;return openElement=null,openScope=null,$('div[ng-controller="BBCtrl"]').off(".bbtooltip").on("click.bbtooltip",function(e){var target;return target=$(e.target).closest("[popover]")[0],!target&&openElement&&openScope&&($(openElement).next(".popover").remove(),openScope.tt_isOpen=!1),!0}),{restrict:"EA",priority:-1e3,link:function(scope,element){return element.on("click.bbtooltip",function(e){return openElement===$(e.target).closest("[popover]")[0]?void e.preventDefault():(openElement&&openScope&&($(openElement).next(".popover").remove(),openScope.tt_isOpen=!1),openElement=element[0],openScope=scope)}),scope.$on("$destroy",function(){return $(element).off(".bbtooltip")})}}})}.call(this),function(){"use strict";angular.module("BB.Directives").directive("scoped",["$document","$timeout",function($document,$timeout){var scopeIt;return this.compat=function(){var DOMRules,DOMStyle,changeSelectorTextAllowed,check,e,error,scopeSupported,testSheet,testStyle;check=document.createElement("style"),DOMStyle="undefined"!=typeof check.sheet?"sheet":"undefined"!=typeof check.getSheet?"getSheet":"styleSheet",scopeSupported=void 0!==check.scoped,document.body.appendChild(check),testSheet=check[DOMStyle],testSheet.addRule?testSheet.addRule("c","blink"):testSheet.insertRule("c{}",0),DOMRules=testSheet.rules?"rules":"cssRules",testStyle=testSheet[DOMRules][0];try{testStyle.selectorText="d"}catch(error){e=error}return changeSelectorTextAllowed="d"===testStyle.selectorText.toLowerCase(),check.parentNode.removeChild(check),{scopeSupported:scopeSupported,rules:DOMRules,sheet:DOMStyle,changeSelectorTextAllowed:changeSelectorTextAllowed}}(),scopeIt=function(_this){return function(element){var allRules,glue,id,idCounter,index,par,results,rule,selector,sheet,styleNode,styleRule;if(styleNode=element[0],idCounter=0,sheet=styleNode[_this.compat.sheet]){for(allRules=sheet[_this.compat.rules],par=styleNode.parentNode,id=par.id||(par.id="scopedByScopedPolyfill_"+ ++idCounter),glue="",index=allRules.length||0;par;)par.id&&(glue="#"+par.id+" "+glue),par=par.parentNode;for(results=[];index--;)rule=allRules[index],rule.selectorText?rule.selectorText.match(new RegExp(glue))?results.push(void 0):(selector=glue+" "+rule.selectorText.split(",").join(", "+glue),selector=selector.replace(/[\ ]+:root/gi,""),_this.compat.changeSelectorTextAllowed?results.push(rule.selectorText=selector):rule.type&&1!==rule.type?results.push(void 0):(styleRule=rule.style.cssText,styleRule?(sheet.removeRule?sheet.removeRule(index):sheet.deleteRule(index),sheet.addRule?results.push(sheet.addRule(selector,styleRule)):results.push(sheet.insertRule(selector+"{"+styleRule+"}",index))):results.push(void 0))):results.push(void 0);return results}}}(this),{restrict:"A",link:function(scope,element,attrs){return scope.scopeSupported=this.compat.scopeSupported,this.compat.scopeSupported?void 0:$timeout(function(){return scopeIt(element)})},controller:["$scope","$element","$timeout",function($scope,$element,$timeout){
$scope.scopeSupported||(this.updateCss=function(){return $timeout(function(){return scopeIt($element)})})}]}}])}.call(this),function(){"use strict";var app;app=angular.module("BB.Directives"),app.directive("script",["$compile","halClient",function($compile,halClient){return{transclude:!1,restrict:"E",link:function(scope,element,attrs){var body,json,res;return"text/hal-object"===attrs.type?(body=element[0].innerText,json=$bbug.parseJSON(body),res=halClient.$parse(json)):void 0}}}])}.call(this),function(){"use strict";angular.module("BB.uib").provider("runtimeUibModal",["$uibModalProvider",function($uibModalProvider){"ngInject";var uibModalProvider;uibModalProvider=$uibModalProvider,this.setProvider=function(provider){return uibModalProvider=provider},this.$get=function(){return uibModalProvider}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbBasket",["PathSvc",function(PathSvc){return{restrict:"A",replace:!0,scope:!0,templateUrl:function(element,attrs){return _.has(attrs,"mini")?PathSvc.directivePartial("_basket_mini"):PathSvc.directivePartial("basket")},controllerAs:"BasketCtrl",controller:["$scope","$uibModal","$translate","$document","BasketService",function($scope,$uibModal,$translate,$document,BasketService){var BasketInstanceCtrl;$scope.setUsingBasket(!0),this.empty=function(){return $scope.$eval("emptyBasket()")},this.view=function(){return $scope.$eval("viewBasket()")},$scope.showBasketDetails=function(){var modalInstance;return"basket"===$scope.bb.current_page||"checkout"===$scope.bb.current_page?!1:modalInstance=$uibModal.open({templateUrl:$scope.getPartial("_basket_details"),scope:$scope,controller:BasketInstanceCtrl,resolve:{basket:function(){return $scope.bb.basket}}})},BasketInstanceCtrl=function($scope,$rootScope,$uibModalInstance,basket){return $scope.basket=basket,$scope.cancel=function(){return $uibModalInstance.dismiss("cancel")}},$scope.$watch(function(){var len;$scope.basketItemCount=len=$scope.bb.basket?$scope.bb.basket.length():0,$scope.basketStatus=$translate.instant("PUBLIC_BOOKING.BASKET_DETAILS.BASKET_STATUS",{N:len},"messageformat")})}],link:function(scope,element,attrs){return element.bind("click",function(e){return e.preventDefault()})}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbMiniBasket",function(){return{restrict:"AE",replace:!0,scope:!0,controller:["$scope","$rootScope","BasketService","$q",function($scope,$rootScope,BasketService,$q){return $scope.setUsingBasket(!0),$rootScope.connection_started.then(function(_this){return function(){}}(this)),$scope.basketDescribe=function(_this){return function(nothing,single,plural){return $scope.bb.basket&&0!==$scope.bb.basket.length()?1===$scope.bb.basket.length()?single:plural.replace("$0",$scope.bb.basket.length()):nothing}}(this)}]}})}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbMinSpend",function(){return{restrict:"A",scope:!0,controller:["$scope","$element","$attrs","AlertService","$translate",function($scope,$element,$attrs,AlertService,$translate){var checkMinSpend,options;return options=$scope.$eval($attrs.bbMinSpend||{}),$scope.min_spend=options.min_spend||0,$scope.setReady=function(){return checkMinSpend()},checkMinSpend=function(){var i,item,len,price,ref;for(price=0,ref=$scope.bb.stacked_items,i=0,len=ref.length;len>i;i++)item=ref[i],price+=item.service.price;return price>=$scope.min_spend?(AlertService.clear(),!0):(AlertService.clear(),AlertService.add("warning",{msg:$translate.instant("CORE.ALERTS.SPEND_AT_LEAST",{min_spend:$scope.min_spend})}),!1)}}]}})}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("BasketList",["$scope","$rootScope","$element","$attrs","$q","AlertService","FormDataStoreService","LoginService","LoadingService","BBModel",function($scope,$rootScope,$element,$attrs,$q,AlertService,FormDataStoreService,LoginService,LoadingService,BBModel){var groupBasketItems,loader,updateLocalBasket;return $scope.setUsingBasket(!0),loader=LoadingService.$loader($scope),$scope.show_wallet=$scope.bb.company_settings.hasOwnProperty("has_wallets")&&$scope.bb.company_settings.has_wallets&&$scope.client.valid()&&LoginService.isLoggedIn()&&LoginService.member().id===$scope.client.id&&$scope.client.has_active_wallet,$scope.bb.basket.setSettings($scope.$eval($attrs.bbBasketList)||{}),$rootScope.connection_started.then(function(){var basket_item,i,len,params,promises,ref;if($scope.client&&$scope.bb.basket.setClient($scope.client),$scope.client.$has("pre_paid_bookings")&&$scope.bb.basket.timeItems().length>0){for(loader.notLoaded(),promises=[],ref=$scope.bb.basket.timeItems(),i=0,len=ref.length;len>i;i++)basket_item=ref[i],params={event_id:basket_item.getEventId()},promises.push($scope.client.$getPrePaidBookings(params));return $q.all(promises).then(function(result){var booking_left,index,j,k,l,len1,len2,len3,len4,m,prepaid_booking,prepaid_bookings,ref1;for(booking_left={},j=0,len1=result.length;len1>j;j++)for(basket_item=result[j],k=0,len2=basket_item.length;len2>k;k++)prepaid_booking=basket_item[k],booking_left[prepaid_booking.id]=prepaid_booking.number_of_bookings_remaining;for(ref1=$scope.bb.basket.timeItems(),index=l=0,len3=ref1.length;len3>l;index=++l)if(basket_item=ref1[index],prepaid_bookings=result[index],$scope.bb.basket.settings&&$scope.bb.basket.settings.auto_use_prepaid_bookings&&prepaid_bookings.length>0&&basket_item.price>0)for(index=m=0,len4=prepaid_bookings.length;len4>m;index=++m)if(prepaid_booking=prepaid_bookings[index],booking_left[prepaid_booking.id]>0){basket_item.setPrepaidBooking(prepaid_booking),booking_left[prepaid_booking.id]-=1;break}return $scope.bb.basket.settings.auto_use_prepaid_bookings?$scope.updateBasket().then(function(){return groupBasketItems($scope.bb.basket.timeItems())},function(err){return loader.setLoaded()}):groupBasketItems($scope.bb.basket.timeItems())})}return groupBasketItems($scope.bb.basket.timeItems())}),$scope.deleteGroupItem=function(_this){return function(items){return $scope.deleteBasketItems(items),$scope.multi_basket_grouping=_.without($scope.multi_basket_grouping,items)}}(this),$scope.editGroupItem=function(_this){return function(items,route){return $scope.bb.current_item=items[0],$scope.decideNextPage(route)}}(this),$scope.groupPrice=function(items){var group_price,i,item,len;for(group_price=0,i=0,len=items.length;len>i;i++)item=items[i],group_price+=item.total_price;return group_price},$scope.groupTicketQty=function(items){var group_ticket_qty,i,item,len;for(group_ticket_qty=0,i=0,len=items.length;len>i;i++)item=items[i],group_ticket_qty+=item.tickets.qty;return group_ticket_qty},groupBasketItems=function(items){return $scope.multi_basket_grouping=_.groupBy($scope.bb.basket.timeItems(),"event_id"),$scope.multi_basket_grouping=_.values($scope.multi_basket_grouping),loader.setLoaded()},updateLocalBasket=function(basket){var i,item,len,ref;for(ref=basket.items,i=0,len=ref.length;len>i;i++)item=ref[i],item.storeDefaults($scope.bb.item_defaults);return basket.setSettings($scope.bb.basket.settings),$scope.setBasket(basket)},$scope.addAnother=function(_this){return function(route){return $scope.clearBasketItem(),$scope.bb.emptyStackedItems(),$scope.decideNextPage(route)}}(this),$scope.checkout=function(_this){return function(route){return $scope.bb.basket.settings&&$scope.bb.basket.settings.requires_deal&&!$scope.bb.basket.hasDeal()?(AlertService.raise("GIFT_CERTIFICATE_REQUIRED"),!1):$scope.bb.basket.items.length>0?($scope.setReadyToCheckout(!0),$scope.$parent.$has_page_control?!0:$scope.decideNextPage(route)):(AlertService.raise("EMPTY_BASKET_FOR_CHECKOUT"),!1)}}(this),$scope.setReady=function(){return $scope.checkout()},$scope.applyCoupon=function(_this){return function(coupon){var params;return AlertService.clear(),loader.notLoaded(),params={bb:$scope.bb,coupon:coupon},BBModel.Basket.$updateBasket($scope.bb.company,params.bb.basket).then(function(){return BBModel.Basket.$applyCoupon($scope.bb.company,params).then(function(basket){return updateLocalBasket(basket),loader.setLoaded()},function(err){return err&&err.data&&err.data.error&&(AlertService.clear(),AlertService.raise("COUPON_APPLY_FAILED")),loader.setLoaded()})})}}(this),$scope.applyDeal=function(_this){return function(deal_code){var params;return AlertService.clear(),params=$scope.client?{bb:$scope.bb,deal_code:deal_code,member_id:$scope.client.id}:{bb:$scope.bb,deal_code:deal_code,member_id:null},BBModel.Basket.$updateBasket($scope.bb.company,params.bb.basket).then(function(){return BBModel.Basket.$applyDeal($scope.bb.company,params).then(function(basket){return updateLocalBasket(basket),$scope.items=$scope.bb.basket.items,$scope.deal_code=null},function(err){return err&&err.data&&err.data.error?(AlertService.clear(),AlertService.raise("DEAL_APPLY_FAILED")):void 0})})}}(this),$scope.removeDeal=function(_this){return function(deal_code){var params;return params={bb:$scope.bb,deal_code_id:deal_code.id},BBModel.Basket.$updateBasket($scope.bb.company,params.bb.basket).then(function(){return BBModel.Basket.$removeDeal($scope.bb.company,params).then(function(basket){return updateLocalBasket(basket),$scope.items=$scope.bb.basket.items},function(err){return err&&err.data&&err.data.error?(AlertService.clear(),AlertService.raise("DEAL_REMOVE_FAILED")):void 0})})}}(this),$scope.topUpWallet=function(){return $scope.decideNextPage("basket_wallet")}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbBasketList",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"BasketList"}})}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("BasketSummary",["$scope",function($scope){return $scope.basket_items=$scope.bb.basket.items,$scope.confirm=function(_this){return function(){return $scope.bb.basket.reviewed=!0,$scope.decideNextPage()}}(this)}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbBasketSummary",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"BasketSummary"}})}.call(this),function(){"use strict";var CompanyListBase;CompanyListBase=function($scope,$rootScope,$q,$attrs,LoadingService){var loader,options;return loader=LoadingService.$loader($scope).notLoaded(),options=$scope.$eval($attrs.bbCompanies),$rootScope.connection_started.then(function(_this){return function(){return $scope.bb.company.companies?($scope.init($scope.bb.company),$rootScope.parent_id=$scope.bb.company.id):$rootScope.parent_id?void $scope.initWidget({company_id:$rootScope.parent_id,first_page:$scope.bb.current_page}):$scope.init($scope.bb.company)}}(this),function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}),$scope.init=function(_this){return function(comp){return $scope.companies=$scope.bb.company.companies,$scope.companies&&0!==$scope.companies.length||($scope.companies=[$scope.bb.company]),1===$scope.companies.length?($scope.skipThisStep(),$scope.selectItem($scope.companies[0])):options&&options.hide_not_live_stores?$scope.items=$scope.companies.filter(function(c){return c.live}):$scope.items=$scope.companies,loader.setLoaded()}}(this),$scope.selectItem=function(_this){return function(item,route){var company_id,prms;return company_id=angular.isNumber(item)?item:item.id,loader.notLoaded(),prms={company_id:company_id},$scope.initWidget(prms)}}(this),$scope.splitString=function(company){var arr,result;return arr=company.name.split(" "),result=arr[2]?arr[2]:""}},angular.module("BB.Controllers").controller("CompanyList",CompanyListBase)}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbCompanies",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"CompanyList"}})}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("Checkout",["$scope","$rootScope","$attrs","$q","$location","$window","$timeout","$bbug","FormDataStoreService","LoadingService","BBModel",function($scope,$rootScope,$attrs,$q,$location,$window,$timeout,$bbug,FormDataStoreService,LoadingService,BBModel){var loader;return loader=LoadingService.$loader($scope).notLoaded(),$scope.options=$scope.$eval($attrs.bbCheckout)||{},FormDataStoreService.destroy($scope),$rootScope.connection_started.then(function(_this){return function(){return $scope.checkout()}}(this)),$scope.checkout=function(){return $scope.bb.basket.setClient($scope.client),$scope.options.no_notifications&&($scope.bb.no_notifications=$scope.options.no_notifications),$scope.loadingTotal=BBModel.Basket.$checkout($scope.bb.company,$scope.bb.basket,{bb:$scope.bb}),$scope.loadingTotal.then(function(_this){return function(total){return $scope.total=total,total.$has("new_payment")||($scope.$emit("checkout:success",total),$scope.bb.total=$scope.total,$scope.bb.payment_status="complete",$scope.options.disable_confirmation?$scope.reset():($scope.skipThisStep(),$scope.decideNextPage())),$scope.checkoutSuccess=!0,loader.setLoaded()}}(this),function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong"),$scope.checkoutFailed=!0,$scope.$emit("checkout:fail",err)})},$scope.print=function(_this){return function(){return $window.open($scope.bb.partial_url+"print_purchase.html?id="+$scope.total.long_id,"_blank","width=700,height=500,toolbar=0,menubar=0,location=0,status=1,scrollbars=1,resizable=1,left=0,top=0"),!0}}(this),$scope.printElement=function(id,stylesheet){var data,mywindow;return data=$bbug("#"+id).html(),mywindow=$window.open("","","height=600,width=800"),$timeout(function(){return mywindow.document.write("<html><head><title>Booking Confirmation</title>"),stylesheet&&mywindow.document.write('<link rel="stylesheet" href="'+stylesheet+'" type="text/css" />'),mywindow.document.write("</head><body>"),mywindow.document.write(data),mywindow.document.write("</body></html>"),$timeout(function(){return mywindow.document.close(),mywindow.focus(),mywindow.print(),mywindow.close()},100)},2e3)}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbCheckout",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"Checkout"}})}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("CategoryList",["$scope","$rootScope","$q","PageControllerService","LoadingService","BBModel","ValidatorService",function($scope,$rootScope,$q,PageControllerService,LoadingService,BBModel,ValidatorService){var loader;return loader=LoadingService.$loader($scope).notLoaded(),angular.extend(this,new PageControllerService($scope,$q,ValidatorService,LoadingService)),$rootScope.connection_started.then(function(_this){return function(){return $scope.bb.company?$scope.init($scope.bb.company):void 0}}(this),function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}),$scope.init=function(_this){return function(comp){return BBModel.Category.$query(comp).then(function(items){return $scope.items=items,1===items.length&&($scope.skipThisStep(),$rootScope.categories=items,$scope.selectItem(items[0],$scope.nextRoute)),loader.setLoaded()},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")})}}(this),$scope.selectItem=function(_this){return function(item,route){return $scope.bb.current_item.setCategory(item),$scope.decideNextPage(route)}}(this)}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbCategories",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"CategoryList"}})}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("ClientDetails",["$scope","$attrs","$rootScope","LoginService","ValidatorService","AlertService","LoadingService","BBModel",function($scope,$attrs,$rootScope,LoginService,ValidatorService,AlertService,LoadingService,BBModel){var handleError,loader,options;return loader=LoadingService.$loader($scope).notLoaded(),$scope.validator=ValidatorService,$scope.existing_member=!1,$scope.login_error=!1,options=$scope.$eval($attrs.bbClientDetails)||{},$scope.suppress_client_create=null!=$attrs.bbSuppressCreate||options.suppress_client_create,$rootScope.connection_started.then(function(_this){return function(){return $scope.initClientDetails()}}(this),function(err){return loader.setLoadedAndShowError($scope,err,"Sorry, something went wrong")}),$rootScope.$watch("member",function(_this){return function(oldmem,newmem){return!$scope.client.valid()&&LoginService.isLoggedIn()?$scope.setClient(new BBModel.Client(LoginService.member()._data)):void 0}}(this)),$scope.initClientDetails=function(){return!$scope.client.valid()&&LoginService.isLoggedIn()&&$scope.setClient(new BBModel.Client(LoginService.member()._data)),LoginService.isLoggedIn()&&LoginService.member().$has("child_clients")&&LoginService.member()&&LoginService.member().$getChildClients().then(function(_this){return function(children){return $scope.bb.parent_client=new BBModel.Client(LoginService.member()._data),$scope.bb.child_clients=children,$scope.bb.basket.parent_client_id=$scope.bb.parent_client.id}}(this)),$scope.client.client_details?($scope.client_details=$scope.client.client_details,$scope.client_details.questions&&BBModel.Question.$checkConditionalQuestions($scope.client_details.questions),loader.setLoaded()):BBModel.ClientDetails.$query($scope.bb.company).then(function(_this){return function(details){return $scope.client_details=details,$scope.client&&$scope.client.pre_fill_answers($scope.client_details),$scope.client_details.questions&&BBModel.Question.$checkConditionalQuestions($scope.client_details.questions),loader.setLoaded()}}(this),function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")})},$scope.validateClient=function(_this){return function(route){return loader.notLoaded(),$scope.existing_member=!1,$scope.bb&&$scope.bb.parent_client&&($scope.client.parent_client_id=$scope.bb.parent_client.id),$scope.client.setClientDetails($scope.client_details),BBModel.Client.$create_or_update($scope.bb.company,$scope.client).then(function(client){return loader.setLoaded(),$scope.setClient(client),$scope.bb.isAdmin&&$scope.client.setValid(!0),$scope.existing_member=!1,$scope.decideNextPage(route)},function(err){return handleError(err)})}}(this),$scope.clientLogin=function(_this){return function(){return $scope.login_error=!1,$scope.login?LoginService.companyLogin($scope.bb.company,{},{email:$scope.login.email,password:$scope.login.password}).then(function(client){return $scope.setClient(new BBModel.Client(client)),$scope.login_error=!1,$scope.decideNextPage()},function(err){return $scope.login_error=!0,loader.setLoaded(),AlertService.raise("LOGIN_FAILED")}):void 0}}(this),$scope.setReady=function(_this){return function(){var prom;return $scope.client.setClientDetails($scope.client_details),$scope.suppress_client_create?!0:(prom=BBModel.Client.$create_or_update($scope.bb.company,$scope.client),prom.then(function(client){return loader.setLoaded(),$scope.setClient(client),client.waitingQuestions?client.gotQuestions.then(function(){return $scope.client_details=client.client_details}):void 0},function(err){return handleError(err)}),prom)}}(this),$scope.clientSearch=function(){return null!=$scope.client&&null!=$scope.client.email&&""!==$scope.client.email?(loader.notLoaded(),BBModel.Client.$query_by_email($scope.bb.company,$scope.client.email).then(function(client){return null!=client&&($scope.setClient(client),$scope.client=client),loader.setLoaded()},function(err){return loader.setLoaded()})):($scope.setClient({}),$scope.client={})},$scope.switchNumber=function(to){return $scope.no_mobile=!$scope.no_mobile,"mobile"===to?($scope.bb.basket.setSettings({send_sms_reminder:!0}),$scope.client.phone=null):($scope.bb.basket.setSettings({send_sms_reminder:!1}),$scope.client.mobile=null)},$scope.getQuestion=function(id){var i,len,question,ref;for(ref=$scope.client_details.questions,i=0,len=ref.length;len>i;i++)if(question=ref[i],question.id===id)return question;return null},$scope.useClient=function(client){return $scope.setClient(client)},$scope.recalc_question=function(){return $scope.client_details.questions?BBModel.Question.$checkConditionalQuestions($scope.client_details.questions):void 0},handleError=function(error){return"Please Login"===error.data.error?($scope.existing_member=!0,AlertService.raise("ALREADY_REGISTERED")):"Invalid Password"===error.data.error&&AlertService.raise("PASSWORD_INVALID"),loader.setLoaded()}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbClientDetails",["$q","$templateCache","$compile",function($q,$templateCache,$compile){return{restrict:"AE",replace:!0,scope:!0,transclude:!0,controller:"ClientDetails",link:function(scope,element,attrs,controller,transclude){return transclude(scope,function(_this){return function(clone){var has_content;return has_content=clone.length>1||1===clone.length&&(!clone[0].wholeText||/\S/.test(clone[0].wholeText)),has_content?element.html(clone).show():$q.when($templateCache.get("_client_details.html")).then(function(template){return element.html(template).show(),$compile(element.contents())(scope)})}}(this))}}}])}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("EventGroupList",["$scope","$rootScope","$q","$attrs","ItemService","FormDataStoreService","ValidatorService","PageControllerService","LoadingService","halClient",function($scope,$rootScope,$q,$attrs,ItemService,FormDataStoreService,ValidatorService,PageControllerService,LoadingService,halClient){var loader,setEventGroupItem;return FormDataStoreService.init("EventGroupList",$scope,["event_group"]),loader=LoadingService.$loader($scope).notLoaded(),angular.extend(this,new PageControllerService($scope,$q,ValidatorService,LoadingService)),$scope.validator=ValidatorService,$rootScope.connection_started.then(function(_this){return function(){return $scope.bb.company?$scope.init($scope.bb.company):void 0}}(this),function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}),$scope.init=function(comp){var ppromise;return $scope.booking_item||($scope.booking_item=$scope.bb.current_item),ppromise=comp.$getEventGroups(),ppromise.then(function(items){var default_event_group,filterItems,i,item,j,len,len1;if(filterItems="false"!==$attrs.filterServices,filterItems&&($scope.booking_item.service_ref&&!$scope.show_all?items=items.filter(function(x){return x.api_ref===$scope.booking_item.service_ref}):$scope.booking_item.category&&!$scope.show_all&&(items=items.filter(function(x){return x.$has("category")&&x.$href("category")===$scope.booking_item.category.self}))),1!==items.length||$scope.allowSinglePick?setEventGroupItem(items):$scope.selectItem(items[0],$scope.nextRoute)?$scope.skipThisStep():setEventGroupItem(items),default_event_group=$scope.booking_item.defaultService())for(i=0,len=items.length;len>i;i++)item=items[i],item.self===default_event_group.self&&$scope.selectItem(item,$scope.nextRoute);if($scope.booking_item.event_group)for(j=0,len1=items.length;len1>j;j++)item=items[j],item.selected=!1,item.self===$scope.booking_item.event_group.self&&($scope.event_group=item,item.selected=!0,$scope.booking_item.setEventGroup($scope.event_group));return loader.setLoaded(),$scope.booking_item.event_group||!$scope.booking_item.person&&!$scope.booking_item.resource?$scope.bookable_services=$scope.items:void 0},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")})},setEventGroupItem=function(items){return $scope.items=items,$scope.event_group?_.each(items,function(item){return item.id===$scope.event_group.id?$scope.event_group=item:void 0}):void 0},$scope.selectItem=function(_this){return function(item,route){return $scope.$parent.$has_page_control?($scope.event_group=item,!1):($scope.booking_item.setEventGroup(item),$scope.decideNextPage(route),!0)}}(this),$scope.$watch("event_group",function(_this){return function(newval,oldval){return!$scope.event_group||$scope.booking_item.event_group&&$scope.booking_item.event_group.self===$scope.event_group.self?void 0:($scope.booking_item.setEventGroup($scope.event_group),$scope.broadcastItemUpdate())}}(this)),$scope.setReady=function(_this){return function(){return $scope.event_group?($scope.booking_item.setEventGroup($scope.event_group),!0):!1}}(this)}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbEventGroups",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"EventGroupList",link:function(scope,element,attrs){attrs.bbItem&&(scope.booking_item=scope.$eval(attrs.bbItem)),attrs.bbShowAll&&(scope.show_all=!0)}}})}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("DurationList",["$scope","$attrs","$rootScope","$q","$filter","PageControllerService","AlertService","ValidatorService","LoadingService","$translate",function($scope,$attrs,$rootScope,$q,$filter,PageControllerService,AlertService,ValidatorService,LoadingService,$translate){var loader,options;return loader=LoadingService.$loader($scope).notLoaded(),angular.extend(this,new PageControllerService($scope,$q,ValidatorService,LoadingService)),options=$scope.$eval($attrs.bbDurations)||{},$rootScope.connection_started.then(function(){return $scope.loadData()},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}),$scope.loadData=function(_this){return function(){var d,duration,i,id,initial_duration,len,ref,service;if(id=$scope.bb.company_id,service=$scope.bb.current_item.service){for($scope.durations=function(){var i,len,ref,results;for(ref=_.zip(service.durations,service.prices),results=[],i=0,len=ref.length;len>i;i++)d=ref[i],results.push({value:d[0],price:d[1]});return results}(),initial_duration=$scope.$eval($attrs.bbInitialDuration),ref=$scope.durations,i=0,len=ref.length;len>i;i++)duration=ref[i],$scope.bb.current_item.duration&&duration.value===$scope.bb.current_item.duration?$scope.duration=duration:initial_duration&&initial_duration===duration.value&&($scope.duration=duration,$scope.bb.current_item.setDuration(duration.value)),duration.pretty=$filter("time_period")(duration.value),options.show_prices&&(duration.pretty+=" ("+$filter("currency")(duration.price)+")");1===$scope.durations.length&&($scope.skipThisStep(),$scope.selectDuration($scope.durations[0],$scope.nextRoute))}return loader.setLoaded()}}(this),$scope.selectDuration=function(_this){return function(dur,route){return $scope.$parent.$has_page_control?void($scope.duration=dur):($scope.bb.current_item.setDuration(dur.value),$scope.decideNextPage(route),!0)}}(this),$scope.durationChanged=function(_this){return function(){return $scope.bb.current_item.setDuration($scope.duration.value),$scope.broadcastItemUpdate()}}(this),$scope.setReady=function(_this){return function(){return $scope.duration?($scope.bb.current_item.setDuration($scope.duration.value),!0):(AlertService.clear(),AlertService.add("danger",{msg:$translate.instant("PUBLIC_BOOKING.DURATION_LIST.DURATON_NOT_SELECTED_ALERT")}),!1)}}(this),$scope.$on("currentItemUpdate",function(event){return $scope.loadData()})}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbDurations",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"DurationList"}})}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("Event",["$scope","$attrs","$rootScope","EventService","$q","PageControllerService","BBModel","ValidatorService","FormDataStoreService","LoadingService",function($scope,$attrs,$rootScope,EventService,$q,PageControllerService,BBModel,ValidatorService,FormDataStoreService,LoadingService){var init,initImage,initTickets,loader,ticket_refs;return loader=LoadingService.$loader($scope).notLoaded(),angular.extend(this,new PageControllerService($scope,$q,ValidatorService,LoadingService)),$scope.validator=ValidatorService,$scope.event_options=$scope.$eval($attrs.bbEvent)||{},ticket_refs=[],FormDataStoreService.init("Event",$scope,["selected_tickets","event_options"]),$rootScope.connection_started.then(function(){return $scope.bb.company?init($scope.bb.company):void 0},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}),init=function(comp){var promises;return $scope.bb.stacked_items&&0===$scope.bb.stacked_items.length&&delete $scope.selected_tickets,$scope.event=$scope.bb.current_item.event,$scope.event_options.use_my_details=null==$scope.event_options.use_my_details?!0:$scope.event_options.use_my_details,promises=[$scope.bb.current_item.event_group.$getImages(),$scope.event.prepEvent()],$scope.client&&promises.push($scope.getPrePaidsForEvent($scope.client,$scope.event)),$q.all(promises).then(function(result){var event,images,item,prepaids;return result[0]&&result[0].length>0&&(images=result[0]),event=result[1],result[2]&&result[2].length>0&&(prepaids=result[2]),$scope.event=event,images&&initImage(images),$scope.bb.current_item.tickets&&$scope.bb.current_item.tickets.qty>0?($scope.edit_mode=!0,loader.setLoaded(),$scope.selected_tickets=!0,$scope.current_ticket_items=_.filter($scope.bb.basket.timeItems(),function(item){return item.event_id===$scope.event.id}),$scope.tickets=function(){var i,len,ref1,results;for(ref1=$scope.current_ticket_items,results=[],i=0,len=ref1.length;len>i;i++)item=ref1[i],results.push(item.tickets);return results}(),void $scope.$watch("current_ticket_items",function(items,olditems){return $scope.bb.basket.total_price=$scope.bb.basket.totalPrice()},!0)):(initTickets(),$scope.$broadcast("bbEvent:initialised"),loader.setLoaded())},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")})},$scope.selectTickets=function(){var base_item,c,i,item,j,len,ref,ref1,ref2,ticket;for(loader.notLoaded(),$scope.bb.emptyStackedItems(),base_item=$scope.bb.current_item,ref1=$scope.event.tickets,i=0,len=ref1.length;len>i;i++)if(ticket=ref1[i],ticket.qty)switch($scope.event.chain.ticket_type){case"single_space":for(c=j=1,ref2=ticket.qty;ref2>=1?ref2>=j:j>=ref2;c=ref2>=1?++j:--j)item=new BBModel.BasketItem,ref=item.ref,angular.extend(item,base_item),item.ref=ref,ticket_refs.push(item.ref),delete item.id,item.tickets=angular.copy(ticket),item.tickets.qty=1,$scope.bb.stackItem(item);break;case"multi_space":item=new BBModel.BasketItem,ref=item.ref,angular.extend(item,base_item),item.ref=ref,ticket_refs.push(item.ref),item.tickets=angular.copy(ticket),delete item.id,item.tickets.qty=ticket.qty,$scope.bb.stackItem(item)}return 0===$scope.bb.stacked_items.length?void loader.setLoaded():($scope.bb.pushStackToBasket(),$scope.updateBasket().then(function(_this){return function(){return loader.setLoaded(),$scope.selected_tickets=!0,$scope.stopTicketWatch(),$scope.current_ticket_items=_.filter($scope.bb.basket.timeItems(),function(item){return _.contains(ticket_refs,item.ref)}),$scope.tickets=function(){var k,len1,ref3,results;for(ref3=$scope.current_ticket_items,results=[],k=0,len1=ref3.length;len1>k;k++)item=ref3[k],results.push(item.tickets);return results}(),$scope.$watch("current_ticket_items",function(items,olditems){return $scope.bb.basket.total_price=$scope.bb.basket.totalPrice()},!0)}}(this),function(err){return $scope.setLoadedAndShowError($scope,err,"Sorry, something went wrong")}))},$scope.selectItem=function(_this){return function(item,route){return $scope.$parent.$has_page_control?($scope.event=item,!1):($scope.bb.current_item.setEvent(item),$scope.bb.current_item.ready=!1,$scope.decideNextPage(route),!0)}}(this),$scope.setReady=function(_this){return function(){var i,item,len,ref1;for(ref1=$scope.current_ticket_items,i=0,len=ref1.length;len>i;i++)item=ref1[i],item.setEvent($scope.event);return $scope.bb.event_details={name:$scope.event.chain.name,image:$scope.event.image,address:$scope.event.chain.address,datetime:$scope.event.date,end_datetime:$scope.event.end_datetime,duration:$scope.event.duration,tickets:$scope.event.tickets},$scope.event_options.suppress_basket_update?!0:$scope.updateBasket();
}}(this),$scope.getPrePaidsForEvent=function(client,event){var defer,params;return defer=$q.defer(),params={event_id:event.id},client.$getPrePaidBookings(params).then(function(prepaids){return $scope.pre_paid_bookings=prepaids,defer.resolve(prepaids)},function(err){return defer.reject(err)}),defer.promise},initImage=function(images){var image;return image=images[0],image?(image.background_css={"background-image":"url("+image.url+")"},$scope.event.image=image):void 0},initTickets=function(){var i,len,ref1,ticket;if(!$scope.selected_tickets){if($scope.event.tickets[0].qty=$scope.event_options.default_num_tickets?$scope.event_options.default_num_tickets:0,$scope.event.tickets.length>1)for(ref1=$scope.event.tickets.slice(1),i=0,len=ref1.length;len>i;i++)ticket=ref1[i],ticket.qty=0;return $scope.event_options.default_num_tickets&&$scope.event_options.auto_select_tickets&&1===$scope.event.tickets.length&&1===$scope.event.tickets[0].max_num_bookings&&$scope.selectTickets(),$scope.tickets=$scope.event.tickets,$scope.bb.basket.total_price=$scope.bb.basket.totalPrice(),$scope.stopTicketWatch=$scope.$watch("tickets",function(tickets,oldtickets){return $scope.bb.basket.total_price=$scope.bb.basket.totalPrice(),$scope.event.updatePrice()},!0)}}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbEvent",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"Event"}})}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("EventList",["$scope","$rootScope","EventService","EventChainService","EventGroupService","$q","PageControllerService","FormDataStoreService","$filter","PaginationService","$timeout","ValidatorService","LoadingService","BBModel",function($scope,$rootScope,EventService,EventChainService,EventGroupService,$q,PageControllerService,FormDataStoreService,$filter,PaginationService,$timeout,ValidatorService,LoadingService,BBModel){var buildDynamicFilters,loader,sort;return loader=LoadingService.$loader($scope).notLoaded(),angular.extend(this,new PageControllerService($scope,$q,ValidatorService,LoadingService)),$scope.pick={},$scope.start_date=moment(),$scope.end_date=moment().add(1,"year"),$scope.filters={hide_fully_booked_events:!1},$scope.pagination=PaginationService.initialise({page_size:10,max_size:5}),$scope.events={},$scope.fully_booked=!1,$scope.event_data_loaded=!1,FormDataStoreService.init("EventList",$scope,["selected_date","event_group_id","event_group_manually_set"]),$rootScope.connection_started.then(function(){if($scope.bb.company){if(!($scope.bb.item_defaults&&$scope.bb.item_defaults.event||$scope.bb.current_item.defaults&&$scope.bb.current_item.defaults.event))return $scope.bb.company.$has("parent")&&!$scope.bb.company.$has("company_questions")?$scope.bb.company.$getParent().then(function(parent){return $scope.company_parent=parent,$scope.initialise()},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}):$scope.initialise();$scope.skipThisStep(),$scope.decideNextPage()}},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}),$scope.initialise=function(){var event_group,promises;return loader.notLoaded(),0!==$scope.mode&&delete $scope.selected_date,$scope.event_group_manually_set||null!=$scope.bb.current_item.event_group||($scope.event_group_manually_set=null==$scope.event_group_manually_set&&null!=$scope.bb.current_item.event_group),$scope.bb.current_item.event&&(event_group=$scope.bb.current_item.event_group,$scope.clearBasketItem(),$scope.emptyBasket(),$scope.event_group_manually_set&&$scope.bb.current_item.setEventGroup(event_group)),promises=[],$scope.bb.company.$has("company_questions")?promises.push($scope.bb.company.$getCompanyQuestions()):null!=$scope.company_parent&&$scope.company_parent.$has("company_questions")?promises.push($scope.company_parent.$getCompanyQuestions()):(promises.push($q.when([])),$scope.has_company_questions=!1),$scope.bb.item_defaults&&$scope.bb.item_defaults.event_group?$scope.bb.current_item.setEventGroup($scope.bb.item_defaults.event_group):!$scope.bb.current_item.event_group&&$scope.bb.company.$has("event_groups")?promises.push(EventGroupService.query($scope.bb.company,{per_page:500})):promises.push($q.when([])),0===$scope.mode||2===$scope.mode?promises.push($scope.loadEventSummary()):promises.push($q.when([])),1===$scope.mode||2===$scope.mode?promises.push($scope.loadEventData()):promises.push($q.when([])),$q.all(promises).then(function(result){var company_questions,event_data,event_groups,event_groups_collection,event_summary,item,j,len,ref;if(company_questions=result[0],event_groups=result[1],event_summary=result[2],event_data=result[3],$scope.has_company_questions=null!=company_questions&&company_questions.length>0,company_questions&&buildDynamicFilters(company_questions),$scope.event_groups=event_groups,event_groups_collection=_.indexBy(event_groups,"id"),$scope.items)for(ref=$scope.items,j=0,len=ref.length;len>j;j++)item=ref[j],item.group=event_groups_collection[item.service_id];return loader.setLoaded()},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")})},$scope.loadEventSummary=function(){var comp,current_event,deferred,params;return deferred=$q.defer(),current_event=$scope.bb.current_item.event,$scope.bb.current_item&&($scope.bb.current_item.event_chain_id||$scope.bb.current_item.event_chain)&&(delete $scope.bb.current_item.event_chain,delete $scope.bb.current_item.event_chain_id),comp=$scope.bb.company,params={item:$scope.bb.current_item,start_date:$scope.start_date.toISODate(),end_date:$scope.end_date.toISODate()},$scope.bb.item_defaults.event_chain&&(params.event_chain_id=$scope.bb.item_defaults.event_chain.id),BBModel.Event.$summary(comp,params).then(function(items){var d,item,item_dates,j,len;if(items&&items.length>0){for(item_dates=[],j=0,len=items.length;len>j;j++)item=items[j],d=moment(item),item_dates.push({date:d,idate:parseInt(d.format("YYYYDDDD")),count:1,spaces:1});$scope.item_dates=item_dates.sort(function(a,b){return a.idate-b.idate}),0===$scope.mode&&($scope.selected_date&&($scope.selected_date.isAfter($scope.item_dates[0].date)||$scope.selected_date.isSame($scope.item_dates[0].date))&&($scope.selected_date.isBefore($scope.item_dates[$scope.item_dates.length-1].date)||$scope.selected_date.isSame($scope.item_dates[$scope.item_dates.length-1].date))?$scope.showDay($scope.selected_date):$scope.showDay($scope.item_dates[0].date))}return deferred.resolve($scope.item_dates)},function(err){return deferred.reject()}),deferred.promise},$scope.loadEventChainData=function(comp){var deferred,params;return deferred=$q.defer(),$scope.bb.item_defaults.event_chain?deferred.resolve([]):(loader.notLoaded(),comp||(comp=$scope.bb.company),params={item:$scope.bb.current_item,start_date:$scope.start_date.toISODate(),end_date:$scope.end_date.toISODate()},$scope.events_options.embed&&(params.embed=$scope.events_options.embed),$scope.client&&(params.member_level_id=$scope.client.member_level_id),BBModel.EventChain.$query(comp,params).then(function(event_chains){return loader.setLoaded(),deferred.resolve(event_chains)},function(err){return deferred.reject()})),deferred.promise},$scope.loadEventData=function(comp){var chains,current_event,deferred,params;return loader.notLoaded(),$scope.event_data_loaded=!1,0===$scope.mode&&delete $scope.items,deferred=$q.defer(),current_event=$scope.bb.current_item.event,comp||(comp=$scope.bb.company),$scope.bb.current_item&&($scope.bb.current_item.event_chain_id||$scope.bb.current_item.event_chain)&&(delete $scope.bb.current_item.event_chain,delete $scope.bb.current_item.event_chain_id),params={item:$scope.bb.current_item,start_date:$scope.start_date.toISODate(),end_date:$scope.end_date.toISODate(),include_non_bookable:!0},$scope.events_options.event_data_embed&&(params.embed=$scope.events_options.event_data_embed),$scope.bb.item_defaults.event_chain&&(params.event_chain_id=$scope.bb.item_defaults.event_chain.id),$scope.per_page&&(params.per_page=$scope.per_page),chains=$scope.loadEventChainData(comp),$scope.events={},BBModel.Event.$query(comp,params).then(function(events){var item,j,len,ref;for($scope.items=_.flatten(events),ref=$scope.items,j=0,len=ref.length;len>j;j++)item=ref[j],item.spaces_left=item.getSpacesLeft();return $scope.bb.company.$has("address")&&$scope.bb.company.$getAddress().then(function(address){var k,len1,ref1,results;for(ref1=$scope.items,results=[],k=0,len1=ref1.length;len1>k;k++)item=ref1[k],results.push(item.address=address);return results}),chains.then(function(){var idate,item_dates,k,l,len1,len2,ref1,x,y;for(ref1=$scope.items,k=0,len1=ref1.length;len1>k;k++)item=ref1[k],params={embed:$scope.events_options.embed},$scope.client&&(params.member_level_id=$scope.client.member_level_id),item.prepEvent(params),0===$scope.mode&¤t_event&¤t_event.self===item.self&&(item.select(),$scope.event=item);if(1===$scope.mode)if(item_dates={},items.length>0){for(l=0,len2=items.length;len2>l;l++)item=items[l],item.getDuration(),idate=parseInt(item.date.format("YYYYDDDD")),item.idate=idate,item_dates[idate]||(item_dates[idate]={date:item.date,idate:idate,count:0,spaces:0}),item_dates[idate].count+=1,item_dates[idate].spaces+=item.num_spaces;$scope.item_dates=[];for(x in item_dates)y=item_dates[x],$scope.item_dates.push(y);$scope.item_dates=$scope.item_dates.sort(function(a,b){return a.idate-b.idate})}else idate=parseInt($scope.start_date.format("YYYYDDDD")),$scope.item_dates=[{date:$scope.start_date,idate:idate,count:0,spaces:0}];return $scope.isFullyBooked(),$scope.filtered_items=$scope.items,$scope.filterChanged(),PaginationService.update($scope.pagination,$scope.filtered_items.length),loader.setLoaded(),$scope.event_data_loaded=!0,deferred.resolve($scope.items)},function(err){return deferred.reject()})},function(err){return deferred.reject()}),deferred.promise},$scope.isFullyBooked=function(){var full_events,item,j,len,ref;for(full_events=[],ref=$scope.items,j=0,len=ref.length;len>j;j++)item=ref[j],item.num_spaces===item.spaces_booked&&full_events.push(item);return full_events.length===$scope.items.length?$scope.fully_booked=!0:void 0},$scope.showDay=function(date){var new_date;if(moment.isMoment(date))return 0===$scope.mode?($scope.event&&!$scope.selected_date.isSame(date,"day")&&delete $scope.event,new_date=date,$scope.start_date=moment(date),$scope.end_date=moment(date),$scope.loadEventData()):$scope.selected_date&&date.isSame($scope.selected_date,"day")||(new_date=date),new_date?($scope.selected_date=new_date,$scope.filters.date=new_date.toDate()):(delete $scope.selected_date,delete $scope.filters.date),$scope.filterChanged()},$scope.$watch("pick.date",function(_this){return function(new_val,old_val){return new_val?($scope.start_date=moment(new_val),$scope.end_date=moment(new_val),$scope.loadEventData()):void 0}}(this)),$scope.selectItem=function(_this){return function(item,route){var i,j,len,ref;if(!(item.getSpacesLeft()<=0&&$scope.bb.company.settings.has_waitlists||item.hasSpace()))return!1;if(loader.notLoaded(),$scope.$parent.$has_page_control)return $scope.event&&$scope.event.unselect(),$scope.event=item,$scope.event.select(),loader.setLoaded(),!1;if($scope.bb.moving_purchase)for(ref=$scope.bb.basket.items,j=0,len=ref.length;len>j;j++)i=ref[j],i.setEvent(item);return $scope.bb.current_item.setEvent(item),$scope.bb.current_item.ready=!1,$q.all($scope.bb.current_item.promises).then(function(){return $scope.decideNextPage(route)},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}),!0}}(this),$scope.setReady=function(){return $scope.event?($scope.bb.current_item.setEvent($scope.event),!0):!1},$scope.filterEvents=function(item){var result;return result=item.bookable&&(moment($scope.filters.date).isSame(item.date,"day")||null==$scope.filters.date)&&($scope.filters.event_group&&item.service_id===$scope.filters.event_group.id||null==$scope.filters.event_group)&&(null!=$scope.filters.price&&item.price_range.from<=$scope.filters.price||null==$scope.filters.price)&&($scope.filters.hide_fully_booked_events&&item.getSpacesLeft()>0||!$scope.filters.hide_fully_booked_events)&&$scope.filterEventsWithDynamicFilters(item)},$scope.filterEventsWithDynamicFilters=function(item){var dynamic_filter,filter,i,j,k,l,len,len1,len2,len3,m,name,ref,ref1,ref2,ref3,result,type;if(!$scope.has_company_questions||!$scope.dynamic_filters)return!0;for(result=!0,ref=$scope.dynamic_filters.question_types,j=0,len=ref.length;len>j;j++)if(type=ref[j],"check"===type)for(ref1=$scope.dynamic_filters.check,k=0,len1=ref1.length;len1>k;k++){if(dynamic_filter=ref1[k],name=dynamic_filter.name.parameterise("_"),filter=!1,item.chain&&item.chain.extra[name])for(ref2=item.chain.extra[name],l=0,len2=ref2.length;len2>l&&(i=ref2[l],!(filter=$scope.dynamic_filters.values[dynamic_filter.name]&&i===$scope.dynamic_filters.values[dynamic_filter.name].name||null==$scope.dynamic_filters.values[dynamic_filter.name]));l++);else void 0!==item.chain.extra[name]||!_.isEmpty($scope.dynamic_filters.values)&&null!=$scope.dynamic_filters.values[dynamic_filter.name]||(filter=!0);result=result&&filter}else for(ref3=$scope.dynamic_filters[type],m=0,len3=ref3.length;len3>m;m++)dynamic_filter=ref3[m],name=dynamic_filter.name.parameterise("_"),filter=$scope.dynamic_filters.values[dynamic_filter.name]&&item.chain.extra[name]===$scope.dynamic_filters.values[dynamic_filter.name].name||null==$scope.dynamic_filters.values[dynamic_filter.name],result=result&&filter;return result},$scope.filterDateChanged=function(options){var date;return null==options&&(options={reset:!1}),$scope.filters.date&&(date=moment($scope.filters.date),$scope.$broadcast("event_list_filter_date:changed",date),$scope.showDay(date),options.reset===!0||null==$scope.selected_date)?$timeout(function(){return delete $scope.filters.date},250):void 0},$scope.resetFilters=function(){return $scope.filters={},$scope.has_company_questions&&($scope.dynamic_filters.values={}),$scope.filterChanged(),delete $scope.selected_date,$rootScope.$broadcast("event_list_filter_date:cleared")},buildDynamicFilters=function(questions){return questions=_.each(questions,function(question){return question.name=$filter("wordCharactersAndSpaces")(question.name)}),$scope.dynamic_filters=_.groupBy(questions,"question_type"),$scope.dynamic_filters.question_types=_.uniq(_.pluck(questions,"question_type")),$scope.dynamic_filters.values={}},sort=function(){},$scope.filterChanged=function(){return $scope.items?($scope.filtered_items=$filter("filter")($scope.items,$scope.filterEvents),$scope.pagination.num_items=$scope.filtered_items.length,$scope.filter_active=$scope.filtered_items.length!==$scope.items.length,PaginationService.update($scope.pagination,$scope.filtered_items.length)):void 0},$scope.pageChanged=function(){return PaginationService.update($scope.pagination,$scope.filtered_items.length),$rootScope.$broadcast("page:changed")}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbEvents",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"EventList",link:function(scope,element,attrs){scope.summary=null!=attrs.summary,scope.events_options=scope.$eval(attrs.bbEvents)||{},scope.mode=scope.events_options&&scope.events_options.mode?scope.events_options.mode:0,scope.summary&&(scope.mode=0),scope.events_options&&scope.events_options.per_page&&(scope.per_page=scope.events_options.per_page)}}})}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("DayList",["$scope","$rootScope","$q","DayService",function($scope,$rootScope,$q,DayService){var setCurrentDate;return $rootScope.connection_started.then(function(){return!$scope.current_date&&$scope.last_selected_date?($scope.selected_date=$scope.last_selected_date.clone(),setCurrentDate($scope.last_selected_date.clone().startOf("week"))):$scope.current_date||setCurrentDate(moment().startOf("week")),$scope.loadData()},function(err){return $scope.setLoadedAndShowError($scope,err,"Sorry, something went wrong")}),$scope.selectDay=function(_this){return function(day){return!day.spaces||day.spaces&&0===day.spaces?void 0:($scope.setLastSelectedDate(day.date),$scope.selected_date=day.date,$scope.bb.current_item.setDate(day),$scope.$broadcast("dateChanged",day.date))}}(this),setCurrentDate=function(date){return $scope.current_date=date,$scope.current_date_js=$scope.current_date.toDate()},$scope.add=function(_this){return function(type,amount){return setCurrentDate($scope.current_date.add(amount,type)),$scope.loadData()}}(this),$scope.subtract=function(_this){return function(type,amount){return $scope.add(type,-amount)}}(this),$scope.currentDateChanged=function(){var date;return date=moment($scope.current_date_js).startOf("week"),setCurrentDate(date),$scope.loadData()},$scope.isDateDisabled=function(date,mode){var result;return date=moment(date),result="day"===mode&&(1!==date.day()||date.isBefore(moment(),"day"))},$scope.isPast=function(_this){return function(){return $scope.current_date?moment().isAfter($scope.current_date):!0}}(this),$scope.loadData=function(){var promise;return $scope.day_data={},$scope.notLoaded($scope),$scope.end_date=moment($scope.current_date).add(5,"weeks"),promise=DayService.query({company:$scope.bb.company,cItem:$scope.bb.current_item,date:$scope.current_date.toISODate(),edate:$scope.end_date.toISODate(),client:$scope.client}),promise.then(function(days){var day,i,len;for(i=0,len=days.length;len>i;i++)day=days[i],$scope.day_data[day.string_date]={spaces:day.spaces,date:day.date};return $scope.weeks=_.groupBy($scope.day_data,function(day){return day.date.week()}),$scope.weeks=_.toArray($scope.weeks),$scope.setLoaded($scope)},function(err){return $scope.setLoadedAndShowError($scope,err,"Sorry, something went wrong")})}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbDayList",function(){return{restrict:"A",replace:!0,scope:!0,controller:"DayList"}})}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("DayListMa",["$scope","$rootScope","$q","AlertService","LoadingService","BBModel",function($scope,$rootScope,$q,AlertService,LoadingService,BBModel){var loader;return loader=LoadingService.$loader($scope).notLoaded(),$scope.WeekHeaders=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],$scope.day_data={},$scope.type||($scope.type="month"),$scope.data_source||($scope.data_source=$scope.bb.current_item),$rootScope.connection_started.then(function(_this){return function(){return!$scope.current_date&&$scope.last_selected_date?$scope.current_date=$scope.last_selected_date.startOf($scope.type):$scope.current_date||($scope.current_date=moment().startOf($scope.type)),$scope.loadData()}}(this),function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}),$scope.$on("currentItemUpdate",function(event){return $scope.loadData()}),$scope.setCalType=function(_this){return function(type){return $scope.type=type}}(this),$scope.setDataSource=function(_this){return function(source){return $scope.data_source=source}}(this),$scope.format_date=function(_this){return function(fmt){return $scope.current_date?$scope.current_date.format(fmt):void 0}}(this),$scope.format_start_date=function(_this){return function(fmt){return $scope.format_date(fmt)}}(this),$scope.format_end_date=function(_this){return function(fmt){return $scope.end_date?$scope.end_date.format(fmt):void 0}}(this),$scope.selectDay=function(_this){return function(day,route,force){return 0!==day.spaces||force?($scope.setLastSelectedDate(day.date),$scope.bb.current_item.setDate(day),$scope.$parent.$has_page_control?void 0:$scope.decideNextPage(route)):!1}}(this),$scope.setMonth=function(_this){return function(month,year){return $scope.current_date=moment().startOf("month").year(year).month(month-1),$scope.current_date.year(),$scope.type="month"}}(this),$scope.setWeek=function(_this){return function(week,year){return $scope.current_date=moment().year(year).isoWeek(week).startOf("week"),$scope.current_date.year(),$scope.type="week"}}(this),$scope.add=function(_this){return function(type,amount){return $scope.current_date.add(amount,type),$scope.loadData()}}(this),$scope.subtract=function(_this){return function(type,amount){return $scope.add(type,-amount)}}(this),$scope.isPast=function(_this){return function(){return $scope.current_date?moment().isAfter($scope.current_date):!0}}(this),$scope.loadData=function(_this){return function(){return"week"===$scope.type?$scope.loadWeek():$scope.loadMonth()}}(this),$scope.loadMonth=function(_this){return function(){var date,edate;return date=$scope.current_date,$scope.month=date.month(),loader.notLoaded(),edate=moment(date).add(1,"months"),$scope.end_date=moment(edate).add(-1,"days"),$scope.data_source?BBModel.Day.$query({company:$scope.bb.company,cItem:$scope.data_source,month:date.format("MMYY"),client:$scope.client}).then(function(days){var d,day,i,j,k,len,w,week,weeks;for($scope.days=days,i=0,len=days.length;len>i;i++)day=days[i],$scope.day_data[day.string_date]=day;for(weeks=[],w=j=0;5>=j;w=++j){for(week=[],d=k=0;6>=k;d=++k)week.push(days[7*w+d]);weeks.push(week)}return $scope.weeks=weeks,loader.setLoaded()},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}):loader.setLoaded()}}(this),$scope.loadWeek=function(_this){return function(){var date,edate;return date=$scope.current_date,loader.notLoaded(),edate=moment(date).add(7,"days"),$scope.end_date=moment(edate).add(-1,"days"),$scope.data_source?BBModel.Day.$query({company:$scope.bb.company,cItem:$scope.data_source,date:date.toISODate(),edate:edate.toISODate(),client:$scope.client}).then(function(days){var day,i,len;for($scope.days=days,i=0,len=days.length;len>i;i++)day=days[i],$scope.day_data[day.string_date]=day;return loader.setLoaded()},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}):loader.setLoaded()}}(this),$scope.setReady=function(_this){return function(){return $scope.bb.current_item.date?!0:(AlertService.clear(),AlertService.add("danger",{msg:"You need to select a date"}),!1)}}(this)}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbMonthAvailability",function(){return{restrict:"A",replace:!0,scope:!0,controller:"DayListMa"}})}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("ItemDetails",["$scope","$attrs","$rootScope","PurchaseBookingService","AlertService","BBModel","FormDataStoreService","ValidatorService","$uibModal","$document","$translate","$filter","GeneralOptions","PurchaseService","LoadingService",function($scope,$attrs,$rootScope,PurchaseBookingService,AlertService,BBModel,FormDataStoreService,ValidatorService,$uibModal,$document,$translate,$filter,GeneralOptions,PurchaseService,LoadingService){var confirming,loader,setItemDetails;return loader=LoadingService.$loader($scope),$scope.suppress_basket_update=null!=$attrs.bbSuppressBasketUpdate,$scope.item_details_id=$scope.$eval($attrs.bbSuppressBasketUpdate),$scope.suppress_basket_update?FormDataStoreService.init("ItemDetails"+$scope.item_details_id,$scope,["item_details"]):FormDataStoreService.init("ItemDetails",$scope,["item_details"]),BBModel.Question.$addAnswersByName($scope.client,["first_name","last_name","email","mobile"]),$scope.validator=ValidatorService,confirming=!1,$rootScope.connection_started.then(function(){return confirming?void 0:$scope.loadItem($scope.bb.current_item)},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}),$scope.loadItem=function(item){var params;return loader.notLoaded(),confirming=!0,$scope.item=item,$scope.bb.private_note&&($scope.item.private_note=$scope.bb.private_note),$scope.product=item.product,$scope.item.item_details?(setItemDetails($scope.item.item_details),BBModel.Question.$addDynamicAnswersByName($scope.item_details.questions),$scope.bb.item_defaults.answers&&BBModel.Question.$addAnswersFromDefaults($scope.item_details.questions,$scope.bb.item_defaults.answers),$scope.recalc_price(),loader.setLoaded(),$scope.$emit("item_details:loaded",$scope.item_details)):(params={company:$scope.bb.company,cItem:$scope.item},BBModel.ItemDetails.$query(params).then(function(details){return details&&(setItemDetails(details),$scope.item.item_details=$scope.item_details,BBModel.Question.$addDynamicAnswersByName($scope.item_details.questions),$scope.bb.item_defaults.answers&&BBModel.Question.$addAnswersFromDefaults($scope.item_details.questions,$scope.bb.item_defaults.answers),$scope.recalc_price(),$scope.$emit("item_details:loaded",$scope.item_details)),loader.setLoaded()},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}))},setItemDetails=function(details){var oldQuestions;return $scope.item&&$scope.item.defaults&&_.each(details.questions,function(item){var n;return n="q_"+item.name,$scope.item.defaults[n]?item.answer=$scope.item.defaults[n]:void 0}),$scope.hasOwnProperty("item_details")&&(oldQuestions=$scope.item_details.questions,_.each(details.questions,function(item){var search;return search=_.findWhere(oldQuestions,{name:item.name}),search?item.answer=search.answer:void 0})),$scope.item_details=details},$scope.$on("currentItemUpdate",function(event){return $scope.item_from_param?$scope.loadItem($scope.item_from_param):$scope.loadItem($scope.bb.current_item)}),$scope.recalc_price=function(){var bprice,qprice;return qprice=$scope.item_details.questionPrice($scope.item.getQty()),bprice=$scope.item.base_price,bprice||(bprice=$scope.item.price),$scope.item.setPrice(qprice+bprice),$scope.item.setAskedQuestions()},$scope.confirm=function(form,route){return ValidatorService.validateForm(form)?$scope.bb.moving_booking?$scope.confirm_move(form,route):($scope.item.setAskedQuestions(),$scope.$parent.$has_page_control?!0:$scope.item.ready?(loader.notLoaded(),$scope.addItemToBasket().then(function(){return loader.setLoaded(),$scope.decideNextPage(route)},function(err){return loader.setLoaded()})):$scope.decideNextPage(route)):void 0},$scope.setReady=function(_this){return function(){return $scope.item.setAskedQuestions(),$scope.item.ready&&!$scope.suppress_basket_update?$scope.addItemToBasket():!0}}(this),$scope.confirm_move=function(route){var params;return confirming=!0,$scope.item||($scope.item=$scope.bb.current_item),$scope.item.moved_booking=!1,$scope.item.setAskedQuestions(),$scope.item.ready?(loader.notLoaded(),$scope.bb.moving_purchase?(params={purchase:$scope.bb.moving_purchase,bookings:$scope.bb.basket.items},$scope.bb.current_item.move_reason&&(params.move_reason=$scope.bb.current_item.move_reason),PurchaseService.update(params).then(function(purchase){return $scope.bb.purchase=purchase,$scope.bb.purchase.$getBookings().then(function(bookings){return $scope.purchase=purchase,loader.setLoaded(),$scope.item.move_done=!0,$scope.item.moved_booking=!0,$rootScope.$broadcast("booking:moved"),$scope.decideNextPage(route),$scope.showMoveMessage(bookings[0].datetime)})},function(err){return loader.setLoaded(),AlertService.add("danger",{msg:$translate.instant("PUBLIC_BOOKING.ITEM_DETAILS.MOVE_BOOKING_FAIL_ALERT")})})):($scope.bb.current_item.move_reason&&($scope.item.move_reason=$scope.bb.current_item.move_reason),PurchaseBookingService.update($scope.item).then(function(booking){var _i,b,i,len,oldb,ref;if(b=new BBModel.Purchase.Booking(booking),$scope.bb.purchase)for(ref=$scope.bb.purchase.bookings,_i=i=0,len=ref.length;len>i;_i=++i)oldb=ref[_i],oldb.id===b.id&&($scope.bb.purchase.bookings[_i]=b);return loader.setLoaded(),$scope.bb.moved_booking=booking,$scope.item.move_done=!0,$rootScope.$broadcast("booking:moved"),$scope.decideNextPage(route),$scope.showMoveMessage(b.datetime)},function(_this){return function(err){return loader.setLoaded(),AlertService.add("danger",{msg:$translate.instant("PUBLIC_BOOKING.ITEM_DETAILS.MOVE_BOOKING_FAIL_ALERT")})}}(this)))):$scope.decideNextPage(route)},$scope.showMoveMessage=function(datetime){return AlertService.add("info",{msg:$translate.instant("PUBLIC_BOOKING.ITEM_DETAILS.MOVE_BOOKING_SUCCESS_ALERT",{datetime:$filter("datetime")(datetime,"LLLL")})})},$scope.openTermsAndConditions=function(){var modalInstance;return modalInstance=$uibModal.open({templateUrl:$scope.getPartial("terms_and_conditions"),scope:$scope})},$scope.getQuestion=function(id){var i,len,question,ref;for(ref=$scope.item_details.questions,i=0,len=ref.length;len>i;i++)if(question=ref[i],question.id===id)return question;return null},$scope.updateItem=function(){return $scope.item.setAskedQuestions(),$scope.item.ready?(loader.notLoaded(),PurchaseBookingService.update($scope.item).then(function(booking){var _i,b,i,len,oldb,ref;if(b=new BBModel.Purchase.Booking(booking),$scope.bookings)for(ref=$scope.bookings,_i=i=0,len=ref.length;len>i;_i=++i)oldb=ref[_i],oldb.id===b.id&&($scope.bookings[_i]=b);return $scope.purchase.bookings=$scope.bookings,$scope.item_details_updated=!0,loader.setLoaded()},function(_this){return function(err){return loader.setLoaded()}}(this))):void 0},$scope.editItem=function(){return $scope.item_details_updated=!1}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbItemDetails",["$q","$templateCache","$compile",function($q,$templateCache,$compile){return{restrict:"AE",replace:!0,scope:!0,transclude:!0,controller:"ItemDetails",link:function(scope,element,attrs,controller,transclude){var item;return attrs.bbItemDetails&&(item=scope.$eval(attrs.bbItemDetails),scope.item_from_param=item,scope.item_details&&delete scope.item_details,item&&scope.loadItem(item)),transclude(scope,function(_this){return function(clone){var has_content;return has_content=clone.length>1||1===clone.length&&(!clone[0].wholeText||/\S/.test(clone[0].wholeText)),has_content?element.html(clone).show():$q.when($templateCache.get("_item_details.html")).then(function(template){return element.html(template).show(),$compile(element.contents())(scope)})}}(this))}}}])}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("MemberLogin",["$scope","$log","$rootScope","$templateCache","$q","halClient","BBModel","$sessionStorage","$window","AlertService","ValidatorService","LoadingService",function($scope,$log,$rootScope,$templateCache,$q,halClient,BBModel,$sessionStorage,$window,AlertService,ValidatorService,LoadingService){var loader;return $scope.login={},$scope.validator=ValidatorService,loader=LoadingService.$loader($scope).notLoaded(),$rootScope.connection_started.then(function(){return BBModel.Login.$checkLogin()?($scope.setClient($rootScope.member),$scope.bb.destination?$scope.redirectTo($scope.bb.destination):(loader.setLoaded(),$scope.skipThisStep(),$scope.decideNextPage())):halClient.$get($scope.bb.api_url+"/api/v1").then(function(root){return root.$get("new_login").then(function(new_login){return $scope.form=new_login.form,$scope.schema=new_login.schema,loader.setLoaded()},function(err){return console.log("err ",err)})},function(err){return console.log("err ",err)})}),$scope.submit=function(){return $scope.login.role="member",$scope.bb.company.$post("login",{},$scope.login).then(function(login){return login.$has("members")?login.$get("members").then(function(members){return $scope.handleLogin(members[0])}):login.$has("member")?login.$get("member").then(function(member){return $scope.handleLogin(member)}):void 0},function(err){return"Account has been disabled"===err.data.error?AlertService.raise("ACCOUNT_DISABLED"):AlertService.raise("LOGIN_FAILED")})},$scope.handleLogin=function(member){return member=BBModel.Login.$setLogin(member,$scope.login.persist_login),$scope.setClient(member),$scope.bb.destination?$scope.redirectTo($scope.bb.destination):($scope.skipThisStep(),$scope.decideNextPage())}}])}.call(this),function(){"use strict";angular.module("BB").directive("bbMemberLogin",["PathSvc",function(PathSvc){return{restrict:"A",controller:"MemberLogin",templateUrl:function(elem,attrs){
return null!=attrs.bbCustomLoginForm?PathSvc.directivePartial("_member_login_form"):PathSvc.directivePartial("_member_login_schema_form")}}}])}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("MapCtrl",["$scope","$element","$attrs","$rootScope","AlertService","FormDataStoreService","LoadingService","$q","$window","$timeout","ErrorService","$log","GeolocationService",function($scope,$element,$attrs,$rootScope,AlertService,FormDataStoreService,LoadingService,$q,$window,$timeout,ErrorService,$log,GeolocationService){var checkDataStore,filterByService,geolocateFail,loader,mapInit,map_ready_def,openDefaultMarker,reverseGeocode,searchFailed,searchPlaces,searchSuccess,setAnswers,setMarkers;return FormDataStoreService.init("MapCtrl",$scope,["address","selectedStore","search_prms"]),$scope.options=$scope.$eval($attrs.bbMap)||{},$scope.num_search_results=$scope.options.num_search_results||6,$scope.range_limit=$scope.options.range_limit||1/0,$scope.hide_not_live_stores=$scope.options.hide_not_live_stores||!1,$scope.can_filter_by_service=$scope.options.filter_by_service||!1,$scope.filter_by_service=$scope.options.filter_by_service||!1,$scope.default_zoom=$scope.options.default_zoom||6,map_ready_def=$q.defer(),$scope.mapLoaded=$q.defer(),$scope.mapReady=map_ready_def.promise,$scope.map_init=$scope.mapLoaded.promise,$scope.showAllMarkers=!1,$scope.mapMarkers=[],$scope.shownMarkers=$scope.shownMarkers||[],$scope.numberedPin||($scope.numberedPin=null),$scope.defaultPin||($scope.defaultPin=null),!$scope.address&&$attrs.bbAddress&&($scope.address=$scope.$eval($attrs.bbAddress)),loader=LoadingService.$loader($scope).notLoaded(),webshim.setOptions({waitReady:!1,loadStyles:!1}),webshim.polyfill("geolocation"),$rootScope.connection_started.then(function(){var comp,i,key,latlong,len,ref,ref1,value;if($scope.selectedStore||loader.setLoaded(),!$scope.bb.company.companies)return $rootScope.parent_id?void $scope.initWidget({company_id:$rootScope.parent_id,first_page:$scope.bb.current_page,keep_basket:!0,item_defaults:$scope.bb.item_defaults?$scope.bb.item_defaults:{}}):void $scope.initWidget({company_id:$scope.bb.company.id,first_page:null});for($rootScope.parent_id=$scope.bb.company.id,$scope.companies=$scope.bb.company.companies,$scope.companies&&0!==$scope.companies.length||($scope.companies=[$scope.bb.company]),$scope.bb.current_item.service&&$scope.options&&$scope.options.filter_by_service?($scope.notLoaded($scope),filterByService().then(function(){return $scope.map_init.then(function(){return mapInit()})})):$scope.map_init.then(function(){return mapInit()}),$scope.mapBounds=new google.maps.LatLngBounds,ref=$scope.companies,i=0,len=ref.length;len>i;i++)comp=ref[i],comp.address&&comp.address.lat&&comp.address["long"]&&(latlong=new google.maps.LatLng(comp.address.lat,comp.address["long"]),$scope.mapBounds.extend(latlong));if($scope.mapOptions={center:$scope.mapBounds.getCenter(),zoom:$scope.default_zoom,mapTypeId:google.maps.MapTypeId.ROADMAP,mapTypeControl:!0,mapTypeControlOptions:{style:window.google.maps.MapTypeControlStyle.DROPDOWN_MENU}},$scope.options&&$scope.options.map_options){ref1=$scope.options.map_options;for(key in ref1)value=ref1[key],$scope.mapOptions[key]=value}return map_ready_def.resolve(!0)},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}),filterByService=function(){var deferred;return deferred=$q.defer(),$scope.bb.selected_service.$has("all_children")?$scope.bb.selected_service.$get("all_children").then(function(resource){return resource.$get("services").then(function(services){var company,company_ids,i,len,ref,results1,service;for(company_ids=_.map(services,function(service){return service.company_id}),ref=$scope.companies,results1=[],i=0,len=ref.length;len>i;i++)company=ref[i],company.has_service=_.contains(company_ids,company.id),service=_.find(services,function(service){return service.company_id===company.id}),company.service=service,results1.push(deferred.resolve());return results1})}):deferred.resolve(),deferred.promise},$scope.filterByService=function(){var i,len,marker,ref;for(ref=$scope.shownMarkers,i=0,len=ref.length;len>i;i++)marker=ref[i],marker.setMap(null);return $scope.options&&$scope.filter_by_service?$scope.shownMarkers=$scope.shown_markers_with_services:$scope.shownMarkers=$scope.shown_markers,$timeout(function(){return setMarkers()})},mapInit=function(){var comp,i,latlong,len,marker,ref;for(ref=$scope.companies,i=0,len=ref.length;len>i;i++)comp=ref[i],comp.address&&comp.address.lat&&comp.address["long"]&&(latlong=new google.maps.LatLng(comp.address.lat,comp.address["long"]),marker=new google.maps.Marker({map:$scope.myMap,position:latlong,visible:$scope.showAllMarkers,icon:$scope.defaultPin}),marker.company=comp,$scope.hide_not_live_stores&&!comp.live||$scope.mapMarkers.push(marker));return $timeout(function(){return $scope.myMap.fitBounds($scope.mapBounds),$scope.options.default_zoom&&$scope.myMap.setZoom($scope.default_zoom),$scope.bb.current_item.service&&$scope.options&&$scope.filter_by_service?loader.setLoaded():void 0}),checkDataStore()},checkDataStore=function(){return $scope.selectedStore?(loader.notLoaded(),$scope.search_prms?$scope.searchAddress($scope.search_prms):$scope.geolocate(),google.maps.event.addListenerOnce($scope.myMap,"idle",function(){return _.each($scope.mapMarkers,function(marker){return $scope.selectedStore.id===marker.company.id?google.maps.event.trigger(marker,"click"):void 0})})):void 0},$scope.title=function(){var ci,p1;return ci=$scope.bb.current_item,p1=ci.category&&ci.category.description?ci.category.description:$scope.bb.company.extra.department,p1+" - "+$scope.$eval("getCurrentStepTitle()")},$scope.searchAddress=function(prms){return $scope.reverse_geocode_address&&$scope.reverse_geocode_address===$scope.address?!1:(delete $scope.geocoder_result,prms||(prms={}),$scope.search_prms=prms,$scope.map_init.then(function(){var address,ne,req,sw;return address=$scope.address,prms.address&&(address=prms.address),address?(req={address:address},prms.region&&(req.region=prms.region),prms.componentRestrictions&&(req.componentRestrictions=prms.componentRestrictions),prms.bounds&&(sw=new google.maps.LatLng(prms.bounds.sw.x,prms.bounds.sw.y),ne=new google.maps.LatLng(prms.bounds.ne.x,prms.bounds.ne.y),req.bounds=new google.maps.LatLngBounds(sw,ne)),(new google.maps.Geocoder).geocode(req,function(results,status){return results.length>0&&"OK"===status&&($scope.geocoder_result=results[0]),!$scope.geocoder_result||$scope.geocoder_result&&$scope.geocoder_result.partial_match?void searchPlaces(req):($scope.geocoder_result?searchSuccess($scope.geocoder_result):searchFailed(),loader.setLoaded())})):void 0}),loader.setLoaded())},searchPlaces=function(prms){var req,service;return req={query:prms.address,types:["shopping_mall","store","embassy"]},prms.bounds&&(req.bounds=prms.bounds),service=new google.maps.places.PlacesService($scope.myMap),service.textSearch(req,function(results,status){return results.length>0&&"OK"===status?searchSuccess(results[0]):$scope.geocoder_result?searchSuccess($scope.geocoder_result):searchFailed()})},searchSuccess=function(result){return AlertService.clear(),$scope.search_failed=!1,$scope.loc=result.geometry.location,$scope.formatted_address=result.formatted_address,$scope.myMap.setCenter($scope.loc),$scope.options.default_zoom&&$scope.myMap.setZoom($scope.default_zoom),$scope.showClosestMarkers($scope.loc),$rootScope.$broadcast("map:search_success")},searchFailed=function(){return $scope.search_failed=!0,AlertService.raise("LOCATION_NOT_FOUND"),$rootScope.$apply()},$scope.validateAddress=function(form){return form?form.$error.required?(AlertService.clear(),AlertService.raise("MISSING_LOCATION"),!1):!0:!1},$scope.showClosestMarkers=function(centre){var distances,distances_with_services,i,len,map_centre,marker,marker_position,ref;for(distances=[],distances_with_services=[],ref=$scope.mapMarkers,i=0,len=ref.length;len>i;i++)marker=ref[i],map_centre={lat:centre.lat(),"long":centre.lng()},marker_position={lat:marker.position.lat(),"long":marker.position.lng()},marker.distance=GeolocationService.haversine(map_centre,marker_position),$scope.showAllMarkers||marker.setVisible(!1),marker.distance<$scope.range_limit&&(distances.push(marker),marker.company.has_service&&distances_with_services.push(marker));return distances.sort(function(a,b){return a.distance-b.distance}),distances_with_services.sort(function(a,b){return a.distance-b.distance}),$scope.shown_markers=distances.slice(0,$scope.num_search_results),$scope.shown_markers_with_services=distances_with_services.slice(0,$scope.num_search_results),$scope.options&&$scope.filter_by_service?$scope.shownMarkers=$scope.shown_markers_with_services:$scope.shownMarkers=$scope.shown_markers,$timeout(function(){return setMarkers()})},setMarkers=function(){var i,iconPath,index,latlong,len,localBounds,marker,ref;for(latlong=$scope.loc,localBounds=new google.maps.LatLngBounds,localBounds.extend(latlong),index=1,ref=$scope.shownMarkers,i=0,len=ref.length;len>i;i++)marker=ref[i],$scope.numberedPin&&(iconPath=$window.sprintf($scope.numberedPin,index),marker.setIcon(iconPath)),marker.setVisible(!0),marker.setMap($scope.myMap),localBounds.extend(marker.position),index+=1;return $scope.$emit("map:shown_markers_updated",$scope.shownMarkers),google.maps.event.trigger($scope.myMap,"resize"),$scope.myMap.fitBounds(localBounds),openDefaultMarker()},openDefaultMarker=function(){var open_marker,open_marker_index;if(!$scope.options||!$scope.options.no_default_location_details)return open_marker_index=0,open_marker=_.find($scope.shownMarkers,function(obj){return open_marker_index++,obj.company.id===$scope.bb.current_item.company.id}),open_marker?open_marker_index--:open_marker_index=0,$scope.shownMarkers[open_marker_index].is_open=!0,$scope.openMarkerInfo($scope.shownMarkers[open_marker_index])},$scope.openMarkerInfo=function(marker){return $timeout(function(){var i,len,ref,shown_marker;for($scope.currentMarker=marker,$scope.myMap.setCenter(marker.position),$scope.myInfoWindow.open($scope.myMap,marker),ref=$scope.shownMarkers,i=0,len=ref.length;len>i;i++)shown_marker=ref[i],shown_marker.company.id===marker.company.id&&(shown_marker.is_open=!0);return $scope.shownMarkers},250)},$scope.selectItem=function(company,route){var init_obj;if($scope.$debounce(1e3))return company?company.id?(loader.notLoaded(),$scope.selectedStore&&$scope.selectedStore.id!==company.id&&$scope.$emit("change:storeLocation"),$scope.selectedStore=company,$scope.bb.current_item.item_details&&$scope.bb.current_item.item_details.questions&&setAnswers(),company.service&&($scope.bb.item_defaults.service=company.service.id),init_obj={company_id:company.id,item_defaults:$scope.bb.item_defaults},route&&(init_obj.first_page=route),$scope.initWidget(init_obj)):(AlertService.warning(ErrorService.getError("STORE_NOT_SELECTED")),void $log.warn("valid company object not found")):void AlertService.warning(ErrorService.getError("STORE_NOT_SELECTED"))},setAnswers=function(){var answers,i,len,q,ref;for(answers={},ref=$scope.bb.current_item.item_details.questions,i=0,len=ref.length;len>i;i++)q=ref[i],answers["q_"+q.name]=q.answer;return _.isEmpty(answers)?void 0:$scope.bb.item_defaults.answers=answers},$scope.roundNumberUp=function(num,places){return Math.round(num*Math.pow(10,places))/Math.pow(10,places)},$scope.geolocate=function(){return!navigator.geolocation||$scope.reverse_geocode_address&&$scope.reverse_geocode_address===$scope.address?!1:(loader.notLoaded(),webshim.ready("geolocation",function(){var options;return options={timeout:5e3,maximumAge:36e5},navigator.geolocation.getCurrentPosition(reverseGeocode,geolocateFail,options)}))},geolocateFail=function(error){switch(error.code){case 2:case 3:loader.setLoaded(),AlertService.raise("GEOLOCATION_ERROR");break;default:loader.setLoaded()}return $scope.$apply()},reverseGeocode=function(position){var lat,latlng,long;return lat=parseFloat(position.coords.latitude),long=parseFloat(position.coords.longitude),latlng=new google.maps.LatLng(lat,long),(new google.maps.Geocoder).geocode({latLng:latlng},function(results,status){var ac,i,len,ref;if(results.length>0&&"OK"===status){for($scope.geocoder_result=results[0],ref=$scope.geocoder_result.address_components,i=0,len=ref.length;len>i;i++)ac=ref[i],ac.types.indexOf("route")>=0&&($scope.reverse_geocode_address=ac.long_name),ac.types.indexOf("locality")>=0&&($scope.reverse_geocode_address+=", "+ac.long_name),$scope.address=$scope.reverse_geocode_address;searchSuccess($scope.geocoder_result)}return loader.setLoaded()})},$scope.increaseRange=function(){return $scope.range_limit=1/0,$scope.searchAddress($scope.search_prms)},$scope.$watch("display.xs",function(_this){return function(new_value,old_value){return new_value!==old_value&&$scope.loc?($scope.myInfoWindow.close(),$scope.myMap.setCenter($scope.loc),$scope.options.default_zoom&&$scope.myMap.setZoom($scope.default_zoom),$scope.showClosestMarkers($scope.loc)):void 0}}(this)),$rootScope.$on("widget:restart",function(){return $scope.loc=null,$scope.reverse_geocode_address=null,$scope.address=null})}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbMap",function(){return{restrict:"A",replace:!0,scope:!0,controller:"MapCtrl"}})}.call(this),function(){"use strict";var hasProp={}.hasOwnProperty;angular.module("BB.Controllers").controller("MultiServiceSelect",["$scope","$rootScope","$q","$attrs","BBModel","$uibModal","$document","AlertService","FormDataStoreService","LoadingService",function($scope,$rootScope,$q,$attrs,BBModel,$uibModal,$document,AlertService,FormDataStoreService,LoadingService){var checkItemDefaults,initialise,initialiseCategories,loader;return FormDataStoreService.init("MultiServiceSelect",$scope,["selected_category_name"]),$scope.options=$scope.$eval($attrs.bbMultiServiceSelect)||{},$scope.options.max_services=$scope.options.max_services||1/0,$scope.options.ordered_categories=$scope.options.ordered_categories||!1,$scope.options.services=$scope.options.services||"items",loader=LoadingService.$loader($scope),$rootScope.connection_started.then(function(){return $scope.bb.company.$has("parent")&&!$scope.bb.company.$has("company_questions")?$scope.bb.company.$getParent().then(function(parent){return $scope.company=parent,initialise()}):$scope.company=$scope.bb.company,$scope.$watch($scope.options.services,function(newval,oldval){return newval&&angular.isArray(newval)?($scope.items=newval,initialise()):void 0})}),initialise=function(){var promises;if($scope.items&&$scope.company)return $scope.initialised=!0,promises=[],promises.push(BBModel.Category.$query($scope.bb.company)),$scope.company.$has("company_questions")&&promises.push($scope.company.$getCompanyQuestions()),$q.all(promises).then(function(result){var item,j,k,len,len1,ref,ref1,stacked_item;if($scope.company_questions=result[1],initialiseCategories(result[0]),$scope.bb.stacked_items&&$scope.bb.stacked_items.length>0){for(ref=$scope.bb.stacked_items,j=0,len=ref.length;len>j;j++)for(stacked_item=ref[j],ref1=$scope.items,k=0,len1=ref1.length;len1>k;k++)if(item=ref1[k],item.self===stacked_item.service.self){stacked_item.service=item,stacked_item.service.selected=!0;break}}else checkItemDefaults();return $scope.bb.moving_booking&&$scope.nextStep(),$scope.$broadcast("multi_service_select:loaded"),loader.setLoaded()},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")})},checkItemDefaults=function(){var j,len,ref,service;if($scope.bb.item_defaults.service)for(ref=$scope.items,j=0,len=ref.length;len>j;j++)if(service=ref[j],service.self===$scope.bb.item_defaults.service.self)return void $scope.addItem(service)},initialiseCategories=function(categories){var all_categories,category,category_details,category_id,grouped_sub_categories,grouped_sub_category,j,k,key,len,len1,results,services,sub_categories,sub_category,value;if($scope.options.ordered_categories)for(j=0,len=categories.length;len>j;j++)category=categories[j],category.order=parseInt(category.name.slice(0,2)),category.name=category.name.slice(3);$scope.all_categories=_.indexBy(categories,"id"),all_categories=_.groupBy($scope.items,function(item){return item.category_id}),sub_categories=_.findWhere($scope.company_questions,{name:"Extra Category"}),sub_categories&&(sub_categories=_.map(sub_categories.question_items,function(sub_category){return sub_category.name})),categories={};for(key in all_categories)hasProp.call(all_categories,key)&&(value=all_categories[key],value.length>0&&(categories[key]=value));$scope.categories=[],results=[];for(category_id in categories){if(services=categories[category_id],category={},grouped_sub_categories=[],sub_categories){for(k=0,len1=sub_categories.length;len1>k;k++)sub_category=sub_categories[k],grouped_sub_category={name:sub_category,services:_.filter(services,function(service){return service.extra.extra_category===sub_category})},grouped_sub_category.services.length>0&&grouped_sub_categories.push(grouped_sub_category);category.sub_categories=grouped_sub_categories}else category.services=services;$scope.all_categories[category_id]&&(category_details={name:$scope.all_categories[category_id].name,description:$scope.all_categories[category_id].description}),category.name=category_details.name,category.description=category_details.description,$scope.options.ordered_categories&&$scope.all_categories[category_id]&&(category.order=$scope.all_categories[category_id].order),$scope.categories.push(category),$scope.selected_category_name&&$scope.selected_category_name===category_details.name?results.push($scope.selected_category=$scope.categories[$scope.categories.length-1]):$scope.bb.item_defaults.category&&$scope.bb.item_defaults.category.name===category_details.name&&!$scope.selected_category?($scope.selected_category=$scope.categories[$scope.categories.length-1],results.push($scope.selected_category_name=$scope.selected_category.name)):results.push(void 0)}return results},$scope.changeCategory=function(category_name,services){return category_name&&services?($scope.selected_category={name:category_name,sub_categories:services},$scope.selected_category_name=$scope.selected_category.name,$rootScope.$broadcast("multi_service_select:category_changed")):void 0},$scope.changeCategoryName=function(){return $scope.selected_category_name=$scope.selected_category.name,$rootScope.$broadcast("multi_service_select:category_changed")},$scope.addItem=function(item,duration){var i,iitem,j,len,ref,results;if(!($scope.bb.stacked_items.length<$scope.options.max_services)){for(ref=$scope.items,results=[],j=0,len=ref.length;len>j;j++)i=ref[j],i.popover="Sorry, you can only book a maximum of "+$scope.options.max_services+" treatments",results.push(i.popoverText=i.popover);return results}return $scope.bb.clearStackedItemsDateTime(),item.selected=!0,iitem=new BBModel.BasketItem(null,$scope.bb),iitem.setDefaults($scope.bb.item_defaults),iitem.setService(item),duration&&iitem.setDuration(duration),iitem.setGroup(item.group),$scope.bb.stackItem(iitem),$rootScope.$broadcast("multi_service_select:item_added"),$scope.options.raise_alerts?AlertService.info({msg:item.name+" added to your treatment selection",persist:!1}):void 0},$scope.removeItem=function(item,options){var i,j,len,ref,results;for(item.selected=!1,options&&"BasketItem"===options.type?$scope.bb.deleteStackedItem(item):$scope.bb.deleteStackedItemByService(item),$scope.bb.clearStackedItemsDateTime(),$rootScope.$broadcast("multi_service_select:item_removed"),ref=$scope.items,results=[],j=0,len=ref.length;len>j;j++){if(i=ref[j],i.self===item.self){i.selected=!1;break}results.push(void 0)}return results},$scope.removeStackedItem=function(item){return $scope.removeItem(item,{type:"BasketItem"})},$scope.nextStep=function(){return $scope.bb.stacked_items.length>1?$scope.decideNextPage():1===$scope.bb.stacked_items.length?($scope.bb.basket&&$scope.bb.basket.items.length>0&&$scope.quickEmptybasket({preserve_stacked_items:!0}),$scope.setBasketItem($scope.bb.stacked_items[0]),$scope.decideNextPage()):(AlertService.clear(),AlertService.add("danger",{msg:"You need to select at least one treatment to continue"}))},$scope.addService=function(){return $rootScope.$broadcast("multi_service_select:add_item")},$scope.setReady=function(){return $scope.bb.stacked_items.length>1?!0:1===$scope.bb.stacked_items.length?($scope.bb.basket&&$scope.bb.basket.items.length>0&&$scope.quickEmptybasket({preserve_stacked_items:!0}),$scope.setBasketItem($scope.bb.stacked_items[0]),!0):(AlertService.clear(),AlertService.add("danger",{msg:"You need to select at least one treatment to continue"}),!1)},$scope.selectDuration=function(service){var modalInstance;return 1===service.durations.length?$scope.addItem(service):(modalInstance=$uibModal.open({templateUrl:$scope.getPartial("_select_duration_modal"),scope:$scope,controller:["$scope","$uibModalInstance","service",function($scope,$uibModalInstance,service){return $scope.durations=service.durations,$scope.duration=$scope.durations[0],$scope.service=service,$scope.cancel=function(){return $uibModalInstance.dismiss("cancel")},$scope.setDuration=function(){return $uibModalInstance.close({service:$scope.service,duration:$scope.duration})}}],resolve:{service:function(){return service}}}),modalInstance.result.then(function(result){return $scope.addItem(result.service,result.duration)}))}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbMultiServiceSelect",function(){return{restrict:"AE",scope:!0,controller:"MultiServiceSelect"}})}.call(this),function(){"use strict";var BBPeopleCtrl;BBPeopleCtrl=["$scope","$rootScope","PageControllerService","$q","BBModel","PersonModel","FormDataStoreService","ValidatorService","LoadingService",function($scope,$rootScope,PageControllerService,$q,BBModel,PersonModel,FormDataStoreService,ValidatorService,LoadingService){"ngInject";var chosenService,connectionStartedFailure,connectionStartedSuccess,currentItemUpdateHandler,getItemFromPerson,init,loadData,loader,personListener,selectAndRoute,selectItem,setPerson,setReady;this.$scope=$scope,angular.extend(this,new PageControllerService($scope,$q,ValidatorService,LoadingService)),chosenService=null,loader=null,init=function(){$scope.selectItem=selectItem,$scope.selectAndRoute=selectAndRoute,$scope.setReady=setReady,loader=LoadingService.$loader($scope).notLoaded(),$rootScope.connection_started.then(connectionStartedSuccess,connectionStartedFailure),$scope.$watch("person",personListener),$scope.$on("currentItemUpdate",currentItemUpdateHandler)},connectionStartedSuccess=function(){return loadData()},connectionStartedFailure=function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")},currentItemUpdateHandler=function(event){return loadData()},loadData=function(){var bi,ppromise;return bi=$scope.booking_item,bi.service&&bi.service!==chosenService?(loader.notLoaded(),chosenService=bi.service,ppromise=BBModel.Person.$query($scope.bb.company),ppromise.then(function(people){return bi.group&&(people=people.filter(function(x){return!x.group_id||x.group_id===bi.group})),$scope.all_people=people}),BBModel.BookableItem.$query({company:$scope.bb.company,cItem:bi,wait:ppromise,item:"person"}).then(function(items){var i,j,len,promises;for(bi.group&&(items=items.filter(function(x){return!x.group_id||x.group_id===bi.group})),promises=[],j=0,len=items.length;len>j;j++)i=items[j],promises.push(i.promise);return $q.all(promises).then(function(_this){return function(res){var k,len1,people,person;for(people=[],k=0,len1=items.length;len1>k;k++)i=items[k],people.push(i.item),bi&&bi.person&&bi.person.id===i.item.id&&(-1!==$scope.bb.current_item.settings.person&&($scope.person=i.item),$scope.selected_bookable_items=[i]);return 1===items.length&&$scope.bb.company.settings&&$scope.bb.company.settings.merge_people&&(person=items[0]),$scope.bb.current_item.defaults.person&&(person=$scope.bb.current_item.defaults.person),person&&!$scope.selectItem(person,$scope.nextRoute,{skip_step:!0})?(setPerson(people),$scope.bookable_items=items,$scope.selected_bookable_items=items):(setPerson(people),$scope.bookable_items=items,$scope.selected_bookable_items||($scope.selected_bookable_items=items)),loader.setLoaded()}}(this),function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}),ppromise["finally"](function(){return loader.setLoaded()})})):void(bi.service||loader.setLoaded())},setPerson=function(people){return $scope.bookable_people=people,$scope.person?_.each(people,function(person){return person.id===$scope.person.id?$scope.person=person:void 0}):void 0},getItemFromPerson=function(_this){return function(person){var item,j,len,ref;if(person instanceof PersonModel&&$scope.bookable_items)for(ref=$scope.bookable_items,j=0,len=ref.length;len>j;j++)if(item=ref[j],item.item.self===person.self)return item;return person}}(this),selectItem=function(_this){return function(item,route,options){var new_person;return null==options&&(options={}),$scope.$parent.$has_page_control?($scope.person=item,!1):(new_person=getItemFromPerson(item),_.each($scope.booking_items,function(bi){return bi.setPerson(new_person)}),options.skip_step&&$scope.skipThisStep(),$scope.decideNextPage(route),!0)}}(this),selectAndRoute=function(_this){return function(item,route){var new_person;return new_person=getItemFromPerson(item),_.each($scope.booking_items,function(bi){return bi.setPerson(new_person)}),$scope.decideNextPage(route),!0}}(this),personListener=function(_this){return function(newval,oldval){var new_person;$scope.person&&$scope.booking_item?$scope.booking_item.person&&$scope.booking_item.person.self===$scope.person.self||(new_person=getItemFromPerson($scope.person),_.each($scope.booking_items,function(item){return item.setPerson(new_person)}),$scope.broadcastItemUpdate()):newval!==oldval&&(_.each($scope.booking_items,function(item){return item.setPerson(null)}),$scope.broadcastItemUpdate()),$scope.bb.current_item.defaults.person=$scope.person}}(this),setReady=function(_this){return function(){var new_person;return $scope.person?(new_person=getItemFromPerson($scope.person),_.each($scope.booking_items,function(item){return item.setPerson(new_person)}),!0):(_.each($scope.booking_items,function(item){return item.setPerson(null)}),!0)}}(this),init()}],angular.module("BB.Controllers").controller("BBPeopleCtrl",BBPeopleCtrl)}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbPeople",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"BBPeopleCtrl",controllerAs:"$bbPeopleCtrl",link:function(scope,element,attrs){return attrs.bbItems?(scope.booking_items=scope.$eval(attrs.bbItems)||[],scope.booking_item=scope.booking_items[0]):(scope.booking_item=scope.$eval(attrs.bbItem)||scope.bb.current_item,scope.booking_items=[scope.booking_item])}}})}.call(this),function(){var BBResourcesCtrl;BBResourcesCtrl=["$scope","$rootScope","$attrs","PageControllerService","$q","BBModel","ResourceModel","ValidatorService","LoadingService",function($scope,$rootScope,$attrs,PageControllerService,$q,BBModel,ResourceModel,ValidatorService,LoadingService){"ngInject";var connectionStartedFailure,connectionStartedSuccess,currentItemUpdateHandler,getItemFromResource,init,loadData,loader,resourceListener,selectItem,setReady;this.$scope=$scope,angular.extend(this,new PageControllerService($scope,$q,ValidatorService,LoadingService)),loader=null,init=function(){$scope.setReady=setReady.bind(this),$scope.selectItem=selectItem.bind(this),loader=LoadingService.$loader($scope).notLoaded(),$rootScope.connection_started.then(connectionStartedSuccess.bind(this),connectionStartedFailure.bind(this)),$scope.$watch("resource",resourceListener.bind(this)),$scope.$on("currentItemUpdate",currentItemUpdateHandler.bind(this))},connectionStartedSuccess=function(){return loadData()},connectionStartedFailure=function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")},currentItemUpdateHandler=function(event){return loadData()},loadData=function(_this){return function(){var params,rpromise;return $scope.booking_item||($scope.booking_item=$scope.bb.current_item),$scope.bb.steps&&"resource_list"===$scope.bb.steps[0].page||$scope.options.resource_first||$scope.booking_item.service&&$scope.booking_item.service!==$scope.change_watch_item?($scope.change_watch_item=$scope.booking_item.service,loader.setLoaded(),rpromise=BBModel.Resource.$query($scope.bb.company),rpromise.then(function(resources){return $scope.booking_item.group&&(resources=resources.filter(function(x){return!x.group_id||x.group_id===$scope.booking_item.group})),$scope.all_resources=resources}),params={company:$scope.bb.company,cItem:$scope.booking_item,wait:rpromise,item:"resource"},BBModel.BookableItem.$query(params).then(function(items){var i,j,len,promises;for(promises=[],$scope.booking_item.group&&(items=items.filter(function(x){return!x.group_id||x.group_id===$scope.booking_item.group})),j=0,len=items.length;len>j;j++)i=items[j],promises.push(i.promise);return $q.all(promises).then(function(res){var k,len1,resource,resources;for(resources=[],k=0,len1=items.length;len1>k;k++)i=items[k],resources.push(i.item),$scope.booking_item&&$scope.booking_item.resource&&$scope.booking_item.resource.id===i.item.id&&-1!==$scope.bb.current_item.settings.resource&&($scope.resource=i.item);return 1===resources.length&&(resource=items[0]),$scope.bb.item_defaults.resource&&(resource=$scope.bb.item_defaults.resource),resource&&!$scope.selectItem(resource.item,$scope.nextRoute,{skip_step:!0})?($scope.bookable_resources=resources,$scope.bookable_items=items):($scope.bookable_resources=resources,$scope.bookable_items=items),loader.setLoaded()},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")})},function(err){return"No service link found"===err&&($scope.bb.steps&&"resource_list"===$scope.bb.steps[0].page||$scope.options.resource_first)?loader.setLoaded():loader.setLoadedAndShowError(err,"Sorry, something went wrong")})):void($scope.booking_item.service||loader.setLoaded())}}(this),getItemFromResource=function(_this){return function(resource){var item,j,len,ref;if(resource instanceof ResourceModel&&$scope.bookable_items)for(ref=$scope.bookable_items,j=0,len=ref.length;len>j;j++)if(item=ref[j],item.item.self===resource.self)return item;return resource}}(this),selectItem=function(_this){return function(item,route,options){var new_resource;return null==options&&(options={}),$scope.$parent.$has_page_control?($scope.resource=item,!1):(new_resource=getItemFromResource(item),_.each($scope.booking_items,function(item){return item.setResource(new_resource)}),options.skip_step&&$scope.skipThisStep(),$scope.decideNextPage(route),!0)}}(this),resourceListener=function(_this){return function(newval,oldval){var new_resource;if($scope.resource&&$scope.booking_item){if(!$scope.booking_item.resource||$scope.booking_item.resource.self!==$scope.resource.self)return new_resource=getItemFromResource($scope.resource),_.each($scope.booking_items,function(item){return item.setResource(new_resource)}),$scope.broadcastItemUpdate()}else if(newval!==oldval)return _.each($scope.booking_items,function(item){return item.setResource(null)}),$scope.broadcastItemUpdate()}}(this),setReady=function(_this){return function(){var new_resource;return $scope.resource?(new_resource=getItemFromResource($scope.resource),_.each($scope.booking_items,function(item){return item.setResource(new_resource)}),!0):(_.each($scope.booking_items,function(item){return item.setResource(null)}),!0)}}(this),init()}],angular.module("BB.Controllers").controller("BBResourcesCtrl",BBResourcesCtrl)}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbResources",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"BBResourcesCtrl",controllerAs:"$bbResourcesCtrl",
link:function(scope,element,attrs){return scope.options=scope.$eval(attrs.bbResources)||{},attrs.bbItems?(scope.booking_items=scope.$eval(attrs.bbItems)||[],scope.booking_item=scope.booking_items[0]):(scope.booking_item=scope.$eval(attrs.bbItem)||scope.bb.current_item,scope.booking_items=[scope.booking_item])}}})}.call(this),function(){var BBServicesCtrl;BBServicesCtrl=["$scope","$rootScope","$q","$attrs","$uibModal","$document","BBModel","FormDataStoreService","ValidatorService","PageControllerService","ErrorService","$filter","LoadingService",function($scope,$rootScope,$q,$attrs,$uibModal,$document,BBModel,FormDataStoreService,ValidatorService,PageControllerService,ErrorService,$filter,LoadingService){"ngInject";var loader,setServiceItem,setServicesDisplayName;this.$scope=$scope,FormDataStoreService.init("ServiceList",$scope,["service"]),loader=LoadingService.$loader($scope).notLoaded(),angular.extend(this,new PageControllerService($scope,$q,ValidatorService,LoadingService)),$scope.validator=ValidatorService,$scope.filters={category_name:null,service_name:null,price:{min:0,max:100},custom_array_value:null},$scope.show_custom_array=!1,$scope.options=$scope.$eval($attrs.bbServices)||{},$attrs.bbItem&&($scope.booking_item=$scope.$eval($attrs.bbItem)),($attrs.bbShowAll||$scope.options.show_all)&&($scope.show_all=!0),$scope.options.allow_single_pick&&($scope.allowSinglePick=!0),$scope.options.hide_disabled&&($scope.hide_disabled=!0),$scope.price_options={min:0,max:100},$rootScope.connection_started.then(function(_this){return function(){return $scope.bb.company?$scope.init($scope.bb.company):void 0}}(this),function(err){return loader.setLoadedAndShowError($scope,err,"Sorry, something went wrong")}),$scope.init=function(comp){var all_loaded,ispromise,ppromise;return $scope.booking_item||($scope.booking_item=$scope.bb.current_item),$scope.bb.company.$has("named_categories")?BBModel.Category.$query($scope.bb.company).then(function(_this){return function(items){return $scope.all_categories=items}}(this),function(err){return $scope.all_categories=[]}):$scope.all_categories=[],$scope.service&&$scope.service.company_id!==$scope.bb.company.id&&($scope.service=null),ppromise=comp.$getServices(),all_loaded=[ppromise],ppromise.then(function(_this){return function(items){var filterItems,item,j,k,len,len1;if($scope.options.hide_disabled&&(items=items.filter(function(x){return!x.disabled&&!x.deleted})),filterItems="false"!==$attrs.filterServices,filterItems&&($scope.booking_item.service_ref&&!$scope.options.show_all?items=items.filter(function(x){return x.api_ref===$scope.booking_item.service_ref}):$scope.booking_item.category&&!$scope.options.show_all&&(items=items.filter(function(x){return x.$has("category")&&x.$href("category")===$scope.booking_item.category.self}))),$scope.options.show_event_groups||(items=items.filter(function(x){return!x.is_event_group})),1!==items.length||$scope.options.allow_single_pick?setServiceItem(items):$scope.selectItem(items[0],$scope.nextRoute,{skip_step:!0})||setServiceItem(items),$scope.booking_item.defaultService())for(j=0,len=items.length;len>j;j++)item=items[j],(item.self===$scope.booking_item.defaultService().self||item.name===$scope.booking_item.defaultService().name&&!item.deleted)&&$scope.selectItem(item,$scope.nextRoute,{skip_step:!0});if($scope.booking_item.service)for(k=0,len1=items.length;len1>k;k++)item=items[k],item.selected=!1,item.self===$scope.booking_item.service.self&&($scope.service=item,item.selected=!0,$scope.booking_item.setService($scope.service));return $scope.booking_item.service||!($scope.booking_item.person&&!$scope.booking_item.anyPerson()||$scope.booking_item.resource&&!$scope.booking_item.anyResource())?(items=setServicesDisplayName(items),$scope.bookable_services=items):void 0}}(this),function(err){return loader.setLoadedAndShowError($scope,err,"Sorry, something went wrong")}),($scope.booking_item.person&&!$scope.booking_item.anyPerson()||$scope.booking_item.resource&&!$scope.booking_item.anyResource())&&(ispromise=BBModel.BookableItem.$query({company:$scope.bb.company,cItem:$scope.booking_item,wait:ppromise,item:"service"}),all_loaded.push(ispromise),ispromise.then(function(_this){return function(items){var i,services;return $scope.booking_item.service_ref&&(items=items.filter(function(x){return x.api_ref===$scope.booking_item.service_ref})),$scope.booking_item.group&&(items=items.filter(function(x){return!x.group_id||x.group_id===$scope.booking_item.group})),$scope.options.hide_disabled&&(items=items.filter(function(x){return null==x.item||!x.item.disabled&&!x.item.deleted})),services=function(){var j,len,results;for(results=[],j=0,len=items.length;len>j;j++)i=items[j],null!=i.item&&results.push(i.item);return results}(),services=setServicesDisplayName(services),$scope.bookable_services=services,$scope.bookable_items=items,1!==services.length||$scope.options.allow_single_pick?setServiceItem(services):$scope.selectItem(services[0],$scope.nextRoute,{skip_step:!0})?void 0:setServiceItem(services)}}(this),function(err){return loader.setLoadedAndShowError($scope,err,"Sorry, something went wrong")})),$q.all(all_loaded).then(function(){return loader.setLoaded()})},setServicesDisplayName=function(items){var item,j,len;for(j=0,len=items.length;len>j;j++)item=items[j],item.listed_durations&&1===item.listed_durations.length?item.display_name=item.name+" - "+$filter("time_period")(item.duration):item.display_name=item.name;return items},setServiceItem=function(items){return $scope.items=items,$scope.filtered_items=$scope.items,$scope.service?_.each(items,function(item){return item.id===$scope.service.id?$scope.service=item:void 0}):void 0},$scope.selectItem=function(_this){return function(item,route,options){return null==options&&(options={}),$scope.routed?!0:$scope.$parent.$has_page_control?($scope.service=item,!1):item.is_event_group?($scope.booking_item.setEventGroup(item),options.skip_step&&$scope.skipThisStep(),$scope.decideNextPage(route),$scope.routed=!0):($scope.booking_item.setService(item),$scope.bb.selected_service=$scope.booking_item.service,options.skip_step&&$scope.skipThisStep(),$scope.decideNextPage(route),$scope.routed=!0,!0)}}(this),$scope.$watch("service",function(_this){return function(newval,oldval){return!$scope.service||!$scope.booking_item||$scope.booking_item.service&&$scope.booking_item.service.self===$scope.service.self?void 0:($scope.booking_item.setService($scope.service),$scope.broadcastItemUpdate(),$scope.bb.selected_service=$scope.service)}}(this)),$scope.setReady=function(_this){return function(){return $scope.service?($scope.booking_item.setService($scope.service),!0):!!($scope.bb.stacked_items&&$scope.bb.stacked_items.length>0)}}(this),$scope.errorModal=function(){var error_modal;return error_modal=$uibModal.open({templateUrl:$scope.getPartial("_error_modal"),controller:["$scope","$uibModalInstance",function($scope,$uibModalInstance){return $scope.message=ErrorService.getError("GENERIC").msg,$scope.ok=function(){return $uibModalInstance.close()}}]})},$scope.filterFunction=function(service){return service?($scope.service_array=[],$scope.custom_array=function(match){var item,j,len,ref;if(!match)return!1;if($scope.options.custom_filter){for(match=match.toLowerCase(),ref=service.extra[$scope.options.custom_filter],j=0,len=ref.length;len>j;j++)if(item=ref[j],item=item.toLowerCase(),item===match)return $scope.show_custom_array=!0,!0;return!1}},$scope.service_name_include=function(match){var item;return match?match?(match=match.toLowerCase(),item=service.name.toLowerCase(),!!item.includes(match)):void 0:!1},(!$scope.filters.category_name||service.category_id===$scope.filters.category_name.id)&&(!$scope.filters.service_name||$scope.service_name_include($scope.filters.service_name))&&(!$scope.filters.custom_array_value||$scope.custom_array($scope.filters.custom_array_value))&&(!service.price||service.price>=100*$scope.filters.price.min&&service.price<=100*$scope.filters.price.max)):!1},$scope.resetFilters=function(){return $scope.options.clear_results&&($scope.show_custom_array=!1),$scope.filters.category_name=null,$scope.filters.service_name=null,$scope.filters.price.min=0,$scope.filters.price.max=100,$scope.filters.custom_array_value=null,$scope.filterChanged()},$scope.filterChanged=function(){return $scope.filtered_items=$filter("filter")($scope.items,$scope.filterFunction)}}],angular.module("BB.Controllers").controller("BBServicesCtrl",BBServicesCtrl)}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbServices",["$q","$compile","$templateCache",function($q,$compile,$templateCache){return{restrict:"AE",replace:!0,scope:!0,transclude:!0,controller:"BBServicesCtrl",controllerAs:"$bbServicesCtrl",link:function(scope,element,attrs,ctrls,transclude){return scope.directives="public.ServiceList",transclude(scope,function(_this){return function(clone){var has_content;return has_content=clone.length>1||1===clone.length&&(!clone[0].wholeText||/\S/.test(clone[0].wholeText)),has_content?element.html(clone).show():$q.when($templateCache.get("_services.html")).then(function(template){return element.html(template).show(),$compile(element.contents())(scope)})}}(this))}}}])}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("Summary",["$scope","$rootScope","LoadingService","BBModel","$q",function($scope,$rootScope,LoadingService,BBModel,$q){return $rootScope.connection_started.then(function(_this){return function(){return $scope.item=$scope.bb.current_item,$scope.items=$scope.bb.basket.timeItems()}}(this)),$scope.confirm=function(_this){return function(){var loader,promises;return loader=LoadingService.$loader($scope).notLoaded(),promises=[BBModel.Client.$create_or_update($scope.bb.company,$scope.client)],$scope.bb.current_item.service&&promises.push($scope.addItemToBasket()),$q.all(promises).then(function(result){var client;return client=result[0],$scope.setClient(client),client.waitingQuestions&&client.gotQuestions.then(function(){return $scope.client_details=client.client_details}),loader.setLoaded(),$scope.decideNextPage()},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")})}}(this)}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbSummary",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"Summary"}})}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("TimeRangeList",["$scope","$element","$attrs","$rootScope","$q","AlertService","LoadingService","BBModel","FormDataStoreService","DateTimeUtilitiesService","SlotDates","viewportSize","ErrorService",function($scope,$element,$attrs,$rootScope,$q,AlertService,LoadingService,BBModel,FormDataStoreService,DateTimeUtilitiesService,SlotDates,viewportSize,ErrorService){var currentPostcode,isSubtractValid,loader,setTimeRange;return currentPostcode=$scope.bb.postcode,FormDataStoreService.init("TimeRangeList",$scope,["selected_slot","postcode","original_start_date","start_at_week_start"]),currentPostcode!==$scope.postcode&&($scope.selected_slot=null,$scope.selected_date=null),$scope.postcode=$scope.bb.postcode,loader=LoadingService.$loader($scope).notLoaded(),$scope.data_source||($scope.data_source=$scope.bb.current_item),$rootScope.connection_started.then(function(){return $scope.initialise()}),$scope.initialise=function(){var calculateDayNum,date,diff,selected_day,start_date;return null!=$attrs.bbTimeRangeLength?$scope.time_range_length=$scope.$eval($attrs.bbTimeRangeLength):$scope.options&&$scope.options.time_range_length?$scope.time_range_length=$scope.options.time_range_length:(calculateDayNum=function(){var cal_days,days,size,timeRange;cal_days={lg:7,md:5,sm:3,xs:1},timeRange=7;for(size in cal_days)days=cal_days[size],size===viewportSize.getViewportSize()&&(timeRange=days);return timeRange},$scope.time_range_length=calculateDayNum(),$scope.$on("viewportSize:changed",function(){return $scope.time_range_length=null,$scope.initialise()})),(null!=$attrs.bbDayOfWeek||$scope.options&&$scope.options.day_of_week)&&($scope.day_of_week=null!=$attrs.bbDayOfWeek?$scope.$eval($attrs.bbDayOfWeek):$scope.options.day_of_week),(null!=$attrs.bbSelectedDay||$scope.options&&$scope.options.selected_day)&&(selected_day=null!=$attrs.bbSelectedDay?moment($scope.$eval($attrs.bbSelectedDay)):moment($scope.options.selected_day),moment.isMoment(selected_day)&&($scope.selected_day=selected_day)),$scope.options.ignore_min_advance_datetime=!!$scope.options.ignore_min_advance_datetime,!$scope.start_date&&$scope.last_selected_date?$scope.original_start_date?(diff=$scope.last_selected_date.diff($scope.original_start_date,"days"),diff%=$scope.time_range_length,diff=0===diff?diff:diff+1,start_date=$scope.last_selected_date.clone().subtract(diff,"days"),setTimeRange($scope.last_selected_date,start_date)):setTimeRange($scope.last_selected_date):$scope.bb.current_item.date||$scope.bb.current_item.defaults.date?(date=$scope.bb.current_item.date?$scope.bb.current_item.date.date:$scope.bb.current_item.defaults.date,setTimeRange(date)):$scope.selected_day?($scope.original_start_date=$scope.original_start_date||moment($scope.selected_day),setTimeRange($scope.selected_day)):($scope.start_at_week_start=!0,setTimeRange(moment())),$scope.loadData()},setTimeRange=function(selected_date,start_date){start_date?$scope.start_date=start_date:$scope.day_of_week?$scope.start_date=selected_date.clone().day($scope.day_of_week):$scope.start_at_week_start?$scope.start_date=selected_date.clone().startOf("week"):$scope.start_date=selected_date.clone(),$scope.selected_day=selected_date,$scope.selected_date=$scope.selected_day.toDate(),isSubtractValid()},$scope.moment=function(date){return moment(date)},$scope.setDataSource=function(source){return $scope.data_source=source},$scope.$on("currentItemUpdate",function(event){return $scope.loadData()}),$scope.add=function(type,amount){switch(amount>0&&($element.removeClass("subtract"),$element.addClass("add")),type){case"days":setTimeRange($scope.start_date.add(amount,"days"));break;case"weeks":$scope.start_date.add(amount,type),setTimeRange($scope.start_date);break;case"months":$scope.start_date.add(amount,type).startOf("month"),setTimeRange($scope.start_date)}return $scope.loadData()},$scope.subtract=function(type,amount){return $element.removeClass("add"),$element.addClass("subtract"),$scope.add(type,-amount)},isSubtractValid=function(){var diff;return $scope.is_subtract_valid=!0,diff=Math.ceil($scope.selected_day.diff(moment(),"day",!0)),$scope.subtract_length=diff<$scope.time_range_length?diff:$scope.time_range_length,0>=diff&&($scope.is_subtract_valid=!1),$scope.subtract_length>1?$scope.subtract_string="Prev "+$scope.subtract_length+" days":1===$scope.subtract_length?$scope.subtract_string="Prev day":$scope.subtract_string="Prev"},$scope.selectedDateChanged=function(){return setTimeRange(moment($scope.selected_date)),$scope.selected_slot=null,$scope.loadData()},$scope.isPast=function(){return $scope.start_date?moment().isAfter($scope.start_date):!0},$scope.status=function(day,slot){var status;if(slot)return status=slot.status()},$scope.selectSlot=function(slot,day,route){return slot&&slot.availability()>0?($scope.bb.current_item.setTime(slot),slot.datetime?($scope.setLastSelectedDate(slot.datetime),$scope.bb.current_item.setDate({date:slot.datetime})):day&&($scope.setLastSelectedDate(day.date),$scope.bb.current_item.setDate(day)),$scope.bb.current_item.reserve_ready?(loader.notLoaded(),$scope.addItemToBasket().then(function(){return loader.setLoaded(),$scope.decideNextPage(route)},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")})):$scope.decideNextPage(route)):void 0},$scope.highlightSlot=function(slot,day){var current_item;return current_item=$scope.bb.current_item,slot&&slot.availability()>0&&!slot.disabled?(slot.datetime?($scope.setLastSelectedDate(slot.datetime),current_item.setDate({date:slot.datetime.clone().tz($scope.bb.company.timezone)})):day&&($scope.setLastSelectedDate(day.date),current_item.setDate(day)),current_item.setTime(slot),$scope.selected_slot=slot,$scope.selected_day=day.date,$scope.selected_date=day.date.toDate(),!$scope.bb.current_item.earliest_time_slot||!$scope.bb.current_item.earliest_time_slot.selected||$scope.bb.current_item.earliest_time_slot.date.isSame(day.date,"day")&&$scope.bb.current_item.earliest_time_slot.time===slot.time||($scope.bb.current_item.earliest_time_slot.selected=!1),$rootScope.$broadcast("time:selected"),$scope.$broadcast("slotChanged",day,slot)):void 0},$scope.loadData=function(){var current_item,date,duration,edate,loc,promise;return current_item=$scope.bb.current_item,current_item.service&&!$scope.options.ignore_min_advance_datetime&&($scope.min_date=current_item.service.min_advance_datetime,$scope.max_date=current_item.service.max_advance_datetime,$scope.selected_day&&$scope.selected_day.isBefore(current_item.service.min_advance_datetime,"day")&&!$scope.isAdmin()&&setTimeRange(current_item.service.min_advance_datetime)),date=$scope.start_date,edate=moment(date).add($scope.time_range_length,"days"),$scope.end_date=moment(edate).add(-1,"days"),AlertService.clear(),duration=$scope.bb.current_item.duration,$scope.bb.current_item.min_duration&&(duration=$scope.bb.current_item.min_duration),$scope.data_source&&$scope.data_source.days_link?($scope.notLoaded($scope),loc=null,$scope.bb.postcode&&(loc=",,,,"+$scope.bb.postcode+","),promise=BBModel.TimeSlot.$query({company:$scope.bb.company,resource_ids:$scope.bb.item_defaults.resources,cItem:$scope.data_source,date:date,client:$scope.client,end_date:$scope.end_date,duration:duration,location:loc,num_resources:$scope.bb.current_item.num_resources,available:1}),promise["finally"](function(){return loader.setLoaded()}),promise.then(function(datetime_arr){var d,day,dtimes,i,j,k,len,len1,len2,pad,pair,ref,ref1,requested_slot,slot,time_slots,utc,utcHours,utcMinutes,utcSeconds,v;for($scope.days=[],_.every(_.values(datetime_arr),_.isEmpty)?$scope.no_slots_in_week=!0:$scope.no_slots_in_week=!1,utc=moment().utc(),utcHours=utc.format("H"),utcMinutes=utc.format("m"),utcSeconds=utc.format("s"),ref=_.sortBy(_.pairs(datetime_arr),function(pair){return pair[0]}),i=0,len=ref.length;len>i;i++){if(pair=ref[i],d=pair[0],time_slots=pair[1],day={date:moment(d).add(utcHours,"hours").add(utcMinutes,"minutes").add(utcSeconds,"seconds"),slots:time_slots},$scope.days.push(day),time_slots.length>0&&(current_item.earliest_time&&!current_item.earliest_time.isAfter(d)||(current_item.earliest_time=moment(d).add(time_slots[0].time,"minutes")),current_item.earliest_time_slot&&!current_item.earliest_time_slot.date.isAfter(d)||(current_item.earliest_time_slot={date:moment(d).add(time_slots[0].time,"minutes"),time:time_slots[0].time})),$scope.add_padding&&time_slots.length>0){for(dtimes={},j=0,len1=time_slots.length;len1>j;j++)slot=time_slots[j],dtimes[slot.time]=1,slot.date=day.date.format("DD-MM-YY");for(ref1=$scope.add_padding,v=k=0,len2=ref1.length;len2>k;v=++k)pad=ref1[v],dtimes[pad]||time_slots.splice(v,0,new BBModel.TimeSlot({time:pad,avail:0},time_slots[0].service))}requested_slot=DateTimeUtilitiesService.checkDefaultTime(day.date,day.slots,current_item,$scope.bb.item_defaults),requested_slot.slot&&"full"===requested_slot.match?($scope.skipThisStep(),$scope.selectSlot(requested_slot.slot,day)):requested_slot.slot&&$scope.highlightSlot(requested_slot.slot,day)}return $scope.$broadcast("time_slots:loaded",time_slots)},function(err){return 404===err.status&&err.data&&err.data.error&&"No bookable events found"===err.data.error?($scope.data_source&&$scope.data_source.person?(AlertService.warning(ErrorService.getError("NOT_BOOKABLE_PERSON")),$scope.setLoaded($scope)):$scope.data_source&&$scope.data_source.resource&&(AlertService.warning(ErrorService.getError("NOT_BOOKABLE_RESOURCE")),$scope.setLoaded($scope)),$scope.setLoadedAndShowError($scope,err,"Sorry, something went wrong")):$scope.setLoadedAndShowError($scope,err,"Sorry, something went wrong")})):loader.setLoaded()},$scope.showFirstAvailableDay=function(){return SlotDates.getFirstDayWithSlots($scope.data_source,$scope.selected_day).then(function(day){return $scope.no_slots_in_week=!1,setTimeRange(day),$scope.loadData()},function(err){return loader.setLoadedAndShowError($scope,err,"Sorry, something went wrong")})},$scope.padTimes=function(times){return $scope.add_padding=times},$scope.setReady=function(){return $scope.bb.current_item.time?$scope.bb.moving_booking&&$scope.bb.current_item.start_datetime().isSame($scope.bb.current_item.original_datetime)&&$scope.bb.current_item.person_name===$scope.bb.current_item.person.name?(AlertService.raise("APPT_AT_SAME_TIME"),!1):$scope.bb.moving_booking?($scope.bb.company.$has("resources")&&!$scope.bb.current_item.resource&&($scope.bb.current_item.resource=!0),$scope.bb.company.$has("people")&&!$scope.bb.current_item.person&&($scope.bb.current_item.person=!0),!0):$scope.bb.current_item.reserve_ready?$scope.addItemToBasket():!0:(AlertService.raise("TIME_SLOT_NOT_SELECTED"),!1)},$scope.pretty_month_title=function(month_format,year_format,seperator){var month_year_format,start_date;return null==seperator&&(seperator="-"),$scope.start_date&&$scope.end_date?(month_year_format=month_format+" "+year_format,$scope.start_date&&$scope.end_date&&$scope.end_date.isAfter($scope.start_date,"month")?(start_date=$scope.start_date.format(month_format),11===$scope.start_date.month()&&(start_date=$scope.start_date.format(month_year_format)),start_date+" "+seperator+" "+$scope.end_date.format(month_year_format)):$scope.start_date.format(month_year_format)):void 0},$scope.selectEarliestTimeSlot=function(){var day,slot;return day=_.find($scope.days,function(day){return day.date.isSame($scope.bb.current_item.earliest_time_slot.date,"day")}),slot=_.find(day.slots,function(slot){return slot.time===$scope.bb.current_item.earliest_time_slot.time}),day&&slot?($scope.bb.current_item.earliest_time_slot.selected=!0,$scope.highlightSlot(day,slot)):void 0}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbTimeRanges",["$q","$templateCache","$compile","$timeout","$bbug",function($q,$templateCache,$compile,$timeout,$bbug){return{restrict:"AE",replace:!0,scope:!0,priority:1,transclude:!0,controller:"TimeRangeList",link:function(scope,element,attrs,controller,transclude){return scope.$on("time:selected",function(){var btn;return btn=angular.element("#btn-continue"),btn[0].disabled=!1,$timeout(function(){return $bbug("html, body").animate({scrollTop:btn.offset().top},500)},1e3),$timeout(function(){return btn[0].focus()},1500)}),scope.today=moment().toDate(),scope.tomorrow=moment().add(1,"days").toDate(),scope.options=scope.$eval(attrs.bbTimeRanges)||{},transclude(scope,function(_this){return function(clone){var has_content;return has_content=clone.length>1||1===clone.length&&(!clone[0].wholeText||/\S/.test(clone[0].wholeText)),has_content?element.html(clone).show():$q.when($templateCache.get("_week_calendar.html")).then(function(template){return element.html(template).show(),$compile(element.contents())(scope)})}}(this))}}}])}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("TimeList",["$attrs","$element","$scope","$rootScope","$q","TimeService","AlertService","BBModel","DateTimeUtilitiesService","PageControllerService","ValidatorService","LoadingService","ErrorService","$translate",function($attrs,$element,$scope,$rootScope,$q,TimeService,AlertService,BBModel,DateTimeUtilitiesService,PageControllerService,ValidatorService,LoadingService,ErrorService,$translate){var checkRequestedSlots,loader;return loader=LoadingService.$loader($scope).notLoaded(),angular.extend(this,new PageControllerService($scope,$q,ValidatorService,LoadingService)),$scope.data_source||($scope.data_source=$scope.bb.current_item),$scope.options=$scope.$eval($attrs.bbTimes)||{},$rootScope.connection_started.then(function(){return $scope.bb.current_item.defaults.date&&!$scope.bb.current_item.date?$scope.setDate($scope.bb.current_item.defaults.date):$scope.bb.current_item.date?$scope.setDate($scope.bb.current_item.date.date):$scope.setDate(moment()),$scope.loadDay()},function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}),$scope.setDate=function(_this){return function(date){var day;return day=new BBModel.Day({date:date,spaces:1}),$scope.selected_day=day,$scope.selected_date=day.date}}(this),$scope.setDataSource=function(_this){return function(source){return $scope.data_source=source}}(this),$scope.setItemLinkSource=function(_this){return function(source){return $scope.item_link_source=source}}(this),$scope.$on("dateChanged",function(_this){return function(event,newdate){return $scope.setDate(newdate),$scope.loadDay()}}(this)),$scope.$on("currentItemUpdate",function(event){return $scope.loadDay({check_requested_slot:!1})}),$scope.selectSlot=function(_this){return function(slot,day,route){return slot&&slot.availability()>0?($scope.item_link_source&&$scope.data_source.setItem($scope.item_link_source),slot.datetime?($scope.setLastSelectedDate(slot.datetime),$scope.data_source.setDate({date:slot.datetime})):day&&($scope.setLastSelectedDate(day.date),$scope.data_source.setDate(day)),$scope.data_source.setTime(slot),$scope.data_source.reserve_ready?$scope.addItemToBasket().then(function(){return $scope.decideNextPage(route)}):$scope.decideNextPage(route)):void 0}}(this),$scope.highlightSlot=function(_this){return function(slot,day){return day&&slot&&slot.availability()>0?(slot.datetime?($scope.setLastSelectedDate(slot.datetime),$scope.data_source.setDate({date:slot.datetime})):day&&($scope.setLastSelectedDate(day.date),$scope.data_source.setDate(day)),$scope.data_source.setTime(slot),$scope.$broadcast("slotChanged")):void 0}}(this),$scope.status=function(slot){var status;if(slot)return status=slot.status()},$scope.add=function(_this){return function(type,amount){var new_date;return delete $scope.bb.current_item.time,new_date=moment($scope.selected_day.date).add(amount,type),$scope.setDate(new_date),$scope.loadDay()}}(this),$scope.subtract=function(_this){return function(type,amount){return $scope.add(type,-amount)}}(this),$scope.loadDay=function(_this){return function(options){var pslots;return options||(options={check_requested_slot:!0}),$scope.data_source&&($scope.data_source.days_link||$scope.item_link_source)&&$scope.selected_day?($scope.notLoaded($scope),pslots=TimeService.query({company:$scope.bb.company,cItem:$scope.data_source,item_link:$scope.item_link_source,date:$scope.selected_day.date,client:$scope.client,available:1}),pslots["finally"](function(){return loader.setLoaded()}),pslots.then(function(time_slots){var dtimes,i,j,len,len1,pad,ref,s,v;if($scope.slots=time_slots,$scope.$broadcast("slotsUpdated",$scope.data_source,time_slots),$scope.add_padding&&time_slots.length>0){for(dtimes={},i=0,len=time_slots.length;len>i;i++)s=time_slots[i],dtimes[s.time]=1;for(ref=$scope.add_padding,v=j=0,len1=ref.length;len1>j;v=++j)pad=ref[v],dtimes[pad]||time_slots.splice(v,0,new BBModel.TimeSlot({time:pad,avail:0},time_slots[0].service))}return options.check_requested_slot===!0?checkRequestedSlots(time_slots):void 0},function(err){return 404===err.status&&err.data&&err.data.error&&"No bookable events found"===err.data.error?$scope.data_source&&$scope.data_source.person?(AlertService.warning(ErrorService.getError("NOT_BOOKABLE_PERSON")),$scope.setLoaded($scope)):$scope.data_source&&$scope.data_source.resource?(AlertService.warning(ErrorService.getError("NOT_BOOKABLE_RESOURCE")),$scope.setLoaded($scope)):$scope.setLoadedAndShowError($scope,err,"Sorry, something went wrong"):$scope.setLoadedAndShowError($scope,err,"Sorry, something went wrong")})):loader.setLoaded()}}(this),checkRequestedSlots=function(time_slots){var requested_slot;if($scope.bb.item_defaults&&$scope.bb.item_defaults.time)return requested_slot=DateTimeUtilitiesService.checkDefaultTime($scope.selected_date,time_slots,$scope.data_source,$scope.bb.item_defaults),null===requested_slot.slot||null===requested_slot.match?$scope.availability_conflict=!0:requested_slot.slot&&"full"===requested_slot.match?($scope.skipThisStep(),$scope.selectSlot(requested_slot.slot,$scope.selected_day)):requested_slot.slot&&"partial"===requested_slot.match?$scope.highlightSlot(requested_slot.slot,$scope.selected_day):void 0},$scope.padTimes=function(_this){return function(times){return $scope.add_padding=times}}(this),$scope.setReady=function(){return $scope.data_source.time?$scope.data_source.reserve_ready?$scope.addItemToBasket():!0:(AlertService.clear(),AlertService.add("danger",{msg:$translate.instant("PUBLIC_BOOKING.TIME.TIME_NOT_SELECTED_ALERT")}),!1)}}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbTimes",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"TimeList"}})}.call(this),function(){"use strict";angular.module("BB.Controllers").controller("Total",["$scope","$rootScope","$q","$location","$window","QueryStringService","LoadingService","PurchaseService",function($scope,$rootScope,$q,$location,$window,QueryStringService,LoadingService,PurchaseService){var loader;return loader=LoadingService.$loader($scope).notLoaded(),$rootScope.connection_started.then(function(_this){return function(){var id;return $scope.bb.payment_status=null,id=QueryStringService("purchase_id"),id&&!$scope.bb.total?PurchaseService.query({url_root:$scope.bb.api_url,purchase_id:id}).then(function(total){return $scope.total=total,loader.setLoaded(),total.paid===total.total_price?$scope.$emit("checkout:success",total):void 0}):($scope.total=$scope.bb.total,loader.setLoaded(),$scope.total.paid===$scope.total.total_price&&$scope.$emit("checkout:success",$scope.total)),$scope.reset()}}(this),function(err){return loader.setLoadedAndShowError(err,"Sorry, something went wrong")}),$scope.print=function(_this){return function(){return $window.open($scope.bb.partial_url+"print_purchase.html?id="+$scope.total.long_id,"_blank","width=700,height=500,toolbar=0,menubar=0,location=0,status=1,scrollbars=1,resizable=1,left=0,top=0"),!0}}(this)}])}.call(this),function(){"use strict";angular.module("BB.Directives").directive("bbTotal",function(){return{restrict:"AE",replace:!0,scope:!0,controller:"Total"}})}.call(this);