'use strict'; (function(){ var isDescendantOf = function(element, tagName){ tagName = tagName.toUpperCase(); var isDescendant = false; var parentElement; while ( parentElement = element.parentElement ){ isDescendant = isDescendant || parentElement.nodeName === tagName; element = parentElement; } return isDescendant; } if ( typeof dmnConfig === 'undefined' || !dmnConfig.fields ){ var dmnFormHtml = '
'; if ( typeof dmnElement !== 'undefined' && dmnElement ){ dmnElement.insertAdjacentHTML('beforeend', dmnFormHtml); } else { var scripts = document.getElementsByTagName('script'); var numScripts = scripts.length; var written = false; for ( var i = 0; i < numScripts; i++ ){ var currentScript = scripts[i]; if ( !written && decodeURIComponent(currentScript.src).indexOf("designmynight.com/pw?v=3&r=3065679") > -1 ){ if ( isDescendantOf(currentScript, 'body') ){ currentScript.insertAdjacentHTML('afterend', ' '); written = true; } } } if ( !written ){ document.write(' '); } } } })(); var DMN = DMN || {}; DMN.baseUrl = 'https://www.designmynight.com'; DMN.partnersUrl = 'https://partners.designmynight.com'; DMN.formConfig = DMN.formConfig || {}; DMN.formConfig[3065679] = {"type":"tonic","eventIds":[],"format":false,"stage":false,"showContent":false,"params":"?v=3&r=3065679","title":false,"logo":"\/\/static.designmynight.com\/images\/design-my-night.png"}; 'use strict'; // Polyfill for String.trim() ''.trim||(String.prototype.trim=function(){return this.replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g,'')}) // Polyfill for indexOf() if (!Array.prototype.indexOf) { Array.prototype.indexOf = function(elt /*, from*/) { var len = this.length >>> 0; var from = Number(arguments[1]) || 0; from = (from < 0) ? Math.ceil(from) : Math.floor(from); if (from < 0) from += len; for (; from < len; from++) { if (from in this && this[from] === elt) return from; } return -1; }; } DMN.loadScript = function(url, callback){ var script = document.createElement("script"); script.type = "text/javascript"; if (script.readyState){ //IE script.onreadystatechange = function(){ if (script.readyState == "loaded" || script.readyState == "complete"){ script.onreadystatechange = null; callback(); } } } else { //Others script.onload = function(){ callback(); } } script.src = url; document.getElementsByTagName("head")[0].appendChild(script); } DMN.loadCss = function(url){ var fileref=document.createElement("link") fileref.setAttribute("rel", "stylesheet") fileref.setAttribute("type", "text/css") fileref.setAttribute("href", url) if (typeof fileref!="undefined") { document.getElementsByTagName("head")[0].appendChild(fileref) } }; DMN.ready = (function () { var ready_event_fired = false; var ready_event_listener = function (fn) { // Create an idempotent version of the 'fn' function var idempotent_fn = function () { if (ready_event_fired) { return; } ready_event_fired = true; return fn(); } // The DOM ready check for Internet Explorer var do_scroll_check = function () { if (ready_event_fired) { return; } // If IE is used, use the trick by Diego Perini // http://javascript.nwbox.com/IEContentLoaded/ try { document.documentElement.doScroll('left'); } catch(e) { setTimeout(do_scroll_check, 1); return; } // Execute any waiting functions return idempotent_fn(); } // If the browser ready event has already occured if (document.readyState === "complete") { return idempotent_fn() } // Mozilla, Opera and webkit nightlies currently support this event if (document.addEventListener) { // Use the handy event callback document.addEventListener("DOMContentLoaded", idempotent_fn, false); // A fallback to window.onload, that will always work window.addEventListener("load", idempotent_fn, false); // If IE event model is used } else if (document.attachEvent) { // ensure firing before onload; maybe late but safe also for iframes document.attachEvent("onreadystatechange", idempotent_fn); // A fallback to window.onload, that will always work window.attachEvent("onload", idempotent_fn); // If IE and not a frame: continually check to see if the document is ready var toplevel = false; try { toplevel = window.frameElement == null; } catch (e) {} if (document.documentElement.doScroll && toplevel) { return do_scroll_check(); } } }; return ready_event_listener; })(); DMN.getFormScope = function(formId){ // Get the first form if none specified if ( !formId ){ var forms = DMN.formConfig; var formId; angular.forEach( forms, function(config, id){ if ( !formId ){ formId = id; } }); } var form = angular.element(document.getElementById('dmn-form-' + formId)); var formScope = form.scope(); return formScope; } DMN.val = function(){ if (!arguments.length){ return false; } if ( !angular.isObject(arguments[0]) ){ arguments[0] = { field: arguments[0], value: arguments[1] }; } var defaults = { formId: false } var options = angular.extend({}, defaults, arguments[0]); // Stop if no input specified if ( !options.field ){ return false; } // Get the form scope var formScope = DMN.getFormScope(options.formId); // Stop if no form scope if ( !formScope ){ return false; } // Return the current value if no value specified if ( typeof options.value === 'undefined' ){ return formScope[options.field]; } // Try to get the type from the name if it's not a known type ID if ( options.field === 'type' && !formScope.currentVenue.booking_types[options.value] ){ var found = false; angular.forEach( formScope.currentVenue.booking_types, function(type){ if ( type.name.trim() == options.value.trim() ){ options.value = type.id; found = true; } }); // Return false if we didn't find the type if ( !found ){ return false; } } // Try to get the venue from the name if it's not a Mongo ID else if ( options.field === 'venue_id' && !(options.value.length == 24 && options.value.match(/[^0-9a-f]/)) ){ var found = false; angular.forEach( formScope.venues, function(venue, index){ if ( venue.title.trim() == options.value.trim() ){ options.value = venue._id; found = true; } }); // Return false if we didn't find the venue if ( !found ){ return false; } } formScope.$apply(function(){ formScope[options.field] = options.value; }); return this; } DMN.toggleInput = function(){ if (!arguments.length){ return false; } if ( !angular.isObject(arguments[0]) ){ arguments[0] = { input: arguments[0], visible: arguments[1] }; } var defaults = { formId: false } var options = angular.extend({}, defaults, arguments[0]); // Stop if no input specified if ( !options.input ){ return false; } // Get the form scope var formScope = DMN.getFormScope(options.formId); // Stop if no form scope if ( !formScope ){ return false; } formScope.$apply(function(){ formScope.hiddenInputs = formScope.hiddenInputs || {}; if ( typeof options.visible === 'undefined' ){ formScope.hiddenInputs[options.input] = !formScope.hiddenInputs[options.input]; } else { formScope.hiddenInputs[options.input] = !options.visible; } }); return this; } DMN.showInput = function(input){ return DMN.toggleInput.call(this, input, true); } DMN.hideInput = function(input){ return DMN.toggleInput.call(this, input, false); } DMN.addCustomData = function(key, value){ var defaults = { formId: false } var options = angular.extend({}, defaults, arguments[0]); // Get the form scope var formScope = DMN.getFormScope(options.formId); formScope.customData = formScope.customData || {}; formScope.customData[key] = value; return this; } var DMN=DMN||{},tonicPartnerWidget=void 0;DMN.getFormConfig=function(){var e=void 0;if(angular.forEach(DMN.formConfig,function(n,t){DMN.formId||n.rendered||"tonic"!==n.type||(DMN.formId=t,e=n)}),DMN.formId)return e},DMN.getFormScriptNode=function(e){DMN.pwScript=void 0;for(var n=document.getElementsByTagName("script"),t=0;t