{"version":3,"sources":["webpack:///webpack/bootstrap 726a2d4118b8fbaf0b57","webpack:///./src/assets/js/main.js","webpack:///./~/bootstrap/dist/js/bootstrap.js","webpack:///./src/assets/js/components/autocomplete.js","webpack:///./~/generate-id/dist/generate-id.min.js","webpack:///./src/assets/js/components/forms.js","webpack:///./src/assets/js/components/nav/current-secondary-nav.js","webpack:///./src/assets/js/components/global/utils.js","webpack:///./src/assets/js/components/global/bootstrap-extensions.js","webpack:///./src/assets/js/components/feedback-form.js","webpack:///./src/assets/js/components/share-links.js"],"names":["qg","franchiseTitle","swe","highlightNavItem","init","$","test","window","location","protocol","MAX_SUGGESTIONS","filter","each","form","searchField","elements","query","userTyped","attr","suggestions","generateId","closeSuggestions","empty","prefillInput","value","setTimeout","setSelectionRange","length","moveFocus","n","a","find","focus","index","removeClass","eq","addClass","text","on","event","preventDefault","val","get","KEYS","alt","backspace","delete","down","enter","escape","left","right","tab","up","document","is","target","stopImmediatePropagation","which","after","ajax","cache","dataType","url","data","collection","profile","show","partial_query","done","match","RegExp","replace","safeInput","html","map","htmlValue","encodeURIComponent","join","SUBMIT_TOLERANCE","DEFAULT_STATUS_HTML","candidateForValidation","invalidFilter","disabled","validity","valid","pluginDataKey","pluginData","key","dataHash","getLabelComponent","component","options","domElement","$element","labelElement","foundElement","level","formValidation","closest","id","children","append","changeValidityCheck","$this","alertElement","alertLevel","invalidContainers","remove","parentsUntil","hasClass","parent","submitValidityCheck","invalid","invalidFields","type","name","alert","call","messages","lastGroupSeen","group","label","labelId","item","end","appendTo","submitValidationHandler","count","summary","prev","not","before","fadeIn","scrollTop","offset","top","trigger","submitDoneHandler","timeStamp","now","summaryElement","lastSubmitTimeStamp","methods","hint","question","validate","unbind","bind","getValidationMessage","validityState","valueMissing","customError","validationMessage","typeMismatch","patternMismatch","fn","method","apply","Array","prototype","slice","arguments","error","forcesForms","jQuery","preferredId","i","trim","toLowerCase","getAttribute","getElementById","String","setAttribute","REXP_EMAIL","input","polyfill","radioButtonBug","validateBuggyRadioButtons","isInvalid","getRadioButtonsInGroup","radio","message","validateField","required","invalidEmail","pattern","newValidityState","nodeName","selectedIndex","checked","changeHandler","submitHandler","novalidate","triggerHandler","initConstraintValidationAPI","candidates","checkValidity","setCustomValidity","that","seen","removeAttr","simplyCountable","extend","counter","countType","maxCount","strictMax","countDirection","safeClass","overClass","thousandSeparator","onOverCount","onSafeCount","onMaxCount","navKeys","countable","countCheck","revCount","reverseCount","ct","countInt","numberFormat","prefix","toString","substr","changeCountableValue","split","content","allowedText","substring","e","inArray","relevantEvent","irrelevantEvent","elementsToDisable","polyfillHidden","hidden","hiddenSupported","formElementsByName","filterRelevant","filterIrrelevant","valueMap","element","valueInArray","possibleValues","actualValues","recalculateRelevance","dependencyMap","values","config","items","relevance","negate","recalculateDependents","isRelevant","targets","add","unique","elementOfArray","relevant","makeRelevant","removeAttribute","stop","slideDown","hide","relevantWhen","container","push","instructions","instructionSelector","questionSelector","toggle","prevAll","answers","nestedToggles","reverse","displayFileSize","files","fsize","nextAll","filesize","size","Math","round","maxFileSize","parseInt","total","xorConstraintSubmitHandler","xorFields","xorConstraintMet","xorConstraintChangeHandler","validationUiRefreshOnly","initXorConstraint","initValidation","toggleRequired","controls","createElement","oldIE","date","datePackage","qldHolidays","isPublicHoliday","d","getDate","m","getMonth","y","getFullYear","dateString","max","textField","activeSideNav","refineText","getCurrentTitle","currentPageTitle","titleClone","clone","module","exports","utils","breakpoints","bsXs","bsSm","bsMd","bsLg","collToggle","collapse","Constructor","$trigger","prop","addHiddenInput","newHiddenInput","href","referrer","navigator","userAgent","links","pageTitle","link"],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;AClCA;;AAMA;;AACA;;AAEA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;;;AAjBA;;;;AAmBC,cAAY;AACT;;AACA,SAAIA,KAAKA,MAAM,EAAf;AACA,SAAIC,iBAAiBD,MAAMA,GAAGE,GAAT,IAAgBF,GAAGE,GAAH,CAAOD,cAA5C;;AAEA,mCAAcE,gBAAd;AACA,4BAAaC,IAAb,CAAkBH,cAAlB;AACA,0BAAWG,IAAX;AACH,EARA,GAAD;AAPA;;;AANA;AACA;AACA,4D;;;;;;ACRA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAgB;AAChB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,iDAAgD,gBAAgB;AAChE,iCAAgC;AAChC;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;;AAEA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;;AAEA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iCAAgC;AAChC;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,MAAK;AACL;;AAEA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;;AAEL,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4BAA2B;AAC3B,4BAA2B;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,uFAAsF,eAAe;AACrG;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kDAAiD,qDAAqD;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAA+B;AAC/B;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,8BAA6B;AAC7B;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,qCAAoC;AACpC;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAA+B;;AAE/B;AACA;AACA;AACA,MAAK;AACL;;AAEA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA2B;;AAE3B;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4BAA2B;AAC3B;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;;AAEA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA,uEAAsE,sBAAsB;AAC5F;AACA;AACA;;AAEA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,0CAAyC,gCAAgC;;AAEzE;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,QAAO;AACP,MAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA,0CAAyC,gCAAgC;;AAEzE;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;;AAEP;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,4BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAA+B;;AAE/B;AACA;AACA;AACA,MAAK;AACL;;AAEA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA,mEAAkE,kCAAkC;;AAEpG;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA,IAAG;;AAEH,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;;AAEtB;AACA;AACA;;AAEA;;AAEA,kCAAiC,KAAK;AACtC;;AAEA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,mCAAkC,iBAAiB,kCAAkC;AACrF;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0BAAyB;;AAEzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,eAAc,oCAAoC;AAClD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,MAAK;;AAEL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,wEAAuE;AACvE,2BAA0B,WAAW,wEAAwE;AAC7G;AACA;AACA;AACA;AACA,+BAA8B,kBAAkB;AAChD,sBAAqB;AACrB,+BAA8B,uDAAuD;;AAErF,uBAAsB;AACtB;;AAEA;AACA,qCAAoC,gFAAgF;AACpH,qCAAoC,gFAAgF;AACpH,qCAAoC,iFAAiF;AACrH,qCAAoC;;AAEpC;;AAEA;AACA,kBAAiB;AACjB;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oDAAmD;AACnD;AACA,QAAO,kFAAkF;AACzF;AACA;AACA,MAAK;AACL;AACA;AACA,sDAAqD;AACrD;AACA,QAAO,uDAAuD;AAC9D;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA,iCAAgC;AAChC;AACA;AACA;AACA;AACA,IAAG;;;AAGH;AACA;;AAEA,kCAAiC;;AAEjC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,sCAAqC;AACrC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP,8BAA6B,qBAAqB;AAClD;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,6BAA4B,KAAK;AACjC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;;AAEA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;;AAEL;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;;AAEA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA,+BAA8B;;AAE9B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA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","file":"main.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 726a2d4118b8fbaf0b57","/*\n* Imports Javascript components for the GLUE\n*/\n\nimport '../../../node_modules/bootstrap/dist/js/bootstrap.js';\n\n// TODO: Find a new bootstrap accessibility plugin, build one, or figure out how to get  this one working properly\n// Disabled because it creates accessibility errors (strangely enough)\n// import './components/global/bootstrap-accessibility.js';\n\nimport './components/autocomplete.js';\nimport './components/forms.js';\n// import mobileNav from './components/nav/mobile-nav.js'\nimport activeSideNav from './components/nav/current-secondary-nav';\nimport utils from './components/global/utils.js';\nimport qgBsExtend from './components/global/bootstrap-extensions.js';\nimport feedbackForm from './components/feedback-form';\nimport shareLinks from './components/share-links';\n\n(function () {\n    'use strict';\n    var qg = qg || {};\n    var franchiseTitle = qg && qg.swe && qg.swe.franchiseTitle;\n\n    activeSideNav.highlightNavItem();\n    feedbackForm.init(franchiseTitle);\n    shareLinks.init();\n}());\n\n\n\n// WEBPACK FOOTER //\n// ./src/assets/js/main.js","/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under the MIT license\n */\n\nif (typeof jQuery === 'undefined') {\n  throw new Error('Bootstrap\\'s JavaScript requires jQuery')\n}\n\n+function ($) {\n  'use strict';\n  var version = $.fn.jquery.split(' ')[0].split('.')\n  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {\n    throw new Error('Bootstrap\\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')\n  }\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: transition.js v3.3.7\n * http://getbootstrap.com/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      WebkitTransition : 'webkitTransitionEnd',\n      MozTransition    : 'transitionend',\n      OTransition      : 'oTransitionEnd otransitionend',\n      transition       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n\n    return false // explicit for ie8 (  ._.)\n  }\n\n  // http://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false\n    var $el = this\n    $(this).one('bsTransitionEnd', function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n\n    if (!$.support.transition) return\n\n    $.event.special.bsTransitionEnd = {\n      bindType: $.support.transition.end,\n      delegateType: $.support.transition.end,\n      handle: function (e) {\n        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n      }\n    }\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: alert.js v3.3.7\n * http://getbootstrap.com/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.VERSION = '3.3.7'\n\n  Alert.TRANSITION_DURATION = 150\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = $(selector === '#' ? [] : selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.closest('.alert')\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      // detach from parent, fire event then clean up data\n      $parent.detach().trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one('bsTransitionEnd', removeElement)\n        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.alert\n\n  $.fn.alert             = Plugin\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: button.js v3.3.7\n * http://getbootstrap.com/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element  = $(element)\n    this.options   = $.extend({}, Button.DEFAULTS, options)\n    this.isLoading = false\n  }\n\n  Button.VERSION  = '3.3.7'\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state += 'Text'\n\n    if (data.resetText == null) $el.data('resetText', $el[val]())\n\n    // push to event loop to allow forms to submit\n    setTimeout($.proxy(function () {\n      $el[val](data[state] == null ? this.options[state] : data[state])\n\n      if (state == 'loadingText') {\n        this.isLoading = true\n        $el.addClass(d).attr(d, d).prop(d, true)\n      } else if (this.isLoading) {\n        this.isLoading = false\n        $el.removeClass(d).removeAttr(d).prop(d, false)\n      }\n    }, this), 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var changed = true\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n      if ($input.prop('type') == 'radio') {\n        if ($input.prop('checked')) changed = false\n        $parent.find('.active').removeClass('active')\n        this.$element.addClass('active')\n      } else if ($input.prop('type') == 'checkbox') {\n        if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false\n        this.$element.toggleClass('active')\n      }\n      $input.prop('checked', this.$element.hasClass('active'))\n      if (changed) $input.trigger('change')\n    } else {\n      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))\n      this.$element.toggleClass('active')\n    }\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  var old = $.fn.button\n\n  $.fn.button             = Plugin\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document)\n    .on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      var $btn = $(e.target).closest('.btn')\n      Plugin.call($btn, 'toggle')\n      if (!($(e.target).is('input[type=\"radio\"], input[type=\"checkbox\"]'))) {\n        // Prevent double click on radios, and the double selections (so cancellation) on checkboxes\n        e.preventDefault()\n        // The target component still receive the focus\n        if ($btn.is('input,button')) $btn.trigger('focus')\n        else $btn.find('input:visible,button:visible').first().trigger('focus')\n      }\n    })\n    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))\n    })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: carousel.js v3.3.7\n * http://getbootstrap.com/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element)\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      = null\n    this.sliding     = null\n    this.interval    = null\n    this.$active     = null\n    this.$items      = null\n\n    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))\n\n    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element\n      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))\n      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))\n  }\n\n  Carousel.VERSION  = '3.3.7'\n\n  Carousel.TRANSITION_DURATION = 600\n\n  Carousel.DEFAULTS = {\n    interval: 5000,\n    pause: 'hover',\n    wrap: true,\n    keyboard: true\n  }\n\n  Carousel.prototype.keydown = function (e) {\n    if (/input|textarea/i.test(e.target.tagName)) return\n    switch (e.which) {\n      case 37: this.prev(); break\n      case 39: this.next(); break\n      default: return\n    }\n\n    e.preventDefault()\n  }\n\n  Carousel.prototype.cycle = function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getItemIndex = function (item) {\n    this.$items = item.parent().children('.item')\n    return this.$items.index(item || this.$active)\n  }\n\n  Carousel.prototype.getItemForDirection = function (direction, active) {\n    var activeIndex = this.getItemIndex(active)\n    var willWrap = (direction == 'prev' && activeIndex === 0)\n                || (direction == 'next' && activeIndex == (this.$items.length - 1))\n    if (willWrap && !this.options.wrap) return active\n    var delta = direction == 'prev' ? -1 : 1\n    var itemIndex = (activeIndex + delta) % this.$items.length\n    return this.$items.eq(itemIndex)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, \"slid\"\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || this.getItemForDirection(type, $active)\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var that      = this\n\n    if ($next.hasClass('active')) return (this.sliding = false)\n\n    var relatedTarget = $next[0]\n    var slideEvent = $.Event('slide.bs.carousel', {\n      relatedTarget: relatedTarget,\n      direction: direction\n    })\n    this.$element.trigger(slideEvent)\n    if (slideEvent.isDefaultPrevented()) return\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])\n      $nextIndicator && $nextIndicator.addClass('active')\n    }\n\n    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, \"slid\"\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      $next.addClass(type)\n      $next[0].offsetWidth // force reflow\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one('bsTransitionEnd', function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () {\n            that.$element.trigger(slidEvent)\n          }, 0)\n        })\n        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)\n    } else {\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger(slidEvent)\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  var old = $.fn.carousel\n\n  $.fn.carousel             = Plugin\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  var clickHandler = function (e) {\n    var href\n    var $this   = $(this)\n    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n    if (!$target.hasClass('carousel')) return\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    Plugin.call($target, options)\n\n    if (slideIndex) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  }\n\n  $(document)\n    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)\n    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      Plugin.call($carousel, $carousel.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: collapse.js v3.3.7\n * http://getbootstrap.com/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n/* jshint latedef: false */\n\n+function ($) {\n  'use strict';\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.$trigger      = $('[data-toggle=\"collapse\"][href=\"#' + element.id + '\"],' +\n                           '[data-toggle=\"collapse\"][data-target=\"#' + element.id + '\"]')\n    this.transitioning = null\n\n    if (this.options.parent) {\n      this.$parent = this.getParent()\n    } else {\n      this.addAriaAndCollapsedClass(this.$element, this.$trigger)\n    }\n\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.VERSION  = '3.3.7'\n\n  Collapse.TRANSITION_DURATION = 350\n\n  Collapse.DEFAULTS = {\n    toggle: true\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var activesData\n    var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')\n\n    if (actives && actives.length) {\n      activesData = actives.data('bs.collapse')\n      if (activesData && activesData.transitioning) return\n    }\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    if (actives && actives.length) {\n      Plugin.call(actives, 'hide')\n      activesData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')[dimension](0)\n      .attr('aria-expanded', true)\n\n    this.$trigger\n      .removeClass('collapsed')\n      .attr('aria-expanded', true)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse in')[dimension]('')\n      this.transitioning = 0\n      this.$element\n        .trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse in')\n      .attr('aria-expanded', false)\n\n    this.$trigger\n      .addClass('collapsed')\n      .attr('aria-expanded', false)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse')\n        .trigger('hidden.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n  Collapse.prototype.getParent = function () {\n    return $(this.options.parent)\n      .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n      .each($.proxy(function (i, element) {\n        var $element = $(element)\n        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\n      }, this))\n      .end()\n  }\n\n  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n    var isOpen = $element.hasClass('in')\n\n    $element.attr('aria-expanded', isOpen)\n    $trigger\n      .toggleClass('collapsed', !isOpen)\n      .attr('aria-expanded', isOpen)\n  }\n\n  function getTargetFromTrigger($trigger) {\n    var href\n    var target = $trigger.attr('data-target')\n      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n\n    return $(target)\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.collapse\n\n  $.fn.collapse             = Plugin\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n    var $this   = $(this)\n\n    if (!$this.attr('data-target')) e.preventDefault()\n\n    var $target = getTargetFromTrigger($this)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $this.data()\n\n    Plugin.call($target, option)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: dropdown.js v3.3.7\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=\"dropdown\"]'\n  var Dropdown = function (element) {\n    $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.VERSION = '3.3.7'\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = selector && $(selector)\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n  function clearMenus(e) {\n    if (e && e.which === 3) return\n    $(backdrop).remove()\n    $(toggle).each(function () {\n      var $this         = $(this)\n      var $parent       = getParent($this)\n      var relatedTarget = { relatedTarget: this }\n\n      if (!$parent.hasClass('open')) return\n\n      if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\n\n      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this.attr('aria-expanded', 'false')\n      $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\n    })\n  }\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we use a backdrop because click events don't delegate\n        $(document.createElement('div'))\n          .addClass('dropdown-backdrop')\n          .insertAfter($(this))\n          .on('click', clearMenus)\n      }\n\n      var relatedTarget = { relatedTarget: this }\n      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this\n        .trigger('focus')\n        .attr('aria-expanded', 'true')\n\n      $parent\n        .toggleClass('open')\n        .trigger($.Event('shown.bs.dropdown', relatedTarget))\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if (!isActive && e.which != 27 || isActive && e.which == 27) {\n      if (e.which == 27) $parent.find(toggle).trigger('focus')\n      return $this.trigger('click')\n    }\n\n    var desc = ' li:not(.disabled):visible a'\n    var $items = $parent.find('.dropdown-menu' + desc)\n\n    if (!$items.length) return\n\n    var index = $items.index(e.target)\n\n    if (e.which == 38 && index > 0)                 index--         // up\n    if (e.which == 40 && index < $items.length - 1) index++         // down\n    if (!~index)                                    index = 0\n\n    $items.eq(index).trigger('focus')\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.dropdown')\n\n      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown             = Plugin\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n    .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: modal.js v3.3.7\n * http://getbootstrap.com/javascript/#modals\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options             = options\n    this.$body               = $(document.body)\n    this.$element            = $(element)\n    this.$dialog             = this.$element.find('.modal-dialog')\n    this.$backdrop           = null\n    this.isShown             = null\n    this.originalBodyPad     = null\n    this.scrollbarWidth      = 0\n    this.ignoreBackdropClick = false\n\n    if (this.options.remote) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\n  }\n\n  Modal.VERSION  = '3.3.7'\n\n  Modal.TRANSITION_DURATION = 300\n  Modal.BACKDROP_TRANSITION_DURATION = 150\n\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.checkScrollbar()\n    this.setScrollbar()\n    this.$body.addClass('modal-open')\n\n    this.escape()\n    this.resize()\n\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n      that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true\n      })\n    })\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body) // don't move modals dom position\n      }\n\n      that.$element\n        .show()\n        .scrollTop(0)\n\n      that.adjustDialog()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element.addClass('in')\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$dialog // wait for modal to slide in\n          .one('bsTransitionEnd', function () {\n            that.$element.trigger('focus').trigger(e)\n          })\n          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n        that.$element.trigger('focus').trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n    this.resize()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .off('click.dismiss.bs.modal')\n      .off('mouseup.dismiss.bs.modal')\n\n    this.$dialog.off('mousedown.dismiss.bs.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (document !== e.target &&\n            this.$element[0] !== e.target &&\n            !this.$element.has(e.target).length) {\n          this.$element.trigger('focus')\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keydown.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.resize = function () {\n    if (this.isShown) {\n      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n    } else {\n      $(window).off('resize.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.$body.removeClass('modal-open')\n      that.resetAdjustments()\n      that.resetScrollbar()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $(document.createElement('div'))\n        .addClass('modal-backdrop ' + animate)\n        .appendTo(this.$body)\n\n      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n        if (this.ignoreBackdropClick) {\n          this.ignoreBackdropClick = false\n          return\n        }\n        if (e.target !== e.currentTarget) return\n        this.options.backdrop == 'static'\n          ? this.$element[0].focus()\n          : this.hide()\n      }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one('bsTransitionEnd', callback)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      var callbackRemove = function () {\n        that.removeBackdrop()\n        callback && callback()\n      }\n      $.support.transition && this.$element.hasClass('fade') ?\n        this.$backdrop\n          .one('bsTransitionEnd', callbackRemove)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callbackRemove()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  // these following methods are used to handle overflowing modals\n\n  Modal.prototype.handleUpdate = function () {\n    this.adjustDialog()\n  }\n\n  Modal.prototype.adjustDialog = function () {\n    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n    this.$element.css({\n      paddingLeft:  !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n    })\n  }\n\n  Modal.prototype.resetAdjustments = function () {\n    this.$element.css({\n      paddingLeft: '',\n      paddingRight: ''\n    })\n  }\n\n  Modal.prototype.checkScrollbar = function () {\n    var fullWindowWidth = window.innerWidth\n    if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8\n      var documentElementRect = document.documentElement.getBoundingClientRect()\n      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n    }\n    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n    this.scrollbarWidth = this.measureScrollbar()\n  }\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n    this.originalBodyPad = document.body.style.paddingRight || ''\n    if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)\n  }\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', this.originalBodyPad)\n  }\n\n  Modal.prototype.measureScrollbar = function () { // thx walsh\n    var scrollDiv = document.createElement('div')\n    scrollDiv.className = 'modal-scrollbar-measure'\n    this.$body.append(scrollDiv)\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n    this.$body[0].removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  var old = $.fn.modal\n\n  $.fn.modal             = Plugin\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) // strip for ie7\n    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) e.preventDefault()\n\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus')\n      })\n    })\n    Plugin.call($target, option, this)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tooltip.js v3.3.7\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       = null\n    this.options    = null\n    this.enabled    = null\n    this.timeout    = null\n    this.hoverState = null\n    this.$element   = null\n    this.inState    = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.VERSION  = '3.3.7'\n\n  Tooltip.TRANSITION_DURATION = 150\n\n  Tooltip.DEFAULTS = {\n    animation: true,\n    placement: 'top',\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    container: false,\n    viewport: {\n      selector: 'body',\n      padding: 0\n    }\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled   = true\n    this.type      = type\n    this.$element  = $(element)\n    this.options   = this.getOptions(options)\n    this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n    this.inState   = { click: false, hover: false, focus: false }\n\n    if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n      throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n    }\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay,\n        hide: options.delay\n      }\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n    }\n\n    if (self.tip().hasClass('in') || self.hoverState == 'in') {\n      self.hoverState = 'in'\n      return\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.isInStateTrue = function () {\n    for (var key in this.inState) {\n      if (this.inState[key]) return true\n    }\n\n    return false\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n    }\n\n    if (self.isInStateTrue()) return\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.' + this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n      if (e.isDefaultPrevented() || !inDom) return\n      var that = this\n\n      var $tip = this.tip()\n\n      var tipId = this.getUID(this.type)\n\n      this.setContent()\n      $tip.attr('id', tipId)\n      this.$element.attr('aria-describedby', tipId)\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n        .data('bs.' + this.type, this)\n\n      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n      this.$element.trigger('inserted.bs.' + this.type)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var orgPlacement = placement\n        var viewportDim = this.getPosition(this.$viewport)\n\n        placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top'    :\n                    placement == 'top'    && pos.top    - actualHeight < viewportDim.top    ? 'bottom' :\n                    placement == 'right'  && pos.right  + actualWidth  > viewportDim.width  ? 'left'   :\n                    placement == 'left'   && pos.left   - actualWidth  < viewportDim.left   ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n\n      var complete = function () {\n        var prevHoverState = that.hoverState\n        that.$element.trigger('shown.bs.' + that.type)\n        that.hoverState = null\n\n        if (prevHoverState == 'out') that.leave(that)\n      }\n\n      $.support.transition && this.$tip.hasClass('fade') ?\n        $tip\n          .one('bsTransitionEnd', complete)\n          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n        complete()\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function (offset, placement) {\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  += marginTop\n    offset.left += marginLeft\n\n    // $.fn.offset doesn't round pixel values\n    // so we use setOffset directly with our own function B-0\n    $.offset.setOffset($tip[0], $.extend({\n      using: function (props) {\n        $tip.css({\n          top: Math.round(props.top),\n          left: Math.round(props.left)\n        })\n      }\n    }, offset), 0)\n\n    $tip.addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      offset.top = offset.top + height - actualHeight\n    }\n\n    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n    if (delta.left) offset.left += delta.left\n    else offset.top += delta.top\n\n    var isVertical          = /top|bottom/.test(placement)\n    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n    $tip.offset(offset)\n    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n  }\n\n  Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n    this.arrow()\n      .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n      .css(isVertical ? 'top' : 'left', '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function (callback) {\n    var that = this\n    var $tip = $(this.$tip)\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n      if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.\n        that.$element\n          .removeAttr('aria-describedby')\n          .trigger('hidden.bs.' + that.type)\n      }\n      callback && callback()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && $tip.hasClass('fade') ?\n      $tip\n        .one('bsTransitionEnd', complete)\n        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n      complete()\n\n    this.hoverState = null\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function ($element) {\n    $element   = $element || this.$element\n\n    var el     = $element[0]\n    var isBody = el.tagName == 'BODY'\n\n    var elRect    = el.getBoundingClientRect()\n    if (elRect.width == null) {\n      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n    }\n    var isSvg = window.SVGElement && el instanceof window.SVGElement\n    // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.\n    // See https://github.com/twbs/bootstrap/issues/20280\n    var elOffset  = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())\n    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n    return $.extend({}, elRect, scroll, outerDims, elOffset)\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n  }\n\n  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n    var delta = { top: 0, left: 0 }\n    if (!this.$viewport) return delta\n\n    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n    var viewportDimensions = this.getPosition(this.$viewport)\n\n    if (/right|left/.test(placement)) {\n      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll\n      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n      if (topEdgeOffset < viewportDimensions.top) { // top overflow\n        delta.top = viewportDimensions.top - topEdgeOffset\n      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n      }\n    } else {\n      var leftEdgeOffset  = pos.left - viewportPadding\n      var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n      if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n        delta.left = viewportDimensions.left - leftEdgeOffset\n      } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n      }\n    }\n\n    return delta\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.getUID = function (prefix) {\n    do prefix += ~~(Math.random() * 1000000)\n    while (document.getElementById(prefix))\n    return prefix\n  }\n\n  Tooltip.prototype.tip = function () {\n    if (!this.$tip) {\n      this.$tip = $(this.options.template)\n      if (this.$tip.length != 1) {\n        throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n      }\n    }\n    return this.$tip\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = this\n    if (e) {\n      self = $(e.currentTarget).data('bs.' + this.type)\n      if (!self) {\n        self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n        $(e.currentTarget).data('bs.' + this.type, self)\n      }\n    }\n\n    if (e) {\n      self.inState.click = !self.inState.click\n      if (self.isInStateTrue()) self.enter(self)\n      else self.leave(self)\n    } else {\n      self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n    }\n  }\n\n  Tooltip.prototype.destroy = function () {\n    var that = this\n    clearTimeout(this.timeout)\n    this.hide(function () {\n      that.$element.off('.' + that.type).removeData('bs.' + that.type)\n      if (that.$tip) {\n        that.$tip.detach()\n      }\n      that.$tip = null\n      that.$arrow = null\n      that.$viewport = null\n      that.$element = null\n    })\n  }\n\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.tooltip')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip             = Plugin\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: popover.js v3.3.7\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.VERSION  = '3.3.7'\n\n  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n    $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events\n      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'\n    ](content)\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n            o.content.call($e[0]) :\n            o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.popover')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.popover\n\n  $.fn.popover             = Plugin\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: scrollspy.js v3.3.7\n * http://getbootstrap.com/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    this.$body          = $(document.body)\n    this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target || '') + ' .nav li > a'\n    this.offsets        = []\n    this.targets        = []\n    this.activeTarget   = null\n    this.scrollHeight   = 0\n\n    this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.VERSION  = '3.3.7'\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.getScrollHeight = function () {\n    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var that          = this\n    var offsetMethod  = 'offset'\n    var offsetBase    = 0\n\n    this.offsets      = []\n    this.targets      = []\n    this.scrollHeight = this.getScrollHeight()\n\n    if (!$.isWindow(this.$scrollElement[0])) {\n      offsetMethod = 'position'\n      offsetBase   = this.$scrollElement.scrollTop()\n    }\n\n    this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#./.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && $href.is(':visible')\n          && [[$href[offsetMethod]().top + offsetBase, href]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        that.offsets.push(this[0])\n        that.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.getScrollHeight()\n    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (this.scrollHeight != scrollHeight) {\n      this.refresh()\n    }\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)\n    }\n\n    if (activeTarget && scrollTop < offsets[0]) {\n      this.activeTarget = null\n      return this.clear()\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])\n        && this.activate(targets[i])\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    this.clear()\n\n    var selector = this.selector +\n      '[data-target=\"' + target + '\"],' +\n      this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length) {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate.bs.scrollspy')\n  }\n\n  ScrollSpy.prototype.clear = function () {\n    $(this.selector)\n      .parentsUntil(this.options.target, '.active')\n      .removeClass('active')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy             = Plugin\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load.bs.scrollspy.data-api', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      Plugin.call($spy, $spy.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tab.js v3.3.7\n * http://getbootstrap.com/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    // jscs:disable requireDollarBeforejQueryAssignment\n    this.element = $(element)\n    // jscs:enable requireDollarBeforejQueryAssignment\n  }\n\n  Tab.VERSION = '3.3.7'\n\n  Tab.TRANSITION_DURATION = 150\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.data('target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var $previous = $ul.find('.active:last a')\n    var hideEvent = $.Event('hide.bs.tab', {\n      relatedTarget: $this[0]\n    })\n    var showEvent = $.Event('show.bs.tab', {\n      relatedTarget: $previous[0]\n    })\n\n    $previous.trigger(hideEvent)\n    $this.trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\n\n    var $target = $(selector)\n\n    this.activate($this.closest('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $previous.trigger({\n        type: 'hidden.bs.tab',\n        relatedTarget: $this[0]\n      })\n      $this.trigger({\n        type: 'shown.bs.tab',\n        relatedTarget: $previous[0]\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n          .removeClass('active')\n        .end()\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', false)\n\n      element\n        .addClass('active')\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', true)\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu').length) {\n        element\n          .closest('li.dropdown')\n            .addClass('active')\n          .end()\n          .find('[data-toggle=\"tab\"]')\n            .attr('aria-expanded', true)\n      }\n\n      callback && callback()\n    }\n\n    $active.length && transition ?\n      $active\n        .one('bsTransitionEnd', next)\n        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tab\n\n  $.fn.tab             = Plugin\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  var clickHandler = function (e) {\n    e.preventDefault()\n    Plugin.call($(this), 'show')\n  }\n\n  $(document)\n    .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\n    .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: affix.js v3.3.7\n * http://getbootstrap.com/javascript/#affix\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n\n    this.$target = $(this.options.target)\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element     = $(element)\n    this.affixed      = null\n    this.unpin        = null\n    this.pinnedOffset = null\n\n    this.checkPosition()\n  }\n\n  Affix.VERSION  = '3.3.7'\n\n  Affix.RESET    = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0,\n    target: window\n  }\n\n  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n    var scrollTop    = this.$target.scrollTop()\n    var position     = this.$element.offset()\n    var targetHeight = this.$target.height()\n\n    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n    if (this.affixed == 'bottom') {\n      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n    }\n\n    var initializing   = this.affixed == null\n    var colliderTop    = initializing ? scrollTop : position.top\n    var colliderHeight = initializing ? targetHeight : height\n\n    if (offsetTop != null && scrollTop <= offsetTop) return 'top'\n    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n    return false\n  }\n\n  Affix.prototype.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset\n    this.$element.removeClass(Affix.RESET).addClass('affix')\n    var scrollTop = this.$target.scrollTop()\n    var position  = this.$element.offset()\n    return (this.pinnedOffset = position.top - scrollTop)\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var height       = this.$element.height()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n    var scrollHeight = Math.max($(document).height(), $(document.body).height())\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n    if (this.affixed != affix) {\n      if (this.unpin != null) this.$element.css('top', '')\n\n      var affixType = 'affix' + (affix ? '-' + affix : '')\n      var e         = $.Event(affixType + '.bs.affix')\n\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      this.affixed = affix\n      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n      this.$element\n        .removeClass(Affix.RESET)\n        .addClass(affixType)\n        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n    }\n\n    if (affix == 'bottom') {\n      this.$element.offset({\n        top: scrollHeight - height - offsetBottom\n      })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.affix\n\n  $.fn.affix             = Plugin\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop    != null) data.offset.top    = data.offsetTop\n\n      Plugin.call($spy, data)\n    })\n  })\n\n}(jQuery);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/bootstrap/dist/js/bootstrap.js\n// module id = 1\n// module chunks = 0","import '../../../../node_modules/generate-id/dist/generate-id.min.js';\n\n// onready\n$(function () {\n    'use strict';\n\n    // until pan.search supports https, we cannot use suggest feature on https domains\n    if (/^https/.test(window.location.protocol)) {\n        return;\n    }\n\n    var MAX_SUGGESTIONS = 7;\n\n    // TODO refactor this so functions are not created for every search form found on the page\n\n    // setup for each form\n    // TODO hardcoded to pan.search.qld.gov.au\n    $('form').filter('[action*=\"//pan.search.qld.gov.au/\"]').each(function () {\n        var form = this;\n        var searchField = $(form.elements.query).filter('[name=\"query\"]');\n        // var lastSearch = searchField.val();\n        var userTyped = '';\n\n        // ARIA\n        searchField\n            .attr('role', 'combobox')\n            .attr('autocomplete', 'off')\n            // both? or list? http://www.w3.org/TR/2011/CR-wai-aria-20110118/states_and_properties#aria-autocomplete\n            .attr('aria-autocomplete', 'both');\n\n        // make the search box wider on focus\n        // keep it wide while interacting with the search form (box, button, autosuggest list)\n\n        // create the suggestion box\n        var suggestions = $('<ul role=\"listbox\" class=\"listbox\"/>').generateId('suggestbox');\n\n        function closeSuggestions() {\n            suggestions.empty();\n        }\n\n        function prefillInput(value) {\n            searchField[0].value = value;\n            // console.log( 'prefilling', value, userTyped );\n            // http://stackoverflow.com/questions/12047648/setselectionrange-with-on-click-in-chrome-does-not-select-on-second-click\n            setTimeout(function () {\n                searchField[0].setSelectionRange(userTyped.length, searchField[0].value.length);\n            }, 0);\n        }\n\n        function moveFocus(n) {\n            var a = suggestions.find('a');\n            var focus = a.filter('.focus');\n            if (focus.length > 0) {\n                n = (a.index(focus) + n) % a.length;\n                focus.removeClass('focus');\n            } else {\n                n = n > -1 ? 0 : -1;\n            }\n            a = a.eq(n);\n            a.addClass('focus');\n            prefillInput(a.text());\n        }\n\n        // TODO how can we run this on both search forms (content and header) but show suggestions in the appropriate place?\n\n        suggestions.on('click', 'a', function (event) {\n            // should this submit? no. see ARIA instructions\n            event.preventDefault();\n\n            searchField.val($(this).text()).get(0).focus();\n            closeSuggestions();\n        });\n\n\n        var KEYS = {\n            alt: 18,\n            backspace: 8,\n            delete: 46,\n            down: 40,\n            enter: 13,\n            escape: 27,\n            left: 37,\n            right: 39,\n            tab: 9,\n            up: 38\n        };\n\n\n        // clicking outside the field closes suggestions\n        $(document).on('click', function (event) {\n            if (searchField.is(event.target)) {\n                event.stopImmediatePropagation();\n            } else {\n                closeSuggestions();\n            }\n        });\n\n        // handle loss of focus due to TAB\n        // need to run this onblur, but NOT when focus remains in the suggestions box\n        // can we check focus in a parent element!? maybe a custom element\n        // <combobox><input><ul></combobox> ??\n        searchField.on('keydown', function (event) {\n            switch (event.which) {\n                case KEYS.up:\n                case KEYS.down:\n                    moveFocus(event.which === KEYS.down ? 1 : -1);\n                    break;\n                case KEYS.tab:\n                    closeSuggestions();\n            }\n        });\n        searchField.on('keyup', function (event) {\n            switch (event.which) {\n                case KEYS.escape:\n                case KEYS.enter:\n                    closeSuggestions();\n            }\n\n            // delete\n            // console.log( event.which );\n        });\n\n        searchField.on('input', function () {\n\n            searchField.after(suggestions);\n            searchField.attr('aria-owns', suggestions.attr('id'));\n\n            userTyped = this.value;\n            if (userTyped.length < 3) {\n                closeSuggestions();\n                return;\n            }\n\n            // console.log( 'fetch suggestions for ', userTyped );\n\n            $.ajax({\n                // cache! (the URL will be change with the search text)\n                cache: true,\n                dataType: 'jsonp',\n                url: 'http://pan.search.qld.gov.au/s/suggest.json?',\n                data: {\n                    // TODO read these from search form\n                    collection: $(form.elements.collection).filter('[name=\"collection\"]').val() || 'qld-gov',\n                    profile: $(form.elements.profile).filter('[name=\"profile\"]').val() || 'qld_preview',\n                    show: MAX_SUGGESTIONS,\n                    partial_query: userTyped\n                }\n            })\n                .done(function (data) {\n                    if (data.length < 1) {\n                        closeSuggestions();\n                        return;\n                    }\n                    // TODO if the user has typed more, filter the matches in this array\n                    // should we retreive more than 4 so there is a bit of slack here?\n                    // what if ajax repsonses arrive out of sequence? track last match?\n                    // console.log( 'suggestions for ', userTyped, data, 'user has typed', searchField.val() );\n                    var match = new RegExp(userTyped.replace(/([.+*?\\[^\\]$(){}=!<>|:-\\\\,])/g, '\\\\$1'), 'g');\n                    var safeInput = userTyped.replace(/</g, '&lt;');\n                    suggestions.html($.map(data, function (value) {\n                        var htmlValue = value.replace(/</g, '&lt;').replace(match, '<mark>' + safeInput + '</mark>');\n                        // use form.action + default params\n                        return '<li><a href=\"http://pan.search.qld.gov.au/s/search.html?collection=qld-gov&profile=qld&query=' + encodeURIComponent(value) + '\">' + htmlValue + '</a></li>';\n                    }).join('\\n'));\n\n                    // issue #3: issues with typing over selected suggestion\n                    // https://github.com/qld-gov-au/jquery.autocomplete/issues/3\n                    // check length is increasing (if not, user is deleting input)\n                    // if ( searchField[0].value.length > lastSearch.length ) {\n                    // \t// set the value to the best answer and select the untyped portion of the text\n                    // \tprefillInput( data[0] );\n                    // }\n                    searchField.val();\n                });\n\n            // show suggestions box\n            // click on suggestion = fill in form and submit\n            // hover over selection = update 'placeholder' style text\n        });\n    });\n}); // onready\n\n\n\n// WEBPACK FOOTER //\n// ./src/assets/js/components/autocomplete.js","/*! Generate ID - v1.0.3 - 2014-09-18\n* https://github.com/bboyle/Generate-ID\n* Copyright (c) 2014 Ben Boyle; Licensed MIT */\n!function(a){\"use strict\";a.fn.generateId=function(b){var c=1;return b=b?a.trim(b.toLowerCase().replace(/[^a-z0-9_]+/g,\" \")).replace(/\\s+/g,\"-\"):\"id\",this.each(function(){var a;if(!this.getAttribute(\"id\")){for(a=b;document.getElementById(a);)a=b+String(c),c++;this.setAttribute(\"id\",a)}})}}(jQuery);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/generate-id/dist/generate-id.min.js\n// module id = 3\n// module chunks = 0","/*! Form validation - v1.1.1 - 2014-04-09\n * https://github.com/bboyle/form-validation\n * Copyright (c) 2014 Ben Boyle; Licensed MIT */\n(function ($) {\n    'use strict';\n\n\n    var SUBMIT_TOLERANCE = 10000,\n        DEFAULT_STATUS_HTML = '<div class=\"status warn\"><div class=\"inner\"><h2>Please check your answers</h2><ol></ol></div></div>',\n        // fields that validate\n        candidateForValidation = 'input, select, textarea',\n\n\n        // invalidFilter\n        invalidFilter = function () {\n            return !(this.disabled || this.validity.valid);\n        },\n\n\n        // follow plugin conventions for storing plugin data\n        // http://docs.jquery.com/Plugins/Authoring#Data\n        pluginDataKey = 'formValidation',\n        pluginData = function (key, value) {\n            var dataHash = this.data(pluginDataKey) || this.data(pluginDataKey, {}).data(pluginDataKey);\n\n            if (typeof key !== 'undefined') {\n                if (typeof value !== 'undefined') {\n                    dataHash[key] = value;\n                    return value;\n                } else if (typeof dataHash[key] !== 'undefined') {\n                    return dataHash[key];\n                }\n                return null;\n            }\n\n            return dataHash;\n        },\n\n\n        // helper for .label, .hint and .alert\n        getLabelComponent = function (component, options) {\n            return this.map(function (index, domElement) {\n                var $element = $(domElement),\n                    labelElement = null,\n                    foundElement = null;\n\n                if (typeof options === 'object' && options.level === 'group') {\n                    foundElement = $element.formValidation('group').find(component)[0];\n                    } else if ($element.is(':radio, :checkbox')) {\n                    foundElement = $element.closest('fieldset').find(component)[0];\n                    } else {\n                    labelElement = $element.closest('form').find('label[for=\"' + domElement.id + '\"]');\n                    foundElement = labelElement.children(component)[0];\n                    if (!foundElement) {\n                        if (component === '.hint') {\n                            labelElement.append('<small class=\"hint\"></small>');\n                            foundElement = labelElement.children(component)[0];\n                        }\n                    }\n                }\n                return foundElement;\n            });\n        },\n\n\n        changeValidityCheck = function () {\n            var $this = $(this),\n                alertElement = $this.formValidation('alert'),\n                alertLevel,\n                invalidContainers;\n\n            // is this control valid?\n            if (this.validity.valid) {\n                // is it part of a group that contain other invalid controls?\n                if ($this.formValidation('question').find('.alert').filter(alertElement).length > 0) {\n                    alertElement.remove();\n                } else {\n                    // update message from first invalid field in group\n                    invalidContainers = $this.formValidation('group').find(candidateForValidation).filter(invalidFilter);\n                    if (invalidContainers.length > 0) {\n                        alertElement.text(invalidContainers.formValidation('getValidationMessage'));\n                    } else {\n                        // all fields valid\n                        alertElement.remove();\n                    }\n                }\n\n                // remove invalid class from ancestors that do not contain invalid fields\n                $this.parentsUntil('form', '.invalid').filter(function () {\n                    return $(this).find(candidateForValidation).filter(invalidFilter).length === 0;\n                })\n                // remove .invalid class\n                    .removeClass('invalid')\n                    // remove old alerts (change handler should have already done this)\n                    .find('.alert')\n                    .remove();\n                } else {\n                // does alert exist?\n                if (alertElement.length === 0) {\n                    alertElement = $('<em class=\"alert\"/>');\n                }\n                // show message\n                alertElement.text($this.formValidation('getValidationMessage'));\n                // append to form\n                if ($this.formValidation('group').hasClass('atomic')) {\n                    alertLevel = { 'level': 'group' };\n                }\n\n                $this.formValidation( 'label', alertLevel ).parent().find( '.label, abbr[title=\"(required)\"]' ).eq( -1 )\n                .after(alertElement);\n\n                // NOTE we don't flag the question as .invalid now\n                // .invalid only happens on submit, to soften inline validation errors\n            }\n        },\n\n\n        // checks for invalid elements\n        // returns number of invalid elements\n        submitValidityCheck = function () {\n            // form object\n            var form = $(this).closest('form'),\n\n                // invalid fields\n                invalid = form.find(candidateForValidation).filter(function invalidFields() {\n                    // skip disabled\n                    if (this.disabled) {\n                        return false;\n                    }\n\n                    // only check radio button groups once (skip individual radio button)\n                    if (this.type === 'radio') {\n                        if (!invalidFields.cache) {\n                            invalidFields.cache = {};\n                        } else if (invalidFields.cache[this.name] === true) {\n                            return false;\n                        }\n                        invalidFields.cache[this.name] = true;\n                    }\n\n                    return this.validity && !this.validity.valid;\n                }),\n\n                // alert container\n                alert = pluginData.call(form, 'summaryElement') || pluginData.call(form, 'summaryElement', $(DEFAULT_STATUS_HTML)),\n\n                // messages within alert\n                messages = alert.find('ol'),\n\n                // track groups\n                lastGroupSeen = true;\n\n            if (invalid.length > 0) {\n                // remove old messages\n                messages.find('li').remove();\n\n                // add new messages\n                invalid.each(function () {\n                    // get field\n                    var $this = $(this),\n                        // get group (if exists)\n                        group = $this.formValidation('group'),\n                        // get label or group label\n                        label = $this.formValidation('label', {\n                            level: group.length > 0 ? 'group' : null\n                        }),\n                        labelId,\n                        item;\n\n                    // get the label id\n                    if (label.length > 0) {\n                        labelId = label[0].id || label.generateId('label-' + this.id)[0].id;\n                    } else {\n                        labelId = this.name;\n                    }\n\n                    // get alert item\n                    item = pluginData.call( $this, 'summaryElement' ) || pluginData.call( $this, 'summaryElement', $( '<li><a href=\"#' + labelId + '\"></a></li>' ));\n\n                    if ( group.length === 0 || group[0] !== lastGroupSeen ) {\n                        // update last group seen\n                        lastGroupSeen = group[ 0 ];\n\n                        // create error message with link to label\n                        item\n                            .find('a')\n                            .text( label.text().replace( /\\?$/, '' ) + ': ' + $this.formValidation( 'getValidationMessage' ))\n                            .end()\n                            .appendTo( messages );\n                    } else {\n                        // remove from DOM\n                        item.remove();\n                    }\n                });\n            }\n\n            return invalid.length;\n        },\n\n\n        submitValidationHandler = function (event) {\n            // validate form\n            var count = submitValidityCheck.call( this ),\n                form = $( this );\n\n            // remove invalid class from questions that do not contain invalid fields\n            form.find( '.invalid' ).filter(function() {\n                return $( this ).find( candidateForValidation ).filter( invalidFilter ).length === 0;\n            })\n            // remove .invalid class\n                .removeClass( 'invalid' )\n                // remove old alerts (change handler should have already done this)\n                .find( '.alert' )\n                .remove()\n            ;\n\n\n            // anything invalid?\n            if ( count > 0 ) {\n                // cancel submit\n                event.stopImmediatePropagation();\n                event.preventDefault();\n\n                // show the error summary\n                (function(form) {\n                    var summary = pluginData.call( form, 'summaryElement' );\n                    // hide any previous status blocks\n                    form.prev( '.status' ).not( summary ).remove();\n                    // show the new summary\n                    form.before( summary.fadeIn() );\n                    // focus/scroll summary element\n                    $( window ).scrollTop( summary.offset().top );\n                }( form ));\n\n                // find all the invalid fields\n                form.find( candidateForValidation ).filter( invalidFilter ).each(function() {\n                    // update inline alerts\n                    changeValidityCheck.call( this );\n                })\n                // set .invalid on ancestor LI elements\n                    .parentsUntil( 'form', '.questions > li' )\n                    // but not sections\n                    .not( '.section, .compact' )\n                    .addClass( 'invalid' )\n                ;\n\n                // trigger x-invalid\n                form.trigger( 'x-invalid' );\n\n                // cancel submit\n                return false;\n            }\n        },\n\n\n        // bind this AFTER the validation handler\n        // only invoked if validation did not prevent submit\n        submitDoneHandler = function( event ) {\n            // use event.timeStamp when available and $.now() otherwise\n            var timeStamp = event.timeStamp || $.now(),\n                form = $( this ),\n                summaryElement = pluginData.call( form, 'summaryElement' ),\n                lastSubmitTimeStamp\n                ;\n\n            // remove summary element from DOM on successful submit\n            if ( summaryElement ) {\n                summaryElement.remove();\n            }\n\n            // is this submit event too soon after the last one?\n            lastSubmitTimeStamp = pluginData.call( form, 'lastSubmitTimeStamp' );\n            if ( lastSubmitTimeStamp && timeStamp - lastSubmitTimeStamp < SUBMIT_TOLERANCE ) {\n                // cancel the submit event\n                event.stopImmediatePropagation();\n                event.preventDefault();\n                return false;\n            } else {\n                // store the timestamp\n                pluginData.call( form, 'lastSubmitTimeStamp', timeStamp );\n            }\n        },\n\n\n        // plugin methods\n        methods = {\n            // $( x ).formValidation( 'alert' ) -- get\n            // get alert text\n            alert: function() {\n                return this.map(function( index, domElement ) {\n                        var $element = $( domElement ),\n                        group;\n\n                    if ( $element.is( ':radio, :checkbox' ) === true ) {\n                        return $element.closest( 'fieldset' ).find( 'legend > .alert' )[ 0 ];\n                        } else {\n                        // atomic groups\n                        group = $element.formValidation( 'group' ).filter( '.atomic' );\n                        if ( group.length > 0 ) {\n                            return group.find( 'legend > .alert' )[ 0 ];\n                         } else {\n                            return $( 'label[for=\"' + domElement.id + '\"] > .alert' )[ 0 ];\n                        }\n                    }\n                });\n            },\n\n\n            // $( x ).formValidation( 'label' )\n            // $( x ).formValidation( 'label', { level : group })\n            // return .label associated with element or containing group\n            label : function( options ) {\n                return getLabelComponent.call( this, '.label', options );\n            },\n\n\n            // $( x ).formValidation( 'hint' )\n            // $( x ).formValidation( 'hint', { level : group })\n            // return .hint associated with element or containing group\n            hint : function( options ) {\n                return getLabelComponent.call( this, '.hint', options );\n            },\n\n\n            // $( x ).formValidation( 'question' )\n            // return question element for item\n            question : function( options ) {\n                // looking for group?\n                if ( typeof options === 'object' && options.level === 'group' ) {\n                    // return the group\n                    return this.formValidation( 'group' );\n                }\n\n                // not looking for group\n                return this.map(function( index, domElement ) {\n                    return $( domElement ).parentsUntil( 'form', '.questions > li' )[ 0 ];\n                });\n            },\n\n\n            // $( x ).formValidation( 'group' )\n            // return group element for item\n            group : function() {\n                return this.map(function( index, domElement ) {\n                    return $( domElement ).parentsUntil( 'form', '.group' ).filter(function() {\n                        // ignore groups that do not contain fieldsets\n                        return $( this ).children( 'fieldset' ).length > 0;\n                    })[ 0 ];\n                });\n            },\n\n\n            // $( x ).formValidation( 'validate' )\n            // binds validation handler functions\n            // sets @novalidate on form to disable built-in validation\n            // TODO allow this to be called multiple times without binding additional handlers!\n            validate : function() {\n                return this.each(function() {\n                    $( this ).closest( 'form' )\n                    // turn off native validation\n                        .attr( 'novalidate', true )\n                        // unbind and rebind handlers\n                        .unbind( 'submit', submitDoneHandler )\n                        .unbind( 'submit', submitValidationHandler )\n                        // validate this form\n                        .bind( 'submit', submitValidationHandler )\n                        // if validation did not cancel submit…\n                        .bind( 'submit', submitDoneHandler )\n                        // bind inline validation handlers to form elements\n                        .find( candidateForValidation )\n                        .unbind( 'change', changeValidityCheck )\n                        .bind( 'change', changeValidityCheck )\n                    ;\n                });\n            },\n\n\n            // $( x ).formValidation( 'getValidationMessage' )\n            // return String validation message, e.g. \"Must be completed\"\n            getValidationMessage : function() {\n\n                var validityState = this[ 0 ].validity;\n\n                if ( typeof validityState === 'undefined' || validityState.valid === true ) {\n                    return '';\n                } else if ( validityState.valueMissing ) {\n                    return 'Must be completed';\n                } else if ( validityState.customError ) {\n                    return this[ 0 ].validationMessage;\n                } else if ( validityState.typeMismatch ) {\n                    return 'Must be an email address';\n                } else if ( validityState.patternMismatch ) {\n                    return 'Must use the format shown';\n                } else {\n                    return 'Must be a valid answer';\n                }\n            }\n\n        };\n\n    $.fn.formValidation = function( method ) {\n        // Method calling logic\n        // http://docs.jquery.com/Plugins/Authoring#Plugin_Methods\n        if ( methods[method] ) {\n            return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));\n        } else if ( typeof method === 'object' || ! method ) {\n            return methods.init.apply( this, arguments );\n        } else {\n            $.error( 'Method ' +  method + ' does not exist on jQuery.formValidation' );\n        }\n\n    };\n\n\n    // legacy API\n    $.fn.forcesForms = $.fn.formValidation;\n}( jQuery ));\n/*! Generate ID - v1.0.3 - 2014-09-18\n * https://github.com/bboyle/Generate-ID\n * Copyright (c) 2014 Ben Boyle; Licensed MIT */\n(function( $ ) {\n    'use strict';\n\n\n    /**\n     * Assigns a unique value to `@id` unless hasAttribute( 'id' ) is true\n     *\n     * @param preferredId string to use for id value\n     *\n     * @return jquery object (chaining supported)\n     */\n    $.fn.generateId = function( preferredId ) {\n\n        var i = 1;\n\n        if ( ! preferredId ) {\n            preferredId = 'id';\n        } else {\n            preferredId = $.trim( preferredId.toLowerCase().replace( /[^a-z0-9_]+/g, ' ' )).replace( /\\s+/g, '-' );\n        }\n\n        return this.each(function() {\n\n            var id;\n\n            if ( ! this.getAttribute( 'id' )) {\n\n                id = preferredId;\n                while ( document.getElementById( id )) {\n                    id = preferredId + String( i );\n                    i++;\n                }\n                this.setAttribute( 'id', id );\n            }\n        });\n\n    };\n\n\n}( jQuery ));\n/*! HTML5 constraintValidationAPI - v1.0.7 - 2015-02-19\n * https://github.com/bboyle/html5-constraint-validation-API\n * Copyright (c) 2015 Ben Boyle; Licensed MIT */\n/*exported initConstraintValidationAPI*/\nif ( jQuery !== 'undefined' ) {\n    (function( $ ) {\n        'use strict';\n\n\n        // http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#valid-e-mail-address\n        // 1*( atext / \".\" ) \"@\" ldh-str 1*( \".\" ldh-str )\n        var REXP_EMAIL = /^[A-Za-z0-9!#$%&'*+\\-\\/=\\?\\^_`\\{\\|\\}~\\.]+@[A-Za-z0-9\\-]+(\\.[A-Za-z0-9\\-]+)*$/,\n\n            // fields that validate\n            candidateForValidation = 'input, select, textarea',\n\n            // for feature detection\n            input = $( '<input>' ).get( 0 ),\n\n            // polyfill test\n            polyfill = typeof input.validity !== 'object',\n\n            // radio button bug (google earth internal browser)\n            radioButtonBug = ! polyfill && $( '<input type=\"radio\" required checked>' ).get( 0 ).validity.valueMissing === true,\n            validateBuggyRadioButtons,\n\n            // invalid fields filter\n            isInvalid = function() {\n                return ! ( this.disabled || this.validity.valid );\n            },\n\n            // get all radio buttons\n            getRadioButtonsInGroup = function( radio ) {\n                return $( radio.form.elements[ radio.name ] ).filter( '[name=\"' + radio.name + '\"]' );\n            },\n\n\n            // manage validity state object\n            validityState = function( typeMismatch, valueMissing, customError, message, patternMismatch ) {\n\n                if ( typeof message === 'string' ) {\n                    customError = !! message;\n                }\n                return {\n                    customError: customError,\n                    typeMismatch: !! typeMismatch,\n                    patternMismatch: !! patternMismatch,\n                    valueMissing: !! valueMissing,\n                    valid: ! valueMissing && ! customError && ! typeMismatch && ! patternMismatch\n                };\n            },\n\n\n            validateField = function(message) {\n                var $this = $( this ),\n                    required = !!$this.attr( 'required' ),\n                    radio = this.type === 'radio' && getRadioButtonsInGroup( this ),\n                    valueMissing,\n                    invalidEmail = this.getAttribute( 'type' ) === 'email' && !!this.value && ! REXP_EMAIL.test( this.value ),\n                    patternMismatch,\n                    pattern,\n                    newValidityState\n                    ;\n\n                // radio buttons are required if any single radio button is flagged as required\n                if ( radio && !required ) {\n                    required = radio.filter( '[required]' ).length > 0;\n                }\n                // if required, check for missing value\n                if ( required ){\n\n                    if ( /^select$/i.test( this.nodeName )) {\n                        valueMissing = this.selectedIndex === 0 && this.options[ 0 ].value === '';\n\n                    } else if ( radio ) {\n                        valueMissing = radio.filter( ':checked' ).length === 0;\n\n                    } else if ( this.type === 'checkbox' ) {\n                        valueMissing = !this.checked;\n\n                    } else {\n                        valueMissing = !this.value;\n                    }\n\n                }\n\n                if ( !! this.getAttribute( 'pattern' ) ) {\n                    if ( this.value.length > 0 ) {\n                        // http://www.whatwg.org/specs/web-apps/current-work/multipage/common-input-element-attributes.html#compiled-pattern-regular-expression\n                        pattern = new RegExp( '^(?:' + this.getAttribute( 'pattern' ) + ')$' );\n\n                        patternMismatch = ! pattern.test( this.value );\n\n                    } else {\n                        patternMismatch = false;\n                    }\n                }\n\n                // set .validityState\n                newValidityState = validityState( invalidEmail, valueMissing, this.validity.customError || false, message, patternMismatch );\n                if ( radio ) {\n                    getRadioButtonsInGroup( this ).each(function() { this.validity = newValidityState; });\n                } else {\n                    this.validity = newValidityState;\n                }\n\n                // set .validationMessage\n                if ( this.validity.valid ) {\n                    this.validationMessage = '';\n\n                } else if ( this.validity.customError ) {\n                    if ( typeof message === 'string' ) {\n                        this.validationMessage = message;\n                    }\n\n                } else if ( this.validity.valueMissing ) {\n                    this.validationMessage = 'Please answer this question';\n\n                } else if ( this.validity.typeMismatch ) {\n                    this.validationMessage = 'Please type an email address';\n\n                } else if ( this.validity.patternMismatch ) {\n                    this.validationMessage = 'Please use the format shown';\n\n                } else {\n                    this.validationMessage = 'Please answer the question correctly';\n                }\n\n                return this.disabled || this.validity.valid;\n            },\n\n\n            changeHandler = function( event ) {\n                var target = event.target;\n\n                validateField.call( target );\n\n                if ( target.type === 'radio' ) {\n                    getRadioButtonsInGroup( target ).each(function() {\n                        this.validity = target.validity;\n                        this.validationMessage = target.validationMessage;\n                    });\n                }\n            },\n\n\n            submitHandler = function( event ){\n\n                var form = $( this ),\n                    novalidate = !!form.attr( 'novalidate' ),\n                    invalid = false\n                    ;\n\n                // polyfill validation?\n                if ( polyfill ) {\n                    // check fields\n                    form.find( candidateForValidation ).each(function() {\n\n                        invalid = !validateField.call( this );\n\n\n                        // unless @novalidate\n                        if ( ! novalidate ) {\n                            // if invalid\n                            if ( invalid ) {\n                                // use triggerHandler because invalid does not bubble\n                                $( this ).triggerHandler( 'invalid' );\n                            }\n                        }\n                    });\n                }\n\n                // NOTE all the code below runs in all browsers to polyfill implementation bugs\n\n                // required radio button check\n                if ( radioButtonBug ) {\n                    validateBuggyRadioButtons( this );\n                }\n\n                // Opera 11 on OSX fires submit event even when fields are invalid\n                // correct implementations will not invoke this submit handler until all fields are valid\n\n                // unless @novalidate\n                // if there are invalid fields\n                if ( ! novalidate && form.find( candidateForValidation ).filter( isInvalid ).length > 0 ) {\n                    // abort submit\n                    event.stopImmediatePropagation();\n                    event.preventDefault();\n                    return false;\n                }\n            },\n\n\n            initConstraintValidationAPI = function() {\n                var candidates = $( candidateForValidation );\n\n                // INPUT validityState\n                if ( polyfill ) {\n                    // set us up the API\n                    candidates.filter(function() {\n                        return typeof this.validity !== 'object';\n                    }).each(function() {\n\n                        this.validity = validityState( false, false, false, '', false );\n                        this.validationMessage = '';\n\n                    });\n\n                    // check validity on change\n                    candidates\n                        .unbind( 'change.constraintValidationAPI' )\n                        .bind( 'change.constraintValidationAPI', changeHandler )\n                    ;\n                }\n\n                // INPUT validitationMessage\n                if ( typeof input.validationMessage !== 'string' ) {\n                    // set us up the API\n                    candidates.filter(function() {\n                        return typeof this.validationMessage !== 'string';\n                    }).each(function() {\n                        this.validationMessage = '';\n                    });\n                }\n\n                // INPUT checkValidity\n                if ( typeof input.checkValidity !== 'function' ) {\n                    // set us up the API\n                    candidates.filter(function() {\n                        return typeof this.checkValidity !== 'function';\n                    }).each(function() {\n                        var domElement = this;\n\n                        this.checkValidity = function() {\n                            var valid = validateField.call( domElement );\n\n                            // if invalid, and unless novalidate\n                            if ( ! valid && ! this.form.getAttribute( 'novalidate' )) {\n                                // use triggerHandler because invalid does not bubble\n                                $( domElement ).triggerHandler( 'invalid' );\n                            }\n\n                            return valid;\n                        };\n                    });\n                }\n\n                // INPUT setCustomValidity\n                if ( typeof input.setCustomValidity !== 'function' ) {\n                    // set us up the API\n                    candidates.filter(function() {\n                        return typeof this.setCustomValidity !== 'function';\n                    }).each(function() {\n                        var that = this;\n\n                        this.setCustomValidity = function( message ) {\n                            validateField.call( that, message );\n                        };\n                    });\n                }\n\n                // check for required radio button bug (google earth internal browser)\n                if ( radioButtonBug ) {\n                    validateBuggyRadioButtons = function( form ) {\n                        var seen = {};\n                        var radio,\n                            valueMissing;\n\n                        // check every required radio button\n                        $( 'input', form ).filter( ':radio' ).filter( '[required],[aria-required=\"true\"]' ).each(function() {\n                            if ( typeof seen[ this.name ] === 'undefined' ) {\n                                seen[ this.name ] = true;\n\n                                radio = getRadioButtonsInGroup( this );\n                                valueMissing = radio.filter( ':checked' ).length === 0;\n\n                                if ( valueMissing ) {\n                                    // make sure @required is set to use validation API\n                                    radio.attr( 'required', 'required' );\n                                } else {\n                                    // using @aria-required=true so we can track this control\n                                    // removing @required here to bypass validation bug\n                                    radio.attr( 'aria-required', true ).removeAttr( 'required' );\n                                }\n                            }\n                        });\n                    };\n\n                    // initial validity\n                    $( 'form' ).each( validateBuggyRadioButtons );\n\n                    // watch changes\n                    if ( ! polyfill ) {\n                        candidates.filter( ':radio' )\n                            .unbind( 'change.constraintValidationAPI' )\n                            .bind( 'change.constraintValidationAPI', function() {\n                                validateBuggyRadioButtons( this.form );\n                            })\n                        ;\n                    }\n                }\n\n                // check validity on submit\n                // this should be bound before all other submit handlers bound to the same form\n                // otherwise they will execute before this handler can cancel submit (oninvalid)\n                $( 'form' )\n                    .unbind( 'submit.constraintValidationAPI' )\n                    .bind( 'submit.constraintValidationAPI', submitHandler )\n                ;\n            }\n            ;\n\n\n        // run immediately and ondocumentready\n        initConstraintValidationAPI();\n        $( initConstraintValidationAPI );\n\n\n        // expose init function\n        window.initConstraintValidationAPI = initConstraintValidationAPI;\n\n\n    }( jQuery ));\n}\n/*\n * jQuery Simply Countable plugin\n * Provides a character counter for any text input or textarea\n *\n * @version  0.4.2\n * @homepage http://github.com/aaronrussell/jquery-simply-countable/\n * @author   Aaron Russell (http://www.aaronrussell.co.uk)\n *\n * Copyright (c) 2009-2010 Aaron Russell (aaron@gc4.co.uk)\n * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)\n * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.\n */\n\n(function($){\n\n    $.fn.simplyCountable = function(options){\n\n        options = $.extend({\n            counter:            '#counter',\n            countType:          'characters',\n            maxCount:           140,\n            strictMax:          false,\n            countDirection:     'down',\n            safeClass:          'safe',\n            overClass:          'over',\n            thousandSeparator:  ',',\n            onOverCount:        function(){},\n            onSafeCount:        function(){},\n            onMaxCount:         function(){}\n        }, options);\n\n        var navKeys = [33,34,35,36,37,38,39,40];\n\n        return $(this).each(function() {\n\n            var countable = $(this),\n                counter = $(options.counter);\n            if (!counter.length) { return false; }\n\n            var countCheck = function() {\n\n                var count;\n                var revCount;\n\n                var reverseCount = function(ct) {\n                    return ct - (ct * 2) + options.maxCount;\n                };\n\n                var countInt = function() {\n                    return (options.countDirection === 'up') ? revCount : count;\n                };\n\n                var numberFormat = function(ct) {\n                    var prefix = '';\n                    if (options.thousandSeparator) {\n                        ct = ct.toString();\n                        // Handle large negative numbers\n                        if (ct.match(/^-/)) {\n                            ct = ct.substr(1);\n                            prefix = '-';\n                        }\n                        for (var i = ct.length - 3; i > 0; i -= 3){\n                            ct = ct.substr(0,i) + options.thousandSeparator + ct.substr(i);\n                        }\n                    }\n                    return prefix + ct;\n                };\n\n                var changeCountableValue = function(val) {\n                    countable.val(val).trigger('change');\n                };\n\n                /* Calculates count for either words or characters */\n                if (options.countType === 'words') {\n                    count = options.maxCount - $.trim(countable.val()).split(/\\s+/).length;\n                    if (countable.val() === '') { count += 1; }\n                } else {\n                    count = options.maxCount - countable.val().length;\n                    }\n                revCount = reverseCount(count);\n\n                /* If strictMax set restrict further characters */\n                if (options.strictMax && count <= 0) {\n                    var content = countable.val();\n                    if (count < 0) {\n                        options.onMaxCount(countInt(), countable, counter);\n                    }\n                    if (options.countType === 'words') {\n                        var allowedText = content.match( new RegExp('\\\\s?(\\\\S+\\\\s+){'+ options.maxCount +'}') );\n                        if (allowedText) {\n                            changeCountableValue(allowedText[0]);\n                        }\n                    } else { changeCountableValue(content.substring(0, options.maxCount)); }\n                    count = 0, revCount = options.maxCount;\n                }\n\n                counter.text(numberFormat(countInt()));\n\n                /* Set CSS class rules and API callbacks */\n                if (!counter.hasClass(options.safeClass) && !counter.hasClass(options.overClass)) {\n                    if (count < 0) {\n                        counter.addClass(options.overClass);\n                    } else {\n                        counter.addClass(options.safeClass);\n                    }\n                } else if (count < 0 && counter.hasClass(options.safeClass)){\n                    counter.removeClass(options.safeClass).addClass(options.overClass);\n                    options.onOverCount(countInt(), countable, counter);\n                } else if (count >= 0 && counter.hasClass(options.overClass)){\n                    counter.removeClass(options.overClass).addClass(options.safeClass);\n                    options.onSafeCount(countInt(), countable, counter);\n                }\n\n            };\n\n            countCheck();\n\n            countable.on('keyup blur paste', function(e) {\n                switch (e.type) {\n                    case 'keyup':\n                        // Skip navigational key presses\n                        if ($.inArray(e.which, navKeys) < 0) { countCheck(); }\n                        break;\n                    case 'paste':\n                        // Wait a few miliseconds if a paste event\n                        setTimeout(countCheck, (e.type === 'paste' ? 5 : 0));\n                        break;\n                    default:\n                        countCheck();\n                        break;\n                }\n            });\n\n        });\n\n    };\n\n})(jQuery);/*! relevance - v2.1.0 - 2015-03-04\n * https://github.com/bboyle/relevance\n * Copyright (c) 2015 Ben Boyle; Licensed MIT */\nif ( jQuery !== 'undefined' ) {\n    (function( $ ) {\n        'use strict';\n\n        var relevantEvent = 'relevant',\n            irrelevantEvent = 'irrelevant',\n            elementsToDisable = 'button, input, select, textarea',\n            polyfillHidden = (function() {\n                var hidden = $( '<div hidden></div>' );\n                var hiddenSupported = hidden.appendTo( 'body' ).is( ':hidden' );\n                hidden.remove();\n                return ! hiddenSupported;\n            }()),\n\n            formElementsByName = function( form, name ) {\n                // filter out the @id matching of HTMLFormElement.elements[]\n                return $( form.elements[ name ] ).filter( '[name=\"' + name + '\"]' );\n            },\n\n            filterRelevant = function() {\n                return $( this ).closest( '[hidden]' ).length === 0;\n            },\n\n            filterIrrelevant = function() {\n                return $( this ).closest( '[hidden]' ).length > 0;\n            },\n\n            valueMap = function( element ) {\n                return element.value;\n            },\n\n            valueInArray = function( possibleValues, actualValues ) {\n                var i;\n                if ( typeof possibleValues !== 'object' ) {\n                    possibleValues = [possibleValues];\n                }\n\n                for ( i = 0; i < actualValues.length; i++ ) {\n                    if ( $.inArray( actualValues[ i ], possibleValues ) !== -1 ) {\n                        return true;\n                    }\n                }\n\n                return false;\n            },\n\n            // when changing a control that alters relevance of other elements…\n            recalculateRelevance = function() {\n                // assume dependency map exists\n                var map = $( this.form ).data( 'relevance' ).dependencyMap[ this.name ],\n                    values = $.map( formElementsByName( this.form, this.name ).filter( 'select,:checked' ).filter( ':visible' ), valueMap )\n                    ;\n\n                $.each( map, function( index, config ) {\n                    config.items.relevance( 'relevant', valueInArray( config.values, values ) !== config.negate );\n                });\n            },\n\n            // when an element changes relevance, check descendent controls that alter relevance in turn…\n            recalculateDependents = function( isRelevant ) {\n                var form,\n                    dependencyMap,\n                    targets;\n\n                // any change to relevant toggles?\n                form = this.closest( 'form' );\n                if ( form.length ) {\n                    dependencyMap = form.data( 'relevance' );\n                    if ( typeof dependencyMap === 'object' ) {\n                        dependencyMap = dependencyMap.dependencyMap;\n                        if ( typeof dependencyMap === 'object' ) {\n                            // get descendent-or-self select, radio and checkbox\n                            targets = this.add( this.find( 'select,input' )).filter( 'select,:radio,:checkbox' );\n                            // get unique @name for select, radio and checkbox\n                            targets = $.unique( $.map( targets, function( elementOfArray ) {\n                                return elementOfArray.name;\n                            }));\n                            $.each( targets, function( index, name ) {\n                                var map = dependencyMap[ name ],\n                                    values;\n\n                                if ( typeof map === 'object' ) {\n                                    $.each( map, function( index, config ) {\n                                        if ( isRelevant === false ) {\n                                            config.items.relevance( 'relevant', false );\n\n                                        } else {\n                                            values = $.map( formElementsByName( form[ 0 ], name ).filter( 'select,:checked' ).filter( ':visible' ), valueMap );\n                                            config.items.relevance( 'relevant', valueInArray( config.values, values ) !== config.negate );\n                                        }\n                                    });\n                                }\n                            });\n                        }\n                    }\n                }\n            },\n\n\n            methods = {\n\n                // $( x ).relevance( 'relevant', true )\n                // if the element is hidden, fire a 'relevant' event\n                // $( x ).relevance( 'relevant', false )\n                // if the element is visible, fire an \"irrelevant\" event\n                relevant: function( makeRelevant ) {\n                    var targets;\n                    if ( makeRelevant ) {\n                        targets = this.filter( filterIrrelevant ).trigger( relevantEvent );\n                    } else {\n                        targets = this.filter( filterRelevant ).trigger( irrelevantEvent );\n                    }\n                    if ( targets.length ) {\n                        recalculateDependents.call( targets, makeRelevant );\n                    }\n                    return this;\n                },\n\n                // $( x ).relevance( 'show' )\n                // shows the element (does not check if element is already visible)\n                // triggers 'relevant-done' after showing is complete\n                show: function() {\n                    // enable elements before they are shown\n                    this.add( this.find( elementsToDisable ))\n                    // but not any controls that will remain irrelevant\n                        .not( this.find( '[hidden]' ).find( elementsToDisable ))\n                        .each(function() {\n                            this.removeAttribute( 'disabled' );\n                        });\n\n                    // stop animation, remove @hidden and @aria-hidden, start showing\n                    if ( polyfillHidden ) {\n                        this.stop( true, true ).slideDown();\n                    }\n                    return this.removeAttr( 'hidden' ).removeAttr( 'aria-hidden' );\n                },\n\n                // $( x ).relevance( 'hide' )\n                // hides the element (does not check if element is already hidden)\n                hide: function() {\n                    this.attr({\n                        hidden: 'hidden',\n                        'aria-hidden': 'true'\n                    });\n\n                    if ( polyfillHidden ) {\n                        this.stop( true, true ).hide( 0, function() {\n                            var $this = $( this );\n                            // disable elements (including self if appropriate)\n                            $this.filter( elementsToDisable ).add( $this.find( elementsToDisable )).each(function() {\n                                this.setAttribute( 'disabled', 'disabled' );\n                            });\n                        });\n                    } else {\n                        this.filter( elementsToDisable ).add( this.find( elementsToDisable )).each(function() {\n                            this.setAttribute( 'disabled', 'disabled' );\n                        });\n                    }\n\n                    return this;\n                },\n\n                // $( x ).relevance( 'relevantWhen', { name: radio/checkbox/select, value: requiredValue, negate: false | true })\n                // sets up dependent relevance\n                // example: $( '#red' ).relevance( 'relevantWhen', { name: 'rgb', value: 'red' })\n                // example: $( '#red' ).relevance( 'relevantWhen', { id: 'rgb-red', value: 'red' })\n                // #red will be shown/hidden when '@name=rgb' value changes.\n                relevantWhen: function( config ) {\n                    var form,\n                        data,\n                        name,\n                        values;\n\n                    values = config.values || [config.value];\n\n                    if ( config.name ) {\n                        name = config.name;\n                    } else if ( config.id ) {\n                        name = document.getElementById( config.id ).name;\n                    } else if ( config.container ) {\n                        name = $( config.container ).find( 'select,:radio,:checkbox' ).attr( 'name' );\n                    }\n                    config.negate = config.negate === true;\n\n                    // find the form that has this control\n                    form = this.closest( 'form' );\n                    // get dependency map (create it if needed)\n                    data = form.data( 'relevance' );\n                    if ( typeof data !== 'object' ) {\n                        data = {};\n                        form.data( 'relevance', data );\n                    }\n                    if ( typeof data.dependencyMap !== 'object' ) {\n                        data.dependencyMap = {};\n                    }\n                    if ( typeof data.dependencyMap[ name ] !== 'object' ) {\n                        data.dependencyMap[ name ] = [];\n                        // setup event handlers for name\n                        formElementsByName( form[ 0 ], name )\n                            .filter( ':radio,:checkbox' )\n                            .bind( 'click', recalculateRelevance )\n                            .end()\n                            .filter( 'select' )\n                            .bind( 'change', recalculateRelevance )\n                        ;\n                    }\n                    // add or update relevance rule\n                    data.dependencyMap[ name ].push({\n                        items: this,\n                        values: values,\n                        negate: config.negate\n                    });\n\n                    // initial relevance\n                    this.relevance( 'relevant', valueInArray( values, $.map( formElementsByName( form[ 0 ], name ).filter( 'select,:checked' ).filter( ':visible' ), valueMap )) !== config.negate );\n\n                    return this;\n                },\n\n                // $( x ).relevance( 'instructions', options )\n                // sets up relevance handling based on text instructions\n                // options ::= { instructions: '.relevance', questions: '.questions > li' }\n                instructions: function( options ) {\n                    options = $.extend( {\n                        instructionSelector: '.relevance',\n                        questionSelector: '.questions > li'\n                    }, options );\n\n                    this.find( options.instructionSelector ).each(function() {\n                        var $this = $( this ),\n                            value = $this.text(),\n                            question = $this.closest( options.questionSelector ),\n                            toggle = question.prevAll( options.questionSelector ),\n                            i,\n                            answers,\n                            nestedToggles,\n                            match = false,\n                            negate = false;\n\n                        // pattern: (If different to <PREVIOUS QUESTION>)\n                        if ( /If different to/.test( value )) {\n                            // assume previous 'li' is the toggle\n                            match = true;\n                            toggle = toggle.eq( 0 );\n                            value = toggle.find( ':checkbox' ).val();\n                            negate = true;\n                        } else {\n                            value = value.replace( /^.*chose\\s+\\S([^'\"’]+)\\S\\s+above.*$/, '$1' );\n                            // which of the previous questions is the toggle?\n                            i = 0;\n                            while ( i < toggle.length ) {\n                                // does this item have the answer we need?\n                                answers = $.map( toggle.eq( i ).find( 'option,:radio,:checkbox' ), valueMap );\n                                if ( valueInArray( value, answers )) {\n                                    nestedToggles = toggle.eq( i ).find( options.questionSelector );\n                                    if ( nestedToggles.length ) {\n                                        toggle = $( nestedToggles.get().reverse() );\n                                        i = 0;\n                                    } else {\n                                        match = true;\n                                        toggle = toggle.eq( i ); // toggle.length becomes 1, loop will exit\n                                        i = 1; // exit loop\n                                    }\n                                } else {\n                                    i++;\n                                }\n                            }\n                        }\n                        if ( match ) {\n                            toggle = toggle.add( toggle.find( 'select,input' )).filter( 'select,:radio,:checkbox' );\n                            question.relevance( 'relevantWhen', { name: toggle.attr( 'name' ), value: value, negate: negate });\n                        }\n                    });\n                    return this;\n                }\n            };\n        // fallback (default) event handling\n        $( document ).bind( 'relevant irrelevant', function( event ) {\n            var target = $( event.target );\n            if ( event.type === 'relevant' ) {\n                target.relevance( 'show' );\n            } else {\n                target.relevance( 'hide' );\n            }\n        });\n\n        $.fn.relevance = function( method ) {\n            // Method calling logic\n            // http://docs.jquery.com/Plugins/Authoring#Plugin_Methods\n            if ( methods[method] ) {\n                return methods[ method ].apply( this, Array.prototype.slice.call(arguments, 1 ));\n            } else if ( typeof method === 'object' || !method ) {\n                // return methods.init.apply( this, arguments );\n                return this;\n            } else {\n                $.error( 'Method ' +  method + ' does not exist on jQuery.relevance' );\n            }\n        };\n    }( jQuery ));\n}\n(function( $ ) {\n    'use strict';\n\n    // window.console.log( 'file-size-validation.js' );\n\n    var displayFileSize;\n\n\n    // bail out if no file API support\n    if ( typeof $( '<input type=\"file\">' )[ 0 ].files !== 'object' ) {\n        // duplicate fsize instruction before submit button\n        $( '.max-fsize' ).each(function() {\n            var fsize = $( this ),\n                form;\n            form = fsize.closest( '.preamble' ).nextAll( 'form' ).eq( 0 );\n            form.find( '.actions' ).before( '<p>' + fsize.parent().html() + '</p>' );\n        });\n        return;\n    }\n\n\n    // display file size\n    displayFileSize = function( input ) {\n        input.nextAll( '.fsize' ).remove();\n        if ( input[ 0 ].files.length > 0 ) {\n            var filesize = input[ 0 ].files[ 0 ].size / 1024;\n\n            if ( filesize >= 1024 ) {\n                filesize = filesize / 1024;\n                input.after( '<span class=\"fsize\">File size: ' + ( Math.round( filesize * 10 ) / 10 ) + 'MB' + '</span>' );\n            } else {\n                input.after( '<span class=\"fsize\">File size: ' + ( Math.round( filesize * 10 ) / 10 ) + 'KB' + '</span>' );\n            }\n        }\n    };\n\n\n    // forms with max file size\n    $('.max-fsize').each(function() {\n        var fsize = $( this ),\n            form,\n            maxFileSize;\n\n        // read fsize, assume MB\n        maxFileSize = parseInt( fsize.text().replace( /\\D+/g, '' ), 10 ) * 1024 * 1024;\n        // window.console.log( 'found max fsize', maxFileSize );\n\n        // get form (closest form after the preamble)\n        form = fsize.closest( '.preamble' ).nextAll( 'form' ).eq( 0 );\n\n        form.find( ':file' ).on( 'change', function() {\n            var input = $( this );\n\n            displayFileSize( input );\n\n            // recalculate file sizes\n            var total = 0,\n                valid;\n            $( ':file', this.form ).each(function( index, element ) {\n                var size = element.files.length ? element.files[ 0 ].size : 0;\n                total += size; // total = total + size;\n            });\n\n            // is everything valid or invalid?\n            valid = total <= maxFileSize;\n\n            // window.console.info( 'file size validation:', total, '<', maxFileSize, total < maxFileSize );\n\n            $( ':file', this.form )\n            // update validity for :file inputs with values\n                .filter(function() {\n                    return !!this.value;\n                })\n                .each(function( index, element ) {\n                    element.setCustomValidity( valid ? '' : 'Attachments are too large' );\n                })\n                // blank :file inputs should not have a custom error\n                .filter(function() {\n                    return ! this.value;\n                })\n                .each(function( index, element ) {\n                    element.setCustomValidity( '' );\n                });\n\n        });\n\n    });\n\n}( jQuery ));\n(function( $ ) {\n    'use strict';\n\n    var xorConstraintSubmitHandler = function( event ) {\n            // has one of the required fields been answered?\n            var xorFields = event.data[ 0 ],\n                validationMessage = event.data[ 1 ],\n                xorConstraintMet = xorFields.filter(function() {\n                        return this.value.length > 1;\n                    }).length > 0\n                ;\n\n            xorFields.each(function() {\n                this.setCustomValidity(\n                    xorConstraintMet ? '' : validationMessage\n                );\n            });\n        },\n\n        xorConstraintChangeHandler = function( event, validationUiRefreshOnly ) {\n            if ( validationUiRefreshOnly === true ) {\n                // pass through to other change handlers\n                return;\n            }\n\n            var xorFields = event.data[ 0 ];\n\n            // constraint validity check\n            xorConstraintSubmitHandler( event );\n\n            // trigger validation UI  on other fields?\n            if ( event.type === 'change' ) {\n                xorFields.not( event.target ).triggerHandler( 'change', true );\n            }\n        }\n        ;\n\n\n    // plugin\n    $.fn.initXorConstraint = function( validationMessage ) {\n        // custom validation for XOR options\n        this.closest( 'form' ).on( 'submit', [this, validationMessage], xorConstraintSubmitHandler );\n        this.on( 'change', [this, validationMessage], xorConstraintChangeHandler );\n    };\n}(jQuery));\n/**\n * This file initialises forms\n */\n(function( $ ) { /* start closure */\n    'use strict';\n    var initValidation = function() {\n        window.initConstraintValidationAPI();\n        $( 'form' ).formValidation( 'validate' );\n    };\n    // now: hookup form validation\n    initValidation();\n    // document ready: hookup form validation\n    $( initValidation );\n    // instruction based relevance\n    if ( $( '.relevance', 'form' ).length > 0 ) {\n        $( 'form', '#content' ).relevance( 'instructions' );\n    }\n}(jQuery)); /* end closure */\n(function($) {\n    'use strict';\n\n\n    // extend jquery to 'toggle required'\n    $.fn.toggleRequired = function( required ) {\n        return this.each(function() {\n            var controls = $( this.form.elements[ this.name ] ),\n                question = $( this ).closest( '.questions > li' );\n\n            if ( required ) {\n                if ( question.find( 'abbr[title=\"(required)\"]' ).length === 0 ) {\n                    question.find( '.label' ).after(\n                        // create ABBR shiv for IE6\n                        $( document.createElement( 'abbr' ))\n                            .attr( 'title' , '(required)' )\n                            .text( '*' )\n                            .addClass( 'required' )\n                    );\n                }\n                controls.attr( 'required', 'required' );\n            } else {\n                controls.removeAttr( 'required' );\n                question.find( 'abbr[title=\"(required)\"]' ).remove();\n            }\n        });\n    };\n}(jQuery));\n/*globals qg*/\n// globals\nvar qg = { oldIE: false };\nqg.date = (function() {\n    'use strict';\n\n\n    var datePackage = {},\n\n        // Public holiday dates for 2010-2014 (viewed 2012-09-28)\n        // http://www.justice.qld.gov.au/fair-and-safe-work/industrial-relations/public-holidays/dates\n        qldHolidays = {\n            // 2010\n            '2010-01-01' : 'New Year’s Day',\n            '2010-01-26' : 'Australia Day',\n            '2010-04-02' : 'Good Friday',\n            '2010-04-03' : 'Easter Saturday',\n            '2010-04-05' : 'Easter Monday',\n            '2010-04-26' : 'Anzac Day',\n            '2010-05-03' : 'Labour Day',\n            '2010-06-14' : 'Queen’s Birthday',\n            '2010-12-25' : 'Christmas Day',\n            '2010-12-27' : 'Boxing Day',\n            '2010-12-28' : 'Christmas Day holiday',\n\n            // 2011\n            '2011-01-01' : 'New Year’s Day',\n            '2011-01-03' : 'New Year’s Day holiday',\n            '2011-02-26' : 'Australia Day',\n            '2011-04-22' : 'Good Friday',\n            '2011-04-23' : 'Easter Saturday',\n            '2011-04-25' : 'Anzac Day',\n            '2011-04-26' : 'Easter Monday',\n            '2011-05-02' : 'Labour Day',\n            '2011-06-13' : 'Queen’s Birthday',\n            '2011-12-25' : 'Christmas Day',\n            '2011-12-26' : 'Boxing Day',\n            '2011-12-27' : 'Christmas Day holiday',\n\n            // 2012\n            '2012-01-01' : 'New Year’s Day',\n            '2012-01-02' : 'New Year’s Day holiday',\n            '2012-02-26' : 'Australia Day',\n            '2012-04-06' : 'Good Friday',\n            '2012-04-07' : 'Easter Saturday',\n            '2012-04-09' : 'Easter Monday',\n            '2012-04-25' : 'Anzac Day',\n            '2012-05-07' : 'Labour Day',\n            '2012-06-11' : 'Queen’s Diamond Jubilee',\n            '2012-10-01' : 'Queen’s Birthday',\n            '2012-12-25' : 'Christmas Day',\n            '2012-12-26' : 'Boxing Day',\n\n            // 2013\n            '2013-01-01' : 'New Year’s Day',\n            '2013-01-28' : 'Australia Day holiday',\n            '2013-03-29' : 'Good Friday',\n            '2013-03-30' : 'Easter Saturday',\n            '2013-04-01' : 'Easter Monday',\n            '2013-04-25' : 'Anzac Day',\n            '2013-06-10' : 'Queen’s Birthday',\n            '2013-10-07' : 'Labour Day',\n            '2013-12-25' : 'Christmas Day',\n            '2013-12-26' : 'Boxing Day',\n\n            // 2014\n            '2014-01-01' : 'New Year’s Day',\n            '2014-01-27' : 'Australia Day holiday',\n            '2014-04-18' : 'Good Friday',\n            '2014-04-19' : 'Easter Saturday',\n            '2014-04-21' : 'Easter Monday',\n            '2014-04-25' : 'Anzac Day',\n            '2014-06-09' : 'Queen’s Birthday',\n            '2014-10-06' : 'Labour Day',\n            '2014-12-25' : 'Christmas Day',\n            '2014-12-26' : 'Boxing Day',\n\n            // 2015\n            '2015-01-01' : 'New Year’s Day',\n            '2015-01-26' : 'Australia Day holiday',\n            '2015-04-03' : 'Good Friday',\n            '2015-04-04' : 'Easter Saturday',\n            '2015-04-06' : 'Easter Monday',\n            '2015-04-25' : 'Anzac Day',\n            '2015-06-08' : 'Queen’s Birthday',\n            '2015-10-05' : 'Labour Day',\n            '2015-12-25' : 'Christmas Day',\n            '2015-12-26' : 'Boxing Day',\n            '2015-12-28' : 'Boxing Day holiday',\n\n            // 2016\n            '2016-01-01' : 'New Year’s Day',\n            '2016-01-26' : 'Australia Day holiday',\n            '2016-03-25' : 'Good Friday',\n            '2016-03-26' : 'Easter Saturday',\n            '2016-03-28' : 'Easter Monday',\n            '2016-04-25' : 'Anzac Day',\n            '2016-06-13' : 'Queen’s Birthday',\n            '2016-10-03' : 'Labour Day',\n            '2016-12-25' : 'Christmas Day',\n            '2016-12-27' : 'Christmas Day holiday',\n            '2016-12-26' : 'Boxing Day',\n\n            // 2017\n            '2017-01-01' : 'New Year’s Day',\n            '2017-01-02' : 'New Year’s Day holiday',\n            '2017-01-26' : 'Australia Day holiday',\n            '2017-04-14' : 'Good Friday',\n            '2017-04-15' : 'Easter Saturday',\n            '2017-04-17' : 'Easter Monday',\n            '2017-04-25' : 'Anzac Day',\n            '2017-06-12' : 'Queen’s Birthday',\n            '2017-10-02' : 'Labour Day',\n            '2017-12-25' : 'Christmas Day',\n            '2017-12-26' : 'Boxing Day',\n\n            // 2018\n            '2018-01-01' : 'New Year’s Day',\n            '2018-01-26' : 'Australia Day holiday',\n            '2018-03-30' : 'Good Friday',\n            '2018-03-31' : 'Easter Saturday',\n            '2018-04-02' : 'Easter Monday',\n            '2018-04-25' : 'Anzac Day',\n            '2018-05-07' : 'Labour Day',\n            '2018-10-01' : 'Queen’s Birthday',\n            '2018-12-25' : 'Christmas Day',\n            '2018-12-26' : 'Boxing Day'\n        }\n        ;\n\n\n    // is a public holiday\n    datePackage.isPublicHoliday = function( date ) {\n        var d = date.getDate(),\n            m = date.getMonth() + 1,\n            y = String( date.getFullYear() ),\n            dateString = y + ( m < 10 ? '-0' : '-' ) + m + ( d < 10 ? '-0' : '-' ) + d\n            ;\n\n        // return true, date is a public holiday\n        // TODO, if not a state-wide public holiday and given a latlong, check if it is a show holiday\n        // return false, date is not a public holiday\n        // TODO\n        // return undefined, it is not known if the date is a public holiday (beyond 2 years in the future?)\n\n        return !!qldHolidays[ dateString ];\n    };\n    return datePackage;\n}());\n(function($) {\n    'use strict';\n\n\n    // find any textareas with a word count\n    $( '.hint' ).filter(function() {\n        return ( /Maximum:\\s+\\d+\\s+words/ ).test( $( this ).text() );\n    }).each(function() {\n        var hint = $( this ),\n            max = parseInt( hint.text().replace( /Maximum:\\s+(\\d+)\\s+words/, '$1' ), 10 ),\n            textField = hint.closest( 'label' ).nextAll( 'textarea' ),\n            counter;\n\n        // add counter\n        counter = $( '<span/>' ).generateId( 'word-count' );\n        //eg. Maximum: 50 words (50 remaining)\n        hint.append( ' (', counter, ' remaining)' );\n\n        textField.simplyCountable({\n            counter: '#' + counter[ 0 ].id,\n            countType: 'words',\n            countDirection: 'down',\n            maxCount: max,\n            onOverCount: function() {\n                textField[ 0 ].setCustomValidity( 'Too many words' );\n            },\n            onSafeCount: function() {\n                textField[ 0 ].setCustomValidity( '' );\n            }\n        });\n    });\n}( jQuery ));\n\n//# sourceMappingURL=qg-forms.js.map\n\n\n\n// WEBPACK FOOTER //\n// ./src/assets/js/components/forms.js","'use strict';\nvar activeSideNav = (function () {\n    // const currentFilename = window.location.pathname.substr(window.location.pathname.lastIndexOf('/') + 1);\n\n    function refineText (text) {\n        return text.toLowerCase().replace(/ /g, '');\n    }\n\n    function getCurrentTitle () {\n        var currentPageTitle = '';\n        if ($('#guide-title').length > 0) {\n            currentPageTitle = $('#guide-title').text();\n        } else if ($('meta[name=\"DCTERMS.alternative\"]').length > 0 && refineText($('meta[name=\"DCTERMS.alternative\"]').eq(0).attr('content')) !== '') {\n            currentPageTitle = $('meta[name=\"DCTERMS.alternative\"]').eq(0).attr('content');\n        } else {\n            const titleClone = $('h1', '#qg-primary-content').eq(0).clone();\n            titleClone.find('.page-number').remove();\n            currentPageTitle = titleClone.text();\n        }\n        return refineText(currentPageTitle);\n    }\n\n    function highlightNavItem () {\n        var currentPageTitle = getCurrentTitle();\n        $('#qg-section-nav ul>li').each(function () {\n            if (refineText($(this).text()) === $.trim(currentPageTitle)) {\n                $(this).find('a').addClass('active');\n            }\n        });\n    }\n\n    return {\n        highlightNavItem: highlightNavItem\n    };\n})();\n\nmodule.exports = activeSideNav;\n\n\n// WEBPACK FOOTER //\n// ./src/assets/js/components/nav/current-secondary-nav.js","/* ========================================================================\n* General QLD GLUE utilities\n* [TODO: Write about what this is for, to make it easier for future\n* developers to know what to put into it, and what not to.]\n* ======================================================================== */\n\nconst utils = (function () {\n    // BREAKPOINTS //\n    var breakpoints = {\n        bsXs: 480,\n        bsSm: 768,\n        bsMd: 992,\n        bsLg: 1200\n    };\n\n    return {\n        breakpoints: breakpoints\n    };\n})();\n\nexport default utils;\n\n\n\n// WEBPACK FOOTER //\n// ./src/assets/js/components/global/utils.js","/* ========================================================================\n* Bootstrap Javascript Extensions\n* Extends bootstrap functionality where necissary to comply with QLD GOV requirements.\n* ======================================================================== */\n\n(function($) {\n  \"use strict\";\n\n    // this[this.$element.hasClass('in') ? 'hide' : 'show']()\n    var collToggle = $.fn.collapse.Constructor.prototype.toggle;\n    $.fn.collapse.Constructor.prototype.toggle = function(){\n        if( this.$trigger.is(\"input[type=radio]\") ) {\n            if( this.$trigger.prop(\"checked\", true) && ! this.$element.attr('aria-expanded') != true ) {\n                this.show();\n            }\n        } else {\n            collToggle.call(this); // Default behaviour\n        }\n    }\n})(jQuery);\n\n\n\n// WEBPACK FOOTER //\n// ./src/assets/js/components/global/bootstrap-extensions.js","/**\n* Adds page and user details to hidden inputs on the feedback form\n**/\n\nfunction addHiddenInput (key, val) {\n  var newHiddenInput = $('<input type=\"hidden\"/>');\n  newHiddenInput.attr('name', key);\n  newHiddenInput.attr('value', val);\n  $('#feedback-hidden-inputs').append(newHiddenInput);\n}\nfunction init (franchiseTitle) {\n  addHiddenInput('franchise', franchiseTitle);\n  addHiddenInput('page-title', $(document).find('title').text());\n  addHiddenInput('page-url', window.location.href);\n  addHiddenInput('page-referer', encodeURIComponent(document.referrer));\n  addHiddenInput('rspUsrAgent', navigator.userAgent);\n}\nmodule.exports = {\n  init: init\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/assets/js/components/feedback-form.js","function init () {\n    var links = $('.qg-share-link');\n    var pageTitle = $(document).find('title').text();\n    links.each(function (index, link) {\n        link.href = link.href.replace('PAGE_TITLE', pageTitle);\n    });\n}\nmodule.exports = {\n    init: init\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/assets/js/components/share-links.js"],"sourceRoot":""}